Manipulando as informações do USBfs no Linux
Para quem pretende tratar com USB em Linux, é necessário trabalhar com o USBfs e com os arquivos sob /proc/bus/usb. As três classes que disponibilizo são parte do programa USB Show (http://usbpy.sf.net) e retornam a quantidade de dispositivos no bus USB (incluindo controladores e hubs!), quais eles são e os drivers que eles carregam.
Descrição
Para quem pretende tratar com USB em Linux, é necessário trabalhar com o USBfs e com os arquivos sob /proc/bus/usb. As três classes que disponibilizo são parte do programa USB Show (http://usbpy.sf.net) e retornam a quantidade de dispositivos no bus USB (incluindo controladores e hubs!), quais eles são e os drivers que eles carregam.
# USB handling classes
"""Classes and methods that our usbpy program need
"""
class Drivers:
"""Handling the /proc/bus/usb/drivers file
"""
def __init__(self):
self.drivers=open("/proc/bus/usb/drivers").read()
def listDrivers(self):
return self.drivers
class DeviceUSB:
"""Handling the /proc/bus/usb/devices file
"""
def __init__(self):
self.descfile=open("/proc/bus/usb/devices").read()
def getAllDisps(self):
"""Separating devices
"""
return self.descfile.split("T: ")
class Device:
"""Treating each device separately
"""
def __init__(self,descricao):
self.descricao=descricao
def __firstLine(self):
templine=self.descricao.split("D: ")
return templine[0]
def __secondLine(self):
templine=self.descricao.split("I: ")
return templine
def __secondLineClasse(self):
l2=self.__secondLine()
tempclass=l2[1].split("E: ")[0]
return tempclass
def __SLines(self):
templine=self.descricao.split("S: ")
return templine
def __thirdLineClasse(self):
l3=self.__SLines()
tempclass=l3[2][9:].split(" 12")
return tempclass
def __divideHub(self):
ls=self.__SLines()
ls=ls[1][9:].split(" 12")
return ls[0]
def __countSLines(self):
ls=self.__SLines()
return len(ls)
def __getManufacturer(self,line):
manuf=line[1][14:].split(" 12")
return manuf
def __getProduct(self,line):
produ=line[2][9:].split(" 12")
return produ
def __getClasse(self):
"""The class of the device
"""
tempclass=self.__secondLineClasse()
return tempclass[30:35]
def __showHub(self):
"""What kind of hub is this: an USB root or an USB normal hub
"""
lh=self.__divideHub()
tempsaida=r"USB Hub - "+lh
return tempsaida
def __showStorage(self):
"""Gather information about USB Mass Storage devices
"""
nums=self.__countSLines()
if nums!=1:
tempmanuf=self.__getManufacturer(self.__SLines())
tempprod=self.__getProduct(self.__SLines())
tempsaida=r"USB Mass Storage - "+tempmanuf[0]+r" "+tempprod[0]
return tempsaida
else:
return r"USB Mass Storage"
def __showOthers(self):
"""All devices, except hubs and storage, are treated here
"""
nums=self.__countSLines()
if nums==1:
tempsaida=r"Unknown device"
else:
nclasse=self.__thirdLineClasse()
tipoClasse=self.__getClasse()
if tipoClasse=="HID ":
tempsaida=r"Mouse/joystick/keyboard - "+nclasse[0]
elif tipoClasse==">ifc ":
tempsaida=r"USB legacy interface - "+nclasse[0]
else:
tempsaida=r"Unknown class - "+nclasse[0]
return tempsaida
def showFirstLine(self):
"""All the important information: bus, number of the device in the bus, device speed
"""
l1=self.__firstLine()
tempsaida=r"Bus "+l1[5:6]+r", device #"+l1[43:46]+r" - Speed "+l1[51:54]+r"Mbps"
return tempsaida
def showSecondLine(self):
tipoClasse=self.__getClasse()
if tipoClasse=="hub ":
tempsaida=self.__showHub()
elif tipoClasse=="stor.":
tempsaida=self.__showStorage()
else:
tempsaida=self.__showOthers()
return tempsaida