udev: get manufacturer and product from HID_ID

This commit is contained in:
Peter F. Patel-Schneider 2020-09-23 17:21:51 -04:00
parent 3b6a4ed0ed
commit ec8a51d353
2 changed files with 18 additions and 16 deletions

View File

@ -55,6 +55,7 @@ DeviceInfo = namedtuple(
'product',
'interface',
'driver',
'bus_id',
'isDevice',
]
)
@ -91,23 +92,22 @@ def _match(action, device, filter):
interface_number = filter.get('usb_interface')
hid_driver = filter.get('hid_driver')
isDevice = filter.get('isDevice')
bus_id = filter.get('bus_id')
usb_device = device.find_parent('usb', 'usb_device')
# print ("* parent", action, device, "usb:", usb_device)
if not usb_device:
hid_device = device.find_parent('hid')
if not hid_device:
return
hid_id = hid_device.get('HID_ID')
if not hid_id:
return # there are reports that sometimes the id isn't set up right so be defensive
bid, vid, pid = hid_id.split(':')
vid = usb_device.get('ID_VENDOR_ID')
pid = usb_device.get('ID_MODEL_ID')
if vid is None or pid is None:
return # there are reports that sometimes the usb_device isn't set up right so be defensive
if not ((vendor_id is None or vendor_id == int(vid, 16)) and (product_id is None or product_id == int(pid, 16))):
return
if not (bus_id is None or bus_id == int(bid, 16)):
return
if action == 'add':
hid_device = device.find_parent('hid')
if not hid_device:
return
hid_driver_name = hid_device.get('DRIVER')
# print ("** found hid", action, device, "hid:", hid_device, hid_driver_name)
if hid_driver:
@ -126,17 +126,18 @@ def _match(action, device, filter):
if usb_interface is None or interface_number != usb_interface:
return
attrs = usb_device.attributes
attrs = intf_device.attributes if intf_device else None
d_info = DeviceInfo(
path=device.device_node,
vendor_id=vid[-4:],
product_id=pid[-4:],
serial=hid_device.get('HID_UNIQ'),
release=attrs.get('bcdDevice'),
manufacturer=attrs.get('manufacturer'),
product=attrs.get('product'),
release=attrs.get('bcdDevice') if attrs else None,
manufacturer=attrs.get('manufacturer') if attrs else None,
product=attrs.get('product') if attrs else None,
interface=usb_interface,
driver=hid_driver_name,
bus_id=bus_id,
isDevice=isDevice
)
return d_info
@ -154,6 +155,7 @@ def _match(action, device, filter):
product=None,
interface=None,
driver=None,
bus_id=None,
isDevice=isDevice
)
return d_info

View File

@ -523,9 +523,9 @@ _D(
],
)
_D('Wireless Mouse MX Master 3', codename='MX Master 3', protocol=4.5, wpid='4082', btid=0xb023)
_D('MX Master 3 Wireless Mouse', codename='MX Master 3', protocol=4.5, wpid='4082', btid=0xb023)
_D('Wireless Mouse MX Vertical', codename='MX Vertical', protocol=4.5, wpid='407B', btid=0xb020, usbid=0xc08a)
_D('MX Vertical Wireless Mouse', codename='MX Vertical', protocol=4.5, wpid='407B', btid=0xb020, usbid=0xc08a)
_D(
'G7 Cordless Laser Mouse',