From 218f7c9620ea06204ef658171a13fc79a86fd02b Mon Sep 17 00:00:00 2001 From: "Peter F. Patel-Schneider" Date: Mon, 25 Jul 2022 17:57:09 -0400 Subject: [PATCH] device: keep track of devices in list --- lib/logitech_receiver/device.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/lib/logitech_receiver/device.py b/lib/logitech_receiver/device.py index 2041c46a..91b551ad 100644 --- a/lib/logitech_receiver/device.py +++ b/lib/logitech_receiver/device.py @@ -29,12 +29,13 @@ KIND_MAP = {kind: _hidpp10.DEVICE_KIND[str(kind)] for kind in _hidpp20.DEVICE_KI class Device: - + instances = [] read_register = _hidpp10.read_register write_register = _hidpp10.write_register def __init__(self, receiver, number, link_notification=None, info=None, path=None, handle=None): assert receiver or info + self.instances.append(self) self.receiver = receiver self.may_unpair = False self.isDevice = True # some devices act as receiver so we need a property to distinguish them @@ -158,6 +159,15 @@ class Device: # may be a 2.0 device; if not, it will fix itself later self.features = _hidpp20.FeaturesArray(self) + @classmethod + def find(self, serial): + assert serial, 'need serial number or unit ID to find a device' + result = None + for device in self.instances: + if device.online and (device.unitId == serial or device.serial == serial): + result = device + return result + @property def protocol(self): if not self._protocol and self.online: @@ -480,6 +490,7 @@ class Device: def close(self): handle, self.handle = self.handle, None + self.instances.remove(self) return (handle and _base.close(handle)) def __del__(self):