22 from __future__
import print_function
23 from __future__
import unicode_literals
24 from __future__
import division
25 from __future__
import absolute_import
26 from builtins
import int
27 from builtins
import open
28 from future
import standard_library
29 standard_library.install_aliases()
30 from builtins
import object
31 from smolt_config
import get_config_attr
55 HWDATA_DIRS = [
get_config_attr(
"HWDATA_DIR"),
'/usr/share/hwdata',
'/usr/share/misc',
'/usr/share/' ]
56 for hwd_file
in HWDATA_DIRS:
57 fn =
"%s/%s.ids" % (hwd_file, bus)
58 if os.path.isfile(fn +
".gz"):
62 fo = gzip.open(fn +
".gz",
'rt', encoding=
'latin1')
68 fo = open(fn,
'rt', encoding=
'latin1')
73 raise Exception(
'Hardware data file not found. Please set the location HWDATA_DIR in config.py')
80 for line
in fo.readlines():
81 if line.startswith(
'#')
or not line.strip():
83 elif not line.startswith(
'\t'):
86 curvendor.num = int(line[0:4], 16)
89 curvendor.name = line[6:-1]
90 vendors[curvendor.num] = curvendor
93 elif line.startswith(
'\t\t'):
94 line = line.replace(
'\t',
'')
97 thisdev.vendor = int(line[0:4], 16)
101 thisdev.num = int(line[5:9], 16)
104 thisdev.name = line[11:-1]
107 subvend.num = thisdev.vendor
112 if subvend.num
not in curdevice.subvendors:
113 curdevice.subvendors[subvend.num] = subvend
114 subvend.devices[thisdev.num] = thisdev
116 subvend = curdevice.subvendors[subvend.num]
117 subvend.devices[thisdev.num] = thisdev
121 elif line.startswith(
'\t'):
122 line = line.replace(
'\t',
'')
125 curdevice.num = int(line[0:4], 16)
128 curdevice.name = line[6:-1]
130 curdevice.vendor = int(curvendor.num)
133 curvendor.devices[curdevice.num] = curdevice
144 def vendor(self, vend, subvend=None, alt='N/A', bus='pci'):
152 return self.
vendors[bus][vend].devices[dev].subvendors[subvend].name +
"a"
155 return self.
vendors[bus][vend].name
159 def device(self, vend, dev, subvend=None, subdevice=None, alt='N/A', bus='pci'):
169 subvend = int(subvend)
173 subdevice = int(subdevice)
177 return self.
vendors[bus][vend].devices[dev].name
180 self.
vendors[bus][vend].devices[dev].name
184 def subdevice(self, vend, dev, subvend, subdevice, alt='N/A', bus='pci'):
197 subvend = int(subvend)
201 subdevice = int(subdevice)
205 var = self.
vendors[bus][vend].devices[dev].subvendors[subvend].devices[subdevice].name
209 return self.
vendors[bus][vend].devices[dev].name