U
    zµYW�#  ã                   @   s@   d dl Z d dlZ d dlT e je j Zdd„ ZG dd„ deƒZ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d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d d!„ ƒZd"S )$ÚSerialz)Serial port implementation for .NET/Mono.)é2   éK   én   é†   é–   éÈ   i,  iX  i°  i  i`	  iÀ  i€%  i K  i –  i á  i Â c              
   C   sÒ   | j dkrtdƒ‚| jr tdƒ‚ztjj | j¡| _W n: t	k
rp } zd| _td| j|f ƒ‚W 5 d}~X Y nX | j
dkr‚d| _
| jdkr’d| _|  ¡  | j ¡  d| _| js¸|  ¡  | jsÆ|  ¡  |  ¡  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Ú
_rts_stateÚ
_dtr_stateÚ_reconfigure_portZ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rXtjjjj| j _nt	| j
d ƒ| j _z| j| j _W n. tk
r¦ } ztt|ƒƒ‚W 5 d}~X Y nX | jtkr¼d| j _nJ| jtkrÐd| j _n6| jtkräd| j _n"| 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�rFtjjjj| j _nh| jtk�rdtjjjj| j _nJ| 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#t$k�rÌtjjj%j&| j _%nJ| 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+�r8| j,�r8tjjj-j.| j _-nH| j+�rRtjjj-j/| j _-n.| j,�rlt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   ;   s\    









zSerial._reconfigure_portc                 C   sF   | j rB| jr<z| j ¡  W n tjjjk
r4   Y nX d| _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   ÚportNotOpenErrorr   ZBytesToReadr0   r   r   r   Ú
in_waiting‘   s    zSerial.in_waitingé   c                 C   sV   | j s
t‚tƒ }|rNz| | j ¡ ¡ W n tjk
rB   Y qNY qX |d8 }qt|ƒ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.
        r4   )	r   r2   Ú	bytearrayÚappendr   ZReadByter   ÚTimeoutExceptionÚbytes)r"   ÚsizeÚdatar   r   r   Úread˜   s    

zSerial.readc                 C   sJ   | j s
t‚z| j t|ƒdt|ƒ¡ W n tjk
r@   t‚Y nX t|ƒS )z-Output the given string over the serial port.r   )	r   r2   r   ZWriter   Úlenr   r7   ZwriteTimeoutError)r"   r:   r   r   r   Úwrite¬   s    
zSerial.writec                 C   s   | j s
t‚| j ¡  dS )z9Clear input buffer, discarding all that is in the buffer.N)r   r2   r   ZDiscardInBufferr0   r   r   r   r!   º   s    zSerial.reset_input_bufferc                 C   s   | j s
t‚| j ¡  dS )zs        Clear output buffer, aborting the current output and
        discarding all that is in the buffer.
        N)r   r2   r   ZDiscardOutBufferr0   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   r2   ÚboolZ_break_stater   Z
BreakStater0   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   r2   r?   r   r   Z	RtsEnabler0   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   r2   r?   r   r   Z	DtrEnabler0   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   r2   r   Z
CtsHoldingr0   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   r2   r   Z
DsrHoldingr0   r   r   r   Údsrä   s    z
Serial.dsrc                 C   s   | j s
t‚dS )z)Read terminal status line: Ring IndicatorF)r   r2   r0   r   r   r   Úrië   s    z	Serial.ric                 C   s   | j s
t‚| jjS )z)Read terminal status line: Carrier Detect)r   r2   r   Z	CDHoldingr0   r   r   r   Úcdó   s    z	Serial.cdN)r4   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Z	BAUDRATESr$   r   r1   Úpropertyr3   r;   r=   r!   r>   r@   r    r   rA   rB   rC   rD   r   r   r   r   r      s,   H

	


r   )	r   ZSystem.IO.PortsZserial.serialutilZArrayZByter	   r   Z
SerialBaser   r   r   r   r   Ú<module>
   s
   