From cb3c55ae3be86c0c279936ca1746dec8301a2ed0 Mon Sep 17 00:00:00 2001 From: tekka007 Date: Tue, 15 Dec 2015 16:30:02 +0100 Subject: [PATCH 1/4] Fixing smartsleep, define return value for sleep() --- libraries/MySensors/core/MyHw.h | 2 +- libraries/MySensors/core/MyHwATMega328.cpp | 5 +- libraries/MySensors/core/MyHwESP8266.cpp | 11 +-- libraries/MySensors/core/MyHwSAMD.cpp | 7 +- libraries/MySensors/core/MySensorCore.cpp | 85 +++++++++++----------- libraries/MySensors/core/MySensorCore.h | 13 ++-- 6 files changed, 62 insertions(+), 61 deletions(-) diff --git a/libraries/MySensors/core/MyHw.h b/libraries/MySensors/core/MyHw.h index c93ea41..e7a9ee6 100644 --- a/libraries/MySensors/core/MyHw.h +++ b/libraries/MySensors/core/MyHw.h @@ -42,7 +42,7 @@ void hwWriteConfig(int adr, uint8_t value); uint8_t hwReadConfig(int adr); */ -void hwSleep(unsigned long ms); +int8_t hwSleep(unsigned long ms); int8_t hwSleep(uint8_t interrupt, uint8_t mode, unsigned long ms); int8_t hwSleep(uint8_t interrupt1, uint8_t mode1, uint8_t interrupt2, uint8_t mode2, unsigned long ms); #ifdef MY_DEBUG diff --git a/libraries/MySensors/core/MyHwATMega328.cpp b/libraries/MySensors/core/MyHwATMega328.cpp index eaf6759..9600f7e 100644 --- a/libraries/MySensors/core/MyHwATMega328.cpp +++ b/libraries/MySensors/core/MyHwATMega328.cpp @@ -94,8 +94,9 @@ void hwInternalSleep(unsigned long ms) { if (!pinIntTrigger && ms >= 16) { hwPowerDown(SLEEP_15Ms); ms -= 15; } } -void hwSleep(unsigned long ms) { +int8_t hwSleep(unsigned long ms) { hwInternalSleep(ms); + return -1; } int8_t hwSleep(uint8_t interrupt, uint8_t mode, unsigned long ms) { @@ -120,7 +121,7 @@ int8_t hwSleep(uint8_t interrupt1, uint8_t mode1, uint8_t interrupt2, uint8_t mo detachInterrupt(interrupt1); if (interrupt2!=0xFF) detachInterrupt(interrupt2); - // default: no interrupt triggered + // default: no interrupt triggered, timer wake up int8_t retVal = -1; if (pinIntTrigger == 1) { diff --git a/libraries/MySensors/core/MyHwESP8266.cpp b/libraries/MySensors/core/MyHwESP8266.cpp index f2e6879..da08eb0 100644 --- a/libraries/MySensors/core/MyHwESP8266.cpp +++ b/libraries/MySensors/core/MyHwESP8266.cpp @@ -92,18 +92,19 @@ void hwWriteConfig(int adr, uint8_t value) -void hwSleep(unsigned long ms) { - // TODO: Not supported! +int8_t hwSleep(unsigned long ms) { + // TODO: Not supported! + return -2; } int8_t hwSleep(uint8_t interrupt, uint8_t mode, unsigned long ms) { - // TODO: Not supported! - return false; + // TODO: Not supported! + return -2; } int8_t hwSleep(uint8_t interrupt1, uint8_t mode1, uint8_t interrupt2, uint8_t mode2, unsigned long ms) { // TODO: Not supported! - return 0; + return -2; } #ifdef MY_DEBUG diff --git a/libraries/MySensors/core/MyHwSAMD.cpp b/libraries/MySensors/core/MyHwSAMD.cpp index c358419..7ee7ccd 100644 --- a/libraries/MySensors/core/MyHwSAMD.cpp +++ b/libraries/MySensors/core/MyHwSAMD.cpp @@ -111,9 +111,10 @@ void hwReboot() { // TODO: Not supported! } -void hwSleep(unsigned long ms) { +int8_t hwSleep(unsigned long ms) { // TODO: Not supported! ms = ms + 1; + return -2; } int8_t hwSleep(uint8_t interrupt, uint8_t mode, unsigned long ms) { @@ -121,7 +122,7 @@ int8_t hwSleep(uint8_t interrupt, uint8_t mode, unsigned long ms) { interrupt = interrupt; mode = mode; ms = ms; - return false; + return -2; } int8_t hwSleep(uint8_t interrupt1, uint8_t mode1, uint8_t interrupt2, uint8_t mode2, unsigned long ms) { @@ -131,7 +132,7 @@ int8_t hwSleep(uint8_t interrupt1, uint8_t mode1, uint8_t interrupt2, uint8_t mo interrupt2 = interrupt2; mode2 = mode2; ms = ms; - return 0; + return -2; } #ifdef MY_DEBUG diff --git a/libraries/MySensors/core/MySensorCore.cpp b/libraries/MySensors/core/MySensorCore.cpp index a144300..7561913 100644 --- a/libraries/MySensors/core/MySensorCore.cpp +++ b/libraries/MySensors/core/MySensorCore.cpp @@ -315,49 +315,47 @@ void wait(unsigned long ms) { } } -void sleep(unsigned long ms) { - #if defined(MY_OTA_FIRMWARE_FEATURE) - if (_fwUpdateOngoing) { - // Do not sleep node while fw update is ongoing - _process(); - return; - } else { - #endif - #if defined(MY_RADIO_FEATURE) - transportPowerDown(); - #endif - hwSleep(ms); - #if defined(MY_OTA_FIRMWARE_FEATURE) - } - #endif -} - -void smartSleep(unsigned long ms) { - wait(MY_SMART_SLEEP_WAIT_DURATION); - sleep(ms); - sendHeartbeat(); -} - -bool sleep(uint8_t interrupt, uint8_t mode, unsigned long ms) { +int8_t sleep(unsigned long ms) { #if defined(MY_OTA_FIRMWARE_FEATURE) if (_fwUpdateOngoing) { // Do not sleep node while fw update is ongoing - return false; - } else { - #endif - #if defined(MY_RADIO_FEATURE) - transportPowerDown(); - #endif - return hwSleep(interrupt, mode, ms) ; - #if defined(MY_OTA_FIRMWARE_FEATURE) + return -2; } #endif + #if defined(MY_RADIO_FEATURE) + transportPowerDown(); + #endif + return hwSleep(ms); } -bool smartSleep(uint8_t interrupt, uint8_t mode, unsigned long ms) { - wait(MY_SMART_SLEEP_WAIT_DURATION); - bool ret = sleep(interrupt, mode, ms); +int8_t smartSleep(unsigned long ms) { + int8_t ret = sleep(ms); + // notifiy controller about wake up sendHeartbeat(); + // listen for incoming messages + wait(MY_SMART_SLEEP_WAIT_DURATION); + return ret; +} + +int8_t sleep(uint8_t interrupt, uint8_t mode, unsigned long ms) { + #if defined(MY_OTA_FIRMWARE_FEATURE) + if (_fwUpdateOngoing) { + // Do not sleep node while fw update is ongoing + return -2; + } + #endif + #if defined(MY_RADIO_FEATURE) + transportPowerDown(); + #endif + return hwSleep(interrupt, mode, ms); +} + +int8_t smartSleep(uint8_t interrupt, uint8_t mode, unsigned long ms) { + int8_t ret = sleep(interrupt, mode, ms); + // notifiy controller about wake up + sendHeartbeat(); + // listen for incoming messages + wait(MY_SMART_SLEEP_WAIT_DURATION); return ret; } @@ -365,22 +363,21 @@ int8_t sleep(uint8_t interrupt1, uint8_t mode1, uint8_t interrupt2, uint8_t mode #if defined(MY_OTA_FIRMWARE_FEATURE) if (_fwUpdateOngoing) { // Do not sleep node while fw update is ongoing - return -1; - } else { - #endif - #if defined(MY_RADIO_FEATURE) - transportPowerDown(); - #endif - return hwSleep(interrupt1, mode1, interrupt2, mode2, ms) ; - #if defined(MY_OTA_FIRMWARE_FEATURE) + return -2; } #endif + #if defined(MY_RADIO_FEATURE) + transportPowerDown(); + #endif + return hwSleep(interrupt1, mode1, interrupt2, mode2, ms); } int8_t smartSleep(uint8_t interrupt1, uint8_t mode1, uint8_t interrupt2, uint8_t mode2, unsigned long ms) { - wait(MY_SMART_SLEEP_WAIT_DURATION); int8_t ret = sleep(interrupt1, mode1, interrupt2, mode2, ms); + // notifiy controller about wake up sendHeartbeat(); + // listen for incoming messages + wait(MY_SMART_SLEEP_WAIT_DURATION); return ret; } diff --git a/libraries/MySensors/core/MySensorCore.h b/libraries/MySensors/core/MySensorCore.h index 3597c97..120dc3c 100644 --- a/libraries/MySensors/core/MySensorCore.h +++ b/libraries/MySensors/core/MySensorCore.h @@ -178,9 +178,10 @@ void wait(unsigned long ms); /** * Sleep (PowerDownMode) the MCU and radio. Wake up on timer. * @param ms Number of milliseconds to sleep. + * @return -1 if timer woke it up, -2 if not possible (e.g. ongoing FW update) */ -void sleep(unsigned long ms); -void smartSleep(unsigned long ms); +int8_t sleep(unsigned long ms); +int8_t smartSleep(unsigned long ms); /** * Sleep (PowerDownMode) the MCU and radio. Wake up on timer or pin change. @@ -189,10 +190,10 @@ void smartSleep(unsigned long ms); * @param interrupt Interrupt that should trigger the wakeup * @param mode RISING, FALLING, CHANGE * @param ms Number of milliseconds to sleep or 0 to sleep forever - * @return true if wake up was triggered by pin change and false means timer woke it up. + * @return Interrupt number wake up was triggered by pin change, -1 if timer woke it up, -2 if not possible (e.g. ongoing FW update) */ -bool sleep(uint8_t interrupt, uint8_t mode, unsigned long ms=0); -bool smartSleep(uint8_t interrupt, uint8_t mode, unsigned long ms=0); +int8_t sleep(uint8_t interrupt, uint8_t mode, unsigned long ms=0); +int8_t smartSleep(uint8_t interrupt, uint8_t mode, unsigned long ms=0); /** * Sleep (PowerDownMode) the MCU and radio. Wake up on timer or pin change for two separate interrupts. @@ -203,7 +204,7 @@ bool smartSleep(uint8_t interrupt, uint8_t mode, unsigned long ms=0); * @param interrupt2 Second interrupt that should trigger the wakeup * @param mode2 Mode for second interrupt (RISING, FALLING, CHANGE) * @param ms Number of milliseconds to sleep or 0 to sleep forever - * @return Interrupt number wake up was triggered by pin change and negative if timer woke it up. + * @return Interrupt number wake up was triggered by pin change, -1 if timer woke it up, -2 if not possible (e.g. ongoing FW update) */ int8_t sleep(uint8_t interrupt1, uint8_t mode1, uint8_t interrupt2, uint8_t mode2, unsigned long ms=0); int8_t smartSleep(uint8_t interrupt1, uint8_t mode1, uint8_t interrupt2, uint8_t mode2, unsigned long ms=0); From 26a2e18747e87f3e924c4cf4cd19e68eb3bd4aae Mon Sep 17 00:00:00 2001 From: tekka007 Date: Tue, 15 Dec 2015 21:32:21 +0100 Subject: [PATCH 2/4] remove sleeping for repeaters --- libraries/MySensors/core/MySensorCore.cpp | 41 ++++++++++++++++------- 1 file changed, 29 insertions(+), 12 deletions(-) diff --git a/libraries/MySensors/core/MySensorCore.cpp b/libraries/MySensors/core/MySensorCore.cpp index 7561913..066e103 100644 --- a/libraries/MySensors/core/MySensorCore.cpp +++ b/libraries/MySensors/core/MySensorCore.cpp @@ -319,13 +319,20 @@ int8_t sleep(unsigned long ms) { #if defined(MY_OTA_FIRMWARE_FEATURE) if (_fwUpdateOngoing) { // Do not sleep node while fw update is ongoing - return -2; + wait(ms); + return -1; } #endif - #if defined(MY_RADIO_FEATURE) - transportPowerDown(); + // if repeater, do not sleep + #if defined(MY_REPEATER_FEATURE) + wait(ms); + return -1; + #else + #if defined(MY_RADIO_FEATURE) + transportPowerDown(); + #endif + return hwSleep(ms); #endif - return hwSleep(ms); } int8_t smartSleep(unsigned long ms) { @@ -340,14 +347,19 @@ int8_t smartSleep(unsigned long ms) { int8_t sleep(uint8_t interrupt, uint8_t mode, unsigned long ms) { #if defined(MY_OTA_FIRMWARE_FEATURE) if (_fwUpdateOngoing) { - // Do not sleep node while fw update is ongoing + // not supported return -2; } #endif - #if defined(MY_RADIO_FEATURE) - transportPowerDown(); + #if defined(MY_REPEATER_FEATURE) + // not supported + return -2; + #else + #if defined(MY_RADIO_FEATURE) + transportPowerDown(); + #endif + return hwSleep(interrupt, mode, ms); #endif - return hwSleep(interrupt, mode, ms); } int8_t smartSleep(uint8_t interrupt, uint8_t mode, unsigned long ms) { @@ -362,14 +374,19 @@ int8_t smartSleep(uint8_t interrupt, uint8_t mode, unsigned long ms) { int8_t sleep(uint8_t interrupt1, uint8_t mode1, uint8_t interrupt2, uint8_t mode2, unsigned long ms) { #if defined(MY_OTA_FIRMWARE_FEATURE) if (_fwUpdateOngoing) { - // Do not sleep node while fw update is ongoing + // not supported return -2; } #endif - #if defined(MY_RADIO_FEATURE) - transportPowerDown(); + #if defined(MY_REPEATER_FEATURE) + // not supported + return -2; + #else + #if defined(MY_RADIO_FEATURE) + transportPowerDown(); + #endif + return hwSleep(interrupt1, mode1, interrupt2, mode2, ms); #endif - return hwSleep(interrupt1, mode1, interrupt2, mode2, ms); } int8_t smartSleep(uint8_t interrupt1, uint8_t mode1, uint8_t interrupt2, uint8_t mode2, unsigned long ms) { From f7707da08ee75e23fb1966cfa2a3082118a863f6 Mon Sep 17 00:00:00 2001 From: tekka007 Date: Tue, 15 Dec 2015 21:52:22 +0100 Subject: [PATCH 3/4] warnings due to unused parameters --- libraries/MySensors/core/MySensorCore.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/libraries/MySensors/core/MySensorCore.cpp b/libraries/MySensors/core/MySensorCore.cpp index 066e103..59cf79d 100644 --- a/libraries/MySensors/core/MySensorCore.cpp +++ b/libraries/MySensors/core/MySensorCore.cpp @@ -353,6 +353,9 @@ int8_t sleep(uint8_t interrupt, uint8_t mode, unsigned long ms) { #endif #if defined(MY_REPEATER_FEATURE) // not supported + interrupt = interrupt; + mode = mode; + ms = ms; return -2; #else #if defined(MY_RADIO_FEATURE) @@ -380,6 +383,11 @@ int8_t sleep(uint8_t interrupt1, uint8_t mode1, uint8_t interrupt2, uint8_t mode #endif #if defined(MY_REPEATER_FEATURE) // not supported + interrupt1 = interrupt1; + mode1 = mode1; + interrupt2 = interrupt2; + mode2 = mode2; + ms = ms; return -2; #else #if defined(MY_RADIO_FEATURE) From 1c544097211c628b2336a115ca66bf2df507bdd0 Mon Sep 17 00:00:00 2001 From: tekka007 Date: Tue, 15 Dec 2015 22:08:34 +0100 Subject: [PATCH 4/4] change unused warning workaround to (void)parameter --- libraries/MySensors/core/MyHwSAMD.cpp | 18 +++++++++--------- libraries/MySensors/core/MySensorCore.cpp | 16 ++++++++-------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/libraries/MySensors/core/MyHwSAMD.cpp b/libraries/MySensors/core/MyHwSAMD.cpp index 7ee7ccd..8fda54f 100644 --- a/libraries/MySensors/core/MyHwSAMD.cpp +++ b/libraries/MySensors/core/MyHwSAMD.cpp @@ -113,25 +113,25 @@ void hwReboot() { int8_t hwSleep(unsigned long ms) { // TODO: Not supported! - ms = ms + 1; + (void)ms; return -2; } int8_t hwSleep(uint8_t interrupt, uint8_t mode, unsigned long ms) { // TODO: Not supported! - interrupt = interrupt; - mode = mode; - ms = ms; + (void)interrupt; + (void)mode; + (void)ms; return -2; } int8_t hwSleep(uint8_t interrupt1, uint8_t mode1, uint8_t interrupt2, uint8_t mode2, unsigned long ms) { // TODO: Not supported! - interrupt1 = interrupt1; - mode1 = mode1; - interrupt2 = interrupt2; - mode2 = mode2; - ms = ms; + (void)interrupt1; + (void)mode1; + (void)interrupt2; + (void)mode2; + (void)ms; return -2; } diff --git a/libraries/MySensors/core/MySensorCore.cpp b/libraries/MySensors/core/MySensorCore.cpp index 59cf79d..f3a1451 100644 --- a/libraries/MySensors/core/MySensorCore.cpp +++ b/libraries/MySensors/core/MySensorCore.cpp @@ -353,9 +353,9 @@ int8_t sleep(uint8_t interrupt, uint8_t mode, unsigned long ms) { #endif #if defined(MY_REPEATER_FEATURE) // not supported - interrupt = interrupt; - mode = mode; - ms = ms; + (void)interrupt; + (void)mode; + (void)ms; return -2; #else #if defined(MY_RADIO_FEATURE) @@ -383,11 +383,11 @@ int8_t sleep(uint8_t interrupt1, uint8_t mode1, uint8_t interrupt2, uint8_t mode #endif #if defined(MY_REPEATER_FEATURE) // not supported - interrupt1 = interrupt1; - mode1 = mode1; - interrupt2 = interrupt2; - mode2 = mode2; - ms = ms; + (void)interrupt1; + (void)mode1; + (void)interrupt2; + (void)mode2; + (void)ms; return -2; #else #if defined(MY_RADIO_FEATURE)