// firmware/src/config.h #pragma once #include 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();