
­­­­­­­­­­­­­­­­­­
<!DOCTYPE html>
<html>
3
UZE-                 @   sH  d Z ddlmZmZ ddlZdZdZdZdZdZ	dZ
dZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZd	ZdZdZdZdZ dZ!d
Z"d	Z#dZ$dZ%dZ&dZ'dZ(dZ)dZ*dZ+dZ,dZ-dZ.dZ/dZ0dZ1dZ2dZ3dZ4dZ5dZ6dZ7dZ8dZ9d
Z:dd Z;dd Z<dd Z=dd Z>dd Z?dd Z@dd ZAdd ZBdd  ZCd!d" ZDdS )#z Get hardware info using HAL     )HalTree	HalDeviceN            P               	      c              C   s   g } t j }|jdd}t j|d}|j }t }x>|D ]6}|jd|}t j|d}|j }	t|	}
|j|
 q8W t	|j
}|S )Nzorg.freedesktop.Halz/org/freedesktop/Hal/Managerzorg.freedesktop.Hal.Managerzorg.freedesktop.Hal.Device)dbus	SystemBus
get_object	InterfaceZGetAllDevicesr   ZGetAllPropertiesr   addprocess_hal_nodeshead)retbusZhal_manager_objZhal_managerZdevice_listZhal_treeZudiZ
device_objdevice
propertiesZhaldev
kudzu_list r   "/usr/lib/python3.6/hardware_hal.pyread_hal\   s     

r   c             C   s&  g }t | | _| jr| j}i }| j|d< tt| |d< |d dkrd|jkr\|jd |d< d|jkrt|jd |d< d|jkr|jd |d	< d
|jkr|jd
 |d< tt| |d< t| }|rt||d< tt| |d< tt	| |d< d|d< |j
| x"| jD ]}t|}|j| qW |S )Nclassr   Zscsiz	scsi.hostZprop1zscsi.targetZprop2zscsi.busZprop3zscsi.lunZprop4driverr   descZpciTyper   Zdetached)classify_halclassificationparentstrget_device_busr   get_device_driverget_device_pathget_device_descriptionget_device_pcitypeappendZchildrenr   extend)noder   r#   devZdevice_pathZchildZ
child_listr   r   r   r   t   s8    






r   c             C   s^  d| j krdS d| j kr\d| j kr\| j d dkr\d| j d j krFdS d| j d j kr\d	S d
| j kr| j d
 tkrzdS | j d
 tkr| j d tkrdS | j d
 tkr| j d tkrdS | j d tkrdS | j d tkrdS | j d
 t	kr| j d t
krdS | j d
 tkr"| j d tkr"dS | j d
 tkrZ| j d tkrFdS | j d tkrZdS | j d
 tkr~| j d tkr~dS | j d
 tkr| j d tks| j d tkrdS d| j kr| j d dkrdS | j d dkrdS | j d dkrdS | j d dkrdS d | j kr.| j d  d!kr.dS d"| j kr>d#S d$| j ksVd%| j krZd&S d S )'Nznet.interfaceNETWORKzinfo.productzinfo.categoryinputZkeyboardZKEYBOARDZmouseZMOUSEzpci.device_classZVIDEOzpci.device_subclassZUSBZIDEZSCSIZRAIDZMODEMZSCANNERZCAPTUREZAUDIOZFIREWIREZSOCKETzstorage.drive_typeZcdromZCDROMZdiskZHDZfloppyZFLOPPYZtapeZTAPEzxen.typeZvbdzprinter.productZPRINTERzpci.product_idzusb.product_idZOTHER)r   lowerPCI_BASE_CLASS_DISPLAYPCI_BASE_CLASS_SERIALPCI_CLASS_SERIAL_USBPCI_BASE_CLASS_STORAGEPCI_CLASS_STORAGE_IDEPCI_CLASS_STORAGE_SCSIPCI_CLASS_STORAGE_RAIDPCI_BASE_CLASS_COMMUNICATIONPCI_CLASS_COMMUNICATION_MODEMPCI_BASE_CLASS_INPUTPCI_CLASS_INPUT_SCANNERPCI_BASE_CLASS_MULTIMEDIAPCI_CLASS_MULTIMEDIA_VIDEOPCI_CLASS_MULTIMEDIA_AUDIOPCI_CLASS_SERIAL_FIREWIREPCI_BASE_CLASS_BRIDGEPCI_CLASS_BRIDGE_PCMCIAPCI_CLASS_BRIDGE_CARDBUS)r,   r   r   r   r!      sr    
r!   c             C   sH   d| j kr| j d }n.d| j kr@| j d dkr4d}qD| j d }nd}|S )Nzstorage.buszinfo.busplatformZMISC)r   )r,   r   r   r   r   r%      s    

r%   c             C   s4   d| j kr| j d }nd| j kr,| j d }nd}|S )Nzinfo.linux.driverznet.linux.driverunknown)r   )r,   r   r   r   r   r&     s    

r&   c             C   s|   d}d| j kr| j d }n4d| j kr0| j d }n| jdkrNd| j krN| j d }|rx|jdrh|dd }t|dkrxd}|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.devicezlinux.device_filer.   znet.interfacez/dev/r
      )r   r"   
startswithlen)r,   r-   r   r   r   r'     s    






r'   c             C   sb   d| j kr.d| j kr.| j d d | j d  }n0d| j krD| j d }nd| j krZ| j d }nd}|S )Nzinfo.vendorzinfo.product| )r   )r,   r    r   r   r   r(   *  s    



r(   c             C   sr   d}d}d
}d| j o | j d dkkrj| j}d|j krd|j d dkrd|j d dks^|j d d	krd|}qn|}n|}|S )Nr   r   zinfo.busZpcizpci.device_classr	   zpci.device_subclassr
   r   )r   r#   )r,   ZPCI_TYPE_PCMCIAZPCI_TYPE_PCIZPCI_TYPE_NOT_PCIr#   Zpcityper   r   r   r)   7  s    
r)   c              C   s$   t j } | jdd}t j|d}|S )Nzorg.freedesktop.Halz%/org/freedesktop/Hal/devices/computerzorg.freedesktop.Hal.Device)r   r   r   r   )r   Zcomputer_objZcomputerr   r   r   get_hal_computerK  s
    rK   c              C   s,   dd l } | jd\}}| jd\}}||fS )Nr   z/etc/init.d/haldaemon statusz/etc/init.d/messagebus status)commandsZgetstatusoutput)rL   Z
hal_statusmsgZdbus_statusr   r   r   check_hal_dbus_statusS  s    rN   )E__doc__Zhaltreer   r   r   r4   r6   r5   ZPCI_CLASS_STORAGE_FLOPPYZPCI_CLASS_STORAGE_IPIr7   ZPCI_CLASS_STORAGE_OTHERZPCI_BASE_CLASS_NETWORKZPCI_CLASS_NETWORK_ETHERNETZPCI_CLASS_NETWORK_TOKEN_RINGZPCI_CLASS_NETWORK_FDDIZPCI_CLASS_NETWORK_ATMZPCI_CLASS_NETWORK_OTHERr1   ZPCI_CLASS_DISPLAY_VGAZPCI_CLASS_DISPLAY_XGAZPCI_CLASS_DISPLAY_3DZPCI_CLASS_DISPLAY_OTHERr<   r=   r>   ZPCI_CLASS_MULTIMEDIA_PHONEZPCI_CLASS_MULTIMEDIA_OTHERr@   ZPCI_CLASS_BRIDGE_HOSTZPCI_CLASS_BRIDGE_ISAZPCI_CLASS_BRIDGE_EISAZPCI_CLASS_BRIDGE_MCZPCI_CLASS_BRIDGE_PCIrA   ZPCI_CLASS_BRIDGE_NUBUSrB   ZPCI_CLASS_BRIDGE_RACEWAYZPCI_CLASS_BRIDGE_OTHERr8   ZPCI_CLASS_COMMUNICATION_SERIALZ PCI_CLASS_COMMUNICATION_PARALLELZ#PCI_CLASS_COMMUNICATION_MULTISERIALr9   ZPCI_CLASS_COMMUNICATION_OTHERr:   ZPCI_CLASS_INPUT_KEYBOARDZPCI_CLASS_INPUT_PENZPCI_CLASS_INPUT_MOUSEr;   ZPCI_CLASS_INPUT_GAMEPORTZPCI_CLASS_INPUT_OTHERr2   r?   ZPCI_CLASS_SERIAL_ACCESSZPCI_CLASS_SERIAL_SSAr3   ZPCI_CLASS_SERIAL_FIBERZPCI_CLASS_SERIAL_SMBUSr   r   r!   r%   r&   r'   r(   r)   rK   rN   r   r   r   r   <module>   s   )Z
