fix(linux): route Xbox Series gamepad through uinput#54
Draft
ReenigneArcher wants to merge 7 commits into
Draft
Conversation
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## master #54 +/- ##
==========================================
- Coverage 74.88% 74.41% -0.48%
==========================================
Files 19 19
Lines 5890 6159 +269
Branches 2246 2392 +146
==========================================
+ Hits 4411 4583 +172
- Misses 1279 1338 +59
- Partials 200 238 +38
Flags with carried forward coverage won't be shown. Click here to find out more.
Continue to review full report in Codecov by Harness.
|
ReenigneArcher
force-pushed
the
fix/linux/gamepad-mappings
branch
from
July 14, 2026 23:03
b799c70 to
cb4c5f9
Compare
ReenigneArcher
force-pushed
the
fix/linux/gamepad-mappings
branch
2 times, most recently
from
July 14, 2026 23:44
61eb72a to
01dec7e
Compare
Adds a dedicated Linux uinput Xbox Series backend that emits canonical evdev button/axis events and translates force-feedback effects back into normalized rumble callbacks, while keeping other gamepads on UHID. The backend gamepad submit interface now accepts both normalized state and packed report so native backends can consume state directly. It also updates gamepad descriptors/report packing (including misc1 button handling and hat-based dpad bits), sets Switch Pro UHID bus to virtual, refreshes platform/usage docs, and expands Linux adapter/backend/consumer tests accordingly.
ReenigneArcher
force-pushed
the
fix/linux/gamepad-mappings
branch
from
July 15, 2026 02:07
01dec7e to
b44a75e
Compare
Match the active evdev capabilities exposed by the USB xpad driver instead of the full 15-slot HID layout. Remove unused BTN_C, BTN_Z, BTN_TL2, and BTN_TR2 capabilities that shifted Guide, L3, and R3 indices. Set firmware version to 0x050D for a known SDL/Steam USB mapping. Add Guide button to consumer test coverage.
Update the Linux uinput backend to advertise Xbox Series controllers as Bluetooth with product ID 0x0B13, while keeping the public profile identity unchanged. The evdev key capabilities now include the full 15-slot HID button range (including reserved C/Z/TL2/TR2 slots) so SDL/Steam button indices stay stable and Guide/L3/R3 map correctly. Unit and consumer tests were updated accordingly, and platform support docs now describe the identity split and reserved-slot behavior.
Generalizes the Linux uinput gamepad backend from Xbox Series-only to support Generic, Xbox 360, Xbox One, and Xbox Series profiles. Extracts `uses_uinput_gamepad_profile()` predicate, renames `UinputXboxGamepad` to `UinputGamepad`, makes rumble and misc1 (Share) button conditional on profile capabilities, and updates tests and docs accordingly.
ReenigneArcher
force-pushed
the
fix/linux/gamepad-mappings
branch
3 times, most recently
from
July 16, 2026 20:51
26e03dd to
5e41124
Compare
Enable generic and Xbox 360 gamepad profiles to emit BTN_DPAD_* events alongside their hat axes, allowing consumers that prefer digital D-pad buttons to receive them directly. Also correct Xbox One and Xbox Series to use their Bluetooth product IDs (0x0B20 and 0x0B13) for their Linux uinput devices, matching the standard consumer mappings those identities carry. Update documentation and tests to verify D-pad button capabilities and events across profiles.
ReenigneArcher
force-pushed
the
fix/linux/gamepad-mappings
branch
from
July 17, 2026 01:51
5e41124 to
af8d805
Compare
Update the Linux uinput backend so Xbox 360 profiles use the sparse Linux gamepad button slots like the other uinput gamepads, while limiting BTN_DPAD_* emission to the generic profile. The tests and platform support docs were updated to reflect the new capability layout and D-pad behavior.
Use the Bluetooth bus for the sparse Xbox uinput evdev mapping across Xbox 360, One, and Series profiles, and rename the bus constant to reflect the broader scope.
ReenigneArcher
force-pushed
the
fix/linux/gamepad-mappings
branch
from
July 17, 2026 03:23
87a1526 to
c5fadf4
Compare
|
ReenigneArcher
marked this pull request as draft
July 17, 2026 03:58
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.


Description
Adds a dedicated Linux uinput Xbox Series backend that emits canonical evdev button/axis events and translates force-feedback effects back into normalized rumble callbacks, while keeping other gamepads on UHID. The backend gamepad submit interface now accepts both normalized state and packed report so native backends can consume state directly. It also updates gamepad descriptors/report packing (including misc1 button handling and hat-based dpad bits), sets Switch Pro UHID bus to virtual, refreshes platform/usage docs, and expands Linux adapter/backend/consumer tests accordingly.
Screenshot
Issues Fixed or Closed
Roadmap Issues
Type of Change
Checklist
AI Usage
See our AI usage policy.