Solaar/lib/logitech_receiver
Ken Sanislo 35aad431d1 receiver: close paired devices before dropping the handle
Receiver.close() nulled its own handle first and only then closed its
paired devices. A paired device's feature_request() sends over the
receiver's handle, so the device.cleanups callbacks that run inside
Device.close() - release RGB SW control, restore onboard-profile mode -
were issued with handle=None, failed, and were silently swallowed. On
every clean Solaar quit a receiver-paired keyboard was left in host
mode; on the G915 TKL that means dead F-keys until a power cycle
(#3266). Wired devices were unaffected: Device.close() already runs
cleanups before clearing its handle, per its own comment.

Close the devices first, then drop the handle, mirroring Device.close().
Also log cleanup write failures in rgb_power.cleanup at debug level
instead of swallowing them silently, so a torn-down transport can't
hide; debug because failures are routine when the device is unplugged.

The regression test fails against the previous ordering.
2026-07-31 16:30:39 -04:00
..
__init__.py
…
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
…
centurion.py G522 LIGHTSPEED headphones support 2026-05-21 10:13:00 -04:00
centurion_constants.py
…
common.py ui: Show offline status for receiver-paired device batteries (#3217) 2026-05-13 17:32:03 -04:00
descriptors.py device: add descriptor for K380 2026-07-04 16:10:52 -04:00
desktop_notifications.py
…
device.py debug: add warning statements to determine reason for feature request failure 2026-06-09 19:35:00 -04:00
device_quirks.py headset RGB: fix G522 allowlist key — model byte is 0x32, not 0x33 2026-05-21 10:13:00 -04:00
diversion.py
…
exceptions.py
…
headset_rgb.py G522 LIGHTSPEED headphones support 2026-05-21 10:13:00 -04:00
hidpp10.py
…
hidpp10_constants.py
…
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
…
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 G522 LIGHTSPEED headphones support 2026-05-21 10:13:00 -04:00
onboard_eq.py G522 LIGHTSPEED headphones support 2026-05-21 10:13:00 -04:00
receiver.py receiver: close paired devices before dropping the handle 2026-07-31 16:30:39 -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 receiver: close paired devices before dropping the handle 2026-07-31 16:30:39 -04:00
settings.py G522 LIGHTSPEED headphones support 2026-05-21 10:13:00 -04:00
settings_new.py
…
settings_templates.py headset RGB: honor explicit black (0) onboard-effect colors 2026-05-21 10:13:00 -04: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
…