o
    äî‡^˜  ã                   @   sh   d dl mZ d dlZd dlZd dlZd dlZdd„ ZG dd„ deƒZdd„ Z	e
d	kr2eed
ƒƒ dS dS )é    )Úabsolute_importNc              	   C   sH   g }t  d| ¡D ]}|r!zt|ƒ}W n	 ty   Y nw | |¡ q|S )zc    Convert string into a list of texts and numbers in order to support a
    natural sorting.
    z(\d+))ÚreÚsplitÚintÚ
ValueErrorÚappend)ÚtextÚresultÚgroup© r   ú@/usr/lib/python3/dist-packages/serial/tools/list_ports_common.pyÚnumsplit   s   ÿ
€r   c                   @   sZ   e Zd ZdZddd„Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ ZdS )ÚListPortInfoz+Info collection base class for serial portsFc                 C   s†   || _ tj |¡| _d| _d| _d | _d | _d | _	d | _
d | _d | _d | _|s=|d ur?tj |¡rAd tj |¡¡| _d S d S d S d S )Nzn/azLINK={})ÚdeviceÚosÚpathÚbasenameÚnameÚdescriptionÚhwidÚvidÚpidÚserial_numberÚlocationÚmanufacturerÚproductÚ	interfaceÚislinkÚformatÚrealpath)Úselfr   Úskip_link_detectionr   r   r   Ú__init__&   s   ÿzListPortInfo.__init__c                 C   s0   | j durd | j| j ¡S | jdur| jS | jS )z8return a short string to name the port based on USB infoNú{} - {})r   r   r   r   ©r    r   r   r   Úusb_description7   s
   

zListPortInfo.usb_descriptionc                 C   sJ   d  | jpd| jp
d| jdurd  | j¡nd| jdur"d  | j¡¡S d¡S )z9return a string with USB related information about devicezUSB VID:PID={:04X}:{:04X}{}{}r   Nz SER={}Ú z LOCATION={})r   r   r   r   r   r$   r   r   r   Úusb_info@   s   üüzListPortInfo.usb_infoc                 C   s   |   ¡ | _|  ¡ | _dS )z)update description and hwid from USB dataN)r%   r   r'   r   r$   r   r   r   Úapply_usb_infoH   s   
zListPortInfo.apply_usb_infoc                 C   s   t |tƒo
| j|jkS ©N)Ú
isinstancer   r   ©r    Úotherr   r   r   Ú__eq__M   s   zListPortInfo.__eq__c                 C   s
   t | jƒS r)   )Úhashr   r$   r   r   r   Ú__hash__P   s   
zListPortInfo.__hash__c                 C   s:   t |tƒstd t| ƒjt|ƒj¡ƒ‚t| jƒt|jƒk S )Nz unorderable types: {}() and {}())r*   r   Ú	TypeErrorr   ÚtypeÚ__name__r   r   r+   r   r   r   Ú__lt__S   s   
þzListPortInfo.__lt__c                 C   s   d  | j| j¡S )Nr#   )r   r   r   r$   r   r   r   Ú__str__Z   s   zListPortInfo.__str__c                 C   s8   |dkr| j S |dkr| jS |dkr| jS td |¡ƒ‚)z7Item access: backwards compatible -> (port, desc, hwid)r   é   é   z{} > 2)r   r   r   Ú
IndexErrorr   )r    Úindexr   r   r   Ú__getitem__]   s   zListPortInfo.__getitem__N)F)r2   Ú
__module__Ú__qualname__Ú__doc__r"   r%   r'   r(   r-   r/   r3   r4   r9   r   r   r   r   r   #   s    
	r   c                 C   s>   g }t   d¡D ]}tj |¡rtj |¡| v r| |¡ q|S )zd    search all /dev devices and look for symlinks to known ports already
    listed in devices.
    z/dev/*)Úglobr   r   r   r   r   )ÚdevicesÚlinksr   r   r   r   Ú
list_linksj   s   
€r@   Ú__main__Údummy)Ú
__future__r   r   r=   r   Úos.pathr   Úobjectr   r@   r2   Úprintr   r   r   r   Ú<module>   s   
Gÿ