Skip to content

Commit 09a65bd

Browse files
Added user partition
1 parent d1aaa48 commit 09a65bd

File tree

3 files changed

+48
-30
lines changed

3 files changed

+48
-30
lines changed

fs-data/imageData.json

Lines changed: 0 additions & 1 deletion
This file was deleted.

led-matrix-display/main.cpp

Lines changed: 45 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -274,6 +274,11 @@ class DisplayBuffer : public Adafruit_GFX {
274274
}
275275
};
276276

277+
std::map <std::string, FSImage> builtinImages = {
278+
{"blm", {64, 32, 36}},
279+
{"weather", {64, 32, 1}}
280+
};
281+
277282
std::map <std::string, ProgmemImage> progmemImages = {
278283
#if USE_PROGMEM_IMAGES
279284
{"taz", {23, 28, 1, IMAGE_UINT16, taz}},
@@ -931,7 +936,7 @@ void serveImageData(AsyncWebServerRequest *request) {
931936
Dir imageDir = getImageDir();
932937
std::map <std::string, FSImage> fsImageData = getFSImageData();
933938

934-
size_t size = 100 + (progmemImages.size() + fsImageData.size()) * 100;
939+
size_t size = 100 + (progmemImages.size() + fsImageData.size() + builtinImages.size()) * 100;
935940
DynamicJsonDocument doc(size);
936941

937942
#if DEBUG_TRANSPARENCY
@@ -953,6 +958,14 @@ void serveImageData(AsyncWebServerRequest *request) {
953958
o["type"] = entry.second.type;
954959
o["progmem"] = true;
955960
}
961+
962+
for (auto const &entry : builtinImages) {
963+
JsonObject o = doc.createNestedObject(entry.first.c_str());
964+
o["width"] = entry.second.width;
965+
o["height"] = entry.second.height;
966+
o["length"] = entry.second.length;
967+
o["progmem"] = true;
968+
}
956969

957970
for (auto const &entry : fsImageData) {
958971
JsonObject o = doc.createNestedObject(entry.first.c_str());
@@ -1001,8 +1014,9 @@ void serveImage(AsyncWebServerRequest *request) {
10011014
String image = request->arg(F("image"));
10021015
if (image.endsWith(F("_P"))) {
10031016
std::string progmem = std::string(image.substring(0, image.length() - 2).c_str());
1004-
if (progmemImages.count(progmem) < 1) {
1005-
request->send(404);
1017+
if (progmemImages.count(progmem) == 0) {
1018+
if (!sendFile(request, DashboardFS, ("/images/" + progmem).c_str()))
1019+
request->send(404);
10061020
return;
10071021
}
10081022
size_t size = (progmemImages[progmem].type == IMAGE_GIMP ? 4 : 2) * progmemImages[progmem].width *
@@ -1048,6 +1062,7 @@ void serveDeleteImage(AsyncWebServerRequest *request) {
10481062
}
10491063

10501064
void deleteAllImages() {
1065+
// Todo: Ensure files are all deleted
10511066
DEBUG("Deleting all custom images\n");
10521067
closeFiles();
10531068
writeDefaultImageData();
@@ -1234,16 +1249,16 @@ void drawImage(Adafruit_GFX &d, uint8_t xOffset, uint8_t yOffset, uint8_t width,
12341249
}
12351250
}
12361251

1237-
void drawImageFs(Adafruit_GFX &d, uint8_t xOffset, uint8_t yOffset, uint8_t width, uint8_t height, uint8_t offset,
1252+
void drawImageFs(Adafruit_GFX &d, FS fs, uint8_t xOffset, uint8_t yOffset, uint8_t width, uint8_t height, uint8_t offset,
12381253
const char name[], std::vector<uint16_t> alphaColors, bool transparent, File &file) {
12391254
if (!file) {
1240-
if (!UserFS.exists(name)) {
1255+
if (!fs.exists(name)) {
12411256
Serial.print(F("Couldn't find image to draw for: "));
12421257
Serial.println(name);
12431258
return;
12441259
}
12451260
Serial.printf("Opening File: %s\n", name);
1246-
file = UserFS.open(name, "r");
1261+
file = fs.open(name, "r");
12471262
if (!file) {
12481263
Serial.printf("Failed to open image: %s\n", name);
12491264
return;
@@ -1742,28 +1757,32 @@ void drawWidget(Adafruit_GFX &d, Widget &widget, bool buffering) {
17421757

17431758
switch (widget.type) {
17441759
case WIDGET_PROGMEM_IMAGE:
1745-
switch (progmemImages[widget.content].type) {
1746-
case IMAGE_UINT8:
1747-
case IMAGE_UINT16:
1748-
drawImage(d, widget.xOff + (widget.width - progmemImages[widget.content].width) / 2,
1749-
widget.yOff + (widget.height - progmemImages[widget.content].height) / 2,
1750-
progmemImages[widget.content].width, progmemImages[widget.content].height,
1751-
widget.state + widget.offset, (uint8_t *) progmemImages[widget.content].data,
1752-
widget.colors, widget.transparent, progmemImages[widget.content].type == IMAGE_UINT16);
1753-
break;
1754-
case IMAGE_GIMP:
1755-
drawGimpImage(d, widget.xOff + (widget.width - progmemImages[widget.content].width) / 2,
1756-
widget.yOff + (widget.height - progmemImages[widget.content].height) / 2,
1757-
progmemImages[widget.content].width, progmemImages[widget.content].height,
1758-
widget.colors, widget.transparent, (char *) progmemImages[widget.content].data);
1759-
break;
1760-
default:
1761-
Serial.println(F("Unknown image type"));
1762-
break;
1763-
}
1760+
if (builtinImages.count(widget.content) > 0)
1761+
drawImageFs(d, DashboardFS, widget.xOff, widget.yOff, widget.width, widget.height, widget.state + widget.offset,
1762+
("/images/" + widget.content).c_str(), widget.colors, widget.transparent, widget.file);
1763+
else
1764+
switch (progmemImages[widget.content].type) {
1765+
case IMAGE_UINT8:
1766+
case IMAGE_UINT16:
1767+
drawImage(d, widget.xOff + (widget.width - progmemImages[widget.content].width) / 2,
1768+
widget.yOff + (widget.height - progmemImages[widget.content].height) / 2,
1769+
progmemImages[widget.content].width, progmemImages[widget.content].height,
1770+
widget.state + widget.offset, (uint8_t *) progmemImages[widget.content].data,
1771+
widget.colors, widget.transparent, progmemImages[widget.content].type == IMAGE_UINT16);
1772+
break;
1773+
case IMAGE_GIMP:
1774+
drawGimpImage(d, widget.xOff + (widget.width - progmemImages[widget.content].width) / 2,
1775+
widget.yOff + (widget.height - progmemImages[widget.content].height) / 2,
1776+
progmemImages[widget.content].width, progmemImages[widget.content].height,
1777+
widget.colors, widget.transparent, (char *) progmemImages[widget.content].data);
1778+
break;
1779+
default:
1780+
Serial.println(F("Unknown image type"));
1781+
break;
1782+
}
17641783
break;
17651784
case WIDGET_FS_IMAGE:
1766-
drawImageFs(d, widget.xOff, widget.yOff, widget.width, widget.height, widget.state + widget.offset,
1785+
drawImageFs(d, UserFS, widget.xOff, widget.yOff, widget.width, widget.height, widget.state + widget.offset,
17671786
("/images/" + widget.content).c_str(), widget.colors, widget.transparent, widget.file);
17681787
break;
17691788
case WIDGET_ANALOG_CLOCK:

platformio.ini

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,10 @@ build_flags =
2727
-DVERSION_CODE=0
2828
;-DDEBUG_ESP_SSL
2929
;-DUSE_CORS=true
30-
;-DDEBUGGING=true
31-
;-DCORE_DEBUG_LEVEL=5
30+
-DDEBUGGING=true
31+
-DCORE_DEBUG_LEVEL=5
3232
;-DDEBUG_ESP_HTTP_UPDATE
33-
;-DDEBUG_ESP_PORT=Serial
33+
-DDEBUG_ESP_PORT=Serial
3434

3535
[esp32]
3636
extends = common

0 commit comments

Comments
 (0)