From ee5c1c450797e77acf217a81b07b628109cf0690 Mon Sep 17 00:00:00 2001 From: DevTekVE Date: Sun, 5 Jan 2025 02:48:02 +0100 Subject: [PATCH] Modular Assistive Driving System (MADS) (#446) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * allow re-regage * bump opendbc * bump panda * apply pause/resume fix for hyundai (should do this in a separate PR) * bump opendbc * fix * rename * Fix? * make sure to disengage for allow always cars * fix * combine * more fix * not needed * check if engagement is from openpilot's state machine * Rename * fix panda safety * fix * no fake lfa button for @devtekve ;) * fix non drive gear re-engage * fix settings * combine * add replace method * use replace * remoev already checks if it exists * fix * group * add todo * reserve events * cleaner * hyundai: only allow for cars with lfa button * sunnyParams * make sure it's car only * Move car-specific changes to opendbc * no need * bump opendbc * more fixes * no more available * more! * final? * always emit user disable * no longer needed * move unit test * add sunnypilot to unit tests * bump opendbc * use new cereal * bump opendbc * static analysis * no unittest * no need available * UI border update * show MADS updates * Add TODO * no longer needed * fix changed events * fix cluster enabled * don't add pre enable if not long * should use enabled * enabled <-> active * better format * bump opendbc * static analysis * static analysis * Rename test as collector was dying * Show our overriding * Revert "show MADS updates" This reverts commit daf0ad62 Revert "fix changed events" This reverts commit 31d8c97f * ignoring reserved events * adjusting creation delays * back to stock removing allow_cancel * should be enabled * revert * silent lkas disable * no need * user disable tests * just warning * MUST REMOVE test process replay * fix no entry * fixme * bump opendbc * need this check * cleanup * allow entering paused state if no entry from disabled * brake hold should apply to all * in lists * update unit test * simpler * unused * same thing * fix * only mads in enabled state and long in disabled state * unify silent enable * do this for dlob * bump submodules * fix * bump submodules * bump opendbc * less frequent * more events * fix * allow no entry to paused for non-drive gears * fix * use cereal * Revert "allow no entry to paused for non-drive gears" This reverts commit 6d64a4dd9c6de5ad14ef1e88dbc3b6ad174232d8. * allow in all * Revert "allow in all" This reverts commit 6375f1489176dc6c69cb7fa388676e482713f80a. * should not be all! * rename for clarity * silent park brake * flipped * bump submodules * Bump to latest mads-new panda * bump panda * more nissan * bump panda * bump msgq * bump panda * bump submodules * bump opendbc * bump opendbc * improving the state * Revert "PlayStation® model (#34133)" This reverts commit 5160bee5437e58ab0ace59c6db1c6d7b416c4025. * should be none * bump panda * bump opendbc * Apply suggestions from code review * bump panda * bump ref panda * add todo-sp * bump panda ref * bump more panda * changing refs * nuke nuke nuke * use sunny's newer states * bump with new panda * bump panda * Parse more flags from alt exp, more tests, hyundai main cruise allowed * Parse more flags from alt exp, more tests, hyundai main cruise allowed * missed * mutation for controls allowed rising edge * ford mutation * license * remove * unused * bump submodules * use always allowed mads button alt exp * fix * whitelist jason's lastname to codespell * test_processes: update ref logs to 82c0278 * bump submodules * bump submodules * bump submodules * bump panda * add controls mismatch lateral event * Simplify lateral disengagement logic for MADS configuration Reversed the conditional to align the logic with the `disengage_lateral_on_brake` parameter. This ensures that lateral disengagement behavior is more intuitive and matches the expected configuration. Improves code readability and reduces potential misconfigurations. * remove unified engagement mode in panda * controls allow should be allowed at all times * squash! treat MADS button as user entry * heartbeat for mads * heartbeat mismatch exit control * remove always allow mads button from alt * move to safety_mads * remove main cruise allowed from alt * bump panda * heartbeat engaged mads mismatch mutation test * bump panda * use mads the third panda * ignore pre enable with mads * only force exit if actually actuating * use brake signal instead of pedal events when dlob is active * fix tests * fix panda tests * bump panda * new events to retain long blocks * format * uem: do not engage mads if long is engaged * bump submodules * fix not allowed engaged bug * block uem from engaging * flipped * use different heartbeat check if dlob * hard code to skip heartbeat check * remove toyota lta status for lkas, causes weird behaviors * block tesla * bump panda * bump to merged panda * bump opendbc * bump opendbc * bump opendbc * bump opendbc * Apply suggestions from code review * code ignore spells * needs to be in carstate * Bump opendbc * Update MADS toggle descriptions for clarity. Added notes to clarify behavior of the "MadsMainCruiseAllowed" setting, particularly its impact on vehicles without LFA/LKAS buttons. This ensures users are informed about potential implications when disabling this feature. * Updating translations + Adding spanish * Disengage Lateral on Brake -> Pause Lateral on Brake * test_processes: update ref logs to dd41005 * Apply suggestions from code review * fix mads button not allowed * bump submodules * bump submodule * test_processes: update ref logs to 0a0b998 * has multiple lists * Revert "has multiple lists" This reverts commit a37c1d26feac02f63bfb86a08f9b6fb06b095cf1. * base * Reapply "has multiple lists" This reverts commit d1cd8dcc815721a4113b26ab98ee2571c071e225. * migrate mads toggles to sp panel * this is why it keeps crashing * house keeping * more housekeeping * more housekeeping * don't show description by default (yet) * reset to main panel when clicked away * more * some more with interactions * don't stretch cause it looks weird with descriptions * simpler to handle offroad transition * some are toggleable while onroad * remove unused event * slight cleanup * default to true for HKG main cruise toggle * append to list after * add Customize MADS to UI preview * simpler * move to sp list * how tf was this removed * update mads settings button on show event * test_processes: update ref logs to efa9c32 --------- Co-authored-by: Jason Wen --- .github/workflows/ui_preview.yaml | 2 +- cereal/custom.capnp | 18 +- cereal/log.capnp | 77 +++++++- cereal/services.py | 1 + common/params.cc | 4 + pyproject.toml | 1 + selfdrive/car/card.py | 6 + selfdrive/controls/controlsd.py | 15 +- selfdrive/pandad/panda.cc | 4 +- selfdrive/pandad/panda.h | 2 +- selfdrive/pandad/pandad.cc | 20 +- selfdrive/selfdrived/events.py | 111 +++++++++++ selfdrive/selfdrived/selfdrived.py | 22 +++ selfdrive/selfdrived/tests/test_alerts.py | 2 +- ...9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} | 0 ...0d7a427906c43549cf58b7a859f264aabdf28d.zst | 3 - ...a9c321c2f985d948b5d9a5e708f5d2d31b7737.zst | 3 + ...9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} | 0 ...9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} | 0 ...9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} | 0 ...9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} | 0 ...0d7a427906c43549cf58b7a859f264aabdf28d.zst | 3 - ...a9c321c2f985d948b5d9a5e708f5d2d31b7737.zst | 3 + ...9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} | 0 ...9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} | 0 ...9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} | 0 ...9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} | 0 ...0d7a427906c43549cf58b7a859f264aabdf28d.zst | 3 - ...a9c321c2f985d948b5d9a5e708f5d2d31b7737.zst | 3 + ...0d7a427906c43549cf58b7a859f264aabdf28d.zst | 3 - ...a9c321c2f985d948b5d9a5e708f5d2d31b7737.zst | 3 + ...0d7a427906c43549cf58b7a859f264aabdf28d.zst | 3 - ...a9c321c2f985d948b5d9a5e708f5d2d31b7737.zst | 3 + ...0d7a427906c43549cf58b7a859f264aabdf28d.zst | 3 - ...a9c321c2f985d948b5d9a5e708f5d2d31b7737.zst | 3 + ...0d7a427906c43549cf58b7a859f264aabdf28d.zst | 3 - ...a9c321c2f985d948b5d9a5e708f5d2d31b7737.zst | 3 + ...0d7a427906c43549cf58b7a859f264aabdf28d.zst | 3 - ...a9c321c2f985d948b5d9a5e708f5d2d31b7737.zst | 3 + ...9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} | 0 ...0d7a427906c43549cf58b7a859f264aabdf28d.zst | 3 - ...a9c321c2f985d948b5d9a5e708f5d2d31b7737.zst | 3 + ...9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} | 0 ...9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} | 0 ...9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} | 0 ...9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} | 0 ...0d7a427906c43549cf58b7a859f264aabdf28d.zst | 3 - ...a9c321c2f985d948b5d9a5e708f5d2d31b7737.zst | 3 + ...9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} | 0 ...9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} | 0 ...9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} | 0 ...9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} | 0 ...0d7a427906c43549cf58b7a859f264aabdf28d.zst | 3 - ...a9c321c2f985d948b5d9a5e708f5d2d31b7737.zst | 3 + ...9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} | 0 ...0d7a427906c43549cf58b7a859f264aabdf28d.zst | 3 - ...a9c321c2f985d948b5d9a5e708f5d2d31b7737.zst | 3 + ...9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} | 0 ...9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} | 0 ...9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} | 0 ...9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} | 0 ...0d7a427906c43549cf58b7a859f264aabdf28d.zst | 3 - ...a9c321c2f985d948b5d9a5e708f5d2d31b7737.zst | 3 + ...9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} | 0 ...9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} | 0 ...9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} | 0 ...9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} | 0 ...0d7a427906c43549cf58b7a859f264aabdf28d.zst | 3 - ...a9c321c2f985d948b5d9a5e708f5d2d31b7737.zst | 3 + ...9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} | 0 ...0d7a427906c43549cf58b7a859f264aabdf28d.zst | 3 - ...a9c321c2f985d948b5d9a5e708f5d2d31b7737.zst | 3 + ...9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} | 0 ...9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} | 0 ...9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} | 0 ...9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} | 0 ...0d7a427906c43549cf58b7a859f264aabdf28d.zst | 3 - ...a9c321c2f985d948b5d9a5e708f5d2d31b7737.zst | 3 + ...9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} | 0 ...9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} | 0 ...9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} | 0 ...9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} | 0 ...0d7a427906c43549cf58b7a859f264aabdf28d.zst | 3 - ...a9c321c2f985d948b5d9a5e708f5d2d31b7737.zst | 3 + ...9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} | 0 ...0d7a427906c43549cf58b7a859f264aabdf28d.zst | 3 - ...a9c321c2f985d948b5d9a5e708f5d2d31b7737.zst | 3 + ...9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} | 0 ...9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} | 0 ...9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} | 0 ...9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} | 0 ...0d7a427906c43549cf58b7a859f264aabdf28d.zst | 3 - ...a9c321c2f985d948b5d9a5e708f5d2d31b7737.zst | 3 + ...9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} | 0 ...9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} | 0 ...9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} | 0 ...9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} | 0 ...0d7a427906c43549cf58b7a859f264aabdf28d.zst | 3 - ...a9c321c2f985d948b5d9a5e708f5d2d31b7737.zst | 3 + ...0d7a427906c43549cf58b7a859f264aabdf28d.zst | 3 - ...a9c321c2f985d948b5d9a5e708f5d2d31b7737.zst | 3 + ...0d7a427906c43549cf58b7a859f264aabdf28d.zst | 3 - ...a9c321c2f985d948b5d9a5e708f5d2d31b7737.zst | 3 + selfdrive/test/process_replay/ref_commit | 2 +- selfdrive/ui/sunnypilot/SConscript | 6 +- .../settings/sunnypilot/mads_settings.cc | 67 +++++++ .../settings/sunnypilot/mads_settings.h | 36 ++++ .../qt/offroad/settings/sunnypilot_panel.cc | 81 ++++++++- .../qt/offroad/settings/sunnypilot_panel.h | 19 +- .../ui/sunnypilot/qt/widgets/scrollview.cc | 2 +- selfdrive/ui/sunnypilot/ui.cc | 2 +- selfdrive/ui/tests/test_ui/run.py | 24 ++- selfdrive/ui/translations/main_ar.ts | 61 ++++++- selfdrive/ui/translations/main_de.ts | 61 ++++++- selfdrive/ui/translations/main_es.ts | 61 ++++++- selfdrive/ui/translations/main_fr.ts | 61 ++++++- selfdrive/ui/translations/main_ja.ts | 61 ++++++- selfdrive/ui/translations/main_ko.ts | 61 ++++++- selfdrive/ui/translations/main_pt-BR.ts | 61 ++++++- selfdrive/ui/translations/main_th.ts | 61 ++++++- selfdrive/ui/translations/main_tr.ts | 61 ++++++- selfdrive/ui/translations/main_zh-CHS.ts | 61 ++++++- selfdrive/ui/translations/main_zh-CHT.ts | 61 ++++++- selfdrive/ui/ui.cc | 18 +- selfdrive/ui/ui.h | 4 + sunnypilot/mads/helpers.py | 63 +++++++ sunnypilot/mads/mads.py | 172 ++++++++++++++++++ sunnypilot/mads/state.py | 146 +++++++++++++++ .../mads/tests/test_mads_state_machine.py | 156 ++++++++++++++++ system/manager/manager.py | 9 +- tools/cabana/streams/pandastream.cc | 2 +- 131 files changed, 1779 insertions(+), 118 deletions(-) rename selfdrive/test/process_replay/fakedata/{regen1CA7A48E6F7|2024-08-30--02-45-08--0_calibrationd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst => regen1CA7A48E6F7|2024-08-30--02-45-08--0_calibrationd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} (100%) delete mode 100644 selfdrive/test/process_replay/fakedata/regen1CA7A48E6F7|2024-08-30--02-45-08--0_card_a20d7a427906c43549cf58b7a859f264aabdf28d.zst create mode 100644 selfdrive/test/process_replay/fakedata/regen1CA7A48E6F7|2024-08-30--02-45-08--0_card_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst rename selfdrive/test/process_replay/fakedata/{regen1CA7A48E6F7|2024-08-30--02-45-08--0_controlsd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst => regen1CA7A48E6F7|2024-08-30--02-45-08--0_controlsd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} (100%) rename selfdrive/test/process_replay/fakedata/{regen1CA7A48E6F7|2024-08-30--02-45-08--0_dmonitoringd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst => regen1CA7A48E6F7|2024-08-30--02-45-08--0_dmonitoringd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} (100%) rename selfdrive/test/process_replay/fakedata/{regen1CA7A48E6F7|2024-08-30--02-45-08--0_locationd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst => regen1CA7A48E6F7|2024-08-30--02-45-08--0_locationd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} (100%) rename selfdrive/test/process_replay/fakedata/{regen1CA7A48E6F7|2024-08-30--02-45-08--0_paramsd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst => regen1CA7A48E6F7|2024-08-30--02-45-08--0_paramsd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} (100%) delete mode 100644 selfdrive/test/process_replay/fakedata/regen1CA7A48E6F7|2024-08-30--02-45-08--0_plannerd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst create mode 100644 selfdrive/test/process_replay/fakedata/regen1CA7A48E6F7|2024-08-30--02-45-08--0_plannerd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst rename selfdrive/test/process_replay/fakedata/{regen1CA7A48E6F7|2024-08-30--02-45-08--0_radard_a20d7a427906c43549cf58b7a859f264aabdf28d.zst => regen1CA7A48E6F7|2024-08-30--02-45-08--0_radard_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} (100%) rename selfdrive/test/process_replay/fakedata/{regen1CA7A48E6F7|2024-08-30--02-45-08--0_selfdrived_a20d7a427906c43549cf58b7a859f264aabdf28d.zst => regen1CA7A48E6F7|2024-08-30--02-45-08--0_selfdrived_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} (100%) rename selfdrive/test/process_replay/fakedata/{regen1CA7A48E6F7|2024-08-30--02-45-08--0_torqued_a20d7a427906c43549cf58b7a859f264aabdf28d.zst => regen1CA7A48E6F7|2024-08-30--02-45-08--0_torqued_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} (100%) rename selfdrive/test/process_replay/fakedata/{regen1CA7A48E6F7|2024-08-30--02-45-08--0_ubloxd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst => regen1CA7A48E6F7|2024-08-30--02-45-08--0_ubloxd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} (100%) delete mode 100644 selfdrive/test/process_replay/fakedata/regen306779F6870|2024-10-03--04-03-23--0_card_a20d7a427906c43549cf58b7a859f264aabdf28d.zst create mode 100644 selfdrive/test/process_replay/fakedata/regen306779F6870|2024-10-03--04-03-23--0_card_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst delete mode 100644 selfdrive/test/process_replay/fakedata/regen4B38A7428CD|2024-08-30--02-56-31--0_card_a20d7a427906c43549cf58b7a859f264aabdf28d.zst create mode 100644 selfdrive/test/process_replay/fakedata/regen4B38A7428CD|2024-08-30--02-56-31--0_card_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst delete mode 100644 selfdrive/test/process_replay/fakedata/regen4CE950B0267|2024-08-30--02-51-30--0_card_a20d7a427906c43549cf58b7a859f264aabdf28d.zst create mode 100644 selfdrive/test/process_replay/fakedata/regen4CE950B0267|2024-08-30--02-51-30--0_card_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst delete mode 100644 selfdrive/test/process_replay/fakedata/regen58464878D07|2024-08-30--03-15-31--0_card_a20d7a427906c43549cf58b7a859f264aabdf28d.zst create mode 100644 selfdrive/test/process_replay/fakedata/regen58464878D07|2024-08-30--03-15-31--0_card_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst delete mode 100644 selfdrive/test/process_replay/fakedata/regen6E484EDAB96|2024-08-30--02-47-37--0_card_a20d7a427906c43549cf58b7a859f264aabdf28d.zst create mode 100644 selfdrive/test/process_replay/fakedata/regen6E484EDAB96|2024-08-30--02-47-37--0_card_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst delete mode 100644 selfdrive/test/process_replay/fakedata/regen720F2BA4CF6|2024-08-30--03-09-15--0_card_a20d7a427906c43549cf58b7a859f264aabdf28d.zst create mode 100644 selfdrive/test/process_replay/fakedata/regen720F2BA4CF6|2024-08-30--03-09-15--0_card_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst rename selfdrive/test/process_replay/fakedata/{regen756F8230C21|2024-11-07--00-08-24--0_calibrationd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst => regen756F8230C21|2024-11-07--00-08-24--0_calibrationd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} (100%) delete mode 100644 selfdrive/test/process_replay/fakedata/regen756F8230C21|2024-11-07--00-08-24--0_card_a20d7a427906c43549cf58b7a859f264aabdf28d.zst create mode 100644 selfdrive/test/process_replay/fakedata/regen756F8230C21|2024-11-07--00-08-24--0_card_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst rename selfdrive/test/process_replay/fakedata/{regen756F8230C21|2024-11-07--00-08-24--0_controlsd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst => regen756F8230C21|2024-11-07--00-08-24--0_controlsd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} (100%) rename selfdrive/test/process_replay/fakedata/{regen756F8230C21|2024-11-07--00-08-24--0_dmonitoringd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst => regen756F8230C21|2024-11-07--00-08-24--0_dmonitoringd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} (100%) rename selfdrive/test/process_replay/fakedata/{regen756F8230C21|2024-11-07--00-08-24--0_locationd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst => regen756F8230C21|2024-11-07--00-08-24--0_locationd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} (100%) rename selfdrive/test/process_replay/fakedata/{regen756F8230C21|2024-11-07--00-08-24--0_paramsd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst => regen756F8230C21|2024-11-07--00-08-24--0_paramsd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} (100%) delete mode 100644 selfdrive/test/process_replay/fakedata/regen756F8230C21|2024-11-07--00-08-24--0_plannerd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst create mode 100644 selfdrive/test/process_replay/fakedata/regen756F8230C21|2024-11-07--00-08-24--0_plannerd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst rename selfdrive/test/process_replay/fakedata/{regen756F8230C21|2024-11-07--00-08-24--0_radard_a20d7a427906c43549cf58b7a859f264aabdf28d.zst => regen756F8230C21|2024-11-07--00-08-24--0_radard_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} (100%) rename selfdrive/test/process_replay/fakedata/{regen756F8230C21|2024-11-07--00-08-24--0_selfdrived_a20d7a427906c43549cf58b7a859f264aabdf28d.zst => regen756F8230C21|2024-11-07--00-08-24--0_selfdrived_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} (100%) rename selfdrive/test/process_replay/fakedata/{regen756F8230C21|2024-11-07--00-08-24--0_torqued_a20d7a427906c43549cf58b7a859f264aabdf28d.zst => regen756F8230C21|2024-11-07--00-08-24--0_torqued_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} (100%) rename selfdrive/test/process_replay/fakedata/{regen756F8230C21|2024-11-07--00-08-24--0_ubloxd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst => regen756F8230C21|2024-11-07--00-08-24--0_ubloxd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} (100%) delete mode 100644 selfdrive/test/process_replay/fakedata/regen9ADBECBCD1C|2024-08-30--03-13-04--0_card_a20d7a427906c43549cf58b7a859f264aabdf28d.zst create mode 100644 selfdrive/test/process_replay/fakedata/regen9ADBECBCD1C|2024-08-30--03-13-04--0_card_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst rename selfdrive/test/process_replay/fakedata/{regen9CBD921E93E|2024-08-30--02-38-51--0_calibrationd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst => regen9CBD921E93E|2024-08-30--02-38-51--0_calibrationd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} (100%) delete mode 100644 selfdrive/test/process_replay/fakedata/regen9CBD921E93E|2024-08-30--02-38-51--0_card_a20d7a427906c43549cf58b7a859f264aabdf28d.zst create mode 100644 selfdrive/test/process_replay/fakedata/regen9CBD921E93E|2024-08-30--02-38-51--0_card_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst rename selfdrive/test/process_replay/fakedata/{regen9CBD921E93E|2024-08-30--02-38-51--0_controlsd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst => regen9CBD921E93E|2024-08-30--02-38-51--0_controlsd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} (100%) rename selfdrive/test/process_replay/fakedata/{regen9CBD921E93E|2024-08-30--02-38-51--0_dmonitoringd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst => regen9CBD921E93E|2024-08-30--02-38-51--0_dmonitoringd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} (100%) rename selfdrive/test/process_replay/fakedata/{regen9CBD921E93E|2024-08-30--02-38-51--0_locationd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst => regen9CBD921E93E|2024-08-30--02-38-51--0_locationd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} (100%) rename selfdrive/test/process_replay/fakedata/{regen9CBD921E93E|2024-08-30--02-38-51--0_paramsd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst => regen9CBD921E93E|2024-08-30--02-38-51--0_paramsd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} (100%) delete mode 100644 selfdrive/test/process_replay/fakedata/regen9CBD921E93E|2024-08-30--02-38-51--0_plannerd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst create mode 100644 selfdrive/test/process_replay/fakedata/regen9CBD921E93E|2024-08-30--02-38-51--0_plannerd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst rename selfdrive/test/process_replay/fakedata/{regen9CBD921E93E|2024-08-30--02-38-51--0_radard_a20d7a427906c43549cf58b7a859f264aabdf28d.zst => regen9CBD921E93E|2024-08-30--02-38-51--0_radard_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} (100%) rename selfdrive/test/process_replay/fakedata/{regen9CBD921E93E|2024-08-30--02-38-51--0_selfdrived_a20d7a427906c43549cf58b7a859f264aabdf28d.zst => regen9CBD921E93E|2024-08-30--02-38-51--0_selfdrived_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} (100%) rename selfdrive/test/process_replay/fakedata/{regen9CBD921E93E|2024-08-30--02-38-51--0_torqued_a20d7a427906c43549cf58b7a859f264aabdf28d.zst => regen9CBD921E93E|2024-08-30--02-38-51--0_torqued_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} (100%) rename selfdrive/test/process_replay/fakedata/{regen9CBD921E93E|2024-08-30--02-38-51--0_ubloxd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst => regen9CBD921E93E|2024-08-30--02-38-51--0_ubloxd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} (100%) delete mode 100644 selfdrive/test/process_replay/fakedata/regenA67A128BCD8|2024-08-30--02-36-22--0_card_a20d7a427906c43549cf58b7a859f264aabdf28d.zst create mode 100644 selfdrive/test/process_replay/fakedata/regenA67A128BCD8|2024-08-30--02-36-22--0_card_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst rename selfdrive/test/process_replay/fakedata/{regenAA1FF48CF1F|2024-08-30--03-06-45--0_calibrationd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst => regenAA1FF48CF1F|2024-08-30--03-06-45--0_calibrationd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} (100%) delete mode 100644 selfdrive/test/process_replay/fakedata/regenAA1FF48CF1F|2024-08-30--03-06-45--0_card_a20d7a427906c43549cf58b7a859f264aabdf28d.zst create mode 100644 selfdrive/test/process_replay/fakedata/regenAA1FF48CF1F|2024-08-30--03-06-45--0_card_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst rename selfdrive/test/process_replay/fakedata/{regenAA1FF48CF1F|2024-08-30--03-06-45--0_controlsd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst => regenAA1FF48CF1F|2024-08-30--03-06-45--0_controlsd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} (100%) rename selfdrive/test/process_replay/fakedata/{regenAA1FF48CF1F|2024-08-30--03-06-45--0_dmonitoringd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst => regenAA1FF48CF1F|2024-08-30--03-06-45--0_dmonitoringd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} (100%) rename selfdrive/test/process_replay/fakedata/{regenAA1FF48CF1F|2024-08-30--03-06-45--0_locationd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst => regenAA1FF48CF1F|2024-08-30--03-06-45--0_locationd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} (100%) rename selfdrive/test/process_replay/fakedata/{regenAA1FF48CF1F|2024-08-30--03-06-45--0_paramsd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst => regenAA1FF48CF1F|2024-08-30--03-06-45--0_paramsd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} (100%) delete mode 100644 selfdrive/test/process_replay/fakedata/regenAA1FF48CF1F|2024-08-30--03-06-45--0_plannerd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst create mode 100644 selfdrive/test/process_replay/fakedata/regenAA1FF48CF1F|2024-08-30--03-06-45--0_plannerd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst rename selfdrive/test/process_replay/fakedata/{regenAA1FF48CF1F|2024-08-30--03-06-45--0_radard_a20d7a427906c43549cf58b7a859f264aabdf28d.zst => regenAA1FF48CF1F|2024-08-30--03-06-45--0_radard_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} (100%) rename selfdrive/test/process_replay/fakedata/{regenAA1FF48CF1F|2024-08-30--03-06-45--0_selfdrived_a20d7a427906c43549cf58b7a859f264aabdf28d.zst => regenAA1FF48CF1F|2024-08-30--03-06-45--0_selfdrived_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} (100%) rename selfdrive/test/process_replay/fakedata/{regenAA1FF48CF1F|2024-08-30--03-06-45--0_torqued_a20d7a427906c43549cf58b7a859f264aabdf28d.zst => regenAA1FF48CF1F|2024-08-30--03-06-45--0_torqued_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} (100%) rename selfdrive/test/process_replay/fakedata/{regenAA1FF48CF1F|2024-08-30--03-06-45--0_ubloxd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst => regenAA1FF48CF1F|2024-08-30--03-06-45--0_ubloxd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} (100%) delete mode 100644 selfdrive/test/process_replay/fakedata/regenACF84CCF482|2024-08-30--03-21-55--0_card_a20d7a427906c43549cf58b7a859f264aabdf28d.zst create mode 100644 selfdrive/test/process_replay/fakedata/regenACF84CCF482|2024-08-30--03-21-55--0_card_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst rename selfdrive/test/process_replay/fakedata/{regenC8F0D6ADC5C|2024-08-30--02-54-01--0_calibrationd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst => regenC8F0D6ADC5C|2024-08-30--02-54-01--0_calibrationd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} (100%) delete mode 100644 selfdrive/test/process_replay/fakedata/regenC8F0D6ADC5C|2024-08-30--02-54-01--0_card_a20d7a427906c43549cf58b7a859f264aabdf28d.zst create mode 100644 selfdrive/test/process_replay/fakedata/regenC8F0D6ADC5C|2024-08-30--02-54-01--0_card_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst rename selfdrive/test/process_replay/fakedata/{regenC8F0D6ADC5C|2024-08-30--02-54-01--0_controlsd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst => regenC8F0D6ADC5C|2024-08-30--02-54-01--0_controlsd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} (100%) rename selfdrive/test/process_replay/fakedata/{regenC8F0D6ADC5C|2024-08-30--02-54-01--0_dmonitoringd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst => regenC8F0D6ADC5C|2024-08-30--02-54-01--0_dmonitoringd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} (100%) rename selfdrive/test/process_replay/fakedata/{regenC8F0D6ADC5C|2024-08-30--02-54-01--0_locationd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst => regenC8F0D6ADC5C|2024-08-30--02-54-01--0_locationd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} (100%) rename selfdrive/test/process_replay/fakedata/{regenC8F0D6ADC5C|2024-08-30--02-54-01--0_paramsd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst => regenC8F0D6ADC5C|2024-08-30--02-54-01--0_paramsd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} (100%) delete mode 100644 selfdrive/test/process_replay/fakedata/regenC8F0D6ADC5C|2024-08-30--02-54-01--0_plannerd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst create mode 100644 selfdrive/test/process_replay/fakedata/regenC8F0D6ADC5C|2024-08-30--02-54-01--0_plannerd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst rename selfdrive/test/process_replay/fakedata/{regenC8F0D6ADC5C|2024-08-30--02-54-01--0_radard_a20d7a427906c43549cf58b7a859f264aabdf28d.zst => regenC8F0D6ADC5C|2024-08-30--02-54-01--0_radard_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} (100%) rename selfdrive/test/process_replay/fakedata/{regenC8F0D6ADC5C|2024-08-30--02-54-01--0_selfdrived_a20d7a427906c43549cf58b7a859f264aabdf28d.zst => regenC8F0D6ADC5C|2024-08-30--02-54-01--0_selfdrived_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} (100%) rename selfdrive/test/process_replay/fakedata/{regenC8F0D6ADC5C|2024-08-30--02-54-01--0_torqued_a20d7a427906c43549cf58b7a859f264aabdf28d.zst => regenC8F0D6ADC5C|2024-08-30--02-54-01--0_torqued_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} (100%) rename selfdrive/test/process_replay/fakedata/{regenC8F0D6ADC5C|2024-08-30--02-54-01--0_ubloxd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst => regenC8F0D6ADC5C|2024-08-30--02-54-01--0_ubloxd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst} (100%) delete mode 100644 selfdrive/test/process_replay/fakedata/regenDB02684E00A|2024-08-30--03-02-54--0_card_a20d7a427906c43549cf58b7a859f264aabdf28d.zst create mode 100644 selfdrive/test/process_replay/fakedata/regenDB02684E00A|2024-08-30--03-02-54--0_card_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst delete mode 100644 selfdrive/test/process_replay/fakedata/regenED976DEB757|2024-08-30--03-18-02--0_card_a20d7a427906c43549cf58b7a859f264aabdf28d.zst create mode 100644 selfdrive/test/process_replay/fakedata/regenED976DEB757|2024-08-30--03-18-02--0_card_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst delete mode 100644 selfdrive/test/process_replay/fakedata/regenF3DBBA9E8DF|2024-08-30--02-59-03--0_card_a20d7a427906c43549cf58b7a859f264aabdf28d.zst create mode 100644 selfdrive/test/process_replay/fakedata/regenF3DBBA9E8DF|2024-08-30--02-59-03--0_card_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst create mode 100644 selfdrive/ui/sunnypilot/qt/offroad/settings/sunnypilot/mads_settings.cc create mode 100644 selfdrive/ui/sunnypilot/qt/offroad/settings/sunnypilot/mads_settings.h create mode 100644 sunnypilot/mads/helpers.py create mode 100644 sunnypilot/mads/mads.py create mode 100644 sunnypilot/mads/state.py create mode 100644 sunnypilot/mads/tests/test_mads_state_machine.py diff --git a/.github/workflows/ui_preview.yaml b/.github/workflows/ui_preview.yaml index dba6ab803..a91fba957 100644 --- a/.github/workflows/ui_preview.yaml +++ b/.github/workflows/ui_preview.yaml @@ -86,7 +86,7 @@ jobs: run: >- sudo apt-get install -y imagemagick - scenes="homescreen settings_device settings_software settings_toggles settings_sunnypilot settings_developer offroad_alert update_available prime onroad onroad_disengaged onroad_override onroad_sidebar onroad_wide onroad_wide_sidebar onroad_alert_small onroad_alert_mid onroad_alert_full driver_camera body keyboard" + scenes="homescreen settings_device settings_software settings_toggles settings_sunnypilot settings_sunnypilot_mads settings_developer offroad_alert update_available prime onroad onroad_disengaged onroad_override onroad_sidebar onroad_wide onroad_wide_sidebar onroad_alert_small onroad_alert_mid onroad_alert_full driver_camera body keyboard" A=($scenes) DIFF="" diff --git a/cereal/custom.capnp b/cereal/custom.capnp index 70e4f742d..b2575256d 100644 --- a/cereal/custom.capnp +++ b/cereal/custom.capnp @@ -8,7 +8,23 @@ $Cxx.namespace("cereal"); # cereal, so use these if you want custom events in your fork. # you can rename the struct, but don't change the identifier -struct CustomReserved0 @0x81c2f05a394cf4af { +struct SelfdriveStateSP @0x81c2f05a394cf4af { + mads @0 :ModularAssistiveDrivingSystem; + + struct ModularAssistiveDrivingSystem { + state @0 :ModularAssistiveDrivingSystemState; + enabled @1 :Bool; + active @2 :Bool; + available @3 :Bool; + + enum ModularAssistiveDrivingSystemState { + disabled @0; + paused @1; + enabled @2; + softDisabling @3; + overriding @4; + } + } } struct ModelManagerSP @0xaedffd8f31e7b55d { diff --git a/cereal/log.capnp b/cereal/log.capnp index 96d14deca..d5fbad6fe 100644 --- a/cereal/log.capnp +++ b/cereal/log.capnp @@ -125,6 +125,79 @@ struct OnroadEvent @0xc4fa6047f024e718 { espActive @90; personalityChanged @91; aeb @92; + eventReserved93 @93; + eventReserved94 @94; + eventReserved95 @95; + eventReserved96 @96; + eventReserved97 @97; + eventReserved98 @98; + eventReserved99 @99; + eventReserved100 @100; + eventReserved101 @101; + eventReserved102 @102; + eventReserved103 @103; + eventReserved104 @104; + eventReserved105 @105; + eventReserved106 @106; + eventReserved107 @107; + eventReserved108 @108; + eventReserved109 @109; + eventReserved110 @110; + eventReserved111 @111; + eventReserved112 @112; + eventReserved113 @113; + eventReserved114 @114; + eventReserved115 @115; + eventReserved116 @116; + eventReserved117 @117; + eventReserved118 @118; + eventReserved119 @119; + eventReserved120 @120; + eventReserved121 @121; + eventReserved122 @122; + eventReserved123 @123; + eventReserved124 @124; + eventReserved125 @125; + eventReserved126 @126; + eventReserved127 @127; + eventReserved128 @128; + eventReserved129 @129; + eventReserved130 @130; + eventReserved131 @131; + eventReserved132 @132; + eventReserved133 @133; + eventReserved134 @134; + eventReserved135 @135; + eventReserved136 @136; + eventReserved137 @137; + eventReserved138 @138; + eventReserved139 @139; + eventReserved140 @140; + eventReserved141 @141; + eventReserved142 @142; + eventReserved143 @143; + eventReserved144 @144; + eventReserved145 @145; + eventReserved146 @146; + eventReserved147 @147; + eventReserved148 @148; + eventReserved149 @149; + eventReserved150 @150; + + # sunnypilot + lkasEnable @151; + lkasDisable @152; + manualSteeringRequired @153; + manualLongitudinalRequired @154; + silentLkasEnable @155; + silentLkasDisable @156; + silentBrakeHold @157; + silentWrongGear @158; + silentReverseGear @159; + silentDoorOpen @160; + silentSeatbeltNotLatched @161; + silentParkBrake @162; + controlsMismatchLateral @163; soundsUnavailableDEPRECATED @47; } @@ -589,6 +662,7 @@ struct PandaState @0xa7649e2575e4591e { # safety stuff controlsAllowed @3 :Bool; + controlsAllowedLat @5 :Bool; safetyRxInvalid @19 :UInt32; safetyTxBlocked @24 :UInt32; safetyModel @14 :Car.CarParams.SafetyModel; @@ -696,7 +770,6 @@ struct PandaState @0xa7649e2575e4591e { } gasInterceptorDetectedDEPRECATED @4 :Bool; - startedSignalDetectedDEPRECATED @5 :Bool; hasGpsDEPRECATED @6 :Bool; gmlanSendErrsDEPRECATED @9 :UInt32; fanSpeedRpmDEPRECATED @11 :UInt16; @@ -2558,7 +2631,7 @@ struct Event { customReservedRawData2 @126 :Data; # *********** Custom: reserved for forks *********** - customReserved0 @107 :Custom.CustomReserved0; + selfdriveStateSP @107 :Custom.SelfdriveStateSP; modelManagerSP @108 :Custom.ModelManagerSP; customReserved2 @109 :Custom.CustomReserved2; customReserved3 @110 :Custom.CustomReserved3; diff --git a/cereal/services.py b/cereal/services.py index ad7bcc870..346bf81a0 100755 --- a/cereal/services.py +++ b/cereal/services.py @@ -76,6 +76,7 @@ _services: dict[str, tuple] = { # sunnypilot "modelManagerSP": (False, 1., 1), + "selfdriveStateSP": (True, 100., 10), # debug "uiDebug": (True, 0., 1), diff --git a/common/params.cc b/common/params.cc index 1e86fd27c..3eccd937e 100644 --- a/common/params.cc +++ b/common/params.cc @@ -203,6 +203,10 @@ std::unordered_map keys = { // sunnypilot params {"EnableGithubRunner", PERSISTENT}, + {"Mads", PERSISTENT}, + {"MadsMainCruiseAllowed", PERSISTENT}, + {"MadsPauseLateralOnBrake", PERSISTENT}, + {"MadsUnifiedEngagementMode", PERSISTENT}, {"ModelManager_ActiveBundle", PERSISTENT}, {"ModelManager_DownloadIndex", CLEAR_ON_MANAGER_START | CLEAR_ON_OFFROAD_TRANSITION | CLEAR_ON_ONROAD_TRANSITION}, {"ModelManager_LastSyncTime", CLEAR_ON_MANAGER_START | CLEAR_ON_OFFROAD_TRANSITION}, diff --git a/pyproject.toml b/pyproject.toml index 9cd28e6ba..7a889584a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -163,6 +163,7 @@ testpaths = [ "tools/replay", "tools/cabana", "cereal/messaging/tests", + "sunnypilot", ] [tool.codespell] diff --git a/selfdrive/car/card.py b/selfdrive/car/card.py index 92d9b7eb1..1852dccf7 100755 --- a/selfdrive/car/card.py +++ b/selfdrive/car/card.py @@ -22,6 +22,8 @@ from openpilot.selfdrive.pandad import can_capnp_to_list, can_list_to_can_capnp from openpilot.selfdrive.car.cruise import VCruiseHelper from openpilot.selfdrive.car.car_specific import MockCarState +from openpilot.sunnypilot.mads.mads import MadsParams + REPLAY = "REPLAY" in os.environ EventName = log.OnroadEvent.EventName @@ -113,6 +115,10 @@ class Car: if not disengage_on_accelerator: self.CP.alternativeExperience |= ALTERNATIVE_EXPERIENCE.DISABLE_DISENGAGE_ON_GAS + # mads + MadsParams().set_alternative_experience(self.CP) + MadsParams().set_car_specific_params(self.CP) + openpilot_enabled_toggle = self.params.get_bool("OpenpilotEnabledToggle") controller_available = self.CI.CC is not None and openpilot_enabled_toggle and not self.CP.dashcamOnly diff --git a/selfdrive/controls/controlsd.py b/selfdrive/controls/controlsd.py index 64be43408..9a230e4d8 100755 --- a/selfdrive/controls/controlsd.py +++ b/selfdrive/controls/controlsd.py @@ -19,6 +19,7 @@ from openpilot.selfdrive.controls.lib.longcontrol import LongControl from openpilot.selfdrive.controls.lib.vehicle_model import VehicleModel from openpilot.selfdrive.locationd.helpers import PoseCalibrator, Pose +from opendbc.sunnypilot import SunnypilotParamFlags State = log.SelfdriveState.OpenpilotState LaneChangeState = log.LaneChangeState @@ -56,6 +57,9 @@ class Controls: elif self.CP.lateralTuning.which() == 'torque': self.LaC = LatControlTorque(self.CP, self.CI) + data_services = list(self.sm.data.keys()) + ['selfdriveStateSP'] + self.sm = messaging.SubMaster(data_services, poll='selfdriveState') + def update(self): self.sm.update(15) if self.sm.updated["liveCalibration"]: @@ -88,7 +92,16 @@ class Controls: # Check which actuators can be enabled standstill = abs(CS.vEgo) <= max(self.CP.minSteerSpeed, MIN_LATERAL_CONTROL_SPEED) or CS.standstill - CC.latActive = self.sm['selfdriveState'].active and not CS.steerFaultTemporary and not CS.steerFaultPermanent and not standstill + + ss_sp = self.sm['selfdriveStateSP'] + CC.madsEnabled = ss_sp.mads.enabled + if ss_sp.mads.available: + CC.sunnypilotParams |= SunnypilotParamFlags.ENABLE_MADS.value + _lat_active = ss_sp.mads.active + else: + _lat_active = self.sm['selfdriveState'].active + + CC.latActive = _lat_active and not CS.steerFaultTemporary and not CS.steerFaultPermanent and not standstill CC.longActive = CC.enabled and not any(e.overrideLongitudinal for e in self.sm['onroadEvents']) and self.CP.openpilotLongitudinalControl actuators = CC.actuators diff --git a/selfdrive/pandad/panda.cc b/selfdrive/pandad/panda.cc index 7b5fc9a99..45d835e5a 100644 --- a/selfdrive/pandad/panda.cc +++ b/selfdrive/pandad/panda.cc @@ -137,8 +137,8 @@ void Panda::enable_deepsleep() { handle->control_write(0xfb, 0, 0); } -void Panda::send_heartbeat(bool engaged) { - handle->control_write(0xf3, engaged, 0); +void Panda::send_heartbeat(bool engaged, bool engaged_mads) { + handle->control_write(0xf3, engaged, engaged_mads); } void Panda::set_can_speed_kbps(uint16_t bus, uint16_t speed) { diff --git a/selfdrive/pandad/panda.h b/selfdrive/pandad/panda.h index 6ae2c7775..3e0f4b850 100644 --- a/selfdrive/pandad/panda.h +++ b/selfdrive/pandad/panda.h @@ -75,7 +75,7 @@ public: std::optional get_serial(); void set_power_saving(bool power_saving); void enable_deepsleep(); - void send_heartbeat(bool engaged); + void send_heartbeat(bool engaged, bool engaged_mads); void set_can_speed_kbps(uint16_t bus, uint16_t speed); void set_can_fd_auto(uint16_t bus, bool enabled); void set_data_speed_kbps(uint16_t bus, uint16_t speed); diff --git a/selfdrive/pandad/pandad.cc b/selfdrive/pandad/pandad.cc index bf2a465d7..0e8884c33 100644 --- a/selfdrive/pandad/pandad.cc +++ b/selfdrive/pandad/pandad.cc @@ -41,6 +41,8 @@ #define CUTOFF_IL 400 #define SATURATE_IL 1000 +#define ALT_EXP_DISENGAGE_LATERAL_ON_BRAKE 2048 + ExitHandler do_exit; bool check_all_connected(const std::vector &pandas) { @@ -53,6 +55,18 @@ bool check_all_connected(const std::vector &pandas) { return true; } +bool process_mads_heartbeat(SubMaster *sm) { + const int &alt_exp = (*sm)["carParams"].getCarParams().getAlternativeExperience(); + const bool disengage_lateral_on_brake = (alt_exp & ALT_EXP_DISENGAGE_LATERAL_ON_BRAKE) != 0; + + const auto &mads = (*sm)["selfdriveStateSP"].getSelfdriveStateSP().getMads(); + const bool heartbeat_type = disengage_lateral_on_brake ? mads.getActive() : mads.getEnabled(); + + const bool engaged = sm->allAliveAndValid({"selfdriveStateSP"}) && heartbeat_type; + + return engaged; +} + Panda *connect(std::string serial="", uint32_t index=0) { std::unique_ptr panda; try { @@ -144,6 +158,7 @@ void fill_panda_state(cereal::PandaState::Builder &ps, cereal::PandaState::Panda ps.setIgnitionLine(health.ignition_line_pkt); ps.setIgnitionCan(health.ignition_can_pkt); ps.setControlsAllowed(health.controls_allowed_pkt); + ps.setControlsAllowedLat(health.controls_allowed_lat_pkt); ps.setTxBufferOverflow(health.tx_buffer_overflow_pkt); ps.setRxBufferOverflow(health.rx_buffer_overflow_pkt); ps.setPandaType(hw_type); @@ -327,7 +342,7 @@ void send_peripheral_state(Panda *panda, PubMaster *pm) { } void process_panda_state(std::vector &pandas, PubMaster *pm, bool spoofing_started) { - static SubMaster sm({"selfdriveState"}); + static SubMaster sm({"selfdriveState", "selfdriveStateSP", "carParams"}); std::vector connected_serials; for (Panda *p : pandas) { @@ -366,8 +381,9 @@ void process_panda_state(std::vector &pandas, PubMaster *pm, bool spoof sm.update(0); const bool engaged = sm.allAliveAndValid({"selfdriveState"}) && sm["selfdriveState"].getSelfdriveState().getEnabled(); + const bool engaged_mads = process_mads_heartbeat(&sm); for (const auto &panda : pandas) { - panda->send_heartbeat(engaged); + panda->send_heartbeat(engaged, engaged_mads); } } } diff --git a/selfdrive/selfdrived/events.py b/selfdrive/selfdrived/events.py index cdc23e53c..672d809dd 100755 --- a/selfdrive/selfdrived/events.py +++ b/selfdrive/selfdrived/events.py @@ -105,6 +105,24 @@ class Events: ret.append(event) return ret + def has(self, event_name: int) -> bool: + return event_name in self.events + + def contains_in_list(self, events_list: list[int]) -> bool: + return any(event_name in self.events for event_name in events_list) + + def remove(self, event_name: int, static: bool = False) -> None: + if static and event_name in self.static_events: + self.static_events.remove(event_name) + + if event_name in self.events: + self.event_counters[event_name] = self.event_counters[event_name] + 1 + self.events.remove(event_name) + + def replace(self, prev_event_name: int, cur_event_name: int, static: bool = False) -> None: + self.remove(prev_event_name, static) + self.add(cur_event_name, static) + class Alert: def __init__(self, @@ -951,6 +969,99 @@ EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = { ET.WARNING: personality_changed_alert, }, + # sunnypilot + EventName.lkasEnable: { + ET.ENABLE: EngagementAlert(AudibleAlert.engage), + }, + + EventName.lkasDisable: { + ET.USER_DISABLE: EngagementAlert(AudibleAlert.disengage), + }, + + EventName.manualSteeringRequired: { + ET.USER_DISABLE: Alert( + "Automatic Lane Centering is OFF", + "Manual Steering Required", + AlertStatus.normal, AlertSize.mid, + Priority.LOW, VisualAlert.none, AudibleAlert.disengage, 1.), + }, + + EventName.manualLongitudinalRequired: { + ET.WARNING: Alert( + "Smart/Adaptive Cruise Control: OFF", + "Manual Speed Control Required", + AlertStatus.normal, AlertSize.mid, + Priority.LOW, VisualAlert.none, AudibleAlert.none, 1.), + }, + + EventName.silentLkasEnable: { + ET.ENABLE: EngagementAlert(AudibleAlert.none), + }, + + EventName.silentLkasDisable: { + ET.USER_DISABLE: EngagementAlert(AudibleAlert.none), + }, + + EventName.silentBrakeHold: { + ET.USER_DISABLE: EngagementAlert(AudibleAlert.none), + ET.NO_ENTRY: NoEntryAlert("Brake Hold Active"), + }, + + EventName.silentWrongGear: { + ET.WARNING: Alert( + "", + "", + AlertStatus.normal, AlertSize.none, + Priority.LOWEST, VisualAlert.none, AudibleAlert.none, 0.), + ET.NO_ENTRY: Alert( + "Gear not D", + "openpilot Unavailable", + AlertStatus.normal, AlertSize.mid, + Priority.LOW, VisualAlert.none, AudibleAlert.none, 0.), + }, + + EventName.silentReverseGear: { + ET.PERMANENT: Alert( + "Reverse\nGear", + "", + AlertStatus.normal, AlertSize.full, + Priority.LOWEST, VisualAlert.none, AudibleAlert.none, .2, creation_delay=0.5), + ET.NO_ENTRY: NoEntryAlert("Reverse Gear"), + }, + + EventName.silentDoorOpen: { + ET.WARNING: Alert( + "", + "", + AlertStatus.normal, AlertSize.none, + Priority.LOWEST, VisualAlert.none, AudibleAlert.none, 0.), + ET.NO_ENTRY: NoEntryAlert("Door Open"), + }, + + EventName.silentSeatbeltNotLatched: { + ET.WARNING: Alert( + "", + "", + AlertStatus.normal, AlertSize.none, + Priority.LOWEST, VisualAlert.none, AudibleAlert.none, 0.), + ET.NO_ENTRY: NoEntryAlert("Seatbelt Unlatched"), + }, + + EventName.silentParkBrake: { + ET.WARNING: Alert( + "", + "", + AlertStatus.normal, AlertSize.none, + Priority.LOWEST, VisualAlert.none, AudibleAlert.none, 0.), + ET.NO_ENTRY: NoEntryAlert("Parking Brake Engaged"), + }, + + EventName.controlsMismatchLateral: { + ET.IMMEDIATE_DISABLE: ImmediateDisableAlert("Controls Mismatch: Lateral"), + ET.NO_ENTRY: NoEntryAlert("Controls Mismatch: Lateral"), + }, + + } diff --git a/selfdrive/selfdrived/selfdrived.py b/selfdrive/selfdrived/selfdrived.py index d24939884..8328bf67f 100755 --- a/selfdrive/selfdrived/selfdrived.py +++ b/selfdrive/selfdrived/selfdrived.py @@ -23,6 +23,8 @@ from openpilot.selfdrive.controls.lib.latcontrol import MIN_LATERAL_CONTROL_SPEE from openpilot.system.version import get_build_metadata +from openpilot.sunnypilot.mads.mads import ModularAssistiveDrivingSystem + REPLAY = "REPLAY" in os.environ SIMULATION = "SIMULATION" in os.environ TESTING_CLOSET = "TESTING_CLOSET" in os.environ @@ -131,6 +133,10 @@ class SelfdriveD: elif self.CP.passive: self.events.add(EventName.dashcamMode, static=True) + self.mads = ModularAssistiveDrivingSystem(self) + sock_services = list(self.pm.sock.keys()) + ['selfdriveStateSP'] + self.pm = messaging.PubMaster(sock_services) + def update_events(self, CS): """Compute onroadEvents from carState""" @@ -451,11 +457,25 @@ class SelfdriveD: self.pm.send('onroadEvents', ce_send) self.events_prev = self.events.names.copy() + # selfdriveStateSP + ss_sp_msg = messaging.new_message('selfdriveStateSP') + ss_sp_msg.valid = True + ss_sp = ss_sp_msg.selfdriveStateSP + mads = ss_sp.mads + mads.state = self.mads.state_machine.state + mads.enabled = self.mads.enabled + mads.active = self.mads.active + mads.available = self.mads.enabled_toggle + + self.pm.send('selfdriveStateSP', ss_sp_msg) + def step(self): CS = self.data_sample() self.update_events(CS) if not self.CP.passive and self.initialized: self.enabled, self.active = self.state_machine.update(self.events) + if not self.CP.notCar: + self.mads.update(CS, self.sm) self.update_alerts(CS) self.publish_selfdriveState(CS) @@ -473,6 +493,8 @@ class SelfdriveD: self.is_metric = self.params.get_bool("IsMetric") self.experimental_mode = self.params.get_bool("ExperimentalMode") and self.CP.openpilotLongitudinalControl self.personality = self.read_personality_param() + + self.mads.read_params() time.sleep(0.1) def run(self): diff --git a/selfdrive/selfdrived/tests/test_alerts.py b/selfdrive/selfdrived/tests/test_alerts.py index 55bb8f019..75365b7a5 100644 --- a/selfdrive/selfdrived/tests/test_alerts.py +++ b/selfdrive/selfdrived/tests/test_alerts.py @@ -41,7 +41,7 @@ class TestAlerts: events = log.OnroadEvent.EventName.schema.enumerants for name, e in events.items(): - if not name.endswith("DEPRECATED"): + if not name.endswith("DEPRECATED") and not name.startswith("eventReserved"): fail_msg = f"{name} @{e} not in EVENTS" assert e in EVENTS.keys(), fail_msg diff --git a/selfdrive/test/process_replay/fakedata/regen1CA7A48E6F7|2024-08-30--02-45-08--0_calibrationd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst b/selfdrive/test/process_replay/fakedata/regen1CA7A48E6F7|2024-08-30--02-45-08--0_calibrationd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst similarity index 100% rename from selfdrive/test/process_replay/fakedata/regen1CA7A48E6F7|2024-08-30--02-45-08--0_calibrationd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst rename to selfdrive/test/process_replay/fakedata/regen1CA7A48E6F7|2024-08-30--02-45-08--0_calibrationd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst diff --git a/selfdrive/test/process_replay/fakedata/regen1CA7A48E6F7|2024-08-30--02-45-08--0_card_a20d7a427906c43549cf58b7a859f264aabdf28d.zst b/selfdrive/test/process_replay/fakedata/regen1CA7A48E6F7|2024-08-30--02-45-08--0_card_a20d7a427906c43549cf58b7a859f264aabdf28d.zst deleted file mode 100644 index cf5d085a8..000000000 --- a/selfdrive/test/process_replay/fakedata/regen1CA7A48E6F7|2024-08-30--02-45-08--0_card_a20d7a427906c43549cf58b7a859f264aabdf28d.zst +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:737f95d34912db53a303ba6499e6f697b510fa5872b8c71f701a4fe924b5466e -size 356169 diff --git a/selfdrive/test/process_replay/fakedata/regen1CA7A48E6F7|2024-08-30--02-45-08--0_card_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst b/selfdrive/test/process_replay/fakedata/regen1CA7A48E6F7|2024-08-30--02-45-08--0_card_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst new file mode 100644 index 000000000..6972af295 --- /dev/null +++ b/selfdrive/test/process_replay/fakedata/regen1CA7A48E6F7|2024-08-30--02-45-08--0_card_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:79ccc3bd2094ba8a55adedf0007b0152eb3a68edc5e2d35aeccbba122d5811c6 +size 356151 diff --git a/selfdrive/test/process_replay/fakedata/regen1CA7A48E6F7|2024-08-30--02-45-08--0_controlsd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst b/selfdrive/test/process_replay/fakedata/regen1CA7A48E6F7|2024-08-30--02-45-08--0_controlsd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst similarity index 100% rename from selfdrive/test/process_replay/fakedata/regen1CA7A48E6F7|2024-08-30--02-45-08--0_controlsd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst rename to selfdrive/test/process_replay/fakedata/regen1CA7A48E6F7|2024-08-30--02-45-08--0_controlsd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst diff --git a/selfdrive/test/process_replay/fakedata/regen1CA7A48E6F7|2024-08-30--02-45-08--0_dmonitoringd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst b/selfdrive/test/process_replay/fakedata/regen1CA7A48E6F7|2024-08-30--02-45-08--0_dmonitoringd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst similarity index 100% rename from selfdrive/test/process_replay/fakedata/regen1CA7A48E6F7|2024-08-30--02-45-08--0_dmonitoringd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst rename to selfdrive/test/process_replay/fakedata/regen1CA7A48E6F7|2024-08-30--02-45-08--0_dmonitoringd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst diff --git a/selfdrive/test/process_replay/fakedata/regen1CA7A48E6F7|2024-08-30--02-45-08--0_locationd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst b/selfdrive/test/process_replay/fakedata/regen1CA7A48E6F7|2024-08-30--02-45-08--0_locationd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst similarity index 100% rename from selfdrive/test/process_replay/fakedata/regen1CA7A48E6F7|2024-08-30--02-45-08--0_locationd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst rename to selfdrive/test/process_replay/fakedata/regen1CA7A48E6F7|2024-08-30--02-45-08--0_locationd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst diff --git a/selfdrive/test/process_replay/fakedata/regen1CA7A48E6F7|2024-08-30--02-45-08--0_paramsd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst b/selfdrive/test/process_replay/fakedata/regen1CA7A48E6F7|2024-08-30--02-45-08--0_paramsd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst similarity index 100% rename from selfdrive/test/process_replay/fakedata/regen1CA7A48E6F7|2024-08-30--02-45-08--0_paramsd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst rename to selfdrive/test/process_replay/fakedata/regen1CA7A48E6F7|2024-08-30--02-45-08--0_paramsd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst diff --git a/selfdrive/test/process_replay/fakedata/regen1CA7A48E6F7|2024-08-30--02-45-08--0_plannerd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst b/selfdrive/test/process_replay/fakedata/regen1CA7A48E6F7|2024-08-30--02-45-08--0_plannerd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst deleted file mode 100644 index 23421b51a..000000000 --- a/selfdrive/test/process_replay/fakedata/regen1CA7A48E6F7|2024-08-30--02-45-08--0_plannerd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e359e8f6b5a22b6f3f89b54989dac2110ee3a4463de2d785be83e20cda4f1cb6 -size 254248 diff --git a/selfdrive/test/process_replay/fakedata/regen1CA7A48E6F7|2024-08-30--02-45-08--0_plannerd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst b/selfdrive/test/process_replay/fakedata/regen1CA7A48E6F7|2024-08-30--02-45-08--0_plannerd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst new file mode 100644 index 000000000..ea768fa69 --- /dev/null +++ b/selfdrive/test/process_replay/fakedata/regen1CA7A48E6F7|2024-08-30--02-45-08--0_plannerd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:45f39fe1d1dc8c271f577d1a12812e01da34979bf3fffaad01a19a7a61b6d456 +size 256342 diff --git a/selfdrive/test/process_replay/fakedata/regen1CA7A48E6F7|2024-08-30--02-45-08--0_radard_a20d7a427906c43549cf58b7a859f264aabdf28d.zst b/selfdrive/test/process_replay/fakedata/regen1CA7A48E6F7|2024-08-30--02-45-08--0_radard_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst similarity index 100% rename from selfdrive/test/process_replay/fakedata/regen1CA7A48E6F7|2024-08-30--02-45-08--0_radard_a20d7a427906c43549cf58b7a859f264aabdf28d.zst rename to selfdrive/test/process_replay/fakedata/regen1CA7A48E6F7|2024-08-30--02-45-08--0_radard_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst diff --git a/selfdrive/test/process_replay/fakedata/regen1CA7A48E6F7|2024-08-30--02-45-08--0_selfdrived_a20d7a427906c43549cf58b7a859f264aabdf28d.zst b/selfdrive/test/process_replay/fakedata/regen1CA7A48E6F7|2024-08-30--02-45-08--0_selfdrived_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst similarity index 100% rename from selfdrive/test/process_replay/fakedata/regen1CA7A48E6F7|2024-08-30--02-45-08--0_selfdrived_a20d7a427906c43549cf58b7a859f264aabdf28d.zst rename to selfdrive/test/process_replay/fakedata/regen1CA7A48E6F7|2024-08-30--02-45-08--0_selfdrived_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst diff --git a/selfdrive/test/process_replay/fakedata/regen1CA7A48E6F7|2024-08-30--02-45-08--0_torqued_a20d7a427906c43549cf58b7a859f264aabdf28d.zst b/selfdrive/test/process_replay/fakedata/regen1CA7A48E6F7|2024-08-30--02-45-08--0_torqued_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst similarity index 100% rename from selfdrive/test/process_replay/fakedata/regen1CA7A48E6F7|2024-08-30--02-45-08--0_torqued_a20d7a427906c43549cf58b7a859f264aabdf28d.zst rename to selfdrive/test/process_replay/fakedata/regen1CA7A48E6F7|2024-08-30--02-45-08--0_torqued_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst diff --git a/selfdrive/test/process_replay/fakedata/regen1CA7A48E6F7|2024-08-30--02-45-08--0_ubloxd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst b/selfdrive/test/process_replay/fakedata/regen1CA7A48E6F7|2024-08-30--02-45-08--0_ubloxd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst similarity index 100% rename from selfdrive/test/process_replay/fakedata/regen1CA7A48E6F7|2024-08-30--02-45-08--0_ubloxd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst rename to selfdrive/test/process_replay/fakedata/regen1CA7A48E6F7|2024-08-30--02-45-08--0_ubloxd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst diff --git a/selfdrive/test/process_replay/fakedata/regen306779F6870|2024-10-03--04-03-23--0_card_a20d7a427906c43549cf58b7a859f264aabdf28d.zst b/selfdrive/test/process_replay/fakedata/regen306779F6870|2024-10-03--04-03-23--0_card_a20d7a427906c43549cf58b7a859f264aabdf28d.zst deleted file mode 100644 index e396d23e1..000000000 --- a/selfdrive/test/process_replay/fakedata/regen306779F6870|2024-10-03--04-03-23--0_card_a20d7a427906c43549cf58b7a859f264aabdf28d.zst +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a8e4d044812a714ebdf0b15e73d4466e9ddaafa374368f308803c6b68dcd79ab -size 332433 diff --git a/selfdrive/test/process_replay/fakedata/regen306779F6870|2024-10-03--04-03-23--0_card_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst b/selfdrive/test/process_replay/fakedata/regen306779F6870|2024-10-03--04-03-23--0_card_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst new file mode 100644 index 000000000..06ba1198a --- /dev/null +++ b/selfdrive/test/process_replay/fakedata/regen306779F6870|2024-10-03--04-03-23--0_card_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ec8f8d879b38a4c8d4319a3bd67872d5e5d348bc5472443c4c8aa1cb1dd62cf5 +size 332404 diff --git a/selfdrive/test/process_replay/fakedata/regen4B38A7428CD|2024-08-30--02-56-31--0_card_a20d7a427906c43549cf58b7a859f264aabdf28d.zst b/selfdrive/test/process_replay/fakedata/regen4B38A7428CD|2024-08-30--02-56-31--0_card_a20d7a427906c43549cf58b7a859f264aabdf28d.zst deleted file mode 100644 index e44ef1aee..000000000 --- a/selfdrive/test/process_replay/fakedata/regen4B38A7428CD|2024-08-30--02-56-31--0_card_a20d7a427906c43549cf58b7a859f264aabdf28d.zst +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:53b80c3c99a6897cafe7d408872c287ab0bbaac2751e344cf4623b312d2e4866 -size 268928 diff --git a/selfdrive/test/process_replay/fakedata/regen4B38A7428CD|2024-08-30--02-56-31--0_card_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst b/selfdrive/test/process_replay/fakedata/regen4B38A7428CD|2024-08-30--02-56-31--0_card_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst new file mode 100644 index 000000000..9b268ce24 --- /dev/null +++ b/selfdrive/test/process_replay/fakedata/regen4B38A7428CD|2024-08-30--02-56-31--0_card_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:68afd54dc68f6abff699d2740f90830b0f492db8818869e8936a63e7bed80458 +size 268827 diff --git a/selfdrive/test/process_replay/fakedata/regen4CE950B0267|2024-08-30--02-51-30--0_card_a20d7a427906c43549cf58b7a859f264aabdf28d.zst b/selfdrive/test/process_replay/fakedata/regen4CE950B0267|2024-08-30--02-51-30--0_card_a20d7a427906c43549cf58b7a859f264aabdf28d.zst deleted file mode 100644 index af4d4d784..000000000 --- a/selfdrive/test/process_replay/fakedata/regen4CE950B0267|2024-08-30--02-51-30--0_card_a20d7a427906c43549cf58b7a859f264aabdf28d.zst +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a4fa8a841c964e90b9c14b5aede8f30de949d319ae072cc291f0afb1c4c24baa -size 437808 diff --git a/selfdrive/test/process_replay/fakedata/regen4CE950B0267|2024-08-30--02-51-30--0_card_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst b/selfdrive/test/process_replay/fakedata/regen4CE950B0267|2024-08-30--02-51-30--0_card_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst new file mode 100644 index 000000000..a80e796ba --- /dev/null +++ b/selfdrive/test/process_replay/fakedata/regen4CE950B0267|2024-08-30--02-51-30--0_card_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:32a458c0b364c1c793a4a843fe7a8fd21dd4ad45ff87dc8ad41a8e8759e52c80 +size 437811 diff --git a/selfdrive/test/process_replay/fakedata/regen58464878D07|2024-08-30--03-15-31--0_card_a20d7a427906c43549cf58b7a859f264aabdf28d.zst b/selfdrive/test/process_replay/fakedata/regen58464878D07|2024-08-30--03-15-31--0_card_a20d7a427906c43549cf58b7a859f264aabdf28d.zst deleted file mode 100644 index 3abf95e8a..000000000 --- a/selfdrive/test/process_replay/fakedata/regen58464878D07|2024-08-30--03-15-31--0_card_a20d7a427906c43549cf58b7a859f264aabdf28d.zst +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ce370994de01d6240fa753846ddc7e1b852acac3f649a4c29ea16acae126f974 -size 308578 diff --git a/selfdrive/test/process_replay/fakedata/regen58464878D07|2024-08-30--03-15-31--0_card_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst b/selfdrive/test/process_replay/fakedata/regen58464878D07|2024-08-30--03-15-31--0_card_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst new file mode 100644 index 000000000..4583ce572 --- /dev/null +++ b/selfdrive/test/process_replay/fakedata/regen58464878D07|2024-08-30--03-15-31--0_card_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7b3d412d4066f9ac90788e11a20d99ea3ff92eafdc8a317610b7d9c918aedd59 +size 308644 diff --git a/selfdrive/test/process_replay/fakedata/regen6E484EDAB96|2024-08-30--02-47-37--0_card_a20d7a427906c43549cf58b7a859f264aabdf28d.zst b/selfdrive/test/process_replay/fakedata/regen6E484EDAB96|2024-08-30--02-47-37--0_card_a20d7a427906c43549cf58b7a859f264aabdf28d.zst deleted file mode 100644 index f6f348be8..000000000 --- a/selfdrive/test/process_replay/fakedata/regen6E484EDAB96|2024-08-30--02-47-37--0_card_a20d7a427906c43549cf58b7a859f264aabdf28d.zst +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:82333cfc026735eac81defae9e01b82b81ac30fd01ad265dbdd311dd97322198 -size 393106 diff --git a/selfdrive/test/process_replay/fakedata/regen6E484EDAB96|2024-08-30--02-47-37--0_card_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst b/selfdrive/test/process_replay/fakedata/regen6E484EDAB96|2024-08-30--02-47-37--0_card_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst new file mode 100644 index 000000000..47b3e73fd --- /dev/null +++ b/selfdrive/test/process_replay/fakedata/regen6E484EDAB96|2024-08-30--02-47-37--0_card_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8ad0c3881d7d88f9038a1b3a5e43c779e84dca47e2f7f6d45a3449cd8a7dec99 +size 393122 diff --git a/selfdrive/test/process_replay/fakedata/regen720F2BA4CF6|2024-08-30--03-09-15--0_card_a20d7a427906c43549cf58b7a859f264aabdf28d.zst b/selfdrive/test/process_replay/fakedata/regen720F2BA4CF6|2024-08-30--03-09-15--0_card_a20d7a427906c43549cf58b7a859f264aabdf28d.zst deleted file mode 100644 index fb3b707b8..000000000 --- a/selfdrive/test/process_replay/fakedata/regen720F2BA4CF6|2024-08-30--03-09-15--0_card_a20d7a427906c43549cf58b7a859f264aabdf28d.zst +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e4ebae1742e3bb7d89f8cd452928c5c6a1b8679155562d23c6303ca4ec2e3b02 -size 334350 diff --git a/selfdrive/test/process_replay/fakedata/regen720F2BA4CF6|2024-08-30--03-09-15--0_card_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst b/selfdrive/test/process_replay/fakedata/regen720F2BA4CF6|2024-08-30--03-09-15--0_card_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst new file mode 100644 index 000000000..b65f693a2 --- /dev/null +++ b/selfdrive/test/process_replay/fakedata/regen720F2BA4CF6|2024-08-30--03-09-15--0_card_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6a0f9dc3743e4e09375f7a3289228b64486915ae4ef6dfcff66572a34820d5d2 +size 334502 diff --git a/selfdrive/test/process_replay/fakedata/regen756F8230C21|2024-11-07--00-08-24--0_calibrationd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst b/selfdrive/test/process_replay/fakedata/regen756F8230C21|2024-11-07--00-08-24--0_calibrationd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst similarity index 100% rename from selfdrive/test/process_replay/fakedata/regen756F8230C21|2024-11-07--00-08-24--0_calibrationd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst rename to selfdrive/test/process_replay/fakedata/regen756F8230C21|2024-11-07--00-08-24--0_calibrationd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst diff --git a/selfdrive/test/process_replay/fakedata/regen756F8230C21|2024-11-07--00-08-24--0_card_a20d7a427906c43549cf58b7a859f264aabdf28d.zst b/selfdrive/test/process_replay/fakedata/regen756F8230C21|2024-11-07--00-08-24--0_card_a20d7a427906c43549cf58b7a859f264aabdf28d.zst deleted file mode 100644 index cef3e0150..000000000 --- a/selfdrive/test/process_replay/fakedata/regen756F8230C21|2024-11-07--00-08-24--0_card_a20d7a427906c43549cf58b7a859f264aabdf28d.zst +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:03326fb4486c1ffdd3609a0e0200e65d1f30dca5d9b047501d98b1b2d5321e75 -size 470495 diff --git a/selfdrive/test/process_replay/fakedata/regen756F8230C21|2024-11-07--00-08-24--0_card_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst b/selfdrive/test/process_replay/fakedata/regen756F8230C21|2024-11-07--00-08-24--0_card_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst new file mode 100644 index 000000000..d5663209e --- /dev/null +++ b/selfdrive/test/process_replay/fakedata/regen756F8230C21|2024-11-07--00-08-24--0_card_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:944406ae64efb422b568437588fec6a8a8b5b7d9e577dc1d22c83a1d6d3813ff +size 470417 diff --git a/selfdrive/test/process_replay/fakedata/regen756F8230C21|2024-11-07--00-08-24--0_controlsd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst b/selfdrive/test/process_replay/fakedata/regen756F8230C21|2024-11-07--00-08-24--0_controlsd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst similarity index 100% rename from selfdrive/test/process_replay/fakedata/regen756F8230C21|2024-11-07--00-08-24--0_controlsd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst rename to selfdrive/test/process_replay/fakedata/regen756F8230C21|2024-11-07--00-08-24--0_controlsd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst diff --git a/selfdrive/test/process_replay/fakedata/regen756F8230C21|2024-11-07--00-08-24--0_dmonitoringd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst b/selfdrive/test/process_replay/fakedata/regen756F8230C21|2024-11-07--00-08-24--0_dmonitoringd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst similarity index 100% rename from selfdrive/test/process_replay/fakedata/regen756F8230C21|2024-11-07--00-08-24--0_dmonitoringd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst rename to selfdrive/test/process_replay/fakedata/regen756F8230C21|2024-11-07--00-08-24--0_dmonitoringd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst diff --git a/selfdrive/test/process_replay/fakedata/regen756F8230C21|2024-11-07--00-08-24--0_locationd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst b/selfdrive/test/process_replay/fakedata/regen756F8230C21|2024-11-07--00-08-24--0_locationd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst similarity index 100% rename from selfdrive/test/process_replay/fakedata/regen756F8230C21|2024-11-07--00-08-24--0_locationd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst rename to selfdrive/test/process_replay/fakedata/regen756F8230C21|2024-11-07--00-08-24--0_locationd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst diff --git a/selfdrive/test/process_replay/fakedata/regen756F8230C21|2024-11-07--00-08-24--0_paramsd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst b/selfdrive/test/process_replay/fakedata/regen756F8230C21|2024-11-07--00-08-24--0_paramsd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst similarity index 100% rename from selfdrive/test/process_replay/fakedata/regen756F8230C21|2024-11-07--00-08-24--0_paramsd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst rename to selfdrive/test/process_replay/fakedata/regen756F8230C21|2024-11-07--00-08-24--0_paramsd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst diff --git a/selfdrive/test/process_replay/fakedata/regen756F8230C21|2024-11-07--00-08-24--0_plannerd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst b/selfdrive/test/process_replay/fakedata/regen756F8230C21|2024-11-07--00-08-24--0_plannerd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst deleted file mode 100644 index 3a13d7e7e..000000000 --- a/selfdrive/test/process_replay/fakedata/regen756F8230C21|2024-11-07--00-08-24--0_plannerd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:bffa062a5eace4d499c2fe12f2b0eb8c71207f4e7bea0e88456614f00e2859b1 -size 258989 diff --git a/selfdrive/test/process_replay/fakedata/regen756F8230C21|2024-11-07--00-08-24--0_plannerd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst b/selfdrive/test/process_replay/fakedata/regen756F8230C21|2024-11-07--00-08-24--0_plannerd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst new file mode 100644 index 000000000..bf666980e --- /dev/null +++ b/selfdrive/test/process_replay/fakedata/regen756F8230C21|2024-11-07--00-08-24--0_plannerd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d80c61dc2a0b3685a522013c8aa8347adfdfc6d0611485da88b3a17771c68301 +size 260913 diff --git a/selfdrive/test/process_replay/fakedata/regen756F8230C21|2024-11-07--00-08-24--0_radard_a20d7a427906c43549cf58b7a859f264aabdf28d.zst b/selfdrive/test/process_replay/fakedata/regen756F8230C21|2024-11-07--00-08-24--0_radard_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst similarity index 100% rename from selfdrive/test/process_replay/fakedata/regen756F8230C21|2024-11-07--00-08-24--0_radard_a20d7a427906c43549cf58b7a859f264aabdf28d.zst rename to selfdrive/test/process_replay/fakedata/regen756F8230C21|2024-11-07--00-08-24--0_radard_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst diff --git a/selfdrive/test/process_replay/fakedata/regen756F8230C21|2024-11-07--00-08-24--0_selfdrived_a20d7a427906c43549cf58b7a859f264aabdf28d.zst b/selfdrive/test/process_replay/fakedata/regen756F8230C21|2024-11-07--00-08-24--0_selfdrived_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst similarity index 100% rename from selfdrive/test/process_replay/fakedata/regen756F8230C21|2024-11-07--00-08-24--0_selfdrived_a20d7a427906c43549cf58b7a859f264aabdf28d.zst rename to selfdrive/test/process_replay/fakedata/regen756F8230C21|2024-11-07--00-08-24--0_selfdrived_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst diff --git a/selfdrive/test/process_replay/fakedata/regen756F8230C21|2024-11-07--00-08-24--0_torqued_a20d7a427906c43549cf58b7a859f264aabdf28d.zst b/selfdrive/test/process_replay/fakedata/regen756F8230C21|2024-11-07--00-08-24--0_torqued_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst similarity index 100% rename from selfdrive/test/process_replay/fakedata/regen756F8230C21|2024-11-07--00-08-24--0_torqued_a20d7a427906c43549cf58b7a859f264aabdf28d.zst rename to selfdrive/test/process_replay/fakedata/regen756F8230C21|2024-11-07--00-08-24--0_torqued_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst diff --git a/selfdrive/test/process_replay/fakedata/regen756F8230C21|2024-11-07--00-08-24--0_ubloxd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst b/selfdrive/test/process_replay/fakedata/regen756F8230C21|2024-11-07--00-08-24--0_ubloxd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst similarity index 100% rename from selfdrive/test/process_replay/fakedata/regen756F8230C21|2024-11-07--00-08-24--0_ubloxd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst rename to selfdrive/test/process_replay/fakedata/regen756F8230C21|2024-11-07--00-08-24--0_ubloxd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst diff --git a/selfdrive/test/process_replay/fakedata/regen9ADBECBCD1C|2024-08-30--03-13-04--0_card_a20d7a427906c43549cf58b7a859f264aabdf28d.zst b/selfdrive/test/process_replay/fakedata/regen9ADBECBCD1C|2024-08-30--03-13-04--0_card_a20d7a427906c43549cf58b7a859f264aabdf28d.zst deleted file mode 100644 index 12c275e0b..000000000 --- a/selfdrive/test/process_replay/fakedata/regen9ADBECBCD1C|2024-08-30--03-13-04--0_card_a20d7a427906c43549cf58b7a859f264aabdf28d.zst +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:fe97d060fb6e60652b26b26406ca8b03890f6bff4b4bc5cb73fca267068a04c9 -size 217460 diff --git a/selfdrive/test/process_replay/fakedata/regen9ADBECBCD1C|2024-08-30--03-13-04--0_card_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst b/selfdrive/test/process_replay/fakedata/regen9ADBECBCD1C|2024-08-30--03-13-04--0_card_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst new file mode 100644 index 000000000..5e7685e91 --- /dev/null +++ b/selfdrive/test/process_replay/fakedata/regen9ADBECBCD1C|2024-08-30--03-13-04--0_card_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3271e31149f7053d134d3a0217851167e573647a8b415138e8c80d429d0a02c9 +size 217488 diff --git a/selfdrive/test/process_replay/fakedata/regen9CBD921E93E|2024-08-30--02-38-51--0_calibrationd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst b/selfdrive/test/process_replay/fakedata/regen9CBD921E93E|2024-08-30--02-38-51--0_calibrationd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst similarity index 100% rename from selfdrive/test/process_replay/fakedata/regen9CBD921E93E|2024-08-30--02-38-51--0_calibrationd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst rename to selfdrive/test/process_replay/fakedata/regen9CBD921E93E|2024-08-30--02-38-51--0_calibrationd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst diff --git a/selfdrive/test/process_replay/fakedata/regen9CBD921E93E|2024-08-30--02-38-51--0_card_a20d7a427906c43549cf58b7a859f264aabdf28d.zst b/selfdrive/test/process_replay/fakedata/regen9CBD921E93E|2024-08-30--02-38-51--0_card_a20d7a427906c43549cf58b7a859f264aabdf28d.zst deleted file mode 100644 index 7714c7931..000000000 --- a/selfdrive/test/process_replay/fakedata/regen9CBD921E93E|2024-08-30--02-38-51--0_card_a20d7a427906c43549cf58b7a859f264aabdf28d.zst +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:60e33d209f4f600acf344feca8ab6494a1bf3aafe3c7121e2110a82ea06aa61e -size 293084 diff --git a/selfdrive/test/process_replay/fakedata/regen9CBD921E93E|2024-08-30--02-38-51--0_card_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst b/selfdrive/test/process_replay/fakedata/regen9CBD921E93E|2024-08-30--02-38-51--0_card_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst new file mode 100644 index 000000000..196bb3010 --- /dev/null +++ b/selfdrive/test/process_replay/fakedata/regen9CBD921E93E|2024-08-30--02-38-51--0_card_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:35c95eaf222affae2e236f0b717c17e7f3b8a30e85d4ebb4ad1506e5025ce0b8 +size 293078 diff --git a/selfdrive/test/process_replay/fakedata/regen9CBD921E93E|2024-08-30--02-38-51--0_controlsd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst b/selfdrive/test/process_replay/fakedata/regen9CBD921E93E|2024-08-30--02-38-51--0_controlsd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst similarity index 100% rename from selfdrive/test/process_replay/fakedata/regen9CBD921E93E|2024-08-30--02-38-51--0_controlsd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst rename to selfdrive/test/process_replay/fakedata/regen9CBD921E93E|2024-08-30--02-38-51--0_controlsd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst diff --git a/selfdrive/test/process_replay/fakedata/regen9CBD921E93E|2024-08-30--02-38-51--0_dmonitoringd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst b/selfdrive/test/process_replay/fakedata/regen9CBD921E93E|2024-08-30--02-38-51--0_dmonitoringd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst similarity index 100% rename from selfdrive/test/process_replay/fakedata/regen9CBD921E93E|2024-08-30--02-38-51--0_dmonitoringd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst rename to selfdrive/test/process_replay/fakedata/regen9CBD921E93E|2024-08-30--02-38-51--0_dmonitoringd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst diff --git a/selfdrive/test/process_replay/fakedata/regen9CBD921E93E|2024-08-30--02-38-51--0_locationd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst b/selfdrive/test/process_replay/fakedata/regen9CBD921E93E|2024-08-30--02-38-51--0_locationd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst similarity index 100% rename from selfdrive/test/process_replay/fakedata/regen9CBD921E93E|2024-08-30--02-38-51--0_locationd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst rename to selfdrive/test/process_replay/fakedata/regen9CBD921E93E|2024-08-30--02-38-51--0_locationd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst diff --git a/selfdrive/test/process_replay/fakedata/regen9CBD921E93E|2024-08-30--02-38-51--0_paramsd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst b/selfdrive/test/process_replay/fakedata/regen9CBD921E93E|2024-08-30--02-38-51--0_paramsd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst similarity index 100% rename from selfdrive/test/process_replay/fakedata/regen9CBD921E93E|2024-08-30--02-38-51--0_paramsd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst rename to selfdrive/test/process_replay/fakedata/regen9CBD921E93E|2024-08-30--02-38-51--0_paramsd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst diff --git a/selfdrive/test/process_replay/fakedata/regen9CBD921E93E|2024-08-30--02-38-51--0_plannerd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst b/selfdrive/test/process_replay/fakedata/regen9CBD921E93E|2024-08-30--02-38-51--0_plannerd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst deleted file mode 100644 index 22350b93c..000000000 --- a/selfdrive/test/process_replay/fakedata/regen9CBD921E93E|2024-08-30--02-38-51--0_plannerd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:754d601883db2377739f4112a8dff787b4b8181a8bb8bf4d7dbcf77c5cb6ac93 -size 256838 diff --git a/selfdrive/test/process_replay/fakedata/regen9CBD921E93E|2024-08-30--02-38-51--0_plannerd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst b/selfdrive/test/process_replay/fakedata/regen9CBD921E93E|2024-08-30--02-38-51--0_plannerd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst new file mode 100644 index 000000000..a2a9d1a91 --- /dev/null +++ b/selfdrive/test/process_replay/fakedata/regen9CBD921E93E|2024-08-30--02-38-51--0_plannerd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c8c8fe4943bba5bc86dd0116f75ac6b4fbae551c65ff530a5f62ee6e44b96314 +size 259680 diff --git a/selfdrive/test/process_replay/fakedata/regen9CBD921E93E|2024-08-30--02-38-51--0_radard_a20d7a427906c43549cf58b7a859f264aabdf28d.zst b/selfdrive/test/process_replay/fakedata/regen9CBD921E93E|2024-08-30--02-38-51--0_radard_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst similarity index 100% rename from selfdrive/test/process_replay/fakedata/regen9CBD921E93E|2024-08-30--02-38-51--0_radard_a20d7a427906c43549cf58b7a859f264aabdf28d.zst rename to selfdrive/test/process_replay/fakedata/regen9CBD921E93E|2024-08-30--02-38-51--0_radard_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst diff --git a/selfdrive/test/process_replay/fakedata/regen9CBD921E93E|2024-08-30--02-38-51--0_selfdrived_a20d7a427906c43549cf58b7a859f264aabdf28d.zst b/selfdrive/test/process_replay/fakedata/regen9CBD921E93E|2024-08-30--02-38-51--0_selfdrived_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst similarity index 100% rename from selfdrive/test/process_replay/fakedata/regen9CBD921E93E|2024-08-30--02-38-51--0_selfdrived_a20d7a427906c43549cf58b7a859f264aabdf28d.zst rename to selfdrive/test/process_replay/fakedata/regen9CBD921E93E|2024-08-30--02-38-51--0_selfdrived_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst diff --git a/selfdrive/test/process_replay/fakedata/regen9CBD921E93E|2024-08-30--02-38-51--0_torqued_a20d7a427906c43549cf58b7a859f264aabdf28d.zst b/selfdrive/test/process_replay/fakedata/regen9CBD921E93E|2024-08-30--02-38-51--0_torqued_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst similarity index 100% rename from selfdrive/test/process_replay/fakedata/regen9CBD921E93E|2024-08-30--02-38-51--0_torqued_a20d7a427906c43549cf58b7a859f264aabdf28d.zst rename to selfdrive/test/process_replay/fakedata/regen9CBD921E93E|2024-08-30--02-38-51--0_torqued_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst diff --git a/selfdrive/test/process_replay/fakedata/regen9CBD921E93E|2024-08-30--02-38-51--0_ubloxd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst b/selfdrive/test/process_replay/fakedata/regen9CBD921E93E|2024-08-30--02-38-51--0_ubloxd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst similarity index 100% rename from selfdrive/test/process_replay/fakedata/regen9CBD921E93E|2024-08-30--02-38-51--0_ubloxd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst rename to selfdrive/test/process_replay/fakedata/regen9CBD921E93E|2024-08-30--02-38-51--0_ubloxd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst diff --git a/selfdrive/test/process_replay/fakedata/regenA67A128BCD8|2024-08-30--02-36-22--0_card_a20d7a427906c43549cf58b7a859f264aabdf28d.zst b/selfdrive/test/process_replay/fakedata/regenA67A128BCD8|2024-08-30--02-36-22--0_card_a20d7a427906c43549cf58b7a859f264aabdf28d.zst deleted file mode 100644 index 1bd5a628a..000000000 --- a/selfdrive/test/process_replay/fakedata/regenA67A128BCD8|2024-08-30--02-36-22--0_card_a20d7a427906c43549cf58b7a859f264aabdf28d.zst +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:378d6fc5c674e62b51a12b994cfcd03c435a9731c6e2f4c0d14a39010540cc77 -size 100067 diff --git a/selfdrive/test/process_replay/fakedata/regenA67A128BCD8|2024-08-30--02-36-22--0_card_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst b/selfdrive/test/process_replay/fakedata/regenA67A128BCD8|2024-08-30--02-36-22--0_card_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst new file mode 100644 index 000000000..aff498667 --- /dev/null +++ b/selfdrive/test/process_replay/fakedata/regenA67A128BCD8|2024-08-30--02-36-22--0_card_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:396e46dfc38ea8f9b513ce81cc6019e76a51cca733360b662cc2c5d0933584d5 +size 100090 diff --git a/selfdrive/test/process_replay/fakedata/regenAA1FF48CF1F|2024-08-30--03-06-45--0_calibrationd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst b/selfdrive/test/process_replay/fakedata/regenAA1FF48CF1F|2024-08-30--03-06-45--0_calibrationd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst similarity index 100% rename from selfdrive/test/process_replay/fakedata/regenAA1FF48CF1F|2024-08-30--03-06-45--0_calibrationd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst rename to selfdrive/test/process_replay/fakedata/regenAA1FF48CF1F|2024-08-30--03-06-45--0_calibrationd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst diff --git a/selfdrive/test/process_replay/fakedata/regenAA1FF48CF1F|2024-08-30--03-06-45--0_card_a20d7a427906c43549cf58b7a859f264aabdf28d.zst b/selfdrive/test/process_replay/fakedata/regenAA1FF48CF1F|2024-08-30--03-06-45--0_card_a20d7a427906c43549cf58b7a859f264aabdf28d.zst deleted file mode 100644 index 467c8614c..000000000 --- a/selfdrive/test/process_replay/fakedata/regenAA1FF48CF1F|2024-08-30--03-06-45--0_card_a20d7a427906c43549cf58b7a859f264aabdf28d.zst +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:037825cd9b443d038ab3bb370eab802612d1ce528c5de1350fd99965eaa0d131 -size 262910 diff --git a/selfdrive/test/process_replay/fakedata/regenAA1FF48CF1F|2024-08-30--03-06-45--0_card_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst b/selfdrive/test/process_replay/fakedata/regenAA1FF48CF1F|2024-08-30--03-06-45--0_card_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst new file mode 100644 index 000000000..5fb3c420b --- /dev/null +++ b/selfdrive/test/process_replay/fakedata/regenAA1FF48CF1F|2024-08-30--03-06-45--0_card_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fa6712e3d4c03e1d68f6e1bb991930f6a98eac085aae60ea9d17a3b1914078e5 +size 262935 diff --git a/selfdrive/test/process_replay/fakedata/regenAA1FF48CF1F|2024-08-30--03-06-45--0_controlsd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst b/selfdrive/test/process_replay/fakedata/regenAA1FF48CF1F|2024-08-30--03-06-45--0_controlsd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst similarity index 100% rename from selfdrive/test/process_replay/fakedata/regenAA1FF48CF1F|2024-08-30--03-06-45--0_controlsd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst rename to selfdrive/test/process_replay/fakedata/regenAA1FF48CF1F|2024-08-30--03-06-45--0_controlsd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst diff --git a/selfdrive/test/process_replay/fakedata/regenAA1FF48CF1F|2024-08-30--03-06-45--0_dmonitoringd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst b/selfdrive/test/process_replay/fakedata/regenAA1FF48CF1F|2024-08-30--03-06-45--0_dmonitoringd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst similarity index 100% rename from selfdrive/test/process_replay/fakedata/regenAA1FF48CF1F|2024-08-30--03-06-45--0_dmonitoringd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst rename to selfdrive/test/process_replay/fakedata/regenAA1FF48CF1F|2024-08-30--03-06-45--0_dmonitoringd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst diff --git a/selfdrive/test/process_replay/fakedata/regenAA1FF48CF1F|2024-08-30--03-06-45--0_locationd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst b/selfdrive/test/process_replay/fakedata/regenAA1FF48CF1F|2024-08-30--03-06-45--0_locationd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst similarity index 100% rename from selfdrive/test/process_replay/fakedata/regenAA1FF48CF1F|2024-08-30--03-06-45--0_locationd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst rename to selfdrive/test/process_replay/fakedata/regenAA1FF48CF1F|2024-08-30--03-06-45--0_locationd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst diff --git a/selfdrive/test/process_replay/fakedata/regenAA1FF48CF1F|2024-08-30--03-06-45--0_paramsd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst b/selfdrive/test/process_replay/fakedata/regenAA1FF48CF1F|2024-08-30--03-06-45--0_paramsd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst similarity index 100% rename from selfdrive/test/process_replay/fakedata/regenAA1FF48CF1F|2024-08-30--03-06-45--0_paramsd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst rename to selfdrive/test/process_replay/fakedata/regenAA1FF48CF1F|2024-08-30--03-06-45--0_paramsd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst diff --git a/selfdrive/test/process_replay/fakedata/regenAA1FF48CF1F|2024-08-30--03-06-45--0_plannerd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst b/selfdrive/test/process_replay/fakedata/regenAA1FF48CF1F|2024-08-30--03-06-45--0_plannerd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst deleted file mode 100644 index 8c3a0bff1..000000000 --- a/selfdrive/test/process_replay/fakedata/regenAA1FF48CF1F|2024-08-30--03-06-45--0_plannerd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:58645abd939aa17cf291a254517865704c74124743a8a77da296c519a29567df -size 256653 diff --git a/selfdrive/test/process_replay/fakedata/regenAA1FF48CF1F|2024-08-30--03-06-45--0_plannerd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst b/selfdrive/test/process_replay/fakedata/regenAA1FF48CF1F|2024-08-30--03-06-45--0_plannerd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst new file mode 100644 index 000000000..13975547d --- /dev/null +++ b/selfdrive/test/process_replay/fakedata/regenAA1FF48CF1F|2024-08-30--03-06-45--0_plannerd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b14f71aa4e29f17a69b64802403a7358160667401505ef9a8f56db0c259480f5 +size 259192 diff --git a/selfdrive/test/process_replay/fakedata/regenAA1FF48CF1F|2024-08-30--03-06-45--0_radard_a20d7a427906c43549cf58b7a859f264aabdf28d.zst b/selfdrive/test/process_replay/fakedata/regenAA1FF48CF1F|2024-08-30--03-06-45--0_radard_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst similarity index 100% rename from selfdrive/test/process_replay/fakedata/regenAA1FF48CF1F|2024-08-30--03-06-45--0_radard_a20d7a427906c43549cf58b7a859f264aabdf28d.zst rename to selfdrive/test/process_replay/fakedata/regenAA1FF48CF1F|2024-08-30--03-06-45--0_radard_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst diff --git a/selfdrive/test/process_replay/fakedata/regenAA1FF48CF1F|2024-08-30--03-06-45--0_selfdrived_a20d7a427906c43549cf58b7a859f264aabdf28d.zst b/selfdrive/test/process_replay/fakedata/regenAA1FF48CF1F|2024-08-30--03-06-45--0_selfdrived_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst similarity index 100% rename from selfdrive/test/process_replay/fakedata/regenAA1FF48CF1F|2024-08-30--03-06-45--0_selfdrived_a20d7a427906c43549cf58b7a859f264aabdf28d.zst rename to selfdrive/test/process_replay/fakedata/regenAA1FF48CF1F|2024-08-30--03-06-45--0_selfdrived_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst diff --git a/selfdrive/test/process_replay/fakedata/regenAA1FF48CF1F|2024-08-30--03-06-45--0_torqued_a20d7a427906c43549cf58b7a859f264aabdf28d.zst b/selfdrive/test/process_replay/fakedata/regenAA1FF48CF1F|2024-08-30--03-06-45--0_torqued_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst similarity index 100% rename from selfdrive/test/process_replay/fakedata/regenAA1FF48CF1F|2024-08-30--03-06-45--0_torqued_a20d7a427906c43549cf58b7a859f264aabdf28d.zst rename to selfdrive/test/process_replay/fakedata/regenAA1FF48CF1F|2024-08-30--03-06-45--0_torqued_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst diff --git a/selfdrive/test/process_replay/fakedata/regenAA1FF48CF1F|2024-08-30--03-06-45--0_ubloxd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst b/selfdrive/test/process_replay/fakedata/regenAA1FF48CF1F|2024-08-30--03-06-45--0_ubloxd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst similarity index 100% rename from selfdrive/test/process_replay/fakedata/regenAA1FF48CF1F|2024-08-30--03-06-45--0_ubloxd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst rename to selfdrive/test/process_replay/fakedata/regenAA1FF48CF1F|2024-08-30--03-06-45--0_ubloxd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst diff --git a/selfdrive/test/process_replay/fakedata/regenACF84CCF482|2024-08-30--03-21-55--0_card_a20d7a427906c43549cf58b7a859f264aabdf28d.zst b/selfdrive/test/process_replay/fakedata/regenACF84CCF482|2024-08-30--03-21-55--0_card_a20d7a427906c43549cf58b7a859f264aabdf28d.zst deleted file mode 100644 index 17c59881b..000000000 --- a/selfdrive/test/process_replay/fakedata/regenACF84CCF482|2024-08-30--03-21-55--0_card_a20d7a427906c43549cf58b7a859f264aabdf28d.zst +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:fed5fa87ab0dfbf410b5a142e98eae9dacdb1a7c2ec38f91ba5ae18d8ad9a9e0 -size 268234 diff --git a/selfdrive/test/process_replay/fakedata/regenACF84CCF482|2024-08-30--03-21-55--0_card_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst b/selfdrive/test/process_replay/fakedata/regenACF84CCF482|2024-08-30--03-21-55--0_card_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst new file mode 100644 index 000000000..fe077185f --- /dev/null +++ b/selfdrive/test/process_replay/fakedata/regenACF84CCF482|2024-08-30--03-21-55--0_card_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fb2855324a8ef49c57efbbfde3be4648300404e92c5f8930bc8a8351ec07d267 +size 268198 diff --git a/selfdrive/test/process_replay/fakedata/regenC8F0D6ADC5C|2024-08-30--02-54-01--0_calibrationd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst b/selfdrive/test/process_replay/fakedata/regenC8F0D6ADC5C|2024-08-30--02-54-01--0_calibrationd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst similarity index 100% rename from selfdrive/test/process_replay/fakedata/regenC8F0D6ADC5C|2024-08-30--02-54-01--0_calibrationd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst rename to selfdrive/test/process_replay/fakedata/regenC8F0D6ADC5C|2024-08-30--02-54-01--0_calibrationd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst diff --git a/selfdrive/test/process_replay/fakedata/regenC8F0D6ADC5C|2024-08-30--02-54-01--0_card_a20d7a427906c43549cf58b7a859f264aabdf28d.zst b/selfdrive/test/process_replay/fakedata/regenC8F0D6ADC5C|2024-08-30--02-54-01--0_card_a20d7a427906c43549cf58b7a859f264aabdf28d.zst deleted file mode 100644 index 4ed688afb..000000000 --- a/selfdrive/test/process_replay/fakedata/regenC8F0D6ADC5C|2024-08-30--02-54-01--0_card_a20d7a427906c43549cf58b7a859f264aabdf28d.zst +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f8affdd98bd39d326a7d66e5bca4028ac81595a3f55a6fc094e8b93f535eab8f -size 305144 diff --git a/selfdrive/test/process_replay/fakedata/regenC8F0D6ADC5C|2024-08-30--02-54-01--0_card_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst b/selfdrive/test/process_replay/fakedata/regenC8F0D6ADC5C|2024-08-30--02-54-01--0_card_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst new file mode 100644 index 000000000..c49f505b8 --- /dev/null +++ b/selfdrive/test/process_replay/fakedata/regenC8F0D6ADC5C|2024-08-30--02-54-01--0_card_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3ead69d7d3b7e314d5d63989ec72cd7ff5158dcaf5ab4ec6fd98b83be3cb9748 +size 305088 diff --git a/selfdrive/test/process_replay/fakedata/regenC8F0D6ADC5C|2024-08-30--02-54-01--0_controlsd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst b/selfdrive/test/process_replay/fakedata/regenC8F0D6ADC5C|2024-08-30--02-54-01--0_controlsd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst similarity index 100% rename from selfdrive/test/process_replay/fakedata/regenC8F0D6ADC5C|2024-08-30--02-54-01--0_controlsd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst rename to selfdrive/test/process_replay/fakedata/regenC8F0D6ADC5C|2024-08-30--02-54-01--0_controlsd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst diff --git a/selfdrive/test/process_replay/fakedata/regenC8F0D6ADC5C|2024-08-30--02-54-01--0_dmonitoringd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst b/selfdrive/test/process_replay/fakedata/regenC8F0D6ADC5C|2024-08-30--02-54-01--0_dmonitoringd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst similarity index 100% rename from selfdrive/test/process_replay/fakedata/regenC8F0D6ADC5C|2024-08-30--02-54-01--0_dmonitoringd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst rename to selfdrive/test/process_replay/fakedata/regenC8F0D6ADC5C|2024-08-30--02-54-01--0_dmonitoringd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst diff --git a/selfdrive/test/process_replay/fakedata/regenC8F0D6ADC5C|2024-08-30--02-54-01--0_locationd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst b/selfdrive/test/process_replay/fakedata/regenC8F0D6ADC5C|2024-08-30--02-54-01--0_locationd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst similarity index 100% rename from selfdrive/test/process_replay/fakedata/regenC8F0D6ADC5C|2024-08-30--02-54-01--0_locationd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst rename to selfdrive/test/process_replay/fakedata/regenC8F0D6ADC5C|2024-08-30--02-54-01--0_locationd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst diff --git a/selfdrive/test/process_replay/fakedata/regenC8F0D6ADC5C|2024-08-30--02-54-01--0_paramsd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst b/selfdrive/test/process_replay/fakedata/regenC8F0D6ADC5C|2024-08-30--02-54-01--0_paramsd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst similarity index 100% rename from selfdrive/test/process_replay/fakedata/regenC8F0D6ADC5C|2024-08-30--02-54-01--0_paramsd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst rename to selfdrive/test/process_replay/fakedata/regenC8F0D6ADC5C|2024-08-30--02-54-01--0_paramsd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst diff --git a/selfdrive/test/process_replay/fakedata/regenC8F0D6ADC5C|2024-08-30--02-54-01--0_plannerd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst b/selfdrive/test/process_replay/fakedata/regenC8F0D6ADC5C|2024-08-30--02-54-01--0_plannerd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst deleted file mode 100644 index 141c4d4d4..000000000 --- a/selfdrive/test/process_replay/fakedata/regenC8F0D6ADC5C|2024-08-30--02-54-01--0_plannerd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d82c14c33dc91196a5febc1c45d307a157d5b64b4eb1f8c880fa319af79bc5f5 -size 253450 diff --git a/selfdrive/test/process_replay/fakedata/regenC8F0D6ADC5C|2024-08-30--02-54-01--0_plannerd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst b/selfdrive/test/process_replay/fakedata/regenC8F0D6ADC5C|2024-08-30--02-54-01--0_plannerd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst new file mode 100644 index 000000000..c0013c766 --- /dev/null +++ b/selfdrive/test/process_replay/fakedata/regenC8F0D6ADC5C|2024-08-30--02-54-01--0_plannerd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dbce601eeb0988375f34f8f717dcbc63c0017feac04262cf63dc63b7197cf402 +size 255571 diff --git a/selfdrive/test/process_replay/fakedata/regenC8F0D6ADC5C|2024-08-30--02-54-01--0_radard_a20d7a427906c43549cf58b7a859f264aabdf28d.zst b/selfdrive/test/process_replay/fakedata/regenC8F0D6ADC5C|2024-08-30--02-54-01--0_radard_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst similarity index 100% rename from selfdrive/test/process_replay/fakedata/regenC8F0D6ADC5C|2024-08-30--02-54-01--0_radard_a20d7a427906c43549cf58b7a859f264aabdf28d.zst rename to selfdrive/test/process_replay/fakedata/regenC8F0D6ADC5C|2024-08-30--02-54-01--0_radard_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst diff --git a/selfdrive/test/process_replay/fakedata/regenC8F0D6ADC5C|2024-08-30--02-54-01--0_selfdrived_a20d7a427906c43549cf58b7a859f264aabdf28d.zst b/selfdrive/test/process_replay/fakedata/regenC8F0D6ADC5C|2024-08-30--02-54-01--0_selfdrived_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst similarity index 100% rename from selfdrive/test/process_replay/fakedata/regenC8F0D6ADC5C|2024-08-30--02-54-01--0_selfdrived_a20d7a427906c43549cf58b7a859f264aabdf28d.zst rename to selfdrive/test/process_replay/fakedata/regenC8F0D6ADC5C|2024-08-30--02-54-01--0_selfdrived_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst diff --git a/selfdrive/test/process_replay/fakedata/regenC8F0D6ADC5C|2024-08-30--02-54-01--0_torqued_a20d7a427906c43549cf58b7a859f264aabdf28d.zst b/selfdrive/test/process_replay/fakedata/regenC8F0D6ADC5C|2024-08-30--02-54-01--0_torqued_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst similarity index 100% rename from selfdrive/test/process_replay/fakedata/regenC8F0D6ADC5C|2024-08-30--02-54-01--0_torqued_a20d7a427906c43549cf58b7a859f264aabdf28d.zst rename to selfdrive/test/process_replay/fakedata/regenC8F0D6ADC5C|2024-08-30--02-54-01--0_torqued_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst diff --git a/selfdrive/test/process_replay/fakedata/regenC8F0D6ADC5C|2024-08-30--02-54-01--0_ubloxd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst b/selfdrive/test/process_replay/fakedata/regenC8F0D6ADC5C|2024-08-30--02-54-01--0_ubloxd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst similarity index 100% rename from selfdrive/test/process_replay/fakedata/regenC8F0D6ADC5C|2024-08-30--02-54-01--0_ubloxd_a20d7a427906c43549cf58b7a859f264aabdf28d.zst rename to selfdrive/test/process_replay/fakedata/regenC8F0D6ADC5C|2024-08-30--02-54-01--0_ubloxd_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst diff --git a/selfdrive/test/process_replay/fakedata/regenDB02684E00A|2024-08-30--03-02-54--0_card_a20d7a427906c43549cf58b7a859f264aabdf28d.zst b/selfdrive/test/process_replay/fakedata/regenDB02684E00A|2024-08-30--03-02-54--0_card_a20d7a427906c43549cf58b7a859f264aabdf28d.zst deleted file mode 100644 index 15edf70fa..000000000 --- a/selfdrive/test/process_replay/fakedata/regenDB02684E00A|2024-08-30--03-02-54--0_card_a20d7a427906c43549cf58b7a859f264aabdf28d.zst +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:43150b3ef31b8cd8193150e95e7663a5cd0596b2a0fc9c374861d6c7bb761dbd -size 271983 diff --git a/selfdrive/test/process_replay/fakedata/regenDB02684E00A|2024-08-30--03-02-54--0_card_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst b/selfdrive/test/process_replay/fakedata/regenDB02684E00A|2024-08-30--03-02-54--0_card_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst new file mode 100644 index 000000000..7e9a5b95c --- /dev/null +++ b/selfdrive/test/process_replay/fakedata/regenDB02684E00A|2024-08-30--03-02-54--0_card_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:14da7fa2937fb1942522abc8718058dbea20bc3837137a1139993eab86d9de6e +size 271996 diff --git a/selfdrive/test/process_replay/fakedata/regenED976DEB757|2024-08-30--03-18-02--0_card_a20d7a427906c43549cf58b7a859f264aabdf28d.zst b/selfdrive/test/process_replay/fakedata/regenED976DEB757|2024-08-30--03-18-02--0_card_a20d7a427906c43549cf58b7a859f264aabdf28d.zst deleted file mode 100644 index df781bb4d..000000000 --- a/selfdrive/test/process_replay/fakedata/regenED976DEB757|2024-08-30--03-18-02--0_card_a20d7a427906c43549cf58b7a859f264aabdf28d.zst +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:aec553e5975a5fe7263b93261f44f909af664e7e9e704fd3d95b41766cbc1a81 -size 332401 diff --git a/selfdrive/test/process_replay/fakedata/regenED976DEB757|2024-08-30--03-18-02--0_card_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst b/selfdrive/test/process_replay/fakedata/regenED976DEB757|2024-08-30--03-18-02--0_card_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst new file mode 100644 index 000000000..80185eeec --- /dev/null +++ b/selfdrive/test/process_replay/fakedata/regenED976DEB757|2024-08-30--03-18-02--0_card_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b6894fd7505e5fedd290e9ce2d12e60784bedd27bb4fa36311ac20296ba98e78 +size 332419 diff --git a/selfdrive/test/process_replay/fakedata/regenF3DBBA9E8DF|2024-08-30--02-59-03--0_card_a20d7a427906c43549cf58b7a859f264aabdf28d.zst b/selfdrive/test/process_replay/fakedata/regenF3DBBA9E8DF|2024-08-30--02-59-03--0_card_a20d7a427906c43549cf58b7a859f264aabdf28d.zst deleted file mode 100644 index c2388f98e..000000000 --- a/selfdrive/test/process_replay/fakedata/regenF3DBBA9E8DF|2024-08-30--02-59-03--0_card_a20d7a427906c43549cf58b7a859f264aabdf28d.zst +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b85e323fb1c29b15f488ebb18e8f81f1e70996515d722c9cc0a7a466ea9119ae -size 294529 diff --git a/selfdrive/test/process_replay/fakedata/regenF3DBBA9E8DF|2024-08-30--02-59-03--0_card_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst b/selfdrive/test/process_replay/fakedata/regenF3DBBA9E8DF|2024-08-30--02-59-03--0_card_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst new file mode 100644 index 000000000..9643c423b --- /dev/null +++ b/selfdrive/test/process_replay/fakedata/regenF3DBBA9E8DF|2024-08-30--02-59-03--0_card_efa9c321c2f985d948b5d9a5e708f5d2d31b7737.zst @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bd052d9eedfbecd39080ec35b98c6e223b95efc73401ccb3b273eeaf8dcd3559 +size 294546 diff --git a/selfdrive/test/process_replay/ref_commit b/selfdrive/test/process_replay/ref_commit index 99c3356cf..ee53ef9b0 100644 --- a/selfdrive/test/process_replay/ref_commit +++ b/selfdrive/test/process_replay/ref_commit @@ -1 +1 @@ -a20d7a427906c43549cf58b7a859f264aabdf28d \ No newline at end of file +efa9c321c2f985d948b5d9a5e708f5d2d31b7737 \ No newline at end of file diff --git a/selfdrive/ui/sunnypilot/SConscript b/selfdrive/ui/sunnypilot/SConscript index e09d6dc8a..3e3bda6b6 100644 --- a/selfdrive/ui/sunnypilot/SConscript +++ b/selfdrive/ui/sunnypilot/SConscript @@ -15,7 +15,11 @@ qt_src = [ "sunnypilot/qt/onroad/onroad_home.cc", ] +sunnypilot_panel_qt_src = [ + "sunnypilot/qt/offroad/settings/sunnypilot/mads_settings.cc", +] + sp_widgets_src = widgets_src -sp_qt_src = qt_src +sp_qt_src = qt_src + sunnypilot_panel_qt_src Export('sp_widgets_src', 'sp_qt_src') diff --git a/selfdrive/ui/sunnypilot/qt/offroad/settings/sunnypilot/mads_settings.cc b/selfdrive/ui/sunnypilot/qt/offroad/settings/sunnypilot/mads_settings.cc new file mode 100644 index 000000000..e6e18f262 --- /dev/null +++ b/selfdrive/ui/sunnypilot/qt/offroad/settings/sunnypilot/mads_settings.cc @@ -0,0 +1,67 @@ +/** + * Copyright (c) 2021-, Haibin Wen, sunnypilot, and a number of other contributors. + * + * This file is part of sunnypilot and is licensed under the MIT License. + * See the LICENSE.md file in the root directory for more details. + */ + +#include "selfdrive/ui/sunnypilot/qt/offroad/settings/sunnypilot/mads_settings.h" + +#include "selfdrive/ui/sunnypilot/qt/widgets/scrollview.h" + +MadsSettings::MadsSettings(QWidget *parent) : QWidget(parent) { + QVBoxLayout *main_layout = new QVBoxLayout(this); + main_layout->setContentsMargins(50, 20, 50, 20); + main_layout->setSpacing(20); + + // Back button + PanelBackButton *back = new PanelBackButton(); + connect(back, &QPushButton::clicked, [=]() { emit backPress(); }); + main_layout->addWidget(back, 0, Qt::AlignLeft); + + ListWidget *list = new ListWidget(this, false); + // Main cruise + madsMainCruiseToggle = new ParamControl( + "MadsMainCruiseAllowed", + tr("Toggle with Main Cruise"), + tr("Note: For vehicles without LFA/LKAS button, disabling this will prevent lateral control engagement."), + ""); + list->addItem(madsMainCruiseToggle); + + // Unified Engagement Mode + madsUnifiedEngagementModeToggle = new ParamControl( + "MadsUnifiedEngagementMode", + tr("Unified Engagement Mode (UEM)"), + QString("%1
" + "

%2

") + .arg(tr("Engage lateral and longitudinal control with cruise control engagement.")) + .arg(tr("Note: Once lateral control is engaged via UEM, it will remain engaged until it is manually disabled via the MADS button or car shut off.")), + ""); + list->addItem(madsUnifiedEngagementModeToggle); + + // Pause Lateral On Brake + std::vector lateral_on_brake_texts{tr("Remain Active"), tr("Pause Steering")}; + madsPauseLateralOnBrake = new ButtonParamControl( + "MadsPauseLateralOnBrake", + tr("Steering Mode After Braking"), + tr("Choose how Automatic Lane Centering (ALC) behaves after the brake pedal is manually pressed in sunnypilot.\n\n" + "Remain Active: ALC will remain active even after the brake pedal is pressed.\nPause Steering: ALC will be paused after the brake pedal is manually pressed."), + "", + lateral_on_brake_texts, + 500); + list->addItem(madsPauseLateralOnBrake); + + QObject::connect(uiState(), &UIState::offroadTransition, this, &MadsSettings::updateToggles); + + main_layout->addWidget(new ScrollViewSP(list, this)); +} + +void MadsSettings::showEvent(QShowEvent *event) { + updateToggles(offroad); +} + +void MadsSettings::updateToggles(bool _offroad) { + madsPauseLateralOnBrake->setEnabled(_offroad); + + offroad = _offroad; +} diff --git a/selfdrive/ui/sunnypilot/qt/offroad/settings/sunnypilot/mads_settings.h b/selfdrive/ui/sunnypilot/qt/offroad/settings/sunnypilot/mads_settings.h new file mode 100644 index 000000000..fccb4cbb8 --- /dev/null +++ b/selfdrive/ui/sunnypilot/qt/offroad/settings/sunnypilot/mads_settings.h @@ -0,0 +1,36 @@ +/** + * Copyright (c) 2021-, Haibin Wen, sunnypilot, and a number of other contributors. + * + * This file is part of sunnypilot and is licensed under the MIT License. + * See the LICENSE.md file in the root directory for more details. + */ + +#pragma once + +#include "selfdrive/ui/qt/util.h" +#include "selfdrive/ui/sunnypilot/ui.h" +#include "selfdrive/ui/sunnypilot/qt/offroad/settings/settings.h" +#include "selfdrive/ui/sunnypilot/qt/widgets/controls.h" + +class MadsSettings : public QWidget { + Q_OBJECT + +public: + explicit MadsSettings(QWidget *parent = nullptr); + + void showEvent(QShowEvent *event) override; + +signals: + void backPress(); + +public slots: + void updateToggles(bool _offroad); + +private: + Params params; + bool offroad; + + ParamControl *madsMainCruiseToggle; + ParamControl *madsUnifiedEngagementModeToggle; + ButtonParamControl *madsPauseLateralOnBrake; +}; diff --git a/selfdrive/ui/sunnypilot/qt/offroad/settings/sunnypilot_panel.cc b/selfdrive/ui/sunnypilot/qt/offroad/settings/sunnypilot_panel.cc index 5e0619a09..65a696d81 100644 --- a/selfdrive/ui/sunnypilot/qt/offroad/settings/sunnypilot_panel.cc +++ b/selfdrive/ui/sunnypilot/qt/offroad/settings/sunnypilot_panel.cc @@ -1,5 +1,5 @@ /** -* Copyright (c) 2021-, Haibin Wen, sunnypilot, and a number of other contributors. + * Copyright (c) 2021-, Haibin Wen, sunnypilot, and a number of other contributors. * * This file is part of sunnypilot and is licensed under the MIT License. * See the LICENSE.md file in the root directory for more details. @@ -10,5 +10,82 @@ #include "common/util.h" #include "selfdrive/ui/sunnypilot/qt/widgets/controls.h" -SunnypilotPanel::SunnypilotPanel(SettingsWindowSP *parent) : ListWidget(parent) { +SunnypilotPanel::SunnypilotPanel(SettingsWindowSP *parent) : QFrame(parent) { + main_layout = new QStackedLayout(this); + ListWidget *list = new ListWidget(this, false); + + sunnypilotScreen = new QWidget(this); + QVBoxLayout* vlayout = new QVBoxLayout(sunnypilotScreen); + vlayout->setContentsMargins(50, 20, 50, 20); + + // MADS + madsToggle = new ParamControl( + "Mads", + tr("Modular Assistive Driving System (MADS)"), + tr("Enable the beloved MADS feature. Disable toggle to revert back to stock openpilot engagement/disengagement."), + ""); + madsToggle->setConfirmation(true, false); + list->addItem(madsToggle); + + madsSettingsButton = new SubPanelButton(tr("Customize MADS")); + madsSettingsButton->setObjectName("mads_btn"); + connect(madsSettingsButton, &QPushButton::clicked, [=]() { + sunnypilotScroller->setLastScrollPosition(); + main_layout->setCurrentWidget(madsWidget); + }); + QObject::connect(madsToggle, &ToggleControl::toggleFlipped, madsSettingsButton, &SubPanelButton::setEnabled); + + madsWidget = new MadsSettings(this); + connect(madsWidget, &MadsSettings::backPress, [=]() { + sunnypilotScroller->restoreScrollPosition(); + main_layout->setCurrentWidget(sunnypilotScreen); + }); + list->addItem(madsSettingsButton); + + toggleOffroadOnly = { + madsToggle, + }; + QObject::connect(uiState(), &UIState::offroadTransition, this, &SunnypilotPanel::updateToggles); + + sunnypilotScroller = new ScrollViewSP(list, this); + vlayout->addWidget(sunnypilotScroller); + vlayout->addStretch(1); + + main_layout->addWidget(sunnypilotScreen); + main_layout->addWidget(madsWidget); + + setStyleSheet(R"( + #back_btn { + font-size: 50px; + margin: 0px; + padding: 15px; + border-width: 0; + border-radius: 30px; + color: #dddddd; + background-color: #393939; + } + #back_btn:pressed { + background-color: #4a4a4a; + } + )"); + + main_layout->setCurrentWidget(sunnypilotScreen); +} + +void SunnypilotPanel::showEvent(QShowEvent *event) { + updateToggles(offroad); +} + +void SunnypilotPanel::hideEvent(QHideEvent *event) { + main_layout->setCurrentWidget(sunnypilotScreen); +} + +void SunnypilotPanel::updateToggles(bool _offroad) { + for (auto *toggle : toggleOffroadOnly) { + toggle->setEnabled(_offroad); + } + + madsSettingsButton->setEnabled(madsToggle->isToggled()); + + offroad = _offroad; } diff --git a/selfdrive/ui/sunnypilot/qt/offroad/settings/sunnypilot_panel.h b/selfdrive/ui/sunnypilot/qt/offroad/settings/sunnypilot_panel.h index 25e5d7389..807752247 100644 --- a/selfdrive/ui/sunnypilot/qt/offroad/settings/sunnypilot_panel.h +++ b/selfdrive/ui/sunnypilot/qt/offroad/settings/sunnypilot_panel.h @@ -1,5 +1,5 @@ /** -* Copyright (c) 2021-, Haibin Wen, sunnypilot, and a number of other contributors. + * Copyright (c) 2021-, Haibin Wen, sunnypilot, and a number of other contributors. * * This file is part of sunnypilot and is licensed under the MIT License. * See the LICENSE.md file in the root directory for more details. @@ -11,15 +11,30 @@ #include #include "selfdrive/ui/sunnypilot/ui.h" +#include "selfdrive/ui/sunnypilot/qt/offroad/settings/sunnypilot/mads_settings.h" #include "selfdrive/ui/qt/util.h" #include "selfdrive/ui/sunnypilot/qt/offroad/settings/settings.h" +#include "selfdrive/ui/sunnypilot/qt/widgets/scrollview.h" -class SunnypilotPanel : public ListWidget { +class SunnypilotPanel : public QFrame { Q_OBJECT public: explicit SunnypilotPanel(SettingsWindowSP *parent = nullptr); + void showEvent(QShowEvent *event) override; + void hideEvent(QHideEvent* event) override; + +public slots: + void updateToggles(bool _offroad); private: QStackedLayout* main_layout = nullptr; + QWidget* sunnypilotScreen = nullptr; + ScrollViewSP *sunnypilotScroller = nullptr; + std::vector toggleOffroadOnly; + bool offroad; + + ParamControl *madsToggle; + SubPanelButton *madsSettingsButton; + MadsSettings *madsWidget = nullptr; }; diff --git a/selfdrive/ui/sunnypilot/qt/widgets/scrollview.cc b/selfdrive/ui/sunnypilot/qt/widgets/scrollview.cc index 49f6e9343..ba9a367b0 100644 --- a/selfdrive/ui/sunnypilot/qt/widgets/scrollview.cc +++ b/selfdrive/ui/sunnypilot/qt/widgets/scrollview.cc @@ -1,5 +1,5 @@ /** -* Copyright (c) 2021-, Haibin Wen, sunnypilot, and a number of other contributors. + * Copyright (c) 2021-, Haibin Wen, sunnypilot, and a number of other contributors. * * This file is part of sunnypilot and is licensed under the MIT License. * See the LICENSE.md file in the root directory for more details. diff --git a/selfdrive/ui/sunnypilot/ui.cc b/selfdrive/ui/sunnypilot/ui.cc index cb8774373..b27c83980 100644 --- a/selfdrive/ui/sunnypilot/ui.cc +++ b/selfdrive/ui/sunnypilot/ui.cc @@ -18,7 +18,7 @@ UIStateSP::UIStateSP(QObject *parent) : UIState(parent) { "modelV2", "controlsState", "liveCalibration", "radarState", "deviceState", "pandaStates", "carParams", "driverMonitoringState", "carState", "driverStateV2", "wideRoadCameraState", "managerState", "selfdriveState", "longitudinalPlan", - "modelManagerSP", + "modelManagerSP", "selfdriveStateSP", }); // update timer diff --git a/selfdrive/ui/tests/test_ui/run.py b/selfdrive/ui/tests/test_ui/run.py index 366d66d10..a8b6c41ed 100644 --- a/selfdrive/ui/tests/test_ui/run.py +++ b/selfdrive/ui/tests/test_ui/run.py @@ -50,11 +50,6 @@ def setup_settings_software(click, pm: PubMaster): click(278, 716) time.sleep(UI_DELAY) -def setup_settings_sunnypilot(click, pm: PubMaster): - setup_settings_device(click, pm) - click(278, 846) - time.sleep(UI_DELAY) - def setup_settings_developer(click, pm: PubMaster): setup_settings_device(click, pm) click(278, 976) @@ -181,6 +176,19 @@ def setup_pair_device(click, pm: PubMaster): click(1950, 435) click(1800, 900) +def setup_settings_sunnypilot(click, pm: PubMaster): + setup_settings_device(click, pm) + click(278, 846) + time.sleep(UI_DELAY) + +def setup_settings_sunnypilot_mads(click, pm: PubMaster): + Params().put_bool("Mads", True) + + setup_settings_device(click, pm) + click(278, 846) + click(970, 250) + time.sleep(UI_DELAY) + CASES = { "homescreen": setup_homescreen, "prime": setup_homescreen, @@ -188,7 +196,6 @@ CASES = { "settings_device": setup_settings_device, "settings_toggles": setup_settings_toggles, "settings_software": setup_settings_software, - "settings_sunnypilot": setup_settings_sunnypilot, "settings_developer": setup_settings_developer, "onroad": setup_onroad, "onroad_disengaged": setup_onroad_disengaged, @@ -206,6 +213,11 @@ CASES = { "keyboard": setup_keyboard } +CASES.update({ + "settings_sunnypilot": setup_settings_sunnypilot, + "settings_sunnypilot_mads": setup_settings_sunnypilot_mads, +}) + TEST_DIR = pathlib.Path(__file__).parent TEST_OUTPUT_DIR = TEST_DIR / "report_1" diff --git a/selfdrive/ui/translations/main_ar.ts b/selfdrive/ui/translations/main_ar.ts index 6845b9c7d..11bcb2155 100644 --- a/selfdrive/ui/translations/main_ar.ts +++ b/selfdrive/ui/translations/main_ar.ts @@ -124,11 +124,11 @@ وضع المناورة الطولية - Enable GitHub runner service + Enables or disables the github runner service. - Enables or disables the github runner service. + Enable GitHub runner service @@ -333,6 +333,48 @@ جارٍ التثبيت... + + MadsSettings + + Toggle with Main Cruise + + + + Unified Engagement Mode (UEM) + + + + Engage lateral and longitudinal control with cruise control engagement. + + + + Note: Once lateral control is engaged via UEM, it will remain engaged until it is manually disabled via the MADS button or car shut off. + + + + Remain Active + + + + Pause Steering + + + + Steering Mode After Braking + + + + Choose how Automatic Lane Centering (ALC) behaves after the brake pedal is manually pressed in sunnypilot. + +Remain Active: ALC will remain active even after the brake pedal is pressed. +Pause Steering: ALC will be paused after the brake pedal is manually pressed. + + + + Note: For vehicles without LFA/LKAS button, disabling this will prevent lateral control engagement. + + + MultiOptionDialog @@ -1065,6 +1107,21 @@ This may take up to a minute. تمكين SSH + + SunnypilotPanel + + Customize MADS + + + + Modular Assistive Driving System (MADS) + + + + Enable the beloved MADS feature. Disable toggle to revert back to stock openpilot engagement/disengagement. + + + TermsPage diff --git a/selfdrive/ui/translations/main_de.ts b/selfdrive/ui/translations/main_de.ts index 7db919228..447246aad 100644 --- a/selfdrive/ui/translations/main_de.ts +++ b/selfdrive/ui/translations/main_de.ts @@ -124,11 +124,11 @@ - Enable GitHub runner service + Enables or disables the github runner service. - Enables or disables the github runner service. + Enable GitHub runner service @@ -329,6 +329,48 @@ Installiere... + + MadsSettings + + Toggle with Main Cruise + + + + Unified Engagement Mode (UEM) + + + + Engage lateral and longitudinal control with cruise control engagement. + + + + Note: Once lateral control is engaged via UEM, it will remain engaged until it is manually disabled via the MADS button or car shut off. + + + + Remain Active + + + + Pause Steering + + + + Steering Mode After Braking + + + + Choose how Automatic Lane Centering (ALC) behaves after the brake pedal is manually pressed in sunnypilot. + +Remain Active: ALC will remain active even after the brake pedal is pressed. +Pause Steering: ALC will be paused after the brake pedal is manually pressed. + + + + Note: For vehicles without LFA/LKAS button, disabling this will prevent lateral control engagement. + + + MultiOptionDialog @@ -1049,6 +1091,21 @@ This may take up to a minute. SSH aktivieren + + SunnypilotPanel + + Customize MADS + + + + Modular Assistive Driving System (MADS) + + + + Enable the beloved MADS feature. Disable toggle to revert back to stock openpilot engagement/disengagement. + + + TermsPage diff --git a/selfdrive/ui/translations/main_es.ts b/selfdrive/ui/translations/main_es.ts index 5d19df390..2c7eac570 100644 --- a/selfdrive/ui/translations/main_es.ts +++ b/selfdrive/ui/translations/main_es.ts @@ -124,11 +124,11 @@ Modo de maniobra longitudinal - Enable GitHub runner service + Enables or disables the github runner service. - Enables or disables the github runner service. + Enable GitHub runner service @@ -329,6 +329,48 @@ Instalando... + + MadsSettings + + Toggle with Main Cruise + + + + Note: For vehicles without LFA/LKAS button, disabling this will prevent lateral control engagement. + Nota: Para vehículos sin botón de LFA/LKAS, deshabilitar este ajuste evitará que se active el control lateral. + + + Unified Engagement Mode (UEM) + + + + Engage lateral and longitudinal control with cruise control engagement. + + + + Note: Once lateral control is engaged via UEM, it will remain engaged until it is manually disabled via the MADS button or car shut off. + + + + Remain Active + + + + Pause Steering + + + + Steering Mode After Braking + + + + Choose how Automatic Lane Centering (ALC) behaves after the brake pedal is manually pressed in sunnypilot. + +Remain Active: ALC will remain active even after the brake pedal is pressed. +Pause Steering: ALC will be paused after the brake pedal is manually pressed. + + + MultiOptionDialog @@ -1049,6 +1091,21 @@ Esto puede tardar un minuto. Habilitar SSH + + SunnypilotPanel + + Customize MADS + + + + Modular Assistive Driving System (MADS) + + + + Enable the beloved MADS feature. Disable toggle to revert back to stock openpilot engagement/disengagement. + + + TermsPage diff --git a/selfdrive/ui/translations/main_fr.ts b/selfdrive/ui/translations/main_fr.ts index 58713533d..351e684a2 100644 --- a/selfdrive/ui/translations/main_fr.ts +++ b/selfdrive/ui/translations/main_fr.ts @@ -124,11 +124,11 @@ - Enable GitHub runner service + Enables or disables the github runner service. - Enables or disables the github runner service. + Enable GitHub runner service @@ -329,6 +329,48 @@ Installation... + + MadsSettings + + Toggle with Main Cruise + + + + Unified Engagement Mode (UEM) + + + + Engage lateral and longitudinal control with cruise control engagement. + + + + Note: Once lateral control is engaged via UEM, it will remain engaged until it is manually disabled via the MADS button or car shut off. + + + + Remain Active + + + + Pause Steering + + + + Steering Mode After Braking + + + + Choose how Automatic Lane Centering (ALC) behaves after the brake pedal is manually pressed in sunnypilot. + +Remain Active: ALC will remain active even after the brake pedal is pressed. +Pause Steering: ALC will be paused after the brake pedal is manually pressed. + + + + Note: For vehicles without LFA/LKAS button, disabling this will prevent lateral control engagement. + + + MultiOptionDialog @@ -1049,6 +1091,21 @@ Cela peut prendre jusqu'à une minute. Activer SSH + + SunnypilotPanel + + Customize MADS + + + + Modular Assistive Driving System (MADS) + + + + Enable the beloved MADS feature. Disable toggle to revert back to stock openpilot engagement/disengagement. + + + TermsPage diff --git a/selfdrive/ui/translations/main_ja.ts b/selfdrive/ui/translations/main_ja.ts index a916b34b8..f1690bb76 100644 --- a/selfdrive/ui/translations/main_ja.ts +++ b/selfdrive/ui/translations/main_ja.ts @@ -124,11 +124,11 @@ - Enable GitHub runner service + Enables or disables the github runner service. - Enables or disables the github runner service. + Enable GitHub runner service @@ -328,6 +328,48 @@ インストールしています... + + MadsSettings + + Toggle with Main Cruise + + + + Unified Engagement Mode (UEM) + + + + Engage lateral and longitudinal control with cruise control engagement. + + + + Note: Once lateral control is engaged via UEM, it will remain engaged until it is manually disabled via the MADS button or car shut off. + + + + Remain Active + + + + Pause Steering + + + + Steering Mode After Braking + + + + Choose how Automatic Lane Centering (ALC) behaves after the brake pedal is manually pressed in sunnypilot. + +Remain Active: ALC will remain active even after the brake pedal is pressed. +Pause Steering: ALC will be paused after the brake pedal is manually pressed. + + + + Note: For vehicles without LFA/LKAS button, disabling this will prevent lateral control engagement. + + + MultiOptionDialog @@ -1043,6 +1085,21 @@ This may take up to a minute. SSH を有効化 + + SunnypilotPanel + + Customize MADS + + + + Modular Assistive Driving System (MADS) + + + + Enable the beloved MADS feature. Disable toggle to revert back to stock openpilot engagement/disengagement. + + + TermsPage diff --git a/selfdrive/ui/translations/main_ko.ts b/selfdrive/ui/translations/main_ko.ts index c9a7d8981..2dc036fee 100644 --- a/selfdrive/ui/translations/main_ko.ts +++ b/selfdrive/ui/translations/main_ko.ts @@ -124,11 +124,11 @@ 롱컨 기동 모드 - Enable GitHub runner service + Enables or disables the github runner service. - Enables or disables the github runner service. + Enable GitHub runner service @@ -328,6 +328,48 @@ 설치 중... + + MadsSettings + + Toggle with Main Cruise + + + + Unified Engagement Mode (UEM) + + + + Engage lateral and longitudinal control with cruise control engagement. + + + + Note: Once lateral control is engaged via UEM, it will remain engaged until it is manually disabled via the MADS button or car shut off. + + + + Remain Active + + + + Pause Steering + + + + Steering Mode After Braking + + + + Choose how Automatic Lane Centering (ALC) behaves after the brake pedal is manually pressed in sunnypilot. + +Remain Active: ALC will remain active even after the brake pedal is pressed. +Pause Steering: ALC will be paused after the brake pedal is manually pressed. + + + + Note: For vehicles without LFA/LKAS button, disabling this will prevent lateral control engagement. + + + MultiOptionDialog @@ -1045,6 +1087,21 @@ This may take up to a minute. SSH 사용 + + SunnypilotPanel + + Customize MADS + + + + Modular Assistive Driving System (MADS) + + + + Enable the beloved MADS feature. Disable toggle to revert back to stock openpilot engagement/disengagement. + + + TermsPage diff --git a/selfdrive/ui/translations/main_pt-BR.ts b/selfdrive/ui/translations/main_pt-BR.ts index e6cde1181..ff8a2efef 100644 --- a/selfdrive/ui/translations/main_pt-BR.ts +++ b/selfdrive/ui/translations/main_pt-BR.ts @@ -124,11 +124,11 @@ Modo Longitudinal Maneuver - Enable GitHub runner service + Enables or disables the github runner service. - Enables or disables the github runner service. + Enable GitHub runner service @@ -329,6 +329,48 @@ Instalando... + + MadsSettings + + Toggle with Main Cruise + + + + Unified Engagement Mode (UEM) + + + + Engage lateral and longitudinal control with cruise control engagement. + + + + Note: Once lateral control is engaged via UEM, it will remain engaged until it is manually disabled via the MADS button or car shut off. + + + + Remain Active + + + + Pause Steering + + + + Steering Mode After Braking + + + + Choose how Automatic Lane Centering (ALC) behaves after the brake pedal is manually pressed in sunnypilot. + +Remain Active: ALC will remain active even after the brake pedal is pressed. +Pause Steering: ALC will be paused after the brake pedal is manually pressed. + + + + Note: For vehicles without LFA/LKAS button, disabling this will prevent lateral control engagement. + + + MultiOptionDialog @@ -1049,6 +1091,21 @@ Isso pode levar até um minuto. Habilitar SSH + + SunnypilotPanel + + Customize MADS + + + + Modular Assistive Driving System (MADS) + + + + Enable the beloved MADS feature. Disable toggle to revert back to stock openpilot engagement/disengagement. + + + TermsPage diff --git a/selfdrive/ui/translations/main_th.ts b/selfdrive/ui/translations/main_th.ts index 41b9c1e53..1162f6440 100644 --- a/selfdrive/ui/translations/main_th.ts +++ b/selfdrive/ui/translations/main_th.ts @@ -124,11 +124,11 @@ - Enable GitHub runner service + Enables or disables the github runner service. - Enables or disables the github runner service. + Enable GitHub runner service @@ -328,6 +328,48 @@ กำลังติดตั้ง... + + MadsSettings + + Toggle with Main Cruise + + + + Unified Engagement Mode (UEM) + + + + Engage lateral and longitudinal control with cruise control engagement. + + + + Note: Once lateral control is engaged via UEM, it will remain engaged until it is manually disabled via the MADS button or car shut off. + + + + Remain Active + + + + Pause Steering + + + + Steering Mode After Braking + + + + Choose how Automatic Lane Centering (ALC) behaves after the brake pedal is manually pressed in sunnypilot. + +Remain Active: ALC will remain active even after the brake pedal is pressed. +Pause Steering: ALC will be paused after the brake pedal is manually pressed. + + + + Note: For vehicles without LFA/LKAS button, disabling this will prevent lateral control engagement. + + + MultiOptionDialog @@ -1045,6 +1087,21 @@ This may take up to a minute. เปิดใช้งาน SSH + + SunnypilotPanel + + Customize MADS + + + + Modular Assistive Driving System (MADS) + + + + Enable the beloved MADS feature. Disable toggle to revert back to stock openpilot engagement/disengagement. + + + TermsPage diff --git a/selfdrive/ui/translations/main_tr.ts b/selfdrive/ui/translations/main_tr.ts index 0927aa627..fbc9292bc 100644 --- a/selfdrive/ui/translations/main_tr.ts +++ b/selfdrive/ui/translations/main_tr.ts @@ -124,11 +124,11 @@ - Enable GitHub runner service + Enables or disables the github runner service. - Enables or disables the github runner service. + Enable GitHub runner service @@ -328,6 +328,48 @@ Yükleniyor... + + MadsSettings + + Toggle with Main Cruise + + + + Unified Engagement Mode (UEM) + + + + Engage lateral and longitudinal control with cruise control engagement. + + + + Note: Once lateral control is engaged via UEM, it will remain engaged until it is manually disabled via the MADS button or car shut off. + + + + Remain Active + + + + Pause Steering + + + + Steering Mode After Braking + + + + Choose how Automatic Lane Centering (ALC) behaves after the brake pedal is manually pressed in sunnypilot. + +Remain Active: ALC will remain active even after the brake pedal is pressed. +Pause Steering: ALC will be paused after the brake pedal is manually pressed. + + + + Note: For vehicles without LFA/LKAS button, disabling this will prevent lateral control engagement. + + + MultiOptionDialog @@ -1043,6 +1085,21 @@ This may take up to a minute. SSH aç + + SunnypilotPanel + + Customize MADS + + + + Modular Assistive Driving System (MADS) + + + + Enable the beloved MADS feature. Disable toggle to revert back to stock openpilot engagement/disengagement. + + + TermsPage diff --git a/selfdrive/ui/translations/main_zh-CHS.ts b/selfdrive/ui/translations/main_zh-CHS.ts index 603396ba6..7b5a700a5 100644 --- a/selfdrive/ui/translations/main_zh-CHS.ts +++ b/selfdrive/ui/translations/main_zh-CHS.ts @@ -124,11 +124,11 @@ - Enable GitHub runner service + Enables or disables the github runner service. - Enables or disables the github runner service. + Enable GitHub runner service @@ -328,6 +328,48 @@ 正在安装…… + + MadsSettings + + Toggle with Main Cruise + + + + Unified Engagement Mode (UEM) + + + + Engage lateral and longitudinal control with cruise control engagement. + + + + Note: Once lateral control is engaged via UEM, it will remain engaged until it is manually disabled via the MADS button or car shut off. + + + + Remain Active + + + + Pause Steering + + + + Steering Mode After Braking + + + + Choose how Automatic Lane Centering (ALC) behaves after the brake pedal is manually pressed in sunnypilot. + +Remain Active: ALC will remain active even after the brake pedal is pressed. +Pause Steering: ALC will be paused after the brake pedal is manually pressed. + + + + Note: For vehicles without LFA/LKAS button, disabling this will prevent lateral control engagement. + + + MultiOptionDialog @@ -1045,6 +1087,21 @@ This may take up to a minute. 启用SSH + + SunnypilotPanel + + Customize MADS + + + + Modular Assistive Driving System (MADS) + + + + Enable the beloved MADS feature. Disable toggle to revert back to stock openpilot engagement/disengagement. + + + TermsPage diff --git a/selfdrive/ui/translations/main_zh-CHT.ts b/selfdrive/ui/translations/main_zh-CHT.ts index 99a0e0534..b3f04483c 100644 --- a/selfdrive/ui/translations/main_zh-CHT.ts +++ b/selfdrive/ui/translations/main_zh-CHT.ts @@ -124,11 +124,11 @@ - Enable GitHub runner service + Enables or disables the github runner service. - Enables or disables the github runner service. + Enable GitHub runner service @@ -328,6 +328,48 @@ 安裝中… + + MadsSettings + + Toggle with Main Cruise + + + + Unified Engagement Mode (UEM) + + + + Engage lateral and longitudinal control with cruise control engagement. + + + + Note: Once lateral control is engaged via UEM, it will remain engaged until it is manually disabled via the MADS button or car shut off. + + + + Remain Active + + + + Pause Steering + + + + Steering Mode After Braking + + + + Choose how Automatic Lane Centering (ALC) behaves after the brake pedal is manually pressed in sunnypilot. + +Remain Active: ALC will remain active even after the brake pedal is pressed. +Pause Steering: ALC will be paused after the brake pedal is manually pressed. + + + + Note: For vehicles without LFA/LKAS button, disabling this will prevent lateral control engagement. + + + MultiOptionDialog @@ -1045,6 +1087,21 @@ This may take up to a minute. 啟用 SSH 服務 + + SunnypilotPanel + + Customize MADS + + + + Modular Assistive Driving System (MADS) + + + + Enable the beloved MADS feature. Disable toggle to revert back to stock openpilot engagement/disengagement. + + + TermsPage diff --git a/selfdrive/ui/ui.cc b/selfdrive/ui/ui.cc index 3179a383c..cc29aa914 100644 --- a/selfdrive/ui/ui.cc +++ b/selfdrive/ui/ui.cc @@ -69,13 +69,25 @@ void ui_update_params(UIState *s) { } void UIState::updateStatus() { - if (scene.started && sm->updated("selfdriveState")) { + if (scene.started && (sm->updated("selfdriveState") || sm->updated("selfdriveStateSP"))) { auto ss = (*sm)["selfdriveState"].getSelfdriveState(); + auto mads = (*sm)["selfdriveStateSP"].getSelfdriveStateSP().getMads(); auto state = ss.getState(); - if (state == cereal::SelfdriveState::OpenpilotState::PRE_ENABLED || state == cereal::SelfdriveState::OpenpilotState::OVERRIDING) { + auto state_mads = mads.getState(); + if (state == cereal::SelfdriveState::OpenpilotState::PRE_ENABLED || state == cereal::SelfdriveState::OpenpilotState::OVERRIDING || + state_mads == cereal::SelfdriveStateSP::ModularAssistiveDrivingSystem::ModularAssistiveDrivingSystemState::PAUSED || + state_mads == cereal::SelfdriveStateSP::ModularAssistiveDrivingSystem::ModularAssistiveDrivingSystemState::OVERRIDING) { status = STATUS_OVERRIDE; } else { - status = ss.getEnabled() ? STATUS_ENGAGED : STATUS_DISENGAGED; + if (mads.getAvailable()) { + if (mads.getEnabled()) { + status = ss.getEnabled() ? STATUS_ENGAGED : STATUS_LAT_ONLY; + } else { + status = STATUS_DISENGAGED; + } + } else { + status = ss.getEnabled() ? STATUS_ENGAGED : STATUS_DISENGAGED; + } } } diff --git a/selfdrive/ui/ui.h b/selfdrive/ui/ui.h index bf932c2ab..21e74af1d 100644 --- a/selfdrive/ui/ui.h +++ b/selfdrive/ui/ui.h @@ -42,12 +42,16 @@ typedef enum UIStatus { STATUS_DISENGAGED, STATUS_OVERRIDE, STATUS_ENGAGED, + STATUS_LAT_ONLY, + STATUS_LONG_ONLY, } UIStatus; const QColor bg_colors [] = { [STATUS_DISENGAGED] = QColor(0x17, 0x33, 0x49, 0xc8), [STATUS_OVERRIDE] = QColor(0x91, 0x9b, 0x95, 0xf1), [STATUS_ENGAGED] = QColor(0x17, 0x86, 0x44, 0xf1), + [STATUS_LAT_ONLY] = QColor(0x00, 0xc8, 0xc8, 0xf1), + [STATUS_LONG_ONLY] = QColor(0x96, 0x1C, 0xA8, 0xf1), }; typedef struct UIScene { diff --git a/sunnypilot/mads/helpers.py b/sunnypilot/mads/helpers.py new file mode 100644 index 000000000..2a5d43ea5 --- /dev/null +++ b/sunnypilot/mads/helpers.py @@ -0,0 +1,63 @@ +""" +The MIT License + +Copyright (c) 2021-, Haibin Wen, sunnypilot, and a number of other contributors. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +Last updated: July 29, 2024 +""" + +from panda import Panda, ALTERNATIVE_EXPERIENCE + +from openpilot.common.params import Params + +from opendbc.sunnypilot.car.hyundai.values import HyundaiFlagsSP + + +class MadsParams: + def __init__(self): + self.params = Params() + + def read_param(self, key: str): + return self.params.get_bool(key) + + def set_alternative_experience(self, CP): + enabled = self.read_param("Mads") + pause_lateral_on_brake = self.read_param("MadsPauseLateralOnBrake") + + if enabled: + CP.alternativeExperience |= ALTERNATIVE_EXPERIENCE.ENABLE_MADS + + if pause_lateral_on_brake: + CP.alternativeExperience |= ALTERNATIVE_EXPERIENCE.DISENGAGE_LATERAL_ON_BRAKE + + def set_car_specific_params(self, CP): + if CP.carName == "hyundai": + # TODO-SP: This should be separated from MADS module for future implementations + # Use "HyundaiLongitudinalMainCruiseToggleable" param + hyundai_cruise_main_toggleable = True + if hyundai_cruise_main_toggleable: + CP.sunnypilotFlags |= HyundaiFlagsSP.LONGITUDINAL_MAIN_CRUISE_TOGGLEABLE.value + CP.safetyConfigs[-1].safetyParam |= Panda.FLAG_HYUNDAI_LONG_MAIN_CRUISE_TOGGLEABLE + + # MADS is currently not supported in Tesla due to lack of consistent states to engage controls + # TODO-SP: To enable MADS for Tesla, identify consistent signals for MADS toggling + if CP.carName == "tesla": + self.params.remove("Mads") diff --git a/sunnypilot/mads/mads.py b/sunnypilot/mads/mads.py new file mode 100644 index 000000000..f385a9aba --- /dev/null +++ b/sunnypilot/mads/mads.py @@ -0,0 +1,172 @@ +""" +The MIT License + +Copyright (c) 2021-, Haibin Wen, sunnypilot, and a number of other contributors. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +Last updated: July 29, 2024 +""" + +from cereal import messaging, car, log, custom + +from opendbc.car.hyundai.values import HyundaiFlags +from opendbc.sunnypilot.car.hyundai.values import HyundaiFlagsSP + +from openpilot.sunnypilot.mads.helpers import MadsParams +from openpilot.sunnypilot.mads.state import StateMachine, GEARS_ALLOW_PAUSED_SILENT + +State = custom.SelfdriveStateSP.ModularAssistiveDrivingSystem.ModularAssistiveDrivingSystemState +ButtonType = car.CarState.ButtonEvent.Type +EventName = log.OnroadEvent.EventName +SafetyModel = car.CarParams.SafetyModel + +SET_SPEED_BUTTONS = (ButtonType.accelCruise, ButtonType.resumeCruise, ButtonType.decelCruise, ButtonType.setCruise) +IGNORED_SAFETY_MODES = (SafetyModel.silent, SafetyModel.noOutput) + + +class ModularAssistiveDrivingSystem: + def __init__(self, selfdrive): + self.mads_params = MadsParams() + + self.enabled = False + self.active = False + self.available = False + self.mismatch_counter = 0 + self.allow_always = False + self.selfdrive = selfdrive + self.selfdrive.enabled_prev = False + self.state_machine = StateMachine(self) + self.events = self.selfdrive.events + + if self.selfdrive.CP.carName == "hyundai": + if (self.selfdrive.CP.sunnypilotFlags & HyundaiFlagsSP.HAS_LFA_BUTTON) or \ + (self.selfdrive.CP.flags & HyundaiFlags.CANFD): + self.allow_always = True + + # read params on init + self.enabled_toggle = self.mads_params.read_param("Mads") + self.main_enabled_toggle = self.mads_params.read_param("MadsMainCruiseAllowed") + self.pause_lateral_on_brake_toggle = self.mads_params.read_param("MadsPauseLateralOnBrake") + self.unified_engagement_mode = self.mads_params.read_param("MadsUnifiedEngagementMode") + + def read_params(self): + self.main_enabled_toggle = self.mads_params.read_param("MadsMainCruiseAllowed") + self.unified_engagement_mode = self.mads_params.read_param("MadsUnifiedEngagementMode") + + def update_controls_mismatch(self, sm: messaging.SubMaster): + heartbeat_engaged = self.active if self.pause_lateral_on_brake_toggle else self.enabled + + if not heartbeat_engaged: + self.mismatch_counter = 0 + + if heartbeat_engaged and any(not ps.controlsAllowedLat for ps in sm['pandaStates'] + if ps.safetyModel not in IGNORED_SAFETY_MODES): + self.mismatch_counter += 1 + + if self.mismatch_counter >= 200: + self.events.add(EventName.controlsMismatchLateral) + + def update_events(self, CS: car.CarState, sm: messaging.SubMaster): + def update_unified_engagement_mode(): + uem_blocked = self.enabled or (self.selfdrive.enabled and self.selfdrive.enabled_prev) + if (self.unified_engagement_mode and uem_blocked) or not self.unified_engagement_mode: + self.events.remove(EventName.pcmEnable) + self.events.remove(EventName.buttonEnable) + + def transition_paused_state(): + if self.state_machine.state != State.paused: + self.events.add(EventName.silentLkasDisable) + + if not self.selfdrive.enabled and self.enabled: + if self.events.has(EventName.doorOpen): + self.events.replace(EventName.doorOpen, EventName.silentDoorOpen) + transition_paused_state() + if self.events.has(EventName.seatbeltNotLatched): + self.events.replace(EventName.seatbeltNotLatched, EventName.silentSeatbeltNotLatched) + transition_paused_state() + if self.events.has(EventName.wrongGear): + self.events.replace(EventName.wrongGear, EventName.silentWrongGear) + transition_paused_state() + if self.events.has(EventName.reverseGear): + self.events.replace(EventName.reverseGear, EventName.silentReverseGear) + transition_paused_state() + if self.events.has(EventName.brakeHold): + self.events.replace(EventName.brakeHold, EventName.silentBrakeHold) + transition_paused_state() + if self.events.has(EventName.parkBrake): + self.events.replace(EventName.parkBrake, EventName.silentParkBrake) + transition_paused_state() + + if self.pause_lateral_on_brake_toggle: + if CS.brakePressed: + transition_paused_state() + + if not (self.pause_lateral_on_brake_toggle and CS.brakePressed) and \ + not self.events.contains_in_list(GEARS_ALLOW_PAUSED_SILENT): + if self.state_machine.state == State.paused: + self.events.add(EventName.silentLkasEnable) + + self.events.remove(EventName.preEnableStandstill) + + if self.events.has(EventName.pcmEnable) or self.events.has(EventName.buttonEnable): + update_unified_engagement_mode() + else: + if self.main_enabled_toggle: + if CS.cruiseState.available and not self.selfdrive.CS_prev.cruiseState.available: + self.events.add(EventName.lkasEnable) + + for be in CS.buttonEvents: + if be.type == ButtonType.cancel: + if not self.selfdrive.enabled and self.selfdrive.enabled_prev: + self.events.add(EventName.manualLongitudinalRequired) + if be.type == ButtonType.lkas and be.pressed and (CS.cruiseState.available or self.allow_always): + if self.enabled: + if self.selfdrive.enabled: + self.events.add(EventName.manualSteeringRequired) + else: + self.events.add(EventName.lkasDisable) + else: + self.events.add(EventName.lkasEnable) + + if not CS.cruiseState.available: + self.events.remove(EventName.buttonEnable) + if self.selfdrive.CS_prev.cruiseState.available: + self.events.add(EventName.lkasDisable) + + self.events.remove(EventName.pcmDisable) + self.events.remove(EventName.buttonCancel) + self.events.remove(EventName.pedalPressed) + self.events.remove(EventName.wrongCruiseMode) + if not any(be.type in SET_SPEED_BUTTONS for be in CS.buttonEvents): + self.events.remove(EventName.wrongCarMode) + + self.update_controls_mismatch(sm) + + def update(self, CS: car.CarState, sm: messaging.SubMaster): + if not self.enabled_toggle: + return + + self.update_events(CS, sm) + + if not self.selfdrive.CP.passive and self.selfdrive.initialized: + self.enabled, self.active = self.state_machine.update(self.events) + + # Copy of previous SelfdriveD states for MADS events handling + self.selfdrive.enabled_prev = self.selfdrive.enabled diff --git a/sunnypilot/mads/state.py b/sunnypilot/mads/state.py new file mode 100644 index 000000000..de6ed537d --- /dev/null +++ b/sunnypilot/mads/state.py @@ -0,0 +1,146 @@ +""" +The MIT License + +Copyright (c) 2021-, Haibin Wen, sunnypilot, and a number of other contributors. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +Last updated: July 29, 2024 +""" + +from cereal import log, custom +from openpilot.selfdrive.selfdrived.events import ET, Events +from openpilot.selfdrive.selfdrived.state import SOFT_DISABLE_TIME +from openpilot.common.realtime import DT_CTRL + +State = custom.SelfdriveStateSP.ModularAssistiveDrivingSystem.ModularAssistiveDrivingSystemState +EventName = log.OnroadEvent.EventName + +ACTIVE_STATES = (State.enabled, State.softDisabling, State.overriding) +ENABLED_STATES = (State.paused, *ACTIVE_STATES) + +GEARS_ALLOW_PAUSED_SILENT = [EventName.silentWrongGear, EventName.silentReverseGear, EventName.silentBrakeHold, + EventName.silentDoorOpen, EventName.silentSeatbeltNotLatched, EventName.silentParkBrake] +GEARS_ALLOW_PAUSED = [EventName.wrongGear, EventName.reverseGear, EventName.brakeHold, + EventName.doorOpen, EventName.seatbeltNotLatched, EventName.parkBrake, + *GEARS_ALLOW_PAUSED_SILENT] + + +class StateMachine: + def __init__(self, mads): + self.selfdrive = mads.selfdrive + self.ss_state_machine = mads.selfdrive.state_machine + + self.state = State.disabled + + def add_current_alert_types(self, alert_type): + if not self.selfdrive.enabled: + self.ss_state_machine.current_alert_types.append(alert_type) + + def update(self, events: Events): + # soft disable timer and current alert types are from the state machine of openpilot + # decrement the soft disable timer at every step, as it's reset on + # entrance in SOFT_DISABLING state + + # ENABLED, SOFT DISABLING, PAUSED, OVERRIDING + if self.state != State.disabled: + # user and immediate disable always have priority in a non-disabled state + if events.contains(ET.USER_DISABLE): + if events.has(EventName.silentLkasDisable) or events.has(EventName.silentBrakeHold): + self.state = State.paused + else: + self.state = State.disabled + self.ss_state_machine.current_alert_types.append(ET.USER_DISABLE) + + elif events.contains(ET.IMMEDIATE_DISABLE): + self.state = State.disabled + self.add_current_alert_types(ET.IMMEDIATE_DISABLE) + + else: + # ENABLED + if self.state == State.enabled: + if events.contains(ET.SOFT_DISABLE): + self.state = State.softDisabling + if not self.selfdrive.enabled: + self.ss_state_machine.soft_disable_timer = int(SOFT_DISABLE_TIME / DT_CTRL) + self.ss_state_machine.current_alert_types.append(ET.SOFT_DISABLE) + + elif events.contains(ET.OVERRIDE_LATERAL): + self.state = State.overriding + self.add_current_alert_types(ET.OVERRIDE_LATERAL) + + # SOFT DISABLING + elif self.state == State.softDisabling: + if not events.contains(ET.SOFT_DISABLE): + # no more soft disabling condition, so go back to ENABLED + self.state = State.enabled + + elif self.ss_state_machine.soft_disable_timer > 0: + self.add_current_alert_types(ET.SOFT_DISABLE) + + elif self.ss_state_machine.soft_disable_timer <= 0: + self.state = State.disabled + + # PAUSED + elif self.state == State.paused: + if events.contains(ET.ENABLE): + if events.contains(ET.NO_ENTRY): + self.add_current_alert_types(ET.NO_ENTRY) + + else: + if events.contains(ET.OVERRIDE_LATERAL): + self.state = State.overriding + else: + self.state = State.enabled + self.add_current_alert_types(ET.ENABLE) + + # OVERRIDING + elif self.state == State.overriding: + if events.contains(ET.SOFT_DISABLE): + self.state = State.softDisabling + if not self.selfdrive.enabled: + self.ss_state_machine.soft_disable_timer = int(SOFT_DISABLE_TIME / DT_CTRL) + self.ss_state_machine.current_alert_types.append(ET.SOFT_DISABLE) + elif not events.contains(ET.OVERRIDE_LATERAL): + self.state = State.enabled + else: + self.ss_state_machine.current_alert_types += [ET.OVERRIDE_LATERAL] + + # DISABLED + elif self.state == State.disabled: + if events.contains(ET.ENABLE): + if events.contains(ET.NO_ENTRY): + if events.contains_in_list(GEARS_ALLOW_PAUSED): + self.state = State.paused + self.add_current_alert_types(ET.NO_ENTRY) + + else: + if events.contains(ET.OVERRIDE_LATERAL): + self.state = State.overriding + else: + self.state = State.enabled + self.add_current_alert_types(ET.ENABLE) + + # check if MADS is engaged and actuators are enabled + enabled = self.state in ENABLED_STATES + active = self.state in ACTIVE_STATES + if active: + self.add_current_alert_types(ET.WARNING) + + return enabled, active diff --git a/sunnypilot/mads/tests/test_mads_state_machine.py b/sunnypilot/mads/tests/test_mads_state_machine.py new file mode 100644 index 000000000..5646c9676 --- /dev/null +++ b/sunnypilot/mads/tests/test_mads_state_machine.py @@ -0,0 +1,156 @@ +""" +The MIT License + +Copyright (c) 2021-, Haibin Wen, sunnypilot, and a number of other contributors. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +Last updated: July 29, 2024 +""" + +import pytest +from pytest_mock import MockerFixture + +from cereal import log, custom +from openpilot.common.realtime import DT_CTRL +from openpilot.sunnypilot.mads.state import StateMachine, SOFT_DISABLE_TIME, GEARS_ALLOW_PAUSED +from openpilot.selfdrive.selfdrived.events import Events, ET, EVENTS, NormalPermanentAlert + +State = custom.SelfdriveStateSP.ModularAssistiveDrivingSystem.ModularAssistiveDrivingSystemState +EventName = log.OnroadEvent.EventName + +# The event types that maintain the current state +MAINTAIN_STATES = {State.enabled: (None,), State.disabled: (None,), State.softDisabling: (ET.SOFT_DISABLE,), + State.paused: (None,), State.overriding: (ET.OVERRIDE_LATERAL,)} +ALL_STATES = (State.schema.enumerants.values()) +# The event types checked in DISABLED section of state machine +ENABLE_EVENT_TYPES = (ET.ENABLE, ET.OVERRIDE_LATERAL) + + +def make_event(event_types): + event = {} + for ev in event_types: + event[ev] = NormalPermanentAlert("alert") + EVENTS[0] = event + return 0 + + +class MockMADS: + def __init__(self, mocker: MockerFixture): + self.selfdrive = mocker.MagicMock() + self.selfdrive.state_machine = mocker.MagicMock() + self.selfdrive.active = False + + +class TestMADSStateMachine: + @pytest.fixture(autouse=True) + def setup_method(self, mocker: MockerFixture): + self.mads = MockMADS(mocker) + self.events = Events() + self.state_machine = StateMachine(self.mads) + self.mads.selfdrive.state_machine.soft_disable_timer = int(SOFT_DISABLE_TIME / DT_CTRL) + + def test_immediate_disable(self): + for state in ALL_STATES: + for et in MAINTAIN_STATES[state]: + self.events.add(make_event([et, ET.IMMEDIATE_DISABLE])) + self.state_machine.state = state + self.state_machine.update(self.events) + assert State.disabled == self.state_machine.state + self.events.clear() + + def test_user_disable(self): + for state in ALL_STATES: + for et in MAINTAIN_STATES[state]: + self.events.add(make_event([et, ET.USER_DISABLE])) + self.state_machine.state = state + self.state_machine.update(self.events) + assert State.disabled == self.state_machine.state + self.events.clear() + + def test_user_disable_to_paused(self): + paused_events = (EventName.silentLkasDisable, EventName.silentBrakeHold) + for state in ALL_STATES: + for et in MAINTAIN_STATES[state]: + self.events.add(make_event([et, ET.USER_DISABLE])) + for en in paused_events: + self.events.add(en) + self.state_machine.state = state + self.state_machine.update(self.events) + final_state = State.paused if self.events.has(en) and state != State.disabled else State.disabled + assert self.state_machine.state == final_state + self.events.clear() + + def test_soft_disable(self): + for state in ALL_STATES: + if state == State.paused: # paused considers USER_DISABLE instead + continue + for et in MAINTAIN_STATES[state]: + self.events.add(make_event([et, ET.SOFT_DISABLE])) + self.state_machine.state = state + self.state_machine.update(self.events) + assert self.state_machine.state == State.disabled if state == State.disabled else State.softDisabling + self.events.clear() + + def test_soft_disable_timer(self): + self.state_machine.state = State.enabled + self.events.add(make_event([ET.SOFT_DISABLE])) + self.state_machine.update(self.events) + for _ in range(int(SOFT_DISABLE_TIME / DT_CTRL)): + assert self.state_machine.state == State.softDisabling + self.mads.selfdrive.state_machine.soft_disable_timer -= 1 + self.state_machine.update(self.events) + + assert self.state_machine.state == State.disabled + + def test_no_entry(self): + for et in ENABLE_EVENT_TYPES: + self.events.add(make_event([ET.NO_ENTRY, et])) + if not self.events.contains_in_list(GEARS_ALLOW_PAUSED): + self.state_machine.update(self.events) + assert self.state_machine.state == State.disabled + self.events.clear() + + def test_no_entry_paused(self): + self.state_machine.state = State.paused + self.events.add(make_event([ET.NO_ENTRY])) + self.state_machine.update(self.events) + assert self.state_machine.state == State.paused + + def test_override_lateral(self): + self.state_machine.state = State.enabled + self.events.add(make_event([ET.OVERRIDE_LATERAL])) + self.state_machine.update(self.events) + assert self.state_machine.state == State.overriding + + def test_paused_to_enabled(self): + self.state_machine.state = State.paused + self.events.add(make_event([ET.ENABLE])) + self.state_machine.update(self.events) + assert self.state_machine.state == State.enabled + + def test_maintain_states(self): + for state in ALL_STATES: + for et in MAINTAIN_STATES[state]: + self.state_machine.state = state + if et is not None: + self.events.add(make_event([et])) + self.state_machine.update(self.events) + assert self.state_machine.state == state + self.events.clear() diff --git a/system/manager/manager.py b/system/manager/manager.py index 8afb29497..5cbc73b83 100755 --- a/system/manager/manager.py +++ b/system/manager/manager.py @@ -40,6 +40,13 @@ def manager_init() -> None: ("LanguageSetting", "main_en"), ("OpenpilotEnabledToggle", "1"), ("LongitudinalPersonality", str(log.LongitudinalPersonality.standard)), + ] + + sunnypilot_default_params: list[tuple[str, str | bytes]] = [ + ("Mads", "1"), + ("MadsMainCruiseAllowed", "1"), + ("MadsPauseLateralOnBrake", "0"), + ("MadsUnifiedEngagementMode", "1"), ("ModelManager_LastSyncTime", "0"), ("ModelManager_ModelsCache", "") ] @@ -48,7 +55,7 @@ def manager_init() -> None: params.put_bool("RecordFront", True) # set unset params - for k, v in default_params: + for k, v in (default_params + sunnypilot_default_params): if params.get(k) is None: params.put(k, v) diff --git a/tools/cabana/streams/pandastream.cc b/tools/cabana/streams/pandastream.cc index b2a006b22..e66d72e59 100644 --- a/tools/cabana/streams/pandastream.cc +++ b/tools/cabana/streams/pandastream.cc @@ -72,7 +72,7 @@ void PandaStream::streamThread() { handleEvent(capnp::messageToFlatArray(msg)); - panda->send_heartbeat(false); + panda->send_heartbeat(false, false); } }