Added configuration handling

This commit is contained in:
Thomas Basler 2022-04-10 16:57:24 +02:00
parent 893bd0c0d4
commit 8b7f2a14b6
3 changed files with 96 additions and 0 deletions

22
include/Configuration.h Normal file
View 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
View 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;

View File

@ -1,3 +1,4 @@
#include "Configuration.h"
#include "defaults.h"
#include <Arduino.h>
#include <LittleFS.h>
@ -18,6 +19,26 @@ void setup()
} else {
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()