feat: Add touch coordinate mapping and RTOS task yielding (#2481)

Co-authored-by: Julia Nguyen <julia@uxj.io>
This commit is contained in:
Justin Mitchell
2026-07-20 16:31:07 -04:00
committed by GitHub
co-authored by Julia Nguyen
parent c9188a7347
commit f42fab1c66
123 changed files with 3564 additions and 1380 deletions
@@ -4,6 +4,8 @@
#include <HalStorage.h>
#include <InflateStream.h>
#include <Logging.h>
#include <freertos/FreeRTOS.h>
#include <freertos/task.h>
#include <cstdio>
#include <cstring>
@@ -72,6 +74,12 @@ enum PngFilter : uint8_t {
PNG_FILTER_PAETH = 4,
};
void yieldDuringDecode(uint8_t& rowsSinceYield) {
if (++rowsSinceYield < 8) return;
rowsSinceYield = 0;
vTaskDelay(1);
}
// Read a big-endian 32-bit value from file
bool readBE32(HalFile& file, uint32_t& value) {
uint8_t buf[4];
@@ -659,6 +667,7 @@ bool PngToBmpConverter::pngFileToBmpStreamInternal(HalFile& pngFile, Print& bmpO
}
bool success = true;
uint8_t rowsSinceYield = 0;
// Process each scanline
for (uint32_t y = 0; y < height; y++) {
@@ -710,6 +719,7 @@ bool PngToBmpConverter::pngFileToBmpStreamInternal(HalFile& pngFile, Print& bmpO
fsDitherer->nextRow();
}
bmpOut.write(rowBuffer, bytesPerRow);
yieldDuringDecode(rowsSinceYield);
} else {
// Area-averaging scaling (same as JpegToBmpConverter)
for (int outX = 0; outX < outWidth; outX++) {
@@ -778,6 +788,7 @@ bool PngToBmpConverter::pngFileToBmpStreamInternal(HalFile& pngFile, Print& bmpO
bmpOut.write(rowBuffer, bytesPerRow);
currentOutY++;
yieldDuringDecode(rowsSinceYield);
nextOutY_srcStart = static_cast<uint32_t>(currentOutY + 1) * scaleY_fp;