diff --git a/ESP32_AP-Flasher/data/fonts/GillSC16.vlw b/ESP32_AP-Flasher/data/fonts/GillSC16.vlw deleted file mode 100644 index 04ebc30c..00000000 Binary files a/ESP32_AP-Flasher/data/fonts/GillSC16.vlw and /dev/null differ diff --git a/ESP32_AP-Flasher/data/fonts/GillSC20.vlw b/ESP32_AP-Flasher/data/fonts/GillSC20.vlw deleted file mode 100644 index 80d75f5e..00000000 Binary files a/ESP32_AP-Flasher/data/fonts/GillSC20.vlw and /dev/null differ diff --git a/ESP32_AP-Flasher/data/fonts/bahnschrift20.vlw b/ESP32_AP-Flasher/data/fonts/bahnschrift20.vlw index 8a8ea9df..b6630b64 100644 Binary files a/ESP32_AP-Flasher/data/fonts/bahnschrift20.vlw and b/ESP32_AP-Flasher/data/fonts/bahnschrift20.vlw differ diff --git a/ESP32_AP-Flasher/data/fonts/bahnschrift30.vlw b/ESP32_AP-Flasher/data/fonts/bahnschrift30.vlw index 9c3ee829..fcb5a076 100644 Binary files a/ESP32_AP-Flasher/data/fonts/bahnschrift30.vlw and b/ESP32_AP-Flasher/data/fonts/bahnschrift30.vlw differ diff --git a/ESP32_AP-Flasher/data/fonts/bahnschrift70.vlw b/ESP32_AP-Flasher/data/fonts/bahnschrift70.vlw index 3c516de3..d083e07c 100644 Binary files a/ESP32_AP-Flasher/data/fonts/bahnschrift70.vlw and b/ESP32_AP-Flasher/data/fonts/bahnschrift70.vlw differ diff --git a/ESP32_AP-Flasher/data/fonts/calibrib100.vlw b/ESP32_AP-Flasher/data/fonts/calibrib100.vlw new file mode 100644 index 00000000..e4c2ce70 Binary files /dev/null and b/ESP32_AP-Flasher/data/fonts/calibrib100.vlw differ diff --git a/ESP32_AP-Flasher/data/fonts/calibrib120.vlw b/ESP32_AP-Flasher/data/fonts/calibrib120.vlw new file mode 100644 index 00000000..5590633f Binary files /dev/null and b/ESP32_AP-Flasher/data/fonts/calibrib120.vlw differ diff --git a/ESP32_AP-Flasher/data/fonts/calibrib150.vlw b/ESP32_AP-Flasher/data/fonts/calibrib150.vlw new file mode 100644 index 00000000..1539e7ca Binary files /dev/null and b/ESP32_AP-Flasher/data/fonts/calibrib150.vlw differ diff --git a/ESP32_AP-Flasher/data/fonts/calibrib30.vlw b/ESP32_AP-Flasher/data/fonts/calibrib30.vlw index 6c813489..87c41c69 100644 Binary files a/ESP32_AP-Flasher/data/fonts/calibrib30.vlw and b/ESP32_AP-Flasher/data/fonts/calibrib30.vlw differ diff --git a/ESP32_AP-Flasher/data/fonts/calibrib50.vlw b/ESP32_AP-Flasher/data/fonts/calibrib50.vlw index b2b327fa..a0db18ff 100644 Binary files a/ESP32_AP-Flasher/data/fonts/calibrib50.vlw and b/ESP32_AP-Flasher/data/fonts/calibrib50.vlw differ diff --git a/ESP32_AP-Flasher/data/fonts/calibrib60.vlw b/ESP32_AP-Flasher/data/fonts/calibrib60.vlw new file mode 100644 index 00000000..04f6e3b1 Binary files /dev/null and b/ESP32_AP-Flasher/data/fonts/calibrib60.vlw differ diff --git a/ESP32_AP-Flasher/data/fonts/calibrib62.vlw b/ESP32_AP-Flasher/data/fonts/calibrib62.vlw deleted file mode 100644 index fb235b10..00000000 Binary files a/ESP32_AP-Flasher/data/fonts/calibrib62.vlw and /dev/null differ diff --git a/ESP32_AP-Flasher/data/fonts/calibrib80.vlw b/ESP32_AP-Flasher/data/fonts/calibrib80.vlw new file mode 100644 index 00000000..eb9f8dfe Binary files /dev/null and b/ESP32_AP-Flasher/data/fonts/calibrib80.vlw differ diff --git a/ESP32_AP-Flasher/data/fonts/numbers1-1.vlw b/ESP32_AP-Flasher/data/fonts/numbers1-1.vlw deleted file mode 100644 index e5e2e87a..00000000 Binary files a/ESP32_AP-Flasher/data/fonts/numbers1-1.vlw and /dev/null differ diff --git a/ESP32_AP-Flasher/data/fonts/numbers1-2.vlw b/ESP32_AP-Flasher/data/fonts/numbers1-2.vlw deleted file mode 100644 index c6f615be..00000000 Binary files a/ESP32_AP-Flasher/data/fonts/numbers1-2.vlw and /dev/null differ diff --git a/ESP32_AP-Flasher/data/fonts/numbers2-1.vlw b/ESP32_AP-Flasher/data/fonts/numbers2-1.vlw deleted file mode 100644 index 1dbfa21b..00000000 Binary files a/ESP32_AP-Flasher/data/fonts/numbers2-1.vlw and /dev/null differ diff --git a/ESP32_AP-Flasher/data/fonts/numbers2-2.vlw b/ESP32_AP-Flasher/data/fonts/numbers2-2.vlw deleted file mode 100644 index 60ade58b..00000000 Binary files a/ESP32_AP-Flasher/data/fonts/numbers2-2.vlw and /dev/null differ diff --git a/ESP32_AP-Flasher/data/fonts/numbers3-1.vlw b/ESP32_AP-Flasher/data/fonts/numbers3-1.vlw deleted file mode 100644 index fff661e3..00000000 Binary files a/ESP32_AP-Flasher/data/fonts/numbers3-1.vlw and /dev/null differ diff --git a/ESP32_AP-Flasher/data/fonts/numbers3-2.vlw b/ESP32_AP-Flasher/data/fonts/numbers3-2.vlw deleted file mode 100644 index 1dbfa21b..00000000 Binary files a/ESP32_AP-Flasher/data/fonts/numbers3-2.vlw and /dev/null differ diff --git a/ESP32_AP-Flasher/data/fonts/tw20.vlw b/ESP32_AP-Flasher/data/fonts/tw20.vlw deleted file mode 100644 index 884fc494..00000000 Binary files a/ESP32_AP-Flasher/data/fonts/tw20.vlw and /dev/null differ diff --git a/ESP32_AP-Flasher/data/fonts/twbold20.vlw b/ESP32_AP-Flasher/data/fonts/twbold20.vlw deleted file mode 100644 index 5ed00c42..00000000 Binary files a/ESP32_AP-Flasher/data/fonts/twbold20.vlw and /dev/null differ diff --git a/ESP32_AP-Flasher/data/fonts/twcondensed20.vlw b/ESP32_AP-Flasher/data/fonts/twcondensed20.vlw new file mode 100644 index 00000000..004bd600 Binary files /dev/null and b/ESP32_AP-Flasher/data/fonts/twcondensed20.vlw differ diff --git a/ESP32_AP-Flasher/data/fonts/weathericons30.vlw b/ESP32_AP-Flasher/data/fonts/weathericons30.vlw index 7e69ede5..21591254 100644 Binary files a/ESP32_AP-Flasher/data/fonts/weathericons30.vlw and b/ESP32_AP-Flasher/data/fonts/weathericons30.vlw differ diff --git a/ESP32_AP-Flasher/data/fonts/weathericons70.vlw b/ESP32_AP-Flasher/data/fonts/weathericons70.vlw index 689a14cd..536f4dd5 100644 Binary files a/ESP32_AP-Flasher/data/fonts/weathericons70.vlw and b/ESP32_AP-Flasher/data/fonts/weathericons70.vlw differ diff --git a/ESP32_AP-Flasher/data/fonts/weathericons78.vlw b/ESP32_AP-Flasher/data/fonts/weathericons78.vlw index a34ee456..f60db5bb 100644 Binary files a/ESP32_AP-Flasher/data/fonts/weathericons78.vlw and b/ESP32_AP-Flasher/data/fonts/weathericons78.vlw differ diff --git a/ESP32_AP-Flasher/data/update_actions.json b/ESP32_AP-Flasher/data/update_actions.json new file mode 100644 index 00000000..1d767cfb --- /dev/null +++ b/ESP32_AP-Flasher/data/update_actions.json @@ -0,0 +1,15 @@ +{ + "deletefile": [ + "/fonts/calibrib62.vlw", + "/fonts/GillSC16.vlw", + "/fonts/GillSC20.vlw", + "/fonts/numbers1-1.vlw", + "/fonts/numbers1-2.vlw", + "/fonts/numbers2-1.vlw", + "/fonts/numbers2-2.vlw", + "/fonts/numbers3-1.vlw", + "/fonts/numbers3-2.vlw", + "/fonts/tw20.vlw", + "/fonts/twbold20.vlw" + ] +} diff --git a/ESP32_AP-Flasher/data/www/index.html b/ESP32_AP-Flasher/data/www/index.html index a3ebd384..81a7e624 100644 --- a/ESP32_AP-Flasher/data/www/index.html +++ b/ESP32_AP-Flasher/data/www/index.html @@ -151,7 +151,7 @@ Latency will be around 40 seconds.">
- RSSI
, LQI
,
°C,
V + RSSI 
, LQI 
diff --git a/ESP32_AP-Flasher/data/www/main.css b/ESP32_AP-Flasher/data/www/main.css index 1c8da0e9..5d0f1c12 100644 --- a/ESP32_AP-Flasher/data/www/main.css +++ b/ESP32_AP-Flasher/data/www/main.css @@ -276,10 +276,7 @@ select { padding-bottom: 5px; } .received div { - padding-left: 3px; - padding-right: 1px; display: inline-block; - font-weight: bold; } .contentmode { diff --git a/ESP32_AP-Flasher/data/www/main.js b/ESP32_AP-Flasher/data/www/main.js index 5e1b77ec..8688af1f 100644 --- a/ESP32_AP-Flasher/data/www/main.js +++ b/ESP32_AP-Flasher/data/www/main.js @@ -159,8 +159,12 @@ function processTags(tagArray) { $('#tag' + tagmac + ' .model').innerHTML = models[element.hwType]; $('#tag' + tagmac + ' .rssi').innerHTML = element.RSSI; $('#tag' + tagmac + ' .lqi').innerHTML = element.LQI; - $('#tag' + tagmac + ' .temperature').innerHTML = element.temperature; - $('#tag' + tagmac + ' .batt').innerHTML = element.batteryMv / 1000; + $('#tag' + tagmac + ' .temperature').innerHTML = (element.temperature > 0 ? ", " + element.temperature + "°C": ""); + if (element.batteryMv == 0 || element.batteryMv == 1337) { + $('#tag' + tagmac + ' .batt').innerHTML = ""; + } else { + $('#tag' + tagmac + ' .batt').innerHTML = ", " + (element.batteryMv >= 2600 ? "≥" : "") + (element.batteryMv / 1000) + "V"; + } $('#tag' + tagmac + ' .received').style.opacity = "1"; } else { $('#tag' + tagmac + ' .model').innerHTML = "waiting for hardware type"; diff --git a/ESP32_AP-Flasher/data/www/ota.js b/ESP32_AP-Flasher/data/www/ota.js index ba0516f6..0b7130ab 100644 --- a/ESP32_AP-Flasher/data/www/ota.js +++ b/ESP32_AP-Flasher/data/www/ota.js @@ -151,6 +151,23 @@ export async function updateWebpage(fileUrl, tagname, showReload) { consoleDiv.scrollTop = consoleDiv.scrollHeight; print("Updating littleFS partition..."); + + try { + const response = await fetch("/update_actions", { + method: "POST", + body: '' + }); + if (response.ok) { + const data = await response.text(); + } else { + print(`error performing update actions: ${response.status}`, "red"); + errors++; + } + } catch (error) { + console.error(`error calling update actions:` + error, "red"); + errors++; + } + fetch("/getexturl?url=" + fileUrl) .then(response => response.json()) .then(data => { diff --git a/ESP32_AP-Flasher/include/ota.h b/ESP32_AP-Flasher/include/ota.h index 443d3733..2017fd38 100644 --- a/ESP32_AP-Flasher/include/ota.h +++ b/ESP32_AP-Flasher/include/ota.h @@ -10,3 +10,4 @@ void handleUpdateOTA(AsyncWebServerRequest* request); void firmwareUpdateTask(void* parameter); void updateFirmware(const char* url, const char* expectedMd5, size_t size); void handleRollback(AsyncWebServerRequest* request); +void handleUpdateActions(AsyncWebServerRequest* request); diff --git a/ESP32_AP-Flasher/src/contentmanager.cpp b/ESP32_AP-Flasher/src/contentmanager.cpp index d7b4070a..9589340b 100644 --- a/ESP32_AP-Flasher/src/contentmanager.cpp +++ b/ESP32_AP-Flasher/src/contentmanager.cpp @@ -30,15 +30,9 @@ #include "web.h" #include "language.h" -#ifdef BOARD_HAS_PSRAM #define PAL_BLACK TFT_BLACK #define PAL_WHITE TFT_WHITE #define PAL_RED TFT_RED -#else -#define PAL_BLACK 0 -#define PAL_WHITE 9 -#define PAL_RED 2 -#endif enum contentModes { Image, @@ -306,18 +300,8 @@ void drawString(TFT_eSprite &spr, String content, uint16_t posx, uint16_t posy, } void initSprite(TFT_eSprite &spr, int w, int h) { -#ifdef BOARD_HAS_PSRAM spr.setColorDepth(8); spr.createSprite(w, h); -#else - spr.setColorDepth(4); // 4 bits per pixel, uses indexed color - spr.createSprite(w, h); - uint16_t cmap[16]; - cmap[PAL_BLACK] = TFT_BLACK; - cmap[PAL_RED] = TFT_RED; - cmap[PAL_WHITE] = TFT_WHITE; - spr.createPalette(cmap, 16); -#endif if (spr.getPointer() == nullptr) { wsErr("Failed to create sprite"); } @@ -346,22 +330,18 @@ void drawDate(String &filename, tagRecord *&taginfo, imgParam &imageParams) { if (taginfo->hwType == SOLUM_29_SSD1619 || taginfo->hwType == SOLUM_29_UC8151) { initSprite(spr, 296, 128); - if (getCurrentLanguage() == 0 && timeinfo.tm_wday == 3) { - drawString(spr, languageDays[getCurrentLanguage()][timeinfo.tm_wday], 296 / 2, 10, "fonts/calibrib50", TC_DATUM, PAL_RED); - } else { - drawString(spr, languageDays[getCurrentLanguage()][timeinfo.tm_wday], 296 / 2, 10, "fonts/calibrib62", TC_DATUM, PAL_RED); - } + drawString(spr, languageDays[getCurrentLanguage()][timeinfo.tm_wday], 296 / 2, 10, "fonts/calibrib60", TC_DATUM, PAL_RED); drawString(spr, String(timeinfo.tm_mday) + " " + languageMonth[getCurrentLanguage()][timeinfo.tm_mon], 296 / 2, 73, "fonts/calibrib50", TC_DATUM); } else if (taginfo->hwType == SOLUM_154_SSD1619) { initSprite(spr, 152, 152); drawString(spr, languageDays[getCurrentLanguage()][timeinfo.tm_wday], 152 / 2, 10, "fonts/calibrib30", TC_DATUM); drawString(spr, String(languageMonth[getCurrentLanguage()][timeinfo.tm_mon]), 152 / 2, 120, "fonts/calibrib30", TC_DATUM); - drawString(spr, String(timeinfo.tm_mday), 152 / 2, 42, "fonts/numbers2-1", TC_DATUM, PAL_RED); + drawString(spr, String(timeinfo.tm_mday), 152 / 2, 42, "fonts/calibrib100", TC_DATUM, PAL_RED); } else if (taginfo->hwType == SOLUM_42_SSD1619) { initSprite(spr, 400, 300); - drawString(spr, languageDays[getCurrentLanguage()][timeinfo.tm_wday], 400 / 2, 30, "fonts/calibrib62", TC_DATUM, PAL_RED); + drawString(spr, languageDays[getCurrentLanguage()][timeinfo.tm_wday], 400 / 2, 30, "fonts/calibrib60", TC_DATUM, PAL_RED); drawString(spr, String(timeinfo.tm_mday) + " " + languageMonth[getCurrentLanguage()][timeinfo.tm_mon], 400 / 2, 113, "fonts/calibrib50", TC_DATUM); } @@ -401,9 +381,10 @@ void drawNumber(String &filename, int32_t count, int32_t thresholdred, tagRecord } else { spr.setTextColor(PAL_BLACK, PAL_WHITE); } - String font = "fonts/numbers1-2"; - if (count > 999) font = "fonts/numbers2-2"; - if (count > 9999) font = "fonts/numbers3-2"; + String font = "fonts/calibrib150"; + if (count > 99) font = "fonts/calibrib150"; + if (count > 999) font = "fonts/calibrib120"; + if (count > 9999) font = "fonts/calibrib100"; spr.loadFont(font, LittleFS); spr.drawString(String(count), 296 / 2, 128 / 2 + 10); spr.unloadFont(); @@ -416,9 +397,10 @@ void drawNumber(String &filename, int32_t count, int32_t thresholdred, tagRecord } else { spr.setTextColor(PAL_BLACK, PAL_WHITE); } - String font = "fonts/numbers1-1"; - if (count > 99) font = "fonts/numbers2-1"; - if (count > 999) font = "fonts/numbers3-1"; + String font = "fonts/calibrib120"; + if (count > 99) font = "fonts/calibrib80"; + if (count > 999) font = "fonts/calibrib50"; + if (count > 9999) font = "fonts/calibrib50"; spr.loadFont(font, LittleFS); spr.drawString(String(count), 152 / 2, 152 / 2 + 7); spr.unloadFont(); @@ -431,9 +413,10 @@ void drawNumber(String &filename, int32_t count, int32_t thresholdred, tagRecord } else { spr.setTextColor(PAL_BLACK, PAL_WHITE); } - String font = "fonts/numbers1-2"; - if (count > 999) font = "fonts/numbers2-2"; - if (count > 9999) font = "fonts/numbers3-2"; + String font = "fonts/calibrib150"; + if (count > 99) font = "fonts/calibrib150"; + if (count > 999) font = "fonts/calibrib120"; + if (count > 9999) font = "fonts/calibrib100"; spr.loadFont(font, LittleFS); spr.drawString(String(count), 400 / 2, 300 / 2 + 7); spr.unloadFont(); @@ -679,7 +662,7 @@ void drawForecast(String &filename, JsonObject &cfgobj, tagRecord *&taginfo, img for (uint8_t dag = 0; dag < 5; dag++) { time_t weatherday = doc["daily"]["time"][dag].as(); struct tm *datum = localtime(&weatherday); - drawString(spr, String(languageDaysShort[getCurrentLanguage()][datum->tm_wday]), dag * 59 + 30, 18, "fonts/twbold20", TC_DATUM, PAL_BLACK); + drawString(spr, String(languageDaysShort[getCurrentLanguage()][datum->tm_wday]), dag * 59 + 30, 18, "fonts/twcondensed20", TC_DATUM, PAL_BLACK); uint8_t weathercode = doc["daily"]["weathercode"][dag].as(); if (weathercode > 40) weathercode -= 40; @@ -703,7 +686,7 @@ void drawForecast(String &filename, JsonObject &cfgobj, tagRecord *&taginfo, img int8_t tmax = round(doc["daily"]["temperature_2m_max"][dag].as()); uint8_t wind = windSpeedToBeaufort(doc["daily"]["windspeed_10m_max"][dag].as()); - spr.loadFont("fonts/GillSC20", LittleFS); + spr.loadFont("fonts/twcondensed20", LittleFS); drawString(spr, String(tmin) + " ", dag * 59 + 30, 108, "", TR_DATUM, (tmin < 0 ? PAL_RED : PAL_BLACK)); drawString(spr, String(" ") + String(tmax), dag * 59 + 30, 108, "", TL_DATUM, (tmax < 0 ? PAL_RED : PAL_BLACK)); drawString(spr, String(" ") + String(wind), dag * 59 + 30, 43, "", TL_DATUM, (wind > 5 ? PAL_RED : PAL_BLACK)); @@ -724,7 +707,7 @@ void drawForecast(String &filename, JsonObject &cfgobj, tagRecord *&taginfo, img for (uint8_t dag = 0; dag < 5; dag++) { time_t weatherday = doc["daily"]["time"][dag].as(); struct tm *datum = localtime(&weatherday); - drawString(spr, String(languageDaysShort[getCurrentLanguage()][datum->tm_wday]), dag * 59 + 30, 18, "fonts/twbold20", TC_DATUM, PAL_BLACK); + drawString(spr, String(languageDaysShort[getCurrentLanguage()][datum->tm_wday]), dag * 59 + 30, 18, "fonts/twcondensed20", TC_DATUM, PAL_BLACK); uint8_t weathercode = doc["daily"]["weathercode"][dag].as(); if (weathercode > 40) weathercode -= 40; @@ -748,7 +731,7 @@ void drawForecast(String &filename, JsonObject &cfgobj, tagRecord *&taginfo, img int8_t tmax = round(doc["daily"]["temperature_2m_max"][dag].as()); uint8_t wind = windSpeedToBeaufort(doc["daily"]["windspeed_10m_max"][dag].as()); - spr.loadFont("fonts/GillSC20", LittleFS); + spr.loadFont("fonts/twcondensed20", LittleFS); drawString(spr, String(tmin) + " ", dag * 59 + 30, 108, "", TR_DATUM, (tmin < 0 ? PAL_RED : PAL_BLACK)); drawString(spr, String(" ") + String(tmax), dag * 59 + 30, 108, "", TL_DATUM, (tmax < 0 ? PAL_RED : PAL_BLACK)); drawString(spr, String(" ") + String(wind), dag * 59 + 30, 43, "", TL_DATUM, (wind > 5 ? PAL_RED : PAL_BLACK)); diff --git a/ESP32_AP-Flasher/src/ota.cpp b/ESP32_AP-Flasher/src/ota.cpp index 5ae5347f..9fa8cd0b 100644 --- a/ESP32_AP-Flasher/src/ota.cpp +++ b/ESP32_AP-Flasher/src/ota.cpp @@ -39,12 +39,12 @@ void handleSysinfoRequest(AsyncWebServerRequest* request) { doc["rollback"] = Update.canRollBack(); size_t bufferSize = measureJson(doc) + 1; - AsyncResponseStream *response = request->beginResponseStream("application/json", bufferSize); + AsyncResponseStream* response = request->beginResponseStream("application/json", bufferSize); serializeJson(doc, *response); request->send(response); }; -void handleCheckFile(AsyncWebServerRequest *request) { +void handleCheckFile(AsyncWebServerRequest* request) { if (!request->hasParam("path")) { request->send(400); return; @@ -110,7 +110,7 @@ void handleGetExtUrl(AsyncWebServerRequest* request) { } } -void handleLittleFSUpload(AsyncWebServerRequest *request, String filename, size_t index, uint8_t *data, size_t len, bool final) { +void handleLittleFSUpload(AsyncWebServerRequest* request, String filename, size_t index, uint8_t* data, size_t len, bool final) { bool error = false; if (!index) { String path; @@ -183,9 +183,9 @@ void updateFirmware(const char* url, const char* expectedMd5, size_t size) { config.runStatus = RUNSTATUS_STOP; vTaskDelay(3000 / portTICK_PERIOD_MS); - //xSemaphoreTake(tagDBOwner, portMAX_DELAY); + // xSemaphoreTake(tagDBOwner, portMAX_DELAY); saveDB("/current/tagDB.json"); - //destroyDB(); + // destroyDB(); HTTPClient httpClient; @@ -222,7 +222,7 @@ void updateFirmware(const char* url, const char* expectedMd5, size_t size) { wsSerial("Reboot system now"); wsSerial("[reboot]"); vTaskDelay(1000 / portTICK_PERIOD_MS); - //ESP.restart(); + // ESP.restart(); } else { wsSerial("Error updating firmware:"); wsSerial(Update.errorString()); @@ -241,9 +241,9 @@ void updateFirmware(const char* url, const char* expectedMd5, size_t size) { } httpClient.end(); - //loadDB("/current/tagDB.json"); + // loadDB("/current/tagDB.json"); config.runStatus = RUNSTATUS_RUN; - //xSemaphoreGive(tagDBOwner); + // xSemaphoreGive(tagDBOwner); } void handleRollback(AsyncWebServerRequest* request) { @@ -255,7 +255,7 @@ void handleRollback(AsyncWebServerRequest* request) { wsSerial("Reboot system now"); wsSerial("[reboot]"); vTaskDelay(1000 / portTICK_PERIOD_MS); - //ESP.restart(); + // ESP.restart(); } else { wsSerial("Rollback failed"); request->send(400, "Rollback failed"); @@ -264,4 +264,26 @@ void handleRollback(AsyncWebServerRequest* request) { wsSerial("Rollback not allowed"); request->send(400, "Rollback not allowed"); } +} + +void handleUpdateActions(AsyncWebServerRequest* request) { + wsSerial("Performing cleanup"); + File file = LittleFS.open("/update_actions.json", "r"); + if (!file) { + wsSerial("No update_actions.json present"); + request->send(200, "No update actions needed"); + return; + } + StaticJsonDocument<1000> doc; + DeserializationError error = deserializeJson(doc, file); + JsonArray deleteFiles = doc["deletefile"].as(); + for (const auto& filePath : deleteFiles) { + if (LittleFS.remove(filePath.as())) { + wsSerial("deleted file: " + filePath.as()); + } + } + file.close(); + wsSerial("Cleanup finished"); + request->send(200, "Clean up finished"); + LittleFS.remove("/update_actions.json"); } \ No newline at end of file diff --git a/ESP32_AP-Flasher/src/tag_db.cpp b/ESP32_AP-Flasher/src/tag_db.cpp index c7089e95..44e09134 100644 --- a/ESP32_AP-Flasher/src/tag_db.cpp +++ b/ESP32_AP-Flasher/src/tag_db.cpp @@ -143,7 +143,7 @@ void saveDB(String filename) { if (c > 0) { file.write(','); } - serializeJson(doc, file); + serializeJsonPretty(doc, file); } file.write(']'); diff --git a/ESP32_AP-Flasher/src/web.cpp b/ESP32_AP-Flasher/src/web.cpp index 4e12990a..fc2dc5df 100644 --- a/ESP32_AP-Flasher/src/web.cpp +++ b/ESP32_AP-Flasher/src/web.cpp @@ -275,6 +275,8 @@ void init_web() { uint8_t mac[8]; if (hex2mac(dst, mac)) { json = tagDBtoJson(mac); + } else { + json = "{\"error\": \"malformatted parameter\"}"; } } else { uint8_t startPos = 0; @@ -398,11 +400,11 @@ void init_web() { server.on("/sysinfo", HTTP_GET, handleSysinfoRequest); server.on("/check_file", HTTP_GET, handleCheckFile); server.on("/getexturl", HTTP_GET, handleGetExtUrl); + server.on("/rollback", HTTP_POST, handleRollback); + server.on("/update_actions", HTTP_POST, handleUpdateActions); server.on("/update_ota", HTTP_POST, [](AsyncWebServerRequest *request) { handleUpdateOTA(request); }); - server.on("/rollback", HTTP_POST, handleRollback); - server.on( "/littlefs_put", HTTP_POST, [](AsyncWebServerRequest *request) { request->send(200);