a „oe ã@s¬ddlZddlZddlZddlZddlTddlTdd„ZGdd„dƒZedkr¨e dƒe ej ƒd krŽeƒZ e dur˜e d ƒe d ƒe  d ¡n ej d Z ee ƒZe ¡dS) éN)Ú*c CsltddƒD]\}d|f}z:t|tjtjBddtjtjdƒ}t|ƒdkrP|WSWq tydYq 0q dS)NééúCOM%dr) ÚrangeÚ CreateFileÚwin32conÚ GENERIC_READÚ GENERIC_WRITEÚ OPEN_EXISTINGÚFILE_ATTRIBUTE_NORMALZGetCommModemStatusÚerror)ÚiÚportÚhandle©rú>C:\Program Files\Certbot\pkgs\win32\Demos\win32comport_demo.pyÚ FindModems"  ù  rc@s,eZdZdd„Zdd„Zdd„Zdd„Zd S) Ú SerialTTYcCsÈt|ƒtdƒkrd|f}t|tjtjBddtjtjtjBdƒ|_t |jt ƒt |jddƒt |jt tBtBtBƒd}t|j|ƒt|jƒ}t|_d|_t|_t|_t|j|ƒtd||jfƒdS)Nrri)lÿÿréèrrézConnected to %s at %s baud)Útyperrr r r r ZFILE_FLAG_OVERLAPPEDrZ SetCommMaskZ EV_RXCHARZ SetupCommZ PurgeCommZ PURGE_TXABORTZ PURGE_RXABORTZ PURGE_TXCLEARZ PURGE_RXCLEARZSetCommTimeoutsZ GetCommStateZ CBR_115200ZBaudRateZByteSizeZNOPARITYZParityZ ONESTOPBITZStopBitsZ SetCommStateÚprint)ÚselfrZtimeoutsZdcbrrrÚ__init__3s2   ù ÿ   zSerialTTY.__init__cCshtƒ}tddddƒ|_z@t ¡}t|ƒdkr.qJt|j||ƒt|jt ƒqWt |j ƒn t |j ƒ0dS)Nrré) Ú OVERLAPPEDÚ CreateEventÚhEventÚmsvcrtZgetchÚordZ WriteFilerÚWaitForSingleObjectÚINFINITEÚSetEventÚ eventStop)rÚ overlappedZchrrrÚ_UserInputReaderThreadSs z SerialTTY._UserInputReaderThreadcCs¢tƒ}tddddƒ|_t|j|ƒ\}}|dkr8t|jƒt|j|jgdtƒ}|t kr�t |jƒ\}}t |j|j |ƒ\}}t |jtƒtj |¡qtj ¡qžqdS)Nrr)rrrZ WaitCommEventrr#ZWaitForMultipleObjectsr$r"Z WAIT_OBJECT_0ZClearCommErrorZReadFileZcbInQuer!ÚsysÚstdoutÚwriteÚclose)rr%ÚrcÚmaskÚflagsZcomstatÚdatarrrÚ_ComPortThreadas ÿ  zSerialTTY._ComPortThreadcCsPtddddƒ|_tj|jd�}| ¡tj|jd�}| ¡| ¡| ¡dS)Nr)Útarget)rr$Ú threadingÚThreadr&Ústartr/Újoin)rZ user_threadZ com_threadrrrÚRunysz SerialTTY.RunN)Ú__name__Ú __module__Ú __qualname__rr&r/r5rrrrr2s rÚ__main__z0Serial port terminal demo - press Ctrl+C to exitrz2No COM port specified, and no modem could be foundz?Please re-run this script with the name of a COM port (eg COM3))rr'r1rZ win32eventZ win32filerrr6rÚlenÚargvrÚexitZttyr5rrrrÚs$R