Skip to content

feat: support Xbox Elite Series 2 over wired USB - #67

Merged
stephenleo merged 1 commit into
stephenleo:mainfrom
amarsgithub:feat/xbox-elite-series-2
Jul 31, 2026
Merged

feat: support Xbox Elite Series 2 over wired USB#67
stephenleo merged 1 commit into
stephenleo:mainfrom
amarsgithub:feat/xbox-elite-series-2

Conversation

@amarsgithub

Copy link
Copy Markdown
Contributor

What

Adds the Xbox Elite Series 2 (045e:0b00) to XBOX_GIP_PIDS.

The pad emits the same 18-byte GIP input frame over wired USB as the already-supported Xbox One S (045e:02ea), but because its PID was unlisted it fell through to the generic driver and produced no input events at alldoctor detected the device, then every button and axis read zero.

parseXboxGipReport needed no changes. The one-line PID addition is the entire fix.

Verified on physical hardware

Confirmed on a real Elite Series 2, wired over USB-C, macOS 26 (Darwin 25.5), Node 24:

  • openmicro doctorDriver: xbox, 17/17 buttons pass
  • All six axes full range: sticks [-1.00, 1.00], triggers [0.00, 1.00]
  • The guide button (touchpad) works — it arrives as the separate GIP type 0x07 message, so this exercises that path on Elite hardware for the first time
  • Fixture added unedited at test/fixtures/controllers/045e-0b00-usb.json; CONTROLLERS.md regenerated with npm run gen:controllers
  • npm run verify green (290 tests)

Before the fix, raw HID capture showed frames arriving correctly but unparsed — e.g. trigger presses decoding to LT=305, RT=862 at bytes 6–9, exactly matching the existing GIP layout.

Known limitations

  • Bluetooth is not included. The Elite Series 2 enumerates as a different PID (0x0b05) over BT and I could not test that transport, so I have deliberately not added it rather than claim unverified support.
  • The four back paddles (P1–P4) do not map. They live in the Elite's extended GIP data, which the 18-byte frame truncates. Not addressed here.
  • Output: unsupported, as expected for Xbox pads — no LED/rumble feedback.

The Elite Series 2 (045e:0b00) speaks the same 18-byte GIP input frame
over USB as the already-supported Xbox One S (045e:02ea), but its PID
was not in XBOX_GIP_PIDS, so it fell through to the generic driver and
produced no input events at all.

Adding the PID is sufficient — parseXboxGipReport needed no changes.
Verified against a live pad: doctor reports 17/17 buttons and full
range on all six axes.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@stephenleo
stephenleo merged commit 2fce7f0 into stephenleo:main Jul 31, 2026
2 checks passed
@stephenleo

Copy link
Copy Markdown
Owner

Thank you!

stephenleo added a commit that referenced this pull request Jul 31, 2026
Xbox Elite Series 2 wired USB support (#67).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants