Smart sleep
Add “Smart sleep” variants of all sleep methods that allows nodes to receive buffered messages/commands from controller that was issued while node was sleeping.. When calling the smartSleep() variant, the node immediately sends a heartbeat mesage when waking up (informing controller that node is awake). Before going back to sleep it waits MY_SMART_SLEEP_WAIT_DURATION to process any incoming buffered messages from the controller. NOTE: Controller must support this feature.
This commit is contained in:
@@ -74,6 +74,13 @@
|
||||
// Enables repeater functionality (relays messages from other nodes)
|
||||
// #define MY_REPEATER_FEATURE
|
||||
|
||||
// The wait period before going to sleep when using smartSleep-functions
|
||||
// This period has to be long enough for controller to be able to send out
|
||||
// potential buffered messages.
|
||||
#ifndef MY_SMART_SLEEP_WAIT_DURATION
|
||||
#define MY_SMART_SLEEP_WAIT_DURATION 500
|
||||
#endif
|
||||
|
||||
/**********************************
|
||||
* Over the air firmware updates
|
||||
***********************************/
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
#elif defined(MY_RS485)
|
||||
#define MY_CAP_RADIO "S"
|
||||
#else
|
||||
#define MY_CAP_RADIO "?"
|
||||
#define MY_CAP_RADIO "-"
|
||||
#endif
|
||||
|
||||
#if defined(MY_GATEWAY_FEATURE)
|
||||
@@ -59,7 +59,7 @@
|
||||
#elif defined(ARDUINO_ARCH_AVR)
|
||||
#define MY_CAP_ARCH "A"
|
||||
#else
|
||||
#define MY_CAP_ARCH "?"
|
||||
#define MY_CAP_ARCH "-"
|
||||
#endif
|
||||
|
||||
#if defined(MY_SIGNING_ATSHA204)
|
||||
@@ -67,10 +67,10 @@
|
||||
#elif defined(MY_SIGNING_SOFT)
|
||||
#define MY_CAP_SIGN "S"
|
||||
#else
|
||||
#define MY_CAP_SIGN "?"
|
||||
#define MY_CAP_SIGN "-"
|
||||
#endif
|
||||
|
||||
|
||||
#define MY_CAPABILIIES MY_CAP_RESET MY_CAP_OTA_FW MY_CAP_TYPE MY_CAP_ARCH MY_CAP_SIGN
|
||||
#define MY_CAPABILIIES MY_CAP_RESET MY_CAP_RADIO MY_CAP_OTA_FW MY_CAP_TYPE MY_CAP_ARCH MY_CAP_SIGN
|
||||
|
||||
#endif /* MyGatewayTransportEthernet_h */
|
||||
|
||||
@@ -334,6 +334,12 @@ void sleep(unsigned long ms) {
|
||||
#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) {
|
||||
#if defined(MY_OTA_FIRMWARE_FEATURE)
|
||||
if (_fwUpdateOngoing) {
|
||||
@@ -350,6 +356,13 @@ bool sleep(uint8_t interrupt, uint8_t mode, unsigned long ms) {
|
||||
#endif
|
||||
}
|
||||
|
||||
bool smartSleep(uint8_t interrupt, uint8_t mode, unsigned long ms) {
|
||||
wait(MY_SMART_SLEEP_WAIT_DURATION);
|
||||
bool ret = sleep(interrupt, mode, ms);
|
||||
sendHeartbeat();
|
||||
return ret;
|
||||
}
|
||||
|
||||
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) {
|
||||
@@ -366,6 +379,11 @@ int8_t sleep(uint8_t interrupt1, uint8_t mode1, uint8_t interrupt2, uint8_t mode
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
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);
|
||||
sendHeartbeat();
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -23,10 +23,6 @@
|
||||
|
||||
#include "Version.h" // Auto generated by bot
|
||||
#include "MyConfig.h"
|
||||
#ifdef MY_SIGNING_FEATURE
|
||||
#include "MySigning.h"
|
||||
#include "MySigningNone.h"
|
||||
#endif
|
||||
#include "MyMessage.h"
|
||||
#ifdef MY_OTA_FIRMWARE_FEATURE
|
||||
#include "drivers/SPIFlash/SPIFlash.h"
|
||||
@@ -184,6 +180,7 @@ void wait(unsigned long ms);
|
||||
* @param ms Number of milliseconds to sleep.
|
||||
*/
|
||||
void sleep(unsigned long ms);
|
||||
void smartSleep(unsigned long ms);
|
||||
|
||||
/**
|
||||
* Sleep (PowerDownMode) the MCU and radio. Wake up on timer or pin change.
|
||||
@@ -195,6 +192,7 @@ void sleep(unsigned long ms);
|
||||
* @return true if wake up was triggered by pin change and false means timer woke it up.
|
||||
*/
|
||||
bool sleep(uint8_t interrupt, uint8_t mode, unsigned long ms=0);
|
||||
bool 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.
|
||||
@@ -208,6 +206,7 @@ bool sleep(uint8_t interrupt, uint8_t mode, unsigned long ms=0);
|
||||
* @return Interrupt number wake up was triggered by pin change and negative if timer woke it up.
|
||||
*/
|
||||
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);
|
||||
|
||||
|
||||
/****** PRIVATE ********/
|
||||
|
||||
@@ -7,7 +7,6 @@ MySensor KEYWORD1
|
||||
#######################################
|
||||
# Methods and Functions (KEYWORD2)
|
||||
#######################################
|
||||
setIncomingCallback KEYWORD2
|
||||
present KEYWORD2
|
||||
send KEYWORD2
|
||||
sendSketchInfo KEYWORD2
|
||||
@@ -24,6 +23,8 @@ receiveTime KEYWORD2
|
||||
loop KEYWORD2
|
||||
setup KEYWORD2
|
||||
presentation KEYWORD2
|
||||
sleep KEYWORD2
|
||||
smartSleep KEYWORD2
|
||||
|
||||
######################################
|
||||
# Constants (LITERAL1)
|
||||
@@ -106,4 +107,6 @@ MY_MQTT_PUBLISH_TOPIC_PREFIX LITERAL1
|
||||
MY_MQTT_CLIENT_ID LITERAL1
|
||||
MY_GATEWAY_MQTT_CLIENT LITERAL1
|
||||
MY_DISABLE_REMOTE_RESET LITERAL1
|
||||
MY_RS485_DE_PIN LITERAL1
|
||||
MY_RS485_DE_PIN LITERAL1
|
||||
MY_SIGNING_REQUEST_SIGNATURES LITERAL1
|
||||
MY_SMART_SLEEP_WAIT_DURATION LITERAL1
|
||||
Reference in New Issue
Block a user