// firmware/src/config.h #pragma once #include #include "cv.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; }; // 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(); // Load CV tuning from NVS. Returns true only if all keys present (cfg_version sentinel). // If any key missing, tuning is NOT modified (caller keeps its defaults). bool config_load_tuning(CVTuning& tuning); // Save CV tuning to NVS atomically. Returns true if all writes succeeded. bool config_save_tuning(const CVTuning& tuning);