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)
|
// Enables repeater functionality (relays messages from other nodes)
|
||||||
// #define MY_REPEATER_FEATURE
|
// #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
|
* Over the air firmware updates
|
||||||
***********************************/
|
***********************************/
|
||||||
|
|||||||
@@ -41,7 +41,7 @@
|
|||||||
#elif defined(MY_RS485)
|
#elif defined(MY_RS485)
|
||||||
#define MY_CAP_RADIO "S"
|
#define MY_CAP_RADIO "S"
|
||||||
#else
|
#else
|
||||||
#define MY_CAP_RADIO "?"
|
#define MY_CAP_RADIO "-"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(MY_GATEWAY_FEATURE)
|
#if defined(MY_GATEWAY_FEATURE)
|
||||||
@@ -59,7 +59,7 @@
|
|||||||
#elif defined(ARDUINO_ARCH_AVR)
|
#elif defined(ARDUINO_ARCH_AVR)
|
||||||
#define MY_CAP_ARCH "A"
|
#define MY_CAP_ARCH "A"
|
||||||
#else
|
#else
|
||||||
#define MY_CAP_ARCH "?"
|
#define MY_CAP_ARCH "-"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(MY_SIGNING_ATSHA204)
|
#if defined(MY_SIGNING_ATSHA204)
|
||||||
@@ -67,10 +67,10 @@
|
|||||||
#elif defined(MY_SIGNING_SOFT)
|
#elif defined(MY_SIGNING_SOFT)
|
||||||
#define MY_CAP_SIGN "S"
|
#define MY_CAP_SIGN "S"
|
||||||
#else
|
#else
|
||||||
#define MY_CAP_SIGN "?"
|
#define MY_CAP_SIGN "-"
|
||||||
#endif
|
#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 */
|
#endif /* MyGatewayTransportEthernet_h */
|
||||||
|
|||||||
@@ -334,6 +334,12 @@ void sleep(unsigned long ms) {
|
|||||||
#endif
|
#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) {
|
bool sleep(uint8_t interrupt, uint8_t mode, unsigned long ms) {
|
||||||
#if defined(MY_OTA_FIRMWARE_FEATURE)
|
#if defined(MY_OTA_FIRMWARE_FEATURE)
|
||||||
if (_fwUpdateOngoing) {
|
if (_fwUpdateOngoing) {
|
||||||
@@ -350,6 +356,13 @@ bool sleep(uint8_t interrupt, uint8_t mode, unsigned long ms) {
|
|||||||
#endif
|
#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) {
|
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 defined(MY_OTA_FIRMWARE_FEATURE)
|
||||||
if (_fwUpdateOngoing) {
|
if (_fwUpdateOngoing) {
|
||||||
@@ -366,6 +379,11 @@ int8_t sleep(uint8_t interrupt1, uint8_t mode1, uint8_t interrupt2, uint8_t mode
|
|||||||
#endif
|
#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 "Version.h" // Auto generated by bot
|
||||||
#include "MyConfig.h"
|
#include "MyConfig.h"
|
||||||
#ifdef MY_SIGNING_FEATURE
|
|
||||||
#include "MySigning.h"
|
|
||||||
#include "MySigningNone.h"
|
|
||||||
#endif
|
|
||||||
#include "MyMessage.h"
|
#include "MyMessage.h"
|
||||||
#ifdef MY_OTA_FIRMWARE_FEATURE
|
#ifdef MY_OTA_FIRMWARE_FEATURE
|
||||||
#include "drivers/SPIFlash/SPIFlash.h"
|
#include "drivers/SPIFlash/SPIFlash.h"
|
||||||
@@ -184,6 +180,7 @@ void wait(unsigned long ms);
|
|||||||
* @param ms Number of milliseconds to sleep.
|
* @param ms Number of milliseconds to sleep.
|
||||||
*/
|
*/
|
||||||
void sleep(unsigned long ms);
|
void sleep(unsigned long ms);
|
||||||
|
void smartSleep(unsigned long ms);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sleep (PowerDownMode) the MCU and radio. Wake up on timer or pin change.
|
* 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.
|
* @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 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.
|
* 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.
|
* @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 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 ********/
|
/****** PRIVATE ********/
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ MySensor KEYWORD1
|
|||||||
#######################################
|
#######################################
|
||||||
# Methods and Functions (KEYWORD2)
|
# Methods and Functions (KEYWORD2)
|
||||||
#######################################
|
#######################################
|
||||||
setIncomingCallback KEYWORD2
|
|
||||||
present KEYWORD2
|
present KEYWORD2
|
||||||
send KEYWORD2
|
send KEYWORD2
|
||||||
sendSketchInfo KEYWORD2
|
sendSketchInfo KEYWORD2
|
||||||
@@ -24,6 +23,8 @@ receiveTime KEYWORD2
|
|||||||
loop KEYWORD2
|
loop KEYWORD2
|
||||||
setup KEYWORD2
|
setup KEYWORD2
|
||||||
presentation KEYWORD2
|
presentation KEYWORD2
|
||||||
|
sleep KEYWORD2
|
||||||
|
smartSleep KEYWORD2
|
||||||
|
|
||||||
######################################
|
######################################
|
||||||
# Constants (LITERAL1)
|
# Constants (LITERAL1)
|
||||||
@@ -106,4 +107,6 @@ MY_MQTT_PUBLISH_TOPIC_PREFIX LITERAL1
|
|||||||
MY_MQTT_CLIENT_ID LITERAL1
|
MY_MQTT_CLIENT_ID LITERAL1
|
||||||
MY_GATEWAY_MQTT_CLIENT LITERAL1
|
MY_GATEWAY_MQTT_CLIENT LITERAL1
|
||||||
MY_DISABLE_REMOTE_RESET 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