Ë
    Ž,»_Ð“  ã                   óÎ  — 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mZ d dl	m
Z
  ej                  d„ «       	 e d„ Z G d„ de«      Zej(                  d	k(  r#d dlZd dlZd dlZ G d
„ de«      Z G d„ de«      ZnHej(                  dk(  rd dlZd dlZd dlZ G d„ de«      Zn! edj=                  ej.                  «      «      ‚ G d„ de«      Z G d„ de«      Z  G d„ de«      Z! G d„ de«      Z" G d„ de«      Z# G d„ de#«      Z$ G d„ de«      Z% G d„ d e«      Z& G d!„ d"e«      Z'e e!e"d#œZ(ee#e$e%e&e'd$œZ)d%„ Z* G d&„ d'e«      Z+d*d(„Z,e-d)k(  r e,«        yy# e$ r eZeZY �Œ&w xY w)+é    )Úabsolute_importN)Úcomports)Úhexlify_codecc                 ó8   — | dk(  rt        j                  «       S d S )NÚhexlify)r   Úgetregentry©Úcs    ú7/usr/lib/python3/dist-packages/serial/tools/miniterm.pyú<lambda>r      s   € ¸¸iºœ-×3Ñ3Ó5€ ÈT€ ó    c                 ór   — t        | «      }|dk  rdj                  t        d«      |z   «      S t        | «      S )z)generate a readable description for a keyé    z	Ctrl+{:c}ú@)ÚordÚformatÚrepr)Ú	characterÚ
ascii_codes     r   Úkey_descriptionr   !   s6   € ä�Y“€JØ�B‚Ø×!Ñ!¤# c£(¨ZÑ"7Ó8Ð8ä�I‹Ðr   c                   óF   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zy)ÚConsoleBasez8OS abstraction for console (input/output codec, no echo)c                 ó¾   — t         j                  dk\  r t         j                  j                  | _        nt         j                  | _        t         j                  | _        y ©N)é   r   )ÚsysÚversion_infoÚstdoutÚbufferÚbyte_outputÚoutput©Úselfs    r   Ú__init__zConsoleBase.__init__.   s9   € Ü×Ñ˜vÒ%Ü"Ÿz™z×0Ñ0ˆDÕä"Ÿz™zˆDÔÜ—j‘jˆ�r   c                  ó   — y)z.Set console to read single characters, no echoN© r"   s    r   ÚsetupzConsoleBase.setup5   ó   � r   c                  ó   — y)z Restore default console settingsNr&   r"   s    r   ÚcleanupzConsoleBase.cleanup8   r(   r   c                  ó   — y)z"Read a single key from the consoleNr&   r"   s    r   ÚgetkeyzConsoleBase.getkey;   s   € àr   c                 ón   — | j                   j                  |«       | j                   j                  «        y)zWrite bytes (already encoded)N)r    ÚwriteÚflush)r#   Úbyte_strings     r   Úwrite_byteszConsoleBase.write_bytes?   s(   € à×Ñ×Ñ˜{Ô+Ø×Ñ×ÑÕ r   c                 ón   — | j                   j                  |«       | j                   j                  «        y)zWrite stringN)r!   r.   r/   ©r#   Útexts     r   r.   zConsoleBase.writeD   s$   € à�‰×Ñ˜$ÔØ�‰×ÑÕr   c                  ó   — y)zCancel getkey operationNr&   r"   s    r   ÚcancelzConsoleBase.cancelI   r(   r   c                 ó&   — | j                  «        | S ©N)r*   r"   s    r   Ú	__enter__zConsoleBase.__enter__P   s   € Ø�‰ŒØˆr   c                 ó$   — | j                  «        y r8   )r'   )r#   ÚargsÚkwargss      r   Ú__exit__zConsoleBase.__exit__T   s   € Ø�
‰
�r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r$   r'   r*   r,   r1   r.   r6   r9   r=   r&   r   r   r   r   +   s2   „ ÙBò!ò=ò/òò!ò
ò
&òór   r   Úntc                   ó"   — e Zd ZdZd„ Zd„ Zd„ Zy)ÚOutz$file-like wrapper that uses os.writec                 ó   — || _         y r8   )Úfd)r#   rF   s     r   r$   zOut.__init__`   s	   € ØˆD�Gr   c                  ó   — y r8   r&   r"   s    r   r/   z	Out.flushc   s   € Ør   c                 óD   — t        j                  | j                  |«       y r8   )Úosr.   rF   )r#   Úss     r   r.   z	Out.writef   s   € Ü�H‰H�T—W‘W˜aÕ r   N)r>   r?   r@   rA   r$   r/   r.   r&   r   r   rD   rD   ]   s   „ Ù2ò	ò	ó	!r   rD   c                   ód   ‡ — e Zd Zddddddddd	d
dœ
Zdddddddddddœ
Zˆ fd„Zd„ Zd„ Zd„ Zˆ xZ	S )ÚConsolezbOPzbOQzbORzbOSzb[15~zb[17~zb[18~zb[19~zb[20~zb[21~)
ú;ú<ú=ú>ú?r   ÚAÚBÚCÚDz[Az[Bz[Dz[Cz[Hz[Fz[2~z[3~z[5~z[6~)
ÚHÚPÚKÚMÚGÚOÚRÚSÚIÚQc                 óš  •— t         t        | �  «        t        j                  j
                  j                  «       | _        t        j                  j
                  j                  «       | _	        t        j                  j
                  j                  d«       t        j                  j
                  j                  d«       t        j                  «       dk(  �r>t        t        j                  «       j!                  d«      d   «      dkD  �rd}dd lm} t'        |d«      s$t        j(                  |j*                  «      |_        t        j                  j
                  j.                  }t        j                  j
                  j0                  }t        j                  j
                  j2                  }|j+                  «       } | |d	«      t        j4                  |«      «       |j6                  |z  dk(  r# | |d	«      |j6                  |z  «       || _         t;        j<                  d
«      t?        t@        jB                  jE                  «       «      d«      | _#         t;        j<                  d
«      t?        t@        jH                  jE                  «       «      d«      t@        _$        | jF                  t@        _!        d
| jF                  _%        y )Niéý  Ú10ú.é   iZ)  é   r   ÚLPDWORDéõÿÿÿúUTF-8Úreplace)&ÚsuperrL   r$   ÚctypesÚwindllÚkernel32ÚGetConsoleOutputCPÚ
_saved_ocpÚGetConsoleCPÚ
_saved_icpÚSetConsoleOutputCPÚSetConsoleCPÚplatformÚreleaseÚintÚversionÚsplitÚctypes.wintypesÚwintypesÚhasattrÚPOINTERÚDWORDre   ÚSetConsoleModeÚGetConsoleModeÚGetStdHandleÚbyrefÚvalueÚ	_saved_cmÚcodecsÚ	getwriterrD   r   r   Úfilenor!   ÚstderrÚencoding)r#   Ú"ENABLE_VIRTUAL_TERMINAL_PROCESSINGry   r}   r~   r   ÚmodeÚ	__class__s          €r   r$   zConsole.__init__ƒ   sÜ  ø€ Ü”'˜4Ñ)Ô+Ü$Ÿm™m×4Ñ4×GÑGÓIˆDŒOÜ$Ÿm™m×4Ñ4×AÑAÓCˆDŒOÜ�M‰M×"Ñ"×5Ñ5°eÔ<Ü�M‰M×"Ñ"×/Ñ/°Ô6ô ×ÑÓ! TÓ)¬c´(×2BÑ2BÓ2D×2JÑ2JÈ3Ó2OÐPQÑ2RÓ.SÐV[Ó.[Ø5;Ð2Ý2Ü˜x¨Ô3Ü'-§~¡~°h·n±nÓ'E�HÔ$Ü!'§¡×!7Ñ!7×!FÑ!F�Ü!'§¡×!7Ñ!7×!FÑ!F�Ü%Ÿ}™}×5Ñ5×BÑB�Ø—~‘~Ó'�Ù™|¨CÓ0´&·,±,¸tÓ2DÔEØ—J‘JÐ!CÑCÈÒIÙ"¡<°Ó#4°d·j±jÐCeÑ6eÔfØ%)�D”NØ3œ&×*Ñ*¨7Ó3´C¼¿
¹
×8IÑ8IÓ8KÓ4LÈiÓXˆDŒKà2œ×)Ñ)¨'Ó2´3´s·z±z×7HÑ7HÓ7JÓ3KÈYÓWŒCŒJØŸ™ŒCŒJØ#*ˆD�K‰KÕ r   c                 ó¦  — t         j                  j                  j                  | j                  «       t         j                  j                  j                  | j                  «       	 t         j                  j                  j                  t         j                  j                  j                  d«      | j                  «       y # t        $ r Y y w xY w)Nrf   )rj   rk   rl   rq   rn   rr   rp   r}   r   r‚   ÚAttributeErrorr"   s    r   Ú__del__zConsole.__del__ž   sˆ   € Ü�M‰M×"Ñ"×5Ñ5°d·o±oÔFÜ�M‰M×"Ñ"×/Ñ/°·±Ô@ðÜ—‘×&Ñ&×5Ñ5´f·m±m×6LÑ6L×6YÑ6YÐZ]Ó6^Ð`d×`nÑ`nÕoøÜ!ò Ùðús   Á(AC Ã	CÃCc                 ó6  — 	 t        j                  «       }|t        d«      k(  rt        d«      S |t        d«      u s|t        d«      u r@	 t        j                  «       }|t        d«      u r| j                  |   S | j                  |   S |S # t
        $ r Y nw xY wŒ™)Né   é
   r   éà   )ÚmsvcrtÚgetwchÚunichrÚfncodesÚnavcodesÚKeyError)r#   ÚzÚcodes      r   r,   zConsole.getkey¦   s”   € ØÜ—M‘M“O�Øœ˜r›
’?Ü! "›:Ð%Øœ& ›)‘^ q¬F°4«LÑ'8ðÜ%Ÿ}™}›˜Ø¤ q£	™>Ø#'§<¡<°Ñ#5Ð5à#'§=¡=°Ñ#6Ð6ð �Høô $ò Ùðúð s   Á
/B Á:B Â	BÂBc                 ó¬   — t         j                  j                  j                  «       }t         j                  j                  j                  |ddd«       y )Né   r�   r   )rj   rk   rl   ÚGetConsoleWindowÚuser32ÚPostMessageA)r#   Úhwnds     r   r6   zConsole.cancel·   s:   € ô —=‘=×)Ñ)×:Ñ:Ó<ˆDÜ�M‰M× Ñ ×-Ñ-¨d°E¸4ÀÕCr   )
r>   r?   r@   r•   r–   r$   r�   r,   r6   Ú__classcell__©rŠ   s   @r   rL   rL   i   sd   ø„ àØØØØØØØØØñ
ˆð ØØØØØØØØØñ
ˆô	+ò6	ò	ö"	Dr   rL   Úposixc                   ó6   ‡ — e Zd Zˆ fd„Zd„ Zd„ Zd„ Zd„ Zˆ xZS )rL   c                 óÔ  •— t         t        | �  «        t        j                  j                  «       | _        t        j                  | j                  «      | _	        t        j                  | j                  «       t        j                  dk  rG t        j                  t        j                  j                   «      t        j                  «      | _        y t        j                  | _        y r   )ri   rL   r$   r   Ústdinr…   rF   ÚtermiosÚ	tcgetattrÚoldÚatexitÚregisterr*   r   rƒ   Ú	getreaderr‡   Ú	enc_stdin)r#   rŠ   s    €r   r$   zConsole.__init__Ã   sŠ   ø€ Ü”'˜4Ñ)Ô+Ü—i‘i×&Ñ&Ó(ˆDŒGÜ×(Ñ(¨¯©Ó1ˆDŒHÜ�O‰O˜DŸL™LÔ)Ü×Ñ &Ò(Ø!E¤×!1Ñ!1´#·)±)×2DÑ2DÓ!EÄcÇiÁiÓ!P�•ä!$§¡�•r   c                 ót  — t        j                  | j                  «      }|d   t         j                   z  t         j                   z  t         j
                   z  |d<   d|d   t         j                  <   d|d   t         j                  <   t        j                  | j                  t         j                  |«       y )Nr   é   é   r   )
r¦   r§   rF   ÚICANONÚECHOÚISIGÚVMINÚVTIMEÚ	tcsetattrÚTCSANOW)r#   Únews     r   r'   zConsole.setupÍ   s‚   € Ü×#Ñ# D§G¡GÓ,ˆCØ˜‘VœwŸ~™~˜oÑ-´·±°Ñ=ÄÇÁÀÑMˆC�‰FØ#$ˆC�‰F”7—<‘<Ñ Ø$%ˆC�‰F”7—=‘=Ñ!Ü×Ñ˜dŸg™g¤w§¡¸Õ<r   c                 ón   — | j                   j                  d«      }|t        d«      k(  rt        d«      }|S )Nr®   é   é   )r¬   Úreadr”   )r#   r
   s     r   r,   zConsole.getkeyÔ   s0   € Ø—‘×#Ñ# AÓ&ˆAØ”F˜4“LÒ Ü˜1“I�ØˆHr   c                 ób   — t        j                  | j                  t        j                  d«       y )Nó    )ÚfcntlÚioctlrF   r¦   ÚTIOCSTIr"   s    r   r6   zConsole.cancelÚ   s   € Ü�K‰K˜Ÿ™¤§¡°%Õ8r   c                 óv   — t        j                  | j                  t         j                  | j                  «       y r8   )r¦   rµ   rF   Ú	TCSAFLUSHr¨   r"   s    r   r*   zConsole.cleanupÝ   s"   € Ü×Ñ˜dŸg™g¤w×'8Ñ'8¸$¿(¹(ÕCr   )	r>   r?   r@   r$   r'   r,   r6   r*   r    r¡   s   @r   rL   rL   Â   s   ø„ ô	+ò	=ò	ò	9ö	Dr   z9Sorry no implementation for your platform ({}) available.c                   ó"   — e Zd ZdZd„ Zd„ Zd„ Zy)Ú	Transformz&do-nothing: forward all data unchangedc                 ó   — |S )ztext received from serial portr&   r3   s     r   ÚrxzTransform.rxé   ó   € àˆr   c                 ó   — |S )ztext to be sent to serial portr&   r3   s     r   ÚtxzTransform.txí   rÇ   r   c                 ó   — |S )z(text to be sent but displayed on consoler&   r3   s     r   ÚechozTransform.echoñ   rÇ   r   N)r>   r?   r@   rA   rÆ   rÉ   rË   r&   r   r   rÄ   rÄ   ç   s   „ Ù0òòór   rÄ   c                   ó   — e Zd ZdZd„ Zy)ÚCRLFzENTER sends CR+LFc                 ó&   — |j                  dd«      S )Nú
ú
©rh   r3   s     r   rÉ   zCRLF.txù   s   € Ø�|‰|˜D &Ó)Ð)r   N)r>   r?   r@   rA   rÉ   r&   r   r   rÍ   rÍ   ö   s
   „ Ùó*r   rÍ   c                   ó   — e Zd ZdZd„ Zd„ Zy)ÚCRzENTER sends CRc                 ó&   — |j                  dd«      S )NúrÏ   rÑ   r3   s     r   rÆ   zCR.rx   ó   € Ø�|‰|˜D $Ó'Ð'r   c                 ó&   — |j                  dd«      S )NrÏ   rÕ   rÑ   r3   s     r   rÉ   zCR.tx  rÖ   r   N©r>   r?   r@   rA   rÆ   rÉ   r&   r   r   rÓ   rÓ   ý   s   „ Ùò(ó(r   rÓ   c                   ó   — e Zd ZdZy)ÚLFzENTER sends LFN)r>   r?   r@   rA   r&   r   r   rÚ   rÚ     s   „ Úr   rÚ   c                   ól   — e Zd ZdZ ed„  ed«      D «       «      Zej                  dddœ«       d„ ZeZ	y)	Ú
NoTerminalz0remove typical terminal control codes from inputc              #   óF   K  — | ]  }t        |«      d vsŒ|d|z   f–— Œ y­w)ú
	é $  N)r”   ©Ú.0Úxs     r   ú	<genexpr>zNoTerminal.<genexpr>  s$   è ø€ Ò]¨qÄÈÃÐR\ÒA\˜A˜v¨™zœ?Ñ]ùs   ‚!•!r   é!$  é%$  )r¹   é›   c                 ó8   — |j                  | j                  «      S r8   )Ú	translateÚREPLACEMENT_MAPr3   s     r   rÆ   zNoTerminal.rx  s   € Ø�~‰~˜d×2Ñ2Ó3Ð3r   N)
r>   r?   r@   rA   ÚdictÚrangeré   ÚupdaterÆ   rË   r&   r   r   rÜ   rÜ     s>   „ Ù:áÑ]±E¸"³IÔ]Ó]€OØ×ÑàØñ	
ôò4ð �Dr   rÜ   c                   ód   — e Zd ZdZ ed„  ed«      D «       «      Zej                  ddddœ«       y)	Ú
NoControlsz%Remove all control codes, incl. CR+LFc              #   ó*   K  — | ]  }|d |z   f–— Œ y­w)rß   Nr&   rà   s     r   rã   zNoControls.<genexpr>  s   è ø€ Ò>¨q˜A˜v¨™zœ?Ñ>ùs   ‚r   i#$  rä   rå   )r   r¹   ræ   N)r>   r?   r@   rA   rê   rë   ré   rì   r&   r   r   rî   rî     s5   „ Ù/áÑ>±E¸"³IÔ>Ó>€OØ×ÑàØØñ	
õr   rî   c                   ó   — e Zd ZdZd„ ZeZy)Ú	PrintablezMShow decimal code for all non-ASCII characters and replace most control codesc           	      óV  — g }|D ]’  }d|cxk  rdk  sn |dv r|j                  |«       Œ&|dk  r'|j                  t        dt        |«      z   «      «       ŒR|j                  d„ dj	                  t        |«      «      D «       «       |j                  d«       Œ” dj                  |«      S )Nú úrÞ   rß   c              3   óP   K  — | ]  }t        d t        |«      z   dz
  «      –— Œ  y­w)i€   é0   N)r”   r   )rá   Úds     r   rã   zPrintable.rx.<locals>.<genexpr>2  s"   è ø€ ÒU¸!œ ¬¨Q«¡°"Ñ 4×5ÑUùs   ‚$&z{:d}Ú )Úappendr”   r   Úextendr   Újoin)r#   r4   Úrr
   s       r   rÆ   zPrintable.rx*  s�   € ØˆØò 	ˆAØ�aÔ ˜&Ô  A¨¡OØ—‘˜•Ø�S’Ø—‘œ ¬¨Q«¡Ó0Õ1à—‘ÑU¸v¿}¹}ÌSÐQRËVÓ?TÔUÔUØ—‘˜•ð	ð �w‰w�q‹zÐr   N)r>   r?   r@   rA   rÆ   rË   r&   r   r   rñ   rñ   '  s   „ ÙWò
ð �Dr   rñ   c                   ó"   — e Zd ZdZd„ Zd„ Zd„ Zy)ÚColorizez,Apply different colors for received and echoc                 ó    — d| _         d| _        y )Nz[37mz[31m)Úinput_colorÚ
echo_colorr"   s    r   r$   zColorize.__init__<  s   € à%ˆÔØ$ˆ�r   c                 ó    — | j                   |z   S r8   )r   r3   s     r   rÆ   zColorize.rxA  s   € Ø×Ñ $Ñ&Ð&r   c                 ó    — | j                   |z   S r8   )r  r3   s     r   rË   zColorize.echoD  s   € Ø�‰ Ñ%Ð%r   N)r>   r?   r@   rA   r$   rÆ   rË   r&   r   r   rþ   rþ   9  s   „ Ù6ò%ò
'ó&r   rþ   c                   ó   — e Zd ZdZd„ Zd„ Zy)ÚDebugIOzPrint what is sent and receivedc                 óž   — t         j                  j                  dj                  |«      «       t         j                  j	                  «        |S )Nz [RX:{!r}] ©r   r†   r.   r   r/   r3   s     r   rÆ   z
DebugIO.rxK  ó4   € Ü�
‰
×Ñ˜×-Ñ-¨dÓ3Ô4Ü�
‰
×ÑÔØˆr   c                 óž   — t         j                  j                  dj                  |«      «       t         j                  j	                  «        |S )Nz [TX:{!r}] r  r3   s     r   rÉ   z
DebugIO.txP  r  r   NrØ   r&   r   r   r  r  H  s   „ Ù)òó
r   r  )ÚcrlfÚcrÚlf)ÚdirectÚdefaultÚ	nocontrolÚ	printableÚcolorizeÚdebugc                  óê  — t         j                  j                  d«       g } t        t	        t        «       «      d«      D ]J  \  }\  }}}t         j                  j                  dj                  |||«      «       | j                  |«       ŒL 	 t        d«      }	 t        |«      dz
  }d|cxk  rt        | «      k  s"n t         j                  j                  d«       ŒQ	 | |   }|S # t        $ r Y |S w xY w)z¢    Show 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:
r®   z--- {:2}: {:20} {!r}
z#--- Enter port index or full name: r   z--- Invalid index!
)r   r†   r.   Ú	enumerateÚsortedr   r   rù   Ú	raw_inputru   ÚlenÚ
ValueError)ÚportsÚnÚportÚdescÚhwidÚindexs         r   Úask_for_portr  k  sì   € ô ‡J�J×ÑÐ/Ô0Ø€EÜ!*¬6´(³*Ó+=¸qÓ!Aò ÑˆÑˆD�$˜Ü�
‰
×ÑÐ1×8Ñ8¸¸DÀ$ÓGÔHØ�‰�TÕðð ÜÐ>Ó?ˆð	 Ü˜“I ‘MˆEØ˜Ô*¤ E£
Ô*Ü—
‘
× Ñ Ð!7Ô8Øð +ð ˜‘<ˆDØˆøô	 ò 	Øð ˆð		ús   ÂAC% Ã%	C2Ã1C2c                   ó–   — e Zd ZdZdd„Zd„ Zd„ Zd„ Zd„ Zdd„Z	d„ Z
d	„ Zdd
„Zdd„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚMinitermz�    Terminal application. Copy data from serial port to console and vice versa.
    Handle special keys from the console to show menu etc.
    c                 ó*  — t        «       | _        || _        || _        d| _        d| _        d| _        || _        || _        | j                  «        t        d«      | _        t        d«      | _        d | _        d | _        d | _        d | _        d | _        y )NFrg   é   é   )rL   Ú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Ë   r*  r+  s        r   r$   zMiniterm.__init__Š  s‡   € Ü“yˆŒØ%ˆŒØˆŒ	ØˆŒØ%ˆÔØ&ˆÔØˆŒØˆŒØ×#Ñ#Ô%Ü$ T›lˆÔÜ$ T›lˆÔØˆŒ
Ø!ˆÔØ#ˆÔØˆŒØˆ�r   c                 ó´   — d| _         t        j                  | j                  d¬«      | _        d| j                  _        | j                  j                  «        y)zStart reader threadTrÆ   ©ÚtargetÚnameN)r0  Ú	threadingÚThreadÚreaderr1  ÚdaemonÚstartr"   s    r   Ú_start_readerzMiniterm._start_readerœ  sC   € à!ˆÔä(×/Ñ/°t·{±{ÈÔNˆÔØ&*ˆ×ÑÔ#Ø×Ñ×"Ñ"Õ$r   c                 ó¦   — d| _         t        | j                  d«      r| j                  j                  «        | j                  j                  «        y)z6Stop reader thread only, wait for clean exit of threadFÚcancel_readN)r0  rz   r&  r@  r1  rû   r"   s    r   Ú_stop_readerzMiniterm._stop_reader¤  s:   € à"ˆÔÜ�4—;‘; Ô.Ø�K‰K×#Ñ#Ô%Ø×Ñ×!Ñ!Õ#r   c                 ó  — d| _         | j                  «        t        j                  | j                  d¬«      | _        d| j
                  _        | j
                  j                  «        | j                  j                  «        y)zstart worker threadsTrÉ   r6  N)
r/  r>  r9  r:  ÚwriterÚtransmitter_threadr<  r=  r%  r'   r"   s    r   r=  zMiniterm.start«  s^   € àˆŒ
Ø×ÑÔä"+×"2Ñ"2¸$¿+¹+ÈDÔ"QˆÔØ)-ˆ×ÑÔ&Ø×Ñ×%Ñ%Ô'Ø�‰×ÑÕr   c                 ó   — d| _         y)zset flag to stop worker threadsFN)r/  r"   s    r   ÚstopzMiniterm.stopµ  s	   € àˆ�
r   c                 óÒ   — | j                   j                  «        |sKt        | j                  d«      r| j                  j	                  «        | j
                  j                  «        yy)z$wait for worker threads to terminater@  N)rD  rû   rz   r&  r@  r1  )r#   Útransmit_onlys     r   rû   zMiniterm.join¹  sL   € à×Ñ×$Ñ$Ô&ÙÜ�t—{‘{ MÔ2Ø—‘×'Ñ'Ô)Ø× Ñ ×%Ñ%Õ'ð r   c                 ó8   — | j                   j                  «        y r8   )r&  Úcloser"   s    r   rJ  zMiniterm.closeÁ  s   € Ø�‰×ÑÕr   c                 óþ   — t         | j                     g| j                  D �cg c]  }t        |   ‘Œ c}z   }|D �cg c]	  } |«       ‘Œ c}| _        t        t        | j                  «      «      | _        yc c}w c c}w )zFtake list of transformation classes and instantiate them for rx and txN)ÚEOL_TRANSFORMATIONSr*  r+  ÚTRANSFORMATIONSÚtx_transformationsÚlistÚreversedÚrx_transformations)r#   ÚfÚtransformationsÚts       r   r,  zMiniterm.update_transformationsÄ  sq   € ä.¨t¯x©xÑ8Ð9ØFJÇlÁlö=TØABô >MÈQÓ=Oò =Tñ Tˆà0?Ö"@¨1¡1¥3Ò"@ˆÔÜ"&¤x°×0GÑ0GÓ'HÓ"IˆÕùò=Tùâ"@s
   ¢A5»A:c                 óR   — || _          t        j                  |«      |«      | _        y)zset encoding for received dataN)r(  rƒ   Úgetincrementaldecoderr2  ©r#   r‡   Úerrorss      r   Úset_rx_encodingzMiniterm.set_rx_encodingË  s#   € à&ˆÔØ@œ&×6Ñ6°xÓ@ÀÓHˆ�r   c                 óR   — || _          t        j                  |«      |«      | _        y)z!set encoding for transmitted dataN)r)  rƒ   ÚgetincrementalencoderÚ
tx_encoderrW  s      r   Úset_tx_encodingzMiniterm.set_tx_encodingÐ  s#   € à'ˆÔØ@œ&×6Ñ6°xÓ@ÀÓHˆ�r   c                 óÐ  — t         j                  j                  dj                  | j                  ¬«      «       t         j                  j                  dj                  | j                  j
                  rdnd| j                  j                  rdnd| j                  j                  rdnd«      «       	 t         j                  j                  dj                  | j                  j                  rdnd| j                  j                  rdnd| j                  j                  rdnd| j                  j                  rdnd«      «       t         j                  j                  dj                  | j                  j                  rdnd«      «       t         j                  j                  dj                  | j                  j                  rdnd«      «       t         j                  j                  d	j                  | j                  «      «       t         j                  j                  d
j                  | j                   «      «       t         j                  j                  dj                  | j"                  j%                  «       «      «       t         j                  j                  dj                  dj'                  | j(                  «      «      «       y# t        j                  $ r Y �Œ w xY w)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†   r.   r   r&  ÚrtsÚdtrÚbreak_conditionÚctsÚdsrÚriÚcdÚSerialExceptionÚxonxoffÚrtsctsr(  r)  r*  Úupperrû   r+  r"   s    r   Údump_port_settingszMiniterm.dump_port_settingsÕ  sô  € ä�
‰
×ÑÐh×oÑoØ�k‰kð pó ô 	ä�
‰
×ÑÐB×IÑIØŸ™Ÿš‰X¨jØŸ™Ÿš‰X¨jØŸ™×4Ò4‰X¸*óGô 	Hð		Ü�J‰J×ÑÐM×TÑTØ!Ÿ[™[Ÿ_š_‘°*Ø!Ÿ[™[Ÿ_š_‘°*Ø!Ÿ[™[Ÿ^š^‘°Ø!Ÿ[™[Ÿ^š^‘°ó	>ô ?ô 	�
‰
×ÑÐ:×AÑAÈdÏkÉk×NaÒNaÁ(ÐgqÓrÔsÜ�
‰
×ÑÐ:×AÑAÈdÏkÉk×N`ÒN`Á(ÐfpÓqÔrÜ�
‰
×ÑÐ:×AÑAÀ$×BUÑBUÓVÔWÜ�
‰
×ÑÐ;×BÑBÀ4×CWÑCWÓXÔYÜ�
‰
×Ñ˜×/Ñ/°·±·±Ó0@ÓAÔBÜ�
‰
×ÑÐ,×3Ñ3°C·H±H¸T¿\¹\Ó4JÓKÕLøô ×%Ñ%ò 	ò ð	ús   Â3BK ËK%Ë$K%c                 óJ  — 	 | j                   rÝ| j                  rÐ| j                  j                  | j                  j                  xs d«      }|r€| j
                  r| j                  j                  |«       nX| j                  j                  |«      }| j                  D ]  }|j                  |«      }Œ | j                  j                  |«       | j                   r| j                  rŒÎyyyy# t        j                  $ r# d| _         | j                  j                  «        ‚ w xY w)zloop and copy serial->consoler®   FN)r/  r0  r&  r»   Ú
in_waitingr'  r%  r1   r2  ÚdecoderQ  rÆ   r.   rm  r6   )r#   Údatar4   Útransformations       r   r;  zMiniterm.readerî  sé   € ð	Ø—*’* ×!3Ò!3à—{‘{×'Ñ'¨¯©×(>Ñ(>Ò(CÀ!ÓD�ÙØ—x’xØŸ™×0Ñ0°Õ6à#Ÿ™×5Ñ5°dÓ;˜Ø.2×.EÑ.Eò ;˜NØ#1×#4Ñ#4°TÓ#:™Dð;àŸ™×*Ñ*¨4Ô0ð —*’* ×!3Ô!3�*Ð!3�*øô ×%Ñ%ò 	ØˆDŒJØ�L‰L×ÑÔ!Øð	ús   ‚C%C, Ã,6D"c                 ó¦  — d}	 | j                   �r"	 | j                  j                  «       }| j                   sy|r| j	                  |«       d}nÕ|| j
                  k(  rd}nÃ|| j                  k(  r| j                  «        y|}| j                  D ]  }|j                  |«      }Œ | j                  j                  | j                  j                  |«      «       | j                  r?|}| j                  D ]  }|j                  |«      }Œ | j                  j                  |«       | j                   r�Œ!yy# t        $ r d}Y �Œw xY w#  d| _         ‚ xY w)z¯        Loop and copy console->serial until self.exit_character character is
        found. When self.menu_character is found, interpret the next key
        locally.
        FúTN)r/  r%  r,   ÚKeyboardInterruptÚhandle_menu_keyr.  r-  rF  rN  rÉ   r&  r.   r\  ÚencoderË   )r#   Úmenu_activer
   r4   rv  Ú	echo_texts         r   rC  zMiniterm.writer  s<  € ð ˆð	Ø—*“*ðØŸ™×+Ñ+Ó-�Að —z’zØÙØ×(Ñ(¨Ô+Ø"'‘KØ˜$×-Ñ-Ò-Ø"&‘KØ˜$×-Ñ-Ò-Ø—I‘I”KØð �DØ*.×*AÑ*Aò 7˜Ø-×0Ñ0°Ó6™ð7à—K‘K×%Ñ% d§o¡o×&<Ñ&<¸TÓ&BÔCØ—y’yØ$%˜	Ø.2×.EÑ.Eò G˜NØ(6×(;Ñ(;¸IÓ(F™IðGàŸ™×*Ñ*¨9Ô5ð3 —*–*øô )ò Ø“Aðûð.	ØˆDŒJØús:   „E ’D4 ¬E ¹AE ÂB/E Ä4EÄ?E ÅEÅE Å
Ec                 óÄ  — || j                   k(  s|| j                  k(  r]| j                  j                  | j                  j                  |«      «       | j                  r| j                  j                  |«       y'y'|dk(  r| j                  «        y'|dv r.t        j                  j                  | j                  «       «       y'|dk(  rv| j                  j                   | j                  _        t        j                  j                  dj                  | j                  j                  rd«      «       y'd«      «       y'|dk(  rv| j                  j                   | j                  _        t        j                  j                  dj                  | j                  j                  rd«      «       y'd«      «       y'|d	k(  rv| j                  j                   | j                  _        t        j                  j                  d
j                  | j                  j                  rd«      «       y'd«      «       y'|dk(  rX| j                   | _        t        j                  j                  dj                  | j                  rd«      «       y'd«      «       y'|dk(  r| j!                  «        y'|dk(  ržt#        t$        «      }|j'                  | j(                  «      dz   }|t+        |«      k\  rd}||   | _        t        j                  j                  dj                  | j(                  j-                  «       «      «       | j/                  «        y'|dk(  r| j1                  «        y'|dk(  r| j3                  «        y'|dv r| j5                  «        y'|dv r| j7                  «        y'|dv r| j9                  «        y'|dk(  r0t        j:                  | j                  _        | j3                  «        y'|dk(  r0t        j>                  | j                  _        | j3                  «        y'|dv r0t        j@                  | j                  _!        | j3                  «        y'|dv r0t        jD                  | j                  _!        | j3                  «        y'|dv r0t        jF                  | j                  _!        | j3                  «        y'|dv r0t        jH                  | j                  _!        | j3                  «        y'|dv r0t        jJ                  | j                  _!        | j3                  «        y'|dk(  r0t        jL                  | j                  _'        | j3                  «        y'|dk(  r0t        jP                  | j                  _'        | j3                  «        y'|d k(  r0t        jR                  | j                  _'        | j3                  «        y'|d!v r%|d"k(  | j                  _*        | j3                  «        y'|d#v r%|d$k(  | j                  _+        | j3                  «        y'|d%v r| jY                  «        y't        j                  j                  d&j                  t[        |«      «      «       y')(z"Implement a simple menu / settingsúzhH?úz--- RTS {} ---
ra  rb  úz--- DTR {} ---
úz--- BREAK {} ---
úz--- local echo {} ---
úúr®   r   z--- EOL: {} ---
úú	ÚpPÚzZÚbBÚ8Ú7ÚeEÚoOÚmMÚsSÚnNÚ1Ú2Ú3ÚxXÚXÚrRr\   ÚqQz!--- unknown menu character {} --
N).r.  r-  r&  r.   r\  r{  rË   r%  Úupload_filer   r†   Úget_help_textrf  r   rg  rh  Úchange_filterrO  rL  r  r*  r  rp  r,  Úchange_encodingrq  Ú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_FIVErn  ro  rF  r   )r#   r
   Úmodesr*  s       r   rz  zMiniterm.handle_menu_key'  s›  € à�×#Ñ#Ò# q¨D×,?Ñ,?Ò'?à�K‰K×Ñ˜dŸo™o×4Ñ4°QÓ7Ô8Ø�yŠyØ—‘×"Ñ" 1Õ%ð à�&Š[Ø×ÑÕØ�)‰^Ü�J‰J×Ñ˜T×/Ñ/Ó1Õ2Ø�&Š[Ø"&§+¡+§/¡/Ð1ˆD�K‰KŒOÜ�J‰J×ÑÐ/×6Ñ6À4Ç;Á;Ç?Â?°xÓcÕdÐXbÓcÕdØ�&Š[Ø"&§+¡+§/¡/Ð1ˆD�K‰KŒOÜ�J‰J×ÑÐ/×6Ñ6À4Ç;Á;Ç?Â?°xÓcÕdÐXbÓcÕdØ�&Š[Ø.2¯k©k×.IÑ.IÐ*IˆD�K‰KÔ'Ü�J‰J×ÑÐ1×8Ñ8ÀTÇ[Á[×E`ÒE`¸ÓqÕrÐfpÓqÕrØ�&Š[Ø ŸI™I˜ˆDŒIÜ�J‰J×ÑÐ6×=Ñ=È$Ï)Ê)¸hÓdÕeÐYcÓdÕeØ�&Š[Ø×ÑÕ Ø�&Š[ÜÔ,Ó-ˆEØ—+‘+˜dŸh™hÓ'¨!Ñ+ˆCØ”c˜%“jÒ Ø�Ø˜S‘zˆDŒHÜ�J‰J×ÑÐ0×7Ñ7¸¿¹¿¹Ó8HÓIÔJØ×'Ñ'Õ)Ø�&Š[Ø× Ñ Õ"Ø�&Š[Ø×#Ñ#Õ%ð �$‰YØ×ÑÕØ�$‰YØ×ÑÕØ�$‰YØ× Ñ Õ"Ø�#ŠXÜ#)×#3Ñ#3ˆD�K‰KÔ Ø×#Ñ#Õ%Ø�#ŠXÜ#)×#3Ñ#3ˆD�K‰KÔ Ø×#Ñ#Õ%Ø�$‰YÜ!'×!3Ñ!3ˆD�K‰KÔØ×#Ñ#Õ%Ø�$‰YÜ!'×!2Ñ!2ˆD�K‰KÔØ×#Ñ#Õ%Ø�$‰YÜ!'×!3Ñ!3ˆD�K‰KÔØ×#Ñ#Õ%Ø�$‰YÜ!'×!4Ñ!4ˆD�K‰KÔØ×#Ñ#Õ%Ø�$‰YÜ!'×!3Ñ!3ˆD�K‰KÔØ×#Ñ#Õ%Ø�#ŠXÜ#)×#6Ñ#6ˆD�K‰KÔ Ø×#Ñ#Õ%Ø�#ŠXÜ#)×#6Ñ#6ˆD�K‰KÔ Ø×#Ñ#Õ%Ø�#ŠXÜ#)×#AÑ#AˆD�K‰KÔ Ø×#Ñ#Õ%Ø�$‰YØ#$¨¡8ˆD�K‰KÔØ×#Ñ#Õ%Ø�$‰YØ"# s¡(ˆD�K‰KÔØ×#Ñ#Õ%Ø�$‰YØ�I‰I�Kä�J‰J×ÑÐA×HÑHÌÐYZÓI[Ó\Õ]r   c                 óz  — t         j                  j                  d«       t         j                  j                  «        | j                  5  t         j
                  j                  «       j                  d«      }|rÝ	 t        |d«      5 }t         j                  j                  dj                  |«      «       	 |j                  d«      }|snU| j                  j                  |«       | j                  j                  «        t         j                  j                  d«       Œi	 ddd«       t         j                  j                  dj                  |«      «       ddd«       y# 1 sw Y   Œ@xY w# t        $ r9}t         j                  j                  d	j                  ||«      «       Y d}~ŒRd}~ww xY w# 1 sw Y   yxY w)
z,Ask user for filenname and send its contentsz
--- File to upload: rÐ   Úrbz--- Sending file {} ---
i   rb   Nz
--- File {} sent ---
z"--- ERROR opening file {}: {} ---
)r   r†   r.   r/   r%  r¥   ÚreadlineÚrstripÚopenr   r»   r&  ÚIOError)r#   ÚfilenamerR  ÚblockÚes        r   r™  zMiniterm.upload_file}  s\  € ä�
‰
×ÑÐ1Ô2Ü�
‰
×ÑÔØ�\‰\ñ 	`Ü—y‘y×)Ñ)Ó+×2Ñ2°6Ó:ˆHÙð`Ü˜h¨Ó-ð 	2°ÜŸ
™
×(Ñ(Ð)D×)KÑ)KÈHÓ)UÔVØ"Ø$%§F¡F¨4£L˜EÙ#(Ø %Ø ŸK™K×-Ñ-¨eÔ4à ŸK™K×-Ñ-Ô/ÜŸJ™J×,Ñ,¨SÔ1ð #ð !&÷	2ô —J‘J×$Ñ$Ð%?×%FÑ%FÀxÓ%PÔQ÷	`ð 	`÷	2ð 	2ûô ò `Ü—J‘J×$Ñ$Ð%J×%QÑ%QÐRZÐ\]Ó%^×_Ñ_ûð`ú÷	`ð 	`úsI   Á
0F1Á;E,ÂBE Ä!6E,Å E)	Å%E,Å,	F.Å5/F)Æ$F1Æ)F.Æ.F1Æ1F:c           	      ód  — t         j                  j                  d«       t         j                  j                  dj                  d„ t	        t
        j                  «       «      D «       «      «       t         j                  j                  dj                  dj                  | j                  «      «      «       | j                  5  t         j                  j                  «       j                  «       j                  «       }ddd«       rV|D ]:  }|t
        vsŒt         j                  j                  dj                  |«      «        n || _        | j                  «        t         j                  j                  dj                  dj                  | j                  «      «      «       y# 1 sw Y   Œ©xY w)	zchange the i/o transformationsz
--- Available Filters:
rÏ   c              3   óF   K  — | ]  \  }}d j                  ||«      –— Œ y­w)z---   {:<10} = {.__doc__}N©r   ©rá   ÚkÚvs      r   rã   z)Miniterm.change_filter.<locals>.<genexpr>–  s)   è ø€ ò #9á��1ð (×.Ñ.¨q°!×4ñ#9ùó   ‚!z$
--- Enter new filter name(s) [{}]: ró   Nz--- unknown filter: {!r}
re  )r   r†   r.   rû   r  rM  Úitemsr   r+  r%  r¥   r°  Úlowerrw   r,  )r#   Únew_filtersrR  s      r   r›  zMiniterm.change_filter“  s8  € ä�
‰
×ÑÐ5Ô6Ü�
‰
×Ñ˜Ÿ™ñ #9äœ×4Ñ4Ó6Ó7ô#9ó 9ô 	:ô 	�
‰
×ÑÐ@×GÑGÈÏÉÐQU×Q]ÑQ]ÓH^Ó_Ô`Ø�\‰\ñ 	?ÜŸ)™)×,Ñ,Ó.×4Ñ4Ó6×<Ñ<Ó>ˆK÷	?áØ ò .�ØœOÒ+Ü—J‘J×$Ñ$Ð%A×%HÑ%HÈÓ%KÔLÙð.ð
  +�”Ø×+Ñ+Ô-Ü�
‰
×ÑÐ,×3Ñ3°C·H±H¸T¿\¹\Ó4JÓKÕL÷	?ð 	?ús   Ã;F&Æ&F/c                 óÜ  — t         j                  j                  dj                  | j                  «      «       | j
                  5  t         j                  j                  «       j                  «       }ddd«       r8	 t        j                  |«       | j                  |«       | j                  |«       t         j                  j                  dj                  | j                  «      «       t         j                  j                  dj                  | j                  «      «       y# 1 sw Y   Œ´xY w# t        $ r1 t         j                  j                  dj                  |«      «       Y Œ¶w xY w)z"change encoding on the serial portz#
--- Enter new encoding name [{}]: Nz--- invalid encoding name: {}
rc  rd  )r   r†   r.   r   r(  r%  r¥   r°  Ústriprƒ   ÚlookuprY  r]  ÚLookupErrorr)  )r#   Únew_encodings     r   rœ  zMiniterm.change_encoding¦  s  € ä�
‰
×ÑÐ?×FÑFÀt×GZÑGZÓ[Ô\Ø�\‰\ñ 	8ÜŸ9™9×-Ñ-Ó/×5Ñ5Ó7ˆL÷	8áð3Ü—‘˜lÔ+ð ×$Ñ$ \Ô2Ø×$Ñ$ \Ô2Ü�
‰
×ÑÐ:×AÑAÀ$×BUÑBUÓVÔWÜ�
‰
×ÑÐ;×BÑBÀ4×CWÑCWÓXÕY÷	8ð 	8ûô
 ò YÜ—
‘
× Ñ Ð!B×!IÑ!IÈ,Ó!WÖXðYús   Á-D%Á=D1 Ä%D.Ä17E+Å*E+c                 ó@  — t         j                  j                  d«       t         j                  j                  «        | j                  5  | j
                  j                  }	 t        t         j                  j                  «       j                  «       «      | j
                  _        | j                  «        ddd«       y# t        $ rI}t         j                  j                  dj                  |«      «       || j
                  _        Y d}~ŒVd}~ww xY w# 1 sw Y   yxY w)zchange the baudratez
--- Baudrate: z#--- ERROR setting baudrate: {} ---
N)r   r†   r.   r/   r%  r&  Úbaudrateru   r¥   r°  rÂ  rq  r  r   )r#   Úbackupr¶  s      r   rŸ  zMiniterm.change_baudrate¶  sÎ   € ä�
‰
×ÑÐ+Ô,Ü�
‰
×ÑÔØ�\‰\ñ 	*Ø—[‘[×)Ñ)ˆFð*Ü'*¬3¯9©9×+=Ñ+=Ó+?×+EÑ+EÓ+GÓ'H�—‘Ô$ð
 ×'Ñ'Ô)÷	*ð 	*øô ò .Ü—
‘
× Ñ Ð!G×!NÑ!NÈqÓ!QÔRØ'-�—‘×$Ñ$ûð.ú÷		*ð 	*ús7   Á
DÁ"AB?Â&DÂ?	DÃ?DÄDÄDÄDÄDc                 ó¶  — | j                   5  	 t        «       }ddd«       �rC|| j                  j                  k7  �r(| j                  «        | j                  j                  «       }	 t        j                  |d¬«      }|j                  |«       | j                  j                  |_	        | j                  j                  |_
        |j                  «        | j                  j                  |_        | j                  j                  «        || _        t        j                  j!                  dj#                  | j                  j                  «      «       | j'                  «        yyy# t        $ r d}Y �Œ]w xY w# 1 sw Y   �ŒcxY w# t$        $ rH}t        j                  j!                  dj#                  |«      «       j                  «        Y d}~Œ~d}~ww xY w)z;Have a conversation with the user to change the serial portNT)Údo_not_openz--- Port changed to: {} ---
z#--- ERROR opening new port: {} ---
)r%  r  ry  r&  r  rA  ÚgetSettingsDictÚserial_for_urlÚapplySettingsDictrf  rg  r²  rh  rJ  r   r†   r.   r   Ú	Exceptionr>  )r#   r  ÚsettingsÚ
new_serialr¶  s        r   r�  zMiniterm.change_portÄ  sf  € à�\‰\ñ 	ðÜ#“~�÷	ò
 �D˜DŸK™K×,Ñ,Ó,à×ÑÔà—{‘{×2Ñ2Ó4ˆHð[Ü#×2Ñ2°4ÀTÔJ�
à×,Ñ,¨XÔ6Ø!%§¡§¡�
”Ø!%§¡§¡�
”Ø—‘Ô!Ø-1¯[©[×-HÑ-H�
Ô*ð
 —‘×!Ñ!Ô#Ø(�”Ü—
‘
× Ñ Ð!@×!GÑ!GÈÏÉ×HXÑHXÓ!YÔZà×ÑÕ ð+ -ˆ4øô %ò Ø“ðú÷	ñ 	ûô$ ò #Ü—
‘
× Ñ Ð!G×!NÑ!NÈqÓ!QÔRØ× Ñ ×"Ñ"ûð#úsA   �E:�
E(Á)B	F Å(E7Å3E:Å6E7Å7E:Å:FÆ	GÆ>GÇGc                 óÈ  — | j                  «        | j                  j                  «        t        j                  j                  dj                  | j                  j                  «      «       d}| j                  j                  sµt        j                  j                  dj                  t        | j                  «      ¬«      «       | j                  j                  «       }|| j                  k(  r| j                  «        n9|dv rd}n2	 | j                  j                  «        | j                  j                  sŒµ|r| j!                  «        y| j#                  «        t        j                  j                  d	j                  | j                  j                  «      «       y# t        $ r8}t        j                  j                  dj                  |«      «       Y d}~Œ¹d}~ww xY w)
zl        open 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: {} ---
)rA  r&  rJ  r   r†   r.   r   r  Úis_openr   r-  r%  r,   rF  r²  rÎ  r�  r>  )r#   Údo_change_portr»  r¶  s       r   rž  zMiniterm.suspend_portâ  sj  € ð 	×ÑÔØ�‰×ÑÔÜ�
‰
×ÑÐ6×=Ñ=¸d¿k¹k×>NÑ>NÓOÔPØˆØ—+‘+×%Ò%Ü�J‰J×ÑÐc×jÑjÜ$ T×%8Ñ%8Ó9ð kó ;ô <à—‘×#Ñ#Ó%ˆAØ�D×'Ñ'Ò'Ø—	‘	”ØØ�d‘Ø!%�ØðOØ—‘× Ñ Ô"ð —+‘+×%Ó%ñ Ø×ÑÕð ×ÑÔ Ü�J‰J×ÑÐ8×?Ñ?ÀÇÁ×@PÑ@PÓQÕRøô ò OÜ—
‘
× Ñ Ð!C×!JÑ!JÈ1Ó!M×NÑNûðOús   Ä	F  Æ 	G!Æ).GÇG!c                 óH  — dj                  t        t        dd«      t        | j                  «      t        | j
                  «      t        d«      t        d«      t        d«      t        d«      t        d«      t        d	«      t        d
«      t        d«      t        d«      ¬«      S )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…  )rv   rÒ  Úmenurf  rg  ÚbrkrË   ÚinfoÚuploadr   Úfilterr*  )r   Úgetattrr&  r   r-  r.  r"   s    r   rš  zMiniterm.get_help_text  s�   € ð÷0 �F”7œ6 9Ð.?Ó@Ü × 3Ñ 3Ó4Ü × 3Ñ 3Ó4Ü˜vÓ&Ü˜vÓ&Ü˜vÓ&Ü Ó'Ü Ó'Ü! &Ó)Ü Ó'Ü! &Ó)Ü˜vÓ&ð ó (ð1#	(r   N)Fr
  r&   )FrÑ   )r>   r?   r@   rA   r$   r>  rA  r=  rF  rû   rJ  r,  rY  r]  rq  r;  rC  rz  r™  r›  rœ  rŸ  r�  rž  rš  r&   r   r   r!  r!  „  s|   „ ñó
ò$%ò$òòó(òòJóIó
Iò
Mò2ò&$òLT^òl`ò,Mò&Zò *ò!ò<Só>&(r   r!  c           
      óÊ  — ddl }|j                  d¬«      }|j                  ddd| ¬«       |j                  d	dt        d
|¬«       |j	                  d«      }|j                  dg d¢d„ dd¬«       |j                  dddd¬«       |j                  dddd¬«       |j                  dt        d|¬«       |j                  dt        d|¬«       |j                  dd d!d"d#¬$«       |j                  d%dd&d¬«       |j	                  d'«      }|j                  d(d)dd*d¬«       |j                  d+d,d-d.d/¬0«       |j                  d1d2d3d4d5g ¬6«       |j                  d7g d8¢d9„ d:d;¬«       |j                  d<dd=d¬«       |j	                  d>«      }|j                  d?t        d@dAdB¬C«       |j                  dDt        d@dEdF¬C«       |j	                  dG«      }|j                  dHdIddJd¬«       |j                  dKddLd¬«       |j                  «       }|j                  |j                  k(  r|j                  dM«       |j                  r¾dN|j                  v r£t        j                  j                  dO«       t        j                  j                  dPj                  dQ„ t        t        j!                  «       «      D «       «      «       t        j                  j                  dP«       t        j"                  dR«       |j                  }ndSg}	 |j$                  �|j$                  dTk(  r.	 t'        «       |_        |j$                  s|j                  dU«       	 	 t+        j,                  |j$                  |j.                  |j0                  |j2                  |j4                  d#¬W«      }	t7        |	dX«      sdR|	_        |j:                  �Y|j<                  s<t        j                  j                  dYj?                  |j:                  rdZnd[«      «       |j:                  |	_        |j@                  �Y|j<                  s<t        j                  j                  d\j?                  |j@                  rdZnd[«      «       |j@                  |	_         tC        |	t*        jD                  «      r|jF                  |	_#        |	jI                  «        	 tQ        |	|jR                  |jT                  jW                  «       |¬^«      }tY        |j                  «      |_-        tY        |j                  «      |_.        |j^                  |_/        |ja                  |jb                  «       |je                  |jb                  «       |j<                  s¬t        j                  j                  d_j?                  |j*                  ¬`«      «       t        j                  j                  daj?                  tg        |jZ                  «      tg        |j\                  «      tg        |j\                  «      tg        db«      «      «       |ji                  «        	 |j                  d#«       |j<                  st        j                  j                  dc«       |j                  «        |jk                  «        y# t(        $ r4 t        j                  j                  dP«       |j                  dV«       Y �Œuw xY w# t*        jJ                  $ ry}
t        j                  j                  d]j?                  |j$                  |
«      «       |jL                  r‚ |jN                  st        j"                  dR«       ndT|_        Y d}
~
nd}
~
ww xY w�ŒS# t(        $ r Y �Œ)w xY w)dzCommand line tool, entry pointr   Nz9Miniterm - A simple terminal program for the serial port.)Údescriptionr  rQ   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)ÚNÚEr[   r]   rY   c                 ó"   — | j                  «       S r8   ©rp  r	   s    r   r   zmain.<locals>.<lambda>G  ó   € �q—w‘w“y€ r   z*set parity, one of {N E O S M}, default: Nrâ  )Ú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)srg   )rì  Úmetavarrà  r  z-fz--filterrù   ÚNAMEzadd text transformation)ré  rï  rà  r  z--eol)rÓ   rÚ   rÍ   c                 ó"   — | j                  «       S r8   rå  r	   s    r   r   zmain.<locals>.<lambda>‰  ræ  r   zend of line moderÍ   z--rawz)Do no apply any encodings/transformationsÚhotkeysz--exit-charÚNUMzWUnicode of special character that is used to exit the application, default: %(default)sr#  )rá  rï  rà  r  z--menu-charz_Unicode code of special character that is used to control miniterm (menu), default: %(default)sr$  Ú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   óF   K  — | ]  \  }}d j                  ||«      –— Œ y­w)z{:<10} = {.__doc__}Nr¹  rº  s      r   rã   zmain.<locals>.<genexpr>¹  s)   è ø€ ò '=á�A�qð &×,Ñ,¨Q°×2ñ'=ùr½  r®   r  ú-zport is not givenz"user aborted and port is not given)r¤  ro  rn  rÊ  r@  z--- forcing DTR {}
ra  rb  z--- forcing RTS {}
zcould not open port {!r}: {}
)rË   r*  r+  zP--- Miniterm on {p.name}  {p.baudrate},{p.bytesize},{p.parity},{p.stopbits} ---
r_  z6--- Quit: {} | Menu: {} | Help: {} followed by {} ---
úz
--- exit ---
)6ÚargparseÚArgumentParserÚadd_argumentru   Úadd_argument_groupÚ
parse_argsÚ	menu_charÚ	exit_charÚerrorrÛ  r   r†   r.   rû   r  rM  r¾  rÒ  r  r  ry  r&  rÌ  rÇ  r¤  ro  rn  rz   Útimeoutrg  Úquietr   rf  Ú
isinstanceÚSerialrê  r²  rm  ÚdevelopÚaskr!  rË   r*  r¿  r”   r-  r.  r'  rY  rí  r]  r   r=  rJ  )Údefault_portÚdefault_baudrateÚdefault_rtsÚdefault_dtrrø  ÚparserÚgroupr;   r+  r4  r¶  Úminiterms               r   Úmainr  -  sÅ  € ó à×$Ñ$ØOð %ó Q€Fð ×ÑØØØ7Øð	 ô ð ×ÑØØÜØ2Ø ð ô "ð ×%Ñ% oÓ6€Eà	×ÑØÚ)Ù Ø9Øð ô ð 
×ÑØØØ8Øð	 ô ð 
×ÑØØØ9Øð	 ô ð 
×ÑØÜØAØð	 ô ð 
×ÑØÜØAØð	 ô ð 
×ÑØØØØ/Øð ô ð 
×ÑØØØ1Øð	 ô ð ×%Ñ% oÓ6€Eà	×ÑØˆhØØ.Øð	 ô ð 
×ÑØØ#ØØgØð ô ð 
×ÑØˆjØØØ&Øð ô ð 
×ÑØÚ$Ù ØØð ô ð 
×ÑØØØ8Øð	 ô ð ×%Ñ% iÓ0€Eà	×ÑØÜØØfØð ô ð 
×ÑØÜØØnØð ô ð ×%Ñ% mÓ4€Eà	×ÑØˆiØØ*Øð	 ô ð 
×ÑØØØ-Øð	 ô ð ×ÑÓ€Dà‡~�~˜Ÿ™Ò'Ø�‰ÐEÔFà‡{‚{Ø�T—[‘[Ñ Ü�J‰J×ÑÐ3Ô4Ü�J‰J×Ñ˜TŸY™Yñ '=ä"¤?×#8Ñ#8Ó#:Ó;ô'=ó =ô >ô �J‰J×Ñ˜TÔ"Ü�H‰H�QŒKØ—+‘+‰à�+ˆà
à�9‰9Ð §	¡	¨SÒ 0ð6Ü(›N�”	ð
 —y’yØ—L‘LÐ!4Õ5ð#	Ü$×3Ñ3Ø—	‘	Ø—‘Ø—{‘{Ø—{‘{ØŸ™Ø ô"ˆOô ˜?¨MÔ:à*+�Ô'à�x‰xÐ#Ø—z’zÜ—J‘J×$Ñ$Ð%;×%BÑ%BÈtÏxÊxÁ8Ð]gÓ%hÔiØ&*§h¡h�Ô#Ø�x‰xÐ#Ø—z’zÜ—J‘J×$Ñ$Ð%;×%BÑ%BÈtÏxÊxÁ8Ð]gÓ%hÔiØ&*§h¡h�Ô#ä˜/¬6¯=©=Ô9Ø,0¯N©N�Ô)à× Ñ Ô"ð äØØ�Y‰YØ�H‰H�N‰NÓØô	€Hô
 % T§^¡^Ó4€HÔÜ$ T§^¡^Ó4€HÔØ—8‘8€H„LØ×Ñ˜T×6Ñ6Ô7Ø×Ñ˜T×6Ñ6Ô7à�:Š:Ü�
‰
×ÑÐl×sÑsØ�o‰oð tó ô 	 ä�
‰
×ÑÐR×YÑYÜ˜H×3Ñ3Ó4Ü˜H×3Ñ3Ó4Ü˜H×3Ñ3Ó4Ü˜FÓ#ó	%ô 	&ð ‡N�NÔðØ�‰�dÔð �:Š:Ü�
‰
×ÑÐ+Ô,Ø‡M�M„OØ‡N�NÕøôO %ò CÜ—
‘
× Ñ  Ô&Ø—‘ÐA×BðCûô@ ×%Ñ%ò 	 Ü�J‰J×ÑÐ=×DÑDÀTÇYÁYÐPQÓRÔSØ�|Š|ØØ—8’8Ü—‘˜•à�”	ÿøð	 úñK øôN ò Úðús>   ÌZ ÍE%[ Ø'] Ú9[Û [Û]ÛA/]Ý]Ý	]"Ý!]"Ú__main__)Ni€%  NN).Ú
__future__r   rƒ   rI   r   r9  r&  Úserial.tools.list_portsr   Úserial.toolsr   rª   r  Ú	NameErrorÚinputÚchrr”   r   Úobjectr   r8  r’   rj   rs   rD   rL   r©   r¦   r¾   ÚNotImplementedErrorr   rÄ   rÍ   rÓ   rÚ   rÜ   rî   rñ   rþ   r  rL  rM  r  r!  r  r>   r&   r   r   ú<module>r     sª  ðõ 'ã Û 	Û 
Û ã Ý ,Ý &ð €‡�ÑQÔ RðÙòô*�&ô *ðZ ‡7�7ˆd‚?ÛÛÛô
!ˆfô 
!ôRD�+õ RDðh ‡W�W�ÒÛÛÛôD�+õ Dñ> ØC×JÑJÈ3Ï<É<ÓXóZð Zô�ô ô*ˆ9ô *ô(ˆô (ôˆô ô�ô ô 	�ô 	ô�	ô ô$&ˆyô &ôˆiô ð& Ø
Ø
ñÐ ð ØØØØØñ€òô2c(ˆvô c(óRaðH ˆzÒÙ…Fð øðm ò à€IØƒFðús   »E Å	E$Å#E$