
    ʦ^_\!                         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 dZd ZdZdZdZdZdZdZd	Z G d
 de      Zy# e$ r	 d dlmZ Y Fw xY w# e$ r d dlZY Pw xY w)    N)
SerialBaseSerialExceptionPortNotOpenErrorto_bytesTimeoutA      C      P   Q   R   c                   p     e Zd ZdZ fdZd Zd Zd Zd Ze	d        Z
d Zd	 Zd
 ZddZd Zd Z xZS )Serial)i,  iw  iX  i  i  i`	  i  i%  i K  i   i   i  i  i  i  i  i  i@B c                 V    d | _         d | _        d | _        t        t        |   |i | y N)_hid_handle_read_buffer_threadsuperr   __init__)selfargskwargs	__class__s      C/usr/lib/python3/dist-packages/serial/urlhandler/protocol_cp2110.pyr   zSerial.__init__E   s.     fd$d5f5    c                 l   | j                   t        d      | j                  rt        d      t        j                         | _        t        j                         | _        	 | j                  | j                        }| j                  j                  |       	 | j                          d| _        t        j                   | j"                        | _        | j$                  j'                  d       | j$                  j)                  dj                  | j                                | j$                  j+                          y # t        $ r5}t        |j                  dj                  | j                   |            d }~ww xY w#  	 | j                  j-                          d | _         #  Y d | _         xY wxY w)Nz.Port must be configured before it can be used.zPort is already open.zcould not open port {}: {}T)targetz$pySerial CP2110 reader thread for {})_portr   is_openQueuer   hiddevicer   from_urlportstr	open_pathOSErrorerrnoformat_reconfigure_port	threadingThread_hid_read_loopr   	setDaemonsetNamestartclose)r   portpathmsgs      r   openzSerial.openK   sb   ::!"RSS<<!"9::!KKM::<	c}}T\\2H&&x0	!""$  DL$++43F3FGDLLL""4(LL  !G!N!Ntzz!Z[LL #  	c!#))-I-P-PQUQ[Q[]`-abb	c
	  &&(  $D#Ds<   "6D? F  ?	E=0E88E= F3F%F3%F0'F3c                    t        j                  |      }|j                  dk7  r$t        dj	                  |j                              |j
                  r|j
                  j                  d      S |j                  j                  d      S )Ncp2110zuexpected a string in the forms "cp2110:///dev/hidraw9" or "cp2110://0001:0023:00": not starting with cp2110:// {{!r}}zutf-8)urlparseurlsplitschemer   r*   netlocencodepath)r   urlpartss      r   r%   zSerial.from_urlj   ss    !!#&<<8#!55;VELL5IK K <<<<&&w//zz  ))r   c                     d| _         | j                  r"| j                  j                  d       d | _        | j                  j	                          d | _        y )NFr	   )r!   r   joinr   r2   r   s    r   r2   zSerial.closeu   sC    <<LLa DL r   c           	         d }| j                   t        j                  k(  rd}n| j                   t        j                  k(  rd}n| j                   t        j                  k(  rd}nd| j                   t        j
                  k(  rd}nD| j                   t        j                  k(  rd}n$t        dj                  | j                               | j                  rd}nd}d }| j                  dk(  rd}nZ| j                  dk(  rd}nH| j                  d	k(  rd}n6| j                  d
k(  rd}n$t        dj                  | j                              d }| j                  t        j                  k(  rd}nd| j                  t        j                  k(  rd}nD| j                  t        j                  k(  rd}n$t        dj                  | j                              t        j                   dt"        | j$                  ||||      }| j&                  j)                  |       | j&                  j)                  t+        t,        t.        f             | j1                          y )Nr   r	   r         zInvalid parity: {!r}            zInvalid char len: {!r}z$Invalid stop bit specification: {!r}z>BLBBBB)_parityserialPARITY_NONE
PARITY_ODDPARITY_EVENPARITY_MARKPARITY_SPACE
ValueErrorr*   rtscts	_bytesize	_stopbitsSTOPBITS_ONESTOPBITS_ONE_POINT_FIVESTOPBITS_TWOstructpack_REPORT_GETSET_UART_CONFIG	_baudrater   send_feature_reportbytes_REPORT_GETSET_UART_ENABLE_ENABLE_UART_update_break_state)r   parity_valueflow_control_valuedata_bits_valuestop_bits_valueconfiguration_reports         r   r+   zSerial._reconfigure_port}   s   <<6---L\\V...L\\V///L\\V///L\\V000L3::4<<HII;;!%!%>>Q"O^^q "O^^q "O^^q "O5<<T^^LMM>>V000"O^^v==="O^^v222"OCJJ4>>Z[[%{{&NN  	,,-AB,,-|<=	?  "r   c                 6    | j                   j                         S r   )r   qsizerB   s    r   
in_waitingzSerial.in_waiting   s      &&((r   c                 .   | j                   s
t               | j                  j                  t	        t
        t        f             | j                  j                         r7| j                  j                  d       | j                  j                         r6y y )NF)
r!   r   r   r\   r]   _REPORT_SET_PURGE_FIFOS_PURGE_RX_FIFOr   rg   getrB   s    r   reset_input_bufferzSerial.reset_input_buffer   sp    ||"$$,,*N;<	> %%'!!%( %%'r   c                     | j                   s
t               | j                  j                  t	        t
        t        f             y r   )r!   r   r   r\   r]   rj   _PURGE_TX_FIFOrB   s    r   reset_output_bufferzSerial.reset_output_buffer   s4    ||"$$,,*N;<	>r   c                     | j                   s
t               | j                  r+| j                   j                  t	        t
        df             y | j                   j                  t	        t        df             y )Nr   )r   r   _break_stater\   r]   _REPORT_SET_TRANSMIT_LINE_BREAK_REPORT_SET_STOP_LINE_BREAKrB   s    r   r`   zSerial._update_break_state   sc    "$$006:;= 002A679r   c                    | j                   s
t               t               }	 t        | j                        }t        |      |k  rs| j                  t        d      | j                  j                  d|j                               }|t        |      S ||z  }|j                         rnt        |      |k  rst        |      S # t        j                  $ r Y t        |      S w xY w)Nz&connection failed (reader thread died)T)r!   r   	bytearrayr   _timeoutlenr   r   r   rl   	time_leftr]   expiredr"   Empty)r   sizedatatimeoutbufs        r   readzSerial.read   s    ||"$${	dmm,Gd)d"<<')*RSS''++D'2C2C2EF; ;&??$ d)d" T{ {{ 	T{	s   A0C $C C#"C#c                    | j                   s
t               t        |      }t        |      }|dkD  rPt	        |d      }t        |g      |d | z   }| j
                  j                  |       ||d  }t        |      }|dkD  rOy y )Nr   ?   )r!   r   r   rx   minr   write)r   r}   tx_len
to_be_sentreports        r   r   zSerial.write   s    ||"$$~TqjVT*Jzl+d;J.??F""6*
$DYF qjr   c                 (   	 | j                   rr| j                  j                  dd      }|s,|j                  d      }|t	        |      k(  sJ | j
                  j                  t        |             | j                   rrd | _        y # d | _        w xY w)N@   d   )
timeout_msr   )	r!   r   r   poprx   r   putrv   r   )r   r}   data_lens      r   r.   zSerial._hid_read_loop   s    		 ,,'',,RC,@88A;3t9,,,!!%%io6 ,,  DL4DLs   A=B 	B)r	   )__name__
__module____qualname__	BAUDRATESr   r5   r%   r2   r+   propertyrh   rm   rp   r`   r   r   r.   __classcell__)r   s   @r   r   r   =   sV    "I6!>	* 7#r ) ))>9(
 r   r   )rX   r,   r8   ImportErrorurllib.parseparser"   queuer#   rK   serial.serialutilr   r   r   r   r   r^   _DISABLE_UARTr_   rj   ro   rk   rZ   rs   rt   r    r   r   <module>r      s   6  $   ^ ^ "  ! "& " E Z E ;  $#$
  s"   A A AA	A$#A$