+
    ,_Г                        ^ RI Ht ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIHt ^ RI	H
t
 ]P                  ! R 4        ] R t ! R R]4      t]P(                  R	8X  d$   ^ RIt^ RIt^ RIt ! R
 R]4      t ! R R]4      tMJ]P(                  R8X  d   ^ RIt^ RIt^ RIt ! R R]4      tM!]! RP=                  ]P.                  4      4      h ! R R]4      t ! R R]4      t  ! R R]4      t! ! R R]4      t" ! R R]4      t# ! R R]#4      t$ ! R R]4      t% ! R R ]4      t& ! R! R"]4      t'R#] R$]!R%]"/t(R&]R']#R(]$R)]%R*]&R+]'/t)R, t* ! R- R.]4      t+R1R/ lt,]-R08X  d
   ],! 4        R# R#   ] d	    ]t]t EL8i ; i)2    )absolute_importN)comports)hexlify_codecc                 >    V R 8X  d   \         P                  ! 4       # R# )hexlifyN)r   getregentrycs   &7/usr/lib/python3/dist-packages/serial/tools/miniterm.py<lambda>r      s    i-335QTQ    c                ~    \        V 4      pV^ 8  d"   RP                  \        R4      V,           4      # \        V 4      # )z)generate a readable description for a keyz	Ctrl+{:c}@)ordformatrepr)	character
ascii_codes   & r   key_descriptionr   !   s6    YJB!!#c(Z"788Ir   c                   Z   a  ] tR t^+t o RtR tR tR tR tR t	R t
R tR	 tR
 tRtV tR# )ConsoleBasez8OS abstraction for console (input/output codec, no echo)c                    \         P                  R8  d!   \         P                  P                  V n        M\         P                  V n        \         P                  V n        R#    N)r   r   )sysversion_infostdoutbufferbyte_outputoutputselfs   &r   __init__ConsoleBase.__init__.   s9    v%"zz00D"zzDjjr   c                    R# )z.Set console to read single characters, no echoN r!   s   &r   setupConsoleBase.setup5       r   c                    R# )z Restore default console settingsNr&   r!   s   &r   cleanupConsoleBase.cleanup8   r)   r   c                    R# )z"Read a single key from the consoleNr&   r!   s   &r   getkeyConsoleBase.getkey;   s    r   c                p    V P                   P                  V4       V P                   P                  4        R# )zWrite bytes (already encoded)N)r   writeflush)r"   byte_strings   &&r   write_bytesConsoleBase.write_bytes?   s(    {+ r   c                p    V P                   P                  V4       V P                   P                  4        R# )zWrite stringN)r    r1   r2   r"   texts   &&r   r1   ConsoleBase.writeD   s$    $r   c                    R# )zCancel getkey operationNr&   r!   s   &r   cancelConsoleBase.cancelI   r)   r   c                &    V P                  4        V # N)r+   r!   s   &r   	__enter__ConsoleBase.__enter__P   s    r   c                &    V P                  4        R # r>   )r'   )r"   argskwargss   &*,r   __exit__ConsoleBase.__exit__T   s    

r   )r   r    N)__name__
__module____qualname____firstlineno____doc__r#   r'   r+   r.   r4   r1   r;   r?   rD   __static_attributes____classdictcell____classdict__s   @r   r   r   +   s:     B!=/!

& r   r   ntc                   6   a  ] tR t^]t o RtR tR tR tRtV t	R# )Outz$file-like wrapper that uses os.writec                    Wn         R # r>   fd)r"   rT   s   &&r   r#   Out.__init__`   s    Gr   c                    R # r>   r&   r!   s   &r   r2   	Out.flushc   s    r   c                H    \         P                  ! V P                  V4       R # r>   )osr1   rT   )r"   ss   &&r   r1   	Out.writef   s    HHTWWa r   rS   N)
rF   rG   rH   rI   rJ   r#   r2   r1   rK   rL   rM   s   @r   rQ   rQ   ]   s     2			! 	!r   rQ   c                      a a ] tR t^it oRRRRRRRRR	R
RRRRRRRRRR/
tRRRRRRRRRRRR R!R"R#R$R%R&R'R(/
tV 3R) ltR* tR+ tR, t	R-t
VtV ;t# ).Console;zbOP<zbOQ=zbOR>zbOS?zb[15~r   zb[17~Azb[18~Bzb[19~Czb[20~Dzb[21~Hz[APz[BKz[DMz[CGz[HOz[FRz[2~Sz[3~Iz[5~Qz[6~c                  < \         \        V `  4        \        P                  P
                  P                  4       V n        \        P                  P
                  P                  4       V n	        \        P                  P
                  P                  R 4       \        P                  P
                  P                  R 4       \        P                  ! 4       R8X  EdW   \        \        P                  ! 4       P!                  R4      ^,          4      R8  Ed   ^p^ RIHp \'        VR4      '       g&   \        P(                  ! VP*                  4      Vn        \        P                  P
                  P.                  p\        P                  P
                  P0                  p\        P                  P
                  P2                  pVP+                  4       pV! V! R4      \        P4                  ! V4      4       VP6                  V,          ^ 8X  d'   V! V! R4      VP6                  V,          4       W`n        \:        P<                  ! R4      ! \?        \@        PB                  PE                  4       4      R4      V n#        \:        P<                  ! R4      ! \?        \@        PH                  PE                  4       4      R4      \@        n$        V PF                  \@        n!        RV PF                  n%        R# )	i  10.iZ)  NLPDWORDUTF-8replace)&superr]   r#   ctypeswindllkernel32GetConsoleOutputCP
_saved_ocpGetConsoleCP
_saved_icpSetConsoleOutputCPSetConsoleCPplatformreleaseintversionsplitctypes.wintypeswintypeshasattrPOINTERDWORDrt   SetConsoleModeGetConsoleModeGetStdHandlebyrefvalue	_saved_cmcodecs	getwriterrQ   r   r   filenor    stderrencoding)r"   "ENABLE_VIRTUAL_TERMINAL_PROCESSINGr   r   r   r   mode	__class__s   &      r   r#   Console.__init__   s   '4)+$mm44GGIDO$mm44AACDOMM""55e<MM""//6 !T)c(2B2B2D2J2J32OPQ2R.SV[.[5;22x33'-~~hnn'EH$!'!7!7!F!F!'!7!7!F!F%}}55BB~~'|C0&,,t2DEJJ!CCI"<#4djjCe6ef%)N **73C

8I8I8K4LiXDK))'23szz7H7H7J3KYWCJCJ#*DKK r   c                   \         P                  P                  P                  V P                  4       \         P                  P                  P                  V P                  4        \         P                  P                  P                  \         P                  P                  P                  R4      V P                  4       R#   \         d     R# i ; i)   Nrw   )ry   rz   r{   r   r}   r   r   r   r   r   AttributeErrorr!   s   &r   __del__Console.__del__   s    MM""55dooFMM""//@&&55fmm6L6L6Y6YZ]6^`d`n`no! s   (AC CCc                ^    \         P                  ! 4       pV\        ^4      8X  d   \        ^
4      # V\        ^ 4      J g   V\        ^4      J dL    \         P                  ! 4       pV\        ^ 4      J d   V P                  V,          # V P                  V,          # V#   \
         d     K  i ; i)T)msvcrtgetwchunichrfncodesnavcodesKeyError)r"   zcodes   &  r   r.   Console.getkey   s    MMOr
?!":%&)^qF4L'8%}}q	>#'<<#55#'==#66 H $ s   6B B B,+B,c                    \         P                  P                  P                  4       p\         P                  P                  P                  VR ^^ 4       R# )   N)ry   rz   r{   GetConsoleWindowuser32PostMessageA)r"   hwnds   & r   r;   Console.cancel   s:     ==))::<DMM  --dE4Cr   )r   r   r}   r    )rF   rG   rH   rI   r   r   r#   r   r.   r;   rK   rL   __classcell__r   rN   s   @@r   r]   r]   i   s     
 
	+6		"	D 	Dr   r]   posixc                   J   a a ] tR t^t oV 3R ltR tR tR tR tRt	Vt
V ;t# )r]   c                  < \         \        V `  4        \        P                  P                  4       V n        \        P                  ! V P                  4      V n	        \        P                  ! V P                  4       \        P                  R8  dJ   \        P                  ! \        P                  P                   4      ! \        P                  4      V n        R# \        P                  V n        R# r   )rx   r]   r#   r   stdinr   rT   termios	tcgetattroldatexitregisterr+   r   r   	getreaderr   	enc_stdin)r"   r   s   &r   r#   r      s    '4)+ii&&(DG((1DHOODLL)&(!'!1!1#))2D2D!Ecii!P!$r   c                   \         P                  ! V P                  4      pV^,          \         P                  ( ,          \         P                  ( ,          \         P
                  ( ,          V^&   ^V^,          \         P                  &   ^ V^,          \         P                  &   \         P                  ! V P                  \         P                  V4       R# )r   N)
r   r   rT   ICANONECHOISIGVMINVTIME	tcsetattrTCSANOW)r"   news   & r   r'   Console.setup   s    ##DGG,CVw~~o-=MCF#$CF7<< $%CF7==!dggw<r   c                r    V P                   P                  ^4      pV\        ^4      8X  d   \        ^4      pV# )   )r   readr   )r"   r
   s   & r   r.   r      s0    ##A&AF4L 1IHr   c                f    \         P                  ! V P                  \        P                  R 4       R# )    N)fcntlioctlrT   r   TIOCSTIr!   s   &r   r;   r      s    KK%8r   c                z    \         P                  ! V P                  \         P                  V P                  4       R # r>   )r   r   rT   	TCSAFLUSHr   r!   s   &r   r+   Console.cleanup   s"    dggw'8'8$((Cr   )r   rT   r   )rF   rG   rH   rI   r#   r'   r.   r;   r+   rK   rL   r   r   s   @@r   r]   r]      s%     	+	=		9	D 	Dr   z9Sorry no implementation for your platform ({}) available.c                   6   a  ] tR t^t o RtR tR tR tRtV t	R# )	Transformz&do-nothing: forward all data unchangedc                    V# )ztext received from serial portr&   r7   s   &&r   rxTransform.rx       r   c                    V# )ztext to be sent to serial portr&   r7   s   &&r   txTransform.tx   r   r   c                    V# )z(text to be sent but displayed on consoler&   r7   s   &&r   echoTransform.echo   r   r   r&   N)
rF   rG   rH   rI   rJ   r   r   r   rK   rL   rM   s   @r   r   r      s     0 r   r   c                   *   a  ] tR t^t o RtR tRtV tR# )CRLFzENTER sends CR+LFc                &    VP                  R R4      # )

rv   r7   s   &&r   r   CRLF.tx   s    ||D&))r   r&   N)rF   rG   rH   rI   rJ   r   rK   rL   rM   s   @r   r   r      s     * *r   r   c                   0   a  ] tR t^t o RtR tR tRtV tR# )CRzENTER sends CRc                &    VP                  R R4      # )r   r   r7   s   &&r   r   CR.rx       ||D$''r   c                &    VP                  R R4      # )r   r   r   r7   s   &&r   r   CR.tx  r   r   r&   N	rF   rG   rH   rI   rJ   r   r   rK   rL   rM   s   @r   r   r      s     (( (r   r   c                       ] tR tRtRtRtR# )LFi  zENTER sends LFr&   N)rF   rG   rH   rI   rJ   rK   r&   r   r   r   r     s    r   r   c                      a  ] tR tRt o Rt]! R ]! ^ 4       4       4      t]P                  ^R^R/4       R t	]	t
RtV tR# )	
NoTerminali  z0remove typical terminal control codes from inputc              #  \   "   T F"  p\        V4      R 9  g   K  VRV,           3x  K$  	  R# 5i)
	 $  N)r   .0xs   & r   	<genexpr>NoTerminal.<genexpr>  s&     ]IqR\A\?Avz?Is   ,,!$  %$  c                8    VP                  V P                  4      # r>   )	translateREPLACEMENT_MAPr7   s   &&r   r   NoTerminal.rx  s    ~~d2233r   r&   N)rF   rG   rH   rI   rJ   dictranger   updater   r   rK   rL   rM   s   @r   r   r     sE     :]E"I]]O&&	
4 Dr   r   c                   r    ] tR tRtRt]! R ]! ^ 4       4       4      t]P                  ^ R^R^R/4       Rt	R# )	
NoControlsi  z%Remove all control codes, incl. CR+LFc              #  6   "   T F  qR V,           3x  K  	  R# 5i)r   Nr&   r   s   & r   r   NoControls.<genexpr>  s     >Iqvz?Is   i#$  r   r   r&   N)
rF   rG   rH   rI   rJ   r  r  r   r  rK   r&   r   r   r  r    s@    />E"I>>O&&&	
 r   r  c                   .   a  ] tR tRt o RtR t]tRtV tR# )	Printablei'  zMShow decimal code for all non-ASCII characters and replace most control codesc           	     x   . pV F  pR Tu;8:  d   R8  g
   M VR9   d   VP                  V4       K.  VR 8  d-   VP                  \        R\        V4      ,           4      4       Ka  VP                  R RP	                  \        V4      4       4       4       VP                  R 4       K  	  RP                  V4      # ) r   r   c              3   f   "   T F'  p\        R \        V4      ,           ^0,
          4      x  K)  	  R# 5i)i   N)r   r   )r   ds   & r   r   Printable.rx.<locals>.<genexpr>2  s'     U?T!Q" 455?Ts   /1z{:d} )appendr   r   extendr   join)r"   r8   rr
   s   &&  r   r   Printable.rx*  s    Aa & AOSQ01Uv}}SQRV?TUU  wwqzr   r&   N)	rF   rG   rH   rI   rJ   r   r   rK   rL   rM   s   @r   r	  r	  '  s     W
 Dr   r	  c                   6   a  ] tR tRt o RtR tR tR tRtV t	R# )Colorizei9  z,Apply different colors for received and echoc                "    R V n         RV n        R# )z[37mz[31mN)input_color
echo_colorr!   s   &r   r#   Colorize.__init__<  s    %$r   c                (    V P                   V,           # r>   )r  r7   s   &&r   r   Colorize.rxA  s    $&&r   c                (    V P                   V,           # r>   )r  r7   s   &&r   r   Colorize.echoD  s    %%r   )r  r  N)
rF   rG   rH   rI   rJ   r#   r   r   rK   rL   rM   s   @r   r  r  9  s     6%
'& &r   r  c                   0   a  ] tR tRt o RtR tR tRtV tR# )DebugIOiH  zPrint what is sent and receivedc                    \         P                  P                  R P                  V4      4       \         P                  P	                  4        V# )z [RX:{!r}] r   r   r1   r   r2   r7   s   &&r   r   
DebugIO.rxK  4    

--d34

r   c                    \         P                  P                  R P                  V4      4       \         P                  P	                  4        V# )z [TX:{!r}] r#  r7   s   &&r   r   
DebugIO.txP  r%  r   r&   Nr   rM   s   @r   r!  r!  H  s     )
 r   r!  crlfcrlfdirectdefault	nocontrol	printablecolorizedebugc                    \         P                  P                  R4       . p \        \	        \        4       4      ^4       FI  w  pw  r#p\         P                  P                  RP                  WV4      4       V P                  V4       KK  	   \        R4      p \        V4      ^,
          p^ Tu;8:  d   \        V 4      8  g$   M \         P                  P                  R4       KZ   W,          pV#   \         d     T# i ; i)zShow a list of ports and ask the user for a choice. To make selection
easier on systems with long device names, also allow the input of an
index.
z
--- Available ports:
z--- {:2}: {:20} {!r}
z#--- Enter port index or full name: z--- Invalid index!
)r   r   r1   	enumeratesortedr   r   r  	raw_inputr   len
ValueError)portsnportdeschwidindexs         r   ask_for_portr=  k  s     JJ/0E!*6(*+=q!AD

188$GHT "B >?	 IME*E
*

  !78 + <D	  	 		s   AC1 1D ?D c                      a  ] tR tRt o RtRR ltR tR tR tR t	RR lt
R	 tR
 tRR ltRR ltR tR tR tR tR tR tR tR tR tR tR tRtV tR# )Minitermi  zTerminal application. Copy data from serial port to console and vice versa.
Handle special keys from the console to show menu etc.
c                $   \        4       V n        Wn        W n        R V n        RV n        RV n        W0n        W@n        V P                  4        \        ^4      V n        \        ^4      V n        RV n        RV n        RV n        RV n        RV n        R# )Fru   N)r]   consoleserialr   rawinput_encodingoutput_encodingeolfiltersupdate_transformationsr   exit_charactermenu_characteralive_reader_alivereceiver_thread
rx_decoder
tx_decoder)r"   serial_instancer   rF  rG  s   &&&&&r   r#   Miniterm.__init__  s    y%	%&##%$Tl$Tl
!#r   c                    RV n         \        P                  ! V P                  RR7      V n        RV P                  n        V P                  P                  4        R# )zStart reader threadTr   targetnameN)rL  	threadingThreadreaderrM  daemonstartr!   s   &r   _start_readerMiniterm._start_reader  sC    !(//t{{N&*#""$r   c                    RV n         \        V P                  R4      '       d   V P                  P                  4        V P                  P                  4        R# )z6Stop reader thread only, wait for clean exit of threadFcancel_readN)rL  r   rB  r^  rM  r  r!   s   &r   _stop_readerMiniterm._stop_reader  s=    "4;;..KK##%!!#r   c                   RV n         V P                  4        \        P                  ! V P                  RR7      V n        RV P
                  n        V P
                  P                  4        V P                  P                  4        R# )zstart worker threadsTr   rS  N)
rK  r[  rV  rW  writertransmitter_threadrY  rZ  rA  r'   r!   s   &r   rZ  Miniterm.start  s^    
"+"2"2$++D"Q)-&%%'r   c                    RV n         R# )zset flag to stop worker threadsFN)rK  r!   s   &r   stopMiniterm.stop  s	    
r   c                    V P                   P                  4        V'       gS   \        V P                  R4      '       d   V P                  P	                  4        V P
                  P                  4        R# R# )z$wait for worker threads to terminater^  N)rc  r  r   rB  r^  rM  )r"   transmit_onlys   &&r   r  Miniterm.join  sO    $$&t{{M22'')  %%' r   c                :    V P                   P                  4        R # r>   )rB  closer!   s   &r   rl  Miniterm.close  s    r   c                   \         V P                  ,          .V P                   Uu. uF  p\        V,          NK  	  up,           pV Uu. uF	  q3! 4       NK  	  upV n        \        \        V P                  4      4      V n        R# u upi u upi )zFtake list of transformation classes and instantiate them for rx and txN)EOL_TRANSFORMATIONSrF  rG  TRANSFORMATIONStx_transformationslistreversedrx_transformations)r"   ftransformationsts   &   r   rH  Miniterm.update_transformations  s}    .txx89FJll=TFR >MQ=O=OFR=T T0?"@113"@"&x0G0G'H"I=T"@s   B	B
c                T    Wn         \        P                  ! V4      ! V4      V n        R# )zset encoding for received dataN)rD  r   getincrementaldecoderrN  r"   r   errorss   &&&r   set_rx_encodingMiniterm.set_rx_encoding  s    & 66x@Hr   c                T    Wn         \        P                  ! V4      ! V4      V n        R# )z!set encoding for transmitted dataN)rE  r   getincrementalencoder
tx_encoderr{  s   &&&r   set_tx_encodingMiniterm.set_tx_encoding  s    ' 66x@Hr   c                B   \         P                  P                  RP                  V P                  R7      4       \         P                  P                  RP                  V P                  P
                  '       d   RMRV P                  P                  '       d   RMRV P                  P                  '       d   RMR4      4        \         P                  P                  RP                  V P                  P                  '       d   RMRV P                  P                  '       d   RMRV P                  P                  '       d   RMRV P                  P                  '       d   RMR4      4       \         P                  P                  RP                  V P                  P                  '       d   RMR4      4       \         P                  P                  RP                  V P                  P                  '       d   RMR4      4       \         P                  P                  R	P                  V P                  4      4       \         P                  P                  R
P                  V P                   4      4       \         P                  P                  RP                  V P"                  P%                  4       4      4       \         P                  P                  RP                  RP'                  V P(                  4      4      4       R#   \        P                   d     ELi ; i)z$Write current settings to sys.stderrzK
--- Settings: {p.name}  {p.baudrate},{p.bytesize},{p.parity},{p.stopbits}
pz&--- RTS: {:8}  DTR: {:8}  BREAK: {:8}
activeinactivez---- CTS: {:8}  DSR: {:8}  RI: {:8}  CD: {:8}
z--- software flow control: {}
z--- hardware flow control: {}
--- serial input encoding: {}
--- serial output encoding: {}
z--- EOL: {}
--- filters: {}
r  N)r   r   r1   r   rB  rtsdtrbreak_conditionctsdsrricdSerialExceptionxonxoffrtsctsrD  rE  rF  upperr  rG  r!   s   &r   dump_port_settingsMiniterm.dump_port_settings  s	   

hookk p  	

BIIXjXj444X*G 	H		JJMTT![[___*![[___*![[^^^![[^^^	> ? 	

:AAdkkNaNaNa(gqrs

:AAdkkN`N`N`(fpqr

:AA$BUBUVW

;BB4CWCWXY

//0@AB

,33CHHT\\4JKL %% 	 	s*   ?L L $L L "L LLc                f    V P                   '       d   V P                  '       d   V P                  P                  V P                  P                  ;'       g    ^4      pV'       g   Kg  V P
                  '       d   V P                  P                  V4       K  V P                  P                  V4      pV P                   F  pVP                  V4      pK  	  V P                  P                  V4       K  R# R#   \        P                   d$    RT n         T P                  P                  4        h i ; i)zloop and copy serial->consoleFN)rK  rL  rB  r   
in_waitingrC  rA  r4   rN  decodert  r   r1   r  r;   )r"   datar8   transformations   &   r   rX  Miniterm.reader  s    	***!3!3!3{{''(>(>(C(C!D4xxx006#55d;.2.E.EN#1#4#4T#:D /F**40 "4* %% 	DJLL!	s(   C8 C8 1C8 C8 )C8 ;A9C8 88D0c                   Rp V P                   '       Ed6    V P                  P                  4       pV P                   '       g   R# V'       d   V P	                  V4       RpK_  W P
                  8X  d   RpKs  W P                  8X  d   V P                  4        R# TpV P                   F  pVP                  V4      pK  	  V P                  P                  V P                  P                  V4      4       V P                  '       g   EK  TpV P                   F  pVP                  V4      pK  	  V P                  P                  V4       EKH  R#   \         d    Rp EL,i ; i   RT n         h ; i)zLoop and copy console->serial until self.exit_character character is
found. When self.menu_character is found, interpret the next key
locally.
FTN)rK  rA  r.   KeyboardInterrupthandle_menu_keyrJ  rI  rf  rq  r   rB  r1   r  encoder   )r"   menu_activer
   r8   r  	echo_texts   &     r   rb  Miniterm.writer  s0    	***++-A zzz((+"'K---"&K---IIK D*.*A*A-006 +BKK%%doo&<&<T&BCyyy$%	.2.E.EN(6(;(;I(FI /F**953  ) A.	DJsH   E" E E" E" A	E" A)E" AE" EE" EE" "
E,c                   WP                   8X  g   WP                  8X  df   V P                  P                  V P                  P                  V4      4       V P                  '       d   V P                  P                  V4       R%# R%# VR8X  d   V P                  4        R%# VR9   d0   \        P                  P                  V P                  4       4       R%# VR8X  dy   V P                  P                  '       * V P                  n        \        P                  P                  RP                  V P                  P                  '       d   RMR4      4       R%# VR8X  dy   V P                  P                  '       * V P                  n        \        P                  P                  RP                  V P                  P                  '       d   RMR4      4       R%# VR	8X  dy   V P                  P                  '       * V P                  n        \        P                  P                  R
P                  V P                  P                  '       d   RMR4      4       R%# VR8X  d[   V P                  '       * V n        \        P                  P                  RP                  V P                  '       d   RMR4      4       R%# VR8X  d   V P!                  4        R%# VR8X  d   \#        \$        4      pVP'                  V P(                  4      ^,           pV\+        V4      8  d   ^ pW#,          V n        \        P                  P                  RP                  V P(                  P-                  4       4      4       V P/                  4        R%# VR8X  d   V P1                  4        R%# VR8X  d   V P3                  4        R%# VR9   d   V P5                  4        R%# VR9   d   V P7                  4        R%# VR9   d   V P9                  4        R%# VR8X  d2   \        P:                  V P                  n        V P3                  4        R%# VR8X  d2   \        P>                  V P                  n        V P3                  4        R%# VR9   d2   \        P@                  V P                  n!        V P3                  4        R%# VR9   d2   \        PD                  V P                  n!        V P3                  4        R%# VR9   d2   \        PF                  V P                  n!        V P3                  4        R%# VR9   d2   \        PH                  V P                  n!        V P3                  4        R%# VR9   d2   \        PJ                  V P                  n!        V P3                  4        R%# VR8X  d2   \        PL                  V P                  n'        V P3                  4        R%# VR8X  d2   \        PP                  V P                  n'        V P3                  4        R%# VR8X  d2   \        PR                  V P                  n'        V P3                  4        R%# VR9   d'   VR 8H  V P                  n*        V P3                  4        R%# VR!9   d'   VR"8H  V P                  n+        V P3                  4        R%# VR#9   d   V PY                  4        R%# \        P                  P                  R$P                  \[        V4      4      4       R%# )&z"Implement a simple menu / settingszhH?z--- RTS {} ---
r  r  z--- DTR {} ---
z--- BREAK {} ---
z--- local echo {} ---
z--- EOL: {} ---
	pPzZbB87eEoOmMsSnN123xXXrRrm   qQz!--- unknown menu character {} --
N).rJ  rI  rB  r1   r  r  r   rA  upload_filer   r   get_help_textr  r   r  r  change_filterrr  ro  r<  rF  r5  r  rH  change_encodingr  change_portsuspend_portchange_baudrate	EIGHTBITSbytesize	SEVENBITSPARITY_EVENparity
PARITY_ODDPARITY_MARKPARITY_SPACEPARITY_NONESTOPBITS_ONEstopbitsSTOPBITS_TWOSTOPBITS_ONE_POINT_FIVEr  r  rf  r   )r"   r
   modesrF  s   &&  r   r  Miniterm.handle_menu_key'  s   ###q,?,?'?KKdoo44Q78yyy""1% &[)^JJT//12&["&++//1DKKOJJ/664;;???xXbcd&["&++//1DKKOJJ/664;;???xXbcd&[.2kk.I.I*IDKK'JJ188T[[E`E`E`fpqr&[ IIDIJJ6==$)))hYcde&[ &[,-E++dhh'!+Cc%j zDHJJ0778HIJ'')&[  "&[##% $Y$Y$Y  "#X#)#3#3DKK ##%#X#)#3#3DKK ##%$Y!'!3!3DKK##%$Y!'!2!2DKK##%$Y!'!3!3DKK##%$Y!'!4!4DKK##%$Y!'!3!3DKK##%#X#)#6#6DKK ##%#X#)#6#6DKK ##%#X#)#A#ADKK ##%$Y#$8DKK##%$Y"#s(DKK##%$YIIKJJAHHYZI[\]r   c           	        \         P                  P                  R4       \         P                  P                  4        V P                  ;_uu_ 4        \         P
                  P                  4       P                  R4      pV'       d    \        VR4      ;_uu_ 4       p\         P                  P                  RP                  V4      4        VP                  R4      pV'       g   MVV P                  P                  V4       V P                  P                  4        \         P                  P                  R4       Kq  RRR4       \         P                  P                  RP                  V4      4       RRR4       R#   + '       g   i     LH; i  \         d9   p\         P                  P                  R	P                  Y4      4        Rp?L[Rp?ii ; i  + '       g   i     R# ; i)
z,Ask user for filenname and send its contentsz
--- File to upload: r   rbz--- Sending file {} ---
i   rs   Nz
--- File {} sent ---
z"--- ERROR opening file {}: {} ---
)r   r   r1   r2   rA  r   readlinerstripopenr   r   rB  IOError)r"   filenameru  blockes   &    r   r  Miniterm.upload_file}  s?   

12

\\\yy))+226:H`h--

(()D)K)KH)UV"$%FF4LE#( % KK--e4 KK--/JJ,,S1 . JJ$$%?%F%Fx%PQ \ .-  `JJ$$%J%Q%QRZ%^__` \\sP   6G	FAE=	&AE=	=6F=FFG.G	GGGG'	c           	        \         P                  P                  R4       \         P                  P                  RP                  R \	        \
        P                  4       4       4       4      4       \         P                  P                  RP                  RP                  V P                  4      4      4       V P                  ;_uu_ 4        \         P                  P                  4       P                  4       P                  4       pRRR4       X'       d[   V F>  pV\
        9  g   K  \         P                  P                  RP                  V4      4        M	  Wn        V P                  4        \         P                  P                  RP                  RP                  V P                  4      4      4       R#   + '       g   i     L; i)	zchange the i/o transformationsz
--- Available Filters:
r   c              3   H   "   T F  w  rR P                  W4      x  K  	  R# 5i)z---   {:<10} = {.__doc__}Nr   r   kvs   &  r   r   )Miniterm.change_filter.<locals>.<genexpr>  s'      #97 (..q447    "z$
--- Enter new filter name(s) [{}]: r  Nz--- unknown filter: {!r}
r  )r   r   r1   r  r3  rp  itemsr   rG  rA  r   r  lowerr   rH  )r"   new_filtersru  s   &  r   r  Miniterm.change_filter  s+   

56

 #94467#9 9 	: 	

@GGQUQ]Q]H^_`\\\)),,.446<<>K  O+JJ$$%A%H%H%KL !
  +++-

,33CHHT\\4JKL \s   ;F99G		c                   \         P                  P                  RP                  V P                  4      4       V P
                  ;_uu_ 4        \         P                  P                  4       P                  4       pRRR4       X'       d:    \        P                  ! V4       V P                  V4       V P                  V4       \         P                  P                  RP                  V P                  4      4       \         P                  P                  RP                  V P                  4      4       R#   + '       g   i     L; i  \         d2    \         P                  P                  RP                  T4      4        Li ; i)z"change encoding on the serial portz#
--- Enter new encoding name [{}]: Nz--- invalid encoding name: {}
r  r  )r   r   r1   r   rD  rA  r   r  stripr   lookupr}  r  LookupErrorrE  )r"   new_encodings   & r   r  Miniterm.change_encoding  s   

?FFtGZGZ[\\\\99--/557L 3l+ $$\2$$\2

:AA$BUBUVW

;BB4CWCWXY \
  Y

  !B!I!I,!WXYs   -D5E 5E	9FFc                d   \         P                  P                  R4       \         P                  P                  4        V P                  ;_uu_ 4        V P
                  P                  p \        \         P                  P                  4       P                  4       4      V P
                  n        V P                  4        RRR4       R#   \         dI   p\         P                  P                  RP                  T4      4       YP
                  n         Rp?LXRp?ii ; i  + '       g   i     R# ; i)zchange the baudratez
--- Baudrate: z#--- ERROR setting baudrate: {} ---
N)r   r   r1   r2   rA  rB  baudrater   r   r  r  r  r6  r   )r"   backupr  s   &  r   r  Miniterm.change_baudrate  s    

+,

\\\[[))F*'*399+=+=+?+E+E+G'H$
 '') \  .

  !G!N!Nq!QR'-$$.	 \\s7   D*AC.DD>DDDDD/	c                   V P                   ;_uu_ 4         \        4       pRRR4       X'       EdG   WP                  P                  8w  Ed*   V P                  4        V P                  P                  4       p \        P                  ! VRR7      pVP                  V4       V P                  P                  Vn	        V P                  P                  Vn
        VP                  4        V P                  P                  Vn        V P                  P                  4        W0n        \        P                  P!                  RP#                  V P                  P                  4      4       V P'                  4        R# R# R#   \         d    Rp ELii ; i  + '       g   i     ELv; i  \$         dI   p\        P                  P!                  RP#                  T4      4       XP                  4         Rp?LRp?ii ; i)z;Have a conversation with the user to change the serial portNT)do_not_openz--- Port changed to: {} ---
z#--- ERROR opening new port: {} ---
)rA  r=  r  rB  r9  r_  getSettingsDictserial_for_urlapplySettingsDictr  r  r  r  rl  r   r   r1   r   	Exceptionr[  )r"   r9  settings
new_serialr  s   &    r   r  Miniterm.change_port  s`   \\\#~ 
 4DKK,,,{{224H[#224TJ
,,X6!%
!%
!-1[[-H-H
*
 !!#(

  !@!G!GHXHX!YZ + -4 %  \\$  #

  !G!N!Nq!QR  ""#sA   F
E:8B
F" :FF
FFF	"G5->G00G5c                   V P                  4        V P                  P                  4        \        P                  P                  RP                  V P                  P                  4      4       RpV P                  P                  '       g   \        P                  P                  RP                  \        V P                  4      R7      4       V P                  P                  4       pW P                  8X  d   V P                  4        M'VR9   d   RpM V P                  P                  4        K  V'       d   V P!                  4        R# V P#                  4        \        P                  P                  R	P                  V P                  P                  4      4       R#   \         d;   p\        P                  P                  RP                  T4      4        Rp?EKn  Rp?ii ; i)
zTopen port temporarily, allow reconnect, exit and port change to get
out of the loop
z
--- Port closed: {} ---
FzC--- Quit: {exit} | p: port change | any other key to reconnect ---
)exitr  Tz--- ERROR opening port: {} ---
Nz--- Port opened: {} ---
)r_  rB  rl  r   r   r1   r   r9  is_openr   rI  rA  r.   rf  r  r  r  r[  )r"   do_change_portr  r  s   &   r   r  Miniterm.suspend_port  s\    	

6==dkk>N>NOP++%%%JJcjj$T%8%89 k ; <##%A'''		d!%O  "   JJ8??@P@PQR  O

  !C!J!J1!MNNOs   F G"(.GG"c                H   RP                  \        \        RR4      \        V P                  4      \        V P
                  4      \        R4      \        R4      \        R4      \        R4      \        R4      \        R	4      \        R
4      \        R4      \        R4      R7      # )zreturn the help textab  
--- pySerial ({version}) - miniterm - help
---
--- {exit:8} Exit program (alias {menu} Q)
--- {menu:8} Menu escape key, followed by:
--- Menu keys:
---    {menu:7} Send the menu character itself to remote
---    {exit:7} Send the exit character itself to remote
---    {info:7} Show info
---    {upload:7} Upload file (prompt will be shown)
---    {repr:7} encoding
---    {filter:7} edit filters
--- Toggles:
---    {rts:7} RTS   {dtr:7} DTR   {brk:7} BREAK
---    {echo:7} echo  {eol:7} EOL
---
--- Port settings ({menu} followed by the following):
---    p          change port
---    7 8        set data bits
---    N E O S M  change parity (None, Even, Odd, Space, Mark)
---    1 2 3      set stop bits (1, 2, 1.5)
---    b          change baud rate
---    x X        disable/enable software flow control
---    r R        disable/enable hardware flow control
VERSIONzunknown versionr  r  r  r  r  r  r  r  r  )r   r  menur  r  brkr   infouploadr   filterrF  )r   getattrrB  r   rI  rJ  r!   s   &r   r  Miniterm.get_help_text  s    0 F769.?@ 3 34 3 34v&v&v&''!&)'!&)v&  (1#	(r   )rL  rK  rA  r   rF  rI  rG  rD  rJ  rE  rC  rM  rN  rt  rB  rc  rO  r  rq  N)Fr(  r&   )Fr   )rF   rG   rH   rI   rJ   r#   r[  r_  rZ  rf  r  rl  rH  r}  r  r  rX  rb  r  r  r  r  r  r  r  r  rK   rL   rM   s   @r   r?  r?    s     
$%$(JI
I
M2&$LT^l`,M&Z *!<S>&( &(r   r?  c           
        ^ RI pVP                  RR7      pVP                  RRRV R7       VP                  RR\        R	VR
7       VP	                  R4      pVP                  R. R^OR RRR7       VP                  RRRRR7       VP                  RRRRR7       VP                  R\        RVR7       VP                  R\        RVR7       VP                  RRRR R!R"7       VP                  R#RR$RR7       VP	                  R%4      pVP                  R&R'RR(RR7       VP                  R)R*R+R,R-R.7       VP                  R/R0R1R2R3. R47       VP                  R5. R_OR7 R8R6R7       VP                  R9RR:RR7       VP	                  R;4      pVP                  R<\        R=R>^R?7       VP                  R@\        R=RA^R?7       VP	                  RB4      pVP                  RCRDRRERR7       VP                  RFRRGRR7       VP                  4       pVP                  VP                  8X  d   VP                  RH4       VP                  '       d   RIVP                  9   d   \        P                  P                  RJ4       \        P                  P                  RKP                  RL \        \        P!                  4       4       4       4      4       \        P                  P                  RK4       \        P"                  ! ^4       VP                  pMRM.p VP$                  e   VP$                  RN8X  d4    \'        4       Vn        VP$                  '       g   VP                  RO4        \*        P,                  ! VP$                  VP.                  VP0                  VP2                  VP4                  R!RQ7      p	\7        V	RR4      '       g   ^V	n        VP:                  ef   VP<                  '       gC   \        P                  P                  RSP?                  VP:                  '       d   RTMRU4      4       VP:                  V	n        VP@                  ef   VP<                  '       gC   \        P                  P                  RVP?                  VP@                  '       d   RTMRU4      4       VP@                  V	n         \C        V	\*        PD                  4      '       d   VPF                  V	n#        V	PI                  4         \Q        T	TPR                  TPT                  PW                  4       TRX7      p\Y        TP                  4      Tn-        \Y        TP                  4      Tn.        TP^                  Tn/        TPa                  TPb                  4       TPe                  TPb                  4       TP<                  '       g   \        P                  P                  RYP?                  TP*                  RZ7      4       \        P                  P                  R[P?                  \g        TPZ                  4      \g        TP\                  4      \g        TP\                  4      \g        R\4      4      4       TPi                  4         TP                  R!4       TP<                  '       g    \        P                  P                  R]4       TP                  4        TPk                  4        R#   \(         d5    \        P                  P                  RK4       TP                  RP4        ELi ; i  \*        PJ                   d   p
\        P                  P                  RWP?                  TP$                  T
4      4       TPL                  '       d   h TPN                  '       g   \        P"                  ! ^4        Rp
?
EK  RNTn         Rp
?
EK  Rp
?
ii ; i  \(         d     ELIi ; i)`zCommand line tool, entry pointNz9Miniterm - A simple terminal program for the serial port.)descriptionr9  rb   z(serial port name ("-" to show port list))nargshelpr,  r  z#set baud rate, default: %(default)s)r  typer  r,  zport settingsz--parityNc                 "    V P                  4       # r>   r  r	   s   &r   r   main.<locals>.<lambda>G  
    qwwyr   z*set parity, one of {N E O S M}, default: N)choicesr  r  r,  z--rtscts
store_truez)enable RTS/CTS flow control (default off)F)actionr  r,  z	--xonxoffz*enable software flow control (default off)z--rtsz2set initial RTS line state (possible values: 0, 1))r  r  r,  z--dtrz2set initial DTR line state (possible values: 0, 1)z--non-exclusive	exclusivestore_falsez disable locking for native portsT)destr  r  r,  z--askz"ask again for port when open failszdata handlingz-ez--echozenable local echo (default off)z
--encodingserial_port_encodingCODECzXset the encoding for the serial port (e.g. hexlify, Latin1, UTF-8), default: %(default)sru   )r  metavarr  r,  z-fz--filterr  NAMEzadd text transformation)r  r!  r  r,  z--eolr   c                 "    V P                  4       # r>   r  r	   s   &r   r   r    r  r   zend of line modez--rawz)Do no apply any encodings/transformationshotkeysz--exit-charNUMzWUnicode of special character that is used to exit the application, default: %(default)s)r  r!  r  r,  z--menu-charz_Unicode code of special character that is used to control miniterm (menu), default: %(default)sdiagnosticsz-qz--quietzsuppress non-error messagesz	--developzshow Python traceback on errorz.--exit-char can not be the same as --menu-charr  zAvailable filters:
r   c              3   H   "   T F  w  rR P                  W4      x  K  	  R# 5i)z{:<10} = {.__doc__}Nr  r  s   &  r   r   main.<locals>.<genexpr>  s'      '=;DA &,,Q22;r  r,  -zport is not givenz"user aborted and port is not given)r  r  r  r  r^  z--- forcing DTR {}
r  r  z--- forcing RTS {}
zcould not open port {!r}: {}
)r   rF  rG  zP--- Miniterm on {p.name}  {p.baudrate},{p.bytesize},{p.parity},{p.stopbits} ---
r  z6--- Quit: {} | Menu: {} | Help: {} followed by {} ---
z
--- exit ---
)r  Erl   rn   rj   )r   r   r   )6argparseArgumentParseradd_argumentr   add_argument_group
parse_args	menu_char	exit_charerrorr  r   r   r1   r  r3  rp  r  r  r9  r=  r  rB  r  r  r  r  r  r   timeoutr  quietr   r  
isinstanceSerialr  r  r  developaskr?  r   rF  r  r   rI  rJ  rC  r}  r  r  r   rZ  rl  )default_portdefault_baudratedefault_rtsdefault_dtrr,  parsergrouprB   rG  rP  r  miniterms   &&&&        r   mainrA  -  s    $$O % QF 7	   2   " %%o6E	) 9   
8	   
9	   
A	   
A	   
/   
1	   %%o6E	h.	   
#g   
j&   
$    
8	   %%i0E	f   
n   %%m4E	i*	   
-	   D~~'EF{{{T[[ JJ34JJTYY '="?#8#8#:;'= = > JJT"HHQK+++
99		S 06(N	
 yyyLL!45#	$33		{{{{ "O ?M::*+'xx#zzzJJ$$%;%B%Btxxx8]g%hi&*hh#xx#zzzJJ$$%;%B%Btxxx8]g%hi&*hh#/6==99,0NN)  " YYHHNN	H
 %T^^4H$T^^4H88HLT667T667:::

lssoo t  	 

RYYH334H334H334F#	% 	& NNd :::

+,MMONNO % C

  &ABC@ %% 	 JJ=DDTYYPQRS|||888			 D  sc   .[ !B\ (5\ <\ 5\ A\ +^7 ;\\^4&A^/^/!^//^47____main__)Ni%  NN).
__future__r   r   rY   r   rV  rB  serial.tools.list_portsr   serial.toolsr   r   r4  	NameErrorinputchrr   r   objectr   rU  r   ry   r   rQ   r]   r   r   r   NotImplementedErrorr   r   r   r   r   r   r  r	  r  r!  ro  rp  r=  r?  rA  rF   r&   r   r   <module>rK     s   '  	 
   , & Q R*& *Z 77d?
!f 
!RD+ RDh WWD+ D> CJJ3<<XZ Z *9 *( (   	 		 $&y &i & D""  izW2c(v c(RaH zF m  IFs   E' 'E65E6