ref: 0ce98c7ac7ba66acaf504be9bb042796e12f2733
src/components/settings/Settings.h
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 |
#pragma once #include <cstdint> #include "components/datetime/DateTimeController.h" #include "components/brightness/BrightnessController.h" #include "drivers/SpiNorFlash.h" #include "drivers/Cst816s.h" namespace Pinetime { namespace Controllers { class Settings { public: enum class ClockType { H24, H12 }; enum class Vibration { ON, OFF }; enum class WakeUpMode { None, SingleTap, DoubleTap, RaiseWrist }; Settings(Pinetime::Drivers::SpiNorFlash& spiNorFlash); void Init(); void SaveSettings(); void SetClockFace(uint8_t face) { if (face != settings.clockFace) settingsChanged = true; settings.clockFace = face; }; uint8_t GetClockFace() const { return settings.clockFace; }; void SetAppMenu(uint8_t menu) { appMenu = menu; }; uint8_t GetAppMenu() { return appMenu; }; void SetSettingsMenu(uint8_t menu) { settingsMenu = menu; }; uint8_t GetSettingsMenu() const { return settingsMenu; }; void SetClockType(ClockType clocktype) { if (clocktype != settings.clockType) settingsChanged = true; settings.clockType = clocktype; }; ClockType GetClockType() const { return settings.clockType; }; void SetVibrationStatus(Vibration status) { if (status != settings.vibrationStatus) settingsChanged = true; settings.vibrationStatus = status; }; Vibration GetVibrationStatus() const { return settings.vibrationStatus; }; void SetScreenTimeOut(uint32_t timeout) { if (timeout != settings.screenTimeOut) settingsChanged = true; settings.screenTimeOut = timeout; }; uint32_t GetScreenTimeOut() const { return settings.screenTimeOut; }; void setWakeUpMode(WakeUpMode wakeUp) { if (wakeUp != settings.wakeUpMode) settingsChanged = true; settings.wakeUpMode = wakeUp; }; WakeUpMode getWakeUpMode() const { return settings.wakeUpMode; }; void SetBrightness(Controllers::BrightnessController::Levels level) { if (level != settings.brightLevel) settingsChanged = true; settings.brightLevel = level; }; Controllers::BrightnessController::Levels GetBrightness() const { return settings.brightLevel; }; void SetStepsGoal( uint32_t goal ) { if ( goal != settings.stepsGoal ) settingsChanged = true; settings.stepsGoal = goal; }; uint32_t GetStepsGoal() const { return settings.stepsGoal; }; private: Pinetime::Drivers::SpiNorFlash& spiNorFlash; struct SettingsData { ClockType clockType = ClockType::H24; Vibration vibrationStatus = Vibration::ON; uint8_t clockFace = 0; uint32_t stepsGoal = 10000; uint32_t screenTimeOut = 15000; WakeUpMode wakeUpMode = WakeUpMode::None; Controllers::BrightnessController::Levels brightLevel = Controllers::BrightnessController::Levels::Medium; }; SettingsData settings; bool settingsChanged = false; uint8_t appMenu = 0; uint8_t settingsMenu = 0; // There are 10 blocks of reserved flash to save settings // to minimize wear, the recording is done in a rotating way by the 10 blocks uint8_t settingsFlashBlock = 99; // default to indicate it needs to find the active block static constexpr uint32_t settingsBaseAddr = 0x3F6000; // Flash Settings Location static constexpr uint16_t settingsVersion = 0x0100; // Flash Settings Version bool FindHeader(); void ReadSettingsData(); void EraseBlock(); void SetHeader(bool state); void SaveSettingsData(); void LoadSettingsFromFlash(); void SaveSettingsToFlash(); }; } } |