From a83d5ada863689b931fa528585d672a4c7798c78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20G=C3=B6ttgens?= Date: Sat, 11 Mar 2023 22:40:33 +0100 Subject: [PATCH] - implement shutdown (deep sleep forever) on ESP32 - Clean up shutdown and delayed shutdown code conditionals. - clean up inputbroker includes --- src/Power.cpp | 20 ++++++++++++++++---- src/input/RotaryEncoderInterruptBase.h | 3 ++- src/input/UpDownInterruptBase.h | 2 +- src/input/kbI2cBase.h | 2 +- src/shutdown.h | 19 ++----------------- 5 files changed, 22 insertions(+), 24 deletions(-) diff --git a/src/Power.cpp b/src/Power.cpp index f84c7b71d..1f9aacd08 100644 --- a/src/Power.cpp +++ b/src/Power.cpp @@ -13,6 +13,10 @@ #include #endif +#ifndef DELAY_FOREVER +#define DELAY_FOREVER portMAX_DELAY +#endif + #ifdef HAS_PMU #include "XPowersAXP192.tpp" #include "XPowersAXP2101.tpp" @@ -256,16 +260,24 @@ void Power::shutdown() digitalWrite(PIN_EINK_EN, LOW); // power off backlight first #endif -#ifdef HAS_PMU LOG_INFO("Shutting down\n"); + +#ifdef HAS_PMU if (PMU) { PMU->setChargingLedMode(XPOWERS_CHG_LED_OFF); - PMU->shutdown(); } -#elif defined(ARCH_NRF52) - playBeep(); +#endif + +#if defined(ARCH_NRF52) || defined(ARCH_ESP32) +#ifdef PIN_LED1 ledOff(PIN_LED1); +#endif +#ifdef PIN_LED2 ledOff(PIN_LED2); +#endif +#ifdef PIN_LED3 + ledOff(PIN_LED2); +#endif doDeepSleep(DELAY_FOREVER); #endif } diff --git a/src/input/RotaryEncoderInterruptBase.h b/src/input/RotaryEncoderInterruptBase.h index 06f7a2354..bb77297a8 100644 --- a/src/input/RotaryEncoderInterruptBase.h +++ b/src/input/RotaryEncoderInterruptBase.h @@ -1,7 +1,8 @@ #pragma once #include "InputBroker.h" -#include "SinglePortModule.h" // TODO: what header file to include? +#include "concurrency/OSThread.h" +#include "mesh/generated/meshtastic/module_config.pb.h" enum RotaryEncoderInterruptBaseStateType { ROTARY_EVENT_OCCURRED, ROTARY_EVENT_CLEARED }; diff --git a/src/input/UpDownInterruptBase.h b/src/input/UpDownInterruptBase.h index ed7eee332..372478c22 100644 --- a/src/input/UpDownInterruptBase.h +++ b/src/input/UpDownInterruptBase.h @@ -1,7 +1,7 @@ #pragma once #include "InputBroker.h" -#include "SinglePortModule.h" // TODO: what header file to include? +#include "mesh/nodeDB.h" class UpDownInterruptBase : public Observable { diff --git a/src/input/kbI2cBase.h b/src/input/kbI2cBase.h index 29e8a19ed..e40fd5b33 100644 --- a/src/input/kbI2cBase.h +++ b/src/input/kbI2cBase.h @@ -1,7 +1,7 @@ #pragma once #include "InputBroker.h" -#include "SinglePortModule.h" // TODO: what header file to include? +#include "concurrency/OSThread.h" #include "Wire.h" class KbI2cBase : public Observable, public concurrency::OSThread diff --git a/src/shutdown.h b/src/shutdown.h index 1b0a0509a..b08478a1e 100644 --- a/src/shutdown.h +++ b/src/shutdown.h @@ -18,31 +18,16 @@ void powerCommandsCheck() #endif } -#if defined(ARCH_NRF52) || defined(HAS_PMU) +#if defined(ARCH_ESP32) || defined(ARCH_NRF52) if (shutdownAtMsec) { screen->startShutdownScreen(); - playBeep(); -#ifdef PIN_LED1 - ledOff(PIN_LED1); -#endif -#ifdef PIN_LED2 - ledOff(PIN_LED2); -#endif -#ifdef PIN_LED3 - ledOff(PIN_LED3); -#endif } #endif if (shutdownAtMsec && millis() > shutdownAtMsec) { LOG_INFO("Shutting down from admin command\n"); -#ifdef HAS_PMU - if (pmu_found == true) { - playShutdownMelody(); - power->shutdown(); - } -#elif defined(ARCH_NRF52) playShutdownMelody(); +#if defined(ARCH_NRF52) || defined(ARCH_ESP32) power->shutdown(); #else LOG_WARN("FIXME implement shutdown for this platform");