From c8fb0ca4de78a9ca358366071c43397309e81d33 Mon Sep 17 00:00:00 2001 From: Jelmer Date: Wed, 27 Sep 2023 14:04:48 +0200 Subject: [PATCH] ESP: Added feature to preload images --- .../data/www/content_cards.json.gz | Bin 2913 -> 3178 bytes ESP32_AP-Flasher/include/makeimage.h | 4 ++ ESP32_AP-Flasher/src/contentmanager.cpp | 18 ++++++- ESP32_AP-Flasher/wwwroot/content_cards.json | 48 +++++++++++++++++- 4 files changed, 67 insertions(+), 3 deletions(-) diff --git a/ESP32_AP-Flasher/data/www/content_cards.json.gz b/ESP32_AP-Flasher/data/www/content_cards.json.gz index f5382ff304cbae23b9df97bb976fbe6a6c8637dc..141c580ab867e0ab3d6b9692636cf97779de2d92 100644 GIT binary patch literal 3178 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 delta 2912 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 K*Z<&TI{*Ngf|Tn3 diff --git a/ESP32_AP-Flasher/include/makeimage.h b/ESP32_AP-Flasher/include/makeimage.h index dafc84b7..d2816d97 100644 --- a/ESP32_AP-Flasher/include/makeimage.h +++ b/ESP32_AP-Flasher/include/makeimage.h @@ -28,6 +28,10 @@ struct imgParam { uint8_t lut; uint8_t shortlut; + + bool preload; + uint8_t preloadtype; + uint8_t preloadlut; }; void spr2buffer(TFT_eSprite &spr, String &fileout, imgParam &imageParams); diff --git a/ESP32_AP-Flasher/src/contentmanager.cpp b/ESP32_AP-Flasher/src/contentmanager.cpp index 61a08c67..08716f61 100644 --- a/ESP32_AP-Flasher/src/contentmanager.cpp +++ b/ESP32_AP-Flasher/src/contentmanager.cpp @@ -230,6 +230,11 @@ void drawNew(const uint8_t mac[8], const bool buttonPressed, tagRecord *&taginfo } if (contentFS->exists(configFilename)) { imageParams.dither = cfgobj["dither"] && cfgobj["dither"] == "1"; + + imageParams.preload = cfgobj["preload"] && cfgobj["preload"] == "1"; + imageParams.preloadlut = cfgobj["preload_lut"]; + imageParams.preloadtype = cfgobj["preload_type"]; + jpg2buffer(configFilename, filename, imageParams); } else { filename = "/current/" + String(hexmac) + ".raw"; @@ -246,7 +251,18 @@ void drawNew(const uint8_t mac[8], const bool buttonPressed, tagRecord *&taginfo imageParams.dataType = DATATYPE_IMG_RAW_2BPP; if (imageParams.lut = EPD_LUT_NO_REPEATS && imageParams.shortlut == SHORTLUT_ONLY_BLACK) imageParams.lut = EPD_LUT_DEFAULT; } - if (prepareDataAvail(filename, imageParams.dataType, imageParams.lut, mac, cfgobj["timetolive"].as())) { + + struct imageDataTypeArgStruct arg = {0}; + // load parameters in case we do need to preload an image + if (imageParams.preload) { + arg.preloadImage = 1; + arg.specialType = imageParams.preloadtype; + arg.lut = imageParams.preloadlut; + } else { + arg.lut = imageParams.lut & 0x03; + } + + if (prepareDataAvail(filename, imageParams.dataType, *((uint8_t *)&arg), mac, cfgobj["timetolive"].as())) { if (cfgobj["delete"].as() == "1") { contentFS->remove("/" + configFilename); } diff --git a/ESP32_AP-Flasher/wwwroot/content_cards.json b/ESP32_AP-Flasher/wwwroot/content_cards.json index d0a86eac..88bcf585 100644 --- a/ESP32_AP-Flasher/wwwroot/content_cards.json +++ b/ESP32_AP-Flasher/wwwroot/content_cards.json @@ -34,6 +34,47 @@ "0": "off", "1": "on" } + }, + { + "key": "preload", + "name": "Display or Preload", + "desc": "Display now or preload for later use", + "type": "select", + "options": { + "0": "Display", + "1": "Preload" + } + }, + { + "key": "preload_lut", + "name": "Preload LUT", + "desc": "Triggered preload images will display with this LUT", + "type": "select", + "options": { + "0": "Default", + "1": "No Repeats", + "2": "Fast No Reds", + "3": "Fast" + } + }, + { + "key": "preload_type", + "name": "Preload Image type", + "desc": "Preload type to send to tag, for later recall, or special use", + "type": "select", + "options": { + "0": "Normal", + "1": "UI: Splash Screen", + "2": "UI: Lost connection", + "3": "UI: AP Found", + "4": "UI: No AP Found", + "5": "UI: Long Term Sleep", + "15": "Slideshow image", + "16": "Wake: Button 1", + "17": "Wake: Button 2", + "29": "Wake: GPIO", + "30": "Wake: NFC" + } } ] }, @@ -649,6 +690,9 @@ "id": 21, "name": "Access point info", "desc": "Displays information about the currently connected access point", - "hwtype": [0, 1] + "hwtype": [ + 0, + 1 + ] } -] +] \ No newline at end of file