
sKc           @   s-  d  d l  Z  d  d l Z d  d l Td   Z d e f d     YZ y d  d l Z Wn* e k
 r} d e e f d     YZ	 n Xd e e j
 f d     YZ	 e d	 k r)e	 d
  Z e j j d e  e	   Z e j j d e  d e _ d e _ e j   d
 e _ e j   e j j d e  n  d S(   iN(   t   *c         C   s   d |  d S(   s%   Turn a port number into a device names   COM%di   (    (   t   portnum(    (    s6   /usr/lib/python2.7/dist-packages/serial/serialwin32.pyt   device   s    t   Win32Serialc           B   s   e  Z d  Z d) Z d   Z d   Z d   Z d   Z d   Z d   Z	 d d  Z
 d   Z d   Z d   Z d d  Z d d  Z d d   Z d d!  Z d"   Z d#   Z d$   Z d%   Z d&   Z e d'  Z d(   Z RS(*   s5   Serial port implementation for Win32 based on ctypes.i2   iK   in   i   i   i   i,  iX  i  i  i`	  i  i%  i K  i   i   i  c         O   s    d  |  _ t j |  | |  d  S(   N(   t   Nonet   hComPortt
   SerialBaset   __init__(   t   selft   argst   kwargs(    (    s6   /usr/lib/python2.7/dist-packages/serial/serialwin32.pyR      s    	c      	   C   s  |  j  d
 k r t d   n  |  j } y< | j   j d  rb t | d  d k rb d | } n  Wn t k
 rv n Xt j	 | t j
 t j Bd d
 t j t j t j Bd  |  _ |  j t j k r d
 |  _ t d |  j t j   f   n  t j |  j d d  t j   |  _ t j |  j t j |  j   t j |  _ t j |  _ |  j   t j |  j t j t j Bt j  Bt j! B t j"   |  _# t j$ d
 d	 d d
  |  j# _% t j"   |  _& t j$ d
 d d d
  |  j& _% t' |  _( d
 S(   sj   Open 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.t   COMi   i   s   \\.\i    s   could not open port %s: %si   i   N()   t   _portR   t   SerialExceptiont   portstrt   uppert
   startswitht   intt
   ValueErrort   win32t
   CreateFilet   GENERIC_READt   GENERIC_WRITEt   OPEN_EXISTINGt   FILE_ATTRIBUTE_NORMALt   FILE_FLAG_OVERLAPPEDR   t   INVALID_HANDLE_VALUEt   ctypest   WinErrort	   SetupCommt   COMMTIMEOUTSt   _orgTimeoutst   GetCommTimeoutst   byreft   RTS_CONTROL_ENABLEt	   _rtsStatet   DTR_CONTROL_ENABLEt	   _dtrStatet   _reconfigurePortt	   PurgeCommt   PURGE_TXCLEARt   PURGE_TXABORTt   PURGE_RXCLEARt   PURGE_RXABORTt
   OVERLAPPEDt   _overlappedReadt   CreateEventt   hEventt   _overlappedWritet   Truet   _isOpen(   R   t   port(    (    s6   /usr/lib/python2.7/dist-packages/serial/serialwin32.pyt   open    s>    	+		"
c         C   s1  |  j  s t d   n  |  j d k r0 d } nL |  j d k rZ t j d d d d f } n" d d t |  j d  d d f } |  j d k r |  j d k	 r t |  j d  f | d } n  |  j d k r nJ |  j d k r | d  d t j f } n! | d  d t |  j d  f } t j	 |  j  t
 j t j |     t j |  j  t j  t j   } t j |  j  t
 j |   |  j | _ |  j t k rd | _ nd |  j t k rd | _ nI |  j t k rd | _ n. |  j t k rd	 | _ n t d
 |  j   |  j t k r,t j | _ d | _ n |  j t k rSt j  | _ d | _ n |  j t! k rzt j" | _ d | _ na |  j t# k rt j$ | _ d | _ n: |  j t% k rt j& | _ d | _ n t d |  j   |  j' t( k rt j) | _* nO |  j' t+ k rt j, | _* n1 |  j' t- k r5t j. | _* n t d |  j'   d | _/ |  j0 rit j1 | _2 n |  j3 | _2 |  j4 rt j5 | _6 n |  j7 | _6 |  j0 | _8 |  j4 | _9 |  j: | _; |  j: | _< d | _= d | _> d | _? t@ | _A tB | _C t jD |  j  t
 j |   s-t d t
 jE     n  d S(   s,   Set communication parameters on opened port.s'   Can only operate on a valid port handlei    i  i   ii   i   i   i   s#   Unsupported number of data bits: %rs   Unsupported parity mode: %rs#   Unsupported number of stop bits: %rsC   Cannot configure port, some setting was wrong. Original message: %sN(   i    i    i    i    i    (F   R   R   t   _timeoutR   R   t   MAXDWORDR   t   _interCharTimeoutt   _writeTimeoutt   SetCommTimeoutsR   R!   R   t   SetCommMaskt   EV_ERRt   DCBt   GetCommStatet	   _baudratet   BaudRatet	   _bytesizet   FIVEBITSt   ByteSizet   SIXBITSt	   SEVENBITSt	   EIGHTBITSR   t   _parityt   PARITY_NONEt   NOPARITYt   Parityt   fParityt   PARITY_EVENt
   EVENPARITYt
   PARITY_ODDt	   ODDPARITYt   PARITY_MARKt
   MARKPARITYt   PARITY_SPACEt   SPACEPARITYt	   _stopbitst   STOPBITS_ONEt
   ONESTOPBITt   StopBitst   STOPBITS_ONE_POINT_FIVEt   ONE5STOPBITSt   STOPBITS_TWOt   TWOSTOPBITSt   fBinaryt   _rtsctst   RTS_CONTROL_HANDSHAKEt   fRtsControlR#   t   _dsrdtrt   DTR_CONTROL_HANDSHAKEt   fDtrControlR%   t   fOutxCtsFlowt   fOutxDsrFlowt   _xonxofft   fOutXt   fInXt   fNullt
   fErrorChart   fAbortOnErrort   XONt   XonChart   XOFFt   XoffChart   SetCommStateR   (   R   t   timeoutst   comDCB(    (    s6   /usr/lib/python2.7/dist-packages/serial/serialwin32.pyR&   S   s    		"!!%								c         C   sz   |  j  rv |  j rj t j |  j |  j  t j |  j  t j |  j j  t j |  j j  d |  _ n  t
 |  _  n  d S(   s
   Close portN(   R2   R   R   R9   R   t   CloseHandleR-   R/   R0   R   t   False(   R   (    (    s6   /usr/lib/python2.7/dist-packages/serial/serialwin32.pyt   close   s    		c         C   s
   t  |  S(   N(   R   (   R   R3   (    (    s6   /usr/lib/python2.7/dist-packages/serial/serialwin32.pyt   makeDeviceName   s    c         C   sX   t  j   } t  j   } t  j |  j t j |  t j |   sQ t d   n  | j S(   s>   Return the number of characters currently in the input buffer.s   call to ClearCommError failed(	   R   t   DWORDt   COMSTATt   ClearCommErrorR   R   R!   R   t   cbInQue(   R   t   flagst   comstat(    (    s6   /usr/lib/python2.7/dist-packages/serial/serialwin32.pyt	   inWaiting   s
    *i   c   	      C   sE  |  j  s t  n  | d k r2t j |  j j  t j   } t j   } t j |  j  t	 j
 |  t	 j
 |   s t d   n  |  j d k rlt | j |  } | d k r`t	 j |  } t j   } t j |  j  | | t	 j
 |  t	 j
 |  j   } | r2t j   t j k r2t d t	 j     n  t j |  j j t j  } | j | j  } q/t   } q;t	 j |  } t j   } t j |  j  | | t	 j
 |  t	 j
 |  j   } | rt j   t j k rt d t	 j     n  t j |  j  t	 j
 |  j  t	 j
 |  t  } | j | j  } n	 t   } t |  S(   s   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.i    s   call to ClearCommError faileds   ReadFile failed (%s)(   R   t   portNotOpenErrorR   t
   ResetEventR-   R/   Ru   Rv   Rw   R   R!   R   t   timeoutt   minRx   t   create_string_buffert   ReadFilet   GetLastErrort   ERROR_IO_PENDINGR   t   WaitForSingleObjectt   INFINITEt   rawt   valuet   bytest   GetOverlappedResultR1   (	   R   t   sizeRy   Rz   t   nt   buft   rct   errt   read(    (    s6   /usr/lib/python2.7/dist-packages/serial/serialwin32.pyR      s8    	 	*330	c         C   s   |  j  s t  n  t |  } | r t j   } t j |  j  | t |  t j |  |  j	  } | r t j
   t j k r t d t j     n  t j |  j  |  j	 t j |  t  } | j t |  k r t  n  | j Sd Sd S(   s-   Output the given string over the serial port.s   WriteFile failed (%s)i    N(   R   R|   R   R   Ru   t	   WriteFilet   lenR   R!   R0   R   R   R   R   R   R1   R   t   writeTimeoutError(   R   t   dataR   R   (    (    s6   /usr/lib/python2.7/dist-packages/serial/serialwin32.pyt   write   s    	 	0'	c         C   s3   |  j  s t  n  t j |  j  t j t j B d S(   s9   Clear input buffer, discarding all that is in the buffer.N(   R   R|   R   R'   R*   R+   (   R   (    (    s6   /usr/lib/python2.7/dist-packages/serial/serialwin32.pyt
   flushInput
  s    	 	c         C   s3   |  j  s t  n  t j |  j  t j t j B d S(   sb   Clear output buffer, aborting the current output and
        discarding all that is in the buffer.N(   R   R|   R   R'   R(   R)   (   R   (    (    s6   /usr/lib/python2.7/dist-packages/serial/serialwin32.pyt   flushOutput  s    	 	g      ?c         C   sO   |  j  s t  n  d d l } t j |  j   | j |  t j |  j   d S(   sH   Send break condition. Timed, returns to idle state after given duration.iN(   R   R|   t   timeR   t   SetCommBreakt   sleept   ClearCommBreak(   R   t   durationR   (    (    s6   /usr/lib/python2.7/dist-packages/serial/serialwin32.pyt	   sendBreak  s    	 	c         C   s?   |  j  s t  n  | r+ t j |  j   n t j |  j   d S(   sB   Set break: Controls TXD. When active, to transmitting is possible.N(   R   R|   R   R   R   (   R   t   level(    (    s6   /usr/lib/python2.7/dist-packages/serial/serialwin32.pyt   setBreak  s
    	 	c         C   sc   |  j  s t  n  | r= t j |  _ t j |  j  t j  n" t j |  _ t j |  j  t j  d S(   s)   Set terminal status line: Request To SendN(	   R   R|   R   R"   R#   t   EscapeCommFunctiont   SETRTSt   RTS_CONTROL_DISABLEt   CLRRTS(   R   R   (    (    s6   /usr/lib/python2.7/dist-packages/serial/serialwin32.pyt   setRTS%  s    	 	c         C   sc   |  j  s t  n  | r= t j |  _ t j |  j  t j  n" t j |  _ t j |  j  t j  d S(   s-   Set terminal status line: Data Terminal ReadyN(	   R   R|   R   R$   R%   R   t   SETDTRt   DTR_CONTROL_DISABLEt   CLRDTR(   R   R   (    (    s6   /usr/lib/python2.7/dist-packages/serial/serialwin32.pyt   setDTR/  s    	 	c         C   s/   t  j   } t  j |  j t j |   | j S(   N(   R   Ru   t   GetCommModemStatusR   R   R!   R   (   R   t   stat(    (    s6   /usr/lib/python2.7/dist-packages/serial/serialwin32.pyt   _GetCommModemStatus9  s    c         C   s)   |  j  s t  n  t j |  j   @d k S(   s(   Read terminal status line: Clear To Sendi    (   R   R|   R   t	   MS_CTS_ONR   (   R   (    (    s6   /usr/lib/python2.7/dist-packages/serial/serialwin32.pyt   getCTS>  s    	 	c         C   s)   |  j  s t  n  t j |  j   @d k S(   s)   Read terminal status line: Data Set Readyi    (   R   R|   R   t	   MS_DSR_ONR   (   R   (    (    s6   /usr/lib/python2.7/dist-packages/serial/serialwin32.pyt   getDSRC  s    	 	c         C   s)   |  j  s t  n  t j |  j   @d k S(   s)   Read terminal status line: Ring Indicatori    (   R   R|   R   t
   MS_RING_ONR   (   R   (    (    s6   /usr/lib/python2.7/dist-packages/serial/serialwin32.pyt   getRIH  s    	 	c         C   s)   |  j  s t  n  t j |  j   @d k S(   s)   Read terminal status line: Carrier Detecti    (   R   R|   R   t
   MS_RLSD_ONR   (   R   (    (    s6   /usr/lib/python2.7/dist-packages/serial/serialwin32.pyt   getCDM  s    	 	c         C   sK   |  j  s t  n  | r1 t j |  j  t j  n t j |  j  t j  d S(   s#   Platform specific - set flow state.N(   R   R|   R   R   t   SETXONt   SETXOFF(   R   R   (    (    s6   /usr/lib/python2.7/dist-packages/serial/serialwin32.pyt   setXONT  s
    	 	c         C   sX   t  j   } t  j   } t  j |  j t j |  t j |   sQ t d   n  | j S(   s5   return how many characters the in the outgoing buffers   call to ClearCommError failed(	   R   Ru   Rv   Rw   R   R   R!   R   t   cbOutQue(   R   Ry   Rz   (    (    s6   /usr/lib/python2.7/dist-packages/serial/serialwin32.pyt
   outWaiting\  s
    *(   i2   iK   in   i   i   i   i,  iX  i  i  i`	  i  i%  i K  i   i   i  (   t   __name__t
   __module__t   __doc__t	   BAUDRATESR   R4   R&   Rs   Rt   R{   R   R   R   R   R   R   R   R   R   R   R   R   R   R1   R   R   (    (    (    s6   /usr/lib/python2.7/dist-packages/serial/serialwin32.pyR      s0    		3	c			#			

					t   Serialc           B   s   e  Z RS(    (   R   R   (    (    (    s6   /usr/lib/python2.7/dist-packages/serial/serialwin32.pyR   l  s   c           B   s   e  Z RS(    (   R   R   (    (    (    s6   /usr/lib/python2.7/dist-packages/serial/serialwin32.pyR   p  s   t   __main__i    s   %s
i K  i   (   R   R   t
   serialutilR   R   R   t   iot   ImportErrort   FileLikeR   t	   RawIOBaseR   t   st   syst   stdoutR   t   baudratet   databitsRs   R3   R4   (    (    (    s6   /usr/lib/python2.7/dist-packages/serial/serialwin32.pyt   <module>   s*   
	 S			
	
