diff --git a/wled00/cfg.cpp b/wled00/cfg.cpp index 478629c73..767bd8f29 100644 --- a/wled00/cfg.cpp +++ b/wled00/cfg.cpp @@ -639,16 +639,16 @@ bool deserializeConfig(JsonObject doc, bool fromFS) { static const char s_cfg_json[] PROGMEM = "/cfg.json"; -void deserializeConfigFromFS() { - bool success = deserializeConfigSec(); +bool deserializeConfigFromFS() { + [[maybe_unused]] bool success = deserializeConfigSec(); #ifdef WLED_ADD_EEPROM_SUPPORT if (!success) { //if file does not exist, try reading from EEPROM deEEPSettings(); - return; + return true; } #endif - if (!requestJSONBufferLock(1)) return; + if (!requestJSONBufferLock(1)) return false; DEBUG_PRINTLN(F("Reading settings from /cfg.json...")); @@ -658,17 +658,11 @@ void deserializeConfigFromFS() { #ifdef WLED_ADD_EEPROM_SUPPORT deEEPSettings(); #endif - - // save default values to /cfg.json - // call readFromConfig() with an empty object so that usermods can initialize to defaults prior to saving - JsonObject empty = JsonObject(); - UsermodManager::readFromConfig(empty); - serializeConfig(); // init Ethernet (in case default type is set at compile time) #ifdef WLED_USE_ETHERNET WLED::instance().initEthernet(); #endif - return; + return true; // config does not exist (we will need to save it once strip is initialised) } // NOTE: This routine deserializes *and* applies the configuration @@ -677,7 +671,7 @@ void deserializeConfigFromFS() { bool needsSave = deserializeConfig(root, true); releaseJSONBufferLock(); - if (needsSave) serializeConfig(); // usermods required new parameters + return needsSave; } void serializeConfig() { diff --git a/wled00/fcn_declare.h b/wled00/fcn_declare.h index a4f19af45..086c107db 100644 --- a/wled00/fcn_declare.h +++ b/wled00/fcn_declare.h @@ -25,7 +25,7 @@ void IRAM_ATTR touchButtonISR(); //cfg.cpp bool deserializeConfig(JsonObject doc, bool fromFS = false); -void deserializeConfigFromFS(); +bool deserializeConfigFromFS(); bool deserializeConfigSec(); void serializeConfig(); void serializeConfigSec(); diff --git a/wled00/wled.cpp b/wled00/wled.cpp index c5f3387e4..5f4f63164 100644 --- a/wled00/wled.cpp +++ b/wled00/wled.cpp @@ -419,7 +419,7 @@ void WLED::setup() multiWiFi.push_back(WiFiConfig(CLIENT_SSID,CLIENT_PASS)); // initialise vector with default WiFi DEBUG_PRINTLN(F("Reading config")); - deserializeConfigFromFS(); + bool needsCfgSave = deserializeConfigFromFS(); DEBUG_PRINTF_P(PSTR("heap %u\n"), ESP.getFreeHeap()); #if defined(STATUSLED) && STATUSLED>=0 @@ -439,6 +439,8 @@ void WLED::setup() UsermodManager::setup(); DEBUG_PRINTF_P(PSTR("heap %u\n"), ESP.getFreeHeap()); + if (needsCfgSave) serializeConfigToFS(); // usermods required new parameters; need to wait for strip to be initialised #4752 + if (strcmp(multiWiFi[0].clientSSID, DEFAULT_CLIENT_SSID) == 0) showWelcomePage = true; WiFi.persistent(false);