Generalize the loop delay
This commit is contained in:
parent
2dfecbc8c4
commit
446f04f9ce
@ -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; }
|
||||||
};
|
};
|
||||||
|
|||||||
@ -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(); }
|
|
||||||
};
|
};
|
||||||
|
|||||||
13
src/main.cpp
13
src/main.cpp
@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user