USB Output Interface¶
The USB output interface lets Joypad adapters emulate various USB gamepads. Any connected controller (USB, Bluetooth, WiFi, or native) is translated into the selected output protocol.
Used by: usb2usb, bt2usb, wifi2usb, snes2usb, n642usb, gc2usb, controller
Web Configuration¶
Connect the adapter to a computer and open config.joypad.ai in a WebSerial-capable browser (Chrome, Edge). The web app communicates over the adapter's CDC serial interface to provide:
- Mode switching - Change USB output mode without button combos
- Profile management - Create, edit, and assign button remapping profiles
- Input monitor - Real-time view of controller inputs and processed outputs
- Rumble test - Test vibration on connected controllers
- Player management - View connected controllers and player assignments
- Bluetooth management - View bond status, clear pairings (BT-capable boards)
- Settings - View/reset device settings
- Firmware update - Reboot into BOOTSEL for drag-and-drop UF2 flashing
The CDC protocol uses JSON commands over a framed binary transport. Two CDC ports are exposed: Data (commands/responses) and Debug (printf logging).
Output Modes¶
Mode Cycling¶
- Double-click the board button to cycle modes
- Triple-click to reset to SInput (default)
- Mode is saved to flash and persists across power cycles
- Switching triggers USB re-enumeration (brief disconnect)
Cycle order: SInput -> XInput -> PS3 -> PS4 -> Switch -> Keyboard/Mouse -> SInput
Mode Reference¶
| Mode | Emulates | VID:PID | Use Case |
|---|---|---|---|
| SInput | Joypad HID Gamepad | 2E8A:10C6 | PC/Mac/Linux (default, Steam-compatible) |
| XInput | Xbox 360 Controller | 045E:028E | PC and Xbox 360 console |
| PS3 | DualShock 3 | 054C:0268 | PC and PS3 console |
| PS4 | DualShock 4 | 054C:05C4 | PC (console requires auth dongle) |
| Switch | Pro Controller | 057E:2009 | Nintendo Switch (docked USB) |
| Keyboard/Mouse | HID KB + Mouse | - | Accessibility / desktop use |
Additional modes (not in cycle, accessible via web config):
| Mode | Emulates | Use Case |
|---|---|---|
| PS Classic | PS Classic Controller | PlayStation Classic mini console |
| Xbox Original | Xbox Controller S | Original Xbox console |
| Xbox One | Xbox One Controller | Xbox One/Series (GIP protocol) |
| XAC | Xbox Adaptive Controller | Accessibility |
| GC Adapter | Wii U GC Adapter | Wii U / Switch GameCube mode |
| HID | Generic DInput | Legacy, replaced by SInput |
Feature Support¶
| Mode | Rumble | Player LED | RGB | Motion | Auth |
|---|---|---|---|---|---|
| SInput | L+R | - | - | Gyro/Accel | - |
| XInput | L+R | 1-4 | - | - | XSM3 (Xbox 360) |
| PS3 | L+R | 1-4 | - | Gyro/Accel | - |
| PS4 | L+R | - | Lightbar | - | Passthrough |
| Switch | - | - | - | - | - |
| KB/Mouse | - | - | - | - | - |
Feedback (rumble, LED, RGB) is forwarded back to the connected input controller. For example, Xbox 360 player LED assignment will set the corresponding color on a DualSense lightbar.
Xbox 360 Console Compatibility¶
XInput mode works on real Xbox 360 hardware. The adapter authenticates using XSM3 (Xbox Security Method 3), the same protocol used by licensed wired controllers.
What works: - Full gamepad input (buttons, sticks, triggers) - Rumble feedback - Player LED assignment - Guide button
How it works: The adapter presents a full 4-interface Xbox 360 controller descriptor (gamepad, audio stub, plugin stub, security). On connection, the console initiates an XSM3 challenge-response handshake over vendor control requests. The adapter handles this using libxsm3. Authentication completes in ~2 seconds (LED goes from blinking to solid).
CDC Command Reference¶
Commands are JSON objects sent over CDC port 0. Format: {"cmd":"COMMAND.NAME", ...params}
| Command | Description |
|---|---|
INFO |
Get device info (app, version, board, serial) |
PING |
Connectivity check |
REBOOT |
Restart the adapter |
BOOTSEL |
Reboot into UF2 flash mode |
MODE.GET |
Get current output mode |
MODE.SET |
Set output mode (triggers re-enumeration) |
MODE.LIST |
List all available modes |
PROFILE.LIST |
List button remapping profiles |
PROFILE.GET |
Get profile details |
PROFILE.SET |
Create/update a profile |
PROFILE.SAVE |
Save profiles to flash |
PROFILE.DELETE |
Delete a profile |
PROFILE.CLONE |
Duplicate a profile |
INPUT.STREAM |
Toggle real-time input event streaming |
SETTINGS.GET |
Get device settings |
SETTINGS.RESET |
Reset settings to defaults |
PLAYERS.LIST |
List connected controllers |
RUMBLE.TEST |
Send test rumble to a player |
RUMBLE.STOP |
Stop rumble on a player |
BT.STATUS |
Bluetooth connection status (BT builds) |
BT.BONDS.CLEAR |
Clear all Bluetooth pairings (BT builds) |