Merge pull request #299 from tekka007/smartsleepfix

Fixing smartsleep, define return value for sleep()
This commit is contained in:
tekka007
2015-12-16 11:54:29 +01:00
6 changed files with 91 additions and 65 deletions
+1 -1
View File
@@ -42,7 +42,7 @@ void hwWriteConfig(int adr, uint8_t value);
uint8_t hwReadConfig(int adr);
*/
void hwSleep(unsigned long ms);
int8_t hwSleep(unsigned long ms);
int8_t hwSleep(uint8_t interrupt, uint8_t mode, unsigned long ms);
int8_t hwSleep(uint8_t interrupt1, uint8_t mode1, uint8_t interrupt2, uint8_t mode2, unsigned long ms);
#ifdef MY_DEBUG
+3 -2
View File
@@ -94,8 +94,9 @@ void hwInternalSleep(unsigned long ms) {
if (!pinIntTrigger && ms >= 16) { hwPowerDown(SLEEP_15Ms); ms -= 15; }
}
void hwSleep(unsigned long ms) {
int8_t hwSleep(unsigned long ms) {
hwInternalSleep(ms);
return -1;
}
int8_t hwSleep(uint8_t interrupt, uint8_t mode, unsigned long ms) {
@@ -120,7 +121,7 @@ int8_t hwSleep(uint8_t interrupt1, uint8_t mode1, uint8_t interrupt2, uint8_t mo
detachInterrupt(interrupt1);
if (interrupt2!=0xFF) detachInterrupt(interrupt2);
// default: no interrupt triggered
// default: no interrupt triggered, timer wake up
int8_t retVal = -1;
if (pinIntTrigger == 1) {
+6 -5
View File
@@ -92,18 +92,19 @@ void hwWriteConfig(int adr, uint8_t value)
void hwSleep(unsigned long ms) {
// TODO: Not supported!
int8_t hwSleep(unsigned long ms) {
// TODO: Not supported!
return -2;
}
int8_t hwSleep(uint8_t interrupt, uint8_t mode, unsigned long ms) {
// TODO: Not supported!
return false;
// TODO: Not supported!
return -2;
}
int8_t hwSleep(uint8_t interrupt1, uint8_t mode1, uint8_t interrupt2, uint8_t mode2, unsigned long ms) {
// TODO: Not supported!
return 0;
return -2;
}
#ifdef MY_DEBUG
+13 -12
View File
@@ -111,27 +111,28 @@ void hwReboot() {
// TODO: Not supported!
}
void hwSleep(unsigned long ms) {
int8_t hwSleep(unsigned long ms) {
// TODO: Not supported!
ms = ms + 1;
(void)ms;
return -2;
}
int8_t hwSleep(uint8_t interrupt, uint8_t mode, unsigned long ms) {
// TODO: Not supported!
interrupt = interrupt;
mode = mode;
ms = ms;
return false;
(void)interrupt;
(void)mode;
(void)ms;
return -2;
}
int8_t hwSleep(uint8_t interrupt1, uint8_t mode1, uint8_t interrupt2, uint8_t mode2, unsigned long ms) {
// TODO: Not supported!
interrupt1 = interrupt1;
mode1 = mode1;
interrupt2 = interrupt2;
mode2 = mode2;
ms = ms;
return 0;
(void)interrupt1;
(void)mode1;
(void)interrupt2;
(void)mode2;
(void)ms;
return -2;
}
#ifdef MY_DEBUG
+61 -39
View File
@@ -315,72 +315,94 @@ void wait(unsigned long ms) {
}
}
void sleep(unsigned long ms) {
#if defined(MY_OTA_FIRMWARE_FEATURE)
if (_fwUpdateOngoing) {
// Do not sleep node while fw update is ongoing
_process();
return;
} else {
#endif
#if defined(MY_RADIO_FEATURE)
transportPowerDown();
#endif
hwSleep(ms);
#if defined(MY_OTA_FIRMWARE_FEATURE)
}
#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) {
int8_t sleep(unsigned long ms) {
#if defined(MY_OTA_FIRMWARE_FEATURE)
if (_fwUpdateOngoing) {
// Do not sleep node while fw update is ongoing
return false;
} else {
wait(ms);
return -1;
}
#endif
// if repeater, do not sleep
#if defined(MY_REPEATER_FEATURE)
wait(ms);
return -1;
#else
#if defined(MY_RADIO_FEATURE)
transportPowerDown();
#endif
return hwSleep(interrupt, mode, ms) ;
#if defined(MY_OTA_FIRMWARE_FEATURE)
}
return hwSleep(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);
int8_t smartSleep(unsigned long ms) {
int8_t ret = sleep(ms);
// notifiy controller about wake up
sendHeartbeat();
// listen for incoming messages
wait(MY_SMART_SLEEP_WAIT_DURATION);
return ret;
}
int8_t sleep(uint8_t interrupt, uint8_t mode, unsigned long ms) {
#if defined(MY_OTA_FIRMWARE_FEATURE)
if (_fwUpdateOngoing) {
// not supported
return -2;
}
#endif
#if defined(MY_REPEATER_FEATURE)
// not supported
(void)interrupt;
(void)mode;
(void)ms;
return -2;
#else
#if defined(MY_RADIO_FEATURE)
transportPowerDown();
#endif
return hwSleep(interrupt, mode, ms);
#endif
}
int8_t smartSleep(uint8_t interrupt, uint8_t mode, unsigned long ms) {
int8_t ret = sleep(interrupt, mode, ms);
// notifiy controller about wake up
sendHeartbeat();
// listen for incoming messages
wait(MY_SMART_SLEEP_WAIT_DURATION);
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) {
// Do not sleep node while fw update is ongoing
return -1;
} else {
// not supported
return -2;
}
#endif
#if defined(MY_REPEATER_FEATURE)
// not supported
(void)interrupt1;
(void)mode1;
(void)interrupt2;
(void)mode2;
(void)ms;
return -2;
#else
#if defined(MY_RADIO_FEATURE)
transportPowerDown();
#endif
return hwSleep(interrupt1, mode1, interrupt2, mode2, ms) ;
#if defined(MY_OTA_FIRMWARE_FEATURE)
}
return hwSleep(interrupt1, mode1, interrupt2, mode2, ms);
#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);
// notifiy controller about wake up
sendHeartbeat();
// listen for incoming messages
wait(MY_SMART_SLEEP_WAIT_DURATION);
return ret;
}
+7 -6
View File
@@ -178,9 +178,10 @@ void wait(unsigned long ms);
/**
* Sleep (PowerDownMode) the MCU and radio. Wake up on timer.
* @param ms Number of milliseconds to sleep.
* @return -1 if timer woke it up, -2 if not possible (e.g. ongoing FW update)
*/
void sleep(unsigned long ms);
void smartSleep(unsigned long ms);
int8_t sleep(unsigned long ms);
int8_t smartSleep(unsigned long ms);
/**
* Sleep (PowerDownMode) the MCU and radio. Wake up on timer or pin change.
@@ -189,10 +190,10 @@ void smartSleep(unsigned long ms);
* @param interrupt Interrupt that should trigger the wakeup
* @param mode RISING, FALLING, CHANGE
* @param ms Number of milliseconds to sleep or 0 to sleep forever
* @return true if wake up was triggered by pin change and false means timer woke it up.
* @return Interrupt number wake up was triggered by pin change, -1 if timer woke it up, -2 if not possible (e.g. ongoing FW update)
*/
bool sleep(uint8_t interrupt, uint8_t mode, unsigned long ms=0);
bool smartSleep(uint8_t interrupt, uint8_t mode, unsigned long ms=0);
int8_t sleep(uint8_t interrupt, uint8_t mode, unsigned long ms=0);
int8_t 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.
@@ -203,7 +204,7 @@ bool smartSleep(uint8_t interrupt, uint8_t mode, unsigned long ms=0);
* @param interrupt2 Second interrupt that should trigger the wakeup
* @param mode2 Mode for second interrupt (RISING, FALLING, CHANGE)
* @param ms Number of milliseconds to sleep or 0 to sleep forever
* @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, -1 if timer woke it up, -2 if not possible (e.g. ongoing FW update)
*/
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);