Module hwdata
[hide private]
[frames] | no frames]

Source Code for Module hwdata

  1  # 
  2  # Copyright (c) 1999--2010 Red Hat Inc. 
  3  # 
  4  # This software is licensed to you under the GNU General Public License, 
  5  # version 2 (GPLv2). There is NO WARRANTY for this software, express or 
  6  # implied, including the implied warranties of MERCHANTABILITY or FITNESS 
  7  # FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2 
  8  # along with this software; if not, see 
  9  # http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt. 
 10  # 
 11  # Red Hat trademarks are not licensed under GPLv2. No permission is 
 12  # granted to use or replicate Red Hat trademarks that are incorporated 
 13  # in this software or its documentation. 
 14  # 
 15   
 16  """ Query hwdata database and return decription of vendor and/or device. """ 
 17   
18 -class USB:
19 """ Interace to usb.ids from hwdata package """ 20 filename = '/usr/share/hwdata/usb.ids' 21 devices = None 22
23 - def __init__(self, filename=None):
24 """ Load pci.ids from file to internal data structure. 25 parameter 'filename' can specify location of this file 26 """ 27 if filename: 28 self.filename = filename 29 else: 30 self.filename = USB.filename 31 self.cache = 1 32 33 if self.cache and not USB.devices: 34 # parse usb.ids 35 USB.devices = {} 36 for line in open(self.filename).readlines(): 37 l = line.split() 38 if line.startswith('#'): 39 if line.startswith('# List of known device classes, subclasses and protocols'): 40 break # end of database of devices, rest is protocols, types etc. 41 else: 42 continue 43 elif len(l) == 0: 44 continue 45 elif line.startswith('\t\t'): 46 interface_id = l[0].lower() 47 if len(l) > 2: 48 interface_name = ' '.join(l[1:]) 49 else: 50 interface_name = '' 51 USB.devices[vendor][1][device][0][interface_id] = interface_name 52 elif line.startswith('\t'): 53 device = l[0].lower() 54 device_name = ' '.join(l[1:]) 55 USB.devices[vendor][1][device] = [device_name, {}] 56 else: 57 vendor = l[0].lower() 58 vendor_name = ' '.join(l[1:]) 59 if not USB.devices.has_key(vendor): 60 USB.devices[vendor] = [vendor_name, {}] 61 else: # this should not happen 62 USB.devices[vendor][0] = vendor_name
63
64 - def get_vendor(self, vendor):
65 """ Return description of vendor. Parameter is two byte code in hexa. 66 If vendor is unknown None is returned. 67 """ 68 vendor = vendor.lower() 69 if self.cache: 70 if USB.devices.has_key(vendor): 71 return USB.devices[vendor][0] 72 else: 73 return None 74 else: 75 raise # not implemented yet
76
77 - def get_device(self, vendor, device):
78 """ Return description of device. Parameters are two byte code variables in hexa. 79 If device is unknown None is returned. 80 """ 81 vendor = vendor.lower() 82 device = device.lower() 83 if self.cache: 84 if USB.devices.has_key(vendor): 85 if USB.devices[vendor][1].has_key(device): 86 return USB.devices[vendor][1][device][0] 87 else: 88 return None 89 else: 90 return None 91 else: 92 raise # not implemented yet
93
94 -class PCI:
95 """ Interace to pci.ids from hwdata package """ 96 filename = '/usr/share/hwdata/pci.ids' 97 devices = None 98
99 - def __init__(self, filename=None):
100 """ Load pci.ids from file to internal data structure. 101 parameter 'filename' can specify location of this file 102 """ 103 if filename: 104 self.filename = filename 105 else: 106 self.filename = PCI.filename 107 self.cache = 1 108 109 if self.cache and not PCI.devices: 110 # parse pci.ids 111 pcirec = {} 112 PCI.devices = {} 113 for line in open(self.filename).readlines(): 114 l = line.split() 115 if line.startswith('#'): 116 continue 117 elif len(l) == 0: 118 continue 119 elif line.startswith('\t\t'): 120 subvendor = l[0].lower() 121 if len(l) > 2: 122 subdevice = l[1].lower() 123 else: 124 subdevice = '' 125 if len(l) > 3: 126 subsystem_name = ' '.join(l[2:]) 127 else: 128 subsystem_name = '' 129 if not PCI.devices.has_key(subvendor): 130 PCI.devices[subvendor] = [vendor_name, {subdevice: subsystem_name}] 131 else: # this should not happen 132 PCI.devices[subvendor][1][subdevice] = subsystem_name 133 elif line.startswith('\t'): 134 device = l[0].lower() 135 device_name = ' '.join(l[1:]) 136 PCI.devices[vendor][1][device] = device_name 137 else: 138 vendor = l[0].lower() 139 vendor_name = ' '.join(l[1:]) 140 if not PCI.devices.has_key(vendor): 141 PCI.devices[vendor] = [vendor_name, {}] 142 else: # this should not happen 143 PCI.devices[vendor][0] = vendor_name
144
145 - def get_vendor(self, vendor):
146 """ Return description of vendor. Parameter is two byte code in hexa. 147 If vendor is unknown None is returned. 148 """ 149 vendor = vendor.lower() 150 if self.cache: 151 if PCI.devices.has_key(vendor): 152 return PCI.devices[vendor][0] 153 else: 154 return None 155 else: 156 raise # not implemented yet
157
158 - def get_device(self, vendor, device):
159 """ Return description of device. Parameters are two byte code variables in hexa. 160 If device is unknown None is returned. 161 """ 162 vendor = vendor.lower() 163 device = device.lower() 164 if self.cache: 165 if PCI.devices.has_key(vendor): 166 if PCI.devices[vendor][1].has_key(device): 167 return PCI.devices[vendor][1][device] 168 else: 169 return None 170 else: 171 return None 172 else: 173 raise # not implemented yet
174