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:
@@ -1,6 +1,6 @@
|
||||
# Name, Type, SubType, Offset, Size
|
||||
nvs, data, nvs, 0x9000, 0x6000
|
||||
otadata, data, ota, 0xf000, 0x2000
|
||||
nvs, data, nvs, 0x9000, 0x5000
|
||||
otadata, data, ota, 0xe000, 0x2000
|
||||
app0, app, ota_0, 0x10000, 0x300000
|
||||
app1, app, ota_1, 0x310000, 0x300000
|
||||
spiffs, data, spiffs, 0x610000, 0x1F0000
|
||||
|
||||
|
48
firmware/src/config.cpp
Normal file
48
firmware/src/config.cpp
Normal 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();
|
||||
}
|
||||
24
firmware/src/config.h
Normal file
24
firmware/src/config.h
Normal file
@@ -0,0 +1,24 @@
|
||||
// firmware/src/config.h
|
||||
#pragma once
|
||||
#include <Arduino.h>
|
||||
|
||||
struct DeviceConfig {
|
||||
String device_id; // e.g. "dc-0042"
|
||||
String location_id; // e.g. "retailer-123"
|
||||
String hmac_secret; // 32-byte hex string
|
||||
String wifi_ssid;
|
||||
String wifi_pass;
|
||||
uint8_t line_offset; // 0-100, percent of frame height for virtual line
|
||||
};
|
||||
|
||||
// Load all config from NVS. Returns false if device_id/location_id/hmac_secret missing.
|
||||
bool config_load(DeviceConfig& cfg);
|
||||
|
||||
// Save WiFi credentials to NVS (called by provisioning after captive portal).
|
||||
bool config_save_wifi(const String& ssid, const String& pass);
|
||||
|
||||
// Returns true if wifi_ssid is set in NVS.
|
||||
bool config_has_wifi();
|
||||
|
||||
// Erase WiFi credentials only (factory reset — preserves device_id etc).
|
||||
void config_clear_wifi();
|
||||
3
firmware/src/main.cpp
Normal file
3
firmware/src/main.cpp
Normal file
@@ -0,0 +1,3 @@
|
||||
#include <Arduino.h>
|
||||
void setup() {}
|
||||
void loop() {}
|
||||
Reference in New Issue
Block a user