ó EIRTc @sddlZddlZd„ZddlZddlmZmZddlmZddlm Z ddlm Z ddlm Z ddlm Z dd lm Z dd lmZdd lmZdd lmZdd lmZdZejZejZejZejZeje ƒZZejZZe ZeZ d„Z!d„Z"dej#fd„ƒYZ$dej#fd„ƒYZ%eje%ƒZ&ejZ'ej(j)dƒZ*e*j+Z+ege+_,e e+_-e*j.Z/eeje$ƒe ege/_,e e/_-e*j0Z0ee e&ge0_,e e0_-e*j1Z2eje$ƒee e ge2_,ee2_-ee2_3e*j4Z5ee&e eee ege5_,e e5_-e*j6Z7ee&ee ege7_,e e7_-e*j8Z8ee&e e e e ge8_,ee8_-ej(j)dƒZ9e9j:Z:ege:_,e e:_-e9j;Z<eeeeeege<_,e e<_-dZ=dZ>dZ?dZ@dZAdZBdZCdZDdZEejFdddd d!gƒZGejFdddd d"d#d$d%gƒZHd&„ZIeJd'kr ddlZx5eKeIƒƒD]!\ZLZMZNd(eLeMeNfGHqâWndS()iÿÿÿÿNcCs|dkrtjƒ‚n|S(Ni(tctypestWinError(tvaluetfunct arguments((sL/opt/freeware/lib/python2.7/site-packages/serial/tools/list_ports_windows.pyt ValidHandles (t ULONG_PTRtis_64bit(tHANDLE(tBOOL(tHWND(tDWORD(tWORD(tLONG(tULONG(tLPCSTR(tHKEY(tBYTEicCs t|ƒS(sGet a buffer for a string(R(tlength((sL/opt/freeware/lib/python2.7/site-packages/serial/tools/list_ports_windows.pyt byte_buffer#scCsKg}x5|D]-}|dkr#Pn|jt|d@ƒƒq Wdj|ƒS(Niiÿt(tappendtchrtjoin(tbuffertstc((sL/opt/freeware/lib/python2.7/site-packages/serial/tools/list_ports_windows.pytstring's   tGUIDcBs?eZdefdefdefdedfgZd„ZRS(tData1tData2tData3tData4ic Csnd|j|j|jdjg|jd D]}d|^q)ƒdjg|jdD]}d|^qSƒfS(Ns{%08x-%04x-%04x-%s-%s}Ris%02x(RRRRR (tselftd((sL/opt/freeware/lib/python2.7/site-packages/serial/tools/list_ports_windows.pyt__str__6s *(t__name__t __module__R R Rt_fields_R#(((sL/opt/freeware/lib/python2.7/site-packages/serial/tools/list_ports_windows.pyR/s    tSP_DEVINFO_DATAcBs;eZdefdefdefdefgZd„ZRS(tcbSizet ClassGuidtDevInsttReservedcCsd|j|jfS(NsClassGuid:%s DevInst:%s(R)R*(R!((sL/opt/freeware/lib/python2.7/site-packages/serial/tools/list_ports_windows.pyR#Fs(R$R%R RRR&R#(((sL/opt/freeware/lib/python2.7/site-packages/serial/tools/list_ports_windows.pyR'?s    tsetupapitAdvapi32iiizii iiPioiritisiNiaimiec cs:tdƒ}tƒ}tt|tj|ƒtj|ƒƒsLtjƒ‚nxçt|j ƒD]Ö}t tj||ƒdt t ƒ}tƒ}tj|ƒ|_d}x€t||tj|ƒƒr'|d7}t|tj|ƒtdttƒ}tdƒ}ttj|ƒƒ}t|tddtj|ƒtj|ƒƒt|ƒt|ƒjdƒrbq¨ntdƒ}t|tj|ƒtj|ƒtj|ƒddƒs t|tj|ƒtdtj|ƒtj|ƒddƒs tjƒt krtjƒ‚qq nt|ƒ} | jdƒrªt!j"d| t!j#ƒ} | rª| j$dƒr‚d | j$dƒ| j$d ƒ| j$dƒf} q§d | j$dƒ| j$d ƒf} qªntdƒ} t|tj|ƒt%dtj| ƒtj| ƒddƒs t|ƒd | fVq¨t|ƒt| ƒ| fVq¨Wt&|ƒq\WdS( NiiiiútLPTtUSBs-VID_([0-9a-f]{4})&PID_([0-9a-f]{4})(\\(\w+))?isUSB VID:PID=%s:%s SNR=%sisUSB VID:PID=%s:%ssn/a('RR tSetupDiClassGuidsFromNametPortsRtsizeoftbyrefRtrangeRtSetupDiGetClassDevstNonetNULLt DIGCF_PRESENTR'R(tSetupDiEnumDeviceInfotSetupDiOpenDevRegKeytDICS_FLAG_GLOBALt DIREG_DEVtKEY_READRRtRegQueryValueExtPortNamet RegCloseKeyRt startswithtSetupDiGetDeviceInstanceIdt SetupDiGetDeviceRegistryPropertytSPDRP_HARDWAREIDt GetLastErrortERROR_INSUFFICIENT_BUFFERtretsearchtItgrouptSPDRP_FRIENDLYNAMEtSetupDiDestroyDeviceInfoList( tGUIDst guids_sizetindextg_hditdevinfothkeytport_name_buffertport_name_lengtht szHardwareIDtszHardwareID_strtmtszFriendlyName((sL/opt/freeware/lib/python2.7/site-packages/serial/tools/list_ports_windows.pytcomports‚s”                   1(    t__main__s %s: %s [%s](ORRGRtserialt serial.win32RRtctypes.wintypesRR R R R R RRRRR7tc_void_ptHDEVINFOtc_char_ptPCTSTRtPTSTRtc_chartCHARtPOINTERtLPDWORDtPDWORDtLPBYTEtPBYTEt ACCESS_MASKtREGSAMRRt StructureRR'tPSP_DEVINFO_DATAt PSP_DEVICE_INTERFACE_DETAIL_DATAtwindllt LoadLibraryR,RLtargtypestrestypetSetupDiClassGuidsFromNameAR0R9tSetupDiGetClassDevsAR5terrcheckt!SetupDiGetDeviceRegistryPropertyARCtSetupDiGetDeviceInstanceIdARBR:tadvapi32R@tRegQueryValueExAR>R8tDIGCF_DEVICEINTERFACEtINVALID_HANDLE_VALUERFRDRKR;R<R=tto_bytesR1R?RYR$tsortedtporttdescthwid(((sL/opt/freeware/lib/python2.7/site-packages/serial/tools/list_ports_windows.pyts–                                  ' j