From 7e49c2a09e50d7bd4f516062df93b2ea7dc66bb2 Mon Sep 17 00:00:00 2001 From: Nic Limper Date: Tue, 17 Dec 2024 19:20:17 +0100 Subject: [PATCH] some small tweaks --- .../data/www/content_cards.json.gz | Bin 4712 -> 4786 bytes ESP32_AP-Flasher/data/www/main.js.gz | Bin 16123 -> 16164 bytes ESP32_AP-Flasher/data/www/ota.js.gz | Bin 5612 -> 5672 bytes ESP32_AP-Flasher/src/contentmanager.cpp | 14 ++++++++---- ESP32_AP-Flasher/src/newproto.cpp | 20 ++++++++++-------- ESP32_AP-Flasher/src/ota.cpp | 1 + ESP32_AP-Flasher/src/web.cpp | 2 -- ESP32_AP-Flasher/wwwroot/main.js | 3 +++ ESP32_AP-Flasher/wwwroot/ota.js | 3 +++ 9 files changed, 28 insertions(+), 15 deletions(-) diff --git a/ESP32_AP-Flasher/data/www/content_cards.json.gz b/ESP32_AP-Flasher/data/www/content_cards.json.gz index 5b119d64db1f5ed8d2efdae3ec6d9122eb7bb6ca..38f0a4fff1320f6b24eb79d5130ba0bd517e1b3d 100644 GIT binary patch literal 4786 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 CFu)c7 delta 14251 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 OrT+`DEN9sCWdH#2ECi4M literal 5612 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 GWdH!m_w=Ix diff --git a/ESP32_AP-Flasher/src/contentmanager.cpp b/ESP32_AP-Flasher/src/contentmanager.cpp index d1622d43..93835c45 100644 --- a/ESP32_AP-Flasher/src/contentmanager.cpp +++ b/ESP32_AP-Flasher/src/contentmanager.cpp @@ -1378,8 +1378,7 @@ bool getCalFeed(String &filename, JsonObject &cfgobj, tagRecord *&taginfo, imgPa if (loc["colors1"].is() && loc["colors1"].size() > calendarId) { background = getColor(loc["colors1"][calendarId]); border = getColor(loc["colors2"][calendarId]); - textcolor = getColor(loc["colors3"][calendarId]); - Serial.println("cal " + String(calendarId) + ": " + String(loc["colors2"][calendarId])); + if (loc["colors3"][calendarId]) textcolor = getColor(loc["colors3"][calendarId]); } spr.fillRect(eventX - 1, eventY - 2, colWidth * (fulldayend - fulldaystart) - 3, lineHeight - 1, background); spr.drawRect(eventX - 2, eventY - 3, colWidth * (fulldayend - fulldaystart) - 1, lineHeight + 1, border); @@ -1459,8 +1458,7 @@ bool getCalFeed(String &filename, JsonObject &cfgobj, tagRecord *&taginfo, imgPa if (loc["colors1"].is() && loc["colors1"].size() > calendarId) { background = getColor(loc["colors1"][calendarId]); border = getColor(loc["colors2"][calendarId]); - textcolor = getColor(loc["colors3"][calendarId]); - Serial.println("cal " + String(calendarId) + ": " + String(loc["colors2"][calendarId])); + if (loc["colors3"][calendarId]) textcolor = getColor(loc["colors3"][calendarId]); } spr.fillRect(eventX + 2, eventY + 1, colWidth - 3, (duration * hourHeight / 60) - 1, background); spr.drawRect(eventX + 1, eventY, colWidth - 1, (duration * hourHeight / 60) + 1, border); @@ -2295,6 +2293,14 @@ void drawElement(const JsonObject &element, TFT_eSprite &spr, imgParam &imagePar } else if (element.containsKey("circle")) { const JsonArray &circleArray = element["circle"]; spr.fillCircle(circleArray[0].as(), circleArray[1].as(), circleArray[2].as(), getColor(circleArray[3])); + if (circleArray.size() >= 6) { + for (int i = 0; i < circleArray[5].as(); i++) { + spr.drawCircle(circleArray[0].as(), circleArray[1].as(), circleArray[2].as() - i, getColor(circleArray[4])); + if (i > 0) { + spr.drawCircle(circleArray[0].as(), circleArray[1].as(), circleArray[2].as() - i - 0.5, getColor(circleArray[4])); + } + } + } } else if (element.containsKey("image")) { const JsonArray &imgArray = element["image"]; diff --git a/ESP32_AP-Flasher/src/newproto.cpp b/ESP32_AP-Flasher/src/newproto.cpp index 5f8d722b..12f7c6bc 100644 --- a/ESP32_AP-Flasher/src/newproto.cpp +++ b/ESP32_AP-Flasher/src/newproto.cpp @@ -986,15 +986,17 @@ bool queueDataAvail(struct pendingData* pending, bool local) { taginfo->data = nullptr; } else { newPending.data = nullptr; - - // optional: read data early, don't wait for block request. - fs::File file = contentFS->open(newPending.filename); - if (file) { - newPending.data = getDataForFile(file); - Serial.println("Reading file " + String(newPending.filename)); - file.close(); - } else { - Serial.println("Warning: not found: " + String(newPending.filename)); + + if (pendingQueue.size() < 5) { // maximized to 5 to save some memory + // optional: read data early, don't wait for block request. + fs::File file = contentFS->open(newPending.filename); + if (file) { + newPending.data = getDataForFile(file); + Serial.println("Reading file " + String(newPending.filename)); + file.close(); + } else { + Serial.println("Warning: not found: " + String(newPending.filename)); + } } } newPending.len = taginfo->len; diff --git a/ESP32_AP-Flasher/src/ota.cpp b/ESP32_AP-Flasher/src/ota.cpp index 52821fed..96ad558e 100644 --- a/ESP32_AP-Flasher/src/ota.cpp +++ b/ESP32_AP-Flasher/src/ota.cpp @@ -43,6 +43,7 @@ void handleSysinfoRequest(AsyncWebServerRequest* request) { doc["rollback"] = Update.canRollBack(); #if defined C6_OTA_FLASHING doc["hasC6"] = 1; + doc["C6version"] = apInfo.version; #else doc["hasC6"] = 0; #endif diff --git a/ESP32_AP-Flasher/src/web.cpp b/ESP32_AP-Flasher/src/web.cpp index 183d9e03..f13f64a6 100644 --- a/ESP32_AP-Flasher/src/web.cpp +++ b/ESP32_AP-Flasher/src/web.cpp @@ -31,8 +31,6 @@ #include "webflasher.h" #endif -extern uint8_t data_to_send[]; - AsyncWebServer server(80); AsyncWebSocket ws("/ws"); WifiManager wm; diff --git a/ESP32_AP-Flasher/wwwroot/main.js b/ESP32_AP-Flasher/wwwroot/main.js index ad708568..89e4bc42 100644 --- a/ESP32_AP-Flasher/wwwroot/main.js +++ b/ESP32_AP-Flasher/wwwroot/main.js @@ -1795,6 +1795,9 @@ function populateAPInfo(apip) { version += `esp32 version: ${data.buildversion}
`; version += `psram size: ${data.psramsize}
`; version += `flash size: ${data.flashsize}
`; + if (data.hasC6) { + version += `ESP-C6/H2 version: 0x${parseInt(data.C6version).toString(16).toUpperCase()}
`; + } $('#ap' + apid + ' .apswversion').innerHTML = version; } }) diff --git a/ESP32_AP-Flasher/wwwroot/ota.js b/ESP32_AP-Flasher/wwwroot/ota.js index 5e054aff..9cf39e32 100644 --- a/ESP32_AP-Flasher/wwwroot/ota.js +++ b/ESP32_AP-Flasher/wwwroot/ota.js @@ -62,6 +62,9 @@ export async function initUpdate() { print(`filesystem version: ${filesystemversion}`); print(`psram size: ${sdata.psramsize}`); print(`flash size: ${sdata.flashsize}`); + if (sdata.hasC6) { + print(`ESP-C6/H2 version: 0x${parseInt(sdata.C6version).toString(16).toUpperCase()}`); + } print("--------------------------", "gray"); env = apConfig.env || sdata.env; if (sdata.env != env) {