a ­ÇoY‰ã@sîddlZddlZddlZddlZddlZddlmZddlmZe  dd„¡ze Wne ype Z e ZYn0dd„ZGdd „d eƒZejd krÆddlZddlZGd d „d eƒZGd d„deƒZnDejdkrúddlZddlZddlZGdd„deƒZned ej¡ƒ‚Gdd„deƒZGdd„deƒZGdd„deƒZGdd„deƒZ Gdd„deƒZ!Gdd„de!ƒZ"Gdd„deƒZ#Gd d!„d!eƒZ$Gd"d#„d#eƒZ%eee d$œZ&ee!e"e#e$e%d%œZ'd&d'„Z(Gd(d)„d)eƒZ)d.d+d,„Z*e+d-krêe*ƒdS)/éN)Úcomports)Ú hexlify_codeccCs|dkrt ¡SdS)NZhexlify)rÚ getregentry©Úc©rú9/usr/lib/python3.9/site-packages/serial/tools/miniterm.pyÚór cCs.t|ƒ}|dkr"d tdƒ|¡St|ƒSdS)z)generate a readable description for a keyé z Ctrl+{:c}ú@N)ÚordÚformatÚrepr)Ú characterZ ascii_coderrrÚkey_descriptionsrc@sXeZdZdZdd„Zdd„Zdd„Zdd „Zd d „Zd d „Z dd„Z dd„Z dd„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©ÚselfrrrÚ__init__,s  zConsoleBase.__init__cCsdS)z.Set console to read single characters, no echoNrrrrrÚsetup3szConsoleBase.setupcCsdS)z Restore default console settingsNrrrrrÚcleanup6szConsoleBase.cleanupcCsdS)z"Read a single key from the consoleNrrrrrÚgetkey9szConsoleBase.getkeycCs|j |¡|j ¡dS)zWrite bytes (already encoded)N)rÚwriteÚflush)rZ byte_stringrrrÚ write_bytes=s zConsoleBase.write_bytescCs|j |¡|j ¡dS)z Write stringN)rr!r"©rÚtextrrrr!Bs zConsoleBase.writecCsdS)zCancel getkey operationNrrrrrÚcancelGszConsoleBase.cancelcCs | ¡|S©N)rrrrrÚ __enter__NszConsoleBase.__enter__cOs | ¡dSr')r)rÚargsÚkwargsrrrÚ__exit__RszConsoleBase.__exit__N) Ú__name__Ú __module__Ú __qualname__Ú__doc__rrrr r#r!r&r(r+rrrrr)srÚntc@s(eZdZdZdd„Zdd„Zdd„ZdS) ÚOutz$file-like wrapper that uses os.writecCs ||_dSr')Úfd)rr2rrrr]sz Out.__init__cCsdSr'rrrrrr"`sz Out.flushcCst |j|¡dSr')Úosr!r2)rÚsrrrr!csz Out.writeN)r,r-r.r/rr"r!rrrrr1Zsr1cs4eZdZ‡fdd„Zdd„Zdd„Zdd„Z‡ZS) ÚConsolecs’tt|ƒ ¡tjj ¡|_tjj ¡|_ tjj  d¡tjj  d¡t   d¡ttj ¡ƒdƒ|_t   d¡ttj ¡ƒdƒt_|jt_d|j_dS)NiéýúUTF-8Úreplace)Úsuperr5rÚctypesÚwindllÚkernel32ZGetConsoleOutputCPÚ _saved_ocpZ GetConsoleCPÚ _saved_icpÚSetConsoleOutputCPÚ SetConsoleCPÚcodecsÚ getwriterr1rrÚfilenorÚstderrÚencodingr©Ú __class__rrrgsúConsole.__init__cCs$tjj |j¡tjj |j¡dSr')r9r:r;r>r<r?r=rrrrÚ__del__sszConsole.__del__cCsDt ¡}|tdƒkrtdƒS|tdƒtdƒfvr:t ¡q|SqdS)Né é ré)ÚmsvcrtZgetwchÚunichr)rÚzrrrr ws   úConsole.getkeycCs$tjj ¡}tjj |ddd¡dS)NérIr)r9r:r;ZGetConsoleWindowZuser32Z PostMessageA)rZhwndrrrr&s úConsole.cancel)r,r-r.rrHr r&Ú __classcell__rrrErr5fs  r5Úposixcs<eZdZ‡fdd„Zdd„Zdd„Zdd„Zd d „Z‡ZS) r5csbtt|ƒ ¡tj ¡|_t |j¡|_ t   |j ¡tj dkrVt tjj¡tjƒ|_ntj|_dSr)r8r5rrÚstdinrBr2ÚtermiosÚ tcgetattrÚoldÚatexitÚregisterrrr@Ú getreaderrDÚ enc_stdinrrErrrs   rGcCsbt |j¡}|dtj@tj@tj@|d<d|dtj<d|dtj<t |jtj |¡dS)Nréér) rUrVr2ZICANONZECHOZISIGZVMINZVTIMEÚ tcsetattrZTCSANOW)rÚnewrrrr—s  $z Console.setupcCs$|j d¡}|tdƒkr tdƒ}|S)Nr\éé)r[ÚreadrM)rrrrrr žs  rOcCst |jtjd¡dS)Nó)ÚfcntlZioctlr2rUZTIOCSTIrrrrr&¤srQcCst |jtj|j¡dSr')rUr^r2Z TCSAFLUSHrWrrrrr§szConsole.cleanup) r,r-r.rrr r&rrRrrrErr5Œ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 portrr$rrrÚrx³sz Transform.rxcCs|S)ztext to be sent to serial portrr$rrrÚtx·sz Transform.txcCs|S)z(text to be sent but displayed on consolerr$rrrÚecho»szTransform.echoN)r,r-r.r/rfrgrhrrrrre±srec@seZdZdZdd„ZdS)ÚCRLFzENTER sends CR+LFcCs | dd¡S)NÚ ú ©r7r$rrrrgÃszCRLF.txN)r,r-r.r/rgrrrrriÀsric@s eZdZdZdd„Zdd„ZdS)ÚCRzENTER sends CRcCs | dd¡S)Nú rjrlr$rrrrfÊszCR.rxcCs | dd¡S)Nrjrnrlr$rrrrgÍszCR.txN©r,r-r.r/rfrgrrrrrmÇsrmc@seZdZdZdS)ÚLFzENTER sends LFN)r,r-r.r/rrrrrpÑsrpc@sBeZdZdZedd„edƒDƒƒZe dddœ¡dd „ZeZ d S) Ú NoTerminalz0remove typical terminal control codes from inputccs&|]}t|ƒdvr|d|fVqdS)ú  é$N)rM©Ú.0ÚxrrrÚ Ør zNoTerminal.r é!$é%$)r`é›cCs | |j¡Sr')Ú translateÚREPLACEMENT_MAPr$rrrrfßsz NoTerminal.rxN) r,r-r.r/ÚdictÚranger|ÚupdaterfrhrrrrrqÕsþÿrqc@s8eZdZdZedd„edƒDƒƒZe ddddœ¡d S) Ú NoControlsz%Remove all control codes, incl. CR+LFccs|]}|d|fVqdS)rsNrrtrrrrwèr zNoControls.r i#$rxry)r r`rzN)r,r-r.r/r}r~r|rrrrrr€åsýÿr€c@seZdZdZdd„ZeZdS)Ú PrintablezMShow decimal code for all non-ASCII characters and replace most control codescCsŠg}|D]v}d|kr dks*n|dvr6| |¡q|dkrV| tdt|ƒƒ¡q| dd„d t|ƒ¡Dƒ¡| d¡qd |¡S) Nú úrrrscss"|]}tdt|ƒdƒVqdS)i€ é0N)rMr )ruÚdrrrrwür zPrintable.rx..z{:d}Ú)ÚappendrMr ÚextendrÚjoin)rr%Úrrrrrrfôs  z Printable.rxN)r,r-r.r/rfrhrrrrrñs rc@s(eZdZdZdd„Zdd„Zdd„ZdS) ÚColorizez,Apply different colors for received and echocCsd|_d|_dS)Nzz)Ú input_colorÚ echo_colorrrrrrszColorize.__init__cCs |j|Sr')rŒr$rrrrf sz Colorize.rxcCs |j|Sr')rr$rrrrhsz Colorize.echoN)r,r-r.r/rrfrhrrrrr‹sr‹c@s eZdZdZdd„Zdd„ZdS)ÚDebugIOzPrint what is sent and receivedcCs$tj d t|ƒ¡¡tj ¡|S)Nz [RX:{}] ©rrCr!rrr"r$rrrrfs z DebugIO.rxcCs$tj d t|ƒ¡¡tj ¡|S)Nz [TX:{}] rr$rrrrgs z DebugIO.txNrorrrrrŽsrŽ)ÚcrlfZcrZlf)ZdirectÚdefaultZ nocontrolZ printableZcolorizeÚdebugcCs²tj d¡g}tttƒƒdƒD].\}\}}}tj d |||¡¡| |¡q tdƒ}z:t |ƒd}d|kr~t |ƒksntj d¡WqPWnt y¤Yn 0||}|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} z#--- Enter port index or full name: rz--- Invalid index! N) rrCr!Ú enumerateÚsortedrrr‡Ú raw_inputÚintÚlenÚ ValueError)ZportsÚnÚportZdescZhwidÚindexrrrÚ ask_for_port5s     rœc@sÀeZdZdZd1dd„Zdd„Zd d „Zd d „Zd d„Zd2dd„Z dd„Z dd„Z d3dd„Z d4dd„Z dd„Zdd„Zdd„Zd d!„Zd"d#„Zd$d%„Zd&d'„Zd(d)„Zd*d+„Zd,d-„Zd.d/„Zd0S)5ÚMinitermz Terminal application. Copy data from serial port to console and vice versa. Handle special keys from the console to show menu etc. FrrcCshtƒ|_||_||_d|_d|_d|_||_||_|  ¡d|_ d|_ d|_ d|_ d|_d|_d|_dS)NFr6éé)r5ÚconsoleÚserialrhÚrawÚinput_encodingÚoutput_encodingÚeolÚfiltersÚupdate_transformationsÚexit_characterÚmenu_characterÚaliveÚ _reader_aliveÚreceiver_threadÚ rx_decoderZ tx_decoder)rÚserial_instancerhr¥r¦rrrrTs zMiniterm.__init__cCs.d|_tj|jdd|_d|j_|j ¡dS)zStart reader threadTrf©ÚtargetÚnameN)r«Ú threadingÚThreadÚreaderr¬ÚdaemonÚstartrrrrÚ _start_readerfszMiniterm._start_readercCs*d|_t|jdƒr|j ¡|j ¡dS)z6Stop reader thread only, wait for clean exit of threadFÚ cancel_readN)r«Úhasattrr¡r¸r¬r‰rrrrÚ _stop_readerns  zMiniterm._stop_readercCs@d|_| ¡tj|jdd|_d|j_|j ¡|j  ¡dS)zstart worker threadsTrgr¯N) rªr·r²r³ÚwriterÚtransmitter_threadrµr¶r rrrrrr¶us  zMiniterm.startcCs d|_dS)zset flag to stop worker threadsFN)rªrrrrÚstopsz Miniterm.stopcCs2|j ¡|s.t|jdƒr$|j ¡|j ¡dS)z$wait for worker threads to terminater¸N)r¼r‰r¹r¡r¸r¬)rZ transmit_onlyrrrr‰ƒs    z Miniterm.joincCs|j ¡dSr')r¡Úcloserrrrr¾‹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)ruÚfrrrÚ sÿz3Miniterm.update_transformations..cSsg|] }|ƒ‘qSrr)ruÚtrrrrÁ’r N)ÚEOL_TRANSFORMATIONSr¥r¦Útx_transformationsÚlistÚreversedÚrx_transformations)rZtransformationsrrrr§Žs ÿzMiniterm.update_transformationsr7cCs||_t |¡|ƒ|_dS)zset encoding for received dataN)r£r@Úgetincrementaldecoderr­©rrDÚerrorsrrrÚset_rx_encoding•szMiniterm.set_rx_encodingcCs||_t |¡|ƒ|_dS)z!set encoding for transmitted dataN)r¤r@ÚgetincrementalencoderÚ tx_encoderrÉrrrÚset_tx_encodingšszMiniterm.set_tx_encodingcCsLtj dj|jd¡tj d |jjr,dnd|jjr:dnd|jjrHdnd¡¡zLtj d |jjrhdnd|jj rvdnd|jj r„dnd|jj r’dnd¡¡Wntj y°Yn0tj d |jj rÈdnd¡¡tj d |jjrædnd¡¡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)rrCr!rr¡ÚrtsÚdtrÚbreak_conditionZctsZdsrZriZcdÚSerialExceptionÚxonxoffÚrtsctsr£r¤r¥Úupperr‰r¦rrrrÚdump_port_settingsŸs. ÿ ý ü zMiniterm.dump_port_settingscCs˜zl|jrj|jrj|j |jjpd¡}|r|jr:|j |¡q|j  |¡}|j D]}|  |¡}qL|j  |¡qWn&tj y’d|_|j ¡‚Yn0dS)zloop and copy serial->consoler\FN)rªr«r¡rbZ in_waitingr¢r r#r­ÚdecoderÇrfr!rÙr&)rÚdatar%Útransformationrrrr´¸s     zMiniterm.readercCsìd}zÎ|jrÐz|j ¡}Wnty0d}Yn0|js:qÐ|rN| |¡d}q||jkr^d}q||jkrt| ¡qÐq|}|jD]}|  |¡}q~|j   |j   |¡¡|jr|}|jD]}| |¡}q²|j  |¡qWnd|_‚Yn0dS)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Ärgr¡r!rÍÚencoderh)rZ menu_activerr%ràZ echo_textrrrr»Ës:         zMiniterm.writercCsÄ||jks||jkr>|j |j |¡¡|jr:|j |¡n‚|dkrR| ¡nn|dvrnt j  |  ¡¡nR|dkr¦|jj |j_ t j  d  |jj ršdnd¡¡n|dkrÞ|jj |j_t j  d  |jjrÒdnd¡¡nâ|d kr|jj |j_t j  d   |jjrdnd¡¡n¦|d krP|j |_t j  d   |jrDdnd¡¡np|d krf| ¡nZ|dkrÈttƒ}| |j¡d}|t|ƒkršd}|||_t j  d  |j ¡¡¡| ¡nø|dkrÞ| ¡nâ|dkrô| ¡nÌ|dvr | ¡n¶|dvr | ¡n |dvr6| ¡nŠ|dkrVtj|j_| ¡nj|dkrvtj|j_| ¡nJ|dvr–tj |j_!| ¡n*|dvr¶tj"|j_!| ¡n |dvrÔtj#|j_!| ¡nì|dvròtj$|j_!| ¡nÎ|dvrtj%|j_!| ¡n°|dkr.tj&|j_'| ¡n’|dkrLtj(|j_'| ¡nt|dkrjtj)|j_'| ¡nV|d vrŠ|d!k|j_*| ¡n6|d"vrª|d#k|j_+| ¡nt 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: {} --- úú ÚpPZsSZbBÚ8Ú7ZeEZoOZmMZnNÚ1Ú2Ú3ZxXÚXZrRÚRz!--- unknown menu character {} -- N)-r©r¨r¡r!rÍrärhr Ú upload_filerrCÚ get_help_textrÖrr×rØÚ change_filterrÅrÃr›r¥r—rÜr§Úchange_encodingrÝÚ change_portÚ suspend_portÚchange_baudrateZ EIGHTBITSZbytesizeZ SEVENBITSZ PARITY_EVENÚparityZ PARITY_ODDZ PARITY_MARKZ PARITY_SPACEZ PARITY_NONEZ STOPBITS_ONEZstopbitsZ STOPBITS_TWOZSTOPBITS_ONE_POINT_FIVErÚrÛr)rrZmodesr¥rrrrãñsš "" $  "                                                   zMiniterm.handle_menu_keyc Cstj d¡tj ¡|jätj ¡ d¡}|ròz†t|dƒV}tj d  |¡¡|  d¡}|sbq†|j  |¡|j  ¡tj d¡qRWdƒn1sš0Ytj d  |¡¡Wn8t yð}z tj d   ||¡¡WYd}~n d}~00Wdƒn1s0YdS) z,Ask user for filenname and send its contentsz --- File to upload: rkÚrbz--- Sending file {} --- iÚ.Nz --- File {} sent --- z"--- ERROR opening file {}: {} --- ) rrCr!r"r rTÚreadlineÚrstripÚopenrrbr¡ÚIOError)rÚfilenamerÀÚblockÚerrrröEs"      ,zMiniterm.upload_filecCsÞtj d¡tj d dd„tt ¡ƒDƒ¡¡tj d d |j¡¡¡|j "tj   ¡  ¡  ¡}Wdƒn1sx0Y|rÀ|D]&}|tvrŠtj d t|ƒ¡¡qÀqŠ||_| ¡tj d  d |j¡¡¡dS) zchange the i/o transformationsz --- Available Filters: rjcss|]\}}d ||¡VqdS)z--- {:<10} = {.__doc__}N©r©ruÚkÚvrrrrw^sÿz)Miniterm.change_filter..z$ --- Enter new filter name(s) [{}]: r‚Nz--- unknown filter: {} rÕ)rrCr!r‰r”r¿Úitemsrr¦r rTrÚlowerÚsplitrr§)rZ new_filtersrÀrrrrø[s  þ 0zMiniterm.change_filtercCsÀtj d |j¡¡|jtj ¡ ¡}Wdƒn1s>0Y|r”zt   |¡Wn$t y~tj d |¡¡Yn0|  |¡|  |¡tj d |j¡¡tj d |j¡¡dS)z"change encoding on the serial portz# --- Enter new encoding name [{}]: Nz--- invalid encoding name: {} rÓrÔ)rrCr!rr£r rTrÚstripr@ÚlookupÚ LookupErrorrËrÎr¤)rZ new_encodingrrrrùns,   zMiniterm.change_encodingc Csªtj d¡tj ¡|jz|jj}zttj  ¡  ¡ƒ|j_Wn>t y~}z&tj d  |¡¡||j_WYd}~nd}~00|  ¡Wdƒn1sœ0YdS)zchange the baudratez --- Baudrate: z#--- ERROR setting baudrate: {} --- N)rrCr!r"r r¡Úbaudrater–rTrrr˜rrÝ)rZbackuprrrrrü~s  zMiniterm.change_baudratec Cs"|j2z tƒ}Wnty(d}Yn0Wdƒn1s>0Y|r||jjkr| ¡|j ¡}zBtj|dd}| |¡|jj |_ |jj |_ |  ¡|jj |_ Wn>t yî}z&tj d |¡¡| ¡WYd}~n0d}~00|j ¡||_tj d |jj¡¡| ¡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œrâr¡ršrºZgetSettingsDictÚserial_for_urlZapplySettingsDictrÖr×rrØÚ ExceptionrrCr!rr¾r·)rršZsettingsZ new_serialrrrrrúŒs,  (     zMiniterm.change_portc Csô| ¡|j ¡tj d |jj¡¡d}|jjsÄtj djt |j ƒd¡|j   ¡}||j krn|  ¡qÄn|dvr|d}qÄz|j ¡Wq,tyÀ}ztj d |¡¡WYd}~q,d}~00q,|rÒ| ¡n| ¡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 --- )ÚexitrîTz--- ERROR opening port: {} --- Nz--- Port opened: {} --- )rºr¡r¾rrCr!rršZis_openrr¨r r r½rrrúr·)rZdo_change_portr rrrrrûªs.  ÿ  * zMiniterm.suspend_portcCsZdjttddƒt|jƒt|jƒtdƒtdƒtdƒtdƒtdƒtd ƒtd ƒtd ƒtd ƒd S)zreturn the help textaQ --- pySerial ({version}) - miniterm - help --- --- {exit:8} Exit program --- {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 ZVERSIONzunknown versionrærçrèrérírårìrêrë) ÚversionrZmenurÖr×ZbrkrhÚinfoZuploadrÚfilterr¥)rÚgetattrr¡rr¨r©rrrrr÷És ÝzMiniterm.get_help_textN)Frr)F)r7)r7)r,r-r.r/rr·rºr¶r½r‰r¾r§rËrÎrÝr´r»rãrörørùrürúrûr÷rrrrrNs,     &Tré€%c CsŽddl}|jdd}|jddd|d|jd dtd |d | d ¡}|jd gd¢dd„ddd|jddddd|jddddd|jdtd|d|jdtd|d|jd dd!dd| d"¡}|jd#d$dd%dd|jd&d'd(d)d*d+|jd,d-d.d/d0gd1|jd2gd3¢d4d„d5d6d|jd7dd8dd| d9¡}|jd:td;d|jd?td;d@dAd>| dB¡}|jdCdDddEdd|jdFddGdd| ¡}|j|jkr²| dH¡|j rdI|j vr t j   dJ¡t j   dK  dLdM„tt ¡ƒDƒ¡¡t j   dK¡t  dN¡|j }ndOg}|jdus2|jdPkr|z tƒ|_Wn*tyht j   dK¡| dQ¡Yn0|js|| dR¡z²tj|j|j|j|j|jdSdT} t| dUƒs°dN| _|jdurê|jsât j   dV |jrÚdWndX¡¡|j| _|j dur$|jst j   dY |j rdWndX¡¡|j | _ |  !¡Wnftj"y”} zJt j   dZ t#|jƒ| ¡¡|j$rf‚|j%szt  dN¡ndP|_WYd} ~ nd} ~ 00qžqt&| |j'|j( )¡|d[} t*|jƒ| _+t*|jƒ| _,|j-| _-|  .|j/¡|  0|j/¡|js:t j   d\j| jd]¡t j   d^ t1| j+ƒt1| j,ƒt1| j,ƒt1d_ƒ¡¡|  2¡z|   dS¡WntydYn0|jszt j   d`¡|   ¡|  3¡dS)azCommand line tool, entry pointrNz9Miniterm - A simple terminal program for the serial port.)Ú descriptionršú?z(serial port name ('-' to show port list))ÚnargsÚhelpr‘rz#set baud rate, default: %(default)s)rÚtyperr‘z port settingsz--parity)ÚNÚEÚOÚSÚMcSs| ¡Sr'©rÜrrrrr r zmain..z*set parity, one of {N E O S M}, default: Nr )Úchoicesrrr‘z--rtsctsÚ store_truez)enable RTS/CTS flow control (default off)F)Úactionrr‘z --xonxoffz*enable software flow control (default off)z--rtsz2set initial RTS line state (possible values: 0, 1))rrr‘z--dtrz2set initial DTR line state (possible values: 0, 1)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)sr6)ÚdestÚmetavarrr‘z-fz--filterr‡ÚNAMEzadd text transformation)r(r+rr‘z--eol)rmrpricSs| ¡Sr'r%rrrrr Jr zend of line moderiz--rawz)Do no apply any encodings/transformationsZhotkeysz --exit-charZNUMzWUnicode of special character that is used to exit the application, default: %(default)srž)rr+rr‘z --menu-charz_Unicode code of special character that is used to control miniterm (menu), default: %(default)srŸZ diagnosticsz-qz--quietzsuppress non-error messagesz --developzshow Python traceback on errorz.--exit-char can not be the same as --menu-charrzAvailable filters: rjcss|]\}}d ||¡VqdS)z{:<10} = {.__doc__}Nrrrrrrwzsÿzmain..r\r‘ú-z"user aborted and port is not givenzport is not givenT)rýrÛrÚrr¸z--- forcing DTR {} rÑrÒz--- forcing RTS {} zcould not open port {}: {} )rhr¥r¦zP--- Miniterm on {p.name} {p.baudrate},{p.bytesize},{p.parity},{p.stopbits} --- rÏz6--- Quit: {} | Menu: {} | Help: {} followed by {} --- úz --- exit --- )4ÚargparseÚArgumentParserÚ add_argumentr–Úadd_argument_groupÚ parse_argsZ menu_charZ exit_charÚerrorrrrCr!r‰r”r¿r rršrœrâr¡rrrýrÛrÚr¹Útimeoutr×ÚquietrrÖrrÙrZdevelopZaskrrhr¥r rMr¨r©r¢rËr)rÎrr¶r¾) Z default_portZdefault_baudrateZ default_rtsZ default_dtrr/ÚparserÚgroupr)r¦r®rZminitermrrrÚmainõsˆÿüû ûüüüüü üûûûü ûû üü    þ      ú     ü     ÿ ü r9Ú__main__)NrNN),r@r3rr²r¡Zserial.tools.list_portsrZ serial.toolsrrYr•Ú NameErrorÚinputÚchrrMrÚobjectrr±rLr9r1r5rXrUrdÚNotImplementedErrorrÚplatformrerirmrprqr€rr‹rŽrÃr¿rœrr9r,rrrrÚ sp     -  !  ÿ  ýú * [