From 556fc6210de2499e03413cf1b2da86c500358f6e Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Tue, 1 Mar 2022 18:40:21 +0000 Subject: [PATCH 1/2] Moved power fsm thread out of main (#1265) --- src/PowerFSMThread.h | 38 ++++++++++++++++++++++++++++++++++++++ src/main.cpp | 31 ++----------------------------- src/main.h | 2 ++ 3 files changed, 42 insertions(+), 29 deletions(-) create mode 100644 src/PowerFSMThread.h diff --git a/src/PowerFSMThread.h b/src/PowerFSMThread.h new file mode 100644 index 000000000..00f31e9c3 --- /dev/null +++ b/src/PowerFSMThread.h @@ -0,0 +1,38 @@ +#include "configuration.h" +#include "concurrency/OSThread.h" +#include "main.h" +#include "PowerFSM.h" +#include "power.h" +#include "NodeDB.h" + +namespace concurrency +{ +/// Wrapper to convert our powerFSM stuff into a 'thread' +class PowerFSMThread : public OSThread +{ + public: + // callback returns the period for the next callback invocation (or 0 if we should no longer be called) + PowerFSMThread() : OSThread("PowerFSM") {} + + protected: + int32_t runOnce() override + { + powerFSM.run_machine(); + + /// If we are in power state we force the CPU to wake every 10ms to check for serial characters (we don't yet wake + /// cpu for serial rx - FIXME) + auto state = powerFSM.getState(); + canSleep = (state != &statePOWER) && (state != &stateSERIAL); + + if (powerStatus->getHasUSB()) { + timeLastPowered = millis(); + } else if (radioConfig.preferences.on_battery_shutdown_after_secs > 0 && + millis() > timeLastPowered + (1000 * radioConfig.preferences.on_battery_shutdown_after_secs)) { //shutdown after 30 minutes unpowered + powerFSM.trigger(EVENT_SHUTDOWN); + } + + return 10; + } +}; + +} \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index 400ddff63..fcbe8d912 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -43,8 +43,9 @@ #include "SX1262Interface.h" #include "SX1268Interface.h" #include "LLCC68Interface.h" -#include "ButtonThread.h" +#include "ButtonThread.h" +#include "PowerFSMThread.h" using namespace concurrency; @@ -92,34 +93,6 @@ static int32_t ledBlinker() uint32_t timeLastPowered = 0; -/// Wrapper to convert our powerFSM stuff into a 'thread' -class PowerFSMThread : public OSThread -{ - public: - // callback returns the period for the next callback invocation (or 0 if we should no longer be called) - PowerFSMThread() : OSThread("PowerFSM") {} - - protected: - int32_t runOnce() override - { - powerFSM.run_machine(); - - /// If we are in power state we force the CPU to wake every 10ms to check for serial characters (we don't yet wake - /// cpu for serial rx - FIXME) - auto state = powerFSM.getState(); - canSleep = (state != &statePOWER) && (state != &stateSERIAL); - - if (powerStatus->getHasUSB()) { - timeLastPowered = millis(); - } else if (radioConfig.preferences.on_battery_shutdown_after_secs > 0 && - millis() > timeLastPowered + (1000 * radioConfig.preferences.on_battery_shutdown_after_secs)) { //shutdown after 30 minutes unpowered - powerFSM.trigger(EVENT_SHUTDOWN); - } - - return 10; - } -}; - bool ButtonThread::shutdown_on_long_stop = false; static Periodic *ledPeriodic; diff --git a/src/main.h b/src/main.h index c03652368..b87b1886d 100644 --- a/src/main.h +++ b/src/main.h @@ -21,6 +21,8 @@ extern graphics::Screen *screen; // Return a human readable string of the form "Meshtastic_ab13" const char *getDeviceName(); +extern uint32_t timeLastPowered; + extern uint32_t rebootAtMsec; extern uint32_t shutdownAtMsec; From 09edd7f89bcdcb5f1922a184a5f13ce6acae3e6f Mon Sep 17 00:00:00 2001 From: Jm Casler Date: Wed, 2 Mar 2022 18:49:46 -0800 Subject: [PATCH 2/2] updating proto submodule to latest --- proto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/proto b/proto index 7c49bdad9..f6ba3722b 160000 --- a/proto +++ b/proto @@ -1 +1 @@ -Subproject commit 7c49bdad99f53332d17796188fc89fd5c29e0ce3 +Subproject commit f6ba3722be8a51c3c0c1446bb08e730a0be568e0