feat: add SteelSeries Aerox 3 Wireless support - #165
Merged
snekxs merged 2 commits intoOct 6, 2026
Merged
Conversation
setZoneColor caches the colour it writes, so the Off branch read back the black it had just written: the zone reported #000000 and switching it back to Static wrote black instead of the colour the user had chosen. Capture the colour before the Off write and cache that, and assert the read-back and the Static restore in the zone test.
|
🎉 This PR is included in version 0.24.0 🎉 The release is available on: Your semantic-release bot 📦🚀 |
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.
Adds the SteelSeries Aerox 3 Wireless as its own
aerox3-wirelessfamily, with a codec undersrc/steelseries/and a WebHID driver undersrc/drivers/steelseries/.Devices
1038:183a1038:18381038:187a1038:1878Bluetooth mode is not configurable through this protocol. The firmware version cannot be read: rivalcfg defines no firmware query for this device.
Evidence
The protocol is transcribed from rivalcfg's
aerox3_wireless_wired.pyandaerox3_wireless_wireless.py. The settings are byte-identical to the Aerox 5 Wireless except for the button mapping: 6 buttons plus scroll up/down make a 40-byte packet instead of 55. It is a separate family from the wired Aerox 3 (0x1836), whose polling bytes, zone packing, rainbow command and DPI preset base all differ. Over the dongle every command has0x40ORed into its first byte.Tested on hardware
Tested on macOS with the bytes produced by the new codec, over the cable and the dongle. Writes are made one at a time on purpose.
0xFFC0usage0x01, interface 3 over the cable, with a 64-byte output report and no report ID. The dongle exposes the same collection.00, for example2b 00then11 00. Over the dongle the third byte is01.92 95over the cable (charging, 100%) andd2 15over the dongle (discharging, 100%).rainbowmakes the mouse boot into a rainbow cycle.Akey typeda, and the other buttons kept their defaults.npm run checkpasses against this build (266 tests), and the mouse connects and is configurable in the app.Differences from rivalcfg
22 FFis acked but leaves the strip dark, and22 07does too, so the driver does not offer a runtime rainbow. The codec keeps the encoder with a note. Rainbow works as startup lighting through27 01 00.40 ff 01report. The same report also arrives once right after a polling rate change. The battery probe matches replies by their echoed command byte, and reports an asleep mouse with its own error instead of the "close SteelSeries GG" hint.Driver notes
isSupportedtherefore claims only the0xFFC0:0x01collection. Claiming every interface sent writes to the mouse collection and failed with "Failed to write the report". The Aerox 5 Wireless, Aerox 9 Wireless and Prime Mini Wireless drivers claim every interface the same way and may hit this too; I have no hardware to confirm.valuesVerified: false.0xFFC0is added to the usage pages inregistry.test.ts, so the overlap and picker tests cover this driver.