summaryrefslogtreecommitdiff
path: root/src/components/settings/Settings.h
diff options
context:
space:
mode:
authorJoaquim <joaquim.org@gmail.com>2021-04-04 03:08:51 +0100
committerJoaquim <joaquim.org@gmail.com>2021-04-04 03:08:51 +0100
commit1d3742e14f09316a1d795527713eb8f9742f0ffb (patch)
tree6bc6343538506b68256aa057121e063d22f8ed1a /src/components/settings/Settings.h
parent58a2d000c4d49d96121894d6dd6bb861d7564bea (diff)
Big UI and navigation Rewrite
new navigation add some color to the apps redesign menus new settings menu new quick settings code clean up size reduction by converting navigation images to font and more...
Diffstat (limited to 'src/components/settings/Settings.h')
-rw-r--r--src/components/settings/Settings.h87
1 files changed, 81 insertions, 6 deletions
diff --git a/src/components/settings/Settings.h b/src/components/settings/Settings.h
index fa67f35e..9cbbee62 100644
--- a/src/components/settings/Settings.h
+++ b/src/components/settings/Settings.h
@@ -1,29 +1,104 @@
#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 ) { clockFace = face; };
- uint8_t GetClockFace() { return clockFace; };
+ 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 SetClockType( ClockType clocktype ) { clockType = clocktype; };
- ClockType GetClockType() { return clockType; };
+ 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; };
private:
- uint8_t clockFace = 0;
+
+ Pinetime::Drivers::SpiNorFlash& spiNorFlash;
+ struct SettingsData {
+
+ ClockType clockType = ClockType::H24;
+ Vibration vibrationStatus = Vibration::ON;
+
+ uint8_t clockFace = 0;
+
+ uint32_t stepsGoal = 1000;
+ 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
- ClockType clockType = ClockType::H24;
+ bool FindHeader();
+ void ReadSettingsData();
+ void EraseBlock();
+ void SetHeader( bool state );
+ void SaveSettingsData();
+ void LoadSettingsFromFlash();
+ void SaveSettingsToFlash();
};
}