3 gT-@sHdZddlmZmZddlZdZdZdZdZdZ dZ dZ dZ dZ dZdZdZdZdZdZdZdZdZdZdZdZdZdZd ZdZdZdZdZ dZ!d Z"d Z#d Z$d Z%dZ&d Z'dZ(dZ)dZ*dZ+dZ,d Z-dZ.dZ/dZ0dZ1dZ2dZ3dZ4dZ5dZ6dZ7dZ8dZ9d Z:ddZ;ddZddZ?ddZ@ddZAddZBdd ZCd!d"ZDdS)#z Get hardware info using HAL )HalTree HalDeviceNP c Csg}tj}|jdd}tj|d}|j}t}x>|D]6}|jd|}tj|d}|j} t| } |j| q8Wt |j } | S)Nzorg.freedesktop.Halz/org/freedesktop/Hal/Managerzorg.freedesktop.Hal.Managerzorg.freedesktop.Hal.Device) dbus SystemBus get_object InterfaceZ GetAllDevicesrZGetAllPropertiesraddprocess_hal_nodeshead) retbusZhal_manager_objZ hal_managerZ device_listZhal_treeZudiZ device_objdevice propertiesZhaldev kudzu_listr"/usr/lib/python3.6/hardware_hal.pyread_hal\s     rcCs&g}t||_|jr|j}i}|j|d<tt||d<|ddkrd|jkr\|jd|d<d|jkrt|jd|d<d|jkr|jd|d <d |jkr|jd |d <tt||d <t|}|rt||d <tt||d<tt ||d<d|d<|j |x"|j D]}t |}|j |qW|S)NclassrZscsiz scsi.hostZprop1z scsi.targetZprop2zscsi.busZprop3zscsi.lunZprop4driverrdescZpciTyperZdetached) classify_halclassificationparentstrget_device_busrget_device_driverget_device_pathget_device_descriptionget_device_pcitypeappendZchildrenrextend)noderr#devZ device_pathZchildZ child_listrrrrts8          rcCs^d|jkrdSd|jkr\d|jkr\|jddkr\d|jdjkrFdSd|jdjkr\d Sd |jkr|jd tkrzd S|jd tkr|jd tkrd S|jd tkr|jd tkrdS|jd tkrdS|jd tkrdS|jd t kr|jd t krdS|jd t kr"|jd t kr"dS|jd t krZ|jd tkrFdS|jd tkrZdS|jd tkr~|jd tkr~dS|jd tkr|jd tks|jd tkrdSd|jkr|jddkrdS|jddkrdS|jddkrdS|jddkrdSd |jkr.|jd d!kr.dSd"|jkr>d#Sd$|jksVd%|jkrZd&SdS)'Nz net.interfaceNETWORKz info.productz info.categoryinputZkeyboardZKEYBOARDZmouseZMOUSEzpci.device_classZVIDEOzpci.device_subclassZUSBZIDEZSCSIZRAIDZMODEMZSCANNERZCAPTUREZAUDIOZFIREWIREZSOCKETzstorage.drive_typeZcdromZCDROMZdiskZHDZfloppyZFLOPPYZtapeZTAPEzxen.typeZvbdzprinter.productZPRINTERzpci.product_idzusb.product_idZOTHER)rlowerPCI_BASE_CLASS_DISPLAYPCI_BASE_CLASS_SERIALPCI_CLASS_SERIAL_USBPCI_BASE_CLASS_STORAGEPCI_CLASS_STORAGE_IDEPCI_CLASS_STORAGE_SCSIPCI_CLASS_STORAGE_RAIDPCI_BASE_CLASS_COMMUNICATIONPCI_CLASS_COMMUNICATION_MODEMPCI_BASE_CLASS_INPUTPCI_CLASS_INPUT_SCANNERPCI_BASE_CLASS_MULTIMEDIAPCI_CLASS_MULTIMEDIA_VIDEOPCI_CLASS_MULTIMEDIA_AUDIOPCI_CLASS_SERIAL_FIREWIREPCI_BASE_CLASS_BRIDGEPCI_CLASS_BRIDGE_PCMCIAPCI_CLASS_BRIDGE_CARDBUS)r,rrrr!sr       r!cCsHd|jkr|jd}n.d|jkr@|jddkr4d}qD|jd}nd}|S)Nz storage.buszinfo.busplatformZMISC)r)r,rrrrr%s    r%cCs4d|jkr|jd}nd|jkr,|jd}nd}|S)Nzinfo.linux.driverznet.linux.driverunknown)r)r,rrrrr&s     r&cCs|d}d|jkr|jd}n4d|jkr0|jd}n|jdkrNd|jkrN|jd}|rx|jdrh|dd}t|dkrxd}|S) a% Return the device file path. As kudzu did not return a string with the /dev/ prefix, this function will not, either. RHN's DB has a limit of 16 characters for the device path. If the path is longer than that, return None. If no device path is found, return None. Nz block.devicezlinux.device_filer.z net.interfacez/dev/r )rr" startswithlen)r,r-rrrr's           r'cCsbd|jkr.d|jkr.|jdd|jd}n0d|jkrD|jd}nd|jkrZ|jd}nd}|S)Nz info.vendorz info.product|)r)r,r rrrr(*s      r(cCsrd}d}d }d|jo |jddkkrj|j}d|jkrd|jddkrd|jddks^|jdd krd|}qn|}n|}|S) Nrrzinfo.busZpcizpci.device_classr zpci.device_subclassr r )rr#)r,ZPCI_TYPE_PCMCIAZ PCI_TYPE_PCIZPCI_TYPE_NOT_PCIr#Zpcityperrrr)7s r)cCs$tj}|jdd}tj|d}|S)Nzorg.freedesktop.Halz%/org/freedesktop/Hal/devices/computerzorg.freedesktop.Hal.Device)rrrr)rZ computer_objZcomputerrrrget_hal_computerKs  rKcCs,ddl}|jd\}}|jd\}}||fS)Nrz/etc/init.d/haldaemon statusz/etc/init.d/messagebus status) subprocessZgetstatusoutput)ZcommandsZ hal_statusmsgZ dbus_statusrrrcheck_hal_dbus_statusSsrN)E__doc__Zhaltreerrrr4r6r5ZPCI_CLASS_STORAGE_FLOPPYZPCI_CLASS_STORAGE_IPIr7ZPCI_CLASS_STORAGE_OTHERZPCI_BASE_CLASS_NETWORKZPCI_CLASS_NETWORK_ETHERNETZPCI_CLASS_NETWORK_TOKEN_RINGZPCI_CLASS_NETWORK_FDDIZPCI_CLASS_NETWORK_ATMZPCI_CLASS_NETWORK_OTHERr1ZPCI_CLASS_DISPLAY_VGAZPCI_CLASS_DISPLAY_XGAZPCI_CLASS_DISPLAY_3DZPCI_CLASS_DISPLAY_OTHERr<r=r>ZPCI_CLASS_MULTIMEDIA_PHONEZPCI_CLASS_MULTIMEDIA_OTHERr@ZPCI_CLASS_BRIDGE_HOSTZPCI_CLASS_BRIDGE_ISAZPCI_CLASS_BRIDGE_EISAZPCI_CLASS_BRIDGE_MCZPCI_CLASS_BRIDGE_PCIrAZPCI_CLASS_BRIDGE_NUBUSrBZPCI_CLASS_BRIDGE_RACEWAYZPCI_CLASS_BRIDGE_OTHERr8ZPCI_CLASS_COMMUNICATION_SERIALZ PCI_CLASS_COMMUNICATION_PARALLELZ#PCI_CLASS_COMMUNICATION_MULTISERIALr9ZPCI_CLASS_COMMUNICATION_OTHERr:ZPCI_CLASS_INPUT_KEYBOARDZPCI_CLASS_INPUT_PENZPCI_CLASS_INPUT_MOUSEr;ZPCI_CLASS_INPUT_GAMEPORTZPCI_CLASS_INPUT_OTHERr2r?ZPCI_CLASS_SERIAL_ACCESSZPCI_CLASS_SERIAL_SSAr3ZPCI_CLASS_SERIAL_FIBERZPCI_CLASS_SERIAL_SMBUSrrr!r%r&r'r(r)rKrNrrrrs)Z