From 5f6d3baabf45d95add6fdcc61e6d75e915e34769 Mon Sep 17 00:00:00 2001 From: Neil Date: Fri, 10 Nov 2023 10:22:57 -0800 Subject: [PATCH 1/7] Buttons, encoders, and diginmux actions do not prevent power save mode Fixes #273 --- src/CommandMessenger.cpp | 19 +++++++++++++++++++ src/Config.cpp | 3 --- src/MF_Button/MFButton.cpp | 10 +++++----- src/MF_CustomDevice/CustomDevice.cpp | 6 ++---- src/MF_Encoder/MFEncoder.cpp | 4 ++-- src/MF_InputShifter/InputShifter.cpp | 2 -- src/MF_LCDDisplay/LCDDisplay.cpp | 1 - src/MF_Output/Output.cpp | 1 - src/MF_OutputShifter/OutputShifter.cpp | 2 -- src/MF_Segment/LedSegment.cpp | 3 --- src/MF_Servo/Servos.cpp | 1 - src/MF_Stepper/Stepper.cpp | 3 --- src/mobiflight.cpp | 1 - 13 files changed, 28 insertions(+), 28 deletions(-) diff --git a/src/CommandMessenger.cpp b/src/CommandMessenger.cpp index 5870ae34..857ad22b 100644 --- a/src/CommandMessenger.cpp +++ b/src/CommandMessenger.cpp @@ -77,6 +77,7 @@ void attachCommandCallbacks() cmdMessenger.attach(kSetName, OnSetName); cmdMessenger.attach(kGenNewSerial, OnGenNewSerial); cmdMessenger.attach(kTrigger, OnTrigger); + cmdMessenger.attach(kSetPowerSavingMode, OnSetPowerSavingMode); #if MF_LCD_SUPPORT == 1 cmdMessenger.attach(kSetLcdDisplayI2C, LCDDisplay::OnSet); @@ -102,6 +103,24 @@ void OnUnknownCommand() cmdMessenger.sendCmd(kStatus, F("n/a")); } +// Handles requests from the desktop app to disable powersaving mode +void OnSetPowerSavingMode() +{ + bool enablePowerSavingMode = cmdMessenger.readBoolArg(); + + // If the request is to disable power saving mode then simply set the last command + // to now. The next time loop() is called in mobiflight.cpp this will cause + // power saving mode to get turned off. + if (!enablePowerSavingMode) { +#ifdef DEBUG2CMDMESSENGER + cmdMessenger.sendCmd(kDebug, F("Disabling power save mode")); +#endif + setLastCommandMillis(); + } + + // There is no handling of a request to enable powersaving mode right now. +} + uint32_t getLastCommandMillis() { return lastCommand; diff --git a/src/Config.cpp b/src/Config.cpp index 86cf15dc..b33a657b 100644 --- a/src/Config.cpp +++ b/src/Config.cpp @@ -112,7 +112,6 @@ void OnSetConfig() #ifdef DEBUG2CMDMESSENGER cmdMessenger.sendCmd(kDebug, F("Setting config start")); #endif - setLastCommandMillis(); char *cfg = cmdMessenger.readStringArg(); uint8_t cfgLen = strlen(cfg); @@ -533,7 +532,6 @@ void readConfig() void OnGetConfig() { - setLastCommandMillis(); cmdMessenger.sendCmdStart(kInfo); if (configLength > 0) { cmdMessenger.sendCmdArg((char)MFeeprom.read_byte(MEM_OFFSET_CONFIG)); @@ -551,7 +549,6 @@ void OnGetInfo() // OnGetInfo() is called from the connector and the time is very likely always different // Therefore millis() can be used for randomSeed generateSerial(false); - setLastCommandMillis(); cmdMessenger.sendCmdStart(kInfo); cmdMessenger.sendCmdArg(F(MOBIFLIGHT_TYPE)); cmdMessenger.sendCmdArg(name); diff --git a/src/MF_Button/MFButton.cpp b/src/MF_Button/MFButton.cpp index dea8b61a..8d19730c 100644 --- a/src/MF_Button/MFButton.cpp +++ b/src/MF_Button/MFButton.cpp @@ -3,17 +3,17 @@ // // (C) MobiFlight Project 2022 // - +#include "mobiflight.h" #include "MFButton.h" buttonEvent MFButton::_handler = NULL; MFButton::MFButton(uint8_t pin, const char *name) { - _pin = pin; - _name = name; - pinMode(_pin, INPUT_PULLUP); // set pin to input - _state = digitalRead(_pin); // initialize on actual status + _pin = pin; + _name = name; + pinMode(_pin, INPUT_PULLUP); // set pin to input + _state = digitalRead(_pin); // initialize on actual status } void MFButton::update() diff --git a/src/MF_CustomDevice/CustomDevice.cpp b/src/MF_CustomDevice/CustomDevice.cpp index bdd51aaa..ea9f5cd0 100644 --- a/src/MF_CustomDevice/CustomDevice.cpp +++ b/src/MF_CustomDevice/CustomDevice.cpp @@ -16,7 +16,7 @@ namespace CustomDevice { if (!FitInMemory(sizeof(MFCustomDevice) * count)) return false; - customDevice = new (allocateMemory(sizeof(MFCustomDevice) * count)) MFCustomDevice(0,0,0); + customDevice = new (allocateMemory(sizeof(MFCustomDevice) * count)) MFCustomDevice(0, 0, 0); maxCustomDevices = count; return true; } @@ -80,9 +80,7 @@ namespace CustomDevice int16_t messageID = cmdMessenger.readInt16Arg(); // get the messageID number char *output = cmdMessenger.readStringArg(); // get the pointer to the new raw string cmdMessenger.unescape(output); // and unescape the string if escape characters are used - customDevice[device].set(messageID, output); // send the string to your custom device - - setLastCommandMillis(); + customDevice[device].set(messageID, output); // send the string to your custom device } } // end of namespace \ No newline at end of file diff --git a/src/MF_Encoder/MFEncoder.cpp b/src/MF_Encoder/MFEncoder.cpp index e5cf2b05..b32d9ffd 100644 --- a/src/MF_Encoder/MFEncoder.cpp +++ b/src/MF_Encoder/MFEncoder.cpp @@ -15,7 +15,7 @@ // ----- // 18.01.2014 created by Matthias Hertel // ----- - +#include "mobiflight.h" #include "MFEncoder.h" // The array holds the values -1 for the entries where a position was decremented, @@ -132,7 +132,7 @@ void MFEncoder::tick(void) int _speed = 0; uint32_t currentMs = millis(); - int8_t thisState = sig1 | (sig2 << 1); + int8_t thisState = sig1 | (sig2 << 1); if (currentMs - _lastFastDec > 100 && _detentCounter > 1) { _lastFastDec = currentMs; diff --git a/src/MF_InputShifter/InputShifter.cpp b/src/MF_InputShifter/InputShifter.cpp index bdb1c82e..616feecb 100644 --- a/src/MF_InputShifter/InputShifter.cpp +++ b/src/MF_InputShifter/InputShifter.cpp @@ -70,14 +70,12 @@ namespace InputShifter for (uint8_t i = 0; i < inputShiftersRegistered; i++) { inputShifters[i].retrigger(); } - setLastCommandMillis(); } void OnInit() // not used anywhere!? { int module = cmdMessenger.readInt16Arg(); inputShifters[module].clear(); - setLastCommandMillis(); } } // namespace diff --git a/src/MF_LCDDisplay/LCDDisplay.cpp b/src/MF_LCDDisplay/LCDDisplay.cpp index f7d462bd..cae89c71 100644 --- a/src/MF_LCDDisplay/LCDDisplay.cpp +++ b/src/MF_LCDDisplay/LCDDisplay.cpp @@ -52,7 +52,6 @@ namespace LCDDisplay char *output = cmdMessenger.readStringArg(); cmdMessenger.unescape(output); lcd_I2C[address].display(output); - setLastCommandMillis(); } } // namespace diff --git a/src/MF_Output/Output.cpp b/src/MF_Output/Output.cpp index b0b47057..ef86a7f7 100644 --- a/src/MF_Output/Output.cpp +++ b/src/MF_Output/Output.cpp @@ -50,7 +50,6 @@ namespace Output // Set led analogWrite(pin, state); // why does the UI sends the pin number and not the x.th output number like other devices? // output[pin].set(state); // once this is changed uncomment this - setLastCommandMillis(); } void PowerSave(bool state) diff --git a/src/MF_OutputShifter/OutputShifter.cpp b/src/MF_OutputShifter/OutputShifter.cpp index c0911895..ff27d5c3 100644 --- a/src/MF_OutputShifter/OutputShifter.cpp +++ b/src/MF_OutputShifter/OutputShifter.cpp @@ -53,7 +53,6 @@ namespace OutputShifter { int module = cmdMessenger.readInt16Arg(); outputShifters[module].clear(); - setLastCommandMillis(); } void OnSet() @@ -63,7 +62,6 @@ namespace OutputShifter char *pins = cmdMessenger.readStringArg(); int value = cmdMessenger.readInt16Arg(); outputShifters[module].setPins(pins, value); - setLastCommandMillis(); } } // namespace diff --git a/src/MF_Segment/LedSegment.cpp b/src/MF_Segment/LedSegment.cpp index 3974f1ba..a2d38722 100644 --- a/src/MF_Segment/LedSegment.cpp +++ b/src/MF_Segment/LedSegment.cpp @@ -59,7 +59,6 @@ namespace LedSegment int subModule = cmdMessenger.readInt16Arg(); int brightness = cmdMessenger.readInt16Arg(); ledSegments[module].setBrightness(subModule, brightness); - setLastCommandMillis(); } void OnSetModule() @@ -70,7 +69,6 @@ namespace LedSegment uint8_t points = (uint8_t)cmdMessenger.readInt16Arg(); uint8_t mask = (uint8_t)cmdMessenger.readInt16Arg(); ledSegments[module].display(subModule, value, points, mask); - setLastCommandMillis(); } void OnSetModuleBrightness() @@ -79,7 +77,6 @@ namespace LedSegment int subModule = cmdMessenger.readInt16Arg(); int brightness = cmdMessenger.readInt16Arg(); ledSegments[module].setBrightness(subModule, brightness); - setLastCommandMillis(); } } // namespace diff --git a/src/MF_Servo/Servos.cpp b/src/MF_Servo/Servos.cpp index 7122a537..507a2749 100644 --- a/src/MF_Servo/Servos.cpp +++ b/src/MF_Servo/Servos.cpp @@ -53,7 +53,6 @@ namespace Servos if (servo >= servosRegistered) return; servos[servo].moveTo(newValue); - setLastCommandMillis(); } void update() diff --git a/src/MF_Stepper/Stepper.cpp b/src/MF_Stepper/Stepper.cpp index 7ccdcdb3..c751a3b9 100644 --- a/src/MF_Stepper/Stepper.cpp +++ b/src/MF_Stepper/Stepper.cpp @@ -62,7 +62,6 @@ namespace Stepper if (stepper >= steppersRegistered) return; steppers[stepper].moveTo(newPos); - setLastCommandMillis(); } void OnReset() @@ -72,7 +71,6 @@ namespace Stepper if (stepper >= steppersRegistered) return; steppers[stepper].reset(); - setLastCommandMillis(); } void OnSetZero() @@ -82,7 +80,6 @@ namespace Stepper if (stepper >= steppersRegistered) return; steppers[stepper].setZero(); - setLastCommandMillis(); } void OnSetSpeedAccel() diff --git a/src/mobiflight.cpp b/src/mobiflight.cpp index 5120641d..5f89084c 100644 --- a/src/mobiflight.cpp +++ b/src/mobiflight.cpp @@ -145,7 +145,6 @@ void updatePowerSaving() // ************************************************************ void ResetBoard() { - setLastCommandMillis(); restoreName(); loadConfig(); } From 9f3930819e8788e690b89e99af3df17be62b5aa4 Mon Sep 17 00:00:00 2001 From: Neil Date: Fri, 10 Nov 2023 10:25:09 -0800 Subject: [PATCH 2/7] Remove unneeded include --- src/MF_Button/MFButton.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/MF_Button/MFButton.cpp b/src/MF_Button/MFButton.cpp index 8d19730c..42f31b01 100644 --- a/src/MF_Button/MFButton.cpp +++ b/src/MF_Button/MFButton.cpp @@ -3,7 +3,6 @@ // // (C) MobiFlight Project 2022 // -#include "mobiflight.h" #include "MFButton.h" buttonEvent MFButton::_handler = NULL; From c32ae8d9c9e126d061f0cc34f89eb6bf5d847f58 Mon Sep 17 00:00:00 2001 From: Neil Date: Fri, 10 Nov 2023 10:25:48 -0800 Subject: [PATCH 3/7] Fix build break --- src/CommandMessenger.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/CommandMessenger.cpp b/src/CommandMessenger.cpp index 857ad22b..3f0657eb 100644 --- a/src/CommandMessenger.cpp +++ b/src/CommandMessenger.cpp @@ -40,6 +40,7 @@ CmdMessenger cmdMessenger = CmdMessenger(Serial); unsigned long lastCommand; +void OnSetPowerSavingMode(); void OnTrigger(); void OnUnknownCommand(); From 909825ebd7b6f4b90463e5053087f9c57c671f56 Mon Sep 17 00:00:00 2001 From: Neil Date: Fri, 10 Nov 2023 14:40:21 -0800 Subject: [PATCH 4/7] Clean up debug log messages --- src/CommandMessenger.cpp | 2 +- src/mobiflight.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/CommandMessenger.cpp b/src/CommandMessenger.cpp index 3f0657eb..62b74fea 100644 --- a/src/CommandMessenger.cpp +++ b/src/CommandMessenger.cpp @@ -114,7 +114,7 @@ void OnSetPowerSavingMode() // power saving mode to get turned off. if (!enablePowerSavingMode) { #ifdef DEBUG2CMDMESSENGER - cmdMessenger.sendCmd(kDebug, F("Disabling power save mode")); + cmdMessenger.sendCmd(kDebug, F("Disabling power save mode via request")); #endif setLastCommandMillis(); } diff --git a/src/mobiflight.cpp b/src/mobiflight.cpp index 5f89084c..158a9077 100644 --- a/src/mobiflight.cpp +++ b/src/mobiflight.cpp @@ -123,9 +123,9 @@ void SetPowerSavingMode(bool state) #ifdef DEBUG2CMDMESSENGER if (state) - cmdMessenger.sendCmd(kDebug, F("On")); + cmdMessenger.sendCmd(kDebug, F("Power saving mode on")); else - cmdMessenger.sendCmd(kDebug, F("Off")); + cmdMessenger.sendCmd(kDebug, F("Power saving mode off")); #endif } From 36fc787c4e542fee26fbc82ca2f2bfba8de8c245 Mon Sep 17 00:00:00 2001 From: Neil Date: Fri, 10 Nov 2023 14:42:20 -0800 Subject: [PATCH 5/7] Clean up comments and debug string --- src/CommandMessenger.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/CommandMessenger.cpp b/src/CommandMessenger.cpp index 62b74fea..934e36f8 100644 --- a/src/CommandMessenger.cpp +++ b/src/CommandMessenger.cpp @@ -104,7 +104,7 @@ void OnUnknownCommand() cmdMessenger.sendCmd(kStatus, F("n/a")); } -// Handles requests from the desktop app to disable powersaving mode +// Handles requests from the desktop app to disable power saving mode void OnSetPowerSavingMode() { bool enablePowerSavingMode = cmdMessenger.readBoolArg(); @@ -114,7 +114,7 @@ void OnSetPowerSavingMode() // power saving mode to get turned off. if (!enablePowerSavingMode) { #ifdef DEBUG2CMDMESSENGER - cmdMessenger.sendCmd(kDebug, F("Disabling power save mode via request")); + cmdMessenger.sendCmd(kDebug, F("Disabling power saving mode via request")); #endif setLastCommandMillis(); } From 45448f97c9f5e173d5fab1e2349cb5e2268a7335 Mon Sep 17 00:00:00 2001 From: Neil Enns Date: Sun, 12 Nov 2023 13:00:47 -0800 Subject: [PATCH 6/7] Get rid of accidental change --- src/MF_Encoder/MFEncoder.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/MF_Encoder/MFEncoder.cpp b/src/MF_Encoder/MFEncoder.cpp index b32d9ffd..9c90a24e 100644 --- a/src/MF_Encoder/MFEncoder.cpp +++ b/src/MF_Encoder/MFEncoder.cpp @@ -15,7 +15,7 @@ // ----- // 18.01.2014 created by Matthias Hertel // ----- -#include "mobiflight.h" + #include "MFEncoder.h" // The array holds the values -1 for the entries where a position was decremented, From 9b210fddfb71be2350e6af678281d8bf7a25f979 Mon Sep 17 00:00:00 2001 From: Neil Date: Sun, 12 Nov 2023 14:56:55 -0800 Subject: [PATCH 7/7] Add support for enabling power save mode --- src/CommandMessenger.cpp | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/CommandMessenger.cpp b/src/CommandMessenger.cpp index 934e36f8..7015fefe 100644 --- a/src/CommandMessenger.cpp +++ b/src/CommandMessenger.cpp @@ -109,17 +109,24 @@ void OnSetPowerSavingMode() { bool enablePowerSavingMode = cmdMessenger.readBoolArg(); + // If the request is to enable powersaving mode then set the last command time + // to the earliest possible time. The next time loop() is called in mobiflight.cpp + // this will cause power saving mode to get turned on. + if (enablePowerSavingMode) { +#ifdef DEBUG2CMDMESSENGER + cmdMessenger.sendCmd(kDebug, F("Enabling power saving mode via request")); +#endif + lastCommand = 0; + } // If the request is to disable power saving mode then simply set the last command // to now. The next time loop() is called in mobiflight.cpp this will cause // power saving mode to get turned off. - if (!enablePowerSavingMode) { + else { #ifdef DEBUG2CMDMESSENGER cmdMessenger.sendCmd(kDebug, F("Disabling power saving mode via request")); #endif - setLastCommandMillis(); + lastCommand = millis(); } - - // There is no handling of a request to enable powersaving mode right now. } uint32_t getLastCommandMillis() @@ -127,11 +134,6 @@ uint32_t getLastCommandMillis() return lastCommand; } -void setLastCommandMillis() -{ - lastCommand = millis(); -} - void OnTrigger() { Button::OnTrigger();