From a1a28e467ede7240d444326c1dc04ce7f1fda378 Mon Sep 17 00:00:00 2001 From: Nayan Date: Thu, 5 Nov 2026 15:35:07 -0500 Subject: [PATCH 01/12] [models] Support major.minor versioning (#2092) support major.minor versioning, becase why not --- release/ci/model_generator.py | 39 ++++++++++++++++++++++++----------- 1 file changed, 27 insertions(+), 12 deletions(-) diff --git a/release/ci/model_generator.py b/release/ci/model_generator.py index 5d0ca73644..057f8824c6 100755 --- a/release/ci/model_generator.py +++ b/release/ci/model_generator.py @@ -13,26 +13,41 @@ from pathlib import Path from datetime import datetime, UTC +_VERSION_REGEX = re.compile(r'^(?:\d+[a-zA-Z]+|\d+[vVbB]\d+|[vVbB]\d+|\d{4})$') +_DECIMAL_VERSION_REGEX = re.compile(r'^([vVbB]?)(\d+(?:\.\d+)+)$') + + +def _version(word: str) -> str | None: + match = _DECIMAL_VERSION_REGEX.match(word.strip('()[]{}.,;:')) + if match: + return match.group(1).upper() + match.group(2) + stripped = re.sub(r'[^a-zA-Z0-9]', '', word) + return stripped.upper() if _VERSION_REGEX.match(stripped) else None + + +def _truncate(short_name: str) -> str: + return short_name[:8].rstrip('.') + + def create_short_name(full_name: str) -> str: - # Remove parentheses and extract alphanumeric words + # Remove parentheses and extract alphanumeric words, keeping decimals for versioning clean_name = re.sub(r'\([^)]*\)', '', full_name) - words = [re.sub(r'[^a-zA-Z0-9]', '', word) for word in clean_name.split() if re.sub(r'[^a-zA-Z0-9]', '', word)] + words = [re.sub(r'[^a-zA-Z0-9.]', '', word) for word in clean_name.split()] + words = [word for word in words if word] if len(words) == 1: - return words[0][:8].upper() + return _truncate((_version(words[0]) or words[0]).upper()) - # Handle special case: Name + Version (e.g., "Word A1" -> "WordA1") - if len(words) == 2 and re.match(r'^[A-Za-z]\d+$', words[1]): - return (words[0] + words[1])[:8].upper() + # Handle special case: Name + Version (e.g., "Word A1" -> "WordA1", "Model v1.1" -> "ModelV1.1") + if len(words) == 2 and re.match(r'^[A-Za-z]?\d+$', words[1]): + return _truncate((words[0] + (_version(words[1]) or words[1])).upper()) result = "" for word in words: # Version or number patterns - if (re.match(r'^\d+[a-zA-Z]+$', word) or - re.match(r'^\d+[vVbB]\d+$', word) or - re.match(r'^[vVbB]\d+$', word) or - re.match(r'^\d{4}$', word)): - result += word.upper() + version = _version(word) + if version: + result += version # All uppercase abbreviations (2-3 letters) elif re.match(r'^[A-Z]{2,3}$', word): result += word @@ -45,7 +60,7 @@ def create_short_name(full_name: str) -> str: result += word else: result += word[0].upper() - return result[:8] + return _truncate(result) def create_pkl_name(full_name: str) -> str: From 02ef6e4ce0a6e22f6209c17cc6a59f0684241008 Mon Sep 17 00:00:00 2001 From: James Vecellio-Grant <159560811+Discountchubbs@users.noreply.github.com> Date: Thu, 5 Nov 2026 13:11:27 -0800 Subject: [PATCH 02/12] modeld_v2: artifact parity with upstream tg (#2093) * modeld_v2: artifact parity with upstream tg * m * m * Update helpers.py * ew * Update convert_upstream_pkl.py * Update test_convert_upstream_pkl.py --------- Co-authored-by: Jason Wen --- .github/workflows/test_models.yml | 17 +++++ .../modeld_v2/convert_upstream_pkl.py | 62 ++++++++++++++----- openpilot/sunnypilot/modeld_v2/helpers.py | 4 +- .../tests/test_convert_upstream_pkl.py | 20 +++++- 4 files changed, 82 insertions(+), 21 deletions(-) diff --git a/.github/workflows/test_models.yml b/.github/workflows/test_models.yml index bf22f14a11..7210598574 100644 --- a/.github/workflows/test_models.yml +++ b/.github/workflows/test_models.yml @@ -46,6 +46,23 @@ jobs: CHECK_OOB: 0 GMMU: 0 run: tools/op.sh test -v openpilot/sunnypilot/modeld_v2/tests/test_convert_upstream_pkl.py + - name: Resolve commaai's tinygrad pin, which their precompiled chestnut model is built and converted with + id: upstream-tg + env: + GH_TOKEN: ${{ github.token }} + run: | + read -r sha url < <(gh api repos/commaai/openpilot/contents/tinygrad_repo --jq '.sha + " " + .submodule_git_url') + echo "commaai/openpilot master pins $url@$sha, ours is $(git rev-parse HEAD:tinygrad_repo)" + dir="$RUNNER_TEMP/upstream_tinygrad" + git init -q "$dir" && git -C "$dir" fetch -q --depth 1 "$url" "$sha" && git -C "$dir" checkout -q FETCH_HEAD + echo "path=$dir" >> "$GITHUB_OUTPUT" + - name: Convert a pickled USB+AMD jit under commaai's tinygrad, as the chestnut model build does + env: + DEV: MOCKUSB+AMD + CHECK_OOB: 0 + GMMU: 0 + PYTHONPATH: ${{ steps.upstream-tg.outputs.path }}:${{ github.workspace }} + run: tools/op.sh test -v openpilot/sunnypilot/modeld_v2/tests/test_convert_upstream_pkl.py - name: Where tinygrad moved, for the helper or failure point named above if: failure() && github.event_name == 'pull_request' run: | diff --git a/openpilot/sunnypilot/modeld_v2/convert_upstream_pkl.py b/openpilot/sunnypilot/modeld_v2/convert_upstream_pkl.py index 9ae62f0f5d..1f61471639 100755 --- a/openpilot/sunnypilot/modeld_v2/convert_upstream_pkl.py +++ b/openpilot/sunnypilot/modeld_v2/convert_upstream_pkl.py @@ -66,47 +66,75 @@ def _patched(buf, topo) -> tuple[bytearray, dict]: return blob, rows -def _evaluate(u, env): +def _packed_args(program) -> dict[int, int]: + from tinygrad.device import TinyELF + params = getattr(program.arg, "params", None) or () + return {off: p.arg.slot for (off, _), p in zip(TinyELF.iter_sig(tuple((None, p.addrspace, p.dtype, ()) for p in params)), params, strict=True)} + + +def _outer_slot(u, packed: dict[int, int]) -> int | None: + from tinygrad.uop.ops import Ops + if u.op is Ops.PARAM: + return None if packed else u.arg.slot + if u.op.name == "REFPARAM": + return u.arg.slot + if packed and u.op is Ops.LOAD and u.src[0].op is Ops.INDEX and _root(u.src[0].src[0]).op is Ops.PARAM: + index = _evaluate(u.src[0].src[1], {}, packed) + return None if index is None else packed.get(index * u.dtype.itemsize) + return None + + +def _evaluate(u, env, packed: dict[int, int]): from tinygrad.uop.ops import GroupOp, Ops, exec_alu if u.op in (Ops.AFTER, Ops.CAST, Ops.BITCAST): - return _evaluate(u.src[0], env) + return _evaluate(u.src[0], env, packed) if u.op is Ops.CONST: return u.arg - if u.op in (Ops.PARAM, Ops.RANGE): - return env.get(u.arg.slot if u.op is Ops.PARAM else u) + if u.op is Ops.RANGE: + return env.get(u) + if (slot := _outer_slot(u, packed)) is not None: + return env.get(slot) if u.op is Ops.LOAD: - table, index = _root(u.src[0].src[0]), _evaluate(u.src[0].src[1], env) + table, index = _root(u.src[0].src[0]), _evaluate(u.src[0].src[1], env, packed) return struct.unpack_from(u.dtype.fmt, table.arg, index * u.dtype.itemsize)[0] if table.op is Ops.BINARY and index is not None else None - if u.op in GroupOp.ALU and None not in (values := [_evaluate(x, env) for x in u.src]): + if u.op in GroupOp.ALU and None not in (values := [_evaluate(x, env, packed) for x in u.src]): return exec_alu(u.op, u.dtype, values, *([False] if "truncate_output" in inspect.signature(exec_alu).parameters else [])) return None def _input_pokes(submit, kernargs) -> dict[int, tuple[int, int]]: from tinygrad.uop.ops import Ops - outer = dict(enumerate(submit.src[1:])) + outer, packed = dict(enumerate(submit.src[1:])), _packed_args(submit.src[0]) kernargs_params = {i for i, a in outer.items() if a.op is Ops.GETADDR and _root(a.src[0]) is kernargs} inputs = {i: _root(a.src[0]).arg.slot for i, a in outer.items() if a.op is Ops.GETADDR and _root(a.src[0]).op is Ops.PARAM} pokes = {} for call in (u for u in submit.src[0].src[0].toposort() if u.op is Ops.CALL and len(u.src) > 3): _, address, value, *_ = call.src[1:] - used = list({x.arg.slot for x in value.toposort() if x.op is Ops.PARAM} & inputs.keys()) - if len(used) != 1 or not kernargs_params & {x.arg.slot for x in address.toposort() if x.op is Ops.PARAM}: + used = list({slot for x in value.toposort() if (slot := _outer_slot(x, packed)) is not None} & inputs.keys()) + if len(used) != 1 or not kernargs_params & {_outer_slot(x, packed) for x in address.toposort()}: continue ranges = list(dict.fromkeys(x for x in (*address.toposort(), *value.toposort()) if x.op is Ops.RANGE)) for trip in itertools.product(*[range(int(r.vmax) + 1) for r in ranges]): env = dict.fromkeys(outer, 0) | dict(zip(ranges, trip, strict=True)) - if (offset := _evaluate(address, env)) % 8 == 0: - pokes[offset] = (inputs[used[0]], _evaluate(value, env)) + if (offset := _evaluate(address, env, packed)) % 8 == 0: + pokes[offset] = (inputs[used[0]], _evaluate(value, env, packed)) return pokes -def _elf(image: bytes, rodata: int) -> bytes: - names, offset, data, headers = b"\0.text\0.rodata\0.shstrtab\0", 64, b"", [] - for name, kind, address, content in [(0, 0, 0, b""), (1, 1, ALIGNMENT, image[:rodata]), (7, 1, ALIGNMENT + rodata, image[rodata:]), (15, 3, 0, names)]: - headers.append(struct.pack(" bytes: + spans = [(".text", 0, rodata), (".rodata", rodata, len(image))] if entry < rodata else \ + [(".data", 0, rodata), (".rodata", rodata, entry), (".text", entry, len(image))] + sections, names = [(0, 0, 0, 0, b"")], b"\0" + for name, start, end in (span for span in spans if span[1] < span[2]): + sections.append((len(names), 1, 6 if name == ".text" else 2, ALIGNMENT + start, image[start:end])) + names += name.encode() + b"\0" + sections.append((len(names), 3, 0, 0, names + b".shstrtab\0")) + offset, data, headers = 64, b"", [] + for name, kind, flags, address, content in sections: + headers.append(struct.pack(" tuple[dict, memoryview]: @@ -155,7 +183,7 @@ def convert(jit, kwargs: dict, frame: dict, target) -> tuple[dict, memoryview]: if image_alloc not in programs: image = bytes(_patched(image_alloc, topo)[0]) rodata = next(r for r in range(0, len(image) - 24, 64) if r + struct.unpack_from(" Date: Fri, 6 Nov 2026 16:03:02 -0500 Subject: [PATCH 03/12] bump opendbc --- opendbc_repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opendbc_repo b/opendbc_repo index aa9bff6f54..48611ae9d6 160000 --- a/opendbc_repo +++ b/opendbc_repo @@ -1 +1 @@ -Subproject commit aa9bff6f5442cef8cb8e25e143ef38865c276ce8 +Subproject commit 48611ae9d6571f6d721c3b75dc037a551df75611 From 26b8501e7b337f8bafbf236517124f3a1162ef00 Mon Sep 17 00:00:00 2001 From: Jason Wen Date: Wed, 11 Nov 2026 02:07:20 -0500 Subject: [PATCH 04/12] bump opendbc --- opendbc_repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opendbc_repo b/opendbc_repo index 48611ae9d6..6599050010 160000 --- a/opendbc_repo +++ b/opendbc_repo @@ -1 +1 @@ -Subproject commit 48611ae9d6571f6d721c3b75dc037a551df75611 +Subproject commit 659905001033f39c046459818e87d7fc10fc037a From c1f5aed4a54ef2f912392720046070d35863bed8 Mon Sep 17 00:00:00 2001 From: Jason Wen Date: Wed, 11 Nov 2026 14:37:26 -0500 Subject: [PATCH 05/12] bump --- opendbc_repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opendbc_repo b/opendbc_repo index 6010a7412b..2cdc8547e2 160000 --- a/opendbc_repo +++ b/opendbc_repo @@ -1 +1 @@ -Subproject commit 6010a7412be66b374076611d71137ca2e555a1f1 +Subproject commit 2cdc8547e2a750a8e8d295af18a4dd42be7de4fd From 066c0e295712101751e15611aeb8594a4868fe64 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 11 Nov 2026 23:10:58 -0500 Subject: [PATCH 06/12] [bot] Update Python packages (#2087) * Update Python packages * no --------- Co-authored-by: github-actions[bot] Co-authored-by: Jason Wen --- docs/CARS.md | 4 +++- opendbc_repo | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/CARS.md b/docs/CARS.md index d3a4371735..2f26fa898d 100644 --- a/docs/CARS.md +++ b/docs/CARS.md @@ -4,7 +4,7 @@ A supported vehicle is one that just works when you install a comma device. All supported cars provide a better experience than any stock system. Supported vehicles reference the US market unless otherwise specified. -# 351 Supported Cars +# 353 Supported Cars |Make|Model|Supported Package|ACC|No ACC accel below|No ALC below|Steering Torque|Resume from stop|Hardware Needed
 |Video|Setup Video| |---|---|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| @@ -153,12 +153,14 @@ A supported vehicle is one that just works when you install a comma device. All |Hyundai|Sonata 2018-19|Smart Cruise Control (SCC)|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai E connector
- 1 OBD-C cable (2 ft)
- 1 comma four
- 1 comma power v3
- 1 harness box
- 1 mount
Buy Here
||| |Hyundai|Sonata 2020-23|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai A connector
- 1 OBD-C cable (2 ft)
- 1 comma four
- 1 comma power v3
- 1 harness box
- 1 mount
Buy Here
||| |Hyundai|Sonata Hybrid 2020-23|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai A connector
- 1 OBD-C cable (2 ft)
- 1 comma four
- 1 comma power v3
- 1 harness box
- 1 mount
Buy Here
||| +|Hyundai|Sonata Hybrid (without HDA II) 2024-26|Smart Cruise Control (SCC)|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai A connector
- 1 OBD-C cable (2 ft)
- 1 comma four
- 1 comma power v3
- 1 harness box
- 1 mount
Buy Here
||| |Hyundai|Staria 2023|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai K connector
- 1 OBD-C cable (2 ft)
- 1 comma four
- 1 comma power v3
- 1 harness box
- 1 mount
Buy Here
||| |Hyundai|Tucson 2021|Smart Cruise Control (SCC)|openpilot available[1](#footnotes)|19 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 Hyundai L connector
- 1 OBD-C cable (2 ft)
- 1 comma four
- 1 comma power v3
- 1 harness box
- 1 mount
Buy Here
||| |Hyundai|Tucson 2022|Smart Cruise Control (SCC)|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai N connector
- 1 OBD-C cable (2 ft)
- 1 comma four
- 1 comma power v3
- 1 harness box
- 1 mount
Buy Here
||| |Hyundai|Tucson 2023-24|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai N connector
- 1 OBD-C cable (2 ft)
- 1 comma four
- 1 comma power v3
- 1 harness box
- 1 mount
Buy Here
||| |Hyundai|Tucson Diesel 2019|Smart Cruise Control (SCC)|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai L connector
- 1 OBD-C cable (2 ft)
- 1 comma four
- 1 comma power v3
- 1 harness box
- 1 mount
Buy Here
||| |Hyundai|Tucson Hybrid 2022-24|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai N connector
- 1 OBD-C cable (2 ft)
- 1 comma four
- 1 comma power v3
- 1 harness box
- 1 mount
Buy Here
||| +|Hyundai|Tucson Hybrid (without HDA II) 2025-26|Smart Cruise Control (SCC)|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai N connector
- 1 OBD-C cable (2 ft)
- 1 comma four
- 1 comma power v3
- 1 harness box
- 1 mount
Buy Here
||| |Hyundai|Tucson Plug-in Hybrid 2024|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai N connector
- 1 OBD-C cable (2 ft)
- 1 comma four
- 1 comma power v3
- 1 harness box
- 1 mount
Buy Here
||| |Hyundai|Veloster 2019-20|Smart Cruise Control (SCC)|Stock|5 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 Hyundai E connector
- 1 OBD-C cable (2 ft)
- 1 comma four
- 1 comma power v3
- 1 harness box
- 1 mount
Buy Here
||| |Jeep|Grand Cherokee 2016-18|Adaptive Cruise Control (ACC)|Stock|0 mph|9 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 FCA connector
- 1 OBD-C cable (2 ft)
- 1 comma four
- 1 comma power v3
- 1 harness box
- 1 mount
Buy Here
||| diff --git a/opendbc_repo b/opendbc_repo index 6599050010..16944c1f84 160000 --- a/opendbc_repo +++ b/opendbc_repo @@ -1 +1 @@ -Subproject commit 659905001033f39c046459818e87d7fc10fc037a +Subproject commit 16944c1f84a75934e81644b66370644ef7aee6a1 From 61af0a0512dcb28ccf74892074131d31d5c8ab23 Mon Sep 17 00:00:00 2001 From: Jason Wen Date: Thu, 12 Nov 2026 12:47:54 -0500 Subject: [PATCH 07/12] bump opendbc and update CARS.md --- docs/CARS.md | 3 ++- opendbc_repo | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/CARS.md b/docs/CARS.md index 2f26fa898d..c0f47d3d14 100644 --- a/docs/CARS.md +++ b/docs/CARS.md @@ -4,7 +4,7 @@ A supported vehicle is one that just works when you install a comma device. All supported cars provide a better experience than any stock system. Supported vehicles reference the US market unless otherwise specified. -# 353 Supported Cars +# 354 Supported Cars |Make|Model|Supported Package|ACC|No ACC accel below|No ALC below|Steering Torque|Resume from stop|Hardware Needed
 |Video|Setup Video| |---|---|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| @@ -167,6 +167,7 @@ A supported vehicle is one that just works when you install a comma device. All |Jeep|Grand Cherokee 2019-21|Adaptive Cruise Control (ACC)|Stock|0 mph|39 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 FCA connector
- 1 OBD-C cable (2 ft)
- 1 comma four
- 1 comma power v3
- 1 harness box
- 1 mount
Buy Here
||| |Kia|Carnival 2022-24|Smart Cruise Control (SCC)|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai A connector
- 1 OBD-C cable (2 ft)
- 1 comma four
- 1 comma power v3
- 1 harness box
- 1 mount
Buy Here
||| |Kia|Carnival (China only) 2023|Smart Cruise Control (SCC)|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai K connector
- 1 OBD-C cable (2 ft)
- 1 comma four
- 1 comma power v3
- 1 harness box
- 1 mount
Buy Here
||| +|Kia|Carnival Hybrid (with HDA II) 2025-26|Highway Driving Assist II|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai Q connector
- 1 OBD-C cable (2 ft)
- 1 comma four
- 1 comma power v3
- 1 harness box
- 1 mount
Buy Here
||| |Kia|Ceed 2019-21|Smart Cruise Control (SCC)|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai E connector
- 1 OBD-C cable (2 ft)
- 1 comma four
- 1 comma power v3
- 1 harness box
- 1 mount
Buy Here
||| |Kia|Ceed Plug-in Hybrid 2021|Smart Cruise Control (SCC)|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai B connector
- 1 OBD-C cable (2 ft)
- 1 comma four
- 1 comma power v3
- 1 harness box
- 1 mount
Buy Here
||| |Kia|EV6 (Southeast Asia only) 2022-24|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai P connector
- 1 OBD-C cable (2 ft)
- 1 comma four
- 1 comma power v3
- 1 harness box
- 1 mount
Buy Here
||| diff --git a/opendbc_repo b/opendbc_repo index 16944c1f84..f087f898a1 160000 --- a/opendbc_repo +++ b/opendbc_repo @@ -1 +1 @@ -Subproject commit 16944c1f84a75934e81644b66370644ef7aee6a1 +Subproject commit f087f898a1529c968f85ae0313c8c3f5c7ad4bab From 7597ab6db9402fd52588fff3a8291ee87c189a78 Mon Sep 17 00:00:00 2001 From: Jason Wen Date: Thu, 12 Nov 2026 15:32:00 -0500 Subject: [PATCH 08/12] bump --- opendbc_repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opendbc_repo b/opendbc_repo index 2cdc8547e2..fed8447b42 160000 --- a/opendbc_repo +++ b/opendbc_repo @@ -1 +1 @@ -Subproject commit 2cdc8547e2a750a8e8d295af18a4dd42be7de4fd +Subproject commit fed8447b427ed0356df95695391d150e054178c0 From 6fd6a992936ac2e22ebe77144d3831a131870caa Mon Sep 17 00:00:00 2001 From: Jason Wen Date: Thu, 12 Nov 2026 16:06:02 -0500 Subject: [PATCH 09/12] explicit --- opendbc_repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opendbc_repo b/opendbc_repo index fed8447b42..9a8e7df0e5 160000 --- a/opendbc_repo +++ b/opendbc_repo @@ -1 +1 @@ -Subproject commit fed8447b427ed0356df95695391d150e054178c0 +Subproject commit 9a8e7df0e5e8d265b74ce1771f7eca277d36b478 From 64f2381c2ea1e4d63ae4468a10a3672fb6680c72 Mon Sep 17 00:00:00 2001 From: Jason Wen Date: Thu, 12 Nov 2026 21:10:01 -0500 Subject: [PATCH 10/12] bump opendbc and update CARS.md --- docs/CARS.md | 3 ++- opendbc_repo | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/CARS.md b/docs/CARS.md index c0f47d3d14..934a5469eb 100644 --- a/docs/CARS.md +++ b/docs/CARS.md @@ -4,7 +4,7 @@ A supported vehicle is one that just works when you install a comma device. All supported cars provide a better experience than any stock system. Supported vehicles reference the US market unless otherwise specified. -# 354 Supported Cars +# 355 Supported Cars |Make|Model|Supported Package|ACC|No ACC accel below|No ALC below|Steering Torque|Resume from stop|Hardware Needed
 |Video|Setup Video| |---|---|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| @@ -139,6 +139,7 @@ A supported vehicle is one that just works when you install a comma device. All |Hyundai|Ioniq Plug-in Hybrid 2020-22|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai H connector
- 1 OBD-C cable (2 ft)
- 1 comma four
- 1 comma power v3
- 1 harness box
- 1 mount
Buy Here
||| |Hyundai|Kona 2020|Smart Cruise Control (SCC)|openpilot available[1](#footnotes)|6 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 Hyundai B connector
- 1 OBD-C cable (2 ft)
- 1 comma four
- 1 comma power v3
- 1 harness box
- 1 mount
Buy Here
||| |Hyundai|Kona 2022-23|Smart Cruise Control (SCC)|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai O connector
- 1 OBD-C cable (2 ft)
- 1 comma four
- 1 comma power v3
- 1 harness box
- 1 mount
Buy Here
||| +|Hyundai|Kona (without HDA II) 2024-25|Smart Cruise Control (SCC)|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai L connector
- 1 OBD-C cable (2 ft)
- 1 comma four
- 1 comma power v3
- 1 harness box
- 1 mount
Buy Here
||| |Hyundai|Kona Electric 2018-21|Smart Cruise Control (SCC)|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai G connector
- 1 OBD-C cable (2 ft)
- 1 comma four
- 1 comma power v3
- 1 harness box
- 1 mount
Buy Here
||| |Hyundai|Kona Electric 2022-23|Smart Cruise Control (SCC)|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai O connector
- 1 OBD-C cable (2 ft)
- 1 comma four
- 1 comma power v3
- 1 harness box
- 1 mount
Buy Here
||| |Hyundai|Kona Electric (with HDA II, Korea only) 2023|Smart Cruise Control (SCC)|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai R connector
- 1 OBD-C cable (2 ft)
- 1 comma four
- 1 comma power v3
- 1 harness box
- 1 mount
Buy Here
||| diff --git a/opendbc_repo b/opendbc_repo index f087f898a1..4f8a70d885 160000 --- a/opendbc_repo +++ b/opendbc_repo @@ -1 +1 @@ -Subproject commit f087f898a1529c968f85ae0313c8c3f5c7ad4bab +Subproject commit 4f8a70d885932edc3a9f1a0cf5c90d5afe68ee92 From 8108740b60391508417e04513a84c015325da425 Mon Sep 17 00:00:00 2001 From: Jason Wen Date: Thu, 12 Nov 2026 22:19:28 -0500 Subject: [PATCH 11/12] bump opendbc --- opendbc_repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opendbc_repo b/opendbc_repo index 4f8a70d885..817a50a90a 160000 --- a/opendbc_repo +++ b/opendbc_repo @@ -1 +1 @@ -Subproject commit 4f8a70d885932edc3a9f1a0cf5c90d5afe68ee92 +Subproject commit 817a50a90ab0bc55cae73587b68de44358a0672b From 06604f601f91150e6c5fa74733b22431addbbe30 Mon Sep 17 00:00:00 2001 From: Jason Wen Date: Fri, 13 Nov 2026 00:08:55 -0500 Subject: [PATCH 12/12] bump opendbc and update CARS.md --- docs/CARS.md | 3 ++- opendbc_repo | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/CARS.md b/docs/CARS.md index 934a5469eb..1c1a4d8a12 100644 --- a/docs/CARS.md +++ b/docs/CARS.md @@ -4,7 +4,7 @@ A supported vehicle is one that just works when you install a comma device. All supported cars provide a better experience than any stock system. Supported vehicles reference the US market unless otherwise specified. -# 355 Supported Cars +# 356 Supported Cars |Make|Model|Supported Package|ACC|No ACC accel below|No ALC below|Steering Torque|Resume from stop|Hardware Needed
 |Video|Setup Video| |---|---|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| @@ -194,6 +194,7 @@ A supported vehicle is one that just works when you install a comma device. All |Kia|Niro Plug-in Hybrid 2020|Smart Cruise Control (SCC)|Stock|0 mph|32 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai D connector
- 1 OBD-C cable (2 ft)
- 1 comma four
- 1 comma power v3
- 1 harness box
- 1 mount
Buy Here
||| |Kia|Niro Plug-in Hybrid 2021|Smart Cruise Control (SCC)|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai D connector
- 1 OBD-C cable (2 ft)
- 1 comma four
- 1 comma power v3
- 1 harness box
- 1 mount
Buy Here
||| |Kia|Niro Plug-in Hybrid 2022|Smart Cruise Control (SCC)|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai F connector
- 1 OBD-C cable (2 ft)
- 1 comma four
- 1 comma power v3
- 1 harness box
- 1 mount
Buy Here
||| +|Kia|Niro Plus EV 2024|Smart Cruise Control (SCC)|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai H connector
- 1 OBD-C cable (2 ft)
- 1 comma four
- 1 comma power v3
- 1 harness box
- 1 mount
Buy Here
||| |Kia|Optima 2017|Advanced Smart Cruise Control|Stock|0 mph|32 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai B connector
- 1 OBD-C cable (2 ft)
- 1 comma four
- 1 comma power v3
- 1 harness box
- 1 mount
Buy Here
||| |Kia|Optima 2019-20|Smart Cruise Control (SCC)|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai G connector
- 1 OBD-C cable (2 ft)
- 1 comma four
- 1 comma power v3
- 1 harness box
- 1 mount
Buy Here
||| |Kia|Optima Hybrid 2019|Smart Cruise Control (SCC)|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai H connector
- 1 OBD-C cable (2 ft)
- 1 comma four
- 1 comma power v3
- 1 harness box
- 1 mount
Buy Here
||| diff --git a/opendbc_repo b/opendbc_repo index 817a50a90a..9d818ceae6 160000 --- a/opendbc_repo +++ b/opendbc_repo @@ -1 +1 @@ -Subproject commit 817a50a90ab0bc55cae73587b68de44358a0672b +Subproject commit 9d818ceae610cf0ec4274f20345cfaff79d222fc