a ÓÖ½XwNã@sTddlZddlZddlmZddlZddlmZmZmZmZm Z Gdd„deƒZ dS)éN)Úwin32)Ú SerialBaseÚSerialExceptionÚto_bytesÚportNotOpenErrorÚwriteTimeoutErrorcseZdZdZdZ‡fdd„Zdd„Zdd„Zd d „Zd d „Z e d d„ƒZ d;dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd„Zdd„Zd d!„Ze d"d#„ƒZe d$d%„ƒZe d&d'„ƒZe d(d)„ƒZdÚSerialz5Serial port implementation for Win32 based on ctypes.)é2éKéné†é–éÈi,iXi°ii` iÀi€%iKi–iáiÂcs,d|_d|_d|_tt|ƒj|i|¤ŽdS©N)Ú _port_handleÚ_overlapped_readÚ_overlapped_writeÚsuperrÚ__init__)ÚselfÚargsÚkwargs©Ú __class__©ú6/usr/lib/python3.9/site-packages/serial/serialwin32.pyrszSerial.__init__c CsŽ|jdurtdƒ‚|jr tdƒ‚|j}z.| ¡ d¡rRt|dd…ƒdkrRd|}WntyfYn0t  |tj tj Bddtj tj tjBd¡|_|jtjkrºd|_td  |jt ¡¡ƒ‚zšt ¡|_t dd dd¡|j_t ¡|_t dddd¡|j_t |jd d ¡t ¡|_t |jt |j¡¡| ¡t  |jtj!tj"Btj#Btj$B¡Wn.z | %¡Wn Yn0d|_‚Yn0d |_dS) zx Open port with current settings. This may throw a SerialException if the port cannot be opened. Nz.Port must be configured before it can be used.zPort is already open.ZCOMééz\\.\rzcould not open port {!r}: {!r}ééT)&Z_portrÚis_openÚnameÚupperÚ startswithÚintÚ ValueErrorrZ CreateFileZ GENERIC_READZ GENERIC_WRITEZ OPEN_EXISTINGÚFILE_ATTRIBUTE_NORMALZFILE_FLAG_OVERLAPPEDrZINVALID_HANDLE_VALUEÚformatZportstrÚctypesÚWinErrorZ OVERLAPPEDrZ CreateEventÚhEventrÚ SetupCommÚ COMMTIMEOUTSÚ _orgTimeoutsZGetCommTimeoutsÚbyrefÚ_reconfigure_portÚ PurgeCommÚ PURGE_TXCLEARÚ PURGE_TXABORTÚ PURGE_RXCLEARÚ PURGE_RXABORTÚ_close)rÚportrrrÚopen!s^ "    ù     ÿÿþ z Serial.opencCsÎ|jstdƒ‚t ¡}|jdur"n*|jdkr6tj|_ntt|jdƒdƒ|_ |jdkrv|j durvtt|j dƒdƒ|_|j dur‚n*|j dkr–tj|_ ntt|j dƒdƒ|_ t  |jt |¡¡t |jtj¡t ¡}t |jt |¡¡|j|_|jtjkr d|_nR|jtjkr d|_n<|jtjkr6d|_n&|jtjkrLd |_ntd  |j¡ƒ‚|jtj krztj!|_"d|_#nˆ|jtj$kr˜tj%|_"d|_#nj|jtj&kr¶tj'|_"d|_#nL|jtj(krÔtj)|_"d|_#n.|jtj*kròtj+|_"d|_#ntd  |j¡ƒ‚|j,tj-krtj.|_/n@|j,tj0kr2tj1|_/n(|j,tj2krJtj3|_/ntd  |j,¡ƒ‚d|_4|j5durž|j6r~tj7|_8n|j9rŒtj:ntj;|_8|j6|_rÖtd |j5j>¡ƒ‚|j5j?durötd |j5j?¡ƒ‚|j5j@durtd |j5j@¡ƒ‚|j5jAr2td |j5jA¡ƒ‚tjB|_8d|_<|jCrRtjD|_En|jFr`tjGntjH|_E|jC|_I|jJ|_K|jJ|_Ld|_Md|_Nd|_OtjP|_QtjR|_St T|jt |¡¡sÊtd t U¡¡ƒ‚dS)z,Set communication parameters on opened port.z'Can only operate on a valid port handleNrièrééérz%Unsupported number of data bits: {!r}zUnsupported parity mode: {!r}z%Unsupported number of stop bits: {!r}z:Unsupported value for RS485Settings.rts_level_for_tx: {!r}z:Unsupported value for RS485Settings.rts_level_for_rx: {!r}z9Unsupported value for RS485Settings.delay_before_tx: {!r}z9Unsupported value for RS485Settings.delay_before_rx: {!r}z2Unsupported value for RS485Settings.loopback: {!r}zCCannot configure port, something went wrong. Original message: {!r})Vrrrr,Ú_timeoutZMAXDWORDZReadIntervalTimeoutÚmaxr$ZReadTotalTimeoutConstantZ_inter_byte_timeoutÚ_write_timeoutZWriteTotalTimeoutConstantÚSetCommTimeoutsr(r.Z SetCommMaskZEV_ERRZDCBZ GetCommStateZ _baudrateZBaudRateZ _bytesizeÚserialZFIVEBITSZByteSizeZSIXBITSZ SEVENBITSZ EIGHTBITSr%r'Z_parityZ PARITY_NONEZNOPARITYZParityZfParityZ PARITY_EVENZ EVENPARITYZ PARITY_ODDZ ODDPARITYZ PARITY_MARKZ MARKPARITYZ PARITY_SPACEZ SPACEPARITYZ _stopbitsZ STOPBITS_ONEZ ONESTOPBITZStopBitsZSTOPBITS_ONE_POINT_FIVEZ ONE5STOPBITSZ STOPBITS_TWOZ TWOSTOPBITSZfBinaryZ _rs485_modeZ_rtsctsZRTS_CONTROL_HANDSHAKEZ fRtsControlÚ _rts_stateZRTS_CONTROL_ENABLEZRTS_CONTROL_DISABLEZ fOutxCtsFlowZrts_level_for_txZrts_level_for_rxZdelay_before_txZdelay_before_rxZloopbackZRTS_CONTROL_TOGGLEZ_dsrdtrZDTR_CONTROL_HANDSHAKEZ fDtrControlÚ _dtr_stateZDTR_CONTROL_ENABLEZDTR_CONTROL_DISABLEZ fOutxDsrFlowZ_xonxoffZfOutXZfInXZfNullZ fErrorCharZ fAbortOnErrorZXONZXonCharZXOFFZXoffCharZ SetCommStater))rZtimeoutsZcomDCBrrrr/bsÖ             ÿÿ ÿÿÿÿÿÿ ÿÿ ÿÿzSerial._reconfigure_portcCs||jdurxt |j|j¡|jdur@| ¡t |jj¡d|_|jdurf|  ¡t |jj¡d|_t |j¡d|_dS)zinternal close port helperN) rrr>r-rÚ cancel_readZ CloseHandler*rÚ cancel_write©rrrrr5ãs    z Serial._closecCs|jr| ¡d|_dS)z Close portFN)r r5rDrrrÚcloseósz Serial.closecCsDt ¡}t ¡}t |jt |¡t |¡¡s>td t  ¡¡ƒ‚|j S)z9Return the number of bytes currently in the input buffer.úClearCommError failed ({!r})) rÚDWORDÚCOMSTATÚClearCommErrorrr(r.rr'r)ÚcbInQue©rÚflagsÚcomstatrrrÚ in_waitingûs zSerial.in_waitingrc CsR|js t‚|dkrDt |jj¡t ¡}t ¡}t |j t   |¡t   |¡¡s`t d  t  ¡¡ƒ‚|jdkrvt|j|ƒn|}|dkrtd t  ¡¡ƒ‚|j S)z0Return how many bytes the in the outgoing bufferrF) rrGrHrIrr(r.rr'r)ZcbOutQuerKrrrrc·s zSerial.out_waitingcCsPt ¡}t |jt |¡t |¡d¡}|sLt ¡tjtjfvrLt  |j|¡dS)úACancel a blocking read operation, may be called from other threadFN) rrGrTrr(r.rQrSZERROR_IO_INCOMPLETEZ CancelIoEx)rZ overlappedr\ÚerrrrrÚ_cancel_overlapped_ioÀsüzSerial._cancel_overlapped_iocCs| |j¡dS)rvN)rxrrDrrrrBÍszSerial.cancel_readcCs| |j¡dS)zBCancel a blocking write operation, may be called from other threadN)rxrrDrrrrCÑszSerial.cancel_writecCs0|dur|std |¡ƒ‚ntjj ||¡dS)z$Change the exclusive access setting.Nz.win32 only supports exclusive access (not: {}))r%r'r?rÚ exclusiveÚ__set__)rryrrrryÕs zSerial.exclusive)r)rN)T)#Ú__name__Ú __module__Ú __qualname__Ú__doc__Z BAUDRATESrr7r/r5rEÚpropertyrNr]rbrfrgrhrirkrlrnrorprqrrrsrurcrxrBrCrryÚsetterÚ __classcell__rrrrrsH A  )%          r) r(rdr?rZserial.serialutilrrrrrrrrrrÚ s