Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
119 commits
Select commit Hold shift + click to select a range
1794c98
Opendbc replay (#6)
elkoled Jan 8, 2026
066d6ad
add error on failed generation (#8)
elkoled Jan 9, 2026
d3015fd
Opendbc replay (#129)
elkoled Jan 9, 2026
e491031
cutoff diff
elkoled Jan 9, 2026
77a42d3
parallel downloads
elkoled Jan 9, 2026
3a4bfba
enable stderr
elkoled Jan 9, 2026
1f752b3
fix interface
elkoled Jan 9, 2026
15a040a
logprint errors
elkoled Jan 10, 2026
196eda0
add comment to PR
elkoled Jan 10, 2026
f775a7e
fix
elkoled Jan 10, 2026
5cdd4c5
FORMAT: lines
elkoled Jan 10, 2026
314417d
FORMAT: plots
elkoled Jan 10, 2026
0262b1f
FORMAT: fix
elkoled Jan 10, 2026
d4c10e6
modules
elkoled Jan 11, 2026
b7f7cb5
Revert "use azure test instance"
elkoled Jan 12, 2026
f9d23e4
build on forks
elkoled Jan 12, 2026
e82047f
clean
elkoled Jan 12, 2026
132af7f
rename
elkoled Jan 12, 2026
ca35829
replace azure with ci-artifacts
elkoled Jan 12, 2026
52740b5
auto bootstrap
elkoled Jan 13, 2026
3ddb39a
help
elkoled Jan 13, 2026
fc691b5
FORK TEST
elkoled Jan 13, 2026
309e5c9
Revert "FORMAT: fix"
elkoled Jan 13, 2026
75ca902
Revert "FORMAT: plots"
elkoled Jan 13, 2026
c122c4f
Revert "FORMAT: lines"
elkoled Jan 13, 2026
968794f
clean
elkoled Jan 13, 2026
8cd4801
no comment on empty output
elkoled Jan 13, 2026
d763d66
output errors
elkoled Jan 13, 2026
58f4749
fix pr comment
elkoled Jan 13, 2026
55f2ebd
fix diff more
elkoled Jan 13, 2026
804008f
increase tolerance
elkoled Jan 13, 2026
a716f46
less files
elkoled Jan 13, 2026
bc8c302
one file
elkoled Jan 13, 2026
021eec4
Revert "FORK TEST"
elkoled Jan 13, 2026
2b51f63
Revert "fix mutation test"
elkoled Jan 13, 2026
c4dc49a
fix comment
elkoled Jan 13, 2026
11c5d08
fix comment
elkoled Jan 13, 2026
a96a243
move car_diff.py
elkoled Jan 13, 2026
5eeae96
Revert "fix mutation test"
elkoled Jan 13, 2026
171d2e4
move car_diff.py
elkoled Jan 13, 2026
8dab780
inline helpers
elkoled Jan 13, 2026
159f8cb
inline helpers
elkoled Jan 13, 2026
4da42ac
fix ruff
elkoled Jan 13, 2026
7927248
fix ruff
elkoled Jan 13, 2026
f4f684e
use all carstate fields
elkoled Jan 14, 2026
833ff1e
add --all
elkoled Jan 14, 2026
4d0ee9a
use all carstate fields
elkoled Jan 14, 2026
2c2d290
add --all
elkoled Jan 14, 2026
a9d19bd
bootstrap
elkoled Jan 14, 2026
c3c2ba4
bootstrap
elkoled Jan 14, 2026
71482ea
Revert "bootstrap"
elkoled Jan 14, 2026
85e55c0
add line formatting
elkoled Jan 14, 2026
e32715b
commit workflow
elkoled Jan 14, 2026
3b14d64
adjust formatting
elkoled Jan 14, 2026
644054c
return err
elkoled Jan 14, 2026
0a84552
subprocess
elkoled Jan 14, 2026
4829723
comma_car_segments
elkoled Jan 14, 2026
98cdbca
dead code
elkoled Jan 14, 2026
078c0e7
minimal logreader
elkoled Jan 14, 2026
968aa55
remove openpilot
elkoled Jan 14, 2026
598c28a
add deps
elkoled Jan 14, 2026
fa57731
remove all deps
elkoled Jan 14, 2026
39a5680
fix source
elkoled Jan 14, 2026
16afc66
request
elkoled Jan 14, 2026
564f5d8
less parallel
elkoled Jan 14, 2026
04852c1
fix push
elkoled Jan 14, 2026
b4af0d3
bootstrap
elkoled Jan 14, 2026
d58761a
Revert "bootstrap"
elkoled Jan 14, 2026
d1fa375
fix graph
elkoled Jan 14, 2026
eb6f3b8
Merge branch 'master' into opendbc_replay
elkoled Jan 14, 2026
d8eac39
push
elkoled Jan 14, 2026
7705f50
regex
elkoled Jan 14, 2026
451afa8
optimize dict_diff
elkoled Jan 14, 2026
8c52ddc
reduce tolerance
elkoled Jan 15, 2026
01d7b87
use comma_car_segments
elkoled Jan 15, 2026
9c630f0
remove
elkoled Jan 15, 2026
22e4324
use requests
elkoled Jan 15, 2026
37bc920
timestamps
elkoled Jan 15, 2026
b3aa7cb
frame_ms
elkoled Jan 15, 2026
a9e013d
id
elkoled Jan 15, 2026
de34876
logreader
elkoled Jan 15, 2026
23b7433
align logreader
elkoled Jan 15, 2026
6cb14cc
use logreader
elkoled Jan 15, 2026
6e6127a
remove requests
elkoled Jan 15, 2026
2f3af7c
return
elkoled Jan 15, 2026
95a5e5c
more line
elkoled Jan 15, 2026
b6bc789
ruff
elkoled Jan 15, 2026
0276150
use test pip package
elkoled Jan 15, 2026
ca5a18e
push on commaai
elkoled Jan 15, 2026
0108c6f
use zstandard lib
elkoled Jan 15, 2026
47145c4
clean
elkoled Jan 15, 2026
0b32b06
rename
elkoled Jan 15, 2026
8537c47
use decompress
elkoled Jan 15, 2026
ff8a182
fix
elkoled Jan 15, 2026
a0e73eb
index
elkoled Jan 16, 2026
aa7de95
lr filter
elkoled Jan 16, 2026
749a7c3
union types
elkoled Jan 16, 2026
910932b
find edges
elkoled Jan 16, 2026
3cc0d33
group frames
elkoled Jan 16, 2026
7b16053
render waveform
elkoled Jan 16, 2026
06eab0d
format timing
elkoled Jan 16, 2026
cba48ab
signals
elkoled Jan 16, 2026
357f1ea
numeric diff
elkoled Jan 16, 2026
37585e5
boolean diff
elkoled Jan 16, 2026
1a41897
real timestamp
elkoled Jan 17, 2026
692e34c
impreza fingerprint
elkoled Jan 17, 2026
3fb0d39
Revert "impreza fingerprint"
elkoled Jan 17, 2026
8cef72d
apply tesla brake PR
elkoled Jan 7, 2026
1a082cd
Merge remote-tracking branch 'commaai/master' into opendbc_replay
elkoled Jan 17, 2026
91c4a5d
honda clear startup fault
elkoled Jan 17, 2026
661513e
Revert "honda clear startup fault"
elkoled Jan 17, 2026
c72f64a
skip unrelated edges
elkoled Jan 18, 2026
5366516
fix exit
elkoled Jan 19, 2026
2ba7e6c
fix down edge
elkoled Jan 19, 2026
5643d25
use hf pip package
elkoled Jan 19, 2026
05da4f6
comment on fail
elkoled Jan 19, 2026
49dfefb
fix
elkoled Jan 19, 2026
2135514
comment
elkoled Jan 19, 2026
939af75
no exit 1 in CI
elkoled Jan 19, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 47 additions & 1 deletion .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,53 @@ jobs:
scons -j8
cd opendbc/safety/tests && ./mutation.sh

# TODO: this test needs to move to opendbc
car_diff:
name: car diff
runs-on: ${{ github.repository == 'commaai/opendbc' && 'namespace-profile-amd64-8x16' || 'ubuntu-latest' }}
env:
GIT_REF: ${{ github.event_name == 'push' && github.ref == format('refs/heads/{0}', github.event.repository.default_branch) && github.event.before || format('origin/{0}', github.event.repository.default_branch) }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: ./.github/workflows/cache
- name: Build opendbc
run: |
source setup.sh
scons -j8
- name: Test car diff
if: github.event_name == 'pull_request'
run: source setup.sh && python opendbc/car/tests/car_diff.py | tee diff.txt
- name: Comment PR
if: always() && github.event_name == 'pull_request'
env:
GH_TOKEN: ${{ github.token }}
run: '[ -s diff.txt ] && gh pr comment ${{ github.event.pull_request.number }} --repo ${{ github.repository }} -F diff.txt || true'
- name: Update refs
if: github.repository == 'commaai/opendbc' && github.ref == 'refs/heads/master'
run: source setup.sh && python opendbc/car/tests/car_diff.py --update-refs
- name: Checkout ci-artifacts
if: github.repository == 'commaai/opendbc' && github.ref == 'refs/heads/master'
uses: actions/checkout@v4
with:
repository: commaai/ci-artifacts
ssh-key: ${{ secrets.CI_ARTIFACTS_DEPLOY_KEY }}
path: ${{ github.workspace }}/ci-artifacts
- name: Push refs
if: github.repository == 'commaai/opendbc' && github.ref == 'refs/heads/master'
working-directory: ${{ github.workspace }}/ci-artifacts
run: |
ls ${{ github.workspace }}/car_diff/*.zst 2>/dev/null || exit 0
git config user.name "GitHub Actions Bot"
git config user.email "<>"
git fetch origin car_diff || true
git checkout car_diff 2>/dev/null || git checkout --orphan car_diff
cp ${{ github.workspace }}/car_diff/*.zst .
git add *.zst
git commit -m "car_diff refs for ${{ github.sha }}" || echo "No changes to commit"
git push origin car_diff

# TODO: this needs to move to opendbc
test_models:
name: test models
runs-on: ${{ github.repository == 'commaai/opendbc' && 'namespace-profile-amd64-8x16' || 'ubuntu-latest' }}
Expand Down
67 changes: 67 additions & 0 deletions opendbc/car/logreader.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
#!/usr/bin/env python3
import os
import capnp
import urllib.parse
import warnings
from urllib.request import urlopen
import zstandard as zstd

from opendbc.car.common.basedir import BASEDIR

capnp_log = capnp.load(os.path.join(BASEDIR, "rlog.capnp"))


def decompress_stream(data: bytes):
dctx = zstd.ZstdDecompressor()
decompressed_data = b""

with dctx.stream_reader(data) as reader:
decompressed_data = reader.read()

return decompressed_data


class LogReader:
def __init__(self, fn, only_union_types=False, sort_by_time=False):
self._only_union_types = only_union_types
_, ext = os.path.splitext(urllib.parse.urlparse(fn).path)

if fn.startswith("http"):
with urlopen(fn) as f:
dat = f.read()
else:
with open(fn, "rb") as f:
dat = f.read()

if ext == ".zst" or dat.startswith(b'\x28\xB5\x2F\xFD'):
# https://github.com/facebook/zstd/blob/dev/doc/zstd_compression_format.md#zstandard-frames
dat = decompress_stream(dat)

ents = capnp_log.Event.read_multiple_bytes(dat)

self._ents = []
try:
for e in ents:
self._ents.append(e)
except capnp.KjException:
warnings.warn("Corrupted events detected", RuntimeWarning, stacklevel=1)

if sort_by_time:
self._ents.sort(key=lambda x: x.logMonoTime)

def __iter__(self):
for ent in self._ents:
if self._only_union_types:
try:
ent.which()
yield ent
except capnp.lib.capnp.KjException:
pass
else:
yield ent

def filter(self, msg_type: str):
return (getattr(m, m.which()) for m in filter(lambda m: m.which() == msg_type, self))

def first(self, msg_type: str):
return next(self.filter(msg_type), None)
23 changes: 23 additions & 0 deletions opendbc/car/rlog.capnp
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
@0xce500edaaae36b0e;

# Minimal schema for parsing rlog CAN messages
# Subset of cereal/log.capnp

struct CanData {
address @0 :UInt32;
busTimeDEPRECATED @1 :UInt16;
dat @2 :Data;
src @3 :UInt8;
}

struct Event {
logMonoTime @0 :UInt64;

union {
initData @1 :Void;
frame @2 :Void;
gpsNMEA @3 :Void;
sensorEventDEPRECATED @4 :Void;
can @5 :List(CanData);
}
}
Loading