Spamworldpro Mini Shell
Spamworldpro


Server : Apache/2.4.52 (Ubuntu)
System : Linux webserver 6.8.0-49-generic #49~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Wed Nov 6 17:42:15 UTC 2 x86_64
User : www-data ( 33)
PHP Version : 8.1.2-1ubuntu2.21
Disable Function : NONE
Directory :  /lib/python3/dist-packages/serial/tools/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : //lib/python3/dist-packages/serial/tools/__pycache__/miniterm.cpython-310.pyc
o

�,�_Г�@sddlmZddlZddlZddlZddlZddlZddlmZddl	m
Z
e�dd��zeWn
e
y>eZeZYnwdd�ZGd	d
�d
e�ZejdkrmddlZddlZddlZGdd
�d
e�ZGdd�de�Zn"ejdkr�ddlZddlZddlZGdd�de�Zned�ej���Gdd�de�ZGdd�de�Z Gdd�de�Z!Gdd�de�Z"Gdd�de�Z#Gdd�de#�Z$Gdd �d e�Z%Gd!d"�d"e�Z&Gd#d$�d$e�Z'e e!e"d%�Z(ee#e$e%e&e'd&�Z)d'd(�Z*Gd)d*�d*e�Z+d/d,d-�Z,e-d.k�re,�dSdS)0�)�absolute_importN)�comports)�
hexlify_codeccCs|dkrt��SdS)N�hexlify)r�getregentry��c�r	�7/usr/lib/python3/dist-packages/serial/tools/miniterm.py�<lambda>srcCs*t|�}|dkrd�td�|�St|�S)z)generate a readable description for a key� z	Ctrl+{:c}�@)�ord�format�repr)�	character�
ascii_coder	r	r
�key_description!src@sXeZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�ZdS)�ConsoleBasez8OS abstraction for console (input/output codec, no echo)cCs*tjdkrtjj|_ntj|_tj|_dS�N)�r)�sys�version_info�stdout�buffer�byte_output�output��selfr	r	r
�__init__.s
zConsoleBase.__init__cC�dS)z.Set console to read single characters, no echoNr	rr	r	r
�setup5�zConsoleBase.setupcCr )z Restore default console settingsNr	rr	r	r
�cleanup8r"zConsoleBase.cleanupcCr )z"Read a single key from the consoleNr	rr	r	r
�getkey;�zConsoleBase.getkeycC�|j�|�|j��dS)zWrite bytes (already encoded)N)r�write�flush)r�byte_stringr	r	r
�write_bytes?�zConsoleBase.write_bytescCr&)zWrite stringN)rr'r(�r�textr	r	r
r'Dr+zConsoleBase.writecCr )zCancel getkey operationNr	rr	r	r
�cancelIr"zConsoleBase.cancelcCs|��|S�N)r#rr	r	r
�	__enter__PszConsoleBase.__enter__cOs|��dSr/)r!)r�args�kwargsr	r	r
�__exit__T�zConsoleBase.__exit__N)
�__name__�
__module__�__qualname__�__doc__rr!r#r$r*r'r.r0r3r	r	r	r
r+sr�ntc@�(eZdZdZdd�Zdd�Zdd�ZdS)	�Outz$file-like wrapper that uses os.writecCs
||_dSr/)�fd)rr<r	r	r
r`�
zOut.__init__cCsdSr/r	rr	r	r
r(csz	Out.flushcCst�|j|�dSr/)�osr'r<)r�sr	r	r
r'fsz	Out.writeN)r5r6r7r8rr(r'r	r	r	r
r;]s
r;csheZdZddddddddd	d
d�
Zdd
ddddddddd�
Z�fdd�Zdd�Zdd�Zdd�Z�Z	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�QcsBtt|���tjj��|_tjj��|_	tjj�
d�tjj�d�t�
�dkr{tt���d�d�dkr{d}ddlm}t|d�sJt�|j�|_tjjj}tjjj}tjjj}|��}||d	�t�|��|j|@dkr{||d	�|j|B�||_t�d
�tt j!�"��d�|_#t�d
�tt j$�"��d�t _$|j#t _!d
|j#_%dS)Ni��10�.�iZ)�r�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�DWORDrX�SetConsoleMode�GetConsoleMode�GetStdHandle�byref�value�	_saved_cm�codecs�	getwriterr;rr�filenor�stderr�encoding)r�"ENABLE_VIRTUAL_TERMINAL_PROCESSINGrlrprqrr�mode��	__class__r	r
r�s,&



�Console.__init__cCsXtjj�|j�tjj�|j�ztjj�tjj�d�|j	�WdSt
y+YdSw)NrY)r]r^r_rdrarercrprrru�AttributeErrorrr	r	r
�__del__�s"�zConsole.__del__cCs|	t��}|td�krtd�S|td�us|td�ur;zt��}|td�ur,|j|WS|j|WSty:Ynw|Sq)NT�
�
r��)�msvcrt�getwch�unichr�fncodes�navcodes�KeyError)r�z�coder	r	r
r$�s��Console.getkeycCs$tjj��}tjj�|ddd�dS)N�r�r)r]r^r_�GetConsoleWindow�user32�PostMessageA)r�hwndr	r	r
r.�s�Console.cancel)
r5r6r7r�r�rr�r$r.�
__classcell__r	r	r}r
r@is6�
�
r@�posixcs<eZdZ�fdd�Zdd�Zdd�Zdd�Zd	d
�Z�ZS)r@csdtt|���tj��|_t�|j�|_	t
�|j�tj
dkr,t�tjj�tj�|_dStj|_dSr)r\r@rr�stdinrxr<�termios�	tcgetattr�old�atexit�registerr#rrv�	getreaderrz�	enc_stdinrr}r	r
r�s
rcCsbt�|j�}|dtj@tj@tj@|d<d|dtj<d|dtj<t�|jtj	|�dS)Nr��r)
r�r�r<�ICANON�ECHO�ISIG�VMIN�VTIME�	tcsetattr�TCSANOW)r�newr	r	r
r!�s
$z
Console.setupcCs$|j�d�}|td�krtd�}|S)Nr���)r��readr�)rrr	r	r
r$�sr�cCst�|jtjd�dS)N�)�fcntl�ioctlr<r��TIOCSTIrr	r	r
r.�sr�cCst�|jtj|j�dSr/)r�r�r<�	TCSAFLUSHr�rr	r	r
r#�szConsole.cleanup)	r5r6r7rr!r$r.r#r�r	r	r}r
r@�s
z9Sorry no implementation for your platform ({}) available.c@r:)	�	Transformz&do-nothing: forward all data unchangedcC�|S)ztext received from serial portr	r,r	r	r
�rx�r%zTransform.rxcCr�)ztext to be sent to serial portr	r,r	r	r
�tx�r%zTransform.txcCr�)z(text to be sent but displayed on consoler	r,r	r	r
�echo�r%zTransform.echoN)r5r6r7r8r�r�r�r	r	r	r
r��s
r�c@seZdZdZdd�ZdS)�CRLFzENTER sends CR+LFcC�|�dd�S)N�
�
�r[r,r	r	r
r��r4zCRLF.txN)r5r6r7r8r�r	r	r	r
r��sr�c@� eZdZdZdd�Zdd�ZdS)�CRzENTER sends CRcCr�)N�
r�r�r,r	r	r
r�r4zCR.rxcCr�)Nr�r�r�r,r	r	r
r�r4zCR.txN�r5r6r7r8r�r�r	r	r	r
r��sr�c@seZdZdZdS)�LFzENTER sends LFN)r5r6r7r8r	r	r	r
r�sr�c@sBeZdZdZedd�ed�D��Ze�ddd��dd	�ZeZ	d
S)�
NoTerminalz0remove typical terminal control codes from inputccs(�|]}t|�dvr|d|fVqdS)�
	�$N)r���.0�xr	r	r
�	<genexpr>s�&zNoTerminal.<genexpr>r�!$�%$)r��cCs|�|j�Sr/)�	translate�REPLACEMENT_MAPr,r	r	r
r�r4z
NoTerminal.rxN)
r5r6r7r8�dict�ranger��updater�r�r	r	r	r
r�s��r�c@s8eZdZdZedd�ed�D��Ze�dddd��d	S)
�
NoControlsz%Remove all control codes, incl. CR+LFccs�|]	}|d|fVqdS)r�Nr	r�r	r	r
r�s�zNoControls.<genexpr>ri#$r�r�)rr�r�N)r5r6r7r8r�r�r�r�r	r	r	r
r�s��r�c@seZdZdZdd�ZeZdS)�	PrintablezMShow decimal code for all non-ASCII characters and replace most control codescCs�g}|D];}d|krdksn|dvr|�|�q|dkr+|�tdt|���q|�dd�d�t|��D��|�d�qd�|�S)	N� �r�r�css$�|]
}tdt|�d�VqdS)i� �0N)r�r)r��dr	r	r
r�2s�"zPrintable.rx.<locals>.<genexpr>z{:d}�)�appendr�r�extendr�join)rr-�rrr	r	r
r�*s
zPrintable.rxN)r5r6r7r8r�r�r	r	r	r
r�'sr�c@r:)	�Colorizez,Apply different colors for received and echocCsd|_d|_dS)Nzz)�input_color�
echo_colorrr	r	r
r<s
zColorize.__init__cC�
|j|Sr/)r�r,r	r	r
r�Ar=zColorize.rxcCr�r/)r�r,r	r	r
r�Dr=z
Colorize.echoN)r5r6r7r8rr�r�r	r	r	r
r�9s
r�c@r�)�DebugIOzPrint what is sent and receivedcC� tj�d�|��tj��|S)Nz [RX:{!r}] �rryr'rr(r,r	r	r
r�K�
z
DebugIO.rxcCr�)Nz [TX:{!r}] r�r,r	r	r
r�Pr�z
DebugIO.txNr�r	r	r	r
r�Hsr�)�crlf�cr�lf)�direct�default�	nocontrol�	printable�colorize�debugcCs�tj�d�g}ttt��d�D]\}\}}}tj�d�|||��|�|�q	td�}zt	|�d}d|kr@t
|�ksIntj�d�Wq(Wn
tyTY|Sw||}|S)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}
Tz#--- Enter port index or full name: rz--- Invalid index!
)rryr'�	enumerate�sortedrrr��	raw_inputrh�len�
ValueError)�ports�n�port�desc�hwid�indexr	r	r
�ask_for_portks&��r�c@s�eZdZdZd1dd�Zdd�Zd	d
�Zdd�Zd
d�Zd2dd�Z	dd�Z
dd�Zd3dd�Zd3dd�Z
dd�Zdd�Zdd�Zd d!�Zd"d#�Zd$d%�Zd&d'�Zd(d)�Zd*d+�Zd,d-�Zd.d/�Zd0S)4�Minitermz�    Terminal application. Copy data from serial port to console and vice versa.
    Handle special keys from the console to show menu etc.
    Fr�r	cCspt�|_||_||_d|_d|_d|_||_||_|�	�t
d�|_t
d�|_d|_
d|_d|_d|_d|_dS)NFrZ��)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�r�r�r	r	r
r�s 


zMiniterm.__init__cCs.d|_tj|jdd�|_d|j_|j��dS)zStart reader threadTr���target�nameN)r�	threading�Thread�readerr�daemon�startrr	r	r
�
_start_reader�szMiniterm._start_readercCs*d|_t|jd�r|j��|j��dS)z6Stop reader thread only, wait for clean exit of threadF�cancel_readN)rrmr�rrr�rr	r	r
�_stop_reader�s
zMiniterm._stop_readercCs@d|_|��tj|jdd�|_d|j_|j��|j�	�dS)zstart worker threadsTr�r	N)
rrrr
�writer�transmitter_threadrrr�r!rr	r	r
r�s
zMiniterm.startcCs
d|_dS)zset flag to stop worker threadsFN)rrr	r	r
�stop�s
z
Miniterm.stopcCs6|j��|st|jd�r|j��|j��dSdS)z$wait for worker threads to terminaterN)rr�rmr�rr)r�
transmit_onlyr	r	r
r��s

�z
Miniterm.joincCs|j��dSr/)r��closerr	r	r
r�szMiniterm.closecCs@t|jgdd�|jD�}dd�|D�|_tt|j��|_dS)zFtake list of transformation classes and instantiate them for rx and txcSsg|]}t|�qSr	)�TRANSFORMATIONS)r��fr	r	r
�
<listcomp>�s�z3Miniterm.update_transformations.<locals>.<listcomp>cSsg|]}|��qSr	r	)r��tr	r	r
r�sN)�EOL_TRANSFORMATIONSr�r��tx_transformations�list�reversed�rx_transformations)r�transformationsr	r	r
r�s
�zMiniterm.update_transformationsr[cC�||_t�|�|�|_dS)zset encoding for received dataN)r�rv�getincrementaldecoderr�rrz�errorsr	r	r
�set_rx_encoding��zMiniterm.set_rx_encodingcCr#)z!set encoding for transmitted dataN)r�rv�getincrementalencoder�
tx_encoderr%r	r	r
�set_tx_encoding�r(zMiniterm.set_tx_encodingcCsLtj�dj|jd��tj�d�|jjrdnd|jjrdnd|jjr$dnd��z&tj�d�|jjr4dnd|jj	r;dnd|jj
rBdnd|jjrIdnd��Wn
tjyXYnwtj�d�|jj
rddnd��tj�d�|jjrsdnd��tj�d	�|j��tj�d
�|j��tj�d�|j����tj�d�d
�|j���dS)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)rryr'rr��rts�dtr�break_condition�cts�dsr�ri�cd�SerialException�xonxoff�rtsctsr�r�r��upperr�r�rr	r	r
�dump_port_settings�s0
�
�

��zMiniterm.dump_port_settingscCs�zE|jr=|jr@|j�|jjpd�}|r4|jr|j�|�n|j�	|�}|j
D]}|�|�}q&|j�|�|jrC|jsWdSWdSWdSWdStj
yVd|_|j���w)zloop and copy serial->consoler�FN)rrr�r��
in_waitingr�r�r*r�decoder!r�r'r:r.)r�datar-�transformationr	r	r
r�s 
$�
�zMiniterm.readercCs�d}zp|jrpz|j��}Wntyd}Ynw|jsWdS|r)|�|�d}nA||jkr1d}n9||jkr=|��WdS|}|jD]}|�	|�}qB|j
�|j�
|��|jrj|}|jD]}|�|�}q\|j�|�|jsWdSWdSd|_�)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)rr�r$�KeyboardInterrupt�handle_menu_keyrrrrr�r�r'r*�encoder�)r�menu_activerr-rB�	echo_textr	r	r
rs>�




�zMiniterm.writercCs�||jks
||jkr!|j�|j�|��|jr|j�|�d'Sd'S|dkr+|��d'S|dvr9t	j
�|���d'S|dkrU|jj|j_t	j
�d�
|jjrOdnd��d'S|dkrq|jj|j_t	j
�d�
|jjrkdnd��d'S|d	kr�|jj|j_t	j
�d
�
|jjr�dnd��d'S|dkr�|j|_t	j
�d�
|jr�dnd��d'S|d
kr�|��d'S|dkr�tt�}|�|j�d}|t|�kr�d}|||_t	j
�d�
|j����|��d'S|dkr�|��d'S|dkr�|��d'S|dvr�|��d'S|dv�r|��d'S|dv�r|��d'S|dk�r#tj|j_|��d'S|dk�r3tj|j_|��d'S|dv�rCtj |j_!|��d'S|dv�rStj"|j_!|��d'S|dv�rctj#|j_!|��d'S|dv�rstj$|j_!|��d'S|dv�r�tj%|j_!|��d'S|dk�r�tj&|j_'|��d'S|dk�r�tj(|j_'|��d'S|d k�r�tj)|j_'|��d'S|d!v�r�|d"k|j_*|��d'S|d#v�r�|d$k|j_+|��d'S|d%v�r�|�,�d'St	j
�d&�
t-|���d'S)(z"Implement a simple menu / settings�zhH?�z--- RTS {} ---
r.r/�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�rRrP�qQz!--- unknown menu character {} --
N).rrr�r'r*rFr�r��upload_filerry�
get_help_textr3rr4r5�
change_filterrrr�r�r�r=r�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<rr)rr�modesr�r	r	r
rE's��"""
 

























zMiniterm.handle_menu_keycCs8tj�d�tj��|j��tj���d�}|rzzDt|d��,}tj�d�	|��	|�
d�}|s2n|j�|�|j��tj�d�q*Wd�n1sNwYtj�d	�	|��Wn$tyy}ztj�d
�	||��WYd}~nd}~wwWd�dSWd�dSWd�dS1s�wYdS)z,Ask user for filenname and send its contentsz
--- File to upload: r��rbz--- Sending file {} ---
TirUNz
--- File {} sent ---
z"--- ERROR opening file {}: {} ---
)
rryr'r(r�r��readline�rstrip�openrr�r��IOError)r�filenamer�block�er	r	r
rc}s:


��
 �����"�zMiniterm.upload_filecCs�tj�d�tj�d�dd�tt���D���tj�d�d�|j���|j	�tj
�����
�}Wd�n1s<wY|r^|D]}|tvrVtj�d�|��nqE||_|��tj�d	�d�|j���dS)
zchange the i/o transformationsz
--- Available Filters:
r�cs� �|]\}}d�||�VqdS)z---   {:<10} = {.__doc__}N�r�r��k�vr	r	r
r���
�
�
�z)Miniterm.change_filter.<locals>.<genexpr>z$
--- Enter new filter name(s) [{}]: r�Nz--- unknown filter: {!r}
r2)rryr'r�r�r�itemsrr�r�r�ry�lowerrjr)r�new_filtersrr	r	r
re�s"

���zMiniterm.change_filtercCs�tj�d�|j��|j�tj����}Wd�n1swY|rJzt	�
|�Wnty?tj�d�|��Ynw|�|�|�
|�tj�d�|j��tj�d�|j��dS)z"change encoding on the serial portz#
--- Enter new encoding name [{}]: Nz--- invalid encoding name: {}
r0r1)rryr'rr�r�r�ry�striprv�lookup�LookupErrorr'r+r�)r�new_encodingr	r	r
rf�s��

zMiniterm.change_encodingcCs�tj�d�tj��|j�F|jj}z
ttj�	��
��|j_Wnty?}ztj�d�|��||j_WYd}~nd}~ww|�
�Wd�dSWd�dS1sWwYdS)zchange the baudratez
--- Baudrate: z#--- ERROR setting baudrate: {} ---
N)rryr'r(r�r��baudraterhr�ryr�r�rr>)r�backuprr	r	r
ri�s
��
�"�zMiniterm.change_baudratec
Cs&|j�zt�}Wntyd}YnwWd�n1swY|r�||jjkr�|��|j��}z!tj|dd�}|�|�|jj	|_	|jj
|_
|��|jj|_Wnt
yu}ztj�d�|��|��WYd}~nd}~ww|j��||_tj�d�|jj��|��dSdSdS)z;Have a conversation with the user to change the serial portNT)�do_not_openz#--- ERROR opening new port: {} ---
z--- Port changed to: {} ---
)r�r�rDr�r�r�getSettingsDict�serial_for_url�applySettingsDictr3r4r{r5�	Exceptionrryr'rrr)rr��settings�
new_serialrr	r	r
rg�s8
���



��
�zMiniterm.change_portc
Cs�|��|j��tj�d�|jj��d}|jjsdtj�djt	|j
�d��|j��}||j
kr6|�
�n.|dvr=d}n'z|j��Wnty_}ztj�d�|��WYd}~nd}~ww|jjr|rl|��dS|��tj�d	�|jj��dS)
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 ---
)�exitrRTz--- ERROR opening port: {} ---
Nz--- Port opened: {} ---
)rr�rrryr'rr��is_openrrr�r$rr{r�rgr)r�do_change_portr�rr	r	r
rh�s4

�

���zMiniterm.suspend_portcCsZdjttdd�t|j�t|j�td�td�td�td�td�td	�td
�td�td�d
�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 versionrJrKrLrMrQrIrPrNrO)rir��menur3r4�brkr��info�uploadr�filterr�)r�getattrr�rrrrr	r	r
rds�zMiniterm.get_help_textN)Fr�r	)Fr�)r5r6r7r8rrrrrr�rrr'r+r>rrrErcrerfrirgrhrdr	r	r	r
r��s.




&Vr��%c
Cs�ddl}|jdd�}|jddd|d�|jd	dtd
|d�|�d�}|jd
gd�dd�ddd�|jddddd�|jddddd�|jdtd|d�|jdtd|d�|jd d!d"d#d$d%�|jd&dd'dd�|�d(�}|jd)d*dd+dd�|jd,d-d.d/d0d1�|jd2d3d4d5d6gd7�|jd8gd9�d:d�d;d<d�|jd=dd>dd�|�d?�}|jd@tdAdBdCdD�|jdEtdAdFdGdD�|�dH�}|jdIdJddKdd�|jdLddMdd�|��}|j|jkr�|�dN�|j	�rdO|j	v�rt
j�dP�t
j�dQ�
dRdS�tt���D���t
j�dQ�t
�dT�|j	}ndUg}	|jdu�s#|jdVk�rHzt�|_Wnt�y>t
j�dQ�|�dW�Yn
w|j�sH|�dX�zdtj|j|j|j|j|jd$dY�}	t|	dZ��sbdT|	_|jdu�r|j�s{t
j�d[�|j�rwd\nd]��|j|	_|j du�r�|j�s�t
j�d^�|j �r�d\nd]��|j |	_ t!|	tj"��r�|j#|	_#|	�$�Wn1tj%�y�}
z#t
j�d_�|j|
��|j&�rƂ|j'�s�t
�dT�ndV|_WYd}
~
nd}
~
wwn�qt(|	|j)|j*�+�|d`�}t,|j�|_-t,|j�|_.|j/|_/|�0|j1�|�2|j1�|j�s/t
j�daj|jdb��t
j�dc�t3|j-�t3|j.�t3|j.�t3dd���|�4�z|�
d$�Wn
t�yDYnw|j�sOt
j�de�|�
�|�5�dS)fzCommand line tool, entry pointrNz9Miniterm - A simple terminal program for the serial port.)�descriptionr�rEz(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�ErOrQrMcS�|��Sr/�r=rr	r	r
rG�zmain.<locals>.<lambda>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--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)srZ)r��metavarr�r�z-fz--filterr��NAMEzadd text transformation)r�r�r�r�z--eol)r�r�r�cSr�r/r�rr	r	r
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�r�z--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�csr�)z{:<10} = {.__doc__}Nr�r�r	r	r
r��r�zmain.<locals>.<genexpr>r�r��-z"user aborted and port is not givenzport is not given)rnr<r;r�rz--- forcing DTR {}
r.r/z--- 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_argumentrh�add_argument_group�
parse_args�	menu_char�	exit_char�errorr�rryr'r�r�rr�r�r�r�rDr�r�r�rnr<r;rm�timeoutr4�quietrr3�
isinstance�Serialr�r{r:�develop�askr�r�r�r�r�rrr�r'r�r+rrr)�default_port�default_baudrate�default_rts�default_dtrr��parser�groupr1r�rr�minitermr	r	r
�main-s����
�������
�����
��
��


�
�
���	�0�
�
��r��__main__)Nr�NN).�
__future__rrvr>rrr��serial.tools.list_portsr�serial.toolsrr�r��	NameError�input�chrr�r�objectrrr�r]rfr;r@r�r�r��NotImplementedErrorrr�r�r�r�r�r�r�r�r�rrr�r�r�r5r	r	r	r
�<module>sz	�

-
T
�
��
,
e
�

Spamworldpro Mini