Solaar/lib/logitech_receiver
grechmarlon 73adad2a52 G915 TKL: device-gated RGB-claim quirk — keep onboard mode on claim
A usbmon capture of G HUB's bring-up (receiver passed to a Win11 VM)
showed the root cause of the dead F-row/media keys AND the F4 blackout:
the RGB SW-control claim switched the keyboard to host mode
(ONBOARD_PROFILES 0x10 0x02). On the G915 TKL host mode disables the
F-row/media keys (#1100), and the host-mode transition made the firmware
re-assert the M/MR indicator (overlaid on F1-F4 on this keyless model)
over the per-key colours. G HUB drives the LEDs from onboard mode via the
RGB SetSWControl claim alone, never switching.

Gated by modelId in device_quirks.py so no other device changes:
- rgb_claim_keeps_onboard_mode(): _claim_sw_control skips the onboard->
  host switch for listed models -> F-keys/media keys work and the
  power-on F4 blackout is gone, with no timer and no G-key divert.
- rgb_repaint_on_profile_change(): re-assert + repaint on a reported
  profile change so an accidental switch doesn't strand the scheme.

Documented residual (cannot be fixed without breaking the keys): F1-F4
are the M1/M2/M3/MR indicator zones on the TKL. The firmware re-asserts
the active-profile indicator on them on profile switch and after idle,
so those keys can show the indicator instead of the user colour.
Claiming that subsystem (G-key divert) would stop it but disables the
F-row/media keys, so onboard mode + working keys is the chosen trade-off.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-15 11:27:23 +02:00
..
__init__.py Refactor: Distinguish module from package 2024-09-15 09:18:51 -04:00
advanced_para_eq.py G522 LIGHTSPEED headphones support 2026-05-21 10:13:00 -04:00
base.py G522 LIGHTSPEED headphones support 2026-05-21 10:13:00 -04:00
base_usb.py device: Support per-slot unpair on Lightspeed receivers (CLI + GUI) (#3183) 2026-04-17 09:34:58 -04:00
centurion.py G522 LIGHTSPEED headphones support 2026-05-21 10:13:00 -04:00
centurion_constants.py centurion: support PRO X 2 LIGHTSPEED headphones Centurion features (#3150) 2026-04-14 11:43:23 -04:00
common.py ui: Show offline status for receiver-paired device batteries (#3217) 2026-05-13 17:32:03 -04:00
descriptors.py G522 LIGHTSPEED headphones support 2026-05-21 10:13:00 -04:00
desktop_notifications.py testing: upgrade desktop notifications tests to take notifications availability into account 2025-01-02 10:47:53 -05:00
device.py address review: name gap sentinel, hoist init guard, scope power-on force 2026-06-12 06:27:29 +02:00
device_quirks.py G915 TKL: device-gated RGB-claim quirk — keep onboard mode on claim 2026-06-15 11:27:23 +02:00
diversion.py rules: remove use of XTest and use uinput in all cases 2026-03-08 20:58:43 -04:00
exceptions.py Use double quotes for module level docstrings 2024-06-02 09:54:21 -04:00
headset_rgb.py G522 LIGHTSPEED headphones support 2026-05-21 10:13:00 -04:00
hidpp10.py cli: Fix crash when showing notification flags. (#3070) 2025-12-12 04:54:10 -05:00
hidpp10_constants.py device: Handle composite IntFlag.name on Python < 3.11 (#3187) 2026-04-16 11:38:25 -04:00
hidpp20.py debug: add warning statements to determine reason for feature request failure 2026-06-09 19:35:00 -04:00
hidpp20_constants.py Drop 0x0623 probe — feature is unmapped and not in G HUB 2026-05-21 10:13:00 -04:00
i18n.py Unify imports in logitech package 2024-05-23 16:42:18 -04:00
listener.py debug: add warning statements to determine reason for feature request failure 2026-06-09 19:35:00 -04:00
logivoice.py G522 LIGHTSPEED headphones support 2026-05-21 10:13:00 -04:00
notifications.py address review: name gap sentinel, hoist init guard, scope power-on force 2026-06-12 06:27:29 +02:00
onboard_eq.py G522 LIGHTSPEED headphones support 2026-05-21 10:13:00 -04:00
receiver.py debug: add warning statements to determine reason for feature request failure 2026-06-09 19:35:00 -04:00
rgb_effects_probe.py Drop 0x0623 probe — feature is unmapped and not in G HUB 2026-05-21 10:13:00 -04:00
rgb_power.py rgb_control: honor the off state — don't auto-claim, init, or shutdown LEDs 2026-05-15 10:45:27 -04:00
settings.py G522 LIGHTSPEED headphones support 2026-05-21 10:13:00 -04:00
settings_new.py settings: add setting for HAPTIC feature 2025-11-12 14:50:46 -05:00
settings_templates.py G915 TKL: device-gated RGB-claim quirk — keep onboard mode on claim 2026-06-15 11:27:23 +02:00
settings_validator.py Add RGB lighting persistence and software LED power management for G515 2026-05-13 19:03:44 -04:00
special_keys.py device: add special keys from Logitech 2025-10-16 20:57:15 -04:00