diff options
| author | Dāvis Mošenkovs <davikovs@gmail.com> | 2025-09-03 21:50:13 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-09-03 20:50:13 +0200 |
| commit | e03414ce6d96c3acdc6bb56be59c50fb6a1721fc (patch) | |
| tree | fb36f10fc657c821d1bdb4fd4476a1f41f71d179 /src/components/settings | |
| parent | 9afc23cba9bcf938d8c49d6e15e7662ee8e6385d (diff) | |
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
Diffstat (limited to 'src/components/settings')
| -rw-r--r-- | src/components/settings/Settings.h | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/src/components/settings/Settings.h b/src/components/settings/Settings.h index c9615126..093a3ac6 100644 --- a/src/components/settings/Settings.h +++ b/src/components/settings/Settings.h @@ -4,6 +4,7 @@ #include "components/brightness/BrightnessController.h" #include "components/fs/FS.h" #include "displayapp/apps/Apps.h" +#include <nrf_log.h> namespace Pinetime { namespace Controllers { @@ -37,6 +38,7 @@ namespace Pinetime { enum class PTSGaugeStyle : uint8_t { Full, Half, Numeric }; enum class PTSWeather : uint8_t { On, Off }; enum class PrideFlag : uint8_t { Gay, Trans, Bi, Lesbian }; + enum class DfuAndFsMode : uint8_t { Disabled, Enabled, EnabledTillReboot }; struct PineTimeStyle { Colors ColorTime = Colors::Teal; @@ -309,6 +311,29 @@ namespace Pinetime { return bleRadioEnabled; }; + void SetDfuAndFsMode(DfuAndFsMode mode) { + if (mode == GetDfuAndFsMode()) { + return; + } + if (mode == DfuAndFsMode::Enabled || GetDfuAndFsMode() == DfuAndFsMode::Enabled) { + settingsChanged = true; + } + settings.dfuAndFsEnabledOnBoot = (mode == DfuAndFsMode::Enabled); + dfuAndFsEnabledTillReboot = (mode == DfuAndFsMode::EnabledTillReboot); + }; + + DfuAndFsMode GetDfuAndFsMode() { + if (dfuAndFsEnabledTillReboot) { + if (settings.dfuAndFsEnabledOnBoot) { // ensure both variables are in consistent state + settingsChanged = true; + settings.dfuAndFsEnabledOnBoot = false; + NRF_LOG_ERROR("Settings: DfuAndFsMode data corrupted"); + } + return DfuAndFsMode::EnabledTillReboot; + } + return (settings.dfuAndFsEnabledOnBoot ? DfuAndFsMode::Enabled : DfuAndFsMode::Disabled); + }; + private: Pinetime::Controllers::FS& fs; @@ -338,6 +363,8 @@ namespace Pinetime { uint16_t shakeWakeThreshold = 150; Controllers::BrightnessController::Levels brightLevel = Controllers::BrightnessController::Levels::Medium; + + bool dfuAndFsEnabledOnBoot = false; }; SettingsData settings; @@ -350,6 +377,7 @@ namespace Pinetime { * to off (false) on every boot because we always want ble to be enabled on startup */ bool bleRadioEnabled = true; + bool dfuAndFsEnabledTillReboot = false; void LoadSettingsFromFile(); void SaveSettingsToFile(); |
