
    #)di7                        d dl m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n# e$ r	 d dl	m
Z Y nw xY wd dlmZmZmZmZmZmZ ej        ej        ej        ej        dZdZ G d de          Zedk    rd dlZ ed	          Zej                            d
                    e                     ej                            d           e                    d           e                                 ej                            d                    e                     d                               e!                                 dS dS )    )absolute_importN)
SerialBaseSerialExceptionto_bytesPortNotOpenErrorSerialTimeoutExceptionTimeout)debuginfowarningerror   c                       e Zd ZdZdZd Zd Zd Zd Ze	d             Z
dd	Zd
 Zd Zd ZddZd Zd Zd Ze	d             Ze	d             Ze	d             Ze	d             Zd ZdS )Serialz-Serial port implementation for plain sockets.)2   K   n            i,  iX  i  i  i`	  i  i%  i K  i   i   i  c                    d| _         | j        t          d          | j        rt          d          	 t	          j        |                     | j                  t                    | _	        nA# t          $ r4}d| _	        t          d                    | j        |                    d}~ww xY w| j	                            d           |                                  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.)timeoutzCould not open port {}: {}FT)logger_portr   is_opensocketcreate_connectionfrom_urlportstrPOLL_TIMEOUT_socket	Exceptionformatsetblocking_reconfigure_port_dsrdtr_update_dtr_state_rtscts_update_rts_statereset_input_bufferreset_output_buffer)selfmsgs     h/var/www/menimich/repos/protonApp/venv/lib/python3.11/site-packages/serial/urlhandler/protocol_socket.pyopenzSerial.open3   sJ   
 :!"RSSS< 	;!"9:::	Z!3DMM$,4O4OYefffDLL 	Z 	Z 	ZDL!">"E"EdlTW"X"XYYY	Z 	  ''' 	   | 	%""$$$| 	%""$$$!!!  """""s   8A. .
B,8/B''B,c                 x    | j         t          d          | j        r| j                            d           dS dS )zz        Set communication parameters on opened port. For the socket://
        protocol all settings are ignored!
        NzCan only operate on open portsz!ignored port configuration change)r!   r   r   r   r,   s    r.   r%   zSerial._reconfigure_portQ   sO    
 <!"BCCC; 	BK@AAAAA	B 	B    c                     | j         rq| j        rM	 | j                            t          j                   | j                                         n#  Y nxY wd| _        d| _         t          j        d           dS dS )z
Close portNFg333333?)r   r!   shutdownr   	SHUT_RDWRclosetimesleepr1   s    r.   r6   zSerial.close[   s    < 	| $L))&*:;;;L&&((((D# DLJsOOOOO	 	s   =A Ac                    t          j        |          }|j        dk    r't          d                    |j                            	 t          j        |j        d                                          D ]\  }}|dk    rrt          j	                     t          j
        d          | _        | j                            t          |d                             | j                            d           }t          d                    |                    d|j        cxk    rd	k     sn t          d
          n4# t          $ r'}t          d                    |                    d}~ww xY w|j        |j        fS )z(extract host and port from an URL stringr   zexpected a string in the form "socket://<host>:<port>[?logging={debug|info|warning|error}]": not starting with socket:// ({!r})TloggingzpySerial.socketr   zenabled loggingzunknown option: {!r}i   zport not in range 0...65535z_expected a string in the form "socket://<host>:<port>[?logging={debug|info|warning|error}]": {}N)urlparseurlsplitschemer   r#   parse_qsqueryitemsr:   basicConfig	getLoggerr   setLevelLOGGER_LEVELSr
   
ValueErrorporthostname)r,   urlpartsoptionvalueses         r.   r   zSerial.from_urlj   s   !#&&<8##!55;VEL5I5IK K K	_"*"3EK"F"F"L"L"N"N L LY&&')))")"34E"F"FDKK((vay)ABBBK%%&78888$%;%B%B6%J%JKKK
****U**** !>??? + 	_ 	_ 	_!TTZTZ[\T]T]_ _ _	_
 
++s   C.D7 7
E("E##E(c                     | j         st                      t          j        | j        gg g d          \  }}}t	          |          S )z9Return the number of bytes currently in the input buffer.r   )r   r   selectr!   len)r,   lrlwlxs       r.   
in_waitingzSerial.in_waiting   sF     | 	%"$$$ ]DL>2r1==
B2wwr2      c                    | j         st                      t                      }t          | j                  }t          |          |k     r	 t          j        | j        gg g |                                          \  }}}|sny| j        	                    |t          |          z
            }|st          d          |                    |           n# t          $ rl}|j        t          j        t          j        t          j        t          j        t          j        fvr"t          d                    |                    Y d}~nd}~wt          j        t*          j        f$ rm}|d         t          j        t          j        t          j        t          j        t          j        fvr"t          d                    |                    Y d}~nd}~ww xY w|                                rnt          |          |k     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.
        zsocket disconnectedread failed: {}Nr   )r   r   	bytearrayr	   _timeoutrO   rN   r!   	time_leftrecvr   extendOSErrorerrnoEAGAINEALREADYEWOULDBLOCKEINPROGRESSEINTRr#   r   r   expiredbytes)r,   sizereadr   ready_bufrL   s           r.   rf   zSerial.read   s    | 	%"$$${{$-(($ii$G$mT\NBGDUDUDWDWXXq!
  l''s4yy(899  A)*?@@@C     G G G 75<ARTYTeglgr"sss)*;*B*B1*E*EFFF tssssL&,/ G G G Q4ene>OQVQbdidoppp)*;*B*B1*E*EFFF qpppp	G    9 $ii$: T{{s-   5C AC 
GA"EG$A#GGc                    | j         st                      t          |          }t          |          x}}t	          | j                  }|dk    r	 | j                            |          }|j        r|S |j	        sh|
                                rt          d          t          j        g | j        gg |                                          \  }}}|st          d          nH|                                J t          j        g | j        gg d          \  }}}|st          d          ||d         }||z  }n# t          $ r  t          $ rl}	|	j        t           j        t           j        t           j        t           j        t           j        fvr"t          d                    |	                    Y d}	~	nd}	~	wt          j        $ rm}	|	d         t           j        t           j        t           j        t           j        t           j        fvr"t          d                    |	                    Y d}	~	nd}	~	ww xY w|j        s#|
                                rt          d          |dk    |t          |          z
  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.
        r   zWrite timeoutNzwrite failed (select)zwrite failed: {})r   r   r   rO   r	   _write_timeoutr!   sendis_non_blockingis_infiniterc   r   rN   rY   r   r\   r]   r^   r_   r`   ra   rb   r#   r   )
r,   datadtx_lenlengthr   nrh   rg   rL   s
             r.   writezSerial.write   s    | 	%"$$$TNNa&& $-..qjj#HL%%a((* G H , G (( F4_EEE"(-T\NBHYHYH[H["\"\KAua  F4_EEEF #,,..666"(-T\NB"M"MKAua  G-.EFFFabbE!"    H H H 75<ARTYTeglgr"sss)*<*C*CA*F*FGGG tssss< H H H Q4ene>OQVQbdidoppp)*<*C*CA*F*FGGG qpppp	H * >w/@/@ >,_===M qjjN As-   "D< 5CD< <H6A"F77H6	A#H11H6c                    | j         st                      d}|rCt          j        | j        gg g d          \  }}}	 |r| j                            d          }n# t
          $ rl}|j        t          j        t          j        t          j	        t          j
        t          j        fvr"t          d                    |                    Y d}~nd}~wt          j        t          j        f$ rm}|d         t          j        t          j        t          j	        t          j
        t          j        fvr"t          d                    |                    Y d}~nd}~ww xY w|AdS dS )z9Clear input buffer, discarding all that is in the buffer.Tr   i   rV   N)r   r   rN   r!   rZ   r\   r]   r^   r_   r`   ra   rb   r   r#   r   r   )r,   rg   rh   rL   s       r.   r*   zSerial.reset_input_buffer   s   | 	%"$$$  	G -BBBKE1aG 4 L--d33E G G G 75<ARTYTeglgr"sss)*;*B*B1*E*EFFF tssssL&,/ G G G Q4ene>OQVQbdidoppp)*;*B*B1*E*EFFF qpppp	G  	G 	G 	G 	G 	Gs%   A 
E$A"CE)A#EEc                 v    | j         st                      | j        r| j                            d           dS dS )zs        Clear output buffer, aborting the current output and
        discarding all that is in the buffer.
        zignored reset_output_bufferNr   r   r   r   r1   s    r.   r+   zSerial.reset_output_buffer  sK    
 | 	%"$$$; 	<K:;;;;;	< 	<r2         ?c                     | j         st                      | j        r/| j                            d                    |                     dS dS )za        Send break condition. Timed, returns to idle state after given
        duration.
        zignored send_break({!r})N)r   r   r   r   r#   )r,   durations     r.   
send_breakzSerial.send_break  s\    
 | 	%"$$$; 	JK7>>xHHIIIII	J 	Jr2   c                 |    | j         r4| j                             d                    | j                             dS dS )zJSet break: Controls TXD. When active, to transmitting is
        possible.z!ignored _update_break_state({!r})N)r   r   r#   _break_stater1   s    r.   _update_break_statezSerial._update_break_state  sI     ; 	\K@GGHYZZ[[[[[	\ 	\r2   c                 |    | j         r4| j                             d                    | j                             dS dS )z)Set terminal status line: Request To Sendzignored _update_rts_state({!r})N)r   r   r#   
_rts_stater1   s    r.   r)   zSerial._update_rts_state%  F    ; 	XK>EEdoVVWWWWW	X 	Xr2   c                 |    | j         r4| j                             d                    | j                             dS dS )z-Set terminal status line: Data Terminal Readyzignored _update_dtr_state({!r})N)r   r   r#   
_dtr_stater1   s    r.   r'   zSerial._update_dtr_state*  r   r2   c                 r    | j         st                      | j        r| j                            d           dS )z(Read terminal status line: Clear To Sendzreturning dummy for ctsTrw   r1   s    r.   ctsz
Serial.cts/  @     | 	%"$$$; 	8K6777tr2   c                 r    | j         st                      | j        r| j                            d           dS )z)Read terminal status line: Data Set Readyzreturning dummy for dsrTrw   r1   s    r.   dsrz
Serial.dsr8  r   r2   c                 r    | j         st                      | j        r| j                            d           dS )z)Read terminal status line: Ring Indicatorzreturning dummy for riFrw   r1   s    r.   riz	Serial.riA  s@     | 	%"$$$; 	7K5666ur2   c                 r    | j         st                      | j        r| j                            d           dS )z)Read terminal status line: Carrier Detectzreturning dummy for cd)Trw   r1   s    r.   cdz	Serial.cdJ  r   r2   c                 4    | j                                         S )z@Get the file handle of the underlying socket for use with select)r!   filenor1   s    r.   r   zSerial.filenoV  s    |""$$$r2   N)rT   )rx   )__name__
__module____qualname____doc__	BAUDRATESr/   r%   r6   r   propertyrS   rf   rt   r*   r+   r{   r~   r)   r'   r   r   r   r   r    r2   r.   r   r   -   s       774I# # #<B B B  , , ,:   X' ' ' 'R3 3 3jG G G2< < <J J J J\ \ \X X X
X X X
   X   X   X   X% % % % %r2   r   __main__zsocket://localhost:7000z{}
z	write...
s   hello
z	read: {}
)"
__future__r   r]   r:   rN   r   r7   r;   ImportErrorurllib.parseparseserial.serialutilr   r   r   r   r   r	   DEBUGINFOWARNINGERRORrD   r    r   r   syssstdoutrt   r#   flushrf   r6   r   r2   r.   <module>r      s  & ' & & & & &     $OOOO $ $ $########$6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
 ]L]	  k% k% k% k% k%Z k% k% k%`	 zJJJ())AJV]]1%%&&&J\"""GGJGGIIIJ\((33444GGIIIII s   ! //