Skip to content

Commit a89218c

Browse files
authored
Merge pull request #575 from adafruit/funhouse-display-config-recreate
Regenerate displayconfig.json if erroneous
2 parents 13d4ca9 + 0bdbc05 commit a89218c

File tree

4 files changed

+23
-3
lines changed

4 files changed

+23
-3
lines changed

platformio.ini

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,8 @@ lib_deps =
100100
; Common build environment for ESP32 platform
101101
[common:esp32]
102102
platform = https://github.com/pioarduino/platform-espressif32/releases/download/53.03.13/platform-espressif32.zip
103+
;;Funhouse uses 3.0.7 of arduino-esp32 for now:
104+
; platform = https://github.com/pioarduino/platform-espressif32/releases/download/51.03.07/platform-espressif32.zip
103105
; This is needed for occasional new features and bug fixes
104106
; platform = https://github.com/pioarduino/platform-espressif32#develop
105107
lib_ignore = WiFiNINA, WiFi101, OneWire

src/Wippersnapper.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,9 @@ void Wippersnapper::provision() {
108108
#ifdef USE_DISPLAY
109109
// Initialize the display
110110
displayConfig config;
111-
WS._fileSystem->parseDisplayConfig(config);
111+
if (!WS._fileSystem->parseDisplayConfig(config)) {
112+
WS._fileSystem->parseDisplayConfig(config, true);
113+
}
112114
WS._display = new ws_display_driver(config);
113115
// Begin display
114116
if (!WS._display->begin()) {

src/provisioning/tinyusb/Wippersnapper_FS.cpp

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -543,7 +543,16 @@ void Wippersnapper_FS::createDisplayConfig() {
543543
delay(2500); // give FS some time to write the file
544544
}
545545

546-
void Wippersnapper_FS::parseDisplayConfig(displayConfig &dispCfg) {
546+
bool Wippersnapper_FS::parseDisplayConfig(displayConfig &dispCfg, bool force_recreate) {
547+
if (force_recreate) {
548+
if (wipperFatFs.exists("/display_config.json")) {
549+
wipperFatFs.remove("/display_config.json");
550+
}
551+
#ifdef ARDUINO_FUNHOUSE_ESP32S2
552+
createDisplayConfig();
553+
#endif
554+
}
555+
547556
// Check if display_config.json file exists, if not, generate it
548557
if (!wipperFatFs.exists("/display_config.json")) {
549558
WS_DEBUG_PRINTLN("Could not find display_config.json, generating...");
@@ -556,13 +565,19 @@ void Wippersnapper_FS::parseDisplayConfig(displayConfig &dispCfg) {
556565
// Attempt to open file for JSON parsing
557566
File32 file = wipperFatFs.open("/display_config.json", FILE_READ);
558567
if (!file) {
568+
if (!force_recreate) {
569+
return false;
570+
}
559571
fsHalt("FATAL ERROR: Unable to open display_config.json for parsing");
560572
}
561573

562574
// Attempt to deserialize the file's json document
563575
JsonDocument doc;
564576
DeserializationError error = deserializeJson(doc, file);
565577
if (error) {
578+
if (!force_recreate) {
579+
return false;
580+
}
566581
fsHalt(String("FATAL ERROR: Unable to parse display_config.json - "
567582
"deserializeJson() failed with code") +
568583
error.c_str());
@@ -571,6 +586,7 @@ void Wippersnapper_FS::parseDisplayConfig(displayConfig &dispCfg) {
571586
file.close();
572587
// Extract a displayConfig struct from the JSON document
573588
dispCfg = doc.as<displayConfig>();
589+
return true;
574590
}
575591
#endif // ARDUINO_FUNHOUSE_ESP32S2
576592

src/provisioning/tinyusb/Wippersnapper_FS.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ class Wippersnapper_FS {
5959
void parseSecrets();
6060

6161
#ifdef ARDUINO_FUNHOUSE_ESP32S2
62-
void parseDisplayConfig(displayConfig &displayFile);
62+
bool parseDisplayConfig(displayConfig &displayFile, bool force_recreate = false);
6363
void createDisplayConfig();
6464
#endif
6565
private:

0 commit comments

Comments
 (0)