diff --git a/python/terminal_emulator.py b/python/terminal_emulator.py index b544796..92297ce 100755 --- a/python/terminal_emulator.py +++ b/python/terminal_emulator.py @@ -24,37 +24,33 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. """ import serial +import curses import time class TerminalEmulator: - def __init__(self, port, baudRate, fileName): - ser = serial.Serial(port, baudRate) - print "Serial port {} opened with baudrate {}".format(port, str(baudRate)) - - ser.write(73) + def __init__(self, w, ser): + w.clear() + w.move(0,0) while True: - x = ser.read() - print(x) - time.sleep(1) - ser.write(b'v') + try: + # read key and write to serial port + key = w.get_wch() # TODO: Mettere no delay mode + if key == 10 or (key > 31 and key < 256): + # Is a character + ser.write(key) + except Exception as e: + # No input + pass - # Open z80 bin file - ''' - with open(fileName, "rb") as f: - print "Sending command IMMEDIATE" - ser.write(b'I') - time.sleep(1) - print "Sending file {}".format(fileName) - byte = f.read(1) - while byte: - print(byte) - ser.write(byte) - byte = f.read(1) - f.close() + # read serial port and write to curses + if ser.inWaiting(): + b = ser.read(1) + if ord(b) > 31 or ord(b) == 10: + w.addch(b) - ser.close() - print "Completed" - ''' + stdscr.refresh() + + if __name__ == '__main__': import argparse @@ -64,4 +60,23 @@ if __name__ == '__main__': parser.add_argument('baudrate', help="arduino parallel monitor USB baudrate") args = parser.parse_args() - td = TerminalEmulator(args.port, args.baudrate, args.file) + # Init curses + stdscr = curses.initscr() + curses.noecho() + curses.cbreak() + stdscr.idlok(True) + stdscr.scrollok(True) + + try: + ser = serial.Serial(args.port, args.baudrate, timeout=0) + td = TerminalEmulator(stdscr, ser) + except Exception as e: + print(e) + finally: + # Close serial + ser.close() + # Stop curses + curses.nocbreak() + curses.echo() + curses.endwin() +