You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
39 lines
1.1 KiB
39 lines
1.1 KiB
#!/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}")
|
|
|