udev: simplify find_paired_node
This commit is contained in:
parent
374388daf0
commit
2d29db4609
|
|
@ -38,6 +38,7 @@ from time import sleep
|
||||||
from pyudev import Context as _Context
|
from pyudev import Context as _Context
|
||||||
from pyudev import Device as _Device
|
from pyudev import Device as _Device
|
||||||
from pyudev import DeviceNotFoundError
|
from pyudev import DeviceNotFoundError
|
||||||
|
from pyudev import Devices as _Devices
|
||||||
from pyudev import Monitor as _Monitor
|
from pyudev import Monitor as _Monitor
|
||||||
|
|
||||||
native_implementation = 'udev'
|
native_implementation = 'udev'
|
||||||
|
|
@ -48,7 +49,6 @@ DeviceInfo = namedtuple(
|
||||||
'vendor_id',
|
'vendor_id',
|
||||||
'product_id',
|
'product_id',
|
||||||
'serial',
|
'serial',
|
||||||
'phys',
|
|
||||||
'release',
|
'release',
|
||||||
'manufacturer',
|
'manufacturer',
|
||||||
'product',
|
'product',
|
||||||
|
|
@ -128,7 +128,6 @@ def _match(action, device, filter):
|
||||||
path=device.device_node,
|
path=device.device_node,
|
||||||
vendor_id=vid[-4:],
|
vendor_id=vid[-4:],
|
||||||
product_id=pid[-4:],
|
product_id=pid[-4:],
|
||||||
phys=hid_device.get('HID_PHYS'),
|
|
||||||
serial=hid_device.get('HID_UNIQ'),
|
serial=hid_device.get('HID_UNIQ'),
|
||||||
release=attrs.get('bcdDevice'),
|
release=attrs.get('bcdDevice'),
|
||||||
manufacturer=attrs.get('manufacturer'),
|
manufacturer=attrs.get('manufacturer'),
|
||||||
|
|
@ -145,7 +144,6 @@ def _match(action, device, filter):
|
||||||
path=device.device_node,
|
path=device.device_node,
|
||||||
vendor_id=vid[-4:],
|
vendor_id=vid[-4:],
|
||||||
product_id=pid[-4:],
|
product_id=pid[-4:],
|
||||||
phys=None,
|
|
||||||
serial=None,
|
serial=None,
|
||||||
release=None,
|
release=None,
|
||||||
manufacturer=None,
|
manufacturer=None,
|
||||||
|
|
@ -156,10 +154,18 @@ def _match(action, device, filter):
|
||||||
return d_info
|
return d_info
|
||||||
|
|
||||||
|
|
||||||
def find_paired_node(receiver_phys, index):
|
def find_paired_node(receiver_path, index):
|
||||||
for dev in _Context().list_devices(subsystem='hidraw'):
|
"""Find the node of a device paired with a receiver"""
|
||||||
phys = dev.find_parent('hid').get('HID_PHYS')
|
context = _Context()
|
||||||
if phys and '{}:{}'.format(receiver_phys, index) == phys:
|
receiver_phys = _Devices.from_device_file(context, receiver_path).find_parent('hid').get('HID_PHYS')
|
||||||
|
|
||||||
|
if not receiver_phys:
|
||||||
|
return None
|
||||||
|
|
||||||
|
phys = f'{receiver_phys}:{index}'
|
||||||
|
for dev in context.list_devices(subsystem='hidraw'):
|
||||||
|
dev_phys = dev.find_parent('hid').get('HID_PHYS')
|
||||||
|
if dev_phys and dev_phys == phys:
|
||||||
return dev.device_node
|
return dev.device_node
|
||||||
|
|
||||||
return None
|
return None
|
||||||
|
|
|
||||||
|
|
@ -128,7 +128,7 @@ class Device(object):
|
||||||
# device is unpaired
|
# device is unpaired
|
||||||
assert self.wpid is not None, 'failed to read wpid: device %d of %s' % (number, receiver)
|
assert self.wpid is not None, 'failed to read wpid: device %d of %s' % (number, receiver)
|
||||||
|
|
||||||
self.path = _hid.find_paired_node(receiver.phys, number)
|
self.path = _hid.find_paired_node(receiver.path, number)
|
||||||
self.handle = _hid.open_path(self.path) if self.path else None
|
self.handle = _hid.open_path(self.path) if self.path else None
|
||||||
|
|
||||||
self.descriptor = _DESCRIPTORS.get(self.wpid)
|
self.descriptor = _DESCRIPTORS.get(self.wpid)
|
||||||
|
|
|
||||||
|
|
@ -53,7 +53,6 @@ class Receiver(object):
|
||||||
self.handle = handle
|
self.handle = handle
|
||||||
assert device_info
|
assert device_info
|
||||||
self.path = device_info.path
|
self.path = device_info.path
|
||||||
self.phys = device_info.phys
|
|
||||||
# USB product id, used for some Nano receivers
|
# USB product id, used for some Nano receivers
|
||||||
self.product_id = device_info.product_id
|
self.product_id = device_info.product_id
|
||||||
product_info = _product_information(self.product_id)
|
product_info = _product_information(self.product_id)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue