serload.py: implement sending multiple files

This commit is contained in:
slederer 2025-04-02 00:59:11 +02:00
parent 136e3f74a0
commit 3c32dff0a7

View file

@ -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 <filename> <serial device>".format(sys.argv[0]))
print("should not get here")
if cmd is not None:
ser.close()