
    #)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d dlZd dl	Z	d dl
mZmZmZmZmZmZ  G d de          Zd Zej                                        Zedd         dk    r'd dlZdZd	Zd
ZdZdZdZdZdZdZdZ  G d de          Z!nedk    r G d de          Z!nedd         dk    rd dlZdZ" G d de          Z!ncedd         dk    s*edd         dk    sedd         dk    sedd         dk    r G d  d!e          Z# G d" de          Z!n G d# de          Z! e$ed$d%          Z% e$ed&d'          Z& e$ed(d)          Z' e$ed*d+          Z( e$ed,d          Z) e$ed-d          Z* e$ed.d/          Z+ e$ed0d1          Z, e$ed2d3          Z- e$ed4d5          Z. e$ed6e,          Z/ e$ed7e-          Z0 e1ed8          rej2        Z2n e$ed9d:          Z2 e$ed;d<          Z3 ej4        d=d           Z5 ej4        d=e*          Z6 ej4        d=e)          Z7 e$ed>d?          Z8 e$ed@dA          Z9 G dB dCee!          Z: G dD dEe:          Z; G dF dGe:          Z<dS )H    )absolute_importN)
SerialBaseSerialExceptionto_bytesPortNotOpenErrorSerialTimeoutExceptionTimeoutc                   *    e Zd Zi Zd Zd Zd Zd ZdS )PlatformSpecificBasec                      t          d          )Nz9non-standard baudrates are not supported on this platformNotImplementedError)selfbaudrates     Y/var/www/menimich/repos/protonApp/venv/lib/python3.11/site-packages/serial/serialposix.py_set_special_baudratez*PlatformSpecificBase._set_special_baudrate0   s    !"]^^^    c                      t          d          )Nz$RS485 not supported on this platformr   )r   rs485_settingss     r   _set_rs485_modez$PlatformSpecificBase._set_rs485_mode3   s    !"HIIIr   c                      t          d          )Nz*Low latency not supported on this platformr   )r   low_latency_settingss     r   set_low_latency_modez)PlatformSpecificBase.set_low_latency_mode6   s    !"NOOOr   c                     | j         r!t          j        | j        t                     dS t          j        | j        t
                     dS )zS        Set break: Controls TXD. When active, no transmitting is possible.
        N)_break_statefcntlioctlfdTIOCSBRKTIOCCBRKr   s    r   _update_break_statez(PlatformSpecificBase._update_break_state9   sC      	+K*****K*****r   N)__name__
__module____qualname__BAUDRATE_CONSTANTSr   r   r   r"    r   r   r   r   -   s_        _ _ _J J JP P P+ + + + +r   r      linuxi   @l   *TX  i+T,@i   i.T  i/T              c                       e Zd Zi dddddddddd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0Zd1 Zd2 Zd3 Zd4S )5PlatformSpecificr   2   r*   K   r+   n         r,      r(         i,     iX     i  	   i  
   i`	     i     i%     i K     i      i   i  i    i    i      	  
            )i  i  i        @B   ` 逄 %& - ig5 i 	= c                 ~   t          j         ddgdz            }	 t          j        | j        t          j        |           |r|dxx         dz  cc<   n|dxx         dz  cc<   t          j        | j        t          j        |           d S # t          $ r(}t          d	                    ||                    d }~ww xY w)Nir       r,   i    iz1Failed to update ASYNC_LOW_LATENCY flag to {}: {})
arrayr   r   r   termiosTIOCGSERIALTIOCSSERIALIOError
ValueErrorformat)r   r   bufes       r   r   z%PlatformSpecific.set_low_latency_mode   s    +cA38,,CvDGW%8#>>> ( &FFFf$FFFFFFFg%FFF DGW%8#>>>>> v v v !T![![\prs!t!tuuuvs   A-B
 

B<#B77B<c                    t          j         ddgdz            }	 t          j        | j        t          |           |dxx         t
          j         z  cc<   |dxx         t          z  cc<   |x|d<   |d<   t          j        | j        t          |           d S # t          $ r(}t          d                    ||                    d }~ww xY w)NrV   r   @   r+   r:   r;   z'Failed to set custom baud rate ({}): {})rX   r   r   r   TCGETS2rY   CBAUDBOTHERTCSETS2r\   r]   r^   )r   r   r_   r`   s       r   r   z&PlatformSpecific._set_special_baudrate   s    +cA38,,C`DGWc222A7=.(A& #++AR DGWc22222 ` ` ` !J!Q!QRZ\]!^!^___`s   A:B 
C	!#CC	c                    t          j         ddgdz            }	 t          j        | j        t          |           |dxx         t
          z  cc<   ||j        r|dxx         t          z  cc<   n|dxx         t           z  cc<   |j        r|dxx         t          z  cc<   n|dxx         t           z  cc<   |j
        r|dxx         t          z  cc<   n|dxx         t           z  cc<   |j        t          |j        dz            |d<   |j        t          |j        dz            |d<   nd|d<   t          j        | j        t          |           d S # t           $ r'}t#          d                    |                    d }~ww xY w)NrV   r   r9     r*   r+   zFailed to set RS485 mode: {})rX   r   r   r   
TIOCGRS485SER_RS485_ENABLEDloopbackSER_RS485_RX_DURING_TXrts_level_for_txSER_RS485_RTS_ON_SENDrts_level_for_rxSER_RS485_RTS_AFTER_SENDdelay_before_txintdelay_before_rx
TIOCSRS485r\   r]   r^   )r   r   r_   r`   s       r   r   z PlatformSpecific._set_rs485_mode   s   +cA37++CKDGZ555A++!-%. :A"88A#9"99%6 9A"77A#8"88%6 <A"::A#;";;%5A!$^%Cd%J!K!KA%5A!$^%Cd%J!K!KACFDGZ55555 K K K !?!F!Fq!I!IJJJKs   D8E 
F"FFN)r#   r$   r%   r&   r   r   r   r'   r   r   r/   r/   _   sX        
X 
X 
 X 
 X	 

 X 
 X 
 X 
 X 
 X 
 X 
 X 
 X 
 X 
 X 
 X 
  X! 
" X# 
$ ? 
  
  
D	v 	v 	v$	` 	` 	` 	K 	K 	K 	K 	Kr   r/   cygwinc                   *    e Zd Zddddddddd	d
ddZdS )r/   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   )i  i  rL   rM   rN   rO   rP   rQ   rR   rS   rT   N)r#   r$   r%   r&   r'   r   r   r/   r/      s>        
 
r   r7   darwinl   T  c                       e Zd Z ej                    d                             d          ZdZdZ e	ed                   dk    rd Z
d Zd	S )
r/   r+   .{t  zt  r   r9   c                 t    t          j         d|g          }t          j        | j        t          |d           d S )NrV   r*   )rX   r   r   r   IOSSIOSPEED)r   r   r_   s      r   r   z&PlatformSpecific._set_special_baudrate   s3    k#z22DG[#q99999r   c                     | j         r&t          j        | j        t          j                   dS t          j        | j        t          j                   dS z[            Set break: Controls TXD. When active, no transmitting is possible.
            Nr   r   r   r   r/   r   r    r!   s    r   r"   z$PlatformSpecific._update_break_state   L       @DG%5%>?????DG%5%>?????r   N)r#   r$   r%   osunamesplitosx_versionr   r    rr   r   r"   r'   r   r   r/   r/      s{        bhjjm))#.. 3{1~!##: : :
	@ 	@ 	@ 	@ 	@r   r3   bsdr8   freebsdnetbsdopenbsdc                       e Zd Zd ZdS )ReturnBaudratec                     |S )Nr'   )r   keys     r   __getitem__zReturnBaudrate.__getitem__   s    Jr   N)r#   r$   r%   r   r'   r   r   r   r      s#        	 	 	 	 	r   r   c                   0    e Zd Z e            ZdZdZd ZdS )r/   rz   r{   c                     | j         r&t          j        | j        t          j                   dS t          j        | j        t          j                   dS r   r   r!   s    r   r"   z$PlatformSpecific._update_break_state   r   r   N)r#   r$   r%   r   r&   r   r    r"   r'   r   r   r/   r/      sB         ,^--	@ 	@ 	@ 	@ 	@r   c                       e Zd ZdS )r/   N)r#   r$   r%   r'   r   r   r/   r/   	  s        r   TIOCMGETiT  TIOCMBISiT  TIOCMBICiT  TIOCMSETiT  	TIOCM_DTR	TIOCM_RTS	TIOCM_CTSrW   	TIOCM_CARrb   	TIOCM_RNG   	TIOCM_DSR   TIOCM_CDTIOCM_RITIOCINQFIONREADiT  TIOCOUTQiT  Ir   i'T  r    i(T  c                      e Zd ZdZd ZddZd Zed             Zd dZ	d	 Z
d
 Zd Zd Zd Zd Zd Zd!dZd Zd Zed             Zed             Zed             Zed             Zed             Zd Zd"dZd"dZd ZdS )#Serialz    Serial port class POSIX implementation. Serial port configuration is
    done with termios and fcntl. Runs on Linux and many other Un*x like
    systems.
    c                    | j         t          d          | j        rt          d          d| _        	 t	          j        | j        t          j        t          j        z  t          j	        z            | _        nG# t          $ r:}d| _        t          |j        d                    | j         |                    d}~ww xY wd\  | _        | _        d\  | _        | _        	 |                     d           	 | j        s|                                  | j        s|                                  n7# t,          $ r*}|j        t          j        t          j        fvr Y d}~nd}~ww xY w|                                  t	          j                    \  | _        | _        t	          j                    \  | _        | _        t7          j        | j        t6          j        t          j	                   t7          j        | j        t6          j        t          j	                   n# t:          $ r 	 t	          j        | j                   n# t>          $ r Y nw xY wd| _        | j         t	          j        | j                   d| _        | j         t	          j        | j                   d| _        | j         t	          j        | j                   d| _        | j         t	          j        | j                   d| _         w xY wd| _        dS )zo        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 {}: {}NNT)force_update) _portr   is_openr   r   openportstrO_RDWRO_NOCTTY
O_NONBLOCKOSErrorerrnor^   pipe_abort_read_rpipe_abort_read_wpipe_abort_write_rpipe_abort_write_w_reconfigure_port_dsrdtr_update_dtr_state_rtscts_update_rts_stater\   EINVALENOTTY_reset_input_bufferpiper   F_SETFLBaseExceptionclose	Exception)r   msgr`   s      r   r   zSerial.open7  s    :!"RSSS< 	;!"9:::	cgdlBI,Cbm,STTDGG 	c 	c 	cDG!#)-I-P-PQUQ[]`-a-abbb	c
 :D6 6;E8!8)	"""555| -**,,,| -**,,,   75<">>> ?>>>>
 $$&&&=?WYY:D"D$:?Awyy<D#T%<K.r}MMMK/NNNN 	 	 	!!!!     DG%1/000)-&%1/000)-&&20111*.'&20111*.'-	0 st   AA9 9
B=5B88B=H 66D- ,H -
E!7 EH E!!B5H 
K1"H<;K1<
I	K1I		B(K1Fc                    | j         t          d          | j        | j        rs	 t          j        | j         t          j        t          j        z             nd# t          $ r3}t          |j        d	                    | j
        |                    d}~ww xY wt          j        | j         t          j                   d}dx}}| j        d}t          | j        dz            }	 t          j        | j                   }|\  }}}	}
}}}n9# t          j        $ r'}t          d	                    |                    d}~ww xY w|	t          j        t          j        z  z  }	|
t          j        t          j        z  t          j        z  t          j        z  t          j        z  t          j        z  t          j        z   z  }
dD ]0}t5          t          |          r|
t7          t          |           z  }
1|t          j        t          j        z  t          j        z   z  }|t          j        t          j         z  t          j!        z  t          j"        z   z  }t5          t          d	          r|t          j#         z  }t5          t          d
          r|t          j$         z  }	 t7          t          d	                    | j%                            x}}n# tL          $ r 	 | j'        | j%                 x}}n# tP          $ r 	 tR          x}}n'# tT          $ r t7          t          d          x}}Y nw xY w	 t          | j%                  }|dk     r'tW          d	                    | j%                            n5# tV          $ r( tW          d	                    | j%                            w xY wY nw xY wY nw xY w|	t          j,         z  }	| j-        dk    r|	t          j.        z  }	nx| j-        dk    r|	t          j/        z  }	n]| j-        dk    r|	t          j0        z  }	nB| j-        dk    r|	t          j1        z  }	n'tW          d	                    | j-                            | j2        tf          j4        k    r|	t          j5         z  }	nq| j2        tf          j6        k    r|	t          j5        z  }	nL| j2        tf          j7        k    r|	t          j5        z  }	n'tW          d	                    | j2                            |t          j8        t          j9        z   z  }| j:        tf          j;        k    r'|	t          j<        t          j=        z  t|          z   z  }	n&| j:        tf          j?        k    r(|	t          j=        t|          z   z  }	|	t          j<        z  }	n| j:        tf          j@        k    r(|	t|           z  }	|	t          j<        t          j=        z  z  }	n| j:        tf          jA        k    r,t|          r%|	t          j<        t|          z  t          j=        z  z  }	nk| j:        tf          jB        k    r/t|          r(|	t          j<        t|          z  z  }	|	t          j=         z  }	n'tW          d	                    | j:                            t5          t          d          rO| jC        r|t          jD        t          jE        z  z  }nl|t          jD        t          jE        z  t          jF        z   z  }nA| jC        r|t          jD        t          jE        z  z  }n|t          jD        t          jE        z   z  }t5          t          d          r(| jG        r|	t          jH        z  }	nM|	t          jH         z  }	n<t5          t          d          r'| jG        r|	t          jI        z  }	n|	t          jI         z  }	|dk     s|dk    r"tW          d	                    |                    ||t          jJ        <   |dk     s|dk    r"tW          d	                    |                    ||t          jK        <   |s|||	|
|||g|k    r,t          jL        | j         t          jM        |||	|
|||g           || N                    |           | jO        | P                    | jO                   dS dS ),Set communication parameters on opened port.Nz+Can only operate on a valid file descriptorz&Could not exclusively lock port {}: {}r   r*   r;   Could not configure port: {})ECHOCTLECHOKEIUCLCPARMRKzB{}B38400zInvalid baud rate: {!r}r9   r8   r7   r(   zInvalid char len: {!r}z$Invalid stop bit specification: {!r}zInvalid parity: {!r}IXANYCRTSCTSCNEW_RTSCTS   zInvalid vmin: {!r}Invalid vtime: {!r})Qr   r   
_exclusiver   flockLOCK_EXLOCK_NBr\   r   r^   r   LOCK_UN_inter_byte_timeoutrr   rY   	tcgetattrerrorCLOCALCREADICANONECHOECHOEECHOKECHONLISIGIEXTENhasattrgetattrOPOSTONLCROCRNLINLCRIGNCRICRNLIGNBRKr   r   	_baudrateAttributeErrorr&   KeyErrorre   	NameErrorr]   CSIZE	_bytesizeCS8CS7CS6CS5	_stopbitsserialSTOPBITS_ONECSTOPBSTOPBITS_ONE_POINT_FIVESTOPBITS_TWOINPCKISTRIP_parityPARITY_NONEPARENBPARODDCMSPARPARITY_EVEN
PARITY_ODDPARITY_MARKPARITY_SPACE_xonxoffIXONIXOFFr   r   r   r   VMINVTIME	tcsetattrTCSANOWr   _rs485_moder   )r   r   r   custom_baudvminvtime	orig_attriflagoflagcflaglflagispeedospeedccflags                  r   r   zSerial._reconfigure_portx  s!   7?!"OPPP ?& 4wK)FGGGG w w w)#)5]5d5deieoqt5u5uvvvw DGU]333u#/D02566E	N)$'22I=F:E5%} 	N 	N 	N!"@"G"G"L"LMMM	N 	'.7=017>GL07=@=!#*>2< ").1 2 	2 * 	1 	1Dw%% 1''400007=7=07=@AA7=7=07=@7>QRR7G$$ 	$gm^#E7H%% 	%gn_$E	[%gu||DN/K/KLLLFVV 	[ 	[ 	[["&"9$."II [ [ [
A&,,FVV  A A A&-gx&@&@@FVVVA["%dn"5"5K #Q()B)I)I$.)Y)YZZZ ' " W W W$%>%E%Edn%U%UVVVW '![	[. 	'->QW[ EE^q  W[ EE^q  W[ EE^q  W[ EE5<<T^LLMMM>V000w~&&EE^v===gn%EE^v222gn%EECJJ4>ZZ[[[7=7>122<6---w~6?@@EE\V///w~.//Egn%EE\V...fWEgnw~56EE\V///F/gnv->?EE\V000V0gnv-.Ew~&&EE3::4<HHIII 7G$$ 		9} I',677<'-7'-GHH} 9',677<'-7887I&& 		0| ,'/*7?++Wm,, 	0| 0'-.7.//
 !88tczz188>>???7<199299%@@AAA!7= 	BE5%KyXXueVVR@B B B "&&{333'  !122222 ('s   1A 
B".BB##D D="D88D=/K	 	
N&K)(N&)
N 4	K>=N >!L"N !L""N &M(:.N (2NN N&N  N&%N&c                 x   | j         r| j        t          j        | j                   d| _        t          j        | j                   t          j        | j                   t          j        | j                   t          j        | j                   d\  | _        | _        d\  | _        | _        d| _         dS dS )z
Close portNr   F)r   r   r   r   r   r   r   r   r!   s    r   r   zSerial.close  s    < 
	!w"!!!/000/00001110111AK>&(>CM@')@ DLLL
	! 
	!r   c                     t          j        | j        t          t                    }t          j        d|          d         S )z9Return the number of bytes currently in the input buffer.r   r   )r   r   r   r   TIOCM_zero_strstructunpackr   ss     r   
in_waitingzSerial.in_waiting!  s0     K.99}S!$$Q''r   r*   c                 V   | j         st                      t                      }t          | j                  }t          |          |k     r	 t          j        | j        | j        gg g |	                                          \  }}}| j        |v rt          j        | j        d           nq|snmt          j        | 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        $ 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     t1          |          S )        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.
        rh   zgdevice reports readiness to read but returned no data (device disconnected or multiple access on port?)zread failed: {}Nr   )r   r   	bytearrayr	   _timeoutlenselectr   r   	time_leftr   readr   extendr   r   EAGAINEALREADYEWOULDBLOCKEINPROGRESSEINTRr^   r   expiredbytes)r   sizer)  timeoutready_r_   r`   s           r   r)  zSerial.read)  s7    | 	%"$$${{$-(($ii$"!$mTWd6L,MrSUW^WhWhWjWjkkq!)U22GD2D999
  gdgtc$ii'788   M *LM M M C    -  G G G 75<ARTYTeglgr"sss)*;*B*B1*E*EFFF tssss< G G G Q4ene>OQVQbdidoppp)*;*B*B1*E*EFFF qpppp	G$    M $ii$N T{{s3   AD  +D  /*D   
G0
A"E11G0A#G++G0c                 L    | j         rt          j        | j        d           d S d S N   x)r   r   writer   r!   s    r   cancel_readzSerial.cancel_read\  s1    < 	3HT+T22222	3 	3r   c                 L    | j         rt          j        | j        d           d S d S r7  )r   r   r9  r   r!   s    r   cancel_writezSerial.cancel_write`  s1    < 	4HT,d33333	4 	4r   c                    | j         st                      t          |          }t          |          x}}t	          | j                  }|dk    ra	 t          j        | j        |          }|j	        r|S |j
        s|                                rt          d          t          j        | j        g| j        gg |                                          \  }}}	|rt          j        | j        d           n|st          d          nl|                                J t          j        | j        g| j        gg d          \  }}}	|rt          j        | j        d           nO|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    a|t          |          z
  S )z2Output the given byte string over the serial port.r   zWrite timeoutrh   Nr*   zwrite failed (select)zwrite failed: {})r   r   r   r&  r	   _write_timeoutr   r9  r   is_non_blockingis_infiniter0  r   r'  r   r(  r)  r   r   r   r+  r,  r-  r.  r/  r^   r   )r   datadtx_lenlengthr3  nabortr4  r5  r`   s              r   r9  zSerial.writed  s   | 	%"$$$TNNa&& $-..qjj)HHTWa((* G H , G (( F4_EEE&,mT5L4MPTPWyZ\^e^o^o^q^q&r&rOE5!  7>>>  F4_EEEF #,,..666&,mT5L4MPTPWyZ\^b&c&cOE5!  7;;;  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/@/@ >,_===Y qjjZ As:   "F 5A?F 6A+F # F I>A"G??I>A#I99I>c                 b    | j         st                      t          j        | j                   dS )zb        Flush of file like objects. In this case, wait until all data
        is written.
        N)r   r   rY   tcdrainr   r!   s    r   flushzSerial.flush  s2    
 | 	%"$$$     r   c                 N    t          j        | j        t           j                   dS z9Clear input buffer, discarding all that is in the buffer.N)rY   tcflushr   TCIFLUSHr!   s    r   r   zSerial._reset_input_buffer  s    !122222r   c                 X    | j         st                      |                                  dS rK  )r   r   r   r!   s    r   reset_input_bufferzSerial.reset_input_buffer  s0    | 	%"$$$  """""r   c                 x    | j         st                      t          j        | j        t          j                   dS )zs        Clear output buffer, aborting the current output and discarding all
        that is in the buffer.
        N)r   r   rY   rL  r   TCOFLUSHr!   s    r   reset_output_bufferzSerial.reset_output_buffer  s7    
 | 	%"$$$!122222r         ?c                     | j         st                      t          j        | j        t          |dz                       dS )za        Send break condition. Timed, returns to idle state after given
        duration.
        rS  N)r   r   rY   tcsendbreakr   rr   )r   durations     r   
send_breakzSerial.send_break  sA    
 | 	%"$$$DGSD%9%9:::::r   c                     | j         r't          j        | j        t          t
                     dS t          j        | j        t          t
                     dS )z)Set terminal status line: Request To SendN)
_rts_stater   r   r   r   TIOCM_RTS_strr   r!   s    r   r   zSerial._update_rts_state  D    ? 	:K=99999K=99999r   c                     | j         r't          j        | j        t          t
                     dS t          j        | j        t          t
                     dS )z-Set terminal status line: Data Terminal ReadyN)
_dtr_stater   r   r   r   TIOCM_DTR_strr   r!   s    r   r   zSerial._update_dtr_state  r[  r   c                     | j         st                      t          j        | j        t
          t                    }t          j        d|          d         t          z  dk    S )z(Read terminal status line: Clear To Sendr   r   )
r   r   r   r   r   r   r  r  r  r   r  s     r   ctsz
Serial.cts  P     | 	%"$$$K>::}S!$$Q')3q88r   c                     | j         st                      t          j        | j        t
          t                    }t          j        d|          d         t          z  dk    S )z)Read terminal status line: Data Set Readyr   r   )
r   r   r   r   r   r   r  r  r  r   r  s     r   dsrz
Serial.dsr  ra  r   c                     | j         st                      t          j        | j        t
          t                    }t          j        d|          d         t          z  dk    S )z)Read terminal status line: Ring Indicatorr   r   )
r   r   r   r   r   r   r  r  r  r   r  s     r   riz	Serial.ri  P     | 	%"$$$K>::}S!$$Q'(2a77r   c                     | j         st                      t          j        | j        t
          t                    }t          j        d|          d         t          z  dk    S )z)Read terminal status line: Carrier Detectr   r   )
r   r   r   r   r   r   r  r  r  r   r  s     r   cdz	Serial.cd  rf  r   c                     t          j        | j        t          t                    }t          j        d|          d         S )z:Return the number of bytes currently in the output buffer.r   r   )r   r   r   r   r  r  r  r  s     r   out_waitingzSerial.out_waiting  s0     K>::}S!$$Q''r   c                 :    | j         st                      | j        S )z        For easier use of the serial port instance with select.
        WARNING: this function is not portable to different platforms!
        )r   r   r   r!   s    r   filenozSerial.fileno  s!    
 | 	%"$$$wr   Tc                     | j         st                      |r&t          j        | j        t          j                   dS t          j        | j        t          j                   dS )z        Manually control flow - when software flow control is enabled.
        This will send XON (true) or XOFF (false) to the other device.
        WARNING: this function is not portable to different platforms!
        N)r   r   rY   tcflowr   TCIONTCIOFFr   enables     r   set_input_flow_controlzSerial.set_input_flow_control  Z     | 	%"$$$ 	4N47GM22222N47GN33333r   c                     | j         st                      |r&t          j        | j        t          j                   dS t          j        | j        t          j                   dS )z        Manually control flow of outgoing data - when hardware or software flow
        control is enabled.
        WARNING: this function is not portable to different platforms!
        N)r   r   rY   rn  r   TCOONTCOOFFrq  s     r   set_output_flow_controlzSerial.set_output_flow_control  rt  r   c                 D    ddl }|                    dt                     dS )zDEPRECATED - has no user   Nz0nonblocking() has no effect, already nonblocking)warningswarnDeprecationWarning)r   rz  s     r   nonblockingzSerial.nonblocking  s'    HJ\]]]]]r   N)Fr*   )rS  T)r#   r$   r%   __doc__r   r   r   propertyr!  r)  r:  r<  r9  rI  r   rO  rR  rW  r   r   r`  rc  re  rh  rj  rl  rs  rx  r}  r'   r   r   r   r   0  s        ? ? ?BW3 W3 W3 W3r! ! !  ( ( X(1 1 1 1f3 3 34 4 44 4 4l! ! !3 3 3# # #3 3 3; ; ; ;: : :: : : 9 9 X9 9 9 X9 8 8 X8 8 8 X8 ( ( X(  4 4 4 44 4 4 4^ ^ ^ ^ ^r   r   c                       e Zd ZdZddZdS )PosixPollSerialz    Poll based read implementation. Not all systems support poll properly.
    However this one has better handling of errors, such as a device
    disconnecting while it's in use (e.g. USB-serial unplugged).
    r*   c                 Z   | j         st                      t                      }t          | j                  }t          j                    }|                    | j        t
          j	        t
          j
        z  t
          j        z  t
          j        z             |                    | j        t
          j	        t
          j
        z  t
          j        z  t
          j        z             |dk    r4t          |          |k     r |                    |j        rdn|                                dz            D ]J\  }}|| j        k    r n9|t
          j
        t
          j        z  t
          j        z  z  rt#          d          K|| j        k    rt%          j        | j        d           n|t%          j        | j        |t          |          z
            }|                    |           |                                s| j        | j        dk    r|snt          |          |k      t/          |          S )r#  r   Nrh   zdevice reports error (poll))r   r   r$  r	   r%  r'  pollregisterr   POLLINPOLLERRPOLLHUPPOLLNVALr   r&  r@  r(  r   r   r)  r*  r0  r   r1  )r   r2  r)  r3  r  r   eventr_   s           r   r)  zPosixPollSerial.read&  s    | 	%"$$${{$-(({}}dgv}v~=NQWQ``aaad,fmfn.Lv~.]`f`o.oppp!88d))d"" "&73F+h44WM^M^M`M`cgMg!i!i M MIBT333 ?&/ QR M-.KLLLM ///GD2D999gdgtc$ii'788C   ??$$  4@TE]`aEaEaknEa# d))d""$ T{{r   Nr~  )r#   r$   r%   r  r)  r'   r   r   r  r    s2                    r   r  c                   @     e Zd ZdZd fd	ZddZ e            Z xZS )VTIMESerialab      Implement timeout using vtime of tty device instead of using select.
    This means that no inter character timeout can be specified and that
    the error handling is degraded.

    Overall timeout is disabled when inter-character timeout is used.

    Note that this implementation does NOT support cancel_read(), it will
    just ignore that.
    Tc                    t          t          |                                            t          j        | j        t          j        d           | j        d}t          | j        dz            }n%| j        d}d}nd}t          | j        dz            }	 t          j
        | j                  }|\  }}}}}	}
}n># t          j        $ r,}t          j        d                    |                    d}~ww xY w|dk     s|dk    r"t          d                    |                    ||t          j        <   ||t          j        <   t          j        | j        t          j        |||||	|
|g           dS )r   r   Nr*   r;   r   r   r   )superr  r   r   r   r   r   rr   r%  rY   r   r   r   r   r^   r]   r
  r	  r  r  )r   r   r  r  r  r  r  r  r  r  r  r  r   	__class__s                r   r   zVTIMESerial._reconfigure_portU  s   k4  22444DGU]A...#/D02566EE]"DEED*++E	U)$'22I=F:E5%} 	U 	U 	U()G)N)Ns)S)STTT	U 199299%@@AAA!7=7<ueVVR@	B 	B 	B 	B 	Bs   #B9 9C4'C//C4r*   c                 6   | j         st                      t                      }t          |          |k     rUt	          j        | j        |t          |          z
            }|sn(|                    |           t          |          |k     Ut          |          S )r#  )	r   r   r$  r&  r   r)  r   r*  r1  )r   r2  r)  r_   s       r   r)  zVTIMESerial.reads  s     | 	%"$$${{$ii$'$'4#d))#344C KK	 $ii$
 T{{r   r  r~  )	r#   r$   r%   r  r   r)  r  r:  __classcell__)r  s   @r   r  r  I  sb        	 	B B B B B B<   " (**KKKKKr   r  )=
__future__r   r   r   r   r'  r  sysrY   r   serial.serialutilr   r   r   r   r   r	   objectr   r  platformlowerplatrX   rc   rf   re   ri   rt   rj   rn   rp   rl   r/   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   packr  rZ  r^  r   r    r   r  r  r'   r   r   <module>r     s4  : ' & & & & &   				   



  6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6+ + + + +6 + + +0 

 |8wLLL F GGF JJ"&)'_K _K _K _K _K/ _K _K _K _KD 
X
 
 
 
 
/ 
 
 
 
  
"1"XLLLK@ @ @ @ @/ @ @ @ @* 
"1"X	"1"X	"1"X	"1"X       @ @ @ @ @/ @ @ @ @(    /    77J//77J//77J//77J// GG[%00	GG[%00	 GG[%00	GG[%00	GG[%00	GG[%00	77J	2277J	22 77I 3oGGggz622G77J//S!$$C++C++77J//77J//l^ l^ l^ l^ l^Z) l^ l^ l^^' ' ' ' 'f ' ' 'T; ; ; ; ;& ; ; ; ; ;r   