Public Access
40 lines
1010 B
C++
40 lines
1010 B
C++
#include "system/settings_store.h"
|
|||
|
|
|
||
|
|
#include <Preferences.h>
|
||
|
|
|
||
|
|
static const char *NAMESPACE = "flipdot";
|
||
|
|
static const char *KEY = "settings";
|
||
|
|
// Increase when the Settings struct changes; old records are then ignored (defaults)
|
||
|
|
static const uint16_t VERSION = 1;
|
||
|
|
|
||
|
|
struct StoredSettings
|
||
|
|
{
|
||
|
|
uint16_t version;
|
||
|
|
uint16_t size;
|
||
|
|
Settings settings;
|
||
|
|
};
|
||
|
|
|
||
|
|
void loadSettings(Settings &settings)
|
||
|
|
{
|
||
|
|
settings = Settings();
|
||
|
|
StoredSettings stored;
|
||
|
|
Preferences prefs;
|
||
|
|
prefs.begin(NAMESPACE, true);
|
||
|
|
size_t read = prefs.getBytes(KEY, &stored, sizeof(stored));
|
||
|
|
prefs.end();
|
||
|
|
if (read == sizeof(stored) && stored.version == VERSION && stored.size == sizeof(Settings) &&
|
||
|
|
validateSettings(stored.settings) == nullptr)
|
||
|
|
settings = stored.settings;
|
||
|
|
}
|
||
|
|
|
||
|
|
void saveSettings(const Settings &settings)
|
||
|
|
{
|
||
|
|
StoredSettings stored;
|
||
|
|
stored.version = VERSION;
|
||
|
|
stored.size = sizeof(Settings);
|
||
|
|
stored.settings = settings;
|
||
|
|
Preferences prefs;
|
||
|
|
prefs.begin(NAMESPACE, false);
|
||
|
|
prefs.putBytes(KEY, &stored, sizeof(stored));
|
||
|
|
prefs.end();
|
||
|
|
}
|