EIRTc@s1ddlZddlmZddlTdZdefdYZyddlZWn*ek rdee fdYZ nXdeej fd YZ e d kr-e d Z ejjd e e Z ejjd e d e _de _e jd e _e jejjd e ndS(iN(twin32(t*cCs d|dS(s%Turn a port number into a device namesCOM%di((tportnum((s?/opt/freeware/lib/python2.7/site-packages/serial/serialwin32.pytdevicest Win32SerialcBs+eZdZd1ZdZdZdZdZdZdZ dZ ddZ dZ dZ dZdZdd Zdd!Zdd"Zdd#Zd$Zd%Zd&Zd'Zd(Zd)d2d*Zed+Zd,Zd-Zd.Ze eed/d0Z!RS(3s5Serial port implementation for Win32 based on ctypes.i2iKiniiii,iXiii` ii%iKiiicOsSd|_d|_d|_t|_tj|_tj |_ t j |||dS(N( tNonethComPortt_overlappedReadt_overlappedWritetFalset _rtsToggleRtRTS_CONTROL_ENABLEt _rtsStatetDTR_CONTROL_ENABLEt _dtrStatet SerialBaset__init__(tselftargstkwargs((s?/opt/freeware/lib/python2.7/site-packages/serial/serialwin32.pyRs      c Cs|jd krtdn|jr6tdn|j}y<|jjdrzt|ddkrzd|}nWntk rnXt j |t j t j Bdd t j t jt jBd|_|jt jkrd |_td|jtjfnyt j|_t jd d dd |j_t j|_t jd ddd |j_t j|jd d t j|_t j|jtj|j|jt j|jt j t j!Bt j"Bt j#BWn+y|j$WnnXd |_n Xt%|_d S( sjOpen port with current settings. This may throw a SerialException if the port cannot be opened.s.Port must be configured before it can be used.sPort is already open.tCOMiis\\.\iscould not open port %r: %riiN(&t_portRtSerialExceptiont_isOpentportstrtuppert startswithtintt ValueErrorRt CreateFilet GENERIC_READt GENERIC_WRITEt OPEN_EXISTINGtFILE_ATTRIBUTE_NORMALtFILE_FLAG_OVERLAPPEDRtINVALID_HANDLE_VALUEtctypestWinErrort OVERLAPPEDRt CreateEventthEventRt SetupCommt COMMTIMEOUTSt _orgTimeoutstGetCommTimeoutstbyreft_reconfigurePortt PurgeCommt PURGE_TXCLEARt PURGE_TXABORTt PURGE_RXCLEARt PURGE_RXABORTt_closetTrue(Rtport((s?/opt/freeware/lib/python2.7/site-packages/serial/serialwin32.pytopen(sN  +      "  # cCs^|jstdn|jdkr0d}nL|jdkrZtjddddf}n"ddt|jdddf}|jdkr|jdk rt|jdf|d}n|jdkrnJ|jdkr|d dtjf}n!|d dt|jdf}tj |jt j tj |tj |jtjtj}tj|jt j ||j|_|jtkrd|_nd|jtkrd|_nI|jtkrd|_n.|jtkrd |_ntd |j|jtkr,tj|_d|_n|jtkrStj |_d|_n|jt!krztj"|_d|_na|jt#krtj$|_d|_n:|jt%krtj&|_d|_ntd |j|j't(krtj)|_*nO|j't+krtj,|_*n1|j't-kr5tj.|_*ntd |j'd|_/|j0ritj1|_2n$|j3rtj4|_2n |j5|_2|j6rtj7|_8n |j9|_8|j3rd|_:n |j0|_:|j6|_;|j<|_=|j<|_>d|_?d|_@d|_AtB|_CtD|_EtjF|jt j |sZtd t jGndS(s,Set communication parameters on opened port.s'Can only operate on a valid port handleiiiiiiiis#Unsupported number of data bits: %rsUnsupported parity mode: %rs#Unsupported number of stop bits: %rsCCannot configure port, some setting was wrong. Original message: %rN(iiiii(HRRt_timeoutRRtMAXDWORDRt_interCharTimeoutt _writeTimeouttSetCommTimeoutsR$R-R*t SetCommMasktEV_ERRtDCBt GetCommStatet _baudratetBaudRatet _bytesizetFIVEBITStByteSizetSIXBITSt SEVENBITSt EIGHTBITSRt_parityt PARITY_NONEtNOPARITYtParitytfParityt PARITY_EVENt EVENPARITYt PARITY_ODDt ODDPARITYt PARITY_MARKt MARKPARITYt PARITY_SPACEt SPACEPARITYt _stopbitst STOPBITS_ONEt ONESTOPBITtStopBitstSTOPBITS_ONE_POINT_FIVEt ONE5STOPBITSt STOPBITS_TWOt TWOSTOPBITStfBinaryt_rtsctstRTS_CONTROL_HANDSHAKEt fRtsControlR tRTS_CONTROL_TOGGLER t_dsrdtrtDTR_CONTROL_HANDSHAKEt fDtrControlRt fOutxCtsFlowt fOutxDsrFlowt_xonxofftfOutXtfInXtfNullt fErrorChart fAbortOnErrortXONtXonChartXOFFtXoffChart SetCommStateR%(RttimeoutstcomDCB((s?/opt/freeware/lib/python2.7/site-packages/serial/serialwin32.pyR.fs  "!!%                                 cCs|jrtj|j|jtj|j|jdk r]tj|jjd|_n|jdk rtj|jjd|_nd|_ndS(sinternal close port helperN( RRR<R+t CloseHandleRRR(R(R((s?/opt/freeware/lib/python2.7/site-packages/serial/serialwin32.pyR4s   cCs#|jr|jt|_ndS(s Close portN(RR4R (R((s?/opt/freeware/lib/python2.7/site-packages/serial/serialwin32.pytcloses  cCs t|S(N(R(RR6((s?/opt/freeware/lib/python2.7/site-packages/serial/serialwin32.pytmakeDeviceNamescCsXtj}tj}tj|jtj|tj|sQtdn|jS(s>Return the number of characters currently in the input buffer.scall to ClearCommError failed( RtDWORDtCOMSTATtClearCommErrorRR$R-RtcbInQue(Rtflagstcomstat((s?/opt/freeware/lib/python2.7/site-packages/serial/serialwin32.pyt inWaitings   *ic CsE|jstn|dkr2tj|jjtj}tj}tj|jt j |t j |st dn|j dkrlt |j|}|dkr`t j|}tj}tj|j||t j |t j |j}| r2tjtjkr2t dt jntj|jjtj}|j|j }q/t}q;t j|}tj}tj|j||t j |t j |j}| rtjtjkrt dt jntj|jt j |jt j |t}|j|j }n t}t|S(sRead 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.iscall to ClearCommError failedsReadFile failed (%r)(RtportNotOpenErrorRt ResetEventRR(RxRyRzR$R-RttimeouttminR{tcreate_string_buffertReadFilet GetLastErrortERROR_IO_PENDINGR%tWaitForSingleObjecttINFINITEtrawtvaluetbytestGetOverlappedResultR5( RtsizeR|R}tntbuftrcterrtread((s?/opt/freeware/lib/python2.7/site-packages/serial/serialwin32.pyRs8    *  3  30 cCs|jstnt|}|rtj}tj|j|t|tj||j }| rtj tj krt dtj n|jdkrtj|j|j tj|t}|jt|krtqn|jSdSdS(s-Output the given string over the serial port.sWriteFile failed (%r)iN(RRtto_bytesRRxt WriteFiletlenR$R-RRRRR%R;RR5RtwriteTimeoutError(RtdataRR((s?/opt/freeware/lib/python2.7/site-packages/serial/serialwin32.pytwrites   0' cCs$x|jrtjdqWdS(sTFlush of file like objects. In this case, wait until all data is written.g?N(t outWaitingttimetsleep(R((s?/opt/freeware/lib/python2.7/site-packages/serial/serialwin32.pytflush,scCs3|jstntj|jtjtjBdS(s9Clear input buffer, discarding all that is in the buffer.N(RRRR/R2R3(R((s?/opt/freeware/lib/python2.7/site-packages/serial/serialwin32.pyt flushInput5s cCs3|jstntj|jtjtjBdS(sbClear output buffer, aborting the current output and discarding all that is in the buffer.N(RRRR/R0R1(R((s?/opt/freeware/lib/python2.7/site-packages/serial/serialwin32.pyt flushOutput:s g?cCsO|jstnddl}tj|j|j|tj|jdS(sHSend break condition. Timed, returns to idle state after given duration.iN(RRRRt SetCommBreakRtClearCommBreak(RtdurationR((s?/opt/freeware/lib/python2.7/site-packages/serial/serialwin32.pyt sendBreak@s    cCs?|jstn|r+tj|jntj|jdS(sBSet break: Controls TXD. When active, to transmitting is possible.N(RRRRR(Rtlevel((s?/opt/freeware/lib/python2.7/site-packages/serial/serialwin32.pytsetBreakHs  cCsf|rtj|_n tj|_|jrb|rItj|jtjqbtj|jtjndS(s)Set terminal status line: Request To SendN(RR R tRTS_CONTROL_DISABLERtEscapeCommFunctiontSETRTStCLRRTS(RR((s?/opt/freeware/lib/python2.7/site-packages/serial/serialwin32.pytsetRTSPs  cCsf|rtj|_n tj|_|jrb|rItj|jtjqbtj|jtjndS(s-Set terminal status line: Data Terminal ReadyN(RR RtDTR_CONTROL_DISABLERRtSETDTRtCLRDTR(RR((s?/opt/freeware/lib/python2.7/site-packages/serial/serialwin32.pytsetDTR^s  cCs/tj}tj|jtj||jS(N(RRxtGetCommModemStatusRR$R-R(Rtstat((s?/opt/freeware/lib/python2.7/site-packages/serial/serialwin32.pyt_GetCommModemStatusls cCs)|jstntj|j@dkS(s(Read terminal status line: Clear To Sendi(RRRt MS_CTS_ONR(R((s?/opt/freeware/lib/python2.7/site-packages/serial/serialwin32.pytgetCTSqs cCs)|jstntj|j@dkS(s)Read terminal status line: Data Set Readyi(RRRt MS_DSR_ONR(R((s?/opt/freeware/lib/python2.7/site-packages/serial/serialwin32.pytgetDSRvs cCs)|jstntj|j@dkS(s)Read terminal status line: Ring Indicatori(RRRt MS_RING_ONR(R((s?/opt/freeware/lib/python2.7/site-packages/serial/serialwin32.pytgetRI{s cCs)|jstntj|j@dkS(s)Read terminal status line: Carrier Detecti(RRRt MS_RLSD_ONR(R((s?/opt/freeware/lib/python2.7/site-packages/serial/serialwin32.pytgetCDs icCs/|dkr|}ntj|j||dS(s Recommend a buffer size to the driver (device driver can ignore this vlaue). Must be called before the port is opended. N(RRR)R(Rtrx_sizettx_size((s?/opt/freeware/lib/python2.7/site-packages/serial/serialwin32.pyt setBufferSizes cCsK|jstn|r1tj|jtjntj|jtjdS(s Manually control flow - when software flow control is enabled. This will send XON (true) and XOFF (false) to the other device. WARNING: this function is not portable to different platforms! N(RRRRtSETXONtSETXOFF(RR((s?/opt/freeware/lib/python2.7/site-packages/serial/serialwin32.pytsetXONs  cCsXtj}tj}tj|jtj|tj|sQtdn|jS(s5return how many characters the in the outgoing bufferscall to ClearCommError failed( RRxRyRzRR$R-RtcbOutQue(RR|R}((s?/opt/freeware/lib/python2.7/site-packages/serial/serialwin32.pyRs   *cCs#||_|jr|jndS(s"Change RTS toggle control setting.N(R RR.(Rt rtsToggle((s?/opt/freeware/lib/python2.7/site-packages/serial/serialwin32.pyt setRtsToggles  cCs|jS(s+Get the current RTS toggle control setting.(R (R((s?/opt/freeware/lib/python2.7/site-packages/serial/serialwin32.pyt getRtsTogglestdocsRTS toggle control setting(i2iKiniiii,iXiii` ii%iKiiiN("t__name__t __module__t__doc__t BAUDRATESRR7R.R4RvRwR~RRRRRRRRRRRRRRRRR5RRRRtpropertyR(((s?/opt/freeware/lib/python2.7/site-packages/serial/serialwin32.pyRs< > j     #              tSerialcBseZRS((RR(((s?/opt/freeware/lib/python2.7/site-packages/serial/serialwin32.pyRscBseZRS((RR(((s?/opt/freeware/lib/python2.7/site-packages/serial/serialwin32.pyRst__main__is%s iKi(R$tserialRtserial.serialutilRRRtiot ImportErrortFileLikeRt RawIOBaseRtstsyststdoutRtbaudratetdatabitsRvR6R7(((s?/opt/freeware/lib/python2.7/site-packages/serial/serialwin32.pyt s*