Sindbad~EG File Manager

Current Path : /usr/local/lib/python3.6/site-packages/serial/tools/__pycache__/
Upload File :
Current File : //usr/local/lib/python3.6/site-packages/serial/tools/__pycache__/miniterm.cpython-36.pyc

3

 ��c�@sddlmZddlZddlZddlZddlZddlZddlmZddl	m
Z
ejdd��yeWne
k
r~eZeZYnXdd�ZGd	d
�d
e�Zejdkr�ddlZddlZddlZGdd
�d
e�ZGdd�de�ZnFejdk�rddlZddlZddlZGdd�de�Znedjej���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,�dS)0�)�absolute_importN)�comports)�
hexlify_codeccCs|dkrtj�SdS)N�hexlify)r�getregentry)�c�r�9/tmp/pip-build-_uu8ur7s/pyserial/serial/tools/miniterm.py�<lambda>sr
cCs.t|�}|dkr"djtd�|�St|�SdS)z)generate a readable description for a key� z	Ctrl+{:c}�@N)�ord�format�repr)�	characterZ
ascii_coderrr	�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)rr)�sys�version_info�stdout�buffer�byte_output�output)�selfrrr	�__init__.s
zConsoleBase.__init__cCsdS)z.Set console to read single characters, no echoNr)rrrr	�setup5szConsoleBase.setupcCsdS)z Restore default console settingsNr)rrrr	�cleanup8szConsoleBase.cleanupcCsdS)z"Read a single key from the consoleNr)rrrr	�getkey;szConsoleBase.getkeycCs|jj|�|jj�dS)zWrite bytes (already encoded)N)r�write�flush)rZbyte_stringrrr	�write_bytes?szConsoleBase.write_bytescCs|jj|�|jj�dS)zWrite stringN)rrr )r�textrrr	rDszConsoleBase.writecCsdS)zCancel getkey operationNr)rrrr	�cancelIszConsoleBase.cancelcCs|j�|S)N)r)rrrr	�	__enter__PszConsoleBase.__enter__cOs|j�dS)N)r)r�args�kwargsrrr	�__exit__TszConsoleBase.__exit__N)
�__name__�
__module__�__qualname__�__doc__rrrrr!rr#r$r'rrrr	r+sr�ntc@s(eZdZdZdd�Zdd�Zdd�ZdS)	�Outz$file-like wrapper that uses os.writecCs
||_dS)N)�fd)rr.rrr	r`szOut.__init__cCsdS)Nr)rrrr	r csz	Out.flushcCstj|j|�dS)N)�osrr.)r�srrr	rfsz	Out.writeN)r(r)r*r+rr rrrrr	r-]sr-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�Qcs@tt|�j�tjjj�|_tjjj�|_	tjjj
d�tjjjd�tj
�dkr�ttj�jd�d�dkr�d}ddlj}t|d�s�tj|j�|_tjjj}tjjj}tjjj}|j�}||d�tj|��|j|@dkr�||d
�|j|B�||_tjd
�tt j!j"��d�|_#tjd
�tt j$j"��d�t _$|j#t _!d
|j#_%dS)Ni��10�.�iZ)�r�LPDWORD�zUTF-8�replacei����i����)&�superr1r�ctypes�windll�kernel32ZGetConsoleOutputCP�
_saved_ocpZGetConsoleCP�
_saved_icp�SetConsoleOutputCP�SetConsoleCP�platform�release�int�version�splitZctypes.wintypes�wintypes�hasattr�POINTERZDWORDrI�SetConsoleMode�GetConsoleMode�GetStdHandle�byref�value�	_saved_cm�codecs�	getwriterr-rr�filenor�stderr�encoding)rZ"ENABLE_VIRTUAL_TERMINAL_PROCESSINGrYr\r]r^�mode)�	__class__rr	r�s,&




zConsole.__init__cCsZtjjj|j�tjjj|j�y tjjjtjjjd�|j	�Wnt
k
rTYnXdS)NrJi����)rMrNrOrRrPrSrQr\r^ra�AttributeError)rrrr	�__del__�s zConsole.__del__cCs�x�tj�}|td�krtd�S|td�ks6|td�krzy,tj�}|td�krV|j|S|j|SWq~tk
rvYq~Xq|SqWdS)N�
�
r��)�msvcrt�getwch�unichr�fncodes�navcodes�KeyError)r�z�coderrr	r�s
zConsole.getkeycCs$tjjj�}tjjj|ddd�dS)N�rkr)rMrNrOZGetConsoleWindowZuser32ZPostMessageA)rZhwndrrr	r#�szConsole.cancel)
r(r)r*rqrrrrjrr#�
__classcell__rr)rhr	r1is0r1�posixcs<eZdZ�fdd�Zdd�Zdd�Zdd�Zd	d
�Z�ZS)r1csbtt|�j�tjj�|_tj|j�|_	t
j|j�tj
dkrVtjtjj�tj�|_ntj|_dS)Nrr)rr)rLr1rr�stdinrdr.�termios�	tcgetattr�old�atexit�registerrrrb�	getreaderrf�	enc_stdin)r)rhrr	r�s
zConsole.__init__cCsbtj|j�}|dtj@tj@tj@|d<d|dtj<d|dtj<tj|jtj	|�dS)Nr��r)
rzr{r.�ICANON�ECHO�ISIG�VMIN�VTIME�	tcsetattr�TCSANOW)r�newrrr	r�s
$z
Console.setupcCs$|jjd�}|td�kr td�}|S)Nr���)r��readrp)rrrrr	r�szConsole.getkeycCstj|jtjd�dS)N�)�fcntl�ioctlr.rz�TIOCSTI)rrrr	r#�szConsole.cancelcCstj|jtj|j�dS)N)rzr�r.�	TCSAFLUSHr|)rrrr	r�szConsole.cleanup)	r(r)r*rrrr#rrwrr)rhr	r1�s

z9Sorry no implementation for your platform ({}) available.c@s(eZdZdZdd�Zdd�Zdd�ZdS)	�	Transformz&do-nothing: forward all data unchangedcCs|S)ztext received from serial portr)rr"rrr	�rx�szTransform.rxcCs|S)ztext to be sent to serial portr)rr"rrr	�tx�szTransform.txcCs|S)z(text to be sent but displayed on consoler)rr"rrr	�echo�szTransform.echoN)r(r)r*r+r�r�r�rrrr	r��sr�c@seZdZdZdd�ZdS)�CRLFzENTER sends CR+LFcCs|jdd�S)N�
z
)rK)rr"rrr	r��szCRLF.txN)r(r)r*r+r�rrrr	r��sr�c@s eZdZdZdd�Zdd�ZdS)�CRzENTER sends CRcCs|jdd�S)N�
r�)rK)rr"rrr	r�szCR.rxcCs|jdd�S)Nr�r�)rK)rr"rrr	r�szCR.txN)r(r)r*r+r�r�rrrr	r��sr�c@seZdZdZdS)�LFzENTER sends LFN)r(r)r*r+rrrr	r�sr�c@sBeZdZdZedd�ed�D��Zejddd��dd	�ZeZ	d
S)�
NoTerminalz0remove typical terminal control codes from inputccs&|]}t|�dkr|d|fVqdS)z
	i$N)rp)�.0�xrrr	�	<genexpr>szNoTerminal.<genexpr>ri!$i%$)r��cCs|j|j�S)N)�	translate�REPLACEMENT_MAP)rr"rrr	r�sz
NoTerminal.rxN)
r(r)r*r+�dict�ranger��updater�r�rrrr	r�s
r�c@s8eZdZdZedd�ed�D��Zejdddd��d	S)
�
NoControlsz%Remove all control codes, incl. CR+LFccs|]}|d|fVqdS)i$Nr)r�r�rrr	r�szNoControls.<genexpr>ri#$i!$i%$)rr�r�N)r(r)r*r+r�r�r�r�rrrr	r�sr�c@seZdZdZdd�ZeZdS)�	PrintablezMShow decimal code for all non-ASCII characters and replace most control codescCs�g}x�|D]x}d|ko dkns.|dkr:|j|�q
|dkrZ|jtdt|���q
|jdd�djt|��D��|jd�q
Wdj|�S)	N� �z
	i$css"|]}tdt|�d�VqdS)i� �0N)rpr
)r��drrr	r�2szPrintable.rx.<locals>.<genexpr>z{:d}�)�appendrpr
�extendr�join)rr"�rrrrr	r�*s
 zPrintable.rxN)r(r)r*r+r�r�rrrr	r�'sr�c@s(eZdZdZdd�Zdd�Zdd�ZdS)	�Colorizez,Apply different colors for received and echocCsd|_d|_dS)Nzz)�input_color�
echo_color)rrrr	r<szColorize.__init__cCs
|j|S)N)r�)rr"rrr	r�AszColorize.rxcCs
|j|S)N)r�)rr"rrr	r�Dsz
Colorize.echoN)r(r)r*r+rr�r�rrrr	r�9sr�c@s eZdZdZdd�Zdd�ZdS)�DebugIOzPrint what is sent and receivedcCs tjjdj|��tjj�|S)Nz [RX:{!r}] )rrerrr )rr"rrr	r�Ks
z
DebugIO.rxcCs tjjdj|��tjj�|S)Nz [TX:{!r}] )rrerrr )rr"rrr	r�Ps
z
DebugIO.txN)r(r)r*r+r�r�rrrr	r�Hsr�)�crlf�cr�lf)�direct�defaultZ	nocontrol�	printableZcolorize�debugcCs�tjjd�g}xBttt��d�D].\}\}}}tjjdj|||��|j|�q"Wxdtd�}y:t	|�d}d|ko�t
|�kns�tjjd�wVWntk
r�Yn
X||}|SdS)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!
N)rrer�	enumerate�sortedrrr��	raw_inputrV�len�
ValueError)Zports�n�port�descZhwid�indexrrr	�ask_for_portks  r�c@s�eZdZdZddffdd�Zdd�Zdd	�Zd
d�Zdd
�Zd0dd�Z	dd�Z
dd�Zd1dd�Zd2dd�Z
dd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+d,�Zd-d.�Zd/S)3�Minitermz�    Terminal application. Copy data from serial port to console and vice versa.
    Handle special keys from the console to show menu etc.
    Fr�cCspt�|_||_||_d|_d|_d|_||_||_|j	�t
d�|_t
d�|_d|_
d|_d|_d|_d|_dS)NFzUTF-8��)r1�console�serialr��raw�input_encoding�output_encoding�eol�filters�update_transformationsrp�exit_character�menu_character�alive�
_reader_alive�receiver_thread�
rx_decoderZ
tx_decoder)r�serial_instancer�r�r�rrr	r�s 

zMiniterm.__init__cCs.d|_tj|jdd�|_d|j_|jj�dS)zStart reader threadTr�)�target�nameN)r��	threading�Thread�readerr��daemon�start)rrrr	�
_start_reader�szMiniterm._start_readercCs*d|_t|jd�r|jj�|jj�dS)z6Stop reader thread only, wait for clean exit of threadF�cancel_readN)r�rZr�r�r�r�)rrrr	�_stop_reader�s
zMiniterm._stop_readercCs@d|_|j�tj|jdd�|_d|j_|jj�|jj	�dS)zstart worker threadsTr�)r�r�N)
r�r�r�r��writer�transmitter_threadr�r�r�r)rrrr	r��s
zMiniterm.startcCs
d|_dS)zset flag to stop worker threadsFN)r�)rrrr	�stop�sz
Miniterm.stopcCs2|jj�|s.t|jd�r$|jj�|jj�dS)z$wait for worker threads to terminater�N)r�r�rZr�r�r�)rZ
transmit_onlyrrr	r��s


z
Miniterm.joincCs|jj�dS)N)r��close)rrrr	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��frrr	�
<listcomp>�sz3Miniterm.update_transformations.<locals>.<listcomp>cSsg|]
}|��qSrr)r��trrr	r��sN)�EOL_TRANSFORMATIONSr�r��tx_transformations�list�reversed�rx_transformations)rZtransformationsrrr	r��szMiniterm.update_transformationsrKcCs||_tj|�|�|_dS)zset encoding for received dataN)r�rb�getincrementaldecoderr�)rrf�errorsrrr	�set_rx_encoding�szMiniterm.set_rx_encodingcCs||_tj|�|�|_dS)z!set encoding for transmitted dataN)r�rb�getincrementalencoder�
tx_encoder)rrfr�rrr	�set_tx_encoding�szMiniterm.set_tx_encodingcCsNtjjdj|jd��tjjdj|jjr,dnd|jjr:dnd|jjrHdnd��yLtjjdj|jjrhdnd|jj	rvdnd|jj
r�dnd|jjr�dnd��Wntjk
r�YnXtjjdj|jj
r�dnd��tjjdj|jjr�dnd��tjjd	j|j��tjjd
j|j��tjjdj|jj���tjjdjd
j|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: {}
z--- serial input encoding: {}
z--- serial output encoding: {}
z--- EOL: {}
z--- filters: {}
r�N)rrerrr��rts�dtr�break_conditionZctsZdsr�riZcd�SerialException�xonxoff�rtsctsr�r�r��upperr�r�)rrrr	�dump_port_settings�s(


zMiniterm.dump_port_settingscCs�ytxn|jrp|jrp|jj|jjp d�}|r|jr<|jj|�q|jj	|�}x|j
D]}|j|�}qPW|jj|�qWWn(tj
k
r�d|_|jj��YnXdS)zloop and copy serial->consoler�FN)r�r�r�r�Z
in_waitingr�r�r!r��decoder�r�rr�r#)r�datar"�transformationrrr	r��s
zMiniterm.readercCs�d}y�x�|jr�y|jj�}Wntk
r4d}YnX|js>P|rR|j|�d}q||jkrbd}q||jkrx|j�Pq|}x|jD]}|j	|�}q�W|j
j|jj
|��|jr|}x|jD]}|j|�}q�W|jj|�qWWnd|_�YnXdS)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�r�r�r�r�rr��encoder�)rZmenu_activerr"rZ	echo_textrrr	r�s:



zMiniterm.writercCs�||jks||jkr>|jj|jj|��|jr:|jj|��n�|dkrR|j��n�|dkrnt	j
j|j���nh|dkr�|jj|j_t	j
jdj
|jjr�dnd���n0|dkr�|jj|j_t	j
jdj
|jjr�dnd���n�|d	k�r|jj|j_t	j
jd
j
|jj�rdnd���n�|dk�rP|j|_t	j
jdj
|j�rDdnd���n�|d
k�rf|j��np|dk�r�tt�}|j|j�d}|t|�k�r�d}|||_t	j
jdj
|jj���|j��n|dk�r�|j��n�|dk�r�|j��n�|dk�r
|j��n�|dk�r |j��n�|dk�r6|j��n�|dk�rVtj|j_|j��n�|dk�rvtj|j_|j��n`|dk�r�tj |j_!|j��n@|dk�r�tj"|j_!|j��n |dk�r�tj#|j_!|j��n|dk�r�tj$|j_!|j�n�|dk�rtj%|j_!|j�n�|dk�r0tj&|j_'|j�n�|dk�rNtj(|j_'|j�n�|d k�rltj)|j_'|j�nj|d!k�r�|d"k|j_*|j�nJ|d#k�r�|d$k|j_+|j�n*|d%k�r�|j,�nt	j
jd&j
t-|���d'S)(z"Implement a simple menu / settings�zhH?�z--- RTS {} ---
r�r��z--- DTR {} ---
�z--- BREAK {} ---
�z--- local echo {} ---
��r�rz--- EOL: {} ---
��	�pPZzZZbB�8�7ZeEZoOZmMZsSZnN�1�2�3�xX�XZrRrAZqQz!--- unknown menu character {} --
N).r�r�r�rr�rr�r��upload_filerre�
get_help_textr�rr�r��
change_filterr�r�r�r�r�r�r��change_encodingr�change_port�suspend_port�change_baudrateZ	EIGHTBITSZbytesizeZ	SEVENBITSZPARITY_EVEN�parityZ
PARITY_ODDZPARITY_MARKZPARITY_SPACEZPARITY_NONEZSTOPBITS_ONEZstopbitsZSTOPBITS_TWOZSTOPBITS_ONE_POINT_FIVEr�r�r�r)rr�modesr�rrr	r's�""
$

"






































zMiniterm.handle_menu_keycCs�tjjd�tjj�|j��tjj�jd�}|r�yvt|d��P}tjjdj	|��x6|j
d�}|sdP|jj|�|jj�tjjd�qTWWdQRXtjjdj	|��Wn6tk
r�}ztjjd	j	||��WYdd}~XnXWdQRXdS)
z,Ask user for filenname and send its contentsz
--- File to upload: z
�rbz--- Sending file {} ---
irFNz
--- File {} sent ---
z"--- ERROR opening file {}: {} ---
)
rrerr r�ry�readline�rstrip�openrr�r��IOError)r�filenamer��block�errr	r}s$


zMiniterm.upload_filecCs�tjjd�tjjdjdd�ttj��D���tjjdjdj|j���|j	�tj
j�j�j
�}WdQRX|r�x6|D] }|tkrxtjjdj|��PqxW||_|j�tjjd	jdj|j���dS)
zchange the i/o transformationsz
--- Available Filters:
r�css|]\}}dj||�VqdS)z---   {:<10} = {.__doc__}N)r)r��k�vrrr	r��sz)Miniterm.change_filter.<locals>.<genexpr>z$
--- Enter new filter name(s) [{}]: r�Nz--- unknown filter: {!r}
z--- filters: {}
)rrerr�r�r��itemsrr�r�ryr#�lowerrXr�)rZnew_filtersr�rrr	r�s

zMiniterm.change_filtercCs�tjjdj|j��|j�tjj�j�}WdQRX|r�yt	j
|�Wn&tk
rltjjdj|��YnX|j|�|j
|�tjjdj|j��tjjdj|j��dS)z"change encoding on the serial portz#
--- Enter new encoding name [{}]: Nz--- invalid encoding name: {}
z--- serial input encoding: {}
z--- serial output encoding: {}
)rrerrr�r�ryr#�striprb�lookup�LookupErrorr�r�r�)rZnew_encodingrrr	r�s

zMiniterm.change_encodingcCs�tjjd�tjj�|j�n|jj}yttjj	�j
��|j_Wn<tk
r|}z tjjdj|��||j_WYdd}~Xn
X|j
�WdQRXdS)zchange the baudratez
--- Baudrate: z#--- ERROR setting baudrate: {} ---
N)rrerr r�r��baudraterVryr#r.r�rr)r�backupr)rrr	r�s
zMiniterm.change_baudratecCs|j�*y
t�}Wntk
r*d}YnXWdQRX|oD||jjk�r|j�|jj�}yBtj|dd�}|j|�|jj	|_	|jj
|_
|j�|jj|_Wn<t
k
r�}z tjjdj|��|j�WYdd}~Xn(X|jj�||_tjjdj|jj��|j�dS)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�rr�r�r�ZgetSettingsDict�serial_for_urlZapplySettingsDictr�r�r%r��	Exceptionrrerrr�r�)rr��settingsZ
new_serialr)rrr	r�s,





zMiniterm.change_portcCs�|j�|jj�tjjdj|jj��d}x�|jjs�tjjdjt	|j
�d��|jj�}||j
krp|j
�Pn|dkr~d}Py|jj�Wq.tk
r�}ztjjdj|��WYdd}~Xq.Xq.W|r�|j�n|j�tjjd	j|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 ---
)�exitrTz--- ERROR opening port: {} ---
Nz--- Port opened: {} ---
)r�r�r�rrerrr�Zis_openrr�r�rr�r%r5rr�)rZdo_change_portr*r)rrr	r�s,




(
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 versionr	r
rrrrrr
r)rWr7�menur�r�Zbrkr��info�uploadr�filterr�)r�getattrr�rr�r�)rrrr	rszMiniterm.get_help_textN)F)rK)rK)r(r)r*r+rr�r�r�r�r�r�r�r�r�rr�r�rrrrrrrrrrrr	r��s,



&Vr��%cCs�ddl}|jdd�}|jddd|d�|jd	dtd
|d�|jd�}|jd
dddddgdd�ddd�|jddddd�|jddddd�|jdtd|d �|jd!td"|d �|jd#d$d%d&d'd(�|jd)dd*dd�|jd+�}|jd,d-dd.dd�|jd/d0d1d2d3d4�|jd5d6d7d8d9gd:�|jd;d<d=d>gd?d�d@d>d�|jdAddBdd�|jdC�}|jdDtdEdFdGdH�|jdItdEdJdKdH�|jdL�}|jdMdNddOdd�|jdPddQdd�|j�}|j|jk�r�|jdR�|j	�r0dS|j	k�r(t
jjdT�t
jjdUj
dVdW�ttj��D���t
jjdU�t
jdX�|j	}ndYg}�x�|jdk�sR|jdZk�r�yt�|_Wn,tk
�r�t
jjdU�|jd[�YnX|j�s�|jd\�y�tj|j|j|j|j|jd'd]�}	t|	d^��s�dX|	_|jdk	�r|j�st
jjd_j|j�r�d`nda��|j|	_|j dk	�rF|j�s>t
jjdbj|j �r6d`nda��|j |	_ t!|	tj"��r\|j#|	_#|	j$�Wn`tj%k
�r�}
z@t
jjdcj|j|
��|j&�r��|j'�s�t
jdX�ndZ|_WYdd}
~
XnXP�q:Wt(|	|j)|j*j+�|dd�}t,|j�|_-t,|j�|_.|j/|_/|j0|j1�|j2|j1�|j�slt
jjdej|jdf��t
jjdgjt3|j-�t3|j.�t3|j.�t3dh���|j4�y|j
d'�Wntk
�r�YnX|j�s�t
jjdi�|j
�|j5�dS)jzCommand line tool, entry pointrNz9Miniterm - A simple terminal program for the serial port.)�descriptionr�r6z(serial port name ("-" to show port list))�nargs�helpr�r1z#set baud rate, default: %(default)s)r@�typerAr�z
port settingsz--parity�N�Er@rBr>cSs|j�S)N)r�)rrrr	r
Gszmain.<locals>.<lambda>z*set parity, one of {N E O S M}, default: N)�choicesrBrAr�z--rtscts�
store_truez)enable RTS/CTS flow control (default off)F)�actionrAr�z	--xonxoffz*enable software flow control (default off)z--rtsz2set initial RTS line state (possible values: 0, 1))rBrAr�z--dtrz2set initial DTR line state (possible values: 0, 1)z--non-exclusive�	exclusive�store_falsez disable locking for native portsT)�destrGrAr�z--askz"ask again for port when open failsz
data handlingz-ez--echozenable local echo (default off)z
--encoding�serial_port_encodingZCODECzXset the encoding for the serial port (e.g. hexlify, Latin1, UTF-8), default: %(default)szUTF-8)rJ�metavarrAr�z-fz--filterr��NAMEzadd text transformation)rGrLrAr�z--eolr�r�r�cSs|j�S)N)r�)rrrr	r
�szend of line modez--rawz)Do no apply any encodings/transformationsZhotkeysz--exit-charZNUMzWUnicode of special character that is used to exit the application, default: %(default)sr�)rBrLrAr�z--menu-charz_Unicode code of special character that is used to control miniterm (menu), default: %(default)sr�Zdiagnosticsz-qz--quietzsuppress non-error messagesz	--developzshow Python traceback on errorz.--exit-char can not be the same as --menu-charrAzAvailable filters:
r�css|]\}}dj||�VqdS)z{:<10} = {.__doc__}N)r)r�r*r+rrr	r��szmain.<locals>.<genexpr>r�r��-z"user aborted and port is not givenzport is not given)r r�r�r3r�z--- 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_argumentrV�add_argument_group�
parse_argsZ	menu_charZ	exit_char�errorr<rrerr�r�r�r,r7r�r�rr�r4r1r r�r�rZ�timeoutr��quietrr��
isinstanceZSerialrHr%r��develop�askr�r�r�r-rpr�r�r�r�rKr�rr�r�)�default_portZdefault_baudrateZdefault_rtsZdefault_dtrrP�parser�groupr%r�r�r)Zminitermrrr	�main-sn









r^�__main__)Nr>NN).�
__future__rrbr/rr�r�Zserial.tools.list_portsrZserial.toolsrr~r��	NameError�input�chrrpr�objectrr�rnrMrTr-r1r}rzr��NotImplementedErrorrr�r�r�r�r�r�r�r�r�r�r�r�r�r^r(rrrr	�<module>
sn

-
T
,
e


Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists