From dc7544d9446249fea05f342ccc3b1df29b789bb0 Mon Sep 17 00:00:00 2001 From: Eunchurn Park Date: Fri, 26 Dec 2025 09:46:17 +0900 Subject: [PATCH 01/71] Optimize glyph lookup with binary search (#125) Replace linear O(n) search with binary search O(log n) for unicode interval lookup. Korean fonts have many intervals (~30,000+ glyphs), so this improves text rendering performance during page navigation. ## Summary * **What is the goal of this PR?** (e.g., Fixes a bug in the user authentication module, Implements the new feature for file uploading.) Replace linear `O(n)` glyph lookup with binary search `O(log n)` to improve text rendering performance during page navigation. * **What changes are included?** - Modified `EpdFont::getGlyph()` to use binary search instead of linear search for unicode interval lookup - Added early return for empty interval count ## Additional Context * Add any other information that might be helpful for the reviewer (e.g., performance implications, potential risks, specific areas to focus on). - Performance implications: Fonts with many unicode intervals benefit the most. Korean fonts have ~30,000+ glyphs across multiple intervals, but any font with significant glyph coverage (CJK, extended Latin, emoji, etc.) will see improvement. - Complexity: from `O(n)` to `O(log n)` where n = number of unicode intervals. For fonts with 10+ intervals, this reduces lookup iterations significantly. - Risk: Low - the binary search logic is straightforward and the intervals are already sorted by unicode codepoint (required for the original early-exit optimization). --- lib/EpdFont/EpdFont.cpp | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/lib/EpdFont/EpdFont.cpp b/lib/EpdFont/EpdFont.cpp index 0f53f95..661317d 100644 --- a/lib/EpdFont/EpdFont.cpp +++ b/lib/EpdFont/EpdFont.cpp @@ -59,14 +59,28 @@ bool EpdFont::hasPrintableChars(const char* string) const { const EpdGlyph* EpdFont::getGlyph(const uint32_t cp) const { const EpdUnicodeInterval* intervals = data->intervals; - for (int i = 0; i < data->intervalCount; i++) { - const EpdUnicodeInterval* interval = &intervals[i]; - if (cp >= interval->first && cp <= interval->last) { + const int count = data->intervalCount; + + if (count == 0) return nullptr; + + // Binary search for O(log n) lookup instead of O(n) + // Critical for Korean fonts with many unicode intervals + int left = 0; + int right = count - 1; + + while (left <= right) { + const int mid = left + (right - left) / 2; + const EpdUnicodeInterval* interval = &intervals[mid]; + + if (cp < interval->first) { + right = mid - 1; + } else if (cp > interval->last) { + left = mid + 1; + } else { + // Found: cp >= interval->first && cp <= interval->last return &data->glyph[interval->offset + (cp - interval->first)]; } - if (cp < interval->first) { - return nullptr; - } } + return nullptr; } From e3c1e28b8fff140be0977106485cf1bf05575d8c Mon Sep 17 00:00:00 2001 From: Brendan O'Leary Date: Thu, 25 Dec 2025 19:54:02 -0500 Subject: [PATCH 02/71] Normalize button hints (#130) ## Summary This creates a `renderer.drawButtonHints` to make all of the "hints" over buttons to match the home screen. ## Additional Context * Add any other information that might be helpful for the reviewer (e.g., performance implications, potential risks, specific areas to focus on). --------- Co-authored-by: Dave Allie --- lib/GfxRenderer/GfxRenderer.cpp | 22 +++++++++++++++++++ lib/GfxRenderer/GfxRenderer.h | 3 +++ src/activities/home/HomeActivity.cpp | 14 +----------- .../network/CrossPointWebServerActivity.cpp | 4 +--- .../network/NetworkModeSelectionActivity.cpp | 2 +- .../network/WifiSelectionActivity.cpp | 5 +++-- .../reader/FileSelectionActivity.cpp | 2 +- src/activities/settings/SettingsActivity.cpp | 2 +- 8 files changed, 33 insertions(+), 21 deletions(-) diff --git a/lib/GfxRenderer/GfxRenderer.cpp b/lib/GfxRenderer/GfxRenderer.cpp index a4b9369..6433748 100644 --- a/lib/GfxRenderer/GfxRenderer.cpp +++ b/lib/GfxRenderer/GfxRenderer.cpp @@ -239,6 +239,28 @@ int GfxRenderer::getLineHeight(const int fontId) const { return fontMap.at(fontId).getData(REGULAR)->advanceY; } +void GfxRenderer::drawButtonHints(const int fontId, const char* btn1, const char* btn2, const char* btn3, + const char* btn4) const { + const int pageHeight = getScreenHeight(); + constexpr int buttonWidth = 106; + constexpr int buttonHeight = 40; + constexpr int buttonY = 40; // Distance from bottom + constexpr int textYOffset = 5; // Distance from top of button to text baseline + constexpr int buttonPositions[] = {25, 130, 245, 350}; + const char* labels[] = {btn1, btn2, btn3, btn4}; + + for (int i = 0; i < 4; i++) { + // Only draw if the label is non-empty + if (labels[i] != nullptr && labels[i][0] != '\0') { + const int x = buttonPositions[i]; + drawRect(x, pageHeight - buttonY, buttonWidth, buttonHeight); + const int textWidth = getTextWidth(fontId, labels[i]); + const int textX = x + (buttonWidth - 1 - textWidth) / 2; + drawText(fontId, textX, pageHeight - buttonY + textYOffset, labels[i]); + } + } +} + uint8_t* GfxRenderer::getFrameBuffer() const { return einkDisplay.getFrameBuffer(); } size_t GfxRenderer::getBufferSize() { return EInkDisplay::BUFFER_SIZE; } diff --git a/lib/GfxRenderer/GfxRenderer.h b/lib/GfxRenderer/GfxRenderer.h index 838e018..00a525d 100644 --- a/lib/GfxRenderer/GfxRenderer.h +++ b/lib/GfxRenderer/GfxRenderer.h @@ -57,6 +57,9 @@ class GfxRenderer { int getSpaceWidth(int fontId) const; int getLineHeight(int fontId) const; + // UI Components + void drawButtonHints(int fontId, const char* btn1, const char* btn2, const char* btn3, const char* btn4) const; + // Grayscale functions void setRenderMode(const RenderMode mode) { this->renderMode = mode; } void copyGrayscaleLsbBuffers() const; diff --git a/src/activities/home/HomeActivity.cpp b/src/activities/home/HomeActivity.cpp index bbda130..68e64b3 100644 --- a/src/activities/home/HomeActivity.cpp +++ b/src/activities/home/HomeActivity.cpp @@ -85,7 +85,6 @@ void HomeActivity::render() const { renderer.clearScreen(); const auto pageWidth = renderer.getScreenWidth(); - const auto pageHeight = renderer.getScreenHeight(); renderer.drawCenteredText(READER_FONT_ID, 10, "CrossPoint Reader", true, BOLD); // Draw selection @@ -94,18 +93,7 @@ void HomeActivity::render() const { renderer.drawText(UI_FONT_ID, 20, 90, "File transfer", selectorIndex != 1); renderer.drawText(UI_FONT_ID, 20, 120, "Settings", selectorIndex != 2); - renderer.drawRect(25, pageHeight - 40, 106, 40); - renderer.drawText(UI_FONT_ID, 25 + (105 - renderer.getTextWidth(UI_FONT_ID, "Back")) / 2, pageHeight - 35, "Back"); - - renderer.drawRect(130, pageHeight - 40, 106, 40); - renderer.drawText(UI_FONT_ID, 130 + (105 - renderer.getTextWidth(UI_FONT_ID, "Confirm")) / 2, pageHeight - 35, - "Confirm"); - - renderer.drawRect(245, pageHeight - 40, 106, 40); - renderer.drawText(UI_FONT_ID, 245 + (105 - renderer.getTextWidth(UI_FONT_ID, "Left")) / 2, pageHeight - 35, "Left"); - - renderer.drawRect(350, pageHeight - 40, 106, 40); - renderer.drawText(UI_FONT_ID, 350 + (105 - renderer.getTextWidth(UI_FONT_ID, "Right")) / 2, pageHeight - 35, "Right"); + renderer.drawButtonHints(UI_FONT_ID, "Back", "Confirm", "Left", "Right"); renderer.displayBuffer(); } diff --git a/src/activities/network/CrossPointWebServerActivity.cpp b/src/activities/network/CrossPointWebServerActivity.cpp index b9c911e..34b1a3a 100644 --- a/src/activities/network/CrossPointWebServerActivity.cpp +++ b/src/activities/network/CrossPointWebServerActivity.cpp @@ -337,8 +337,6 @@ void CrossPointWebServerActivity::render() const { } void CrossPointWebServerActivity::renderServerRunning() const { - const auto pageHeight = renderer.getScreenHeight(); - // Use consistent line spacing constexpr int LINE_SPACING = 28; // Space between lines @@ -389,5 +387,5 @@ void CrossPointWebServerActivity::renderServerRunning() const { renderer.drawCenteredText(SMALL_FONT_ID, startY + LINE_SPACING * 4, "Open this URL in your browser", true, REGULAR); } - renderer.drawCenteredText(SMALL_FONT_ID, pageHeight - 30, "Press BACK to exit", true, REGULAR); + renderer.drawButtonHints(UI_FONT_ID, "« Exit", "", "", ""); } diff --git a/src/activities/network/NetworkModeSelectionActivity.cpp b/src/activities/network/NetworkModeSelectionActivity.cpp index 637d82d..af68a20 100644 --- a/src/activities/network/NetworkModeSelectionActivity.cpp +++ b/src/activities/network/NetworkModeSelectionActivity.cpp @@ -122,7 +122,7 @@ void NetworkModeSelectionActivity::render() const { } // Draw help text at bottom - renderer.drawCenteredText(SMALL_FONT_ID, pageHeight - 30, "Press OK to select, BACK to cancel", true, REGULAR); + renderer.drawButtonHints(UI_FONT_ID, "« Back", "Select", "", ""); renderer.displayBuffer(); } diff --git a/src/activities/network/WifiSelectionActivity.cpp b/src/activities/network/WifiSelectionActivity.cpp index c18e0f5..80e46ce 100644 --- a/src/activities/network/WifiSelectionActivity.cpp +++ b/src/activities/network/WifiSelectionActivity.cpp @@ -548,11 +548,12 @@ void WifiSelectionActivity::renderNetworkList() const { // Show network count char countStr[32]; snprintf(countStr, sizeof(countStr), "%zu networks found", networks.size()); - renderer.drawText(SMALL_FONT_ID, 20, pageHeight - 45, countStr); + renderer.drawText(SMALL_FONT_ID, 20, pageHeight - 90, countStr); } // Draw help text - renderer.drawText(SMALL_FONT_ID, 20, pageHeight - 30, "OK: Connect | * = Encrypted | + = Saved"); + renderer.drawText(SMALL_FONT_ID, 20, pageHeight - 75, "* = Encrypted | + = Saved"); + renderer.drawButtonHints(UI_FONT_ID, "« Back", "Connect", "", ""); } void WifiSelectionActivity::renderPasswordEntry() const { diff --git a/src/activities/reader/FileSelectionActivity.cpp b/src/activities/reader/FileSelectionActivity.cpp index a6c1083..d6504b8 100644 --- a/src/activities/reader/FileSelectionActivity.cpp +++ b/src/activities/reader/FileSelectionActivity.cpp @@ -149,7 +149,7 @@ void FileSelectionActivity::render() const { renderer.drawCenteredText(READER_FONT_ID, 10, "Books", true, BOLD); // Help text - renderer.drawText(SMALL_FONT_ID, 20, GfxRenderer::getScreenHeight() - 30, "Press BACK for Home"); + renderer.drawButtonHints(UI_FONT_ID, "« Home", "", "", ""); if (files.empty()) { renderer.drawText(UI_FONT_ID, 20, 60, "No EPUBs found"); diff --git a/src/activities/settings/SettingsActivity.cpp b/src/activities/settings/SettingsActivity.cpp index 37f2e5a..f7af052 100644 --- a/src/activities/settings/SettingsActivity.cpp +++ b/src/activities/settings/SettingsActivity.cpp @@ -169,7 +169,7 @@ void SettingsActivity::render() const { } // Draw help text - renderer.drawText(SMALL_FONT_ID, 20, pageHeight - 30, "Press OK to toggle, BACK to save & exit"); + renderer.drawButtonHints(UI_FONT_ID, "« Save", "Toggle", "", ""); renderer.drawText(SMALL_FONT_ID, pageWidth - 20 - renderer.getTextWidth(SMALL_FONT_ID, CROSSPOINT_VERSION), pageHeight - 30, CROSSPOINT_VERSION); From b77af16caa3e1c668d57fd6dec2aaa06b9e223f0 Mon Sep 17 00:00:00 2001 From: Eunchurn Park Date: Fri, 26 Dec 2025 09:55:23 +0900 Subject: [PATCH 03/71] Add Continue Reading menu and remember last book folder (#129) ## Summary * **What is the goal of this PR?** Add a "Continue Reading" feature to improve user experience when returning to a previously opened book. * **What changes are included?** - Add dynamic "Continue: " menu item in Home screen when a book was previously opened - File browser now starts from the folder of the last opened book instead of always starting from root directory - Menu dynamically shows 3 or 4 items based on reading history: - Without history: `Browse`, `File transfer`, `Settings` - With history: `Continue: `, `Browse`, `File transfer`, `Settings` ## Additional Context * This feature leverages the existing `APP_STATE.openEpubPath` which already persists the last opened book path * The Continue Reading menu only appears if the book file still exists on the SD card * Book name in the menu is truncated to 25 characters with "..." suffix if too long * If the last book's folder was deleted, the file browser gracefully falls back to root directory * No new dependencies or significant memory overhead - reuses existing state management --- src/activities/home/HomeActivity.cpp | 80 +++++++++++++++---- src/activities/home/HomeActivity.h | 7 +- src/activities/reader/EpubReaderActivity.cpp | 10 ++- src/activities/reader/EpubReaderActivity.h | 8 +- .../reader/FileSelectionActivity.cpp | 33 +++++--- src/activities/reader/FileSelectionActivity.h | 7 +- src/activities/reader/ReaderActivity.cpp | 24 +++++- src/activities/reader/ReaderActivity.h | 4 +- src/main.cpp | 4 +- 9 files changed, 140 insertions(+), 37 deletions(-) diff --git a/src/activities/home/HomeActivity.cpp b/src/activities/home/HomeActivity.cpp index 68e64b3..38dc854 100644 --- a/src/activities/home/HomeActivity.cpp +++ b/src/activities/home/HomeActivity.cpp @@ -4,22 +4,24 @@ #include #include +#include "CrossPointState.h" #include "config.h" -namespace { -constexpr int menuItemCount = 3; -} - void HomeActivity::taskTrampoline(void* param) { auto* self = static_cast(param); self->displayTaskLoop(); } +int HomeActivity::getMenuItemCount() const { return hasContinueReading ? 4 : 3; } + void HomeActivity::onEnter() { Activity::onEnter(); renderingMutex = xSemaphoreCreateMutex(); + // Check if we have a book to continue reading + hasContinueReading = !APP_STATE.openEpubPath.empty() && SD.exists(APP_STATE.openEpubPath.c_str()); + selectorIndex = 0; // Trigger first update @@ -52,19 +54,35 @@ void HomeActivity::loop() { const bool nextPressed = inputManager.wasPressed(InputManager::BTN_DOWN) || inputManager.wasPressed(InputManager::BTN_RIGHT); + const int menuCount = getMenuItemCount(); + if (inputManager.wasPressed(InputManager::BTN_CONFIRM)) { - if (selectorIndex == 0) { - onReaderOpen(); - } else if (selectorIndex == 1) { - onFileTransferOpen(); - } else if (selectorIndex == 2) { - onSettingsOpen(); + if (hasContinueReading) { + // Menu: Continue Reading, Browse, File transfer, Settings + if (selectorIndex == 0) { + onContinueReading(); + } else if (selectorIndex == 1) { + onReaderOpen(); + } else if (selectorIndex == 2) { + onFileTransferOpen(); + } else if (selectorIndex == 3) { + onSettingsOpen(); + } + } else { + // Menu: Browse, File transfer, Settings + if (selectorIndex == 0) { + onReaderOpen(); + } else if (selectorIndex == 1) { + onFileTransferOpen(); + } else if (selectorIndex == 2) { + onSettingsOpen(); + } } } else if (prevPressed) { - selectorIndex = (selectorIndex + menuItemCount - 1) % menuItemCount; + selectorIndex = (selectorIndex + menuCount - 1) % menuCount; updateRequired = true; } else if (nextPressed) { - selectorIndex = (selectorIndex + 1) % menuItemCount; + selectorIndex = (selectorIndex + 1) % menuCount; updateRequired = true; } } @@ -89,9 +107,41 @@ void HomeActivity::render() const { // Draw selection renderer.fillRect(0, 60 + selectorIndex * 30 + 2, pageWidth - 1, 30); - renderer.drawText(UI_FONT_ID, 20, 60, "Read", selectorIndex != 0); - renderer.drawText(UI_FONT_ID, 20, 90, "File transfer", selectorIndex != 1); - renderer.drawText(UI_FONT_ID, 20, 120, "Settings", selectorIndex != 2); + + int menuY = 60; + int menuIndex = 0; + + if (hasContinueReading) { + // Extract filename from path for display + std::string bookName = APP_STATE.openEpubPath; + const size_t lastSlash = bookName.find_last_of('/'); + if (lastSlash != std::string::npos) { + bookName = bookName.substr(lastSlash + 1); + } + // Remove .epub extension + if (bookName.length() > 5 && bookName.substr(bookName.length() - 5) == ".epub") { + bookName.resize(bookName.length() - 5); + } + // Truncate if too long + if (bookName.length() > 25) { + bookName.resize(22); + bookName += "..."; + } + std::string continueLabel = "Continue: " + bookName; + renderer.drawText(UI_FONT_ID, 20, menuY, continueLabel.c_str(), selectorIndex != menuIndex); + menuY += 30; + menuIndex++; + } + + renderer.drawText(UI_FONT_ID, 20, menuY, "Browse", selectorIndex != menuIndex); + menuY += 30; + menuIndex++; + + renderer.drawText(UI_FONT_ID, 20, menuY, "File transfer", selectorIndex != menuIndex); + menuY += 30; + menuIndex++; + + renderer.drawText(UI_FONT_ID, 20, menuY, "Settings", selectorIndex != menuIndex); renderer.drawButtonHints(UI_FONT_ID, "Back", "Confirm", "Left", "Right"); diff --git a/src/activities/home/HomeActivity.h b/src/activities/home/HomeActivity.h index 943a466..0704819 100644 --- a/src/activities/home/HomeActivity.h +++ b/src/activities/home/HomeActivity.h @@ -12,6 +12,8 @@ class HomeActivity final : public Activity { SemaphoreHandle_t renderingMutex = nullptr; int selectorIndex = 0; bool updateRequired = false; + bool hasContinueReading = false; + const std::function onContinueReading; const std::function onReaderOpen; const std::function onSettingsOpen; const std::function onFileTransferOpen; @@ -19,11 +21,14 @@ class HomeActivity final : public Activity { static void taskTrampoline(void* param); [[noreturn]] void displayTaskLoop(); void render() const; + int getMenuItemCount() const; public: - explicit HomeActivity(GfxRenderer& renderer, InputManager& inputManager, const std::function& onReaderOpen, + explicit HomeActivity(GfxRenderer& renderer, InputManager& inputManager, + const std::function& onContinueReading, const std::function& onReaderOpen, const std::function& onSettingsOpen, const std::function& onFileTransferOpen) : Activity("Home", renderer, inputManager), + onContinueReading(onContinueReading), onReaderOpen(onReaderOpen), onSettingsOpen(onSettingsOpen), onFileTransferOpen(onFileTransferOpen) {} diff --git a/src/activities/reader/EpubReaderActivity.cpp b/src/activities/reader/EpubReaderActivity.cpp index 6195ec2..f4905d6 100644 --- a/src/activities/reader/EpubReaderActivity.cpp +++ b/src/activities/reader/EpubReaderActivity.cpp @@ -14,6 +14,7 @@ namespace { constexpr int pagesPerRefresh = 15; constexpr unsigned long skipChapterMs = 700; +constexpr unsigned long goHomeMs = 1000; constexpr float lineCompression = 0.95f; constexpr int marginTop = 8; constexpr int marginRight = 10; @@ -108,7 +109,14 @@ void EpubReaderActivity::loop() { xSemaphoreGive(renderingMutex); } - if (inputManager.wasPressed(InputManager::BTN_BACK)) { + // Long press BACK (1s+) goes directly to home + if (inputManager.isPressed(InputManager::BTN_BACK) && inputManager.getHeldTime() >= goHomeMs) { + onGoHome(); + return; + } + + // Short press BACK goes to file selection + if (inputManager.wasReleased(InputManager::BTN_BACK) && inputManager.getHeldTime() < goHomeMs) { onGoBack(); return; } diff --git a/src/activities/reader/EpubReaderActivity.h b/src/activities/reader/EpubReaderActivity.h index 4edbabc..143f56b 100644 --- a/src/activities/reader/EpubReaderActivity.h +++ b/src/activities/reader/EpubReaderActivity.h @@ -17,6 +17,7 @@ class EpubReaderActivity final : public ActivityWithSubactivity { int pagesUntilFullRefresh = 0; bool updateRequired = false; const std::function onGoBack; + const std::function onGoHome; static void taskTrampoline(void* param); [[noreturn]] void displayTaskLoop(); @@ -26,8 +27,11 @@ class EpubReaderActivity final : public ActivityWithSubactivity { public: explicit EpubReaderActivity(GfxRenderer& renderer, InputManager& inputManager, std::unique_ptr epub, - const std::function& onGoBack) - : ActivityWithSubactivity("EpubReader", renderer, inputManager), epub(std::move(epub)), onGoBack(onGoBack) {} + const std::function& onGoBack, const std::function& onGoHome) + : ActivityWithSubactivity("EpubReader", renderer, inputManager), + epub(std::move(epub)), + onGoBack(onGoBack), + onGoHome(onGoHome) {} void onEnter() override; void onExit() override; void loop() override; diff --git a/src/activities/reader/FileSelectionActivity.cpp b/src/activities/reader/FileSelectionActivity.cpp index d6504b8..853b06f 100644 --- a/src/activities/reader/FileSelectionActivity.cpp +++ b/src/activities/reader/FileSelectionActivity.cpp @@ -9,6 +9,7 @@ namespace { constexpr int PAGE_ITEMS = 23; constexpr int SKIP_PAGE_MS = 700; +constexpr unsigned long GO_HOME_MS = 1000; } // namespace void sortFileList(std::vector& strs) { @@ -53,7 +54,7 @@ void FileSelectionActivity::onEnter() { renderingMutex = xSemaphoreCreateMutex(); - basepath = "/"; + // basepath is set via constructor parameter (defaults to "/" if not specified) loadFiles(); selectorIndex = 0; @@ -83,6 +84,16 @@ void FileSelectionActivity::onExit() { } void FileSelectionActivity::loop() { + // Long press BACK (1s+) goes to root folder + if (inputManager.isPressed(InputManager::BTN_BACK) && inputManager.getHeldTime() >= GO_HOME_MS) { + if (basepath != "/") { + basepath = "/"; + loadFiles(); + updateRequired = true; + } + return; + } + const bool prevReleased = inputManager.wasReleased(InputManager::BTN_UP) || inputManager.wasReleased(InputManager::BTN_LEFT); const bool nextReleased = @@ -103,15 +114,17 @@ void FileSelectionActivity::loop() { } else { onSelect(basepath + files[selectorIndex]); } - } else if (inputManager.wasPressed(InputManager::BTN_BACK)) { - if (basepath != "/") { - basepath.replace(basepath.find_last_of('/'), std::string::npos, ""); - if (basepath.empty()) basepath = "/"; - loadFiles(); - updateRequired = true; - } else { - // At root level, go back home - onGoHome(); + } else if (inputManager.wasReleased(InputManager::BTN_BACK)) { + // Short press: go up one directory, or go home if at root + if (inputManager.getHeldTime() < GO_HOME_MS) { + if (basepath != "/") { + basepath.replace(basepath.find_last_of('/'), std::string::npos, ""); + if (basepath.empty()) basepath = "/"; + loadFiles(); + updateRequired = true; + } else { + onGoHome(); + } } } else if (prevReleased) { if (skipPage) { diff --git a/src/activities/reader/FileSelectionActivity.h b/src/activities/reader/FileSelectionActivity.h index 2a8f8ae..f642e20 100644 --- a/src/activities/reader/FileSelectionActivity.h +++ b/src/activities/reader/FileSelectionActivity.h @@ -27,8 +27,11 @@ class FileSelectionActivity final : public Activity { public: explicit FileSelectionActivity(GfxRenderer& renderer, InputManager& inputManager, const std::function& onSelect, - const std::function& onGoHome) - : Activity("FileSelection", renderer, inputManager), onSelect(onSelect), onGoHome(onGoHome) {} + const std::function& onGoHome, std::string initialPath = "/") + : Activity("FileSelection", renderer, inputManager), + basepath(initialPath.empty() ? "/" : std::move(initialPath)), + onSelect(onSelect), + onGoHome(onGoHome) {} void onEnter() override; void onExit() override; void loop() override; diff --git a/src/activities/reader/ReaderActivity.cpp b/src/activities/reader/ReaderActivity.cpp index d888fb6..519a33a 100644 --- a/src/activities/reader/ReaderActivity.cpp +++ b/src/activities/reader/ReaderActivity.cpp @@ -7,6 +7,14 @@ #include "FileSelectionActivity.h" #include "activities/util/FullScreenMessageActivity.h" +std::string ReaderActivity::extractFolderPath(const std::string& filePath) { + const auto lastSlash = filePath.find_last_of('/'); + if (lastSlash == std::string::npos || lastSlash == 0) { + return "/"; + } + return filePath.substr(0, lastSlash); +} + std::unique_ptr ReaderActivity::loadEpub(const std::string& path) { if (!SD.exists(path.c_str())) { Serial.printf("[%lu] [ ] File does not exist: %s\n", millis(), path.c_str()); @@ -23,6 +31,7 @@ std::unique_ptr ReaderActivity::loadEpub(const std::string& path) { } void ReaderActivity::onSelectEpubFile(const std::string& path) { + currentEpubPath = path; // Track current book path exitActivity(); enterNewActivity(new FullScreenMessageActivity(renderer, inputManager, "Loading...")); @@ -38,25 +47,32 @@ void ReaderActivity::onSelectEpubFile(const std::string& path) { } } -void ReaderActivity::onGoToFileSelection() { +void ReaderActivity::onGoToFileSelection(const std::string& fromEpubPath) { exitActivity(); + // If coming from a book, start in that book's folder; otherwise start from root + const auto initialPath = fromEpubPath.empty() ? "/" : extractFolderPath(fromEpubPath); enterNewActivity(new FileSelectionActivity( - renderer, inputManager, [this](const std::string& path) { onSelectEpubFile(path); }, onGoBack)); + renderer, inputManager, [this](const std::string& path) { onSelectEpubFile(path); }, onGoBack, initialPath)); } void ReaderActivity::onGoToEpubReader(std::unique_ptr epub) { + const auto epubPath = epub->getPath(); + currentEpubPath = epubPath; exitActivity(); - enterNewActivity(new EpubReaderActivity(renderer, inputManager, std::move(epub), [this] { onGoToFileSelection(); })); + enterNewActivity(new EpubReaderActivity( + renderer, inputManager, std::move(epub), [this, epubPath] { onGoToFileSelection(epubPath); }, + [this] { onGoBack(); })); } void ReaderActivity::onEnter() { ActivityWithSubactivity::onEnter(); if (initialEpubPath.empty()) { - onGoToFileSelection(); + onGoToFileSelection(); // Start from root when entering via Browse return; } + currentEpubPath = initialEpubPath; auto epub = loadEpub(initialEpubPath); if (!epub) { onGoBack(); diff --git a/src/activities/reader/ReaderActivity.h b/src/activities/reader/ReaderActivity.h index e566d6d..5bb3419 100644 --- a/src/activities/reader/ReaderActivity.h +++ b/src/activities/reader/ReaderActivity.h @@ -7,11 +7,13 @@ class Epub; class ReaderActivity final : public ActivityWithSubactivity { std::string initialEpubPath; + std::string currentEpubPath; // Track current book path for navigation const std::function onGoBack; static std::unique_ptr loadEpub(const std::string& path); + static std::string extractFolderPath(const std::string& filePath); void onSelectEpubFile(const std::string& path); - void onGoToFileSelection(); + void onGoToFileSelection(const std::string& fromEpubPath = ""); void onGoToEpubReader(std::unique_ptr epub); public: diff --git a/src/main.cpp b/src/main.cpp index b71ea39..9b950f1 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -142,6 +142,7 @@ void onGoToReader(const std::string& initialEpubPath) { enterNewActivity(new ReaderActivity(renderer, inputManager, initialEpubPath, onGoHome)); } void onGoToReaderHome() { onGoToReader(std::string()); } +void onContinueReading() { onGoToReader(APP_STATE.openEpubPath); } void onGoToFileTransfer() { exitActivity(); @@ -155,7 +156,8 @@ void onGoToSettings() { void onGoHome() { exitActivity(); - enterNewActivity(new HomeActivity(renderer, inputManager, onGoToReaderHome, onGoToSettings, onGoToFileTransfer)); + enterNewActivity(new HomeActivity(renderer, inputManager, onContinueReading, onGoToReaderHome, onGoToSettings, + onGoToFileTransfer)); } void setupDisplayAndFonts() { From e8c0fb42d445ce208351e03adf34a7e2dcc00891 Mon Sep 17 00:00:00 2001 From: Jonas Diemer Date: Fri, 26 Dec 2025 02:13:40 +0100 Subject: [PATCH 04/71] Network details QR code (#113) Using QRCode library from pio to generate the QR code. Done: - Display QR code for URL in network mode - minor fixes of layout - Display QR for URL in AP mode - Display QR for AP in AP mode --------- Co-authored-by: Dave Allie --- .github/workflows/ci.yml | 6 --- platformio.ini | 1 + .../network/CrossPointWebServerActivity.cpp | 46 ++++++++++++++++++- .../network/WifiSelectionActivity.cpp | 7 ++- 4 files changed, 51 insertions(+), 9 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b1d91ec..be9a6e5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -12,12 +12,6 @@ jobs: - uses: actions/checkout@v6 with: submodules: recursive - - uses: actions/cache@v5 - with: - path: | - ~/.cache/pip - ~/.platformio/.cache - key: ${{ runner.os }}-pio - uses: actions/setup-python@v6 with: python-version: '3.14' diff --git a/platformio.ini b/platformio.ini index 9cd5df2..0fd766a 100644 --- a/platformio.ini +++ b/platformio.ini @@ -40,6 +40,7 @@ lib_deps = InputManager=symlink://open-x4-sdk/libs/hardware/InputManager EInkDisplay=symlink://open-x4-sdk/libs/display/EInkDisplay ArduinoJson @ 7.4.2 + QRCode @ 0.0.1 [env:default] extends = base diff --git a/src/activities/network/CrossPointWebServerActivity.cpp b/src/activities/network/CrossPointWebServerActivity.cpp index 34b1a3a..c370bc2 100644 --- a/src/activities/network/CrossPointWebServerActivity.cpp +++ b/src/activities/network/CrossPointWebServerActivity.cpp @@ -4,8 +4,12 @@ #include #include #include +#include #include +#include +#include + #include "NetworkModeSelectionActivity.h" #include "WifiSelectionActivity.h" #include "config.h" @@ -336,6 +340,28 @@ void CrossPointWebServerActivity::render() const { } } +void drawQRCode(const GfxRenderer& renderer, const int x, const int y, const std::string& data) { + // Implementation of QR code calculation + // The structure to manage the QR code + QRCode qrcode; + uint8_t qrcodeBytes[qrcode_getBufferSize(4)]; + Serial.printf("[%lu] [WEBACT] QR Code (%lu): %s\n", millis(), data.length(), data.c_str()); + + qrcode_initText(&qrcode, qrcodeBytes, 4, ECC_LOW, data.c_str()); + const uint8_t px = 6; // pixels per module + for (uint8_t cy = 0; cy < qrcode.size; cy++) { + for (uint8_t cx = 0; cx < qrcode.size; cx++) { + if (qrcode_getModule(&qrcode, cx, cy)) { + // Serial.print("**"); + renderer.fillRect(x + px * cx, y + px * cy, px, px, true); + } else { + // Serial.print(" "); + } + } + // Serial.print("\n"); + } +} + void CrossPointWebServerActivity::renderServerRunning() const { // Use consistent line spacing constexpr int LINE_SPACING = 28; // Space between lines @@ -344,7 +370,7 @@ void CrossPointWebServerActivity::renderServerRunning() const { if (isApMode) { // AP mode display - center the content block - const int startY = 55; + int startY = 55; renderer.drawCenteredText(UI_FONT_ID, startY, "Hotspot Mode", true, BOLD); @@ -354,6 +380,13 @@ void CrossPointWebServerActivity::renderServerRunning() const { renderer.drawCenteredText(SMALL_FONT_ID, startY + LINE_SPACING * 2, "Connect your device to this WiFi network", true, REGULAR); + renderer.drawCenteredText(SMALL_FONT_ID, startY + LINE_SPACING * 3, + "or scan QR code with your phone to connect to Wifi.", true, REGULAR); + // Show QR code for URL + std::string wifiConfig = std::string("WIFI:T:WPA;S:") + connectedSSID + ";P:" + "" + ";;"; + drawQRCode(renderer, (480 - 6 * 33) / 2, startY + LINE_SPACING * 4, wifiConfig); + + startY += 6 * 29 + 3 * LINE_SPACING; // Show primary URL (hostname) std::string hostnameUrl = std::string("http://") + AP_HOSTNAME + ".local/"; renderer.drawCenteredText(UI_FONT_ID, startY + LINE_SPACING * 3, hostnameUrl.c_str(), true, BOLD); @@ -361,8 +394,12 @@ void CrossPointWebServerActivity::renderServerRunning() const { // Show IP address as fallback std::string ipUrl = "or http://" + connectedIP + "/"; renderer.drawCenteredText(SMALL_FONT_ID, startY + LINE_SPACING * 4, ipUrl.c_str(), true, REGULAR); - renderer.drawCenteredText(SMALL_FONT_ID, startY + LINE_SPACING * 5, "Open this URL in your browser", true, REGULAR); + + // Show QR code for URL + renderer.drawCenteredText(SMALL_FONT_ID, startY + LINE_SPACING * 6, "or scan QR code with your phone:", true, + REGULAR); + drawQRCode(renderer, (480 - 6 * 33) / 2, startY + LINE_SPACING * 7, hostnameUrl); } else { // STA mode display (original behavior) const int startY = 65; @@ -385,6 +422,11 @@ void CrossPointWebServerActivity::renderServerRunning() const { renderer.drawCenteredText(SMALL_FONT_ID, startY + LINE_SPACING * 3, hostnameUrl.c_str(), true, REGULAR); renderer.drawCenteredText(SMALL_FONT_ID, startY + LINE_SPACING * 4, "Open this URL in your browser", true, REGULAR); + + // Show QR code for URL + drawQRCode(renderer, (480 - 6 * 33) / 2, startY + LINE_SPACING * 6, webInfo); + renderer.drawCenteredText(SMALL_FONT_ID, startY + LINE_SPACING * 5, "or scan QR code with your phone:", true, + REGULAR); } renderer.drawButtonHints(UI_FONT_ID, "« Exit", "", "", ""); diff --git a/src/activities/network/WifiSelectionActivity.cpp b/src/activities/network/WifiSelectionActivity.cpp index 80e46ce..68c6481 100644 --- a/src/activities/network/WifiSelectionActivity.cpp +++ b/src/activities/network/WifiSelectionActivity.cpp @@ -150,6 +150,11 @@ void WifiSelectionActivity::processWifiScanResults() { std::sort(networks.begin(), networks.end(), [](const WifiNetworkInfo& a, const WifiNetworkInfo& b) { return a.rssi > b.rssi; }); + // Show networks with PW first + std::sort(networks.begin(), networks.end(), [](const WifiNetworkInfo& a, const WifiNetworkInfo& b) { + return a.hasSavedPassword && !b.hasSavedPassword; + }); + WiFi.scanDelete(); state = WifiSelectionState::NETWORK_LIST; selectedNetworkIndex = 0; @@ -581,7 +586,7 @@ void WifiSelectionActivity::renderConnecting() const { if (state == WifiSelectionState::SCANNING) { renderer.drawCenteredText(UI_FONT_ID, top, "Scanning...", true, REGULAR); } else { - renderer.drawCenteredText(READER_FONT_ID, top - 30, "Connecting...", true, BOLD); + renderer.drawCenteredText(READER_FONT_ID, top - 40, "Connecting...", true, BOLD); std::string ssidInfo = "to " + selectedSSID; if (ssidInfo.length() > 25) { From 98a39374e8609c55fd77641dd8e781f0d5b30868 Mon Sep 17 00:00:00 2001 From: Dave Allie Date: Fri, 26 Dec 2025 11:29:27 +1000 Subject: [PATCH 05/71] Fix QRCode import --- src/activities/network/CrossPointWebServerActivity.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/activities/network/CrossPointWebServerActivity.cpp b/src/activities/network/CrossPointWebServerActivity.cpp index c370bc2..ef31168 100644 --- a/src/activities/network/CrossPointWebServerActivity.cpp +++ b/src/activities/network/CrossPointWebServerActivity.cpp @@ -4,11 +4,10 @@ #include #include #include -#include +#include #include #include -#include #include "NetworkModeSelectionActivity.h" #include "WifiSelectionActivity.h" From aff4dc6628703304c493c7c5224160aa27dacf65 Mon Sep 17 00:00:00 2001 From: Dave Allie Date: Fri, 26 Dec 2025 11:33:41 +1000 Subject: [PATCH 06/71] Fix QRCode import attempt 2 --- src/activities/network/CrossPointWebServerActivity.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/activities/network/CrossPointWebServerActivity.cpp b/src/activities/network/CrossPointWebServerActivity.cpp index ef31168..e0ec682 100644 --- a/src/activities/network/CrossPointWebServerActivity.cpp +++ b/src/activities/network/CrossPointWebServerActivity.cpp @@ -4,8 +4,8 @@ #include #include #include -#include #include +#include #include From 286b47f48937df499e6e4ca83254f265f70f5a09 Mon Sep 17 00:00:00 2001 From: Eunchurn Park Date: Sun, 28 Dec 2025 08:35:45 +0900 Subject: [PATCH 07/71] fix(parser): remove MAX_LINES limit that truncates long chapters (#132) ## Summary * **What is the goal of this PR?** Fixes a bug where text disappears after approximately 25 pages in long chapters during EPUB indexing. * **What changes are included?** - Removed the `MAX_LINES = 1000` hard limit in `ParsedText::computeLineBreaks()` - Added safer infinite loop prevention by checking if `nextBreakIndex <= currentWordIndex` and forcing advancement by one word when stuck ## Additional Context * **Root cause:** The `MAX_LINES = 1000` limit was introduced to prevent infinite loops, but it truncates content in long chapters. For example, a 93KB chapter that generates ~242 pages (~9,680 lines) gets cut off at ~1000 lines, causing blank pages after page 25-27. * **Solution approach:** Instead of a hard line limit, I now detect when the line break algorithm gets stuck (when `nextBreakIndex` doesn't advance) and force progress by moving one word at a time. This preserves the infinite loop protection while allowing all content to be rendered. * **Testing:** Verified with a Korean EPUB containing a 93KB chapter - all 242 pages now render correctly without text disappearing. --- lib/Epub/Epub/ParsedText.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/lib/Epub/Epub/ParsedText.cpp b/lib/Epub/Epub/ParsedText.cpp index d73f80a..c2f13d8 100644 --- a/lib/Epub/Epub/ParsedText.cpp +++ b/lib/Epub/Epub/ParsedText.cpp @@ -111,16 +111,17 @@ std::vector ParsedText::computeLineBreaks(const int pageWidth, const int // Stores the index of the word that starts the next line (last_word_index + 1) std::vector lineBreakIndices; size_t currentWordIndex = 0; - constexpr size_t MAX_LINES = 1000; while (currentWordIndex < totalWordCount) { - if (lineBreakIndices.size() >= MAX_LINES) { - break; + size_t nextBreakIndex = ans[currentWordIndex] + 1; + + // Safety check: prevent infinite loop if nextBreakIndex doesn't advance + if (nextBreakIndex <= currentWordIndex) { + // Force advance by at least one word to avoid infinite loop + nextBreakIndex = currentWordIndex + 1; } - size_t nextBreakIndex = ans[currentWordIndex] + 1; lineBreakIndices.push_back(nextBreakIndex); - currentWordIndex = nextBreakIndex; } From e3d0201365b9a3d5bb0b04fc2b65b36b986481a2 Mon Sep 17 00:00:00 2001 From: Brendan O'Leary Date: Sat, 27 Dec 2025 18:36:26 -0500 Subject: [PATCH 08/71] Add 'Open' button hint to File Selection page (#136) ## Summary In using my build of https://github.com/daveallie/crosspoint-reader/pull/130 I realized that we need a "open" button hint above the second button in the File browser ## Additional Context * Add any other information that might be helpful for the reviewer (e.g., performance implications, potential risks, specific areas to focus on). --- src/activities/reader/FileSelectionActivity.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/activities/reader/FileSelectionActivity.cpp b/src/activities/reader/FileSelectionActivity.cpp index 853b06f..9a1490c 100644 --- a/src/activities/reader/FileSelectionActivity.cpp +++ b/src/activities/reader/FileSelectionActivity.cpp @@ -162,7 +162,7 @@ void FileSelectionActivity::render() const { renderer.drawCenteredText(READER_FONT_ID, 10, "Books", true, BOLD); // Help text - renderer.drawButtonHints(UI_FONT_ID, "« Home", "", "", ""); + renderer.drawButtonHints(UI_FONT_ID, "« Home", "Open", "", ""); if (files.empty()) { renderer.drawText(UI_FONT_ID, 20, 60, "No EPUBs found"); From f96b6ab29c737b8487f8ad30be154b2d7dafe44a Mon Sep 17 00:00:00 2001 From: Eunchurn Park Date: Sun, 28 Dec 2025 08:38:14 +0900 Subject: [PATCH 09/71] Improve EPUB cover image quality with pre-scaling and Atkinson dithering (#116) ## Summary * **What is the goal of this PR?** Replace simple threshold-based grayscale quantization with ordered dithering using a 4x4 Bayer matrix. This eliminates color banding artifacts and produces smoother gradients on e-ink display. * **What changes are included?** - Add 4x4 Bayer dithering matrix for 16-level threshold patterns - Modify `grayscaleTo2Bit()` function to accept pixel coordinates and apply position-based dithering - Replace simple `grayscale >> 6` threshold with ordered dithering algorithm that produces smoother gradients ## Additional Context * Bayer matrix approach: The 4x4 Bayer matrix creates a repeating pattern that distributes quantization error spatially, effectively simulating 16 levels of gray using only 4 actual color levels (black, dark gray, light gray, white). * Cache invalidation: Existing cached `cover.bmp` files will need to be deleted to see the improved rendering, as the converter only runs when the cache is missing. --- lib/GfxRenderer/Bitmap.cpp | 176 ++++- lib/GfxRenderer/Bitmap.h | 9 +- lib/GfxRenderer/GfxRenderer.cpp | 6 +- lib/JpegToBmpConverter/JpegToBmpConverter.cpp | 602 ++++++++++++++++-- lib/JpegToBmpConverter/JpegToBmpConverter.h | 2 +- 5 files changed, 727 insertions(+), 68 deletions(-) diff --git a/lib/GfxRenderer/Bitmap.cpp b/lib/GfxRenderer/Bitmap.cpp index c9ad6f8..a034c75 100644 --- a/lib/GfxRenderer/Bitmap.cpp +++ b/lib/GfxRenderer/Bitmap.cpp @@ -3,6 +3,126 @@ #include #include +// ============================================================================ +// IMAGE PROCESSING OPTIONS - Toggle these to test different configurations +// ============================================================================ +// Note: For cover images, dithering is done in JpegToBmpConverter.cpp +// This file handles BMP reading - use simple quantization to avoid double-dithering +constexpr bool USE_FLOYD_STEINBERG = false; // Disabled - dithering done at JPEG conversion +constexpr bool USE_NOISE_DITHERING = false; // Hash-based noise dithering +// Brightness adjustments: +constexpr bool USE_BRIGHTNESS = false; // true: apply brightness/gamma adjustments +constexpr int BRIGHTNESS_BOOST = 20; // Brightness offset (0-50), only if USE_BRIGHTNESS=true +constexpr bool GAMMA_CORRECTION = false; // Gamma curve, only if USE_BRIGHTNESS=true +// ============================================================================ + +// Integer approximation of gamma correction (brightens midtones) +static inline int applyGamma(int gray) { + if (!GAMMA_CORRECTION) return gray; + const int product = gray * 255; + int x = gray; + if (x > 0) { + x = (x + product / x) >> 1; + x = (x + product / x) >> 1; + } + return x > 255 ? 255 : x; +} + +// Simple quantization without dithering - just divide into 4 levels +static inline uint8_t quantizeSimple(int gray) { + if (USE_BRIGHTNESS) { + gray += BRIGHTNESS_BOOST; + if (gray > 255) gray = 255; + gray = applyGamma(gray); + } + return static_cast(gray >> 6); +} + +// Hash-based noise dithering - survives downsampling without moiré artifacts +static inline uint8_t quantizeNoise(int gray, int x, int y) { + if (USE_BRIGHTNESS) { + gray += BRIGHTNESS_BOOST; + if (gray > 255) gray = 255; + gray = applyGamma(gray); + } + + uint32_t hash = static_cast(x) * 374761393u + static_cast(y) * 668265263u; + hash = (hash ^ (hash >> 13)) * 1274126177u; + const int threshold = static_cast(hash >> 24); + + const int scaled = gray * 3; + if (scaled < 255) { + return (scaled + threshold >= 255) ? 1 : 0; + } else if (scaled < 510) { + return ((scaled - 255) + threshold >= 255) ? 2 : 1; + } else { + return ((scaled - 510) + threshold >= 255) ? 3 : 2; + } +} + +// Main quantization function +static inline uint8_t quantize(int gray, int x, int y) { + if (USE_NOISE_DITHERING) { + return quantizeNoise(gray, x, y); + } else { + return quantizeSimple(gray); + } +} + +// Floyd-Steinberg quantization with error diffusion and serpentine scanning +// Returns 2-bit value (0-3) and updates error buffers +static inline uint8_t quantizeFloydSteinberg(int gray, int x, int width, int16_t* errorCurRow, int16_t* errorNextRow, + bool reverseDir) { + // Add accumulated error to this pixel + int adjusted = gray + errorCurRow[x + 1]; + + // Clamp to valid range + if (adjusted < 0) adjusted = 0; + if (adjusted > 255) adjusted = 255; + + // Quantize to 4 levels (0, 85, 170, 255) + uint8_t quantized; + int quantizedValue; + if (adjusted < 43) { + quantized = 0; + quantizedValue = 0; + } else if (adjusted < 128) { + quantized = 1; + quantizedValue = 85; + } else if (adjusted < 213) { + quantized = 2; + quantizedValue = 170; + } else { + quantized = 3; + quantizedValue = 255; + } + + // Calculate error + int error = adjusted - quantizedValue; + + // Distribute error to neighbors (serpentine: direction-aware) + if (!reverseDir) { + // Left to right + errorCurRow[x + 2] += (error * 7) >> 4; // Right: 7/16 + errorNextRow[x] += (error * 3) >> 4; // Bottom-left: 3/16 + errorNextRow[x + 1] += (error * 5) >> 4; // Bottom: 5/16 + errorNextRow[x + 2] += (error) >> 4; // Bottom-right: 1/16 + } else { + // Right to left (mirrored) + errorCurRow[x] += (error * 7) >> 4; // Left: 7/16 + errorNextRow[x + 2] += (error * 3) >> 4; // Bottom-right: 3/16 + errorNextRow[x + 1] += (error * 5) >> 4; // Bottom: 5/16 + errorNextRow[x] += (error) >> 4; // Bottom-left: 1/16 + } + + return quantized; +} + +Bitmap::~Bitmap() { + delete[] errorCurRow; + delete[] errorNextRow; +} + uint16_t Bitmap::readLE16(File& f) { const int c0 = f.read(); const int c1 = f.read(); @@ -46,6 +166,8 @@ const char* Bitmap::errorToString(BmpReaderError err) { return "UnsupportedCompression (expected BI_RGB or BI_BITFIELDS for 32bpp)"; case BmpReaderError::BadDimensions: return "BadDimensions"; + case BmpReaderError::ImageTooLarge: + return "ImageTooLarge (max 2048x3072)"; case BmpReaderError::PaletteTooLarge: return "PaletteTooLarge"; @@ -99,6 +221,13 @@ BmpReaderError Bitmap::parseHeaders() { if (width <= 0 || height <= 0) return BmpReaderError::BadDimensions; + // Safety limits to prevent memory issues on ESP32 + constexpr int MAX_IMAGE_WIDTH = 2048; + constexpr int MAX_IMAGE_HEIGHT = 3072; + if (width > MAX_IMAGE_WIDTH || height > MAX_IMAGE_HEIGHT) { + return BmpReaderError::ImageTooLarge; + } + // Pre-calculate Row Bytes to avoid doing this every row rowBytes = (width * bpp + 31) / 32 * 4; @@ -115,21 +244,56 @@ BmpReaderError Bitmap::parseHeaders() { return BmpReaderError::SeekPixelDataFailed; } + // Allocate Floyd-Steinberg error buffers if enabled + if (USE_FLOYD_STEINBERG) { + delete[] errorCurRow; + delete[] errorNextRow; + errorCurRow = new int16_t[width + 2](); // +2 for boundary handling + errorNextRow = new int16_t[width + 2](); + lastRowY = -1; + } + return BmpReaderError::Ok; } // packed 2bpp output, 0 = black, 1 = dark gray, 2 = light gray, 3 = white -BmpReaderError Bitmap::readRow(uint8_t* data, uint8_t* rowBuffer) const { +BmpReaderError Bitmap::readRow(uint8_t* data, uint8_t* rowBuffer, int rowY) const { // Note: rowBuffer should be pre-allocated by the caller to size 'rowBytes' if (file.read(rowBuffer, rowBytes) != rowBytes) return BmpReaderError::ShortReadRow; + // Handle Floyd-Steinberg error buffer progression + const bool useFS = USE_FLOYD_STEINBERG && errorCurRow && errorNextRow; + if (useFS) { + // Check if we need to advance to next row (or reset if jumping) + if (rowY != lastRowY + 1 && rowY != 0) { + // Non-sequential row access - reset error buffers + memset(errorCurRow, 0, (width + 2) * sizeof(int16_t)); + memset(errorNextRow, 0, (width + 2) * sizeof(int16_t)); + } else if (rowY > 0) { + // Sequential access - swap buffers + int16_t* temp = errorCurRow; + errorCurRow = errorNextRow; + errorNextRow = temp; + memset(errorNextRow, 0, (width + 2) * sizeof(int16_t)); + } + lastRowY = rowY; + } + uint8_t* outPtr = data; uint8_t currentOutByte = 0; int bitShift = 6; + int currentX = 0; // Helper lambda to pack 2bpp color into the output stream auto packPixel = [&](const uint8_t lum) { - uint8_t color = (lum >> 6); // Simple 2-bit reduction: 0-255 -> 0-3 + uint8_t color; + if (useFS) { + // Floyd-Steinberg error diffusion + color = quantizeFloydSteinberg(lum, currentX, width, errorCurRow, errorNextRow, false); + } else { + // Simple quantization or noise dithering + color = quantize(lum, currentX, rowY); + } currentOutByte |= (color << bitShift); if (bitShift == 0) { *outPtr++ = currentOutByte; @@ -138,6 +302,7 @@ BmpReaderError Bitmap::readRow(uint8_t* data, uint8_t* rowBuffer) const { } else { bitShift -= 2; } + currentX++; }; uint8_t lum; @@ -196,5 +361,12 @@ BmpReaderError Bitmap::rewindToData() const { return BmpReaderError::SeekPixelDataFailed; } + // Reset Floyd-Steinberg error buffers when rewinding + if (USE_FLOYD_STEINBERG && errorCurRow && errorNextRow) { + memset(errorCurRow, 0, (width + 2) * sizeof(int16_t)); + memset(errorNextRow, 0, (width + 2) * sizeof(int16_t)); + lastRowY = -1; + } + return BmpReaderError::Ok; } diff --git a/lib/GfxRenderer/Bitmap.h b/lib/GfxRenderer/Bitmap.h index 88dc88d..744cb61 100644 --- a/lib/GfxRenderer/Bitmap.h +++ b/lib/GfxRenderer/Bitmap.h @@ -15,6 +15,7 @@ enum class BmpReaderError : uint8_t { UnsupportedCompression, BadDimensions, + ImageTooLarge, PaletteTooLarge, SeekPixelDataFailed, @@ -28,8 +29,9 @@ class Bitmap { static const char* errorToString(BmpReaderError err); explicit Bitmap(File& file) : file(file) {} + ~Bitmap(); BmpReaderError parseHeaders(); - BmpReaderError readRow(uint8_t* data, uint8_t* rowBuffer) const; + BmpReaderError readRow(uint8_t* data, uint8_t* rowBuffer, int rowY) const; BmpReaderError rewindToData() const; int getWidth() const { return width; } int getHeight() const { return height; } @@ -49,4 +51,9 @@ class Bitmap { uint16_t bpp = 0; int rowBytes = 0; uint8_t paletteLum[256] = {}; + + // Floyd-Steinberg dithering state (mutable for const methods) + mutable int16_t* errorCurRow = nullptr; + mutable int16_t* errorNextRow = nullptr; + mutable int lastRowY = -1; // Track row progression for error propagation }; diff --git a/lib/GfxRenderer/GfxRenderer.cpp b/lib/GfxRenderer/GfxRenderer.cpp index 6433748..bcd8808 100644 --- a/lib/GfxRenderer/GfxRenderer.cpp +++ b/lib/GfxRenderer/GfxRenderer.cpp @@ -132,7 +132,9 @@ void GfxRenderer::drawBitmap(const Bitmap& bitmap, const int x, const int y, con isScaled = true; } - const uint8_t outputRowSize = (bitmap.getWidth() + 3) / 4; + // Calculate output row size (2 bits per pixel, packed into bytes) + // IMPORTANT: Use int, not uint8_t, to avoid overflow for images > 1020 pixels wide + const int outputRowSize = (bitmap.getWidth() + 3) / 4; auto* outputRow = static_cast(malloc(outputRowSize)); auto* rowBytes = static_cast(malloc(bitmap.getRowBytes())); @@ -154,7 +156,7 @@ void GfxRenderer::drawBitmap(const Bitmap& bitmap, const int x, const int y, con break; } - if (bitmap.readRow(outputRow, rowBytes) != BmpReaderError::Ok) { + if (bitmap.readRow(outputRow, rowBytes, bmpY) != BmpReaderError::Ok) { Serial.printf("[%lu] [GFX] Failed to read row %d from bitmap\n", millis(), bmpY); free(outputRow); free(rowBytes); diff --git a/lib/JpegToBmpConverter/JpegToBmpConverter.cpp b/lib/JpegToBmpConverter/JpegToBmpConverter.cpp index c2c049a..0a19701 100644 --- a/lib/JpegToBmpConverter/JpegToBmpConverter.cpp +++ b/lib/JpegToBmpConverter/JpegToBmpConverter.cpp @@ -13,24 +13,296 @@ struct JpegReadContext { size_t bufferFilled; }; -// Helper function: Convert 8-bit grayscale to 2-bit (0-3) -uint8_t JpegToBmpConverter::grayscaleTo2Bit(const uint8_t grayscale) { - // Simple threshold mapping: - // 0-63 -> 0 (black) - // 64-127 -> 1 (dark gray) - // 128-191 -> 2 (light gray) - // 192-255 -> 3 (white) - return grayscale >> 6; +// ============================================================================ +// IMAGE PROCESSING OPTIONS - Toggle these to test different configurations +// ============================================================================ +constexpr bool USE_8BIT_OUTPUT = false; // true: 8-bit grayscale (no quantization), false: 2-bit (4 levels) +// Dithering method selection (only one should be true, or all false for simple quantization): +constexpr bool USE_ATKINSON = true; // Atkinson dithering (cleaner than F-S, less error diffusion) +constexpr bool USE_FLOYD_STEINBERG = false; // Floyd-Steinberg error diffusion (can cause "worm" artifacts) +constexpr bool USE_NOISE_DITHERING = false; // Hash-based noise dithering (good for downsampling) +// Brightness/Contrast adjustments: +constexpr bool USE_BRIGHTNESS = true; // true: apply brightness/gamma adjustments +constexpr int BRIGHTNESS_BOOST = 10; // Brightness offset (0-50) +constexpr bool GAMMA_CORRECTION = true; // Gamma curve (brightens midtones) +constexpr float CONTRAST_FACTOR = 1.15f; // Contrast multiplier (1.0 = no change, >1 = more contrast) +// Pre-resize to target display size (CRITICAL: avoids dithering artifacts from post-downsampling) +constexpr bool USE_PRESCALE = true; // true: scale image to target size before dithering +constexpr int TARGET_MAX_WIDTH = 480; // Max width for cover images (portrait display width) +constexpr int TARGET_MAX_HEIGHT = 800; // Max height for cover images (portrait display height) +// ============================================================================ + +// Integer approximation of gamma correction (brightens midtones) +// Uses a simple curve: out = 255 * sqrt(in/255) ≈ sqrt(in * 255) +static inline int applyGamma(int gray) { + if (!GAMMA_CORRECTION) return gray; + // Fast integer square root approximation for gamma ~0.5 (brightening) + // This brightens dark/mid tones while preserving highlights + const int product = gray * 255; + // Newton-Raphson integer sqrt (2 iterations for good accuracy) + int x = gray; + if (x > 0) { + x = (x + product / x) >> 1; + x = (x + product / x) >> 1; + } + return x > 255 ? 255 : x; } +// Apply contrast adjustment around midpoint (128) +// factor > 1.0 increases contrast, < 1.0 decreases +static inline int applyContrast(int gray) { + // Integer-based contrast: (gray - 128) * factor + 128 + // Using fixed-point: factor 1.15 ≈ 115/100 + constexpr int factorNum = static_cast(CONTRAST_FACTOR * 100); + int adjusted = ((gray - 128) * factorNum) / 100 + 128; + if (adjusted < 0) adjusted = 0; + if (adjusted > 255) adjusted = 255; + return adjusted; +} + +// Combined brightness/contrast/gamma adjustment +static inline int adjustPixel(int gray) { + if (!USE_BRIGHTNESS) return gray; + + // Order: contrast first, then brightness, then gamma + gray = applyContrast(gray); + gray += BRIGHTNESS_BOOST; + if (gray > 255) gray = 255; + if (gray < 0) gray = 0; + gray = applyGamma(gray); + + return gray; +} + +// Simple quantization without dithering - just divide into 4 levels +static inline uint8_t quantizeSimple(int gray) { + gray = adjustPixel(gray); + // Simple 2-bit quantization: 0-63=0, 64-127=1, 128-191=2, 192-255=3 + return static_cast(gray >> 6); +} + +// Hash-based noise dithering - survives downsampling without moiré artifacts +// Uses integer hash to generate pseudo-random threshold per pixel +static inline uint8_t quantizeNoise(int gray, int x, int y) { + gray = adjustPixel(gray); + + // Generate noise threshold using integer hash (no regular pattern to alias) + uint32_t hash = static_cast(x) * 374761393u + static_cast(y) * 668265263u; + hash = (hash ^ (hash >> 13)) * 1274126177u; + const int threshold = static_cast(hash >> 24); // 0-255 + + // Map gray (0-255) to 4 levels with dithering + const int scaled = gray * 3; + + if (scaled < 255) { + return (scaled + threshold >= 255) ? 1 : 0; + } else if (scaled < 510) { + return ((scaled - 255) + threshold >= 255) ? 2 : 1; + } else { + return ((scaled - 510) + threshold >= 255) ? 3 : 2; + } +} + +// Main quantization function - selects between methods based on config +static inline uint8_t quantize(int gray, int x, int y) { + if (USE_NOISE_DITHERING) { + return quantizeNoise(gray, x, y); + } else { + return quantizeSimple(gray); + } +} + +// Atkinson dithering - distributes only 6/8 (75%) of error for cleaner results +// Error distribution pattern: +// X 1/8 1/8 +// 1/8 1/8 1/8 +// 1/8 +// Less error buildup = fewer artifacts than Floyd-Steinberg +class AtkinsonDitherer { + public: + AtkinsonDitherer(int width) : width(width) { + errorRow0 = new int16_t[width + 4](); // Current row + errorRow1 = new int16_t[width + 4](); // Next row + errorRow2 = new int16_t[width + 4](); // Row after next + } + + ~AtkinsonDitherer() { + delete[] errorRow0; + delete[] errorRow1; + delete[] errorRow2; + } + + uint8_t processPixel(int gray, int x) { + // Apply brightness/contrast/gamma adjustments + gray = adjustPixel(gray); + + // Add accumulated error + int adjusted = gray + errorRow0[x + 2]; + if (adjusted < 0) adjusted = 0; + if (adjusted > 255) adjusted = 255; + + // Quantize to 4 levels + uint8_t quantized; + int quantizedValue; + if (adjusted < 43) { + quantized = 0; + quantizedValue = 0; + } else if (adjusted < 128) { + quantized = 1; + quantizedValue = 85; + } else if (adjusted < 213) { + quantized = 2; + quantizedValue = 170; + } else { + quantized = 3; + quantizedValue = 255; + } + + // Calculate error (only distribute 6/8 = 75%) + int error = (adjusted - quantizedValue) >> 3; // error/8 + + // Distribute 1/8 to each of 6 neighbors + errorRow0[x + 3] += error; // Right + errorRow0[x + 4] += error; // Right+1 + errorRow1[x + 1] += error; // Bottom-left + errorRow1[x + 2] += error; // Bottom + errorRow1[x + 3] += error; // Bottom-right + errorRow2[x + 2] += error; // Two rows down + + return quantized; + } + + void nextRow() { + int16_t* temp = errorRow0; + errorRow0 = errorRow1; + errorRow1 = errorRow2; + errorRow2 = temp; + memset(errorRow2, 0, (width + 4) * sizeof(int16_t)); + } + + void reset() { + memset(errorRow0, 0, (width + 4) * sizeof(int16_t)); + memset(errorRow1, 0, (width + 4) * sizeof(int16_t)); + memset(errorRow2, 0, (width + 4) * sizeof(int16_t)); + } + + private: + int width; + int16_t* errorRow0; + int16_t* errorRow1; + int16_t* errorRow2; +}; + +// Floyd-Steinberg error diffusion dithering with serpentine scanning +// Serpentine scanning alternates direction each row to reduce "worm" artifacts +// Error distribution pattern (left-to-right): +// X 7/16 +// 3/16 5/16 1/16 +// Error distribution pattern (right-to-left, mirrored): +// 1/16 5/16 3/16 +// 7/16 X +class FloydSteinbergDitherer { + public: + FloydSteinbergDitherer(int width) : width(width), rowCount(0) { + errorCurRow = new int16_t[width + 2](); // +2 for boundary handling + errorNextRow = new int16_t[width + 2](); + } + + ~FloydSteinbergDitherer() { + delete[] errorCurRow; + delete[] errorNextRow; + } + + // Process a single pixel and return quantized 2-bit value + // x is the logical x position (0 to width-1), direction handled internally + uint8_t processPixel(int gray, int x, bool reverseDirection) { + // Add accumulated error to this pixel + int adjusted = gray + errorCurRow[x + 1]; + + // Clamp to valid range + if (adjusted < 0) adjusted = 0; + if (adjusted > 255) adjusted = 255; + + // Quantize to 4 levels (0, 85, 170, 255) + uint8_t quantized; + int quantizedValue; + if (adjusted < 43) { + quantized = 0; + quantizedValue = 0; + } else if (adjusted < 128) { + quantized = 1; + quantizedValue = 85; + } else if (adjusted < 213) { + quantized = 2; + quantizedValue = 170; + } else { + quantized = 3; + quantizedValue = 255; + } + + // Calculate error + int error = adjusted - quantizedValue; + + // Distribute error to neighbors (serpentine: direction-aware) + if (!reverseDirection) { + // Left to right: standard distribution + // Right: 7/16 + errorCurRow[x + 2] += (error * 7) >> 4; + // Bottom-left: 3/16 + errorNextRow[x] += (error * 3) >> 4; + // Bottom: 5/16 + errorNextRow[x + 1] += (error * 5) >> 4; + // Bottom-right: 1/16 + errorNextRow[x + 2] += (error) >> 4; + } else { + // Right to left: mirrored distribution + // Left: 7/16 + errorCurRow[x] += (error * 7) >> 4; + // Bottom-right: 3/16 + errorNextRow[x + 2] += (error * 3) >> 4; + // Bottom: 5/16 + errorNextRow[x + 1] += (error * 5) >> 4; + // Bottom-left: 1/16 + errorNextRow[x] += (error) >> 4; + } + + return quantized; + } + + // Call at the end of each row to swap buffers + void nextRow() { + // Swap buffers + int16_t* temp = errorCurRow; + errorCurRow = errorNextRow; + errorNextRow = temp; + // Clear the next row buffer + memset(errorNextRow, 0, (width + 2) * sizeof(int16_t)); + rowCount++; + } + + // Check if current row should be processed in reverse + bool isReverseRow() const { return (rowCount & 1) != 0; } + + // Reset for a new image or MCU block + void reset() { + memset(errorCurRow, 0, (width + 2) * sizeof(int16_t)); + memset(errorNextRow, 0, (width + 2) * sizeof(int16_t)); + rowCount = 0; + } + + private: + int width; + int rowCount; + int16_t* errorCurRow; + int16_t* errorNextRow; +}; + inline void write16(Print& out, const uint16_t value) { - // out.write(reinterpret_cast(&value), 2); out.write(value & 0xFF); out.write((value >> 8) & 0xFF); } inline void write32(Print& out, const uint32_t value) { - // out.write(reinterpret_cast(&value), 4); out.write(value & 0xFF); out.write((value >> 8) & 0xFF); out.write((value >> 16) & 0xFF); @@ -38,13 +310,49 @@ inline void write32(Print& out, const uint32_t value) { } inline void write32Signed(Print& out, const int32_t value) { - // out.write(reinterpret_cast(&value), 4); out.write(value & 0xFF); out.write((value >> 8) & 0xFF); out.write((value >> 16) & 0xFF); out.write((value >> 24) & 0xFF); } +// Helper function: Write BMP header with 8-bit grayscale (256 levels) +void writeBmpHeader8bit(Print& bmpOut, const int width, const int height) { + // Calculate row padding (each row must be multiple of 4 bytes) + const int bytesPerRow = (width + 3) / 4 * 4; // 8 bits per pixel, padded + const int imageSize = bytesPerRow * height; + const uint32_t paletteSize = 256 * 4; // 256 colors * 4 bytes (BGRA) + const uint32_t fileSize = 14 + 40 + paletteSize + imageSize; + + // BMP File Header (14 bytes) + bmpOut.write('B'); + bmpOut.write('M'); + write32(bmpOut, fileSize); + write32(bmpOut, 0); // Reserved + write32(bmpOut, 14 + 40 + paletteSize); // Offset to pixel data + + // DIB Header (BITMAPINFOHEADER - 40 bytes) + write32(bmpOut, 40); + write32Signed(bmpOut, width); + write32Signed(bmpOut, -height); // Negative height = top-down bitmap + write16(bmpOut, 1); // Color planes + write16(bmpOut, 8); // Bits per pixel (8 bits) + write32(bmpOut, 0); // BI_RGB (no compression) + write32(bmpOut, imageSize); + write32(bmpOut, 2835); // xPixelsPerMeter (72 DPI) + write32(bmpOut, 2835); // yPixelsPerMeter (72 DPI) + write32(bmpOut, 256); // colorsUsed + write32(bmpOut, 256); // colorsImportant + + // Color Palette (256 grayscale entries x 4 bytes = 1024 bytes) + for (int i = 0; i < 256; i++) { + bmpOut.write(static_cast(i)); // Blue + bmpOut.write(static_cast(i)); // Green + bmpOut.write(static_cast(i)); // Red + bmpOut.write(static_cast(0)); // Reserved + } +} + // Helper function: Write BMP header with 2-bit color depth void JpegToBmpConverter::writeBmpHeader(Print& bmpOut, const int width, const int height) { // Calculate row padding (each row must be multiple of 4 bytes) @@ -135,13 +443,59 @@ bool JpegToBmpConverter::jpegFileToBmpStream(File& jpegFile, Print& bmpOut) { Serial.printf("[%lu] [JPG] JPEG dimensions: %dx%d, components: %d, MCUs: %dx%d\n", millis(), imageInfo.m_width, imageInfo.m_height, imageInfo.m_comps, imageInfo.m_MCUSPerRow, imageInfo.m_MCUSPerCol); - // Write BMP header - writeBmpHeader(bmpOut, imageInfo.m_width, imageInfo.m_height); + // Safety limits to prevent memory issues on ESP32 + constexpr int MAX_IMAGE_WIDTH = 2048; + constexpr int MAX_IMAGE_HEIGHT = 3072; + constexpr int MAX_MCU_ROW_BYTES = 65536; - // Calculate row parameters - const int bytesPerRow = (imageInfo.m_width * 2 + 31) / 32 * 4; + if (imageInfo.m_width > MAX_IMAGE_WIDTH || imageInfo.m_height > MAX_IMAGE_HEIGHT) { + Serial.printf("[%lu] [JPG] Image too large (%dx%d), max supported: %dx%d\n", millis(), imageInfo.m_width, + imageInfo.m_height, MAX_IMAGE_WIDTH, MAX_IMAGE_HEIGHT); + return false; + } - // Allocate row buffer for packed 2-bit pixels + // Calculate output dimensions (pre-scale to fit display exactly) + int outWidth = imageInfo.m_width; + int outHeight = imageInfo.m_height; + // Use fixed-point scaling (16.16) for sub-pixel accuracy + uint32_t scaleX_fp = 65536; // 1.0 in 16.16 fixed point + uint32_t scaleY_fp = 65536; + bool needsScaling = false; + + if (USE_PRESCALE && (imageInfo.m_width > TARGET_MAX_WIDTH || imageInfo.m_height > TARGET_MAX_HEIGHT)) { + // Calculate scale to fit within target dimensions while maintaining aspect ratio + const float scaleToFitWidth = static_cast(TARGET_MAX_WIDTH) / imageInfo.m_width; + const float scaleToFitHeight = static_cast(TARGET_MAX_HEIGHT) / imageInfo.m_height; + const float scale = (scaleToFitWidth < scaleToFitHeight) ? scaleToFitWidth : scaleToFitHeight; + + outWidth = static_cast(imageInfo.m_width * scale); + outHeight = static_cast(imageInfo.m_height * scale); + + // Ensure at least 1 pixel + if (outWidth < 1) outWidth = 1; + if (outHeight < 1) outHeight = 1; + + // Calculate fixed-point scale factors (source pixels per output pixel) + // scaleX_fp = (srcWidth << 16) / outWidth + scaleX_fp = (static_cast(imageInfo.m_width) << 16) / outWidth; + scaleY_fp = (static_cast(imageInfo.m_height) << 16) / outHeight; + needsScaling = true; + + Serial.printf("[%lu] [JPG] Pre-scaling %dx%d -> %dx%d (fit to %dx%d)\n", millis(), imageInfo.m_width, + imageInfo.m_height, outWidth, outHeight, TARGET_MAX_WIDTH, TARGET_MAX_HEIGHT); + } + + // Write BMP header with output dimensions + int bytesPerRow; + if (USE_8BIT_OUTPUT) { + writeBmpHeader8bit(bmpOut, outWidth, outHeight); + bytesPerRow = (outWidth + 3) / 4 * 4; + } else { + writeBmpHeader(bmpOut, outWidth, outHeight); + bytesPerRow = (outWidth * 2 + 31) / 32 * 4; + } + + // Allocate row buffer auto* rowBuffer = static_cast(malloc(bytesPerRow)); if (!rowBuffer) { Serial.printf("[%lu] [JPG] Failed to allocate row buffer\n", millis()); @@ -152,13 +506,48 @@ bool JpegToBmpConverter::jpegFileToBmpStream(File& jpegFile, Print& bmpOut) { // This is the minimal memory needed for streaming conversion const int mcuPixelHeight = imageInfo.m_MCUHeight; const int mcuRowPixels = imageInfo.m_width * mcuPixelHeight; - auto* mcuRowBuffer = static_cast(malloc(mcuRowPixels)); - if (!mcuRowBuffer) { - Serial.printf("[%lu] [JPG] Failed to allocate MCU row buffer\n", millis()); + + // Validate MCU row buffer size before allocation + if (mcuRowPixels > MAX_MCU_ROW_BYTES) { + Serial.printf("[%lu] [JPG] MCU row buffer too large (%d bytes), max: %d\n", millis(), mcuRowPixels, + MAX_MCU_ROW_BYTES); free(rowBuffer); return false; } + auto* mcuRowBuffer = static_cast(malloc(mcuRowPixels)); + if (!mcuRowBuffer) { + Serial.printf("[%lu] [JPG] Failed to allocate MCU row buffer (%d bytes)\n", millis(), mcuRowPixels); + free(rowBuffer); + return false; + } + + // Create ditherer if enabled (only for 2-bit output) + // Use OUTPUT dimensions for dithering (after prescaling) + AtkinsonDitherer* atkinsonDitherer = nullptr; + FloydSteinbergDitherer* fsDitherer = nullptr; + if (!USE_8BIT_OUTPUT) { + if (USE_ATKINSON) { + atkinsonDitherer = new AtkinsonDitherer(outWidth); + } else if (USE_FLOYD_STEINBERG) { + fsDitherer = new FloydSteinbergDitherer(outWidth); + } + } + + // For scaling: accumulate source rows into scaled output rows + // We need to track which source Y maps to which output Y + // Using fixed-point: srcY_fp = outY * scaleY_fp (gives source Y in 16.16 format) + uint32_t* rowAccum = nullptr; // Accumulator for each output X (32-bit for larger sums) + uint16_t* rowCount = nullptr; // Count of source pixels accumulated per output X + int currentOutY = 0; // Current output row being accumulated + uint32_t nextOutY_srcStart = 0; // Source Y where next output row starts (16.16 fixed point) + + if (needsScaling) { + rowAccum = new uint32_t[outWidth](); + rowCount = new uint16_t[outWidth](); + nextOutY_srcStart = scaleY_fp; // First boundary is at scaleY_fp (source Y for outY=1) + } + // Process MCUs row-by-row and write to BMP as we go (top-down) const int mcuPixelWidth = imageInfo.m_MCUWidth; @@ -181,75 +570,164 @@ bool JpegToBmpConverter::jpegFileToBmpStream(File& jpegFile, Print& bmpOut) { return false; } - // Process MCU block into MCU row buffer - // MCUs are composed of 8x8 blocks. For 16x16 MCUs, there are four 8x8 blocks: - // Block layout for 16x16 MCU: [0, 64] (top row of blocks) - // [128, 192] (bottom row of blocks) + // picojpeg stores MCU data in 8x8 blocks + // Block layout: H2V2(16x16)=0,64,128,192 H2V1(16x8)=0,64 H1V2(8x16)=0,128 for (int blockY = 0; blockY < mcuPixelHeight; blockY++) { for (int blockX = 0; blockX < mcuPixelWidth; blockX++) { const int pixelX = mcuX * mcuPixelWidth + blockX; + if (pixelX >= imageInfo.m_width) continue; - // Skip pixels outside image width (can happen with MCU alignment) - if (pixelX >= imageInfo.m_width) { - continue; - } + // Calculate proper block offset for picojpeg buffer + const int blockCol = blockX / 8; + const int blockRow = blockY / 8; + const int localX = blockX % 8; + const int localY = blockY % 8; + const int blocksPerRow = mcuPixelWidth / 8; + const int blockIndex = blockRow * blocksPerRow + blockCol; + const int pixelOffset = blockIndex * 64 + localY * 8 + localX; - // Calculate which 8x8 block and position within that block - const int block8x8Col = blockX / 8; // 0 or 1 for 16-wide MCU - const int block8x8Row = blockY / 8; // 0 or 1 for 16-tall MCU - const int pixelInBlockX = blockX % 8; - const int pixelInBlockY = blockY % 8; - - // Calculate byte offset: each 8x8 block is 64 bytes - // Blocks are arranged: [0, 64], [128, 192] - const int blockOffset = (block8x8Row * (mcuPixelWidth / 8) + block8x8Col) * 64; - const int mcuIndex = blockOffset + pixelInBlockY * 8 + pixelInBlockX; - - // Get grayscale value uint8_t gray; if (imageInfo.m_comps == 1) { - // Grayscale image - gray = imageInfo.m_pMCUBufR[mcuIndex]; + gray = imageInfo.m_pMCUBufR[pixelOffset]; } else { - // RGB image - convert to grayscale - const uint8_t r = imageInfo.m_pMCUBufR[mcuIndex]; - const uint8_t g = imageInfo.m_pMCUBufG[mcuIndex]; - const uint8_t b = imageInfo.m_pMCUBufB[mcuIndex]; - // Luminance formula: Y = 0.299*R + 0.587*G + 0.114*B - // Using integer approximation: (30*R + 59*G + 11*B) / 100 - gray = (r * 30 + g * 59 + b * 11) / 100; + const uint8_t r = imageInfo.m_pMCUBufR[pixelOffset]; + const uint8_t g = imageInfo.m_pMCUBufG[pixelOffset]; + const uint8_t b = imageInfo.m_pMCUBufB[pixelOffset]; + gray = (r * 25 + g * 50 + b * 25) / 100; } - // Store grayscale value in MCU row buffer mcuRowBuffer[blockY * imageInfo.m_width + pixelX] = gray; } } } - // Write all pixel rows from this MCU row to BMP file + // Process source rows from this MCU row const int startRow = mcuY * mcuPixelHeight; const int endRow = (mcuY + 1) * mcuPixelHeight; for (int y = startRow; y < endRow && y < imageInfo.m_height; y++) { - memset(rowBuffer, 0, bytesPerRow); + const int bufferY = y - startRow; - // Pack 4 pixels per byte (2 bits each) - for (int x = 0; x < imageInfo.m_width; x++) { - const int bufferY = y - startRow; - const uint8_t gray = mcuRowBuffer[bufferY * imageInfo.m_width + x]; - const uint8_t twoBit = grayscaleTo2Bit(gray); + if (!needsScaling) { + // No scaling - direct output (1:1 mapping) + memset(rowBuffer, 0, bytesPerRow); - const int byteIndex = (x * 2) / 8; - const int bitOffset = 6 - ((x * 2) % 8); // 6, 4, 2, 0 - rowBuffer[byteIndex] |= (twoBit << bitOffset); + if (USE_8BIT_OUTPUT) { + for (int x = 0; x < outWidth; x++) { + const uint8_t gray = mcuRowBuffer[bufferY * imageInfo.m_width + x]; + rowBuffer[x] = adjustPixel(gray); + } + } else { + for (int x = 0; x < outWidth; x++) { + const uint8_t gray = mcuRowBuffer[bufferY * imageInfo.m_width + x]; + uint8_t twoBit; + if (atkinsonDitherer) { + twoBit = atkinsonDitherer->processPixel(gray, x); + } else if (fsDitherer) { + twoBit = fsDitherer->processPixel(gray, x, fsDitherer->isReverseRow()); + } else { + twoBit = quantize(gray, x, y); + } + const int byteIndex = (x * 2) / 8; + const int bitOffset = 6 - ((x * 2) % 8); + rowBuffer[byteIndex] |= (twoBit << bitOffset); + } + if (atkinsonDitherer) + atkinsonDitherer->nextRow(); + else if (fsDitherer) + fsDitherer->nextRow(); + } + bmpOut.write(rowBuffer, bytesPerRow); + } else { + // Fixed-point area averaging for exact fit scaling + // For each output pixel X, accumulate source pixels that map to it + // srcX range for outX: [outX * scaleX_fp >> 16, (outX+1) * scaleX_fp >> 16) + const uint8_t* srcRow = mcuRowBuffer + bufferY * imageInfo.m_width; + + for (int outX = 0; outX < outWidth; outX++) { + // Calculate source X range for this output pixel + const int srcXStart = (static_cast(outX) * scaleX_fp) >> 16; + const int srcXEnd = (static_cast(outX + 1) * scaleX_fp) >> 16; + + // Accumulate all source pixels in this range + int sum = 0; + int count = 0; + for (int srcX = srcXStart; srcX < srcXEnd && srcX < imageInfo.m_width; srcX++) { + sum += srcRow[srcX]; + count++; + } + + // Handle edge case: if no pixels in range, use nearest + if (count == 0 && srcXStart < imageInfo.m_width) { + sum = srcRow[srcXStart]; + count = 1; + } + + rowAccum[outX] += sum; + rowCount[outX] += count; + } + + // Check if we've crossed into the next output row + // Current source Y in fixed point: y << 16 + const uint32_t srcY_fp = static_cast(y + 1) << 16; + + // Output row when source Y crosses the boundary + if (srcY_fp >= nextOutY_srcStart && currentOutY < outHeight) { + memset(rowBuffer, 0, bytesPerRow); + + if (USE_8BIT_OUTPUT) { + for (int x = 0; x < outWidth; x++) { + const uint8_t gray = (rowCount[x] > 0) ? (rowAccum[x] / rowCount[x]) : 0; + rowBuffer[x] = adjustPixel(gray); + } + } else { + for (int x = 0; x < outWidth; x++) { + const uint8_t gray = (rowCount[x] > 0) ? (rowAccum[x] / rowCount[x]) : 0; + uint8_t twoBit; + if (atkinsonDitherer) { + twoBit = atkinsonDitherer->processPixel(gray, x); + } else if (fsDitherer) { + twoBit = fsDitherer->processPixel(gray, x, fsDitherer->isReverseRow()); + } else { + twoBit = quantize(gray, x, currentOutY); + } + const int byteIndex = (x * 2) / 8; + const int bitOffset = 6 - ((x * 2) % 8); + rowBuffer[byteIndex] |= (twoBit << bitOffset); + } + if (atkinsonDitherer) + atkinsonDitherer->nextRow(); + else if (fsDitherer) + fsDitherer->nextRow(); + } + + bmpOut.write(rowBuffer, bytesPerRow); + currentOutY++; + + // Reset accumulators for next output row + memset(rowAccum, 0, outWidth * sizeof(uint32_t)); + memset(rowCount, 0, outWidth * sizeof(uint16_t)); + + // Update boundary for next output row + nextOutY_srcStart = static_cast(currentOutY + 1) * scaleY_fp; + } } - - // Write row with padding - bmpOut.write(rowBuffer, bytesPerRow); } } // Clean up + if (rowAccum) { + delete[] rowAccum; + } + if (rowCount) { + delete[] rowCount; + } + if (atkinsonDitherer) { + delete atkinsonDitherer; + } + if (fsDitherer) { + delete fsDitherer; + } free(mcuRowBuffer); free(rowBuffer); diff --git a/lib/JpegToBmpConverter/JpegToBmpConverter.h b/lib/JpegToBmpConverter/JpegToBmpConverter.h index fc881e2..1cb76e5 100644 --- a/lib/JpegToBmpConverter/JpegToBmpConverter.h +++ b/lib/JpegToBmpConverter/JpegToBmpConverter.h @@ -6,7 +6,7 @@ class ZipFile; class JpegToBmpConverter { static void writeBmpHeader(Print& bmpOut, int width, int height); - static uint8_t grayscaleTo2Bit(uint8_t grayscale); + // [COMMENTED OUT] static uint8_t grayscaleTo2Bit(uint8_t grayscale, int x, int y); static unsigned char jpegReadCallback(unsigned char* pBuf, unsigned char buf_size, unsigned char* pBytes_actually_read, void* pCallback_data); From 838246d1479f5aaed50f3eb4d43fd692bd77660f Mon Sep 17 00:00:00 2001 From: 1991AcuraLegend Date: Sat, 27 Dec 2025 17:48:27 -0600 Subject: [PATCH 10/71] Add setting to enable status bar display options (#111) Add setting toggle that allows status bar display options in EpubReader. Supported options would be as follows: - FULL: display as is today - PROGRESS: display progress bar only - BATTERY: display battery only - NONE: hide status bar --------- Co-authored-by: Dave Allie --- src/CrossPointSettings.cpp | 5 +- src/CrossPointSettings.h | 5 + src/activities/reader/EpubReaderActivity.cpp | 132 +++++++++++-------- src/activities/settings/SettingsActivity.cpp | 3 +- 4 files changed, 85 insertions(+), 60 deletions(-) diff --git a/src/CrossPointSettings.cpp b/src/CrossPointSettings.cpp index 467ee9c..83ba59d 100644 --- a/src/CrossPointSettings.cpp +++ b/src/CrossPointSettings.cpp @@ -10,7 +10,7 @@ CrossPointSettings CrossPointSettings::instance; namespace { constexpr uint8_t SETTINGS_FILE_VERSION = 1; -constexpr uint8_t SETTINGS_COUNT = 3; +constexpr uint8_t SETTINGS_COUNT = 4; constexpr char SETTINGS_FILE[] = "/.crosspoint/settings.bin"; } // namespace @@ -28,6 +28,7 @@ bool CrossPointSettings::saveToFile() const { serialization::writePod(outputFile, sleepScreen); serialization::writePod(outputFile, extraParagraphSpacing); serialization::writePod(outputFile, shortPwrBtn); + serialization::writePod(outputFile, statusBar); outputFile.close(); Serial.printf("[%lu] [CPS] Settings saved to file\n", millis()); @@ -60,6 +61,8 @@ bool CrossPointSettings::loadFromFile() { if (++settingsRead >= fileSettingsCount) break; serialization::readPod(inputFile, shortPwrBtn); if (++settingsRead >= fileSettingsCount) break; + serialization::readPod(inputFile, statusBar); + if (++settingsRead >= fileSettingsCount) break; } while (false); inputFile.close(); diff --git a/src/CrossPointSettings.h b/src/CrossPointSettings.h index 14c3332..ab591be 100644 --- a/src/CrossPointSettings.h +++ b/src/CrossPointSettings.h @@ -18,8 +18,13 @@ class CrossPointSettings { // Should match with SettingsActivity text enum SLEEP_SCREEN_MODE { DARK = 0, LIGHT = 1, CUSTOM = 2, COVER = 3 }; + // Status bar display type enum + enum STATUS_BAR_MODE { NONE = 0, NO_PROGRESS = 1, FULL = 2 }; + // Sleep screen settings uint8_t sleepScreen = DARK; + // Status bar settings + uint8_t statusBar = FULL; // Text rendering settings uint8_t extraParagraphSpacing = 1; // Duration of the power button press diff --git a/src/activities/reader/EpubReaderActivity.cpp b/src/activities/reader/EpubReaderActivity.cpp index f4905d6..b224237 100644 --- a/src/activities/reader/EpubReaderActivity.cpp +++ b/src/activities/reader/EpubReaderActivity.cpp @@ -340,71 +340,87 @@ void EpubReaderActivity::renderContents(std::unique_ptr page) { } void EpubReaderActivity::renderStatusBar() const { + // determine visible status bar elements + const bool showProgress = SETTINGS.statusBar == CrossPointSettings::STATUS_BAR_MODE::FULL; + const bool showBattery = SETTINGS.statusBar == CrossPointSettings::STATUS_BAR_MODE::NO_PROGRESS || + SETTINGS.statusBar == CrossPointSettings::STATUS_BAR_MODE::FULL; + const bool showChapterTitle = SETTINGS.statusBar == CrossPointSettings::STATUS_BAR_MODE::NO_PROGRESS || + SETTINGS.statusBar == CrossPointSettings::STATUS_BAR_MODE::FULL; + + // height variable shared by all elements constexpr auto textY = 776; + int percentageTextWidth = 0; + int progressTextWidth = 0; - // Calculate progress in book - const float sectionChapterProg = static_cast(section->currentPage) / section->pageCount; - const uint8_t bookProgress = epub->calculateProgress(currentSpineIndex, sectionChapterProg); + if (showProgress) { + // Calculate progress in book + const float sectionChapterProg = static_cast(section->currentPage) / section->pageCount; + const uint8_t bookProgress = epub->calculateProgress(currentSpineIndex, sectionChapterProg); - // Right aligned text for progress counter - const std::string progress = std::to_string(section->currentPage + 1) + "/" + std::to_string(section->pageCount) + - " " + std::to_string(bookProgress) + "%"; - const auto progressTextWidth = renderer.getTextWidth(SMALL_FONT_ID, progress.c_str()); - renderer.drawText(SMALL_FONT_ID, GfxRenderer::getScreenWidth() - marginRight - progressTextWidth, textY, - progress.c_str()); - - // Left aligned battery icon and percentage - const uint16_t percentage = battery.readPercentage(); - const auto percentageText = std::to_string(percentage) + "%"; - const auto percentageTextWidth = renderer.getTextWidth(SMALL_FONT_ID, percentageText.c_str()); - renderer.drawText(SMALL_FONT_ID, 20 + marginLeft, textY, percentageText.c_str()); - - // 1 column on left, 2 columns on right, 5 columns of battery body - constexpr int batteryWidth = 15; - constexpr int batteryHeight = 10; - constexpr int x = marginLeft; - constexpr int y = 783; - - // Top line - renderer.drawLine(x, y, x + batteryWidth - 4, y); - // Bottom line - renderer.drawLine(x, y + batteryHeight - 1, x + batteryWidth - 4, y + batteryHeight - 1); - // Left line - renderer.drawLine(x, y, x, y + batteryHeight - 1); - // Battery end - renderer.drawLine(x + batteryWidth - 4, y, x + batteryWidth - 4, y + batteryHeight - 1); - renderer.drawLine(x + batteryWidth - 3, y + 2, x + batteryWidth - 1, y + 2); - renderer.drawLine(x + batteryWidth - 3, y + batteryHeight - 3, x + batteryWidth - 1, y + batteryHeight - 3); - renderer.drawLine(x + batteryWidth - 1, y + 2, x + batteryWidth - 1, y + batteryHeight - 3); - - // The +1 is to round up, so that we always fill at least one pixel - int filledWidth = percentage * (batteryWidth - 5) / 100 + 1; - if (filledWidth > batteryWidth - 5) { - filledWidth = batteryWidth - 5; // Ensure we don't overflow + // Right aligned text for progress counter + const std::string progress = std::to_string(section->currentPage + 1) + "/" + std::to_string(section->pageCount) + + " " + std::to_string(bookProgress) + "%"; + progressTextWidth = renderer.getTextWidth(SMALL_FONT_ID, progress.c_str()); + renderer.drawText(SMALL_FONT_ID, GfxRenderer::getScreenWidth() - marginRight - progressTextWidth, textY, + progress.c_str()); } - renderer.fillRect(x + 1, y + 1, filledWidth, batteryHeight - 2); - // Centered chatper title text - // Page width minus existing content with 30px padding on each side - const int titleMarginLeft = 20 + percentageTextWidth + 30 + marginLeft; - const int titleMarginRight = progressTextWidth + 30 + marginRight; - const int availableTextWidth = GfxRenderer::getScreenWidth() - titleMarginLeft - titleMarginRight; - const int tocIndex = epub->getTocIndexForSpineIndex(currentSpineIndex); + if (showBattery) { + // Left aligned battery icon and percentage + const uint16_t percentage = battery.readPercentage(); + const auto percentageText = std::to_string(percentage) + "%"; + percentageTextWidth = renderer.getTextWidth(SMALL_FONT_ID, percentageText.c_str()); + renderer.drawText(SMALL_FONT_ID, 20 + marginLeft, textY, percentageText.c_str()); - std::string title; - int titleWidth; - if (tocIndex == -1) { - title = "Unnamed"; - titleWidth = renderer.getTextWidth(SMALL_FONT_ID, "Unnamed"); - } else { - const auto tocItem = epub->getTocItem(tocIndex); - title = tocItem.title; - titleWidth = renderer.getTextWidth(SMALL_FONT_ID, title.c_str()); - while (titleWidth > availableTextWidth && title.length() > 11) { - title.replace(title.length() - 8, 8, "..."); - titleWidth = renderer.getTextWidth(SMALL_FONT_ID, title.c_str()); + // 1 column on left, 2 columns on right, 5 columns of battery body + constexpr int batteryWidth = 15; + constexpr int batteryHeight = 10; + constexpr int x = marginLeft; + constexpr int y = 783; + + // Top line + renderer.drawLine(x, y, x + batteryWidth - 4, y); + // Bottom line + renderer.drawLine(x, y + batteryHeight - 1, x + batteryWidth - 4, y + batteryHeight - 1); + // Left line + renderer.drawLine(x, y, x, y + batteryHeight - 1); + // Battery end + renderer.drawLine(x + batteryWidth - 4, y, x + batteryWidth - 4, y + batteryHeight - 1); + renderer.drawLine(x + batteryWidth - 3, y + 2, x + batteryWidth - 1, y + 2); + renderer.drawLine(x + batteryWidth - 3, y + batteryHeight - 3, x + batteryWidth - 1, y + batteryHeight - 3); + renderer.drawLine(x + batteryWidth - 1, y + 2, x + batteryWidth - 1, y + batteryHeight - 3); + + // The +1 is to round up, so that we always fill at least one pixel + int filledWidth = percentage * (batteryWidth - 5) / 100 + 1; + if (filledWidth > batteryWidth - 5) { + filledWidth = batteryWidth - 5; // Ensure we don't overflow } + renderer.fillRect(x + 1, y + 1, filledWidth, batteryHeight - 2); } - renderer.drawText(SMALL_FONT_ID, titleMarginLeft + (availableTextWidth - titleWidth) / 2, textY, title.c_str()); + if (showChapterTitle) { + // Centered chatper title text + // Page width minus existing content with 30px padding on each side + const int titleMarginLeft = 20 + percentageTextWidth + 30 + marginLeft; + const int titleMarginRight = progressTextWidth + 30 + marginRight; + const int availableTextWidth = GfxRenderer::getScreenWidth() - titleMarginLeft - titleMarginRight; + const int tocIndex = epub->getTocIndexForSpineIndex(currentSpineIndex); + + std::string title; + int titleWidth; + if (tocIndex == -1) { + title = "Unnamed"; + titleWidth = renderer.getTextWidth(SMALL_FONT_ID, "Unnamed"); + } else { + const auto tocItem = epub->getTocItem(tocIndex); + title = tocItem.title; + titleWidth = renderer.getTextWidth(SMALL_FONT_ID, title.c_str()); + while (titleWidth > availableTextWidth && title.length() > 11) { + title.replace(title.length() - 8, 8, "..."); + titleWidth = renderer.getTextWidth(SMALL_FONT_ID, title.c_str()); + } + } + + renderer.drawText(SMALL_FONT_ID, titleMarginLeft + (availableTextWidth - titleWidth) / 2, textY, title.c_str()); + } } diff --git a/src/activities/settings/SettingsActivity.cpp b/src/activities/settings/SettingsActivity.cpp index f7af052..b71a877 100644 --- a/src/activities/settings/SettingsActivity.cpp +++ b/src/activities/settings/SettingsActivity.cpp @@ -9,10 +9,11 @@ // Define the static settings list namespace { -constexpr int settingsCount = 4; +constexpr int settingsCount = 5; const SettingInfo settingsList[settingsCount] = { // Should match with SLEEP_SCREEN_MODE {"Sleep Screen", SettingType::ENUM, &CrossPointSettings::sleepScreen, {"Dark", "Light", "Custom", "Cover"}}, + {"Status Bar", SettingType::ENUM, &CrossPointSettings::statusBar, {"None", "No Progress", "Full"}}, {"Extra Paragraph Spacing", SettingType::TOGGLE, &CrossPointSettings::extraParagraphSpacing, {}}, {"Short Power Button Click", SettingType::TOGGLE, &CrossPointSettings::shortPwrBtn, {}}, {"Check for updates", SettingType::ACTION, nullptr, {}}, From eabd149371ab63baae5d8751b08fdd7b80e34d5b Mon Sep 17 00:00:00 2001 From: Eunchurn Park Date: Sun, 28 Dec 2025 13:59:44 +0900 Subject: [PATCH 11/71] Add retry logic and progress bar for chapter indexing (#128) ## Summary * **What is the goal of this PR?** Improve reliability and user experience during chapter indexing by adding retry logic for SD card operations and a visual progress bar. * **What changes are included?** - **Retry logic**: Add 3 retry attempts with 50ms delay for ZIP to SD card streaming to handle timing issues after display refresh - **Progress bar**: Display a visual progress bar (0-100%) during chapter indexing based on file read progress, updating every 10% to balance responsiveness with e-ink display limitations ## Additional Context * **Problem observed**: When navigating quickly through books with many chapters (before chapter titles finish rendering), the "Indexing..." screen would appear frozen. Checking the serial log revealed the operation had silently failed, but the UI showed no indication of this. Users would likely assume the device had crashed. Pressing the next button again would resume operation, but this behavior was confusing and unexpected. * **Solution**: - Retry logic handles transient SD card timing failures automatically, so users don't need to manually retry - Progress bar provides visual feedback so users know indexing is actively working (not frozen) * **Why timing issues occur**: After display refresh operations, there can be timing conflicts when immediately starting SD card write operations. This is more likely to happen when rapidly navigating through chapters. * **Progress bar design**: Updates every 10% to avoid excessive e-ink refreshes while still providing meaningful feedback during long indexing operations (especially for large chapters with CJK characters). * **Performance**: Minimal overhead - progress calculation is simple byte counting, and display updates use `FAST_REFRESH` mode. --- lib/Epub/Epub/ParsedText.cpp | 12 +++++ lib/Epub/Epub/Section.cpp | 52 +++++++++++++++---- lib/Epub/Epub/Section.h | 5 +- lib/Epub/Epub/blocks/TextBlock.cpp | 23 +++++++- .../Epub/parsers/ChapterHtmlSlimParser.cpp | 19 +++++++ lib/Epub/Epub/parsers/ChapterHtmlSlimParser.h | 7 ++- src/activities/reader/EpubReaderActivity.cpp | 48 +++++++++++++---- 7 files changed, 141 insertions(+), 25 deletions(-) diff --git a/lib/Epub/Epub/ParsedText.cpp b/lib/Epub/Epub/ParsedText.cpp index c2f13d8..7a045d5 100644 --- a/lib/Epub/Epub/ParsedText.cpp +++ b/lib/Epub/Epub/ParsedText.cpp @@ -106,6 +106,18 @@ std::vector ParsedText::computeLineBreaks(const int pageWidth, const int ans[i] = j; // j is the index of the last word in this optimal line } } + + // Handle oversized word: if no valid configuration found, force single-word line + // This prevents cascade failure where one oversized word breaks all preceding words + if (dp[i] == MAX_COST) { + ans[i] = i; // Just this word on its own line + // Inherit cost from next word to allow subsequent words to find valid configurations + if (i + 1 < static_cast(totalWordCount)) { + dp[i] = dp[i + 1]; + } else { + dp[i] = 0; + } + } } // Stores the index of the word that starts the next line (last_word_index + 1) diff --git a/lib/Epub/Epub/Section.cpp b/lib/Epub/Epub/Section.cpp index 5323a7a..bd46d35 100644 --- a/lib/Epub/Epub/Section.cpp +++ b/lib/Epub/Epub/Section.cpp @@ -115,26 +115,56 @@ bool Section::clearCache() const { bool Section::persistPageDataToSD(const int fontId, const float lineCompression, const int marginTop, const int marginRight, const int marginBottom, const int marginLeft, - const bool extraParagraphSpacing) { + const bool extraParagraphSpacing, const std::function& progressSetupFn, + const std::function& progressFn) { + constexpr size_t MIN_SIZE_FOR_PROGRESS = 50 * 1024; // 50KB const auto localPath = epub->getSpineItem(spineIndex).href; const auto tmpHtmlPath = epub->getCachePath() + "/.tmp_" + std::to_string(spineIndex) + ".html"; - File tmpHtml; - if (!FsHelpers::openFileForWrite("SCT", tmpHtmlPath, tmpHtml)) { - return false; + + // Retry logic for SD card timing issues + bool success = false; + size_t fileSize = 0; + for (int attempt = 0; attempt < 3 && !success; attempt++) { + if (attempt > 0) { + Serial.printf("[%lu] [SCT] Retrying stream (attempt %d)...\n", millis(), attempt + 1); + delay(50); // Brief delay before retry + } + + // Remove any incomplete file from previous attempt before retrying + if (SD.exists(tmpHtmlPath.c_str())) { + SD.remove(tmpHtmlPath.c_str()); + } + + File tmpHtml; + if (!FsHelpers::openFileForWrite("SCT", tmpHtmlPath, tmpHtml)) { + continue; + } + success = epub->readItemContentsToStream(localPath, tmpHtml, 1024); + fileSize = tmpHtml.size(); + tmpHtml.close(); + + // If streaming failed, remove the incomplete file immediately + if (!success && SD.exists(tmpHtmlPath.c_str())) { + SD.remove(tmpHtmlPath.c_str()); + Serial.printf("[%lu] [SCT] Removed incomplete temp file after failed attempt\n", millis()); + } } - bool success = epub->readItemContentsToStream(localPath, tmpHtml, 1024); - tmpHtml.close(); if (!success) { - Serial.printf("[%lu] [SCT] Failed to stream item contents to temp file\n", millis()); + Serial.printf("[%lu] [SCT] Failed to stream item contents to temp file after retries\n", millis()); return false; } - Serial.printf("[%lu] [SCT] Streamed temp HTML to %s\n", millis(), tmpHtmlPath.c_str()); + Serial.printf("[%lu] [SCT] Streamed temp HTML to %s (%d bytes)\n", millis(), tmpHtmlPath.c_str(), fileSize); - ChapterHtmlSlimParser visitor(tmpHtmlPath, renderer, fontId, lineCompression, marginTop, marginRight, marginBottom, - marginLeft, extraParagraphSpacing, - [this](std::unique_ptr page) { this->onPageComplete(std::move(page)); }); + // Only show progress bar for larger chapters where rendering overhead is worth it + if (progressSetupFn && fileSize >= MIN_SIZE_FOR_PROGRESS) { + progressSetupFn(); + } + + ChapterHtmlSlimParser visitor( + tmpHtmlPath, renderer, fontId, lineCompression, marginTop, marginRight, marginBottom, marginLeft, + extraParagraphSpacing, [this](std::unique_ptr page) { this->onPageComplete(std::move(page)); }, progressFn); success = visitor.parseAndBuildPages(); SD.remove(tmpHtmlPath.c_str()); diff --git a/lib/Epub/Epub/Section.h b/lib/Epub/Epub/Section.h index d7a2c72..09a2f90 100644 --- a/lib/Epub/Epub/Section.h +++ b/lib/Epub/Epub/Section.h @@ -1,4 +1,5 @@ #pragma once +#include #include #include "Epub.h" @@ -31,6 +32,8 @@ class Section { void setupCacheDir() const; bool clearCache() const; bool persistPageDataToSD(int fontId, float lineCompression, int marginTop, int marginRight, int marginBottom, - int marginLeft, bool extraParagraphSpacing); + int marginLeft, bool extraParagraphSpacing, + const std::function& progressSetupFn = nullptr, + const std::function& progressFn = nullptr); std::unique_ptr loadPageFromSD() const; }; diff --git a/lib/Epub/Epub/blocks/TextBlock.cpp b/lib/Epub/Epub/blocks/TextBlock.cpp index bb8b14e..ef6fdb5 100644 --- a/lib/Epub/Epub/blocks/TextBlock.cpp +++ b/lib/Epub/Epub/blocks/TextBlock.cpp @@ -4,11 +4,18 @@ #include void TextBlock::render(const GfxRenderer& renderer, const int fontId, const int x, const int y) const { + // Validate iterator bounds before rendering + if (words.size() != wordXpos.size() || words.size() != wordStyles.size()) { + Serial.printf("[%lu] [TXB] Render skipped: size mismatch (words=%u, xpos=%u, styles=%u)\n", millis(), + (uint32_t)words.size(), (uint32_t)wordXpos.size(), (uint32_t)wordStyles.size()); + return; + } + auto wordIt = words.begin(); auto wordStylesIt = wordStyles.begin(); auto wordXposIt = wordXpos.begin(); - for (int i = 0; i < words.size(); i++) { + for (size_t i = 0; i < words.size(); i++) { renderer.drawText(fontId, *wordXposIt + x, y, wordIt->c_str(), true, *wordStylesIt); std::advance(wordIt, 1); @@ -46,6 +53,13 @@ std::unique_ptr TextBlock::deserialize(File& file) { // words serialization::readPod(file, wc); + + // Sanity check: prevent allocation of unreasonably large lists (max 10000 words per block) + if (wc > 10000) { + Serial.printf("[%lu] [TXB] Deserialization failed: word count %u exceeds maximum\n", millis(), wc); + return nullptr; + } + words.resize(wc); for (auto& w : words) serialization::readString(file, w); @@ -59,6 +73,13 @@ std::unique_ptr TextBlock::deserialize(File& file) { wordStyles.resize(sc); for (auto& s : wordStyles) serialization::readPod(file, s); + // Validate data consistency: all three lists must have the same size + if (wc != xc || wc != sc) { + Serial.printf("[%lu] [TXB] Deserialization failed: size mismatch (words=%u, xpos=%u, styles=%u)\n", millis(), wc, + xc, sc); + return nullptr; + } + // style serialization::readPod(file, style); diff --git a/lib/Epub/Epub/parsers/ChapterHtmlSlimParser.cpp b/lib/Epub/Epub/parsers/ChapterHtmlSlimParser.cpp index 766e5ca..d2f1c3e 100644 --- a/lib/Epub/Epub/parsers/ChapterHtmlSlimParser.cpp +++ b/lib/Epub/Epub/parsers/ChapterHtmlSlimParser.cpp @@ -11,6 +11,9 @@ const char* HEADER_TAGS[] = {"h1", "h2", "h3", "h4", "h5", "h6"}; constexpr int NUM_HEADER_TAGS = sizeof(HEADER_TAGS) / sizeof(HEADER_TAGS[0]); +// Minimum file size (in bytes) to show progress bar - smaller chapters don't benefit from it +constexpr size_t MIN_SIZE_FOR_PROGRESS = 50 * 1024; // 50KB + const char* BLOCK_TAGS[] = {"p", "li", "div", "br", "blockquote"}; constexpr int NUM_BLOCK_TAGS = sizeof(BLOCK_TAGS) / sizeof(BLOCK_TAGS[0]); @@ -221,6 +224,11 @@ bool ChapterHtmlSlimParser::parseAndBuildPages() { return false; } + // Get file size for progress calculation + const size_t totalSize = file.size(); + size_t bytesRead = 0; + int lastProgress = -1; + XML_SetUserData(parser, this); XML_SetElementHandler(parser, startElement, endElement); XML_SetCharacterDataHandler(parser, characterData); @@ -249,6 +257,17 @@ bool ChapterHtmlSlimParser::parseAndBuildPages() { return false; } + // Update progress (call every 10% change to avoid too frequent updates) + // Only show progress for larger chapters where rendering overhead is worth it + bytesRead += len; + if (progressFn && totalSize >= MIN_SIZE_FOR_PROGRESS) { + const int progress = static_cast((bytesRead * 100) / totalSize); + if (lastProgress / 10 != progress / 10) { + lastProgress = progress; + progressFn(progress); + } + } + done = file.available() == 0; if (XML_ParseBuffer(parser, static_cast(len), done) == XML_STATUS_ERROR) { diff --git a/lib/Epub/Epub/parsers/ChapterHtmlSlimParser.h b/lib/Epub/Epub/parsers/ChapterHtmlSlimParser.h index 7f74602..7d75317 100644 --- a/lib/Epub/Epub/parsers/ChapterHtmlSlimParser.h +++ b/lib/Epub/Epub/parsers/ChapterHtmlSlimParser.h @@ -18,6 +18,7 @@ class ChapterHtmlSlimParser { const std::string& filepath; GfxRenderer& renderer; std::function)> completePageFn; + std::function progressFn; // Progress callback (0-100) int depth = 0; int skipUntilDepth = INT_MAX; int boldUntilDepth = INT_MAX; @@ -48,7 +49,8 @@ class ChapterHtmlSlimParser { explicit ChapterHtmlSlimParser(const std::string& filepath, GfxRenderer& renderer, const int fontId, const float lineCompression, const int marginTop, const int marginRight, const int marginBottom, const int marginLeft, const bool extraParagraphSpacing, - const std::function)>& completePageFn) + const std::function)>& completePageFn, + const std::function& progressFn = nullptr) : filepath(filepath), renderer(renderer), fontId(fontId), @@ -58,7 +60,8 @@ class ChapterHtmlSlimParser { marginBottom(marginBottom), marginLeft(marginLeft), extraParagraphSpacing(extraParagraphSpacing), - completePageFn(completePageFn) {} + completePageFn(completePageFn), + progressFn(progressFn) {} ~ChapterHtmlSlimParser() = default; bool parseAndBuildPages(); void addLineToPage(std::shared_ptr line); diff --git a/src/activities/reader/EpubReaderActivity.cpp b/src/activities/reader/EpubReaderActivity.cpp index b224237..0dfda4b 100644 --- a/src/activities/reader/EpubReaderActivity.cpp +++ b/src/activities/reader/EpubReaderActivity.cpp @@ -227,23 +227,51 @@ void EpubReaderActivity::renderScreen() { SETTINGS.extraParagraphSpacing)) { Serial.printf("[%lu] [ERS] Cache not found, building...\n", millis()); + // Progress bar dimensions + constexpr int barWidth = 200; + constexpr int barHeight = 10; + constexpr int boxMargin = 20; + const int textWidth = renderer.getTextWidth(READER_FONT_ID, "Indexing..."); + const int boxWidthWithBar = (barWidth > textWidth ? barWidth : textWidth) + boxMargin * 2; + const int boxWidthNoBar = textWidth + boxMargin * 2; + const int boxHeightWithBar = renderer.getLineHeight(READER_FONT_ID) + barHeight + boxMargin * 3; + const int boxHeightNoBar = renderer.getLineHeight(READER_FONT_ID) + boxMargin * 2; + const int boxXWithBar = (GfxRenderer::getScreenWidth() - boxWidthWithBar) / 2; + const int boxXNoBar = (GfxRenderer::getScreenWidth() - boxWidthNoBar) / 2; + constexpr int boxY = 50; + const int barX = boxXWithBar + (boxWidthWithBar - barWidth) / 2; + const int barY = boxY + renderer.getLineHeight(READER_FONT_ID) + boxMargin * 2; + + // Always show "Indexing..." text first { - const int textWidth = renderer.getTextWidth(READER_FONT_ID, "Indexing..."); - constexpr int margin = 20; - const int x = (GfxRenderer::getScreenWidth() - textWidth - margin * 2) / 2; - constexpr int y = 50; - const int w = textWidth + margin * 2; - const int h = renderer.getLineHeight(READER_FONT_ID) + margin * 2; - renderer.fillRect(x, y, w, h, false); - renderer.drawText(READER_FONT_ID, x + margin, y + margin, "Indexing..."); - renderer.drawRect(x + 5, y + 5, w - 10, h - 10); + renderer.fillRect(boxXNoBar, boxY, boxWidthNoBar, boxHeightNoBar, false); + renderer.drawText(READER_FONT_ID, boxXNoBar + boxMargin, boxY + boxMargin, "Indexing..."); + renderer.drawRect(boxXNoBar + 5, boxY + 5, boxWidthNoBar - 10, boxHeightNoBar - 10); renderer.displayBuffer(); pagesUntilFullRefresh = 0; } section->setupCacheDir(); + + // Setup callback - only called for chapters >= 50KB, redraws with progress bar + auto progressSetup = [this, boxXWithBar, boxWidthWithBar, boxHeightWithBar, boxMargin, barX, barY, barWidth, + barHeight]() { + renderer.fillRect(boxXWithBar, boxY, boxWidthWithBar, boxHeightWithBar, false); + renderer.drawText(READER_FONT_ID, boxXWithBar + boxMargin, boxY + boxMargin, "Indexing..."); + renderer.drawRect(boxXWithBar + 5, boxY + 5, boxWidthWithBar - 10, boxHeightWithBar - 10); + renderer.drawRect(barX, barY, barWidth, barHeight); + renderer.displayBuffer(); + }; + + // Progress callback to update progress bar + auto progressCallback = [this, barX, barY, barWidth, barHeight](int progress) { + const int fillWidth = (barWidth - 2) * progress / 100; + renderer.fillRect(barX + 1, barY + 1, fillWidth, barHeight - 2, true); + renderer.displayBuffer(EInkDisplay::FAST_REFRESH); + }; + if (!section->persistPageDataToSD(READER_FONT_ID, lineCompression, marginTop, marginRight, marginBottom, - marginLeft, SETTINGS.extraParagraphSpacing)) { + marginLeft, SETTINGS.extraParagraphSpacing, progressSetup, progressCallback)) { Serial.printf("[%lu] [ERS] Failed to persist page data to SD\n", millis()); section.reset(); return; From 9023b262a17e35bb289e1815013f7f9af4b0de68 Mon Sep 17 00:00:00 2001 From: Dave Allie Date: Sun, 28 Dec 2025 16:06:18 +1000 Subject: [PATCH 12/71] Fix issue where pressing back from chapter select would leave book (#137) ## Summary * Fix issue where pressing back from chapter select would leave book * Rely on `wasReleased` checks instead --- src/activities/reader/EpubReaderChapterSelectionActivity.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/activities/reader/EpubReaderChapterSelectionActivity.cpp b/src/activities/reader/EpubReaderChapterSelectionActivity.cpp index 3754fa0..4b7b7ec 100644 --- a/src/activities/reader/EpubReaderChapterSelectionActivity.cpp +++ b/src/activities/reader/EpubReaderChapterSelectionActivity.cpp @@ -57,9 +57,9 @@ void EpubReaderChapterSelectionActivity::loop() { const bool skipPage = inputManager.getHeldTime() > SKIP_PAGE_MS; - if (inputManager.wasPressed(InputManager::BTN_CONFIRM)) { + if (inputManager.wasReleased(InputManager::BTN_CONFIRM)) { onSelectSpineIndex(selectorIndex); - } else if (inputManager.wasPressed(InputManager::BTN_BACK)) { + } else if (inputManager.wasReleased(InputManager::BTN_BACK)) { onGoBack(); } else if (prevReleased) { if (skipPage) { From 02350c6a9f4b27f5d9ec49dd215c1d9aa8d776c7 Mon Sep 17 00:00:00 2001 From: Dave Allie Date: Sun, 28 Dec 2025 17:57:06 +1000 Subject: [PATCH 13/71] Fix underscore on keyboard and standardize activity (#138) ## Summary * Fix underscore on keyboard * Remove special handling of special row characters * Fix navigating between special row items * Standardize keyboard activity to use standard loop * Fix issue with rendering keyboard non-stop Fixes https://github.com/daveallie/crosspoint-reader/issues/131 --- .../network/WifiSelectionActivity.cpp | 75 ++--- src/activities/util/KeyboardEntryActivity.cpp | 269 ++++++++++-------- src/activities/util/KeyboardEntryActivity.h | 85 ++---- 3 files changed, 207 insertions(+), 222 deletions(-) diff --git a/src/activities/network/WifiSelectionActivity.cpp b/src/activities/network/WifiSelectionActivity.cpp index 68c6481..bfbfeb9 100644 --- a/src/activities/network/WifiSelectionActivity.cpp +++ b/src/activities/network/WifiSelectionActivity.cpp @@ -187,11 +187,21 @@ void WifiSelectionActivity::selectNetwork(const int index) { if (selectedRequiresPassword) { // Show password entry state = WifiSelectionState::PASSWORD_ENTRY; - enterNewActivity(new KeyboardEntryActivity(renderer, inputManager, "Enter WiFi Password", - "", // No initial text - 64, // Max password length - false // Show password by default (hard keyboard to use) - )); + enterNewActivity(new KeyboardEntryActivity( + renderer, inputManager, "Enter WiFi Password", + "", // No initial text + 50, // Y position + 64, // Max password length + false, // Show password by default (hard keyboard to use) + [this](const std::string& text) { + enteredPassword = text; + exitActivity(); + }, + [this] { + state = WifiSelectionState::NETWORK_LIST; + updateRequired = true; + exitActivity(); + })); updateRequired = true; } else { // Connect directly for open networks @@ -208,11 +218,6 @@ void WifiSelectionActivity::attemptConnection() { WiFi.mode(WIFI_STA); - // Get password from keyboard if we just entered it - if (subActivity && !usedSavedPassword) { - enteredPassword = static_cast(subActivity.get())->getText(); - } - if (selectedRequiresPassword && !enteredPassword.empty()) { WiFi.begin(selectedSSID.c_str(), enteredPassword.c_str()); } else { @@ -269,6 +274,11 @@ void WifiSelectionActivity::checkConnectionStatus() { } void WifiSelectionActivity::loop() { + if (subActivity) { + subActivity->loop(); + return; + } + // Check scan progress if (state == WifiSelectionState::SCANNING) { processWifiScanResults(); @@ -281,24 +291,9 @@ void WifiSelectionActivity::loop() { return; } - // Handle password entry state - if (state == WifiSelectionState::PASSWORD_ENTRY && subActivity) { - const auto keyboard = static_cast(subActivity.get()); - keyboard->handleInput(); - - if (keyboard->isComplete()) { - attemptConnection(); - return; - } - - if (keyboard->isCancelled()) { - state = WifiSelectionState::NETWORK_LIST; - exitActivity(); - updateRequired = true; - return; - } - - updateRequired = true; + if (state == WifiSelectionState::PASSWORD_ENTRY) { + // Reach here once password entry finished in subactivity + attemptConnection(); return; } @@ -441,6 +436,10 @@ std::string WifiSelectionActivity::getSignalStrengthIndicator(const int32_t rssi void WifiSelectionActivity::displayTaskLoop() { while (true) { + if (subActivity) { + return; + } + if (updateRequired) { updateRequired = false; xSemaphoreTake(renderingMutex, portMAX_DELAY); @@ -461,9 +460,6 @@ void WifiSelectionActivity::render() const { case WifiSelectionState::NETWORK_LIST: renderNetworkList(); break; - case WifiSelectionState::PASSWORD_ENTRY: - renderPasswordEntry(); - break; case WifiSelectionState::CONNECTING: renderConnecting(); break; @@ -561,23 +557,6 @@ void WifiSelectionActivity::renderNetworkList() const { renderer.drawButtonHints(UI_FONT_ID, "« Back", "Connect", "", ""); } -void WifiSelectionActivity::renderPasswordEntry() const { - // Draw header - renderer.drawCenteredText(READER_FONT_ID, 5, "WiFi Password", true, BOLD); - - // Draw network name with good spacing from header - std::string networkInfo = "Network: " + selectedSSID; - if (networkInfo.length() > 30) { - networkInfo.replace(27, networkInfo.length() - 27, "..."); - } - renderer.drawCenteredText(UI_FONT_ID, 38, networkInfo.c_str(), true, REGULAR); - - // Draw keyboard - if (subActivity) { - static_cast(subActivity.get())->render(58); - } -} - void WifiSelectionActivity::renderConnecting() const { const auto pageHeight = renderer.getScreenHeight(); const auto height = renderer.getLineHeight(UI_FONT_ID); diff --git a/src/activities/util/KeyboardEntryActivity.cpp b/src/activities/util/KeyboardEntryActivity.cpp index b4ed01c..73f3dde 100644 --- a/src/activities/util/KeyboardEntryActivity.cpp +++ b/src/activities/util/KeyboardEntryActivity.cpp @@ -10,41 +10,55 @@ const char* const KeyboardEntryActivity::keyboard[NUM_ROWS] = { // Keyboard layouts - uppercase/symbols const char* const KeyboardEntryActivity::keyboardShift[NUM_ROWS] = {"~!@#$%^&*()_+", "QWERTYUIOP{}|", "ASDFGHJKL:\"", - "ZXCVBNM<>?", "^ _____?", "SPECIAL ROW"}; -void KeyboardEntryActivity::setText(const std::string& newText) { - text = newText; - if (maxLength > 0 && text.length() > maxLength) { - text.resize(maxLength); - } +void KeyboardEntryActivity::taskTrampoline(void* param) { + auto* self = static_cast(param); + self->displayTaskLoop(); } -void KeyboardEntryActivity::reset(const std::string& newTitle, const std::string& newInitialText) { - if (!newTitle.empty()) { - title = newTitle; +void KeyboardEntryActivity::displayTaskLoop() { + while (true) { + if (updateRequired) { + updateRequired = false; + xSemaphoreTake(renderingMutex, portMAX_DELAY); + render(); + xSemaphoreGive(renderingMutex); + } + vTaskDelay(10 / portTICK_PERIOD_MS); } - text = newInitialText; - selectedRow = 0; - selectedCol = 0; - shiftActive = false; - complete = false; - cancelled = false; } void KeyboardEntryActivity::onEnter() { Activity::onEnter(); - // Reset state when entering the activity - complete = false; - cancelled = false; + renderingMutex = xSemaphoreCreateMutex(); + + // Trigger first update + updateRequired = true; + + xTaskCreate(&KeyboardEntryActivity::taskTrampoline, "KeyboardEntryActivity", + 2048, // Stack size + this, // Parameters + 1, // Priority + &displayTaskHandle // Task handle + ); } -void KeyboardEntryActivity::loop() { - handleInput(); - render(10); +void KeyboardEntryActivity::onExit() { + Activity::onExit(); + + // Wait until not rendering to delete task to avoid killing mid-instruction to EPD + xSemaphoreTake(renderingMutex, portMAX_DELAY); + if (displayTaskHandle) { + vTaskDelete(displayTaskHandle); + displayTaskHandle = nullptr; + } + vSemaphoreDelete(renderingMutex); + renderingMutex = nullptr; } -int KeyboardEntryActivity::getRowLength(int row) const { +int KeyboardEntryActivity::getRowLength(const int row) const { if (row < 0 || row >= NUM_ROWS) return 0; // Return actual length of each row based on keyboard layout @@ -58,7 +72,7 @@ int KeyboardEntryActivity::getRowLength(int row) const { case 3: return 10; // zxcvbnm,./ case 4: - return 10; // ^, space (5 wide), backspace, OK (2 wide) + return 10; // caps (2 wide), space (5 wide), backspace (2 wide), OK default: return 0; } @@ -75,8 +89,8 @@ char KeyboardEntryActivity::getSelectedChar() const { void KeyboardEntryActivity::handleKeyPress() { // Handle special row (bottom row with shift, space, backspace, done) - if (selectedRow == SHIFT_ROW) { - if (selectedCol == SHIFT_COL) { + if (selectedRow == SPECIAL_ROW) { + if (selectedCol >= SHIFT_COL && selectedCol < SPACE_COL) { // Shift toggle shiftActive = !shiftActive; return; @@ -90,7 +104,7 @@ void KeyboardEntryActivity::handleKeyPress() { return; } - if (selectedCol == BACKSPACE_COL) { + if (selectedCol >= BACKSPACE_COL && selectedCol < DONE_COL) { // Backspace if (!text.empty()) { text.pop_back(); @@ -100,7 +114,6 @@ void KeyboardEntryActivity::handleKeyPress() { if (selectedCol >= DONE_COL) { // Done button - complete = true; if (onComplete) { onComplete(text); } @@ -109,42 +122,61 @@ void KeyboardEntryActivity::handleKeyPress() { } // Regular character - char c = getSelectedChar(); - if (c != '\0' && c != '^' && c != '_' && c != '<') { - if (maxLength == 0 || text.length() < maxLength) { - text += c; - // Auto-disable shift after typing a letter - if (shiftActive && ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z'))) { - shiftActive = false; - } + const char c = getSelectedChar(); + if (c == '\0') { + return; + } + + if (maxLength == 0 || text.length() < maxLength) { + text += c; + // Auto-disable shift after typing a letter + if (shiftActive && ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z'))) { + shiftActive = false; } } } -bool KeyboardEntryActivity::handleInput() { - if (complete || cancelled) { - return false; - } - - bool handled = false; - +void KeyboardEntryActivity::loop() { // Navigation if (inputManager.wasPressed(InputManager::BTN_UP)) { if (selectedRow > 0) { selectedRow--; // Clamp column to valid range for new row - int maxCol = getRowLength(selectedRow) - 1; + const int maxCol = getRowLength(selectedRow) - 1; if (selectedCol > maxCol) selectedCol = maxCol; } - handled = true; - } else if (inputManager.wasPressed(InputManager::BTN_DOWN)) { + updateRequired = true; + } + + if (inputManager.wasPressed(InputManager::BTN_DOWN)) { if (selectedRow < NUM_ROWS - 1) { selectedRow++; - int maxCol = getRowLength(selectedRow) - 1; + const int maxCol = getRowLength(selectedRow) - 1; if (selectedCol > maxCol) selectedCol = maxCol; } - handled = true; - } else if (inputManager.wasPressed(InputManager::BTN_LEFT)) { + updateRequired = true; + } + + if (inputManager.wasPressed(InputManager::BTN_LEFT)) { + // Special bottom row case + if (selectedRow == SPECIAL_ROW) { + // Bottom row has special key widths + if (selectedCol >= SHIFT_COL && selectedCol < SPACE_COL) { + // In shift key, do nothing + } else if (selectedCol >= SPACE_COL && selectedCol < BACKSPACE_COL) { + // In space bar, move to shift + selectedCol = SHIFT_COL; + } else if (selectedCol >= BACKSPACE_COL && selectedCol < DONE_COL) { + // In backspace, move to space + selectedCol = SPACE_COL; + } else if (selectedCol >= DONE_COL) { + // At done button, move to backspace + selectedCol = BACKSPACE_COL; + } + updateRequired = true; + return; + } + if (selectedCol > 0) { selectedCol--; } else if (selectedRow > 0) { @@ -152,9 +184,31 @@ bool KeyboardEntryActivity::handleInput() { selectedRow--; selectedCol = getRowLength(selectedRow) - 1; } - handled = true; - } else if (inputManager.wasPressed(InputManager::BTN_RIGHT)) { - int maxCol = getRowLength(selectedRow) - 1; + updateRequired = true; + } + + if (inputManager.wasPressed(InputManager::BTN_RIGHT)) { + const int maxCol = getRowLength(selectedRow) - 1; + + // Special bottom row case + if (selectedRow == SPECIAL_ROW) { + // Bottom row has special key widths + if (selectedCol >= SHIFT_COL && selectedCol < SPACE_COL) { + // In shift key, move to space + selectedCol = SPACE_COL; + } else if (selectedCol >= SPACE_COL && selectedCol < BACKSPACE_COL) { + // In space bar, move to backspace + selectedCol = BACKSPACE_COL; + } else if (selectedCol >= BACKSPACE_COL && selectedCol < DONE_COL) { + // In backspace, move to done + selectedCol = DONE_COL; + } else if (selectedCol >= DONE_COL) { + // At done button, do nothing + } + updateRequired = true; + return; + } + if (selectedCol < maxCol) { selectedCol++; } else if (selectedRow < NUM_ROWS - 1) { @@ -162,35 +216,34 @@ bool KeyboardEntryActivity::handleInput() { selectedRow++; selectedCol = 0; } - handled = true; + updateRequired = true; } // Selection if (inputManager.wasPressed(InputManager::BTN_CONFIRM)) { handleKeyPress(); - handled = true; + updateRequired = true; } // Cancel if (inputManager.wasPressed(InputManager::BTN_BACK)) { - cancelled = true; if (onCancel) { onCancel(); } - handled = true; + updateRequired = true; } - - return handled; } -void KeyboardEntryActivity::render(int startY) const { +void KeyboardEntryActivity::render() const { const auto pageWidth = GfxRenderer::getScreenWidth(); + renderer.clearScreen(); + // Draw title renderer.drawCenteredText(UI_FONT_ID, startY, title.c_str(), true, REGULAR); // Draw input field - int inputY = startY + 22; + const int inputY = startY + 22; renderer.drawText(UI_FONT_ID, 10, inputY, "["); std::string displayText; @@ -204,9 +257,9 @@ void KeyboardEntryActivity::render(int startY) const { displayText += "_"; // Truncate if too long for display - use actual character width from font - int charWidth = renderer.getSpaceWidth(UI_FONT_ID); - if (charWidth < 1) charWidth = 8; // Fallback to approximate width - int maxDisplayLen = (pageWidth - 40) / charWidth; + int approxCharWidth = renderer.getSpaceWidth(UI_FONT_ID); + if (approxCharWidth < 1) approxCharWidth = 8; // Fallback to approximate width + const int maxDisplayLen = (pageWidth - 40) / approxCharWidth; if (displayText.length() > static_cast(maxDisplayLen)) { displayText = "..." + displayText.substr(displayText.length() - maxDisplayLen + 3); } @@ -215,22 +268,22 @@ void KeyboardEntryActivity::render(int startY) const { renderer.drawText(UI_FONT_ID, pageWidth - 15, inputY, "]"); // Draw keyboard - use compact spacing to fit 5 rows on screen - int keyboardStartY = inputY + 25; - const int keyWidth = 18; - const int keyHeight = 18; - const int keySpacing = 3; + const int keyboardStartY = inputY + 25; + constexpr int keyWidth = 18; + constexpr int keyHeight = 18; + constexpr int keySpacing = 3; const char* const* layout = shiftActive ? keyboardShift : keyboard; // Calculate left margin to center the longest row (13 keys) - int maxRowWidth = KEYS_PER_ROW * (keyWidth + keySpacing); - int leftMargin = (pageWidth - maxRowWidth) / 2; + constexpr int maxRowWidth = KEYS_PER_ROW * (keyWidth + keySpacing); + const int leftMargin = (pageWidth - maxRowWidth) / 2; for (int row = 0; row < NUM_ROWS; row++) { - int rowY = keyboardStartY + row * (keyHeight + keySpacing); + const int rowY = keyboardStartY + row * (keyHeight + keySpacing); // Left-align all rows for consistent navigation - int startX = leftMargin; + const int startX = leftMargin; // Handle bottom row (row 4) specially with proper multi-column keys if (row == 4) { @@ -240,64 +293,37 @@ void KeyboardEntryActivity::render(int startY) const { int currentX = startX; // CAPS key (logical col 0, spans 2 key widths) - int capsWidth = 2 * keyWidth + keySpacing; - bool capsSelected = (selectedRow == 4 && selectedCol == SHIFT_COL); - if (capsSelected) { - renderer.drawText(UI_FONT_ID, currentX - 2, rowY, "["); - renderer.drawText(UI_FONT_ID, currentX + capsWidth - 4, rowY, "]"); - } - renderer.drawText(UI_FONT_ID, currentX + 2, rowY, shiftActive ? "CAPS" : "caps"); - currentX += capsWidth + keySpacing; + const bool capsSelected = (selectedRow == 4 && selectedCol >= SHIFT_COL && selectedCol < SPACE_COL); + renderItemWithSelector(currentX + 2, rowY, shiftActive ? "CAPS" : "caps", capsSelected); + currentX += 2 * (keyWidth + keySpacing); // Space bar (logical cols 2-6, spans 5 key widths) - int spaceWidth = 5 * keyWidth + 4 * keySpacing; - bool spaceSelected = (selectedRow == 4 && selectedCol >= SPACE_COL && selectedCol < BACKSPACE_COL); - if (spaceSelected) { - renderer.drawText(UI_FONT_ID, currentX - 2, rowY, "["); - renderer.drawText(UI_FONT_ID, currentX + spaceWidth - 4, rowY, "]"); - } - // Draw centered underscores for space bar - int spaceTextX = currentX + (spaceWidth / 2) - 12; - renderer.drawText(UI_FONT_ID, spaceTextX, rowY, "_____"); - currentX += spaceWidth + keySpacing; + const bool spaceSelected = (selectedRow == 4 && selectedCol >= SPACE_COL && selectedCol < BACKSPACE_COL); + const int spaceTextWidth = renderer.getTextWidth(UI_FONT_ID, "_____"); + const int spaceXWidth = 5 * (keyWidth + keySpacing); + const int spaceXPos = currentX + (spaceXWidth - spaceTextWidth) / 2; + renderItemWithSelector(spaceXPos, rowY, "_____", spaceSelected); + currentX += spaceXWidth; // Backspace key (logical col 7, spans 2 key widths) - int bsWidth = 2 * keyWidth + keySpacing; - bool bsSelected = (selectedRow == 4 && selectedCol == BACKSPACE_COL); - if (bsSelected) { - renderer.drawText(UI_FONT_ID, currentX - 2, rowY, "["); - renderer.drawText(UI_FONT_ID, currentX + bsWidth - 4, rowY, "]"); - } - renderer.drawText(UI_FONT_ID, currentX + 6, rowY, "<-"); - currentX += bsWidth + keySpacing; + const bool bsSelected = (selectedRow == 4 && selectedCol >= BACKSPACE_COL && selectedCol < DONE_COL); + renderItemWithSelector(currentX + 2, rowY, "<-", bsSelected); + currentX += 2 * (keyWidth + keySpacing); // OK button (logical col 9, spans 2 key widths) - int okWidth = 2 * keyWidth + keySpacing; - bool okSelected = (selectedRow == 4 && selectedCol >= DONE_COL); - if (okSelected) { - renderer.drawText(UI_FONT_ID, currentX - 2, rowY, "["); - renderer.drawText(UI_FONT_ID, currentX + okWidth - 4, rowY, "]"); - } - renderer.drawText(UI_FONT_ID, currentX + 8, rowY, "OK"); - + const bool okSelected = (selectedRow == 4 && selectedCol >= DONE_COL); + renderItemWithSelector(currentX + 2, rowY, "OK", okSelected); } else { // Regular rows: render each key individually for (int col = 0; col < getRowLength(row); col++) { - int keyX = startX + col * (keyWidth + keySpacing); - // Get the character to display - char c = layout[row][col]; + const char c = layout[row][col]; std::string keyLabel(1, c); + const int charWidth = renderer.getTextWidth(UI_FONT_ID, keyLabel.c_str()); - // Draw selection highlight - bool isSelected = (row == selectedRow && col == selectedCol); - - if (isSelected) { - renderer.drawText(UI_FONT_ID, keyX - 2, rowY, "["); - renderer.drawText(UI_FONT_ID, keyX + keyWidth - 4, rowY, "]"); - } - - renderer.drawText(UI_FONT_ID, keyX + 2, rowY, keyLabel.c_str()); + const int keyX = startX + col * (keyWidth + keySpacing) + (keyWidth - charWidth) / 2; + const bool isSelected = row == selectedRow && col == selectedCol; + renderItemWithSelector(keyX, rowY, keyLabel.c_str(), isSelected); } } } @@ -305,4 +331,15 @@ void KeyboardEntryActivity::render(int startY) const { // Draw help text at absolute bottom of screen (consistent with other screens) const auto pageHeight = GfxRenderer::getScreenHeight(); renderer.drawText(SMALL_FONT_ID, 10, pageHeight - 30, "Navigate: D-pad | Select: OK | Cancel: BACK"); + renderer.displayBuffer(); +} + +void KeyboardEntryActivity::renderItemWithSelector(const int x, const int y, const char* item, + const bool isSelected) const { + if (isSelected) { + const int itemWidth = renderer.getTextWidth(UI_FONT_ID, item); + renderer.drawText(UI_FONT_ID, x - 6, y, "["); + renderer.drawText(UI_FONT_ID, x + itemWidth, y, "]"); + } + renderer.drawText(UI_FONT_ID, x, y, item); } diff --git a/src/activities/util/KeyboardEntryActivity.h b/src/activities/util/KeyboardEntryActivity.h index 3b5b806..552a3e8 100644 --- a/src/activities/util/KeyboardEntryActivity.h +++ b/src/activities/util/KeyboardEntryActivity.h @@ -1,9 +1,13 @@ #pragma once #include #include +#include +#include +#include #include #include +#include #include "../Activity.h" @@ -30,80 +34,44 @@ class KeyboardEntryActivity : public Activity { * @param inputManager Reference to InputManager for handling input * @param title Title to display above the keyboard * @param initialText Initial text to show in the input field + * @param startY Y position to start rendering the keyboard * @param maxLength Maximum length of input text (0 for unlimited) * @param isPassword If true, display asterisks instead of actual characters + * @param onComplete Callback invoked when input is complete + * @param onCancel Callback invoked when input is cancelled */ - KeyboardEntryActivity(GfxRenderer& renderer, InputManager& inputManager, const std::string& title = "Enter Text", - const std::string& initialText = "", const size_t maxLength = 0, const bool isPassword = false) + explicit KeyboardEntryActivity(GfxRenderer& renderer, InputManager& inputManager, std::string title = "Enter Text", + std::string initialText = "", const int startY = 10, const size_t maxLength = 0, + const bool isPassword = false, OnCompleteCallback onComplete = nullptr, + OnCancelCallback onCancel = nullptr) : Activity("KeyboardEntry", renderer, inputManager), - title(title), - text(initialText), + title(std::move(title)), + text(std::move(initialText)), + startY(startY), maxLength(maxLength), - isPassword(isPassword) {} - - /** - * Handle button input. Call this in your main loop. - * @return true if input was handled, false otherwise - */ - bool handleInput(); - - /** - * Render the keyboard at the specified Y position. - * @param startY Y-coordinate where keyboard rendering starts (default 10) - */ - void render(int startY = 10) const; - - /** - * Get the current text entered by the user. - */ - const std::string& getText() const { return text; } - - /** - * Set the current text. - */ - void setText(const std::string& newText); - - /** - * Check if the user has completed text entry (pressed OK on Done). - */ - bool isComplete() const { return complete; } - - /** - * Check if the user has cancelled text entry. - */ - bool isCancelled() const { return cancelled; } - - /** - * Reset the keyboard state for reuse. - */ - void reset(const std::string& newTitle = "", const std::string& newInitialText = ""); - - /** - * Set callback for when input is complete. - */ - void setOnComplete(OnCompleteCallback callback) { onComplete = callback; } - - /** - * Set callback for when input is cancelled. - */ - void setOnCancel(OnCancelCallback callback) { onCancel = callback; } + isPassword(isPassword), + onComplete(std::move(onComplete)), + onCancel(std::move(onCancel)) {} // Activity overrides void onEnter() override; + void onExit() override; void loop() override; private: std::string title; + int startY; std::string text; size_t maxLength; bool isPassword; + TaskHandle_t displayTaskHandle = nullptr; + SemaphoreHandle_t renderingMutex = nullptr; + bool updateRequired = false; // Keyboard state int selectedRow = 0; int selectedCol = 0; bool shiftActive = false; - bool complete = false; - bool cancelled = false; // Callbacks OnCompleteCallback onComplete; @@ -116,16 +84,17 @@ class KeyboardEntryActivity : public Activity { static const char* const keyboardShift[NUM_ROWS]; // Special key positions (bottom row) - static constexpr int SHIFT_ROW = 4; + static constexpr int SPECIAL_ROW = 4; static constexpr int SHIFT_COL = 0; - static constexpr int SPACE_ROW = 4; static constexpr int SPACE_COL = 2; - static constexpr int BACKSPACE_ROW = 4; static constexpr int BACKSPACE_COL = 7; - static constexpr int DONE_ROW = 4; static constexpr int DONE_COL = 9; + static void taskTrampoline(void* param); + [[noreturn]] void displayTaskLoop(); char getSelectedChar() const; void handleKeyPress(); int getRowLength(int row) const; + void render() const; + void renderItemWithSelector(int x, int y, const char* item, bool isSelected) const; }; From bf031fd999c1fc3bd62c3761d27f8ea750dabce4 Mon Sep 17 00:00:00 2001 From: Dave Allie Date: Sun, 28 Dec 2025 19:26:57 +1100 Subject: [PATCH 14/71] Fix exiting WifiSelectionActivity renderer early --- src/activities/network/WifiSelectionActivity.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/activities/network/WifiSelectionActivity.cpp b/src/activities/network/WifiSelectionActivity.cpp index bfbfeb9..57b7af5 100644 --- a/src/activities/network/WifiSelectionActivity.cpp +++ b/src/activities/network/WifiSelectionActivity.cpp @@ -437,7 +437,7 @@ std::string WifiSelectionActivity::getSignalStrengthIndicator(const int32_t rssi void WifiSelectionActivity::displayTaskLoop() { while (true) { if (subActivity) { - return; + continue; } if (updateRequired) { From dd280bdc9727cdefc8ef59b24807164233143a26 Mon Sep 17 00:00:00 2001 From: Tannay Date: Sun, 28 Dec 2025 05:33:20 -0500 Subject: [PATCH 15/71] Rotation Support (#77) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit • What is the goal of this PR? Implement a horizontal EPUB reading mode so books can be read in landscape orientation (both 90° and 270°), while keeping the rest of the UI in portrait. • What changes are included? ◦ Rendering / Display ▪ Added an orientation model to GfxRenderer (Portrait, LandscapeNormal, LandscapeFlipped) and made: ▪ drawPixel, drawImage, displayWindow map logical coordinates differently depending on orientation. ▪ getScreenWidth() / getScreenHeight() return orientation‑aware logical dimensions (480×800 in portrait, 800×480 in landscape). ◦ Settings / Configuration ▪ Extended CrossPointSettings with: ▪ landscapeReading (toggle for portrait vs. landscape EPUB reading). ▪ landscapeFlipped (toggle to flip landscape 180° so both horizontal holding directions are supported). ▪ Updated settings serialization/deserialization to persist these fields while remaining backward‑compatible with existing settings files. ▪ Updated SettingsActivity to expose two new toggles: ▪ “Landscape Reading” ▪ “Flip Landscape (swap top/bottom)” ◦ EPUB Reader ▪ In EpubReaderActivity: ▪ On onEnter, set GfxRenderer orientation based on the new settings (Portrait, LandscapeNormal, or LandscapeFlipped). ▪ On onExit, reset orientation back to Portrait so Home, WiFi, Settings, etc. continue to render as before. ▪ Adjusted renderStatusBar to position the status bar and battery indicator relative to GfxRenderer::getScreenHeight() instead of hard‑coded Y coordinates, so it stays correctly at the bottom in both portrait and landscape. ◦ EPUB Caching / Layout ▪ Extended Section cache metadata (section.bin) to include the logical screenWidth and screenHeight used when pages were generated; bumped SECTION_FILE_VERSION. ▪ Updated loadCacheMetadata to compare: ▪ font/margins/line compression/extraParagraphSpacing and screen dimensions; mismatches now invalidate and clear the cache. ▪ Updated persistPageDataToSD and all call sites in EpubReaderActivity to pass the current GfxRenderer::getScreenWidth() / getScreenHeight() so portrait and landscape caches are kept separate and correctly sized. Additional Context • Cache behavior / migration ◦ Existing section.bin files (old SECTION_FILE_VERSION) will be detected as incompatible and their caches cleared and rebuilt once per chapter when first opened after this change. ◦ Within a given orientation, caches will be reused as before. Switching orientation (portrait ↔ landscape) will cause a one‑time re‑index of each chapter in the new orientation. • Scope and risks ◦ Orientation changes are scoped to the EPUB reader; the Home screen, Settings, WiFi selection, sleep screens, and web server UI continue to assume portrait orientation. ◦ The renderer’s orientation is a static/global setting; if future code uses GfxRenderer outside the reader while a reader instance is active, it should be aware that orientation is no longer implicitly fixed. ◦ All drawing primitives now go through orientation‑aware coordinate transforms; any code that previously relied on edge‑case behavior or out‑of‑bounds writes might surface as logged “Outside range” warnings instead. • Testing suggestions / areas to focus on ◦ Verify in hardware: ▪ Portrait mode still renders correctly (boot, home, settings, WiFi, reader). ▪ Landscape reading in both directions: ▪ Landscape Reading = ON, Flip Landscape = OFF. ▪ Landscape Reading = ON, Flip Landscape = ON. ▪ Status bar (page X/Y, % progress, battery icon) is fully visible and aligned at the bottom in all three combinations. ◦ Open the same book: ▪ In portrait first, then switch to landscape and reopen it. ▪ Confirm that: ▪ Old portrait caches are rebuilt once for landscape (you should see the “Indexing…” page). ▪ Progress save/restore still works (resume opens to the correct page in the current orientation). ◦ Ensure grayscale rendering (the secondary pass in EpubReaderActivity::renderContents) still looks correct in both orientations. --------- Co-authored-by: Dave Allie --- lib/Epub/Epub/Page.cpp | 8 +- lib/Epub/Epub/Page.h | 6 +- lib/Epub/Epub/ParsedText.cpp | 4 +- lib/Epub/Epub/ParsedText.h | 2 +- lib/Epub/Epub/Section.cpp | 46 +++---- lib/Epub/Epub/Section.h | 13 +- .../Epub/parsers/ChapterHtmlSlimParser.cpp | 13 +- lib/Epub/Epub/parsers/ChapterHtmlSlimParser.h | 16 +-- lib/GfxRenderer/GfxRenderer.cpp | 119 ++++++++++++++---- lib/GfxRenderer/GfxRenderer.h | 28 ++++- src/CrossPointSettings.cpp | 8 +- src/CrossPointSettings.h | 10 ++ src/activities/boot_sleep/BootActivity.cpp | 6 +- src/activities/boot_sleep/SleepActivity.cpp | 2 +- src/activities/reader/EpubReaderActivity.cpp | 94 +++++++++----- src/activities/reader/EpubReaderActivity.h | 5 +- .../EpubReaderChapterSelectionActivity.cpp | 34 +++-- .../EpubReaderChapterSelectionActivity.h | 4 + .../reader/FileSelectionActivity.cpp | 2 +- src/activities/settings/SettingsActivity.cpp | 10 +- .../util/FullScreenMessageActivity.cpp | 2 +- src/activities/util/KeyboardEntryActivity.cpp | 4 +- 22 files changed, 297 insertions(+), 139 deletions(-) diff --git a/lib/Epub/Epub/Page.cpp b/lib/Epub/Epub/Page.cpp index b41dd3c..15e50d0 100644 --- a/lib/Epub/Epub/Page.cpp +++ b/lib/Epub/Epub/Page.cpp @@ -7,7 +7,9 @@ namespace { constexpr uint8_t PAGE_FILE_VERSION = 3; } -void PageLine::render(GfxRenderer& renderer, const int fontId) { block->render(renderer, fontId, xPos, yPos); } +void PageLine::render(GfxRenderer& renderer, const int fontId, const int xOffset, const int yOffset) { + block->render(renderer, fontId, xPos + xOffset, yPos + yOffset); +} void PageLine::serialize(File& file) { serialization::writePod(file, xPos); @@ -27,9 +29,9 @@ std::unique_ptr PageLine::deserialize(File& file) { return std::unique_ptr(new PageLine(std::move(tb), xPos, yPos)); } -void Page::render(GfxRenderer& renderer, const int fontId) const { +void Page::render(GfxRenderer& renderer, const int fontId, const int xOffset, const int yOffset) const { for (auto& element : elements) { - element->render(renderer, fontId); + element->render(renderer, fontId, xOffset, yOffset); } } diff --git a/lib/Epub/Epub/Page.h b/lib/Epub/Epub/Page.h index 1026653..f43e498 100644 --- a/lib/Epub/Epub/Page.h +++ b/lib/Epub/Epub/Page.h @@ -17,7 +17,7 @@ class PageElement { int16_t yPos; explicit PageElement(const int16_t xPos, const int16_t yPos) : xPos(xPos), yPos(yPos) {} virtual ~PageElement() = default; - virtual void render(GfxRenderer& renderer, int fontId) = 0; + virtual void render(GfxRenderer& renderer, int fontId, int xOffset, int yOffset) = 0; virtual void serialize(File& file) = 0; }; @@ -28,7 +28,7 @@ class PageLine final : public PageElement { public: PageLine(std::shared_ptr block, const int16_t xPos, const int16_t yPos) : PageElement(xPos, yPos), block(std::move(block)) {} - void render(GfxRenderer& renderer, int fontId) override; + void render(GfxRenderer& renderer, int fontId, int xOffset, int yOffset) override; void serialize(File& file) override; static std::unique_ptr deserialize(File& file); }; @@ -37,7 +37,7 @@ class Page { public: // the list of block index and line numbers on this page std::vector> elements; - void render(GfxRenderer& renderer, int fontId) const; + void render(GfxRenderer& renderer, int fontId, int xOffset, int yOffset) const; void serialize(File& file) const; static std::unique_ptr deserialize(File& file); }; diff --git a/lib/Epub/Epub/ParsedText.cpp b/lib/Epub/Epub/ParsedText.cpp index 7a045d5..0e850f3 100644 --- a/lib/Epub/Epub/ParsedText.cpp +++ b/lib/Epub/Epub/ParsedText.cpp @@ -18,14 +18,14 @@ void ParsedText::addWord(std::string word, const EpdFontStyle fontStyle) { } // Consumes data to minimize memory usage -void ParsedText::layoutAndExtractLines(const GfxRenderer& renderer, const int fontId, const int horizontalMargin, +void ParsedText::layoutAndExtractLines(const GfxRenderer& renderer, const int fontId, const int viewportWidth, const std::function)>& processLine, const bool includeLastLine) { if (words.empty()) { return; } - const int pageWidth = renderer.getScreenWidth() - horizontalMargin; + const int pageWidth = viewportWidth; const int spaceWidth = renderer.getSpaceWidth(fontId); const auto wordWidths = calculateWordWidths(renderer, fontId); const auto lineBreakIndices = computeLineBreaks(pageWidth, spaceWidth, wordWidths); diff --git a/lib/Epub/Epub/ParsedText.h b/lib/Epub/Epub/ParsedText.h index 7fdb128..2696407 100644 --- a/lib/Epub/Epub/ParsedText.h +++ b/lib/Epub/Epub/ParsedText.h @@ -34,7 +34,7 @@ class ParsedText { TextBlock::BLOCK_STYLE getStyle() const { return style; } size_t size() const { return words.size(); } bool isEmpty() const { return words.empty(); } - void layoutAndExtractLines(const GfxRenderer& renderer, int fontId, int horizontalMargin, + void layoutAndExtractLines(const GfxRenderer& renderer, int fontId, int viewportWidth, const std::function)>& processLine, bool includeLastLine = true); }; diff --git a/lib/Epub/Epub/Section.cpp b/lib/Epub/Epub/Section.cpp index bd46d35..7b81579 100644 --- a/lib/Epub/Epub/Section.cpp +++ b/lib/Epub/Epub/Section.cpp @@ -8,8 +8,8 @@ #include "parsers/ChapterHtmlSlimParser.h" namespace { -constexpr uint8_t SECTION_FILE_VERSION = 5; -} +constexpr uint8_t SECTION_FILE_VERSION = 6; +} // namespace void Section::onPageComplete(std::unique_ptr page) { const auto filePath = cachePath + "/page_" + std::to_string(pageCount) + ".bin"; @@ -26,9 +26,8 @@ void Section::onPageComplete(std::unique_ptr page) { pageCount++; } -void Section::writeCacheMetadata(const int fontId, const float lineCompression, const int marginTop, - const int marginRight, const int marginBottom, const int marginLeft, - const bool extraParagraphSpacing) const { +void Section::writeCacheMetadata(const int fontId, const float lineCompression, const bool extraParagraphSpacing, + const int viewportWidth, const int viewportHeight) const { File outputFile; if (!FsHelpers::openFileForWrite("SCT", cachePath + "/section.bin", outputFile)) { return; @@ -36,18 +35,15 @@ void Section::writeCacheMetadata(const int fontId, const float lineCompression, serialization::writePod(outputFile, SECTION_FILE_VERSION); serialization::writePod(outputFile, fontId); serialization::writePod(outputFile, lineCompression); - serialization::writePod(outputFile, marginTop); - serialization::writePod(outputFile, marginRight); - serialization::writePod(outputFile, marginBottom); - serialization::writePod(outputFile, marginLeft); serialization::writePod(outputFile, extraParagraphSpacing); + serialization::writePod(outputFile, viewportWidth); + serialization::writePod(outputFile, viewportHeight); serialization::writePod(outputFile, pageCount); outputFile.close(); } -bool Section::loadCacheMetadata(const int fontId, const float lineCompression, const int marginTop, - const int marginRight, const int marginBottom, const int marginLeft, - const bool extraParagraphSpacing) { +bool Section::loadCacheMetadata(const int fontId, const float lineCompression, const bool extraParagraphSpacing, + const int viewportWidth, const int viewportHeight) { const auto sectionFilePath = cachePath + "/section.bin"; File inputFile; if (!FsHelpers::openFileForRead("SCT", sectionFilePath, inputFile)) { @@ -65,20 +61,18 @@ bool Section::loadCacheMetadata(const int fontId, const float lineCompression, c return false; } - int fileFontId, fileMarginTop, fileMarginRight, fileMarginBottom, fileMarginLeft; + int fileFontId, fileViewportWidth, fileViewportHeight; float fileLineCompression; bool fileExtraParagraphSpacing; serialization::readPod(inputFile, fileFontId); serialization::readPod(inputFile, fileLineCompression); - serialization::readPod(inputFile, fileMarginTop); - serialization::readPod(inputFile, fileMarginRight); - serialization::readPod(inputFile, fileMarginBottom); - serialization::readPod(inputFile, fileMarginLeft); serialization::readPod(inputFile, fileExtraParagraphSpacing); + serialization::readPod(inputFile, fileViewportWidth); + serialization::readPod(inputFile, fileViewportHeight); - if (fontId != fileFontId || lineCompression != fileLineCompression || marginTop != fileMarginTop || - marginRight != fileMarginRight || marginBottom != fileMarginBottom || marginLeft != fileMarginLeft || - extraParagraphSpacing != fileExtraParagraphSpacing) { + if (fontId != fileFontId || lineCompression != fileLineCompression || + extraParagraphSpacing != fileExtraParagraphSpacing || viewportWidth != fileViewportWidth || + viewportHeight != fileViewportHeight) { inputFile.close(); Serial.printf("[%lu] [SCT] Deserialization failed: Parameters do not match\n", millis()); clearCache(); @@ -113,9 +107,9 @@ bool Section::clearCache() const { return true; } -bool Section::persistPageDataToSD(const int fontId, const float lineCompression, const int marginTop, - const int marginRight, const int marginBottom, const int marginLeft, - const bool extraParagraphSpacing, const std::function& progressSetupFn, +bool Section::persistPageDataToSD(const int fontId, const float lineCompression, const bool extraParagraphSpacing, + const int viewportWidth, const int viewportHeight, + const std::function& progressSetupFn, const std::function& progressFn) { constexpr size_t MIN_SIZE_FOR_PROGRESS = 50 * 1024; // 50KB const auto localPath = epub->getSpineItem(spineIndex).href; @@ -163,8 +157,8 @@ bool Section::persistPageDataToSD(const int fontId, const float lineCompression, } ChapterHtmlSlimParser visitor( - tmpHtmlPath, renderer, fontId, lineCompression, marginTop, marginRight, marginBottom, marginLeft, - extraParagraphSpacing, [this](std::unique_ptr page) { this->onPageComplete(std::move(page)); }, progressFn); + tmpHtmlPath, renderer, fontId, lineCompression, extraParagraphSpacing, viewportWidth, viewportHeight, + [this](std::unique_ptr page) { this->onPageComplete(std::move(page)); }, progressFn); success = visitor.parseAndBuildPages(); SD.remove(tmpHtmlPath.c_str()); @@ -173,7 +167,7 @@ bool Section::persistPageDataToSD(const int fontId, const float lineCompression, return false; } - writeCacheMetadata(fontId, lineCompression, marginTop, marginRight, marginBottom, marginLeft, extraParagraphSpacing); + writeCacheMetadata(fontId, lineCompression, extraParagraphSpacing, viewportWidth, viewportHeight); return true; } diff --git a/lib/Epub/Epub/Section.h b/lib/Epub/Epub/Section.h index 09a2f90..a1a6216 100644 --- a/lib/Epub/Epub/Section.h +++ b/lib/Epub/Epub/Section.h @@ -13,8 +13,8 @@ class Section { GfxRenderer& renderer; std::string cachePath; - void writeCacheMetadata(int fontId, float lineCompression, int marginTop, int marginRight, int marginBottom, - int marginLeft, bool extraParagraphSpacing) const; + void writeCacheMetadata(int fontId, float lineCompression, bool extraParagraphSpacing, int viewportWidth, + int viewportHeight) const; void onPageComplete(std::unique_ptr page); public: @@ -27,13 +27,12 @@ class Section { renderer(renderer), cachePath(epub->getCachePath() + "/" + std::to_string(spineIndex)) {} ~Section() = default; - bool loadCacheMetadata(int fontId, float lineCompression, int marginTop, int marginRight, int marginBottom, - int marginLeft, bool extraParagraphSpacing); + bool loadCacheMetadata(int fontId, float lineCompression, bool extraParagraphSpacing, int viewportWidth, + int viewportHeight); void setupCacheDir() const; bool clearCache() const; - bool persistPageDataToSD(int fontId, float lineCompression, int marginTop, int marginRight, int marginBottom, - int marginLeft, bool extraParagraphSpacing, - const std::function& progressSetupFn = nullptr, + bool persistPageDataToSD(int fontId, float lineCompression, bool extraParagraphSpacing, int viewportWidth, + int viewportHeight, const std::function& progressSetupFn = nullptr, const std::function& progressFn = nullptr); std::unique_ptr loadPageFromSD() const; }; diff --git a/lib/Epub/Epub/parsers/ChapterHtmlSlimParser.cpp b/lib/Epub/Epub/parsers/ChapterHtmlSlimParser.cpp index d2f1c3e..b2dc2c0 100644 --- a/lib/Epub/Epub/parsers/ChapterHtmlSlimParser.cpp +++ b/lib/Epub/Epub/parsers/ChapterHtmlSlimParser.cpp @@ -155,7 +155,7 @@ void XMLCALL ChapterHtmlSlimParser::characterData(void* userData, const XML_Char if (self->currentTextBlock->size() > 750) { Serial.printf("[%lu] [EHP] Text block too long, splitting into multiple pages\n", millis()); self->currentTextBlock->layoutAndExtractLines( - self->renderer, self->fontId, self->marginLeft + self->marginRight, + self->renderer, self->fontId, self->viewportWidth, [self](const std::shared_ptr& textBlock) { self->addLineToPage(textBlock); }, false); } } @@ -301,15 +301,14 @@ bool ChapterHtmlSlimParser::parseAndBuildPages() { void ChapterHtmlSlimParser::addLineToPage(std::shared_ptr line) { const int lineHeight = renderer.getLineHeight(fontId) * lineCompression; - const int pageHeight = GfxRenderer::getScreenHeight() - marginTop - marginBottom; - if (currentPageNextY + lineHeight > pageHeight) { + if (currentPageNextY + lineHeight > viewportHeight) { completePageFn(std::move(currentPage)); currentPage.reset(new Page()); - currentPageNextY = marginTop; + currentPageNextY = 0; } - currentPage->elements.push_back(std::make_shared(line, marginLeft, currentPageNextY)); + currentPage->elements.push_back(std::make_shared(line, 0, currentPageNextY)); currentPageNextY += lineHeight; } @@ -321,12 +320,12 @@ void ChapterHtmlSlimParser::makePages() { if (!currentPage) { currentPage.reset(new Page()); - currentPageNextY = marginTop; + currentPageNextY = 0; } const int lineHeight = renderer.getLineHeight(fontId) * lineCompression; currentTextBlock->layoutAndExtractLines( - renderer, fontId, marginLeft + marginRight, + renderer, fontId, viewportWidth, [this](const std::shared_ptr& textBlock) { addLineToPage(textBlock); }); // Extra paragraph spacing if enabled if (extraParagraphSpacing) { diff --git a/lib/Epub/Epub/parsers/ChapterHtmlSlimParser.h b/lib/Epub/Epub/parsers/ChapterHtmlSlimParser.h index 7d75317..53bbbb4 100644 --- a/lib/Epub/Epub/parsers/ChapterHtmlSlimParser.h +++ b/lib/Epub/Epub/parsers/ChapterHtmlSlimParser.h @@ -32,11 +32,9 @@ class ChapterHtmlSlimParser { int16_t currentPageNextY = 0; int fontId; float lineCompression; - int marginTop; - int marginRight; - int marginBottom; - int marginLeft; bool extraParagraphSpacing; + int viewportWidth; + int viewportHeight; void startNewTextBlock(TextBlock::BLOCK_STYLE style); void makePages(); @@ -47,19 +45,17 @@ class ChapterHtmlSlimParser { public: explicit ChapterHtmlSlimParser(const std::string& filepath, GfxRenderer& renderer, const int fontId, - const float lineCompression, const int marginTop, const int marginRight, - const int marginBottom, const int marginLeft, const bool extraParagraphSpacing, + const float lineCompression, const bool extraParagraphSpacing, const int viewportWidth, + const int viewportHeight, const std::function)>& completePageFn, const std::function& progressFn = nullptr) : filepath(filepath), renderer(renderer), fontId(fontId), lineCompression(lineCompression), - marginTop(marginTop), - marginRight(marginRight), - marginBottom(marginBottom), - marginLeft(marginLeft), extraParagraphSpacing(extraParagraphSpacing), + viewportWidth(viewportWidth), + viewportHeight(viewportHeight), completePageFn(completePageFn), progressFn(progressFn) {} ~ChapterHtmlSlimParser() = default; diff --git a/lib/GfxRenderer/GfxRenderer.cpp b/lib/GfxRenderer/GfxRenderer.cpp index bcd8808..c9a2554 100644 --- a/lib/GfxRenderer/GfxRenderer.cpp +++ b/lib/GfxRenderer/GfxRenderer.cpp @@ -4,6 +4,37 @@ void GfxRenderer::insertFont(const int fontId, EpdFontFamily font) { fontMap.insert({fontId, font}); } +void GfxRenderer::rotateCoordinates(const int x, const int y, int* rotatedX, int* rotatedY) const { + switch (orientation) { + case Portrait: { + // Logical portrait (480x800) → panel (800x480) + // Rotation: 90 degrees clockwise + *rotatedX = y; + *rotatedY = EInkDisplay::DISPLAY_HEIGHT - 1 - x; + break; + } + case LandscapeClockwise: { + // Logical landscape (800x480) rotated 180 degrees (swap top/bottom and left/right) + *rotatedX = EInkDisplay::DISPLAY_WIDTH - 1 - x; + *rotatedY = EInkDisplay::DISPLAY_HEIGHT - 1 - y; + break; + } + case PortraitInverted: { + // Logical portrait (480x800) → panel (800x480) + // Rotation: 90 degrees counter-clockwise + *rotatedX = EInkDisplay::DISPLAY_WIDTH - 1 - y; + *rotatedY = x; + break; + } + case LandscapeCounterClockwise: { + // Logical landscape (800x480) aligned with panel orientation + *rotatedX = x; + *rotatedY = y; + break; + } + } +} + void GfxRenderer::drawPixel(const int x, const int y, const bool state) const { uint8_t* frameBuffer = einkDisplay.getFrameBuffer(); @@ -13,15 +44,14 @@ void GfxRenderer::drawPixel(const int x, const int y, const bool state) const { return; } - // Rotate coordinates: portrait (480x800) -> landscape (800x480) - // Rotation: 90 degrees clockwise - const int rotatedX = y; - const int rotatedY = EInkDisplay::DISPLAY_HEIGHT - 1 - x; + int rotatedX = 0; + int rotatedY = 0; + rotateCoordinates(x, y, &rotatedX, &rotatedY); - // Bounds checking (portrait: 480x800) + // Bounds checking against physical panel dimensions if (rotatedX < 0 || rotatedX >= EInkDisplay::DISPLAY_WIDTH || rotatedY < 0 || rotatedY >= EInkDisplay::DISPLAY_HEIGHT) { - Serial.printf("[%lu] [GFX] !! Outside range (%d, %d)\n", millis(), x, y); + Serial.printf("[%lu] [GFX] !! Outside range (%d, %d) -> (%d, %d)\n", millis(), x, y, rotatedX, rotatedY); return; } @@ -115,8 +145,11 @@ void GfxRenderer::fillRect(const int x, const int y, const int width, const int } void GfxRenderer::drawImage(const uint8_t bitmap[], const int x, const int y, const int width, const int height) const { - // Flip X and Y for portrait mode - einkDisplay.drawImage(bitmap, y, x, height, width); + // TODO: Rotate bits + int rotatedX = 0; + int rotatedY = 0; + rotateCoordinates(x, y, &rotatedX, &rotatedY); + einkDisplay.drawImage(bitmap, rotatedX, rotatedY, width, height); } void GfxRenderer::drawBitmap(const Bitmap& bitmap, const int x, const int y, const int maxWidth, @@ -205,23 +238,34 @@ void GfxRenderer::displayBuffer(const EInkDisplay::RefreshMode refreshMode) cons einkDisplay.displayBuffer(refreshMode); } -void GfxRenderer::displayWindow(const int x, const int y, const int width, const int height) const { - // Rotate coordinates from portrait (480x800) to landscape (800x480) - // Rotation: 90 degrees clockwise - // Portrait coordinates: (x, y) with dimensions (width, height) - // Landscape coordinates: (rotatedX, rotatedY) with dimensions (rotatedWidth, rotatedHeight) - - const int rotatedX = y; - const int rotatedY = EInkDisplay::DISPLAY_HEIGHT - 1 - x - width + 1; - const int rotatedWidth = height; - const int rotatedHeight = width; - - einkDisplay.displayWindow(rotatedX, rotatedY, rotatedWidth, rotatedHeight); +// Note: Internal driver treats screen in command orientation; this library exposes a logical orientation +int GfxRenderer::getScreenWidth() const { + switch (orientation) { + case Portrait: + case PortraitInverted: + // 480px wide in portrait logical coordinates + return EInkDisplay::DISPLAY_HEIGHT; + case LandscapeClockwise: + case LandscapeCounterClockwise: + // 800px wide in landscape logical coordinates + return EInkDisplay::DISPLAY_WIDTH; + } + return EInkDisplay::DISPLAY_HEIGHT; } -// Note: Internal driver treats screen in command orientation, this library treats in portrait orientation -int GfxRenderer::getScreenWidth() { return EInkDisplay::DISPLAY_HEIGHT; } -int GfxRenderer::getScreenHeight() { return EInkDisplay::DISPLAY_WIDTH; } +int GfxRenderer::getScreenHeight() const { + switch (orientation) { + case Portrait: + case PortraitInverted: + // 800px tall in portrait logical coordinates + return EInkDisplay::DISPLAY_WIDTH; + case LandscapeClockwise: + case LandscapeCounterClockwise: + // 480px tall in landscape logical coordinates + return EInkDisplay::DISPLAY_HEIGHT; + } + return EInkDisplay::DISPLAY_WIDTH; +} int GfxRenderer::getSpaceWidth(const int fontId) const { if (fontMap.count(fontId) == 0) { @@ -432,3 +476,32 @@ void GfxRenderer::renderChar(const EpdFontFamily& fontFamily, const uint32_t cp, *x += glyph->advanceX; } + +void GfxRenderer::getOrientedViewableTRBL(int* outTop, int* outRight, int* outBottom, int* outLeft) const { + switch (orientation) { + case Portrait: + *outTop = VIEWABLE_MARGIN_TOP; + *outRight = VIEWABLE_MARGIN_RIGHT; + *outBottom = VIEWABLE_MARGIN_BOTTOM; + *outLeft = VIEWABLE_MARGIN_LEFT; + break; + case LandscapeClockwise: + *outTop = VIEWABLE_MARGIN_LEFT; + *outRight = VIEWABLE_MARGIN_TOP; + *outBottom = VIEWABLE_MARGIN_RIGHT; + *outLeft = VIEWABLE_MARGIN_BOTTOM; + break; + case PortraitInverted: + *outTop = VIEWABLE_MARGIN_BOTTOM; + *outRight = VIEWABLE_MARGIN_LEFT; + *outBottom = VIEWABLE_MARGIN_TOP; + *outLeft = VIEWABLE_MARGIN_RIGHT; + break; + case LandscapeCounterClockwise: + *outTop = VIEWABLE_MARGIN_RIGHT; + *outRight = VIEWABLE_MARGIN_BOTTOM; + *outBottom = VIEWABLE_MARGIN_LEFT; + *outLeft = VIEWABLE_MARGIN_TOP; + break; + } +} diff --git a/lib/GfxRenderer/GfxRenderer.h b/lib/GfxRenderer/GfxRenderer.h index 00a525d..d1083a0 100644 --- a/lib/GfxRenderer/GfxRenderer.h +++ b/lib/GfxRenderer/GfxRenderer.h @@ -12,6 +12,14 @@ class GfxRenderer { public: enum RenderMode { BW, GRAYSCALE_LSB, GRAYSCALE_MSB }; + // Logical screen orientation from the perspective of callers + enum Orientation { + Portrait, // 480x800 logical coordinates (current default) + LandscapeClockwise, // 800x480 logical coordinates, rotated 180° (swap top/bottom) + PortraitInverted, // 480x800 logical coordinates, inverted + LandscapeCounterClockwise // 800x480 logical coordinates, native panel orientation + }; + private: static constexpr size_t BW_BUFFER_CHUNK_SIZE = 8000; // 8KB chunks to allow for non-contiguous memory static constexpr size_t BW_BUFFER_NUM_CHUNKS = EInkDisplay::BUFFER_SIZE / BW_BUFFER_CHUNK_SIZE; @@ -20,24 +28,35 @@ class GfxRenderer { EInkDisplay& einkDisplay; RenderMode renderMode; + Orientation orientation; uint8_t* bwBufferChunks[BW_BUFFER_NUM_CHUNKS] = {nullptr}; std::map fontMap; void renderChar(const EpdFontFamily& fontFamily, uint32_t cp, int* x, const int* y, bool pixelState, EpdFontStyle style) const; void freeBwBufferChunks(); + void rotateCoordinates(int x, int y, int* rotatedX, int* rotatedY) const; public: - explicit GfxRenderer(EInkDisplay& einkDisplay) : einkDisplay(einkDisplay), renderMode(BW) {} + explicit GfxRenderer(EInkDisplay& einkDisplay) : einkDisplay(einkDisplay), renderMode(BW), orientation(Portrait) {} ~GfxRenderer() = default; + static constexpr int VIEWABLE_MARGIN_TOP = 9; + static constexpr int VIEWABLE_MARGIN_RIGHT = 3; + static constexpr int VIEWABLE_MARGIN_BOTTOM = 3; + static constexpr int VIEWABLE_MARGIN_LEFT = 3; + // Setup void insertFont(int fontId, EpdFontFamily font); + // Orientation control (affects logical width/height and coordinate transforms) + void setOrientation(const Orientation o) { orientation = o; } + Orientation getOrientation() const { return orientation; } + // Screen ops - static int getScreenWidth(); - static int getScreenHeight(); + int getScreenWidth() const; + int getScreenHeight() const; void displayBuffer(EInkDisplay::RefreshMode refreshMode = EInkDisplay::FAST_REFRESH) const; - // EXPERIMENTAL: Windowed update - display only a rectangular region (portrait coordinates) + // EXPERIMENTAL: Windowed update - display only a rectangular region void displayWindow(int x, int y, int width, int height) const; void invertScreen() const; void clearScreen(uint8_t color = 0xFF) const; @@ -72,4 +91,5 @@ class GfxRenderer { uint8_t* getFrameBuffer() const; static size_t getBufferSize(); void grayscaleRevert() const; + void getOrientedViewableTRBL(int* outTop, int* outRight, int* outBottom, int* outLeft) const; }; diff --git a/src/CrossPointSettings.cpp b/src/CrossPointSettings.cpp index 83ba59d..9328422 100644 --- a/src/CrossPointSettings.cpp +++ b/src/CrossPointSettings.cpp @@ -10,7 +10,8 @@ CrossPointSettings CrossPointSettings::instance; namespace { constexpr uint8_t SETTINGS_FILE_VERSION = 1; -constexpr uint8_t SETTINGS_COUNT = 4; +// Increment this when adding new persisted settings fields +constexpr uint8_t SETTINGS_COUNT = 5; constexpr char SETTINGS_FILE[] = "/.crosspoint/settings.bin"; } // namespace @@ -29,6 +30,7 @@ bool CrossPointSettings::saveToFile() const { serialization::writePod(outputFile, extraParagraphSpacing); serialization::writePod(outputFile, shortPwrBtn); serialization::writePod(outputFile, statusBar); + serialization::writePod(outputFile, orientation); outputFile.close(); Serial.printf("[%lu] [CPS] Settings saved to file\n", millis()); @@ -52,7 +54,7 @@ bool CrossPointSettings::loadFromFile() { uint8_t fileSettingsCount = 0; serialization::readPod(inputFile, fileSettingsCount); - // load settings that exist + // load settings that exist (support older files with fewer fields) uint8_t settingsRead = 0; do { serialization::readPod(inputFile, sleepScreen); @@ -63,6 +65,8 @@ bool CrossPointSettings::loadFromFile() { if (++settingsRead >= fileSettingsCount) break; serialization::readPod(inputFile, statusBar); if (++settingsRead >= fileSettingsCount) break; + serialization::readPod(inputFile, orientation); + if (++settingsRead >= fileSettingsCount) break; } while (false); inputFile.close(); diff --git a/src/CrossPointSettings.h b/src/CrossPointSettings.h index ab591be..2b99664 100644 --- a/src/CrossPointSettings.h +++ b/src/CrossPointSettings.h @@ -21,6 +21,13 @@ class CrossPointSettings { // Status bar display type enum enum STATUS_BAR_MODE { NONE = 0, NO_PROGRESS = 1, FULL = 2 }; + enum ORIENTATION { + PORTRAIT = 0, // 480x800 logical coordinates (current default) + LANDSCAPE_CW = 1, // 800x480 logical coordinates, rotated 180° (swap top/bottom) + INVERTED = 2, // 480x800 logical coordinates, inverted + LANDSCAPE_CCW = 3 // 800x480 logical coordinates, native panel orientation + }; + // Sleep screen settings uint8_t sleepScreen = DARK; // Status bar settings @@ -29,6 +36,9 @@ class CrossPointSettings { uint8_t extraParagraphSpacing = 1; // Duration of the power button press uint8_t shortPwrBtn = 0; + // EPUB reading orientation settings + // 0 = portrait (default), 1 = landscape clockwise, 2 = inverted, 3 = landscape counter-clockwise + uint8_t orientation = PORTRAIT; ~CrossPointSettings() = default; diff --git a/src/activities/boot_sleep/BootActivity.cpp b/src/activities/boot_sleep/BootActivity.cpp index 78a1248..a153088 100644 --- a/src/activities/boot_sleep/BootActivity.cpp +++ b/src/activities/boot_sleep/BootActivity.cpp @@ -8,11 +8,11 @@ void BootActivity::onEnter() { Activity::onEnter(); - const auto pageWidth = GfxRenderer::getScreenWidth(); - const auto pageHeight = GfxRenderer::getScreenHeight(); + const auto pageWidth = renderer.getScreenWidth(); + const auto pageHeight = renderer.getScreenHeight(); renderer.clearScreen(); - renderer.drawImage(CrossLarge, (pageWidth - 128) / 2, (pageHeight - 128) / 2, 128, 128); + renderer.drawImage(CrossLarge, (pageWidth + 128) / 2, (pageHeight - 128) / 2, 128, 128); renderer.drawCenteredText(UI_FONT_ID, pageHeight / 2 + 70, "CrossPoint", true, BOLD); renderer.drawCenteredText(SMALL_FONT_ID, pageHeight / 2 + 95, "BOOTING"); renderer.drawCenteredText(SMALL_FONT_ID, pageHeight - 30, CROSSPOINT_VERSION); diff --git a/src/activities/boot_sleep/SleepActivity.cpp b/src/activities/boot_sleep/SleepActivity.cpp index 4bc70f5..6ff348e 100644 --- a/src/activities/boot_sleep/SleepActivity.cpp +++ b/src/activities/boot_sleep/SleepActivity.cpp @@ -112,7 +112,7 @@ void SleepActivity::renderDefaultSleepScreen() const { const auto pageHeight = renderer.getScreenHeight(); renderer.clearScreen(); - renderer.drawImage(CrossLarge, (pageWidth - 128) / 2, (pageHeight - 128) / 2, 128, 128); + renderer.drawImage(CrossLarge, (pageWidth + 128) / 2, (pageHeight - 128) / 2, 128, 128); renderer.drawCenteredText(UI_FONT_ID, pageHeight / 2 + 70, "CrossPoint", true, BOLD); renderer.drawCenteredText(SMALL_FONT_ID, pageHeight / 2 + 95, "SLEEPING"); diff --git a/src/activities/reader/EpubReaderActivity.cpp b/src/activities/reader/EpubReaderActivity.cpp index 0dfda4b..f0eed25 100644 --- a/src/activities/reader/EpubReaderActivity.cpp +++ b/src/activities/reader/EpubReaderActivity.cpp @@ -16,10 +16,8 @@ constexpr int pagesPerRefresh = 15; constexpr unsigned long skipChapterMs = 700; constexpr unsigned long goHomeMs = 1000; constexpr float lineCompression = 0.95f; -constexpr int marginTop = 8; -constexpr int marginRight = 10; -constexpr int marginBottom = 22; -constexpr int marginLeft = 10; +constexpr int horizontalPadding = 5; +constexpr int statusBarMargin = 19; } // namespace void EpubReaderActivity::taskTrampoline(void* param) { @@ -34,6 +32,24 @@ void EpubReaderActivity::onEnter() { return; } + // Configure screen orientation based on settings + switch (SETTINGS.orientation) { + case CrossPointSettings::ORIENTATION::PORTRAIT: + renderer.setOrientation(GfxRenderer::Orientation::Portrait); + break; + case CrossPointSettings::ORIENTATION::LANDSCAPE_CW: + renderer.setOrientation(GfxRenderer::Orientation::LandscapeClockwise); + break; + case CrossPointSettings::ORIENTATION::INVERTED: + renderer.setOrientation(GfxRenderer::Orientation::PortraitInverted); + break; + case CrossPointSettings::ORIENTATION::LANDSCAPE_CCW: + renderer.setOrientation(GfxRenderer::Orientation::LandscapeCounterClockwise); + break; + default: + break; + } + renderingMutex = xSemaphoreCreateMutex(); epub->setupCacheDir(); @@ -67,6 +83,9 @@ void EpubReaderActivity::onEnter() { void EpubReaderActivity::onExit() { ActivityWithSubactivity::onExit(); + // Reset orientation back to portrait for the rest of the UI + renderer.setOrientation(GfxRenderer::Orientation::Portrait); + // Wait until not rendering to delete task to avoid killing mid-instruction to EPD xSemaphoreTake(renderingMutex, portMAX_DELAY); if (displayTaskHandle) { @@ -219,12 +238,24 @@ void EpubReaderActivity::renderScreen() { return; } + // Apply screen viewable areas and additional padding + int orientedMarginTop, orientedMarginRight, orientedMarginBottom, orientedMarginLeft; + renderer.getOrientedViewableTRBL(&orientedMarginTop, &orientedMarginRight, &orientedMarginBottom, + &orientedMarginLeft); + orientedMarginLeft += horizontalPadding; + orientedMarginRight += horizontalPadding; + orientedMarginBottom += statusBarMargin; + if (!section) { const auto filepath = epub->getSpineItem(currentSpineIndex).href; Serial.printf("[%lu] [ERS] Loading file: %s, index: %d\n", millis(), filepath.c_str(), currentSpineIndex); section = std::unique_ptr
(new Section(epub, currentSpineIndex, renderer)); - if (!section->loadCacheMetadata(READER_FONT_ID, lineCompression, marginTop, marginRight, marginBottom, marginLeft, - SETTINGS.extraParagraphSpacing)) { + + const auto viewportWidth = renderer.getScreenWidth() - orientedMarginLeft - orientedMarginRight; + const auto viewportHeight = renderer.getScreenHeight() - orientedMarginTop - orientedMarginBottom; + + if (!section->loadCacheMetadata(READER_FONT_ID, lineCompression, SETTINGS.extraParagraphSpacing, viewportWidth, + viewportHeight)) { Serial.printf("[%lu] [ERS] Cache not found, building...\n", millis()); // Progress bar dimensions @@ -236,8 +267,8 @@ void EpubReaderActivity::renderScreen() { const int boxWidthNoBar = textWidth + boxMargin * 2; const int boxHeightWithBar = renderer.getLineHeight(READER_FONT_ID) + barHeight + boxMargin * 3; const int boxHeightNoBar = renderer.getLineHeight(READER_FONT_ID) + boxMargin * 2; - const int boxXWithBar = (GfxRenderer::getScreenWidth() - boxWidthWithBar) / 2; - const int boxXNoBar = (GfxRenderer::getScreenWidth() - boxWidthNoBar) / 2; + const int boxXWithBar = (renderer.getScreenWidth() - boxWidthWithBar) / 2; + const int boxXNoBar = (renderer.getScreenWidth() - boxWidthNoBar) / 2; constexpr int boxY = 50; const int barX = boxXWithBar + (boxWidthWithBar - barWidth) / 2; const int barY = boxY + renderer.getLineHeight(READER_FONT_ID) + boxMargin * 2; @@ -254,8 +285,7 @@ void EpubReaderActivity::renderScreen() { section->setupCacheDir(); // Setup callback - only called for chapters >= 50KB, redraws with progress bar - auto progressSetup = [this, boxXWithBar, boxWidthWithBar, boxHeightWithBar, boxMargin, barX, barY, barWidth, - barHeight]() { + auto progressSetup = [this, boxXWithBar, boxWidthWithBar, boxHeightWithBar, barX, barY] { renderer.fillRect(boxXWithBar, boxY, boxWidthWithBar, boxHeightWithBar, false); renderer.drawText(READER_FONT_ID, boxXWithBar + boxMargin, boxY + boxMargin, "Indexing..."); renderer.drawRect(boxXWithBar + 5, boxY + 5, boxWidthWithBar - 10, boxHeightWithBar - 10); @@ -270,8 +300,8 @@ void EpubReaderActivity::renderScreen() { renderer.displayBuffer(EInkDisplay::FAST_REFRESH); }; - if (!section->persistPageDataToSD(READER_FONT_ID, lineCompression, marginTop, marginRight, marginBottom, - marginLeft, SETTINGS.extraParagraphSpacing, progressSetup, progressCallback)) { + if (!section->persistPageDataToSD(READER_FONT_ID, lineCompression, SETTINGS.extraParagraphSpacing, viewportWidth, + viewportHeight, progressSetup, progressCallback)) { Serial.printf("[%lu] [ERS] Failed to persist page data to SD\n", millis()); section.reset(); return; @@ -292,7 +322,7 @@ void EpubReaderActivity::renderScreen() { if (section->pageCount == 0) { Serial.printf("[%lu] [ERS] No pages to render\n", millis()); renderer.drawCenteredText(READER_FONT_ID, 300, "Empty chapter", true, BOLD); - renderStatusBar(); + renderStatusBar(orientedMarginRight, orientedMarginBottom, orientedMarginLeft); renderer.displayBuffer(); return; } @@ -300,7 +330,7 @@ void EpubReaderActivity::renderScreen() { if (section->currentPage < 0 || section->currentPage >= section->pageCount) { Serial.printf("[%lu] [ERS] Page out of bounds: %d (max %d)\n", millis(), section->currentPage, section->pageCount); renderer.drawCenteredText(READER_FONT_ID, 300, "Out of bounds", true, BOLD); - renderStatusBar(); + renderStatusBar(orientedMarginRight, orientedMarginBottom, orientedMarginLeft); renderer.displayBuffer(); return; } @@ -314,7 +344,7 @@ void EpubReaderActivity::renderScreen() { return renderScreen(); } const auto start = millis(); - renderContents(std::move(p)); + renderContents(std::move(p), orientedMarginTop, orientedMarginRight, orientedMarginBottom, orientedMarginLeft); Serial.printf("[%lu] [ERS] Rendered page in %dms\n", millis(), millis() - start); } @@ -330,9 +360,11 @@ void EpubReaderActivity::renderScreen() { } } -void EpubReaderActivity::renderContents(std::unique_ptr page) { - page->render(renderer, READER_FONT_ID); - renderStatusBar(); +void EpubReaderActivity::renderContents(std::unique_ptr page, const int orientedMarginTop, + const int orientedMarginRight, const int orientedMarginBottom, + const int orientedMarginLeft) { + page->render(renderer, READER_FONT_ID, orientedMarginLeft, orientedMarginTop); + renderStatusBar(orientedMarginRight, orientedMarginBottom, orientedMarginLeft); if (pagesUntilFullRefresh <= 1) { renderer.displayBuffer(EInkDisplay::HALF_REFRESH); pagesUntilFullRefresh = pagesPerRefresh; @@ -349,13 +381,13 @@ void EpubReaderActivity::renderContents(std::unique_ptr page) { { renderer.clearScreen(0x00); renderer.setRenderMode(GfxRenderer::GRAYSCALE_LSB); - page->render(renderer, READER_FONT_ID); + page->render(renderer, READER_FONT_ID, orientedMarginLeft, orientedMarginTop); renderer.copyGrayscaleLsbBuffers(); // Render and copy to MSB buffer renderer.clearScreen(0x00); renderer.setRenderMode(GfxRenderer::GRAYSCALE_MSB); - page->render(renderer, READER_FONT_ID); + page->render(renderer, READER_FONT_ID, orientedMarginLeft, orientedMarginTop); renderer.copyGrayscaleMsbBuffers(); // display grayscale part @@ -367,7 +399,8 @@ void EpubReaderActivity::renderContents(std::unique_ptr page) { renderer.restoreBwBuffer(); } -void EpubReaderActivity::renderStatusBar() const { +void EpubReaderActivity::renderStatusBar(const int orientedMarginRight, const int orientedMarginBottom, + const int orientedMarginLeft) const { // determine visible status bar elements const bool showProgress = SETTINGS.statusBar == CrossPointSettings::STATUS_BAR_MODE::FULL; const bool showBattery = SETTINGS.statusBar == CrossPointSettings::STATUS_BAR_MODE::NO_PROGRESS || @@ -375,8 +408,9 @@ void EpubReaderActivity::renderStatusBar() const { const bool showChapterTitle = SETTINGS.statusBar == CrossPointSettings::STATUS_BAR_MODE::NO_PROGRESS || SETTINGS.statusBar == CrossPointSettings::STATUS_BAR_MODE::FULL; - // height variable shared by all elements - constexpr auto textY = 776; + // Position status bar near the bottom of the logical screen, regardless of orientation + const auto screenHeight = renderer.getScreenHeight(); + const auto textY = screenHeight - orientedMarginBottom - 2; int percentageTextWidth = 0; int progressTextWidth = 0; @@ -389,7 +423,7 @@ void EpubReaderActivity::renderStatusBar() const { const std::string progress = std::to_string(section->currentPage + 1) + "/" + std::to_string(section->pageCount) + " " + std::to_string(bookProgress) + "%"; progressTextWidth = renderer.getTextWidth(SMALL_FONT_ID, progress.c_str()); - renderer.drawText(SMALL_FONT_ID, GfxRenderer::getScreenWidth() - marginRight - progressTextWidth, textY, + renderer.drawText(SMALL_FONT_ID, renderer.getScreenWidth() - orientedMarginRight - progressTextWidth, textY, progress.c_str()); } @@ -398,13 +432,13 @@ void EpubReaderActivity::renderStatusBar() const { const uint16_t percentage = battery.readPercentage(); const auto percentageText = std::to_string(percentage) + "%"; percentageTextWidth = renderer.getTextWidth(SMALL_FONT_ID, percentageText.c_str()); - renderer.drawText(SMALL_FONT_ID, 20 + marginLeft, textY, percentageText.c_str()); + renderer.drawText(SMALL_FONT_ID, 20 + orientedMarginLeft, textY, percentageText.c_str()); // 1 column on left, 2 columns on right, 5 columns of battery body constexpr int batteryWidth = 15; constexpr int batteryHeight = 10; - constexpr int x = marginLeft; - constexpr int y = 783; + const int x = orientedMarginLeft; + const int y = screenHeight - orientedMarginBottom + 5; // Top line renderer.drawLine(x, y, x + batteryWidth - 4, y); @@ -429,9 +463,9 @@ void EpubReaderActivity::renderStatusBar() const { if (showChapterTitle) { // Centered chatper title text // Page width minus existing content with 30px padding on each side - const int titleMarginLeft = 20 + percentageTextWidth + 30 + marginLeft; - const int titleMarginRight = progressTextWidth + 30 + marginRight; - const int availableTextWidth = GfxRenderer::getScreenWidth() - titleMarginLeft - titleMarginRight; + const int titleMarginLeft = 20 + percentageTextWidth + 30 + orientedMarginLeft; + const int titleMarginRight = progressTextWidth + 30 + orientedMarginRight; + const int availableTextWidth = renderer.getScreenWidth() - titleMarginLeft - titleMarginRight; const int tocIndex = epub->getTocIndexForSpineIndex(currentSpineIndex); std::string title; diff --git a/src/activities/reader/EpubReaderActivity.h b/src/activities/reader/EpubReaderActivity.h index 143f56b..f1abc92 100644 --- a/src/activities/reader/EpubReaderActivity.h +++ b/src/activities/reader/EpubReaderActivity.h @@ -22,8 +22,9 @@ class EpubReaderActivity final : public ActivityWithSubactivity { static void taskTrampoline(void* param); [[noreturn]] void displayTaskLoop(); void renderScreen(); - void renderContents(std::unique_ptr p); - void renderStatusBar() const; + void renderContents(std::unique_ptr page, int orientedMarginTop, int orientedMarginRight, + int orientedMarginBottom, int orientedMarginLeft); + void renderStatusBar(int orientedMarginRight, int orientedMarginBottom, int orientedMarginLeft) const; public: explicit EpubReaderActivity(GfxRenderer& renderer, InputManager& inputManager, std::unique_ptr epub, diff --git a/src/activities/reader/EpubReaderChapterSelectionActivity.cpp b/src/activities/reader/EpubReaderChapterSelectionActivity.cpp index 4b7b7ec..090415d 100644 --- a/src/activities/reader/EpubReaderChapterSelectionActivity.cpp +++ b/src/activities/reader/EpubReaderChapterSelectionActivity.cpp @@ -7,10 +7,26 @@ #include "config.h" namespace { -constexpr int PAGE_ITEMS = 24; +// Time threshold for treating a long press as a page-up/page-down constexpr int SKIP_PAGE_MS = 700; } // namespace +int EpubReaderChapterSelectionActivity::getPageItems() const { + // Layout constants used in renderScreen + constexpr int startY = 60; + constexpr int lineHeight = 30; + + const int screenHeight = renderer.getScreenHeight(); + const int availableHeight = screenHeight - startY; + int items = availableHeight / lineHeight; + + // Ensure we always have at least one item per page to avoid division by zero + if (items < 1) { + items = 1; + } + return items; +} + void EpubReaderChapterSelectionActivity::taskTrampoline(void* param) { auto* self = static_cast(param); self->displayTaskLoop(); @@ -56,6 +72,7 @@ void EpubReaderChapterSelectionActivity::loop() { inputManager.wasReleased(InputManager::BTN_DOWN) || inputManager.wasReleased(InputManager::BTN_RIGHT); const bool skipPage = inputManager.getHeldTime() > SKIP_PAGE_MS; + const int pageItems = getPageItems(); if (inputManager.wasReleased(InputManager::BTN_CONFIRM)) { onSelectSpineIndex(selectorIndex); @@ -64,14 +81,14 @@ void EpubReaderChapterSelectionActivity::loop() { } else if (prevReleased) { if (skipPage) { selectorIndex = - ((selectorIndex / PAGE_ITEMS - 1) * PAGE_ITEMS + epub->getSpineItemsCount()) % epub->getSpineItemsCount(); + ((selectorIndex / pageItems - 1) * pageItems + epub->getSpineItemsCount()) % epub->getSpineItemsCount(); } else { selectorIndex = (selectorIndex + epub->getSpineItemsCount() - 1) % epub->getSpineItemsCount(); } updateRequired = true; } else if (nextReleased) { if (skipPage) { - selectorIndex = ((selectorIndex / PAGE_ITEMS + 1) * PAGE_ITEMS) % epub->getSpineItemsCount(); + selectorIndex = ((selectorIndex / pageItems + 1) * pageItems) % epub->getSpineItemsCount(); } else { selectorIndex = (selectorIndex + 1) % epub->getSpineItemsCount(); } @@ -95,17 +112,18 @@ void EpubReaderChapterSelectionActivity::renderScreen() { renderer.clearScreen(); const auto pageWidth = renderer.getScreenWidth(); + const int pageItems = getPageItems(); renderer.drawCenteredText(READER_FONT_ID, 10, "Select Chapter", true, BOLD); - const auto pageStartIndex = selectorIndex / PAGE_ITEMS * PAGE_ITEMS; - renderer.fillRect(0, 60 + (selectorIndex % PAGE_ITEMS) * 30 + 2, pageWidth - 1, 30); - for (int i = pageStartIndex; i < epub->getSpineItemsCount() && i < pageStartIndex + PAGE_ITEMS; i++) { + const auto pageStartIndex = selectorIndex / pageItems * pageItems; + renderer.fillRect(0, 60 + (selectorIndex % pageItems) * 30 + 2, pageWidth - 1, 30); + for (int i = pageStartIndex; i < epub->getSpineItemsCount() && i < pageStartIndex + pageItems; i++) { const int tocIndex = epub->getTocIndexForSpineIndex(i); if (tocIndex == -1) { - renderer.drawText(UI_FONT_ID, 20, 60 + (i % PAGE_ITEMS) * 30, "Unnamed", i != selectorIndex); + renderer.drawText(UI_FONT_ID, 20, 60 + (i % pageItems) * 30, "Unnamed", i != selectorIndex); } else { auto item = epub->getTocItem(tocIndex); - renderer.drawText(UI_FONT_ID, 20 + (item.level - 1) * 15, 60 + (i % PAGE_ITEMS) * 30, item.title.c_str(), + renderer.drawText(UI_FONT_ID, 20 + (item.level - 1) * 15, 60 + (i % pageItems) * 30, item.title.c_str(), i != selectorIndex); } } diff --git a/src/activities/reader/EpubReaderChapterSelectionActivity.h b/src/activities/reader/EpubReaderChapterSelectionActivity.h index 8c1adef..fefd225 100644 --- a/src/activities/reader/EpubReaderChapterSelectionActivity.h +++ b/src/activities/reader/EpubReaderChapterSelectionActivity.h @@ -18,6 +18,10 @@ class EpubReaderChapterSelectionActivity final : public Activity { const std::function onGoBack; const std::function onSelectSpineIndex; + // Number of items that fit on a page, derived from logical screen height. + // This adapts automatically when switching between portrait and landscape. + int getPageItems() const; + static void taskTrampoline(void* param); [[noreturn]] void displayTaskLoop(); void renderScreen(); diff --git a/src/activities/reader/FileSelectionActivity.cpp b/src/activities/reader/FileSelectionActivity.cpp index 9a1490c..6104da4 100644 --- a/src/activities/reader/FileSelectionActivity.cpp +++ b/src/activities/reader/FileSelectionActivity.cpp @@ -158,7 +158,7 @@ void FileSelectionActivity::displayTaskLoop() { void FileSelectionActivity::render() const { renderer.clearScreen(); - const auto pageWidth = GfxRenderer::getScreenWidth(); + const auto pageWidth = renderer.getScreenWidth(); renderer.drawCenteredText(READER_FONT_ID, 10, "Books", true, BOLD); // Help text diff --git a/src/activities/settings/SettingsActivity.cpp b/src/activities/settings/SettingsActivity.cpp index b71a877..71fe331 100644 --- a/src/activities/settings/SettingsActivity.cpp +++ b/src/activities/settings/SettingsActivity.cpp @@ -9,13 +9,17 @@ // Define the static settings list namespace { -constexpr int settingsCount = 5; +constexpr int settingsCount = 6; const SettingInfo settingsList[settingsCount] = { // Should match with SLEEP_SCREEN_MODE {"Sleep Screen", SettingType::ENUM, &CrossPointSettings::sleepScreen, {"Dark", "Light", "Custom", "Cover"}}, {"Status Bar", SettingType::ENUM, &CrossPointSettings::statusBar, {"None", "No Progress", "Full"}}, {"Extra Paragraph Spacing", SettingType::TOGGLE, &CrossPointSettings::extraParagraphSpacing, {}}, {"Short Power Button Click", SettingType::TOGGLE, &CrossPointSettings::shortPwrBtn, {}}, + {"Reading Orientation", + SettingType::ENUM, + &CrossPointSettings::orientation, + {"Portrait", "Landscape CW", "Inverted", "Landscape CCW"}}, {"Check for updates", SettingType::ACTION, nullptr, {}}, }; } // namespace @@ -139,8 +143,8 @@ void SettingsActivity::displayTaskLoop() { void SettingsActivity::render() const { renderer.clearScreen(); - const auto pageWidth = GfxRenderer::getScreenWidth(); - const auto pageHeight = GfxRenderer::getScreenHeight(); + const auto pageWidth = renderer.getScreenWidth(); + const auto pageHeight = renderer.getScreenHeight(); // Draw header renderer.drawCenteredText(READER_FONT_ID, 10, "Settings", true, BOLD); diff --git a/src/activities/util/FullScreenMessageActivity.cpp b/src/activities/util/FullScreenMessageActivity.cpp index cf84cc5..54740b6 100644 --- a/src/activities/util/FullScreenMessageActivity.cpp +++ b/src/activities/util/FullScreenMessageActivity.cpp @@ -8,7 +8,7 @@ void FullScreenMessageActivity::onEnter() { Activity::onEnter(); const auto height = renderer.getLineHeight(UI_FONT_ID); - const auto top = (GfxRenderer::getScreenHeight() - height) / 2; + const auto top = (renderer.getScreenHeight() - height) / 2; renderer.clearScreen(); renderer.drawCenteredText(UI_FONT_ID, top, text.c_str(), true, style); diff --git a/src/activities/util/KeyboardEntryActivity.cpp b/src/activities/util/KeyboardEntryActivity.cpp index 73f3dde..8a72f1b 100644 --- a/src/activities/util/KeyboardEntryActivity.cpp +++ b/src/activities/util/KeyboardEntryActivity.cpp @@ -235,7 +235,7 @@ void KeyboardEntryActivity::loop() { } void KeyboardEntryActivity::render() const { - const auto pageWidth = GfxRenderer::getScreenWidth(); + const auto pageWidth = renderer.getScreenWidth(); renderer.clearScreen(); @@ -329,7 +329,7 @@ void KeyboardEntryActivity::render() const { } // Draw help text at absolute bottom of screen (consistent with other screens) - const auto pageHeight = GfxRenderer::getScreenHeight(); + const auto pageHeight = renderer.getScreenHeight(); renderer.drawText(SMALL_FONT_ID, 10, pageHeight - 30, "Navigate: D-pad | Select: OK | Cancel: BACK"); renderer.displayBuffer(); } From 27d42fbef32d84ac4f016c2a361c2b1656cc5bb1 Mon Sep 17 00:00:00 2001 From: Dave Allie Date: Sun, 28 Dec 2025 21:50:36 +1100 Subject: [PATCH 16/71] Allow entering into chapter select screen correctly --- src/activities/reader/EpubReaderActivity.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/activities/reader/EpubReaderActivity.cpp b/src/activities/reader/EpubReaderActivity.cpp index f0eed25..27cbef0 100644 --- a/src/activities/reader/EpubReaderActivity.cpp +++ b/src/activities/reader/EpubReaderActivity.cpp @@ -106,7 +106,7 @@ void EpubReaderActivity::loop() { } // Enter chapter selection activity - if (inputManager.wasPressed(InputManager::BTN_CONFIRM)) { + if (inputManager.wasReleased(InputManager::BTN_CONFIRM)) { // Don't start activity transition while rendering xSemaphoreTake(renderingMutex, portMAX_DELAY); exitActivity(); From 1c3316236810f09f4dda42514a8858e16993f11d Mon Sep 17 00:00:00 2001 From: Dave Allie Date: Sun, 28 Dec 2025 21:50:45 +1100 Subject: [PATCH 17/71] Fix rendering issue with entering keyboard from wifi screen --- src/activities/network/WifiSelectionActivity.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/activities/network/WifiSelectionActivity.cpp b/src/activities/network/WifiSelectionActivity.cpp index 57b7af5..5bf25f1 100644 --- a/src/activities/network/WifiSelectionActivity.cpp +++ b/src/activities/network/WifiSelectionActivity.cpp @@ -187,6 +187,8 @@ void WifiSelectionActivity::selectNetwork(const int index) { if (selectedRequiresPassword) { // Show password entry state = WifiSelectionState::PASSWORD_ENTRY; + // Don't allow screen updates while changing activity + xSemaphoreTake(renderingMutex, portMAX_DELAY); enterNewActivity(new KeyboardEntryActivity( renderer, inputManager, "Enter WiFi Password", "", // No initial text @@ -203,6 +205,7 @@ void WifiSelectionActivity::selectNetwork(const int index) { exitActivity(); })); updateRequired = true; + xSemaphoreGive(renderingMutex); } else { // Connect directly for open networks attemptConnection(); From 41c93e4eba79f47e3adfb56061ecafc5d7b2c8bf Mon Sep 17 00:00:00 2001 From: Dave Allie Date: Sun, 28 Dec 2025 21:30:01 +1000 Subject: [PATCH 18/71] Use font ascender height for baseline offset (#139) ## Summary * Use font ascender height for baseline offset * Previously was using font height, but when rendering the font (even from y = 0), there would be a lot of top margin * Font would also go below the "bottom of the line" as we were using the full font height as the baseline ## Additional Context * This caused some text to move around, I've fixed everything I can * Notably it moves the first line of font a little closer to the top of the page --- lib/GfxRenderer/GfxRenderer.cpp | 13 +++++++++++-- lib/GfxRenderer/GfxRenderer.h | 1 + src/activities/home/HomeActivity.cpp | 2 +- src/activities/reader/EpubReaderActivity.cpp | 2 +- .../reader/EpubReaderChapterSelectionActivity.cpp | 2 +- src/activities/reader/FileSelectionActivity.cpp | 2 +- 6 files changed, 16 insertions(+), 6 deletions(-) diff --git a/lib/GfxRenderer/GfxRenderer.cpp b/lib/GfxRenderer/GfxRenderer.cpp index c9a2554..5b84b50 100644 --- a/lib/GfxRenderer/GfxRenderer.cpp +++ b/lib/GfxRenderer/GfxRenderer.cpp @@ -85,7 +85,7 @@ void GfxRenderer::drawCenteredText(const int fontId, const int y, const char* te void GfxRenderer::drawText(const int fontId, const int x, const int y, const char* text, const bool black, const EpdFontStyle style) const { - const int yPos = y + getLineHeight(fontId); + const int yPos = y + getFontAscenderSize(fontId); int xpos = x; // cannot draw a NULL / empty string @@ -276,6 +276,15 @@ int GfxRenderer::getSpaceWidth(const int fontId) const { return fontMap.at(fontId).getGlyph(' ', REGULAR)->advanceX; } +int GfxRenderer::getFontAscenderSize(const int fontId) const { + if (fontMap.count(fontId) == 0) { + Serial.printf("[%lu] [GFX] Font %d not found\n", millis(), fontId); + return 0; + } + + return fontMap.at(fontId).getData(REGULAR)->ascender; +} + int GfxRenderer::getLineHeight(const int fontId) const { if (fontMap.count(fontId) == 0) { Serial.printf("[%lu] [GFX] Font %d not found\n", millis(), fontId); @@ -291,7 +300,7 @@ void GfxRenderer::drawButtonHints(const int fontId, const char* btn1, const char constexpr int buttonWidth = 106; constexpr int buttonHeight = 40; constexpr int buttonY = 40; // Distance from bottom - constexpr int textYOffset = 5; // Distance from top of button to text baseline + constexpr int textYOffset = 7; // Distance from top of button to text baseline constexpr int buttonPositions[] = {25, 130, 245, 350}; const char* labels[] = {btn1, btn2, btn3, btn4}; diff --git a/lib/GfxRenderer/GfxRenderer.h b/lib/GfxRenderer/GfxRenderer.h index d1083a0..55d0808 100644 --- a/lib/GfxRenderer/GfxRenderer.h +++ b/lib/GfxRenderer/GfxRenderer.h @@ -74,6 +74,7 @@ class GfxRenderer { void drawCenteredText(int fontId, int y, const char* text, bool black = true, EpdFontStyle style = REGULAR) const; void drawText(int fontId, int x, int y, const char* text, bool black = true, EpdFontStyle style = REGULAR) const; int getSpaceWidth(int fontId) const; + int getFontAscenderSize(int fontId) const; int getLineHeight(int fontId) const; // UI Components diff --git a/src/activities/home/HomeActivity.cpp b/src/activities/home/HomeActivity.cpp index 38dc854..c8b7ffe 100644 --- a/src/activities/home/HomeActivity.cpp +++ b/src/activities/home/HomeActivity.cpp @@ -106,7 +106,7 @@ void HomeActivity::render() const { renderer.drawCenteredText(READER_FONT_ID, 10, "CrossPoint Reader", true, BOLD); // Draw selection - renderer.fillRect(0, 60 + selectorIndex * 30 + 2, pageWidth - 1, 30); + renderer.fillRect(0, 60 + selectorIndex * 30 - 2, pageWidth - 1, 30); int menuY = 60; int menuIndex = 0; diff --git a/src/activities/reader/EpubReaderActivity.cpp b/src/activities/reader/EpubReaderActivity.cpp index 27cbef0..3e19414 100644 --- a/src/activities/reader/EpubReaderActivity.cpp +++ b/src/activities/reader/EpubReaderActivity.cpp @@ -410,7 +410,7 @@ void EpubReaderActivity::renderStatusBar(const int orientedMarginRight, const in // Position status bar near the bottom of the logical screen, regardless of orientation const auto screenHeight = renderer.getScreenHeight(); - const auto textY = screenHeight - orientedMarginBottom - 2; + const auto textY = screenHeight - orientedMarginBottom + 2; int percentageTextWidth = 0; int progressTextWidth = 0; diff --git a/src/activities/reader/EpubReaderChapterSelectionActivity.cpp b/src/activities/reader/EpubReaderChapterSelectionActivity.cpp index 090415d..ab9d8f7 100644 --- a/src/activities/reader/EpubReaderChapterSelectionActivity.cpp +++ b/src/activities/reader/EpubReaderChapterSelectionActivity.cpp @@ -116,7 +116,7 @@ void EpubReaderChapterSelectionActivity::renderScreen() { renderer.drawCenteredText(READER_FONT_ID, 10, "Select Chapter", true, BOLD); const auto pageStartIndex = selectorIndex / pageItems * pageItems; - renderer.fillRect(0, 60 + (selectorIndex % pageItems) * 30 + 2, pageWidth - 1, 30); + renderer.fillRect(0, 60 + (selectorIndex % pageItems) * 30 - 2, pageWidth - 1, 30); for (int i = pageStartIndex; i < epub->getSpineItemsCount() && i < pageStartIndex + pageItems; i++) { const int tocIndex = epub->getTocIndexForSpineIndex(i); if (tocIndex == -1) { diff --git a/src/activities/reader/FileSelectionActivity.cpp b/src/activities/reader/FileSelectionActivity.cpp index 6104da4..f58b4a0 100644 --- a/src/activities/reader/FileSelectionActivity.cpp +++ b/src/activities/reader/FileSelectionActivity.cpp @@ -171,7 +171,7 @@ void FileSelectionActivity::render() const { } const auto pageStartIndex = selectorIndex / PAGE_ITEMS * PAGE_ITEMS; - renderer.fillRect(0, 60 + (selectorIndex % PAGE_ITEMS) * 30 + 2, pageWidth - 1, 30); + renderer.fillRect(0, 60 + (selectorIndex % PAGE_ITEMS) * 30 - 2, pageWidth - 1, 30); for (int i = pageStartIndex; i < files.size() && i < pageStartIndex + PAGE_ITEMS; i++) { auto item = files[i]; int itemWidth = renderer.getTextWidth(UI_FONT_ID, item.c_str()); From 3dc5f6fec48263ced04d322bc6aac24d6bb71d8f Mon Sep 17 00:00:00 2001 From: Dave Allie Date: Sun, 28 Dec 2025 23:49:51 +1100 Subject: [PATCH 19/71] Avoid jumping straight into chapter selection screen --- src/activities/reader/FileSelectionActivity.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/activities/reader/FileSelectionActivity.cpp b/src/activities/reader/FileSelectionActivity.cpp index f58b4a0..fec0ef0 100644 --- a/src/activities/reader/FileSelectionActivity.cpp +++ b/src/activities/reader/FileSelectionActivity.cpp @@ -101,7 +101,7 @@ void FileSelectionActivity::loop() { const bool skipPage = inputManager.getHeldTime() > SKIP_PAGE_MS; - if (inputManager.wasPressed(InputManager::BTN_CONFIRM)) { + if (inputManager.wasReleased(InputManager::BTN_CONFIRM)) { if (files.empty()) { return; } From f9b604f04e8b0ca7e46302b4e3a3c36eb35a2952 Mon Sep 17 00:00:00 2001 From: Eunchurn Park Date: Sun, 28 Dec 2025 23:56:05 +0900 Subject: [PATCH 20/71] Add XTC/XTCH ebook format support (#135) ## Summary * **What is the goal of this PR?** Add support for XTC (XTeink X4 native) ebook format, which contains pre-rendered 480x800 1-bit bitmap pages optimized for e-ink displays. * **What changes are included?** - New `lib/Xtc/` library with XtcParser for reading XTC files - XtcReaderActivity for displaying XTC pages on e-ink display - XTC file detection in FileSelectionActivity - Cover BMP generation from first XTC page - Correct XTG page header structure (22 bytes) and bit polarity handling ## Additional Context - XTC files contain pre-rendered bitmap pages with embedded status bar (page numbers, progress %) - XTG page header: 22 bytes (magic + dimensions + reserved fields + bitmap size) - Bit polarity: 0 = black, 1 = white - No runtime text rendering needed - pages display directly on e-ink - Faster page display compared to EPUB since no parsing/rendering required - Memory efficient: loads one page at a time (48KB per page) - Tested with XTC files generated from https://x4converter.rho.sh/ - Verified correct page alignment and color rendering - Please report any issues if you test with XTC files from other sources. --------- Co-authored-by: Dave Allie --- lib/GfxRenderer/GfxRenderer.cpp | 19 +- lib/GfxRenderer/GfxRenderer.h | 3 +- lib/Xtc/README | 40 ++ lib/Xtc/Xtc.cpp | 337 ++++++++++++++++ lib/Xtc/Xtc.h | 97 +++++ lib/Xtc/Xtc/XtcParser.cpp | 316 +++++++++++++++ lib/Xtc/Xtc/XtcParser.h | 96 +++++ lib/Xtc/Xtc/XtcTypes.h | 147 +++++++ src/activities/boot_sleep/SleepActivity.cpp | 55 ++- .../reader/FileSelectionActivity.cpp | 10 +- src/activities/reader/ReaderActivity.cpp | 105 +++-- src/activities/reader/ReaderActivity.h | 16 +- src/activities/reader/XtcReaderActivity.cpp | 360 ++++++++++++++++++ src/activities/reader/XtcReaderActivity.h | 41 ++ 14 files changed, 1598 insertions(+), 44 deletions(-) create mode 100644 lib/Xtc/README create mode 100644 lib/Xtc/Xtc.cpp create mode 100644 lib/Xtc/Xtc.h create mode 100644 lib/Xtc/Xtc/XtcParser.cpp create mode 100644 lib/Xtc/Xtc/XtcParser.h create mode 100644 lib/Xtc/Xtc/XtcTypes.h create mode 100644 src/activities/reader/XtcReaderActivity.cpp create mode 100644 src/activities/reader/XtcReaderActivity.h diff --git a/lib/GfxRenderer/GfxRenderer.cpp b/lib/GfxRenderer/GfxRenderer.cpp index 5b84b50..0fc4abf 100644 --- a/lib/GfxRenderer/GfxRenderer.cpp +++ b/lib/GfxRenderer/GfxRenderer.cpp @@ -341,12 +341,13 @@ void GfxRenderer::freeBwBufferChunks() { * This should be called before grayscale buffers are populated. * A `restoreBwBuffer` call should always follow the grayscale render if this method was called. * Uses chunked allocation to avoid needing 48KB of contiguous memory. + * Returns true if buffer was stored successfully, false if allocation failed. */ -void GfxRenderer::storeBwBuffer() { +bool GfxRenderer::storeBwBuffer() { const uint8_t* frameBuffer = einkDisplay.getFrameBuffer(); if (!frameBuffer) { Serial.printf("[%lu] [GFX] !! No framebuffer in storeBwBuffer\n", millis()); - return; + return false; } // Allocate and copy each chunk @@ -367,7 +368,7 @@ void GfxRenderer::storeBwBuffer() { BW_BUFFER_CHUNK_SIZE); // Free previously allocated chunks freeBwBufferChunks(); - return; + return false; } memcpy(bwBufferChunks[i], frameBuffer + offset, BW_BUFFER_CHUNK_SIZE); @@ -375,6 +376,7 @@ void GfxRenderer::storeBwBuffer() { Serial.printf("[%lu] [GFX] Stored BW buffer in %zu chunks (%zu bytes each)\n", millis(), BW_BUFFER_NUM_CHUNKS, BW_BUFFER_CHUNK_SIZE); + return true; } /** @@ -422,6 +424,17 @@ void GfxRenderer::restoreBwBuffer() { Serial.printf("[%lu] [GFX] Restored and freed BW buffer chunks\n", millis()); } +/** + * Cleanup grayscale buffers using the current frame buffer. + * Use this when BW buffer was re-rendered instead of stored/restored. + */ +void GfxRenderer::cleanupGrayscaleWithFrameBuffer() const { + uint8_t* frameBuffer = einkDisplay.getFrameBuffer(); + if (frameBuffer) { + einkDisplay.cleanupGrayscaleBuffers(frameBuffer); + } +} + void GfxRenderer::renderChar(const EpdFontFamily& fontFamily, const uint32_t cp, int* x, const int* y, const bool pixelState, const EpdFontStyle style) const { const EpdGlyph* glyph = fontFamily.getGlyph(cp, style); diff --git a/lib/GfxRenderer/GfxRenderer.h b/lib/GfxRenderer/GfxRenderer.h index 55d0808..241c76e 100644 --- a/lib/GfxRenderer/GfxRenderer.h +++ b/lib/GfxRenderer/GfxRenderer.h @@ -85,8 +85,9 @@ class GfxRenderer { void copyGrayscaleLsbBuffers() const; void copyGrayscaleMsbBuffers() const; void displayGrayBuffer() const; - void storeBwBuffer(); + bool storeBwBuffer(); // Returns true if buffer was stored successfully void restoreBwBuffer(); + void cleanupGrayscaleWithFrameBuffer() const; // Low level functions uint8_t* getFrameBuffer() const; diff --git a/lib/Xtc/README b/lib/Xtc/README new file mode 100644 index 0000000..1f55eff --- /dev/null +++ b/lib/Xtc/README @@ -0,0 +1,40 @@ +# XTC/XTCH Library + +XTC ebook format support for CrossPoint Reader. + +## Supported Formats + +| Format | Extension | Description | +|--------|-----------|----------------------------------------------| +| XTC | `.xtc` | Container with XTG pages (1-bit monochrome) | +| XTCH | `.xtch` | Container with XTH pages (2-bit grayscale) | + +## Format Overview + +XTC/XTCH are container formats designed for ESP32 e-paper displays. They store pre-rendered bitmap pages optimized for the XTeink X4 e-reader (480x800 resolution). + +### Container Structure (XTC/XTCH) + +- 56-byte header with metadata offsets +- Optional metadata (title, author, etc.) +- Page index table (16 bytes per page) +- Page data (XTG or XTH format) + +### Page Formats + +#### XTG (1-bit monochrome) + +- Row-major storage, 8 pixels per byte +- MSB first (bit 7 = leftmost pixel) +- 0 = Black, 1 = White + +#### XTH (2-bit grayscale) + +- Two bit planes stored sequentially +- Column-major order (right to left) +- 8 vertical pixels per byte +- Grayscale: 0=White, 1=Dark Grey, 2=Light Grey, 3=Black + +## Reference + +Original format info: diff --git a/lib/Xtc/Xtc.cpp b/lib/Xtc/Xtc.cpp new file mode 100644 index 0000000..fe0b107 --- /dev/null +++ b/lib/Xtc/Xtc.cpp @@ -0,0 +1,337 @@ +/** + * Xtc.cpp + * + * Main XTC ebook class implementation + * XTC ebook support for CrossPoint Reader + */ + +#include "Xtc.h" + +#include +#include +#include + +bool Xtc::load() { + Serial.printf("[%lu] [XTC] Loading XTC: %s\n", millis(), filepath.c_str()); + + // Initialize parser + parser.reset(new xtc::XtcParser()); + + // Open XTC file + xtc::XtcError err = parser->open(filepath.c_str()); + if (err != xtc::XtcError::OK) { + Serial.printf("[%lu] [XTC] Failed to load: %s\n", millis(), xtc::errorToString(err)); + parser.reset(); + return false; + } + + loaded = true; + Serial.printf("[%lu] [XTC] Loaded XTC: %s (%lu pages)\n", millis(), filepath.c_str(), parser->getPageCount()); + return true; +} + +bool Xtc::clearCache() const { + if (!SD.exists(cachePath.c_str())) { + Serial.printf("[%lu] [XTC] Cache does not exist, no action needed\n", millis()); + return true; + } + + if (!FsHelpers::removeDir(cachePath.c_str())) { + Serial.printf("[%lu] [XTC] Failed to clear cache\n", millis()); + return false; + } + + Serial.printf("[%lu] [XTC] Cache cleared successfully\n", millis()); + return true; +} + +void Xtc::setupCacheDir() const { + if (SD.exists(cachePath.c_str())) { + return; + } + + // Create directories recursively + for (size_t i = 1; i < cachePath.length(); i++) { + if (cachePath[i] == '/') { + SD.mkdir(cachePath.substr(0, i).c_str()); + } + } + SD.mkdir(cachePath.c_str()); +} + +std::string Xtc::getTitle() const { + if (!loaded || !parser) { + return ""; + } + + // Try to get title from XTC metadata first + std::string title = parser->getTitle(); + if (!title.empty()) { + return title; + } + + // Fallback: extract filename from path as title + size_t lastSlash = filepath.find_last_of('/'); + size_t lastDot = filepath.find_last_of('.'); + + if (lastSlash == std::string::npos) { + lastSlash = 0; + } else { + lastSlash++; + } + + if (lastDot == std::string::npos || lastDot <= lastSlash) { + return filepath.substr(lastSlash); + } + + return filepath.substr(lastSlash, lastDot - lastSlash); +} + +std::string Xtc::getCoverBmpPath() const { return cachePath + "/cover.bmp"; } + +bool Xtc::generateCoverBmp() const { + // Already generated + if (SD.exists(getCoverBmpPath().c_str())) { + return true; + } + + if (!loaded || !parser) { + Serial.printf("[%lu] [XTC] Cannot generate cover BMP, file not loaded\n", millis()); + return false; + } + + if (parser->getPageCount() == 0) { + Serial.printf("[%lu] [XTC] No pages in XTC file\n", millis()); + return false; + } + + // Setup cache directory + setupCacheDir(); + + // Get first page info for cover + xtc::PageInfo pageInfo; + if (!parser->getPageInfo(0, pageInfo)) { + Serial.printf("[%lu] [XTC] Failed to get first page info\n", millis()); + return false; + } + + // Get bit depth + const uint8_t bitDepth = parser->getBitDepth(); + + // Allocate buffer for page data + // XTG (1-bit): Row-major, ((width+7)/8) * height bytes + // XTH (2-bit): Two bit planes, column-major, ((width * height + 7) / 8) * 2 bytes + size_t bitmapSize; + if (bitDepth == 2) { + bitmapSize = ((static_cast(pageInfo.width) * pageInfo.height + 7) / 8) * 2; + } else { + bitmapSize = ((pageInfo.width + 7) / 8) * pageInfo.height; + } + uint8_t* pageBuffer = static_cast(malloc(bitmapSize)); + if (!pageBuffer) { + Serial.printf("[%lu] [XTC] Failed to allocate page buffer (%lu bytes)\n", millis(), bitmapSize); + return false; + } + + // Load first page (cover) + size_t bytesRead = const_cast(parser.get())->loadPage(0, pageBuffer, bitmapSize); + if (bytesRead == 0) { + Serial.printf("[%lu] [XTC] Failed to load cover page\n", millis()); + free(pageBuffer); + return false; + } + + // Create BMP file + File coverBmp; + if (!FsHelpers::openFileForWrite("XTC", getCoverBmpPath(), coverBmp)) { + Serial.printf("[%lu] [XTC] Failed to create cover BMP file\n", millis()); + free(pageBuffer); + return false; + } + + // Write BMP header + // BMP file header (14 bytes) + const uint32_t rowSize = ((pageInfo.width + 31) / 32) * 4; // Row size aligned to 4 bytes + const uint32_t imageSize = rowSize * pageInfo.height; + const uint32_t fileSize = 14 + 40 + 8 + imageSize; // Header + DIB + palette + data + + // File header + coverBmp.write('B'); + coverBmp.write('M'); + coverBmp.write(reinterpret_cast(&fileSize), 4); + uint32_t reserved = 0; + coverBmp.write(reinterpret_cast(&reserved), 4); + uint32_t dataOffset = 14 + 40 + 8; // 1-bit palette has 2 colors (8 bytes) + coverBmp.write(reinterpret_cast(&dataOffset), 4); + + // DIB header (BITMAPINFOHEADER - 40 bytes) + uint32_t dibHeaderSize = 40; + coverBmp.write(reinterpret_cast(&dibHeaderSize), 4); + int32_t width = pageInfo.width; + coverBmp.write(reinterpret_cast(&width), 4); + int32_t height = -static_cast(pageInfo.height); // Negative for top-down + coverBmp.write(reinterpret_cast(&height), 4); + uint16_t planes = 1; + coverBmp.write(reinterpret_cast(&planes), 2); + uint16_t bitsPerPixel = 1; // 1-bit monochrome + coverBmp.write(reinterpret_cast(&bitsPerPixel), 2); + uint32_t compression = 0; // BI_RGB (no compression) + coverBmp.write(reinterpret_cast(&compression), 4); + coverBmp.write(reinterpret_cast(&imageSize), 4); + int32_t ppmX = 2835; // 72 DPI + coverBmp.write(reinterpret_cast(&ppmX), 4); + int32_t ppmY = 2835; + coverBmp.write(reinterpret_cast(&ppmY), 4); + uint32_t colorsUsed = 2; + coverBmp.write(reinterpret_cast(&colorsUsed), 4); + uint32_t colorsImportant = 2; + coverBmp.write(reinterpret_cast(&colorsImportant), 4); + + // Color palette (2 colors for 1-bit) + // XTC uses inverted polarity: 0 = black, 1 = white + // Color 0: Black (text/foreground in XTC) + uint8_t black[4] = {0x00, 0x00, 0x00, 0x00}; + coverBmp.write(black, 4); + // Color 1: White (background in XTC) + uint8_t white[4] = {0xFF, 0xFF, 0xFF, 0x00}; + coverBmp.write(white, 4); + + // Write bitmap data + // BMP requires 4-byte row alignment + const size_t dstRowSize = (pageInfo.width + 7) / 8; // 1-bit destination row size + + if (bitDepth == 2) { + // XTH 2-bit mode: Two bit planes, column-major order + // - Columns scanned right to left (x = width-1 down to 0) + // - 8 vertical pixels per byte (MSB = topmost pixel in group) + // - First plane: Bit1, Second plane: Bit2 + // - Pixel value = (bit1 << 1) | bit2 + const size_t planeSize = (static_cast(pageInfo.width) * pageInfo.height + 7) / 8; + const uint8_t* plane1 = pageBuffer; // Bit1 plane + const uint8_t* plane2 = pageBuffer + planeSize; // Bit2 plane + const size_t colBytes = (pageInfo.height + 7) / 8; // Bytes per column + + // Allocate a row buffer for 1-bit output + uint8_t* rowBuffer = static_cast(malloc(dstRowSize)); + if (!rowBuffer) { + free(pageBuffer); + coverBmp.close(); + return false; + } + + for (uint16_t y = 0; y < pageInfo.height; y++) { + memset(rowBuffer, 0xFF, dstRowSize); // Start with all white + + for (uint16_t x = 0; x < pageInfo.width; x++) { + // Column-major, right to left: column index = (width - 1 - x) + const size_t colIndex = pageInfo.width - 1 - x; + const size_t byteInCol = y / 8; + const size_t bitInByte = 7 - (y % 8); // MSB = topmost pixel + + const size_t byteOffset = colIndex * colBytes + byteInCol; + const uint8_t bit1 = (plane1[byteOffset] >> bitInByte) & 1; + const uint8_t bit2 = (plane2[byteOffset] >> bitInByte) & 1; + const uint8_t pixelValue = (bit1 << 1) | bit2; + + // Threshold: 0=white (1); 1,2,3=black (0) + if (pixelValue >= 1) { + // Set bit to 0 (black) in BMP format + const size_t dstByte = x / 8; + const size_t dstBit = 7 - (x % 8); + rowBuffer[dstByte] &= ~(1 << dstBit); + } + } + + // Write converted row + coverBmp.write(rowBuffer, dstRowSize); + + // Pad to 4-byte boundary + uint8_t padding[4] = {0, 0, 0, 0}; + size_t paddingSize = rowSize - dstRowSize; + if (paddingSize > 0) { + coverBmp.write(padding, paddingSize); + } + } + + free(rowBuffer); + } else { + // 1-bit source: write directly with proper padding + const size_t srcRowSize = (pageInfo.width + 7) / 8; + + for (uint16_t y = 0; y < pageInfo.height; y++) { + // Write source row + coverBmp.write(pageBuffer + y * srcRowSize, srcRowSize); + + // Pad to 4-byte boundary + uint8_t padding[4] = {0, 0, 0, 0}; + size_t paddingSize = rowSize - srcRowSize; + if (paddingSize > 0) { + coverBmp.write(padding, paddingSize); + } + } + } + + coverBmp.close(); + free(pageBuffer); + + Serial.printf("[%lu] [XTC] Generated cover BMP: %s\n", millis(), getCoverBmpPath().c_str()); + return true; +} + +uint32_t Xtc::getPageCount() const { + if (!loaded || !parser) { + return 0; + } + return parser->getPageCount(); +} + +uint16_t Xtc::getPageWidth() const { + if (!loaded || !parser) { + return 0; + } + return parser->getWidth(); +} + +uint16_t Xtc::getPageHeight() const { + if (!loaded || !parser) { + return 0; + } + return parser->getHeight(); +} + +uint8_t Xtc::getBitDepth() const { + if (!loaded || !parser) { + return 1; // Default to 1-bit + } + return parser->getBitDepth(); +} + +size_t Xtc::loadPage(uint32_t pageIndex, uint8_t* buffer, size_t bufferSize) const { + if (!loaded || !parser) { + return 0; + } + return const_cast(parser.get())->loadPage(pageIndex, buffer, bufferSize); +} + +xtc::XtcError Xtc::loadPageStreaming(uint32_t pageIndex, + std::function callback, + size_t chunkSize) const { + if (!loaded || !parser) { + return xtc::XtcError::FILE_NOT_FOUND; + } + return const_cast(parser.get())->loadPageStreaming(pageIndex, callback, chunkSize); +} + +uint8_t Xtc::calculateProgress(uint32_t currentPage) const { + if (!loaded || !parser || parser->getPageCount() == 0) { + return 0; + } + return static_cast((currentPage + 1) * 100 / parser->getPageCount()); +} + +xtc::XtcError Xtc::getLastError() const { + if (!parser) { + return xtc::XtcError::FILE_NOT_FOUND; + } + return parser->getLastError(); +} diff --git a/lib/Xtc/Xtc.h b/lib/Xtc/Xtc.h new file mode 100644 index 0000000..42e05ef --- /dev/null +++ b/lib/Xtc/Xtc.h @@ -0,0 +1,97 @@ +/** + * Xtc.h + * + * Main XTC ebook class for CrossPoint Reader + * Provides EPUB-like interface for XTC file handling + */ + +#pragma once + +#include +#include + +#include "Xtc/XtcParser.h" +#include "Xtc/XtcTypes.h" + +/** + * XTC Ebook Handler + * + * Handles XTC file loading, page access, and cover image generation. + * Interface is designed to be similar to Epub class for easy integration. + */ +class Xtc { + std::string filepath; + std::string cachePath; + std::unique_ptr parser; + bool loaded; + + public: + explicit Xtc(std::string filepath, const std::string& cacheDir) : filepath(std::move(filepath)), loaded(false) { + // Create cache key based on filepath (same as Epub) + cachePath = cacheDir + "/xtc_" + std::to_string(std::hash{}(this->filepath)); + } + ~Xtc() = default; + + /** + * Load XTC file + * @return true on success + */ + bool load(); + + /** + * Clear cached data + * @return true on success + */ + bool clearCache() const; + + /** + * Setup cache directory + */ + void setupCacheDir() const; + + // Path accessors + const std::string& getCachePath() const { return cachePath; } + const std::string& getPath() const { return filepath; } + + // Metadata + std::string getTitle() const; + + // Cover image support (for sleep screen) + std::string getCoverBmpPath() const; + bool generateCoverBmp() const; + + // Page access + uint32_t getPageCount() const; + uint16_t getPageWidth() const; + uint16_t getPageHeight() const; + uint8_t getBitDepth() const; // 1 = XTC (1-bit), 2 = XTCH (2-bit) + + /** + * Load page bitmap data + * @param pageIndex Page index (0-based) + * @param buffer Output buffer + * @param bufferSize Buffer size + * @return Number of bytes read + */ + size_t loadPage(uint32_t pageIndex, uint8_t* buffer, size_t bufferSize) const; + + /** + * Load page with streaming callback + * @param pageIndex Page index + * @param callback Callback for each chunk + * @param chunkSize Chunk size + * @return Error code + */ + xtc::XtcError loadPageStreaming(uint32_t pageIndex, + std::function callback, + size_t chunkSize = 1024) const; + + // Progress calculation + uint8_t calculateProgress(uint32_t currentPage) const; + + // Check if file is loaded + bool isLoaded() const { return loaded; } + + // Error information + xtc::XtcError getLastError() const; +}; diff --git a/lib/Xtc/Xtc/XtcParser.cpp b/lib/Xtc/Xtc/XtcParser.cpp new file mode 100644 index 0000000..a443f57 --- /dev/null +++ b/lib/Xtc/Xtc/XtcParser.cpp @@ -0,0 +1,316 @@ +/** + * XtcParser.cpp + * + * XTC file parsing implementation + * XTC ebook support for CrossPoint Reader + */ + +#include "XtcParser.h" + +#include +#include + +#include + +namespace xtc { + +XtcParser::XtcParser() + : m_isOpen(false), + m_defaultWidth(DISPLAY_WIDTH), + m_defaultHeight(DISPLAY_HEIGHT), + m_bitDepth(1), + m_lastError(XtcError::OK) { + memset(&m_header, 0, sizeof(m_header)); +} + +XtcParser::~XtcParser() { close(); } + +XtcError XtcParser::open(const char* filepath) { + // Close if already open + if (m_isOpen) { + close(); + } + + // Open file + if (!FsHelpers::openFileForRead("XTC", filepath, m_file)) { + m_lastError = XtcError::FILE_NOT_FOUND; + return m_lastError; + } + + // Read header + m_lastError = readHeader(); + if (m_lastError != XtcError::OK) { + Serial.printf("[%lu] [XTC] Failed to read header: %s\n", millis(), errorToString(m_lastError)); + m_file.close(); + return m_lastError; + } + + // Read title if available + readTitle(); + + // Read page table + m_lastError = readPageTable(); + if (m_lastError != XtcError::OK) { + Serial.printf("[%lu] [XTC] Failed to read page table: %s\n", millis(), errorToString(m_lastError)); + m_file.close(); + return m_lastError; + } + + m_isOpen = true; + Serial.printf("[%lu] [XTC] Opened file: %s (%u pages, %dx%d)\n", millis(), filepath, m_header.pageCount, + m_defaultWidth, m_defaultHeight); + return XtcError::OK; +} + +void XtcParser::close() { + if (m_isOpen) { + m_file.close(); + m_isOpen = false; + } + m_pageTable.clear(); + m_title.clear(); + memset(&m_header, 0, sizeof(m_header)); +} + +XtcError XtcParser::readHeader() { + // Read first 56 bytes of header + size_t bytesRead = m_file.read(reinterpret_cast(&m_header), sizeof(XtcHeader)); + if (bytesRead != sizeof(XtcHeader)) { + return XtcError::READ_ERROR; + } + + // Verify magic number (accept both XTC and XTCH) + if (m_header.magic != XTC_MAGIC && m_header.magic != XTCH_MAGIC) { + Serial.printf("[%lu] [XTC] Invalid magic: 0x%08X (expected 0x%08X or 0x%08X)\n", millis(), m_header.magic, + XTC_MAGIC, XTCH_MAGIC); + return XtcError::INVALID_MAGIC; + } + + // Determine bit depth from file magic + m_bitDepth = (m_header.magic == XTCH_MAGIC) ? 2 : 1; + + // Check version + if (m_header.version > 1) { + Serial.printf("[%lu] [XTC] Unsupported version: %d\n", millis(), m_header.version); + return XtcError::INVALID_VERSION; + } + + // Basic validation + if (m_header.pageCount == 0) { + return XtcError::CORRUPTED_HEADER; + } + + Serial.printf("[%lu] [XTC] Header: magic=0x%08X (%s), ver=%u, pages=%u, bitDepth=%u\n", millis(), m_header.magic, + (m_header.magic == XTCH_MAGIC) ? "XTCH" : "XTC", m_header.version, m_header.pageCount, m_bitDepth); + + return XtcError::OK; +} + +XtcError XtcParser::readTitle() { + // Title is usually at offset 0x38 (56) for 88-byte headers + // Read title as null-terminated UTF-8 string + if (m_header.titleOffset == 0) { + m_header.titleOffset = 0x38; // Default offset + } + + if (!m_file.seek(m_header.titleOffset)) { + return XtcError::READ_ERROR; + } + + char titleBuf[128] = {0}; + m_file.read(reinterpret_cast(titleBuf), sizeof(titleBuf) - 1); + m_title = titleBuf; + + Serial.printf("[%lu] [XTC] Title: %s\n", millis(), m_title.c_str()); + return XtcError::OK; +} + +XtcError XtcParser::readPageTable() { + if (m_header.pageTableOffset == 0) { + Serial.printf("[%lu] [XTC] Page table offset is 0, cannot read\n", millis()); + return XtcError::CORRUPTED_HEADER; + } + + // Seek to page table + if (!m_file.seek(m_header.pageTableOffset)) { + Serial.printf("[%lu] [XTC] Failed to seek to page table at %llu\n", millis(), m_header.pageTableOffset); + return XtcError::READ_ERROR; + } + + m_pageTable.resize(m_header.pageCount); + + // Read page table entries + for (uint16_t i = 0; i < m_header.pageCount; i++) { + PageTableEntry entry; + size_t bytesRead = m_file.read(reinterpret_cast(&entry), sizeof(PageTableEntry)); + if (bytesRead != sizeof(PageTableEntry)) { + Serial.printf("[%lu] [XTC] Failed to read page table entry %u\n", millis(), i); + return XtcError::READ_ERROR; + } + + m_pageTable[i].offset = static_cast(entry.dataOffset); + m_pageTable[i].size = entry.dataSize; + m_pageTable[i].width = entry.width; + m_pageTable[i].height = entry.height; + m_pageTable[i].bitDepth = m_bitDepth; + + // Update default dimensions from first page + if (i == 0) { + m_defaultWidth = entry.width; + m_defaultHeight = entry.height; + } + } + + Serial.printf("[%lu] [XTC] Read %u page table entries\n", millis(), m_header.pageCount); + return XtcError::OK; +} + +bool XtcParser::getPageInfo(uint32_t pageIndex, PageInfo& info) const { + if (pageIndex >= m_pageTable.size()) { + return false; + } + info = m_pageTable[pageIndex]; + return true; +} + +size_t XtcParser::loadPage(uint32_t pageIndex, uint8_t* buffer, size_t bufferSize) { + if (!m_isOpen) { + m_lastError = XtcError::FILE_NOT_FOUND; + return 0; + } + + if (pageIndex >= m_header.pageCount) { + m_lastError = XtcError::PAGE_OUT_OF_RANGE; + return 0; + } + + const PageInfo& page = m_pageTable[pageIndex]; + + // Seek to page data + if (!m_file.seek(page.offset)) { + Serial.printf("[%lu] [XTC] Failed to seek to page %u at offset %lu\n", millis(), pageIndex, page.offset); + m_lastError = XtcError::READ_ERROR; + return 0; + } + + // Read page header (XTG for 1-bit, XTH for 2-bit - same structure) + XtgPageHeader pageHeader; + size_t headerRead = m_file.read(reinterpret_cast(&pageHeader), sizeof(XtgPageHeader)); + if (headerRead != sizeof(XtgPageHeader)) { + Serial.printf("[%lu] [XTC] Failed to read page header for page %u\n", millis(), pageIndex); + m_lastError = XtcError::READ_ERROR; + return 0; + } + + // Verify page magic (XTG for 1-bit, XTH for 2-bit) + const uint32_t expectedMagic = (m_bitDepth == 2) ? XTH_MAGIC : XTG_MAGIC; + if (pageHeader.magic != expectedMagic) { + Serial.printf("[%lu] [XTC] Invalid page magic for page %u: 0x%08X (expected 0x%08X)\n", millis(), pageIndex, + pageHeader.magic, expectedMagic); + m_lastError = XtcError::INVALID_MAGIC; + return 0; + } + + // Calculate bitmap size based on bit depth + // XTG (1-bit): Row-major, ((width+7)/8) * height bytes + // XTH (2-bit): Two bit planes, column-major, ((width * height + 7) / 8) * 2 bytes + size_t bitmapSize; + if (m_bitDepth == 2) { + // XTH: two bit planes, each containing (width * height) bits rounded up to bytes + bitmapSize = ((static_cast(pageHeader.width) * pageHeader.height + 7) / 8) * 2; + } else { + bitmapSize = ((pageHeader.width + 7) / 8) * pageHeader.height; + } + + // Check buffer size + if (bufferSize < bitmapSize) { + Serial.printf("[%lu] [XTC] Buffer too small: need %u, have %u\n", millis(), bitmapSize, bufferSize); + m_lastError = XtcError::MEMORY_ERROR; + return 0; + } + + // Read bitmap data + size_t bytesRead = m_file.read(buffer, bitmapSize); + if (bytesRead != bitmapSize) { + Serial.printf("[%lu] [XTC] Page read error: expected %u, got %u\n", millis(), bitmapSize, bytesRead); + m_lastError = XtcError::READ_ERROR; + return 0; + } + + m_lastError = XtcError::OK; + return bytesRead; +} + +XtcError XtcParser::loadPageStreaming(uint32_t pageIndex, + std::function callback, + size_t chunkSize) { + if (!m_isOpen) { + return XtcError::FILE_NOT_FOUND; + } + + if (pageIndex >= m_header.pageCount) { + return XtcError::PAGE_OUT_OF_RANGE; + } + + const PageInfo& page = m_pageTable[pageIndex]; + + // Seek to page data + if (!m_file.seek(page.offset)) { + return XtcError::READ_ERROR; + } + + // Read and skip page header (XTG for 1-bit, XTH for 2-bit) + XtgPageHeader pageHeader; + size_t headerRead = m_file.read(reinterpret_cast(&pageHeader), sizeof(XtgPageHeader)); + const uint32_t expectedMagic = (m_bitDepth == 2) ? XTH_MAGIC : XTG_MAGIC; + if (headerRead != sizeof(XtgPageHeader) || pageHeader.magic != expectedMagic) { + return XtcError::READ_ERROR; + } + + // Calculate bitmap size based on bit depth + // XTG (1-bit): Row-major, ((width+7)/8) * height bytes + // XTH (2-bit): Two bit planes, ((width * height + 7) / 8) * 2 bytes + size_t bitmapSize; + if (m_bitDepth == 2) { + bitmapSize = ((static_cast(pageHeader.width) * pageHeader.height + 7) / 8) * 2; + } else { + bitmapSize = ((pageHeader.width + 7) / 8) * pageHeader.height; + } + + // Read in chunks + std::vector chunk(chunkSize); + size_t totalRead = 0; + + while (totalRead < bitmapSize) { + size_t toRead = std::min(chunkSize, bitmapSize - totalRead); + size_t bytesRead = m_file.read(chunk.data(), toRead); + + if (bytesRead == 0) { + return XtcError::READ_ERROR; + } + + callback(chunk.data(), bytesRead, totalRead); + totalRead += bytesRead; + } + + return XtcError::OK; +} + +bool XtcParser::isValidXtcFile(const char* filepath) { + File file = SD.open(filepath, FILE_READ); + if (!file) { + return false; + } + + uint32_t magic = 0; + size_t bytesRead = file.read(reinterpret_cast(&magic), sizeof(magic)); + file.close(); + + if (bytesRead != sizeof(magic)) { + return false; + } + + return (magic == XTC_MAGIC || magic == XTCH_MAGIC); +} + +} // namespace xtc diff --git a/lib/Xtc/Xtc/XtcParser.h b/lib/Xtc/Xtc/XtcParser.h new file mode 100644 index 0000000..b0a402a --- /dev/null +++ b/lib/Xtc/Xtc/XtcParser.h @@ -0,0 +1,96 @@ +/** + * XtcParser.h + * + * XTC file parsing and page data extraction + * XTC ebook support for CrossPoint Reader + */ + +#pragma once + +#include + +#include +#include +#include +#include + +#include "XtcTypes.h" + +namespace xtc { + +/** + * XTC File Parser + * + * Reads XTC files from SD card and extracts page data. + * Designed for ESP32-C3's limited RAM (~380KB) using streaming. + */ +class XtcParser { + public: + XtcParser(); + ~XtcParser(); + + // File open/close + XtcError open(const char* filepath); + void close(); + bool isOpen() const { return m_isOpen; } + + // Header information access + const XtcHeader& getHeader() const { return m_header; } + uint16_t getPageCount() const { return m_header.pageCount; } + uint16_t getWidth() const { return m_defaultWidth; } + uint16_t getHeight() const { return m_defaultHeight; } + uint8_t getBitDepth() const { return m_bitDepth; } // 1 = XTC/XTG, 2 = XTCH/XTH + + // Page information + bool getPageInfo(uint32_t pageIndex, PageInfo& info) const; + + /** + * Load page bitmap (raw 1-bit data, skipping XTG header) + * + * @param pageIndex Page index (0-based) + * @param buffer Output buffer (caller allocated) + * @param bufferSize Buffer size + * @return Number of bytes read on success, 0 on failure + */ + size_t loadPage(uint32_t pageIndex, uint8_t* buffer, size_t bufferSize); + + /** + * Streaming page load + * Memory-efficient method that reads page data in chunks. + * + * @param pageIndex Page index + * @param callback Callback function to receive data chunks + * @param chunkSize Chunk size (default: 1024 bytes) + * @return Error code + */ + XtcError loadPageStreaming(uint32_t pageIndex, + std::function callback, + size_t chunkSize = 1024); + + // Get title from metadata + std::string getTitle() const { return m_title; } + + // Validation + static bool isValidXtcFile(const char* filepath); + + // Error information + XtcError getLastError() const { return m_lastError; } + + private: + File m_file; + bool m_isOpen; + XtcHeader m_header; + std::vector m_pageTable; + std::string m_title; + uint16_t m_defaultWidth; + uint16_t m_defaultHeight; + uint8_t m_bitDepth; // 1 = XTC/XTG (1-bit), 2 = XTCH/XTH (2-bit) + XtcError m_lastError; + + // Internal helper functions + XtcError readHeader(); + XtcError readPageTable(); + XtcError readTitle(); +}; + +} // namespace xtc diff --git a/lib/Xtc/Xtc/XtcTypes.h b/lib/Xtc/Xtc/XtcTypes.h new file mode 100644 index 0000000..30761d9 --- /dev/null +++ b/lib/Xtc/Xtc/XtcTypes.h @@ -0,0 +1,147 @@ +/** + * XtcTypes.h + * + * XTC file format type definitions + * XTC ebook support for CrossPoint Reader + * + * XTC is the native binary ebook format for XTeink X4 e-reader. + * It stores pre-rendered bitmap images per page. + * + * Format based on EPUB2XTC converter by Rafal-P-Mazur + */ + +#pragma once + +#include + +namespace xtc { + +// XTC file magic numbers (little-endian) +// "XTC\0" = 0x58, 0x54, 0x43, 0x00 +constexpr uint32_t XTC_MAGIC = 0x00435458; // "XTC\0" in little-endian (1-bit fast mode) +// "XTCH" = 0x58, 0x54, 0x43, 0x48 +constexpr uint32_t XTCH_MAGIC = 0x48435458; // "XTCH" in little-endian (2-bit high quality mode) +// "XTG\0" = 0x58, 0x54, 0x47, 0x00 +constexpr uint32_t XTG_MAGIC = 0x00475458; // "XTG\0" for 1-bit page data +// "XTH\0" = 0x58, 0x54, 0x48, 0x00 +constexpr uint32_t XTH_MAGIC = 0x00485458; // "XTH\0" for 2-bit page data + +// XTeink X4 display resolution +constexpr uint16_t DISPLAY_WIDTH = 480; +constexpr uint16_t DISPLAY_HEIGHT = 800; + +// XTC file header (56 bytes) +#pragma pack(push, 1) +struct XtcHeader { + uint32_t magic; // 0x00: Magic number "XTC\0" (0x00435458) + uint16_t version; // 0x04: Format version (typically 1) + uint16_t pageCount; // 0x06: Total page count + uint32_t flags; // 0x08: Flags/reserved + uint32_t headerSize; // 0x0C: Size of header section (typically 88) + uint32_t reserved1; // 0x10: Reserved + uint32_t tocOffset; // 0x14: TOC offset (0 if unused) - 4 bytes, not 8! + uint64_t pageTableOffset; // 0x18: Page table offset + uint64_t dataOffset; // 0x20: First page data offset + uint64_t reserved2; // 0x28: Reserved + uint32_t titleOffset; // 0x30: Title string offset + uint32_t padding; // 0x34: Padding to 56 bytes +}; +#pragma pack(pop) + +// Page table entry (16 bytes per page) +#pragma pack(push, 1) +struct PageTableEntry { + uint64_t dataOffset; // 0x00: Absolute offset to page data + uint32_t dataSize; // 0x08: Page data size in bytes + uint16_t width; // 0x0C: Page width (480) + uint16_t height; // 0x0E: Page height (800) +}; +#pragma pack(pop) + +// XTG/XTH page data header (22 bytes) +// Used for both 1-bit (XTG) and 2-bit (XTH) formats +#pragma pack(push, 1) +struct XtgPageHeader { + uint32_t magic; // 0x00: File identifier (XTG: 0x00475458, XTH: 0x00485458) + uint16_t width; // 0x04: Image width (pixels) + uint16_t height; // 0x06: Image height (pixels) + uint8_t colorMode; // 0x08: Color mode (0=monochrome) + uint8_t compression; // 0x09: Compression (0=uncompressed) + uint32_t dataSize; // 0x0A: Image data size (bytes) + uint64_t md5; // 0x0E: MD5 checksum (first 8 bytes, optional) + // Followed by bitmap data at offset 0x16 (22) + // + // XTG (1-bit): Row-major, 8 pixels/byte, MSB first + // dataSize = ((width + 7) / 8) * height + // + // XTH (2-bit): Two bit planes, column-major (right-to-left), 8 vertical pixels/byte + // dataSize = ((width * height + 7) / 8) * 2 + // First plane: Bit1 for all pixels + // Second plane: Bit2 for all pixels + // pixelValue = (bit1 << 1) | bit2 +}; +#pragma pack(pop) + +// Page information (internal use, optimized for memory) +struct PageInfo { + uint32_t offset; // File offset to page data (max 4GB file size) + uint32_t size; // Data size (bytes) + uint16_t width; // Page width + uint16_t height; // Page height + uint8_t bitDepth; // 1 = XTG (1-bit), 2 = XTH (2-bit grayscale) + uint8_t padding; // Alignment padding +}; // 16 bytes total + +// Error codes +enum class XtcError { + OK = 0, + FILE_NOT_FOUND, + INVALID_MAGIC, + INVALID_VERSION, + CORRUPTED_HEADER, + PAGE_OUT_OF_RANGE, + READ_ERROR, + WRITE_ERROR, + MEMORY_ERROR, + DECOMPRESSION_ERROR, +}; + +// Convert error code to string +inline const char* errorToString(XtcError err) { + switch (err) { + case XtcError::OK: + return "OK"; + case XtcError::FILE_NOT_FOUND: + return "File not found"; + case XtcError::INVALID_MAGIC: + return "Invalid magic number"; + case XtcError::INVALID_VERSION: + return "Unsupported version"; + case XtcError::CORRUPTED_HEADER: + return "Corrupted header"; + case XtcError::PAGE_OUT_OF_RANGE: + return "Page out of range"; + case XtcError::READ_ERROR: + return "Read error"; + case XtcError::WRITE_ERROR: + return "Write error"; + case XtcError::MEMORY_ERROR: + return "Memory allocation error"; + case XtcError::DECOMPRESSION_ERROR: + return "Decompression error"; + default: + return "Unknown error"; + } +} + +/** + * Check if filename has XTC/XTCH extension + */ +inline bool isXtcExtension(const char* filename) { + if (!filename) return false; + const char* ext = strrchr(filename, '.'); + if (!ext) return false; + return (strcasecmp(ext, ".xtc") == 0 || strcasecmp(ext, ".xtch") == 0); +} + +} // namespace xtc diff --git a/src/activities/boot_sleep/SleepActivity.cpp b/src/activities/boot_sleep/SleepActivity.cpp index 6ff348e..fdf84b6 100644 --- a/src/activities/boot_sleep/SleepActivity.cpp +++ b/src/activities/boot_sleep/SleepActivity.cpp @@ -4,6 +4,7 @@ #include #include #include +#include #include @@ -12,6 +13,20 @@ #include "config.h" #include "images/CrossLarge.h" +namespace { +// Check if path has XTC extension (.xtc or .xtch) +bool isXtcFile(const std::string& path) { + if (path.length() < 4) return false; + std::string ext4 = path.substr(path.length() - 4); + if (ext4 == ".xtc") return true; + if (path.length() >= 5) { + std::string ext5 = path.substr(path.length() - 5); + if (ext5 == ".xtch") return true; + } + return false; +} +} // namespace + void SleepActivity::onEnter() { Activity::onEnter(); renderPopup("Entering Sleep..."); @@ -176,19 +191,41 @@ void SleepActivity::renderCoverSleepScreen() const { return renderDefaultSleepScreen(); } - Epub lastEpub(APP_STATE.openEpubPath, "/.crosspoint"); - if (!lastEpub.load()) { - Serial.println("[SLP] Failed to load last epub"); - return renderDefaultSleepScreen(); - } + std::string coverBmpPath; - if (!lastEpub.generateCoverBmp()) { - Serial.println("[SLP] Failed to generate cover bmp"); - return renderDefaultSleepScreen(); + // Check if the current book is XTC or EPUB + if (isXtcFile(APP_STATE.openEpubPath)) { + // Handle XTC file + Xtc lastXtc(APP_STATE.openEpubPath, "/.crosspoint"); + if (!lastXtc.load()) { + Serial.println("[SLP] Failed to load last XTC"); + return renderDefaultSleepScreen(); + } + + if (!lastXtc.generateCoverBmp()) { + Serial.println("[SLP] Failed to generate XTC cover bmp"); + return renderDefaultSleepScreen(); + } + + coverBmpPath = lastXtc.getCoverBmpPath(); + } else { + // Handle EPUB file + Epub lastEpub(APP_STATE.openEpubPath, "/.crosspoint"); + if (!lastEpub.load()) { + Serial.println("[SLP] Failed to load last epub"); + return renderDefaultSleepScreen(); + } + + if (!lastEpub.generateCoverBmp()) { + Serial.println("[SLP] Failed to generate cover bmp"); + return renderDefaultSleepScreen(); + } + + coverBmpPath = lastEpub.getCoverBmpPath(); } File file; - if (FsHelpers::openFileForRead("SLP", lastEpub.getCoverBmpPath(), file)) { + if (FsHelpers::openFileForRead("SLP", coverBmpPath, file)) { Bitmap bitmap(file); if (bitmap.parseHeaders() == BmpReaderError::Ok) { renderBitmapSleepScreen(bitmap); diff --git a/src/activities/reader/FileSelectionActivity.cpp b/src/activities/reader/FileSelectionActivity.cpp index fec0ef0..e891d77 100644 --- a/src/activities/reader/FileSelectionActivity.cpp +++ b/src/activities/reader/FileSelectionActivity.cpp @@ -40,8 +40,12 @@ void FileSelectionActivity::loadFiles() { if (file.isDirectory()) { files.emplace_back(filename + "/"); - } else if (filename.substr(filename.length() - 5) == ".epub") { - files.emplace_back(filename); + } else { + std::string ext4 = filename.length() >= 4 ? filename.substr(filename.length() - 4) : ""; + std::string ext5 = filename.length() >= 5 ? filename.substr(filename.length() - 5) : ""; + if (ext5 == ".epub" || ext5 == ".xtch" || ext4 == ".xtc") { + files.emplace_back(filename); + } } file.close(); } @@ -165,7 +169,7 @@ void FileSelectionActivity::render() const { renderer.drawButtonHints(UI_FONT_ID, "« Home", "Open", "", ""); if (files.empty()) { - renderer.drawText(UI_FONT_ID, 20, 60, "No EPUBs found"); + renderer.drawText(UI_FONT_ID, 20, 60, "No books found"); renderer.displayBuffer(); return; } diff --git a/src/activities/reader/ReaderActivity.cpp b/src/activities/reader/ReaderActivity.cpp index 519a33a..222cc97 100644 --- a/src/activities/reader/ReaderActivity.cpp +++ b/src/activities/reader/ReaderActivity.cpp @@ -5,6 +5,8 @@ #include "Epub.h" #include "EpubReaderActivity.h" #include "FileSelectionActivity.h" +#include "Xtc.h" +#include "XtcReaderActivity.h" #include "activities/util/FullScreenMessageActivity.h" std::string ReaderActivity::extractFolderPath(const std::string& filePath) { @@ -15,6 +17,17 @@ std::string ReaderActivity::extractFolderPath(const std::string& filePath) { return filePath.substr(0, lastSlash); } +bool ReaderActivity::isXtcFile(const std::string& path) { + if (path.length() < 4) return false; + std::string ext4 = path.substr(path.length() - 4); + if (ext4 == ".xtc") return true; + if (path.length() >= 5) { + std::string ext5 = path.substr(path.length() - 5); + if (ext5 == ".xtch") return true; + } + return false; +} + std::unique_ptr ReaderActivity::loadEpub(const std::string& path) { if (!SD.exists(path.c_str())) { Serial.printf("[%lu] [ ] File does not exist: %s\n", millis(), path.c_str()); @@ -30,54 +43,102 @@ std::unique_ptr ReaderActivity::loadEpub(const std::string& path) { return nullptr; } -void ReaderActivity::onSelectEpubFile(const std::string& path) { - currentEpubPath = path; // Track current book path +std::unique_ptr ReaderActivity::loadXtc(const std::string& path) { + if (!SD.exists(path.c_str())) { + Serial.printf("[%lu] [ ] File does not exist: %s\n", millis(), path.c_str()); + return nullptr; + } + + auto xtc = std::unique_ptr(new Xtc(path, "/.crosspoint")); + if (xtc->load()) { + return xtc; + } + + Serial.printf("[%lu] [ ] Failed to load XTC\n", millis()); + return nullptr; +} + +void ReaderActivity::onSelectBookFile(const std::string& path) { + currentBookPath = path; // Track current book path exitActivity(); enterNewActivity(new FullScreenMessageActivity(renderer, inputManager, "Loading...")); - auto epub = loadEpub(path); - if (epub) { - onGoToEpubReader(std::move(epub)); + if (isXtcFile(path)) { + // Load XTC file + auto xtc = loadXtc(path); + if (xtc) { + onGoToXtcReader(std::move(xtc)); + } else { + exitActivity(); + enterNewActivity(new FullScreenMessageActivity(renderer, inputManager, "Failed to load XTC", REGULAR, + EInkDisplay::HALF_REFRESH)); + delay(2000); + onGoToFileSelection(); + } } else { - exitActivity(); - enterNewActivity(new FullScreenMessageActivity(renderer, inputManager, "Failed to load epub", REGULAR, - EInkDisplay::HALF_REFRESH)); - delay(2000); - onGoToFileSelection(); + // Load EPUB file + auto epub = loadEpub(path); + if (epub) { + onGoToEpubReader(std::move(epub)); + } else { + exitActivity(); + enterNewActivity(new FullScreenMessageActivity(renderer, inputManager, "Failed to load epub", REGULAR, + EInkDisplay::HALF_REFRESH)); + delay(2000); + onGoToFileSelection(); + } } } -void ReaderActivity::onGoToFileSelection(const std::string& fromEpubPath) { +void ReaderActivity::onGoToFileSelection(const std::string& fromBookPath) { exitActivity(); // If coming from a book, start in that book's folder; otherwise start from root - const auto initialPath = fromEpubPath.empty() ? "/" : extractFolderPath(fromEpubPath); + const auto initialPath = fromBookPath.empty() ? "/" : extractFolderPath(fromBookPath); enterNewActivity(new FileSelectionActivity( - renderer, inputManager, [this](const std::string& path) { onSelectEpubFile(path); }, onGoBack, initialPath)); + renderer, inputManager, [this](const std::string& path) { onSelectBookFile(path); }, onGoBack, initialPath)); } void ReaderActivity::onGoToEpubReader(std::unique_ptr epub) { const auto epubPath = epub->getPath(); - currentEpubPath = epubPath; + currentBookPath = epubPath; exitActivity(); enterNewActivity(new EpubReaderActivity( renderer, inputManager, std::move(epub), [this, epubPath] { onGoToFileSelection(epubPath); }, [this] { onGoBack(); })); } +void ReaderActivity::onGoToXtcReader(std::unique_ptr xtc) { + const auto xtcPath = xtc->getPath(); + currentBookPath = xtcPath; + exitActivity(); + enterNewActivity(new XtcReaderActivity( + renderer, inputManager, std::move(xtc), [this, xtcPath] { onGoToFileSelection(xtcPath); }, + [this] { onGoBack(); })); +} + void ReaderActivity::onEnter() { ActivityWithSubactivity::onEnter(); - if (initialEpubPath.empty()) { + if (initialBookPath.empty()) { onGoToFileSelection(); // Start from root when entering via Browse return; } - currentEpubPath = initialEpubPath; - auto epub = loadEpub(initialEpubPath); - if (!epub) { - onGoBack(); - return; - } + currentBookPath = initialBookPath; - onGoToEpubReader(std::move(epub)); + if (isXtcFile(initialBookPath)) { + auto xtc = loadXtc(initialBookPath); + if (!xtc) { + onGoBack(); + return; + } + onGoToXtcReader(std::move(xtc)); + } else { + auto epub = loadEpub(initialBookPath); + if (!epub) { + onGoBack(); + return; + } + onGoToEpubReader(std::move(epub)); + } } diff --git a/src/activities/reader/ReaderActivity.h b/src/activities/reader/ReaderActivity.h index 5bb3419..f40417e 100644 --- a/src/activities/reader/ReaderActivity.h +++ b/src/activities/reader/ReaderActivity.h @@ -4,23 +4,27 @@ #include "../ActivityWithSubactivity.h" class Epub; +class Xtc; class ReaderActivity final : public ActivityWithSubactivity { - std::string initialEpubPath; - std::string currentEpubPath; // Track current book path for navigation + std::string initialBookPath; + std::string currentBookPath; // Track current book path for navigation const std::function onGoBack; static std::unique_ptr loadEpub(const std::string& path); + static std::unique_ptr loadXtc(const std::string& path); + static bool isXtcFile(const std::string& path); static std::string extractFolderPath(const std::string& filePath); - void onSelectEpubFile(const std::string& path); - void onGoToFileSelection(const std::string& fromEpubPath = ""); + void onSelectBookFile(const std::string& path); + void onGoToFileSelection(const std::string& fromBookPath = ""); void onGoToEpubReader(std::unique_ptr epub); + void onGoToXtcReader(std::unique_ptr xtc); public: - explicit ReaderActivity(GfxRenderer& renderer, InputManager& inputManager, std::string initialEpubPath, + explicit ReaderActivity(GfxRenderer& renderer, InputManager& inputManager, std::string initialBookPath, const std::function& onGoBack) : ActivityWithSubactivity("Reader", renderer, inputManager), - initialEpubPath(std::move(initialEpubPath)), + initialBookPath(std::move(initialBookPath)), onGoBack(onGoBack) {} void onEnter() override; }; diff --git a/src/activities/reader/XtcReaderActivity.cpp b/src/activities/reader/XtcReaderActivity.cpp new file mode 100644 index 0000000..aa9de70 --- /dev/null +++ b/src/activities/reader/XtcReaderActivity.cpp @@ -0,0 +1,360 @@ +/** + * XtcReaderActivity.cpp + * + * XTC ebook reader activity implementation + * Displays pre-rendered XTC pages on e-ink display + */ + +#include "XtcReaderActivity.h" + +#include +#include +#include + +#include "CrossPointSettings.h" +#include "CrossPointState.h" +#include "config.h" + +namespace { +constexpr int pagesPerRefresh = 15; +constexpr unsigned long skipPageMs = 700; +constexpr unsigned long goHomeMs = 1000; +} // namespace + +void XtcReaderActivity::taskTrampoline(void* param) { + auto* self = static_cast(param); + self->displayTaskLoop(); +} + +void XtcReaderActivity::onEnter() { + Activity::onEnter(); + + if (!xtc) { + return; + } + + renderingMutex = xSemaphoreCreateMutex(); + + xtc->setupCacheDir(); + + // Load saved progress + loadProgress(); + + // Save current XTC as last opened book + APP_STATE.openEpubPath = xtc->getPath(); + APP_STATE.saveToFile(); + + // Trigger first update + updateRequired = true; + + xTaskCreate(&XtcReaderActivity::taskTrampoline, "XtcReaderActivityTask", + 4096, // Stack size (smaller than EPUB since no parsing needed) + this, // Parameters + 1, // Priority + &displayTaskHandle // Task handle + ); +} + +void XtcReaderActivity::onExit() { + Activity::onExit(); + + // Wait until not rendering to delete task + xSemaphoreTake(renderingMutex, portMAX_DELAY); + if (displayTaskHandle) { + vTaskDelete(displayTaskHandle); + displayTaskHandle = nullptr; + } + vSemaphoreDelete(renderingMutex); + renderingMutex = nullptr; + xtc.reset(); +} + +void XtcReaderActivity::loop() { + // Long press BACK (1s+) goes directly to home + if (inputManager.isPressed(InputManager::BTN_BACK) && inputManager.getHeldTime() >= goHomeMs) { + onGoHome(); + return; + } + + // Short press BACK goes to file selection + if (inputManager.wasReleased(InputManager::BTN_BACK) && inputManager.getHeldTime() < goHomeMs) { + onGoBack(); + return; + } + + const bool prevReleased = + inputManager.wasReleased(InputManager::BTN_UP) || inputManager.wasReleased(InputManager::BTN_LEFT); + const bool nextReleased = + inputManager.wasReleased(InputManager::BTN_DOWN) || inputManager.wasReleased(InputManager::BTN_RIGHT); + + if (!prevReleased && !nextReleased) { + return; + } + + // Handle end of book + if (currentPage >= xtc->getPageCount()) { + currentPage = xtc->getPageCount() - 1; + updateRequired = true; + return; + } + + const bool skipPages = inputManager.getHeldTime() > skipPageMs; + const int skipAmount = skipPages ? 10 : 1; + + if (prevReleased) { + if (currentPage >= static_cast(skipAmount)) { + currentPage -= skipAmount; + } else { + currentPage = 0; + } + updateRequired = true; + } else if (nextReleased) { + currentPage += skipAmount; + if (currentPage >= xtc->getPageCount()) { + currentPage = xtc->getPageCount(); // Allow showing "End of book" + } + updateRequired = true; + } +} + +void XtcReaderActivity::displayTaskLoop() { + while (true) { + if (updateRequired) { + updateRequired = false; + xSemaphoreTake(renderingMutex, portMAX_DELAY); + renderScreen(); + xSemaphoreGive(renderingMutex); + } + vTaskDelay(10 / portTICK_PERIOD_MS); + } +} + +void XtcReaderActivity::renderScreen() { + if (!xtc) { + return; + } + + // Bounds check + if (currentPage >= xtc->getPageCount()) { + // Show end of book screen + renderer.clearScreen(); + renderer.drawCenteredText(UI_FONT_ID, 300, "End of book", true, BOLD); + renderer.displayBuffer(); + return; + } + + renderPage(); + saveProgress(); +} + +void XtcReaderActivity::renderPage() { + const uint16_t pageWidth = xtc->getPageWidth(); + const uint16_t pageHeight = xtc->getPageHeight(); + const uint8_t bitDepth = xtc->getBitDepth(); + + // Calculate buffer size for one page + // XTG (1-bit): Row-major, ((width+7)/8) * height bytes + // XTH (2-bit): Two bit planes, column-major, ((width * height + 7) / 8) * 2 bytes + size_t pageBufferSize; + if (bitDepth == 2) { + pageBufferSize = ((static_cast(pageWidth) * pageHeight + 7) / 8) * 2; + } else { + pageBufferSize = ((pageWidth + 7) / 8) * pageHeight; + } + + // Allocate page buffer + uint8_t* pageBuffer = static_cast(malloc(pageBufferSize)); + if (!pageBuffer) { + Serial.printf("[%lu] [XTR] Failed to allocate page buffer (%lu bytes)\n", millis(), pageBufferSize); + renderer.clearScreen(); + renderer.drawCenteredText(UI_FONT_ID, 300, "Memory error", true, BOLD); + renderer.displayBuffer(); + return; + } + + // Load page data + size_t bytesRead = xtc->loadPage(currentPage, pageBuffer, pageBufferSize); + if (bytesRead == 0) { + Serial.printf("[%lu] [XTR] Failed to load page %lu\n", millis(), currentPage); + free(pageBuffer); + renderer.clearScreen(); + renderer.drawCenteredText(UI_FONT_ID, 300, "Page load error", true, BOLD); + renderer.displayBuffer(); + return; + } + + // Clear screen first + renderer.clearScreen(); + + // Copy page bitmap using GfxRenderer's drawPixel + // XTC/XTCH pages are pre-rendered with status bar included, so render full page + const uint16_t maxSrcY = pageHeight; + + if (bitDepth == 2) { + // XTH 2-bit mode: Two bit planes, column-major order + // - Columns scanned right to left (x = width-1 down to 0) + // - 8 vertical pixels per byte (MSB = topmost pixel in group) + // - First plane: Bit1, Second plane: Bit2 + // - Pixel value = (bit1 << 1) | bit2 + // - Grayscale: 0=White, 1=Dark Grey, 2=Light Grey, 3=Black + + const size_t planeSize = (static_cast(pageWidth) * pageHeight + 7) / 8; + const uint8_t* plane1 = pageBuffer; // Bit1 plane + const uint8_t* plane2 = pageBuffer + planeSize; // Bit2 plane + const size_t colBytes = (pageHeight + 7) / 8; // Bytes per column (100 for 800 height) + + // Lambda to get pixel value at (x, y) + auto getPixelValue = [&](uint16_t x, uint16_t y) -> uint8_t { + const size_t colIndex = pageWidth - 1 - x; + const size_t byteInCol = y / 8; + const size_t bitInByte = 7 - (y % 8); + const size_t byteOffset = colIndex * colBytes + byteInCol; + const uint8_t bit1 = (plane1[byteOffset] >> bitInByte) & 1; + const uint8_t bit2 = (plane2[byteOffset] >> bitInByte) & 1; + return (bit1 << 1) | bit2; + }; + + // Optimized grayscale rendering without storeBwBuffer (saves 48KB peak memory) + // Flow: BW display → LSB/MSB passes → grayscale display → re-render BW for next frame + + // Count pixel distribution for debugging + uint32_t pixelCounts[4] = {0, 0, 0, 0}; + for (uint16_t y = 0; y < pageHeight; y++) { + for (uint16_t x = 0; x < pageWidth; x++) { + pixelCounts[getPixelValue(x, y)]++; + } + } + Serial.printf("[%lu] [XTR] Pixel distribution: White=%lu, DarkGrey=%lu, LightGrey=%lu, Black=%lu\n", millis(), + pixelCounts[0], pixelCounts[1], pixelCounts[2], pixelCounts[3]); + + // Pass 1: BW buffer - draw all non-white pixels as black + for (uint16_t y = 0; y < pageHeight; y++) { + for (uint16_t x = 0; x < pageWidth; x++) { + if (getPixelValue(x, y) >= 1) { + renderer.drawPixel(x, y, true); + } + } + } + + // Display BW with conditional refresh based on pagesUntilFullRefresh + if (pagesUntilFullRefresh <= 1) { + renderer.displayBuffer(EInkDisplay::HALF_REFRESH); + pagesUntilFullRefresh = pagesPerRefresh; + } else { + renderer.displayBuffer(); + pagesUntilFullRefresh--; + } + + // Pass 2: LSB buffer - mark DARK gray only (XTH value 1) + // In LUT: 0 bit = apply gray effect, 1 bit = untouched + renderer.clearScreen(0x00); + for (uint16_t y = 0; y < pageHeight; y++) { + for (uint16_t x = 0; x < pageWidth; x++) { + if (getPixelValue(x, y) == 1) { // Dark grey only + renderer.drawPixel(x, y, false); + } + } + } + renderer.copyGrayscaleLsbBuffers(); + + // Pass 3: MSB buffer - mark LIGHT AND DARK gray (XTH value 1 or 2) + // In LUT: 0 bit = apply gray effect, 1 bit = untouched + renderer.clearScreen(0x00); + for (uint16_t y = 0; y < pageHeight; y++) { + for (uint16_t x = 0; x < pageWidth; x++) { + const uint8_t pv = getPixelValue(x, y); + if (pv == 1 || pv == 2) { // Dark grey or Light grey + renderer.drawPixel(x, y, false); + } + } + } + renderer.copyGrayscaleMsbBuffers(); + + // Display grayscale overlay + renderer.displayGrayBuffer(); + + // Pass 4: Re-render BW to framebuffer (restore for next frame, instead of restoreBwBuffer) + renderer.clearScreen(); + for (uint16_t y = 0; y < pageHeight; y++) { + for (uint16_t x = 0; x < pageWidth; x++) { + if (getPixelValue(x, y) >= 1) { + renderer.drawPixel(x, y, true); + } + } + } + + // Cleanup grayscale buffers with current frame buffer + renderer.cleanupGrayscaleWithFrameBuffer(); + + free(pageBuffer); + + Serial.printf("[%lu] [XTR] Rendered page %lu/%lu (2-bit grayscale)\n", millis(), currentPage + 1, + xtc->getPageCount()); + return; + } else { + // 1-bit mode: 8 pixels per byte, MSB first + const size_t srcRowBytes = (pageWidth + 7) / 8; // 60 bytes for 480 width + + for (uint16_t srcY = 0; srcY < maxSrcY; srcY++) { + const size_t srcRowStart = srcY * srcRowBytes; + + for (uint16_t srcX = 0; srcX < pageWidth; srcX++) { + // Read source pixel (MSB first, bit 7 = leftmost pixel) + const size_t srcByte = srcRowStart + srcX / 8; + const size_t srcBit = 7 - (srcX % 8); + const bool isBlack = !((pageBuffer[srcByte] >> srcBit) & 1); // XTC: 0 = black, 1 = white + + if (isBlack) { + renderer.drawPixel(srcX, srcY, true); + } + } + } + } + // White pixels are already cleared by clearScreen() + + free(pageBuffer); + + // XTC pages already have status bar pre-rendered, no need to add our own + + // Display with appropriate refresh + if (pagesUntilFullRefresh <= 1) { + renderer.displayBuffer(EInkDisplay::HALF_REFRESH); + pagesUntilFullRefresh = pagesPerRefresh; + } else { + renderer.displayBuffer(); + pagesUntilFullRefresh--; + } + + Serial.printf("[%lu] [XTR] Rendered page %lu/%lu (%u-bit)\n", millis(), currentPage + 1, xtc->getPageCount(), + bitDepth); +} + +void XtcReaderActivity::saveProgress() const { + File f; + if (FsHelpers::openFileForWrite("XTR", xtc->getCachePath() + "/progress.bin", f)) { + uint8_t data[4]; + data[0] = currentPage & 0xFF; + data[1] = (currentPage >> 8) & 0xFF; + data[2] = (currentPage >> 16) & 0xFF; + data[3] = (currentPage >> 24) & 0xFF; + f.write(data, 4); + f.close(); + } +} + +void XtcReaderActivity::loadProgress() { + File f; + if (FsHelpers::openFileForRead("XTR", xtc->getCachePath() + "/progress.bin", f)) { + uint8_t data[4]; + if (f.read(data, 4) == 4) { + currentPage = data[0] | (data[1] << 8) | (data[2] << 16) | (data[3] << 24); + Serial.printf("[%lu] [XTR] Loaded progress: page %lu\n", millis(), currentPage); + + // Validate page number + if (currentPage >= xtc->getPageCount()) { + currentPage = 0; + } + } + f.close(); + } +} diff --git a/src/activities/reader/XtcReaderActivity.h b/src/activities/reader/XtcReaderActivity.h new file mode 100644 index 0000000..f923d8a --- /dev/null +++ b/src/activities/reader/XtcReaderActivity.h @@ -0,0 +1,41 @@ +/** + * XtcReaderActivity.h + * + * XTC ebook reader activity for CrossPoint Reader + * Displays pre-rendered XTC pages on e-ink display + */ + +#pragma once + +#include +#include +#include +#include + +#include "activities/Activity.h" + +class XtcReaderActivity final : public Activity { + std::shared_ptr xtc; + TaskHandle_t displayTaskHandle = nullptr; + SemaphoreHandle_t renderingMutex = nullptr; + uint32_t currentPage = 0; + int pagesUntilFullRefresh = 0; + bool updateRequired = false; + const std::function onGoBack; + const std::function onGoHome; + + static void taskTrampoline(void* param); + [[noreturn]] void displayTaskLoop(); + void renderScreen(); + void renderPage(); + void saveProgress() const; + void loadProgress(); + + public: + explicit XtcReaderActivity(GfxRenderer& renderer, InputManager& inputManager, std::unique_ptr xtc, + const std::function& onGoBack, const std::function& onGoHome) + : Activity("XtcReader", renderer, inputManager), xtc(std::move(xtc)), onGoBack(onGoBack), onGoHome(onGoHome) {} + void onEnter() override; + void onExit() override; + void loop() override; +}; From f8c0b1aceaa446f509b39229669245e0bc8e8486 Mon Sep 17 00:00:00 2001 From: Dave Allie Date: Mon, 29 Dec 2025 02:00:42 +1100 Subject: [PATCH 21/71] Use confirmation release on home screen to detect action --- src/activities/home/HomeActivity.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/activities/home/HomeActivity.cpp b/src/activities/home/HomeActivity.cpp index c8b7ffe..5e330d8 100644 --- a/src/activities/home/HomeActivity.cpp +++ b/src/activities/home/HomeActivity.cpp @@ -56,7 +56,7 @@ void HomeActivity::loop() { const int menuCount = getMenuItemCount(); - if (inputManager.wasPressed(InputManager::BTN_CONFIRM)) { + if (inputManager.wasReleased(InputManager::BTN_CONFIRM)) { if (hasContinueReading) { // Menu: Continue Reading, Browse, File transfer, Settings if (selectorIndex == 0) { From c0b83b626e14c60ba3084076bdfcc6852517e547 Mon Sep 17 00:00:00 2001 From: Dave Allie Date: Mon, 29 Dec 2025 01:29:41 +1000 Subject: [PATCH 22/71] Use a JSON filter to avoid crashes when checking for updates (#141) ## Summary * The JSON release data from Github contains the entire release description which can be very large * The 0.9.0 release was especially bad * Use a JSON filter to avoid deserializing anything but the necessary fields ## Additional Context * https://arduinojson.org/v7/how-to/deserialize-a-very-large-document/#filtering * Fixes https://github.com/daveallie/crosspoint-reader/issues/124 --- src/network/OtaUpdater.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/network/OtaUpdater.cpp b/src/network/OtaUpdater.cpp index 249c457..7558305 100644 --- a/src/network/OtaUpdater.cpp +++ b/src/network/OtaUpdater.cpp @@ -27,7 +27,12 @@ OtaUpdater::OtaUpdaterError OtaUpdater::checkForUpdate() { } JsonDocument doc; - const DeserializationError error = deserializeJson(doc, *client); + JsonDocument filter; + filter["tag_name"] = true; + filter["assets"][0]["name"] = true; + filter["assets"][0]["browser_download_url"] = true; + filter["assets"][0]["size"] = true; + const DeserializationError error = deserializeJson(doc, *client, DeserializationOption::Filter(filter)); http.end(); if (error) { Serial.printf("[%lu] [OTA] JSON parse failed: %s\n", millis(), error.c_str()); From b1763821b57ab411941d557789e377754b2826b4 Mon Sep 17 00:00:00 2001 From: Dave Allie Date: Mon, 29 Dec 2025 02:30:27 +1100 Subject: [PATCH 23/71] Cut release 0.10.0 --- platformio.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platformio.ini b/platformio.ini index 0fd766a..fb520e5 100644 --- a/platformio.ini +++ b/platformio.ini @@ -1,5 +1,5 @@ [platformio] -crosspoint_version = 0.9.0 +crosspoint_version = 0.10.0 default_envs = default [base] From 534504cf7a80aff26fea1ecd9880f4e99a18b736 Mon Sep 17 00:00:00 2001 From: Dave Allie Date: Mon, 29 Dec 2025 12:19:54 +1000 Subject: [PATCH 24/71] Consolidate chapter page data into single file (#144) ## Summary * Consolidate chapter page data into single file * Header structure of the file stays the same, following the page count, we now put a LUT offset * The page data is all then appended to this file * Finally the LUT is appended to the end of the file, and the page count is updated * This will also significantly improve the duration of cache cleanup which takes a while to scan the directory and cleanup content * Remove page file version as it's all tied up into the section file now * Bumped section file version to 7 * Moved section content into sub directory * Updated docs ## Additional Context * Benchmarks: * Generating 74 pages of content from a chapter in Jade Legacy took: * master: 6,229ms * this PR: 1,305ms * Speedup of 79% * Generating 207 pages of content from Livesuit book: * With progress bar UI updates: * master: 24,250ms * this PR: 8,063ms * Speedup of 67% * Without progress bar UI updates: * master: 13,055ms * this PR: 3,600ms * Speedup of 72% --- README.md | 29 ++-- docs/file-formats.md | 9 ++ docs/images/file-formats/book-bin.png | Bin 0 -> 551541 bytes docs/images/file-formats/section-bin.png | Bin 0 -> 302713 bytes lib/Epub/Epub/Page.cpp | 25 +--- lib/Epub/Epub/Page.h | 6 +- lib/Epub/Epub/Section.cpp | 149 ++++++++++++------- lib/Epub/Epub/Section.h | 24 +-- lib/Epub/Epub/blocks/TextBlock.cpp | 49 +++--- lib/Epub/Epub/blocks/TextBlock.h | 2 +- src/activities/reader/EpubReaderActivity.cpp | 12 +- 11 files changed, 162 insertions(+), 143 deletions(-) create mode 100644 docs/file-formats.md create mode 100644 docs/images/file-formats/book-bin.png create mode 100644 docs/images/file-formats/section-bin.png diff --git a/README.md b/README.md index 60a2ed2..6f484f4 100644 --- a/README.md +++ b/README.md @@ -98,9 +98,9 @@ CrossPoint Reader is pretty aggressive about caching data down to the SD card to has ~380KB of usable RAM, so we have to be careful. A lot of the decisions made in the design of the firmware were based on this constraint. -### EPUB caching +### Data caching -The first time chapters of an EPUB are loaded, they are cached to the SD card. Subsequent loads are served from the +The first time chapters of a book are loaded, they are cached to the SD card. Subsequent loads are served from the cache. This cache directory exists at `.crosspoint` on the SD card. The structure is as follows: @@ -108,25 +108,22 @@ cache. This cache directory exists at `.crosspoint` on the SD card. The structur .crosspoint/ ├── epub_12471232/ # Each EPUB is cached to a subdirectory named `epub_` │ ├── progress.bin # Stores reading progress (chapter, page, etc.) -│ ├── 0/ # Each chapter is stored in a subdirectory named by its index (based on the spine order) -│ │ ├── section.bin # Section metadata (page count) -│ │ ├── page_0.bin # Each page is stored in a separate file, it -│ │ ├── page_1.bin # contains the position (x, y) and text for each word -│ │ └── ... -│ ├── 1/ -│ │ ├── section.bin -│ │ ├── page_0.bin -│ │ ├── page_1.bin -│ │ └── ... -│ └── ... +│ ├── cover.bmp # Book cover image (once generated) +│ ├── book.bin # Book metadata (title, author, spine, table of contents, etc.) +│ └── sections/ # All chapter data is stored in the sections subdirectory +│ ├── 0.bin # Chapter data (screen count, all text layout info, etc.) +│ ├── 1.bin # files are named by their index in the spine +│ └── ... │ └── epub_189013891/ ``` -Deleting the `.crosspoint` directory will clear the cache. +Deleting the `.crosspoint` directory will clear the entire cache. -Due the way it's currently implemented, the cache is not automatically cleared when the EPUB is deleted and moving an -EPUB file will reset the reading progress. +Due the way it's currently implemented, the cache is not automatically cleared when a book is deleted and moving a book +file will use a new cache directory, resetting the reading progress. + +For more details on the internal file structures, see the [file formats document](./docs/file-formats.md). ## Contributing diff --git a/docs/file-formats.md b/docs/file-formats.md new file mode 100644 index 0000000..fb096c8 --- /dev/null +++ b/docs/file-formats.md @@ -0,0 +1,9 @@ +# File Formats + +## `book.bin` + +![](./images/file-formats/book-bin.png) + +## `section.bin` + +![](./images/file-formats/section-bin.png) diff --git a/docs/images/file-formats/book-bin.png b/docs/images/file-formats/book-bin.png new file mode 100644 index 0000000000000000000000000000000000000000..07d9c2ebf02fd8a77cb94101a7cbab0bdffa5e11 GIT binary patch literal 551541 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�UPeeL*s#(P4U!-E`6zFEhKR4RXmYSlM-H`zfv86 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 z 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
J~O}J-YsJNCiUHh;p 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 z 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

QmxW*o+|LI0zX~A(>aX0(x?qji*Y!g=VbW; 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 literal 0 HcmV?d00001 diff --git a/lib/EpdFont/builtinFonts/source/Aleo/Aleo-BoldItalic.ttf b/lib/EpdFont/builtinFonts/source/Aleo/Aleo-BoldItalic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..f42462c362819f2a56fba444c1c6630a99817a48 GIT binary patch literal 76056 zcmce931AdO)_+y?9LZ#6a!l@oFu6l6GBdful{zHk2@p}Jqcy54*B>Q&XN z>K;M~Awjrk2&t~9tjhl^XA>c;kPsSFJ#K9M58W^AAY`Z?A-2uc^%KiT{pS^ggfAt; zuXt?zVEZEN$l*x)AxfE1-%#4{`6q8!@O%%RN3?dfEO__hSGE#jUQdYr;Ov%#3wUja z55?VYcE_?=KkfM9EFtr^5wdH}oc5Nsq|)1GARd9_bA(@vJ`K-9@SHTKbJ5aAjHTxY zi33fBn>)H%TOPmrgN=kpHH2tuI$M@5U@wx-kUkdat@B$t+qWm3HKD583DFrAbS+#o z>_@GZkU=8|vAnXNyM4hN-Obk{y%Fj4JE`mXZJJx~NT|z20&yqoA<{uiWHAZgPhS5t zJQZqQ?feMB+v!TaVAPzEz9d(8rQx}GE=J1guH0I1N#Kz0iG(!xceH!kVR3)pzCu^B zbG_z_W;KzB4r%3oymUYD6e_Msge{ppXAv)M?xL0s%Ign8s|hN^6Q>*hXb{_tn}&_X z9lWwNY>MkgGK$|x2AxjE6G+hWZzCbD5oE?lH>R`>(1XPEGgElGmoBmr@<$%e7~|Ai zK`8}Q*?`Rm`vs+upa)obihhMVD5KTNy#;Bb0LLL%k&BWXQh{p~sl{~^nSg5pnTYEY zG7Hx^kT)eu2$$X?7Y3HcV+?`Q$aE~e$UR?$mw?WC9Ex|AY4eT4oCS55g#R>UgVcs7l_#Xgp@q#|j(^n<2CGfva2nWI^xxkhtF>(CC@j?&g^FVXJM zzNjkQVSrz|#RQ7|V?h8xI>#8h&^awc?0Xm#kM(3zp#q3?#pg)Iv^5FQptrN>!J9d_}KWg_}usr@sr~3kNq!nNUlo0JNcpHttoyfp(#sKu1h(QTAjKv^@-GHQ(sDbBlUyS zW2t9T&!+{XMW-dF+0url)uh#@O;4Mf_H5d})0~5v2Hi90!}P@Tdo$uP24&=C49^&u zF)3qr#`(IC@U+gFsnIhc2;-Rm034t{V{7(){|L(&3Yy4?W{vtC$mGc zUYdPf_O02@!G^(02LF^3o0FE4n=?FTWX`0VmYlnCzRdZ~mTMbf8)chp zYqfRRuCU!;J7zm=A7byaUtwQmzr()X{;2&~`%Cr%_9OO__WwAvjvz;jBh^vhsCG

2>EFM`rsko)Mqj*X2 zs^UKtKV1Bm;=dKYUi@D1r^RPWXh~4Xz>>iwB_-7*^(C81ww63UBz(x?Aw5H<4xK%8 z;n1sx-ZacOZ2Rzt;fccs4=)*BJ$%COM~818zGwLBBiIPjh{zF1BXUMmjd;2=xO774 z=F$UYtZYKrin70#$COuVP3-(4I3KHPt2IOWa3>D zw@&Pt=$zCvY0KoO$xluGYD&bEvMEhdx~AMTW#g3HQ;swm8WS3e8z(ki)3~{DN8{U# zr<)?1N}F1nu4sCw>7PwMOf^l7o|-mw_|#ETCr@pi+BNmgsXL~=IQ5OGJyQ=&JwElT zsozaK->hjiHitIHHYYV_Hs>}EX|8ClYi?+s**vegyLox@wasgq?`&Szys7!|=Izb9 zn)f!p-uzDU!RBMlC!4=*J~u5Fb~K*e$?dYnAMkqVkOE^glzJ4Hk#K2`0!t)Ex>bQS z#462KU@a+@aurxd;-qi|_9M~kyaM}s!2zU#?NsnaFW5vA=voDDCi$3|$h1X~P+BL$ z7(4Nl6oga$*%Yn1mp=;E{5OkTTTK zLR!hCq>?N}-Q9R9BVE9@srP!)PCCh4^?5X&+wi;?*a?7V1LCE0lR98$V}xJiRhkFa zfS9>tzE_=A%n=qLX9w`DUU}RU_{R69!#CEOD&H9IIy}_)rtxs!UkW$%zWFADe>cyi z;G-R~^RAD}Vi8$D7Gf4M7=H`FXE$;z0Cpi}OA7&a;NAu7Y{ZYnyr~ZJB`&Fj(2Od? z%tu-)sRuL*&=Mi(c3|Wbvh3QCYN2QsD_Ubd+NT{QT9JMZAfCGxP4Avy>4n+$mO7q^VC9S3VB#T@mxWN6*yjRDQ2l0 zUIdv~g|_^D3H6pM*P(V$%;m|om(#EiP&PR0f}RcrMsA%fNKuxl++OZHR>;Sl%iWS$ zs?K}2X>aM+QA-Z~Y@`Hj$lIt3e;ufQDzMq42*Hl)G;l7{U{%ZY)h6$fN&*+{n1Yv?L^D_skIHqwW|&ld3W zPkMr$q~};9OJjEMQ^rPtpL#Y)<)@v^0Y6uQpBur?UEt>x@bjTWB%Q)fiWfhcIAdH$ zTvA+iTz=e;xQe)uapU4<#&yJ96L%;0*@&5Nq&3!R75o(S;wRXPpEfUkx*xp>{9px5 zf5d9^C2-~S&xzGJAx`)MoOgJk0lHE}%yZ&;)OpbPne!lrU0B09|AO!s;Lj2M&at>R zy2iUkx@ue%u2R=9*AORPzxDg?SU4fal(qGzpB+p6^y^Qb`}DR?gFYQ}wEpPGqh(l; z7abjZH1Q}s0tye^c4+R$dwXi$MV(mKZPA?++V=(?zN8E2jnIj7$u13pa+XQ(hlnsi zx?EZ+EtghGYb5v^q}!#nxZWeJa}y=qB`_Sz17sivX|n_$N$-EsW76Z&Hfg)GLwZ)) zDeaN=Nv}%>q<5r4(h1~5(5%(0(`@LSk3VZ}^ej}gbu-~eH5KWTWC90?p<^_T?ZY1 z0DbmJX!zT-haRLK)6ZEn%SFE($s`tlHT)2)n1`}FHW+%HLr=3LXugg85xu&G!Rf$m zLa)wdW_A~K(K9TWUZCfxlbMJGHpGBARuJY*F_`fThkeT@Ltu@XU~Q+PxBY?KPF9i| z(C2PpBgh8w5Aq_}NB&MeCy$`d>B#rw0ySYpA3)7CoZ4s-O{3X#A{|Y~(eaoaE~Pin zD`0=_rYl(~{S$qe?xefv3-l0OPY+`@=nvcV1Bsvp%mzbAGL0Z9G?FCJFfxe7z#}t& zlu`$A&}1@{4kl$Zm*mnEG6plsIy#Juqh(|)EhP=KhSbw)GKWqjZFDl3O2?3PI)%)j zb)=CtlS}Cg(n)91RbSwFg9w0sR z4YHT+A|KGV$h-6(kL;#9$R6@f`gig^ygeuBr^KI}C(U#$Sw*iTFVnx0 z*I-Rvp?k=y^lxN8eUTQDV5%Xb>2R{1{*gq%ix*1+$pe_LZ>NuwU35Fiqp9RpdOi7y zenu-n%}eAE-2ji$6Ep;4MLZoyCex9$i8jK*K183T&(k;QJM>-pHLYN`u-n+}Y&E+B zqr#mS9h%v6c!FlZ`_qQ8qlwL9?R*3waWt4@(m0Y$tt1_u$BDF-TtX+1#qdpa(>Y`* zolmZ!i^m_=5qx7O$z<3dFoS;iK4iiws_GiZj*gZ^^RZUB zllYf5Ra(i4^3nz?nN>ak*A=5mn{XXHwhl9pF?AJIQaoYoXuxnd1K%)V6s{N%T#y4V znL##MXpaGM>y7p66RYnNt5dOhQLZG)<)v!y%uAN>a(x_cY-#COMAo&oENmxtwYGLH zAUBHZ@>$(2m@#$Co!vs_!*AU|=7{S|acvgYNnPD-^U1h{ix(^;+#5?V>)}_7T)2ja zEBCfS1H=`6ZNO3D8iuPDPu$iS@rNNmed4JiMJo6=bz`)9G(pk^=~`))G*Z5@ZR~P3 z4i+|n9!0O(2rDuUed|2gf!3G~YpH=;xi^}^j>=wXBhhgWD=hdaTt@**Dg3LV7Vfo< zB>`+LyPMs^?q%!PeQZ6upKV|du#Jdgu;6gAqj&ug`s>MKCK`I0p5XylPXBcnH5*MUZ7dNCaR;u0t9g!)f!4fv*_xl%A#MghaR`I2W0~hNC>xLY?sEhS2YU zF@q;~2JrN6dO^XWeEKc@4k_Jvb(o{U2Mp}Lz3`l4M&{8=1hsN424Ipv5vOr3oyKbe zEu)pPumK@sFb>J3a}3ujIXBP8Y1LqU&6pVw#dzCCJS@BtPuqLdo}$#=g&1BEK*yv_>@~5-uxXxfRaGl9!qd-ZYcNZ?SsB;vz?jDSpHd_3z+B@ec%nGwG0cZ%V2%_CYQvQ@kQ3PNVHJ4fpTKDR`+|+b*t4@<}5hP49N+J)cv?%fhr6u)g1RpND-M z?Ch{kw0ReHa5zr^kQwxtHegiL(kYlxX)qsXLJyyYKFj(o%U6f=sQuq4n`;~sn!|+V zFrhiJ#bZKqIIS_LvjKHA{m$0%^#0|r_6snBsvrrXH^3gVIjFgr&E@r@*TzDcLBzn8 z;&~QZg6lknu@)&7_e!xsq_{$)ST0g56DiR5*(HF`V*qhka7e4ngWANCTVD$?`#KH# zcZO`oyz4Zrr+z7E6gSpYWf#k$EXt6 zr=W$0;|OWL5T=m~=@9DX!SRdXH8tKqBBlR>fVK{m46YyLAlIo$gKVz_oxzaX^|+hx zycPU;ho|xUG#Sq9#L{m#hBS>Nr{C}wQs9o0qDiF^V!dED?tgc;kzBRR7*c{glLGb~ z>Wg=s)yyL$7loZ<82hK|6#F|V=`(zSc<;E&U?F=2tQX7KI1>0@4HNnj9#}cC zE5SjJVm;MQV7#3ELJr~_SdV>$75;xCypCD@kFE}-tOSO6JU!q#K(BSZ$#OvRD3T=Z z9QF={py6(K6W${s=(|-up%!b#5yajr*zjyc7_0;ypQhm4X|;3+MyU}*kC4qKqKq)t zv)+NVqb@nvSqADU!N}{C^P8 z{$^%#eIp0CPH7?uVok0uLIA6h#%(q3H>su&v2

t{BMgs~a|KRgMBZpX0EkasPKMxU~< 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

e_e-C8^!Sctv6^Afy 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 Pu5+HWWBqxJCfoiuuMe&9 literal 0 HcmV?d00001 diff --git a/lib/EpdFont/builtinFonts/source/Aleo/Aleo-Italic.ttf b/lib/EpdFont/builtinFonts/source/Aleo/Aleo-Italic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..d119625acc0c31eaaa9b4e6341869603976212b4 GIT binary patch literal 75944 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 literal 0 HcmV?d00001 diff --git a/lib/EpdFont/builtinFonts/source/Aleo/Aleo-Regular.ttf b/lib/EpdFont/builtinFonts/source/Aleo/Aleo-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..1487b47cf32d1b5837d074138a895b6e97bf75c0 GIT binary patch literal 72440 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π1!U|7{@sFv!m%WS}^B7hpP$}`a*G97EZVDcxdT0^l? zuwdRCPM#vSV9l0_HJ}w*m`2WF4&Fhdv8s*53MY;ZqVY6=+Grw8A}65romlOrU{&`D zO{3{pGiK5(%%ih08-I=FVg;E`?O07ZsFN1bB4}MP$s*t5{81?#Oow16Ae)xaVK{?y z0ak)JSOLCHtDwPqFbA(8KcXMLiFI^69ZpAJ1=9eHZiFvAkB-KADPOEi$HF%^9)0Wx zv18U>fZg*ptaB#O$#e=lwKM5dNarnh@1|ik-_BQ#v;#eR7M+Q8<2%^F=%RDzTsjYH z^aWU@FQgY^?bwSo=4J>{rvP;mx`hJ0sVlca~xWc_Uqe^~Jkb&#t96(_84RSP{L4o&7tog1!rD>3iVG zTSxE18hQi0pFV(<%!BajJ&e`NAFx(?ly1bjbSQN23(QbofOqT(oCtUl9)zdRcb~>e zbTj=k)_*nFY4{5~fm^Y*dk*XJzha%djlLk(=R3$e`Xb#4U*_NGOIWq7`oOd%^G*TYKj zHD4*bH8|-8ugx&*ezlP+umY@Lm1HHk53jN7{uQE$-J3#U9Tf5)Yq%27at0 z@-TTBzMvqiti#|d3W1mVFF4nQ9ZC3#rjc@3RPGzv0$&+F*7qRv>l8u-n zB$EJg9l3_wNNyl&;2FD!d`7M!FTua`H`wR-|*j)cy)2+4`%=`VN2Ljb}3uNE@R96Jm;&t zI|%H0crE(z#gnz<0DLevk&np-*e^N^Ps>60?Dmt7$RTzYyPMs^?q%!PeQZ73!0u-c zum{;gy2|N2otJd#7cb~4sI9D(?^VUh-LBjn%Ds@^?FH2}@^htlM!st0S;<#fsytW9 z>1&j7E0yvpMR|_u;u?MB{Pr0=-3#=U-LtwEbj~$a_H-?n)jnhKqE3Bft$Y`x*_EnG z3q+BQLT6z0jIN#;i|5ar*SXYK-O;_Mea4K=1&ibwOG|V$GunBGy6m2i494wPu<)N`oPFGc;q%Y9b3(5lPz5L5j4u`Sc zuXcOEV5esI^!A>>;r?k0Y8^tJl_iy;i7HD48mV@{EM1cilQlw} z3TkVVhOALqt43+i8l{LDxd?~DBLqd`t82AQv%7l~HLFo#YdyJ@R381WwFfoLUJU*2 zSv-GU`{G6VCPk1!NsE+RMT$n$D(sXN2R8N2Yww-y(;W&G=~Nc##>#>is|vziP^3^R zr$Rp~)QuCV0>|}f1V@3waIsSP;9AXiD2#5rPjQ~O5}7bZfx>37hlpy^c%N=0E2C^n z?2f`hU5l^4opN-IqRur!-R%W6RSI5dyIMu?wZ+;NuYhY6YU`Bdl0{TdTdN4Vwl=86 zPrxmTfLmluHMK14?V8uUKq#xWh1(iki%?Z#ef#|RzDisr1OobtbQ5IRP4LPtU_wV% zXHREuSFdiute$q+embg49Dx(PiDV_LE7VO?lh_NY1pfuKbxIRC6}i`y>L!V5jFbGj za6#>0kpexmO4qIm5;j-qp0Ztlol!K|Q$dvwB)YN3_9}v{^w@6E04PVXHNUYGI zna$1hZ2!D4!b*bTVqKT21n4zNKXB9qbmj2_QaI)%w?Va_8`gTTzDwb&%a^ZWh3?`~ zU6<$ptZR-S)8QI0yC`$ z%UP|N2hL^6oJ!+3>vRj`jND?Zh=qsLPaHI`wcs;sBocdI~*krsS_Qz z+gBh;cT(-T(!4cF^VKLtDCWoE@Q6uJ3USqGyS?T{HcBurp4>{R8b!})3xc}+%uTl< zYT2GExzKa?I0#*n1zc1Z*nOToS0q*GQG_ZT4#QyEyjI&IrYgO%0DJqi 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 literal 0 HcmV?d00001 diff --git a/lib/EpdFont/builtinFonts/source/Aleo/OFL.txt b/lib/EpdFont/builtinFonts/source/Aleo/OFL.txt new file mode 100644 index 0000000..83ab711 --- /dev/null +++ b/lib/EpdFont/builtinFonts/source/Aleo/OFL.txt @@ -0,0 +1,93 @@ +Copyright 2018 The Aleo Project Authors (https://github.com/AlessioLaiso/aleo) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +https://openfontlicense.org + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/lib/EpdFont/builtinFonts/source/NotoSans/NotoSans-Bold.ttf b/lib/EpdFont/builtinFonts/source/NotoSans/NotoSans-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..07f0d257e31568cdf49729ec1ef4683889c0be4a GIT binary patch literal 630968 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

glqF5CSThSF6J+7jgfF^h(c-(xYvSSa@x4 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 ub$LSg)!9# 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

Jqtb_*GPZJPjGR|;Va`F&cN4k{ zj>lh^5;P?*Dt~}VPGO?*&VhAl&7s2^e2qbwfED_CVvcNGwOysrAGRX3JYV0EjJGFn zZO+_#{~2T&s8X5$(ot)KhdGhaH1kQCS>D?(ADx;S8yf{IrM`2Nk8jT~<8J2l=h?GI0-I{Vn-WBGl(j);bNUf95f+iu>p;Z#9|zN_lqmj1DQjk~Q$ zM?>Q>tAGJHO36yuECf+Pp%^(SJ9l_wa9^I;SS|;uVl)v4ih;7>!pV&rZ)t1VH`dqM zqtYByXo^qT)7GX29QacA3Yytaj@YF{kI#D|Z<5Pgu6+<^)9JPwIvNiKqwe8kF5BM2jO~zFwMvuRC_k#utnT+`Y+_+udm`Ox)~arh=?z9Z z;T9xYbre@aTgtB>6re0oUMT^PO$8gIERR{S_f$UVYH+k485zHIaOAErUz^9>;*EAT z_p0Q*%`I$ra469r6^cwzcWyLTIK2gVHG6$Sjh+1#o6Di!VRRZ1fJr5w1Q^d{;?zR< zXI|z(j{o4GcjdgOBiixvpYJIC4x$cyA36IV&T6u%lfUZagUO4mCG$0rBhn>zJAaya z+dw+Yfy_~QTXMX!ZI+lsY*A{>EhpACUKdU5YRDBBhBXhzx9mN%F)?OFC#e;G?+EKs zX;Z)=HKd>ilT-nm-ls-)Wu?mFh*52>uhDBo0nfQR?tYKYgG25ZpDcdL-J2a7mpZaO zRdX+?^*~J4V2Q|n9w4Ftq_sC$HTH&RqGic|LPrk?6*qYrO->54DZb7bGIzRDJ#K4D zOzp1U@rTg$EfdGuy6#}ZYU%Y-S!5)Y83}OQ_MOFFNmZ?<*RML=4U`e%RwM9lB5|lZ zKO}jcP_hU^&Y^=hb*}OH1xO^&!|1yE01 ze=qX~8X|Vh%n`B8%e|Ra$OY++V{!iB=0x7u#ME&!M zO4$gyxvuIhEW-ZjZjo4O=D#%#bXBUB8ZDYpn|HFWXHsraju~8_CarckgUvG5?v))@5Lysfd8;lXxmGOXR{(BZxI3#*;3lsu?Z1QaQ) zO;LPQ?NTYUI)$3Ftm~Z(vZ(e$iy9EQv_!0_Hy?L|<_)@-j|kanMLh4wuTGo`MvxQm{`)42NAj2OX- z4Jx%637g7_b+qT$@ipVs!o93WZ_XP%^%kchxT+W4n0P)P9BX<7%aH)<9;C>?_cbpC zloLY<$Dw(Lgfo`x1$_D+^(CgWGsd8VvKbnM8e^W$C-ic+kZauBJ2DalpMP~5F$4T@(pudPYdosK}h3kyCPNdWd(P6#8DX0;g71oQD8c{#v$TWRicv0 zRYt~bPS~6Yv!t4-Egl~({*pN$RcdP$G8M^5#{M#^u>#VW!MEp23X#N(zZ8aC=gmfi zg_vm|5OC>B&zl`oD=M9gAL5%%N)qP0egqoQI+bWA8j_?zjg-ujmp3^*dzSe*-~aUD zf+nX$bo2Y^T>n$712urV6FXBPJ>|Q@n-&P2<8M)A&aGhmrU!$8LhM1M#}teyp$`dV z@m5dsxK4zW+f6&koodak7-i(eZv;|C{&Kz8qxYzSet!^a4nhll8`gwJzkBZ9l5}1| zZkB?8eHGfIBGzCpOzP?l)3Nm%&-#P;Yo~>0zRA#rr7YKSc?qs$Wzur`s z8imI9bzjHzys>o-+JT$m&Fyy-^wBW#h02zSYgSasORV9JB z96+k0F?SSJCoTjck)*~skT=9+bq1N<2v34C)5?b794J1*bWndm@!5unaCOZgf!OR| z*Adr2>1ch1U#+{+^Z?vbQT8%d2HS5k$PIO}qzOH)=%U1Ffu(GKqQPn5_4tVbQ%>$L zyC|>}0!i3)*l7jL?N9-$@arpF#Du6>{qf(j?9q?^7R;PMFX+S4c+NO8^CI(rG}&aj z1R_F2BM31t@)D;H5tZKL;^0*#a&QQ*f+dX4{vZil6E125;L3&ULfRyc`s_6m@*^DNQ<{tSnF$vw69OB zdi>DnmT1ruw%t>2H+e&mEo^Awof{k0v^k9tlR082>>1qj&heA!>4rjEKC)-OHEL+f zH>^p6G7~xF5@-Xd%!TArRCok;g4pQFl)@*_hLcZGBmx9L@G&p0zootPmW^lD-P+l5 z^L1y=1X~>Tme83{!QS7(daC=63=bXcum1C&YX)u{8adV{`f>3~T%b1^>w&lu=!tc& z5@I*&LDi37H#NMWjFvLN{J60+C%<3rlt^oBYJIe9B*{wzEH#j1y^Ln&#dYQw$>imy zA!L`D@5&WXE}zEU9N<~Rp1C2h!~ z6F9OarPQi%n=TmQU2L>Qd{Q6^T8a-dyE6k(ExxYB`?lfhN+OxyfX&fFVwt}y+#NSu zs5Kch7Ma4BWuw~YKxXD~c7@8J5(!RiiR69*3% zBbLV>yfx*BCt^tl>l`0<=K|7~pL>o$x{Aa8_RFW5M2<5mX3#V5LSx>N0dV~8)U6Lb zZiyHV9Q?$G9gbuS8qIUhy^OLr?(y;edb{1>BYA)kG*2eJ7zE~RD=8%WjV+hD$XwMg z!+bBjZBXv0vn!<9dU;TnY_Tloj`=`t*e~E(yegsKdXd;Skp9tfei)t?Fk?`l;CQJJ z2`}dZAUAJV6R-g(wMJMs3^92<;Q{_3uBuLSkgGO3XHHd+{e{Fkt?i9^8F)?XVraa9`K;AaEjT2scMZ1{2TKNH zh;8pJy@jou6G>E*REktjsdxnrkjEeH?wNL4ikgGF`G z+2rsv*w~)=_nG9IYqPtCngN+U)`EaHJkdru?7 zU*8){3`cq=LK`n!a5GQWRPU>m+DCeef1!DnjM#3)WaW&0Ox6uc25)x2^`Fb>1e%z} z`9ye{z3)3Zm;L@n>WD9DtRyypRCT!r7mfpitU5{@brl%`WvL3%oPfP+;PPCli`QSz zBo|GJVyY~dcR%ZzqqIOXO%N_?el(4?B2%8}nL62N3hQrVB+*=VTd-g=gl$aq0b@|# zc~a86r!PH}RUSI1UEkg_=xC1xdo$95hg6LNk)eGB;Dne)SM$=zJfj6)E4=~XXHhsu zDC(Kd7kX^b$%Eagk&OAQ!{KNQ>%~%4y<9IA(?ba9L~CW zyRE+X6?};yQav|?pNKeO<-lt>DC;QYL+9Zz4`w8;9GnbPYdX$B-$hj)8G6!$-~aG? zTA{kL0!CadW;;LBCaA3uu#$Rl`@0_f0CSz9bErcm>lp4*d}ZdvSB%~5Drqd~uP*+T z5lLIxmGX{W<0}*d`UaemT(iym3qTOS3s6mUUYTd}#8)6fT{Bt|Q&*U7LrF}DU11HG zYU`K=nVr_ZEI!MwXr2lSxg)558ALn@`bh&tN-R~4cjO>pkk0C?^2=wQd1S{9NNr#I z#m|_*=bpnr65&s*NaQRN9+q*G+{Gl0li2BSx|x3twtI^&5LfXlmrMq!xketl=oo2h z=bgk~{A9o);&zFvahgrDA7NWD9WC%e;#kVwXGk<9UgCnrP!Zkp3>@QMoOzjf_)@{r z&=JaZ#8)>D*C=XE`n+8>C`QO_x|-qsw)5S-Mo-9>2wrzG&-hYU@jdrCNor-GALv2RDDY zrgvw-TL{ZUnwr)cV@C(RVhe0=;l| z_XHH0kj|$q}=DiZkO`by)&6 z#K>paHwe@~t1o9IW?Uc@*9Mo|in0SD(GQ!qhI8^*&TI}E=*+3!fGWRNf{APNa-H9( zO~fNg=4kQz`li-ycYYJG=aNW^e*@`&)qsyA=5GO&)rdSy7oz7d(!R0H?(f^&*ti1S z+*3AN%qB(cOk1$c;heY_+w|`1_CCBhqLm#b1rm4mbZ=|7p+ura4dO}z|KP$^z-WLF ztIG-^UEU%?SK&5hf3-~5-ujf=l}fqXDQ0^)Wbd*9=(|Uv9#1sv^8pB?_%LtaY$|a- zpfpnPsxlg(RGQS~(v+g#T$+(Dj%-cn{03vxvVV&-?)4_y@=;eXoMoNnLc)=<3I#$_ zDm*xKy~k?w-u_#g$!yq%i%5**LqKZTKwS%Y_aC-u8~+W-(Yhz=bFOdc9*q{4R@TL-gvrg&452`5eaGw$!M2*pVfp!0JGI$ zv-Y($43iXq=r$MnasbYK1yw&2w-Ktj5&n#fI*&`IP(jT{IP>L6+{Jn6jG{}SW@PV zIQ%P=ZTSntF&DScmwS$Q%7S^{T6m|Ldi8Klh5EwoTwS$8tuvnAj+#x>F$J@ZQtQ?d z_f*6Q!@ad-&`|>kS7h~E`W~~<)*dhWrsl~ZZp0)F6aYD_s1DJ>*Ed-}7Q2%B_B}j3 zokk>(A!xpWG&b&d=R0?tT#`8Q_8OhIf;d*JcR7(Xhx7`6cWUk0hxY7Ab}dFIPm<*t z4UM2^g^dkV(|?`&8IF({en}F~Sw18%Mp07=On@AWAH)i=z~?7ax#rw{LRNI1dGBk* zng3Ye@nhnzzFPA7=@f02PyTds@w0~)y8CLGL4K| zCoA2N?9Y3)hJt(Y=`N>xqObMq#Y?;=(qDE{Qh2}lX&Z$N^yz+%DXIestyBy|GuzsQ~U7I4rb%Lw^9I(@DV{bV2`5WX$wg!BQd)aUBuK# z?^^}9+-0)G!t5E9i!Y)^WKZ_%5H^axvWTRiCOLq^iz(O+FlLTJ zfUgH_3ad~l7m`*8S)rYpBRmiSl|CrNA#Jsv9Nc{ z=JaYZ@kFO1v2|Er^D5QZM7+bvaW{Ibj)#5gK;Lwu9MCLKJMyCbc{!v5)qaimw%C94PB$Y;qwu zp&Y$XXOyV;=!JmW5#C3m6;NZA2!F_nD=fT~Wg9MVNdL!|RwD>5oea%C9+a;Z^?#Gz0inpR!7`TWF0V!A2Pr}4`JMzifTO^q_$;wY?&yGQ1ozWb8t;8??K z74xa$81t#Vpu2a}A*fNe@Ib@Bz&b^N7$#Wj=Z; zE8v?uxy;ABoz1rM=bc^cwx)_EQqEyxxeKLGM>+ zYjv7xnaUv7Mw_8}Yc+cnI+a4AF{+i}d~o$NHlO(S?gK26>gF2Y3de^uo#tZB!-d|}VlE&1kM4XxMlzg*Wu zenGK-U?iH-oIMK< ziZYV-HLZ@Ltf8s8HiAU;;pT^%3NRcJ2gz@hQKiYP3{3YtV?}YlgM!-9iXX#@VDy)- zIH%ZAtL4>}*BcaisXSrK_t};QWablYmrwu|-8Yc(JL87SL8^)~Hs%=ndqN8*=OU(1 zcawisJ91>7BqI;mpe?CfpXgplii-B|8M5k#Z5q3yZ9Bg;I1BlKd`nW}T_A7Cwj z!gF+ve^P_S!njhS%vmc@)+r2IbXkKcE3>|M)|#-g5rax)FsO+w zihyro_Ygxmc4p2dP3{*l{J$pAiX~#TROL5q8ITEUY<_kR$E;vknaBDh)0b126qux% zF;uOF_b2;JyHBZPHrZX)K#5fnlK5>+IYi? zDACIK=1$9{h9t)dWEq!OC8`#vYBXWXR++p`Q7v(tX=u=CthG8f!>(Xhxf^Rdq*V#n zE|CxyCW9Bg4$IV&M2C_g7TkY}HN_-*N zyNX}H@>RgrVJvS%G#X%(EN!&2jD^U~|IVPGGJZ#H!-CIYI9Twz7%-tS zBHLPZo^u1e7L${QmYj2SfWs{P^9Q$@Lvt2QYO77taKXM{NqE})*WoP&Tr6~ zW%XlH#b7SnrAlI1Ii`u0roo-3%ocn^-l+;{wdNEX-j-B#g>!=n z=~%tYtTp&CiSD$zSBLo;x$B$@7Cwedrrj8%N zDM~~9%*CqvI2Pi5)g*ZKeOoyeo?<07$j@$Ix{<*zLgfmwVe`L36vyQL*1pQvduRS|@4Z+t%iLcYLI&Vdd_?A|`g+v|m?s2c!SO0d@wNp| zZYn*oR{f#sBJ(zZSaMs{-OLv-X8y_Tb5DMNG3PPn4m|lB7PK<5s+ZBZoFE6*^_PF} z14hrsXG(*TJvs3cyGO5DswCDDZc8+8$5}OTv6xMsJ(Sc;z|bv zu6h?35rs~Xde@dMpiqRfSQrBn0%=BUHF_G&UuztCn1=z{f&)uLbtcp|=xsDvI`puA z#O*=dNSm`@H5)Q2twHLv*+W|9mRLiLWUx*qua~NnwMMro8mq5wmekeN*3?UD>x`rf zE(ZVzZ9$|BHVBf6n4C)2$wPa)yZ0VCwr6l~FY^zN?cDj;ll%8$xD3P5xQ=qt$}0qM zyyQ*(h_Bn`mSv1Kn>rQU8cu7+**~h4?KNr(v{|q8SD)9!vzBZR<|0O^DKuik;n@sf z#Gzo6-(p1U-i{ekPq_RkNDcXvSWWQxw>p^bbUeQ307x|afSwM#i5)2Kmokv-kl&&;vjZ2U*zw7@fq9`^5mCjy+uXZ$xMpGVz{Cl z3`3=#{O_)FxTT}YMAG}Ech@;x{Ey625^Xk(8gIU^zkdG5(h`^usDZ_(_zZb6n_#{& z`yD)i7x>Z(c#^I925N8q6=1+qQT03l9MxK0XFtMk2SK<0`3o8LBbiTJ_8HEhEAx8h z0{fBQd?G_W!}tFmaqj^hS8?@?@7%jZ+ST^HtLkfJ1-~QXp?2BmoifHXHNZx9W@^&s^Tp+lnKj zG|f%Uwz6zyk{*>$1`;Am96;Kp&R5b;mnCa1bAHOE_c(CgV zuT-O!@il5G6(=4z@atWgWJagUCe>)83T=D~ZD^?!5&H@Gz>ISiHz7n@<-S#V;F0FD z|4APE@zYQLxD@z!`m)P7|MdCOM=$>cNMb!q%XT1AbOu-LK1K%@xRp?%$T%LVD-w+S zL~Sb4n}9r8WP-dtR5nT~HZ<@%3fmS<$3u~!P`ZA5Q*qMeooeYjqlL_H109*w$=J%y z#G)>%yLqfJwJ3dZlvwIK*;XkT3VGZaSFyK1E@~bL!=%OUHS0H8oL;ZT+q`GdV8@`@ zvfpI1B>aJdIW+bMU*6r=^7%lmJrhW9TpEfNEIm?qQ0=M(zHXGP1B;C1BwA&g?e~$p zb30Go(sw%9I~iQHs`StYO5h1_;cfCyE=sQtU07k^#y6)do)=V*u~@UGYarMk2o1;A z9%|}1e@$X(UCPx)z7iQJELv*R9@J_2FPNIVaKK>PrO{)FsgXtsqpGH8f`bZ-G#!!x zQ%)ZmxYY0!s~&v(isRSz_hv$)!^FAvFtl<eiO>+K^T)O7`_Fqr`cKXQlrK?x1S%!@^ zh$G}$G>6k`##c_{W6qIlOAnIKZ+!8K(7W#0w0j?FQnduE`)N2>Dw7nhEtI9i&KKof zR5T;zG@)QA%aiibXIUb)r)Z}XnWLrA6Dy@cX zI-}D8GkJ~6Vsq9w5T99Fl^RP#v$fSSbyGImN&W5n!Gisf;RWvSlzlS_oHOG;etX?8 zEM)z#l%?AXzc+g7sEED}n$_8tV1N2!yeZg*&Y2*x_+w6MNL^E_3kI%8EmcbSGk95D z5oVPqMpwr$_I^yd9dBxwVBXBQ8zF^E{}H84ebuMF@%7`Er8)oq>ixPe{k`=4pL@QE zx4?D7f{88_2q%)h;0Q#f7p&1LM}6PHVq(*89@GxTNX?Vp!RDLR;)T`d2Ko%j8|>HT zKtlu(17r-)YzJ^bGOzy1VgAww&gYN}<+2Mdq?u5lAJ|E*J^71&I=Y%QrH$lPO>_o}~NheqDEH|4bCW+>g|vDKE+ddzg! z>^ra}tYeBdQNPEo4!}84l_D5zQqd<_)W45Wi7Va_l2#teC{f?@TS60{Q3BBFwh@JcKQap z{hjVubY*0FGwaFk1d7c+sbp`4a9ncch`VwjoqE?(@Q@ahY@Ym}K>CUi#Mm7i4CL<_Ot zmM&XV|Ef$rF=6s+|69t3hGbobmUx@&z7by_a`b#(o6|X5>kE=|q_Ue-4sA=}*F1k* zX;DYAR`GQC3EjUbo0R^D15gWiGXpO1Vm=Q~HA~Bs{OqhrS512)Y#v<)} z+Z)T|8qQcezM~%6|IF)i={8w*B8%Z z;(eumWs>fMHJ?nSDS8k!wWp;7hgsGH#QhQgu8`vR!Jg|e$dYr(ATHhZb*Ar_t63N(zx@X%!C^WFGCqEDj z4#3Nr1}`JO!{}9%49%SrkW>jCybSGC`?uE3OvbKxxX$N{n8KWY?UK~e!owi>AJuxS zz7U!L#Un4H8D>;?NVrH*ssz@AfFWVC_IYctnTspm&M9OUu_ohAWq~*5DE*U=frIyBQCcAhv(Hg9N{iT;q z{$l!gT{uMTfM9Qc5L!OUUd}+~PR)`@+tH)so~z0I`}d>55;zjY05;Xe(gTvNIW8~4 zYU^`cEWds6=(fTU!~scP@m%}*hTOU?vb^+gXG2pP89)PJh%1)h?t;lf0|CVQ5(G0W z^99_+xFxVRznQeRv`jCbh27kat4UZ42MDVS+lr++Rz zb?LRJt2P#^bwz(te!zf2vwM+M^$U{7dk0iLy~|^xBn(G4Hz5oWo(1EjzmoP?-VU>V zI@o@D5S|6GSaN#icwMX|P5lyLDdX|8s9!>RxNR}~5@?Dy96ih;6$kZxA&nlD@WDCz z`LACyBdxB+2~?%zXRe0MyY#i1Kv1g-`c-7$B)zG5z+XqPf;9RAeV11#!t7-{nj@g) zv>g~=AE5+IY)R|wUX;a zcfZnP@-ewwlWT3z5_##L+J@GA4PO<@XEel%Lr__r${~y%3FT7NrGL=*1Ip1PCSXhV z&)Hdp-uf%K>8+D1$f~`oOZT3MYDk_+sI3~Zh`{egFs)f2jG+7yOsmL=yV3(`TW!L5wd?hURLJT#EWV7g2P(AvlHj|9vl6EPCIReL znZnXzhjQ^OiHMjnhf)mcQU3bqmYgooT;J4gH$|MDW(45K?CKcUQqcH|v6gO!IpXrP zWVOZ2K4o%Ap|&xfG7svbaf{Vs&{<%h^5rBX#K-fTYLEjG9+qr22v$~kmg(5_k_z_ml(L4 zS}US`MUE^BoCxl?^Sl$^1;TOCY9;SGNIaW2llx0ch(;L< zW-Jf-y6_T29=dez(HnQ2yS1ky9~O%5DWmx$2>BFpA4e^ZZ9$7nFnqoEW z>xs-9k~k0cY%FMMhLoCM zcf77E$nz^j(7!5zE+`)%P=RdZs~aBLfd7f-;fKk6ci)YgW(Yc86#)mufbSj*p7qvO zf6&;7|A{AWBW7DJXDhvC!`0?R$)_c^pf)%S2x1prZInirQfXB?0vp2JpO*3?oYb8n zpD68Z?4jnSbTYq)H*wH+L2gM^S>pYMd~xr&u?-ulP09;)-9bEGsl9>R_k`N6{=_%% z8ePFT0Qv-9_vLV%y$3*yf$zkD}$;PTZR zhrClBvbZK)v^++~)Z z|1`Xs$O^R6>uGa8gJvFex454XVSQP6AF$HXt$ee>O{lm^O1P&Euat89Q*;0?+q(6n zqcrscXQ#RJ4ea3{q<6pIUcw%x;(#(UArdp0z)=VS6Y`7HhSAXtDdFGJ{f%wy4TX+a z&QAW(y{TB-)ZMeOp}4WTXLPiuXDrZ(wgYJUIqqqZI}jLCA;cZ!Ooi(SWm3y=eg%(Y zf$Mr}aBb2M@x^Ml7$ZJ+#IU6{>WP?A>js)rsivk(ir6E4$=YN{Wokh_QESL-4q2j+ zaEqxXfa3nhqPn2JE*1<>){L&^*_a`fsM%zEGF6QW%py*hr&liXE$XS;bhOSFONF^- z`#M71vFpiwBZu9=TCdo|=g@?pDHLc2b3LhOzY>Qn{dj#S3aGT%R#6o^z^)JEdGV7f?1#EM1k zz@fbzTy-@e)zw_b-h(qOuu$hXMK#|$-NVzzs%mKq_iSnE*VU1jN)?SNe?{*5qq?q6 z3r(c*_1BdV`V`ar5fkJ9)XTYDz#_0F+i2)@Bj_Y{!Vx3Y}!^>PM zUrZ&{WNLyzM1evePW#fOQ_CEN@NXf4AU(XyTx)a>#uGKjc$~_lae~znJAC_hf!%Ik zQ3bJgDkAGpjzpaE0_X>NExXu@5>P>9UK9W_LjcM(jg7U|+U;qpx3(`7Y%rRO;do#8 zcO)6}wz!>5b@2hKF`Ny#^PW;Wa!f?HAK6UqXfW>QWcduw+04coRjXQOMC=%UPbwaY ztJQrqD!1G0P+O88bw&MwZDzgS>*RzaoO< z!=L1d6voA^!~XVYB%x90MmF??J?^N-=jARi`qU=ZvdN~=uw5S{Pkk$%P^HqjRGP+( zplh@PJ((F_F~3IO)NmnVxQVry4`zL$Wq715oYcXPVB?5UrcTSEKH{zSlozGeTocxB zD>c@cYKQ9L)#+?Dolc4UY{7z9DNhW%r-;9RQKXC^hD5`cJee5`|CXfc{SAoqQJ-Iu ztQ*a{g3=?z%k2tuXX-O6`WZvFd zL}4nD5ftK-_ny~?=ZLByTOUbA`z*Hp`06F8h~F0*s0$6(x@{RBsBV({Pdnmrn{?F! zs+vMP7*OzvsLK=9YgAp;TCL7VwVkx<#X{HEMW@PKg>5sJv2sq{`e1g@<8rh*!u~=! z7)DO_NT}0d?XO?8H0Ae&V?D&KQMD^oI-N<=ZZw(oI_0oZ)fNkSk?`H`c8860)u7wm zfu4Qr-indYBpwU&s&wQ6{lb%Ik4|rrfaxOQE?*t%s&%(TV|7T{p-qR{2Zz@B z0)c?ttMzlc9G1G$SNaC4mE&r4z*7y^42xs=@hITlZ1Wiign2`?4}~p{^)ZB!}w83)!)F-B<(ueG?K)zs6^e_{kH+(P(tE*f0`} zjx=Nng^V|D%L9HBFg1myg)oqef0!Evl{HaHixcJ}BdgPI|3AQ!HqT=v~HE zZrAwAma&jZJzk?V*Za~5W%Ynkjb>fsF>(OSg0E$yqf&zQOm3`xqt@$)_&3&#bGxFW zP5y)>n`<1S#wL^~93YQjsFE&r5e-L>Rg8-FP+T`w$c)8t`}0S_e)3phBm#9!N+4Hs zAq&-F=LLpz^#yMl0&0vnZCu>)VIOuio-Um z^iZ9{($w*zM`6O1zY#6iNt|55tzj+Ds~A=1&=sR%H7W-pm$di(;rVc+wdpRhG3|7c zPd9X|av=22>i!z3jxIi6K)#Bt?B=+jbMd$bQD7&EAQ1r3xTm#agVP!IY;ZW89&8jX zuk_H3qUH5X1lIUJn%gMQ2i^dP=Qj$yn(s$n)MRRbvB{AmTY7jU;RysjTaTdD;J2!M zsv5WITg(Kk8uQf0?O-r2IDQ0vK-_VHoC1^_82pOWt=?FPxvH~YHIXxZWcyn_+)Q$Z{ap^o}>ygC0Omvr}O^cc_ zidb|0Lgi_vN(0P#x^5^D>y9*p@|{y1?vSzD9gaJE4osLs@6c%6*O2EB5zC&7)@S9s zyrH3^Us-kYO96k-+v|6_Txz%d&s8eGV8yui0EPgy2F4-6#+{C5-;Vzsahk#FW|(G#+Y8Ru_I(q zmqFo?Bdc6~r~Y`2S*tLrYV5{v+;WG?Vo+#Qn%dG0cSg2d5#F`o8hyx1Ocp&S9pvSK zaOoAJmhk;j8Tse$MY&ZN-kz5 zpEyl`-s#!fiBs|yxd2|8ai8oV~_|wO9xW{KBahm#7q+Xh32_wLe`(PZ$r2-riG8NtXg4kN{2b4Kkkq! zWyfR~iH#p7{)T|GN_xP70Eb0Idxm3PEpQ>a?5N3SF*VjUP=G^?VFMw7C4|6uqQ^&0 zK0;k}4#AmaXkzim;t5EHeu_Kq7a=%?x#6LOfI_l_VbF1u34xiK5Qvj6h*HggE#lM? zgAV{!OP4H3EpLerSi<_K!{fU6Vj2Mob4>Xmg24b)jKM65+EP=HgbzfM<7o6L$fgREU{W(V z{7Xa)E7W>c!D5AyP3y41K!#me?>@6!pKJFZc2SkS(CM9C3r}8dhpLQ{p9tZC5JPP3_KiHaluT!!>Yh7P%CEj4 zS6B0YA)S%D!;uN``YKCv>%<~yRSnYX%>Gg$;l6=U*}%F=y66lhne#k`Cguczk`{Ca zAWckkGij|I7*$^OLdv-Tt*e<6Qgs8%9}h_Vd*cO0(N1E3fSR$b^16HMtn&LCVX>82MKT{xsMzk*tb?lpRWwhYNtGP=Kr z(OYkqDy8RHL20= zxH3kC*02a5AEih}X^+$6Q7ZN*wK&;1tmZGFJ%Vx%+PVcxrl3ZPm_>0u=}c0!-Q#Ch zX{!uYtkyu$5;JzsmL|?q0PX42_2uk!#=bvu{+Sa(U#hBA`&Qfya)|RqS-p+M&nu}V`neNK$qrOVkJZxbXNH1+D&Kv$-j+QAc#a_$RMCa_mreq+xQAKG+bl6bGpR zGj(b?2OKrjDO5a8)$vp{k=}6mh7FffKKgWi@uH6R1g)Aal_%~gZbN8<7 zY+lph^Rz5)?q1(qRm^PLUs~4L5^VALT7u18;MlCQU*Z3b!xsWR79E1*2>frwYttzX zg@iH-qOnhz%nE_!0^G4ZCwJWOo@g=WzBgj!2;cMWHy&b$0&F4*hC`)yJRb5!qQ{6x za-v$EMV5q8{B6t+HTXhkMS;O&;ms>UFZP#SAYLK-A{m&O`RRfPjKD-}ku%xL^ePAB zBXpybxidOa(pP$fX#1CjkJY(NUW1{5HdFdSW=R%d8E(t?WzqvO1v;nUO)mg>pmRk7 zCZH|ESzk!(#Y0C?rtac$aTlDtl$^J2cVTUNv^k=YbJFAInHAbti!z)v5o0QfD|U`{ z`@3sC3i56CKtXN)K5w7|{cMqFGXhSx7Et|@7?7XALzZcEJ3Fz2x$uJLxkH6cjV-Sr1Jy9%)Vy>hs#@~f(;fKddeEl@phv61M~uT%hPFQIJu~h@|k`RGG*I}0;I^KIo2>wC#ljD~;-7pXYnBb@C;fDf?VpyCLHFRc8R zFg27#!tPKojtE5Ty@)3)8o98>T?M{S74C~KK#DUh3Vj;ZkUY7X=bf$jdlq1bUyL$Y zju!|Y`}yuDKOu;xa1#-@`!f10_)Fk`!HE-@z`zE5UR^eY98D&(fS(L`bbdpb^F>Oh ze3$ni!i9_3nM`(;oheYX?3>>cEga9dUWZw2skPE{P9tMrYX2MFM*qXjQpw6BrbcAn zU_^fkj5y$gOO*&T6$Jjvl~7i>^fotXCV9 zmM#u;XKNKz`=oMjEqAnSj52W&U@#4=<~;?27nt1%h9{%Dz z+jpSdH}9=n`9~fhR-(H9evCm(j0%PUJPV?%oHC6pycv1yjd#7>X**6$gz2=EUi#;s zIRDnt!}m6igsSAbc)8VEq_NGwAw&V|UBKKV+g|L}!Q?RX#tR%NR%qPmU6^7tx}?@jIRi^P8XBh=Sh~0F%-eA!sr1RxovE&-fyT)1z5NZt!>+JC zG}^punT*$GA~yY2i(_Wp?B~4>IgfypWVkV(;JHLN;1-YS9|1-k)NHuT33sF7JRox? z^}msSndHnBJkOkCU991HMa(S5?DZ+^xZb`%7&`Wy%f>6^G{pzEwLnnUY$ZlEK- zJn6uqEA??3rd#KW#v5hdwg{eD@78$}g$}$S~sS3Q{4CvgHu)c31jFI_V8Fnymz=q#@`-*)W|Nc2K=CWq| z!0TW!Q?V5(oYdJzkT77G=Pqq0QnRbH_`fA+}_j=fxEk|-Cy0evzI0^S&y|X zEK3HbJI2o*mY?get8GeMqO>;AB>O&6o6x;N{3DyQ!U|i=`*qfaU6ZA&%GdQ!*8=NT%t58%U#yB`Tc{*aD%(I#og+Tco7A( z?fjXw7j_WRIFG>pW3>l|ATrQu&eWOMvF9L*aO{DBuRQi}#!)$;NI@$=K#=o>hId>^ zRaLFQ?$SU4D^g85WOmYpN4Z%fz>z9k^`#xYwv<=aG~fN>Qkg4AZthqFX&}@Y4vxBT zQFlOU%D1q)dGcPqHY55f*OO%%R+psxMJ;lDLwf+m^2h3u2+?xtOw&j@xY-Ng>}eo< zGPfK264;_M!)x&zr~E22=7yeh-qL#>C=vPFraaw+shj^np7>0@zs~S}2wxkpIBF)( z**9~J!WC=qr4}zlav5}Z7eXg3m{T#n5c5mbCgL^}+&D$u^!x?$?=Yw82qm<!(eQTgD9oDyg&NHUp)kZ`-shkp=mFgT47b1cRYUEZI~1zQ9DtO0o`@(NwG zTA!NewghXGNc-b4bGx)veF|kVQLUG2EOEqiGHXihbE(?OFnS)$z z(Fav3lg8vsr#Ge3_C~>m#pt=E{gO-C@9|`r=?YZo|L^UQVCo>bjhS1(vYCZ>6wdF0 zNQ#)912N&kuP@L@NYvtD}>@>{9>YLpK&6JP)!Ytj9ppxuU~cpu6|yM z<+Y*nr|}|{_`<}4MxH1ZB88{p@h>Hl+}60^d%8qI_dNs69jHOwmr++Rz@jxP-gx=D zkFa;hZ}Jt z)K%PRg@FE3zEnc%P${(4I(?S=L+RXY`HW18R7_e^m|2R^C`mrd(VQ`SVfq>>I4_-~ zL2Yu9YdF{^(Q6{JBRl0JPj}}z2_#i)MYq#cNIHH}x6( z+nB$p1QV>;*F{SzA7+)_ujWR$Z~}zkzT4ct(dkOKt?97NqpZ?F%`^tPC0K^RZ0>QN zzcKp_U)CX$_i|F5nQX6j&;en&$>W$=Fj|}E&LXT`*`Syj`iXOCCg&S;h?c1I=^OL3 zqfM-NcXNNqi~#MxgJSVFv>VJA8gJ@E^G#U8D=}Ymf1x3I+o6(Di^XI$H|;$}xUoIQ z2!62Ae^F4RDJ3=`+ho@rIObDqIrQ(ZokPa9^ZZe$1{%}lCl zZI#lg&D6WP?X`9#oEYoPW1YTMn5w31h>Yv;y5lx-QMSNwA*+h#+NIKb>Tr!tr>;`# z)oNH+C6j7(Cla2hs%o?~Dtibx_BU+!pK^bq@(9XEltnP7U|7E4(?+jCW~xD=sCoQq z=KiFR_7a)iR61ONTbH+_Fl;TRSq}3&$XF}SEx(`f0R@mj2&}28got-0`Mp|4wOm`R z(eg6hk?|(;?v72HY$lCIoxDaW?c#W~K59tCZ;p6+`}&SqO>*fud1~RxlSjN*c zk~v^d|?uO5u7LK{MznFKH?I^a*L?Z*tg zykvdIHu`yYFcGUu1l^w>cKGWjh<$N)vPsw1t8R?cB@%VvCUtM0t}UAErc$N?ageQO zo_gX4C|z;#k*%ZS!{aM_-hgL0xuH1N+w%N(!d_qKJ9rUC6}dv#si1-7D+}FF0%S~2 zLs=Pcvap^^n)0h#<87W9v)Pq$R%ul#ZM7=E?Q%CnIyV%9{h0^;D;f=TL@ahC&-Y0w z4X?Bdgxnjv8SD%d5J&y#$kuLV7g#Op-ExH5Kf*4srpBZC78%5QCT!n0h6KM(IOs9u z5j_0jrC0B~kyPJ$f_Mtw>u-4y6%D|Mov27peoA710?b0P;?O0zSmE1vuj-Z)dOi3} zrRSPtOQiU0fBO^L>;@^<2}n6K^cqYEXfQh1za3%^G8Q;Svy1LPXw^Bv{cCymNQ$KEJDdWVqvd{jIGCtFsj5Gh6xF@ODmkA;Ya2p&MSYZ?%gT$8 zcx~kGLOY-Yl8EG7$s4qPgopbFg9{Qd@<#-W3sa2}`~Gh6`_BmdVLW%S@!-^Dm6OC&< zrl9rbYwq6v%AfY$zV!CQs_sRdySJa)*e;hYk;>J2L#<+0r`#SSFP(Q{3HQvR8xM|c z%9Jt(0fP`)>21J3qePzuh6p2H6a+Ey_WK#p-ThvW?pwW2NWLqZS5&rT2@7q$0J^gV z0NwHr&{i_+YNWG;)fHB6ShDNgS5TgsZCo(B!;+zQU%|*$fegJVt;d$oQcL(Q7^(?D zzGP5A8>z3V&rA;uA4%BSn~is9{6QU3jEs0oo5@Y3ci(t}NckJ}nXFN1NyUxoOQxsa zeU*FW{9Dd{2wu80DRG29lQkZp_tS;VD=1x^lV`Gf3A?Z|*BY!Msaw$H?Np%oX?~z5 zHx-Yr>Y^Ea4@@MQq|aO9+^-gZkZsztc&L5Agsj0vLCU$KsnMHvy?4Bm)KCwS1Vun` z%6OmE!-C}wV{@B*V;>m_Rt)#EM#KbE8nYSwhm3Y%;~zHK=N5GML4*BsB><-zE7p9~ zY$N#x!v)-Duw#cMt#h~#LDIZ1jitoO$5{C)#DDx}Mg0j$+q*wzxRd89>rY6gSotbY zk~jI!p&i;jr8GZg?Tw*bN&)GviNHia=qF6ZmY_G(`WmAH6!ZShe;VJ$*jwY0FR{0v zuq9vQe}M8KvHTMf8cVMk$aER>5n(FE1Jt94Ct2<##XW}dVU)|s=w?by(K>f0YaKL$ zQY#{7wLy!y9!AAR#MWJmimd{*x|5Ba)d#hDfI&&Aau1_oto|HT7TUi7y|Vg}?Fe52 zXl8%U+W#)fS$)a&*)zoUbrtQ)CFd@tP}XCH=37Upjln(}uc)g)WXl`geIB)kP(ELq zmT#x!v+rQtjxyL`JA<)K%zmG)&+N-6KZAP*upq)GE5GmEA7fj3F~b*0?Fa~Gf!GKN zhDjXh;w~uDFtA&>if5ycj1^)-z4a1%+IWYd&|=%#*~eV z=|{fJPXZVLF-Q#AbRY=X4Fq&!Tc z>d^1$d+hrs#Y20nvOnRlW$%q4lrbF->ksWcDZ8g8T$at*B0iVKV3c<8ws_EjKh#Ep+-A$_@6*sw%w;RCF8o2KP=}O+H+#{>d)*M-r3Z&b9nDX%{#;c zz6+c8|BqpWahbYGiue$07zP=Jkq8LGFv@LqaTuG)x=`PS_U85d(ay6c#}4+Et`q{C zS<}(x0yoWuVKI3N?ixdl$#O$&hgWG##`UGx=>n!f2FCI=N#z(u5K6gjiVL7Z@3$Tm zByjnSC)^B@@FY=+I1}N zDuJ2xQT6IVe$)8Dt3)oew=oVkpr;(}L(!>=RxH1GGB$Mlz*)x!Pregc)X}*pIJvH4 zap)A5w=^zH{FRfZBKYzgL(TRF_0Z3avXr31E&!?Xz95eK8-^19196e5O zhkjZ(X27=%vODyoSpE__HiY_A7QpI57VuO>eR?dh`Y8YYT>Ve5V+@Q3J;o$2l#em; z06WIeA}hZ@sE=d+6YLmc^>JL?%gVtfpgujuSbgERr|{GIj7^~RDVu=$Xb-Xi){pQW z<(=t!Wi|mkbc`OdRPs>K8{WE#9(G_Z#wvT8V-k|E2cKm;H*9zr)OWI8X!&z&G|R+t zVKhlVJ!Cz2;p*M49sG|=VB?P>@i&~JOx-dymv z>>6&|T+C#~W3^GUyERc9tK*HvT!U31G%hc)Qmpazwlt#_fmXOJBf!@Jb--Mv%(S>!7Kn;s4PE0vcf? z{k497tqVaeYLTU>c||O~C6tVr3z&b&O`5t6%>#4eDAYthg+$$6u%4aEl0VWjE|j#-i)9=Nk*+$ZM3$Z?Qbjg zH(aa4+6t6I0>J8zRn`Z+nPkkh74+u#e0`J$Sh*3*bw&G-ZzLJhZN;VJp^Ey$vn5u( zbheGVjllzpZcy{>lHqq>M8Ewg??hnquw;c;Zerz2XY-Zy5vcwOCimz^c}0DcFJk3O z0Z&Eyfah}7Z$HW_>kmr?ne1&T=-F-JB>*#Y8kV!Xp8_Ifo6`})QYiOqCEqVad?Pr! zyO8;T^8JQ81it^gu1hx^z4rLv0Md{j7a4tlL)NS3IOK%x~n3FT>SCljaUn?5}+|K$5-p_byjqVp*S z*i@E@i!t>hsu=f4@-8VLMy!R&3Ep1!kEnnCHx zyZ?C4#7V`8TPwl>Zr}r9dH-o6uZiG*MEqI==PU1-rbpffq|y`bH$^~o{BT$Cw*b{) zz>keTA(>_yn3lJ2Z=!r99_3^rMK`1b8~7@=VOVW!)Z=WU(sGz?i?!(n-XoOblzx&i z0L`rRak7K8u0;7bBP$S_QF24TjtK3u30Y3pQIPFuHO&g$7*vf3Ea zcGij;#1Ju50Sm27#|mK`t3Os*A4G485j{7EVMTqEM_IWbnV^yzCU``-Aek^S(!3ev zlr)3r&0Z&=#F?!L-;Z)(O%{$<(>7?agU@wzA3@!JcX3v8S&X;K~1Ns~yfW!CD;-~*?G?8+%Mal zJ9aqQPC}tMTaU`7a^(Q6YE|U)=5xB7yLLId?zo(LsLioshqLV@&8!|qLwWS!&^d~)TSD~!`(S=bR?6yUgdD|>(}RHfD^ zcIbSy)r!>>&)hSP)~-%>XksFuntz%b-70E5gVDie!}RK-7*d3dCeB79ehFQ+-u&pR z7(#?XKl?F!c^3C20EaiJqC22BuX}af<=lpsUp`5_waXP$a}}uig;sj}aaJvIB>cV= zq1_cKKK?jsFMK3ITLjlkp5p!n{Ta2}LaSW}LhQpY0!s4a)r+sZ=j8A4&jt7;PZ6$E zD*uAdKgqpK-r`pyVaS=7N2#P~_EpJmxnHt*6rw{{h(q{_=StSE^7&{qk%&f8smN(Q zxt>TQ77E28k&~Y(KRx}Phl*L!inAmPUYx0Qn9y}}t}q3{Y;kkb%BG+^^E@J}(%Ii| zmS7;9l#>7<&ESNdh_}}uD_hS^nnLXUNHCdgEZj|S}IzxI_nP{K!puI z{xN2p6W{+bDlqh?=&a|95e2JeZf|eDoZG*0$BvaJujY;wi^YoZAXEwij*UlH&UNcP zQXb6xbmifYNUkGW`DFq+3pNwN!A5;k1(Ph3Qm$;(k4^}$iKuHl zrc}|+BZ5@8u{$!D%`Hk8bJJBOx2C4nJ zgAzteO|DKKW$-TxgA6u~&jlHz?H@w>EOgpt@m7rCP;+P)H&N*^7LtligwSc@^|3`X zfZBZMv_3I%+Gr#)S{XTwM_`|`5ZDLQ z85BOmy$nSbv!_z95dljqR_a4dNdkU-1wnHDufn)9Y|GUa8Z7l561?>jpSZR3v&CoR znznK;>(yu0sKR^<9^E3aOu8XY1Wzi3*fs@gA8 zN=v(?2GzM*9lwZMt7#m|)b}~bT8<;6v{NeuW(RR@N4OtC2~0PWiS3uS*G-%=mYYdtLjA#5XToZZb=DQf>k`vj*T7!L8Ff@!X@CiZ zC16ypIj9%F(6y$qbxpflZ#>&*IExGqIRgfcKac0lsn~9SHZ=Q5sCI6| z?AC+!kN^@xEQ~QDAm;*CRx9Wd_gLxpCUVB^wd=1ttxGL;yW^jOp zcC#V?aacAdv|>mtgi)V2_MMXm5&8J$j3ed##LZ{LufE?G$S2J8%3~=jxnJi`wqCnClwrMy9|J(8>D=24RI|n2V~F_w$%K%328j!6OpG!GGYk zWJNk@A1MyDWDnI1<}bU9%>}}|Eq{x^#c}u}bx`q+T`tkDbFu>|6J$mG8 zU;EndBVhij&|xb&gdAc&WuK^VHsxi^0nD31j{siRX&$`!yEk5V-<>xENNR>Om%dAX zXG-5Esk+j?&;-m2xF~}e3k_D2{Zg~I084d*v)cTFrLn_Pb%!72OpmRuyL?sMW#=}x zEnA7-Cl4Q<>1bQMvb}B9uds$RyY|Z@dGYQ98sNxxm7XS$a zeV7keqyP!Ao%QimRn4nAyy?~5sp(+CKC&#j@22sV?VngquGD0g_Oy+MOo^eqFRzx$ zs}-)pL}Q8A0xn-&wL%qwThQ{v;vMacOH&5@UWASs|LEHFH|%V@qvx zDu2p-lyuq?9)#F0_$<_cgfjf~AQ7iVUZ9wz0GTsV=MnMTphlRmw!#O9+#IiAA^Y?} zcmQi{ZcVLu$CCWEn-;efnzG9ZOILX^4u7V0{UVdaZZ_NW*4Jgy{c=OXh)vT@s$0j8nmy zTTB3iZcq5n(a_)JZA(~2u_FG>Qy{TzafA~6<^zVNG$H8@ZQJIt;HO&gL;TnHB2Dhw zZsW+lYIz@D zRjrUC`}mt6P`|+sK8ULHxk2JKYLn`w4hx*nG>z>hNb(9UHs4 zH?}GthF@OV8gSj%k`Cx0X7*c%uTXI**w}^cE7QIz^ z<{stR;U`G*usK>g?1);2hmCQ^@bILz^a5^UYI3dQb$**vAyJq9D%p#Dk--_F#kv@A zZe@i8SCq}6q=xQM4SZH8HKL{j!by)KUXXwV%w><*0J(kf6$tXb>5B2u%QrVQY`kJ| z`;H~a#Nu5Yox3Iy@x{CPZdfw9tbIv;pgt1qQ_>3MiuA?K#KfNNj@?tK#Khk2?mZKU zDe{%R-k#B0eieuW{Qy!n`!2hF(kzn}ib7osS&cabF5y5@WHvxvCcg5N69OlI1zsRd z=Rt$WwvDzuwwZHxrNIOdq+=lV?vVrJV+R{uEq|cxN`A@7w}JMbRH+e1TCIe|gUS(dWt(bh7OAvaWtCc`sM6a5 zwiGUBOrCQSJUFYdq-DlH?|${=myhkebnl}`{lnt|@iwwl&^xw{in8`2))SA50~Q)5 z3_LIp7-@bi@8gb4_l%isog2wjhe`+c@toXHm1(+udM|mWuHWMs2#14pv4&(UQtNc4 z9GSpaYH(2`98a$1o;lfo8%({SN~ehR9V|_iUeW5;8jTKUZx%ajCY!<7=WsS>B6*Ee znTxgb0!TH$Jp+hCeKR27r{IzT63++}UEIik3E=0<|32)`l8+rIomKk&F1KG}H5uz2 zt=>h2u0@t~BzGU#5$g1My8=PKKUGZRT=4IS)n?qo*|x=zcs8|+4uiOt>~KX8+5@S> zhid~JE$&<~nA}i$MX#SW+MRZjcid+(+6<;XtGg}l&uHYzra((CWIxDZ1pfSG_`pNR zg}*%zdc6b0oha{K6A>$^=XC)6v9%WYuj9ZWp zi+hF1HGrQVT5hbU6JenRgjYfp&$5bVI2q4%K`Ndr%PZ>x|L5wTuKb5UUzJj)`?C0X z>nVQ^i+?M{&%f%#C-TkmQ|Z$3Q~8s$mY>R>rDNr%@+Y~m{8awr5VH`FlzYNwY0If4 zEI8e$v5E16)Oyd*fM*r_{Ty%aGq0jQ$8W+9 z@&97k@YLIHPYo}dfxL&lN-{V~DAQTK8c@blyj_mdAA|rKAAe(Nbc%A(_;>?Co!^LE z;%3?u3g5tEc?N~`C?!y&XcXqX+_h-bDMr$%xS%X>U7Jt2 z0*mbphucDJftT*ScfxJcyQ*rEj)}G3NoGd6JRRIKsda;yp{&02G-l~bZnuKpCsR&N z^Gfm30eV!2V>`k1Vi-|TB!$>YG!(5U5Ghv3VvO^$7(RlKEXmymw$Z339m(`q{M>Wb zB@p&KoQdyPG}svRrn~=VnA|wTCDv^yUCZK~jI}JEl=8Ovs8zq&>L@+Wr6Ybl?|od%_oEDwOY7cR;S6wEO${&YqWD&!YqKN`E})DV3y@=u*S@IKM_ zK%Q33ruhPN0dnp#ikG+ww{pkPlZ@V>HsicNx*;JZ7FKcoQY>7Bx$NdEy8kNWs|@KD zU(1Tj@w!AjXE}a+SLuZ(xOJzE^oKsVJFuEkipL1(T!7$`XR)>@S5$-p-5sCwZ@KT0 z&f~|mZtdfDzjI0H{ueK~gd~!)I4K`C*O~ubdIGSH16CT$OA1Rep&jTYY4Ad{F&Dmz z+kS<$^y+(pc9mXuafTG%Cs>yaz(F}eB}#n-#1W)<{Roo7-%z@cEGs?0kV_z%MwnO6CzAT(<4PAuf6I5Pn97*lpa5CVDS7y$$?08FxAi( z@D6Z4v_|ZsCmY6XG3(@sv(Gs(d0}zq;)yfz4ciyFd)H>M)O3AUabYa=T0Amh!v7UV zFT^pG@>blDlY9g`GaisSkh6lj#vPhIAZ;KVcRyQx$5(i6}dpld9_yB{eyuisw^mbt;#rDd7@P zI@j9YZ!>0c2{rk6X|KM!-)8UYw-Q->J53=1iozqv6pekhAK{Sz2xa&Mkl11ilA^M_ zm}Vv7F`2wV@tK>hZC9w3L`rZ;<$6wZN>%uSt5V5bs!)5<8dNIuRk#W&r|+nf>Wo@m z%4-ZdX`J)FVejuUYEs#lg622Ww09cy#diBSsh*IW-_7yH`f%yqNA>-SI#sI9#r+1F z>WUJ+7Jw<3v9kl1#`vUyES7B%A;TjDY+K<5E69&wp#nzd8*PK>dXrqG1iN0Xl5M&5 zr5iSw8|((ZPNffZ#Pxc8jnQo6;yumz(b}9A*0h>H#6YqqfAMETXrDxI+a_mSvul}E zV~AK)AscQTgn1p*0FR;G*^eWF()m@#iL>-O%=fE@OV6PSEJ?_tz*|(AWCS^&|J5&l zd7SgVbl|5b7J_!ahLq@T>gUksPg1^@CPWlunxg!carbkg1~a+1d&iPSS9^A6xGvZd z%C2l2I-@DG?h19HC#aA3ogSq%)w{A`>Brjo^IN)d-GQoqbuN#09bD4CXFPgPmKx92 z57tL$?i-z?pY#&ycLe|sMM74B-^M7ZiI)DC{`=47N193>Z~l4<>PES9NQ!?9b)knr zDhIuyf^{OPP5xl5GaPo-2KmQmg0vGp`s1f#jB;VJ4W>21o8XZbyt(a<-G980ITk<> z&+G74TJ#}cuP!Hh_-XM~5Q<1;r+a8e>%%TrB;s;~x#b%-dGX`%dNK1+ZW4+0-l1xp zN$~MGbM%J=ZnALZUHGn_8zi^$S5i^KBqCUY0RR2-M@EnESAO%7OW4=V`1)M-H4?vq z?z6ACX8JWJ>40D63;bpQrb+BzF#mI`+Jmc{A3sWSo6^*#h`qR?6b^YjAvjI5H<#ee zJ>r|V3c)O4j{97-;LUqWcavA>n?a8Ugr!4rx8w!xJ932_mhrPRF?y7|NZml_J!P^W zGe^vkLc|;;TW%`MaLUI%(%ib=ye|y>7L>WOPh>$mpcKXxZT#ZR{iaR!$^9c}%aI*UyOWOf zX#D`U4m9U&ntgCWz$Nds7IdbAlt7enj2^?91h)KLZ!kUJu_!fx8!6M+cPrl`f>vRE= zv(DDm)!OGezTYObbWJ3Bw>A4(Ctp%X4@>2y#ymMTJW|-uU%G;OW{odt%bqb=8t9v8 zuVs8mlA~S{a)N^xU^9anKoAuLKR|rJ?LZ7yFrQI^@hSAiNDi&Nr2DwHGd0|EDiB?l zD!UIYGASCm-Q$z@F(7KmP7#LJU_%3*!p)75i}N~ktR*lrf;*p^>SC@?g z%b&6tLWinNF z>OuiEf8o#?0jP&hwJ{=`F6h4Lz9UPPA9iBcMh?R?Q^1?vjo zKOZnM_Cv!>n8LamyUuJkR!cP|i;@gof9+kreEmyz-1(V5eRRKEqtjNY6T?cm>_VB` z(ULJtop=4RlP62Jm#!n~(%;G6pQQKf*%0Vj8l(Fb{qDr643nO@e&;)-!g1Q^Qb!$) zQ>(FCO?uc?Z{Kmxm%nxo4IjB>x6)PLt*oj#B$fYvlzj(aomJU?&ime*o1NS}GVb0h zci)Vgz4vIEwCPBirhCvuCvBMpk(SklA}EL`ps1)II9RR^kRjlf^ba@u70Jh-SV^gy}Dlmt_-K?J14k?YKue(#Mp6%+IR!)84iw}Nr zqhe!Mx;X15T1q=2meqb+te`zMdbjW|;jJ$$Uy&}XeO5OFxEHX&Hf&IvWn$Nbc@iKP zG1-R-NLGHKFZObfox zO>trDKQk>NO?cjkX`RU2MvHn(OaAj(%WKEJ$vuAS52dfq{^g`<6Uq5w!yi$YNs&Wx zgtrpHD*)Ggb8qE~oa!kK%HuIk@6fRa6U zq50@zFyEUX4Hh$GT9{9$h^HnOHcnq|<|=?yabw0hlcrj4jvJfXCE1dbyXkAKJmWE6 zjoO2)d)k_|{xiSmXhD&&CEh&rF!>67ybG`TPlVJTS~+pB2JkEg3j2XVJiEpPv@C#- zw#PGU;_g!=K_205UO+_jTm%a5&diX48S=4(ou7j(5*2<(l?+1FkUk(~JCGvs?Rm+8 z3Jw%0F^U+-u(%%She5G%cpe)~?Gl;fCWP+*JbX?K5v*Jret`SVwbws+3wh@v;fLR) zjmhEB>|+?M=x7;q#b@npvKJ6b5RJnHI}Y;Fa_J7wCNPkEM+&3uczX-~BGBn{S?u%nMUz3`Wx>k0wL`QbyzitUpL-{U-j+f*VqQH z$&*S+*gR^k!|yK~h>ynW;!ETI%&%M9*m~(YDu%;n&4;;JL|;OCgt**EE@NhH>dW4= zXuN09_|&5DesX!{d;ZV!<4$oN%-4e&Yt(E`*Lm}df5*?^-}`y!Mc^tU`1fk`A(m3r zVUpfm&~MmWj+`cz+0xTE;IAF#o|%oYQwz|9URp3_61Qvq0mKuuwkEn*AZq_IkYUbH9tID)3mlqp}bV5sSXCB8+U6<3$1NQp@)2T z*?t;ImxXXiKm%+kz~`uS30owPj39U=tam3qNZkG3Z_SdBv_vkE78PZOALO3C=bqUJ z_pFdAuB}t+YN`~Uz&@y<>MPiX8~Z5Y)ADxO*Pd>i$_%k$3lmIE9!f2VXuZARP`$A= zQs~UrMy#zHYMPF1YTPp(b+)ZeaG!8=_KwBcrlS5HUu$c2_WIm{sxAG4$A-KkhX(r& zukEBngL-*qumPwWkaZZFR*M!f=EWq;8pTXMa4z#tcJ|fo8gR9GRE2Vfy-@he9k=8b z7D%NMxm+@J+bf!2RcBsXQ(&}e9sE2cMP;cVc~f||xV*fi!0*j{UywzHk`+|`!K%+@ z>~hqTP8s*Syux;hutvIn%B5K=3Jv*YusfkT+b$PubGq6qV{Nd@U>RwK2MQ*p0qO5a$l4h zmQ0Sub4Z>dzrs`?%h{Ea=V}iaY=(UFRXbl=88)MXq27;^16|vdww>bMoejQKmo}x| z9jJ8{Xgpqx(p4x=80tronj%xkBN|r=vV+xnr?*6!y+@YoZgrQsXn-2Wof0qd2noncYIV`=&x~kgHO5(_>Bl9>{Z$AG_(;q^yqtF{kr9BXS_)}bXi zsp-15weh2=cwJX3ew?b!sN_KlJmEggpBUpxjN76qa5i~jURM@=2ku%rQ?+hELzZQD z>FnASJ0c*A%DG~Gkb4>gI6(;__at%8(H^)?+}>tfBT%_a6bNl8#OM#Ml?)o-{1ajk z5JOW}HV4L1cm1Yib)PF9S`nQ7d2P=!NB3xOS15QZe_**Yt*oj91vd9HdW=ST#B0@Nn!!+lUP8DU^pbuEFe&vpE= zWfY9Z^i{RSLTzoG9+<~3$#=PDfqCE<#MQ>h=@7{6dy-Y48&X&-E!0r37s^;f$>W&< zAX&r?UYqIiL}mZ8>m|hQ`S%mwepgabB9)XBOF@k9Jtv8IpbqKYLla2%zULn9+1X!` zvXbhQMqOK_y1n6oiT0EcyeCm{&$5~b41tuQF~d1~HQ<-@{zWK30i@g?w;eHO|C@qy zUy&v14AqsNZoFdlfd|7G*z$%3i?P0-v<0=cjwJcA(6;nQE2;cs1{%tIz?dJ#n(SWe z5Uun$A@EhJ(=1bF7W?3lTcpLsJdb$MW2fJFC@OpqUH*-z6iATDizQfNNkL76M$=f6 zPwt(K-*+Eze->O)rK*Y1zN~bSCvi6nl+dt6c;=m;j85DPuY?g`_Q`#GA*O`EI{VnI zvrk^0ng1p|w+aH;Xs$02Q)$~2AEe&2m(?)<+Q zh(3$^mx(NJ(8vPZKY13y6ab_K@(>EV;K@*Sk8P7Py=fX!PNo-m)3|~|hi2bB$D2k~ z!})2Z?OLhy%xO@tt|5sa$c{x*?SFCbMb}v~@rwYG(ZAEV$hlyp=R;KFnc&em$#2gC zA_OadcrSJekq`Zc%yPuCsT1TFu?VfFPoF+~nA{vCoBkaGPJjtoBnCLaw-hHl6A=|8 z@$P9Isg6OC8#e|n^eS0byR&nLSEOpfmyl-x z#?sa^x1N}5=iXz-ZJ?5EE4`f{gS5FlEl`>^)SOGF$rdtg7j7l}j-J&0-#fzR@Ml!y zSRm1p$H$Iy#{MfOOCP@@y5`uDbBfjQxB@QzaljylUJN!q4RtssN-r|vBy}7dNgoXm zzu)L+?ktVkg=RZ>tioD+>qkNMeub~KuQu2a(h0w*CPtOrb;XB(3GWPU$r{`e_*aI3 z5KvKs3qo5;N9@5E=zM?ja9ujef<;z@0ubC;a7Cnq23H(pG2DmnB&+8x<{p87QVwbg z;V`ifUM^v>P?IDM4_ zyod20?xk59ej~0|7|pLifDGe0kf|v7{{i-o_c?tQ@jt^y4(1~|q%&N|Rywq2u&i2_ z;Q(iQ$t8Jtxm?Cg&gbRjaC||rbo^xZmTOz)nZdbka(O5gR?Pd!3;ofMf;q~s!fvVi zS&X~UQ;7`rTaX2MW{gar94b@XtnkFy)yro_$9BZaQtP|BYl3wZsiyX~(8TiTC&DWl z+g|uP>g7o+8+h@kc<`*yo z>x^|xsh1;Db#+smdmyr+&fAx=UZf7%gMM1vme$n#KBGj`I7|f+naEFxdgQbuM=C3^ zy42tKlHhuq|Az2cV`ECs**jXzq<+@>JN!5;=;;ijs=t8ipqi!;;QXbLh z^+9taxL4yTvwKa3X+-%3`hk22WYvoS10kDRTxOe3c;V%j$vdfab>Y!O#|rPn?gKK(QRX`PzT0bZ zMJlWI0|&IX_Asako@-+!EiI!gih7|Kg9{oX`sqosrZyJQTZ>B)?v{y2{l29&>w3MO zm7mzzxT?C;5a&jllabn7+19+`_;g3djwVOX?txXe?M&@6wQlcgSQfyYpe-bSi$zte zkap&#rO77(jTaIMShxVWamUFX@6w}7Mvp9UDV(L(l4~3KY)e)`q_y{RKOX+{-r=j) z#G|V(>kTdMD?c{->FP~g7aghI+|{|c8mkS@h0rbRWvqr!9~!M9ORLJ%YC}UTc*q0f zw833i1oq(W@XerKu_E5~O;RTOmV24wj&r=BHaxqNKfR(XP$t}X7?W0E3lUsBD=m?e zt_2P?1_lQRtc(xPuyU$5QQHSXuIRxbGKT&yaw6GjP3<0RyQoPYtalj92!}aLesIcR zlsgheAC2X5n-n@9`L3~bAl$hjQ90RWuM67?6lM$DqQwUelq=*7XJO9X3*iQXS|umCt5uTY@&45Wc7HBq31 zDiNp({{m3irk24F1!|)GY@igS%Y) zIgBfa^Wn1@&}SBtM;n22eZ*?+_EKGmuBaqrsOvPvo09F;nO*7}U8*;D(f)f&jmXQ$ zk@@=L#L(RznQEW?Du24)9=eYvso<5LF%dDZWE}kyTq*Oi>t@jN;97>V;V=KSh?!ox3cWtNr}i|}O}#UIQ~jb<{0tlwGe zZVIQt)3@1--6<_%Y5^|IqRqjm#2yk)wpqQcm3ri-21kAVl~p@$YWI&FT@u?G3d2HT zJ#+{*;reA&J)4pm`DIG^_}$wEkFAMobqD0s^1x%Y$FLe=goee~Ai4}V1Wh+#?+NB- zF)$(hYGroy&j>-ziOH{IDJQ*KZth7mDpsAEPN$^!Iui==Jh>`Ik&En;Y{}lk!WWd9 zk$Vp3EXy6fxPfJ+ltyj!%dkgC@M*<`sT+-8a8fkdI7+oJi)^W1IG!gow%OHR4Hx?0?FdNMY44?y7P9;9He^hD-O zQJ@)%jE5PbD%u};&OG}X`QU%7bVRP|Ue>+-e=TXmQA)y>0}r&v31V(UB0H~v5YctR zjAW$urUku&TRoGuk|9BGk;*|`kr`7N?j)_xwGumrSilTN%mPW3jRk`t(qQM);xZ`@ zsBt%VNx;}QU|BtKXk&Bj$SOx;V`9?NWFKCe8r+#$*S}_C%T;-h1d7%9@NWk%)_BV8 z^O8Wcg9!`m5Eg*_YDhLT&eJXC!%(a2tW3jQOJjewfV^iLT(vOX@o=T?#o~D=ogJYi5}zyXM>)-$_t`qC6RX^gcwwSB97$*KCfH3`s*_i!giaTY2{4X3Fi zJQF>kWn!LH%`+;_te)Jc&~9z3uZ@+I<Oa7?s{t6|rQ zr-8?$7CWNOE>wGh4JK=tioxbsl16o-C zZeS`=umnvIdA(;zL-Uxm#+ux)w5+q(8;R?*dW|AqEzg_Du38yyNV(&N+I5X()`oDI zPN7icX>6q&gkO~2m2>w%*P)hhN<6g62tlCkA}a56LII-G1h+jFj~|WKdsK}B~@mDJeza z|Nd>#E6qMA%f}(nsQk^?q)Id*KrCY#qMAyZpfi-NDMew|T26st*P0|x+=!$hTeYSB z;=$cBe`|`=HV#a+#I?yv?&*PPSCc1ODzmjD8&`&?#Q!^w%WeDAzHh{QF#p3y0-uy5 zn|lez^ebjGq3Qz+J*XW6lL8Lp08O32cN8`nKjxqYSvpQ&+QE3%oDRORXEDxMTj42jL@G@6vKd z>FxGGm7(Q}P|`Z<9g2K$9JM6hWoXL*nD&KjWi`*e4)D3GI*eEFzkwZ351s;bP-aCY zC?)&i^@qGe?SQ1h>yi!?Sd67Ad1*;eNY~Q()M@^pJ)CQ8muggq0M8zh$l@R10n^i) z`!%Lrvv3-D7iWE%VUc31gGc4-G}t|J47*u%xHHmuuyJQJ^v;}jbnX?*v6EK8O3yJk z_aK}56%f0tEWQ?=ie#SzK~d;b(Y8a3v235*A7Jh_YYd5W0l#;SrVG!^YVo%6^4M zED3<9#(xfpQ4_n;X^2$XtN!7mkN%J}t-5~Yft9nb;^(d4!cjQ!v&m8X9E~UcC-*vn zqde5|IV~ELz-pXnF)^bxXZkQOX&k5LwBz__J6XJYSw%y{;#b(atA-AD(9W`3YguR6 z*l2(=8Vr_fsqm;5T}QQn|0}jAY)u|{NlD3>?PZbZY%0LoP*Vmx?s1B`p=)iOEquR0pISw3x2FMB0#NGc-K#&;epiLFEVni=O z^#3Q&NS`_CEWAwrW>KL|r#2UxwN?KUw4_8Ab$eE|MgoqKyfK9qM@Pw*y}39@zBU|#1M(z7w~jUF5#97m%*PK!Xh1$ld}(V@6YDoQyO&i9`{#n zmfCB88K}s}fQm65osI>ehC3}av@P_0MjlwNzoVlVDNC`FExX%lru)>VPut2_s#l(= zzm3T1y?sT+iP-G#ICI~mUu#oedy(*Oqmku(LCE_T9_=ZtieeFvcc|4HQV1lTbl?DF z|6DTU5xz*WEM+Hyqt%s78mrt%mVIXQGvrD~`Rup2uC`uNQSMf0F3vZ5@od8|zTl0X zIa@YaC48EcE}o2Qp1$|2nGiq>Yz%P`P&5<7b&!_Evz#xii;if6fe;a=SB2gg2voom z{xKs>#knCz$GXPa=}vd^q0xbZ?Vl)(yHd3kal1WUAvH#f#;CDA5=}Lis#K*qt=d2| zty?-Bj?OKuD~>cZ9a$Ucaxd+P^|~Bg)ux!y7&BG2w1i;t)8KddN?#5H`e^yOvkwj? zn2h)2+{2@-OT};vDgwdXD#D&NVo`HaI^2W%4^Fwgz1UNch-s|XDs+)`T{WoWGJn#u zk5&z#imuaVFAl|`O{R<2L{^0St`57|EDu$pnpAW{<}!@r7CK51d?^o@Jng2Qms=d-KkKb*M%GNDxSp**(j=Lph%fLh|FejVu_*H zlAot2kn7iI<9ee;V=`$p#Zo^-3i=P13$v#b88xfl3&ZsRAt8 z))S)jC2cX9ui-%U?nKeDV70Z_g7$S4$j)$gQtJ_e#^rLBHFXA>ZRU=8t;*mq zRfLnN&WaRii<`}*hDl4E+mdn!k0ewkwPv!R&KfsiOWv$o$Xd=xLq(>=+j(ZFh{3*)_RPZSO3*Hv zR9eCx;7-A!ngGm;EJKtY%_o$SbNil&f;>Kg88CWwt|{01v#||~=^lyH60&b3j|jtCSx}2Z1ErewNU zVNjRoP%Oe*1O5v3fUE>RD>KtVTftB@6Vcz0CKwM$oIeelu&>gjh4P9EeTP)-P3lNT zJTdG)H&L6&*KOTcF456M?jGNvgX4auz0cwEZg1;A_(!mj<#4}KR#|SpPzpCHKdq)& z-gbq(r+Q=*30xtkPQG44v%EbHt2r6wHbu%gg}rsEu4=N)*|2Y@Pi$Y}bX986 z#H2dP`PWVe@5f^fK)qDL%Y%r~Td&gz&+#6&#b^kb{pt($bl};3c40pnXx}Lu*`n-b z#373X|KxV;QHjW{4?9Tgk>9mTl_QTe+LKEwPkH>!VPRt3HnP#Rsy#92J>RyFL(o=c zm3x-8u8gE=SB#RZ{IwHvS*iGi_k!n7@7cuwIgjZk%#KY>7BTGw?htqg;uYYmLPhaih^726@KyGOm_e5d2;_(ueq$OT1&K5XdKVVxn#iNVWk3@ zZUl9ZEdWPze$Mw0(!haZq@jD@z4x{?r)cc~r!G^M;PU;WnYsi35P{C0ypon6=oH>cLpi>@Ft^BPV-*TkuUVz4s!|*JjKl>fDe?-^$b;@Oy#U|;h&+-1 zrvq9OAB9RZRhFp>ZoXIed_~JZNN+F7H_DBEW6uAM*kj37lN10;N___CE@hBLo~KP7 zBuZH4Y2{$6unD{3Al%dX0?Y-_2rC~lV$UuwKrRukeB}(iD^8s}56ETuRX-`KDr^dXdp`o`bJ zawh22sJzX@_O!;s0;WYDJy@Dbr7q$Z#dlMw+%8%#neIWNJ$qX~C=;XRlB6%(WT~hR z707dlt#z{271CrOL8~$N~Jx&;1uNLkB}x8I3}0r|vw^ z9+49}#LPKhnmWN{i11~Zb5u`)s4FGA3RiE7t*T3B&CQ4jb$MdmoQvkreQM1b?wJ$U zt~lC|&YBaG>Gqi#LM2hE9K{A{fP)l3yaFIpkaMA;q3WopbuChQw3OwhK=fqv1|5rbbTs2PipF{9T#i~PTAf0t9qP^Eo zhc>TN8v55J)}(9546Rt{X$lnPNICyNw7svRYxXZ9nDzTc$FJ;=6abmD8Rb59q6TUM z7^P2udW0A&q%tO85o?05m;-SOxQ|Gxe4XR7Rb90!cE(nxYP+^eHXD6W6Xf+z_y|q4>y3V`HVde`IW6ka|^ub21)vB=A(-jF~{aK-d}EwitJY z+D{)12KRi-AL(`}%vvEBB`>P=`NC5l0v5T}tOuXS9hUclqqymzzVSWm-eTIIOSk4KJN4s}8o3+d6MP zIeED`63}W5Wo1(uhki+$y}minBopSy4V3uK-G#az)O|(MDG_j%5X+{}{1ikz6L;rZ ztsi^glj|h8IVePulPB5m$rrdIv$mB;Dtk2FWGO5(oAOCB_$W<$DWTm4V3u8^210ao z1|;D064wSQm93cw1NZDuudvmek3HwJh+x?{zzCFr>4m8M?nH3BOvMItkkVII=_F& zVF_w)lt^VVUD3xM$bE}f{?(K$(nAYofJwO-+5gexUl|@%S3Id$luKt;_Kz4HqeWcAsA(-=sD_O)zpOl#i2VHqIb2D41Mjv97WQ2Ml4%^BVk*mHW=2K3y3`IYC<&I#Y-Bdnk~*{H*afN9@7?=d&$?FP2Q^3 zT-pBYg6i#kOZGQ;M~{wdxaZ=A-HyRa$5SIwEp)Kp+!T^KMN_Vk#ruOUqo9Y?o^ghQ zC<6%UCZ=LH-TypkCUYcq$C{Zn!rby*=XB7n3$q5=yLXdfVaZJ&(li@K&^b3n{+xya z2IXC87|^jI@^vgRd1{S!W=5RpcJ>*5Kyr#P6B+g1Os0Q;Mu=16t|QIk=%u0vUBvEa z1#5ni#O?&#H-A_OYjHX5sgJB-&A>DM#P-3W1CXRSo4c&zmdsUbUg# zAMJ6s4|^w`_m5YZZAGYTY~=(`cV$htMd&9FkpEh(xw7r~#g_h7B54Tk-c=eMjs2>; zyjWLcw>kk7hz^UXvs2X<<`q#ONWZfT(`Ei8F&a@T8so*{RV1egvXW75snnO%u4?+u z0}b&4P0>{wkLdj6-ofh9(qe<6Tx;ZB4t9I&4KcMb)!=ZpMJsmtU2vYH00G_)B#PQ zYO>v#oN6#7Lw@!4imG6Fs``YhQWLAHjz!6jJ!{&U*S1*94J&GU*2g6pZ)K#cx;$yq z1OviBOQS#8+16Z3&Bw6Gk_SMGkctKqBwQR2yU&R`y@Cdq{=LMKS6BekbggTK8LMk{ z@88+VfX8fxrS7E6`A zstIHjTY-biimjk}AXDDn<`I^|%+B{?i-?72Tx4sWmxo18J%1<37d!!9STlphPl{-R zrDkcUR41o#oTaG_6REDNbq&-CCA_kY=A$ob`$nlLTe2IWoC7osJA+PmpK!;{K_uC8 z4ie9cLIafb->`=Y3PAmBe1worQ8+XCmHa z)hZ7vHMmX${CYQAhUKHu7(@C>XhB0!_{x}ysRedk!I?j)bgUcUcFkTVRQ2eg&(!W; zS-;ljUtL$<$a7L{cXHK^ohQseZ7f#dF%)XTq+(?G2-)DZwa)&ccVoO*aa5(LjuaQT zifz6dufF=`y^gNL(15}kw`&p|HlUY=ht6AZD1eD`tvEb4HGBK(XIorI@sedr{(6qZ zMV#_D+cn}$SZwH7+?E{}&s{saha5ih#7N2VWy{H)^PL&<(4uuJAjY)KG~_gMR*2rs zFz#GrT@H|=aJUu28Kw=obTrhxq_UP2*DR|c7fZP7c)rLKa|(arEGx=_l$Ih6l>CiN zOl9IGZd2GyH@4P?j}PMG5{k23@LzgeV9-@Sl?;>s&bVnB#D+W?dDE#=H~*+-Ta9oh*U=nV;&Ux;96*H1p20vO`+2SJb&%g5{i167KxbXMO0`3! zti5E_#F2*0RY`NW0_!3)2lXuc;1DrtF&|#AMo>;i)uprqKqDy7h~q<{d6B;5L;dtE z8&l>nqJt7e zd4QSuMustYMg_z3rw6krdXq{sTr=^jLp2@#_1jNE0t|EV#=S!@vmHM~yQv?8O)Xnb^4*c7x% zvXRWl>&?QI^%dR|*M0o>zJbBMk^Wv4dfVa>Q@djwR4F&mQX~N%&72{&oeqK#Wj{ui zp~RDKb+3x5C8aT!DPRbNOZ0hiTUq1UWb>}hk%LX{kt@f!&v{m@T+$$~8unZ2-N~VB z$u_Apwy}T7uG*H%Rt#RdZ=DzPcn+_t3J=1{Vp*v47+G991GWhWPNG`?R)gzWy5?(V z7>$L$y=#3Aa?$vF+4LQ6sj9o)ZfvL=4v(qqWhH7ub&&H4&uW4OLlBv!v$w>1P`weR z{}PhV(Pn?}%^@u0fR;v%(Kp`A`X(d95s&FW)^qriI)-#y32uxUDL07LgE^K$n9#EH zgfuS_x!(mm8;dF}llnw6LOL4tmJ*GkxFWaMR=R!*ymi`8L)u&CbEUm??Mdpb`+Zf+ z(a}(*rj{s`CYv9V$at0Lo^#0Io?E)~eC|1Bn$@9o5$$Q+L3e}T&{PG<@J$tV%XnV&#pnvLx0?K*l8mIj%FVQ+!!ZNYqA}( zdJ1>GXKp8@xN|?j_)=a!KOUG{%f_F?_{5@d-`oTn{{zO8yk!1+=iDTt+)2#(Ti%o& z&(3$z=9P0#v(d8ouifJ8S&eh=a~rr0Ng5hi7lFKk@887iA?^?J--qVbvDs}9TK~v( z%+DS+(y#vyU$5kq^IuoaO<_G`D8WnJ2OOL)hU-$ZA5EZCKGRHeJSRJQceX4VMFGNF zMy3P668*`S*{-`VQ+B@ZWqP*wg|MVf++BrOVgNKlrp)B{Kl{-0w>qD9eih|&qZ zD8;-ugL8Ia28v;E6htO71NXbkDCt?rX26TXKGLJOy9B3}`I_H6Ki;2pb=Ja)pG%KB z@`Ku2>CMS9Wu2J+DZ~64gDE?NXL!x{9Ij2QC^wB76C@o;fEYF;6UZWD=6i|TNiq5F ztIs|6s&FDQc{B3T+jeZ-dHF8#0wP7l85pJzTgBF!!Jj<6!CWp*RRPZyRZ`MyQ6>gp zT9N&pX7DswhH-i|QH-t+l=<~#A=9ocfB1>l=62V2dl7Zj&UM(DgZ8LV#%EVVJ^ib> zjz3w-OHBv2ihQu)MhY*s`&!dsWIk#Y!NKPOV}aT#k+5Dp=_u(9sH>9y%K( z-F@^3KvF3f=}}5Nzs-(}ex1AM>#lzBYXHq2A)P~(@5;Ipe{u|URX|-Xy}$^DhRKea zGN=uf{w2;;^&Ox1)>Aj$ep_cp%rnqKg44&ExsDr-FBuZ<8^r{Wzraa4PyiM0RBShZ zpJy%}YWreV5U56K6qmy+m`pOzgQ8?MG=`$v~889K0$c0{G;Sj9k}pxYgW4sfHW22;3Yr`l4i14jtezbd*j^Z|vhZc=?eLzPU1dP&&^E!V(=M_iG z(=$*9@lmw1o1+3Extpi&Q2g5c#QfLXZ!@E$$HQhuP&oEBKRU1jKg?#n3pbM7MKiHz1uld?IFe|N*uqaE!Zn~txsSDIQ~ ziB?ljYl*jD`v;}Ps-`QaS6tZz5wD~qG!$OCLdvh-iH)!ocuJDCv*YRAMvq4vrMFWY z?P3JQJ7=ZPq(^0(16_9Mw#Bb0GoWA7d-x^%$+n1&$m~!N2NFvQ)G;n~{ZFsI{-<2q z>^J`TPp<7%8b(0x!&cllCC#~OgaFUJ#;y=F!hXvzz->*Q`oXD00{=-q_XCt^9{v6A z$-UFG``v>B0{{f4#iiKE?q-|mYPJE43c%8exv>TeFDOV!3k_)16&)SK+0n72lx#AL zj2MJdrAsgc{rGBjz4p>6@;x)yA6#U|V%XyR+yf2@H8NAkWjrO>;lz$+-KaG_4%Pc|jW(|6EJ!C~lN zX8BKlFI^?3*#UJbF|Jk%Mf`SYvR9RU+hm zc?CiW`Hx?9Ou|X{qfZ>;ucfbrmzpf(fdybMXTbh$9#$&Lick&qQln20B$H+m z7SpH9m><)#ME}(yEtFDEZuX~ zXxDh<{3w;}#2K7azD<8id5Spd)@Mc!@|hWA$nySF*8CjY+v%@S@j2@nbeN)^{-0p~ zJ7E;DQLj)M15TufWZY;PK0olZa&6^5PsC?C-RO--#ud1}P%4>+06i2xMP9oW{ZRcgXI0;9yL$B)I?H{U2 z4*POtq&FuoO-J5lbR-jnfCU%lG^$Dd-fg9c(NyHr6xNUtaOSjBSn$-b+KiQ$s2B{+qwNel?h*EC5buO6Q&(p+vwW+ zTt1uaHg>1?aC?9ZvEl}dnCXf|^C!C4ydqxg=FS@*+zj9P`IBRbZS{55J1#$8axBMa zKpb!v!W~AzI?|uiR-@_jfUe^fV;G+TPytH7hKz%-DS1h zi1VhzB+kzJ)8cvmm!7vcN@WW+O1fQ?gGIp#uxNUevI0um2_iY(2R$C3UfFaAa>oBn zjW*1S!k%{8t3b^y$fzKXg{J#msc5Nx((Q0)Lr!0#H96IoTw(J&x=a?cHsbTunZH!I zBqA#*xKgVx)5vu?xzgVlPINmBB|GIRy|P4ytOXx6TT&Rl%l7eEaUUc64 zNp}I=hXY0tz>9sb(X0dOGT;7S(YIafTM6SenQ!TyN7uRIcqWi|aH&y(i$UHumQ^jFr)uqkA`9tRP+az0I)ZWM?1D z&9PP(tt%%Ky4nWeGh}-E!BK=x;bLW>Rb2;EUYd}PX;H=H#giv*<~j}v5%TOod;(R1 z{2aFeY#yJ`6eTr;G?oKMet!F^RmWGazKv_!`T6xvKDqw$RI+4qvOV8Vv4+x}6hCNJ zOIHGZ*l5;)trS1Gz{J8R#l#ARiDnSwQbH}x;4EI4 zff8zQ)Sa6dUCU=?poIErrYeYgph|%_bI(pn-Q`&n-g1_O!LAK2#p}%R})-H%VLwE1S~r$VfjJ%EDeLI~Cy^ z3{&A5zfhB=jrK7?3npqogt&s>rvLlDTQ+2uNThP<`kAL7LwrV=(&=lIWaaEP@Kf2) z;G6MNHe8l;RmMz9DHKrN2b<6+~-fW3!pTO6lHOvkhHoxAB_ilg+1#Zfd1$F?{i1GWUJNleSEN3ag-8EHcGmT^bv`p6lU>T=dTyOr7(-5?l&pS zaE_o_D>Vi{`$_jSQ|pOrE{l9qc%KxFlimAQ3di?jTJ|Xe;VG;D;qMJPEgk(ed&g{) zbSo$b;)i!Ij75|Ua9WoI}=yZvIFQM1d#;D<} zA9EjY26`rY5zlF64b{xD@KP6f&b4%@O9;DuOj<`rg>R0Ivd^g;FP7&4m5ap8NM9!L zfBZxEfSe|VLk}OCr4>Bj3g-0qtbp>sM#TNZ(h&%v(?A0cFiE~~y0LFlL-~~_>T1n( zo(RnupLMn_4Q||ZNwgBNnJ;3!al8cd6=foT5=DLJb7s;$wF$%g5m9okFGz@#7i)~e zgGVF}W2P5W11oFN1Qeq9qIp@riVI>!6V79rzmsm5MmA>jSu#y`NO!u_#obMJ zK0D5O6QEG-CjmfMv}HmyfQoj;6I>{0mwu`bJv7eB)bRy{QrgU|5Umhck-CS@Z2GoL z{FkC^^nVo&uo89p)<(q{o!qWM`HVA~zLD!S4NZDoTboumK+l6{xev&fsR5hjl7=Y~ z$(K*#UvzU$t^t5kcLuu;)Kf!aVG!PjLsOIV6~PSwFO+rVRmY7DftXWSRW1BI)3EQN zbvyj)H%2GQjU7cB(P7Pik|nw64u0P5Q1c3G6vv%ei>HPimdg7-tXM^!5;{I|Rbn}G zNZ50srD-3m_sG9duLiO@I$5EY1#N)Kb~K-L4o!AZ5hqdjb$R;Y{@Mz)v)t7e4kf1( z-CJrbF;va2x2yg3_|`~yW4nFHp1SWRdy)o?$*R|w6dKjVIz#1nL#QoeE>M~sr5cOM zuDPyAnHO0Fgd+`|d=&@>*r0=chjY^+RJ;i$;V z*^yslrh&#IcsO@r5}G-Il!QiHb96;y5he%;WlkyjvI#xF;4QznwZ5mV{Z?2}r!T9U z705&6YeXabQRum&cc^FR&W8ssZff1zMY_;xgom}@J?>3Rodc!7fvLfT7(pcq@j*14 z26~NnQ&3!h+m33XKZq6WXaT;G4frs`Mdne z%gGTz9UG}Lo9jkm8xNaPBaviXeIk}3gqD3t*B+sk2QiO;MU9Ix=fcszR+Vw~1!!2B zn8=!rrb65%;MubA>PB1J`ex_S@|ZkaUJEQ6kH&k2gb}NkYFX1dMK^Y<)RmF$d8O-O_X1wK@Xigf~c2${4@02^V?cSQvVD0p! zb=Tec!qct&&i1gAD=T;8O1I_~nR?qcCD+t%+H=U4aJY&e$GO0e1pCC(&==T|?*g%e z^IoLiR^(N%`)pN9aTUIOKWVGncrsxOHHyueHzwY^~$v|6UMJj|k zUftc@M|$F`Qk(a2Swa@pFuPRW!<$dSh5Zt+qh)VC&2qFfNWvM1k^rH;y zaOakq8d}Z}|HZm6l1QpiS-O}y8?Y_88A)V}B`B?OT9TW!;6%s9lI@QW`AzG7KYjC# z*U9nIa;aQV%yY#`B`S;vuM+!ggm{FXu;2IiihPys{5(&kzYr&aU)(RS1Z~Qbj$k9= z5=2|XqcAxZxstpn1khzse$$$_CvPStEBQisu~d5t3QNfg4@(C*~Pbf3v9dJvIUUr%7maZa; zH){Gickr9u#*nh>mNyUmYtkJ@>~2?~wbFVFzh3b*293GDYiapier134E97%`3m<5` zMw6F@8)dLYW9`8KX%T1|A#z^akzdoj3Hv?_h1lVTA`z*Bb3g(%iq(**4%W!@BG6(G zWAL1`J_c6GJ$t%3J1<94e6k2FQKdObS5?3iEXXqyqS3^c@BXPVo^s6ojg#BjYLxnh zQGbE#Vu`HMN8STr$(!54eG!X*nbYt*x+D7gwi_pAh-PN?uQw9~>skXr07$^sJZ+yV zh4^Iy1%z1>S4K`V0f2t`leEMZGXHUZ0VV%w;e#20?=H6}q?}YDA>=m`Hwu+wMEQLp zk?>N54uzp-LGnNNG*OruN9szum#vM>eogr6%~+Q_=kD(`RgX2|&hm5rBiBMg-n{jDyi}Sk$?^8GW%Fgy zBRsE*`P|F5T{{jzr@MOHieYEp6zu>?k9!OY@{Eb7%}&(v1tGqyqRvL~J@4A?q@Az_;B!K7RN1t}RtnTe>bfTD`d`XtxK^h7wVKU@P3O84%?F z0^V74T0NucC!YyGhX@VZ3v<1RULQ?j(La&nnS#`(I^DyUK2YXzm6f^Ob&dV@B@+z; z4#&WZ*!k0)7n{6#SS(9T;Uhki*=jUe&8GXSw{-6~ivM(PslGom2ss~klKdW}$(^!4 zvZCbKGI%}2tH=rbE%=+3aTnaZ3tz-8p~=LyM4p^>hS^~ut})E#v^( zV#|y(;Tee#@J8=&ia0-rMHC9sAWRt@lgsfxqfr$6pxHS-9tG&3Q6;k)K)6NTola+2 zprhwO8c+Q;Gzbs0jj}DXoS$?xxt&&9aCqF)qSe${9r4Pr-5QLT9QtZQX?goSt7pG- zW1=kTw-xM@8LS>1(O$1~nT+-vKF8wl*5~I9=gCWyYE@&gy0ADuzpbE%t46=57f4_7 z(DBbr9gglfaB+-02g(dX71Bo;`KLwN8S%$4GwB1JPS3E(am!r6&&+(4GyUYg9eb^P z4ce%@xU@uX{jbj=e4Xn#d>Fo0;j!?1bqF^7d+?<)VVg;mjB+ok`a>RQo=$$7(>(4C zDJ>->zP#w}m1F?r67OzK$@u-!Y|KF`-Mxl6APnO{-~~hgUphcJO)MBU!P^usp6rF1 zSjC!5^O&L_FjC)Wo8T6IA=f}FnJ5cAgCc`pC(;n}a* z3|buvYXYH%vcW@hW^^P|MCq*SCy%I*Fd~_0-C4bM$4q5aaAoxjMe6L==-o@-HG1^` zqNslSm@@5jDQ>OU9bBzu8XY(Yy=i!ra_dOdy4DImZB`o!)b9vPUvz7z+Bpmr_45F8uu8v6vj4+(ev9=()i_AclPb=VlS-=0!NCoSgojh<7VF$q;{y za0kUa*}_mitDJfDmRDz-&I{t6;{Uk5*B2b7{eLJaKDSGRWS*7rFeX+o%?NV9BBhAg zQfN``gt>wf#WHwGMmKIGSD(qrgfG+$dL+VC65n8|rr(!MF3ug}PR?FUIy1bCaSq`& z|7cCksGt1FJ5)V70VnA1=Zd)7ffUG^w30g$MDX7;9?6o^M0@(Q@CV;OQt!{tEthL6 zQoM}TLZ*_k@bUV7TfSruFDr-b4RVh3FX>BR0jdKm#*`A-3(7juvuG-}mGphk{~=6A zl01i=#y*Sz-EtmcN~v3b`x7A5XPIfhCw31sGir*6KWZvvxB%qJNDT6Dc6I_|F@(cQ zx5z6B+qWFi$>tK8G78U&J7a%i)7GHW0Ws%BMxECz_{LtT$}WLc{48B+K@ z!5BF#T=LquTrVg6e-mj`FfS6zuRByRVfX+VvRwkzC>Q^ z>BRw{+#K1#Sx|)$At)fR-Ovl$fN&aRLya>OyVNK{31Zqh!*n?CT+-RKv+-mEq0uLs zcI_s6cbq&)#zX6dc5bV|uWdVr)`eV?le-B`&7(EF{)7w~TUKO&Ge9JZsGtni(LbS% zhOkvckExLl+N&_jg-LG~J))$q^3k@g`RAk9p(P3_A zu~&AtbXS@pfsnDHscSe8Tfb(d$JW&1^7eUr^y zl_fyk--Y@F3unR(g-Rx{*I1Iv>&^9BS^^FFq{61~Ru-2!G^K9!Okuf6ZVc$d9;HQ5 zWoYnsY_1J&9*wW6C|{XtMpcUG!?hauy1cxhVNc4TP-(9|2E(JZEj}`km$y!?NgbIQ zIo#q7di}s3esT9913(8Nay~l^l^LyO7$ab#!G(PgW*T?KOtbOu{?MkSFkVkY!s|Bp z5@h#+p~gEfh#ZG6n943S;qaBX0h?KJ@`9NrV@kHPfKBRCC?(t>NH?QK>)R z4L6a)GvtAt&m#jUHsD>4W;w>I)^pa`R{(q`rVVnJioowW*GiMkL?^MH27Jh!Glyrs z{N<+QTSI{jqrW{&R{8_JP#bsY>eZ`vOxapvn4df#^kWTU899pi5l)Ys5Fh3TnP8$) z#yjAIJqYaF3SXIMWumtjxq#ljopp^nI(sjw>o^G?W(TR?-jk@TjN^B@Hb>*3<;fq< zzWU45)Y1BV!-MSCFxJ9*;iqsAR+<=@UMm3u2NguqVuNUug%~lP2n?c*RXKa8$0w70 z4$tJzi)!m^U`2uQDx0cNBq-0`5m(!a-$3WuGIWWMPiqaU*U%DC4*AxqsGnoyfpAjv zJ{-j}rG+ICBt*NM(GX;jA~H(^-qV|3ed|R3_xf_lp7-~a@N$JzB2|{~)LZb}bCZ)K z;>~ddi%Tj!GEA6<38yik7M4?BalvN8Ewb4VZGu%1fs;Z;o?Eqb(r~z{&=xGejw?J- z?za_I9TxsGI=0>D(&q}fdS}Ht{JPg&?a2E|H2T#%N44u-^6di$o+&ETsLP58wA()1 zjAzo@P}0QOVKrnWU=uOIW+HA$iTHnJkK&xaq2{KO8A2` z7IJb}y)3`ljxudR{UqJxPx05Kbbm&R%pEMoljk80qqM>zgN@Qkt4y6~u!&QP&C1&< zBstk!vFxO*h)3t!TyxxA;87H)a*CCOl2f;wR=Mm&LJoOf5jW`kO;(v~msC=u%_p?u zMc&+Q5B1xnu zv~usv^$3xX@VUKgHJMa;G0(|e7GqQYRKx765q}S>vAi{=1;ajr z)_BZ5BSy7>#mKokiS2`HU%WMN+cVelJb&Z%n=w84%0<`<&a;nv1+x~odQ8FuxzpV3 z7icQJm`3Bv7-$v|anNV>;zh$Ud-G>nL!#-*W=JKnx2~xTA{DtN*j86sQ(5lul;d}v zy>n9wYV;s`sAW^9eQ{l$ag*C)GA*BT=3Q%yGnTff>(}w z1?AwMpMCOzmyV`9mB6X$qlUDzD@S}-kj^uasg9}@Zrh~8=+>wrL4UJ7GSP~%rfy@m z$>lByh5W6KypHt=wQi@f0-cx2!qM{bhM`2mc(}~8MyCsd5&BK#4TE@I7HCJCK)Z2s zVB)BvjDH$0YvJ-!0{&rU8T;8y>r-T-&=6YZ3XHjvRms%YNFweDT06a-;D+SJU5RK- z{ZVes;->b0T(|DslH!XMB_@-(d|jEbw6sLAUajtF3)U4#^IBqkOY_ccc+b(2FYupG zsSE_7QFOU6&L--?u?U~}OIl3i0;V!&v*qMT^GJMf;^cPMh9>;+|2X>&0J-Wq|NXt` zz4u<<^j>ynX3K2P_Lgia$)<<&9wa0XL@6Q)!~ix98;WrL1uW>2*+JucHX@5`+eW9e0%XabPOQ!w4c*Y&Dl&v;LFZTNA{;!d2`PO@<4<+ZP$AV;_@lX1Y+vS%E zB;G)zDwmJTH5wgaBsB&^xytJbT1EotN}2BfY?vGBP{8n>SA)dE+*__hr{PT36%CugNL1{{xr9wj(IrlH)uZte8lzjCq|FHI3p-U z%_!nU#gbMe{8t_z|NXg`+vwGUGz_i|e~d^E9r}INFA^RXNwTOd0VYDr+=dpGwKA|- zaabykb~qI-6$%bW+@eQ*k!c!XlS~}wS$dMka)Eko2tCP zPk`WI!2iEg(H!7ZG;15*<5VehE|6odtYKo)&#F!8O-Xq)r+EQUL`+TdAcHc1xjTs#QwLZFH30zx39#ezuL2>@%GCRowvOjky7+lWA4Dq zzET+jG4J)2G3o_{K{nWPwb7+B3(2O*w=~|m{ZZFMOrj}xE3VB##n(t#7c^=&%zW(c zd?`i8wY}iGzWFtrJ*u||^?~;Y44S>+VUGQ(A^w=MdzAg6Y+Z4g0$rkt0sHm9{E;^| zHeR0n+S~Zv*ItkN;#nk`OPe}+a}sqcoj4F9A74xDNmxsQmW}~vGR&0r-8K~H%a*4S z1E(g&PV{HTW7a}2v*+Wde`hZSDuq(bonx+5s0{{<)ophTZ0ecVQ!4Hrt1yW2k2 z_Nlh7w0*DbCvDHQy@Z5ia3fgZu1_^TJl^3E`$`L3XnEVb-fiTK-DY`Xx3!X+Q8oMP z!1e|^rDa~5bM$(x31Z&9LcY&8GJ%ZmzY0g=p-?Oqj#;!Ci$$ZgG@gIm%Z&YXFAu)% z)zR0zNpj-+ zUH-Y(fds4l0<)LgFJOfd#R&0&c4 zmo_lG;(5;eK|T*nF#NcWQVs*$(CWLNd=jn>&z)^N0g7G)q)%`+D5$690>I=Xa@2a zaYL^zw7XK6%u7GpefQn!koGeld+D!=b+^5!HA${kTW#48Nu(O+=`mB<^g`onjU({4 zc_luAmKrJ@PHWw&w==saUi`}CwATO;iY;;@P&q%Aoa51|3-{m8_`iGfXBbJ!*zAPT zlPYPbt1CB-T!LI~B(EipyyMQVoFUFL%$tuLyLg&;^LZj`{Dpofi-L#Gp=~`kkW`+P zP@$O`vCD#qcR&y)e|z{HLU34&|6g>uLPSc=Ui|65I_e#o#yLFS3BUL^!Epcz-KJm+ zzriwetz|cK<}|4SMJ~LOl~ZR*xDqSC{l!9gxgul6l#R^GL;ZlSW-$lNJhH0h>;*RHrk(x%1nE$*N6ypFS#$O&=ef-dE6v zyfTB*?Xd_Y;h0BZmKv0SjGibRR!3)-C)N`dS>>j%D~?pwR<$~{aboMu!$!Btv|osH zLSRy2DlaIYjbI4Tj>J% z7q@f?sXrjXL1+_d0r{aJYAk5%hCn+*Je}$CpjWMBjblT@r&%Vtu)+HEENbNV^4>+rJ1#v4oG%Kp&KF!pyd+GFm93 zM5mUM2)MVw20_V2e!B54ockq8-}3p>ni3jiq3N4*;+lneI?_?0?c!;~Q{cHWWs5k5 zLd{@BJuY^lP_EaaH5W2kjmIgqnB}mk_zE3XQ_}4YyB%yup_SVW&XCjYldBS);pnP@ z!q7gJ4TN<EfnT*g$) zP8hLF>M&ca8l>2=y5wqu%-6MZVsuxJ(;BgvB9XXN7hye8y~OHL*+Rjn)0mFPRjfBY z5OodYY@x8)t+gqHR%`l^+cwbGcVr*kmUTZl^j>+wk0c${Qam5^o zyd^n>-KAK(jj;*16iZk=;MkVOn=;4LzmbkPf0`S9dMM_26uNZyVdcmXTrrvh54`mq zbI~HTsO=i1CQ)|j9fSy6=1gDIB3(1+&nc8?ODX3KSCpBID(I7r8iew2I-K!kGoDli znRM(fX{IZvZolHhVTrt&QOOK)r%7$rxb<#LxMy_KGcc+ZtLns_sQ8>dkx*rj?Nf?$ zQn^|Z%dz!*$OwWX@T7CbgSXEG@Sau(JQc{B1)yX)*_X@{5L;(>aE?^@2Kobc>4QY)m~>{yld*+BpRNqcFra=^7T?_BAN`& zy?0?<`{s&Hdo9My8nanL#;tb%8kB=VXwK7Z@1Y2Q z%$Ti3d}fhG>fUfx=1%2|kunKuyiNfj3a!xQG)~{LHaWX4Ck~|yQn59llLd=|v1lYU zv%g!Lb%v$}kk{m3VMJ z$g`%l?kYy1b~ytR0||>po*qhBVsf^WmPN`eKUZ?C(C#w#ogBB+ooYiWp%V7JecYUh z*&RkzB<_XxYicsDaQBq`CW}z+wphGUxjR?ucB=gSQ`_najlBQ*y*&Y+W8>D4R43~^ zxvgIzRyh!VE0ssGN$j%d)dPN^RFvPlse{}nQYbY&gsPVw^vE9DR13^@6U z`2rTj{-HFf#8;LtQL>GS19Xt-bb-_17(nC|#uV{0f(Py{c6+!D5wJKd@OOy!ce;}m zXZ0-y>(`d^^-RVq(o2vHOr#enef6Si%k`(-eNzjawu+_m(AvC%mHTozEjL0Ql|~u% z6gO4n#Xe8_zU@&6kAm8j?_8&0HS+jS5ks$Yn>&zuzhh7De^$?3dn7K@NKND0_GE%# zJ$PLOj0|DmjIp+LZM*3Eafp@jV0bC|UZ5P5Bv>RM8ay81m@odt=!-T7fM-luF)IF1 zH<{+x5K7RSRQXnaHPjgj&qZ|}gHR^yor!A-8;{OGCv*?)Lk+C@X58sLrS^z_jdYLV0;3#AO>M_WIsiy+c0yFgB3#a<}$US|1 zG`ay^ReOufmW%f?)O`w@U2p}4_a0stqGL%>qo2|PUfp1!w0Q|vHbc=~jkoEB{XgLC zrf&w1<~c0E9P)%TR-aYO5S>D5H%k;&g))`#XI7xg)t8_HsW}u=et%S>}pT) z6$m?7@4f_KceEeeZ#M~$7(}l01-xcPD+%Vi%ME&_T4qMjII;)iC3ZP>4EGDbZwi6_UyJB<9?}Yq~EME*&|V}P$n;S zCO|Dgvs>YUhysKzya>6Tl+HJH5#jHDPp1+QgAg{U2H+9F;icljlTdEO!R6+l_#FgZ zuv4ov#F`Zh31z@^9Ipzu9|1)Y7INm`ovSAAIgr_uu}`gzk9xZ1qibX7H80LaWAgPM zKD6({o0Nujzd?8LNsmfVl}ni`X5Tk?b#%o7q{1k42b}Z|LHd$K_}~iXuu+41ZqcTl+V3Z7wyw z2Ut*5E!+6HuBW!w2|a4(;u;jX`2nJg%+MA@sH$^dX&5OLlhBw?pcDzrWONWMIhqL~ z;K$&GIJSc&$KUelwA7N z4*NptV+p~=ugcyRAwr%L$WNCbi zbT+<9XXX9GAZ8F9)cBpQRx5X?u%cjAVkVcSXepvMguB9se*YvRYut^xi>_7V${{pS zEMB~~h;Pggj1CMR`l^Bk2Nt8Fh9(~X4Hc~Rxv~LVuz(vhHhAIUb+<2k?yXoNm}`&6## zj_yp&ud-%B{$L;}GO%_;=J`^_^k`h{Ce$?#{XuXoc#%ky8L7BP`OU@K2lWD0$qb^rXFV|+gr~{Et4L8wn)U$;pb3+$xvICB&d^@*Y#nkDy+^ zf#W?uDoU@W4V1H>%p(4$J~xzXH~Byb&kKSXDf_9fjDQmh=tWK(ptnIHOl-*%2}SNt3qLm&V^h7jLPKHsbxa~g;Fq~uo)PG zSK!`qbI8Z)M9#{_YiIL4sgyqyQ0Zi$tUKJ_HyA1HUstkurPf>`U}QvUo!XWkkvpRC zfaDU?@9>yQn`(7Q)}_?59zkWt=CnMxen(MABtnrVXxGWy?Lvhn5tf(@nIxQk=581x z-S$vW?wgq%jH6w>T5gQHLG)6SJ4)dYB)EDF>Hv$xRr9&}yI7u33(o-;UCk{@o-|Vo z#33GTneoFbl3?b+%<s%e=&dhv?mcbDgX55uYWB zdP4eGu)KNAe7gJeo`6vWk?POtO_Jw~a%z1yy| z_4L^N5nDLHDmCdsCLq?XzG|p*UBI0;nvG)X(4an(35tEQ>!#e1>G@sqkxHx@Fj^vF zqL7LG?#>-&de+>z*D9A6hbM+|Qh7Tv+`6o*cW!5Elfl}oUTdA*wk2#EnVag-sZ)b~ zd0=|AiFTKD8af6-FTd|&1_MFtZGeHN_)eqHk$lJ$s0BnkGn*EeNB&z{M! zQT8K8zf_Lf<2GO*xXh71ETLIiAQK6uO#$j2`=95@-HpHf{`dbu)-m5Y{n^v^FD&2z ziqakg6X&M&m70{kT;v4o63{H48J+VQ$@Grt z$=>M@^2=t@$1q5lCTw5Cy0xtIYg_>vMW;>ATpp4okj!Le*Y%w|Os99Ae(%WW-<=!S zn3}(Gvc^La?v=MMR9m2ASCoirIC zZhScF>{5qxS}D^(-787w)c$f}eSc*`@m<@v_wMT1J@YPpNaUqWmBMIBB#^Naeeb+` ztm9ar9BJQo6*YwfU}E&XW%FVr5{kl z8v^(AO#6Gc^%VLQy${~^pqZUfq3*90E=toiAJB(TCVErf+j?aiH}qb=zg~`z(naZx zLWTT?Y0Xt*sj5oRwe?`mTMZ*q^&oRQ2g#oa^~$qgc|<7-0}+ZBnK%wc0^Gq#-AxvT zB93y{Poc4J9MiM=kHltAO$=|j?R~5#mAoP;im$(-qi(h?I182#z_G-QR|lhM`Tk8k z*X-)5b@gsne?e|HcN>i48_~B8vo+(78JXz+5vlYxZPLT)0TUQfqymQ9B!m_{HN=1& z5Ku+{N>UEBVO4N`wfvIs9)9S^fxeA>o&IDlJy!K-Y+j?uz*sLnnhUqqiS^a*7oFaid(OxZ%bblHb`UL4hc zwFdYpEJfSVd^K3 ziQ&rFySe$N)F{vC^|*BjSUC=wE<{Q4E$6{gi=_Uwx$JO6D9D}93j_gQ&!{%Sy!2RP zL=y`K2MgK`edBrJQ@iBO;Kuo1uIK@b>ruQq3PecqlECZsv};T|ra7;kWX%@?3|Ry)jHS2Ou+1(*_f=3#dUUDE*SzVlF&MXrlLw72}|k| zcCW%xspK@8h{529kENq)I^J)n^%Rtj+~_1wF@@{j09SyTVwd3p-$023MZ}a3<02+n zS`uzEa(IBlPhfCA7s~JuPPxZs5h7x6<^9@p)?hHldSZ^M8+I;?nqDRG#_ej?csafd z<>p{-)D<_mR<92UEvYbr^mPK8M{hO=lyaj(kUba=={N12O|kGKexPwRGfi%V5L|DY zYbme6p@40{I_1_gwXy(PQ8@wzTM9Xb75odOCb&<8@iovxx{NTkG#$Ro7c&%RH_to$ z(qP^l45>}3x++k01+J(>+0=3CiKL|NxRw6uI*8U`~A_1FVfSv%Tg(-l-;YGcd&D-lKSLi z_8x&flCSpoJVtV+JeTl~cq8$FsfnseCB@vN7wzO(cxmYI_- z>#NY(Fm~o@5HB6)Rl5X65r%OJ82n6L!+Q?$exAHwiRctomCZ(StGwNfuL%V$AG!;% zBt(r17k(uX?-q(|zN>Q&c8mlB1Ia!^(~piTCj&n^S~nhhHx1#tjw5(_LH)s5);Pu` z+~RmkEx$-CQmg__GNWTgGlBP=Pj{tC-l6K2JLjT3UVX%DsM~vw4xael&6}EL~Lo5 z)46Sl-jt0hl@K$+BT>3A${-Y|lt(_F8;QKYWMY9TBIje#eygQBJhrfYCeQ<;?USrO zz=r)A@4vZO!EGeK><{#2;%rQ*8c-_CR*Plr%*E^2ZsJcG>}e@z^MYEIXRT73fM(8YHU;r3(4w^Rl!BGc7Ytwaxs>Qv;r z^r$$b4`r;mDz+FI*zm`v1JVH$dCQ&`IT5eX9 z`n@LeQKO;rG_AXHrPgaR_)OoVwT)3K3%bPw@JWGs;UDK+`%pEdWtyPx+ziU(T;pG- z4$#^WSE(nF=*&4?9;aPtl}p^tY>$^wtgO4Uu9vS2lx!D0X-wU6uGdXeS5{yUF1QTGq1Snk( z%sMo?Ce&XPgYw&(q8NVda?1dS4?Dlr8)f0>Y|zaHxruIkRIXdH=P*gTM`4nWOEgl~ z>SBI%Ze~0)vhK*N^@#9oKx#+SduZexDeEZ zOg@cMsW;m@5*=Mmt0ky0>Ai+T_{LMCCkG?!-~lMwx~KI1tXC85^j&<^q}Mo%2BR7J zu$O=_{~1K9ozCej7p&7lB!m*K?s9>}@icT92A#4y8n; zm6){7S~k}0)5)Z2gF~tFsU>Q4gVy>)(H;Q%2#&xFLj6G*?EpWepgt>q(O?0(8uL6) z!Y3MA`W3iMqL!#E;t_FYUZN69RNN0yS00MPcj1JZUg}QaCW(^!A?iutrgtq0geL#g zFvG0o4puROA2{*KkPl%hCzp94ZUCFw0}3)lW@b8o zKQ68-;{VdRLSbFWU-o*-ejok2=fZ`r=jKbL`5gau$XoXLOI~k@UPeOlmw=9FB<9bt zJj-A`o3az)<~jEingpn&>ZSZnvt%KyY=jkS!pLyTm=|7)9Ccz|s7{6Z;*nT2cU~WK zMl;6qM~qS=u=dpE%qrWu^rp?OsK#J)YbSST^nQ;)Uh7PhJ;IS{b#AipJJQV-9AJtX zi;RB|j1n7-g*Wdx0<1P75;1F6ueV#hPNP;2xT%ukE>HxPT8?;`uLbud6W%uH(QvJCSE96 zEj9}cqv83-WxyhH^}cn1YOuU#-uYL5J?pX~*#9SZ7^CgtKie4n8-bGNrd6E3Sei^y;m14uF32Sf(xyA>XNbkrXlF9#}S?-VQ;^^>!{c8h;3 zU<^sgagpeP%&ZC*9DmjM<CAE=7zHTzm!qQ_v$oA_#UHz}zB76WsrNJZ8lbTY`Iu z2&fr8Qhf=L0qQa`k1@dsGB$qkvGF6FWS?MFy}Ujh+feViG8EWanK;?sbz-i(5U^DG z$yBw7;&rIcYRNVJKGiAwF|lObNv1t>@n@BTlf(5vjui=k+Ms^j`ZK+3$mZ9bnx0+? z>QuK^eFZn(APh&Xd$Dhq-k=W7NAiDs1E6H`3$nj)#}_9K(>ECDp>MFhw`)(>zqLAk zs=xchYdM(P3|A zbT85;X0USD_L3zl53jniZ~d9RzBB9lu3Q!FIkR!$OczRk2?bms(_qlOF_}La9V?VZ z*wr(I@d(B|g;nzyw`ypax?X4oUAXu0CwVQ zyns2^TsE!OIJ>TI&q(t%BqF>9t$H{V2za>H7%g(IQ5=l|xzaoz!w?twYC2S}^olGW z7OE#0897?ND_bn)?&>{u2iTVlncXvok5(&{>e0h9yEEg&h^FSCI=z6VsEOv%Jms7t zEeytR*oUE??jY(%BH&U~0Ch9*6-9Av9l7XvBB(Ev>hS$^{B--8c%JQCs)<{iPt6pN zDj>9~+%>4z7RR#W&YM}k9X7YN5ilM!XNejJ8k*V`u_}{6XUahfpvt{b8@Ws1X^(J4 zz0Dzq2#-+@`|E(P5QYUAwy7H66$F5;%ntOY%hDmK@h;Dzhb<-k3534XCKjP8lM8UqtUm*;k{iym$1g zw4=kc*O#FdUX{pBrXKJ{<34l1XrMXrjaUHJF^g0!)vQv`3QBI4XK1D%BPQ=?k0k{Y zw$|ocyV{kMOW|MUejtZPWa$y1*y|+sZ=8{fjtC@fH`*NnGueZ9MjD3un$;wWOwUoH zOjqm)wXexsh$2ANM7B2G$FqY2$O!(AonR3wJs2daIk^pOaS1i4-X!$eEee>oT|CBg zzN*=Q?bp3_!?Y6YjU2~|39+;=Y?kP7FyiBtg7X9hNA$xx7GUp->N%=QB2&(k9pEZRvsVv*7+w z{gXg-$g%wc-|*Q)!aWci$Gad-iWW6U{18RXr`xG3&EoTmGUoeC9BLh2A_=oB%sRZZ z+v?C_f%2Z`;5bfbX`5h|Fs|Ha*_6BOBflR~`HTv?!4S74su5l6`1`(7GH(L}?{)>e5Pg3Q z(z1q$Qo&@1*JMJQP%gg~XuS5Rsfl4(IH?3|BQlv#g2b|K8Bv8Ta+l7OuxC2LTK0x_ z{o6*l*{N5UwWgRi(G}Ci1`Od^@x|{(5l|+QN&fP9$RQM+6w91lx#KT4uK$_ECS!!h zBvMaL=K9+s9dr$e7XQTD4XR_KDp!u%WtR#*TyCI5@$QtN}uM0zR2Zp2*-70_t zTh%2nU5`J;wfNXa_x$HaiJVyJ)(nppc9U}ZwD?p^{3sX*7m=9CBpA`89 zmq5(Mds6!B3#8Ek^+obB-^~(~fPK2Lm0Z0H?3pI8Pz|)^4=T*1su(N`tATTvC9zyC z`p(iDeApE4=I27Jl#zAIFY`>W;s?@egWdQK7y=li>$C-63?7d|8HoZUZia4GXlVa% zm$`Fo-4<3UJUUOzDOdjJ{kt%^NSdROgnS==QB!x3tbPqiw&Vs#xSpT?rVk0->1f62%AkZfDnm!@+vC+MEuza_cA@ zoV*bmTT}~m?Z4~j`N0>%zI^(FUkv%}8UH&nSX`=ULRN-tOX z7o4u7XX~g+sOz9@eIdvVz;ME9$4<#$zE0zL6J@n%3mjr+A?P)MEYTue5?<*5@c+^| zJYHo}Dh$rnDV0c_mW15I#rk}{->sRQo40EfPVF`1U*bmBa3Uc~=ku9N24K1t?;&w? zgY@!`>Mhr`utbvwKnZ_F~$Dy>p=%9TomOr=&R?Uc4_(65Lj=~9`8aKfXYBD{bx(6U zu_^j|Bk1?|G$xtCXODOJBID)uv52j*Fx1iO)cKiUF6@tqg~LLLzb~Cz#ilm)b#EUI z4@5T%XDb{}iqPQyV*ZJj0A^`0GB7On!OB6-G?OlmK>tc*`=i_GpGP0X{TNrA?%kn0sXi_;nNZ{3Qpk3z6K zU@6=t6buUlCfD~v{MK3PLY_SQ<}4Uf zp2dXKn}TEtY!XU^N{t{*%s~qyVHN~3R5TK1kkZMFI>`&jjZQRLcf?3O|IdWc=-d$# zA&+9HRm4WlGyAwMTHMnTgVr4KCbc#_Qmr$5#M+Z+cn;`c8k>e$)ik7p~(iWRBm1R^xwIMijc*1VinzgIO z1rLZ_8htPnHWo&ut6InTaS0kLqsY&@vATe_X2I^2w_|`l-k8G`l>KY_Gp-<+17h8l z*kG`PV)0g6NUiqj;qDyjBQ~jcSS0bY#M5}LJm3N2;sA&0Ws*X%^wZB%pJ1>nr*Qp?FVo-7#f@m6!tH|HnCZ42Zd%&b0AsU4r~-ct9y`AmDRP%anp^8Rbrt~=8o9@*1-!-Z4RvunmD zR?pCELGZIDSAjFc_X70VAZ=6y%9iuws(T3J4wrWIs^_jJT5}?9P}-F}TOPtg9>8M& zD4>zF1kkeY8oV)DTSOu;`4~gP^iaO$fO}wkD!i)rrkTDi1z&%DhKLUx@g+lMvrFsq z?nosgW5v{9&6A^&vm4{4WZF56C}yphsryot3$dRjIH&48;DTmR5%QPNU~b*IfonHZ zt|%q9#>ZEM#;UMb42LU;=vcHnf7RgLtH^DM;hajKSToYQ88(fx7HdB5kDHE~lRjid zv+oE8)?uv8n9CwYMNU%fbJ~F0!!GV$y2mm02V=?1QKCtU}t;JH5+T&!tsrH zAl|+KYnQX?AU8A`DnpuhvR4d_?5iNe(`2*d!r7us>Lz=yeY;Qsps5F_7se7FXPV|c z2bRpfdESu#7!xB2D<<#9%K1^anRt4`o7b4LHgnE7a79)q)~71I`i4wp-&of|uOFH3 zi`ld*=TbXal0NYMU0I>%gh-U#IpJcBr5(d#hdL9}$FAz?DOU(|BF-FZ#(Vp*yiMSv z#2{RJy`)1#(D-}uhsI0qVS3K2zxW<(Uw%(Kg$0#v>I%34Y6b)WrEyBSX55;fDK=xw zsPP(^q&Z5+z1U@WtQSBNlVSZViR3>R_DQ5)N2H4yD45 z@U1XLI)JU|#QOJA75NTIHkWV>mIwEfC#r5H)S|W=qGO!#wKr~ZWsRn!Y1Phlp-7*q zMmAqr*^hzl3pOsMO4*Dn@6k9TzuNV#%_*Valu(>p7<03RQ&)~1?2OG_b*8(kShJ^G zjx0u*LD|YbGZD*ic;^IPYSeQeellHIlPvnL4Hz(K0ocfa3-E<5zSG)$?!r zTF7B>U46~E&a>OAJCms$@lub|J=#|)_YT<7<@~69Fm`z2z;#S)WUUsi`9odXI^0xko{Q&$rAP1nTid^C&d#<}#Bm~g3rzG=z=utt}W|6XjDjqn!5FF-S z8#!=h6E{=TC#SDjXKFVXlIFhooP`mqqqRu)hFo?3XnFHcgfNNrOxBlksvQxM?mD%1 zHZ2fdB@%gS(>ZI%T--4{eyAEAKXItDr%-dHkT4};#j8WaWE6OH;D@6;e%MTujeAie z>G#a&+07Tv13f^A&xA1BZXP{wx-~k;OJ41C@|(z_WdWwXArvndIJ`hPMf@PK)rZQV z?hsHyZFld^v%YFD+@C<{%5c_-dRg|z9vGn`-DuE}_Gh_~zPs}(ex#wdtIcFBVLH+i2f2~1 z)eALuk{@XS=Uiri_dTth1O?DZ7@{mZ&T5%JR+jJOaK!^d#5X+RsBRuubD&7k#Q~rT zeLNgS(r@}#{|~rf=&Ch0ZqBX!;L&3rTs!}vW7GS~rTsHA`^)A1;9iW2$H*>H5KF|^ zE*F1_Gv38B#6)6Z2@PN2&RB3}p5B9;T>KgP;t6sE$>YrN<{2gKIZBdZ2?O^W?x_gw z*+ddJ16hnaV@6*)=~H3|!rU1bp4v|Pf_i7=J?M);T0ZU`6Q0`6L5O%o?hMtV?joP! zVQy@pFa!6Q$j5n@xigT%05k5PFmq?@sKa{&d6b8lJ3}$%QS$dZ%-op>?%6~h;$h~_ zn9b`#l;Bf4r{5}XE)%+ghZ zD=e;D2Q?zr15_y7jNpzFE1soy;90a0VQkzT7Todov*J9zPyi*U)R;Qm&@Dh zguQoqI*~fCdCUG(L%x;d@Z3C}Ti<%_WXldnGoI-J^Mvi)RxWSr{TDn&{+!ysW%Gd) z|JdLnzCn9veY&<;&~EB3L{(Z-&ph+Y^Uv?!Peyh%&I)$#y0{aa*l;&W-eD2q?s+aV zZeAyV>}}h>|M};idEYMPo?U;ti(I#B7s#3c>ZlvwtxnlqE^oTTa992#tM_buk@Pn{ z|HB`mJu_~(6WVbBEy_Djkim>a*bC&giN<%owbNU_^F`*|#WTMcZ9I+kj7%>xF0fLj zW0q&1EUh$DM&If^UERA^!wNXIK9k)rYG*cf&qbqi-S$%5?XH)&4W*@z3&XNLEG)6~ zZ}>~7UmEGfQjlR8An;aFw6J*zVI4QwFI=$SbYhWQPK$pStj%{gk&n01Kg5N~Kr5OBrd zJ3zHz!(KWjD~>NYf28p+89ziO8lP-D9mwSZ!Ca2~BmU45XBYqY$}>JPafpmJ9zN9g zWG9NbIZj2_fPyJM+(i;7k}A2z%mL!W%FI;hv*94CC$V>l&Rxwi{ScMPI_v} zU>QkiyDPqyaL8I@+a(rGe=)H12o*70ex z$742nJj7-Xs8uF~RIZTOt;Uqi(e5aA+x%K2YLLp5Mu#iKzF|%nV`Bk7E0_C4V&o-wv%7KHQLx+GvvN7S zx5r}Oko;_ol{Jsgdd;yOG4o8~b*b*3EMo<1k z^`bihAjc-Q2#O2=7DO3q3p6^<=h3%5+*8}L8lOA9OMemmd~FYR9*wm% zJ|uW{@xz$8wgE&Y&~^mRUVKaA5$|tbSl{#IjvIS0u^o$lWKIk8O9RwaUx9xGmpQ%! zFK=k#V2Y3_F8KZ2|fTFUmfZC~`XeQ)viR98CB8=7D(p&NgD zwpPnpJx+(Z9ksCYPP@Ya8X#Ew1NlctuSSRwaiD0ixT&b5$QLGL*rzNjhZ}+|C$q9g z)Gkdid!&E&QF{S7#1z*JHpf*Ul8dcQWjMgBlBlJ79scd((OTYRayw0~ms`V1J|U6| z^B7{puK-<_;L0l&7N?5nG*k> z=Fc60;czZ$vgwD4XA*Y#G~Bpd*^Pw^+mz6jqGS6ht=&`%rOL|HYIdDH`F-u zK`hv*wtIx)Hr)YQ!{bs^x=cS`4~;JE$Jg42%sZR=@8T29gBEH8#2;=G!f9|*+mm3I zz!_k1wn8MRg^kPcMVUufR`G)=a*QN*p&3X4!c1M2d1B2y()w}975alNKx{%N+|eMn z8znF%aK{o1$kGo;x+{Na8161=CzT+*2JWZV=?`;`S|hkd=`-M5ex&q^G*&gys8O0( z!hm2~1qzi^ER{+bB2|cyHbNv&ijW>eqGx1MB@%PO;4f6Eg;D`w)Wm?SQ$i6VlqjJ; z6pI85BTyO?DyzzXoESn^SZ!9gT@tY(sC*ghJ`d zX0>{On++)ydc-Ta3~`@GEs~2YDORC$MRX=F@(cnk8;|TyKKSTISFiqyf2HrI2D= zWOk!U;x-Dbaz<=1kPsYZWLmJ10;@`iA<;-hQYN5~%NUtjstjs0O0iz25x5vcw1^~f zqkxggAl;)isa7cv3K%Ssw#A(sg`+ze5txE!|7Km^(}T4uTKogNm8sP4C;tNcEvD`O z{CVa}97}`W*bPGR6YjhRlIG6|QX^4^zqZ?OXQ}NR@PD+4|8E1@K@m%E*i`U?=7NSi zfjtbYOaxC{Ll2V&A0FjcVx!rE`wt8c-%jz4lVf<7TUdI&`3!$6I;oLKr0u4%D7NY> z^0pD!$!p~5#55hM4R8R`0-ap(3y3#@fUeruQ!?WdQ;47>!|Ug)>S%n%gjkV1eO~^Dfl|dF26ow!eJPQ!aY*3$+b=Pk zHsG)ygXnrF$*uDacb9R{uyC>$k1xo~3ANA57Hmg%4;;xB6Em@BS``cgLK-s){6h8& z<%kmH{XAZ?tJEEx-r{rax7hq1qc>=`rV77~BX=(9Y6F0d#j|Yev>9K#8RIk;pfmGI_YhajR-y=efocmm#Y2P$}=rlJV?JmW)wvnH3auwsnn6WN-&A zt{|s;za)yjmioXQD+nr>Q%*)(vh^8ox?mQt5Q=9%74Bk^c&29;?Hslu04HYW=qEB7|963ZZo}gneDUEdt5ad*Fh*rsZ zwsb^x9XYf$5HH%r+|TH)!w0vLwArPAfnIG!(q)&TFcems%xa$XVB||u+#3=LUQZNg zz0J~FEXih=wK!2RTIL$;Som75EU{+coo$+dI{YHz9k6~BaXO+=hcl87gl2>u15*L1Yu zH91W$t^cvdw>LZd`l~twZR20@VWfv#pj41dwq3VKZM(pccy-Q5-!#G4-J$w|kBGlmR{t?v!6?=?Ese{bt>~&g8Ib99Fe4-5x~Z ztjJ)OC4yowI=2UDXSo&feA{!(pPTgXl6ixshDQ#7W~D~2mJbH<`9Lr)C{VFA5G*h_ zLl2O#0oXeY#M}7qR5(mEhs-;gDntxZC&lS7C&)pRV8x?3MgpBOr%$_AX3&amIuV?j z39@TvY5s4d5hGs(mVl~w)*{FYpe?lo%97H3j+-2J-Gx8*k%ERQSUL5o2IHGr{6pIx zn0vVwp*mhPFMzM_3WAa2x{|0>3gJ!nwg?9K6z$dBQ?J<@?{0#MnRYG48N$3IW;w22 z0zL@bJ>_no+L3{`XWMjy<@h5i$F_fm7Lg-YD;NJtrA`MY=C{Osd^6WKd%XB! zYm{CkF02&g|8Lrr5{rLOmoV2i4_4?+jBx%PU;Gs(P`ZI?uq?Sefmm}r_R$U5%=$4~ z(z|+hch{cPK6|m(?d~nwyJusu*>22Ix$QBspGo8W+fM34Wm0;K9DfY{&(AboZu`>W zkLc{pFB?b7U#NBEx_VMQo%w3#nobn#Pr(wWCwXD}j}#y_1;5*X+jkZ!c_~XEW?jUocorSP8Rkp}Id;I(K1m@_mz&TY9gIq_>2J_IHxP z=58`|q(;hzE!?G>JFnfg<7}r)r@Td}66ySf;Aoxb&F2kf=0HPFe%H|VXpk#g#;zOf z-k388id%;Ux0ft%Gs`ue#3WUKhyI(#LzJ^*C}&xb+$2J2XUa_OQTXTPBVZwMYozT5 zf-eEHo0nc3C=s$QoiygbyBD32wqp`-vxlZ{0E(H_ue4r3ZeW9LG zey)9G>*OdJXtl+GNni0R0Mp4UDOP~FazDQc#4@eFiqDg+#?bCLo7ZQx`n)z^=ltR? z+WtuX9oSjZW+aCgaht}7;EFcM;>+Y7R9)e!XV*!9NR}lc$`+T%J&ix#MC4Ux#_i5H z-5HlF!+e(-7hcv!QNKg4j|M|gniv3{&E(tI5+=&69W7InANPl|=UJ#x&q9hwGh|`| zUvS)apT%(sV#^7O3z?K;8ofpd&Rf%FBLiUWDW!DKPF7-h!wQVgvLQtBhb&|E zK){aAea-LRL{Mb7@kjcX+>MOALHcQ28?-xvL8m?Vi^}IZ8tZ;?% zuR0Z;n3|rLK&l|p_9hr4k1;`NdV>QHWiy+~XrMr<3WL543>$lwo4lDbwE2{QPDV=pLgN zr{I~ASrTla+WatgkvzgZiKqVByvT`ZAGrDFxPRYpV+>$K7Pq223w1qF5OfS$0aB0i zZk$JxuzbOJ2bvfqca^j~)%In9k>Sfr)9NHXlMmjrTv{%Ah#a9LIK`nyXW$` z)w_!HIK6ftO137_20=#b>aEp!UE++ukOu5eqd^nj;K`yd$5B`&0Ch-?dc*@EJx$#7 zY1(Sz8R9PPTAj%*)?iijc7Y{A67&a%)2Y3q!H;k|R9d7%9{J+Qmd|-$qgD3GVxQh-u zLsfamGuHM4$vXb}CFi+zm^7w|_V+7H6TWeOo;*%7d<$9G{x<0G+Qj&#mKmHUH4ay_ z%_4c_=dRm=Eb@&8Vem|fJPv;#Of5s(V)6GW{+oOl-xA0_rUehhmqy0EywG#)iQLc^@RS)(iTS5!z9fj)&6y+Oj;>ST zv^n?xd3zJUwu)8^v zsMAQvDqCyaasoEAh*YE7SQnL*$RhRY_1e;vw$|t>vx6SYT%X&HxjvIw zPMQCX-dq35lqs)pGZ&0~xBvxADDYvv05#d*wPNZkuS_MMFBtPI0Ha0XJ;^IvKNeV+ zfk%*&S5~Au`tH{5($u-#b@avc3zuHabZn1@J-9>i3K5SR$j1z!hmf(Tp!iA*55!!a zy1R9|$fYzeIN`=PJ=`!B5Gdam{QRaLRr|q%MZGn@J6PP7^DEsj>y>$| zj=o?rx}Cm)^?ich=Q8y>;(G0N1Lm z#!AqV3FI&}>q13TtiId{h- z=UziNQ+s7iSJb@s{{9Q+Hl1RRa53>$hTA>O?LFLU8y7b(Zx=pZ zvuM$SJ9qBXhFsCe&apcvRp@e$aNmI)zgw~j z6p>#W!J@{UnvCKZa-d!82i=r=_G(9=w z%`Wa}Suz@I&iefETGC&sDKGN{eKQv(0*%NC*B3W8Cp|6e1{#;8>+7e~*n)aTt8mx^ z ={6{#qx3>zbLlXNI<1qkl0 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 literal 0 HcmV?d00001 diff --git a/lib/Epub/Epub/Page.cpp b/lib/Epub/Epub/Page.cpp index 15e50d0..c50fe30 100644 --- a/lib/Epub/Epub/Page.cpp +++ b/lib/Epub/Epub/Page.cpp @@ -3,20 +3,16 @@ #include #include -namespace { -constexpr uint8_t PAGE_FILE_VERSION = 3; -} - void PageLine::render(GfxRenderer& renderer, const int fontId, const int xOffset, const int yOffset) { block->render(renderer, fontId, xPos + xOffset, yPos + yOffset); } -void PageLine::serialize(File& file) { +bool PageLine::serialize(File& file) { serialization::writePod(file, xPos); serialization::writePod(file, yPos); // serialize TextBlock pointed to by PageLine - block->serialize(file); + return block->serialize(file); } std::unique_ptr PageLine::deserialize(File& file) { @@ -35,27 +31,22 @@ void Page::render(GfxRenderer& renderer, const int fontId, const int xOffset, co } } -void Page::serialize(File& file) const { - serialization::writePod(file, PAGE_FILE_VERSION); - +bool Page::serialize(File& file) const { const uint32_t count = elements.size(); serialization::writePod(file, count); for (const auto& el : elements) { // Only PageLine exists currently serialization::writePod(file, static_cast(TAG_PageLine)); - el->serialize(file); + if (!el->serialize(file)) { + return false; + } } + + return true; } std::unique_ptr Page::deserialize(File& file) { - uint8_t version; - serialization::readPod(file, version); - if (version != PAGE_FILE_VERSION) { - Serial.printf("[%lu] [PGE] Deserialization failed: Unknown version %u\n", millis(), version); - return nullptr; - } - auto page = std::unique_ptr(new Page()); uint32_t count; diff --git a/lib/Epub/Epub/Page.h b/lib/Epub/Epub/Page.h index f43e498..841ef6b 100644 --- a/lib/Epub/Epub/Page.h +++ b/lib/Epub/Epub/Page.h @@ -18,7 +18,7 @@ class PageElement { explicit PageElement(const int16_t xPos, const int16_t yPos) : xPos(xPos), yPos(yPos) {} virtual ~PageElement() = default; virtual void render(GfxRenderer& renderer, int fontId, int xOffset, int yOffset) = 0; - virtual void serialize(File& file) = 0; + virtual bool serialize(File& file) = 0; }; // a line from a block element @@ -29,7 +29,7 @@ class PageLine final : public PageElement { PageLine(std::shared_ptr block, const int16_t xPos, const int16_t yPos) : PageElement(xPos, yPos), block(std::move(block)) {} void render(GfxRenderer& renderer, int fontId, int xOffset, int yOffset) override; - void serialize(File& file) override; + bool serialize(File& file) override; static std::unique_ptr deserialize(File& file); }; @@ -38,6 +38,6 @@ class Page { // the list of block index and line numbers on this page std::vector> elements; void render(GfxRenderer& renderer, int fontId, int xOffset, int yOffset) const; - void serialize(File& file) const; + bool serialize(File& file) const; static std::unique_ptr deserialize(File& file); }; diff --git a/lib/Epub/Epub/Section.cpp b/lib/Epub/Epub/Section.cpp index 7b81579..9cc19ea 100644 --- a/lib/Epub/Epub/Section.cpp +++ b/lib/Epub/Epub/Section.cpp @@ -8,54 +8,60 @@ #include "parsers/ChapterHtmlSlimParser.h" namespace { -constexpr uint8_t SECTION_FILE_VERSION = 6; +constexpr uint8_t SECTION_FILE_VERSION = 7; +constexpr size_t HEADER_SIZE = sizeof(uint8_t) + sizeof(int) + sizeof(float) + sizeof(bool) + sizeof(int) + + sizeof(int) + sizeof(int) + sizeof(size_t); } // namespace -void Section::onPageComplete(std::unique_ptr page) { - const auto filePath = cachePath + "/page_" + std::to_string(pageCount) + ".bin"; - - File outputFile; - if (!FsHelpers::openFileForWrite("SCT", filePath, outputFile)) { - return; +size_t Section::onPageComplete(std::unique_ptr page) { + if (!file) { + Serial.printf("[%lu] [SCT] File not open for writing page %d\n", millis(), pageCount); + return 0; } - page->serialize(outputFile); - outputFile.close(); + const auto position = file.position(); + if (!page->serialize(file)) { + Serial.printf("[%lu] [SCT] Failed to serialize page %d\n", millis(), pageCount); + return 0; + } Serial.printf("[%lu] [SCT] Page %d processed\n", millis(), pageCount); pageCount++; + return position; } -void Section::writeCacheMetadata(const int fontId, const float lineCompression, const bool extraParagraphSpacing, - const int viewportWidth, const int viewportHeight) const { - File outputFile; - if (!FsHelpers::openFileForWrite("SCT", cachePath + "/section.bin", outputFile)) { +void Section::writeSectionFileHeader(const int fontId, const float lineCompression, const bool extraParagraphSpacing, + const int viewportWidth, const int viewportHeight) { + if (!file) { + Serial.printf("[%lu] [SCT] File not open for writing header\n", millis()); return; } - serialization::writePod(outputFile, SECTION_FILE_VERSION); - serialization::writePod(outputFile, fontId); - serialization::writePod(outputFile, lineCompression); - serialization::writePod(outputFile, extraParagraphSpacing); - serialization::writePod(outputFile, viewportWidth); - serialization::writePod(outputFile, viewportHeight); - serialization::writePod(outputFile, pageCount); - outputFile.close(); + static_assert(HEADER_SIZE == sizeof(SECTION_FILE_VERSION) + sizeof(fontId) + sizeof(lineCompression) + + sizeof(extraParagraphSpacing) + sizeof(viewportWidth) + sizeof(viewportHeight) + + sizeof(pageCount) + sizeof(size_t), + "Header size mismatch"); + serialization::writePod(file, SECTION_FILE_VERSION); + serialization::writePod(file, fontId); + serialization::writePod(file, lineCompression); + serialization::writePod(file, extraParagraphSpacing); + serialization::writePod(file, viewportWidth); + serialization::writePod(file, viewportHeight); + serialization::writePod(file, pageCount); // Placeholder for page count (will be initially 0 when written) + serialization::writePod(file, static_cast(0)); // Placeholder for LUT offset } -bool Section::loadCacheMetadata(const int fontId, const float lineCompression, const bool extraParagraphSpacing, - const int viewportWidth, const int viewportHeight) { - const auto sectionFilePath = cachePath + "/section.bin"; - File inputFile; - if (!FsHelpers::openFileForRead("SCT", sectionFilePath, inputFile)) { +bool Section::loadSectionFile(const int fontId, const float lineCompression, const bool extraParagraphSpacing, + const int viewportWidth, const int viewportHeight) { + if (!FsHelpers::openFileForRead("SCT", filePath, file)) { return false; } // Match parameters { uint8_t version; - serialization::readPod(inputFile, version); + serialization::readPod(file, version); if (version != SECTION_FILE_VERSION) { - inputFile.close(); + file.close(); Serial.printf("[%lu] [SCT] Deserialization failed: Unknown version %u\n", millis(), version); clearCache(); return false; @@ -64,41 +70,36 @@ bool Section::loadCacheMetadata(const int fontId, const float lineCompression, c int fileFontId, fileViewportWidth, fileViewportHeight; float fileLineCompression; bool fileExtraParagraphSpacing; - serialization::readPod(inputFile, fileFontId); - serialization::readPod(inputFile, fileLineCompression); - serialization::readPod(inputFile, fileExtraParagraphSpacing); - serialization::readPod(inputFile, fileViewportWidth); - serialization::readPod(inputFile, fileViewportHeight); + serialization::readPod(file, fileFontId); + serialization::readPod(file, fileLineCompression); + serialization::readPod(file, fileExtraParagraphSpacing); + serialization::readPod(file, fileViewportWidth); + serialization::readPod(file, fileViewportHeight); if (fontId != fileFontId || lineCompression != fileLineCompression || extraParagraphSpacing != fileExtraParagraphSpacing || viewportWidth != fileViewportWidth || viewportHeight != fileViewportHeight) { - inputFile.close(); + file.close(); Serial.printf("[%lu] [SCT] Deserialization failed: Parameters do not match\n", millis()); clearCache(); return false; } } - serialization::readPod(inputFile, pageCount); - inputFile.close(); + serialization::readPod(file, pageCount); + file.close(); Serial.printf("[%lu] [SCT] Deserialization succeeded: %d pages\n", millis(), pageCount); return true; } -void Section::setupCacheDir() const { - epub->setupCacheDir(); - SD.mkdir(cachePath.c_str()); -} - // Your updated class method (assuming you are using the 'SD' object, which is a wrapper for a specific filesystem) bool Section::clearCache() const { - if (!SD.exists(cachePath.c_str())) { + if (!SD.exists(filePath.c_str())) { Serial.printf("[%lu] [SCT] Cache does not exist, no action needed\n", millis()); return true; } - if (!FsHelpers::removeDir(cachePath.c_str())) { + if (!SD.remove(filePath.c_str())) { Serial.printf("[%lu] [SCT] Failed to clear cache\n", millis()); return false; } @@ -107,10 +108,10 @@ bool Section::clearCache() const { return true; } -bool Section::persistPageDataToSD(const int fontId, const float lineCompression, const bool extraParagraphSpacing, - const int viewportWidth, const int viewportHeight, - const std::function& progressSetupFn, - const std::function& progressFn) { +bool Section::createSectionFile(const int fontId, const float lineCompression, const bool extraParagraphSpacing, + const int viewportWidth, const int viewportHeight, + const std::function& progressSetupFn, + const std::function& progressFn) { constexpr size_t MIN_SIZE_FOR_PROGRESS = 50 * 1024; // 50KB const auto localPath = epub->getSpineItem(spineIndex).href; const auto tmpHtmlPath = epub->getCachePath() + "/.tmp_" + std::to_string(spineIndex) + ".html"; @@ -156,30 +157,66 @@ bool Section::persistPageDataToSD(const int fontId, const float lineCompression, progressSetupFn(); } + if (!FsHelpers::openFileForWrite("SCT", filePath, file)) { + return false; + } + writeSectionFileHeader(fontId, lineCompression, extraParagraphSpacing, viewportWidth, viewportHeight); + std::vector lut = {}; + ChapterHtmlSlimParser visitor( tmpHtmlPath, renderer, fontId, lineCompression, extraParagraphSpacing, viewportWidth, viewportHeight, - [this](std::unique_ptr page) { this->onPageComplete(std::move(page)); }, progressFn); + [this, &lut](std::unique_ptr page) { lut.emplace_back(this->onPageComplete(std::move(page))); }, + progressFn); success = visitor.parseAndBuildPages(); SD.remove(tmpHtmlPath.c_str()); if (!success) { Serial.printf("[%lu] [SCT] Failed to parse XML and build pages\n", millis()); + file.close(); + SD.remove(filePath.c_str()); return false; } - writeCacheMetadata(fontId, lineCompression, extraParagraphSpacing, viewportWidth, viewportHeight); + const auto lutOffset = file.position(); + bool hasFailedLutRecords = false; + // Write LUT + for (const auto& pos : lut) { + if (pos == 0) { + hasFailedLutRecords = true; + break; + } + serialization::writePod(file, pos); + } + if (hasFailedLutRecords) { + Serial.printf("[%lu] [SCT] Failed to write LUT due to invalid page positions\n", millis()); + file.close(); + SD.remove(filePath.c_str()); + return false; + } + + // Go back and write LUT offset + file.seek(HEADER_SIZE - sizeof(size_t) - sizeof(pageCount)); + serialization::writePod(file, pageCount); + serialization::writePod(file, lutOffset); + file.close(); return true; } -std::unique_ptr Section::loadPageFromSD() const { - const auto filePath = cachePath + "/page_" + std::to_string(currentPage) + ".bin"; - - File inputFile; - if (!FsHelpers::openFileForRead("SCT", filePath, inputFile)) { +std::unique_ptr Section::loadPageFromSectionFile() { + if (!FsHelpers::openFileForRead("SCT", filePath, file)) { return nullptr; } - auto page = Page::deserialize(inputFile); - inputFile.close(); + + file.seek(HEADER_SIZE - sizeof(size_t)); + size_t lutOffset; + serialization::readPod(file, lutOffset); + file.seek(lutOffset + sizeof(size_t) * currentPage); + size_t pagePos; + serialization::readPod(file, pagePos); + file.seek(pagePos); + + auto page = Page::deserialize(file); + file.close(); return page; } diff --git a/lib/Epub/Epub/Section.h b/lib/Epub/Epub/Section.h index a1a6216..93e0d6c 100644 --- a/lib/Epub/Epub/Section.h +++ b/lib/Epub/Epub/Section.h @@ -11,11 +11,12 @@ class Section { std::shared_ptr epub; const int spineIndex; GfxRenderer& renderer; - std::string cachePath; + std::string filePath; + File file; - void writeCacheMetadata(int fontId, float lineCompression, bool extraParagraphSpacing, int viewportWidth, - int viewportHeight) const; - void onPageComplete(std::unique_ptr page); + void writeSectionFileHeader(int fontId, float lineCompression, bool extraParagraphSpacing, int viewportWidth, + int viewportHeight); + size_t onPageComplete(std::unique_ptr page); public: int pageCount = 0; @@ -25,14 +26,13 @@ class Section { : epub(epub), spineIndex(spineIndex), renderer(renderer), - cachePath(epub->getCachePath() + "/" + std::to_string(spineIndex)) {} + filePath(epub->getCachePath() + "/sections/" + std::to_string(spineIndex) + ".bin") {} ~Section() = default; - bool loadCacheMetadata(int fontId, float lineCompression, bool extraParagraphSpacing, int viewportWidth, - int viewportHeight); - void setupCacheDir() const; + bool loadSectionFile(int fontId, float lineCompression, bool extraParagraphSpacing, int viewportWidth, + int viewportHeight); bool clearCache() const; - bool persistPageDataToSD(int fontId, float lineCompression, bool extraParagraphSpacing, int viewportWidth, - int viewportHeight, const std::function& progressSetupFn = nullptr, - const std::function& progressFn = nullptr); - std::unique_ptr loadPageFromSD() const; + bool createSectionFile(int fontId, float lineCompression, bool extraParagraphSpacing, int viewportWidth, + int viewportHeight, const std::function& progressSetupFn = nullptr, + const std::function& progressFn = nullptr); + std::unique_ptr loadPageFromSectionFile(); }; diff --git a/lib/Epub/Epub/blocks/TextBlock.cpp b/lib/Epub/Epub/blocks/TextBlock.cpp index ef6fdb5..c20b37d 100644 --- a/lib/Epub/Epub/blocks/TextBlock.cpp +++ b/lib/Epub/Epub/blocks/TextBlock.cpp @@ -24,34 +24,33 @@ void TextBlock::render(const GfxRenderer& renderer, const int fontId, const int } } -void TextBlock::serialize(File& file) const { - // words - const uint32_t wc = words.size(); - serialization::writePod(file, wc); +bool TextBlock::serialize(File& file) const { + if (words.size() != wordXpos.size() || words.size() != wordStyles.size()) { + Serial.printf("[%lu] [TXB] Serialization failed: size mismatch (words=%u, xpos=%u, styles=%u)\n", millis(), + words.size(), wordXpos.size(), wordStyles.size()); + return false; + } + + // Word data + serialization::writePod(file, static_cast(words.size())); for (const auto& w : words) serialization::writeString(file, w); - - // wordXpos - const uint32_t xc = wordXpos.size(); - serialization::writePod(file, xc); for (auto x : wordXpos) serialization::writePod(file, x); - - // wordStyles - const uint32_t sc = wordStyles.size(); - serialization::writePod(file, sc); for (auto s : wordStyles) serialization::writePod(file, s); - // style + // Block style serialization::writePod(file, style); + + return true; } std::unique_ptr TextBlock::deserialize(File& file) { - uint32_t wc, xc, sc; + uint32_t wc; std::list words; std::list wordXpos; std::list wordStyles; BLOCK_STYLE style; - // words + // Word count serialization::readPod(file, wc); // Sanity check: prevent allocation of unreasonably large lists (max 10000 words per block) @@ -60,27 +59,15 @@ std::unique_ptr TextBlock::deserialize(File& file) { return nullptr; } + // Word data words.resize(wc); + wordXpos.resize(wc); + wordStyles.resize(wc); for (auto& w : words) serialization::readString(file, w); - - // wordXpos - serialization::readPod(file, xc); - wordXpos.resize(xc); for (auto& x : wordXpos) serialization::readPod(file, x); - - // wordStyles - serialization::readPod(file, sc); - wordStyles.resize(sc); for (auto& s : wordStyles) serialization::readPod(file, s); - // Validate data consistency: all three lists must have the same size - if (wc != xc || wc != sc) { - Serial.printf("[%lu] [TXB] Deserialization failed: size mismatch (words=%u, xpos=%u, styles=%u)\n", millis(), wc, - xc, sc); - return nullptr; - } - - // style + // Block style serialization::readPod(file, style); return std::unique_ptr(new TextBlock(std::move(words), std::move(wordXpos), std::move(wordStyles), style)); diff --git a/lib/Epub/Epub/blocks/TextBlock.h b/lib/Epub/Epub/blocks/TextBlock.h index 46e320e..9dfde60 100644 --- a/lib/Epub/Epub/blocks/TextBlock.h +++ b/lib/Epub/Epub/blocks/TextBlock.h @@ -36,6 +36,6 @@ class TextBlock final : public Block { // given a renderer works out where to break the words into lines void render(const GfxRenderer& renderer, int fontId, int x, int y) const; BlockType getType() override { return TEXT_BLOCK; } - void serialize(File& file) const; + bool serialize(File& file) const; static std::unique_ptr deserialize(File& file); }; diff --git a/src/activities/reader/EpubReaderActivity.cpp b/src/activities/reader/EpubReaderActivity.cpp index 3e19414..ebf5b0a 100644 --- a/src/activities/reader/EpubReaderActivity.cpp +++ b/src/activities/reader/EpubReaderActivity.cpp @@ -254,8 +254,8 @@ void EpubReaderActivity::renderScreen() { const auto viewportWidth = renderer.getScreenWidth() - orientedMarginLeft - orientedMarginRight; const auto viewportHeight = renderer.getScreenHeight() - orientedMarginTop - orientedMarginBottom; - if (!section->loadCacheMetadata(READER_FONT_ID, lineCompression, SETTINGS.extraParagraphSpacing, viewportWidth, - viewportHeight)) { + if (!section->loadSectionFile(READER_FONT_ID, lineCompression, SETTINGS.extraParagraphSpacing, viewportWidth, + viewportHeight)) { Serial.printf("[%lu] [ERS] Cache not found, building...\n", millis()); // Progress bar dimensions @@ -282,8 +282,6 @@ void EpubReaderActivity::renderScreen() { pagesUntilFullRefresh = 0; } - section->setupCacheDir(); - // Setup callback - only called for chapters >= 50KB, redraws with progress bar auto progressSetup = [this, boxXWithBar, boxWidthWithBar, boxHeightWithBar, barX, barY] { renderer.fillRect(boxXWithBar, boxY, boxWidthWithBar, boxHeightWithBar, false); @@ -300,8 +298,8 @@ void EpubReaderActivity::renderScreen() { renderer.displayBuffer(EInkDisplay::FAST_REFRESH); }; - if (!section->persistPageDataToSD(READER_FONT_ID, lineCompression, SETTINGS.extraParagraphSpacing, viewportWidth, - viewportHeight, progressSetup, progressCallback)) { + if (!section->createSectionFile(READER_FONT_ID, lineCompression, SETTINGS.extraParagraphSpacing, viewportWidth, + viewportHeight, progressSetup, progressCallback)) { Serial.printf("[%lu] [ERS] Failed to persist page data to SD\n", millis()); section.reset(); return; @@ -336,7 +334,7 @@ void EpubReaderActivity::renderScreen() { } { - auto p = section->loadPageFromSD(); + auto p = section->loadPageFromSectionFile(); if (!p) { Serial.printf("[%lu] [ERS] Failed to load page from SD - clearing section cache\n", millis()); section->clearCache(); From 140d8749a65ee4362a5c03e27c225026416c11c3 Mon Sep 17 00:00:00 2001 From: dangson Date: Sun, 28 Dec 2025 21:59:14 -0600 Subject: [PATCH 25/71] Support swapping the functionality of the front buttons (#133) ## Summary **What is the goal of this PR?** Adds a setting to swap the front buttons. The default functionality are: Back/Confirm/Left/Right. When this setting is enabled they become: Left/Right/Back/Confirm. This makes it more comfortable to use when holding in your right hand since your thumb can more easily rest on the next button. The original firmware has a similar setting. **What changes are included?** - Add the new setting. - Create a mapper to dynamically switch the buttons based on the setting. - Use mapper on the various activity screens. - Update the button hints to reflect the swapped buttons. ## Additional Context Full disclosure: I used Codex CLI to put this PR together, but did review it to make sure it makes sense. Also tested on my device: https://share.cleanshot.com/k76891NY --- USER_GUIDE.md | 1 + src/CrossPointSettings.cpp | 5 +- src/CrossPointSettings.h | 7 ++ src/MappedInputManager.cpp | 77 +++++++++++++++++++ src/MappedInputManager.h | 31 ++++++++ src/activities/Activity.h | 9 ++- src/activities/ActivityWithSubactivity.h | 4 +- src/activities/boot_sleep/BootActivity.h | 3 +- src/activities/boot_sleep/SleepActivity.h | 4 +- src/activities/home/HomeActivity.cpp | 13 ++-- src/activities/home/HomeActivity.h | 4 +- .../network/CrossPointWebServerActivity.cpp | 11 +-- .../network/CrossPointWebServerActivity.h | 4 +- .../network/NetworkModeSelectionActivity.cpp | 15 ++-- .../network/NetworkModeSelectionActivity.h | 4 +- .../network/WifiSelectionActivity.cpp | 38 +++++---- .../network/WifiSelectionActivity.h | 4 +- src/activities/reader/EpubReaderActivity.cpp | 18 ++--- src/activities/reader/EpubReaderActivity.h | 4 +- .../EpubReaderChapterSelectionActivity.cpp | 14 ++-- .../EpubReaderChapterSelectionActivity.h | 4 +- .../reader/FileSelectionActivity.cpp | 21 ++--- src/activities/reader/FileSelectionActivity.h | 4 +- src/activities/reader/ReaderActivity.cpp | 12 +-- src/activities/reader/ReaderActivity.h | 4 +- src/activities/reader/XtcReaderActivity.cpp | 14 ++-- src/activities/reader/XtcReaderActivity.h | 4 +- src/activities/settings/OtaUpdateActivity.cpp | 10 +-- src/activities/settings/OtaUpdateActivity.h | 5 +- src/activities/settings/SettingsActivity.cpp | 27 ++++--- src/activities/settings/SettingsActivity.h | 5 +- .../util/FullScreenMessageActivity.h | 4 +- src/activities/util/KeyboardEntryActivity.cpp | 12 +-- src/activities/util/KeyboardEntryActivity.h | 13 ++-- src/main.cpp | 16 ++-- 35 files changed, 285 insertions(+), 140 deletions(-) create mode 100644 src/MappedInputManager.cpp create mode 100644 src/MappedInputManager.h diff --git a/USER_GUIDE.md b/USER_GUIDE.md index a19a1e8..c0eeded 100644 --- a/USER_GUIDE.md +++ b/USER_GUIDE.md @@ -67,6 +67,7 @@ The Settings screen allows you to configure the device's behavior. There are a f - **Extra Paragraph Spacing**: If enabled, vertical space will be added between paragraphs in the book, if disabled, paragraphs will not have vertical space between them, but will have first word indentation. - **Short Power Button Click**: Whether to trigger the power button on a short press or a long press. +- **Front Button Layout**: Swap the order of the bottom edge buttons from Back/Confirm/Left/Right to Left/Right/Back/Confirm. ### 3.6 Sleep Screen diff --git a/src/CrossPointSettings.cpp b/src/CrossPointSettings.cpp index 9328422..a0a002f 100644 --- a/src/CrossPointSettings.cpp +++ b/src/CrossPointSettings.cpp @@ -11,7 +11,7 @@ CrossPointSettings CrossPointSettings::instance; namespace { constexpr uint8_t SETTINGS_FILE_VERSION = 1; // Increment this when adding new persisted settings fields -constexpr uint8_t SETTINGS_COUNT = 5; +constexpr uint8_t SETTINGS_COUNT = 6; constexpr char SETTINGS_FILE[] = "/.crosspoint/settings.bin"; } // namespace @@ -31,6 +31,7 @@ bool CrossPointSettings::saveToFile() const { serialization::writePod(outputFile, shortPwrBtn); serialization::writePod(outputFile, statusBar); serialization::writePod(outputFile, orientation); + serialization::writePod(outputFile, frontButtonLayout); outputFile.close(); Serial.printf("[%lu] [CPS] Settings saved to file\n", millis()); @@ -67,6 +68,8 @@ bool CrossPointSettings::loadFromFile() { if (++settingsRead >= fileSettingsCount) break; serialization::readPod(inputFile, orientation); if (++settingsRead >= fileSettingsCount) break; + serialization::readPod(inputFile, frontButtonLayout); + if (++settingsRead >= fileSettingsCount) break; } while (false); inputFile.close(); diff --git a/src/CrossPointSettings.h b/src/CrossPointSettings.h index 2b99664..78356ff 100644 --- a/src/CrossPointSettings.h +++ b/src/CrossPointSettings.h @@ -28,6 +28,11 @@ class CrossPointSettings { LANDSCAPE_CCW = 3 // 800x480 logical coordinates, native panel orientation }; + // Front button layout options + // Default: Back, Confirm, Left, Right + // Swapped: Left, Right, Back, Confirm + enum FRONT_BUTTON_LAYOUT { BACK_CONFIRM_LEFT_RIGHT = 0, LEFT_RIGHT_BACK_CONFIRM = 1 }; + // Sleep screen settings uint8_t sleepScreen = DARK; // Status bar settings @@ -39,6 +44,8 @@ class CrossPointSettings { // EPUB reading orientation settings // 0 = portrait (default), 1 = landscape clockwise, 2 = inverted, 3 = landscape counter-clockwise uint8_t orientation = PORTRAIT; + // Front button layout + uint8_t frontButtonLayout = BACK_CONFIRM_LEFT_RIGHT; ~CrossPointSettings() = default; diff --git a/src/MappedInputManager.cpp b/src/MappedInputManager.cpp new file mode 100644 index 0000000..eeda106 --- /dev/null +++ b/src/MappedInputManager.cpp @@ -0,0 +1,77 @@ +#include "MappedInputManager.h" + +decltype(InputManager::BTN_BACK) MappedInputManager::mapButton(const Button button) const { + const auto layout = static_cast(SETTINGS.frontButtonLayout); + + switch (button) { + case Button::Back: + switch (layout) { + case CrossPointSettings::LEFT_RIGHT_BACK_CONFIRM: + return InputManager::BTN_LEFT; + case CrossPointSettings::BACK_CONFIRM_LEFT_RIGHT: + default: + return InputManager::BTN_BACK; + } + case Button::Confirm: + switch (layout) { + case CrossPointSettings::LEFT_RIGHT_BACK_CONFIRM: + return InputManager::BTN_RIGHT; + case CrossPointSettings::BACK_CONFIRM_LEFT_RIGHT: + default: + return InputManager::BTN_CONFIRM; + } + case Button::Left: + switch (layout) { + case CrossPointSettings::LEFT_RIGHT_BACK_CONFIRM: + return InputManager::BTN_BACK; + case CrossPointSettings::BACK_CONFIRM_LEFT_RIGHT: + default: + return InputManager::BTN_LEFT; + } + case Button::Right: + switch (layout) { + case CrossPointSettings::LEFT_RIGHT_BACK_CONFIRM: + return InputManager::BTN_CONFIRM; + case CrossPointSettings::BACK_CONFIRM_LEFT_RIGHT: + default: + return InputManager::BTN_RIGHT; + } + case Button::Up: + return InputManager::BTN_UP; + case Button::Down: + return InputManager::BTN_DOWN; + case Button::Power: + return InputManager::BTN_POWER; + case Button::PageBack: + return InputManager::BTN_UP; + case Button::PageForward: + return InputManager::BTN_DOWN; + } + + return InputManager::BTN_BACK; +} + +bool MappedInputManager::wasPressed(const Button button) const { return inputManager.wasPressed(mapButton(button)); } + +bool MappedInputManager::wasReleased(const Button button) const { return inputManager.wasReleased(mapButton(button)); } + +bool MappedInputManager::isPressed(const Button button) const { return inputManager.isPressed(mapButton(button)); } + +bool MappedInputManager::wasAnyPressed() const { return inputManager.wasAnyPressed(); } + +bool MappedInputManager::wasAnyReleased() const { return inputManager.wasAnyReleased(); } + +unsigned long MappedInputManager::getHeldTime() const { return inputManager.getHeldTime(); } + +MappedInputManager::Labels MappedInputManager::mapLabels(const char* back, const char* confirm, const char* previous, + const char* next) const { + const auto layout = static_cast(SETTINGS.frontButtonLayout); + + switch (layout) { + case CrossPointSettings::LEFT_RIGHT_BACK_CONFIRM: + return {previous, next, back, confirm}; + case CrossPointSettings::BACK_CONFIRM_LEFT_RIGHT: + default: + return {back, confirm, previous, next}; + } +} diff --git a/src/MappedInputManager.h b/src/MappedInputManager.h new file mode 100644 index 0000000..138d793 --- /dev/null +++ b/src/MappedInputManager.h @@ -0,0 +1,31 @@ +#pragma once + +#include + +#include "CrossPointSettings.h" + +class MappedInputManager { + public: + enum class Button { Back, Confirm, Left, Right, Up, Down, Power, PageBack, PageForward }; + + struct Labels { + const char* btn1; + const char* btn2; + const char* btn3; + const char* btn4; + }; + + explicit MappedInputManager(InputManager& inputManager) : inputManager(inputManager) {} + + bool wasPressed(Button button) const; + bool wasReleased(Button button) const; + bool isPressed(Button button) const; + bool wasAnyPressed() const; + bool wasAnyReleased() const; + unsigned long getHeldTime() const; + Labels mapLabels(const char* back, const char* confirm, const char* previous, const char* next) const; + + private: + InputManager& inputManager; + decltype(InputManager::BTN_BACK) mapButton(Button button) const; +}; diff --git a/src/activities/Activity.h b/src/activities/Activity.h index 3a61db6..66dfde1 100644 --- a/src/activities/Activity.h +++ b/src/activities/Activity.h @@ -5,18 +5,19 @@ #include #include -class InputManager; +#include "../MappedInputManager.h" + class GfxRenderer; class Activity { protected: std::string name; GfxRenderer& renderer; - InputManager& inputManager; + MappedInputManager& mappedInput; public: - explicit Activity(std::string name, GfxRenderer& renderer, InputManager& inputManager) - : name(std::move(name)), renderer(renderer), inputManager(inputManager) {} + explicit Activity(std::string name, GfxRenderer& renderer, MappedInputManager& mappedInput) + : name(std::move(name)), renderer(renderer), mappedInput(mappedInput) {} virtual ~Activity() = default; virtual void onEnter() { Serial.printf("[%lu] [ACT] Entering activity: %s\n", millis(), name.c_str()); } virtual void onExit() { Serial.printf("[%lu] [ACT] Exiting activity: %s\n", millis(), name.c_str()); } diff --git a/src/activities/ActivityWithSubactivity.h b/src/activities/ActivityWithSubactivity.h index af55987..141dbbc 100644 --- a/src/activities/ActivityWithSubactivity.h +++ b/src/activities/ActivityWithSubactivity.h @@ -10,8 +10,8 @@ class ActivityWithSubactivity : public Activity { void enterNewActivity(Activity* activity); public: - explicit ActivityWithSubactivity(std::string name, GfxRenderer& renderer, InputManager& inputManager) - : Activity(std::move(name), renderer, inputManager) {} + explicit ActivityWithSubactivity(std::string name, GfxRenderer& renderer, MappedInputManager& mappedInput) + : Activity(std::move(name), renderer, mappedInput) {} void loop() override; void onExit() override; }; diff --git a/src/activities/boot_sleep/BootActivity.h b/src/activities/boot_sleep/BootActivity.h index a14d0c7..312f2ab 100644 --- a/src/activities/boot_sleep/BootActivity.h +++ b/src/activities/boot_sleep/BootActivity.h @@ -3,6 +3,7 @@ class BootActivity final : public Activity { public: - explicit BootActivity(GfxRenderer& renderer, InputManager& inputManager) : Activity("Boot", renderer, inputManager) {} + explicit BootActivity(GfxRenderer& renderer, MappedInputManager& mappedInput) + : Activity("Boot", renderer, mappedInput) {} void onEnter() override; }; diff --git a/src/activities/boot_sleep/SleepActivity.h b/src/activities/boot_sleep/SleepActivity.h index 774fd25..3a77d33 100644 --- a/src/activities/boot_sleep/SleepActivity.h +++ b/src/activities/boot_sleep/SleepActivity.h @@ -5,8 +5,8 @@ class Bitmap; class SleepActivity final : public Activity { public: - explicit SleepActivity(GfxRenderer& renderer, InputManager& inputManager) - : Activity("Sleep", renderer, inputManager) {} + explicit SleepActivity(GfxRenderer& renderer, MappedInputManager& mappedInput) + : Activity("Sleep", renderer, mappedInput) {} void onEnter() override; private: diff --git a/src/activities/home/HomeActivity.cpp b/src/activities/home/HomeActivity.cpp index 5e330d8..f62b393 100644 --- a/src/activities/home/HomeActivity.cpp +++ b/src/activities/home/HomeActivity.cpp @@ -49,14 +49,14 @@ void HomeActivity::onExit() { } void HomeActivity::loop() { - const bool prevPressed = - inputManager.wasPressed(InputManager::BTN_UP) || inputManager.wasPressed(InputManager::BTN_LEFT); - const bool nextPressed = - inputManager.wasPressed(InputManager::BTN_DOWN) || inputManager.wasPressed(InputManager::BTN_RIGHT); + const bool prevPressed = mappedInput.wasPressed(MappedInputManager::Button::Up) || + mappedInput.wasPressed(MappedInputManager::Button::Left); + const bool nextPressed = mappedInput.wasPressed(MappedInputManager::Button::Down) || + mappedInput.wasPressed(MappedInputManager::Button::Right); const int menuCount = getMenuItemCount(); - if (inputManager.wasReleased(InputManager::BTN_CONFIRM)) { + if (mappedInput.wasReleased(MappedInputManager::Button::Confirm)) { if (hasContinueReading) { // Menu: Continue Reading, Browse, File transfer, Settings if (selectorIndex == 0) { @@ -143,7 +143,8 @@ void HomeActivity::render() const { renderer.drawText(UI_FONT_ID, 20, menuY, "Settings", selectorIndex != menuIndex); - renderer.drawButtonHints(UI_FONT_ID, "Back", "Confirm", "Left", "Right"); + const auto labels = mappedInput.mapLabels("Back", "Confirm", "Left", "Right"); + renderer.drawButtonHints(UI_FONT_ID, labels.btn1, labels.btn2, labels.btn3, labels.btn4); renderer.displayBuffer(); } diff --git a/src/activities/home/HomeActivity.h b/src/activities/home/HomeActivity.h index 0704819..fcbab54 100644 --- a/src/activities/home/HomeActivity.h +++ b/src/activities/home/HomeActivity.h @@ -24,10 +24,10 @@ class HomeActivity final : public Activity { int getMenuItemCount() const; public: - explicit HomeActivity(GfxRenderer& renderer, InputManager& inputManager, + explicit HomeActivity(GfxRenderer& renderer, MappedInputManager& mappedInput, const std::function& onContinueReading, const std::function& onReaderOpen, const std::function& onSettingsOpen, const std::function& onFileTransferOpen) - : Activity("Home", renderer, inputManager), + : Activity("Home", renderer, mappedInput), onContinueReading(onContinueReading), onReaderOpen(onReaderOpen), onSettingsOpen(onSettingsOpen), diff --git a/src/activities/network/CrossPointWebServerActivity.cpp b/src/activities/network/CrossPointWebServerActivity.cpp index e0ec682..eda20a8 100644 --- a/src/activities/network/CrossPointWebServerActivity.cpp +++ b/src/activities/network/CrossPointWebServerActivity.cpp @@ -57,7 +57,7 @@ void CrossPointWebServerActivity::onEnter() { // Launch network mode selection subactivity Serial.printf("[%lu] [WEBACT] Launching NetworkModeSelectionActivity...\n", millis()); enterNewActivity(new NetworkModeSelectionActivity( - renderer, inputManager, [this](const NetworkMode mode) { onNetworkModeSelected(mode); }, + renderer, mappedInput, [this](const NetworkMode mode) { onNetworkModeSelected(mode); }, [this]() { onGoBack(); } // Cancel goes back to home )); } @@ -141,7 +141,7 @@ void CrossPointWebServerActivity::onNetworkModeSelected(const NetworkMode mode) state = WebServerActivityState::WIFI_SELECTION; Serial.printf("[%lu] [WEBACT] Launching WifiSelectionActivity...\n", millis()); - enterNewActivity(new WifiSelectionActivity(renderer, inputManager, + enterNewActivity(new WifiSelectionActivity(renderer, mappedInput, [this](const bool connected) { onWifiSelectionComplete(connected); })); } else { // AP mode - start access point @@ -174,7 +174,7 @@ void CrossPointWebServerActivity::onWifiSelectionComplete(const bool connected) exitActivity(); state = WebServerActivityState::MODE_SELECTION; enterNewActivity(new NetworkModeSelectionActivity( - renderer, inputManager, [this](const NetworkMode mode) { onNetworkModeSelected(mode); }, + renderer, mappedInput, [this](const NetworkMode mode) { onNetworkModeSelected(mode); }, [this]() { onGoBack(); })); } } @@ -305,7 +305,7 @@ void CrossPointWebServerActivity::loop() { } // Handle exit on Back button - if (inputManager.wasPressed(InputManager::BTN_BACK)) { + if (mappedInput.wasPressed(MappedInputManager::Button::Back)) { onGoBack(); return; } @@ -428,5 +428,6 @@ void CrossPointWebServerActivity::renderServerRunning() const { REGULAR); } - renderer.drawButtonHints(UI_FONT_ID, "« Exit", "", "", ""); + const auto labels = mappedInput.mapLabels("« Exit", "", "", ""); + renderer.drawButtonHints(UI_FONT_ID, labels.btn1, labels.btn2, labels.btn3, labels.btn4); } diff --git a/src/activities/network/CrossPointWebServerActivity.h b/src/activities/network/CrossPointWebServerActivity.h index 038a0c4..deb7cea 100644 --- a/src/activities/network/CrossPointWebServerActivity.h +++ b/src/activities/network/CrossPointWebServerActivity.h @@ -63,9 +63,9 @@ class CrossPointWebServerActivity final : public ActivityWithSubactivity { void stopWebServer(); public: - explicit CrossPointWebServerActivity(GfxRenderer& renderer, InputManager& inputManager, + explicit CrossPointWebServerActivity(GfxRenderer& renderer, MappedInputManager& mappedInput, const std::function& onGoBack) - : ActivityWithSubactivity("CrossPointWebServer", renderer, inputManager), onGoBack(onGoBack) {} + : ActivityWithSubactivity("CrossPointWebServer", renderer, mappedInput), onGoBack(onGoBack) {} void onEnter() override; void onExit() override; void loop() override; diff --git a/src/activities/network/NetworkModeSelectionActivity.cpp b/src/activities/network/NetworkModeSelectionActivity.cpp index af68a20..0cc3594 100644 --- a/src/activities/network/NetworkModeSelectionActivity.cpp +++ b/src/activities/network/NetworkModeSelectionActivity.cpp @@ -51,23 +51,23 @@ void NetworkModeSelectionActivity::onExit() { void NetworkModeSelectionActivity::loop() { // Handle back button - cancel - if (inputManager.wasPressed(InputManager::BTN_BACK)) { + if (mappedInput.wasPressed(MappedInputManager::Button::Back)) { onCancel(); return; } // Handle confirm button - select current option - if (inputManager.wasPressed(InputManager::BTN_CONFIRM)) { + if (mappedInput.wasPressed(MappedInputManager::Button::Confirm)) { const NetworkMode mode = (selectedIndex == 0) ? NetworkMode::JOIN_NETWORK : NetworkMode::CREATE_HOTSPOT; onModeSelected(mode); return; } // Handle navigation - const bool prevPressed = - inputManager.wasPressed(InputManager::BTN_UP) || inputManager.wasPressed(InputManager::BTN_LEFT); - const bool nextPressed = - inputManager.wasPressed(InputManager::BTN_DOWN) || inputManager.wasPressed(InputManager::BTN_RIGHT); + const bool prevPressed = mappedInput.wasPressed(MappedInputManager::Button::Up) || + mappedInput.wasPressed(MappedInputManager::Button::Left); + const bool nextPressed = mappedInput.wasPressed(MappedInputManager::Button::Down) || + mappedInput.wasPressed(MappedInputManager::Button::Right); if (prevPressed) { selectedIndex = (selectedIndex + MENU_ITEM_COUNT - 1) % MENU_ITEM_COUNT; @@ -122,7 +122,8 @@ void NetworkModeSelectionActivity::render() const { } // Draw help text at bottom - renderer.drawButtonHints(UI_FONT_ID, "« Back", "Select", "", ""); + const auto labels = mappedInput.mapLabels("« Back", "Select", "", ""); + renderer.drawButtonHints(UI_FONT_ID, labels.btn1, labels.btn2, labels.btn3, labels.btn4); renderer.displayBuffer(); } diff --git a/src/activities/network/NetworkModeSelectionActivity.h b/src/activities/network/NetworkModeSelectionActivity.h index 90f4282..b9f2e1e 100644 --- a/src/activities/network/NetworkModeSelectionActivity.h +++ b/src/activities/network/NetworkModeSelectionActivity.h @@ -31,10 +31,10 @@ class NetworkModeSelectionActivity final : public Activity { void render() const; public: - explicit NetworkModeSelectionActivity(GfxRenderer& renderer, InputManager& inputManager, + explicit NetworkModeSelectionActivity(GfxRenderer& renderer, MappedInputManager& mappedInput, const std::function& onModeSelected, const std::function& onCancel) - : Activity("NetworkModeSelection", renderer, inputManager), onModeSelected(onModeSelected), onCancel(onCancel) {} + : Activity("NetworkModeSelection", renderer, mappedInput), onModeSelected(onModeSelected), onCancel(onCancel) {} void onEnter() override; void onExit() override; void loop() override; diff --git a/src/activities/network/WifiSelectionActivity.cpp b/src/activities/network/WifiSelectionActivity.cpp index 5bf25f1..9f0e502 100644 --- a/src/activities/network/WifiSelectionActivity.cpp +++ b/src/activities/network/WifiSelectionActivity.cpp @@ -190,7 +190,7 @@ void WifiSelectionActivity::selectNetwork(const int index) { // Don't allow screen updates while changing activity xSemaphoreTake(renderingMutex, portMAX_DELAY); enterNewActivity(new KeyboardEntryActivity( - renderer, inputManager, "Enter WiFi Password", + renderer, mappedInput, "Enter WiFi Password", "", // No initial text 50, // Y position 64, // Max password length @@ -302,17 +302,19 @@ void WifiSelectionActivity::loop() { // Handle save prompt state if (state == WifiSelectionState::SAVE_PROMPT) { - if (inputManager.wasPressed(InputManager::BTN_LEFT) || inputManager.wasPressed(InputManager::BTN_UP)) { + if (mappedInput.wasPressed(MappedInputManager::Button::Up) || + mappedInput.wasPressed(MappedInputManager::Button::Left)) { if (savePromptSelection > 0) { savePromptSelection--; updateRequired = true; } - } else if (inputManager.wasPressed(InputManager::BTN_RIGHT) || inputManager.wasPressed(InputManager::BTN_DOWN)) { + } else if (mappedInput.wasPressed(MappedInputManager::Button::Down) || + mappedInput.wasPressed(MappedInputManager::Button::Right)) { if (savePromptSelection < 1) { savePromptSelection++; updateRequired = true; } - } else if (inputManager.wasPressed(InputManager::BTN_CONFIRM)) { + } else if (mappedInput.wasPressed(MappedInputManager::Button::Confirm)) { if (savePromptSelection == 0) { // User chose "Yes" - save the password xSemaphoreTake(renderingMutex, portMAX_DELAY); @@ -321,7 +323,7 @@ void WifiSelectionActivity::loop() { } // Complete - parent will start web server onComplete(true); - } else if (inputManager.wasPressed(InputManager::BTN_BACK)) { + } else if (mappedInput.wasPressed(MappedInputManager::Button::Back)) { // Skip saving, complete anyway onComplete(true); } @@ -330,17 +332,19 @@ void WifiSelectionActivity::loop() { // Handle forget prompt state (connection failed with saved credentials) if (state == WifiSelectionState::FORGET_PROMPT) { - if (inputManager.wasPressed(InputManager::BTN_LEFT) || inputManager.wasPressed(InputManager::BTN_UP)) { + if (mappedInput.wasPressed(MappedInputManager::Button::Up) || + mappedInput.wasPressed(MappedInputManager::Button::Left)) { if (forgetPromptSelection > 0) { forgetPromptSelection--; updateRequired = true; } - } else if (inputManager.wasPressed(InputManager::BTN_RIGHT) || inputManager.wasPressed(InputManager::BTN_DOWN)) { + } else if (mappedInput.wasPressed(MappedInputManager::Button::Down) || + mappedInput.wasPressed(MappedInputManager::Button::Right)) { if (forgetPromptSelection < 1) { forgetPromptSelection++; updateRequired = true; } - } else if (inputManager.wasPressed(InputManager::BTN_CONFIRM)) { + } else if (mappedInput.wasPressed(MappedInputManager::Button::Confirm)) { if (forgetPromptSelection == 0) { // User chose "Yes" - forget the network xSemaphoreTake(renderingMutex, portMAX_DELAY); @@ -356,7 +360,7 @@ void WifiSelectionActivity::loop() { // Go back to network list state = WifiSelectionState::NETWORK_LIST; updateRequired = true; - } else if (inputManager.wasPressed(InputManager::BTN_BACK)) { + } else if (mappedInput.wasPressed(MappedInputManager::Button::Back)) { // Skip forgetting, go back to network list state = WifiSelectionState::NETWORK_LIST; updateRequired = true; @@ -373,7 +377,8 @@ void WifiSelectionActivity::loop() { // Handle connection failed state if (state == WifiSelectionState::CONNECTION_FAILED) { - if (inputManager.wasPressed(InputManager::BTN_BACK) || inputManager.wasPressed(InputManager::BTN_CONFIRM)) { + if (mappedInput.wasPressed(MappedInputManager::Button::Back) || + mappedInput.wasPressed(MappedInputManager::Button::Confirm)) { // If we used saved credentials, offer to forget the network if (usedSavedPassword) { state = WifiSelectionState::FORGET_PROMPT; @@ -390,13 +395,13 @@ void WifiSelectionActivity::loop() { // Handle network list state if (state == WifiSelectionState::NETWORK_LIST) { // Check for Back button to exit (cancel) - if (inputManager.wasPressed(InputManager::BTN_BACK)) { + if (mappedInput.wasPressed(MappedInputManager::Button::Back)) { onComplete(false); return; } // Check for Confirm button to select network or rescan - if (inputManager.wasPressed(InputManager::BTN_CONFIRM)) { + if (mappedInput.wasPressed(MappedInputManager::Button::Confirm)) { if (!networks.empty()) { selectNetwork(selectedNetworkIndex); } else { @@ -406,12 +411,14 @@ void WifiSelectionActivity::loop() { } // Handle UP/DOWN navigation - if (inputManager.wasPressed(InputManager::BTN_UP) || inputManager.wasPressed(InputManager::BTN_LEFT)) { + if (mappedInput.wasPressed(MappedInputManager::Button::Up) || + mappedInput.wasPressed(MappedInputManager::Button::Left)) { if (selectedNetworkIndex > 0) { selectedNetworkIndex--; updateRequired = true; } - } else if (inputManager.wasPressed(InputManager::BTN_DOWN) || inputManager.wasPressed(InputManager::BTN_RIGHT)) { + } else if (mappedInput.wasPressed(MappedInputManager::Button::Down) || + mappedInput.wasPressed(MappedInputManager::Button::Right)) { if (!networks.empty() && selectedNetworkIndex < static_cast(networks.size()) - 1) { selectedNetworkIndex++; updateRequired = true; @@ -557,7 +564,8 @@ void WifiSelectionActivity::renderNetworkList() const { // Draw help text renderer.drawText(SMALL_FONT_ID, 20, pageHeight - 75, "* = Encrypted | + = Saved"); - renderer.drawButtonHints(UI_FONT_ID, "« Back", "Connect", "", ""); + const auto labels = mappedInput.mapLabels("« Back", "Connect", "", ""); + renderer.drawButtonHints(UI_FONT_ID, labels.btn1, labels.btn2, labels.btn3, labels.btn4); } void WifiSelectionActivity::renderConnecting() const { diff --git a/src/activities/network/WifiSelectionActivity.h b/src/activities/network/WifiSelectionActivity.h index 1cba2a4..33ea26b 100644 --- a/src/activities/network/WifiSelectionActivity.h +++ b/src/activities/network/WifiSelectionActivity.h @@ -92,9 +92,9 @@ class WifiSelectionActivity final : public ActivityWithSubactivity { std::string getSignalStrengthIndicator(int32_t rssi) const; public: - explicit WifiSelectionActivity(GfxRenderer& renderer, InputManager& inputManager, + explicit WifiSelectionActivity(GfxRenderer& renderer, MappedInputManager& mappedInput, const std::function& onComplete) - : ActivityWithSubactivity("WifiSelection", renderer, inputManager), onComplete(onComplete) {} + : ActivityWithSubactivity("WifiSelection", renderer, mappedInput), onComplete(onComplete) {} void onEnter() override; void onExit() override; void loop() override; diff --git a/src/activities/reader/EpubReaderActivity.cpp b/src/activities/reader/EpubReaderActivity.cpp index ebf5b0a..6864a56 100644 --- a/src/activities/reader/EpubReaderActivity.cpp +++ b/src/activities/reader/EpubReaderActivity.cpp @@ -106,12 +106,12 @@ void EpubReaderActivity::loop() { } // Enter chapter selection activity - if (inputManager.wasReleased(InputManager::BTN_CONFIRM)) { + if (mappedInput.wasReleased(MappedInputManager::Button::Confirm)) { // Don't start activity transition while rendering xSemaphoreTake(renderingMutex, portMAX_DELAY); exitActivity(); enterNewActivity(new EpubReaderChapterSelectionActivity( - this->renderer, this->inputManager, epub, currentSpineIndex, + this->renderer, this->mappedInput, epub, currentSpineIndex, [this] { exitActivity(); updateRequired = true; @@ -129,21 +129,21 @@ void EpubReaderActivity::loop() { } // Long press BACK (1s+) goes directly to home - if (inputManager.isPressed(InputManager::BTN_BACK) && inputManager.getHeldTime() >= goHomeMs) { + if (mappedInput.isPressed(MappedInputManager::Button::Back) && mappedInput.getHeldTime() >= goHomeMs) { onGoHome(); return; } // Short press BACK goes to file selection - if (inputManager.wasReleased(InputManager::BTN_BACK) && inputManager.getHeldTime() < goHomeMs) { + if (mappedInput.wasReleased(MappedInputManager::Button::Back) && mappedInput.getHeldTime() < goHomeMs) { onGoBack(); return; } - const bool prevReleased = - inputManager.wasReleased(InputManager::BTN_UP) || inputManager.wasReleased(InputManager::BTN_LEFT); - const bool nextReleased = - inputManager.wasReleased(InputManager::BTN_DOWN) || inputManager.wasReleased(InputManager::BTN_RIGHT); + const bool prevReleased = mappedInput.wasReleased(MappedInputManager::Button::PageBack) || + mappedInput.wasReleased(MappedInputManager::Button::Left); + const bool nextReleased = mappedInput.wasReleased(MappedInputManager::Button::PageForward) || + mappedInput.wasReleased(MappedInputManager::Button::Right); if (!prevReleased && !nextReleased) { return; @@ -157,7 +157,7 @@ void EpubReaderActivity::loop() { return; } - const bool skipChapter = inputManager.getHeldTime() > skipChapterMs; + const bool skipChapter = mappedInput.getHeldTime() > skipChapterMs; if (skipChapter) { // We don't want to delete the section mid-render, so grab the semaphore diff --git a/src/activities/reader/EpubReaderActivity.h b/src/activities/reader/EpubReaderActivity.h index f1abc92..63d4887 100644 --- a/src/activities/reader/EpubReaderActivity.h +++ b/src/activities/reader/EpubReaderActivity.h @@ -27,9 +27,9 @@ class EpubReaderActivity final : public ActivityWithSubactivity { void renderStatusBar(int orientedMarginRight, int orientedMarginBottom, int orientedMarginLeft) const; public: - explicit EpubReaderActivity(GfxRenderer& renderer, InputManager& inputManager, std::unique_ptr epub, + explicit EpubReaderActivity(GfxRenderer& renderer, MappedInputManager& mappedInput, std::unique_ptr epub, const std::function& onGoBack, const std::function& onGoHome) - : ActivityWithSubactivity("EpubReader", renderer, inputManager), + : ActivityWithSubactivity("EpubReader", renderer, mappedInput), epub(std::move(epub)), onGoBack(onGoBack), onGoHome(onGoHome) {} diff --git a/src/activities/reader/EpubReaderChapterSelectionActivity.cpp b/src/activities/reader/EpubReaderChapterSelectionActivity.cpp index ab9d8f7..dc0bee5 100644 --- a/src/activities/reader/EpubReaderChapterSelectionActivity.cpp +++ b/src/activities/reader/EpubReaderChapterSelectionActivity.cpp @@ -66,17 +66,17 @@ void EpubReaderChapterSelectionActivity::onExit() { } void EpubReaderChapterSelectionActivity::loop() { - const bool prevReleased = - inputManager.wasReleased(InputManager::BTN_UP) || inputManager.wasReleased(InputManager::BTN_LEFT); - const bool nextReleased = - inputManager.wasReleased(InputManager::BTN_DOWN) || inputManager.wasReleased(InputManager::BTN_RIGHT); + const bool prevReleased = mappedInput.wasReleased(MappedInputManager::Button::Up) || + mappedInput.wasReleased(MappedInputManager::Button::Left); + const bool nextReleased = mappedInput.wasReleased(MappedInputManager::Button::Down) || + mappedInput.wasReleased(MappedInputManager::Button::Right); - const bool skipPage = inputManager.getHeldTime() > SKIP_PAGE_MS; + const bool skipPage = mappedInput.getHeldTime() > SKIP_PAGE_MS; const int pageItems = getPageItems(); - if (inputManager.wasReleased(InputManager::BTN_CONFIRM)) { + if (mappedInput.wasReleased(MappedInputManager::Button::Confirm)) { onSelectSpineIndex(selectorIndex); - } else if (inputManager.wasReleased(InputManager::BTN_BACK)) { + } else if (mappedInput.wasReleased(MappedInputManager::Button::Back)) { onGoBack(); } else if (prevReleased) { if (skipPage) { diff --git a/src/activities/reader/EpubReaderChapterSelectionActivity.h b/src/activities/reader/EpubReaderChapterSelectionActivity.h index fefd225..cf3f190 100644 --- a/src/activities/reader/EpubReaderChapterSelectionActivity.h +++ b/src/activities/reader/EpubReaderChapterSelectionActivity.h @@ -27,11 +27,11 @@ class EpubReaderChapterSelectionActivity final : public Activity { void renderScreen(); public: - explicit EpubReaderChapterSelectionActivity(GfxRenderer& renderer, InputManager& inputManager, + explicit EpubReaderChapterSelectionActivity(GfxRenderer& renderer, MappedInputManager& mappedInput, const std::shared_ptr& epub, const int currentSpineIndex, const std::function& onGoBack, const std::function& onSelectSpineIndex) - : Activity("EpubReaderChapterSelection", renderer, inputManager), + : Activity("EpubReaderChapterSelection", renderer, mappedInput), epub(epub), currentSpineIndex(currentSpineIndex), onGoBack(onGoBack), diff --git a/src/activities/reader/FileSelectionActivity.cpp b/src/activities/reader/FileSelectionActivity.cpp index e891d77..447db6d 100644 --- a/src/activities/reader/FileSelectionActivity.cpp +++ b/src/activities/reader/FileSelectionActivity.cpp @@ -89,7 +89,7 @@ void FileSelectionActivity::onExit() { void FileSelectionActivity::loop() { // Long press BACK (1s+) goes to root folder - if (inputManager.isPressed(InputManager::BTN_BACK) && inputManager.getHeldTime() >= GO_HOME_MS) { + if (mappedInput.isPressed(MappedInputManager::Button::Back) && mappedInput.getHeldTime() >= GO_HOME_MS) { if (basepath != "/") { basepath = "/"; loadFiles(); @@ -98,14 +98,14 @@ void FileSelectionActivity::loop() { return; } - const bool prevReleased = - inputManager.wasReleased(InputManager::BTN_UP) || inputManager.wasReleased(InputManager::BTN_LEFT); - const bool nextReleased = - inputManager.wasReleased(InputManager::BTN_DOWN) || inputManager.wasReleased(InputManager::BTN_RIGHT); + const bool prevReleased = mappedInput.wasReleased(MappedInputManager::Button::Up) || + mappedInput.wasReleased(MappedInputManager::Button::Left); + const bool nextReleased = mappedInput.wasReleased(MappedInputManager::Button::Down) || + mappedInput.wasReleased(MappedInputManager::Button::Right); - const bool skipPage = inputManager.getHeldTime() > SKIP_PAGE_MS; + const bool skipPage = mappedInput.getHeldTime() > SKIP_PAGE_MS; - if (inputManager.wasReleased(InputManager::BTN_CONFIRM)) { + if (mappedInput.wasReleased(MappedInputManager::Button::Confirm)) { if (files.empty()) { return; } @@ -118,9 +118,9 @@ void FileSelectionActivity::loop() { } else { onSelect(basepath + files[selectorIndex]); } - } else if (inputManager.wasReleased(InputManager::BTN_BACK)) { + } else if (mappedInput.wasReleased(MappedInputManager::Button::Back)) { // Short press: go up one directory, or go home if at root - if (inputManager.getHeldTime() < GO_HOME_MS) { + if (mappedInput.getHeldTime() < GO_HOME_MS) { if (basepath != "/") { basepath.replace(basepath.find_last_of('/'), std::string::npos, ""); if (basepath.empty()) basepath = "/"; @@ -166,7 +166,8 @@ void FileSelectionActivity::render() const { renderer.drawCenteredText(READER_FONT_ID, 10, "Books", true, BOLD); // Help text - renderer.drawButtonHints(UI_FONT_ID, "« Home", "Open", "", ""); + const auto labels = mappedInput.mapLabels("« Home", "Open", "", ""); + renderer.drawButtonHints(UI_FONT_ID, labels.btn1, labels.btn2, labels.btn3, labels.btn4); if (files.empty()) { renderer.drawText(UI_FONT_ID, 20, 60, "No books found"); diff --git a/src/activities/reader/FileSelectionActivity.h b/src/activities/reader/FileSelectionActivity.h index f642e20..88e97d0 100644 --- a/src/activities/reader/FileSelectionActivity.h +++ b/src/activities/reader/FileSelectionActivity.h @@ -25,10 +25,10 @@ class FileSelectionActivity final : public Activity { void loadFiles(); public: - explicit FileSelectionActivity(GfxRenderer& renderer, InputManager& inputManager, + explicit FileSelectionActivity(GfxRenderer& renderer, MappedInputManager& mappedInput, const std::function& onSelect, const std::function& onGoHome, std::string initialPath = "/") - : Activity("FileSelection", renderer, inputManager), + : Activity("FileSelection", renderer, mappedInput), basepath(initialPath.empty() ? "/" : std::move(initialPath)), onSelect(onSelect), onGoHome(onGoHome) {} diff --git a/src/activities/reader/ReaderActivity.cpp b/src/activities/reader/ReaderActivity.cpp index 222cc97..d98e167 100644 --- a/src/activities/reader/ReaderActivity.cpp +++ b/src/activities/reader/ReaderActivity.cpp @@ -61,7 +61,7 @@ std::unique_ptr ReaderActivity::loadXtc(const std::string& path) { void ReaderActivity::onSelectBookFile(const std::string& path) { currentBookPath = path; // Track current book path exitActivity(); - enterNewActivity(new FullScreenMessageActivity(renderer, inputManager, "Loading...")); + enterNewActivity(new FullScreenMessageActivity(renderer, mappedInput, "Loading...")); if (isXtcFile(path)) { // Load XTC file @@ -70,7 +70,7 @@ void ReaderActivity::onSelectBookFile(const std::string& path) { onGoToXtcReader(std::move(xtc)); } else { exitActivity(); - enterNewActivity(new FullScreenMessageActivity(renderer, inputManager, "Failed to load XTC", REGULAR, + enterNewActivity(new FullScreenMessageActivity(renderer, mappedInput, "Failed to load XTC", REGULAR, EInkDisplay::HALF_REFRESH)); delay(2000); onGoToFileSelection(); @@ -82,7 +82,7 @@ void ReaderActivity::onSelectBookFile(const std::string& path) { onGoToEpubReader(std::move(epub)); } else { exitActivity(); - enterNewActivity(new FullScreenMessageActivity(renderer, inputManager, "Failed to load epub", REGULAR, + enterNewActivity(new FullScreenMessageActivity(renderer, mappedInput, "Failed to load epub", REGULAR, EInkDisplay::HALF_REFRESH)); delay(2000); onGoToFileSelection(); @@ -95,7 +95,7 @@ void ReaderActivity::onGoToFileSelection(const std::string& fromBookPath) { // If coming from a book, start in that book's folder; otherwise start from root const auto initialPath = fromBookPath.empty() ? "/" : extractFolderPath(fromBookPath); enterNewActivity(new FileSelectionActivity( - renderer, inputManager, [this](const std::string& path) { onSelectBookFile(path); }, onGoBack, initialPath)); + renderer, mappedInput, [this](const std::string& path) { onSelectBookFile(path); }, onGoBack, initialPath)); } void ReaderActivity::onGoToEpubReader(std::unique_ptr epub) { @@ -103,7 +103,7 @@ void ReaderActivity::onGoToEpubReader(std::unique_ptr epub) { currentBookPath = epubPath; exitActivity(); enterNewActivity(new EpubReaderActivity( - renderer, inputManager, std::move(epub), [this, epubPath] { onGoToFileSelection(epubPath); }, + renderer, mappedInput, std::move(epub), [this, epubPath] { onGoToFileSelection(epubPath); }, [this] { onGoBack(); })); } @@ -112,7 +112,7 @@ void ReaderActivity::onGoToXtcReader(std::unique_ptr xtc) { currentBookPath = xtcPath; exitActivity(); enterNewActivity(new XtcReaderActivity( - renderer, inputManager, std::move(xtc), [this, xtcPath] { onGoToFileSelection(xtcPath); }, + renderer, mappedInput, std::move(xtc), [this, xtcPath] { onGoToFileSelection(xtcPath); }, [this] { onGoBack(); })); } diff --git a/src/activities/reader/ReaderActivity.h b/src/activities/reader/ReaderActivity.h index f40417e..df44afe 100644 --- a/src/activities/reader/ReaderActivity.h +++ b/src/activities/reader/ReaderActivity.h @@ -21,9 +21,9 @@ class ReaderActivity final : public ActivityWithSubactivity { void onGoToXtcReader(std::unique_ptr xtc); public: - explicit ReaderActivity(GfxRenderer& renderer, InputManager& inputManager, std::string initialBookPath, + explicit ReaderActivity(GfxRenderer& renderer, MappedInputManager& mappedInput, std::string initialBookPath, const std::function& onGoBack) - : ActivityWithSubactivity("Reader", renderer, inputManager), + : ActivityWithSubactivity("Reader", renderer, mappedInput), initialBookPath(std::move(initialBookPath)), onGoBack(onGoBack) {} void onEnter() override; diff --git a/src/activities/reader/XtcReaderActivity.cpp b/src/activities/reader/XtcReaderActivity.cpp index aa9de70..8933606 100644 --- a/src/activities/reader/XtcReaderActivity.cpp +++ b/src/activities/reader/XtcReaderActivity.cpp @@ -71,21 +71,21 @@ void XtcReaderActivity::onExit() { void XtcReaderActivity::loop() { // Long press BACK (1s+) goes directly to home - if (inputManager.isPressed(InputManager::BTN_BACK) && inputManager.getHeldTime() >= goHomeMs) { + if (mappedInput.isPressed(MappedInputManager::Button::Back) && mappedInput.getHeldTime() >= goHomeMs) { onGoHome(); return; } // Short press BACK goes to file selection - if (inputManager.wasReleased(InputManager::BTN_BACK) && inputManager.getHeldTime() < goHomeMs) { + if (mappedInput.wasReleased(MappedInputManager::Button::Back) && mappedInput.getHeldTime() < goHomeMs) { onGoBack(); return; } - const bool prevReleased = - inputManager.wasReleased(InputManager::BTN_UP) || inputManager.wasReleased(InputManager::BTN_LEFT); - const bool nextReleased = - inputManager.wasReleased(InputManager::BTN_DOWN) || inputManager.wasReleased(InputManager::BTN_RIGHT); + const bool prevReleased = mappedInput.wasReleased(MappedInputManager::Button::PageBack) || + mappedInput.wasReleased(MappedInputManager::Button::Left); + const bool nextReleased = mappedInput.wasReleased(MappedInputManager::Button::PageForward) || + mappedInput.wasReleased(MappedInputManager::Button::Right); if (!prevReleased && !nextReleased) { return; @@ -98,7 +98,7 @@ void XtcReaderActivity::loop() { return; } - const bool skipPages = inputManager.getHeldTime() > skipPageMs; + const bool skipPages = mappedInput.getHeldTime() > skipPageMs; const int skipAmount = skipPages ? 10 : 1; if (prevReleased) { diff --git a/src/activities/reader/XtcReaderActivity.h b/src/activities/reader/XtcReaderActivity.h index f923d8a..bf72064 100644 --- a/src/activities/reader/XtcReaderActivity.h +++ b/src/activities/reader/XtcReaderActivity.h @@ -32,9 +32,9 @@ class XtcReaderActivity final : public Activity { void loadProgress(); public: - explicit XtcReaderActivity(GfxRenderer& renderer, InputManager& inputManager, std::unique_ptr xtc, + explicit XtcReaderActivity(GfxRenderer& renderer, MappedInputManager& mappedInput, std::unique_ptr xtc, const std::function& onGoBack, const std::function& onGoHome) - : Activity("XtcReader", renderer, inputManager), xtc(std::move(xtc)), onGoBack(onGoBack), onGoHome(onGoHome) {} + : Activity("XtcReader", renderer, mappedInput), xtc(std::move(xtc)), onGoBack(onGoBack), onGoHome(onGoHome) {} void onEnter() override; void onExit() override; void loop() override; diff --git a/src/activities/settings/OtaUpdateActivity.cpp b/src/activities/settings/OtaUpdateActivity.cpp index d31f410..846438b 100644 --- a/src/activities/settings/OtaUpdateActivity.cpp +++ b/src/activities/settings/OtaUpdateActivity.cpp @@ -72,7 +72,7 @@ void OtaUpdateActivity::onEnter() { // Launch WiFi selection subactivity Serial.printf("[%lu] [OTA] Launching WifiSelectionActivity...\n", millis()); - enterNewActivity(new WifiSelectionActivity(renderer, inputManager, + enterNewActivity(new WifiSelectionActivity(renderer, mappedInput, [this](const bool connected) { onWifiSelectionComplete(connected); })); } @@ -191,7 +191,7 @@ void OtaUpdateActivity::loop() { } if (state == WAITING_CONFIRMATION) { - if (inputManager.wasPressed(InputManager::BTN_CONFIRM)) { + if (mappedInput.wasPressed(MappedInputManager::Button::Confirm)) { Serial.printf("[%lu] [OTA] New update available, starting download...\n", millis()); xSemaphoreTake(renderingMutex, portMAX_DELAY); state = UPDATE_IN_PROGRESS; @@ -215,7 +215,7 @@ void OtaUpdateActivity::loop() { updateRequired = true; } - if (inputManager.wasPressed(InputManager::BTN_BACK)) { + if (mappedInput.wasPressed(MappedInputManager::Button::Back)) { goBack(); } @@ -223,14 +223,14 @@ void OtaUpdateActivity::loop() { } if (state == FAILED) { - if (inputManager.wasPressed(InputManager::BTN_BACK)) { + if (mappedInput.wasPressed(MappedInputManager::Button::Back)) { goBack(); } return; } if (state == NO_UPDATE) { - if (inputManager.wasPressed(InputManager::BTN_BACK)) { + if (mappedInput.wasPressed(MappedInputManager::Button::Back)) { goBack(); } return; diff --git a/src/activities/settings/OtaUpdateActivity.h b/src/activities/settings/OtaUpdateActivity.h index 20be6fa..9e35567 100644 --- a/src/activities/settings/OtaUpdateActivity.h +++ b/src/activities/settings/OtaUpdateActivity.h @@ -35,8 +35,9 @@ class OtaUpdateActivity : public ActivityWithSubactivity { void render(); public: - explicit OtaUpdateActivity(GfxRenderer& renderer, InputManager& inputManager, const std::function& goBack) - : ActivityWithSubactivity("OtaUpdate", renderer, inputManager), goBack(goBack), updater() {} + explicit OtaUpdateActivity(GfxRenderer& renderer, MappedInputManager& mappedInput, + const std::function& goBack) + : ActivityWithSubactivity("OtaUpdate", renderer, mappedInput), goBack(goBack), updater() {} void onEnter() override; void onExit() override; void loop() override; diff --git a/src/activities/settings/SettingsActivity.cpp b/src/activities/settings/SettingsActivity.cpp index 71fe331..0ddf409 100644 --- a/src/activities/settings/SettingsActivity.cpp +++ b/src/activities/settings/SettingsActivity.cpp @@ -9,7 +9,7 @@ // Define the static settings list namespace { -constexpr int settingsCount = 6; +constexpr int settingsCount = 7; const SettingInfo settingsList[settingsCount] = { // Should match with SLEEP_SCREEN_MODE {"Sleep Screen", SettingType::ENUM, &CrossPointSettings::sleepScreen, {"Dark", "Light", "Custom", "Cover"}}, @@ -20,6 +20,10 @@ const SettingInfo settingsList[settingsCount] = { SettingType::ENUM, &CrossPointSettings::orientation, {"Portrait", "Landscape CW", "Inverted", "Landscape CCW"}}, + {"Front Button Layout", + SettingType::ENUM, + &CrossPointSettings::frontButtonLayout, + {"Bck, Cnfrm, Lft, Rght", "Lft, Rght, Bck, Cnfrm"}}, {"Check for updates", SettingType::ACTION, nullptr, {}}, }; } // namespace @@ -68,24 +72,26 @@ void SettingsActivity::loop() { } // Handle actions with early return - if (inputManager.wasPressed(InputManager::BTN_CONFIRM)) { + if (mappedInput.wasPressed(MappedInputManager::Button::Confirm)) { toggleCurrentSetting(); updateRequired = true; return; } - if (inputManager.wasPressed(InputManager::BTN_BACK)) { + if (mappedInput.wasPressed(MappedInputManager::Button::Back)) { SETTINGS.saveToFile(); onGoHome(); return; } // Handle navigation - if (inputManager.wasPressed(InputManager::BTN_UP) || inputManager.wasPressed(InputManager::BTN_LEFT)) { + if (mappedInput.wasPressed(MappedInputManager::Button::Up) || + mappedInput.wasPressed(MappedInputManager::Button::Left)) { // Move selection up (with wrap-around) selectedSettingIndex = (selectedSettingIndex > 0) ? (selectedSettingIndex - 1) : (settingsCount - 1); updateRequired = true; - } else if (inputManager.wasPressed(InputManager::BTN_DOWN) || inputManager.wasPressed(InputManager::BTN_RIGHT)) { + } else if (mappedInput.wasPressed(MappedInputManager::Button::Down) || + mappedInput.wasPressed(MappedInputManager::Button::Right)) { // Move selection down if (selectedSettingIndex < settingsCount - 1) { selectedSettingIndex++; @@ -113,7 +119,7 @@ void SettingsActivity::toggleCurrentSetting() { if (std::string(setting.name) == "Check for updates") { xSemaphoreTake(renderingMutex, portMAX_DELAY); exitActivity(); - enterNewActivity(new OtaUpdateActivity(renderer, inputManager, [this] { + enterNewActivity(new OtaUpdateActivity(renderer, mappedInput, [this] { exitActivity(); updateRequired = true; })); @@ -173,10 +179,13 @@ void SettingsActivity::render() const { } } - // Draw help text - renderer.drawButtonHints(UI_FONT_ID, "« Save", "Toggle", "", ""); + // Draw version text above button hints renderer.drawText(SMALL_FONT_ID, pageWidth - 20 - renderer.getTextWidth(SMALL_FONT_ID, CROSSPOINT_VERSION), - pageHeight - 30, CROSSPOINT_VERSION); + pageHeight - 60, CROSSPOINT_VERSION); + + // Draw help text + const auto labels = mappedInput.mapLabels("« Save", "Toggle", "", ""); + renderer.drawButtonHints(UI_FONT_ID, labels.btn1, labels.btn2, labels.btn3, labels.btn4); // Always use standard refresh for settings screen renderer.displayBuffer(); diff --git a/src/activities/settings/SettingsActivity.h b/src/activities/settings/SettingsActivity.h index d88dc85..83beb9d 100644 --- a/src/activities/settings/SettingsActivity.h +++ b/src/activities/settings/SettingsActivity.h @@ -34,8 +34,9 @@ class SettingsActivity final : public ActivityWithSubactivity { void toggleCurrentSetting(); public: - explicit SettingsActivity(GfxRenderer& renderer, InputManager& inputManager, const std::function& onGoHome) - : ActivityWithSubactivity("Settings", renderer, inputManager), onGoHome(onGoHome) {} + explicit SettingsActivity(GfxRenderer& renderer, MappedInputManager& mappedInput, + const std::function& onGoHome) + : ActivityWithSubactivity("Settings", renderer, mappedInput), onGoHome(onGoHome) {} void onEnter() override; void onExit() override; void loop() override; diff --git a/src/activities/util/FullScreenMessageActivity.h b/src/activities/util/FullScreenMessageActivity.h index 8c6e30e..c798505 100644 --- a/src/activities/util/FullScreenMessageActivity.h +++ b/src/activities/util/FullScreenMessageActivity.h @@ -13,10 +13,10 @@ class FullScreenMessageActivity final : public Activity { EInkDisplay::RefreshMode refreshMode; public: - explicit FullScreenMessageActivity(GfxRenderer& renderer, InputManager& inputManager, std::string text, + explicit FullScreenMessageActivity(GfxRenderer& renderer, MappedInputManager& mappedInput, std::string text, const EpdFontStyle style = REGULAR, const EInkDisplay::RefreshMode refreshMode = EInkDisplay::FAST_REFRESH) - : Activity("FullScreenMessage", renderer, inputManager), + : Activity("FullScreenMessage", renderer, mappedInput), text(std::move(text)), style(style), refreshMode(refreshMode) {} diff --git a/src/activities/util/KeyboardEntryActivity.cpp b/src/activities/util/KeyboardEntryActivity.cpp index 8a72f1b..7a13aab 100644 --- a/src/activities/util/KeyboardEntryActivity.cpp +++ b/src/activities/util/KeyboardEntryActivity.cpp @@ -138,7 +138,7 @@ void KeyboardEntryActivity::handleKeyPress() { void KeyboardEntryActivity::loop() { // Navigation - if (inputManager.wasPressed(InputManager::BTN_UP)) { + if (mappedInput.wasPressed(MappedInputManager::Button::Up)) { if (selectedRow > 0) { selectedRow--; // Clamp column to valid range for new row @@ -148,7 +148,7 @@ void KeyboardEntryActivity::loop() { updateRequired = true; } - if (inputManager.wasPressed(InputManager::BTN_DOWN)) { + if (mappedInput.wasPressed(MappedInputManager::Button::Down)) { if (selectedRow < NUM_ROWS - 1) { selectedRow++; const int maxCol = getRowLength(selectedRow) - 1; @@ -157,7 +157,7 @@ void KeyboardEntryActivity::loop() { updateRequired = true; } - if (inputManager.wasPressed(InputManager::BTN_LEFT)) { + if (mappedInput.wasPressed(MappedInputManager::Button::Left)) { // Special bottom row case if (selectedRow == SPECIAL_ROW) { // Bottom row has special key widths @@ -187,7 +187,7 @@ void KeyboardEntryActivity::loop() { updateRequired = true; } - if (inputManager.wasPressed(InputManager::BTN_RIGHT)) { + if (mappedInput.wasPressed(MappedInputManager::Button::Right)) { const int maxCol = getRowLength(selectedRow) - 1; // Special bottom row case @@ -220,13 +220,13 @@ void KeyboardEntryActivity::loop() { } // Selection - if (inputManager.wasPressed(InputManager::BTN_CONFIRM)) { + if (mappedInput.wasPressed(MappedInputManager::Button::Confirm)) { handleKeyPress(); updateRequired = true; } // Cancel - if (inputManager.wasPressed(InputManager::BTN_BACK)) { + if (mappedInput.wasPressed(MappedInputManager::Button::Back)) { if (onCancel) { onCancel(); } diff --git a/src/activities/util/KeyboardEntryActivity.h b/src/activities/util/KeyboardEntryActivity.h index 552a3e8..1c1b1f3 100644 --- a/src/activities/util/KeyboardEntryActivity.h +++ b/src/activities/util/KeyboardEntryActivity.h @@ -1,6 +1,5 @@ #pragma once #include -#include #include #include #include @@ -31,7 +30,7 @@ class KeyboardEntryActivity : public Activity { /** * Constructor * @param renderer Reference to the GfxRenderer for drawing - * @param inputManager Reference to InputManager for handling input + * @param mappedInput Reference to MappedInputManager for handling input * @param title Title to display above the keyboard * @param initialText Initial text to show in the input field * @param startY Y position to start rendering the keyboard @@ -40,11 +39,11 @@ class KeyboardEntryActivity : public Activity { * @param onComplete Callback invoked when input is complete * @param onCancel Callback invoked when input is cancelled */ - explicit KeyboardEntryActivity(GfxRenderer& renderer, InputManager& inputManager, std::string title = "Enter Text", - std::string initialText = "", const int startY = 10, const size_t maxLength = 0, - const bool isPassword = false, OnCompleteCallback onComplete = nullptr, - OnCancelCallback onCancel = nullptr) - : Activity("KeyboardEntry", renderer, inputManager), + explicit KeyboardEntryActivity(GfxRenderer& renderer, MappedInputManager& mappedInput, + std::string title = "Enter Text", std::string initialText = "", const int startY = 10, + const size_t maxLength = 0, const bool isPassword = false, + OnCompleteCallback onComplete = nullptr, OnCancelCallback onCancel = nullptr) + : Activity("KeyboardEntry", renderer, mappedInput), title(std::move(title)), text(std::move(initialText)), startY(startY), diff --git a/src/main.cpp b/src/main.cpp index 9b950f1..877d1c6 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -16,6 +16,7 @@ #include "Battery.h" #include "CrossPointSettings.h" #include "CrossPointState.h" +#include "MappedInputManager.h" #include "activities/boot_sleep/BootActivity.h" #include "activities/boot_sleep/SleepActivity.h" #include "activities/home/HomeActivity.h" @@ -41,6 +42,7 @@ EInkDisplay einkDisplay(EPD_SCLK, EPD_MOSI, EPD_CS, EPD_DC, EPD_RST, EPD_BUSY); InputManager inputManager; +MappedInputManager mappedInputManager(inputManager); GfxRenderer renderer(einkDisplay); Activity* currentActivity; @@ -124,7 +126,7 @@ void waitForPowerRelease() { // Enter deep sleep mode void enterDeepSleep() { exitActivity(); - enterNewActivity(new SleepActivity(renderer, inputManager)); + enterNewActivity(new SleepActivity(renderer, mappedInputManager)); einkDisplay.deepSleep(); Serial.printf("[%lu] [ ] Power button press calibration value: %lu ms\n", millis(), t2 - t1); @@ -139,24 +141,24 @@ void enterDeepSleep() { void onGoHome(); void onGoToReader(const std::string& initialEpubPath) { exitActivity(); - enterNewActivity(new ReaderActivity(renderer, inputManager, initialEpubPath, onGoHome)); + enterNewActivity(new ReaderActivity(renderer, mappedInputManager, initialEpubPath, onGoHome)); } void onGoToReaderHome() { onGoToReader(std::string()); } void onContinueReading() { onGoToReader(APP_STATE.openEpubPath); } void onGoToFileTransfer() { exitActivity(); - enterNewActivity(new CrossPointWebServerActivity(renderer, inputManager, onGoHome)); + enterNewActivity(new CrossPointWebServerActivity(renderer, mappedInputManager, onGoHome)); } void onGoToSettings() { exitActivity(); - enterNewActivity(new SettingsActivity(renderer, inputManager, onGoHome)); + enterNewActivity(new SettingsActivity(renderer, mappedInputManager, onGoHome)); } void onGoHome() { exitActivity(); - enterNewActivity(new HomeActivity(renderer, inputManager, onContinueReading, onGoToReaderHome, onGoToSettings, + enterNewActivity(new HomeActivity(renderer, mappedInputManager, onContinueReading, onGoToReaderHome, onGoToSettings, onGoToFileTransfer)); } @@ -193,7 +195,7 @@ void setup() { Serial.printf("[%lu] [ ] SD card initialization failed\n", millis()); setupDisplayAndFonts(); exitActivity(); - enterNewActivity(new FullScreenMessageActivity(renderer, inputManager, "SD card error", BOLD)); + enterNewActivity(new FullScreenMessageActivity(renderer, mappedInputManager, "SD card error", BOLD)); return; } @@ -205,7 +207,7 @@ void setup() { setupDisplayAndFonts(); exitActivity(); - enterNewActivity(new BootActivity(renderer, inputManager)); + enterNewActivity(new BootActivity(renderer, mappedInputManager)); APP_STATE.loadFromFile(); if (APP_STATE.openEpubPath.empty()) { From 2437943c942f909943f187a4af7013eb9fadba80 Mon Sep 17 00:00:00 2001 From: Dave Allie Date: Mon, 29 Dec 2025 21:07:26 +1100 Subject: [PATCH 26/71] Remove usused module --- lib/Epub/Epub/FsHelpers.cpp | 92 ------------------------------------- lib/Epub/Epub/FsHelpers.h | 12 ----- 2 files changed, 104 deletions(-) delete mode 100644 lib/Epub/Epub/FsHelpers.cpp delete mode 100644 lib/Epub/Epub/FsHelpers.h diff --git a/lib/Epub/Epub/FsHelpers.cpp b/lib/Epub/Epub/FsHelpers.cpp deleted file mode 100644 index 743ac59..0000000 --- a/lib/Epub/Epub/FsHelpers.cpp +++ /dev/null @@ -1,92 +0,0 @@ -#include "FsHelpers.h" - -#include - -#include - -bool FsHelpers::openFileForRead(const char* moduleName, const std::string& path, File& file) { - file = SD.open(path.c_str(), FILE_READ); - if (!file) { - Serial.printf("[%lu] [%s] Failed to open file for reading: %s\n", millis(), moduleName, path.c_str()); - return false; - } - return true; -} - -bool FsHelpers::openFileForWrite(const char* moduleName, const std::string& path, File& file) { - file = SD.open(path.c_str(), FILE_WRITE, true); - if (!file) { - Serial.printf("[%lu] [%s] Failed to open file for writing: %s\n", millis(), moduleName, path.c_str()); - return false; - } - return true; -} - -bool FsHelpers::removeDir(const char* path) { - // 1. Open the directory - File dir = SD.open(path); - if (!dir) { - return false; - } - if (!dir.isDirectory()) { - return false; - } - - File file = dir.openNextFile(); - while (file) { - String filePath = path; - if (!filePath.endsWith("/")) { - filePath += "/"; - } - filePath += file.name(); - - if (file.isDirectory()) { - if (!removeDir(filePath.c_str())) { - return false; - } - } else { - if (!SD.remove(filePath.c_str())) { - return false; - } - } - file = dir.openNextFile(); - } - - return SD.rmdir(path); -} - -std::string FsHelpers::normalisePath(const std::string& path) { - std::vector components; - std::string component; - - for (const auto c : path) { - if (c == '/') { - if (!component.empty()) { - if (component == "..") { - if (!components.empty()) { - components.pop_back(); - } - } else { - components.push_back(component); - } - component.clear(); - } - } else { - component += c; - } - } - - if (!component.empty()) { - components.push_back(component); - } - - std::string result; - for (const auto& c : components) { - if (!result.empty()) { - result += "/"; - } - result += c; - } - - return result; -} diff --git a/lib/Epub/Epub/FsHelpers.h b/lib/Epub/Epub/FsHelpers.h deleted file mode 100644 index 193db65..0000000 --- a/lib/Epub/Epub/FsHelpers.h +++ /dev/null @@ -1,12 +0,0 @@ -#pragma once -#include - -#include - -class FsHelpers { - public: - static bool openFileForRead(const char* moduleName, const std::string& path, File& file); - static bool openFileForWrite(const char* moduleName, const std::string& path, File& file); - static bool removeDir(const char* path); - static std::string normalisePath(const std::string& path); -}; From d7f4bd54f51733050ca62c37fc1aca1fedb6a296 Mon Sep 17 00:00:00 2001 From: Yona Date: Mon, 29 Dec 2025 11:17:10 +0100 Subject: [PATCH 27/71] Add side button layout configuration while on reader (#147) ## Summary Allow swapping the side button layout between *next page - prev page* and *prev page - next page* while reading --- src/CrossPointSettings.cpp | 5 +++- src/CrossPointSettings.h | 7 +++++ src/MappedInputManager.cpp | 27 +++++++++++++++----- src/activities/settings/SettingsActivity.cpp | 6 ++++- 4 files changed, 36 insertions(+), 9 deletions(-) diff --git a/src/CrossPointSettings.cpp b/src/CrossPointSettings.cpp index a0a002f..41c3322 100644 --- a/src/CrossPointSettings.cpp +++ b/src/CrossPointSettings.cpp @@ -11,7 +11,7 @@ CrossPointSettings CrossPointSettings::instance; namespace { constexpr uint8_t SETTINGS_FILE_VERSION = 1; // Increment this when adding new persisted settings fields -constexpr uint8_t SETTINGS_COUNT = 6; +constexpr uint8_t SETTINGS_COUNT = 7; constexpr char SETTINGS_FILE[] = "/.crosspoint/settings.bin"; } // namespace @@ -32,6 +32,7 @@ bool CrossPointSettings::saveToFile() const { serialization::writePod(outputFile, statusBar); serialization::writePod(outputFile, orientation); serialization::writePod(outputFile, frontButtonLayout); + serialization::writePod(outputFile, sideButtonLayout); outputFile.close(); Serial.printf("[%lu] [CPS] Settings saved to file\n", millis()); @@ -70,6 +71,8 @@ bool CrossPointSettings::loadFromFile() { if (++settingsRead >= fileSettingsCount) break; serialization::readPod(inputFile, frontButtonLayout); if (++settingsRead >= fileSettingsCount) break; + serialization::readPod(inputFile, sideButtonLayout); + if (++settingsRead >= fileSettingsCount) break; } while (false); inputFile.close(); diff --git a/src/CrossPointSettings.h b/src/CrossPointSettings.h index 78356ff..5ad879b 100644 --- a/src/CrossPointSettings.h +++ b/src/CrossPointSettings.h @@ -33,6 +33,11 @@ class CrossPointSettings { // Swapped: Left, Right, Back, Confirm enum FRONT_BUTTON_LAYOUT { BACK_CONFIRM_LEFT_RIGHT = 0, LEFT_RIGHT_BACK_CONFIRM = 1 }; + // Side button layout options + // Default: Previous, Next + // Swapped: Next, Previous + enum SIDE_BUTTON_LAYOUT { PREV_NEXT = 0, NEXT_PREV = 1 }; + // Sleep screen settings uint8_t sleepScreen = DARK; // Status bar settings @@ -46,6 +51,8 @@ class CrossPointSettings { uint8_t orientation = PORTRAIT; // Front button layout uint8_t frontButtonLayout = BACK_CONFIRM_LEFT_RIGHT; + // Side button layout + uint8_t sideButtonLayout = PREV_NEXT; ~CrossPointSettings() = default; diff --git a/src/MappedInputManager.cpp b/src/MappedInputManager.cpp index eeda106..7ee2295 100644 --- a/src/MappedInputManager.cpp +++ b/src/MappedInputManager.cpp @@ -1,11 +1,12 @@ #include "MappedInputManager.h" decltype(InputManager::BTN_BACK) MappedInputManager::mapButton(const Button button) const { - const auto layout = static_cast(SETTINGS.frontButtonLayout); + const auto frontLayout = static_cast(SETTINGS.frontButtonLayout); + const auto sideLayout = static_cast(SETTINGS.sideButtonLayout); switch (button) { case Button::Back: - switch (layout) { + switch (frontLayout) { case CrossPointSettings::LEFT_RIGHT_BACK_CONFIRM: return InputManager::BTN_LEFT; case CrossPointSettings::BACK_CONFIRM_LEFT_RIGHT: @@ -13,7 +14,7 @@ decltype(InputManager::BTN_BACK) MappedInputManager::mapButton(const Button butt return InputManager::BTN_BACK; } case Button::Confirm: - switch (layout) { + switch (frontLayout) { case CrossPointSettings::LEFT_RIGHT_BACK_CONFIRM: return InputManager::BTN_RIGHT; case CrossPointSettings::BACK_CONFIRM_LEFT_RIGHT: @@ -21,7 +22,7 @@ decltype(InputManager::BTN_BACK) MappedInputManager::mapButton(const Button butt return InputManager::BTN_CONFIRM; } case Button::Left: - switch (layout) { + switch (frontLayout) { case CrossPointSettings::LEFT_RIGHT_BACK_CONFIRM: return InputManager::BTN_BACK; case CrossPointSettings::BACK_CONFIRM_LEFT_RIGHT: @@ -29,7 +30,7 @@ decltype(InputManager::BTN_BACK) MappedInputManager::mapButton(const Button butt return InputManager::BTN_LEFT; } case Button::Right: - switch (layout) { + switch (frontLayout) { case CrossPointSettings::LEFT_RIGHT_BACK_CONFIRM: return InputManager::BTN_CONFIRM; case CrossPointSettings::BACK_CONFIRM_LEFT_RIGHT: @@ -43,9 +44,21 @@ decltype(InputManager::BTN_BACK) MappedInputManager::mapButton(const Button butt case Button::Power: return InputManager::BTN_POWER; case Button::PageBack: - return InputManager::BTN_UP; + switch (sideLayout) { + case CrossPointSettings::NEXT_PREV: + return InputManager::BTN_DOWN; + case CrossPointSettings::PREV_NEXT: + default: + return InputManager::BTN_UP; + } case Button::PageForward: - return InputManager::BTN_DOWN; + switch (sideLayout) { + case CrossPointSettings::NEXT_PREV: + return InputManager::BTN_UP; + case CrossPointSettings::PREV_NEXT: + default: + return InputManager::BTN_DOWN; + } } return InputManager::BTN_BACK; diff --git a/src/activities/settings/SettingsActivity.cpp b/src/activities/settings/SettingsActivity.cpp index 0ddf409..409ee39 100644 --- a/src/activities/settings/SettingsActivity.cpp +++ b/src/activities/settings/SettingsActivity.cpp @@ -9,7 +9,7 @@ // Define the static settings list namespace { -constexpr int settingsCount = 7; +constexpr int settingsCount = 8; const SettingInfo settingsList[settingsCount] = { // Should match with SLEEP_SCREEN_MODE {"Sleep Screen", SettingType::ENUM, &CrossPointSettings::sleepScreen, {"Dark", "Light", "Custom", "Cover"}}, @@ -24,6 +24,10 @@ const SettingInfo settingsList[settingsCount] = { SettingType::ENUM, &CrossPointSettings::frontButtonLayout, {"Bck, Cnfrm, Lft, Rght", "Lft, Rght, Bck, Cnfrm"}}, + {"Side Button Layout (reader)", + SettingType::ENUM, + &CrossPointSettings::sideButtonLayout, + {"Prev, Next", "Next, Prev"}}, {"Check for updates", SettingType::ACTION, nullptr, {}}, }; } // namespace From 071ccb9d1bd95d213c2695e1608d3800d8383697 Mon Sep 17 00:00:00 2001 From: Dave Allie Date: Mon, 29 Dec 2025 20:17:29 +1000 Subject: [PATCH 28/71] Custom zip parsing (#140) ## Summary * Use custom zip central directory parsing to lower memory usage when loading zipped epub content --- lib/Epub/Epub.cpp | 17 +- lib/Epub/Epub.h | 3 +- lib/Epub/Epub/BookMetadataCache.cpp | 25 +- lib/Epub/Epub/parsers/ContentOpfParser.cpp | 3 +- lib/FsHelpers/FsHelpers.cpp | 1 + lib/ZipFile/ZipFile.cpp | 366 ++++++++++++++++----- lib/ZipFile/ZipFile.h | 50 ++- 7 files changed, 358 insertions(+), 107 deletions(-) diff --git a/lib/Epub/Epub.cpp b/lib/Epub/Epub.cpp index b48d7ea..941e11b 100644 --- a/lib/Epub/Epub.cpp +++ b/lib/Epub/Epub.cpp @@ -60,9 +60,6 @@ bool Epub::parseContentOpf(BookMetadataCache::BookMetadata& bookMetadata) { } ContentOpfParser opfParser(getCachePath(), getBasePath(), contentOpfSize, bookMetadataCache.get()); - Serial.printf("[%lu] [MEM] Free: %d bytes, Total: %d bytes, Min Free: %d bytes\n", millis(), ESP.getFreeHeap(), - ESP.getHeapSize(), ESP.getMinFreeHeap()); - if (!opfParser.setup()) { Serial.printf("[%lu] [EBP] Could not setup content.opf parser\n", millis()); return false; @@ -321,10 +318,9 @@ bool Epub::generateCoverBmp() const { } uint8_t* Epub::readItemContentsToBytes(const std::string& itemHref, size_t* size, const bool trailingNullByte) const { - const ZipFile zip("/sd" + filepath); const std::string path = FsHelpers::normalisePath(itemHref); - const auto content = zip.readFileToMemory(path.c_str(), size, trailingNullByte); + const auto content = ZipFile(filepath).readFileToMemory(path.c_str(), size, trailingNullByte); if (!content) { Serial.printf("[%lu] [EBP] Failed to read item %s\n", millis(), path.c_str()); return nullptr; @@ -334,20 +330,13 @@ uint8_t* Epub::readItemContentsToBytes(const std::string& itemHref, size_t* size } bool Epub::readItemContentsToStream(const std::string& itemHref, Print& out, const size_t chunkSize) const { - const ZipFile zip("/sd" + filepath); const std::string path = FsHelpers::normalisePath(itemHref); - - return zip.readFileToStream(path.c_str(), out, chunkSize); + return ZipFile(filepath).readFileToStream(path.c_str(), out, chunkSize); } bool Epub::getItemSize(const std::string& itemHref, size_t* size) const { - const ZipFile zip("/sd" + filepath); - return getItemSize(zip, itemHref, size); -} - -bool Epub::getItemSize(const ZipFile& zip, const std::string& itemHref, size_t* size) { const std::string path = FsHelpers::normalisePath(itemHref); - return zip.getInflatedFileSize(path.c_str(), size); + return ZipFile(filepath).getInflatedFileSize(path.c_str(), size); } int Epub::getSpineItemsCount() const { diff --git a/lib/Epub/Epub.h b/lib/Epub/Epub.h index acdd32c..c785008 100644 --- a/lib/Epub/Epub.h +++ b/lib/Epub/Epub.h @@ -24,7 +24,6 @@ class Epub { bool findContentOpfFile(std::string* contentOpfFile) const; bool parseContentOpf(BookMetadataCache::BookMetadata& bookMetadata); bool parseTocNcxFile() const; - static bool getItemSize(const ZipFile& zip, const std::string& itemHref, size_t* size); public: explicit Epub(std::string filepath, const std::string& cacheDir) : filepath(std::move(filepath)) { @@ -54,5 +53,5 @@ class Epub { size_t getCumulativeSpineItemSize(int spineIndex) const; size_t getBookSize() const; - uint8_t calculateProgress(const int currentSpineIndex, const float currentSpineRead) const; + uint8_t calculateProgress(int currentSpineIndex, float currentSpineRead) const; }; diff --git a/lib/Epub/Epub/BookMetadataCache.cpp b/lib/Epub/Epub/BookMetadataCache.cpp index 3cef851..8fcee28 100644 --- a/lib/Epub/Epub/BookMetadataCache.cpp +++ b/lib/Epub/Epub/BookMetadataCache.cpp @@ -122,7 +122,26 @@ bool BookMetadataCache::buildBookBin(const std::string& epubPath, const BookMeta // LUTs complete // Loop through spines from spine file matching up TOC indexes, calculating cumulative size and writing to book.bin - const ZipFile zip("/sd" + epubPath); + ZipFile zip(epubPath); + // Pre-open zip file to speed up size calculations + if (!zip.open()) { + Serial.printf("[%lu] [BMC] Could not open EPUB zip for size calculations\n", millis()); + bookFile.close(); + spineFile.close(); + tocFile.close(); + return false; + } + // TODO: For large ZIPs loading the all localHeaderOffsets will crash. + // However not having them loaded is extremely slow. Need a better solution here. + // Perhaps only a cache of spine items or a better way to speedup lookups? + if (!zip.loadAllFileStatSlims()) { + Serial.printf("[%lu] [BMC] Could not load zip local header offsets for size calculations\n", millis()); + bookFile.close(); + spineFile.close(); + tocFile.close(); + zip.close(); + return false; + } size_t cumSize = 0; spineFile.seek(0); for (int i = 0; i < spineCount; i++) { @@ -157,6 +176,8 @@ bool BookMetadataCache::buildBookBin(const std::string& epubPath, const BookMeta // Write out spine data to book.bin writeSpineEntry(bookFile, spineEntry); } + // Close opened zip file + zip.close(); // Loop through toc entries from toc file writing to book.bin tocFile.seek(0); @@ -223,6 +244,8 @@ void BookMetadataCache::createTocEntry(const std::string& title, const std::stri int spineIndex = -1; // find spine index + // TODO: This lookup is slow as need to scan through all items each time. We can't hold it all in memory due to size. + // But perhaps we can load just the hrefs in a vector/list to do an index lookup? spineFile.seek(0); for (int i = 0; i < spineCount; i++) { auto spineEntry = readSpineEntry(spineFile); diff --git a/lib/Epub/Epub/parsers/ContentOpfParser.cpp b/lib/Epub/Epub/parsers/ContentOpfParser.cpp index 3cc6401..a62b2d0 100644 --- a/lib/Epub/Epub/parsers/ContentOpfParser.cpp +++ b/lib/Epub/Epub/parsers/ContentOpfParser.cpp @@ -3,7 +3,6 @@ #include #include #include -#include #include "../BookMetadataCache.h" @@ -183,6 +182,8 @@ void XMLCALL ContentOpfParser::startElement(void* userData, const XML_Char* name if (strcmp(atts[i], "idref") == 0) { const std::string idref = atts[i + 1]; // Resolve the idref to href using items map + // TODO: This lookup is slow as need to scan through all items each time. + // It can take up to 200ms per item when getting to 1500 items. self->tempItemStore.seek(0); std::string itemId; std::string href; diff --git a/lib/FsHelpers/FsHelpers.cpp b/lib/FsHelpers/FsHelpers.cpp index 06f3dfe..c8b59ce 100644 --- a/lib/FsHelpers/FsHelpers.cpp +++ b/lib/FsHelpers/FsHelpers.cpp @@ -6,6 +6,7 @@ bool FsHelpers::openFileForRead(const char* moduleName, const char* path, File& file) { if (!SD.exists(path)) { + Serial.printf("[%lu] [%s] File does not exist: %s\n", millis(), moduleName, path); return false; } diff --git a/lib/ZipFile/ZipFile.cpp b/lib/ZipFile/ZipFile.cpp index 83b1184..23cf0e8 100644 --- a/lib/ZipFile/ZipFile.cpp +++ b/lib/ZipFile/ZipFile.cpp @@ -1,5 +1,6 @@ #include "ZipFile.h" +#include #include #include @@ -27,45 +28,135 @@ bool inflateOneShot(const uint8_t* inputBuf, const size_t deflatedSize, uint8_t* return true; } -ZipFile::ZipFile(std::string filePath) : filePath(std::move(filePath)) { - const bool status = mz_zip_reader_init_file(&zipArchive, this->filePath.c_str(), 0); - - if (!status) { - Serial.printf("[%lu] [ZIP] mz_zip_reader_init_file() failed for %s! Error: %s\n", millis(), this->filePath.c_str(), - mz_zip_get_error_string(zipArchive.m_last_error)); - } -} - -bool ZipFile::loadFileStat(const char* filename, mz_zip_archive_file_stat* fileStat) const { - // find the file - mz_uint32 fileIndex = 0; - if (!mz_zip_reader_locate_file_v2(&zipArchive, filename, nullptr, 0, &fileIndex)) { - Serial.printf("[%lu] [ZIP] Could not find file %s\n", millis(), filename); +bool ZipFile::loadAllFileStatSlims() { + const bool wasOpen = isOpen(); + if (!wasOpen && !open()) { return false; } - if (!mz_zip_reader_file_stat(&zipArchive, fileIndex, fileStat)) { - Serial.printf("[%lu] [ZIP] mz_zip_reader_file_stat() failed! Error: %s\n", millis(), - mz_zip_get_error_string(zipArchive.m_last_error)); + if (!loadZipDetails()) { + if (!wasOpen) { + close(); + } return false; } + + file.seek(zipDetails.centralDirOffset); + + uint32_t sig; + char itemName[256]; + fileStatSlimCache.clear(); + fileStatSlimCache.reserve(zipDetails.totalEntries); + + while (file.available()) { + file.read(reinterpret_cast(&sig), 4); + if (sig != 0x02014b50) break; // End of list + + FileStatSlim fileStat = {}; + + file.seek(6, SeekCur); + file.read(reinterpret_cast(&fileStat.method), 2); + file.seek(8, SeekCur); + file.read(reinterpret_cast(&fileStat.compressedSize), 4); + file.read(reinterpret_cast(&fileStat.uncompressedSize), 4); + uint16_t nameLen, m, k; + file.read(reinterpret_cast(&nameLen), 2); + file.read(reinterpret_cast(&m), 2); + file.read(reinterpret_cast(&k), 2); + file.seek(8, SeekCur); + file.read(reinterpret_cast(&fileStat.localHeaderOffset), 4); + file.read(reinterpret_cast(itemName), nameLen); + itemName[nameLen] = '\0'; + + fileStatSlimCache.emplace(itemName, fileStat); + + // Skip the rest of this entry (extra field + comment) + file.seek(m + k, SeekCur); + } + + if (!wasOpen) { + close(); + } return true; } -long ZipFile::getDataOffset(const mz_zip_archive_file_stat& fileStat) const { +bool ZipFile::loadFileStatSlim(const char* filename, FileStatSlim* fileStat) { + if (!fileStatSlimCache.empty()) { + const auto it = fileStatSlimCache.find(filename); + if (it != fileStatSlimCache.end()) { + *fileStat = it->second; + return true; + } + return false; + } + + const bool wasOpen = isOpen(); + if (!wasOpen && !open()) { + return false; + } + + if (!loadZipDetails()) { + if (!wasOpen) { + close(); + } + return false; + } + + file.seek(zipDetails.centralDirOffset); + + uint32_t sig; + char itemName[256]; + bool found = false; + + while (file.available()) { + file.read(reinterpret_cast(&sig), 4); + if (sig != 0x02014b50) break; // End of list + + file.seek(6, SeekCur); + file.read(reinterpret_cast(&fileStat->method), 2); + file.seek(8, SeekCur); + file.read(reinterpret_cast(&fileStat->compressedSize), 4); + file.read(reinterpret_cast(&fileStat->uncompressedSize), 4); + uint16_t nameLen, m, k; + file.read(reinterpret_cast(&nameLen), 2); + file.read(reinterpret_cast(&m), 2); + file.read(reinterpret_cast(&k), 2); + file.seek(8, SeekCur); + file.read(reinterpret_cast(&fileStat->localHeaderOffset), 4); + file.read(reinterpret_cast(itemName), nameLen); + itemName[nameLen] = '\0'; + + if (strcmp(itemName, filename) == 0) { + found = true; + break; + } + + // Skip the rest of this entry (extra field + comment) + file.seek(m + k, SeekCur); + } + + if (!wasOpen) { + close(); + } + return found; +} + +long ZipFile::getDataOffset(const FileStatSlim& fileStat) { + const bool wasOpen = isOpen(); + if (!wasOpen && !open()) { + return -1; + } + constexpr auto localHeaderSize = 30; uint8_t pLocalHeader[localHeaderSize]; - const uint64_t fileOffset = fileStat.m_local_header_ofs; + const uint64_t fileOffset = fileStat.localHeaderOffset; - FILE* file = fopen(filePath.c_str(), "r"); - if (!file) { - Serial.printf("[%lu] [ZIP] Failed to open file for reading local header\n", millis()); - return -1; + file.seek(fileOffset); + const size_t read = file.read(pLocalHeader, localHeaderSize); + if (!wasOpen) { + close(); } - fseek(file, fileOffset, SEEK_SET); - const size_t read = fread(pLocalHeader, 1, localHeaderSize, file); - fclose(file); if (read != localHeaderSize) { Serial.printf("[%lu] [ZIP] Something went wrong reading the local header\n", millis()); @@ -83,48 +174,140 @@ long ZipFile::getDataOffset(const mz_zip_archive_file_stat& fileStat) const { return fileOffset + localHeaderSize + filenameLength + extraOffset; } -bool ZipFile::getInflatedFileSize(const char* filename, size_t* size) const { - mz_zip_archive_file_stat fileStat; - if (!loadFileStat(filename, &fileStat)) { +bool ZipFile::loadZipDetails() { + if (zipDetails.isSet) { + return true; + } + + const bool wasOpen = isOpen(); + if (!wasOpen && !open()) { return false; } - *size = static_cast(fileStat.m_uncomp_size); + const size_t fileSize = file.size(); + if (fileSize < 22) { + Serial.printf("[%lu] [ZIP] File too small to be a valid zip\n", millis()); + if (!wasOpen) { + close(); + } + return false; // Minimum EOCD size is 22 bytes + } + + // We scan the last 1KB (or the whole file if smaller) for the EOCD signature + // 0x06054b50 is stored as 0x50, 0x4b, 0x05, 0x06 in little-endian + const int scanRange = fileSize > 1024 ? 1024 : fileSize; + const auto buffer = static_cast(malloc(scanRange)); + if (!buffer) { + Serial.printf("[%lu] [ZIP] Failed to allocate memory for EOCD scan buffer\n", millis()); + if (!wasOpen) { + close(); + } + return false; + } + + file.seek(fileSize - scanRange); + file.read(buffer, scanRange); + + // Scan backwards for the signature + int foundOffset = -1; + for (int i = scanRange - 22; i >= 0; i--) { + constexpr uint32_t signature = 0x06054b50; + if (*reinterpret_cast(&buffer[i]) == signature) { + foundOffset = i; + break; + } + } + + if (foundOffset == -1) { + Serial.printf("[%lu] [ZIP] EOCD signature not found in zip file\n", millis()); + free(buffer); + if (!wasOpen) { + close(); + } + return false; + } + + // Now extract the values we need from the EOCD record + // Relative positions within EOCD: + // Offset 10: Total number of entries (2 bytes) + // Offset 16: Offset of start of central directory with respect to the starting disk number (4 bytes) + zipDetails.totalEntries = *reinterpret_cast(&buffer[foundOffset + 10]); + zipDetails.centralDirOffset = *reinterpret_cast(&buffer[foundOffset + 16]); + zipDetails.isSet = true; + + free(buffer); + if (!wasOpen) { + close(); + } return true; } -uint8_t* ZipFile::readFileToMemory(const char* filename, size_t* size, const bool trailingNullByte) const { - mz_zip_archive_file_stat fileStat; - if (!loadFileStat(filename, &fileStat)) { +bool ZipFile::open() { + if (!FsHelpers::openFileForRead("ZIP", filePath, file)) { + return false; + } + return true; +} + +bool ZipFile::close() { + if (file) { + file.close(); + } + return true; +} + +bool ZipFile::getInflatedFileSize(const char* filename, size_t* size) { + FileStatSlim fileStat = {}; + if (!loadFileStatSlim(filename, &fileStat)) { + return false; + } + + *size = static_cast(fileStat.uncompressedSize); + return true; +} + +uint8_t* ZipFile::readFileToMemory(const char* filename, size_t* size, const bool trailingNullByte) { + const bool wasOpen = isOpen(); + if (!wasOpen && !open()) { + return nullptr; + } + + FileStatSlim fileStat = {}; + if (!loadFileStatSlim(filename, &fileStat)) { + if (!wasOpen) { + close(); + } return nullptr; } const long fileOffset = getDataOffset(fileStat); if (fileOffset < 0) { + if (!wasOpen) { + close(); + } return nullptr; } - FILE* file = fopen(filePath.c_str(), "rb"); - if (!file) { - Serial.printf("[%lu] [ZIP] Failed to open file for reading\n", millis()); - return nullptr; - } - fseek(file, fileOffset, SEEK_SET); + file.seek(fileOffset); - const auto deflatedDataSize = static_cast(fileStat.m_comp_size); - const auto inflatedDataSize = static_cast(fileStat.m_uncomp_size); + const auto deflatedDataSize = fileStat.compressedSize; + const auto inflatedDataSize = fileStat.uncompressedSize; const auto dataSize = trailingNullByte ? inflatedDataSize + 1 : inflatedDataSize; const auto data = static_cast(malloc(dataSize)); if (data == nullptr) { Serial.printf("[%lu] [ZIP] Failed to allocate memory for output buffer (%zu bytes)\n", millis(), dataSize); - fclose(file); + if (!wasOpen) { + close(); + } return nullptr; } - if (fileStat.m_method == MZ_NO_COMPRESSION) { + if (fileStat.method == MZ_NO_COMPRESSION) { // no deflation, just read content - const size_t dataRead = fread(data, 1, inflatedDataSize, file); - fclose(file); + const size_t dataRead = file.read(data, inflatedDataSize); + if (!wasOpen) { + close(); + } if (dataRead != inflatedDataSize) { Serial.printf("[%lu] [ZIP] Failed to read data\n", millis()); @@ -133,17 +316,21 @@ uint8_t* ZipFile::readFileToMemory(const char* filename, size_t* size, const boo } // Continue out of block with data set - } else if (fileStat.m_method == MZ_DEFLATED) { + } else if (fileStat.method == MZ_DEFLATED) { // Read out deflated content from file const auto deflatedData = static_cast(malloc(deflatedDataSize)); if (deflatedData == nullptr) { Serial.printf("[%lu] [ZIP] Failed to allocate memory for decompression buffer\n", millis()); - fclose(file); + if (!wasOpen) { + close(); + } return nullptr; } - const size_t dataRead = fread(deflatedData, 1, deflatedDataSize, file); - fclose(file); + const size_t dataRead = file.read(deflatedData, deflatedDataSize); + if (!wasOpen) { + close(); + } if (dataRead != deflatedDataSize) { Serial.printf("[%lu] [ZIP] Failed to read data, expected %d got %d\n", millis(), deflatedDataSize, dataRead); @@ -152,7 +339,7 @@ uint8_t* ZipFile::readFileToMemory(const char* filename, size_t* size, const boo return nullptr; } - bool success = inflateOneShot(deflatedData, deflatedDataSize, data, inflatedDataSize); + const bool success = inflateOneShot(deflatedData, deflatedDataSize, data, inflatedDataSize); free(deflatedData); if (!success) { @@ -164,7 +351,9 @@ uint8_t* ZipFile::readFileToMemory(const char* filename, size_t* size, const boo // Continue out of block with data set } else { Serial.printf("[%lu] [ZIP] Unsupported compression method\n", millis()); - fclose(file); + if (!wasOpen) { + close(); + } return nullptr; } @@ -173,9 +362,14 @@ uint8_t* ZipFile::readFileToMemory(const char* filename, size_t* size, const boo return data; } -bool ZipFile::readFileToStream(const char* filename, Print& out, const size_t chunkSize) const { - mz_zip_archive_file_stat fileStat; - if (!loadFileStat(filename, &fileStat)) { +bool ZipFile::readFileToStream(const char* filename, Print& out, const size_t chunkSize) { + const bool wasOpen = isOpen(); + if (!wasOpen && !open()) { + return false; + } + + FileStatSlim fileStat = {}; + if (!loadFileStatSlim(filename, &fileStat)) { return false; } @@ -184,32 +378,30 @@ bool ZipFile::readFileToStream(const char* filename, Print& out, const size_t ch return false; } - FILE* file = fopen(filePath.c_str(), "rb"); - if (!file) { - Serial.printf("[%lu] [ZIP] Failed to open file for streaming\n", millis()); - return false; - } - fseek(file, fileOffset, SEEK_SET); + file.seek(fileOffset); + const auto deflatedDataSize = fileStat.compressedSize; + const auto inflatedDataSize = fileStat.uncompressedSize; - const auto deflatedDataSize = static_cast(fileStat.m_comp_size); - const auto inflatedDataSize = static_cast(fileStat.m_uncomp_size); - - if (fileStat.m_method == MZ_NO_COMPRESSION) { + if (fileStat.method == MZ_NO_COMPRESSION) { // no deflation, just read content const auto buffer = static_cast(malloc(chunkSize)); if (!buffer) { Serial.printf("[%lu] [ZIP] Failed to allocate memory for buffer\n", millis()); - fclose(file); + if (!wasOpen) { + close(); + } return false; } size_t remaining = inflatedDataSize; while (remaining > 0) { - const size_t dataRead = fread(buffer, 1, remaining < chunkSize ? remaining : chunkSize, file); + const size_t dataRead = file.read(buffer, remaining < chunkSize ? remaining : chunkSize); if (dataRead == 0) { Serial.printf("[%lu] [ZIP] Could not read more bytes\n", millis()); free(buffer); - fclose(file); + if (!wasOpen) { + close(); + } return false; } @@ -217,17 +409,21 @@ bool ZipFile::readFileToStream(const char* filename, Print& out, const size_t ch remaining -= dataRead; } - fclose(file); + if (!wasOpen) { + close(); + } free(buffer); return true; } - if (fileStat.m_method == MZ_DEFLATED) { + if (fileStat.method == MZ_DEFLATED) { // Setup inflator const auto inflator = static_cast(malloc(sizeof(tinfl_decompressor))); if (!inflator) { Serial.printf("[%lu] [ZIP] Failed to allocate memory for inflator\n", millis()); - fclose(file); + if (!wasOpen) { + close(); + } return false; } memset(inflator, 0, sizeof(tinfl_decompressor)); @@ -238,7 +434,9 @@ bool ZipFile::readFileToStream(const char* filename, Print& out, const size_t ch if (!fileReadBuffer) { Serial.printf("[%lu] [ZIP] Failed to allocate memory for zip file read buffer\n", millis()); free(inflator); - fclose(file); + if (!wasOpen) { + close(); + } return false; } @@ -247,7 +445,9 @@ bool ZipFile::readFileToStream(const char* filename, Print& out, const size_t ch Serial.printf("[%lu] [ZIP] Failed to allocate memory for dictionary\n", millis()); free(inflator); free(fileReadBuffer); - fclose(file); + if (!wasOpen) { + close(); + } return false; } memset(outputBuffer, 0, TINFL_LZ_DICT_SIZE); @@ -267,7 +467,7 @@ bool ZipFile::readFileToStream(const char* filename, Print& out, const size_t ch } fileReadBufferFilledBytes = - fread(fileReadBuffer, 1, fileRemainingBytes < chunkSize ? fileRemainingBytes : chunkSize, file); + file.read(fileReadBuffer, fileRemainingBytes < chunkSize ? fileRemainingBytes : chunkSize); fileRemainingBytes -= fileReadBufferFilledBytes; fileReadBufferCursor = 0; @@ -294,7 +494,9 @@ bool ZipFile::readFileToStream(const char* filename, Print& out, const size_t ch processedOutputBytes += outBytes; if (out.write(outputBuffer + outputCursor, outBytes) != outBytes) { Serial.printf("[%lu] [ZIP] Failed to write all output bytes to stream\n", millis()); - fclose(file); + if (!wasOpen) { + close(); + } free(outputBuffer); free(fileReadBuffer); free(inflator); @@ -306,7 +508,9 @@ bool ZipFile::readFileToStream(const char* filename, Print& out, const size_t ch if (status < 0) { Serial.printf("[%lu] [ZIP] tinfl_decompress() failed with status %d\n", millis(), status); - fclose(file); + if (!wasOpen) { + close(); + } free(outputBuffer); free(fileReadBuffer); free(inflator); @@ -316,7 +520,9 @@ bool ZipFile::readFileToStream(const char* filename, Print& out, const size_t ch if (status == TINFL_STATUS_DONE) { Serial.printf("[%lu] [ZIP] Decompressed %d bytes into %d bytes\n", millis(), deflatedDataSize, inflatedDataSize); - fclose(file); + if (!wasOpen) { + close(); + } free(inflator); free(fileReadBuffer); free(outputBuffer); @@ -326,13 +532,19 @@ bool ZipFile::readFileToStream(const char* filename, Print& out, const size_t ch // If we get here, EOF reached without TINFL_STATUS_DONE Serial.printf("[%lu] [ZIP] Unexpected EOF\n", millis()); - fclose(file); + if (!wasOpen) { + close(); + } free(outputBuffer); free(fileReadBuffer); free(inflator); return false; } + if (!wasOpen) { + close(); + } + Serial.printf("[%lu] [ZIP] Unsupported compression method\n", millis()); return false; } diff --git a/lib/ZipFile/ZipFile.h b/lib/ZipFile/ZipFile.h index 58e3ab9..4758f16 100644 --- a/lib/ZipFile/ZipFile.h +++ b/lib/ZipFile/ZipFile.h @@ -1,20 +1,46 @@ #pragma once -#include +#include #include - -#include "miniz.h" +#include class ZipFile { - std::string filePath; - mutable mz_zip_archive zipArchive = {}; - bool loadFileStat(const char* filename, mz_zip_archive_file_stat* fileStat) const; - long getDataOffset(const mz_zip_archive_file_stat& fileStat) const; + public: + struct FileStatSlim { + uint16_t method; // Compression method + uint32_t compressedSize; // Compressed size + uint32_t uncompressedSize; // Uncompressed size + uint32_t localHeaderOffset; // Offset of local file header + }; + + struct ZipDetails { + uint32_t centralDirOffset; + uint16_t totalEntries; + bool isSet; + }; + + private: + const std::string& filePath; + File file; + ZipDetails zipDetails = {0, 0, false}; + std::unordered_map fileStatSlimCache; + + bool loadFileStatSlim(const char* filename, FileStatSlim* fileStat); + long getDataOffset(const FileStatSlim& fileStat); + bool loadZipDetails(); public: - explicit ZipFile(std::string filePath); - ~ZipFile() { mz_zip_reader_end(&zipArchive); } - bool getInflatedFileSize(const char* filename, size_t* size) const; - uint8_t* readFileToMemory(const char* filename, size_t* size = nullptr, bool trailingNullByte = false) const; - bool readFileToStream(const char* filename, Print& out, size_t chunkSize) const; + explicit ZipFile(const std::string& filePath) : filePath(filePath) {} + ~ZipFile() = default; + // Zip file can be opened and closed by hand in order to allow for quick calculation of inflated file size + // It is NOT recommended to pre-open it for any kind of inflation due to memory constraints + bool isOpen() const { return !!file; } + bool open(); + bool close(); + bool loadAllFileStatSlims(); + bool getInflatedFileSize(const char* filename, size_t* size); + // Due to the memory required to run each of these, it is recommended to not preopen the zip file for multiple + // These functions will open and close the zip as needed + uint8_t* readFileToMemory(const char* filename, size_t* size = nullptr, bool trailingNullByte = false); + bool readFileToStream(const char* filename, Print& out, size_t chunkSize); }; From 7b32a875965e4701332c6f406e1bb51294f267f0 Mon Sep 17 00:00:00 2001 From: Jonas Diemer Date: Mon, 29 Dec 2025 13:18:12 +0100 Subject: [PATCH 29/71] Recalibrated power button duration, decreased long setting slightly. (#149) Slight tuning, as I noticed sometimes inconsistent behavior (reported >200ms of calibration value, I assume related to the Serial output). --- src/CrossPointSettings.h | 2 +- src/main.cpp | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/CrossPointSettings.h b/src/CrossPointSettings.h index 5ad879b..c096cdb 100644 --- a/src/CrossPointSettings.h +++ b/src/CrossPointSettings.h @@ -59,7 +59,7 @@ class CrossPointSettings { // Get singleton instance static CrossPointSettings& getInstance() { return instance; } - uint16_t getPowerButtonDuration() const { return shortPwrBtn ? 10 : 500; } + uint16_t getPowerButtonDuration() const { return shortPwrBtn ? 10 : 400; } bool saveToFile() const; bool loadFromFile(); diff --git a/src/main.cpp b/src/main.cpp index 877d1c6..b617ef8 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -85,7 +85,7 @@ void verifyWakeupLongPress() { const auto start = millis(); bool abort = false; // It takes us some time to wake up from deep sleep, so we need to subtract that from the duration - uint16_t calibration = 25; + uint16_t calibration = 29; uint16_t calibratedPressDuration = (calibration < SETTINGS.getPowerButtonDuration()) ? SETTINGS.getPowerButtonDuration() - calibration : 1; @@ -180,8 +180,6 @@ void setup() { Serial.begin(115200); } - Serial.printf("[%lu] [ ] Starting CrossPoint version " CROSSPOINT_VERSION "\n", millis()); - inputManager.begin(); // Initialize pins pinMode(BAT_GPIO0, INPUT); @@ -204,6 +202,9 @@ void setup() { // verify power button press duration after we've read settings. verifyWakeupLongPress(); + // First serial output only here to avoid timing inconsistencies for power button press duration verification + Serial.printf("[%lu] [ ] Starting CrossPoint version " CROSSPOINT_VERSION "\n", millis()); + setupDisplayAndFonts(); exitActivity(); From 1bfe694807e88b62b9b4ea3bdbffb4588eb4a775 Mon Sep 17 00:00:00 2001 From: Jonas Diemer Date: Mon, 29 Dec 2025 13:18:16 +0100 Subject: [PATCH 30/71] Improvement/settings selection by inversion (#152) Style in settings like everywhere else. Also improved the alignment of the settings value. --- src/activities/settings/SettingsActivity.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/activities/settings/SettingsActivity.cpp b/src/activities/settings/SettingsActivity.cpp index 409ee39..6a66ede 100644 --- a/src/activities/settings/SettingsActivity.cpp +++ b/src/activities/settings/SettingsActivity.cpp @@ -159,6 +159,9 @@ void SettingsActivity::render() const { // Draw header renderer.drawCenteredText(READER_FONT_ID, 10, "Settings", true, BOLD); + // Draw selection + renderer.fillRect(0, 60 + selectedSettingIndex * 30 - 2, pageWidth - 1, 30); + // Draw all settings for (int i = 0; i < settingsCount; i++) { const int settingY = 60 + i * 30; // 30 pixels between settings @@ -169,18 +172,19 @@ void SettingsActivity::render() const { } // Draw setting name - renderer.drawText(UI_FONT_ID, 20, settingY, settingsList[i].name); + renderer.drawText(UI_FONT_ID, 20, settingY, settingsList[i].name, i != selectedSettingIndex); // Draw value based on setting type + std::string valueText = ""; if (settingsList[i].type == SettingType::TOGGLE && settingsList[i].valuePtr != nullptr) { const bool value = SETTINGS.*(settingsList[i].valuePtr); - renderer.drawText(UI_FONT_ID, pageWidth - 80, settingY, value ? "ON" : "OFF"); + valueText = value ? "ON" : "OFF"; } else if (settingsList[i].type == SettingType::ENUM && settingsList[i].valuePtr != nullptr) { const uint8_t value = SETTINGS.*(settingsList[i].valuePtr); - auto valueText = settingsList[i].enumValues[value]; - const auto width = renderer.getTextWidth(UI_FONT_ID, valueText.c_str()); - renderer.drawText(UI_FONT_ID, pageWidth - 50 - width, settingY, valueText.c_str()); + valueText = settingsList[i].enumValues[value]; } + const auto width = renderer.getTextWidth(UI_FONT_ID, valueText.c_str()); + renderer.drawText(UI_FONT_ID, pageWidth - 20 - width, settingY, valueText.c_str(), i != selectedSettingIndex); } // Draw version text above button hints From b01eb50325aa5c3c86f23c62b8cdbd816a879506 Mon Sep 17 00:00:00 2001 From: Jonas Diemer Date: Mon, 29 Dec 2025 13:18:23 +0100 Subject: [PATCH 31/71] Shorten continueLabel to actual screen width. (#151) --- src/activities/home/HomeActivity.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/activities/home/HomeActivity.cpp b/src/activities/home/HomeActivity.cpp index f62b393..1dee518 100644 --- a/src/activities/home/HomeActivity.cpp +++ b/src/activities/home/HomeActivity.cpp @@ -122,12 +122,16 @@ void HomeActivity::render() const { if (bookName.length() > 5 && bookName.substr(bookName.length() - 5) == ".epub") { bookName.resize(bookName.length() - 5); } + // Truncate if too long - if (bookName.length() > 25) { - bookName.resize(22); - bookName += "..."; - } std::string continueLabel = "Continue: " + bookName; + int itemWidth = renderer.getTextWidth(UI_FONT_ID, continueLabel.c_str()); + while (itemWidth > renderer.getScreenWidth() - 40 && continueLabel.length() > 8) { + continueLabel.replace(continueLabel.length() - 5, 5, "..."); + itemWidth = renderer.getTextWidth(UI_FONT_ID, continueLabel.c_str()); + Serial.printf("[%lu] [HOM] width: %lu, pageWidth: %lu\n", millis(), itemWidth, pageWidth); + } + renderer.drawText(UI_FONT_ID, 20, menuY, continueLabel.c_str(), selectorIndex != menuIndex); menuY += 30; menuIndex++; From 278b056bd06858fdd2cb7ff58d47822971733aff Mon Sep 17 00:00:00 2001 From: Sam Davis Date: Tue, 30 Dec 2025 12:49:18 +1100 Subject: [PATCH 32/71] Add chapter select support to XTC files (#145) ## Summary - **What is the goal of this PR?** Add chapter selection support to the XTC reader activity, including parsing chapter metadata from XTC files. - **What changes are included?** Implemented XTC chapter parsing and exposure in the XTC library, added a chapter selection activity for XTC, integrated it into XtcReaderActivity, and normalized chapter page indices by shifting them to 0-based. ## Additional Context - The reader uses 0-based page indexing (first page = 0), but the XTC chapter table appears to be 1-based (first page = 1), so chapter start/end pages are shifted down by 1 during parsing. --- lib/Xtc/Xtc.cpp | 15 ++ lib/Xtc/Xtc.h | 3 + lib/Xtc/Xtc/XtcParser.cpp | 117 ++++++++++++++ lib/Xtc/Xtc/XtcParser.h | 6 + lib/Xtc/Xtc/XtcTypes.h | 7 + src/activities/reader/XtcReaderActivity.cpp | 31 +++- src/activities/reader/XtcReaderActivity.h | 9 +- .../XtcReaderChapterSelectionActivity.cpp | 152 ++++++++++++++++++ .../XtcReaderChapterSelectionActivity.h | 41 +++++ 9 files changed, 376 insertions(+), 5 deletions(-) create mode 100644 src/activities/reader/XtcReaderChapterSelectionActivity.cpp create mode 100644 src/activities/reader/XtcReaderChapterSelectionActivity.h diff --git a/lib/Xtc/Xtc.cpp b/lib/Xtc/Xtc.cpp index fe0b107..9e948ff 100644 --- a/lib/Xtc/Xtc.cpp +++ b/lib/Xtc/Xtc.cpp @@ -87,6 +87,21 @@ std::string Xtc::getTitle() const { return filepath.substr(lastSlash, lastDot - lastSlash); } +bool Xtc::hasChapters() const { + if (!loaded || !parser) { + return false; + } + return parser->hasChapters(); +} + +const std::vector& Xtc::getChapters() const { + static const std::vector kEmpty; + if (!loaded || !parser) { + return kEmpty; + } + return parser->getChapters(); +} + std::string Xtc::getCoverBmpPath() const { return cachePath + "/cover.bmp"; } bool Xtc::generateCoverBmp() const { diff --git a/lib/Xtc/Xtc.h b/lib/Xtc/Xtc.h index 42e05ef..e5bce10 100644 --- a/lib/Xtc/Xtc.h +++ b/lib/Xtc/Xtc.h @@ -9,6 +9,7 @@ #include #include +#include #include "Xtc/XtcParser.h" #include "Xtc/XtcTypes.h" @@ -55,6 +56,8 @@ class Xtc { // Metadata std::string getTitle() const; + bool hasChapters() const; + const std::vector& getChapters() const; // Cover image support (for sleep screen) std::string getCoverBmpPath() const; diff --git a/lib/Xtc/Xtc/XtcParser.cpp b/lib/Xtc/Xtc/XtcParser.cpp index a443f57..f4bf62f 100644 --- a/lib/Xtc/Xtc/XtcParser.cpp +++ b/lib/Xtc/Xtc/XtcParser.cpp @@ -19,6 +19,7 @@ XtcParser::XtcParser() m_defaultWidth(DISPLAY_WIDTH), m_defaultHeight(DISPLAY_HEIGHT), m_bitDepth(1), + m_hasChapters(false), m_lastError(XtcError::OK) { memset(&m_header, 0, sizeof(m_header)); } @@ -56,6 +57,14 @@ XtcError XtcParser::open(const char* filepath) { return m_lastError; } + // Read chapters if present + m_lastError = readChapters(); + if (m_lastError != XtcError::OK) { + Serial.printf("[%lu] [XTC] Failed to read chapters: %s\n", millis(), errorToString(m_lastError)); + m_file.close(); + return m_lastError; + } + m_isOpen = true; Serial.printf("[%lu] [XTC] Opened file: %s (%u pages, %dx%d)\n", millis(), filepath, m_header.pageCount, m_defaultWidth, m_defaultHeight); @@ -68,7 +77,9 @@ void XtcParser::close() { m_isOpen = false; } m_pageTable.clear(); + m_chapters.clear(); m_title.clear(); + m_hasChapters = false; memset(&m_header, 0, sizeof(m_header)); } @@ -165,6 +176,112 @@ XtcError XtcParser::readPageTable() { return XtcError::OK; } +XtcError XtcParser::readChapters() { + m_hasChapters = false; + m_chapters.clear(); + + uint8_t hasChaptersFlag = 0; + if (!m_file.seek(0x0B)) { + return XtcError::READ_ERROR; + } + if (m_file.read(&hasChaptersFlag, sizeof(hasChaptersFlag)) != sizeof(hasChaptersFlag)) { + return XtcError::READ_ERROR; + } + + if (hasChaptersFlag != 1) { + return XtcError::OK; + } + + uint64_t chapterOffset = 0; + if (!m_file.seek(0x30)) { + return XtcError::READ_ERROR; + } + if (m_file.read(reinterpret_cast(&chapterOffset), sizeof(chapterOffset)) != sizeof(chapterOffset)) { + return XtcError::READ_ERROR; + } + + if (chapterOffset == 0) { + return XtcError::OK; + } + + const uint64_t fileSize = m_file.size(); + if (chapterOffset < sizeof(XtcHeader) || chapterOffset >= fileSize || chapterOffset + 96 > fileSize) { + return XtcError::OK; + } + + uint64_t maxOffset = 0; + if (m_header.pageTableOffset > chapterOffset) { + maxOffset = m_header.pageTableOffset; + } else if (m_header.dataOffset > chapterOffset) { + maxOffset = m_header.dataOffset; + } else { + maxOffset = fileSize; + } + + if (maxOffset <= chapterOffset) { + return XtcError::OK; + } + + constexpr size_t chapterSize = 96; + const uint64_t available = maxOffset - chapterOffset; + const size_t chapterCount = static_cast(available / chapterSize); + if (chapterCount == 0) { + return XtcError::OK; + } + + if (!m_file.seek(chapterOffset)) { + return XtcError::READ_ERROR; + } + + std::vector chapterBuf(chapterSize); + for (size_t i = 0; i < chapterCount; i++) { + if (m_file.read(chapterBuf.data(), chapterSize) != chapterSize) { + return XtcError::READ_ERROR; + } + + char nameBuf[81]; + memcpy(nameBuf, chapterBuf.data(), 80); + nameBuf[80] = '\0'; + const size_t nameLen = strnlen(nameBuf, 80); + std::string name(nameBuf, nameLen); + + uint16_t startPage = 0; + uint16_t endPage = 0; + memcpy(&startPage, chapterBuf.data() + 0x50, sizeof(startPage)); + memcpy(&endPage, chapterBuf.data() + 0x52, sizeof(endPage)); + + if (name.empty() && startPage == 0 && endPage == 0) { + break; + } + + if (startPage > 0) { + startPage--; + } + if (endPage > 0) { + endPage--; + } + + if (startPage >= m_header.pageCount) { + continue; + } + + if (endPage >= m_header.pageCount) { + endPage = m_header.pageCount - 1; + } + + if (startPage > endPage) { + continue; + } + + ChapterInfo chapter{std::move(name), startPage, endPage}; + m_chapters.push_back(std::move(chapter)); + } + + m_hasChapters = !m_chapters.empty(); + Serial.printf("[%lu] [XTC] Chapters: %u\n", millis(), static_cast(m_chapters.size())); + return XtcError::OK; +} + bool XtcParser::getPageInfo(uint32_t pageIndex, PageInfo& info) const { if (pageIndex >= m_pageTable.size()) { return false; diff --git a/lib/Xtc/Xtc/XtcParser.h b/lib/Xtc/Xtc/XtcParser.h index b0a402a..25f1c33 100644 --- a/lib/Xtc/Xtc/XtcParser.h +++ b/lib/Xtc/Xtc/XtcParser.h @@ -70,6 +70,9 @@ class XtcParser { // Get title from metadata std::string getTitle() const { return m_title; } + bool hasChapters() const { return m_hasChapters; } + const std::vector& getChapters() const { return m_chapters; } + // Validation static bool isValidXtcFile(const char* filepath); @@ -81,16 +84,19 @@ class XtcParser { bool m_isOpen; XtcHeader m_header; std::vector m_pageTable; + std::vector m_chapters; std::string m_title; uint16_t m_defaultWidth; uint16_t m_defaultHeight; uint8_t m_bitDepth; // 1 = XTC/XTG (1-bit), 2 = XTCH/XTH (2-bit) + bool m_hasChapters; XtcError m_lastError; // Internal helper functions XtcError readHeader(); XtcError readPageTable(); XtcError readTitle(); + XtcError readChapters(); }; } // namespace xtc diff --git a/lib/Xtc/Xtc/XtcTypes.h b/lib/Xtc/Xtc/XtcTypes.h index 30761d9..eba8b32 100644 --- a/lib/Xtc/Xtc/XtcTypes.h +++ b/lib/Xtc/Xtc/XtcTypes.h @@ -13,6 +13,7 @@ #pragma once #include +#include namespace xtc { @@ -92,6 +93,12 @@ struct PageInfo { uint8_t padding; // Alignment padding }; // 16 bytes total +struct ChapterInfo { + std::string name; + uint16_t startPage; + uint16_t endPage; +}; + // Error codes enum class XtcError { OK = 0, diff --git a/src/activities/reader/XtcReaderActivity.cpp b/src/activities/reader/XtcReaderActivity.cpp index 8933606..317594c 100644 --- a/src/activities/reader/XtcReaderActivity.cpp +++ b/src/activities/reader/XtcReaderActivity.cpp @@ -13,6 +13,7 @@ #include "CrossPointSettings.h" #include "CrossPointState.h" +#include "XtcReaderChapterSelectionActivity.h" #include "config.h" namespace { @@ -27,7 +28,7 @@ void XtcReaderActivity::taskTrampoline(void* param) { } void XtcReaderActivity::onEnter() { - Activity::onEnter(); + ActivityWithSubactivity::onEnter(); if (!xtc) { return; @@ -56,7 +57,7 @@ void XtcReaderActivity::onEnter() { } void XtcReaderActivity::onExit() { - Activity::onExit(); + ActivityWithSubactivity::onExit(); // Wait until not rendering to delete task xSemaphoreTake(renderingMutex, portMAX_DELAY); @@ -70,6 +71,32 @@ void XtcReaderActivity::onExit() { } void XtcReaderActivity::loop() { + // Pass input responsibility to sub activity if exists + if (subActivity) { + subActivity->loop(); + return; + } + + // Enter chapter selection activity + if (mappedInput.wasReleased(MappedInputManager::Button::Confirm)) { + if (xtc && xtc->hasChapters() && !xtc->getChapters().empty()) { + xSemaphoreTake(renderingMutex, portMAX_DELAY); + exitActivity(); + enterNewActivity(new XtcReaderChapterSelectionActivity( + this->renderer, this->mappedInput, xtc, currentPage, + [this] { + exitActivity(); + updateRequired = true; + }, + [this](const uint32_t newPage) { + currentPage = newPage; + exitActivity(); + updateRequired = true; + })); + xSemaphoreGive(renderingMutex); + } + } + // Long press BACK (1s+) goes directly to home if (mappedInput.isPressed(MappedInputManager::Button::Back) && mappedInput.getHeldTime() >= goHomeMs) { onGoHome(); diff --git a/src/activities/reader/XtcReaderActivity.h b/src/activities/reader/XtcReaderActivity.h index bf72064..579e177 100644 --- a/src/activities/reader/XtcReaderActivity.h +++ b/src/activities/reader/XtcReaderActivity.h @@ -12,9 +12,9 @@ #include #include -#include "activities/Activity.h" +#include "activities/ActivityWithSubactivity.h" -class XtcReaderActivity final : public Activity { +class XtcReaderActivity final : public ActivityWithSubactivity { std::shared_ptr xtc; TaskHandle_t displayTaskHandle = nullptr; SemaphoreHandle_t renderingMutex = nullptr; @@ -34,7 +34,10 @@ class XtcReaderActivity final : public Activity { public: explicit XtcReaderActivity(GfxRenderer& renderer, MappedInputManager& mappedInput, std::unique_ptr xtc, const std::function& onGoBack, const std::function& onGoHome) - : Activity("XtcReader", renderer, mappedInput), xtc(std::move(xtc)), onGoBack(onGoBack), onGoHome(onGoHome) {} + : ActivityWithSubactivity("XtcReader", renderer, mappedInput), + xtc(std::move(xtc)), + onGoBack(onGoBack), + onGoHome(onGoHome) {} void onEnter() override; void onExit() override; void loop() override; diff --git a/src/activities/reader/XtcReaderChapterSelectionActivity.cpp b/src/activities/reader/XtcReaderChapterSelectionActivity.cpp new file mode 100644 index 0000000..6c747f0 --- /dev/null +++ b/src/activities/reader/XtcReaderChapterSelectionActivity.cpp @@ -0,0 +1,152 @@ +#include "XtcReaderChapterSelectionActivity.h" + +#include +#include +#include + +#include "config.h" + +namespace { +constexpr int SKIP_PAGE_MS = 700; +} // namespace + +int XtcReaderChapterSelectionActivity::getPageItems() const { + constexpr int startY = 60; + constexpr int lineHeight = 30; + + const int screenHeight = renderer.getScreenHeight(); + const int availableHeight = screenHeight - startY; + int items = availableHeight / lineHeight; + if (items < 1) { + items = 1; + } + return items; +} + +int XtcReaderChapterSelectionActivity::findChapterIndexForPage(uint32_t page) const { + if (!xtc) { + return 0; + } + + const auto& chapters = xtc->getChapters(); + for (size_t i = 0; i < chapters.size(); i++) { + if (page >= chapters[i].startPage && page <= chapters[i].endPage) { + return static_cast(i); + } + } + return 0; +} + +void XtcReaderChapterSelectionActivity::taskTrampoline(void* param) { + auto* self = static_cast(param); + self->displayTaskLoop(); +} + +void XtcReaderChapterSelectionActivity::onEnter() { + Activity::onEnter(); + + if (!xtc) { + return; + } + + renderingMutex = xSemaphoreCreateMutex(); + selectorIndex = findChapterIndexForPage(currentPage); + + updateRequired = true; + xTaskCreate(&XtcReaderChapterSelectionActivity::taskTrampoline, "XtcReaderChapterSelectionActivityTask", + 4096, // Stack size + this, // Parameters + 1, // Priority + &displayTaskHandle // Task handle + ); +} + +void XtcReaderChapterSelectionActivity::onExit() { + Activity::onExit(); + + xSemaphoreTake(renderingMutex, portMAX_DELAY); + if (displayTaskHandle) { + vTaskDelete(displayTaskHandle); + displayTaskHandle = nullptr; + } + vSemaphoreDelete(renderingMutex); + renderingMutex = nullptr; +} + +void XtcReaderChapterSelectionActivity::loop() { + const bool prevReleased = mappedInput.wasReleased(MappedInputManager::Button::Up) || + mappedInput.wasReleased(MappedInputManager::Button::Left); + const bool nextReleased = mappedInput.wasReleased(MappedInputManager::Button::Down) || + mappedInput.wasReleased(MappedInputManager::Button::Right); + + const bool skipPage = mappedInput.getHeldTime() > SKIP_PAGE_MS; + const int pageItems = getPageItems(); + + if (mappedInput.wasReleased(MappedInputManager::Button::Confirm)) { + const auto& chapters = xtc->getChapters(); + if (!chapters.empty() && selectorIndex >= 0 && selectorIndex < static_cast(chapters.size())) { + onSelectPage(chapters[selectorIndex].startPage); + } + } else if (mappedInput.wasReleased(MappedInputManager::Button::Back)) { + onGoBack(); + } else if (prevReleased) { + const int total = static_cast(xtc->getChapters().size()); + if (total == 0) { + return; + } + if (skipPage) { + selectorIndex = ((selectorIndex / pageItems - 1) * pageItems + total) % total; + } else { + selectorIndex = (selectorIndex + total - 1) % total; + } + updateRequired = true; + } else if (nextReleased) { + const int total = static_cast(xtc->getChapters().size()); + if (total == 0) { + return; + } + if (skipPage) { + selectorIndex = ((selectorIndex / pageItems + 1) * pageItems) % total; + } else { + selectorIndex = (selectorIndex + 1) % total; + } + updateRequired = true; + } +} + +void XtcReaderChapterSelectionActivity::displayTaskLoop() { + while (true) { + if (updateRequired) { + updateRequired = false; + xSemaphoreTake(renderingMutex, portMAX_DELAY); + renderScreen(); + xSemaphoreGive(renderingMutex); + } + vTaskDelay(10 / portTICK_PERIOD_MS); + } +} + +void XtcReaderChapterSelectionActivity::renderScreen() { + renderer.clearScreen(); + + const auto pageWidth = renderer.getScreenWidth(); + const int pageItems = getPageItems(); + renderer.drawCenteredText(READER_FONT_ID, 10, "Select Chapter", true, BOLD); + + const auto& chapters = xtc->getChapters(); + if (chapters.empty()) { + renderer.drawCenteredText(UI_FONT_ID, 120, "No chapters", true, REGULAR); + renderer.displayBuffer(); + return; + } + + const auto pageStartIndex = selectorIndex / pageItems * pageItems; + renderer.fillRect(0, 60 + (selectorIndex % pageItems) * 30 - 2, pageWidth - 1, 30); + for (int i = pageStartIndex; i < static_cast(chapters.size()) && i < pageStartIndex + pageItems; i++) { + const auto& chapter = chapters[i]; + const char* title = chapter.name.empty() ? "Unnamed" : chapter.name.c_str(); + renderer.drawText(UI_FONT_ID, 20, 60 + (i % pageItems) * 30, title, i != selectorIndex); + } + + renderer.displayBuffer(); +} diff --git a/src/activities/reader/XtcReaderChapterSelectionActivity.h b/src/activities/reader/XtcReaderChapterSelectionActivity.h new file mode 100644 index 0000000..f0fe06b --- /dev/null +++ b/src/activities/reader/XtcReaderChapterSelectionActivity.h @@ -0,0 +1,41 @@ +#pragma once +#include +#include +#include +#include + +#include + +#include "../Activity.h" + +class XtcReaderChapterSelectionActivity final : public Activity { + std::shared_ptr xtc; + TaskHandle_t displayTaskHandle = nullptr; + SemaphoreHandle_t renderingMutex = nullptr; + uint32_t currentPage = 0; + int selectorIndex = 0; + bool updateRequired = false; + const std::function onGoBack; + const std::function onSelectPage; + + int getPageItems() const; + int findChapterIndexForPage(uint32_t page) const; + + static void taskTrampoline(void* param); + [[noreturn]] void displayTaskLoop(); + void renderScreen(); + + public: + explicit XtcReaderChapterSelectionActivity(GfxRenderer& renderer, MappedInputManager& mappedInput, + const std::shared_ptr& xtc, uint32_t currentPage, + const std::function& onGoBack, + const std::function& onSelectPage) + : Activity("XtcReaderChapterSelection", renderer, mappedInput), + xtc(xtc), + currentPage(currentPage), + onGoBack(onGoBack), + onSelectPage(onSelectPage) {} + void onEnter() override; + void onExit() override; + void loop() override; +}; From e4ac90f5c1d1be19378858af7d64b2278a0e460a Mon Sep 17 00:00:00 2001 From: Dave Allie Date: Tue, 30 Dec 2025 12:36:25 +1000 Subject: [PATCH 33/71] Accept big endian version in XTC files (#159) ## Summary * Accept big endian version in XTC files * Recently, two issues (https://github.com/daveallie/crosspoint-reader/issues/157 and https://github.com/daveallie/crosspoint-reader/issues/146) have popped up with XTC files with a big endian encoded version. This is read out as 256. * We should be more lax and accept these values. --- lib/Xtc/Xtc/XtcParser.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/Xtc/Xtc/XtcParser.cpp b/lib/Xtc/Xtc/XtcParser.cpp index f4bf62f..6d34b35 100644 --- a/lib/Xtc/Xtc/XtcParser.cpp +++ b/lib/Xtc/Xtc/XtcParser.cpp @@ -101,7 +101,9 @@ XtcError XtcParser::readHeader() { m_bitDepth = (m_header.magic == XTCH_MAGIC) ? 2 : 1; // Check version - if (m_header.version > 1) { + // Currently, version 1 is the only valid version, however some generators are using big endian for the version code + // so we also accept version 256 (0x0100) + if (m_header.version != 1 && m_header.version != 256) { Serial.printf("[%lu] [XTC] Unsupported version: %d\n", millis(), m_header.version); return XtcError::INVALID_VERSION; } From 85d76da96768fd253bf71a3e96c6d88a92395c85 Mon Sep 17 00:00:00 2001 From: Dave Allie Date: Tue, 30 Dec 2025 14:48:20 +1000 Subject: [PATCH 34/71] Split XTC file version into major minor bytes (#161) ## Summary * Split XTC file version into major minor bytes * Continue to support both 1.0 and 0.1 ## Additional Context * See https://github.com/daveallie/crosspoint-reader/issues/146#issuecomment-3698223951 for more detail FYI @treetrum @eunchurn --- lib/Xtc/Xtc/XtcParser.cpp | 15 +++++++++------ lib/Xtc/Xtc/XtcTypes.h | 3 ++- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/lib/Xtc/Xtc/XtcParser.cpp b/lib/Xtc/Xtc/XtcParser.cpp index 6d34b35..b1f4f90 100644 --- a/lib/Xtc/Xtc/XtcParser.cpp +++ b/lib/Xtc/Xtc/XtcParser.cpp @@ -101,10 +101,12 @@ XtcError XtcParser::readHeader() { m_bitDepth = (m_header.magic == XTCH_MAGIC) ? 2 : 1; // Check version - // Currently, version 1 is the only valid version, however some generators are using big endian for the version code - // so we also accept version 256 (0x0100) - if (m_header.version != 1 && m_header.version != 256) { - Serial.printf("[%lu] [XTC] Unsupported version: %d\n", millis(), m_header.version); + // Currently, version 1.0 is the only valid version, however some generators are swapping the bytes around, so we + // accept both 1.0 and 0.1 for compatibility + const bool validVersion = m_header.versionMajor == 1 && m_header.versionMinor == 0 || + m_header.versionMajor == 0 && m_header.versionMinor == 1; + if (!validVersion) { + Serial.printf("[%lu] [XTC] Unsupported version: %u.%u\n", millis(), m_header.versionMajor, m_header.versionMinor); return XtcError::INVALID_VERSION; } @@ -113,8 +115,9 @@ XtcError XtcParser::readHeader() { return XtcError::CORRUPTED_HEADER; } - Serial.printf("[%lu] [XTC] Header: magic=0x%08X (%s), ver=%u, pages=%u, bitDepth=%u\n", millis(), m_header.magic, - (m_header.magic == XTCH_MAGIC) ? "XTCH" : "XTC", m_header.version, m_header.pageCount, m_bitDepth); + Serial.printf("[%lu] [XTC] Header: magic=0x%08X (%s), ver=%u.%u, pages=%u, bitDepth=%u\n", millis(), m_header.magic, + (m_header.magic == XTCH_MAGIC) ? "XTCH" : "XTC", m_header.versionMajor, m_header.versionMinor, + m_header.pageCount, m_bitDepth); return XtcError::OK; } diff --git a/lib/Xtc/Xtc/XtcTypes.h b/lib/Xtc/Xtc/XtcTypes.h index eba8b32..08f9c00 100644 --- a/lib/Xtc/Xtc/XtcTypes.h +++ b/lib/Xtc/Xtc/XtcTypes.h @@ -35,7 +35,8 @@ constexpr uint16_t DISPLAY_HEIGHT = 800; #pragma pack(push, 1) struct XtcHeader { uint32_t magic; // 0x00: Magic number "XTC\0" (0x00435458) - uint16_t version; // 0x04: Format version (typically 1) + uint8_t versionMajor; // 0x04: Format version major (typically 1) (together with minor = 1.0) + uint8_t versionMinor; // 0x05: Format version minor (typically 0) uint16_t pageCount; // 0x06: Total page count uint32_t flags; // 0x08: Flags/reserved uint32_t headerSize; // 0x0C: Size of header section (typically 88) From d4bd119950041a1d461748c710ea6b749feb8c5b Mon Sep 17 00:00:00 2001 From: Jonas Diemer Date: Tue, 30 Dec 2025 06:05:06 +0100 Subject: [PATCH 35/71] Add option to apply format fix only on changed files (much faster) (#153) The default version parses a lot of files and takes ~5s on my machine. This adds an option `-g` to run only on files modified/staged in git. --- bin/clang-format-fix | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/bin/clang-format-fix b/bin/clang-format-fix index ba16ec9..92a4051 100755 --- a/bin/clang-format-fix +++ b/bin/clang-format-fix @@ -1,3 +1,26 @@ #!/bin/bash -find src lib \( -name "*.c" -o -name "*.cpp" -o -name "*.h" -o -name "*.hpp" \) -exec clang-format -style=file -i {} + +# Configuration: Standard arguments for clang-format +STYLE_ARGS="-style=file -i" + +# --- Main Logic --- + +if [[ "$1" == "-g" ]]; then + # Mode: Format all modified files (staged and unstaged) + + # Use 'git ls-files' to get a list of all files with pending changes: + # --modified: files tracked by git that have been modified (staged or unstaged) + # --exclude-standard: ignores files in .gitignore + git ls-files --modified --exclude-standard \ + | grep -E '\.(c|cpp|h|hpp)$' \ + | xargs -r clang-format $STYLE_ARGS + + # NOTE: We skip the 'git add' step from before. + # When running on unstaged files, 'clang-format -i' modifies them + # in the working directory, where they remain unstaged (M). + +else + # Executes original working command directly. + find src lib \( -name "*.c" -o -name "*.cpp" -o -name "*.h" -o -name "*.hpp" \) -exec clang-format $STYLE_ARGS {} + + +fi From fb5fc32c5d8afedf24ffeddf155ec0d908fc4763 Mon Sep 17 00:00:00 2001 From: Dave Allie Date: Tue, 30 Dec 2025 15:09:30 +1000 Subject: [PATCH 36/71] Add exFAT support (#150) ## Summary * Swap to updated SDCardManager which uses SdFat * Add exFAT support * Swap to using FsFile everywhere * Use newly exposed `SdMan` macro to get to static instance of SDCardManager * Move a bunch of FsHelpers up to SDCardManager --- lib/Epub/Epub.cpp | 50 +++++++------ lib/Epub/Epub.h | 2 + lib/Epub/Epub/BookMetadataCache.cpp | 61 ++++++++------- lib/Epub/Epub/BookMetadataCache.h | 16 ++-- lib/Epub/Epub/Page.cpp | 8 +- lib/Epub/Epub/Page.h | 12 +-- lib/Epub/Epub/Section.cpp | 69 +++++++++-------- lib/Epub/Epub/Section.h | 4 +- lib/Epub/Epub/blocks/TextBlock.cpp | 4 +- lib/Epub/Epub/blocks/TextBlock.h | 6 +- .../Epub/parsers/ChapterHtmlSlimParser.cpp | 6 +- lib/Epub/Epub/parsers/ContentOpfParser.cpp | 8 +- lib/Epub/Epub/parsers/ContentOpfParser.h | 2 +- lib/FsHelpers/FsHelpers.cpp | 74 ------------------- lib/FsHelpers/FsHelpers.h | 9 +-- lib/GfxRenderer/Bitmap.cpp | 10 +-- lib/GfxRenderer/Bitmap.h | 10 +-- lib/GfxRenderer/GfxRenderer.h | 1 - lib/JpegToBmpConverter/JpegToBmpConverter.cpp | 6 +- lib/JpegToBmpConverter/JpegToBmpConverter.h | 6 +- lib/Serialization/Serialization.h | 12 +-- lib/Xtc/Xtc.cpp | 18 ++--- lib/Xtc/Xtc/XtcParser.cpp | 7 +- lib/Xtc/Xtc/XtcParser.h | 4 +- lib/ZipFile/ZipFile.cpp | 56 +++++++------- lib/ZipFile/ZipFile.h | 4 +- open-x4-sdk | 2 +- platformio.ini | 2 + src/CrossPointSettings.cpp | 13 ++-- src/CrossPointState.cpp | 10 +-- src/MappedInputManager.cpp | 2 + src/MappedInputManager.h | 2 - src/WifiCredentialStore.cpp | 13 ++-- src/activities/Activity.h | 3 +- src/activities/boot_sleep/SleepActivity.cpp | 26 ++++--- src/activities/home/HomeActivity.cpp | 6 +- .../network/CrossPointWebServerActivity.cpp | 2 +- .../network/NetworkModeSelectionActivity.cpp | 2 +- .../network/WifiSelectionActivity.cpp | 1 + src/activities/reader/EpubReaderActivity.cpp | 11 +-- .../EpubReaderChapterSelectionActivity.cpp | 3 +- .../reader/FileSelectionActivity.cpp | 16 ++-- src/activities/reader/ReaderActivity.cpp | 6 +- src/activities/reader/XtcReaderActivity.cpp | 12 +-- .../XtcReaderChapterSelectionActivity.cpp | 3 +- src/activities/settings/OtaUpdateActivity.cpp | 2 +- src/activities/settings/SettingsActivity.cpp | 2 +- src/activities/util/KeyboardEntryActivity.cpp | 1 + src/main.cpp | 5 +- src/network/CrossPointWebServer.cpp | 34 +++++---- 50 files changed, 289 insertions(+), 355 deletions(-) diff --git a/lib/Epub/Epub.cpp b/lib/Epub/Epub.cpp index 941e11b..f4a2bfa 100644 --- a/lib/Epub/Epub.cpp +++ b/lib/Epub/Epub.cpp @@ -3,7 +3,7 @@ #include #include #include -#include +#include #include #include "Epub/parsers/ContainerParser.h" @@ -94,13 +94,13 @@ bool Epub::parseTocNcxFile() const { Serial.printf("[%lu] [EBP] Parsing toc ncx file: %s\n", millis(), tocNcxItem.c_str()); const auto tmpNcxPath = getCachePath() + "/toc.ncx"; - File tempNcxFile; - if (!FsHelpers::openFileForWrite("EBP", tmpNcxPath, tempNcxFile)) { + FsFile tempNcxFile; + if (!SdMan.openFileForWrite("EBP", tmpNcxPath, tempNcxFile)) { return false; } readItemContentsToStream(tocNcxItem, tempNcxFile, 1024); tempNcxFile.close(); - if (!FsHelpers::openFileForRead("EBP", tmpNcxPath, tempNcxFile)) { + if (!SdMan.openFileForRead("EBP", tmpNcxPath, tempNcxFile)) { return false; } const auto ncxSize = tempNcxFile.size(); @@ -132,7 +132,7 @@ bool Epub::parseTocNcxFile() const { free(ncxBuffer); tempNcxFile.close(); - SD.remove(tmpNcxPath.c_str()); + SdMan.remove(tmpNcxPath.c_str()); Serial.printf("[%lu] [EBP] Parsed TOC items\n", millis()); return true; @@ -218,12 +218,12 @@ bool Epub::load() { } bool Epub::clearCache() const { - if (!SD.exists(cachePath.c_str())) { + if (!SdMan.exists(cachePath.c_str())) { Serial.printf("[%lu] [EPB] Cache does not exist, no action needed\n", millis()); return true; } - if (!FsHelpers::removeDir(cachePath.c_str())) { + if (!SdMan.removeDir(cachePath.c_str())) { Serial.printf("[%lu] [EPB] Failed to clear cache\n", millis()); return false; } @@ -233,17 +233,11 @@ bool Epub::clearCache() const { } void Epub::setupCacheDir() const { - if (SD.exists(cachePath.c_str())) { + if (SdMan.exists(cachePath.c_str())) { return; } - // Loop over each segment of the cache path and create directories as needed - for (size_t i = 1; i < cachePath.length(); i++) { - if (cachePath[i] == '/') { - SD.mkdir(cachePath.substr(0, i).c_str()); - } - } - SD.mkdir(cachePath.c_str()); + SdMan.mkdir(cachePath.c_str()); } const std::string& Epub::getCachePath() const { return cachePath; } @@ -263,7 +257,7 @@ std::string Epub::getCoverBmpPath() const { return cachePath + "/cover.bmp"; } bool Epub::generateCoverBmp() const { // Already generated, return true - if (SD.exists(getCoverBmpPath().c_str())) { + if (SdMan.exists(getCoverBmpPath().c_str())) { return true; } @@ -283,30 +277,30 @@ bool Epub::generateCoverBmp() const { Serial.printf("[%lu] [EBP] Generating BMP from JPG cover image\n", millis()); const auto coverJpgTempPath = getCachePath() + "/.cover.jpg"; - File coverJpg; - if (!FsHelpers::openFileForWrite("EBP", coverJpgTempPath, coverJpg)) { + FsFile coverJpg; + if (!SdMan.openFileForWrite("EBP", coverJpgTempPath, coverJpg)) { return false; } readItemContentsToStream(coverImageHref, coverJpg, 1024); coverJpg.close(); - if (!FsHelpers::openFileForRead("EBP", coverJpgTempPath, coverJpg)) { + if (!SdMan.openFileForRead("EBP", coverJpgTempPath, coverJpg)) { return false; } - File coverBmp; - if (!FsHelpers::openFileForWrite("EBP", getCoverBmpPath(), coverBmp)) { + FsFile coverBmp; + if (!SdMan.openFileForWrite("EBP", getCoverBmpPath(), coverBmp)) { coverJpg.close(); return false; } const bool success = JpegToBmpConverter::jpegFileToBmpStream(coverJpg, coverBmp); coverJpg.close(); coverBmp.close(); - SD.remove(coverJpgTempPath.c_str()); + SdMan.remove(coverJpgTempPath.c_str()); if (!success) { Serial.printf("[%lu] [EBP] Failed to generate BMP from JPG cover image\n", millis()); - SD.remove(getCoverBmpPath().c_str()); + SdMan.remove(getCoverBmpPath().c_str()); } Serial.printf("[%lu] [EBP] Generated BMP from JPG cover image, success: %s\n", millis(), success ? "yes" : "no"); return success; @@ -318,6 +312,11 @@ bool Epub::generateCoverBmp() const { } uint8_t* Epub::readItemContentsToBytes(const std::string& itemHref, size_t* size, const bool trailingNullByte) const { + if (itemHref.empty()) { + Serial.printf("[%lu] [EBP] Failed to read item, empty href\n", millis()); + return nullptr; + } + const std::string path = FsHelpers::normalisePath(itemHref); const auto content = ZipFile(filepath).readFileToMemory(path.c_str(), size, trailingNullByte); @@ -330,6 +329,11 @@ uint8_t* Epub::readItemContentsToBytes(const std::string& itemHref, size_t* size } bool Epub::readItemContentsToStream(const std::string& itemHref, Print& out, const size_t chunkSize) const { + if (itemHref.empty()) { + Serial.printf("[%lu] [EBP] Failed to read item, empty href\n", millis()); + return false; + } + const std::string path = FsHelpers::normalisePath(itemHref); return ZipFile(filepath).readFileToStream(path.c_str(), out, chunkSize); } diff --git a/lib/Epub/Epub.h b/lib/Epub/Epub.h index c785008..8ce1843 100644 --- a/lib/Epub/Epub.h +++ b/lib/Epub/Epub.h @@ -1,5 +1,7 @@ #pragma once +#include + #include #include #include diff --git a/lib/Epub/Epub/BookMetadataCache.cpp b/lib/Epub/Epub/BookMetadataCache.cpp index 8fcee28..6272414 100644 --- a/lib/Epub/Epub/BookMetadataCache.cpp +++ b/lib/Epub/Epub/BookMetadataCache.cpp @@ -1,7 +1,6 @@ #include "BookMetadataCache.h" #include -#include #include #include @@ -30,7 +29,7 @@ bool BookMetadataCache::beginContentOpfPass() { Serial.printf("[%lu] [BMC] Beginning content opf pass\n", millis()); // Open spine file for writing - return FsHelpers::openFileForWrite("BMC", cachePath + tmpSpineBinFile, spineFile); + return SdMan.openFileForWrite("BMC", cachePath + tmpSpineBinFile, spineFile); } bool BookMetadataCache::endContentOpfPass() { @@ -42,10 +41,10 @@ bool BookMetadataCache::beginTocPass() { Serial.printf("[%lu] [BMC] Beginning toc pass\n", millis()); // Open spine file for reading - if (!FsHelpers::openFileForRead("BMC", cachePath + tmpSpineBinFile, spineFile)) { + if (!SdMan.openFileForRead("BMC", cachePath + tmpSpineBinFile, spineFile)) { return false; } - if (!FsHelpers::openFileForWrite("BMC", cachePath + tmpTocBinFile, tocFile)) { + if (!SdMan.openFileForWrite("BMC", cachePath + tmpTocBinFile, tocFile)) { spineFile.close(); return false; } @@ -71,27 +70,27 @@ bool BookMetadataCache::endWrite() { bool BookMetadataCache::buildBookBin(const std::string& epubPath, const BookMetadata& metadata) { // Open all three files, writing to meta, reading from spine and toc - if (!FsHelpers::openFileForWrite("BMC", cachePath + bookBinFile, bookFile)) { + if (!SdMan.openFileForWrite("BMC", cachePath + bookBinFile, bookFile)) { return false; } - if (!FsHelpers::openFileForRead("BMC", cachePath + tmpSpineBinFile, spineFile)) { + if (!SdMan.openFileForRead("BMC", cachePath + tmpSpineBinFile, spineFile)) { bookFile.close(); return false; } - if (!FsHelpers::openFileForRead("BMC", cachePath + tmpTocBinFile, tocFile)) { + if (!SdMan.openFileForRead("BMC", cachePath + tmpTocBinFile, tocFile)) { bookFile.close(); spineFile.close(); return false; } - constexpr size_t headerASize = - sizeof(BOOK_CACHE_VERSION) + /* LUT Offset */ sizeof(size_t) + sizeof(spineCount) + sizeof(tocCount); - const size_t metadataSize = + constexpr uint32_t headerASize = + sizeof(BOOK_CACHE_VERSION) + /* LUT Offset */ sizeof(uint32_t) + sizeof(spineCount) + sizeof(tocCount); + const uint32_t metadataSize = metadata.title.size() + metadata.author.size() + metadata.coverItemHref.size() + sizeof(uint32_t) * 3; - const size_t lutSize = sizeof(size_t) * spineCount + sizeof(size_t) * tocCount; - const size_t lutOffset = headerASize + metadataSize; + const uint32_t lutSize = sizeof(uint32_t) * spineCount + sizeof(uint32_t) * tocCount; + const uint32_t lutOffset = headerASize + metadataSize; // Header A serialization::writePod(bookFile, BOOK_CACHE_VERSION); @@ -106,7 +105,7 @@ bool BookMetadataCache::buildBookBin(const std::string& epubPath, const BookMeta // Loop through spine entries, writing LUT positions spineFile.seek(0); for (int i = 0; i < spineCount; i++) { - auto pos = spineFile.position(); + uint32_t pos = spineFile.position(); auto spineEntry = readSpineEntry(spineFile); serialization::writePod(bookFile, pos + lutOffset + lutSize); } @@ -114,9 +113,9 @@ bool BookMetadataCache::buildBookBin(const std::string& epubPath, const BookMeta // Loop through toc entries, writing LUT positions tocFile.seek(0); for (int i = 0; i < tocCount; i++) { - auto pos = tocFile.position(); + uint32_t pos = tocFile.position(); auto tocEntry = readTocEntry(tocFile); - serialization::writePod(bookFile, pos + lutOffset + lutSize + spineFile.position()); + serialization::writePod(bookFile, pos + lutOffset + lutSize + static_cast(spineFile.position())); } // LUTs complete @@ -142,7 +141,7 @@ bool BookMetadataCache::buildBookBin(const std::string& epubPath, const BookMeta zip.close(); return false; } - size_t cumSize = 0; + uint32_t cumSize = 0; spineFile.seek(0); for (int i = 0; i < spineCount; i++) { auto spineEntry = readSpineEntry(spineFile); @@ -195,25 +194,25 @@ bool BookMetadataCache::buildBookBin(const std::string& epubPath, const BookMeta } bool BookMetadataCache::cleanupTmpFiles() const { - if (SD.exists((cachePath + tmpSpineBinFile).c_str())) { - SD.remove((cachePath + tmpSpineBinFile).c_str()); + if (SdMan.exists((cachePath + tmpSpineBinFile).c_str())) { + SdMan.remove((cachePath + tmpSpineBinFile).c_str()); } - if (SD.exists((cachePath + tmpTocBinFile).c_str())) { - SD.remove((cachePath + tmpTocBinFile).c_str()); + if (SdMan.exists((cachePath + tmpTocBinFile).c_str())) { + SdMan.remove((cachePath + tmpTocBinFile).c_str()); } return true; } -size_t BookMetadataCache::writeSpineEntry(File& file, const SpineEntry& entry) const { - const auto pos = file.position(); +uint32_t BookMetadataCache::writeSpineEntry(FsFile& file, const SpineEntry& entry) const { + const uint32_t pos = file.position(); serialization::writeString(file, entry.href); serialization::writePod(file, entry.cumulativeSize); serialization::writePod(file, entry.tocIndex); return pos; } -size_t BookMetadataCache::writeTocEntry(File& file, const TocEntry& entry) const { - const auto pos = file.position(); +uint32_t BookMetadataCache::writeTocEntry(FsFile& file, const TocEntry& entry) const { + const uint32_t pos = file.position(); serialization::writeString(file, entry.title); serialization::writeString(file, entry.href); serialization::writeString(file, entry.anchor); @@ -267,7 +266,7 @@ void BookMetadataCache::createTocEntry(const std::string& title, const std::stri /* ============= READING / LOADING FUNCTIONS ================ */ bool BookMetadataCache::load() { - if (!FsHelpers::openFileForRead("BMC", cachePath + bookBinFile, bookFile)) { + if (!SdMan.openFileForRead("BMC", cachePath + bookBinFile, bookFile)) { return false; } @@ -304,8 +303,8 @@ BookMetadataCache::SpineEntry BookMetadataCache::getSpineEntry(const int index) } // Seek to spine LUT item, read from LUT and get out data - bookFile.seek(lutOffset + sizeof(size_t) * index); - size_t spineEntryPos; + bookFile.seek(lutOffset + sizeof(uint32_t) * index); + uint32_t spineEntryPos; serialization::readPod(bookFile, spineEntryPos); bookFile.seek(spineEntryPos); return readSpineEntry(bookFile); @@ -323,14 +322,14 @@ BookMetadataCache::TocEntry BookMetadataCache::getTocEntry(const int index) { } // Seek to TOC LUT item, read from LUT and get out data - bookFile.seek(lutOffset + sizeof(size_t) * spineCount + sizeof(size_t) * index); - size_t tocEntryPos; + bookFile.seek(lutOffset + sizeof(uint32_t) * spineCount + sizeof(uint32_t) * index); + uint32_t tocEntryPos; serialization::readPod(bookFile, tocEntryPos); bookFile.seek(tocEntryPos); return readTocEntry(bookFile); } -BookMetadataCache::SpineEntry BookMetadataCache::readSpineEntry(File& file) const { +BookMetadataCache::SpineEntry BookMetadataCache::readSpineEntry(FsFile& file) const { SpineEntry entry; serialization::readString(file, entry.href); serialization::readPod(file, entry.cumulativeSize); @@ -338,7 +337,7 @@ BookMetadataCache::SpineEntry BookMetadataCache::readSpineEntry(File& file) cons return entry; } -BookMetadataCache::TocEntry BookMetadataCache::readTocEntry(File& file) const { +BookMetadataCache::TocEntry BookMetadataCache::readTocEntry(FsFile& file) const { TocEntry entry; serialization::readString(file, entry.title); serialization::readString(file, entry.href); diff --git a/lib/Epub/Epub/BookMetadataCache.h b/lib/Epub/Epub/BookMetadataCache.h index 7f9f419..a6cf945 100644 --- a/lib/Epub/Epub/BookMetadataCache.h +++ b/lib/Epub/Epub/BookMetadataCache.h @@ -1,6 +1,6 @@ #pragma once -#include +#include #include @@ -46,15 +46,15 @@ class BookMetadataCache { bool loaded; bool buildMode; - File bookFile; + FsFile bookFile; // Temp file handles during build - File spineFile; - File tocFile; + FsFile spineFile; + FsFile tocFile; - size_t writeSpineEntry(File& file, const SpineEntry& entry) const; - size_t writeTocEntry(File& file, const TocEntry& entry) const; - SpineEntry readSpineEntry(File& file) const; - TocEntry readTocEntry(File& file) const; + uint32_t writeSpineEntry(FsFile& file, const SpineEntry& entry) const; + uint32_t writeTocEntry(FsFile& file, const TocEntry& entry) const; + SpineEntry readSpineEntry(FsFile& file) const; + TocEntry readTocEntry(FsFile& file) const; public: BookMetadata coreMetadata; diff --git a/lib/Epub/Epub/Page.cpp b/lib/Epub/Epub/Page.cpp index c50fe30..65ce569 100644 --- a/lib/Epub/Epub/Page.cpp +++ b/lib/Epub/Epub/Page.cpp @@ -7,7 +7,7 @@ void PageLine::render(GfxRenderer& renderer, const int fontId, const int xOffset block->render(renderer, fontId, xPos + xOffset, yPos + yOffset); } -bool PageLine::serialize(File& file) { +bool PageLine::serialize(FsFile& file) { serialization::writePod(file, xPos); serialization::writePod(file, yPos); @@ -15,7 +15,7 @@ bool PageLine::serialize(File& file) { return block->serialize(file); } -std::unique_ptr PageLine::deserialize(File& file) { +std::unique_ptr PageLine::deserialize(FsFile& file) { int16_t xPos; int16_t yPos; serialization::readPod(file, xPos); @@ -31,7 +31,7 @@ void Page::render(GfxRenderer& renderer, const int fontId, const int xOffset, co } } -bool Page::serialize(File& file) const { +bool Page::serialize(FsFile& file) const { const uint32_t count = elements.size(); serialization::writePod(file, count); @@ -46,7 +46,7 @@ bool Page::serialize(File& file) const { return true; } -std::unique_ptr Page::deserialize(File& file) { +std::unique_ptr Page::deserialize(FsFile& file) { auto page = std::unique_ptr(new Page()); uint32_t count; diff --git a/lib/Epub/Epub/Page.h b/lib/Epub/Epub/Page.h index 841ef6b..2006194 100644 --- a/lib/Epub/Epub/Page.h +++ b/lib/Epub/Epub/Page.h @@ -1,5 +1,5 @@ #pragma once -#include +#include #include #include @@ -18,7 +18,7 @@ class PageElement { explicit PageElement(const int16_t xPos, const int16_t yPos) : xPos(xPos), yPos(yPos) {} virtual ~PageElement() = default; virtual void render(GfxRenderer& renderer, int fontId, int xOffset, int yOffset) = 0; - virtual bool serialize(File& file) = 0; + virtual bool serialize(FsFile& file) = 0; }; // a line from a block element @@ -29,8 +29,8 @@ class PageLine final : public PageElement { PageLine(std::shared_ptr block, const int16_t xPos, const int16_t yPos) : PageElement(xPos, yPos), block(std::move(block)) {} void render(GfxRenderer& renderer, int fontId, int xOffset, int yOffset) override; - bool serialize(File& file) override; - static std::unique_ptr deserialize(File& file); + bool serialize(FsFile& file) override; + static std::unique_ptr deserialize(FsFile& file); }; class Page { @@ -38,6 +38,6 @@ class Page { // the list of block index and line numbers on this page std::vector> elements; void render(GfxRenderer& renderer, int fontId, int xOffset, int yOffset) const; - bool serialize(File& file) const; - static std::unique_ptr deserialize(File& file); + bool serialize(FsFile& file) const; + static std::unique_ptr deserialize(FsFile& file); }; diff --git a/lib/Epub/Epub/Section.cpp b/lib/Epub/Epub/Section.cpp index 9cc19ea..b153f4f 100644 --- a/lib/Epub/Epub/Section.cpp +++ b/lib/Epub/Epub/Section.cpp @@ -1,7 +1,6 @@ #include "Section.h" -#include -#include +#include #include #include "Page.h" @@ -9,17 +8,17 @@ namespace { constexpr uint8_t SECTION_FILE_VERSION = 7; -constexpr size_t HEADER_SIZE = sizeof(uint8_t) + sizeof(int) + sizeof(float) + sizeof(bool) + sizeof(int) + - sizeof(int) + sizeof(int) + sizeof(size_t); +constexpr uint32_t HEADER_SIZE = sizeof(uint8_t) + sizeof(int) + sizeof(float) + sizeof(bool) + sizeof(int) + + sizeof(int) + sizeof(int) + sizeof(uint32_t); } // namespace -size_t Section::onPageComplete(std::unique_ptr page) { +uint32_t Section::onPageComplete(std::unique_ptr page) { if (!file) { Serial.printf("[%lu] [SCT] File not open for writing page %d\n", millis(), pageCount); return 0; } - const auto position = file.position(); + const uint32_t position = file.position(); if (!page->serialize(file)) { Serial.printf("[%lu] [SCT] Failed to serialize page %d\n", millis(), pageCount); return 0; @@ -38,7 +37,7 @@ void Section::writeSectionFileHeader(const int fontId, const float lineCompressi } static_assert(HEADER_SIZE == sizeof(SECTION_FILE_VERSION) + sizeof(fontId) + sizeof(lineCompression) + sizeof(extraParagraphSpacing) + sizeof(viewportWidth) + sizeof(viewportHeight) + - sizeof(pageCount) + sizeof(size_t), + sizeof(pageCount) + sizeof(uint32_t), "Header size mismatch"); serialization::writePod(file, SECTION_FILE_VERSION); serialization::writePod(file, fontId); @@ -47,12 +46,12 @@ void Section::writeSectionFileHeader(const int fontId, const float lineCompressi serialization::writePod(file, viewportWidth); serialization::writePod(file, viewportHeight); serialization::writePod(file, pageCount); // Placeholder for page count (will be initially 0 when written) - serialization::writePod(file, static_cast(0)); // Placeholder for LUT offset + serialization::writePod(file, static_cast(0)); // Placeholder for LUT offset } bool Section::loadSectionFile(const int fontId, const float lineCompression, const bool extraParagraphSpacing, const int viewportWidth, const int viewportHeight) { - if (!FsHelpers::openFileForRead("SCT", filePath, file)) { + if (!SdMan.openFileForRead("SCT", filePath, file)) { return false; } @@ -94,12 +93,12 @@ bool Section::loadSectionFile(const int fontId, const float lineCompression, con // Your updated class method (assuming you are using the 'SD' object, which is a wrapper for a specific filesystem) bool Section::clearCache() const { - if (!SD.exists(filePath.c_str())) { + if (!SdMan.exists(filePath.c_str())) { Serial.printf("[%lu] [SCT] Cache does not exist, no action needed\n", millis()); return true; } - if (!SD.remove(filePath.c_str())) { + if (!SdMan.remove(filePath.c_str())) { Serial.printf("[%lu] [SCT] Failed to clear cache\n", millis()); return false; } @@ -112,13 +111,19 @@ bool Section::createSectionFile(const int fontId, const float lineCompression, c const int viewportWidth, const int viewportHeight, const std::function& progressSetupFn, const std::function& progressFn) { - constexpr size_t MIN_SIZE_FOR_PROGRESS = 50 * 1024; // 50KB + constexpr uint32_t MIN_SIZE_FOR_PROGRESS = 50 * 1024; // 50KB const auto localPath = epub->getSpineItem(spineIndex).href; const auto tmpHtmlPath = epub->getCachePath() + "/.tmp_" + std::to_string(spineIndex) + ".html"; + // Create cache directory if it doesn't exist + { + const auto sectionsDir = epub->getCachePath() + "/sections"; + SdMan.mkdir(sectionsDir.c_str()); + } + // Retry logic for SD card timing issues bool success = false; - size_t fileSize = 0; + uint32_t fileSize = 0; for (int attempt = 0; attempt < 3 && !success; attempt++) { if (attempt > 0) { Serial.printf("[%lu] [SCT] Retrying stream (attempt %d)...\n", millis(), attempt + 1); @@ -126,12 +131,12 @@ bool Section::createSectionFile(const int fontId, const float lineCompression, c } // Remove any incomplete file from previous attempt before retrying - if (SD.exists(tmpHtmlPath.c_str())) { - SD.remove(tmpHtmlPath.c_str()); + if (SdMan.exists(tmpHtmlPath.c_str())) { + SdMan.remove(tmpHtmlPath.c_str()); } - File tmpHtml; - if (!FsHelpers::openFileForWrite("SCT", tmpHtmlPath, tmpHtml)) { + FsFile tmpHtml; + if (!SdMan.openFileForWrite("SCT", tmpHtmlPath, tmpHtml)) { continue; } success = epub->readItemContentsToStream(localPath, tmpHtml, 1024); @@ -139,8 +144,8 @@ bool Section::createSectionFile(const int fontId, const float lineCompression, c tmpHtml.close(); // If streaming failed, remove the incomplete file immediately - if (!success && SD.exists(tmpHtmlPath.c_str())) { - SD.remove(tmpHtmlPath.c_str()); + if (!success && SdMan.exists(tmpHtmlPath.c_str())) { + SdMan.remove(tmpHtmlPath.c_str()); Serial.printf("[%lu] [SCT] Removed incomplete temp file after failed attempt\n", millis()); } } @@ -157,11 +162,11 @@ bool Section::createSectionFile(const int fontId, const float lineCompression, c progressSetupFn(); } - if (!FsHelpers::openFileForWrite("SCT", filePath, file)) { + if (!SdMan.openFileForWrite("SCT", filePath, file)) { return false; } writeSectionFileHeader(fontId, lineCompression, extraParagraphSpacing, viewportWidth, viewportHeight); - std::vector lut = {}; + std::vector lut = {}; ChapterHtmlSlimParser visitor( tmpHtmlPath, renderer, fontId, lineCompression, extraParagraphSpacing, viewportWidth, viewportHeight, @@ -169,18 +174,18 @@ bool Section::createSectionFile(const int fontId, const float lineCompression, c progressFn); success = visitor.parseAndBuildPages(); - SD.remove(tmpHtmlPath.c_str()); + SdMan.remove(tmpHtmlPath.c_str()); if (!success) { Serial.printf("[%lu] [SCT] Failed to parse XML and build pages\n", millis()); file.close(); - SD.remove(filePath.c_str()); + SdMan.remove(filePath.c_str()); return false; } - const auto lutOffset = file.position(); + const uint32_t lutOffset = file.position(); bool hasFailedLutRecords = false; // Write LUT - for (const auto& pos : lut) { + for (const uint32_t& pos : lut) { if (pos == 0) { hasFailedLutRecords = true; break; @@ -191,12 +196,12 @@ bool Section::createSectionFile(const int fontId, const float lineCompression, c if (hasFailedLutRecords) { Serial.printf("[%lu] [SCT] Failed to write LUT due to invalid page positions\n", millis()); file.close(); - SD.remove(filePath.c_str()); + SdMan.remove(filePath.c_str()); return false; } // Go back and write LUT offset - file.seek(HEADER_SIZE - sizeof(size_t) - sizeof(pageCount)); + file.seek(HEADER_SIZE - sizeof(uint32_t) - sizeof(pageCount)); serialization::writePod(file, pageCount); serialization::writePod(file, lutOffset); file.close(); @@ -204,15 +209,15 @@ bool Section::createSectionFile(const int fontId, const float lineCompression, c } std::unique_ptr Section::loadPageFromSectionFile() { - if (!FsHelpers::openFileForRead("SCT", filePath, file)) { + if (!SdMan.openFileForRead("SCT", filePath, file)) { return nullptr; } - file.seek(HEADER_SIZE - sizeof(size_t)); - size_t lutOffset; + file.seek(HEADER_SIZE - sizeof(uint32_t)); + uint32_t lutOffset; serialization::readPod(file, lutOffset); - file.seek(lutOffset + sizeof(size_t) * currentPage); - size_t pagePos; + file.seek(lutOffset + sizeof(uint32_t) * currentPage); + uint32_t pagePos; serialization::readPod(file, pagePos); file.seek(pagePos); diff --git a/lib/Epub/Epub/Section.h b/lib/Epub/Epub/Section.h index 93e0d6c..bc2efab 100644 --- a/lib/Epub/Epub/Section.h +++ b/lib/Epub/Epub/Section.h @@ -12,11 +12,11 @@ class Section { const int spineIndex; GfxRenderer& renderer; std::string filePath; - File file; + FsFile file; void writeSectionFileHeader(int fontId, float lineCompression, bool extraParagraphSpacing, int viewportWidth, int viewportHeight); - size_t onPageComplete(std::unique_ptr page); + uint32_t onPageComplete(std::unique_ptr page); public: int pageCount = 0; diff --git a/lib/Epub/Epub/blocks/TextBlock.cpp b/lib/Epub/Epub/blocks/TextBlock.cpp index c20b37d..3119305 100644 --- a/lib/Epub/Epub/blocks/TextBlock.cpp +++ b/lib/Epub/Epub/blocks/TextBlock.cpp @@ -24,7 +24,7 @@ void TextBlock::render(const GfxRenderer& renderer, const int fontId, const int } } -bool TextBlock::serialize(File& file) const { +bool TextBlock::serialize(FsFile& file) const { if (words.size() != wordXpos.size() || words.size() != wordStyles.size()) { Serial.printf("[%lu] [TXB] Serialization failed: size mismatch (words=%u, xpos=%u, styles=%u)\n", millis(), words.size(), wordXpos.size(), wordStyles.size()); @@ -43,7 +43,7 @@ bool TextBlock::serialize(File& file) const { return true; } -std::unique_ptr TextBlock::deserialize(File& file) { +std::unique_ptr TextBlock::deserialize(FsFile& file) { uint32_t wc; std::list words; std::list wordXpos; diff --git a/lib/Epub/Epub/blocks/TextBlock.h b/lib/Epub/Epub/blocks/TextBlock.h index 9dfde60..95d8884 100644 --- a/lib/Epub/Epub/blocks/TextBlock.h +++ b/lib/Epub/Epub/blocks/TextBlock.h @@ -1,6 +1,6 @@ #pragma once #include -#include +#include #include #include @@ -36,6 +36,6 @@ class TextBlock final : public Block { // given a renderer works out where to break the words into lines void render(const GfxRenderer& renderer, int fontId, int x, int y) const; BlockType getType() override { return TEXT_BLOCK; } - bool serialize(File& file) const; - static std::unique_ptr deserialize(File& file); + bool serialize(FsFile& file) const; + static std::unique_ptr deserialize(FsFile& file); }; diff --git a/lib/Epub/Epub/parsers/ChapterHtmlSlimParser.cpp b/lib/Epub/Epub/parsers/ChapterHtmlSlimParser.cpp index b2dc2c0..a2b6189 100644 --- a/lib/Epub/Epub/parsers/ChapterHtmlSlimParser.cpp +++ b/lib/Epub/Epub/parsers/ChapterHtmlSlimParser.cpp @@ -1,8 +1,8 @@ #include "ChapterHtmlSlimParser.h" -#include #include #include +#include #include #include "../Page.h" @@ -218,8 +218,8 @@ bool ChapterHtmlSlimParser::parseAndBuildPages() { return false; } - File file; - if (!FsHelpers::openFileForRead("EHP", filepath, file)) { + FsFile file; + if (!SdMan.openFileForRead("EHP", filepath, file)) { XML_ParserFree(parser); return false; } diff --git a/lib/Epub/Epub/parsers/ContentOpfParser.cpp b/lib/Epub/Epub/parsers/ContentOpfParser.cpp index a62b2d0..ae964ce 100644 --- a/lib/Epub/Epub/parsers/ContentOpfParser.cpp +++ b/lib/Epub/Epub/parsers/ContentOpfParser.cpp @@ -35,8 +35,8 @@ ContentOpfParser::~ContentOpfParser() { if (tempItemStore) { tempItemStore.close(); } - if (SD.exists((cachePath + itemCacheFile).c_str())) { - SD.remove((cachePath + itemCacheFile).c_str()); + if (SdMan.exists((cachePath + itemCacheFile).c_str())) { + SdMan.remove((cachePath + itemCacheFile).c_str()); } } @@ -104,7 +104,7 @@ void XMLCALL ContentOpfParser::startElement(void* userData, const XML_Char* name if (self->state == IN_PACKAGE && (strcmp(name, "manifest") == 0 || strcmp(name, "opf:manifest") == 0)) { self->state = IN_MANIFEST; - if (!FsHelpers::openFileForWrite("COF", self->cachePath + itemCacheFile, self->tempItemStore)) { + if (!SdMan.openFileForWrite("COF", self->cachePath + itemCacheFile, self->tempItemStore)) { Serial.printf( "[%lu] [COF] Couldn't open temp items file for writing. This is probably going to be a fatal error.\n", millis()); @@ -114,7 +114,7 @@ void XMLCALL ContentOpfParser::startElement(void* userData, const XML_Char* name if (self->state == IN_PACKAGE && (strcmp(name, "spine") == 0 || strcmp(name, "opf:spine") == 0)) { self->state = IN_SPINE; - if (!FsHelpers::openFileForRead("COF", self->cachePath + itemCacheFile, self->tempItemStore)) { + if (!SdMan.openFileForRead("COF", self->cachePath + itemCacheFile, self->tempItemStore)) { Serial.printf( "[%lu] [COF] Couldn't open temp items file for reading. This is probably going to be a fatal error.\n", millis()); diff --git a/lib/Epub/Epub/parsers/ContentOpfParser.h b/lib/Epub/Epub/parsers/ContentOpfParser.h index 5415de6..2a7dd48 100644 --- a/lib/Epub/Epub/parsers/ContentOpfParser.h +++ b/lib/Epub/Epub/parsers/ContentOpfParser.h @@ -22,7 +22,7 @@ class ContentOpfParser final : public Print { XML_Parser parser = nullptr; ParserState state = START; BookMetadataCache* cache; - File tempItemStore; + FsFile tempItemStore; std::string coverItemId; static void startElement(void* userData, const XML_Char* name, const XML_Char** atts); diff --git a/lib/FsHelpers/FsHelpers.cpp b/lib/FsHelpers/FsHelpers.cpp index c8b59ce..4bd8fbf 100644 --- a/lib/FsHelpers/FsHelpers.cpp +++ b/lib/FsHelpers/FsHelpers.cpp @@ -1,81 +1,7 @@ #include "FsHelpers.h" -#include - #include -bool FsHelpers::openFileForRead(const char* moduleName, const char* path, File& file) { - if (!SD.exists(path)) { - Serial.printf("[%lu] [%s] File does not exist: %s\n", millis(), moduleName, path); - return false; - } - - file = SD.open(path, FILE_READ); - if (!file) { - Serial.printf("[%lu] [%s] Failed to open file for reading: %s\n", millis(), moduleName, path); - return false; - } - return true; -} - -bool FsHelpers::openFileForRead(const char* moduleName, const std::string& path, File& file) { - return openFileForRead(moduleName, path.c_str(), file); -} - -bool FsHelpers::openFileForRead(const char* moduleName, const String& path, File& file) { - return openFileForRead(moduleName, path.c_str(), file); -} - -bool FsHelpers::openFileForWrite(const char* moduleName, const char* path, File& file) { - file = SD.open(path, FILE_WRITE, true); - if (!file) { - Serial.printf("[%lu] [%s] Failed to open file for writing: %s\n", millis(), moduleName, path); - return false; - } - return true; -} - -bool FsHelpers::openFileForWrite(const char* moduleName, const std::string& path, File& file) { - return openFileForWrite(moduleName, path.c_str(), file); -} - -bool FsHelpers::openFileForWrite(const char* moduleName, const String& path, File& file) { - return openFileForWrite(moduleName, path.c_str(), file); -} - -bool FsHelpers::removeDir(const char* path) { - // 1. Open the directory - File dir = SD.open(path); - if (!dir) { - return false; - } - if (!dir.isDirectory()) { - return false; - } - - File file = dir.openNextFile(); - while (file) { - String filePath = path; - if (!filePath.endsWith("/")) { - filePath += "/"; - } - filePath += file.name(); - - if (file.isDirectory()) { - if (!removeDir(filePath.c_str())) { - return false; - } - } else { - if (!SD.remove(filePath.c_str())) { - return false; - } - } - file = dir.openNextFile(); - } - - return SD.rmdir(path); -} - std::string FsHelpers::normalisePath(const std::string& path) { std::vector components; std::string component; diff --git a/lib/FsHelpers/FsHelpers.h b/lib/FsHelpers/FsHelpers.h index 0dff145..5bb4218 100644 --- a/lib/FsHelpers/FsHelpers.h +++ b/lib/FsHelpers/FsHelpers.h @@ -1,14 +1,7 @@ #pragma once -#include +#include class FsHelpers { public: - static bool openFileForRead(const char* moduleName, const char* path, File& file); - static bool openFileForRead(const char* moduleName, const std::string& path, File& file); - static bool openFileForRead(const char* moduleName, const String& path, File& file); - static bool openFileForWrite(const char* moduleName, const char* path, File& file); - static bool openFileForWrite(const char* moduleName, const std::string& path, File& file); - static bool openFileForWrite(const char* moduleName, const String& path, File& file); - static bool removeDir(const char* path); static std::string normalisePath(const std::string& path); }; diff --git a/lib/GfxRenderer/Bitmap.cpp b/lib/GfxRenderer/Bitmap.cpp index a034c75..7c46df1 100644 --- a/lib/GfxRenderer/Bitmap.cpp +++ b/lib/GfxRenderer/Bitmap.cpp @@ -123,7 +123,7 @@ Bitmap::~Bitmap() { delete[] errorNextRow; } -uint16_t Bitmap::readLE16(File& f) { +uint16_t Bitmap::readLE16(FsFile& f) { const int c0 = f.read(); const int c1 = f.read(); const auto b0 = static_cast(c0 < 0 ? 0 : c0); @@ -131,7 +131,7 @@ uint16_t Bitmap::readLE16(File& f) { return static_cast(b0) | (static_cast(b1) << 8); } -uint32_t Bitmap::readLE32(File& f) { +uint32_t Bitmap::readLE32(FsFile& f) { const int c0 = f.read(); const int c1 = f.read(); const int c2 = f.read(); @@ -192,7 +192,7 @@ BmpReaderError Bitmap::parseHeaders() { const uint16_t bfType = readLE16(file); if (bfType != 0x4D42) return BmpReaderError::NotBMP; - file.seek(8, SeekCur); + file.seekCur(8); bfOffBits = readLE32(file); // --- DIB HEADER --- @@ -214,10 +214,10 @@ BmpReaderError Bitmap::parseHeaders() { // Allow BI_RGB (0) for all, and BI_BITFIELDS (3) for 32bpp which is common for BGRA masks. if (!(comp == 0 || (bpp == 32 && comp == 3))) return BmpReaderError::UnsupportedCompression; - file.seek(12, SeekCur); // biSizeImage, biXPelsPerMeter, biYPelsPerMeter + file.seekCur(12); // biSizeImage, biXPelsPerMeter, biYPelsPerMeter const uint32_t colorsUsed = readLE32(file); if (colorsUsed > 256u) return BmpReaderError::PaletteTooLarge; - file.seek(4, SeekCur); // biClrImportant + file.seekCur(4); // biClrImportant if (width <= 0 || height <= 0) return BmpReaderError::BadDimensions; diff --git a/lib/GfxRenderer/Bitmap.h b/lib/GfxRenderer/Bitmap.h index 744cb61..7e79964 100644 --- a/lib/GfxRenderer/Bitmap.h +++ b/lib/GfxRenderer/Bitmap.h @@ -1,6 +1,6 @@ #pragma once -#include +#include enum class BmpReaderError : uint8_t { Ok = 0, @@ -28,7 +28,7 @@ class Bitmap { public: static const char* errorToString(BmpReaderError err); - explicit Bitmap(File& file) : file(file) {} + explicit Bitmap(FsFile& file) : file(file) {} ~Bitmap(); BmpReaderError parseHeaders(); BmpReaderError readRow(uint8_t* data, uint8_t* rowBuffer, int rowY) const; @@ -40,10 +40,10 @@ class Bitmap { int getRowBytes() const { return rowBytes; } private: - static uint16_t readLE16(File& f); - static uint32_t readLE32(File& f); + static uint16_t readLE16(FsFile& f); + static uint32_t readLE32(FsFile& f); - File& file; + FsFile& file; int width = 0; int height = 0; bool topDown = false; diff --git a/lib/GfxRenderer/GfxRenderer.h b/lib/GfxRenderer/GfxRenderer.h index 241c76e..f6f5fe0 100644 --- a/lib/GfxRenderer/GfxRenderer.h +++ b/lib/GfxRenderer/GfxRenderer.h @@ -2,7 +2,6 @@ #include #include -#include #include diff --git a/lib/JpegToBmpConverter/JpegToBmpConverter.cpp b/lib/JpegToBmpConverter/JpegToBmpConverter.cpp index 0a19701..9c61ef0 100644 --- a/lib/JpegToBmpConverter/JpegToBmpConverter.cpp +++ b/lib/JpegToBmpConverter/JpegToBmpConverter.cpp @@ -1,5 +1,7 @@ #include "JpegToBmpConverter.h" +#include +#include #include #include @@ -7,7 +9,7 @@ // Context structure for picojpeg callback struct JpegReadContext { - File& file; + FsFile& file; uint8_t buffer[512]; size_t bufferPos; size_t bufferFilled; @@ -426,7 +428,7 @@ unsigned char JpegToBmpConverter::jpegReadCallback(unsigned char* pBuf, const un } // Core function: Convert JPEG file to 2-bit BMP -bool JpegToBmpConverter::jpegFileToBmpStream(File& jpegFile, Print& bmpOut) { +bool JpegToBmpConverter::jpegFileToBmpStream(FsFile& jpegFile, Print& bmpOut) { Serial.printf("[%lu] [JPG] Converting JPEG to BMP\n", millis()); // Setup context for picojpeg callback diff --git a/lib/JpegToBmpConverter/JpegToBmpConverter.h b/lib/JpegToBmpConverter/JpegToBmpConverter.h index 1cb76e5..f61bd8e 100644 --- a/lib/JpegToBmpConverter/JpegToBmpConverter.h +++ b/lib/JpegToBmpConverter/JpegToBmpConverter.h @@ -1,7 +1,7 @@ #pragma once -#include - +class FsFile; +class Print; class ZipFile; class JpegToBmpConverter { @@ -11,5 +11,5 @@ class JpegToBmpConverter { unsigned char* pBytes_actually_read, void* pCallback_data); public: - static bool jpegFileToBmpStream(File& jpegFile, Print& bmpOut); + static bool jpegFileToBmpStream(FsFile& jpegFile, Print& bmpOut); }; diff --git a/lib/Serialization/Serialization.h b/lib/Serialization/Serialization.h index e6bcbf2..afea564 100644 --- a/lib/Serialization/Serialization.h +++ b/lib/Serialization/Serialization.h @@ -1,5 +1,5 @@ #pragma once -#include +#include #include @@ -10,7 +10,7 @@ static void writePod(std::ostream& os, const T& value) { } template -static void writePod(File& file, const T& value) { +static void writePod(FsFile& file, const T& value) { file.write(reinterpret_cast(&value), sizeof(T)); } @@ -20,7 +20,7 @@ static void readPod(std::istream& is, T& value) { } template -static void readPod(File& file, T& value) { +static void readPod(FsFile& file, T& value) { file.read(reinterpret_cast(&value), sizeof(T)); } @@ -30,7 +30,7 @@ static void writeString(std::ostream& os, const std::string& s) { os.write(s.data(), len); } -static void writeString(File& file, const std::string& s) { +static void writeString(FsFile& file, const std::string& s) { const uint32_t len = s.size(); writePod(file, len); file.write(reinterpret_cast(s.data()), len); @@ -43,10 +43,10 @@ static void readString(std::istream& is, std::string& s) { is.read(&s[0], len); } -static void readString(File& file, std::string& s) { +static void readString(FsFile& file, std::string& s) { uint32_t len; readPod(file, len); s.resize(len); - file.read(reinterpret_cast(&s[0]), len); + file.read(&s[0], len); } } // namespace serialization diff --git a/lib/Xtc/Xtc.cpp b/lib/Xtc/Xtc.cpp index 9e948ff..8f79c9d 100644 --- a/lib/Xtc/Xtc.cpp +++ b/lib/Xtc/Xtc.cpp @@ -9,7 +9,7 @@ #include #include -#include +#include bool Xtc::load() { Serial.printf("[%lu] [XTC] Loading XTC: %s\n", millis(), filepath.c_str()); @@ -31,12 +31,12 @@ bool Xtc::load() { } bool Xtc::clearCache() const { - if (!SD.exists(cachePath.c_str())) { + if (!SdMan.exists(cachePath.c_str())) { Serial.printf("[%lu] [XTC] Cache does not exist, no action needed\n", millis()); return true; } - if (!FsHelpers::removeDir(cachePath.c_str())) { + if (!SdMan.removeDir(cachePath.c_str())) { Serial.printf("[%lu] [XTC] Failed to clear cache\n", millis()); return false; } @@ -46,17 +46,17 @@ bool Xtc::clearCache() const { } void Xtc::setupCacheDir() const { - if (SD.exists(cachePath.c_str())) { + if (SdMan.exists(cachePath.c_str())) { return; } // Create directories recursively for (size_t i = 1; i < cachePath.length(); i++) { if (cachePath[i] == '/') { - SD.mkdir(cachePath.substr(0, i).c_str()); + SdMan.mkdir(cachePath.substr(0, i).c_str()); } } - SD.mkdir(cachePath.c_str()); + SdMan.mkdir(cachePath.c_str()); } std::string Xtc::getTitle() const { @@ -106,7 +106,7 @@ std::string Xtc::getCoverBmpPath() const { return cachePath + "/cover.bmp"; } bool Xtc::generateCoverBmp() const { // Already generated - if (SD.exists(getCoverBmpPath().c_str())) { + if (SdMan.exists(getCoverBmpPath().c_str())) { return true; } @@ -157,8 +157,8 @@ bool Xtc::generateCoverBmp() const { } // Create BMP file - File coverBmp; - if (!FsHelpers::openFileForWrite("XTC", getCoverBmpPath(), coverBmp)) { + FsFile coverBmp; + if (!SdMan.openFileForWrite("XTC", getCoverBmpPath(), coverBmp)) { Serial.printf("[%lu] [XTC] Failed to create cover BMP file\n", millis()); free(pageBuffer); return false; diff --git a/lib/Xtc/Xtc/XtcParser.cpp b/lib/Xtc/Xtc/XtcParser.cpp index b1f4f90..c33e719 100644 --- a/lib/Xtc/Xtc/XtcParser.cpp +++ b/lib/Xtc/Xtc/XtcParser.cpp @@ -9,6 +9,7 @@ #include #include +#include #include @@ -33,7 +34,7 @@ XtcError XtcParser::open(const char* filepath) { } // Open file - if (!FsHelpers::openFileForRead("XTC", filepath, m_file)) { + if (!SdMan.openFileForRead("XTC", filepath, m_file)) { m_lastError = XtcError::FILE_NOT_FOUND; return m_lastError; } @@ -419,8 +420,8 @@ XtcError XtcParser::loadPageStreaming(uint32_t pageIndex, } bool XtcParser::isValidXtcFile(const char* filepath) { - File file = SD.open(filepath, FILE_READ); - if (!file) { + FsFile file; + if (!SdMan.openFileForRead("XTC", filepath, file)) { return false; } diff --git a/lib/Xtc/Xtc/XtcParser.h b/lib/Xtc/Xtc/XtcParser.h index 25f1c33..2d2b780 100644 --- a/lib/Xtc/Xtc/XtcParser.h +++ b/lib/Xtc/Xtc/XtcParser.h @@ -7,7 +7,7 @@ #pragma once -#include +#include #include #include @@ -80,7 +80,7 @@ class XtcParser { XtcError getLastError() const { return m_lastError; } private: - File m_file; + FsFile m_file; bool m_isOpen; XtcHeader m_header; std::vector m_pageTable; diff --git a/lib/ZipFile/ZipFile.cpp b/lib/ZipFile/ZipFile.cpp index 23cf0e8..2a97858 100644 --- a/lib/ZipFile/ZipFile.cpp +++ b/lib/ZipFile/ZipFile.cpp @@ -1,7 +1,7 @@ #include "ZipFile.h" -#include #include +#include #include bool inflateOneShot(const uint8_t* inputBuf, const size_t deflatedSize, uint8_t* outputBuf, const size_t inflatedSize) { @@ -49,29 +49,29 @@ bool ZipFile::loadAllFileStatSlims() { fileStatSlimCache.reserve(zipDetails.totalEntries); while (file.available()) { - file.read(reinterpret_cast(&sig), 4); + file.read(&sig, 4); if (sig != 0x02014b50) break; // End of list FileStatSlim fileStat = {}; - file.seek(6, SeekCur); - file.read(reinterpret_cast(&fileStat.method), 2); - file.seek(8, SeekCur); - file.read(reinterpret_cast(&fileStat.compressedSize), 4); - file.read(reinterpret_cast(&fileStat.uncompressedSize), 4); + file.seekCur(6); + file.read(&fileStat.method, 2); + file.seekCur(8); + file.read(&fileStat.compressedSize, 4); + file.read(&fileStat.uncompressedSize, 4); uint16_t nameLen, m, k; - file.read(reinterpret_cast(&nameLen), 2); - file.read(reinterpret_cast(&m), 2); - file.read(reinterpret_cast(&k), 2); - file.seek(8, SeekCur); - file.read(reinterpret_cast(&fileStat.localHeaderOffset), 4); - file.read(reinterpret_cast(itemName), nameLen); + file.read(&nameLen, 2); + file.read(&m, 2); + file.read(&k, 2); + file.seekCur(8); + file.read(&fileStat.localHeaderOffset, 4); + file.read(itemName, nameLen); itemName[nameLen] = '\0'; fileStatSlimCache.emplace(itemName, fileStat); // Skip the rest of this entry (extra field + comment) - file.seek(m + k, SeekCur); + file.seekCur(m + k); } if (!wasOpen) { @@ -109,21 +109,21 @@ bool ZipFile::loadFileStatSlim(const char* filename, FileStatSlim* fileStat) { bool found = false; while (file.available()) { - file.read(reinterpret_cast(&sig), 4); + file.read(&sig, 4); if (sig != 0x02014b50) break; // End of list - file.seek(6, SeekCur); - file.read(reinterpret_cast(&fileStat->method), 2); - file.seek(8, SeekCur); - file.read(reinterpret_cast(&fileStat->compressedSize), 4); - file.read(reinterpret_cast(&fileStat->uncompressedSize), 4); + file.seekCur(6); + file.read(&fileStat->method, 2); + file.seekCur(8); + file.read(&fileStat->compressedSize, 4); + file.read(&fileStat->uncompressedSize, 4); uint16_t nameLen, m, k; - file.read(reinterpret_cast(&nameLen), 2); - file.read(reinterpret_cast(&m), 2); - file.read(reinterpret_cast(&k), 2); - file.seek(8, SeekCur); - file.read(reinterpret_cast(&fileStat->localHeaderOffset), 4); - file.read(reinterpret_cast(itemName), nameLen); + file.read(&nameLen, 2); + file.read(&m, 2); + file.read(&k, 2); + file.seekCur(8); + file.read(&fileStat->localHeaderOffset, 4); + file.read(itemName, nameLen); itemName[nameLen] = '\0'; if (strcmp(itemName, filename) == 0) { @@ -132,7 +132,7 @@ bool ZipFile::loadFileStatSlim(const char* filename, FileStatSlim* fileStat) { } // Skip the rest of this entry (extra field + comment) - file.seek(m + k, SeekCur); + file.seekCur(m + k); } if (!wasOpen) { @@ -243,7 +243,7 @@ bool ZipFile::loadZipDetails() { } bool ZipFile::open() { - if (!FsHelpers::openFileForRead("ZIP", filePath, file)) { + if (!SdMan.openFileForRead("ZIP", filePath, file)) { return false; } return true; diff --git a/lib/ZipFile/ZipFile.h b/lib/ZipFile/ZipFile.h index 4758f16..0144ed4 100644 --- a/lib/ZipFile/ZipFile.h +++ b/lib/ZipFile/ZipFile.h @@ -1,5 +1,5 @@ #pragma once -#include +#include #include #include @@ -21,7 +21,7 @@ class ZipFile { private: const std::string& filePath; - File file; + FsFile file; ZipDetails zipDetails = {0, 0, false}; std::unordered_map fileStatSlimCache; diff --git a/open-x4-sdk b/open-x4-sdk index 98a5aa1..bd4e670 160000 --- a/open-x4-sdk +++ b/open-x4-sdk @@ -1 +1 @@ -Subproject commit 98a5aa1f8969ccd317c9b45bf0fa84b6c82e167f +Subproject commit bd4e6707503ab9c97d13ee0d8f8c69e9ff03cd12 diff --git a/platformio.ini b/platformio.ini index fb520e5..142307c 100644 --- a/platformio.ini +++ b/platformio.ini @@ -21,6 +21,7 @@ build_flags = -DARDUINO_USB_CDC_ON_BOOT=1 -DMINIZ_NO_ZLIB_COMPATIBLE_NAMES=1 -DEINK_DISPLAY_SINGLE_BUFFER_MODE=1 + -DDISABLE_FS_H_WARNING=1 # https://libexpat.github.io/doc/api/latest/#XML_GE -DXML_GE=0 -DXML_CONTEXT_BYTES=1024 @@ -39,6 +40,7 @@ lib_deps = BatteryMonitor=symlink://open-x4-sdk/libs/hardware/BatteryMonitor InputManager=symlink://open-x4-sdk/libs/hardware/InputManager EInkDisplay=symlink://open-x4-sdk/libs/display/EInkDisplay + SDCardManager=symlink://open-x4-sdk/libs/hardware/SDCardManager ArduinoJson @ 7.4.2 QRCode @ 0.0.1 diff --git a/src/CrossPointSettings.cpp b/src/CrossPointSettings.cpp index 41c3322..0f2f13e 100644 --- a/src/CrossPointSettings.cpp +++ b/src/CrossPointSettings.cpp @@ -1,8 +1,7 @@ #include "CrossPointSettings.h" -#include #include -#include +#include #include // Initialize the static instance @@ -17,10 +16,10 @@ constexpr char SETTINGS_FILE[] = "/.crosspoint/settings.bin"; bool CrossPointSettings::saveToFile() const { // Make sure the directory exists - SD.mkdir("/.crosspoint"); + SdMan.mkdir("/.crosspoint"); - File outputFile; - if (!FsHelpers::openFileForWrite("CPS", SETTINGS_FILE, outputFile)) { + FsFile outputFile; + if (!SdMan.openFileForWrite("CPS", SETTINGS_FILE, outputFile)) { return false; } @@ -40,8 +39,8 @@ bool CrossPointSettings::saveToFile() const { } bool CrossPointSettings::loadFromFile() { - File inputFile; - if (!FsHelpers::openFileForRead("CPS", SETTINGS_FILE, inputFile)) { + FsFile inputFile; + if (!SdMan.openFileForRead("CPS", SETTINGS_FILE, inputFile)) { return false; } diff --git a/src/CrossPointState.cpp b/src/CrossPointState.cpp index 9010822..31cb2ac 100644 --- a/src/CrossPointState.cpp +++ b/src/CrossPointState.cpp @@ -1,7 +1,7 @@ #include "CrossPointState.h" -#include #include +#include #include namespace { @@ -12,8 +12,8 @@ constexpr char STATE_FILE[] = "/.crosspoint/state.bin"; CrossPointState CrossPointState::instance; bool CrossPointState::saveToFile() const { - File outputFile; - if (!FsHelpers::openFileForWrite("CPS", STATE_FILE, outputFile)) { + FsFile outputFile; + if (!SdMan.openFileForWrite("CPS", STATE_FILE, outputFile)) { return false; } @@ -24,8 +24,8 @@ bool CrossPointState::saveToFile() const { } bool CrossPointState::loadFromFile() { - File inputFile; - if (!FsHelpers::openFileForRead("CPS", STATE_FILE, inputFile)) { + FsFile inputFile; + if (!SdMan.openFileForRead("CPS", STATE_FILE, inputFile)) { return false; } diff --git a/src/MappedInputManager.cpp b/src/MappedInputManager.cpp index 7ee2295..17be4cf 100644 --- a/src/MappedInputManager.cpp +++ b/src/MappedInputManager.cpp @@ -1,5 +1,7 @@ #include "MappedInputManager.h" +#include "CrossPointSettings.h" + decltype(InputManager::BTN_BACK) MappedInputManager::mapButton(const Button button) const { const auto frontLayout = static_cast(SETTINGS.frontButtonLayout); const auto sideLayout = static_cast(SETTINGS.sideButtonLayout); diff --git a/src/MappedInputManager.h b/src/MappedInputManager.h index 138d793..62065fe 100644 --- a/src/MappedInputManager.h +++ b/src/MappedInputManager.h @@ -2,8 +2,6 @@ #include -#include "CrossPointSettings.h" - class MappedInputManager { public: enum class Button { Back, Confirm, Left, Right, Up, Down, Power, PageBack, PageForward }; diff --git a/src/WifiCredentialStore.cpp b/src/WifiCredentialStore.cpp index 856098f..be865b8 100644 --- a/src/WifiCredentialStore.cpp +++ b/src/WifiCredentialStore.cpp @@ -1,8 +1,7 @@ #include "WifiCredentialStore.h" -#include #include -#include +#include #include // Initialize the static instance @@ -30,10 +29,10 @@ void WifiCredentialStore::obfuscate(std::string& data) const { bool WifiCredentialStore::saveToFile() const { // Make sure the directory exists - SD.mkdir("/.crosspoint"); + SdMan.mkdir("/.crosspoint"); - File file; - if (!FsHelpers::openFileForWrite("WCS", WIFI_FILE, file)) { + FsFile file; + if (!SdMan.openFileForWrite("WCS", WIFI_FILE, file)) { return false; } @@ -60,8 +59,8 @@ bool WifiCredentialStore::saveToFile() const { } bool WifiCredentialStore::loadFromFile() { - File file; - if (!FsHelpers::openFileForRead("WCS", WIFI_FILE, file)) { + FsFile file; + if (!SdMan.openFileForRead("WCS", WIFI_FILE, file)) { return false; } diff --git a/src/activities/Activity.h b/src/activities/Activity.h index 66dfde1..aad5591 100644 --- a/src/activities/Activity.h +++ b/src/activities/Activity.h @@ -5,8 +5,7 @@ #include #include -#include "../MappedInputManager.h" - +class MappedInputManager; class GfxRenderer; class Activity { diff --git a/src/activities/boot_sleep/SleepActivity.cpp b/src/activities/boot_sleep/SleepActivity.cpp index fdf84b6..fa60523 100644 --- a/src/activities/boot_sleep/SleepActivity.cpp +++ b/src/activities/boot_sleep/SleepActivity.cpp @@ -3,7 +3,7 @@ #include #include #include -#include +#include #include #include @@ -58,29 +58,31 @@ void SleepActivity::renderPopup(const char* message) const { void SleepActivity::renderCustomSleepScreen() const { // Check if we have a /sleep directory - auto dir = SD.open("/sleep"); + auto dir = SdMan.open("/sleep"); if (dir && dir.isDirectory()) { std::vector files; + char name[128]; // collect all valid BMP files - for (File file = dir.openNextFile(); file; file = dir.openNextFile()) { + for (auto file = dir.openNextFile(); file; file = dir.openNextFile()) { if (file.isDirectory()) { file.close(); continue; } - auto filename = std::string(file.name()); + file.getName(name, sizeof(name)); + auto filename = std::string(name); if (filename[0] == '.') { file.close(); continue; } if (filename.substr(filename.length() - 4) != ".bmp") { - Serial.printf("[%lu] [SLP] Skipping non-.bmp file name: %s\n", millis(), file.name()); + Serial.printf("[%lu] [SLP] Skipping non-.bmp file name: %s\n", millis(), name); file.close(); continue; } Bitmap bitmap(file); if (bitmap.parseHeaders() != BmpReaderError::Ok) { - Serial.printf("[%lu] [SLP] Skipping invalid BMP file: %s\n", millis(), file.name()); + Serial.printf("[%lu] [SLP] Skipping invalid BMP file: %s\n", millis(), name); file.close(); continue; } @@ -92,8 +94,8 @@ void SleepActivity::renderCustomSleepScreen() const { // Generate a random number between 1 and numFiles const auto randomFileIndex = random(numFiles); const auto filename = "/sleep/" + files[randomFileIndex]; - File file; - if (FsHelpers::openFileForRead("SLP", filename, file)) { + FsFile file; + if (SdMan.openFileForRead("SLP", filename, file)) { Serial.printf("[%lu] [SLP] Randomly loading: /sleep/%s\n", millis(), files[randomFileIndex].c_str()); delay(100); Bitmap bitmap(file); @@ -109,8 +111,8 @@ void SleepActivity::renderCustomSleepScreen() const { // Look for sleep.bmp on the root of the sd card to determine if we should // render a custom sleep screen instead of the default. - File file; - if (FsHelpers::openFileForRead("SLP", "/sleep.bmp", file)) { + FsFile file; + if (SdMan.openFileForRead("SLP", "/sleep.bmp", file)) { Bitmap bitmap(file); if (bitmap.parseHeaders() == BmpReaderError::Ok) { Serial.printf("[%lu] [SLP] Loading: /sleep.bmp\n", millis()); @@ -224,8 +226,8 @@ void SleepActivity::renderCoverSleepScreen() const { coverBmpPath = lastEpub.getCoverBmpPath(); } - File file; - if (FsHelpers::openFileForRead("SLP", coverBmpPath, file)) { + FsFile file; + if (SdMan.openFileForRead("SLP", coverBmpPath, file)) { Bitmap bitmap(file); if (bitmap.parseHeaders() == BmpReaderError::Ok) { renderBitmapSleepScreen(bitmap); diff --git a/src/activities/home/HomeActivity.cpp b/src/activities/home/HomeActivity.cpp index 1dee518..8291826 100644 --- a/src/activities/home/HomeActivity.cpp +++ b/src/activities/home/HomeActivity.cpp @@ -1,10 +1,10 @@ #include "HomeActivity.h" #include -#include -#include +#include #include "CrossPointState.h" +#include "MappedInputManager.h" #include "config.h" void HomeActivity::taskTrampoline(void* param) { @@ -20,7 +20,7 @@ void HomeActivity::onEnter() { renderingMutex = xSemaphoreCreateMutex(); // Check if we have a book to continue reading - hasContinueReading = !APP_STATE.openEpubPath.empty() && SD.exists(APP_STATE.openEpubPath.c_str()); + hasContinueReading = !APP_STATE.openEpubPath.empty() && SdMan.exists(APP_STATE.openEpubPath.c_str()); selectorIndex = 0; diff --git a/src/activities/network/CrossPointWebServerActivity.cpp b/src/activities/network/CrossPointWebServerActivity.cpp index eda20a8..a0db3c3 100644 --- a/src/activities/network/CrossPointWebServerActivity.cpp +++ b/src/activities/network/CrossPointWebServerActivity.cpp @@ -3,12 +3,12 @@ #include #include #include -#include #include #include #include +#include "MappedInputManager.h" #include "NetworkModeSelectionActivity.h" #include "WifiSelectionActivity.h" #include "config.h" diff --git a/src/activities/network/NetworkModeSelectionActivity.cpp b/src/activities/network/NetworkModeSelectionActivity.cpp index 0cc3594..57afc6e 100644 --- a/src/activities/network/NetworkModeSelectionActivity.cpp +++ b/src/activities/network/NetworkModeSelectionActivity.cpp @@ -1,8 +1,8 @@ #include "NetworkModeSelectionActivity.h" #include -#include +#include "MappedInputManager.h" #include "config.h" namespace { diff --git a/src/activities/network/WifiSelectionActivity.cpp b/src/activities/network/WifiSelectionActivity.cpp index 9f0e502..8977a78 100644 --- a/src/activities/network/WifiSelectionActivity.cpp +++ b/src/activities/network/WifiSelectionActivity.cpp @@ -5,6 +5,7 @@ #include +#include "MappedInputManager.h" #include "WifiCredentialStore.h" #include "activities/util/KeyboardEntryActivity.h" #include "config.h" diff --git a/src/activities/reader/EpubReaderActivity.cpp b/src/activities/reader/EpubReaderActivity.cpp index 6864a56..ab03550 100644 --- a/src/activities/reader/EpubReaderActivity.cpp +++ b/src/activities/reader/EpubReaderActivity.cpp @@ -3,12 +3,13 @@ #include #include #include -#include +#include #include "Battery.h" #include "CrossPointSettings.h" #include "CrossPointState.h" #include "EpubReaderChapterSelectionActivity.h" +#include "MappedInputManager.h" #include "config.h" namespace { @@ -54,8 +55,8 @@ void EpubReaderActivity::onEnter() { epub->setupCacheDir(); - File f; - if (FsHelpers::openFileForRead("ERS", epub->getCachePath() + "/progress.bin", f)) { + FsFile f; + if (SdMan.openFileForRead("ERS", epub->getCachePath() + "/progress.bin", f)) { uint8_t data[4]; if (f.read(data, 4) == 4) { currentSpineIndex = data[0] + (data[1] << 8); @@ -346,8 +347,8 @@ void EpubReaderActivity::renderScreen() { Serial.printf("[%lu] [ERS] Rendered page in %dms\n", millis(), millis() - start); } - File f; - if (FsHelpers::openFileForWrite("ERS", epub->getCachePath() + "/progress.bin", f)) { + FsFile f; + if (SdMan.openFileForWrite("ERS", epub->getCachePath() + "/progress.bin", f)) { uint8_t data[4]; data[0] = currentSpineIndex & 0xFF; data[1] = (currentSpineIndex >> 8) & 0xFF; diff --git a/src/activities/reader/EpubReaderChapterSelectionActivity.cpp b/src/activities/reader/EpubReaderChapterSelectionActivity.cpp index dc0bee5..8245ed2 100644 --- a/src/activities/reader/EpubReaderChapterSelectionActivity.cpp +++ b/src/activities/reader/EpubReaderChapterSelectionActivity.cpp @@ -1,9 +1,8 @@ #include "EpubReaderChapterSelectionActivity.h" #include -#include -#include +#include "MappedInputManager.h" #include "config.h" namespace { diff --git a/src/activities/reader/FileSelectionActivity.cpp b/src/activities/reader/FileSelectionActivity.cpp index 447db6d..45ef6ef 100644 --- a/src/activities/reader/FileSelectionActivity.cpp +++ b/src/activities/reader/FileSelectionActivity.cpp @@ -1,9 +1,9 @@ #include "FileSelectionActivity.h" #include -#include -#include +#include +#include "MappedInputManager.h" #include "config.h" namespace { @@ -30,17 +30,19 @@ void FileSelectionActivity::taskTrampoline(void* param) { void FileSelectionActivity::loadFiles() { files.clear(); selectorIndex = 0; - auto root = SD.open(basepath.c_str()); - for (File file = root.openNextFile(); file; file = root.openNextFile()) { - auto filename = std::string(file.name()); - if (filename[0] == '.') { + auto root = SdMan.open(basepath.c_str()); + char name[128]; + for (auto file = root.openNextFile(); file; file = root.openNextFile()) { + file.getName(name, sizeof(name)); + if (name[0] == '.') { file.close(); continue; } if (file.isDirectory()) { - files.emplace_back(filename + "/"); + files.emplace_back(std::string(name) + "/"); } else { + auto filename = std::string(name); std::string ext4 = filename.length() >= 4 ? filename.substr(filename.length() - 4) : ""; std::string ext5 = filename.length() >= 5 ? filename.substr(filename.length() - 5) : ""; if (ext5 == ".epub" || ext5 == ".xtch" || ext4 == ".xtc") { diff --git a/src/activities/reader/ReaderActivity.cpp b/src/activities/reader/ReaderActivity.cpp index d98e167..d6a3aa6 100644 --- a/src/activities/reader/ReaderActivity.cpp +++ b/src/activities/reader/ReaderActivity.cpp @@ -1,7 +1,5 @@ #include "ReaderActivity.h" -#include - #include "Epub.h" #include "EpubReaderActivity.h" #include "FileSelectionActivity.h" @@ -29,7 +27,7 @@ bool ReaderActivity::isXtcFile(const std::string& path) { } std::unique_ptr ReaderActivity::loadEpub(const std::string& path) { - if (!SD.exists(path.c_str())) { + if (!SdMan.exists(path.c_str())) { Serial.printf("[%lu] [ ] File does not exist: %s\n", millis(), path.c_str()); return nullptr; } @@ -44,7 +42,7 @@ std::unique_ptr ReaderActivity::loadEpub(const std::string& path) { } std::unique_ptr ReaderActivity::loadXtc(const std::string& path) { - if (!SD.exists(path.c_str())) { + if (!SdMan.exists(path.c_str())) { Serial.printf("[%lu] [ ] File does not exist: %s\n", millis(), path.c_str()); return nullptr; } diff --git a/src/activities/reader/XtcReaderActivity.cpp b/src/activities/reader/XtcReaderActivity.cpp index 317594c..421b789 100644 --- a/src/activities/reader/XtcReaderActivity.cpp +++ b/src/activities/reader/XtcReaderActivity.cpp @@ -9,10 +9,10 @@ #include #include -#include +#include -#include "CrossPointSettings.h" #include "CrossPointState.h" +#include "MappedInputManager.h" #include "XtcReaderChapterSelectionActivity.h" #include "config.h" @@ -357,8 +357,8 @@ void XtcReaderActivity::renderPage() { } void XtcReaderActivity::saveProgress() const { - File f; - if (FsHelpers::openFileForWrite("XTR", xtc->getCachePath() + "/progress.bin", f)) { + FsFile f; + if (SdMan.openFileForWrite("XTR", xtc->getCachePath() + "/progress.bin", f)) { uint8_t data[4]; data[0] = currentPage & 0xFF; data[1] = (currentPage >> 8) & 0xFF; @@ -370,8 +370,8 @@ void XtcReaderActivity::saveProgress() const { } void XtcReaderActivity::loadProgress() { - File f; - if (FsHelpers::openFileForRead("XTR", xtc->getCachePath() + "/progress.bin", f)) { + FsFile f; + if (SdMan.openFileForRead("XTR", xtc->getCachePath() + "/progress.bin", f)) { uint8_t data[4]; if (f.read(data, 4) == 4) { currentPage = data[0] | (data[1] << 8) | (data[2] << 16) | (data[3] << 24); diff --git a/src/activities/reader/XtcReaderChapterSelectionActivity.cpp b/src/activities/reader/XtcReaderChapterSelectionActivity.cpp index 6c747f0..d00fc59 100644 --- a/src/activities/reader/XtcReaderChapterSelectionActivity.cpp +++ b/src/activities/reader/XtcReaderChapterSelectionActivity.cpp @@ -1,9 +1,8 @@ #include "XtcReaderChapterSelectionActivity.h" #include -#include -#include +#include "MappedInputManager.h" #include "config.h" namespace { diff --git a/src/activities/settings/OtaUpdateActivity.cpp b/src/activities/settings/OtaUpdateActivity.cpp index 846438b..8a04578 100644 --- a/src/activities/settings/OtaUpdateActivity.cpp +++ b/src/activities/settings/OtaUpdateActivity.cpp @@ -1,9 +1,9 @@ #include "OtaUpdateActivity.h" #include -#include #include +#include "MappedInputManager.h" #include "activities/network/WifiSelectionActivity.h" #include "config.h" #include "network/OtaUpdater.h" diff --git a/src/activities/settings/SettingsActivity.cpp b/src/activities/settings/SettingsActivity.cpp index 6a66ede..eea7a47 100644 --- a/src/activities/settings/SettingsActivity.cpp +++ b/src/activities/settings/SettingsActivity.cpp @@ -1,9 +1,9 @@ #include "SettingsActivity.h" #include -#include #include "CrossPointSettings.h" +#include "MappedInputManager.h" #include "OtaUpdateActivity.h" #include "config.h" diff --git a/src/activities/util/KeyboardEntryActivity.cpp b/src/activities/util/KeyboardEntryActivity.cpp index 7a13aab..dbfd109 100644 --- a/src/activities/util/KeyboardEntryActivity.cpp +++ b/src/activities/util/KeyboardEntryActivity.cpp @@ -1,6 +1,7 @@ #include "KeyboardEntryActivity.h" #include "../../config.h" +#include "MappedInputManager.h" // Keyboard layouts - lowercase const char* const KeyboardEntryActivity::keyboard[NUM_ROWS] = { diff --git a/src/main.cpp b/src/main.cpp index b617ef8..e1bba59 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -3,7 +3,7 @@ #include #include #include -#include +#include #include #include #include @@ -37,7 +37,6 @@ #define UART0_RXD 20 // Used for USB connection detection -#define SD_SPI_CS 12 #define SD_SPI_MISO 7 EInkDisplay einkDisplay(EPD_SCLK, EPD_MOSI, EPD_CS, EPD_DC, EPD_RST, EPD_BUSY); @@ -189,7 +188,7 @@ void setup() { // SD Card Initialization // We need 6 open files concurrently when parsing a new chapter - if (!SD.begin(SD_SPI_CS, SPI, SPI_FQ, "/sd", 6)) { + if (!SdMan.begin()) { Serial.printf("[%lu] [ ] SD card initialization failed\n", millis()); setupDisplayAndFonts(); exitActivity(); diff --git a/src/network/CrossPointWebServer.cpp b/src/network/CrossPointWebServer.cpp index 041273f..916f6a2 100644 --- a/src/network/CrossPointWebServer.cpp +++ b/src/network/CrossPointWebServer.cpp @@ -2,7 +2,7 @@ #include #include -#include +#include #include #include @@ -170,7 +170,7 @@ void CrossPointWebServer::handleStatus() const { } void CrossPointWebServer::scanFiles(const char* path, const std::function& callback) const { - File root = SD.open(path); + FsFile root = SdMan.open(path); if (!root) { Serial.printf("[%lu] [WEB] Failed to open directory: %s\n", millis(), path); return; @@ -184,9 +184,11 @@ void CrossPointWebServer::scanFiles(const char* path, const std::function