Configure Your Controller: Single Click, Double Click, Long Press
By Jonas Bark · August 21, 2026
A CYCPLUS BC2 has two buttons. A Zwift Click V2 has ten. Either way you eventually run out — until you notice that BikeControl doesn't map buttons, it maps gestures on buttons.
Every button carries three separate assignments:
- Single Click — press and let go
- Double Click — two presses in quick succession
- Long Press — hold it
Three actions per button. A two-button shifter becomes six. A Zwift Click V2's ten buttons become thirty. A Zwift Ride's eighteen stretch past fifty. And none of it requires you to learn a new screen: the whole thing is two taps from the main page.
Still choosing hardware? We compared every controller worth putting on a handlebar — and the button count in that post is the number this one multiplies by three.
This is the second post in our Tutorials series, after the Local connection method. Same format: one feature, start to finish, with the real screens you'll see.
The short version
- Tap a button on the controller picture on the main page → pick the gesture → assign the action.
- Or open Edit → Controller Settings → Button Mapping for the full table.
- Or just press the button on the controller with the mapping table open — BikeControl opens the editor for the button you pressed.
- One action per button comes with Base. Putting three actions on one button is a BikeControl Pro feature.
Way in #1 — straight from the main page
BikeControl's main page draws your controller as itself: the real contour, with its real buttons in their real places. That picture isn't decoration. Every button on it is tappable.

That's a Zwift Click V2 above: two pucks, ten buttons, drawn where they actually sit. The small badge on a button tells you what it currently does — shift up, shift down and steering, straight from the MyWhoosh keymap BikeControl ships. Tap one and you get its three gestures, with whatever each is currently set to:

Pick a row, and the button editor opens as a drawer on the right. That's the whole path: card → button → gesture → action. Two taps before you're editing anything.
Press a button on the real controller and the matching one on the card pulses. That is the quickest way to work out which drawing is which button before you change anything — especially on a Click V2, a Play or a Ride, where there are a lot of them.
The card is drawn for disconnected controllers too, just faded — mapping a button is a keymap edit, not a radio operation, so you don't have to be on the bike with the controller awake to change it.
Way in #2 — the Controller Settings page
Tap Edit on the same card and you get the full page: the device's own state at the top — for a Click V2 that includes its unlock mode — and then Button Mapping, every button and every gesture in one table.

This is the screen to use when you're setting up rather than tweaking — it shows every button in one list, plus the keymap picker (which app's mapping you're editing), the sync status, and Reset to defaults if you want to undo an evening of experiments.
The table itself is three tiles per button, ten buttons deep:

That's the shipped MyWhoosh mapping, untouched apart from one addition: the plus button has picked up a double click on H, MyWhoosh's show/hide-UI shortcut, on top of the shift up it already had. Everything else still has two gestures going spare.
On a phone, or in a narrow window, the three tiles stack instead of sitting side by side. Same three gestures either way.
Way in #3 — just press the button
The mapping table listens to your controller. With it open, press a button on the actual controller and BikeControl opens the editor for that button. Press a different one and the editor follows along.
It's the fastest way to map an unfamiliar controller: hold the thing, press the button you want to change, assign it, press the next one.
What each gesture actually is
Precise definitions, because the differences matter once you have more than one on a button:
Single Click is a press followed by a release. If the button has no double-click action, it fires on release, immediately. If it does have one, BikeControl has to wait to find out whether a second press is coming — see below.
Double Click is a second press within 320 ms of the first. Miss the window and you get two single clicks.
Long Press fires after you have held the button for 550 ms. It is not a click: the press and the release are dispatched separately, so the action stays held for as long as you hold the button. A held key stays down. A held on-screen tap keeps a finger on the screen. Let go and it releases.
The one cost worth knowing about: giving a button a double-click action delays its single click by 320 ms, because BikeControl has to wait out the double-click window before it can be sure. For shifting, that lag is noticeable. Put your shift on single click and your second action on double click — not the other way round.
Two more rules the app applies on its own:
- On/Off buttons never get a long press. Holding the power button on a Zwift Play is how you switch it off; BikeControl stays out of the way.
- Long press repeats your single click, by default, with Pro. If a button has a single-click action and no long-press action, holding it repeats the single click every 250 ms — hold to shift through the cassette instead of clicking eight times. You can see it as its own card in the editor, and switch it off by assigning long press something else:

Assigning the action
Whichever way you got here, the editor is the same. It names the button and the gesture at the top — Editing Double Click — and below that lists everything that gesture can be pointed at, the trainer app's own actions first:

It's a scrolling drawer, and what's in it depends on how BikeControl reaches your trainer app:
- OpenBikeControl actions and Trainer Direct Control, at the top — real shift, steer, menu and camera commands for apps that speak the protocol, with no keyboard involved. That's what MyWhoosh uses, which is why the shift buttons above read Shift Up rather than a key name
- Local / Remote Setting, further down — a keyboard shortcut, a click on the screen, or a media key. That's the Local connection method, covered in its own post, and it's where the
Hon that double click came from - Other Actions, at the bottom — screenshots, scripts, Android system actions and the rest
The first time you edit one of the keymaps BikeControl ships, it quietly copies it into a profile of your own — MyWhoosh (Copy) — and tells you so. The shipped defaults stay untouched, so Reset to defaults always has something to go back to. With Pro, your own profiles sync across your devices.
Where Pro comes in
BikeControl is free to try, and paid in two shapes: Base, a one-time purchase, and Pro, a subscription. Button mapping itself sits in Base — the shipped keymaps, the whole mapping table, and any one gesture per button, unlimited presses.
Three actions on one button is a Pro feature — it's on the pricing page under exactly that name. Assign a second gesture without Pro and BikeControl says so, up front, with both ways out on the same dialog:

Replace Existing clears the button's other gestures and takes you into the editor, so without Pro you can still change which gesture a button uses — you just can't stack them. Go Pro keeps both. Either way the button ends up doing something; nothing is left half-configured.
In the mapping table, the extra gestures carry an orange PRO badge so you can see at a glance which parts of your setup depend on the subscription. The long-press repeat carries one too, as do media keys, shortcuts, screenshots, and a mapping profile that syncs between your phone and your PC.
Controllers that can't report a hold
Some controllers don't tell BikeControl when a button is released — a SRAM AXS lever, a ThinkRider VS200 and keyboard-style HID devices on Android all send one edge per press and nothing on the way back up. There is no hold for BikeControl to measure.
Rather than dropping long press for those devices, BikeControl turns it into a toggle: the first press sends the key down, the second press sends it up. The app tells you so, in the editor, on exactly the devices it applies to:

That's genuinely useful for anything you want to hold — steering, a look-back, a held brake — on a controller that physically can't hold anything.
The trade-off is on the same button: while a toggle-mode button has a long-press action, its single and double click are switched off. One button cannot both toggle a held key and fire click actions, because every press has to mean one or the other. The table shows those two tiles empty:

It's per button, not per device: the second lever in that shot has no long-press action, so it still does ordinary single clicks. Clear the long press and the click gestures come straight back.
A setup worth stealing
For a Click V2 on MyWhoosh, this is a good place to land:
| Button | Single Click | Double Click | Long Press |
|---|---|---|---|
| Plus (right) | Shift up | Toggle the UI (H) | (repeat shift up) |
| Minus (left) | Shift down | Screenshot | (repeat shift down) |
| Y | Menu (shipped) | Change camera angle | — |
| Z | — | — | Ride On Bomb (shipped) |
Shifting keeps its instant single click. The double clicks carry the things you actually reach for mid-ride. And long press on the shifters, left alone, gives you hold-to-shift without configuring anything.
Troubleshooting
My double click sometimes registers as two single clicks. The second press has to land within 320 ms. It's a deliberate press-press, not a leisurely one.
Shifting feels laggy since I added a double click. That's the 320 ms window, and it's unavoidable: BikeControl cannot know a second press isn't coming without waiting for it. Move the second action to long press, or to the other button.
Long press does nothing. Three possibilities: it's an on/off button (long press is suppressed there on purpose), the controller doesn't report holds (see toggle mode above), or you're holding it for less than 550 ms.
Holding the button repeats when I don't want it to. That's the long-press repeat, on by default with Pro. Assign long press an action of its own and the repeat stops.
I changed a mapping and my other device didn't get it. Profile sync is a Pro feature, and it syncs your own profiles — the copy BikeControl made when you first edited a shipped keymap.
I want the shipped mapping back. Reset to defaults, at the bottom of Controller Settings. Your edits live in a copied profile, so the originals were never overwritten.
Frequently Asked Questions
How many actions can one button have? Three: single click, double click and long press. Keeping more than one of them assigned at the same time is what BikeControl Pro calls three actions per button.
What does button mapping cost? BikeControl is free to try, so you can map a controller and ride before paying anything. Beyond that, the shipped keymaps, the mapping table and one action per button are part of Base, the one-time purchase. Pro, the subscription, adds the second and third gesture on a button, the long-press repeat, media keys, shortcuts, screenshots, and profile sync across your devices.
Do I have to be connected to change a mapping? No. The controller card and the mapping table both work with the controller switched off — the card just renders faded. Only the "press the button to open its editor" shortcut needs a live controller.
Which controllers support all three gestures? Anything that reports both press and release: the Zwift Click, Click V2, Play and Ride, the CYCPLUS BC2, desktop gamepads, and most Bluetooth controllers. SRAM AXS shifters, the ThinkRider VS200 and keyboard-style HID devices on Android report only the press, so their long press becomes the two-tap toggle described above. For what each of them is like to actually ride with, see our controller comparison.
Can different trainer apps have different mappings? Yes — that's what the keymap picker at the top of Button Mapping is for. Each app has its own profile, BikeControl ships defaults for the ones it knows, and you can create a new one from scratch.
Does this work with the Local connection method too? Yes. Gestures and actions are separate things: the gesture decides when something fires, the action decides what. Single click can send a native shift command while double click presses a keyboard shortcut. See the Local connection method tutorial for the keyboard, click and media-key side of it.