Skip to content

Commit e21a09c

Browse files
committed
Separate FS write from serializeConfig
Break the actual JSON assembly apart from the file writing code. This permits calling it in other contexts, allowing us to pull the live config data even if the filesystem is out of date.
1 parent a0d1a8c commit e21a09c

File tree

4 files changed

+18
-13
lines changed

4 files changed

+18
-13
lines changed

wled00/cfg.cpp

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -671,7 +671,7 @@ void deserializeConfigFromFS() {
671671
// call readFromConfig() with an empty object so that usermods can initialize to defaults prior to saving
672672
JsonObject empty = JsonObject();
673673
UsermodManager::readFromConfig(empty);
674-
serializeConfig();
674+
serializeConfigToFS();
675675
// init Ethernet (in case default type is set at compile time)
676676
#if defined(ARDUINO_ARCH_ESP32) && defined(WLED_USE_ETHERNET)
677677
initEthernet();
@@ -685,10 +685,10 @@ void deserializeConfigFromFS() {
685685
bool needsSave = deserializeConfig(root, true);
686686
releaseJSONBufferLock();
687687

688-
if (needsSave) serializeConfig(); // usermods required new parameters
688+
if (needsSave) serializeConfigToFS(); // usermods required new parameters
689689
}
690690

691-
void serializeConfig() {
691+
void serializeConfigToFS() {
692692
serializeConfigSec();
693693

694694
DEBUG_PRINTLN(F("Writing settings to /cfg.json..."));
@@ -697,6 +697,17 @@ void serializeConfig() {
697697

698698
JsonObject root = pDoc->to<JsonObject>();
699699

700+
serializeConfig(root);
701+
702+
File f = WLED_FS.open(FPSTR(s_cfg_json), "w");
703+
if (f) serializeJson(root, f);
704+
f.close();
705+
releaseJSONBufferLock();
706+
707+
doSerializeConfig = false;
708+
}
709+
710+
void serializeConfig(JsonObject root) {
700711
JsonArray rev = root.createNestedArray("rev");
701712
rev.add(1); //major settings revision
702713
rev.add(0); //minor settings revision
@@ -1111,13 +1122,6 @@ void serializeConfig() {
11111122

11121123
JsonObject usermods_settings = root.createNestedObject("um");
11131124
UsermodManager::addToConfig(usermods_settings);
1114-
1115-
File f = WLED_FS.open(FPSTR(s_cfg_json), "w");
1116-
if (f) serializeJson(root, f);
1117-
f.close();
1118-
releaseJSONBufferLock();
1119-
1120-
doSerializeConfig = false;
11211125
}
11221126

11231127

wled00/fcn_declare.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ void IRAM_ATTR touchButtonISR();
2727
bool deserializeConfig(JsonObject doc, bool fromFS = false);
2828
void deserializeConfigFromFS();
2929
bool deserializeConfigSec();
30-
void serializeConfig();
30+
void serializeConfig(JsonObject doc);
31+
void serializeConfigToFS();
3132
void serializeConfigSec();
3233

3334
template<typename DestType>

wled00/improv.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -272,5 +272,5 @@ void parseWiFiCommand(char* rpcData) {
272272
improvActive = 2;
273273

274274
forceReconnect = true;
275-
serializeConfig();
275+
serializeConfigToFS();
276276
}

wled00/wled.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ void WLED::loop()
200200
loadLedmap = -1;
201201
}
202202
yield();
203-
if (doSerializeConfig) serializeConfig();
203+
if (doSerializeConfig) serializeConfigToFS();
204204

205205
yield();
206206
handleWs();

0 commit comments

Comments
 (0)