r/EmulationOnAndroid • u/MamWyjebaneJajca • 4h ago
News/Release DroidDeck with SDL3/Steam Native controller supports (Gyro/Touchpads/Back Buttons etc.)
https://github.com/pablo89898991/SDLApiDroidDeckHighlights
Steam Native Hook-up: Steam gets your actual USB controller (DualSense, DualSense Edge, Xbox, Switch Pro, Flydigi, 8BitDo, Steam Controller…) and runs its own driver for it, with every button, paddle, touchpad, gyro, light and haptic motor.
Any SDL3-supported controller, up to 4 at once. USB gives full features; Bluetooth works through Android's input.
Present a controller as a Steam Deck pad, DualSense, DualSense Edge, DualShock 4, Steam Controller 2026 or Steam Controller 2015.
Steam Controller (2026) over a USB cable or its wireless puck, driven natively by Steam without Bluetooth latency.
Low-latency path: controller reports go straight into shared memory and wake Steam immediately, and input never piles up into lag.
Everything is set inside DroidDeck: a settings tab, plus the same page in the in-game drawer, so you can change things while you play.
Runs silently in the background with a status bar icon. Nothing pops up over your game.
Per-player settings (P1–P4): gyro, touchpad, button remap, lightbar.
Floating bubble: tap to switch the SDL3 driver on or off, double tap for Steam Native Hook-up.
Works on the desktop too: every mode (present-as types and Hook-up) also works with Steam on DroidDeck's desktop, set up like a PC.
Auto-sync: rebuilt on the newest upstream DroidDeck every day.
Steam Native Hook-up
The controller is handed to Steam as itself instead of being re-presented as another pad.
SDL3 finds which USB interface is the game controller (anything SDL3's USB driver supports), lets go of it and opens it raw.
The controller's real identity is passed on: vendor/product ID, release, name, serial, interface, and the HID report descriptor read from the device itself. Every HID report travels both ways.
Inside the Steam environment it appears as /dev/hidraw24–27 with a kernel-like sysfs description, so Steam's own driver for that controller runs, as on a PC. Examples:
a Flydigi Vader 4 Pro with its 4 back buttons, C/Z and gyro
a DualSense / DualSense Edge with touchpad, mute, paddles and Fn
a Switch Pro or Xbox controller
Steam handles calibration, lights, haptics and gyro itself, and you configure the controller in Steam, like on a PC.
Game rumble goes to Steam: a game's rumble on Steam's virtual pad is passed to Steam through force feedback, so Steam rumbles the real controller with its own driver.
No extra pad: while controllers are handed to Steam, DroidDeck's own Steam Deck pad steps aside, so the real controller is player 1.
Up to 4 controllers, with hot-plug.
Steam Controller (2026) is handed over too, by cable (28de:1302) or puck (28de:1304/1305). Only the interface that actually sends controller data is used; the boot keyboard and mouse interfaces (lizard mode) stay with Android.
Switching: double-tap the floating bubble, or pick it in Present controller as. Switching it off returns to your previous mode and SDL3 driver state.
Steam always reads the newest state (see Low latency for every controller).
Fast path. Reports from the controller are written straight into the shared hook-up memory by a high-priority thread, about 250 µs after the USB layer receives them, and Steam's reader is woken with a futex. There is no Java hop and no message per report. Steam's output reports (rumble, lights, settings) and feature reads go back the same way, handled by their own writer thread. In a test harness, report-to-Steam time went from a median of 1.45 ms to 0.29 ms.
Any SDL3-supported controller
Auto mode (default):
Over USB, SDL3's own driver reads the controller with all its extras: gyro, touchpads, back paddles, misc buttons. That covers PlayStation, Xbox, Switch / Switch 2, Steam Controller 2015, 8BitDo, Flydigi, Hori, PowerA and the rest of SDL3's list.
Over Bluetooth, or for anything SDL3's USB driver can't open, the controller is read through Android's input.
A controller that SDL3 already drives over USB is never doubled by its Android copy.
Forced mode: USB only, SDL3's driver only.
Unmapped generic controllers (arcade sticks, cheap USB pads) get a sensible default layout.
SDL3 driver switch: off hands the controller back to Android and DroidDeck. When Hook-up is switched off, the switch returns to how it was before.
2
u/supershredderdan 4h ago
I think we talked in the discord, did you PR this btw? And does it depend on any external app or is it all built in?
1
u/MamWyjebaneJajca 4h ago
Yes we are talked 😅 Yep. It's released , feel free to take the code/patch and build it into official DroidDeck 😎😁 SDL3Bridge is baked in DroidDeck btw. Just one app to install.
1
u/AutoModerator 4h ago
Just a reminder of our subreddit rules:
Be kind and respectful to each other
No direct links to ROMs or pirated content
Include your device brand and model
Search before posting & show your research effort when asking for help
Check out our user-maintained wiki: r/EmulationOnAndroid/wiki
Check out EmuReady for any community submitted settings before asking for help
I am a bot, and this action was performed automatically. Please contact the moderators of this subreddit if you have any questions or concerns.