Fix smartsleep (#535)
* Make smartSleep send heartbeat before sleeping Sending the heartbeat (and waiting) after waking up would delay processing inputs. For example, a switch could be back to the open state before the wait is over. * Fix typos in comments in smartSleep methods
This commit is contained in:
+25
-29
@@ -65,7 +65,7 @@ void _infiniteLoop() {
|
||||
}
|
||||
|
||||
void _begin() {
|
||||
|
||||
|
||||
#if !defined(MY_DISABLED_SERIAL)
|
||||
hwInit();
|
||||
#endif
|
||||
@@ -73,7 +73,7 @@ void _begin() {
|
||||
debug(PSTR("MCO:BGN:INIT " MY_NODE_TYPE ",CP=" MY_CAPABILITIES ",VER=" MYSENSORS_LIBRARY_VERSION "\n"));
|
||||
|
||||
// Call before() in sketch (if it exists)
|
||||
if (before)
|
||||
if (before)
|
||||
before();
|
||||
|
||||
#if defined(MY_LEDS_BLINKING_FEATURE)
|
||||
@@ -85,7 +85,7 @@ void _begin() {
|
||||
// Read latest received controller configuration from EEPROM
|
||||
// Note: _cc.isMetric is bool, hence empty EEPROM (=0xFF) evaluates to true (default)
|
||||
hwReadConfigBlock((void*)&_cc, (void*)EEPROM_CONTROLLER_CONFIG_ADDRESS, sizeof(ControllerConfig));
|
||||
|
||||
|
||||
#if defined(MY_OTA_FIRMWARE_FEATURE)
|
||||
// Read firmware config from EEPROM, i.e. type, version, CRC, blocks
|
||||
readFirmwareSettings();
|
||||
@@ -104,7 +104,7 @@ void _begin() {
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
#ifdef MY_NODE_LOCK_FEATURE
|
||||
// Check if node has been locked down
|
||||
@@ -131,7 +131,7 @@ void _begin() {
|
||||
hwWriteConfig(EEPROM_NODE_LOCK_COUNTER, MY_NODE_LOCK_COUNTER_MAX);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#if defined(MY_GATEWAY_FEATURE)
|
||||
#if defined(MY_INCLUSION_BUTTON_FEATURE)
|
||||
inclusionInit();
|
||||
@@ -144,12 +144,12 @@ void _begin() {
|
||||
// Nothing more we can do
|
||||
_infiniteLoop();
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
#if !defined(MY_GATEWAY_FEATURE)
|
||||
presentNode();
|
||||
#endif
|
||||
|
||||
|
||||
// register node
|
||||
_registerNode();
|
||||
|
||||
@@ -173,7 +173,7 @@ void _registerNode() {
|
||||
_sendRoute(build(_msgTmp, _nc.nodeId, GATEWAY_ADDRESS, NODE_SENSOR_ID, C_INTERNAL, I_REGISTRATION_REQUEST, false).set(MY_CORE_VERSION));
|
||||
} while (!wait(2000, C_INTERNAL, I_REGISTRATION_RESPONSE) && counter--);
|
||||
|
||||
#else
|
||||
#else
|
||||
_nodeRegistered = true;
|
||||
debug(PSTR("MCO:REG:NOT NEEDED\n"));
|
||||
#endif
|
||||
@@ -190,11 +190,11 @@ void presentNode() {
|
||||
present(NODE_SENSOR_ID, S_ARDUINO_NODE);
|
||||
#endif
|
||||
#else
|
||||
|
||||
|
||||
#if defined(MY_OTA_FIRMWARE_FEATURE)
|
||||
presentBootloaderInformation();
|
||||
#endif
|
||||
|
||||
|
||||
// Send signing preferences for this node to the GW
|
||||
signerPresentation(_msgTmp, GATEWAY_ADDRESS);
|
||||
|
||||
@@ -204,16 +204,16 @@ void presentNode() {
|
||||
#else
|
||||
present(NODE_SENSOR_ID, S_ARDUINO_NODE);
|
||||
#endif
|
||||
|
||||
|
||||
// Send a configuration exchange request to controller
|
||||
// Node sends parent node. Controller answers with latest node configuration
|
||||
_sendRoute(build(_msgTmp, _nc.nodeId, GATEWAY_ADDRESS, NODE_SENSOR_ID, C_INTERNAL, I_CONFIG, false).set(_nc.parentNodeId));
|
||||
|
||||
// Wait configuration reply.
|
||||
wait(2000, C_INTERNAL, I_CONFIG);
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
if (presentation)
|
||||
presentation();
|
||||
|
||||
@@ -257,7 +257,7 @@ bool send(MyMessage &message, bool enableAck) {
|
||||
mSetRequestAck(message, enableAck);
|
||||
|
||||
#if defined(MY_REGISTRATION_FEATURE) && !defined(MY_GATEWAY_FEATURE)
|
||||
if (_nodeRegistered) {
|
||||
if (_nodeRegistered) {
|
||||
return _sendRoute(message);
|
||||
}
|
||||
else {
|
||||
@@ -379,17 +379,17 @@ bool _processInternalMessages() {
|
||||
#endif
|
||||
}
|
||||
else return false;
|
||||
}
|
||||
}
|
||||
else {
|
||||
// sender is a node
|
||||
if (type == I_REGISTRATION_REQUEST) {
|
||||
#if defined(MY_GATEWAY_FEATURE)
|
||||
// register request are exclusively handled by GW/Controller
|
||||
// !!! eventually define if AUTO ACK or register request forwarded to controller
|
||||
#if !defined(MY_REGISTRATION_CONTROLLER)
|
||||
#if !defined(MY_REGISTRATION_CONTROLLER)
|
||||
// auto register if version compatible
|
||||
bool approveRegistration = true;
|
||||
|
||||
|
||||
#if defined(MY_CORE_COMPATIBILITY_CHECK)
|
||||
approveRegistration = (_msg.getByte() >= MY_CORE_MIN_VERSION);
|
||||
#endif
|
||||
@@ -397,7 +397,7 @@ bool _processInternalMessages() {
|
||||
#else
|
||||
return false; // processing of this request via controller
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
else return false;
|
||||
}
|
||||
@@ -463,12 +463,11 @@ int8_t sleep(unsigned long ms) {
|
||||
}
|
||||
|
||||
int8_t smartSleep(unsigned long ms) {
|
||||
int8_t ret = sleep(ms);
|
||||
// notifiy controller about wake up
|
||||
// notify controller about going to sleep
|
||||
sendHeartbeat();
|
||||
// listen for incoming messages
|
||||
wait(MY_SMART_SLEEP_WAIT_DURATION);
|
||||
return ret;
|
||||
return sleep(ms);
|
||||
}
|
||||
|
||||
int8_t sleep(uint8_t interrupt, uint8_t mode, unsigned long ms) {
|
||||
@@ -496,12 +495,11 @@ int8_t sleep(uint8_t interrupt, uint8_t mode, unsigned long 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
|
||||
// notify controller about going to sleep
|
||||
sendHeartbeat();
|
||||
// listen for incoming messages
|
||||
wait(MY_SMART_SLEEP_WAIT_DURATION);
|
||||
return ret;
|
||||
return sleep(interrupt, mode, ms);
|
||||
}
|
||||
|
||||
int8_t sleep(uint8_t interrupt1, uint8_t mode1, uint8_t interrupt2, uint8_t mode2, unsigned long ms) {
|
||||
@@ -531,12 +529,11 @@ int8_t sleep(uint8_t interrupt1, uint8_t mode1, uint8_t interrupt2, uint8_t mode
|
||||
}
|
||||
|
||||
int8_t smartSleep(uint8_t interrupt1, uint8_t mode1, uint8_t interrupt2, uint8_t mode2, unsigned long ms) {
|
||||
int8_t ret = sleep(interrupt1, mode1, interrupt2, mode2, ms);
|
||||
// notifiy controller about wake up
|
||||
// notify controller about going to sleep
|
||||
sendHeartbeat();
|
||||
// listen for incoming messages
|
||||
wait(MY_SMART_SLEEP_WAIT_DURATION);
|
||||
return ret;
|
||||
return sleep(interrupt1, mode1, interrupt2, mode2, ms);
|
||||
}
|
||||
|
||||
#ifdef MY_NODE_LOCK_FEATURE
|
||||
@@ -559,4 +556,3 @@ void nodeLock(const char* str) {
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
Reference in New Issue
Block a user