From 768bea48d04f8f6e517db0458c1d979b00508c89 Mon Sep 17 00:00:00 2001 From: Adeeb Shihadeh Date: Mon, 21 Feb 2022 19:42:46 -0800 Subject: [PATCH] cabana for your terminal --- selfdrive/debug/can_table.py | 39 ++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100755 selfdrive/debug/can_table.py diff --git a/selfdrive/debug/can_table.py b/selfdrive/debug/can_table.py new file mode 100755 index 000000000..156984905 --- /dev/null +++ b/selfdrive/debug/can_table.py @@ -0,0 +1,39 @@ +#!/usr/bin/env python3 +import argparse +import pandas as pd # pylint: disable=import-error + +import cereal.messaging as messaging + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description="Cabana-like table of bits for your terminal", + formatter_class=argparse.ArgumentDefaultsHelpFormatter) + parser.add_argument("addr", type=str, nargs=1) + parser.add_argument("bus", type=int, default=0, nargs='?') + + args = parser.parse_args() + + addr = int(args.addr[0], 0) + can = messaging.sub_sock('can', conflate=False, timeout=None) + + print(f"waiting for {hex(addr)} ({addr}) on bus {args.bus}...") + + latest = None + while True: + for msg in messaging.drain_sock(can, wait_for_one=True): + for m in msg.can: + if m.address == addr and m.src == args.bus: + latest = m + + if latest is None: + continue + + rows = [] + for b in latest.dat: + r = list(bin(b).lstrip('0b').zfill(8)) + r += [hex(b)] + rows.append(r) + + df = pd.DataFrame(data=rows) + table = df.to_markdown(tablefmt='grid') + print(f"\n\n{hex(addr)} ({addr}) on bus {args.bus}\n{table}")