headset RGB: fix G522 allowlist key — model byte is 0x32, not 0x33

The HEADSET_SIGNATURE_EFFECTS_ALLOWED allowlist was keyed on "33", a
model byte no real G522 reports. DeviceInfo (0x0100) func 0 returns
0x32 for the G522 (0x44 for the G325) — confirmed against every saved
diagnostic log, including our own development unit. The 0x33/0x45
values came from the protocol doc, which had both transcribed
off-by-one (a shifted read of a G HUB USB capture).

Effect: the SOLAAR_EXPERIMENTAL masking suppressed the headset
signature-effect settings on every G522, not just unvalidated models.

Re-key to "32" and correct the modelId comments.
This commit is contained in:
Ken Sanislo 2026-05-18 13:18:16 -07:00 committed by Peter F. Patel-Schneider
parent 653f7aea18
commit 5f6def437e
2 changed files with 6 additions and 5 deletions

View File

@ -315,8 +315,8 @@ class Device:
hw_info = _hidpp20.get_hardware_info_centurion(self)
if hw_info:
model_id, hw_revision, product_id = hw_info
# modelId is the stable per-model disambiguator (G522 0x33, G325
# 0x45). productId is shared across the headset family and varies
# modelId is the stable per-model disambiguator (G522 0x32, G325
# 0x44). productId is shared across the headset family and varies
# by firmware (G522 0x0508 -> 0x0509), so it must NOT key modelId.
self._modelId = f"{model_id:02X}"
self._tid_map = {"usbid": f"{product_id:04X}"}

View File

@ -3,7 +3,7 @@
Keyed by ``device.modelId``. For normal HID++ devices that is the string
Logitech composes by concatenating every transport PID (btid + btleid + wpid
+ usbid) one entry covers the model on any transport. For Centurion
headsets it is the firmware-stable model byte (G522 ``"33"``, G325 ``"45"``);
headsets it is the firmware-stable model byte (G522 ``"32"``, G325 ``"44"``);
see ``device._get_ids_centurion``.
Two postures, by feature class:
@ -56,12 +56,13 @@ RGB_EFFECTS_NVCONFIG_ALLOWED: dict[str, dict[int, set[str]]] = {
# fields the firmware is KNOWN to honor. An unlisted effect_id or model
# suppresses that signature-effect setting entirely.
HEADSET_SIGNATURE_EFFECTS_ALLOWED: dict[str, dict[int, set[str]]] = {
# G522 LIGHTSPEED (Centurion model byte 0x33). Verified against user
# G522 LIGHTSPEED (Centurion model byte 0x32, from DeviceInfo func 0;
# confirmed against multiple diagnostic logs). Verified against user
# reports: startup honors only the primary color (secondary unused, speed
# has no effect); shutdown honors both colors (speed has no effect). The
# passive slot (effect_id 2) is omitted — its behavior is not understood,
# so the whole passive setting is suppressed.
"33": {
"32": {
0: {"color1"},
1: {"color1", "color2"},
},