/** * 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, 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) {} void onEnter() override; void onExit() override; void loop() override; };