From 5684dd9d0ea90450f5378ea83dcde8fdbde9bb15 Mon Sep 17 00:00:00 2001 From: Quintine Date: Sat, 25 Jul 2026 18:42:59 +1000 Subject: [PATCH] =?UTF-8?q?tools:=20byd=5Fcan=5Fdump=20=E2=80=94=20skip=20?= =?UTF-8?q?'boot'=20dir,=20robust=20rlog/qlog=20discovery,=20fix=20sys.pat?= =?UTF-8?q?h?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The auto-detect picked /data/media/0/realdata/boot (boot logs, no rlog). Now scans newest-first for a dir that actually contains an rlog/qlog, skips 'boot', and inserts repo root into sys.path so it runs from any CWD. --- tools/byd_can_dump.py | 43 +++++++++++++++++++++++++++++++------------ 1 file changed, 31 insertions(+), 12 deletions(-) diff --git a/tools/byd_can_dump.py b/tools/byd_can_dump.py index fe63821..2149f08 100755 --- a/tools/byd_can_dump.py +++ b/tools/byd_can_dump.py @@ -22,9 +22,12 @@ Key BYD addresses it highlights: import argparse import os +import sys import time from collections import defaultdict +sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) + KEY_ADDRS = { 287: "STEER_MODULE", 289: "ESC", @@ -59,23 +62,39 @@ def print_table(stats, started_mono=None): print(f"{addr:>6} {length:>3} {count:>7} {rate:>7.1f} {name}{marker}") +LOG_NAMES = ("rlog", "rlog.bz2", "rlog.zst", "qlog", "qlog.bz2", "qlog.zst") + + +def find_log_file(route_dir): + for name in LOG_NAMES: + p = os.path.join(route_dir, name) + if os.path.exists(p): + return p + return None + + +def find_latest_log(base): + """Newest dir (by name) that actually contains an rlog/qlog; skips 'boot'.""" + for d in sorted(os.listdir(base), reverse=True): + p = os.path.join(base, d) + if not os.path.isdir(p) or d == "boot": + continue + lp = find_log_file(p) + if lp is not None: + return lp + return None + + def dump_from_route(route_dir=None): from openpilot.tools.lib.logreader import LogReader base = "/data/media/0/realdata" if route_dir is None: - routes = sorted(d for d in os.listdir(base) if os.path.isdir(os.path.join(base, d))) - assert routes, f"no routes found in {base}" - route_dir = os.path.join(base, routes[-1]) - print(f"using latest route: {route_dir}") - - log_path = None - for name in ("rlog", "rlog.bz2", "rlog.zst", "qlog", "qlog.bz2", "qlog.zst"): - p = os.path.join(route_dir, name) - if os.path.exists(p): - log_path = p - break - assert log_path, f"no rlog/qlog found in {route_dir}" + log_path = find_latest_log(base) + assert log_path is not None, f"no routes with rlog/qlog found in {base}" + else: + log_path = find_log_file(route_dir) + assert log_path is not None, f"no rlog/qlog found in {route_dir}" print(f"reading {log_path} ...") stats = {}