c gr,t;d|j5j>|j5j?,t;d|j5j?|j5j@,t;d|j5j@|j5jAr,t;d|j5jAtjB|_8d|_<|jCrtjD|_En$|jFr tjGn tjH|_E|jC|_I|jJ|_K|jJ|_Ld|_Md|_Nd|_Ot.jP|_Qt.jR|_StjT|jtj|s3tdtjUdS)z,Set communication parameters on opened port.z'Can only operate on a valid port handleNrir#r"z%Unsupported number of data bits: {!r}zUnsupported parity mode: {!r}z%Unsupported number of stop bits: {!r}zQUnsupported value for RS485Settings.rts_level_for_tx: {!r} (only True is allowed)zRUnsupported value for RS485Settings.rts_level_for_rx: {!r} (only False is allowed)zPUnsupported value for RS485Settings.delay_before_tx: {!r} (only None is allowed)zPUnsupported value for RS485Settings.delay_before_rx: {!r} (only None is allowed)zJUnsupported value for RS485Settings.loopback: {!r} (only False is allowed)zCCannot configure port, something went wrong. Original message: {!r})Vrrrr;_timeoutMAXDWORDReadIntervalTimeoutmaxr*ReadTotalTimeoutConstant_inter_byte_timeout_write_timeoutWriteTotalTimeoutConstantSetCommTimeoutsr5r> SetCommMaskEV_ERRDCB GetCommState _baudrateBaudRate _bytesizeserialFIVEBITSByteSizeSIXBITS SEVENBITS EIGHTBITSr+r3_parity PARITY_NONENOPARITYParityfParity PARITY_EVEN EVENPARITY PARITY_ODD ODDPARITY PARITY_MARK MARKPARITY PARITY_SPACE SPACEPARITY _stopbits STOPBITS_ONE ONESTOPBITStopBitsSTOPBITS_ONE_POINT_FIVE ONE5STOPBITS STOPBITS_TWO TWOSTOPBITSfBinary _rs485_mode_rtsctsRTS_CONTROL_HANDSHAKE fRtsControl _rts_stateRTS_CONTROL_ENABLERTS_CONTROL_DISABLE fOutxCtsFlowrts_level_for_txrts_level_for_rxdelay_before_txdelay_before_rxloopbackRTS_CONTROL_TOGGLE_dsrdtrDTR_CONTROL_HANDSHAKE fDtrControl _dtr_stateDTR_CONTROL_ENABLEDTR_CONTROL_DISABLE fOutxDsrFlow_xonxofffOutXfInXfNull fErrorChar fAbortOnErrorXONXonCharXOFFXoffChar SetCommStater6)rtimeoutscomDCBs rr?zSerial._reconfigure_portds  M!"KLL L%'' =  ]a  +0>H ( (03C 8L4M4Mq0Q0QH - =A  $":"F+.s43Kd3R/S/SUV+W+WH (   &   A % %16H . .14S9Lt9S5T5TVW1X1XH . d/h1G1GHHH $+U\::: 4,fl6.B.BCCC. >V_ , ,FOO ^v~ - -FOO ^v/ / /FOO ^v/ / /FOODKKDN[[\\ \ <6- - -!NFMFNN \V/ / /!,FMFNN \V. . .!OFMFNN \V/ / /!,FMFNN \V0 0 0!-FMFNN<CCDLQQRR R >V0 0 0#.FOO ^v= = =#0FOO ^v2 2 2#/FOODKKDN[[\\ \   #| p%*%@""AE%oU%=%=V[Vo""&,F  #4 = gnn(9<<===0 = hoo(9<<===/; fmm(8;;<<</; fmm(8;;<<<( 5 `gg(144555"'!9F "#F  < l!&!???(,%%1!!###!$"8"?@@@)-&  d/ 0 0 0 $D    ) (rcN|jr|d|_dSdS)z Close portFN)r&rErs rclosez Serial.closes. < ! KKMMM DLLL ! !rc@tj}tj}tj|jt j|t j|s3tdt j |j S)z9Return the number of bytes currently in the input buffer.ClearCommError failed ({!r})) rDWORDCOMSTATClearCommErrorrr5r>rr3r6cbInQuerflagscomstats r in_waitingzSerial.in_waitingsw -//#D$5v|E7J7JFLY`LaLabb \!"@"G"GHYHY"Z"Z[[ [rr#c J|jst|dkrktj|jjtj}tj}tj|j tj |tj |s3td tj|jdkrt!|j|n|}|dkr}tj|}tj}tj|j ||tj |tj |j}|s^tjtjtjfvr3td tjtj|j tj |jtj |d}|sTtjtjkr3td tj|jd|j} nt7} nt7} t7| S)z Read size bytes from the serial port. If a timeout is set it may return less characters as requested. With no timeout it will block until the requested number of bytes is read. rrzReadFile failed ({!r})Tz!GetOverlappedResult failed ({!r})N)r&rr ResetEventrr9rrrrr5r>rr3r6timeoutminrcreate_string_bufferReadFile GetLastError ERROR_SUCCESSERROR_IO_PENDINGGetOverlappedResultERROR_OPERATION_ABORTEDrawvaluebytes) rsizerrnbufrcread_ok result_okreads rrz Serial.reads+ | %"$$ $ !88  T29 : : :KMMEmooG'(96<;N;NPVP\]dPePeff `%&D&K&KFOL]L]&^&^___.2la.?.?GOT***TA1uu1!44[]].%L$$L!677 99 ^5#5#7#7@SUZUk?l#l#l)*B*I*I&/J[J[*\*\]]]!5%L!677L$$  !m)++u/LLL-.Q.X.XY_YhYjYj.k.klllwyy)ww77DT{{rc,|jstt|}|rtj}tj|j|t|tj ||j }|j dkr|s^tj tj tjfvr3tdtjtj|j|j tj |dtj tjkr|jS|jt|krt+d|jS|r tj ntj }|tjtjtjfvrdS|tj tjfvrt|StdtjdS)z2Output the given byte string over the serial port.rzWriteFile failed ({!r})Tz Write timeout)r&rrrr WriteFilerlenr5r>rrRrrrrr3r6rrrr ERROR_INVALID_USER_BUFFERERROR_NOT_ENOUGH_MEMORY)rdatarsuccess errorcodes rwritez Serial.write/s| %"$$ $~~   Aod&7s4yy&,WX//[_[qrrG"a''_5#5#7#7@SUZUk?l#l#l)*C*J*J6?K\K\*]*]^^^)$*;T=SU[UabcUdUdfjkkk%''5+HHH7N7c$ii''0AAAw3:TE//@R@T@T !@%B_!&!>!@@@15#68N"OOOt99$)*C*J*J6?K\K\*]*]^^^1rcN|jrtjd|jdSdS)zb Flush of file like objects. In this case, wait until all data is written. g?N) out_waitingtimesleeprs rflushz Serial.flushTs@   Jt        rc|jsttj|jtjtjzdS)z9Clear input buffer, discarding all that is in the buffer.N)r&rrr@rrCrDrs rreset_input_bufferzSerial.reset_input_buffer_s>| %"$$ $ )5+>AT+TUUUUUrc|jsttj|jtjtjzdS)zs Clear output buffer, aborting the current output and discarding all that is in the buffer. N)r&rrr@rrArBrs rreset_output_bufferzSerial.reset_output_bufferes@ | %"$$ $ )5+>AT+TUUUUUrc|jst|jrtj|jdStj|jdS)zBSet break: Controls TXD. When active, to transmitting is possible.N)r&r _break_stater SetCommBreakrClearCommBreakrs r_update_break_statezSerial._update_break_statensW| %"$$ $   4  t0 1 1 1 1 1  !2 3 3 3 3 3rc|jr&tj|jtjdStj|jtjdS)z)Set terminal status line: Request To SendN)r|rEscapeCommFunctionrSETRTSCLRRTSrs r_update_rts_statezSerial._update_rts_statewI ? F  $T%6 E E E E E  $T%6 E E E E Erc|jr&tj|jtjdStj|jtjdS)z-Set terminal status line: Data Terminal ReadyN)rrrrSETDTRCLRDTRrs r_update_dtr_statezSerial._update_dtr_state~rrc|jsttj}tj|jt j||jSr) r&rrrGetCommModemStatusrr5r>r)rstats r_GetCommModemStatuszSerial._GetCommModemStatussK| %"$$ ${}}  !2FL4F4FGGGzrcLtj|zdkS)z(Read terminal status line: Clear To Sendr)r MS_CTS_ONrrs rctsz Serial.cts"!9!9!;!;;q@@rcLtj|zdkS)z)Read terminal status line: Data Set Readyr)r MS_DSR_ONrrs rdsrz Serial.dsrrrcLtj|zdkS)z)Read terminal status line: Ring Indicatorr)r MS_RING_ONrrs rriz Serial.ri#$":":"<"<<AArcLtj|zdkS)z)Read terminal status line: Carrier Detectr)r MS_RLSD_ONrrs rcdz Serial.cdrrr$NcD||}tj|j||dS)z Recommend a buffer size to the driver (device driver can ignore this value). Must be called after the port is opened. N)rr:r)rrx_sizetx_sizes rset_buffer_sizezSerial.set_buffer_sizes+ ?G )7G<<<<rr3r6cbOutQuers rrzSerial.out_waitingsx -//#D$5v|E7J7JFLY`LaLabb \!"@"G"GHYHY"Z"Z[[ [rcBtj}tj|jt j|t j|d}|sGtjtjtjfvrtj |j|dSdSdS)ACancel a blocking read operation, may be called from other threadFN) rrrrr5r>rrERROR_IO_INCOMPLETE CancelIoEx)r overlappedrerrs r_cancel_overlapped_iozSerial._cancel_overlapped_ios[]]'   L $ $ L      rs'&&&&&  mmmmmmmmmmmmmmFAFAFAFAFAZFAFAFAFAFAr