Skip to content

Commit e1d22d5

Browse files
Yveauxtekka007
authored andcommitted
Added getSleepRemaining to core (#1286)
1 parent 932d4fa commit e1d22d5

File tree

11 files changed

+36
-4
lines changed

11 files changed

+36
-4
lines changed

core/MySensorsCore.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -753,6 +753,10 @@ int8_t smartSleep(const uint8_t interrupt1, const uint8_t mode1, const uint8_t i
753753
return _sleep(sleepingMS, true, interrupt1, mode1, interrupt2, mode2);
754754
}
755755

756+
uint32_t getSleepRemaining(void)
757+
{
758+
return hwGetSleepRemaining();
759+
}
756760

757761

758762
void _nodeLock(const char *str)

core/MySensorsCore.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -364,6 +364,13 @@ int8_t _sleep(const uint32_t sleepingMS, const bool smartSleep = false,
364364
const uint8_t interrupt1 = INTERRUPT_NOT_DEFINED, const uint8_t mode1 = MODE_NOT_DEFINED,
365365
const uint8_t interrupt2 = INTERRUPT_NOT_DEFINED, const uint8_t mode2 = MODE_NOT_DEFINED);
366366

367+
/**
368+
* Return the sleep time remaining after waking up from sleep.
369+
* Depending on the CPU architecture, the remaining time can be seconds off (e.g. upto roughly 8 seconds on AVR).
370+
* @return Time remaining, in ms, when wake from sleep by an interrupt, 0 by timer (@ref MY_WAKE_UP_BY_TIMER), undefined otherwise.
371+
*/
372+
uint32_t getSleepRemaining(void);
373+
367374

368375
// **** private functions ********
369376

hal/architecture/AVR/MyHwAVR.cpp

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ volatile uint8_t _wakeUp1Interrupt =
3939
volatile uint8_t _wakeUp2Interrupt =
4040
INVALID_INTERRUPT_NUM; // Interrupt number for wakeUp2-callback.
4141

42+
static uint32_t sleepRemainingMs = 0ul;
43+
4244
void wakeUp1(void)
4345
{
4446
// Disable sleep. When an interrupt occurs after attachInterrupt,
@@ -120,7 +122,7 @@ void hwPowerDown(const uint8_t wdto)
120122
ADCSRA |= (1 << ADEN);
121123
}
122124

123-
void hwInternalSleep(uint32_t ms)
125+
uint32_t hwInternalSleep(uint32_t ms)
124126
{
125127
// Sleeping with watchdog only supports multiples of 16ms.
126128
// Round up to next multiple of 16ms, to assure we sleep at least the
@@ -137,16 +139,21 @@ void hwInternalSleep(uint32_t ms)
137139
}
138140
}
139141
}
142+
if (interruptWakeUp()) {
143+
return ms;
144+
}
145+
return 0ul;
140146
}
141147

142148
int8_t hwSleep(uint32_t ms)
143149
{
144150
// Return what woke the mcu.
145151
// Default: no interrupt triggered, timer wake up
146152
int8_t ret = MY_WAKE_UP_BY_TIMER;
153+
sleepRemainingMs = 0ul;
147154
if (ms > 0u) {
148155
// sleep for defined time
149-
hwInternalSleep(ms);
156+
sleepRemainingMs = hwInternalSleep(ms);
150157
} else {
151158
// sleep until ext interrupt triggered
152159
hwPowerDown(WDTO_SLEEP_FOREVER);
@@ -192,9 +199,10 @@ int8_t hwSleep(const uint8_t interrupt1, const uint8_t mode1, const uint8_t inte
192199
attachInterrupt(interrupt2, wakeUp2, mode2);
193200
}
194201

202+
sleepRemainingMs = 0ul;
195203
if (ms > 0u) {
196204
// sleep for defined time
197-
hwInternalSleep(ms);
205+
sleepRemainingMs = hwInternalSleep(ms);
198206
} else {
199207
// sleep until ext interrupt triggered
200208
hwPowerDown(WDTO_SLEEP_FOREVER);
@@ -220,6 +228,11 @@ int8_t hwSleep(const uint8_t interrupt1, const uint8_t mode1, const uint8_t inte
220228
return ret;
221229
}
222230

231+
uint32_t hwGetSleepRemaining(void)
232+
{
233+
return sleepRemainingMs;
234+
}
235+
223236
inline void hwRandomNumberInit(void)
224237
{
225238
// This function initializes the random number generator with a seed

hal/architecture/AVR/MyHwAVR.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ bool hwInit(void);
7777
#define hwWriteConfigBlock(__buf, __pos, __length) eeprom_update_block((const void *)__buf, (void *)__pos, (uint32_t)__length)
7878

7979
inline void hwRandomNumberInit(void);
80-
void hwInternalSleep(uint32_t ms);
80+
uint32_t hwInternalSleep(uint32_t ms);
8181

8282
#if defined(MY_SOFTSPI)
8383
SoftSPI<MY_SOFT_SPI_MISO_PIN, MY_SOFT_SPI_MOSI_PIN, MY_SOFT_SPI_SCK_PIN, 0> hwSPI; //!< hwSPI

hal/architecture/ESP32/MyHwESP32.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@
7474
#define hwMillis() millis()
7575
#define hwMicros() micros()
7676
#define hwRandomNumberInit() randomSeed(esp_random())
77+
#define hwGetSleepRemaining() (0ul)
7778

7879
bool hwInit(void);
7980
void hwReadConfigBlock(void *buf, void *addr, size_t length);

hal/architecture/ESP8266/MyHwESP8266.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
#define hwMillis() millis()
5050
// The use of randomSeed switch to pseudo random number. Keep hwRandomNumberInit empty
5151
#define hwRandomNumberInit()
52+
#define hwGetSleepRemaining() (0ul)
5253

5354
bool hwInit(void);
5455
void hwReadConfigBlock(void *buf, void *addr, size_t length);

hal/architecture/Linux/MyHwLinuxGeneric.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ StdInOutStream Serial = StdInOutStream();
5454
// Define these as macros (do nothing)
5555
#define hwWatchdogReset()
5656
#define hwReboot()
57+
#define hwGetSleepRemaining() (0ul)
5758

5859
inline void hwDigitalWrite(uint8_t, uint8_t);
5960
inline int hwDigitalRead(uint8_t);

hal/architecture/NRF5/MyHwNRF5.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,8 @@
114114
#define hwDigitalRead(__pin) digitalRead(__pin)
115115
#define hwPinMode(__pin, __value) nrf5_pinMode(__pin, __value)
116116
#define hwMillis() millis()
117+
// TODO: Can nrf5 determine time slept?
118+
#define hwGetSleepRemaining() (0ul)
117119

118120
bool hwInit(void);
119121
void hwWatchdogReset(void);

hal/architecture/SAMD/MyHwSAMD.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ extEEPROM eep(MY_EXT_EEPROM_SIZE, 1, MY_EXT_EEPROM_PAGE_SIZE,
6363
#define hwPinMode(__pin, __value) pinMode(__pin, __value)
6464
#define hwMillis() millis()
6565
#define hwRandomNumberInit() randomSeed(analogRead(MY_SIGNING_SOFT_RANDOMSEED_PIN))
66+
#define hwGetSleepRemaining() (0ul)
6667

6768
bool hwInit(void);
6869
void hwWatchdogReset(void);

hal/architecture/STM32F1/MyHwSTM32F1.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@
6969
#define hwWatchdogReset() iwdg_feed()
7070
#define hwReboot() nvic_sys_reset()
7171
#define hwMillis() millis()
72+
#define hwGetSleepRemaining() (0ul)
7273

7374
extern void serialEventRun(void) __attribute__((weak));
7475
bool hwInit(void);

0 commit comments

Comments
 (0)