Repository navigation
Consolidate SteelSeries protocol families (#206–#220) - #234
Merged
Merged
Conversation
Derived from the vendor's own SteelSeries GG 121.0.0 device specification (sensei_rival_pro_shared.lisp): raw-uint16 XY DPI presets with per-preset lift-off/landing (0x34), dual report/polling rates to 8000 Hz (0x2C/0x2D), 8-slot button mapping (0x2A), save (0x09). Registers the base station (1038:1880) and dongle (1038:1882); the four models share one spec and report the model themselves. Unverified on hardware.
prime.py is byte-identical to prime_plus.py and the plain Prime Wireless shares the Prime Mini Wireless settings dict, so 0x182E/0x182A/0x1856 and 0x1842/0x1840 reuse the prime-plus and prime-mini-wireless codecs with no new modules. Unverified on hardware.
The vendor GG specification includes Rival 310's profile wholesale and overrides only the button table (8 slots vs 6), so this family mirrors the Rival 310 command set (DPI 0x53, polling 0x54, logo/wheel RGB, save 0x59, firmware 0x90) with its own 8-button mapping. Registers 1038:1722 with a matching WebHID driver. Unverified on hardware.
Wired-only Prime Mini (1038:184D), reconstructed from the vendor's own GG 121.0.0 device specification (prime_mini.lisp) — not rivalcfg, which does not cover this mouse. Not the Prime Mini Wireless (different command set): DPI batch 0x2D with uint16 factors (x50, 50-18000), polling 0x2B with read-back 0xAB, 8-slot buttons 0x2A, single-zone lighting (color 0x21, brightness 0x23, default 0x27, reset 0x22), save 0x11, firmware 0x90 (15-byte string, used as the connectivity probe). Unverified on hardware.
Wired-only Rival 5 (1038:183C), reconstructed from the vendor's own GG 121.0.0 device specification (rival-5.lisp) — no rivalcfg profile exists. DPI batch 0x2D with TrueMove Air bytes (spot-checked 0x00/0x04/0x12/0xD6 against the vendor's inline table), polling 0x2B, 11-slot buttons 0x2A, save 0x11, firmware 0x90 (32-byte string, used as the connectivity probe). Unverified on hardware.
Wired-only Rival 3 Gen 2 (1038:1870), reconstructed from the vendor's own GG 121.0.0 device specification (rival-3-v2.lisp); rivalcfg corroborates the PID and command bytes but not the DPI table. XY DPI batch 0x34 (interleaved pairs, vendor TrueMove Core table with 0x49 for 3200 — diverges from rivalcfg's table in 23 entries, flagged in-code), polling 0x2B, 8-slot buttons 0x2A, save 0x11, firmware 0x90 (15-byte string, used as the connectivity probe). Unverified on hardware.
2.4 GHz Rival 3 Wireless Gen 2 (1038:1872), reconstructed from the vendor's own GG 121.0.0 device specification (rival-3-wireless-v2.lisp) — no readable rivalcfg profile exists. Split XY DPI batch 0x2C (1-based index, TrueMove Air), polling 0x17, 7-slot buttons 0x19 plus 2-slot wheel mapping 0x1A, battery 0xAA 0x01 (2-byte level, no charging flag), firmware 0x10, save 0x09. No lighting commands exist on this mouse. Unverified on hardware.
Aerox 3 Wireless Gen 2 (1038:1892 wired, 1038:1890 dongle), reconstructed from the vendor's own GG 121.0.0 device specification — no rivalcfg profile exists. Raw-uint16 XY DPI with per-preset lift-off (0x2D), split wired/wireless polling to 4000 Hz (0x2B, inferred value map flagged in-code), 8-slot buttons (0x2A), battery (0x92, direct percent), firmware 0x90 (12-byte string, used with battery as connectivity probes), save 0x11 0x00. Unverified on hardware.
Wired Rival 600 (1038:1724) and Dota 2 Edition (1038:172E), reconstructed from the vendor's own GG 121.0.0 device specification (rival-600.lisp, dota2-rival-600.lisp) with rivalcfg's rival600.py corroborating every command byte. Distinct command set from the Rival 650 Wireless despite the shared A3360 sensor: sensitivity 0x03 per-level (linear byte, 100-12000), polling 0x04, button feature report 0x31, proximity 0x96, save 0x09, firmware 0x10 (2-byte, used as the connectivity probe). 33-byte reports. Lighting withheld (vendor 0x07/0x27 vs rivalcfg 0x05 disagree). Unverified on hardware.
Rival 100 (1038:1702) with its PC Bang/Dell China/Dota 2 special editions and the Rival 105 (1038:1814), all sharing the vendor GG 121.0.0 rival-100.lisp command set: two-preset DPI 0x03 with a choice byte (250-4000, rivalcfg-supplied table), polling 0x04, single-zone LED 0x05/0x07, button-6 mode 0x0B (with the PC Bang pre-packet), save 0x09, firmware 0x10 (used as the connectivity probe), no button remapping. Unverified on hardware.
Rival 110 (1038:1729), Rival 106 (1038:1816) and Rival 300S (1038:1810), reconstructed from the vendor's own GG 121.0.0 device specifications (rival-110.lisp/rival-106.lisp/rival-300s.lisp, all including rival-100) with rivalcfg's rival110.py corroborating every byte. Shares the Rival 100 command set but uses the PixArt PMW3326 sensor curve (200-7200, the vendor file gives no table), so it is a separate family from ./rival-100.ts. Unverified on hardware.
Rival 300 (1038:1710) and its editions (Dota 2 1038:1392, CS:GO Fade 1038:1394, Fallout 4 1038:1712, Acer Predator 1038:1714, CS:GO Fade stm32 1038:1716, HP OMEN 1038:1718, CS:GO Hyper Beast 1038:171A, Evil Geniuses 1038:171C), reconstructed from the vendor's own GG 121.0.0 rival_base.lisp profile with rivalcfg's rival300.py corroborating every byte. Linear DPI 0x03 (50-6500 in 50 steps), polling 0x04, two-zone LED 0x08/0x07, six remappable buttons 0x31, save 0x09, firmware 0x10. Unverified on hardware.
Addresses CodeRabbit: when the CPI button has selected preset 2, setDpi() now reads the active preset index (0x16) and writes that preset, so the change takes effect; readStatus() reports the active preset's DPI. Both presets are tracked independently (falling back to their rivalcfg defaults when this session has not written them). setDpiPreset2 still writes preset 2 explicitly. Adds steelseriesRival110DecodeActivePreset.
Addresses CodeRabbit: readStatus now reports the active preset's DPI and setDpi writes the active preset (read via 0x16) rather than always preset 1, so a change takes effect after the CPI button switches presets. Both presets are now tracked independently (each falling back to its rivalcfg default), fixing the setDpi/setDpiPreset2 asymmetry. setDpiPreset2 still writes preset 2 explicitly. Adds steelseriesRival300DecodeActivePreset.
Sensei [RAW] (1038:1369) and its Diablo III / Guild Wars 2 / Black Ops II / World of Tanks / Heroes of the Storm editions, reconstructed from the vendor's own GG 121.0.0 sensei-raw_base.lisp profile with rivalcfg's sensei_raw.py corroborating every byte. Linear two-preset DPI 0x03 (90-5670), polling 0x04, single-LED brightness 0x05 and effect 0x07, eight 3-byte button slots 0x31, save 0x09, firmware 0x10. setDpi writes the active preset (read via 0x16). Unverified on hardware.
…ries # Conflicts: # src/steelseries/devices.ts
…ries # Conflicts: # src/drivers/registry.ts # src/steelseries/devices.ts # src/steelseries/index.ts
…ries # Conflicts: # src/drivers/registry.ts # src/steelseries/devices.ts # src/steelseries/index.ts
…ries # Conflicts: # src/drivers/registry.ts # src/steelseries/devices.ts # src/steelseries/index.ts
…ries # Conflicts: # src/drivers/registry.ts # src/steelseries/index.ts
…ries # Conflicts: # src/drivers/registry.ts # src/steelseries/devices.ts # src/steelseries/index.ts
…ries # Conflicts: # src/drivers/registry.ts # src/steelseries/devices.ts # src/steelseries/index.ts
…ries # Conflicts: # src/drivers/registry.ts
…ries # Conflicts: # src/drivers/registry.ts # src/steelseries/devices.ts
…ries # Conflicts: # src/drivers/registry.ts # src/steelseries/devices.ts # src/steelseries/index.ts
…ries # Conflicts: # src/drivers/registry.ts # src/steelseries/devices.ts # src/steelseries/index.ts
…ries # Conflicts: # src/drivers/registry.ts # src/steelseries/devices.ts # src/steelseries/index.ts
|
Note Currently processing new changes in this PR. This may take a few minutes, please wait... ⚙️ Run configuration
📒 Files selected for processing: 56
✨ Finishing Touches
Comment |
|
🎉 This PR is included in version 0.43.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.
Consolidation: SteelSeries protocol families
Merges the full set of open SteelSeries protocol-family PRs. They were all branched from the same old
mainand each edits the same three shared files (src/drivers/registry.ts,src/steelseries/devices.ts,src/steelseries/index.ts), so GitHub could merge at most one of them cleanly — this branch integrates all of them with the conflicts resolved as the union of the independent additions.Included PRs
Verification
npm run build/tsc --noEmitcleannpm test: 2637 tests, 0 failuressrc/steelseriesexports presentCloses #206
Closes #207
Closes #208
Closes #209
Closes #210
Closes #211
Closes #212
Closes #214
Closes #215
Closes #217
Closes #218
Closes #219
Closes #220