Generalize the loop delay

This commit is contained in:
Brendan O'Leary 2025-12-19 08:35:08 -05:00
parent 2dfecbc8c4
commit 446f04f9ce
3 changed files with 7 additions and 11 deletions

View File

@ -15,4 +15,5 @@ class Activity {
virtual void onEnter() {} virtual void onEnter() {}
virtual void onExit() {} virtual void onExit() {}
virtual void loop() {} virtual void loop() {}
virtual bool skipLoopDelay() { return false; }
}; };

View File

@ -62,7 +62,5 @@ class CrossPointWebServerActivity final : public Activity {
void onEnter() override; void onEnter() override;
void onExit() override; void onExit() override;
void loop() override; void loop() override;
bool skipLoopDelay() override { return webServer && webServer->isRunning(); }
// Check if web server is running (used by main loop for timing optimization)
bool isWebServerRunning() const { return webServer && webServer->isRunning(); }
}; };

View File

@ -44,7 +44,6 @@ EInkDisplay einkDisplay(EPD_SCLK, EPD_MOSI, EPD_CS, EPD_DC, EPD_RST, EPD_BUSY);
InputManager inputManager; InputManager inputManager;
GfxRenderer renderer(einkDisplay); GfxRenderer renderer(einkDisplay);
Activity* currentActivity; Activity* currentActivity;
CrossPointWebServerActivity* webServerActivity = nullptr; // Track web server activity for loop timing
// Fonts // Fonts
EpdFont bookerlyFont(&bookerly_2b); EpdFont bookerlyFont(&bookerly_2b);
@ -73,7 +72,6 @@ void exitActivity() {
currentActivity->onExit(); currentActivity->onExit();
delete currentActivity; delete currentActivity;
currentActivity = nullptr; currentActivity = nullptr;
webServerActivity = nullptr; // Clear web server activity pointer when exiting
} }
} }
@ -147,8 +145,7 @@ void onGoToReaderHome() { onGoToReader(std::string()); }
void onGoToFileTransfer() { void onGoToFileTransfer() {
exitActivity(); exitActivity();
webServerActivity = new CrossPointWebServerActivity(renderer, inputManager, onGoHome); enterNewActivity(new CrossPointWebServerActivity(renderer, inputManager, onGoHome));
enterNewActivity(webServerActivity);
} }
void onGoToSettings() { void onGoToSettings() {
@ -254,11 +251,11 @@ void loop() {
lastLoopTime = loopStartTime; lastLoopTime = loopStartTime;
// Add delay at the end of the loop to prevent tight spinning // 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 an activity requests skip loop delay (e.g., webserver running), use yield() for faster response
// When webserver is not running, use longer delay to save power // Otherwise, use longer delay to save power
if (webServerActivity && webServerActivity->isWebServerRunning()) { if (currentActivity && currentActivity->skipLoopDelay()) {
yield(); // Give FreeRTOS a chance to run tasks, but return immediately yield(); // Give FreeRTOS a chance to run tasks, but return immediately
} else { } else {
delay(10); // Normal delay when webserver not active delay(10); // Normal delay when no activity requires fast response
} }
} }