
­­­­­­­­­­­­­­­­­­
<!DOCTYPE html>
<html>
3
UZ3                 @   sD  d dl Z 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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d Z>dd Z?dd Z@dd  ZAd!d" ZBd#d$ ZCdS )%    N)PCIUSBc        
      C   sF  t j } | j }g }x*|jdjdjdjdjdD ]}|j}||jt|dt|t|d}|d d	krzd
|d< |d d	krd|d< |dkrt	|drt	|d|d< |j
|d< |jdkrq:t	|drq:t	|ddkrq:t	|ddkrq:n|dkrJt	|d}|r"|jd\|d< |d< t	|d}|r|jd\|d< |d< n>|dkrt	|drnt	|d|d< t	|drt	|d|d< t	|dr4t	|ddkr4t	|dst	|dr4t	|drt	|d}tjd |}	nt	|d}tjd!|}	|	r4|	jd"|d< |	jd#|d< |	jd$|d< |	jd%|d< |j| q:W |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/            )pyudevZContextZlist_devicesZmatch_subsystem	subsystemr
   _clasify_pci_type_clasify_class_get_device_desc_get_device_propertyZsys_namedevice_typesplitresearchgroupappend)
contextZdevicesresultr   r   Zresult_item	pci_classZ
pci_subsyspathm r+   #/usr/lib/python3.6/hardware_udev.pyget_devices   sj    ,









r-   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)r/   r'   r+   r+   r,   get_computer_infob   s
    r0   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-1Nr+   )r   r+   r+   r,   r      s    r   c             C   s,   y| j j|S  tk
r&   | j|S X dS )zS return the property of the given device independent of the implementation version N)Z
propertiesgetAttributeError)r   Zpropr+   r+   r,   r      s    r   c             C   s:  t t| d\}}| j}|tkr$dS |tkrD|tkr8dS |tkrDdS t| d}|rr|j }d|krfdS d|krrdS |rX|tkrdS |t	kr|t
krd	S |tkrd
S n|tkr|tkrdS |tkrdS |tkrdS |tkrdS nx|tko|tk rdS |tkr|tkrdS |tkr6|tkr&dS |tkrXdS n"|tkrX|tksT|tkrXdS |dkrt| dst| drt| ddkrdS dS n|dkrdS |dkr| jdkrt| }|dks|dkrdS |dkrd S |d!krdS dS tjd"| j}|rd#S |dkrdS |d$ks2|d%kr6d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    _get_scsi_dev_typer"   r#   sys_path)r   Z
base_classZ	sub_classr   Z	id_serialZdev_typer*   r+   r+   r,   r      s    










r   c       	      C   sL  | j }d}d}|dkrLt| djd\}}t }d|j||j||f }n|dkr&t| d}t }|rd|j||j|t| df }n| jd	kr| jd
krd}n| jdkrd}nd}nh| jdkot| dr:t| djddd \}}dt	|d }dt	|d }d|j||j||f }n|dkr:t| d}|rD|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_MODEL )
r   r   r!   r   Z
get_vendorZ
get_devicer   r    r
   int)	r   r   Zcommandr'   Z	vendor_idZ	device_idr   r   Zmodel_idr+   r+   r,   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   )NNirZ   r+   )r(   r+   r+   r,   r;   B  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   )openrT   IOErrorreadlineclose)r   fr'   r+   r+   r,   rS   N  s    rS   )Dr   r.   r"   Zhwdatar   r   r-   r0   rE   rG   rF   rI   ZPCI_CLASS_STORAGE_IPIrH   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_OTHERrA   ZPCI_CLASS_DISPLAY_VGAZPCI_CLASS_DISPLAY_XGAZPCI_CLASS_DISPLAY_3DZPCI_CLASS_DISPLAY_OTHERrM   rN   rO   ZPCI_CLASS_MULTIMEDIA_PHONEZPCI_CLASS_MULTIMEDIA_OTHERrP   ZPCI_CLASS_BRIDGE_HOSTZPCI_CLASS_BRIDGE_ISAZPCI_CLASS_BRIDGE_EISAZPCI_CLASS_BRIDGE_MCZPCI_CLASS_BRIDGE_PCIrQ   ZPCI_CLASS_BRIDGE_NUBUSrR   ZPCI_CLASS_BRIDGE_RACEWAYZPCI_CLASS_BRIDGE_OTHERrJ   ZPCI_CLASS_COMMUNICATION_SERIALZ PCI_CLASS_COMMUNICATION_PARALLELZ#PCI_CLASS_COMMUNICATION_MULTISERIALrK   ZPCI_CLASS_COMMUNICATION_OTHERr=   r>   ZPCI_CLASS_INPUT_PENr?   rL   ZPCI_CLASS_INPUT_GAMEPORTZPCI_CLASS_INPUT_OTHERrB   rD   ZPCI_CLASS_SERIAL_ACCESSZPCI_CLASS_SERIAL_SSArC   ZPCI_CLASS_SERIAL_FIBERZPCI_CLASS_SERIAL_SMBUSr   r   r   r   r;   rS   r+   r+   r+   r,   <module>   s   M`"