
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3
UˆŠZE-  ã               @   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r¤d|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| ƒ}|rÌt|ƒ|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ršdS | j d
 tkrÞ| j d tkrºdS | j d tkrÌdS | j d tkrÞdS | j d
 t	krþ| j d t
krþd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�r²dS d| j k�r| j d dk�rÒdS | j d dk�rædS | j d dk�rúd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
