The 0x0604 wire "level" is a gain-step index 0..N-1, not a 0-100 percent. G HUB reads the step count N from getSidetoneLevelSettings (function 2) and scales: level = (N-1)*pct/100. Solaar wrote the raw percent, which only matches when N == 101 — so V2 headsets reporting a smaller N (G522: N=10) got out-of-range step writes the firmware silently ACK'd without applying. Read func 2 at build time, take reply byte 2 as N (default 101 when the call is absent — V1 — or the reply is unusable). The validator now maps the 0-100 UI percent to/from the wire step index and clamps writes to N-1. V1 devices (e.g. PRO X 2) keep N=101, which makes the scaling an exact identity — their wire traffic is unchanged. The raw func-2 reply is still logged at debug level for a future G HUB setpoint correlation. |
||
|---|---|---|
| .. | ||
| hid_parser | ||
| hidapi | ||
| keysyms | ||
| logitech_receiver | ||
| solaar | ||