diff --git a/src/activities/Activity.h b/src/activities/Activity.h index aad55915..4a60607b 100644 --- a/src/activities/Activity.h +++ b/src/activities/Activity.h @@ -22,4 +22,5 @@ class Activity { virtual void onExit() { Serial.printf("[%lu] [ACT] Exiting activity: %s\n", millis(), name.c_str()); } virtual void loop() {} virtual bool skipLoopDelay() { return false; } + virtual bool preventAutoSleep() { return false; } }; diff --git a/src/activities/network/CrossPointWebServerActivity.h b/src/activities/network/CrossPointWebServerActivity.h index deb7cea7..775a2474 100644 --- a/src/activities/network/CrossPointWebServerActivity.h +++ b/src/activities/network/CrossPointWebServerActivity.h @@ -70,4 +70,5 @@ class CrossPointWebServerActivity final : public ActivityWithSubactivity { void onExit() override; void loop() override; bool skipLoopDelay() override { return webServer && webServer->isRunning(); } + bool preventAutoSleep() override { return webServer && webServer->isRunning(); } }; diff --git a/src/activities/settings/OtaUpdateActivity.h b/src/activities/settings/OtaUpdateActivity.h index 9e35567c..e049b077 100644 --- a/src/activities/settings/OtaUpdateActivity.h +++ b/src/activities/settings/OtaUpdateActivity.h @@ -41,4 +41,5 @@ class OtaUpdateActivity : public ActivityWithSubactivity { void onEnter() override; void onExit() override; void loop() override; + bool preventAutoSleep() override { return state == CHECKING_FOR_UPDATE || state == UPDATE_IN_PROGRESS; } }; diff --git a/src/main.cpp b/src/main.cpp index 6859f41c..b9e33426 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -316,9 +316,10 @@ void loop() { lastMemPrint = millis(); } - // Check for any user activity (button press or release) + // Check for any user activity (button press or release) or active background work static unsigned long lastActivityTime = millis(); - if (inputManager.wasAnyPressed() || inputManager.wasAnyReleased()) { + if (inputManager.wasAnyPressed() || inputManager.wasAnyReleased() || + (currentActivity && currentActivity->preventAutoSleep())) { lastActivityTime = millis(); // Reset inactivity timer }