
Mc        0   @   s  d  d l  Z  d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Te  j	 d k  r d  d l
 Z
 n e Z
 e  j	 d k  r d  d l Z n e Z e  j j   Z e d  d k rd   Z d Z d	 Z d
   Z i d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d  6d! d" 6d# d$ 6d% d& 6d' d( 6d) d* 6d+ d, 6d- d. 6d/ d0 6d1 d2 6d3 d4 6d5 d6 6d7 d8 6d9 d: 6d; d< 6d= d> 6d? d@ 6dA dB 6dC dD 6dE dF 6Z ne dG k rdH   Z dI   Z i  Z ne dJ k rdK   Z dL   Z i  Z ne d  dM k pLe d  dN k pLe d  dO k rjdP   Z dQ   Z i  Z nxe d  dR k re j   d j dS  Z e e d  d k rdT   Z n	 dU   Z dV   Z i  Z ne d  dW k rdX   Z dY   Z i  Z n e d  dZ k r&d[   Z d\   Z i  Z n e d  d] k rQd^   Z d_   Z i  Z n e d  d` k r|da   Z db   Z i  Z nf e d  dc k rdd   Z de   Z i  Z n; e  j j df e  j e j e f  dg   Z dh   Z i  Z e e
 di  oe
 j pdj Z e e
 dk  oe
 j pdl Z e e
 dm  o3e
 j p9dn Z e e
 do  oQe
 j  pWdp Z  e e
 dq  ooe
 j! pud Z! e e
 dr  oe
 j" pd Z" e e
 ds  oe
 j# pdt Z# e e
 du  oe
 j$ pdv Z$ e e
 dw  oe
 j% pdx Z% e e
 dy  oe
 j& pdz Z& e e
 d{  o#e
 j' p)e$ Z' e e
 d|  oAe
 j( pGe% Z( e e
 d}  o_e
 j) ped~ Z* e j+ d d  Z, e j+ d e"  Z- e j+ d e!  Z. e e
 d  oe
 j/ pd Z/ e e
 d  oe
 j0 pd Z0 d e1 f d     YZ2 y d  d l3 Z3 Wn* e4 k
 r,d e2 e5 f d     YZ6 n Xd e2 e3 j7 f d     YZ6 d e6 f d     YZ8 e9 d k re6 d d d& d e: d e; d e< d d d d d d Z= e= j> d  e= j? d  e= j@   e= jA   e= j d  e  jB j d e= jC d   e  jB j d e= jD    [= n  d S(   iN(   t   *i i i   t   linuxc         C   s   d |  S(   Ns   /dev/ttyS%d(    (   t   port(    (    s6   /usr/lib/python2.7/dist-packages/serial/serialposix.pyt   device$   s    i0  i0   c         C   s   d d  l  } | j  d d g d  } t j |  j t j |  | d | | d <| d c t M<| d c t O<y t j |  j t j |  } Wn! t	 k
 r t
 d |   n Xd  S(	   Nit   ii    i    i   i   i   s"   Failed to set custom baud rate: %r(   t   arrayt   FCNTLt   ioctlt   fdt   TERMIOSt   TIOCGSERIALt   ASYNC_SPD_MASKt   ASYNC_SPD_CUSTt   TIOCSSERIALt   IOErrort
   ValueError(   R   t   baudrateR   t   buft   res(    (    s6   /usr/lib/python2.7/dist-packages/serial/serialposix.pyt   set_special_baudrate*   s    i    i   i2   i   iK   i   in   i   i   i   i   i   i   i,  i   iX  i	   i  i
   i  i   i`	  i   i  i   i%  i   i K  i   i   i  i   i  i  i  i  i  i  i  i  i  i  i  i  i  i@B i	  i  i
  i` i  i i  i%& i  i- i  ig5 i  i 	= t   cygwinc         C   s   d |  d S(   Ns
   /dev/com%di   (    (   R   (    (    s6   /usr/lib/python2.7/dist-packages/serial/serialposix.pyR   b   s    c         C   s   t  d   d  S(   NsF   sorry don't know how to handle non standard baud rate on this platform(   R   (   R   R   (    (    s6   /usr/lib/python2.7/dist-packages/serial/serialposix.pyR   e   s    t   openbsd3c         C   s   d |  S(   Ns   /dev/ttyp%d(    (   R   (    (    s6   /usr/lib/python2.7/dist-packages/serial/serialposix.pyR   l   s    c         C   s   t  d   d  S(   NsF   sorry don't know how to handle non standard baud rate on this platform(   R   (   R   R   (    (    s6   /usr/lib/python2.7/dist-packages/serial/serialposix.pyR   o   s    t   bsdt   freebsdt   openbsdc         C   s   d |  S(   Ns   /dev/cuad%d(    (   R   (    (    s6   /usr/lib/python2.7/dist-packages/serial/serialposix.pyR   x   s    c         C   s   t  d   d  S(   NsF   sorry don't know how to handle non standard baud rate on this platform(   R   (   R   R   (    (    s6   /usr/lib/python2.7/dist-packages/serial/serialposix.pyR   {   s    t   darwint   .c         C   sP   d d  l  } d d  l } | j  d | g  } d } | j |  j | | d  d  S(   NiR   l   T  i   (   R   t   fcntlR   R   (   R   R   R   R   R   t   IOSSIOSPEED(    (    s6   /usr/lib/python2.7/dist-packages/serial/serialposix.pyR      s    c         C   s   t  d   d  S(   Ns   baud rate not supported(   R   (   R   R   (    (    s6   /usr/lib/python2.7/dist-packages/serial/serialposix.pyR      s    c         C   s   d |  S(   Ns   /dev/cuad%d(    (   R   (    (    s6   /usr/lib/python2.7/dist-packages/serial/serialposix.pyR      s    t   netbsdc         C   s   d |  S(   Ns   /dev/dty%02d(    (   R   (    (    s6   /usr/lib/python2.7/dist-packages/serial/serialposix.pyR      s    c         C   s   t  d   d  S(   NsF   sorry don't know how to handle non standard baud rate on this platform(   R   (   R   R   (    (    s6   /usr/lib/python2.7/dist-packages/serial/serialposix.pyR      s    t   irixc         C   s   d |  d S(   Ns   /dev/ttyf%di   (    (   R   (    (    s6   /usr/lib/python2.7/dist-packages/serial/serialposix.pyR      s    c         C   s   t  d   d  S(   NsF   sorry don't know how to handle non standard baud rate on this platform(   R   (   R   R   (    (    s6   /usr/lib/python2.7/dist-packages/serial/serialposix.pyR      s    t   hpc         C   s   d |  d S(   Ns   /dev/tty%dp0i   (    (   R   (    (    s6   /usr/lib/python2.7/dist-packages/serial/serialposix.pyR      s    c         C   s   t  d   d  S(   NsF   sorry don't know how to handle non standard baud rate on this platform(   R   (   R   R   (    (    s6   /usr/lib/python2.7/dist-packages/serial/serialposix.pyR      s    t   sunosc         C   s   d t  d  |  S(   Ns
   /dev/tty%ct   a(   t   ord(   R   (    (    s6   /usr/lib/python2.7/dist-packages/serial/serialposix.pyR      s    c         C   s   t  d   d  S(   NsF   sorry don't know how to handle non standard baud rate on this platform(   R   (   R   R   (    (    s6   /usr/lib/python2.7/dist-packages/serial/serialposix.pyR      s    t   aixc         C   s   d |  S(   Ns
   /dev/tty%d(    (   R   (    (    s6   /usr/lib/python2.7/dist-packages/serial/serialposix.pyR      s    c         C   s   t  d   d  S(   NsF   sorry don't know how to handle non standard baud rate on this platform(   R   (   R   R   (    (    s6   /usr/lib/python2.7/dist-packages/serial/serialposix.pyR      s    s  don't know how to number ttys on this system.
! Use an explicit path (eg /dev/ttyS1) or send this information to
! the author of this module:

sys.platform = %r
os.name = %r
serialposix.py version = %s

also add the device name of the serial port and where the
counting starts for the first serial port.
e.g. 'first serial port: /dev/ttyS0'
and with a bit luck you can get this module running...
c         C   s   d |  S(   Ns   /dev/ttyS%d(    (   t   portnum(    (    s6   /usr/lib/python2.7/dist-packages/serial/serialposix.pyR      s    c         C   s   t  d   d  S(   NsF   sorry don't know how to handle non standard baud rate on this platform(   t   SerialException(   R   R   (    (    s6   /usr/lib/python2.7/dist-packages/serial/serialposix.pyR      s    t   TIOCMGETiT  t   TIOCMBISiT  t   TIOCMBICiT  t   TIOCMSETiT  t	   TIOCM_DTRt	   TIOCM_RTSt	   TIOCM_CTSi    t	   TIOCM_CARi@   t	   TIOCM_RNGi   t	   TIOCM_DSRi   t   TIOCM_CDt   TIOCM_RIt   FIONREADiT  t   It   TIOCSBRKi'T  t   TIOCCBRKi(T  t   PosixSerialc           B   s   e  Z d  Z d   Z d   Z d   Z d   Z d   Z d d  Z 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 d   Z d   Z d   Z RS(   s   Serial port class POSIX implementation. Serial port configuration is 
    done with termios and fcntl. Runs on Linux and many other Un*x like
    systems.c         C   s   d |  _ |  j d k r' t d   n  y- t j |  j t j t j Bt j	 B |  _ Wn5 t
 k
 r } d |  _ t d |  j | f   n Xy |  j   Wn1 y t j |  j  Wn n Xd |  _   n
 Xt |  _ 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.s   could not open port %s: %sN(   t   NoneR   t   _portR%   t   ost   opent   portstrt   O_RDWRt   O_NOCTTYt
   O_NONBLOCKt	   Exceptiont   _reconfigurePortt   closet   Truet   _isOpen(   t   selft   msg(    (    s6   /usr/lib/python2.7/dist-packages/serial/serialposix.pyR:   	  s$    	-		c         C   s  |  j  d k r t d   n  d } d } } |  j d k	 rY d } t |  j d  } n  y+ t j |  j   \ } } } } } }	 }
 Wn& t j k
 r } t d |   n X| t j	 t j
 BO} | t j t j Bt j Bt j Bt j Bt j Bt j BM} x4 d D], } t t |  r | t t |  M} q q W| t j M} | t j t j Bt j Bt j BM} t t d  r| t j M} n  t t d	  r| t j M} n  y t t d
 |  j  } }	 Wn t k
 rjy t |  j } }	 Wqkt k
 rft t d  } }	 y t |  j  } Wn$ t k
 r@t d |  j   qgX| d k  rgt d |  j   qgqkXn X| t j  M} |  j! d k r| t j" O} np |  j! d k r| t j# O} nQ |  j! d k r| t j$ O} n2 |  j! d k r| t j% O} n t d |  j!   |  j& t' k r(| t j( M} nQ |  j& t) k rG| t j( O} n2 |  j& t* k rf| t j( O} n t d |  j&   | t j+ t j, BM} |  j- t. k r| t j/ t j0 BM} nf |  j- t1 k r| t j0 M} | t j/ O} n9 |  j- t2 k r| t j/ t j0 BO} n t d |  j-   t t d  ri|  j3 rJ| t j4 t j5 BO} q| t j4 t j5 Bt j6 BM} n5 |  j3 r| t j4 t j5 BO} n | t j4 t j5 BM} t t d  r|  j7 r| t j8 O} q| t j8 M} n9 t t d  r|  j7 r| t j9 O} q| t j9 M} n  | d k  s(| d k r;t d |   n  | |
 t j: <| d k  s`| d k rst d |   n  | |
 t j; <t j< |  j  t j= | | | | | |	 |
 g  | d k	 rt> |  |  n  d S(   s,   Set communication parameters on opened port.s+   Can only operate on a valid file descriptori    i   i
   s   Could not configure port: %st   ECHOCTLt   ECHOKEt   IUCLCt   PARMRKs   B%st   B38400s   Invalid baud rate: %ri   i   i   i   s   Invalid char len: %rs"   Invalid stop bit specification: %rs   Invalid parity: %rt   IXANYt   CRTSCTSt   CNEW_RTSCTSi   s   Invalid vmin: %r s   Invalid vtime: %rN(   RF   RG   (?   R   R7   R%   t   _interCharTimeoutt   intt   termiost	   tcgetattrt   errorR	   t   CLOCALt   CREADt   ICANONt   ECHOt   ECHOEt   ECHOKt   ECHONLt   ISIGt   IEXTENt   hasattrt   getattrt   OPOSTt   INLCRt   IGNCRt   ICRNLt   IGNBRKRH   RI   t	   _baudratet   AttributeErrort   baudrate_constantst   KeyErrorR   t   CSIZEt	   _bytesizet   CS8t   CS7t   CS6t   CS5t	   _stopbitst   STOPBITS_ONEt   CSTOPBt   STOPBITS_ONE_POINT_FIVEt   STOPBITS_TWOt   INPCKt   ISTRIPt   _parityt   PARITY_NONEt   PARENBt   PARODDt   PARITY_EVENt
   PARITY_ODDt   _xonxofft   IXONt   IXOFFRK   t   _rtsctsRL   RM   t   VMINt   VTIMEt	   tcsetattrt   TCSANOWR   (   RD   t   custom_baudt   vmint   vtimet   iflagt   oflagt   cflagt   lflagt   ispeedt   ospeedt   ccRE   t   flag(    (    s6   /usr/lib/python2.7/dist-packages/serial/serialposix.pyR@   '  s    
+5#				.c         C   sD   |  j  r@ |  j d k	 r4 t j |  j  d |  _ n  t |  _  n  d S(   s
   Close portN(   RC   R   R7   R9   RA   t   False(   RD   (    (    s6   /usr/lib/python2.7/dist-packages/serial/serialposix.pyRA     s
    	c         C   s
   t  |  S(   N(   R   (   RD   R   (    (    s6   /usr/lib/python2.7/dist-packages/serial/serialposix.pyt   makeDeviceName  s    c         C   s,   t  j |  j t t  } t j d |  d S(   s>   Return the number of characters currently in the input buffer.R3   i    (   R   R   R   t   TIOCINQt   TIOCM_zero_strt   structt   unpack(   RD   t   s(    (    s6   /usr/lib/python2.7/dist-packages/serial/serialposix.pyt	   inWaiting  s    i   c         C   s   |  j  d k r t  n  t   } x t |  | k  r t j |  j  g g  g  |  j  \ } } } | sj Pn  t j |  j  | t |   } | s t	 d   n  | j
 |  q$ Wt |  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.sL   device reports readiness to read but returned no data (device disconnected?)N(   R   R7   t   portNotOpenErrort	   bytearrayt   lent   selectt   _timeoutR9   t   readR%   t   extendt   bytes(   RD   t   sizeR   t   readyt   _R   (    (    s6   /usr/lib/python2.7/dist-packages/serial/serialposix.pyR     s     		*c   
      C   sP  |  j  d k r t  n  t |  } | } |  j d k	 r^ |  j d k r^ t j   |  j } n d } x | d k rEy t j |  j  |  } | r | t j   } | d k  r t  n  t	 j	 g  |  j  g g  |  \ } } } | s t  q n  | | } | | } Wqg t
 k
 rA}	 |	 j t j k rBt d |	 f   qBqg Xqg Wt |  S(   s-   Output the given string over the serial port.i    s   write failed: %sN(   R   R7   R   R   t   _writeTimeoutt   timeR9   t   writet   writeTimeoutErrorR   t   OSErrort   errnot   EAGAINR%   (
   RD   t   datat   tt   dt   timeoutt   nt   timeleftR   R   t   v(    (    s6   /usr/lib/python2.7/dist-packages/serial/serialposix.pyR     s.     		'
c         C   s   |  j    d S(   sT   Flush of file like objects. In this case, wait until all data
           is written.N(   t   drainOutput(   RD   (    (    s6   /usr/lib/python2.7/dist-packages/serial/serialposix.pyt   flush  s    c         C   s2   |  j  d k r t  n  t j |  j  t j  d S(   s9   Clear input buffer, discarding all that is in the buffer.N(   R   R7   R   RP   t   tcflushR	   t   TCIFLUSH(   RD   (    (    s6   /usr/lib/python2.7/dist-packages/serial/serialposix.pyt
   flushInput  s    	c         C   s2   |  j  d k r t  n  t j |  j  t j  d S(   sb   Clear output buffer, aborting the current output and
        discarding all that is in the buffer.N(   R   R7   R   RP   R   R	   t   TCOFLUSH(   RD   (    (    s6   /usr/lib/python2.7/dist-packages/serial/serialposix.pyt   flushOutput  s    	g      ?c         C   s9   |  j  d k r t  n  t j |  j  t | d   d S(   sH   Send break condition. Timed, returns to idle state after given duration.g      ?N(   R   R7   R   RP   t   tcsendbreakRO   (   RD   t   duration(    (    s6   /usr/lib/python2.7/dist-packages/serial/serialposix.pyt	   sendBreak  s    	c         C   sK   |  j  d k r t  n  | r4 t j |  j  t  n t j |  j  t  d S(   sB   Set break: Controls TXD. When active, no transmitting is possible.N(   R   R7   R   R   R   R4   R5   (   RD   t   level(    (    s6   /usr/lib/python2.7/dist-packages/serial/serialposix.pyt   setBreak   s
     	c         C   sQ   |  j  d k r t  n  | r7 t j |  j  t t  n t j |  j  t t  d S(   s)   Set terminal status line: Request To SendN(   R   R7   R   R   R   R'   t   TIOCM_RTS_strR(   (   RD   R   (    (    s6   /usr/lib/python2.7/dist-packages/serial/serialposix.pyt   setRTS  s
     	c         C   sQ   |  j  d k r t  n  | r7 t j |  j  t t  n t j |  j  t t  d S(   s-   Set terminal status line: Data Terminal ReadyN(   R   R7   R   R   R   R'   t   TIOCM_DTR_strR(   (   RD   R   (    (    s6   /usr/lib/python2.7/dist-packages/serial/serialposix.pyt   setDTR  s
     	c         C   sN   |  j  d k r t  n  t j |  j  t t  } t j d |  d t	 @d k S(   s(   Read terminal status line: Clear To SendR3   i    N(
   R   R7   R   R   R   R&   R   R   R   R,   (   RD   R   (    (    s6   /usr/lib/python2.7/dist-packages/serial/serialposix.pyt   getCTS  s     	c         C   sN   |  j  d k r t  n  t j |  j  t t  } t j d |  d t	 @d k S(   s)   Read terminal status line: Data Set ReadyR3   i    N(
   R   R7   R   R   R   R&   R   R   R   R/   (   RD   R   (    (    s6   /usr/lib/python2.7/dist-packages/serial/serialposix.pyt   getDSR  s     	c         C   sN   |  j  d k r t  n  t j |  j  t t  } t j d |  d t	 @d k S(   s)   Read terminal status line: Ring IndicatorR3   i    N(
   R   R7   R   R   R   R&   R   R   R   R1   (   RD   R   (    (    s6   /usr/lib/python2.7/dist-packages/serial/serialposix.pyt   getRI$  s     	c         C   sN   |  j  d k r t  n  t j |  j  t t  } t j d |  d t	 @d k S(   s)   Read terminal status line: Carrier DetectR3   i    N(
   R   R7   R   R   R   R&   R   R   R   R0   (   RD   R   (    (    s6   /usr/lib/python2.7/dist-packages/serial/serialposix.pyt   getCD*  s     	c         C   s,   |  j  d k r t  n  t j |  j   d S(   s   internal - not portable!N(   R   R7   R   RP   t   tcdrain(   RD   (    (    s6   /usr/lib/python2.7/dist-packages/serial/serialposix.pyR   2  s     	c         C   s8   |  j  d k r t  n  t j |  j  t j t j  d S(   s   internal - not portable!N(   R   R7   R   R   R   t   F_SETFLR9   R>   (   RD   (    (    s6   /usr/lib/python2.7/dist-packages/serial/serialposix.pyt   nonblocking7  s    	c         C   s   |  j  d k r t  n  |  j  S(   s   For easier use of the serial port instance with select.
           WARNING: this function is not portable to different platforms!N(   R   R7   R   (   RD   (    (    s6   /usr/lib/python2.7/dist-packages/serial/serialposix.pyt   fileno=  s     	c         C   s9   | r t  j |  j t j  n t  j |  j t j  d S(   sQ   manually control flow - when hardware or software flow control is
        enabledN(   RP   t   tcflowR   R	   t   TCIONt   TCIOFF(   RD   t   enable(    (    s6   /usr/lib/python2.7/dist-packages/serial/serialposix.pyt   flowControlC  s    (   t   __name__t
   __module__t   __doc__R:   R@   RA   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   (    (    (    s6   /usr/lib/python2.7/dist-packages/serial/serialposix.pyR6     s.   		x														t   Serialc           B   s   e  Z RS(    (   R   R   (    (    (    s6   /usr/lib/python2.7/dist-packages/serial/serialposix.pyR   S  s   c           B   s   e  Z RS(    (   R   R   (    (    (    s6   /usr/lib/python2.7/dist-packages/serial/serialposix.pyR   W  s   t   PosixPollSerialc           B   s   e  Z d  Z d d  Z RS(   s   poll based read implementation. not all systems support poll properly.
    however this one has better handling of errors, such as a device
    disconnecting while it's in use (e.g. USB-serial unplugged)i   c         C   sN  |  j  d k r t  n  t   } t j   } | j |  j  t j t j Bt j	 Bt j
 B | d k rDx t |  | k  r@xN | j |  j d  D]6 \ } } | t j t j	 Bt j
 B@r t d   q q Wt j |  j  | t |   } | j |  |  j d k	 r|  j d k s2|  j d k	 rg |  j d k rg | rg Pqg qg Wn  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    i  s   device reports error (poll)N(   R   R7   R   R   R   t   pollt   registert   POLLINt   POLLERRt   POLLHUPt   POLLNVALR   R   R%   R9   R   R   RN   R   (   RD   R   R   R   R   t   eventR   (    (    s6   /usr/lib/python2.7/dist-packages/serial/serialposix.pyR   _  s      		+#%(   R   R   R   R   (    (    (    s6   /usr/lib/python2.7/dist-packages/serial/serialposix.pyR   Z  s   t   __main__R   t   bytesizet   parityt   stopbitsR   t   xonxofft   rtsctst   hellos   %r
s   %s
(E   t   sysR9   R   RP   R   R   R   R   t
   serialutilt
   hexversionR	   R   t   platformt   lowert   platR   R   R   R   Re   t   unamet   splitt   versionRO   t   stderrR   t   namet   VERSIONR\   R&   R'   R(   R)   R*   R+   R,   R-   R.   R/   R0   R1   R2   R   t   packR   R   R   R4   R5   t
   SerialBaseR6   t   iot   ImportErrort   FileLikeR   t	   RawIOBaseR   R   t	   EIGHTBITSRx   Rn   R   R   R   R   R   t   stdoutR   R   (    (    (    s6   /usr/lib/python2.7/dist-packages/serial/serialposix.pyt   <module>   s  `
																																	 L		

