Browse Source

moved memory and config management to own wrapper class ConfigManager

master
gituser 1 month ago
parent
commit
fbdf9f2d3d
4 changed files with 130 additions and 37 deletions
  1. 52
    0
      ConfigManager.cpp
  2. 37
    0
      ConfigManager.h
  3. 39
    34
      LEDLamp.ino
  4. 2
    3
      sloeber.ino.cpp

+ 52
- 0
ConfigManager.cpp View File

@@ -0,0 +1,52 @@
/*
* MemoryManager.cpp
*
* Created on: 21.06.2026
* Author: FSmilari
*/

#include "ConfigManager.h"

ConfigManager::ConfigManager() {
memset(&_config, 0, sizeof(Config));
_config.wifiValid = false;
}

ConfigManager::~ConfigManager() {
// TODO Auto-generated destructor stub
}

bool ConfigManager::loadConfig() {
EEPROM.begin(sizeof(Config));
EEPROM.get(0, _config);

if (_config.wifiValid != true) {
memset(&_config, 0, sizeof(Config));
_config.wifiValid = false;
return false;
}

return true;
}

bool ConfigManager::saveConfig(const Config &config) {
_config = config;

EEPROM.begin(sizeof(Config));
EEPROM.put(0, _config);

return EEPROM.commit();
}

void ConfigManager::resetConfig() {
memset(&_config, 0, sizeof(Config));
_config.wifiValid = false;

EEPROM.begin(sizeof(Config));
EEPROM.put(0, _config);
EEPROM.commit();
}

Config& ConfigManager::getConfig() {
return _config;
}

+ 37
- 0
ConfigManager.h View File

@@ -0,0 +1,37 @@
/*
* ConfigManager.h
*
* Created on: 21.06.2026
* Author: FSmilari
*/

#ifndef CONFIGMANAGER_H_
#define CONFIGMANAGER_H_

#include <Arduino.h>
#include <EEPROM.h>

struct Config {
char ssid[32];
char pass[64];
bool wifiValid;
};

class ConfigManager {

public:
ConfigManager();
virtual ~ConfigManager();

bool loadConfig();
bool saveConfig(const Config &config);
void resetConfig();
Config& getConfig();

private:
Config _config;
};


#endif /* CONFIGMANAGER_H_ */


+ 39
- 34
LEDLamp.ino View File

@@ -7,6 +7,7 @@
#include <Adafruit_Neopixel.h>
#include "States.h"
#include "Commands.h"
#include "ConfigManager.h"
#include "HtmlPages.h"
#include "LEDStripManager.h"

@@ -17,39 +18,22 @@ unsigned long connectStart = 0;
const byte DNS_PORT = 53;

// WLAN Config
struct Config {
char ssid[32];
char pass[64];
bool valid;
};
//struct Config {
// char ssid[32];
// char pass[64];
// bool valid;
//};

// AP Daten
const char *ap_ssid = "Wemos_Setup";
const char *ap_pass = "admin123";


ESP8266WebServer webServer(80);
WebSocketsServer webSocket(81);
DNSServer dnsServer;
LEDStripManager ledMngr(LED_COUNT, LED_STRIP_DATA_PIN);
Config config;

// ---------- EEPROM ----------
//TODO: move to onw class
void saveConfig() {
EEPROM.begin(sizeof(Config));
EEPROM.put(0, config);
EEPROM.commit();
}

void loadConfig() {
EEPROM.begin(sizeof(Config));
EEPROM.get(0, config);
ConfigManager configManager;

if (config.valid != true) {
config.valid = false;
}
}

// ---------- CAPTIVE PORTAL PAGE ----------
void handleSetupPage() {
@@ -67,14 +51,26 @@ void handleSTAControlPage() {

// ---------- SAVE ----------
void handleSave() {
// String ssid = webServer.arg("ssid");
// String pass = webServer.arg("pass");
//
// ssid.toCharArray(config.ssid, 32);
// pass.toCharArray(config.pass, 64);
// config.valid = true;
//
// saveConfig();

Config cfg;

String ssid = webServer.arg("ssid");
String pass = webServer.arg("pass");

ssid.toCharArray(config.ssid, 32);
pass.toCharArray(config.pass, 64);
config.valid = true;
ssid.toCharArray(cfg.ssid, sizeof(cfg.ssid));
pass.toCharArray(cfg.pass, sizeof(cfg.pass));

saveConfig();
cfg.wifiValid = true;

configManager.saveConfig(cfg);

webServer.send(200, "text/html", getConnectionSuccessPage());

@@ -178,9 +174,18 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t *payload, size_t length)
}

void resetWifiConfiguration(uint8_t num) {
EEPROM.begin(sizeof(Config));
config.valid = false;
EEPROM.put(0, config);
// EEPROM.begin(sizeof(Config));
// config.valid = false;
// EEPROM.put(0, config);

Config cfg = configManager.getConfig();
String ssid = "";
String pass = "";
ssid.toCharArray(cfg.ssid, sizeof(cfg.ssid));
pass.toCharArray(cfg.pass, sizeof(cfg.pass));
cfg.wifiValid = false;

configManager.saveConfig(cfg);

webSocket.sendTXT(num, "Wifi_Reset_Success");
delay(200);
@@ -195,9 +200,9 @@ void setState(AppState newState) {
}

void handleBoot() {
if (config.valid) {
if (configManager.getConfig().wifiValid) {
WiFi.mode(WIFI_STA);
WiFi.begin(config.ssid, config.pass);
WiFi.begin(configManager.getConfig().ssid, configManager.getConfig().pass);
setState(STATE_CONNECTING);
}
else {
@@ -231,7 +236,7 @@ void handleSTAMode() {

if (WiFi.status() != WL_CONNECTED) {
Serial.println("WLAN verloren");
WiFi.begin(config.ssid, config.pass);
WiFi.begin(configManager.getConfig().ssid, configManager.getConfig().pass);
connectStart = millis();
setState(STATE_CONNECTING);
}
@@ -268,7 +273,7 @@ void setup() {
Serial.begin(115200);
ledMngr.begin();

loadConfig();
configManager.loadConfig();

setState(STATE_BOOT);
connectStart = millis();

+ 2
- 3
sloeber.ino.cpp View File

@@ -2,7 +2,7 @@
//This is a automatic generated file
//Please do not modify this file
//If you touch this file your change will be overwritten during the next build
//This file has been generated on 2026-06-19 21:07:33
//This file has been generated on 2026-06-21 13:25:01

#include "Arduino.h"
#include "Arduino.h"
@@ -14,11 +14,10 @@
#include <Adafruit_Neopixel.h>
#include "States.h"
#include "Commands.h"
#include "ConfigManager.h"
#include "HtmlPages.h"
#include "LEDStripManager.h"

void saveConfig() ;
void loadConfig() ;
void handleSetupPage() ;
void handleSTAControlPage() ;
void handleSave() ;

Loading…
Cancel
Save