"""Dump whatever raw bytes the CANdapter sends after opening a channel. Useful when frames aren't parsing as expected - shows the literal serial stream so we can see if it's real (but differently-shaped) CAN frames, error/status chatter, or nothing at all. Usage: python raw_dump.py [--bitrate 500000] [--seconds 5] """ import argparse import sys import time from pathlib import Path import serial sys.path.insert(0, str(Path(__file__).resolve().parents[1])) from adapters.candapter import BITRATE_CODES # noqa: E402 DEFAULT_PORT = "/dev/cu.usbserial-DNBJV4F5" def main() -> int: parser = argparse.ArgumentParser(description=__doc__) parser.add_argument("--port", default=DEFAULT_PORT) parser.add_argument("--bitrate", type=int, default=500_000) parser.add_argument("--seconds", type=float, default=5.0) args = parser.parse_args() ser = serial.Serial(args.port, 115200, timeout=0.2) with ser: ser.write(b"C\r") time.sleep(0.1) ser.read(ser.in_waiting or 1) ser.write(f"S{BITRATE_CODES[args.bitrate]}\r".encode()) time.sleep(0.1) print("S reply:", ser.read(ser.in_waiting or 1)) ser.write(b"O\r") time.sleep(0.1) print("O reply:", ser.read(ser.in_waiting or 1)) print(f"\nRaw stream for {args.seconds}s:") deadline = time.monotonic() + args.seconds got_any = False while time.monotonic() < deadline: chunk = ser.read(256) if chunk: got_any = True print(repr(chunk)) if not got_any: print("(nothing received)") ser.write(b"C\r") return 0 if __name__ == "__main__": raise SystemExit(main())