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 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 83e4453b5..815cb5b43 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 force_recreate) { + if (force_recreate) { + 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 (!force_recreate) { + return false; + } 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 (!force_recreate) { + return false; + } 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..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 - void parseDisplayConfig(displayConfig &displayFile); + bool parseDisplayConfig(displayConfig &displayFile, bool force_recreate = false); void createDisplayConfig(); #endif private: