Add MCHOSE X9 Wireless (battery status) - #563
Open
Venjer wants to merge 1 commit into
Open
Conversation
Battery status support for the MCHOSE X9 Wireless Gaming Headset (2.4GHz dongle, VID 0x3837 / PID 0x6045, C-Media chipset). Protocol reverse-engineered from a USB capture (Wireshark + USBPcap) of the official M HUB Windows app, verified against the percentage it displayed across multiple sessions and battery levels.
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.
Changes made
Adds battery status support for the MCHOSE X9 Wireless Gaming Headset (2.4GHz dongle, VID
0x3837/ PID0x6045, C-Media chipset).Protocol reverse-engineered from a USB capture (Wireshark + USBPcap) of the official "M HUB" Windows app, and verified against the percentage that app displayed across multiple sessions and battery levels (20%, 50%, 60%).
Battery is queried on the vendor-defined HID collection (usage page
0xff90), which answers a55 65 01 00 ...request with55 65 <value> <field> .... The dongle also pushes other unsolicited reports in the same shape during normal operation (a heartbeat, and other field ids carrying telemetry that hasn't been identified) — only field id0x02is read as the battery percentage, everything else is ignored to avoid misreading it as a spurious 0%.getSupportedPlatforms()excludes macOS: the dongle exposes six top-level HID collections on one physical USB interface, and on non-Windows platformsget_hid_path()doesn't match by usage page, so it falls back to the first enumerated one, which may not carry report0x55. Same shape of issue asPlantronicsBT600in this codebase, same fix. Windows and Linux were reachable for testing (Windows verified on hardware; Linux only by code inspection ofget_hid_path(), where it opens the whole HID interface as a single node rather than splitting by top-level collection, so the report id alone should disambiguate — no Linux machine available to confirm).Charging status isn't reported: plugging the headset in for a charge drops it out of 2.4GHz entirely (M HUB's own UI says as much — it stops working while the cable is in), so there's nothing to read over this dongle while charging.
Checklist
CAP_BATTERY_STATUS