From e03414ce6d96c3acdc6bb56be59c50fb6a1721fc Mon Sep 17 00:00:00 2001 From: Dāvis Mošenkovs Date: Wed, 3 Sep 2025 21:50:13 +0300 Subject: Setting to disable DFU and FS access (#1891) * Expose SystemTask dependency controllers Expose NotificationManager and Settings for use by the feature in next commit. This is a memory efficient way for accessing SystemTask dependencies from controllers that have SystemTask injected as a dependency. Looks like each direct dependency injection uses 4 bytes RAM. As InfiniTime is close to running out of RAM (using 16 more bytes causes build to fail with "ld: region RAM overflowed with stack") it might be helpful to use this approach more. * Add setting to disable DFU and FS access --- src/displayapp/screens/settings/SettingOTA.cpp | 58 ++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 src/displayapp/screens/settings/SettingOTA.cpp (limited to 'src/displayapp/screens/settings/SettingOTA.cpp') diff --git a/src/displayapp/screens/settings/SettingOTA.cpp b/src/displayapp/screens/settings/SettingOTA.cpp new file mode 100644 index 00000000..ad123dec --- /dev/null +++ b/src/displayapp/screens/settings/SettingOTA.cpp @@ -0,0 +1,58 @@ +#include "displayapp/screens/settings/SettingOTA.h" +#include +#include "displayapp/DisplayApp.h" +#include "displayapp/Messages.h" +#include "displayapp/screens/Styles.h" +#include "displayapp/screens/Screen.h" +#include "displayapp/screens/Symbols.h" + +using namespace Pinetime::Applications::Screens; + +namespace { + struct Option { + const char* name; + Pinetime::Controllers::Settings::DfuAndFsMode mode; + }; + + constexpr std::array options = {{ + {"Enabled", Pinetime::Controllers::Settings::DfuAndFsMode::Enabled}, + {"Disabled", Pinetime::Controllers::Settings::DfuAndFsMode::Disabled}, + {"Till reboot", Pinetime::Controllers::Settings::DfuAndFsMode::EnabledTillReboot}, + }}; + + std::array CreateOptionArray() { + std::array optionArray; + for (size_t i = 0; i < CheckboxList::MaxItems; i++) { + if (i >= options.size()) { + optionArray[i].name = ""; + optionArray[i].enabled = false; + } else { + optionArray[i].name = options[i].name; + optionArray[i].enabled = true; + } + } + return optionArray; + }; +} + +SettingOTA::SettingOTA(Pinetime::Applications::DisplayApp* app, Pinetime::Controllers::Settings& settingsController) + : app {app}, + settingsController {settingsController}, + checkboxList( + 0, + 1, + "Firmware & files", + Symbols::shieldAlt, + settingsController.GetDfuAndFsMode() == Pinetime::Controllers::Settings::DfuAndFsMode::Enabled ? 0 + : settingsController.GetDfuAndFsMode() == Pinetime::Controllers::Settings::DfuAndFsMode::EnabledTillReboot ? 2 + : 1, + [&settings = settingsController](uint32_t index) { + settings.SetDfuAndFsMode(options[index].mode); + }, + CreateOptionArray()) { +} + +SettingOTA::~SettingOTA() { + lv_obj_clean(lv_scr_act()); + settingsController.SaveSettings(); +} -- cgit v1.2.3-70-g09d2