509318396
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3
UˆŠZ’3  ã               @   s†  y(d dl Z e jddƒ d dlmZ dZW n( ek
rP   d dlZd dlZdZY nX d dlZd dl	Z	d dl
mZmZ dd	„ Zd
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Z;dZ<dZ=dZ>dZ?dZ@dZAdZBdZCdZDdd„ ZEd d!„ ZFd"d#„ ZGd$d%„ ZHd&d'„ ZIdS )(é    NÚGUdevz1.0)r   TF)ÚPCIÚUSBc        
      C   sr  t rtjƒ } ntjdgƒ} | jdƒ| jdƒ | jdƒ | jdƒ | jdƒ }g }�x|D �]}|jƒ }||jƒ t|ƒdt|ƒt	|ƒdœ}|d	 d
krœd|d	< |d d
kr°d|d< |dk�r|j
dƒrÒ|jdƒ|d< |jƒ |d< |jƒ dkrìqX|jdƒrøqX|jdƒdk�r
qX|jdƒdk�r´qXn–|dk�rv|jdƒ}|�rN|jdƒ\|d< |d< |jdƒ}|�r´|jdƒ\|d< |d< n>|dk�r´|j
dƒ�rš|jdƒ|d< |j
dƒ�r´|jdƒ|d< |j
dƒ�r`|jdƒdk�r`|j
dƒ�sè|j
d ƒ�r`|j
dƒ�r|jdƒ}tjd!|ƒ}	n|jd ƒ}tjd"|ƒ}	|	�r`|	jd#ƒ|d< |	jd$ƒ|d< |	jd%ƒ|d< |	jd&ƒ|d< |j|ƒ qXW |S )'aE   Returns list of dictionaries with keys for every device in system
        (values are provide as example):
        'bus' : 'pci'
        'driver' : 'pcieport-driver'
        'pciType' : '1'
        'detached' : '0'
        'class' : 'OTHER'
        'desc' : 'Intel Corporation|5000 Series Chipset PCI Express x4 Port 2'
    Ú ÚpciÚusbÚblockZccwÚscsiÚ0)ÚbusÚdriverZpciTypeZdetachedÚclassZdescr   NÚOTHERr   ÚunknownZID_BUSr   ÚdeviceÚ	partitionZDM_NAMEZMAJORÚ1Ú7ÚPCI_IDú:Zprop1Zprop2ZPCI_SUBSYS_IDZprop3Zprop4ÚID_VENDOR_IDÚID_MODEL_IDZID_PATHZDEVPATHz.*scsi-(\d+):(\d+):(\d+):(\d+)z!.*/(\d+):(\d+):(\d+):(\d+)/block/é   é   é   é   )Úgi_gudevr   ZClientÚgudevZquery_by_subsystemÚget_subsystemÚ
get_driverÚ_clasify_pci_typeÚ_clasify_classÚ_get_device_descÚhas_propertyÚget_propertyZget_nameÚget_devtypeÚsplitÚreÚsearchÚgroupÚappend)
ZclientZdevicesÚresultr   Ú	subsystemZresult_itemÚ	pci_classZ
pci_subsysÚpathÚm© r0   ú$/usr/lib/python3.6/hardware_gudev.pyÚget_devices   sn    
2








r2   c              C   s$   t jƒ } | d | d | d dœ}|S )z÷ Return dictionaries with keys (values are provided as example):
        'system.formfactor': 'unknown'
        'system.kernel.version': '2.6.18-128.1.6.el5xen'
            'system.kernel.machine': 'i686'
        'system.kernel.name': 'Linux'
    r   r   r   )zsystem.kernel.namezsystem.kernel.versionzsystem.kernel.machine)ÚosÚuname)r4   r+   r0   r0   r1   Úget_computer_infon   s
    r5   r   Z00Z01Z02Z03Z04Z80Ú2Ú3Ú4Ú6Z05Z06Z07Z08r   Ú9ÚCc             C   s   | dkrdS dS dS )z) return 1 if device is PCI, otherwise -1 r   r   z-1Nr0   )r,   r0   r0   r1   r    ¾   s    r    c             C   s>  t | jdƒƒ\}}| jƒ }|tkr&dS |tkrF|tkr:dS |tkrFdS | jdƒ}|rt|jƒ }d|krhdS d|krtdS |�rZ|tkr†dS |t	kr¨|t
kršd	S |tkr¦d
S n²|tkrâ|tkr¼dS |tkrÈdS |tkrÔdS |tkràdS nx|tkoð|tk� rødS |tk�r|tk�rdS |tk�r8|tk�r(dS |tk�rZdS n"|tk�rZ|tk�sV|tk�rZdS |dk�r–| jdƒ�sŒ| jdƒ�r�| jdƒdk�r�dS dS n|dk�r¤dS |dk�rú| jdk�rút| ƒ}|dk�sÖ|dk�rÚdS |dk�rèd S |d!k�rödS dS tjd"| jƒ ƒ}|�rd#S |dk�r"dS |d$k�s6|d%k�r:dS d&S )'a   Clasify type of device. Returned value is one of following string:
        NETWORK, KEYBOARD, MOUSE, VIDEO, USB, IDE, SCSI, RAID, MODEM, SCANNER
        CAPTURE, AUDIO, FIREWIRE, SOCKET, CDROM, HD, FLOPPY, TAPE, PRINTER, OTHER
        or None if it is neither PCI nor USB device.
    Z	PCI_CLASSr   ZKEYBOARDZMOUSEZ	ID_SERIALZkeyboardZmouseZVIDEOr   ZFIREWIREZIDEZSCSIZRAIDZFLOPPYZMODEMZSCANNERZCAPTUREZAUDIOZSOCKETr   ZID_CDROMZID_TYPEZcdZCDROMZHDZsoundr	   Zscsi_devicer   é   r   ZTAPEé   z	.*/lp\d+$ZPRINTERr   r   N) Ú_parse_pci_classr$   r   ÚPCI_BASE_CLASS_NETWORKÚPCI_BASE_CLASS_INPUTÚPCI_CLASS_INPUT_KEYBOARDÚPCI_CLASS_INPUT_MOUSEÚlowerÚPCI_BASE_CLASS_DISPLAYÚPCI_BASE_CLASS_SERIALÚPCI_CLASS_SERIAL_USBÚPCI_CLASS_SERIAL_FIREWIREÚPCI_BASE_CLASS_STORAGEÚPCI_CLASS_STORAGE_IDEÚPCI_CLASS_STORAGE_SCSIÚPCI_CLASS_STORAGE_RAIDÚPCI_CLASS_STORAGE_FLOPPYÚPCI_BASE_CLASS_COMMUNICATIONÚPCI_CLASS_COMMUNICATION_MODEMÚPCI_CLASS_INPUT_SCANNERÚPCI_BASE_CLASS_MULTIMEDIAÚPCI_CLASS_MULTIMEDIA_VIDEOÚPCI_CLASS_MULTIMEDIA_AUDIOÚPCI_BASE_CLASS_BRIDGEÚPCI_CLASS_BRIDGE_PCMCIAÚPCI_CLASS_BRIDGE_CARDBUSr#   r%   Ú_get_scsi_dev_typer'   r(   Úget_sysfs_path)r   Z
base_classZ	sub_classr,   Z	id_serialZdev_typer/   r0   r0   r1   r!   Å   sŒ    










r!   c       	      C   sV  | j ƒ }d}d}|dkrN| jdƒjdƒ\}}tƒ }d|j|ƒ|j||ƒf }nö|dk�r0| jdƒ}tƒ }|rŽd|j|ƒ|j|| jdƒƒf }n | jƒ d	krÄ| jƒ d
kr¬d}n| jƒ dkr¾d}nd}nj| jƒ dkoØ| jdƒ�rD| jdƒjdƒdd… \}}dt	|dƒ }dt	|dƒ }d|j|ƒ|j||ƒf }n|dk�rD| jdƒ}|�rN|S dS dS )z. Return human readable description of device. Nr   r   r   z%s|%sr   r   r   Zusb_interfaceZusbhidzUSB HID InterfaceZhubzUSB Hub InterfacezUSB InterfaceZ
usb_deviceZPRODUCTú/r   z%.4xé   r   ZID_MODELr   )
r   r$   r&   r   Z
get_vendorZ
get_devicer   r%   r   Úint)	r   r,   Zcommandr+   Z	vendor_idZ	device_idr   r   Zmodel_idr0   r0   r1   r"   %  s8    

"

r"   c             C   s(   | dkrdS | dd… | dd	… fS dS )
a=   Parse Class Code. Return touple of
        [base class code, sub-class code]
        You are usually interested to only first two.
        The third - "specific register-level programming interface" is ignored.
        For details, see the PCI Local Bus Specification 2.1/2.2 Section 6.2.1 Device Identification
    Né   r   r   )NNiúÿÿÿéüÿÿÿr\   éþÿÿÿr0   )r-   r0   r0   r1   r>   G  s    r>   c             C   s@   yt d| jƒ  dƒ}W n tk
r*   dS X |jƒ }|jƒ  |S )zQ Return SCSI type of device in raw format as presented in /sys/...devpath../type z%s/typeÚrr   éÿÿÿÿ)ÚopenrW   ÚIOErrorÚreadlineÚclose)r   Úfr+   r0   r0   r1   rV   S  s    rV   )JZgiZrequire_versionZgi.repositoryr   r   ÚImportErrorr   Zglibr3   r'   Zhwdatar   r   r2   r5   rH   rJ   rI   rL   ZPCI_CLASS_STORAGE_IPIrK   ZPCI_CLASS_STORAGE_OTHERr?   ZPCI_CLASS_NETWORK_ETHERNETZPCI_CLASS_NETWORK_TOKEN_RINGZPCI_CLASS_NETWORK_FDDIZPCI_CLASS_NETWORK_ATMZPCI_CLASS_NETWORK_OTHERrD   ZPCI_CLASS_DISPLAY_VGAZPCI_CLASS_DISPLAY_XGAZPCI_CLASS_DISPLAY_3DZPCI_CLASS_DISPLAY_OTHERrP   rQ   rR   ZPCI_CLASS_MULTIMEDIA_PHONEZPCI_CLASS_MULTIMEDIA_OTHERrS   ZPCI_CLASS_BRIDGE_HOSTZPCI_CLASS_BRIDGE_ISAZPCI_CLASS_BRIDGE_EISAZPCI_CLASS_BRIDGE_MCZPCI_CLASS_BRIDGE_PCIrT   ZPCI_CLASS_BRIDGE_NUBUSrU   ZPCI_CLASS_BRIDGE_RACEWAYZPCI_CLASS_BRIDGE_OTHERrM   ZPCI_CLASS_COMMUNICATION_SERIALZ PCI_CLASS_COMMUNICATION_PARALLELZ#PCI_CLASS_COMMUNICATION_MULTISERIALrN   ZPCI_CLASS_COMMUNICATION_OTHERr@   rA   ZPCI_CLASS_INPUT_PENrB   rO   ZPCI_CLASS_INPUT_GAMEPORTZPCI_CLASS_INPUT_OTHERrE   rG   ZPCI_CLASS_SERIAL_ACCESSZPCI_CLASS_SERIAL_SSArF   ZPCI_CLASS_SERIAL_FIBERZPCI_CLASS_SERIAL_SMBUSr    r!   r"   r>   rV   r0   r0   r0   r1   Ú<module>   s�   
P`"