From 12db602a6264d7f5042778387211cd48bbd0b842 Mon Sep 17 00:00:00 2001 From: Tyeth Gundry Date: Mon, 22 Apr 2024 16:20:14 +0100 Subject: [PATCH 1/3] Regenerate displayconfig.json if erroneous --- src/provisioning/tinyusb/Wippersnapper_FS.cpp | 18 +++++++++++++++++- src/provisioning/tinyusb/Wippersnapper_FS.h | 2 +- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/provisioning/tinyusb/Wippersnapper_FS.cpp b/src/provisioning/tinyusb/Wippersnapper_FS.cpp index 83e4453b5..e76ada46a 100644 --- a/src/provisioning/tinyusb/Wippersnapper_FS.cpp +++ b/src/provisioning/tinyusb/Wippersnapper_FS.cpp @@ -543,7 +543,16 @@ void Wippersnapper_FS::createDisplayConfig() { delay(2500); // give FS some time to write the file } -void Wippersnapper_FS::parseDisplayConfig(displayConfig &dispCfg) { +bool Wippersnapper_FS::parseDisplayConfig(displayConfig &dispCfg, bool forceRecreate) { + if (forceRecreate) { + if (wipperFatFs.exists("/display_config.json")) { + wipperFatFs.remove("/display_config.json"); + } +#ifdef ARDUINO_FUNHOUSE_ESP32S2 + createDisplayConfig(); +#endif + } + // Check if display_config.json file exists, if not, generate it if (!wipperFatFs.exists("/display_config.json")) { WS_DEBUG_PRINTLN("Could not find display_config.json, generating..."); @@ -556,6 +565,9 @@ void Wippersnapper_FS::parseDisplayConfig(displayConfig &dispCfg) { // Attempt to open file for JSON parsing File32 file = wipperFatFs.open("/display_config.json", FILE_READ); if (!file) { + if (!forceRecreate && parseDisplayConfig(dispCfg, true)) { + return true; + } fsHalt("FATAL ERROR: Unable to open display_config.json for parsing"); } @@ -563,6 +575,9 @@ void Wippersnapper_FS::parseDisplayConfig(displayConfig &dispCfg) { JsonDocument doc; DeserializationError error = deserializeJson(doc, file); if (error) { + if (!forceRecreate && parseDisplayConfig(dispCfg, true)) { + return true; + } fsHalt(String("FATAL ERROR: Unable to parse display_config.json - " "deserializeJson() failed with code") + error.c_str()); @@ -571,6 +586,7 @@ void Wippersnapper_FS::parseDisplayConfig(displayConfig &dispCfg) { file.close(); // Extract a displayConfig struct from the JSON document dispCfg = doc.as(); + return true; } #endif // ARDUINO_FUNHOUSE_ESP32S2 diff --git a/src/provisioning/tinyusb/Wippersnapper_FS.h b/src/provisioning/tinyusb/Wippersnapper_FS.h index 53ce1cc89..011fba472 100644 --- a/src/provisioning/tinyusb/Wippersnapper_FS.h +++ b/src/provisioning/tinyusb/Wippersnapper_FS.h @@ -59,7 +59,7 @@ class Wippersnapper_FS { void parseSecrets(); #ifdef ARDUINO_FUNHOUSE_ESP32S2 - void parseDisplayConfig(displayConfig &displayFile); + bool parseDisplayConfig(displayConfig &displayFile, bool forceRecreate = false); void createDisplayConfig(); #endif private: From db31909eb0aba895d510e32a4a4632b4da0d3c2f Mon Sep 17 00:00:00 2001 From: tyeth Date: Tue, 8 Jul 2025 00:22:41 +0100 Subject: [PATCH 2/3] PR feedback, relocate retry out of parseDisplayConfig --- src/Wippersnapper.cpp | 4 +++- src/provisioning/tinyusb/Wippersnapper_FS.cpp | 12 ++++++------ src/provisioning/tinyusb/Wippersnapper_FS.h | 2 +- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/Wippersnapper.cpp b/src/Wippersnapper.cpp index 4d7beb15e..0a948feaa 100644 --- a/src/Wippersnapper.cpp +++ b/src/Wippersnapper.cpp @@ -108,7 +108,9 @@ void Wippersnapper::provision() { #ifdef USE_DISPLAY // Initialize the display displayConfig config; - WS._fileSystem->parseDisplayConfig(config); + if (!WS._fileSystem->parseDisplayConfig(config)) { + WS._fileSystem->parseDisplayConfig(config, true); + } WS._display = new ws_display_driver(config); // Begin display if (!WS._display->begin()) { diff --git a/src/provisioning/tinyusb/Wippersnapper_FS.cpp b/src/provisioning/tinyusb/Wippersnapper_FS.cpp index e76ada46a..815cb5b43 100644 --- a/src/provisioning/tinyusb/Wippersnapper_FS.cpp +++ b/src/provisioning/tinyusb/Wippersnapper_FS.cpp @@ -543,8 +543,8 @@ void Wippersnapper_FS::createDisplayConfig() { delay(2500); // give FS some time to write the file } -bool Wippersnapper_FS::parseDisplayConfig(displayConfig &dispCfg, bool forceRecreate) { - if (forceRecreate) { +bool Wippersnapper_FS::parseDisplayConfig(displayConfig &dispCfg, bool force_recreate) { + if (force_recreate) { if (wipperFatFs.exists("/display_config.json")) { wipperFatFs.remove("/display_config.json"); } @@ -565,8 +565,8 @@ bool Wippersnapper_FS::parseDisplayConfig(displayConfig &dispCfg, bool forceRecr // Attempt to open file for JSON parsing File32 file = wipperFatFs.open("/display_config.json", FILE_READ); if (!file) { - if (!forceRecreate && parseDisplayConfig(dispCfg, true)) { - return true; + if (!force_recreate) { + return false; } fsHalt("FATAL ERROR: Unable to open display_config.json for parsing"); } @@ -575,8 +575,8 @@ bool Wippersnapper_FS::parseDisplayConfig(displayConfig &dispCfg, bool forceRecr JsonDocument doc; DeserializationError error = deserializeJson(doc, file); if (error) { - if (!forceRecreate && parseDisplayConfig(dispCfg, true)) { - return true; + if (!force_recreate) { + return false; } fsHalt(String("FATAL ERROR: Unable to parse display_config.json - " "deserializeJson() failed with code") + diff --git a/src/provisioning/tinyusb/Wippersnapper_FS.h b/src/provisioning/tinyusb/Wippersnapper_FS.h index 011fba472..34263d009 100644 --- a/src/provisioning/tinyusb/Wippersnapper_FS.h +++ b/src/provisioning/tinyusb/Wippersnapper_FS.h @@ -59,7 +59,7 @@ class Wippersnapper_FS { void parseSecrets(); #ifdef ARDUINO_FUNHOUSE_ESP32S2 - bool parseDisplayConfig(displayConfig &displayFile, bool forceRecreate = false); + bool parseDisplayConfig(displayConfig &displayFile, bool force_recreate = false); void createDisplayConfig(); #endif private: From 0bdbc05092472dda8e21c2bf30ddf29aba238d58 Mon Sep 17 00:00:00 2001 From: tyeth Date: Tue, 8 Jul 2025 14:35:08 +0100 Subject: [PATCH 3/3] Add BSP comment for funhouse --- platformio.ini | 2 ++ 1 file changed, 2 insertions(+) diff --git a/platformio.ini b/platformio.ini index bddb00c06..87a0eba06 100644 --- a/platformio.ini +++ b/platformio.ini @@ -100,6 +100,8 @@ lib_deps = ; Common build environment for ESP32 platform [common:esp32] platform = https://github.com/pioarduino/platform-espressif32/releases/download/53.03.13/platform-espressif32.zip +;;Funhouse uses 3.0.7 of arduino-esp32 for now: +; platform = https://github.com/pioarduino/platform-espressif32/releases/download/51.03.07/platform-espressif32.zip ; This is needed for occasional new features and bug fixes ; platform = https://github.com/pioarduino/platform-espressif32#develop lib_ignore = WiFiNINA, WiFi101, OneWire