1
0

Communication

This commit is contained in:
Aiden
2026-05-26 13:16:50 +10:00
parent 85732f8754
commit 4e0ef92e25
6 changed files with 91 additions and 20 deletions

View File

@@ -12,6 +12,7 @@ from typing import Iterable, TextIO
CHECKSUM_SEED = 0x5A
FRAME_LENGTH = 6
SERIAL_PARITY_CHOICES = ("N", "E", "O")
CONNECT_LCD_SEQUENCE = (
bytes.fromhex("04000040001E"),
@@ -202,6 +203,7 @@ def build_arg_parser() -> argparse.ArgumentParser:
)
parser.add_argument("--port", default="COM5", help="RS232 serial port connected to the RCP")
parser.add_argument("--baud", type=int, default=38400, help="RCP serial baud rate")
add_serial_format_args(parser)
parser.add_argument("--relay-port", default="COM6", help="Pico relay serial port")
parser.add_argument("--relay-baud", type=int, default=115200, help="Pico relay serial baud rate")
parser.add_argument("--no-power-cycle", action="store_true", help="do not send relay off/on before the test")
@@ -233,7 +235,7 @@ def main(argv: list[str] | None = None, *, stdout: TextIO = sys.stdout) -> int:
log_path = args.log or default_log_path()
if args.dry_run:
print(f"device={args.port} {args.baud} 8N1", file=stdout)
print(f"device={args.port} {args.baud} {serial_format_label(args)}", file=stdout)
print(f"relay={args.relay_port} {args.relay_baud}", file=stdout)
print(f"power_cycle={int(not args.no_power_cycle)} off={args.power_off_command!r} on={args.power_on_command!r}", file=stdout)
for index, frame in enumerate(frames, start=1):
@@ -248,12 +250,15 @@ def main(argv: list[str] | None = None, *, stdout: TextIO = sys.stdout) -> int:
detector = FrameDetector(sync_mode=args.sync)
try:
logger.emit("CONNECT LCD bench sequence")
logger.emit(f"device={args.port} {args.baud} 8N1 relay={args.relay_port} {args.relay_baud}")
logger.emit(
f"device={args.port} {args.baud} {serial_format_label(args)} "
f"relay={args.relay_port} {args.relay_baud}"
)
logger.emit(f"log={log_path}")
for index, frame in enumerate(frames, start=1):
logger.emit(f"plan frame[{index}]={format_frame(frame)} checksum_ok={int(frame_checksum_ok(frame))}")
with serial.Serial(args.port, args.baud, bytesize=8, parity="N", stopbits=1, timeout=0.05) as device:
with open_device_serial(serial, args) as device:
relay = None
try:
if not args.no_power_cycle:
@@ -319,6 +324,23 @@ def _import_serial():
return serial
def add_serial_format_args(parser: argparse.ArgumentParser) -> None:
parser.add_argument(
"--parity",
choices=SERIAL_PARITY_CHOICES,
default="E",
help="serial parity for the RCP link; ROM SCI1 setup uses even parity",
)
def serial_format_label(args: argparse.Namespace) -> str:
return f"8{args.parity}1"
def open_device_serial(serial, args: argparse.Namespace):
return serial.Serial(args.port, args.baud, bytesize=8, parity=args.parity, stopbits=1, timeout=0.05)
def _send_frame(device, frame: bytes, logger: BenchLogger, label: str) -> None:
device.write(frame)
device.flush()