Skip to content

Commit 7f468df

Browse files
committed
Merge pull request arduino#271 from mysensors/smart-sleep
Smart sleep
2 parents 98554ab + 7e3f5d2 commit 7f468df

File tree

5 files changed

+38
-11
lines changed

5 files changed

+38
-11
lines changed

libraries/MySensors/MyConfig.h

+7
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,13 @@
7474
// Enables repeater functionality (relays messages from other nodes)
7575
// #define MY_REPEATER_FEATURE
7676

77+
// The wait period before going to sleep when using smartSleep-functions
78+
// This period has to be long enough for controller to be able to send out
79+
// potential buffered messages.
80+
#ifndef MY_SMART_SLEEP_WAIT_DURATION
81+
#define MY_SMART_SLEEP_WAIT_DURATION 500
82+
#endif
83+
7784
/**********************************
7885
* Over the air firmware updates
7986
***********************************/

libraries/MySensors/core/MyCapabilities.h

+4-4
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
#elif defined(MY_RS485)
4242
#define MY_CAP_RADIO "S"
4343
#else
44-
#define MY_CAP_RADIO "?"
44+
#define MY_CAP_RADIO "-"
4545
#endif
4646

4747
#if defined(MY_GATEWAY_FEATURE)
@@ -59,18 +59,18 @@
5959
#elif defined(ARDUINO_ARCH_AVR)
6060
#define MY_CAP_ARCH "A"
6161
#else
62-
#define MY_CAP_ARCH "?"
62+
#define MY_CAP_ARCH "-"
6363
#endif
6464

6565
#if defined(MY_SIGNING_ATSHA204)
6666
#define MY_CAP_SIGN "A"
6767
#elif defined(MY_SIGNING_SOFT)
6868
#define MY_CAP_SIGN "S"
6969
#else
70-
#define MY_CAP_SIGN "?"
70+
#define MY_CAP_SIGN "-"
7171
#endif
7272

7373

74-
#define MY_CAPABILIIES MY_CAP_RESET MY_CAP_OTA_FW MY_CAP_TYPE MY_CAP_ARCH MY_CAP_SIGN
74+
#define MY_CAPABILIIES MY_CAP_RESET MY_CAP_RADIO MY_CAP_OTA_FW MY_CAP_TYPE MY_CAP_ARCH MY_CAP_SIGN
7575

7676
#endif /* MyGatewayTransportEthernet_h */

libraries/MySensors/core/MySensorCore.cpp

+19-1
Original file line numberDiff line numberDiff line change
@@ -334,6 +334,12 @@ void sleep(unsigned long ms) {
334334
#endif
335335
}
336336

337+
void smartSleep(unsigned long ms) {
338+
wait(MY_SMART_SLEEP_WAIT_DURATION);
339+
sleep(ms);
340+
sendHeartbeat();
341+
}
342+
337343
bool sleep(uint8_t interrupt, uint8_t mode, unsigned long ms) {
338344
#if defined(MY_OTA_FIRMWARE_FEATURE)
339345
if (_fwUpdateOngoing) {
@@ -350,6 +356,13 @@ bool sleep(uint8_t interrupt, uint8_t mode, unsigned long ms) {
350356
#endif
351357
}
352358

359+
bool smartSleep(uint8_t interrupt, uint8_t mode, unsigned long ms) {
360+
wait(MY_SMART_SLEEP_WAIT_DURATION);
361+
bool ret = sleep(interrupt, mode, ms);
362+
sendHeartbeat();
363+
return ret;
364+
}
365+
353366
int8_t sleep(uint8_t interrupt1, uint8_t mode1, uint8_t interrupt2, uint8_t mode2, unsigned long ms) {
354367
#if defined(MY_OTA_FIRMWARE_FEATURE)
355368
if (_fwUpdateOngoing) {
@@ -366,6 +379,11 @@ int8_t sleep(uint8_t interrupt1, uint8_t mode1, uint8_t interrupt2, uint8_t mode
366379
#endif
367380
}
368381

369-
382+
int8_t smartSleep(uint8_t interrupt1, uint8_t mode1, uint8_t interrupt2, uint8_t mode2, unsigned long ms) {
383+
wait(MY_SMART_SLEEP_WAIT_DURATION);
384+
int8_t ret = sleep(interrupt1, mode1, interrupt2, mode2, ms);
385+
sendHeartbeat();
386+
return ret;
387+
}
370388

371389

libraries/MySensors/core/MySensorCore.h

+3-4
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,6 @@
2323

2424
#include "Version.h" // Auto generated by bot
2525
#include "MyConfig.h"
26-
#ifdef MY_SIGNING_FEATURE
27-
#include "MySigning.h"
28-
#include "MySigningNone.h"
29-
#endif
3026
#include "MyMessage.h"
3127
#ifdef MY_OTA_FIRMWARE_FEATURE
3228
#include "drivers/SPIFlash/SPIFlash.h"
@@ -184,6 +180,7 @@ void wait(unsigned long ms);
184180
* @param ms Number of milliseconds to sleep.
185181
*/
186182
void sleep(unsigned long ms);
183+
void smartSleep(unsigned long ms);
187184

188185
/**
189186
* Sleep (PowerDownMode) the MCU and radio. Wake up on timer or pin change.
@@ -195,6 +192,7 @@ void sleep(unsigned long ms);
195192
* @return true if wake up was triggered by pin change and false means timer woke it up.
196193
*/
197194
bool sleep(uint8_t interrupt, uint8_t mode, unsigned long ms=0);
195+
bool smartSleep(uint8_t interrupt, uint8_t mode, unsigned long ms=0);
198196

199197
/**
200198
* 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);
208206
* @return Interrupt number wake up was triggered by pin change and negative if timer woke it up.
209207
*/
210208
int8_t sleep(uint8_t interrupt1, uint8_t mode1, uint8_t interrupt2, uint8_t mode2, unsigned long ms=0);
209+
int8_t smartSleep(uint8_t interrupt1, uint8_t mode1, uint8_t interrupt2, uint8_t mode2, unsigned long ms=0);
211210

212211

213212
/****** PRIVATE ********/

libraries/MySensors/keywords.txt

+5-2
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ MySensor KEYWORD1
77
#######################################
88
# Methods and Functions (KEYWORD2)
99
#######################################
10-
setIncomingCallback KEYWORD2
1110
present KEYWORD2
1211
send KEYWORD2
1312
sendSketchInfo KEYWORD2
@@ -24,6 +23,8 @@ receiveTime KEYWORD2
2423
loop KEYWORD2
2524
setup KEYWORD2
2625
presentation KEYWORD2
26+
sleep KEYWORD2
27+
smartSleep KEYWORD2
2728

2829
######################################
2930
# Constants (LITERAL1)
@@ -106,4 +107,6 @@ MY_MQTT_PUBLISH_TOPIC_PREFIX LITERAL1
106107
MY_MQTT_CLIENT_ID LITERAL1
107108
MY_GATEWAY_MQTT_CLIENT LITERAL1
108109
MY_DISABLE_REMOTE_RESET LITERAL1
109-
MY_RS485_DE_PIN LITERAL1
110+
MY_RS485_DE_PIN LITERAL1
111+
MY_SIGNING_REQUEST_SIGNATURES LITERAL1
112+
MY_SMART_SLEEP_WAIT_DURATION LITERAL1

0 commit comments

Comments
 (0)