diff options
-rwxr-xr-x | hwdb/ids_parser.py | 88 |
1 files changed, 51 insertions, 37 deletions
diff --git a/hwdb/ids_parser.py b/hwdb/ids_parser.py index 19f08c0c98..3c43649fc1 100755 --- a/hwdb/ids_parser.py +++ b/hwdb/ids_parser.py @@ -124,52 +124,66 @@ def add_item(items, key, value): items[key] = value def usb_vendor_model(p): + items = {} + + for vendor_group in p.VENDORS: + vendor = vendor_group.VENDOR.vendor.upper() + text = vendor_group.VENDOR.text.strip() + add_item(items, (vendor,), text) + + for vendor_dev in vendor_group.VENDOR_DEV: + device = vendor_dev.device.upper() + text = vendor_dev.text.strip() + add_item(items, (vendor, device), text) + with open('20-usb-vendor-model.hwdb', 'wt') as out: header(out, 'http://www.linux-usb.org/usb.ids') - for vendor_group in p.VENDORS: - vendor = vendor_group.VENDOR.vendor.upper() - text = vendor_group.VENDOR.text.strip() - print(f'', - f'usb:v{vendor}*', - f' ID_VENDOR_FROM_DATABASE={text}', sep='\n', file=out) - - for vendor_dev in vendor_group.VENDOR_DEV: - device = vendor_dev.device.upper() - text = vendor_dev.text.strip() - print(f'', - f'usb:v{vendor}p{device}*', - f' ID_MODEL_FROM_DATABASE={text}', sep='\n', file=out) + for key in sorted(items): + if len(key) == 1: + p, n = 'usb:v{}*', 'VENDOR' + else: + p, n = 'usb:v{}p{}*', 'MODEL', + print('', p.format(*key), + f' ID_{n}_FROM_DATABASE={items[key]}', sep='\n', file=out) + print(f'Wrote {out.name}') def usb_classes(p): + items = {} + + for klass_group in p.CLASSES: + klass = klass_group.KLASS.klass.upper() + text = klass_group.KLASS.text.strip() + + if klass != '00' and not re.match(r'(\?|None|Unused)\s*$', text): + add_item(items, (klass,), text) + + for subclass_group in klass_group.SUBCLASSES: + subclass = subclass_group.subclass.upper() + text = subclass_group.text.strip() + if subclass != '00' and not re.match(r'(\?|None|Unused)\s*$', text): + add_item(items, (klass, subclass), text) + + for protocol_group in subclass_group.PROTOCOLS: + protocol = protocol_group.protocol.upper() + text = protocol_group.name.strip() + if klass != '00' and not re.match(r'(\?|None|Unused)\s*$', text): + add_item(items, (klass, subclass, protocol), text) + with open('20-usb-classes.hwdb', 'wt') as out: header(out, 'http://www.linux-usb.org/usb.ids') - for klass_group in p.CLASSES: - klass = klass_group.KLASS.klass.upper() - text = klass_group.KLASS.text.strip() - - if klass != '00' and not re.match(r'(\?|None|Unused)\s*$', text): - print(f'', - f'usb:v*p*d*dc{klass}*', - f' ID_USB_CLASS_FROM_DATABASE={text}', sep='\n', file=out) - - for subclass_group in klass_group.SUBCLASSES: - subclass = subclass_group.subclass.upper() - text = subclass_group.text.strip() - if subclass != '00' and not re.match(r'(\?|None|Unused)\s*$', text): - print(f'', - f'usb:v*p*d*dc{klass}dsc{subclass}*', - f' ID_USB_SUBCLASS_FROM_DATABASE={text}', sep='\n', file=out) - - for protocol_group in subclass_group.PROTOCOLS: - protocol = protocol_group.protocol.upper() - text = protocol_group.name.strip() - if klass != '00' and not re.match(r'(\?|None|Unused)\s*$', text): - print(f'', - f'usb:v*p*d*dc{klass}dsc{subclass}dp{protocol}*', - f' ID_USB_PROTOCOL_FROM_DATABASE={text}', sep='\n', file=out) + for key in sorted(items): + if len(key) == 1: + p, n = 'usb:v*p*d*dc{}*', 'CLASS' + elif len(key) == 2: + p, n = 'usb:v*p*d*dc{}dsc{}*', 'SUBCLASS' + else: + p, n = 'usb:v*p*d*dc{}dsc{}dp{}*', 'PROTOCOL' + print('', p.format(*key), + f' ID_USB_{n}_FROM_DATABASE={items[key]}', sep='\n', file=out) + print(f'Wrote {out.name}') def pci_vendor_model(p): |