-
Notifications
You must be signed in to change notification settings - Fork 0
Controller Routing
Run:
.\couchlink.exeOn the Basic tab, choose the Pico you want to use. Pick Start streaming with Controller 1 for the normal one-controller path, or Choose controller and stream to select Controller 1, 2, 3, or 4 for that Pico. Before streaming starts, choose the Pico input mode: Auto, Xbox, DInput / PlayStation, Maple, or Keyboard. Xbox then lets you choose Auto Xbox, Xbox 360, or Xbox One; DInput / PlayStation lets you choose Auto DInput, PS3, or PS4.
For one Pico, use Start streaming with Controller 1.
For two or more Picos, Basic keeps actions under each Pico so you do not run a broad multi-Pico action by accident. Start the Pico you want, or use direct commands for scripted multi-Pico layouts:
.\couchlink.exe run --all
.\couchlink.exe run --route 1=07D37EB6 --route 2=523861E6Basic streaming actions save the selected layout. After that, couchlink.exe run uses the saved layout without asking again, which is what the Startup shortcut uses. Direct run --all and run --route ... commands use the layout on the command line.
Auto mode is for adapters where you do not know which gamepad USB shape works. It tries the Pico's gamepad personas, watches the Pico's USB diagnostics, and keeps the first mode where the adapter configures the USB device and accepts input reports.
Run:
.\couchlink.exe autoWith several Picos, pick one or scan all:
.\couchlink.exe auto --pico 07D37EB6
.\couchlink.exe auto --allAuto tries the current gamepad mode first, then Xbox 360, Xbox One, PS3, PS4, and Maple without trying Keyboard. Keyboard is separate because it streams keystrokes instead of the Parsec/XInput gamepad state. Add --no-stream to select a mode without starting a stream.
Auto can prove that the adapter configured and polled the Pico's USB device. It cannot prove that a Dreamcast game accepted the translated Maple-side input; use the game's controller test or gameplay for that final check.
XInput mode is the default gamepad persona. The Pico presents a wired Xbox 360-style USB controller and consumes the normal Parsec/XInput gamepad state from the PC. xbox360 is a direct alias for the same persona.
Switch a Pico to XInput mode and start streaming:
.\couchlink.exe xinputor:
.\couchlink.exe xbox360With several Picos, pick one:
.\couchlink.exe xinput --pico 07D37EB6Add --no-stream to change the persona without starting a stream.
Xbox One mode presents an Xbox One-compatible USB gamepad persona and consumes the same Parsec/XInput controller source as Xbox 360 mode. It is useful for adapters that support Xbox One-style devices but do not poll the wired Xbox 360 shape.
Switch a Pico to Xbox One mode and start streaming:
.\couchlink.exe xboxoneTo try only the Xbox family and keep whichever one the adapter polls:
.\couchlink.exe xbox --no-streamUse the guided menu's Xbox choice for the family prompt. Add --no-stream to change the persona without starting a stream.
Some console games need a keyboard instead of a controller -- Typing of the Dead on the Dreamcast is the usual reason. A Pico can present itself as a USB keyboard instead of an XInput gamepad, and the bridge forwards the remote player's typing to it.
Only the remote Parsec player's keystrokes are forwarded -- the bridge captures Parsec-injected input, not anything typed locally at the host PC. This matches the controller path, which reads Parsec's virtual gamepad rather than a local one.
Switch a Pico to keyboard mode and start streaming:
.\couchlink.exe keyboardWith one Pico, that is all you need. With several, pick one:
.\couchlink.exe keyboard --pico 07D37EB6The Pico stores the choice and reboots into it, so after a one-time switch a plain couchlink.exe run keeps streaming the keyboard to that board. Switch back to XInput the same way:
.\couchlink.exe xinputAdd --no-stream to either command to change the persona without starting a stream. The switch happens over Wi-Fi, so the Pico can stay plugged into the console the whole time.
A keyboard adapter is required on the console side: the Pico presents a standard USB HID boot keyboard, and the console adapter (for example a USB4MAPLE/Pico2Maple feeding a Dreamcast) maps it to the console's native keyboard. While streaming, the status line shows the keyboard instead of a controller:
Keyboard -> 07D37EB6 | source live | out +60 total 900 | in 30 (reply 0.2s ago) | keys mods=0x02 keys=[0x04]
Maple mode is for Dreamcast adapters that already accept wired Xbox 360 controllers and translate them to Dreamcast Maple. It uses the same Parsec/XInput controller source and the same Xbox 360-compatible USB reports as XInput mode, but keeps a separate persisted mode and status label for Dreamcast setups.
Switch a Pico to Maple mode and start streaming:
.\couchlink.exe mapleWith several Picos, pick one:
.\couchlink.exe maple --pico 07D37EB6Switch back to XInput mode with:
.\couchlink.exe xinputAdd --no-stream to change the persona without starting a stream. While streaming, Maple mode status still shows a controller source and the live XInput button/axis values because those are the values sent to the Maple-capable adapter.
DInput mode is a PlayStation-family compatibility selector for USB4MAPLE-style adapters that accept PS3 or PS4 HID controllers but do not accept the Pico's Xbox 360-compatible USB shape. It uses the same Parsec/XInput controller source as XInput and Maple mode, then cycles PS3 and PS4 until the adapter polls one.
Switch a Pico to DInput mode and start streaming:
.\couchlink.exe dinputTo pin a specific PlayStation persona:
.\couchlink.exe ps3
.\couchlink.exe ps4With several Picos, pick one:
.\couchlink.exe dinput --pico 07D37EB6Switch back to XInput mode with:
.\couchlink.exe xinputAdd --no-stream to change the persona without starting a stream. PS3 is tried before PS4 because USB4MAPLE field reports more consistently recommend PS3 mode for generic DInput-style compatibility. Rumble is not implemented for these personas.
A few Parsec-side settings gate guest keyboard input:
- Keyboard permission. Guests default to controller-only. The host must grant the guest keyboard and mouse permission (click the guest's profile picture during the session, or set default permissions in Parsec).
- Approved Apps. If the host has Approved Apps enabled, guest input is blocked unless the focused window is on the whitelist. It is off by default.
- Same session. Run the bridge in the same signed-in Windows session Parsec is injecting into. It will not see input across the lock screen, a UAC/secure desktop prompt, or a different user session.
- Layout and lock keys. The character a key produces follows the host keyboard layout, so a client/host layout mismatch (for example AZERTY vs QWERTY) can type the wrong characters, and Caps/Num Lock state can drift between the two ends.
To confirm the bridge is capturing the player's keystrokes, run with verbose logging while the guest types:
.\couchlink.exe keyboard -vvA single keyboard: capturing Parsec-injected input line confirms the hook is seeing the guest's input; -vv then logs each captured key. If that line never appears while the guest is typing, the input isn't being injected the way the bridge expects -- check the Parsec settings above.
Parsec passes guest gamepads to the host through its virtual USB gamepad driver. On Windows, those gamepads normally appear as Xbox 360 controllers, which CouchLink reads as XInput slots. Parsec's gamepad setup guide also covers virtual gamepad setup and controller order management.
If multiple guests join with controllers, Windows can expose multiple XInput slots. CouchLink can route up to four slots:
| CouchLink source | Windows XInput slot |
|---|---|
| Controller 1 | Slot 0 |
| Controller 2 | Slot 1 |
| Controller 3 | Slot 2 |
| Controller 4 | Slot 3 |
While streaming, the terminal prints status lines like:
Controller 1 -> 07D37EB6 | source live | out +125 total 4300 | in 70 (reply 0.2s ago) | state buttons=0x1000 ...
Use this to confirm:
- The source controller is live.
- Packets are leaving the PC.
- The Pico is replying.
- Button and stick values change when the player presses input.
The menu is the normal path. These commands are for scripts and launchers:
.\couchlink.exe run --all
.\couchlink.exe run --route 1=07D37EB6 --route 2=523861E6
.\couchlink.exe run --route 1=192.168.50.4
.\couchlink.exe run --pico 07D37EB6
.\couchlink.exe run --pico 192.168.50.4Use .\couchlink.exe test discover --all to list Pico UIDs before writing a route command.
If broadcast discovery fails but the router shows the Pico's IP, use
.\couchlink.exe test discover --ip 192.168.50.4 or choose Enter Pico
IP manually in the guided menu.
In normal use, the Pico USB side plugs into the console adapter. If you plug the Pico into the same Windows PC for testing, Windows may see the Pico itself as an Xbox controller. Do not pick that Pico output as the source controller; pick the Parsec virtual controller or a local test controller instead.