diff --git a/selfdrive/frogpilot/controls/lib/frogpilot_functions.py b/selfdrive/frogpilot/controls/lib/frogpilot_functions.py index f3da3ce..cc8a913 100644 --- a/selfdrive/frogpilot/controls/lib/frogpilot_functions.py +++ b/selfdrive/frogpilot/controls/lib/frogpilot_functions.py @@ -173,6 +173,11 @@ class FrogPilotFunctions: @classmethod def setup_frogpilot(cls): + remount_persist = ['sudo', 'mount', '-o', 'remount,rw', '/persist'] + cls.run_cmd(remount_persist, "Successfully remounted /persist as read-write.", "Failed to remount /persist.") + + os.makedirs("/persist/params", exist_ok=True) + frogpilot_boot_logo = f'{BASEDIR}/selfdrive/frogpilot/assets/other_images/frogpilot_boot_logo.png' boot_logo_location = '/usr/comma/bg.jpg' boot_logo_save_location = f'{BASEDIR}/selfdrive/frogpilot/assets/other_images/original_bg.jpg' diff --git a/selfdrive/manager/manager.py b/selfdrive/manager/manager.py index d82b1d8..a235ea2 100644 --- a/selfdrive/manager/manager.py +++ b/selfdrive/manager/manager.py @@ -55,6 +55,7 @@ def manager_init(frogpilot_functions) -> None: save_bootlog() params = Params() + params_storage = Params("/persist/params") params.clear_all(ParamKeyType.CLEAR_ON_MANAGER_START) params.clear_all(ParamKeyType.CLEAR_ON_ONROAD_TRANSITION) params.clear_all(ParamKeyType.CLEAR_ON_OFFROAD_TRANSITION) @@ -313,8 +314,15 @@ def manager_init(frogpilot_functions) -> None: # set unset params for k, v in default_params: - if params.get(k) is None: - params.put(k, v) + if params.get(k) is None or params.get_bool("DoToggleReset"): + if params_storage.get(k) is None: + params.put(k, v) + else: + params.put(k, params_storage.get(k)) + else: + params_storage.put(k, params.get(k)) + + params.put_bool("DoToggleReset", False) # Create folders needed for msgq try: diff --git a/selfdrive/ui/qt/offroad/settings.cc b/selfdrive/ui/qt/offroad/settings.cc index ed5f0df..76c8ea7 100644 --- a/selfdrive/ui/qt/offroad/settings.cc +++ b/selfdrive/ui/qt/offroad/settings.cc @@ -470,6 +470,23 @@ DevicePanel::DevicePanel(SettingsWindow *parent) : ListWidget(parent) { }); addItem(deleteDrivingDataBtn); + // Delete long term toggle storage button + auto resetTogglesBtn = new ButtonControl(tr("Reset Toggles To Default"), tr("RESET"), tr("Reset your toggle settings back to their default settings.")); + connect(resetTogglesBtn, &ButtonControl::clicked, [=]() { + if (!ConfirmationDialog::confirm(tr("Are you sure you want to completely reset all of your toggle settings?"), tr("Reset"), this)) return; + std::thread([&] { + resetTogglesBtn->setValue(tr("Resetting toggles...")); + std::system("rm -rf /persist/params"); + params.putBool("DoToggleReset", true); + resetTogglesBtn->setValue(tr("Reset!")); + std::this_thread::sleep_for(std::chrono::seconds(2)); + resetTogglesBtn->setValue(tr("Rebooting...")); + std::this_thread::sleep_for(std::chrono::seconds(3)); + Hardware::reboot(); + }).detach(); + }); + addItem(resetTogglesBtn); + // Panda flashing button auto flashPandaBtn = new ButtonControl(tr("Flash Panda"), tr("FLASH"), tr("Use this button to troubleshoot and update the Panda device's firmware.")); connect(flashPandaBtn, &ButtonControl::clicked, [=]() {