Commit Graph

176 Commits

Author SHA1 Message Date
1okko b6df4409ac fix(c3xl-vip): rebuild params after branch switch 2026-09-29 21:28:49 +08:00
1okko 3c7e29c981 feat(c3xl-vip): integrate Snapdragon QNN Wi-Fi external inference 2026-09-29 21:09:27 +08:00
1okko 59f1adcd5a c3_client: support legacy and new cereal layouts 2026-09-29 20:38:50 +08:00
1okko 44153857aa docs: update changelog 2026-09-28 20:37:34 +08:00
1okko 57502cb445 updater: check for updates while online 2026-09-28 20:33:21 +08:00
1okko 718a417672 hardware: suppress boot-time temperature spike 2026-09-28 20:24:03 +08:00
1okko 7a244f3e1b updater: show download progress and speed 2026-09-28 19:59:00 +08:00
1okko a64e450718 ui: revise offroad update prompt translation 2026-09-27 15:26:05 +08:00
1okko b1a72b0f15 ui: clarify camera offset translation 2026-09-26 23:21:56 +08:00
1okko f0e2156b65 agnos: use patched 19.7-c3xl-dev system image from R2 2026-09-26 23:05:56 +08:00
1okko 6e9946a0dc ui: restore camera offset control in model settings 2026-09-26 13:54:33 +08:00
1okko 9938011315 honda: support Civic 2022 radar variants with HUD on ACC bus 2026-09-23 14:48:42 +08:00
1okko 8c81232959 honda: keep can_valid true when ACC_HUD and LKAS_HUD are omitted 2026-09-23 14:38:42 +08:00
Comma Device fafa5cd31b ui: add BeepEnabled toggle to visual settings 2026-09-19 10:26:30 +08:00
Comma Device 627c28695b honda: add UI opt-in for Bosch-A radar 2026-09-16 21:24:22 +08:00
Comma Device 1274eee61b honda: trigger the Bosch-A decoder on any main frame
Upstream triggers on 0x2FF, the slot-15 companion burst. A car only broadcasts
the object slots that hold a target, so on the 2018-22 Accord rlog (144k Bosch-A
frames, 80 ids) 0x2FF never appears and the decoder never evaluated: zero radar
points. Any Bosch-A main frame now drives evaluation; per-slot signal reads are
unchanged, so this only changes when we look.
2026-09-16 19:21:08 +08:00
Comma Device 757e0f0d53 honda: wire the Bosch-A radar DBC on every Bosch-A platform
Widening the enable gate to the whole HONDA_BOSCH_A family meant the other
platforms (N-Box, Accord, Civic Bosch Diesel, CR-V Hybrid, RDX 3G, Insight,
Honda e) still lacked a Bus.radar entry, so constructing the radar interface
raised KeyError: Bus.radar. Give each of them the hand-written Bosch-A DBC.
2026-09-16 19:16:48 +08:00
Comma Device 1fb5f7969e honda: update the radar tests for the wider enable gate 2026-09-16 19:15:52 +08:00
Comma Device a4eb1ef4e9 honda: enable the Bosch-A radar on every Bosch-A platform
Instead of the verified-subset allowlist (Civic Bosch / CR-V 5G only), clear
radarUnavailable for the whole HONDA_BOSCH_A hardware family so the decoder can
be tried on other Bosch-A cars. The sentinel-file kill switch still turns it
off, and HONDA_BOSCH_A_RADAR_VERIFIED is kept for reference.
2026-09-16 19:15:20 +08:00
Comma Device 8b1868bd52 honda: use the deprecated RadarPoint group for aRel/yvRel/measured
opendbc's RadarPoint keeps aRel, yvRel and measured inside the deprecated group
(the upstream fork had them at the top level), so assigning them raised
'struct has no such member; name = aRel'. Point at the group in the radar
interface and in the tests.
2026-09-16 19:08:15 +08:00
Comma Device 5fbf020db6 honda: pass CP_SP into the Bosch-A radar interface
sunnypilot's RadarInterfaceBase.__init__ takes (CP, CP_SP); the upstream file
only took CP, so constructing the radar interface raised
'RadarInterfaceBase.__init__() missing 1 required positional argument: CP_SP'.
Build CP_SP in the tests as well and pass it through.
2026-09-16 19:06:32 +08:00
Comma Device 3c4bc731c2 honda: add the Bosch-A radar unit tests
Ported from StarPilot together with the radar interface. The tests cover the
16-slot CAN id map, DBC bit geometry, range/azimuth/vRel conversion, object
lifecycle, fallback behaviour, stale-bus handling and the platform allowlists.

The tester toggle uses this fork's sentinel file
(/data/params/d/HondaBoschARadarOff) instead of the upstream HondaBoschARadar
params key, so the suite runs without a libparams rebuild.
2026-09-16 19:05:00 +08:00
Comma Device bc740bd0b3 honda: read the Bosch-A radar on verified platforms (RX-only)
Ported from StarPilot (mawei/StarPilot): the sunnypilot Honda radar interface
deliberately returns no points for Bosch cars, so radard never sees the stock
radar. This brings in the hand-written 16-slot Bosch-A decoder:

- radar_interface.py: full Bosch-A object bank decode (0x280-0x2FF main frames
  plus the 0x290-0x297 companion frames), range/rate/angle conversion and sweep
  triggering. Receive only - it never sends CAN, so factory AEB/CMBS/FCW stay
  live and no safety change or rebuild is required.
- dbc/honda_bosch_a_radar.dbc: the bit geometry the decoder parses.
- values.py: HONDA_CIVIC_BOSCH and HONDA_CRV_5G (the verified platforms) point
  Bus.radar at the new DBC; HONDA_BOSCH_A / HONDA_BOSCH_A_RADAR_VERIFIED sets
  describe which platforms may use it.
- interface.py: radarUnavailable is cleared for verified platforms unless a
  kill switch is present. The switch is a sentinel file
  (/data/params/d/HondaBoschARadarOff) instead of a params_keys.h entry, so no
  libparams rebuild is needed.

With radar points flowing, the existing sunnypilot longitudinal control can use
them; nothing in carcontroller or safety was touched.
2026-09-16 18:54:54 +08:00
dzid26 960f1c6c48 camera offset: use real horizon for the shear center (#2016) 2026-09-14 21:21:17 +08:00
Matt Purnell ade767538a modeld: set the valid flag on modelDataV2SP (#2017)
* modeld: set the valid flag on modelDataV2SP

modelDataV2SP was published with new_message's default valid=False, so
the message was permanently invalid. Nothing acts on that today because
selfdrived lists it under ignore_valid, but it shows up as invalid in
every commIssue dump and hides any real problem behind a false one.

Copy modelV2's flag, the same way fill_model_msg already does for
drivingModelData.

Assisted-by: Claude
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* modeld_v2: set the valid flag on modelDataV2SP

The sunnypilot model runner publishes the same message and had the same
gap. Copy modelV2's flag here too, so both daemons agree.

Assisted-by: Claude
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
Co-authored-by: James Vecellio-Grant <159560811+Discountchubbs@users.noreply.github.com>
2026-09-14 21:21:17 +08:00
Amy Jeanes 156149db28 models: don't freeze the ui on an unset LagdToggleDelay (#2026)
models: don't block the ui on an unset LagdToggleDelay

Params.get's second positional is `block`, not a fallback value, so
get("LagdToggleDelay", "0.2") passes block=True and does a blocking read.
When the param is unset this spins the ui thread until it appears, freezing
the models panel (the description is rebuilt every frame). Read it the same
way livedelay/lagd_toggle.py does.

Claude-Session: https://claude.ai/code/session_01EGMnVnSk5inGTrd7kuDVG9

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: James Vecellio-Grant <159560811+Discountchubbs@users.noreply.github.com>
2026-09-14 21:21:17 +08:00
fishop 9ae11af709 launch: auto-install pyserial on AGNOS before updater runs 2026-09-12 16:20:20 +08:00
Comma Device 7d262eb5fd registration: never skip into the OS until the backend authorizes the device
A fresh MR.ONE C3XL that was not yet authorized by the backend used to give
up after ~60s and boot into the OS with DongleId=UnregisteredDevice (the
60s hotfix return in the retry loop). From then on every boot skipped
registration entirely.

- remove the 60s give-up: keep retrying the registration screen until the
  backend returns a valid dongle id
- only treat HTTP 200 + a real dongle_id as authorized; 402/403, other
  statuses, bad JSON or a missing/unregistered dongle id all keep waiting
  on the registration screen (\ contact MR.ONE\)
- a device with no key pair is likewise not authorized and stays on the
  registration screen instead of booting in
2026-09-08 20:19:44 +08:00
Comma Device 4914609b2d bundle default CD210 pkl: usable on first boot without download
- replace the bundled openpilot/selfdrive/modeld/models/driving_tinygrad.pkl
  (compiled with an old tinygrad, unloadable by the current runtime) with the
  freshly compiled CD210 pkl (vision+policy split, run_policy format)
- modeld_v2: fall back to the bundled default pkl when no active bundle is
  selected, so a fresh install drives immediately even offline
- helpers: when no bundle is selected but the bundled default pkl exists, the
  active model runner is tinygrad (modeld_v2), not stock modeld (which requires
  a run_model-format pkl)
2026-09-07 20:42:32 +08:00
Comma Device d6bdf9e745 models: make default model reliable on first boot
- models_manager: always run so the first-boot/upgrade default model (CD210)
  download continues even when onroad (was only_offroad, stalling the download)
- modeld_v2: _pkl_exists now requires the pkl or every chunk file to exist; a
  bare chunkmanifest is written eagerly for all catalog models and must not be
  treated as downloaded (fixes loading half-downloaded models)
- models UI: only synthesize the Default row when the default model is not
  already listed in the catalog (avoids two CD210 entries)
2026-09-07 20:32:20 +08:00
Comma Device 20609763ea modeld_v2: realize frames on npy -> amd (#1993) 2026-09-06 15:52:21 +08:00
Comma Device 6b0fc48635 modeld_v2: one dev warp and enqueue (#1990)
Port from master-dev (047ae41c0). Drops legacy pkl branch; warp/run_policy
read from metadata/run_policy + per-res warp (TSFDOM pkl is compatible).
after_enqueue hook for chestnut state send; fetcher chestnut catalog v24.
CI-only parts skipped.
2026-09-05 15:06:42 +08:00
Comma Device f23b755e6a Revert ui streamer low-latency /ctrl changes (back to original MJPEG view)
Low-latency canvas/WS version felt choppier on this device; restore the
original <img> MJPEG /ctrl + defaults (fps10, quality50, full-res).
2026-09-04 21:20:14 +08:00
Comma Device f470e9e86e ui streamer: low-latency /ctrl (canvas + WS binary, latest-frame, half-res)
- /ctrl: replace <img> MJPEG with WebSocket binary frames + canvas
  (createImageBitmap), cutting browser buffering latency
- capture: only encode the newest frame (drop backlog)
- encode at STREAM_SCALE (default 0.5) + configurable fps/quality
- add /config endpoint for live tuning without restart
- launch_env defaults: STREAM_FPS=20, STREAM_QUALITY=45, STREAM_SCALE=0.5
2026-09-04 21:08:17 +08:00
Comma Device efb93b4ec3 models: fallback to hf-mirror.com when huggingface.co download fails 2026-09-04 19:55:08 +08:00
Comma Device 7d7508b968 models: auto-download default model (CD210) when no qcom bundle selected
Mirror upstream first-boot behavior: with nothing selected on qcom, queue
DEFAULT_MODEL_REF so the default model (CD210) is downloaded and activated
automatically, instead of falling back to the stock selfdrive modeld (which
needs a compile-format pkl that is not shipped here).
2026-09-04 19:44:24 +08:00
Comma Device 027d768017 models: default model back to CD210 (align upstream sunnypilot) 2026-09-04 19:42:07 +08:00
Comma Device f1db2eb5aa tinygrad: bump to e837e367a (required by modeld_v2 downloaded models)
Downloaded/tinygrad-runner models are compiled with tinygrad e837e367a
(the pinned tinygrad_ref in the model catalogs). The old 66ee3cfb4
runtime crashes rendering their uops (uop/render.py TypeError), so the
device must ship this tinygrad for the new modeld_v2 pipeline.
2026-09-04 18:58:11 +08:00
Comma Device 7b126e7708 models: default to TSFDOM (tinygrad runner)
Use TSFDOM (ref 0394d728...) as the default downloaded model so the
device runs modeld_v2 on the tinygrad runner instead of the stock
selfdrive modeld (which needs a local compile-format pkl).
2026-09-04 18:50:24 +08:00
Comma Device 943b1f0004 ui streamer: add remote touch control (/ctrl + /ws)
- /ctrl: fullscreen mirrored UI page with pointer/touch input
- /ws: minimal WebSocket endpoint -> inject MouseEvents into UI
  event queue (same path as real touch), 2 touch slots
- first-inject / error logging
2026-09-04 17:23:05 +08:00
Comma Device 303cfa8107 Add Comma4-UI-Streamer integration (MJPEG UI stream)
- add openpilot/system/ui/lib/ui_stream.py: MJPEG server on :8082
  with async JPEG encode (no render-thread stall) + telemetry writer
- application.py: STREAM=1 hooks - init attr, start server in
  init_window (create render texture if needed), capture frame
  before _monitor_fps
- launch_env.sh: STREAM=1 default (STREAM=0 disables), port 8082,
  quality 50, 10 fps
2026-09-04 16:50:25 +08:00
Comma Device 93582d1c81 Merge master-dev sync-20260902 into c3xl-dev
- upstream sync 47db84ebf..132b31f4c: new panda health packet, chestnut
  usb status, ui TextAlignment refactor, modeld/HF model name, hardwared
- agnos.json: update system partition only, keep custom boot
- submodules: opendbc_repo f95f996f (mads cppcheck), panda 74a0adce
  (health flags packet), uv.lock raylib post101
- resolve ui/layouts/home.py conflict (keep MR.ONE home content)
2026-09-04 14:55:37 +08:00
Comma Device 281f35dd30 update c3_client.py (C3 client remote control) 2026-09-03 20:00:16 +08:00
Comma Device 93048c2e90 [bot] Update Python packages (#1950) 2026-09-02 20:17:38 +08:00
Comma Device 97fd86d039 models: add big model ONNX hash tracking (#1982) 2026-09-02 20:17:38 +08:00
Comma Device 6dbf37a575 fix: remove duplicate torque config for TOYOTA_SIENNA_PATCHED (keep explicit params) 2026-09-02 19:15:39 +08:00
Comma Device eefccd83b0 Toyota: Sienna 2021-26 PATCHED support (EPS-bypassed SecOC), replacing Sienna 2026 PRC 2026-09-02 19:08:17 +08:00
Comma Device 46caa2270d gwm: fix CarController actuators handling (sunnypilot builder API)
commaai's carcontroller called actuators.as_builder(), but in sunnypilot
opendbc the actuators passed to CarController.update is already a mutable
builder, so this crashed onroad. Use it directly. Verified by replaying
6138 frames of real Haval H6 CAN: 0 errors, control commands generated.
2026-09-01 21:35:27 +08:00
Comma Device 28ce7621e9 gwm: fix sunnypilot API integration so Haval H6 is usable
The commaai PR was written against a non-sunnypilot CarStateBase/CarInterface.
Adapt it to c3xl-dev:
- CarState.get_can_parsers(CP, CP_SP)
- carstate.update returns (CarState, CarStateSP) and reads ret.deprecated.brake
- CarController.update(CC, CC_SP, CS, now_nanos)
- CarInterface.update unpacks (ret, ret_sp)

Without these the car interface crashed at runtime and the selected vehicle
showed as unavailable.
2026-09-01 20:58:08 +08:00
Comma Device e85f40d18b gwm: port Haval H6 support from opendbc PR #3263
Adds the GWM brand (Haval H6 2019-26, full ACC/steering support):
- opendbc/car/gwm: brand interface, carstate, carcontroller, gwmcan, values
  (adapted to sunnypilot CP_SP API and deprecated field group)
- car.capnp: SafetyModel.gwm @36
- values.py: GWM in the Platform union
- docs_definitions.py: CarHarness.gwm
- safety: gwm.h, SAFETY_GWM 36, registration (behind ALLOW_DEBUG)
- dbc generator for gwm_haval_h6_mk3, torque params for GWM_HAVAL_H6
- car_list.json: Haval H6 now appears in the vehicle selector
- rebuilt panda firmware with the GWM safety mode (DEV-dc833705)
2026-09-01 20:49:45 +08:00