class myVendor(object): def __init__(self): self.name = "" self.num = "" self.devices = {} class myDevice(object): def __init__(self): self.name = "" self.num = "" self.subvendors = {} self.vendor = "" def deviceMap(bus='pci'): fn = "/usr/share/hwdata/%s.ids" % bus fo = open(fn, 'r') vendors = {} for i in range(32000): vendors[i] = '' curvendor = None curdevice = None for line in fo.readlines(): if line.startswith('#') or not line.strip(): continue elif not line.startswith('\t'): curvendor = myVendor() curvendor.num = line[0:4] curvendor.name = line[6:-1] curvendor.num = '0x%s' % curvendor.num print curvendor.num vendors[curvendor.num] = curvendor continue elif line.startswith('\t\t'): line = line.replace('\t', '') thisdev = myDevice() thisdev.vendor = line[0:4] thisdev.num = int(line[5:9]) thisdev.name = line[11:-1] subvend = myVendor() subvend.num = thisdev.vendor subvend.name = "" if not curdevice.subvendors.has_key(subvend.num): curdevice.subvendors[subvend.num] = subvend subvend.devices[thisdev.num] = thisdev else: subvend = curdevice.subvendors[subvend.num] subvend.devices[thisdev.num] = thisdev continue elif line.startswith('\t'): line = line.replace('\t', '') curdevice = myDevice() curdevice.num = line[0:4] curdevice.name = line[6:-1] curdevice.vendor = curvendor.num curvendor.devices[curdevice.num] = curdevice continue else: print line continue fo.close() # This introduces a bug, will fix later. vendors['0000'] = myVendor() vendors['0000'].name = None return vendors