ó EIRTc@süddlZddlZddlZddlZyddlZWnek r\d„Zn Xd„ZejjƒZ d„Z d„Z d„Z d„Z d„Zd „Zd „Zed krøx5eeƒƒD]!\ZZZd eeefGHqÐWndS( iÿÿÿÿNcCsLy2tjdj|ƒƒ\}}|jƒjƒSWntdƒ‚nXdS(Nt s lsusb failed(tostpopen4tjointreadtstriptIOError(targvtsitso((sJ/opt/freeware/lib/python2.7/site-packages/serial/tools/list_ports_linux.pytpopens cCs:y tj|dtjƒjƒSWntdƒ‚nXdS(Ntstderrs lsusb failed(t subprocesst check_outputtSTDOUTRR(R((sJ/opt/freeware/lib/python2.7/site-packages/serial/tools/list_ports_linux.pyR s cCsIy0t|ƒ}|jƒjƒ}|jƒ|SWntk rDdSXdS(s=help function to read a single line from a file. returns noneN(topentreadlineRtcloseRtNone(tfilenametftline((sJ/opt/freeware/lib/python2.7/site-packages/serial/tools/list_ports_linux.pyt read_line*s   cCsYtjdkr$tj||ƒ}ntj||jddƒƒ}|rU|jdƒSdS(s4search for regexp in text, return 1st group on matcht3tasciitreplaceiN(tsystversiontretsearchtdecodetgroup(tregexpttexttm((sJ/opt/freeware/lib/python2.7/site-packages/serial/tools/list_ports_linux.pytre_group4s cCs~tjjtjj|ƒƒjdƒ\}}t|dƒ}|rSd|f}nd}dt|dƒt|dƒ|fS(sDgiven a path to a usb device in sysfs, return a string describing itt-s/serials SNR=%stsUSB VID:PID=%s:%s%ss /idVendors /idProduct(RtpathtbasenametrealpathtsplitR(t sysfs_pathtbustdevtsnrtsnr_txt((sJ/opt/freeware/lib/python2.7/site-packages/serial/tools/list_ports_linux.pytusb_sysfs_hw_stringAs-  c Csÿtjjtjj|ƒƒ}|jdƒd}yµtttjj|dƒƒƒ}tdddd||fgƒ}t d|ƒ}t d |ƒ}t d |ƒp§d }t d |ƒ}t d |ƒ} d|pÔ||pÝ| |fSWnt k rú|SXdS(NR$itdevnumtlsusbs-vs-ss%s:%ssiManufacturer\s+\w+ (.+)siProduct\s+\w+ (.+)siSerial\s+\w+ (.+)R%sidVendor\s+0x\w+ (.+)sidProduct\s+0x\w+ (.+)s%s %s %s( RR&R'R(R)tintRRR R#R( R*tbaseR+R,tdesct iManufacturertiProducttiSerialtidVendort idProduct((sJ/opt/freeware/lib/python2.7/site-packages/serial/tools/list_ports_linux.pytusb_lsusb_stringOs!"! cCs•tjj|ƒ}d||f}tjj|ƒrhtjjtjjtjj|ƒƒƒ}t|ƒSd|f}tjj|ƒr‘t|ƒS|S(s´ Get a human readable description. For USB-Serial devices try to run lsusb to get a human readable description. For USB-CDC devices read the description from sysfs. s"/sys/class/tty/%s/device/driver/%ss"/sys/class/tty/%s/device/interface(RR&R'texiststdirnameR(R:R(tdeviceR3t sys_dev_pathtsys_usb((sJ/opt/freeware/lib/python2.7/site-packages/serial/tools/list_ports_linux.pytdescribeas*   cCsðtjj|ƒ}tjjd|fƒrìd|f}tjj|ƒrTt|ƒSd||f}tjj|ƒrªtjjtjjtjj|ƒƒƒ}t|ƒS|jdƒrìd|f}tjj|ƒrét|dƒSqìndS(s*Try to get a HW identification using sysfss/sys/class/tty/%s/devices/sys/class/tty/%s/device/ids"/sys/class/tty/%s/device/driver/%stttyACMs/..sn/a( RR&R'R;RR<R(R/t startswith(R=R3t sys_id_pathR>R?((sJ/opt/freeware/lib/python2.7/site-packages/serial/tools/list_ports_linux.pythwinfoss  *  cCsUtjdƒtjdƒtjdƒ}g|D]!}|t|ƒt|ƒf^q0S(Ns /dev/ttyS*s /dev/ttyUSB*s /dev/ttyACM*(tglobR@RD(tdevicestd((sJ/opt/freeware/lib/python2.7/site-packages/serial/tools/list_ports_linux.pytcomports‡s)t__main__s %s: %s [%s](RERRRR t ImportErrorR tplatformtlowertplatRR#R/R:R@RDRHt__name__tsortedtportR4thwid(((sJ/opt/freeware/lib/python2.7/site-packages/serial/tools/list_ports_linux.pyt s&