diff --git a/common/params.cc b/common/params.cc index a3538375c..db4b2598b 100644 --- a/common/params.cc +++ b/common/params.cc @@ -235,6 +235,7 @@ std::unordered_map keys = { {"dp_device_dm_unavailable", PERSISTENT}, {"dp_toyota_enhanced_bsm", PERSISTENT}, {"dp_toyota_auto_brake_hold", PERSISTENT}, + {"dp_device_offroad", CLEAR_ON_MANAGER_START}, }; } // namespace diff --git a/selfdrive/ui/qt/offroad/settings.h b/selfdrive/ui/qt/offroad/settings.h index 35a044bdd..8d3bcc4f4 100644 --- a/selfdrive/ui/qt/offroad/settings.h +++ b/selfdrive/ui/qt/offroad/settings.h @@ -95,6 +95,8 @@ private: ButtonControl *installBtn; ButtonControl *downloadBtn; ButtonControl *targetBranchBtn; + // dp + ButtonControl *onOffBtn; Params params; ParamWatcher *fs_watch; diff --git a/selfdrive/ui/qt/offroad/software_settings.cc b/selfdrive/ui/qt/offroad/software_settings.cc index c8245205c..549ae529b 100644 --- a/selfdrive/ui/qt/offroad/software_settings.cc +++ b/selfdrive/ui/qt/offroad/software_settings.cc @@ -29,6 +29,16 @@ SoftwarePanel::SoftwarePanel(QWidget* parent) : ListWidget(parent) { versionLbl = new LabelControl(tr("Current Version"), ""); addItem(versionLbl); + // dp on/off btn + onOffBtn = new ButtonControl(tr("Onroad/Offroad Mode"), tr("Go Offroad")); + connect(onOffBtn, &ButtonControl::clicked, [&]() { + if (ConfirmationDialog::confirm(tr("Are you sure you want to switch driving mode?"), tr("CONFIRM"), this)) { + bool val = params.getBool("dp_device_offroad"); + params.putBool("dp_device_offroad", !val); + } + }); + addItem(onOffBtn); + // download update btn downloadBtn = new ButtonControl(tr("Download"), tr("CHECK")); connect(downloadBtn, &ButtonControl::clicked, [=]() { @@ -109,11 +119,19 @@ void SoftwarePanel::updateLabels() { fs_watch->addParam("UpdateFailedCount"); fs_watch->addParam("UpdaterState"); fs_watch->addParam("UpdateAvailable"); + fs_watch->addParam("dp_device_offroad"); if (!isVisible()) { return; } + // dp on/off btn + if (params.getBool("dp_device_offroad")) { + onOffBtn->setText(tr("Go Onroad")); + } else { + onOffBtn->setText(tr("Go Offroad")); + } + // updater only runs offroad onroadLbl->setVisible(is_onroad); downloadBtn->setVisible(!is_onroad); diff --git a/system/hardware/hardwared.py b/system/hardware/hardwared.py index 7ee664031..6976ba7ce 100755 --- a/system/hardware/hardwared.py +++ b/system/hardware/hardwared.py @@ -338,7 +338,7 @@ def hardware_thread(end_event, hw_queue) -> None: pass # Handle offroad/onroad transition - should_start = all(onroad_conditions.values()) + should_start = not params.get_bool("dp_device_offroad") and all(onroad_conditions.values()) if started_ts is None: should_start = should_start and all(startup_conditions.values())