From 3c32dff0a7204b857347b0afdf434106424aee1e Mon Sep 17 00:00:00 2001 From: slederer Date: Wed, 2 Apr 2025 00:59:11 +0200 Subject: [PATCH] serload.py: implement sending multiple files --- utils/serload.py | 57 ++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 48 insertions(+), 9 deletions(-) diff --git a/utils/serload.py b/utils/serload.py index ddb8d60..eb16a6a 100644 --- a/utils/serload.py +++ b/utils/serload.py @@ -19,6 +19,8 @@ import sys import serial import time import random +import platform +import argparse blocksize = 32 BEL = 7 @@ -32,6 +34,13 @@ wordmask = 0xFFFFFFFF pattern = 0xAFFECAFE +def get_default_device(): + if platform.system() == 'Windows': + return 'COM4:' + else: + return '/dev/ttyUSB1' + + def serwrite_slow(databytes, ser): total = len(data) count = 1 @@ -268,20 +277,50 @@ def serdownload(fname, ser): f.close() +def mput(filenames, ser): + for f in filenames: + f_encoded = f.encode('utf8') + print("Setting filename", f) + resp = sendcommand(ser, b'S') + if len(resp) == 0: + print("timeout sending 'S' command") + return + if resp != b'S\r\n' and resp != b'> S\r\n': + print("unrecognized response to 'S' command, aborting") + return + resp = sendcommand(ser, f_encoded + b'\r') + if not f_encoded in resp: + print("unrecognized response to filename, aborting") + return + serload_bin(f, ser) + + resp = ser.read_until() + + time.sleep(0.5) + + if __name__ == "__main__": - cmd = None - if len(sys.argv) == 4: - cmd = sys.argv[1] - filename = sys.argv[2] - serial_port = sys.argv[3] - ser = serial.Serial(serial_port,115200, timeout=3) + argparser = argparse.ArgumentParser( + description='transfer files from/to the Tridora-CPU') + argparser.add_argument('-d', '--device', help='serial device', default=get_default_device()) + argparser.add_argument('command', choices=['get', 'put', 'mput']) + argparser.add_argument('filename', nargs='+') + args = argparser.parse_args() + + cmd = args.command + serial_port = args.device + filenames = args.filename + + ser = serial.Serial(serial_port,115200, timeout=3) if cmd == 'get': - serdownload(filename, ser) + serdownload(filenames[0], ser) elif cmd == 'put': - serload_bin(filename, ser) + serload_bin(filenames[0], ser) + elif cmd == 'mput': + mput(filenames, ser) else: - print("Usage: {} get|put ".format(sys.argv[0])) + print("should not get here") if cmd is not None: ser.close()