Skip to content

Add HyperX Cloud Alpha 2 Wireless (03f0:08be) - #590

Open
Dasio wants to merge 2 commits into
Sapd:masterfrom
Dasio:add-hyperx-cloud-alpha-2-wireless
Open

Dasio wants to merge 2 commits into
Sapd:masterfrom
Dasio:add-hyperx-cloud-alpha-2-wireless

Conversation

@Dasio

@Dasio Dasio commented Oct 6, 2026 •

Copy link
Copy Markdown

Changes made

Adds the HyperX Cloud Alpha 2 Wireless (03f0:08be) with:

  • battery: level, charging state, voltage, and DeviceOffline when the headset is powered off while the base station stays plugged in
  • sidetone and sidetone status (mic monitoring on/off and level)
  • chat-mix status (game/chat balance)
  • equalizer preset (the three presets stored on the base station)

This is a new driver rather than a new product ID for HyperXCloudAlphaWireless (0x098d). The Alpha 2's base station uses a different command layout from the original's 21 BB xx reports, on a different USB device.

Protocol. The base station enumerates as two USB devices: 0x0abe (audio) and 0x08be (control MCU). Commands go to the MCU's vendor interface (interface 2, usage page 0xff13, usage 0xff00) as 64-byte reports [command][sub-command][payload…], and replies use command + 1:

Request Reply
52 01 connection state 53 01 <connected>
50 02 battery 51 02 <level %> <charge state> <temp °C, i16 LE> <mV, u16 LE> …
60 02 audio settings 61 02 <2 bytes> <12-byte settings block>
60 01 <settings block> write the whole block

In the settings block, byte 4 is sidetone on/off, byte 5 the sidetone level (0–20), byte 8 the game/chat balance (0x7b all game … 0x80 balanced … 0x85 all chat) and byte 11 the active equalizer preset (1–3). The base station only takes the whole block, so the setters read it first and change only their own bytes.

The MCU also ACKs every command (FF 01 …, with the command echoed at offset 14), rejects with FF 02 …, and pushes notifications (FB xx). For example, FB 0A 01/00 is sent when the headset links or unlinks. NGENUITY polls the same interface continuously, so the driver skips ACKs, notifications and replies to other software's requests until its own reply arrives.

Note for users. Whenever one of these settings changes in NGENUITY's UI, NGENUITY writes the whole settings block from its own cached state. So while it runs, it can undo changes made with HeadsetControl.

Not included. Lighting is streamed by NGENUITY as continuous frames rather than set with a command. Mic effects and spatial audio are processed on the PC. Custom equalizer bands are a separate command whose band layout I could not fully verify, so I left it out rather than risk overwriting the stored presets.

Testing

  • Unit tests (tests/test_hyperx_cloud_alpha_2_wireless.cpp) use replies and writes captured from the hardware. They cover battery (connected, charging, powered off), sidetone get/set (including that only the sidetone bytes change), chat-mix, equalizer presets, rejected requests and a missing reply. The full suite passes.
  • Verified on Windows 11:
    • battery on battery power (BATTERY_AVAILABLE, 91 %, 4185 mV), charging (BATTERY_CHARGING, 92 %, 4331 mV) and powered off (BATTERY_UNAVAILABLE, offline)
    • sidetone off/on and level, read back from the device and audible in the headset
    • chat-mix read
    • each equalizer preset written and read back, with the rest of the block unchanged
  • NGENUITY was running during these tests, polling the same interface.
  • Not verified on Linux or macOS. Like the other drivers, it still declares all platforms.

AI disclosure

This PR was written entirely by an AI assistant, Claude Opus 5.5 (Claude Code): the driver, the tests and this description. My role was to own the hardware, run the tests on it and review the result.

Every behaviour the driver claims was checked on a real Cloud Alpha 2 Wireless, as listed under Testing above.

Checklist

  • I adjusted the README (if needed)
  • For new features in HeadsetControl: I discussed it beforehand in Issues or Discussions and adhered to the wiki. Not applicable: this adds a new device, not a new feature.

Dasio and others added 2 commits October 6, 2026 22:36
Battery status for the Cloud Alpha 2 Wireless: level, charging state and
voltage, and DeviceOffline when the headset is powered off while the base
station stays plugged in.

The base station enumerates as two USB devices; commands go to the
control MCU (0x08be) on its vendor interface (interface 2, usage page
0xff13, usage 0xff00) as 64-byte [command][sub-command] reports. The
connection state is queried with 52 01 (reply 53 01 <connected>) and the
battery with 50 02 (reply 51 02 <level> <charge state> <temp> <mV> ...).
NGENUITY polls the same interface continuously, so the driver skips ACKs,
notifications and replies to other requests until its own reply arrives.

Tests use replies captured from the hardware and cover connected,
charging, powered off, a rejected request and a missing reply. Verified
on Windows on battery, charging and with the headset off.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sidetone, the game/chat balance and the active equalizer preset live in
one audio settings block on the base station: 60 02 reads it (reply
61 02), 60 01 writes the whole block back. Setters read the block first
and change only their own bytes, so the other settings are kept.

- sidetone: on/off at block byte 4, level 0-20 at byte 5 (0 turns it off
  and keeps the stored level); also reported as sidetone status
- chat-mix: byte 8, 0x7b all game .. 0x80 balanced .. 0x85 all chat
- equalizer preset: byte 11, presets 1-3 stored on the base station

Verified on Windows: sidetone off/on and level read back from the
device, chat-mix read, and each preset written and read back with the
other bytes unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@Dasio
Dasio force-pushed the add-hyperx-cloud-alpha-2-wireless branch from 27eb4bb to 92013c7 Compare October 6, 2026 21:46
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.

1 participant