The AnalogButtons feature packs each tunable in bits 7..2 of its byte (wire = logical << 2); byte 2 bit 0 is a firmware-managed sensitivity flag, the rest of the low bits are reserved-zero. Solaar 1.1.19 sent the slider value verbatim, so any logical 1/2/3 produced wire bytes 0x01/0x02/0x03 — non-zero reserved bits and below the logical minimum, hence INVALID_ARGUMENT (issue #3202). Only multiples of 4 happened to land on a valid wire byte. Decode bytes 1/2/3 of getConfig and caps[2..4] of getCapabilities by right-shifting 2; left-shift the user value by 2 on setConfig and OR back the prior sensitivity bit on rapid-trigger writes. Defaults fallbacks updated to logical mid-points and the validator maxima now reflect the real ranges (actuation 1..10, rapid trigger 1..5, haptics 0..5). Persisted values from 1.1.19 were raw wire bytes (e.g. 40), which now exceed the new max and would fail apply()'s prepare_write. A new _AnalogButtonSetting subclass migrates such values in _pre_read by dividing by 4 when the result lands inside the new valid range, and rewrites the persister so the migration is one-shot. |
||
|---|---|---|
| .. | ||
| hid_parser | ||
| hidapi | ||
| keysyms | ||
| logitech_receiver | ||
| solaar | ||