+a_d|_td j#|j$t'j( tj*|_tj.dd dd|j,_tj*|_tj.dddd|j2_tj4|jd d tj6|_tj:|jt'j<|j8|j?tj@|jtjBtjDztjFztjHzd |_y#t$rYDwxYw# |jKd|_#Yd|_xYwxYw) 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.COMz\\.\rzcould not open port {!r}: {!r}T)&_portris_opennameupper startswithint ValueErrorr CreateFile GENERIC_READ GENERIC_WRITE OPEN_EXISTINGFILE_ATTRIBUTE_NORMALFILE_FLAG_OVERLAPPEDrINVALID_HANDLE_VALUEformatportstrctypesWinError OVERLAPPEDr CreateEventhEventr SetupComm COMMTIMEOUTS _orgTimeoutsGetCommTimeoutsbyref_reconfigure_port PurgeComm PURGE_TXCLEAR PURGE_TXABORT PURGE_RXCLEAR PURGE_RXABORT_close)rports ropenz Serial.open#sa :: !"RS S <<!"9: :yy zz|&&u-#d12h-!2C 4'",,    !4!4 4      ' '%*D*D D     : : : $D !"B"I"I$,,X^XgXgXi"jk k $)$4$4$6D !+0+<+t.j@k(rtjB|_"d|_#n |j>t.jHk(rtjJ|_"d|_#n|j>t.jLk(rtjN|_"d|_#n|j>t.jPk(rtjR|_"d|_#n^|j>t.jTk(rtjV|_"d|_#n$t;d j=|j>|jXt.jZk(rtj\|_/n|jXt.j`k(rtjb|_/nW|jXt.jdk(rtjf|_/n$t;d j=|jXd|_4|jjf|jlrtjn|_8n1|jrrtjtntjv|_8|jl|_<np|jjjzs.t;d j=|jjjz|jjj|r.t;dj=|jjj||jjj~.t;dj=|jjj~|jjj.t;dj=|jjj|jjjr.t;dj=|jjjtj|_8d|_<|jrtj|_En1|jrtjntj|_E|j|_I|j|_K|j|_Ld|_Md|_Nd|_Ot.j|_Qt.j|_Stj|jtj|s,tdj=tjy)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  !"KL L%%' ==  ]]a +0>>H (03C 8L4Mq0QH - ==A $":":"F+.s43K3Kd3R/SUV+WH (    &   A %16H .14S9L9Lt9S5TVW1XH . d//h1GH $++U\\: 4,,fll6.BC.. >>V__ ,FO ^^v~~ -FO ^^v// /FO ^^v// /FODKKDNN[\ \ <<6-- -!NNFMFN \\V// /!,,FMFN \\V.. .!OOFMFN \\V// /!,,FMFN \\V00 0!--FMFN<CCDLLQR R >>V00 0#..FO ^^v== =#00FO ^^v22 2#//FODKKDNN[\ \    #||%*%@%@"AEU%=%=V[VoVo""&,,F ##44 gnn((99<==00 hoo((99<==//; fmm((88;<<//; fmm((88;<<(( `gg((11455"'!9!9F "#F  <">?(,%%%1!!#!!$"8"8"?"?@)-&   d// 0 $D  )rcL|jr|jd|_yy)z Close portFN)r&rErs rclosez Serial.closes << KKM DL rcPtj}tj}tj|jt j |t j |s,tdjt j|jS)z9Return the number of bytes currently in the input buffer.ClearCommError failed ({!r})) rDWORDCOMSTATClearCommErrorrr5r>rr3r6cbInQuerflagscomstats r in_waitingzSerial.in_waitingsm --/##D$5$5v||E7JFLLY`Lab!"@"G"GHY"Z[ [rc |js t|dkDrtj|jj tj }tj}tj|jtj|tj|s,tdjtj|jdk(rt!|j"|n|}|dkDrtj$|}tj }tj&|j||tj|tj|j}|s`tj(tj*tj,fvr,tdjtjtj.|jtj|jtj|d}|sQtj(tj0k7r,tdjtj|j2d|j4} t7| St7} t7| St7} 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 ||"$ $ !8   T2299 :KKMEmmoG''(9(96<<;NPVP\P\]dPef%&D&K&KFOOL]&^__.2lla.?GOOT*TA1u11!4[[]..%%LL$LL!6!67 9 5#5#5#7@S@SUZUkUk?l#l)*B*I*I&//J[*\]]!55%%LL!6!67LL$  !))+u/L/LL-.Q.X.XY_YhYhYj.kllwwy) T{wT{7DT{rc|js tt|}|rtj}tj |j |t|tj||j}|jdk7r|s`tjtjtjfvr,tdj!tj"tj$|j |jtj|dtjtj&k(r |j(S|j(t|k7r t+d|j(S|rtjntj}|tj,tj.tj&fvry|tjtjfvr t|Stdj!tj"y)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||"$ $~  Aood&7&7s4y&,,WX/[_[q[qrG""a'5#5#5#7@S@SUZUkUk?l#l)*C*J*J6??K\*]^^))$*;*;T=S=SU[UaUabcUdfjk%%'5+H+HH77N77c$i'0AAww3:E//@R@R@T !@!@%B_B_!&!>!>!@@5#6#68N8N"OOt9$)*C*J*J6??K\*]^^rcb|jr#tjd|jr"yy)zb Flush of file like objects. In this case, wait until all data is written. g?N) out_waitingtimesleeprs rflushz Serial.flushTs$  JJt rc|js ttj|jtj tj zy)z9Clear input buffer, discarding all that is in the buffer.N)r&rrr@rrCrDrs rreset_input_bufferzSerial.reset_input_buffer_s7||"$ $ ))5+>+>ATAT+TUrc|js ttj|jtj tj zy)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_bufferes9 ||"$ $ ))5+>+>ATAT+TUrc|js t|jr tj|j ytj |j y)zBSet break: Controls TXD. When active, to transmitting is possible.N)r&r _break_stater SetCommBreakrClearCommBreakrs r_update_break_statezSerial._update_break_statensC||"$ $      t00 1  !2!2 3rc|jr/tj|jtjytj|jtj y)z)Set terminal status line: Request To SendN)r|rEscapeCommFunctionrSETRTSCLRRTSrs r_update_rts_statezSerial._update_rts_statew= ??  $ $T%6%6 E  $ $T%6%6 Erc|jr/tj|jtjytj|jtj y)z-Set terminal status line: Data Terminal ReadyN)rrrrSETDTRCLRDTRrs r_update_dtr_statezSerial._update_dtr_state~rrc|js ttj}tj|j t j||jSr) r&rrrGetCommModemStatusrr5r>r)rstats r_GetCommModemStatuszSerial._GetCommModemStatussF||"$ ${{}   !2!2FLL4FGzzrcJtj|jzdk7S)z(Read terminal status line: Clear To Sendr)r MS_CTS_ONrrs rctsz Serial.cts!!9!9!;;q@@rcJtj|jzdk7S)z)Read terminal status line: Data Set Readyr)r MS_DSR_ONrrs rdsrz Serial.dsrrrcJtj|jzdk7S)z)Read terminal status line: Ring Indicatorr)r MS_RING_ONrrs rriz Serial.ri#$":":"<<AArcJtj|jzdk7S)z)Read terminal status line: Carrier Detectr)r MS_RLSD_ONrrs rcdz Serial.cdrrcN||}tj|j||y)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 ))7Grr3r6cbOutQuers rrzSerial.out_waitingso --/##D$5$5v||E7JFLLY`Lab!"@"G"GHY"Z[ [rcltj}tj|jt j |t j |d}|sVtj tjtjfvr!tj|j|yyy)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[[]''    LL $ LL    u))+0F0FHaHa/bb   T.. ;csrc:|j|jy)rN)rrrs rrzSerial.cancel_reads ""4#8#89rc:|j|jy)zBCancel a blocking write operation, may be called from other threadN)rrrs rrzSerial.cancel_writes ""4#9#9:rc||stdj|tjjj ||y)z$Change the exclusive access setting.Nz.win32 only supports exclusive access (not: {}))r+r3r\r exclusive__set__)rrs rrzSerial.exclusives@  MTTU^_` `    ' ' / /i @r)r#)r$N)T)#__name__ __module__ __qualname____doc__ BAUDRATESrrGr?rErpropertyrrrrrrrrrrrrrrrrrrrrrrsetter __classcell__)rs@rr r s?4I6 ? B|DB% !'R#JV V4FFAAAABBBB = G   <:;  A!Arr ) __future__rr5rr\rserial.serialutilrrrrr r rrrs.'  mmFAZFAr