From 71ac905d765e995ac2e732ffd770e712acdab27b Mon Sep 17 00:00:00 2001 From: "Peter F. Patel-Schneider" Date: Mon, 28 Feb 2022 17:23:25 -0500 Subject: [PATCH] device: determine device number from protocol for direct-connected devices; add G9 Laser Mouse --- lib/logitech_receiver/descriptors.py | 16 +++++++++++++--- lib/logitech_receiver/device.py | 13 ++++++------- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/lib/logitech_receiver/descriptors.py b/lib/logitech_receiver/descriptors.py index 8c04fd7d..9e12ac6b 100644 --- a/lib/logitech_receiver/descriptors.py +++ b/lib/logitech_receiver/descriptors.py @@ -29,7 +29,7 @@ from .hidpp10 import REGISTERS as _R _DeviceDescriptor = namedtuple( '_DeviceDescriptor', - ('name', 'kind', 'wpid', 'codename', 'protocol', 'registers', 'settings', 'persister', 'usbid', 'interface', 'btid') + ('name', 'kind', 'wpid', 'codename', 'protocol', 'registers', 'settings', 'usbid', 'interface', 'btid') ) del namedtuple @@ -45,7 +45,6 @@ def _D( protocol=None, registers=None, settings=None, - persister=None, usbid=None, interface=None, btid=None, @@ -84,7 +83,6 @@ def _D( protocol=protocol, registers=registers, settings=settings, - persister=persister, usbid=usbid, interface=interface, btid=btid @@ -441,6 +439,18 @@ _D('MX Vertical Wireless Mouse', codename='MX Vertical', protocol=4.5, wpid='407 _D('Wireless Mouse Pebble M350', protocol=2.0, wpid='4080', codename='Pebble') _D('MX Master 3 Wireless Mouse', codename='MX Master 3', protocol=4.5, wpid='4082', btid=0xb023) _D('PRO X Wireless', kind='mouse', codename='PRO X', wpid='4093', usbid=0xc094) +_D( + 'G9 Laser Mouse', + codename='G9', + usbid=0xc048, + interface=1, + protocol=1.0, + settings=[ + _PerformanceMXDpi, + _ST.RegisterSmoothScroll, + _ST.RegisterSideScroll, + ] +) _D('G402 Gaming Mouse', codename='G402', usbid=0xc07e, interface=1) _D('G900 Chaos Spectrum Gaming Mouse', codename='G900', usbid=0xc081) _D('G403 Gaming Mouse', codename='G403', usbid=0xc082) diff --git a/lib/logitech_receiver/device.py b/lib/logitech_receiver/device.py index a2d4bf1d..543e7511 100644 --- a/lib/logitech_receiver/device.py +++ b/lib/logitech_receiver/device.py @@ -44,10 +44,7 @@ class Device: if receiver: assert number > 0 and number <= receiver.max_devices - else: - assert number == 0xFF - # Device number, 1..6 for unifying devices, 1 otherwise. - self.number = number + self.number = number # will be None at this point for directly connected devices # 'device active' flag; requires manual management. self.online = None @@ -140,8 +137,10 @@ class Device: self.online = None # a direct connected device might not be online (as reported by user) self.product_id = info.product_id self.bluetooth = info.bus_id == 0x0005 - self.descriptor = _descriptors.get_btid(self.product_id - ) if self.bluetooth else _descriptors.get_usbid(self.product_id) + self.descriptor = _descriptors.get_btid(self.product_id) if self.bluetooth else \ + _descriptors.get_usbid(self.product_id) + if self.number is None: # for direct-connected devices get 'number' from descriptor protocol else use 0xFF + self.number = 0x00 if self.descriptor and self.descriptor.protocol and self.descriptor.protocol < 2.0 else 0xFF if self.descriptor: self._name = self.descriptor.name @@ -458,7 +457,7 @@ class Device: try: handle = _base.open_path(device_info.path) if handle: - return Device(None, 0xFF, info=device_info) + return Device(None, None, info=device_info) except OSError as e: _log.exception('open %s', device_info) if e.errno == _errno.EACCES: