A simple, lightweight android app that reads a gamepad plugged into the phone via USB-C and sends its input over Bluetooth to a PC, so the phone behaves like a normal Bluetooth controller, giving new purpose to gamepads that are USB-C only.
| Live controller view | Buttons, sticks, D-pad and triggers light up as you press them |
| Standard HID gamepad | The PC sees the phone as a normal Bluetooth gamepad |
| Controller detection | Shows the name of the connected gamepad and the connection status |
| No dependencies | Pure Kotlin and the Android SDK |
Supported inputs: 16 buttons, 1 hat switch (D-pad), 2 analog sticks, 2 analog triggers.
- Android delivers the gamepad's key and motion events to the app.
- The app stores them in a single state object and packs it into a 9-byte HID report.
- Using the
BluetoothHidDeviceAPI, the phone registers as a gamepad and sends the report to the paired PC.
Requirements: A phone running Android 9 or later (the app opens on Android 7+, but Bluetooth sending needs Android 9+), and a USB-C gamepad.
- Plug in the gamepad and grant the Bluetooth permissions.
- Tap Make Discoverable, then pair the phone from your PC's Bluetooth settings.
- Test the gamepad on Windows with any application.
app/src/main/
├── java/com/example/gamepadbridge/
│ ├── MainActivity.kt Screen, permissions, event dispatch
│ ├── GamepadInput.kt Reads buttons and axes from the controller
│ ├── GamepadState.kt Current state and HID report packing
│ ├── GamepadView.kt Custom view that draws the controller
│ └── HidGamepad.kt Bluetooth HID device and report sending
└── res/ Layout, colors, strings, drawables
- The app must stay open on screen, because Android only delivers gamepad events to the foreground app.
- Bluetooth HID support varies between phone manufacturers.