From 446f04f9ceea86370e31f5a7dca97a901425aa1d Mon Sep 17 00:00:00 2001 From: Brendan O'Leary Date: Fri, 19 Dec 2025 08:35:08 -0500 Subject: [PATCH] Generalize the loop delay --- src/activities/Activity.h | 1 + .../network/CrossPointWebServerActivity.h | 4 +--- src/main.cpp | 13 +++++-------- 3 files changed, 7 insertions(+), 11 deletions(-) diff --git a/src/activities/Activity.h b/src/activities/Activity.h index 28017f7..dfe6714 100644 --- a/src/activities/Activity.h +++ b/src/activities/Activity.h @@ -15,4 +15,5 @@ class Activity { virtual void onEnter() {} virtual void onExit() {} virtual void loop() {} + virtual bool skipLoopDelay() { return false; } }; diff --git a/src/activities/network/CrossPointWebServerActivity.h b/src/activities/network/CrossPointWebServerActivity.h index 8127fae..ad41dcd 100644 --- a/src/activities/network/CrossPointWebServerActivity.h +++ b/src/activities/network/CrossPointWebServerActivity.h @@ -62,7 +62,5 @@ class CrossPointWebServerActivity final : public Activity { void onEnter() override; void onExit() override; void loop() override; - - // Check if web server is running (used by main loop for timing optimization) - bool isWebServerRunning() const { return webServer && webServer->isRunning(); } + bool skipLoopDelay() override { return webServer && webServer->isRunning(); } }; diff --git a/src/main.cpp b/src/main.cpp index 4e43be0..3c10565 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -44,7 +44,6 @@ EInkDisplay einkDisplay(EPD_SCLK, EPD_MOSI, EPD_CS, EPD_DC, EPD_RST, EPD_BUSY); InputManager inputManager; GfxRenderer renderer(einkDisplay); Activity* currentActivity; -CrossPointWebServerActivity* webServerActivity = nullptr; // Track web server activity for loop timing // Fonts EpdFont bookerlyFont(&bookerly_2b); @@ -73,7 +72,6 @@ void exitActivity() { currentActivity->onExit(); delete currentActivity; currentActivity = nullptr; - webServerActivity = nullptr; // Clear web server activity pointer when exiting } } @@ -147,8 +145,7 @@ void onGoToReaderHome() { onGoToReader(std::string()); } void onGoToFileTransfer() { exitActivity(); - webServerActivity = new CrossPointWebServerActivity(renderer, inputManager, onGoHome); - enterNewActivity(webServerActivity); + enterNewActivity(new CrossPointWebServerActivity(renderer, inputManager, onGoHome)); } void onGoToSettings() { @@ -254,11 +251,11 @@ void loop() { lastLoopTime = loopStartTime; // Add delay at the end of the loop to prevent tight spinning - // When webserver is running, use yield() instead of delay for faster response - // When webserver is not running, use longer delay to save power - if (webServerActivity && webServerActivity->isWebServerRunning()) { + // When an activity requests skip loop delay (e.g., webserver running), use yield() for faster response + // Otherwise, use longer delay to save power + if (currentActivity && currentActivity->skipLoopDelay()) { yield(); // Give FreeRTOS a chance to run tasks, but return immediately } else { - delay(10); // Normal delay when webserver not active + delay(10); // Normal delay when no activity requires fast response } }