Added configuration handling
This commit is contained in:
parent
893bd0c0d4
commit
8b7f2a14b6
22
include/Configuration.h
Normal file
22
include/Configuration.h
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <Arduino.h>
|
||||||
|
|
||||||
|
#define CONFIG_FILENAME "/config.bin"
|
||||||
|
#define CONFIG_VERSION 0x00010000 // 0.1.0
|
||||||
|
|
||||||
|
struct CONFIG_T {
|
||||||
|
uint32_t Cfg_Version;
|
||||||
|
uint Cfg_SaveCount;
|
||||||
|
};
|
||||||
|
|
||||||
|
class ConfigurationClass {
|
||||||
|
public:
|
||||||
|
void init();
|
||||||
|
bool read();
|
||||||
|
bool write();
|
||||||
|
void migrate();
|
||||||
|
CONFIG_T& get();
|
||||||
|
};
|
||||||
|
|
||||||
|
extern ConfigurationClass Configuration;
|
||||||
53
src/Configuration.cpp
Normal file
53
src/Configuration.cpp
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
#include "Configuration.h"
|
||||||
|
#include <LittleFS.h>
|
||||||
|
|
||||||
|
CONFIG_T config;
|
||||||
|
|
||||||
|
void ConfigurationClass::init()
|
||||||
|
{
|
||||||
|
memset(&config, 0x0, sizeof(config));
|
||||||
|
config.Cfg_SaveCount = 0;
|
||||||
|
config.Cfg_Version = CONFIG_VERSION;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ConfigurationClass::write()
|
||||||
|
{
|
||||||
|
File f = LITTLEFS.open(CONFIG_FILENAME, "w");
|
||||||
|
if (!f) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
config.Cfg_SaveCount++;
|
||||||
|
uint8_t* bytes = (uint8_t*)&config;
|
||||||
|
for (unsigned int i = 0; i < sizeof(CONFIG_T); i++) {
|
||||||
|
f.write(bytes[i]);
|
||||||
|
}
|
||||||
|
f.close();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ConfigurationClass::read()
|
||||||
|
{
|
||||||
|
File f = LITTLEFS.open(CONFIG_FILENAME, "r");
|
||||||
|
if (!f) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
uint8_t* bytes = (uint8_t*)&config;
|
||||||
|
for (unsigned int i = 0; i < sizeof(CONFIG_T); i++) {
|
||||||
|
bytes[i] = f.read();
|
||||||
|
}
|
||||||
|
f.close();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ConfigurationClass::migrate()
|
||||||
|
{
|
||||||
|
config.Cfg_Version = CONFIG_VERSION;
|
||||||
|
write();
|
||||||
|
}
|
||||||
|
|
||||||
|
CONFIG_T& ConfigurationClass::get()
|
||||||
|
{
|
||||||
|
return config;
|
||||||
|
}
|
||||||
|
|
||||||
|
ConfigurationClass Configuration;
|
||||||
21
src/main.cpp
21
src/main.cpp
@ -1,3 +1,4 @@
|
|||||||
|
#include "Configuration.h"
|
||||||
#include "defaults.h"
|
#include "defaults.h"
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
#include <LittleFS.h>
|
#include <LittleFS.h>
|
||||||
@ -18,6 +19,26 @@ void setup()
|
|||||||
} else {
|
} else {
|
||||||
Serial.println(F("done"));
|
Serial.println(F("done"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Read configuration values
|
||||||
|
Serial.print(F("Reading configuration... "));
|
||||||
|
if (!Configuration.read()) {
|
||||||
|
Serial.print(F("initializing... "));
|
||||||
|
Configuration.init();
|
||||||
|
if (Configuration.write()) {
|
||||||
|
Serial.print(F("written... "));
|
||||||
|
} else {
|
||||||
|
Serial.print(F("failed... "));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (Configuration.get().Cfg_Version != CONFIG_VERSION) {
|
||||||
|
Serial.print(F("migrated... "));
|
||||||
|
Configuration.migrate();
|
||||||
|
}
|
||||||
|
Serial.println(F("done"));
|
||||||
|
|
||||||
|
// Initialize WiFi
|
||||||
|
Serial.print(F("Initialize WiFi... "));
|
||||||
}
|
}
|
||||||
|
|
||||||
void loop()
|
void loop()
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user