o
    ˆ¦^_æ#  ã                   @   sL   d dl mZ 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 )é    )Úabsolute_importN)Ú*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u r	tdƒ‚| jrtdƒ‚ztjj | j¡| _W n t	y3 } zd| _td| j|f ƒ‚d}~ww | j
du r<d| _
| jdu rDd| _|  ¡  | j ¡  d| _| jsW|  ¡  | 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)Ú_portÚSerialExceptionÚis_openÚSystemÚIOÚPortsÚ
SerialPortÚportstrÚ_port_handleÚ	ExceptionÚ
_rts_stateÚ
_dtr_stateÚ_reconfigure_portÚOpenÚ_dsrdtrÚ_update_dtr_stateÚ_rtsctsÚ_update_rts_stateÚreset_input_buffer)ÚselfÚmsgr   r   r   Úopen   s.   
€þ


zSerial.openc              
   C   sp  | j stdƒ‚| jdu rtjjjj| j _n	t	| jd ƒ| j _| j
du r,tjjjj| j _n	t	| j
d ƒ| j _z| j| j _W n tyN } ztt|ƒƒ‚d}~ww | jtkrYd| j _n%| jtkrcd| j _n| jtkrmd| j _n| jtkrwd| 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 _n1| jtkrªtjjjj| j _n#| 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 _%n#| 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 _-dS | j+�rtjjj-j/| j _-dS | j,�r,tjjj-j0| j _-dS 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   Ú_timeoutr   r   r   r   ÚInfiniteTimeoutÚReadTimeoutÚintÚ_write_timeoutÚWriteTimeoutÚ	_baudrateÚBaudRateÚIOErrorÚ
ValueErrorÚstrÚ	_bytesizeÚFIVEBITSÚDataBitsÚSIXBITSÚ	SEVENBITSÚ	EIGHTBITSÚ_parityÚPARITY_NONEÚgetattrÚParityÚPARITY_EVENÚEvenÚ
PARITY_ODDÚOddÚPARITY_MARKÚMarkÚPARITY_SPACEÚSpaceÚ	_stopbitsÚSTOPBITS_ONEÚStopBitsÚOneÚSTOPBITS_ONE_POINT_FIVEÚOnePointFiveÚSTOPBITS_TWOÚTwor$   Ú_xonxoffÚ	HandshakeÚRequestToSendXOnXOffÚRequestToSendÚXOnXOff)r'   Úer   r   r   r    =   s`   

€þ















zSerial._reconfigure_portc                 C   sH   | j r"| jrz| j ¡  W n tjjjy   Y nw d| _d| _ dS dS )z
Close portNF)r   r   ÚCloser   r   r   ÚInvalidOperationException©r'   r   r   r   Úclose…   s   þ
øzSerial.closec                 C   ó   | j stƒ ‚| jjS )z>Return the number of characters currently in the input buffer.)r   ÚPortNotOpenErrorr   ÚBytesToReadr\   r   r   r   Ú
in_waiting“   ó   zSerial.in_waitingé   c                 C   sZ   | j stƒ ‚tƒ }|r)z
| | j ¡ ¡ W n tjy"   Y t|ƒS w |d8 }|s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.
        rc   )	r   r_   Ú	bytearrayÚappendr   ÚReadByter   ÚTimeoutExceptionÚbytes)r'   ÚsizeÚdatar   r   r   Úreadš   s   üúzSerial.readc                 C   sH   | j stƒ ‚z| j t|ƒdt|ƒ¡ W t|ƒS  tjy#   tdƒ‚w )z-Output the given string over the serial port.r   zWrite timeout)	r   r_   r   ÚWriter   Úlenr   rg   ÚSerialTimeoutException)r'   rj   r   r   r   Úwrite®   s   þÿzSerial.writec                 C   ó   | j stƒ ‚| j ¡  dS )z9Clear input buffer, discarding all that is in the buffer.N)r   r_   r   ÚDiscardInBufferr\   r   r   r   r&   ¼   s   zSerial.reset_input_bufferc                 C   rp   )zs        Clear output buffer, aborting the current output and
        discarding all that is in the buffer.
        N)r   r_   r   ÚDiscardOutBufferr\   r   r   r   Úreset_output_bufferÂ   s   zSerial.reset_output_bufferc                 C   ó   | j stƒ ‚t| jƒ| j_dS )zT
        Set break: Controls TXD. When active, to transmitting is possible.
        N)r   r_   ÚboolÚ_break_stater   Ú
BreakStater\   r   r   r   Ú_update_break_stateË   s   zSerial._update_break_statec                 C   rt   )z)Set terminal status line: Request To SendN)r   r_   ru   r   r   Ú	RtsEnabler\   r   r   r   r%   Ó   ó   zSerial._update_rts_statec                 C   rt   )z-Set terminal status line: Data Terminal ReadyN)r   r_   ru   r   r   Ú	DtrEnabler\   r   r   r   r#   Ù   rz   zSerial._update_dtr_statec                 C   r^   )z(Read terminal status line: Clear To Send)r   r_   r   Ú
CtsHoldingr\   r   r   r   Úctsß   rb   z
Serial.ctsc                 C   r^   )z)Read terminal status line: Data Set Ready)r   r_   r   Ú
DsrHoldingr\   r   r   r   Údsræ   rb   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   r^   )z)Read terminal status line: Carrier Detect)r   r_   r   Ú	CDHoldingr\   r   r   r   Úcdõ   rb   z	Serial.cdN)rc   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	BAUDRATESr)   r    r]   Úpropertyra   rk   ro   r&   rs   rx   r%   r#   r}   r   r€   r‚   r   r   r   r   r      s.    H

	


r   )Ú
__future__r   r   ÚSystem.IO.PortsÚserial.serialutilÚArrayÚByter
   r   Ú
SerialBaser   r   r   r   r   Ú<module>   s   	