feat: config module — NVS read/write via Preferences

Add config.h/config.cpp for DeviceConfig NVS persistence using Arduino
Preferences library. Add minimal main.cpp stub. Fix partition table
overlap (nvs 0x6000→0x5000, otadata 0xf000→0xe000) so firmware builds.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-13 14:02:28 -07:00
parent f4d9e1b2a5
commit d5afd0bd87
4 changed files with 77 additions and 2 deletions

48
firmware/src/config.cpp Normal file
View File

@@ -0,0 +1,48 @@
// firmware/src/config.cpp
#include "config.h"
#include <Preferences.h>
static const char* NS = "doorcounter";
bool config_load(DeviceConfig& cfg) {
Preferences prefs;
prefs.begin(NS, true); // read-only
cfg.device_id = prefs.getString("device_id", "");
cfg.location_id = prefs.getString("location_id", "");
cfg.hmac_secret = prefs.getString("hmac_secret", "");
cfg.wifi_ssid = prefs.getString("wifi_ssid", "");
cfg.wifi_pass = prefs.getString("wifi_pass", "");
cfg.line_offset = (uint8_t)prefs.getUInt("line_offset", 50);
prefs.end();
return !cfg.device_id.isEmpty() &&
!cfg.location_id.isEmpty() &&
!cfg.hmac_secret.isEmpty();
}
bool config_save_wifi(const String& ssid, const String& pass) {
Preferences prefs;
prefs.begin(NS, false);
bool ok = prefs.putString("wifi_ssid", ssid) &&
prefs.putString("wifi_pass", pass);
prefs.end();
return ok;
}
bool config_has_wifi() {
Preferences prefs;
prefs.begin(NS, true);
String ssid = prefs.getString("wifi_ssid", "");
prefs.end();
return !ssid.isEmpty();
}
void config_clear_wifi() {
Preferences prefs;
prefs.begin(NS, false);
prefs.remove("wifi_ssid");
prefs.remove("wifi_pass");
prefs.end();
}