device: determine device number from protocol for direct-connected devices; add G9 Laser Mouse

This commit is contained in:
Peter F. Patel-Schneider 2022-02-28 17:23:25 -05:00
parent 862fd9c110
commit 71ac905d76
2 changed files with 19 additions and 10 deletions

View File

@ -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)

View File

@ -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: