From 2e4e616a88e9b73ad5a21158aa1339aa79869c5e Mon Sep 17 00:00:00 2001 From: Dave Allie Date: Sun, 21 Dec 2025 21:12:11 +1100 Subject: [PATCH] Start power off sequence as soon as hold duration for the power button is reached --- src/main.cpp | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 5dfc25b..0d21781 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -119,14 +119,12 @@ void enterDeepSleep() { exitActivity(); enterNewActivity(new SleepActivity(renderer, inputManager)); - Serial.printf("[%lu] [ ] Entering deep sleep.\n", millis()); - delay(1000); // Allow Serial buffer to empty and display to update - - // Enable Wakeup on LOW (button press) - esp_deep_sleep_enable_gpio_wakeup(1ULL << InputManager::POWER_BUTTON_PIN, ESP_GPIO_WAKEUP_GPIO_LOW); - einkDisplay.deepSleep(); + Serial.printf("[%lu] [ ] Entering deep sleep.\n", millis()); + esp_deep_sleep_enable_gpio_wakeup(1ULL << InputManager::POWER_BUTTON_PIN, ESP_GPIO_WAKEUP_GPIO_LOW); + // Ensure that the power button has been released to avoid immediately turning back on if you're holding it + waitForPowerRelease(); // Enter Deep Sleep esp_deep_sleep_start(); } @@ -231,7 +229,7 @@ void loop() { return; } - if (inputManager.wasReleased(InputManager::BTN_POWER) && + if (inputManager.isPressed(InputManager::BTN_POWER) && inputManager.getHeldTime() > SETTINGS.getPowerButtonDuration()) { enterDeepSleep(); // This should never be hit as `enterDeepSleep` calls esp_deep_sleep_start