1_#ddlmZddlZddlZddlZddlmZ ddlZn#e$r ddl m ZYnwxYwdZ dZ Gdde ZGdd e ZGd d ejZed kredZd e_eedSdS))absolute_importN)to_bytesc#`Kd}tj|D]i}dt|d|cxkrdkrnn|dndfV|dz }|dkrd V]|d krd Vd}j|dkr%|d kr|dz }|dkrd Vd V|d kd Vd Sd S)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. rz{:02X}  ascii.) )NN)z r N)serial iterbytesformatorddecode)datanbs @/usr/lib/python3/dist-packages/serial/urlhandler/protocol_spy.pysixteenr%s A  d # #A''da>Q>Q>Q>Q'>Q>Q>Q>Q>Q'):):):WZ[[[[ Q 66OOOO "WW   A1uu"ff FAAvv    "ff   uc#:Kg}g}d}t|D]\}}|Q|dd|d|gfV|dd=|dd=|dz }X||||dS)z yield lines with hexdump of datarNr r r)rjoinappend)rvaluesroffsethas rhexdumpr!<s F E F 1 9388RWWV__bggenn$EFFG G G Gqqq aaa dNFF MM!    LLOOOOrc*eZdZdZdZdZdZdZdS) FormatRawz&Forward only RX and TX data to output.c>||_||_d|_d|_dS)N)outputcolorrx_colortx_colorselfr'r(s r__init__zFormatRaw.__init__Os"  " " rc|jr|j|j|j||jdS)zshow received dataN)r(r'writer)flushr,rs rrxz FormatRaw.rxUT : - K  dm , , , $ rc|jr|j|j|j||jdS)zshow transmitted dataN)r(r'r/r*r0r1s rtxz FormatRaw.tx\r3rcdS)z(do not) show control callsNr,namevalues rcontrolzFormatRaw.controlcs rN)__name__ __module__ __qualname____doc__r-r2r5r;r7rrr#r#LsV00###      rr#c2eZdZdZdZd dZdZdZdZdS) 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|tj|_||_||_d|_d|_d|_dS)Nr%r&z)time start_timer'r(r)r* control_colorr+s rr-zFormatHexdump.__init__ws9)++  " " 'rr c|jd|||||jdS)Nz{:010.3f} {:4} {}{} )r'r/rr0)r, timestamplabelr:value2s r write_linezFormatHexdump.write_linesH 188E5RXYYZZZ rcl|jr|j|j|r[t |D]I\}}|t j|jz dd||JdS|t j|jz dddS)zshow received data as hex dumpRX{:04X} zN) r(r'r/r)r!rJrCrDrr,rrrows rr2zFormatHexdump.rxs : - K  dm , , ,  L&t}} e e  do =tZEVEVW]E^E^`cdddd e e OODIKK$/94 K K K K Krc|jr|j|jt |D]I\}}|t j|jz dd||JdS)z!show transmitted data as hex dumpTXrMN) r(r'r/r*r!rJrCrDrrNs rr5zFormatHexdump.txs : - K  dm , , ,"4== a aKFC OODIKK$/94ARARSYAZAZ\_ ` ` ` ` a arc|jr|j|j|t j|jz ||dS)zshow control callsN)r(r'r/rErJrCrDr8s rr;zFormatHexdump.controlsN : 2 K  d0 1 1 1  do5tUCCCCCrN)r ) r<r=r>r?r-rJr2r5r;r7rrrArAhsy  (((LLLaaaDDDDDrrAceZdZdZfdZejjjdZdZ fdZ dfd Z e ejdrfd Z e ejd rfd Zefd Zfd ZfdZfdZdfd ZejjjdZejjjdZejjjdZejjjfdZejjjfdZejjjfdZejjjfdZxZS)Serialzc Inherit the native Serial port implementation and wrap all the methods and attributes. cdtt|j|i|d|_d|_dS)NF)superrTr- formattershow_all)r,argskwargs __class__s rr-zSerial.__init__s7$fd$d5f555 rc~|:tjj|||dSdSN)rrTport__set__from_url)r,r:s rr^z Serial.ports=   M  & &tT]]5-A-A B B B B B  rctj|}|jdkr,tjd|jt }d}tj} tj |j d D]h\}}|dkrt|dd}"|dkrd}+|d krt}9|d krd|_Gtd |n9#t$r,}tjd |d }~wwxYw||||_d|j|jgS)z(extract host and port from an URL stringspyzmexpected a string in the form "spy://port[?option[=value][&option[=value]]]": not starting with spy:// ({!r})FTfilerwr(rawallzunknown option: {!r}zPexpected a string in the form "spy://port[?option[=value][&option[=value]]]": {}Nr )urlparseurlsplitschemerSerialExceptionrrAsysstderrparse_qsqueryitemsopenr#rX ValueErrorrWrnetlocpath) r,urlpartsrWr(r'optionres rr`zSerial.from_urls!#&& <5 (228&2F2FHH H "  P"*"3EK"F"F"L"L"N"N L LV##!&)S11FFw&& EEu__ )IIu__$(DMM$%;%B%B6%J%JKKK L P P P(EEKVAYYPP P P#6511ww ej1222s"BC88 D.'D))D.ct|}|j|tt||Sr])rrWr5rVrTr/)r,r5r[s rr/z Serial.writesB b\\ "VT""((,,,rr ctt||}|s|jr|j||Sr])rVrTreadrXrWr2)r,sizer2r[s rrzz Serial.readsL 64 % %d + +  " " N  b ! ! ! r cancel_readc|jddtt|dS)NQ-RXr|)rWr;rVrTr|r,r[s rr|zSerial.cancel_reads= N " "6= 9 9 9 &$   + + - - - - -r cancel_writec|jddtt|dS)NQ-TXr)rWr;rVrTrrs rrzSerial.cancel_writes= N " "6> : : : &$   , , . . . . .rctt|j}|jr.|jdd||S)Nr~zin_waiting -> {})rVrT in_waitingrXrWr;r)r,rr[s rrzSerial.in_waitingsL &$   * = I N " "6+=+D+DQ+G+G H H Hrc|jddtt|dS)Nrr0)rWr;rVrTr0rs rr0z Serial.flushs= vw/// fd!!#####rc|jddtt|dS)Nr~reset_input_buffer)rWr;rVrTrrs rrzSerial.reset_input_buffers> v';<<< fd..00000rc|jddtt|dS)Nrreset_output_buffer)rWr;rVrTrrs rrzSerial.reset_output_buffers> v'<=== fd//11111r?c|jdd|tt||dS)NBRKzsend_break {}s)rWr;rrVrT send_break)r,durationr[s rrzSerial.send_breaksN u&6&=&=h&G&GHHH fd&&x00000rc|jd|rdndtjj||dS)Nractiveinactive)rWr;rrTbreak_conditionr_r,levels rrzSerial.break_conditionsD u%&GhhZHHH %--dE:::::rc|jd|rdndtjj||dS)NRTSrr)rWr;rrTrtsr_rs rrz Serial.rtsD u%&GhhZHHH !!$.....rc|jd|rdndtjj||dS)NDTRrr)rWr;rrTdtrr_rs rrz Serial.dtrrrcztt|j}|jd|rdnd|S)NCTSrr)rVrTctsrWr;r,rr[s rrz Serial.cts;fd##' u%&GhhZHHH rcztt|j}|jd|rdnd|S)NDSRrr)rVrTdsrrWr;rs rrz Serial.dsr rrcztt|j}|jd|rdnd|S)NRIrr)rVrTrirWr;rs rrz Serial.ri;fd##& t%FXXJGGG rcztt|j}|jd|rdnd|S)NCDrr)rVrTcdrWr;rs rrz Serial.cdrr)r )r)r<r=r>r?r-rrTr^setterr`r/rzhasattrr|rpropertyrr0rrrrrrrgetterrrr __classcell__)r[s@rrTrTs   ]CCC333>-----  wv}m,,. . . . . .wv}n--/ / / / / /X $$$$$1111122222111111 ]");;*); ]/// ]/// ]  ]  ]  ]rrT__main__zspy:///dev/ttyS0) __future__rrkrCrserial.serialutilrrg ImportError urllib.parseparserr!objectr#rArTr<serr^printr7rrrss.'&&&&& ''''''$OOOO$$$########$.            80D0D0D0D0DF0D0D0DfAAAAAV]AAAH z &,,C!CH E#JJJJJs  --