
    1_#                         d dl mZ d dlZd dlZd dlZd dlmZ 	 d dlZd Zd Z G d de      Z G d d	e      Z G d
 dej                         Zedk(  r ed      Zde_         ee       yy# e$ r	 d dl	m
Z Y \w xY w)    )absolute_importN)to_bytesc              #   B  K   d}t        j                  |       D ]Z  }dj                  t        |            d|cxk  rdk  rn n|j	                  d      ndf |dz  }|dk(  rd	 O|d
k\  sUd d}\ |dkD  r"|d
k  r|dz  }|dk(  rd	 d |d
k  rd yyw)z    yield tuples of hex and ASCII display in multiples of 16. Includes a
    space after 8 bytes and (None, None) after 16 bytes and at the end.
    r   z{:02X}        ascii.      )     )NN)z   r   N)serial	iterbytesformatorddecode)datanbs      @/usr/lib/python3/dist-packages/serial/urlhandler/protocol_spy.pysixteenr   %   s     
 	
Ad# A'da>Q'>Q'):WZ[[	Q6O"WA 	1u"fFAAv	 "f
  s   A,B/)BBc              #     K   g }g }d}t        |       D ]n  \  }}|E|dj                  dj                  |      dj                  |      g      f |dd= |dd= |dz  }M|j                  |       |j                  |       p yw)z yield lines with hexdump of datar   Nr   r   r   )r   joinappend)r   valuesr   offsethas         r   hexdumpr    <   s     FEF 19388RWWV_bggen$EFGGq	adNFMM!LLOs   BBc                   (    e Zd ZdZd Zd Zd Zd Zy)	FormatRawz&Forward only RX and TX data to output.c                 <    || _         || _        d| _        d| _        y )N[32m[31m)outputcolorrx_colortx_colorselfr&   r'   s      r   __init__zFormatRaw.__init__O   s    
""    c                     | j                   r%| j                  j                  | j                         | j                  j                  |       | j                  j	                          y)zshow received dataN)r'   r&   writer(   flushr+   r   s     r   rxzFormatRaw.rxU   A    ::KKdmm,$r-   c                     | j                   r%| j                  j                  | j                         | j                  j                  |       | j                  j	                          y)zshow transmitted dataN)r'   r&   r/   r)   r0   r1   s     r   txzFormatRaw.tx\   r3   r-   c                      y)z(do not) show control callsN r+   namevalues      r   controlzFormatRaw.controlc   s    r-   N)__name__
__module____qualname____doc__r,   r2   r5   r;   r7   r-   r   r"   r"   L   s    0#r-   r"   c                   0    e Zd ZdZd ZddZd Zd Zd Zy)	FormatHexdumpax      Create a hex dump of RX ad TX data, show when control lines are read or
    written.

    output example::

        000000.000 Q-RX flushInput
        000002.469 RTS  inactive
        000002.773 RTS  active
        000003.001 TX   48 45 4C 4C 4F                                    HELLO
        000003.102 RX   48 45 4C 4C 4F                                    HELLO

    c                 |    t        j                          | _        || _        || _        d| _        d| _        d| _        y )Nr$   r%   z[37m)time
start_timer&   r'   r(   r)   control_colorr*   s      r   r,   zFormatHexdump.__init__w   s3    ))+
""'r-   c                     | j                   j                  dj                  ||||             | j                   j                          y )Nz{:010.3f} {:4} {}{}
)r&   r/   r   r0   )r+   	timestamplabelr:   value2s        r   
write_linezFormatHexdump.write_line   s7    188E5RXYZr-   c                 z   | j                   r%| j                  j                  | j                         |rVt	        |      D ]G  \  }}| j                  t        j                         | j                  z
  ddj                  |      |       I y| j                  t        j                         | j                  z
  dd       y)zshow received data as hex dumpRX{:04X}  z<empty>N)	r'   r&   r/   r(   r    rJ   rC   rD   r   r+   r   r   rows       r   r2   zFormatHexdump.rx   s    ::KKdmm,&t} e		doo =tZEVEVW]E^`cde OODIIK$//94Kr-   c                    | j                   r%| j                  j                  | j                         t	        |      D ]G  \  }}| j                  t        j                         | j                  z
  ddj                  |      |       I y)z!show transmitted data as hex dumpTXrM   N)	r'   r&   r/   r)   r    rJ   rC   rD   r   rN   s       r   r5   zFormatHexdump.tx   sf    ::KKdmm,"4= 	aKFCOODIIK$//94ARARSYAZ\_`	ar-   c                     | j                   r%| j                  j                  | j                         | j	                  t        j
                         | j                  z
  ||       y)zshow control callsN)r'   r&   r/   rE   rJ   rC   rD   r8   s      r   r;   zFormatHexdump.control   s@    ::KKd001		doo5tUCr-   N)r   )	r<   r=   r>   r?   r,   rJ   r2   r5   r;   r7   r-   r   rA   rA   h   s#    (LaDr-   rA   c                   L    e Zd ZdZ fdZej                  j                  j                  d        Zd Z	 fdZ
d fd	Z eej                  d      r fdZ eej                  d	      r fd
Ze fd       Z fdZ fdZ fdZd fd	Zej                  j*                  j                  d        Zej                  j,                  j                  d        Zej                  j.                  j                  d        Zej                  j0                  j2                   fd       Zej                  j4                  j2                   fd       Zej                  j6                  j2                   fd       Zej                  j8                  j2                   fd       Z xZS )Serialzc    Inherit the native Serial port implementation and wrap all the methods and
    attributes.
    c                 H    t        t        | 
  |i | d | _        d| _        y )NF)superrT   r,   	formattershow_all)r+   argskwargs	__class__s      r   r,   zSerial.__init__   s%    fd$d5f5r-   c                 |    |:t         j                  j                  j                  | | j	                  |             y y N)r   rT   port__set__from_url)r+   r:   s     r   r^   zSerial.port   s0    MM&&tT]]5-AB r-   c                    t        j                  |      }|j                  dk7  r.t        j                  dj                  |j                              t        }d}t        j                  }	 t        j                  |j                  d      j                         D ]T  \  }}|dk(  rt        |d   d      }|dk(  rd}#|d	k(  rt        }/|d
k(  rd| _        <t        dj                  |             	  |||      | _        dj#                  |j$                  |j&                  g      S # t        $ r)}t        j                  dj                  |            d}~ww xY w)z(extract host and port from an URL stringspyzmexpected a string in the form "spy://port[?option[=value][&option[=value]]]": not starting with spy:// ({!r})FTfiler   wr'   rawallzunknown option: {!r}zPexpected a string in the form "spy://port[?option[=value][&option[=value]]]": {}Nr   )urlparseurlsplitschemer   SerialExceptionr   rA   sysstderrparse_qsqueryitemsopenr"   rX   
ValueErrorrW   r   netlocpath)	r+   urlpartsrW   r'   r&   optionr   es	            r   r`   zSerial.from_url   sJ   !!#&<<5 ((228&2FH H
 "		P"*"3"3EKK"F"L"L"N 
LV#!&)S1Fw& Eu_ )Iu_$(DM$%;%B%B6%JKK
L #651wwejj122  	P((EEKVAYP P	Ps   ,BD' '	E0$EEc                 v    t        |      }| j                  j                  |       t        t        |   |      S r]   )r   rW   r5   rV   rT   r/   )r+   r5   r[   s     r   r/   zSerial.write   s0    b\"VT(,,r-   c                     t         t        |   |      }|s| j                  r| j                  j                  |       |S r]   )rV   rT   readrX   rW   r2   )r+   sizer2   r[   s      r   rz   zSerial.read   s4    64%d+NNb!	r-   cancel_readc                 b    | j                   j                  dd       t        t        |           y )NQ-RXr|   )rW   r;   rV   rT   r|   r+   r[   s    r   r|   zSerial.cancel_read   s$    NN""6=9&$+-r-   cancel_writec                 b    | j                   j                  dd       t        t        |           y )NQ-TXr   )rW   r;   rV   rT   r   r   s    r   r   zSerial.cancel_write   s$    NN""6>:&$,.r-   c                     t         t        | 
  }| j                  r+| j                  j                  ddj                  |             |S )Nr~   zin_waiting -> {})rV   rT   
in_waitingrX   rW   r;   r   )r+   r   r[   s     r   r   zSerial.in_waiting   s;    &$*==NN""6+=+D+DQ+GHr-   c                 b    | j                   j                  dd       t        t        |           y )Nr   r0   )rW   r;   rV   rT   r0   r   s    r   r0   zSerial.flush   s$    vw/fd!#r-   c                 b    | j                   j                  dd       t        t        |           y )Nr~   reset_input_buffer)rW   r;   rV   rT   r   r   s    r   r   zSerial.reset_input_buffer   s%    v';<fd.0r-   c                 b    | j                   j                  dd       t        t        |           y )Nr   reset_output_buffer)rW   r;   rV   rT   r   r   s    r   r   zSerial.reset_output_buffer   s%    v'<=fd/1r-   c                     | j                   j                  ddj                  |             t        t        |   |       y )NBRKzsend_break {}s)rW   r;   r   rV   rT   
send_break)r+   durationr[   s     r   r   zSerial.send_break   s2    u&6&=&=h&GHfd&x0r-   c                     | j                   j                  d|rdnd       t        j                  j                  j                  | |       y )Nr   activeinactive)rW   r;   r   rT   break_conditionr_   r+   levels     r   r   zSerial.break_condition   s4    u%hZH%%--dE:r-   c                     | j                   j                  d|rdnd       t        j                  j                  j                  | |       y )NRTSr   r   )rW   r;   r   rT   rtsr_   r   s     r   r   z
Serial.rts   4    u%hZH!!$.r-   c                     | j                   j                  d|rdnd       t        j                  j                  j                  | |       y )NDTRr   r   )rW   r;   r   rT   dtrr_   r   s     r   r   z
Serial.dtr  r   r-   c                 p    t         t        | 
  }| j                  j	                  d|rd       |S d       |S )NCTSr   r   )rV   rT   ctsrW   r;   r+   r   r[   s     r   r   z
Serial.cts  8    fd'u%hH >HHr-   c                 p    t         t        | 
  }| j                  j	                  d|rd       |S d       |S )NDSRr   r   )rV   rT   dsrrW   r;   r   s     r   r   z
Serial.dsr  r   r-   c                 p    t         t        | 
  }| j                  j	                  d|rd       |S d       |S )NRIr   r   )rV   rT   rirW   r;   r   s     r   r   z	Serial.ri  8    fd&tXG =GGr-   c                 p    t         t        | 
  }| j                  j	                  d|rd       |S d       |S )NCDr   r   )rV   rT   cdrW   r;   r   s     r   r   z	Serial.cd  r   r-   )r
   )g      ?)r<   r=   r>   r?   r,   r   rT   r^   setterr`   r/   rz   hasattrr|   r   propertyr   r0   r   r   r   r   r   r   r   getterr   r   r   __classcell__)r[   s   @r   rT   rT      s   
 ]]C C3>-
 v}}m,	. v}}n-	/  $121 ]]"")); *; ]]/ / ]]/ / ]] 
 ]] 
 ]] 
 ]] r-   rT   __main__zspy:///dev/ttyS0)
__future__r   rk   rC   r   serial.serialutilr   rg   ImportErrorurllib.parseparser   r    objectr"   rA   rT   r<   serr^   printr7   r-   r   <module>r      s   . ' 
   '$
.  80DF 0DfAV]] AH z
,C!CH	#J }  $#$s   A- -A;:A;