feat(doorbell): add inactivity timeout to turn off screen
This commit is contained in:
@@ -16,6 +16,7 @@
|
||||
#define HOLD_TO_SILENCE_MS 3000
|
||||
#define ALERT_TIMEOUT_MS 120000
|
||||
#define SILENCE_DISPLAY_MS 10000
|
||||
#define INACTIVITY_TIMEOUT_MS 30000
|
||||
#define WIFI_CONNECT_TIMEOUT_MS 15000
|
||||
#define HTTP_TIMEOUT_MS 10000
|
||||
#define HINT_ANIMATION_MS 2000
|
||||
|
||||
@@ -79,6 +79,7 @@ void DoorbellLogic::finishBoot() {
|
||||
_display->setBacklight(false);
|
||||
_state.backlightOn = false;
|
||||
_bootGraceEnd = millis() + BOOT_GRACE_MS;
|
||||
_lastActivityMs = millis();
|
||||
Serial.printf("[BOOT] Grace period: %d ms\n", BOOT_GRACE_MS);
|
||||
Serial.printf("[BOOT] Ready — monitoring %s\n", NTFY_SERVER);
|
||||
}
|
||||
@@ -130,6 +131,13 @@ void DoorbellLogic::update() {
|
||||
}
|
||||
break;
|
||||
default:
|
||||
// Inactivity timeout: turn off screen after no activity
|
||||
if(_state.screen != ScreenID::OFF && now - _lastActivityMs > INACTIVITY_TIMEOUT_MS) {
|
||||
Serial.println("[STATE] Inactivity timeout → OFF");
|
||||
_state.screen = ScreenID::OFF;
|
||||
_display->setBacklight(false);
|
||||
_state.backlightOn = false;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -300,6 +308,9 @@ int DoorbellLogic::handleTouch(const TouchEvent& evt) {
|
||||
if(!evt.pressed)
|
||||
return -1;
|
||||
|
||||
// Reset inactivity timer on any touch
|
||||
_lastActivityMs = millis();
|
||||
|
||||
if(_state.screen == ScreenID::OFF) {
|
||||
Serial.println("[TOUCH] OFF → DASHBOARD");
|
||||
setScreen(ScreenID::DASHBOARD);
|
||||
|
||||
@@ -57,6 +57,7 @@ private:
|
||||
|
||||
uint32_t _lastPollMs = 0;
|
||||
uint32_t _lastHeartbeatMs = 0;
|
||||
uint32_t _lastActivityMs = 0;
|
||||
uint32_t _bootGraceEnd = 0;
|
||||
|
||||
String _alertUrl;
|
||||
|
||||
Reference in New Issue
Block a user