Solaar/lib/solaar
Ken Sanislo ad96dd395b PerKeyLighting: drop misleading live-read output in solaar show
The 0x8081 PerKeyLighting v2 protocol has no GetIndividualRgbZones
function — there's no way to ask the device what colors are currently
on the per-key buffer over HID++. PerKeyLighting.read() papered over
this gap by fabricating an all-"No change" sentinel map whenever the
caller asked for a live (uncached) read, which produced misleading
solaar show output like:

    Per-key Lighting (saved): {1:0xc01c28, 2:0xc52d26, ...}
    Per-key Lighting        : {1:No change, 2:No change, ...}

— even with the keyboard clearly running the saved colors.

Two-part fix:

1. PerKeyLighting.read() now returns self._value if populated (from
   prior write or persister) regardless of `cached`. Only fabricates
   the all-"No change" map when there's truly no state — fresh device,
   no prior write, nothing persisted. This is the right starting state
   in that case because per-key writes are additive over a buffer of
   unknown content.

   Other callers benefit too: solaar config calls read(cached=False) on
   per-key settings to display current values, and prior to this
   change it would get fabricated sentinels back instead of the
   in-memory map.

2. Add a `live_readable = True` class attribute to Setting (default
   preserves existing behavior). Override to False on PerKeyLighting.
   solaar show gates its live-read print on this flag, so non-readable
   settings show only the (saved) line — which is the authoritative
   record of what was last written to a setting whose live state can't
   be read back.

After both fixes solaar show prints just:

    Per-key Lighting (saved): {1:0xc01c28, 2:0xc52d26, ...}

— honest about what we know.

690 tests pass; pre-commit clean.
2026-05-12 12:51:36 -04:00
..
cli PerKeyLighting: drop misleading live-read output in solaar show 2026-05-12 12:51:36 -04:00
ui perkey: label G502 X LEDs by zone id, not letter 2026-05-12 12:51:36 -04:00
__init__.py Fix warnings from automatic code inspections 2024-10-11 07:42:38 -04:00
configuration.py config: tolerate devices with no unitId 2026-02-05 10:50:49 -05:00
custom_logger.py Introduce custom logger 2025-01-02 07:56:46 -05:00
dbus.py solaar: Remove outdated logger enabled checks 2025-01-02 09:26:31 -05:00
gtk.py docs: update help messages for CLI commands 2025-12-21 18:03:53 -05:00
i18n.py Unsupported locale: Fall back to English (#2891) 2025-09-08 09:44:45 -04:00
listener.py centurion: support PRO X 2 LIGHTSPEED headphones Centurion features (#3150) 2026-04-14 11:43:23 -04:00
tasks.py solaar: Remove outdated logger enabled checks 2025-01-02 09:26:31 -05:00
version release 1.1.19 2026-01-08 12:32:44 -05:00