URL
https://opencores.org/ocsvn/openmsp430/openmsp430/trunk
Subversion Repositories openmsp430
[/] [openmsp430/] [trunk/] [fpga/] [xilinx_diligent_s3board/] [software/] [ta_uart/] [miniterm.py] - Rev 204
Go to most recent revision | Compare with Previous | Blame | View Log
#!/usr/bin/env python #very simple serial terminal #http://pyserial.sf.net package required #input characters are sent directly, received characters are displays as is #baudrate and echo configuartion is done through globals: #<cliechti@gmx.net> import sys, os, serial, threading, getopt #EXITCHARCTER = '\x1b' #ESC EXITCHARCTER = '\x04' #ctrl+d #first choosea platform dependant way to read single characters from the console if os.name == 'nt': #sys.platform == 'win32': import msvcrt def getkey(): while 1: if echo: z = msvcrt.getche() else: z = msvcrt.getch() if z == '\0' or z == '\xe0': #functions keys msvcrt.getch() else: return z elif os.name == 'posix': #XXX: Untested code derrived from the Python FAQ.... # import termios, TERMIOS, sys, os import termios, sys, os fd = sys.stdin.fileno() old = termios.tcgetattr(fd) new = termios.tcgetattr(fd) new[3] = new[3] & ~TERMIOS.ICANON & ~TERMIOS.ECHO new[6][TERMIOS.VMIN] = 1 new[6][TERMIOS.VTIME] = 0 termios.tcsetattr(fd, TERMIOS.TCSANOW, new) s = '' # We'll save the characters typed and add them to the pool. def getkey(): c = os.read(fd, 1) if echo: sys.stdout.write(c) return c def clenaup_console(): termios.tcsetattr(fd, TERMIOS.TCSAFLUSH, old) sys.exitfunc = clenaup_console #terminal modes have to be restored on exit... else: raise "Sorry no implementation for your platform (%s) available." % sys.platform def reader(): """loop forever and copy serial->console""" while 1: sys.stdout.write(s.read()) def writer(): """loop forever and copy console->serial""" while 1: c = getkey() if c == EXITCHARCTER: break #exit on esc s.write(c) #send character if convert_outgoing_cr and c == '\r': s.write('\n') if echo: sys.stdout.write('\n') #print a short help message def usage(): print >>sys.stderr, """USAGE: %s [options] Simple Terminal Programm for the serial port. options: -p, --port=PORT: port, a number, defualt = 0 or a device name -b, --baud=BAUD: baudrate, default 9600 -r, --rtscts: enable RTS/CTS flow control (default off) -x, --xonxoff: enable software flow control (default off) -e, --echo: enable local echo (default off) -c, --cr: disable CR -> CR+LF translation """ % sys.argv[0] if __name__ == '__main__': #parse command line options try: opts, args = getopt.getopt(sys.argv[1:], "hp:b:rxec", ["help", "port=", "baud=", "rtscts", "xonxoff", "echo", "cr"]) except getopt.GetoptError: # print help information and exit: usage() sys.exit(2) port = 0 baudrate = 9600 echo = 0 convert_outgoing_cr = 1 rtscts = 0 xonxoff = 0 for o, a in opts: if o in ("-h", "--help"): #help text usage() sys.exit() elif o in ("-p", "--port"): #specified port try: port = int(a) except ValueError: port = a elif o in ("-b", "--baud"): #specified baudrate try: baudrate = int(a) except ValueError: raise ValueError, "Baudrate must be a integer number" elif o in ("-r", "--rtscts"): rtscts = 1 elif o in ("-x", "--xonxoff"): xonxoff = 1 elif o in ("-e", "--echo"): echo = 1 elif o in ("-c", "--cr"): convert_outgoing_cr = 0 try: s = serial.Serial(port, baudrate, rtscts=rtscts, xonxoff=xonxoff) except: print "could not open port" sys.exit(1) print "--- Miniterm --- type Ctrl-D to quit" #start serial->console thread r = threading.Thread(target=reader) r.setDaemon(1) r.start() #enter console->serial loop writer() print "\n--- exit ---"
Go to most recent revision | Compare with Previous | Blame | View Log