
<qV$                 @   s   d  d l  Z  d  d l Z d  d l Z d  d l Te j e j Z d d   Z Gd d   d e  Z	 e
 d k r d  d l Z 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  d S)    N)*c             C   s   t  d d   |  D  S)Nc             S   s   g  |  ] } t  |   q S )ord).0xr   r   2/usr/lib/python3/dist-packages/serial/serialcli.py
<listcomp>   s   	 z!as_byte_array.<locals>.<listcomp>)sab)stringr   r   r   as_byte_array   s    r   c               @   s   e  Z d  Z d Z d3 Z d d   Z d d   Z d d   Z e d d    Z	 d d d  Z
 d d   Z d  d!   Z d" d#   Z d$ d%   Z d& d'   Z d( d)   Z e d* d+    Z e d, d-    Z e d. d/    Z e d0 d1    Z d2 S)4Serialz)Serial port implementation for .NET/Mono.2   K   n            ,  X      `	    %   K          c             C   s   |  j  d k r t d   |  j r0 t d   y t j j j |  j  |  _ WnG t	 k
 r } z' d |  _ t d |  j | f   WYd d } ~ Xn X|  j
   |  j j   d |  _ |  j s |  j   |  j s |  j   |  j   d S)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.zPort is already open.zcould not open port %s: %sT)Z_portSerialExceptionis_openSystemIOPorts
SerialPortZportstr_port_handle	Exception_reconfigurePortZOpenZ_dsrdtr_update_dtr_state_rtscts_update_rts_statereset_input_buffer)selfmsgr   r   r   open!   s"    		,
		
	
zSerial.openc             C   s  |  j  s t d   |  j d k r? t j j j j |  j  _ n t	 |  j d  |  j  _ |  j
 d k r t j j j j |  j  _ n t	 |  j
 d  |  j  _ y |  j |  j  _ Wn7 t k
 r } z t t |    WYd d } ~ Xn X|  j t k rd |  j  _ nm |  j t k r$d |  j  _ nO |  j t k rBd |  j  _ n1 |  j t k r`d |  j  _ n t d |  j   |  j t k rt t j j j d	  |  j  _ n |  j t k rt j j j j |  j  _ n |  j t k rt j j j j |  j  _ ng |  j t k r!t j j j j  |  j  _ n= |  j t! k rKt j j j j" |  j  _ n t d
 |  j   |  j# t$ k rt j j j% j& |  j  _% ng |  j# t' k rt j j j% j( |  j  _% n= |  j# t) k rt j j j% j* |  j  _% n t d |  j#   |  j+ r|  j, rt j j j- j. |  j  _- nf |  j+ r@t j j j- j/ |  j  _- nB |  j, rdt j j j- j0 |  j  _- n t t j j j- d	  |  j  _- d S)z,Set communication parameters on opened port.z'Can only operate on a valid port handleNi              z#Unsupported number of data bits: %rNonezUnsupported parity mode: %rz#Unsupported number of stop bits: %r)1r$   r   Z_timeoutr    r!   r"   r#   ZInfiniteTimeoutZReadTimeoutintZ_write_timeoutZWriteTimeoutZ	_baudrateZBaudRateIOError
ValueErrorstrZ	_bytesizeZFIVEBITSZDataBitsZSIXBITSZ	SEVENBITSZ	EIGHTBITSZ_parityZPARITY_NONEgetattrZParityZPARITY_EVENZEvenZ
PARITY_ODDZOddZPARITY_MARKZMarkZPARITY_SPACEZSpaceZ	_stopbitsZSTOPBITS_ONEZStopBitsZOneZSTOPBITS_ONE_POINT_FIVEZOnePointFiveZSTOPBITS_TWOZTwor(   Z_xonxoffZ	HandshakeZRequestToSendXOnXOffZRequestToSendZXOnXOff)r+   er   r   r   r&   9   s\    	%!		zSerial._reconfigurePortc             C   sW   |  j  rS |  j rJ y |  j j   Wn t j j j k
 r@ Yn Xd |  _ d |  _  d S)z
Close portNF)r   r$   ZCloser    r!   r"   ZInvalidOperationException)r+   r   r   r   close   s    			zSerial.closec             C   s   |  j  s t  |  j  j S)z>Return the number of characters currently in the input buffer.)r$   portNotOpenErrorZBytesToRead)r+   r   r   r   
in_waiting   s    	zSerial.in_waiting   c             C   s   |  j  s t  t   } xZ | rt y | j |  j  j    Wn) t j k
 rf } z PWYd d } ~ Xq X| d 8} q Wt |  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.
        Nr<   )r$   r:   	bytearrayappendZReadByter    TimeoutExceptionbytes)r+   sizedatar8   r   r   r   read   s    			zSerial.readc             C   sp   |  j  s t  y& |  j  j t |  d t |   Wn. t j k
 re } z t  WYd d } ~ Xn Xt |  S)z-Output the given string over the serial port.r   N)r$   r:   ZWriter   lenr    r?   ZwriteTimeoutError)r+   rB   r8   r   r   r   write   s    	&zSerial.writec             C   s    |  j  s t  |  j  j   d S)z9Clear input buffer, discarding all that is in the buffer.N)r$   r:   ZDiscardInBuffer)r+   r   r   r   r*      s    	zSerial.reset_input_bufferc             C   s    |  j  s t  |  j  j   d S)zs        Clear output buffer, aborting the current output and
        discarding all that is in the buffer.
        N)r$   r:   ZDiscardOutBuffer)r+   r   r   r   reset_output_buffer   s    	zSerial.reset_output_bufferc             C   s(   |  j  s t  t |  j  |  j  _ d S)zT
        Set break: Controls TXD. When active, to transmitting is possible.
        N)r$   r:   boolZ_break_stateZ
BreakState)r+   r   r   r   _update_break_state   s    	zSerial._update_break_statec             C   s(   |  j  s t  t |  j  |  j  _ d S)z)Set terminal status line: Request To SendN)r$   r:   rG   Z
_rts_stateZ	RtsEnable)r+   r   r   r   r)      s    	zSerial._update_rts_statec             C   s(   |  j  s t  t |  j  |  j  _ d S)z-Set terminal status line: Data Terminal ReadyN)r$   r:   rG   Z
_dtr_stateZ	DtrEnable)r+   r   r   r   r'      s    	zSerial._update_dtr_statec             C   s   |  j  s t  |  j  j S)z(Read terminal status line: Clear To Send)r$   r:   Z
CtsHolding)r+   r   r   r   cts   s    	z
Serial.ctsc             C   s   |  j  s t  |  j  j S)z)Read terminal status line: Data Set Ready)r$   r:   Z
DsrHolding)r+   r   r   r   dsr   s    	z
Serial.dsrc             C   s   |  j  s t  d S)z)Read terminal status line: Ring IndicatorF)r$   r:   )r+   r   r   r   ri   s    	z	Serial.ric             C   s   |  j  s t  |  j  j S)z)Read terminal status line: Carrier Detect)r$   r:   Z	CDHolding)r+   r   r   r   cd   s    	z	Serial.cdN)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )__name__
__module____qualname____doc__Z	BAUDRATESr-   r&   r9   propertyr;   rC   rE   r*   rF   rH   r)   r'   rI   rJ   rK   rL   r   r   r   r   r      s$    I	r   __main__z%s
i K  r0   )Zclrr    ZSystem.IO.PortsZserial.serialutilZArrayZByter	   r   Z
SerialBaser   rM   syssZstdiorE   ZbaudrateZdatabitsr9   Zportr-   r   r   r   r   <module>
   s$   

			
	
