HEX
Server: Apache
System: Linux scp1.abinfocom.com 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64
User: confeduphaar (1010)
PHP: 8.1.33
Disabled: exec,passthru,shell_exec,system
Upload Files
File: //lib/python3/dist-packages/serial/urlhandler/__pycache__/protocol_loop.cpython-38.pyc
U

wW�W�'�@s$ddlZddlZddlZzddlZWn ek
rDddlmZYnXzddlZWnek
rnddlZYnXddl	m
Z
mZmZm
Z
mZmZejejejejd�ZGdd�de
�Zedk�r ddlZed�Zej�d�e��ej�d	�e�d
�e��ej�d�e�d���e��dS)
�N)�
SerialBase�SerialException�to_bytes�	iterbytes�writeTimeoutError�portNotOpenError)�debug�infoZwarning�errorcs�eZdZdZdZ�fdd�Zdd�Z�fdd�Zd	d
�Zdd�Z	e
d
d��Zd*dd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd�Zd d!�Ze
d"d#��Ze
d$d%��Ze
d&d'��Ze
d(d)��Z�ZS)+�SerialzSSerial port implementation that simulates a loop back connection in plain software.)�2�K�n����i,iXi�ii`	i�i�%iKi�i�i�cs.d|_d|_d|_d|_tt|�j||�dS)NiF)�buffer_size�queue�logger�
_cancel_write�superr�__init__)�self�args�kwargs��	__class__��A/usr/lib/python3/dist-packages/serial/urlhandler/protocol_loop.pyr-s
zSerial.__init__cCs~|jrtd��d|_t�|j�|_|jdkr4td��|�|j�|�	�d|_|j
s\|��|jsj|�
�|��|��dS)zx        Open port with current settings. This may throw a SerialException
        if the port cannot be opened.
        zPort is already open.Nz.Port must be configured before it can be used.T)�is_openrrr�QueuerZ_port�from_urlZport�_reconfigure_portZ_dsrdtr�_update_dtr_stateZ_rtscts�_update_rts_state�reset_input_buffer�reset_output_buffer�rrrr�open4s
zSerial.opencsF|jr4d|_z|j�d�Wntjk
r2YnXtt|���dS)NF)rr�
put_nowaitZFullrr�closer'rrrr*OszSerial.closecCsLt|jtj�r&d|jkr$dks6ntd�|j���|jrH|j�d�dS)zx        Set communication parameters on opened port. For the loop://
        protocol all settings are ignored!
        rlzinvalid baudrate: {!r}z_reconfigure_port()N)�
isinstance�	_baudrate�numbersZIntegral�
ValueError�formatrr	r'rrrr"Xs&zSerial._reconfigure_portc
Cs�t�|�}|jdkr$td�|j���zlt�|jd���D]T\}}|dkr~t�	�t�
d�|_|j�t
|d�|j�d�q8td�|���q8Wn0tk
r�}ztd	�|���W5d
}~XYnXd
S)z(extract host and port from an URL stringZloopznexpected a string in the form "loop://[?logging={debug|info|warning|error}]": not starting with loop:// ({!r})T�loggingz
pySerial.looprzenabled loggingzunknown option: {!r}zPexpected a string in the form "loop://[?logging={debug|info|warning|error}]": {}N)�urlparseZurlsplitZschemerr/Zparse_qsZquery�itemsr0ZbasicConfigZ	getLoggerrZsetLevel�
LOGGER_LEVELSrr.)rZurl�partsZoption�values�errrr!cs*

����zSerial.from_urlcCs2|js
t�|jr(|j�d�|j����|j��S)z9Return the number of bytes currently in the input buffer.zin_waiting -> {:d})rrrrr/r�qsizer'rrr�
in_waiting|s
zSerial.in_waiting�cCs�|js
t�|jdk	r.|jdkr.t��|j}nd}t�}|dkr�|jr�z|jj|jd�}Wn$tjk
r~|jdkrzYq�YnX|dk	r�||7}|d8}nq�|r8t��|kr8|jr�|j�	d�q�q8t
|�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��timeoutr9zread timeout)rrZ_timeout�time�	bytearrayr�get�Emptyrr	�bytes)r�sizer;�data�brrr�read�s*


zSerial.readcCs|j�d�dS)N)rr)r'rrr�cancel_read�szSerial.cancel_readcCs
d|_dS)NT)rr'rrr�cancel_write�szSerial.cancel_writecCs�d|_|jst�t|�}dt|�|j}|jdk	rz||jkrz|j}|dkrl|jslt�t	|d��|d8}qD|jrvdSt
�t|�D]}|jj
||jd�q�t|�S)z�        Output the given byte string over the serial port. Can block if the
        connection is blocked. May raise SerialException if the connection is
        closed.
        Fg$@Nrg�?r:)rrrr�lenr,Z_write_timeoutr<�sleep�minrrrZput)rrBZtime_used_to_sendZ	time_leftZbyterrr�write�s 
zSerial.writecCsR|js
t�|jr|j�d�z|j��r4|j��qWntjk
rLYnXdS)z9Clear input buffer, discarding all that is in the buffer.zreset_input_buffer()N�rrrr	rr7Z
get_nowaitr?r'rrrr%�s
zSerial.reset_input_buffercCsR|js
t�|jr|j�d�z|j��r4|j��qWntjk
rLYnXdS)zs        Clear output buffer, aborting the current output and
        discarding all that is in the buffer.
        zreset_output_buffer()NrKr'rrrr&�s
zSerial.reset_output_buffercCs|jr|j�d�|j��dS)z[        Set break: Controls TXD. When active, to transmitting is
        possible.
        z_update_break_state({!r})N)rr	r/Z_break_stater'rrr�_update_break_state�szSerial._update_break_statecCs|jr|j�d�|j��dS)z)Set terminal status line: Request To Sendz'_update_rts_state({!r}) -> state of CTSN)rr	r/�
_rts_stater'rrrr$�szSerial._update_rts_statecCs|jr|j�d�|j��dS)z-Set terminal status line: Data Terminal Readyz'_update_dtr_state({!r}) -> state of DSRN�rr	r/Z
_dtr_stater'rrrr#�szSerial._update_dtr_statecCs*|js
t�|jr$|j�d�|j��|jS)z(Read terminal status line: Clear To SendzCTS -> state of RTS ({!r}))rrrr	r/rMr'rrr�cts�s
z
Serial.ctscCs |jr|j�d�|j��|jS)z)Read terminal status line: Data Set ReadyzDSR -> state of DTR ({!r})rNr'rrr�dsr�sz
Serial.dsrcCs |js
t�|jr|j�d�dS)z)Read terminal status line: Ring Indicatorzreturning dummy for RIF�rrrr	r'rrr�ris
z	Serial.ricCs |js
t�|jr|j�d�dS)z)Read terminal status line: Carrier Detectzreturning dummy for CDTrQr'rrr�cds
z	Serial.cd)r9)�__name__�
__module__�__qualname__�__doc__Z	BAUDRATESrr(r*r"r!�propertyr8rDrErFrJr%r&rLr$r#rOrPrRrS�
__classcell__rrrrr's4	


!


r�__main__zloop://z{}
z	write...
zhello
zread: {!r}
�)r0r-r<r1�ImportErrorZurllib.parse�parserr Zserial.serialutilrrrrrr�DEBUG�INFOZWARNINGZERRORr3rrT�sys�s�stdoutrJr/�flushrDr*rrrr�<module>s6 �w