a :ã$YH,ã@s”ddlZddlZddlmZddlmZddlmZddlmZddlmZddlmZddlm Z dd lm Z ddl Z dd l m Z dd lmZd d „ZdZejZejZejZejZe e¡ZZejZZeZeZGdd„dejƒZ Gdd„dejƒZ!e e!¡Z"ejZ#ej$ %d¡Z&e&j'Z'ege'_(ee'_)e&j*Z+ee e ¡eege+_(ee+_)e&j,Z,eee"ge,_(ee,_)e&j-Z.e e ¡eeege._(ee._)ee._/e&j0Z1ee"eeeeege1_(ee1_)e&j2Z3ee"eeege3_(ee3_)e&j4Z4ee"eeeege4_(e e4_)ej$ %d¡Z5e5j6Z6e ge6_(ee6_)e5j7Z8e eeeeege8_(ee8_)dZ9dZ:dZ;dZdZ?dZ@dZAdZBdZCdd„ZDd#dd „ZEeFd!kreGeEƒƒD]\ZHZIZJeKd" LeHeIeJ¡ƒqpdS)$éN)ÚBOOL)ÚHWND)ÚDWORD)ÚWORD)ÚLONG)ÚULONG)ÚHKEY)ÚBYTE)Ú ULONG_PTR)Úlist_ports_commoncCs|dkrt ¡‚|S)Nr)ÚctypesÚWinError)ÚvalueÚfuncZ arguments©rúC/usr/lib/python3.9/site-packages/serial/tools/list_ports_windows.pyÚ ValidHandlesrc@s4eZdZdefdefdefdedfgZdd„ZdS) ÚGUIDÚData1ÚData2ÚData3ÚData4éc CsLd |j|j|jd dd„|jdd…Dƒ¡d dd„|jdd…Dƒ¡¡S)Nz{{{:08x}-{:04x}-{:04x}-{}-{}}}ÚcSsg|]}d |¡‘qS©z{:02x}©Úformat©Ú.0ÚdrrrÚ ;óz GUID.__str__..écSsg|]}d |¡‘qSrrrrrrr <r!)rrrrÚjoinr©ÚselfrrrÚ__str__6sûz GUID.__str__N)Ú__name__Ú __module__Ú __qualname__rrr Ú_fields_r&rrrrr.s  ürc@s0eZdZdefdefdefdefgZdd„ZdS)ÚSP_DEVINFO_DATAÚcbSizeÚ ClassGuidÚDevInstZReservedcCsd |j|j¡S)NzClassGuid:{} DevInst:{})rr-r.r$rrrr&HszSP_DEVINFO_DATA.__str__N)r'r(r)rrr r*r&rrrrr+@s ür+ÚsetupapiZAdvapi32r"éézéé é#é ic csètdƒ}tƒ}td|t |¡t |¡ƒs2t ¡‚t|jƒD]¤}d}t t ||¡dt t ƒ}t ƒ}t |¡|_ d}t||t |¡ƒrÚ|d7}t|t |¡tdttƒ}t d¡}tt |¡ƒ}t|dddt |¡t |¡ƒt|ƒ|j d¡rôqtt d¡} t|t |¡| t | ¡ddƒsbt|t |¡tdt | ¡t | ¡ddƒsbt ¡tkrbt ¡‚| j} t |j¡} |  d ¡ræt  d | tj!¡} | røt"|  #d¡d ƒ| _$|  #d ¡rÆt"|  #d ¡d ƒ| _%|  #d ¡ràt"|  #d ¡ƒ}|  #d¡rø|  #d¡| _&t d¡} t|t |¡t'dt | ¡t | ¡ddƒrÚt (d| j¡} g}| D]f}| #d¡rt| )d *t"| #d¡ƒd¡¡n4t+|ƒdkrŽ| )d¡n | )d¡| )| #d¡¡qD|durÈ| )d *d|¡¡|rÚd ,|¡| _-|  .¡| _/np|  d¡rPt  d| tj!¡} | rDt"|  #d¡d ƒ| _$t"|  #d¡d ƒ| _%|  #d¡rD|  #d¡| _&|  .¡| _/n| | _/t d¡}t|t |¡t0dt |¡t |¡ddƒr”|j| _1t d¡}t|t |¡t2dt |¡t |¡ddƒrÒ|j| _3| Vqtt4|ƒqVID_([0-9a-f]{4})(&PID_([0-9a-f]{4}))?(&MI_(\d{2}))?(\\(\w+))?r0ééézUSBROOT\((\w+)\)|#USB\((\w+)\)z{:d}Ú.ú-r"z:{}.{}ÚxrZFTDIBUSz.VID_([0-9a-f]{4})\+PID_([0-9a-f]{4})(\+(\w+))?é)5rrÚSetupDiClassGuidsFromNamer ZsizeofZbyrefr ÚrangerÚSetupDiGetClassDevsÚNULLÚ DIGCF_PRESENTr+r,ÚSetupDiEnumDeviceInfoÚSetupDiOpenDevRegKeyÚDICS_FLAG_GLOBALÚ DIREG_DEVÚKEY_READZcreate_unicode_bufferrÚRegQueryValueExÚ RegCloseKeyÚ startswithÚSetupDiGetDeviceInstanceIdÚ SetupDiGetDeviceRegistryPropertyÚSPDRP_HARDWAREIDZ GetLastErrorÚERROR_INSUFFICIENT_BUFFERr Z ListPortInfoÚreÚsearchÚIÚintÚgroupZvidÚpidZ serial_numberÚSPDRP_LOCATION_PATHSÚfinditerÚappendrÚlenr#ÚlocationZusb_infoÚhwidÚSPDRP_FRIENDLYNAMEÚ descriptionÚ SPDRP_MFGZ manufacturerÚSetupDiDestroyDeviceInfoList)ZGUIDsZ guids_sizeÚindexZbInterfaceNumberZg_hdiZdevinfoÚhkeyZport_name_bufferZport_name_lengthZ szHardwareIDZszHardwareID_strÚinfoÚmZ loc_path_strrYÚgZszFriendlyNameZszManufacturerrrrÚiterate_comports…s  ü ü ú ú   ú ù         ù     þ        ø   ø rdFcCs ttƒƒS)z0Return a list of info objects about serial ports)Úlistrd)Z include_linksrrrÚcomports)srfÚ__main__z {}: {} [{}])F)MrOr Zctypes.wintypesrrrrrrrr ÚserialZ serial.win32r Z serial.toolsr rrAZc_void_pZHDEVINFOZ c_wchar_pZLPCTSTRZPCTSTRZPTSTRZPOINTERZLPDWORDZPDWORDZLPBYTEZPBYTEZ ACCESS_MASKZREGSAMZ Structurerr+ZPSP_DEVINFO_DATAZ PSP_DEVICE_INTERFACE_DETAIL_DATAZwindllZ LoadLibraryr/r^ÚargtypesZrestypeZSetupDiClassGuidsFromNameWr>rCZSetupDiGetClassDevsWr@ZerrcheckZ!SetupDiGetDeviceRegistryPropertyWrLZSetupDiGetDeviceInstanceIdWrKrDZadvapi32rIZRegQueryValueExWrHrBZDIGCF_DEVICEINTERFACEZINVALID_HANDLE_VALUErNrMr[rUr]rErFrGrdrfr'ÚsortedÚportZdescrZÚprintrrrrrÚ s’               %