HOME


Mini Shell 1.0
DIR: /lib/python3/dist-packages/serial/tools/__pycache__/
Upload File :
Current File : //lib/python3/dist-packages/serial/tools/__pycache__/miniterm.cpython-312.pyc
�

�,�_����ddlmZddlZddlZddlZddlZddlZddlmZddl	m
Z
ejd��	ed�ZGd�de�Zej(d	k(r#ddlZddlZddlZGd
�de�ZGd�d
e�ZnHej(dk(rddlZddlZddlZGd�d
e�Zn!edj=ej.���Gd�de�ZGd�de�Z Gd�de�Z!Gd�de�Z"Gd�de�Z#Gd�de#�Z$Gd�de�Z%Gd�d e�Z&Gd!�d"e�Z'e e!e"d#�Z(ee#e$e%e&e'd$�Z)d%�Z*Gd&�d'e�Z+d*d(�Z,e-d)k(re,�yy#e
$reZeZY��&wxYw)+�)�absolute_importN)�comports)�
hexlify_codecc�8�|dk(rtj�SdS)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|�}|dkrdjtd�|z�St|�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�eZdZdZd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zy)�ConsoleBasez8OS abstraction for console (input/output codec, no echo)c��tjdk\r tjj|_ntj|_tj|_y�N)�r)�sys�version_info�stdout�buffer�byte_output�output��selfs r�__init__zConsoleBase.__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�setupzConsoleBase.setup5��r
c��y)z Restore default console settingsNr&r"s r�cleanupzConsoleBase.cleanup8r(r
c��y)z"Read a single key from the consoleNr&r"s r�getkeyzConsoleBase.getkey;s��r
c�n�|jj|�|jj�y)zWrite bytes (already encoded)N)r �write�flush)r#�byte_strings  r�write_byteszConsoleBase.write_bytes?s(�������{�+������ r
c�n�|jj|�|jj�y)zWrite stringN)r!r.r/�r#�texts  rr.zConsoleBase.writeDs$�������$�������r
c��y)zCancel getkey operationNr&r"s r�cancelzConsoleBase.cancelIr(r
c�&�|j�|S�N)r*r"s r�	__enter__zConsoleBase.__enter__Ps�������r
c�$�|j�yr8)r')r#�args�kwargss   r�__exit__zConsoleBase.__exit__Ts���
�
�r
N)
�__name__�
__module__�__qualname__�__doc__r$r'r*r,r1r.r6r9r=r&r
rrr+s2��B�!�=�/��!�
�
&��r
r�ntc�"�eZdZdZd�Zd�Zd�Zy)�Outz$file-like wrapper that uses os.writec��||_yr8)�fd)r#rFs  rr$zOut.__init__`s	���D�Gr
c��yr8r&r"s rr/z	Out.flushcs��r
c�D�tj|j|�yr8)�osr.rF)r#�ss  rr.z	Out.writefs���H�H�T�W�W�a� r
N)r>r?r@rAr$r/r.r&r
rrDrD]s��2�	�	�	!r
rDc�d��eZdZddddddddd	d
d�
Zdd
ddddddddd�
Z�fd�Zd�Zd�Zd�Z�xZ	S)�ConsolezbOPzbOQzbORzbOSzb[15~zb[17~zb[18~zb[19~zb[20~zb[21~)
�;�<�=�>�?r�A�B�C�Dzzzzzzz[2~z[3~z[5~z[6~)
�H�P�K�M�G�O�R�S�I�Qc���tt|��tjj
j
�|_tjj
j�|_	tjj
jd�tjj
jd�tj�dk(�r>ttj�j!d�d�dkD�rd}ddlm}t'|d�s$tj(|j*�|_tjj
j.}tjj
j0}tjj
j2}|j+�}||d	�tj4|��|j6|zdk(r#||d	�|j6|z�||_t;j<d
�t?t@jBjE��d�|_#t;j<d
�t?t@jHjE��d�t@_$|jFt@_!d
|jF_%y)Ni��10�.�iZ)�r�LPDWORD����UTF-8�replace)&�superrLr$�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�	getwriterrDrr�filenor!�stderr�encoding)r#�"ENABLE_VIRTUAL_TERMINAL_PROCESSINGryr}r~r�mode�	__class__s       �rr$zConsole.__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��tjjj|j�tjjj|j�	tjjjtjjjd�|j�y#t$rYywxYw)Nrf)rjrkrlrqrnrrrpr}rr��AttributeErrorr"s r�__del__zConsole.__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�(AC�	C�Cc�6�	tj�}|td�k(rtd�S|td�us
|td�ur@	tj�}|td�ur|j|S|j|S|S#t
$rYnwxYw��)N�
�
r��)�msvcrt�getwch�unichr�fncodes�navcodes�KeyError)r#�z�codes   rr,zConsole.getkey�s�����M�M�O����r�
�?�!�"�:�%��&��)�^�q�F�4�L�'8��%�}�}�����q�	�>�#'�<�<��#5�5�#'�=�=��#6�6��H��$�����s�
/B�:B�	B�Bc��tjjj�}tjjj|ddd�y)N�r�r)rjrkrl�GetConsoleWindow�user32�PostMessageA)r#�hwnds  rr6zConsole.cancel�s:���=�=�)�)�:�:�<�D��M�M� � �-�-�d�E�4��Cr
)
r>r?r@r�r�r$r�r,r6�
__classcell__�r�s@rrLrLisd�������������
������������
��	+�6	�	�"	Dr
rL�posixc�6��eZdZ�fd�Zd�Zd�Zd�Zd�Z�xZS)rLc����tt|��tjj�|_tj|j�|_	tj|j�tjdkrGtjtjj �tj�|_ytj|_yr)rirLr$r�stdinr�rF�termios�	tcgetattr�old�atexit�registerr*rr��	getreaderr��	enc_stdin)r#r�s �rr$zConsole.__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�tj|j�}|dtjztjztj
z|d<d|dtj<d|dtj<tj|jtj|�y)Nr��r)
r�r�rF�ICANON�ECHO�ISIG�VMIN�VTIME�	tcsetattr�TCSANOW)r#�news  rr'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�|jjd�}|td�k(rtd�}|S)Nr���)r��readr�)r#r
s  rr,zConsole.getkey�s0�����#�#�A�&�A��F�4�L� ��1�I���Hr
c�b�tj|jtjd�y)N�)�fcntl�ioctlrFr��TIOCSTIr"s rr6zConsole.cancel�s���K�K�������%�8r
c�v�tj|jtj|j�yr8)r�r�rF�	TCSAFLUSHr�r"s rr*zConsole.cleanup�s"�����d�g�g�w�'8�'8�$�(�(�Cr
)	r>r?r@r$r'r,r6r*r�r�s@rrLrL�s���	+�	=�	�	9�	Dr
z9Sorry no implementation for your platform ({}) available.c�"�eZdZdZd�Zd�Zd�Zy)�	Transformz&do-nothing: forward all data unchangedc��|S)ztext received from serial portr&r3s  r�rxzTransform.rx�����r
c��|S)ztext to be sent to serial portr&r3s  r�txzTransform.tx�r�r
c��|S)z(text to be sent but displayed on consoler&r3s  r�echozTransform.echo�r�r
N)r>r?r@rAr�r�r�r&r
rr�r��s��0���r
r�c��eZdZdZd�Zy)�CRLFzENTER sends CR+LFc�&�|jdd�S)N�
�
�rhr3s  rr�zCRLF.tx�s���|�|�D�&�)�)r
N)r>r?r@rAr�r&r
rr�r��s
���*r
r�c��eZdZdZd�Zd�Zy)�CRzENTER sends CRc�&�|jdd�S)N�
r�r�r3s  rr�zCR.rx����|�|�D�$�'�'r
c�&�|jdd�S)Nr�r�r�r3s  rr�zCR.txr�r
N�r>r?r@rAr�r�r&r
rr�r��s���(�(r
r�c��eZdZdZy)�LFzENTER sends LFN)r>r?r@rAr&r
rr�r�s��r
r�c�l�eZdZdZed�ed�D��Zejddd��d�ZeZ	y)	�
NoTerminalz0remove typical terminal control codes from inputc#�FK�|]}t|�dvs�|d|zf���y�w)�
	�$N)r���.0�xs  r�	<genexpr>zNoTerminal.<genexpr>s$����]�q����R\�A\�A�v��z�?�]�s�!�!r�!$�%$)r��c�8�|j|j�Sr8)�	translate�REPLACEMENT_MAPr3s  rr�z
NoTerminal.rxs���~�~�d�2�2�3�3r
N)
r>r?r@rA�dict�ranger��updater�r�r&r
rr�r�s>��:��]�E�"�I�]�]�O������	
��4��Dr
r�c�d�eZdZdZed�ed�D��Zejdddd��y)	�
NoControlsz%Remove all control codes, incl. CR+LFc#�*K�|]}|d|zf���
y�w)r�Nr&r�s  rr�zNoControls.<genexpr>s����>�q�A�v��z�?�>�s�ri#$r�r�)rr�r�N)r>r?r@rAr�r�r�r�r&r
rr�r�s5��/��>�E�"�I�>�>�O�������	
�r
r�c��eZdZdZd�ZeZy)�	PrintablezMShow decimal code for all non-ASCII characters and replace most control codesc	�V�g}|D]�}d|cxkrdksn|dvr|j|��&|dkr'|jtdt|�z���R|jd�dj	t|��D��|jd���dj|�S)N� �r�r�c3�PK�|]}tdt|�zdz
���� y�w)i� �0N)r�r)r��ds  rr�zPrintable.rx.<locals>.<genexpr>2s"����U�!����Q���"� 4�5�U�s�$&z{:d}�)�appendr�r�extendr�join)r#r4�rr
s    rr�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@rAr�r�r&r
rr�r�'s��W�
��Dr
r�c�"�eZdZdZd�Zd�Zd�Zy)�Colorizez,Apply different colors for received and echoc� �d|_d|_y)Nzz)�input_color�
echo_colorr"s rr$zColorize.__init__<s��%���$��r
c� �|j|zSr8)rr3s  rr�zColorize.rxAs�����$�&�&r
c� �|j|zSr8)rr3s  rr�z
Colorize.echoDs������%�%r
N)r>r?r@rAr$r�r�r&r
rr�r�9s��6�%�
'�&r
r�c��eZdZdZd�Zd�Zy)�DebugIOzPrint what is sent and receivedc��tjjdj|��tjj	�|S)Nz [RX:{!r}] �rr�r.rr/r3s  rr�z
DebugIO.rxK�4���
�
����-�-�d�3�4��
�
�����r
c��tjjdj|��tjj	�|S)Nz [TX:{!r}] rr3s  rr�z
DebugIO.txPrr
Nr�r&r
rrrHs��)��
r
r)�crlf�cr�lf)�direct�default�	nocontrol�	printable�colorize�debugc���tjjd�g}tt	t��d�D]J\}\}}}tjjdj
|||��|j|��L	td�}	t|�dz
}d|cxkrt|�ks"ntjjd��Q	||}|S#t$rY|SwxYw)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: rz--- Invalid index!
)rr�r.�	enumerate�sortedrrr��	raw_inputru�len�
ValueError)�ports�n�port�desc�hwid�indexs      r�ask_for_portrks����J�J���/�0��E�!*�6�(�*�+=�q�!A�����D�$���
�
���1�8�8��D�$�G�H�
���T�����>�?��	 ���I��M�E���*��E�
�*��
�
� � �!7�8��+���<�D����	�	����		�s�AC%�%	C2�1C2c��eZdZdZdd�Zd�Zd�Zd�Zd�Zdd�Z	d�Z
d	�Zdd
�Zdd�Z
d�Zd
�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zy)�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�td�|_td�|_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     rr$zMiniterm.__init__�s����y���%�����	����%���&����������#�#�%�$�T�l���$�T�l�����
�!���#��������r
c��d|_tj|jd��|_d|j_|jj
�y)zStart reader threadTr���target�nameN)r0�	threading�Thread�readerr1�daemon�startr"s r�
_start_readerzMiniterm._start_reader�sC��!���(�/�/�t�{�{��N���&*����#����"�"�$r
c��d|_t|jd�r|jj�|jj�y)z6Stop reader thread only, wait for clean exit of threadF�cancel_readN)r0rzr&r@r1r�r"s r�_stop_readerzMiniterm._stop_reader�s:��"����4�;�;�
�.��K�K�#�#�%����!�!�#r
c��d|_|j�tj|jd��|_d|j
_|j
j�|jj�y)zstart worker threadsTr�r6N)
r/r>r9r:�writer�transmitter_threadr<r=r%r'r"s rr=zMiniterm.start�s^����
�����"+�"2�"2�$�+�+�D�"Q���)-����&����%�%�'������r
c��d|_y)zset flag to stop worker threadsFN)r/r"s r�stopz
Miniterm.stop�s	����
r
c���|jj�|sKt|jd�r|jj	�|j
j�yy)z$wait for worker threads to terminater@N)rDr�rzr&r@r1)r#�
transmit_onlys  rr�z
Miniterm.join�sL�����$�$�&���t�{�{�M�2����'�'�)�� � �%�%�'�r
c�8�|jj�yr8)r&�closer"s rrJzMiniterm.close�s�������r
c��t|jg|jD�cgc]}t|��
c}z}|D�cgc]	}|���c}|_tt
|j��|_ycc}wcc}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    rr,zMiniterm.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�||_tj|�|�|_y)zset encoding for received dataN)r(r��getincrementaldecoderr2�r#r��errorss   r�set_rx_encodingzMiniterm.set_rx_encoding�s#��&���@�&�6�6�x�@��H��r
c�R�||_tj|�|�|_y)z!set encoding for transmitted dataN)r)r��getincrementalencoder�
tx_encoderrWs   r�set_tx_encodingzMiniterm.set_tx_encoding�s#��'���@�&�6�6�x�@��H��r
c���tjjdj|j���tjjdj|jj
rdnd|jjrdnd|jjrdnd��	tjjdj|jjrdnd|jjrdnd|jjrdnd|jjrdnd��tjjdj|jjrdnd��tjjdj|jjrdnd��tjjd	j|j��tjjd
j|j ��tjjdj|j"j%���tjjdjd
j'|j(���y#tj$rY���wxYw)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)rr�r.rr&�rts�dtr�break_condition�cts�dsr�ri�cd�SerialException�xonxoff�rtsctsr(r)r*�upperr�r+r"s r�dump_port_settingszMiniterm.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�3BK�K%�$K%c�J�	|jr�|jr�|jj|jjxsd�}|r�|j
r|jj|�nX|jj|�}|jD]}|j|�}�|jj|�|jr|jr��yyyy#tj$r#d|_|jj��wxYw)zloop and copy serial->consoler�FN)r/r0r&r��
in_waitingr'r%r1r2�decoderQr�r.rmr6)r#�datar4�transformations    rr;zMiniterm.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"	|jj�}|jsy|r|j	|�d}n�||j
k(rd}n�||jk(r|j�y|}|jD]}|j|�}�|jj|jj|��|jr?|}|jD]}|j|�}�|jj|�|jr��!yy#t$rd}Y��wxYw#d|_�xYw)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-rFrNr�r&r.r\�encoder�)r#�menu_activer
r4rv�	echo_texts      rrCzMiniterm.writers<����	��*�*�����+�+�-�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�AE�B/E�4E�?E�E�E�
Ec���||jk(s||jk(r]|jj|jj|��|jr|jj|�y'y'|dk(r|j�y'|dvr.tjj|j��y'|dk(rv|jj|j_tjjdj|jjrd��y'd��y'|dk(rv|jj|j_tjjdj|jjrd��y'd��y'|d	k(rv|jj|j_tjjd
j|jjrd��y'd��y'|dk(rX|j|_tjjdj|jrd��y'd��y'|d
k(r|j!�y'|dk(r�t#t$�}|j'|j(�dz}|t+|�k\rd}|||_tjjdj|j(j-���|j/�y'|dk(r|j1�y'|dk(r|j3�y'|dvr|j5�y'|dvr|j7�y'|dvr|j9�y'|dk(r0tj:|j_|j3�y'|dk(r0tj>|j_|j3�y'|dvr0tj@|j_!|j3�y'|dvr0tjD|j_!|j3�y'|dvr0tjF|j_!|j3�y'|dvr0tjH|j_!|j3�y'|dvr0tjJ|j_!|j3�y'|dk(r0tjL|j_'|j3�y'|dk(r0tjP|j_'|j3�y'|d k(r0tjR|j_'|j3�y'|d!vr%|d"k(|j_*|j3�y'|d#vr%|d$k(|j_+|j3�y'|d%vr|jY�y'tjjd&jt[|���y')(z"Implement a simple menu / settings�zhH?�z--- RTS {} ---
rarb�z--- DTR {} ---
�z--- BREAK {} ---
�z--- local echo {} ---
��r�rz--- 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_filerr��
get_help_textrfrrgrh�
change_filterrOrLrr*rrpr,�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_FIVErnrorFr)r#r
�modesr*s    rrzzMiniterm.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�tjjd�tjj�|j5tj
j
�jd�}|r�	t|d�5}tjjdj|��	|jd�}|snU|jj|�|jj�tjjd��i	ddd�tjjdj|��ddd�y#1swY�@xYw#t$r9}tjjd	j||��Yd}~�Rd}~wwxYw#1swYyxYw)
z,Ask user for filenname and send its contentsz
--- File to upload: r��rbz--- Sending file {} ---
irbNz
--- File {} sent ---
z"--- ERROR opening file {}: {} ---
)
rr�r.r/r%r��readline�rstrip�openrr�r&�IOError)r#�filenamerR�block�es     rr�zMiniterm.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,�BE �!6E,� E)	�%E,�,	F.�5/F)�$F1�)F.�.F1�1F:c	�d�tjjd�tjjdjd�t	t
j
��D���tjjdjdj|j���|j5tjj�j�j�}ddd�rV|D]:}|t
vs�tjjdj|��n||_|j�tjjdjdj|j���y#1swY��xYw)	zchange the i/o transformationsz
--- Available Filters:
r�c3�FK�|]\}}dj||����y�w)z---   {:<10} = {.__doc__}N�r�r��k�vs   rr�z)Miniterm.change_filter.<locals>.<genexpr>�s)����#9���1�
(�.�.�q�!�4�#9���!z$
--- Enter new filter name(s) [{}]: r�Nz--- unknown filter: {!r}
re)rr�r.r�rrM�itemsrr+r%r�r��lowerrwr,)r#�new_filtersrRs   rr�zMiniterm.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���tjjdj|j��|j
5tjj�j�}ddd�r8	tj|�|j|�|j|�tjjdj|j��tjjdj|j��y#1swY��xYw#t$r1tjjdj|��Y��wxYw)z"change encoding on the serial portz#
--- Enter new encoding name [{}]: Nz--- invalid encoding name: {}
rcrd)rr�r.rr(r%r�r��stripr��lookuprYr]�LookupErrorr))r#�new_encodings  rr�zMiniterm.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�@�tjjd�tjj�|j5|j
j}	ttjj�j��|j
_|j�ddd�y#t$rI}tjjdj|��||j
_Yd}~�Vd}~wwxYw#1swYyxYw)zchange the baudratez
--- Baudrate: z#--- ERROR setting baudrate: {} ---
N)rr�r.r/r%r&�baudraterur�r�r�rqrr)r#�backupr�s   rr�zMiniterm.change_baudrate�s����
�
���+�,��
�
����
�\�\�	*��[�[�)�)�F�
*�'*�3�9�9�+=�+=�+?�+E�+E�+G�'H����$�
�'�'�)�	*�	*���
.��
�
� � �!G�!N�!N�q�!Q�R�'-����$�$��
.��		*�	*�s7�
D�"AB?�&D�?	D�?D�D�D�D�Dc��|j5	t�}ddd��rC||jjk7�r(|j�|jj
�}	tj|d��}|j|�|jj|_	|jj|_
|j�|jj|_|jj�||_tjj!dj#|jj��|j'�yyy#t$rd}Y��]wxYw#1swY��cxYw#t$$rH}tjj!dj#|��j�Yd}~�~d}~wwxYw)z;Have a conversation with the user to change the serial portNT)�do_not_openz--- Port changed to: {} ---
z#--- ERROR opening new port: {} ---
)r%rryr&rrA�getSettingsDict�serial_for_url�applySettingsDictrfrgr�rhrJrr�r.r�	Exceptionr>)r#r�settings�
new_serialr�s     rr�zMiniterm.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�3E:�6E7�7E:�:F�	G�>G�Gc���|j�|jj�tjjdj
|jj��d}|jjs�tjjdj
t|j����|jj�}||jk(r|j�n9|dvrd}n2	|jj�|jjs��|r|j!�y|j#�tjjd	j
|jj��y#t$r8}tjjdj
|��Yd}~��d}~wwxYw)
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: {} ---
)rAr&rJrr�r.rr�is_openrr-r%r,rFr�r�r�r>)r#�do_change_portr�r�s    rr�zMiniterm.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�djttdd�t|j�t|j
�td�td�td�td�td�td	�td
�td�td��
�S)zreturn 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
�VERSIONzunknown versionr�r�r�r�r�rr�r�r�)rvr��menurfrg�brkr��info�uploadr�filterr*)r�getattrr&rr-r.r"s rr�zMiniterm.get_help_texts����0�F�7�6�9�.?�@��� 3� 3�4��� 3� 3�4��v�&��v�&��v�&���'���'�!�&�)���'�!�&�)��v�&��(�1#	(r
N)Fr
r&)Fr�)r>r?r@rAr$r>rAr=rFr�rJr,rYr]rqr;rCrzr�r�r�r�r�r�r�r&r
rr!r!�s|���
�$%�$���(��J�I�
I�
M�2�&$�LT^�l`�,M�&Z� *�!�<S�>&(r
r!c
���ddl}|jd��}|jddd|��|jd	dtd
|��|j	d�}|jd
gd�d�dd��|jdddd��|jdddd��|jdtd|��|jdtd|��|jdd d!d"d#�$�|jd%dd&d��|j	d'�}|jd(d)dd*d��|jd+d,d-d.d/�0�|jd1d2d3d4d5g�6�|jd7gd8�d9�d:d;��|jd<dd=d��|j	d>�}|jd?td@dAdB�C�|jdDtd@dEdF�C�|j	dG�}|jdHdIddJd��|jdKddLd��|j�}|j|jk(r|jdM�|jr�dN|jvr�tjjdO�tjjdPjdQ�ttj!��D���tjjdP�tj"dR�|j}ndSg}	|j$�|j$dTk(r.	t'�|_|j$s|jdU�		t+j,|j$|j.|j0|j2|j4d#�W�}	t7|	dX�sdR|	_|j:�Y|j<s<tjjdYj?|j:rdZnd[��|j:|	_|j@�Y|j<s<tjjd\j?|j@rdZnd[��|j@|	_ tC|	t*jD�r|jF|	_#|	jI�	tQ|	|jR|jTjW�|�^�}tY|j�|_-tY|j�|_.|j^|_/|ja|jb�|je|jb�|j<s�tjjd_j?|j*�`��tjjdaj?tg|jZ�tg|j\�tg|j\�tgdb���|ji�	|jd#�|j<stjjdc�|j�|jk�y#t($r4tjjdP�|jdV�Y��uwxYw#t*jJ$ry}
tjjd]j?|j$|
��|jLr�|jNstj"dR�ndT|_Yd}
~
nd}
~
wwxYw��S#t($rY��)wxYw)dzCommand line tool, entry pointrNz9Miniterm - A simple terminal program for the serial port.)�descriptionrrQz(serial port name ("-" to show port list))�nargs�helprr�z#set baud rate, default: %(default)s)r��typer�rz
port settingsz--parity)�N�Er[r]rYc�"�|j�Sr8�rpr	s rrzmain.<locals>.<lambda>G���q�w�w�y�r
z*set parity, one of {N E O S M}, default: Nr�)�choicesr�r�rz--rtscts�
store_truez)enable RTS/CTS flow control (default off)F)�actionr�rz	--xonxoffz*enable software flow control (default off)z--rtsz2set initial RTS line state (possible values: 0, 1))r�r�rz--dtrz2set initial DTR line state (possible values: 0, 1)z--non-exclusive�	exclusive�store_falsez disable locking for native portsT)�destr�r�rz--askz"ask again for port when open failsz
data handlingz-ez--echozenable 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�rz-fz--filterr��NAMEzadd text transformation)r�r�r�rz--eol)r�r�r�c�"�|j�Sr8r�r	s rrzmain.<locals>.<lambda>�r�r
zend 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�rz--menu-charz_Unicode code of special character that is used to control miniterm (menu), default: %(default)sr$�diagnosticsz-qz--quietzsuppress non-error messagesz	--developzshow Python traceback on errorz.--exit-char can not be the same as --menu-charr�zAvailable filters:
r�c3�FK�|]\}}dj||����y�w)z{:<10} = {.__doc__}Nr�r�s   rr�zmain.<locals>.<genexpr>�s)����'=��A�q�&�,�,�Q��2�'=�r�r�r�-zport is not givenz"user aborted and port is not given)r�rornr�r@z--- forcing DTR {}
rarbz--- forcing RTS {}
zcould 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�rr�r.r�rrMr�r�rrryr&r�r�r�rornrz�timeoutrg�quietrrf�
isinstance�Serialr�r�rm�develop�askr!r�r*r�r�r-r.r'rYr�r]rr=rJ)�default_port�default_baudrate�default_rts�default_dtrr��parser�groupr;r+r4r��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__rr�rIrr9r&�serial.tools.list_portsr�serial.toolsrr�r�	NameError�input�chrr�r�objectrr8r�rjrsrDrLr�r�r��NotImplementedErrorrr�r�r�r�r�r�r�r�rrLrMrr!r
r>r&r
r�<module>rs���'�
�	�
��
�,�&�����Q�R��
��*�&�*�Z�7�7�d�?����
!�f�
!�RD�+�RD�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$