dmi:*:svnSystemManufacturer:*
dmi:*:svnTobefilledbyO.E.M.:*
dmi:*:svnToBeFilledByO.E.M.:*
- ID_SYS_VENDOR_IS_RUBBISH=1
+ ID_SYS_VENDOR_IS_RUBBISH=1
dmi:*:pnDefaultstring:*
dmi:*:pnN/A:*
dmi:*:pnSystemName:*
dmi:*:pnTobefilledbyO.E.M.:*
dmi:*:pnToBeFilledByO.E.M.:*
- ID_PRODUCT_NAME_IS_RUBBISH=1
+ ID_PRODUCT_NAME_IS_RUBBISH=1
dmi:*:pvrDefaultstring:*
dmi:*:pvrDefault string:*
dmi:*:pvrTobefilledbyO.E.M.:*
dmi:*:pvrToBeFilledByO.E.M.:*
dmi:*:pvrTo Be Filled By O.E.M.:*
- ID_PRODUCT_VERSION_IS_RUBBISH=1
+ ID_PRODUCT_VERSION_IS_RUBBISH=1
dmi:*:rvrDefaultstring:*
dmi:*:rvrDefault string:*
dmi:*:rvrTobefilledbyO.E.M.:*
dmi:*:rvrToBeFilledByO.E.M.:*
dmi:*:rvrTo Be Filled By O.E.M.:*
- ID_BOARD_VERSION_IS_RUBBISH=1
+ ID_BOARD_VERSION_IS_RUBBISH=1
dmi:*:skuDefaultstring:*
dmi:*:skuDefault string:*
dmi:*:skuTobefilledbyO.E.M.:*
dmi:*:skuToBeFilledByO.E.M.:*
dmi:*:skuTo Be Filled By O.E.M.:*
- ID_PRODUCT_SKU_IS_RUBBISH=1
+ ID_PRODUCT_SKU_IS_RUBBISH=1
dmi:*:catDefaultstring:*
dmi:*:catDefault string:*
dmi:*:catTobefilledbyO.E.M.:*
dmi:*:catToBeFilledByO.E.M.:*
dmi:*:catTo Be Filled By O.E.M.:*
- ID_CHASSIS_ASSET_TAG_IS_RUBBISH=1
+ ID_CHASSIS_ASSET_TAG_IS_RUBBISH=1
# Fix "Lenovo" capitalization in /sys/class/dmi/id/sys_vendor
dmi:bvnLENOVO*
- ID_SYSFS_ATTRIBUTE_MODEL=product_version
- ID_VENDOR_FROM_DATABASE=Lenovo
+ ID_SYSFS_ATTRIBUTE_MODEL=product_version
+ ID_VENDOR_FROM_DATABASE=Lenovo
# Microsoft Surface 1's chassis type
dmi:bvnMicrosoft Corporation*:pvrSurface with Windows 8 Pro*
- ID_CHASSIS=tablet
+ ID_CHASSIS=tablet
# GPD Pocket 4 chassis type
dmi:bvnAmericanMegatrendsInternational*:rvnGPD:rnG1628-04*
- ID_CHASSIS=convertible
+ ID_CHASSIS=convertible
'vmbus',
'OUI',
'ieee1394',
+ 'dmi',
}
def upperhex_word(length):
('ID_INFRARED_CAMERA', Or((Literal('0'), Literal('1')))),
('ID_CAMERA_DIRECTION', Or(('front', 'rear'))),
('SOUND_FORM_FACTOR', Or(('internal', 'webcam', 'speaker', 'headphone', 'headset', 'handset', 'microphone'))),
+ ('ID_SYS_VENDOR_IS_RUBBISH', Or((Literal('0'), Literal('1')))),
+ ('ID_PRODUCT_NAME_IS_RUBBISH', Or((Literal('0'), Literal('1')))),
+ ('ID_PRODUCT_VERSION_IS_RUBBISH', Or((Literal('0'), Literal('1')))),
+ ('ID_BOARD_VERSION_IS_RUBBISH', Or((Literal('0'), Literal('1')))),
+ ('ID_PRODUCT_SKU_IS_RUBBISH', Or((Literal('0'), Literal('1')))),
+ ('ID_CHASSIS_ASSET_TAG_IS_RUBBISH', Or((Literal('0'), Literal('1')))),
+ ('ID_CHASSIS', name_literal),
+ ('ID_SYSFS_ATTRIBUTE_MODEL', name_literal),
+ ('ID_NET_NAME_FROM_DATABASE', name_literal),
+ ('ID_NET_NAME_INCLUDE_DOMAIN', Or((Literal('0'), Literal('1')))),
)
fixed_props = [Literal(name)('NAME') - Suppress('=') - val('VALUE')
for name, val in props]
# This is a partial check. The other cases could be also done, but those
# two are most commonly wrong.
- grammars = { 'usb' : 'v' + upperhex_word(4) + Optional('p' + upperhex_word(4) + Optional(':')) + '*',
- 'pci' : 'v' + upperhex_word(8) + Optional('d' + upperhex_word(8) + Optional(':')) + '*',
+ grammars = {
+ 'bluetooth' : 'v' + upperhex_word(4) + Optional('p' + upperhex_word(4) + Optional(':')) + '*',
+ 'usb' : 'v' + upperhex_word(4) + Optional('p' + upperhex_word(4) + Optional(':')) + '*',
+ 'pci' : 'v' + upperhex_word(8) + Optional('d' + upperhex_word(8) + Optional(':')) + '*',
}
for match in matches:
if gr:
# we check this first to provide an easy error message
if rest[-1] not in '*:':
- error('pattern {} does not end with "*" or ":"', match)
+ error('Pattern {} does not end with "*" or ":"', match)
try:
gr.parseString(rest)
except ParseBaseException as e:
- error('Pattern {!r} is invalid: {}', rest, e)
+ error('Pattern {} is invalid: {}', match, e)
continue
matches.sort()
error(f'{fname}: no matches or props')
if __name__ == '__main__':
- args = sys.argv[1:] or sorted(glob.glob(os.path.dirname(sys.argv[0]) + '/[678][0-9]-*.hwdb'))
+ args = sys.argv[1:] or sorted(
+ [
+ os.path.dirname(sys.argv[0]) + '/20-dmi-id.hwdb',
+ os.path.dirname(sys.argv[0]) + '/20-net-ifname.hwdb',
+ ] + glob.glob(os.path.dirname(sys.argv[0]) + '/[678][0-9]-*.hwdb')
+ )
for fname in args:
groups = parse(fname)