Skip to content

Commit 53ff4ed

Browse files
committed
Fix watchdog code in repeater
1 parent 9df34e0 commit 53ff4ed

3 files changed

Lines changed: 29 additions & 6 deletions

File tree

examples/simple_repeater/main.cpp

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,10 @@ void setup() {
2929

3030
board.begin();
3131

32+
#ifdef HAS_EX_WATCHDOG
33+
ex_watchdog.begin();
34+
#endif
35+
3236
#if defined(MESH_DEBUG) && defined(NRF52_PLATFORM)
3337
// give some extra time for serial to settle so
3438
// boot debug messages can be seen on terminal
@@ -134,18 +138,31 @@ void loop() {
134138
#endif
135139
rtc_clock.tick();
136140

141+
#ifdef HAS_EX_WATCHDOG
142+
ex_watchdog.loop();
143+
#endif
137144
if (the_mesh.getNodePrefs()->powersaving_enabled && !the_mesh.hasPendingWork()) {
138-
#if defined(NRF52_PLATFORM)
145+
#if defined(NRF52_PLATFORM)
146+
#ifdef HAS_EX_WATCHDOG
147+
uint32_t sleep_interval = ex_watchdog.getIntervalMs()/1000;
148+
board.sleep((sleep_interval > 1800) ? 1800 : sleep_interval); // To sleep. Wake up after 30 minutes or when receiving a LoRa packet
149+
#else
150+
board.sleep(1800); // To sleep. Wake up after 30 minutes or when receiving a LoRa packet
151+
#endif
139152
board.sleep(1800); // nrf ignores seconds param, sleeps whenever possible
140-
#else
153+
#else
141154
if (the_mesh.millisHasNowPassed(lastActive + nextSleepinSecs * 1000)) { // To check if it is time to sleep
155+
#ifdef HAS_EX_WATCHDOG
156+
uint32_t sleep_interval = ex_watchdog.getIntervalMs()/1000;
157+
board.sleep((sleep_interval > 1800) ? 1800 : sleep_interval); // To sleep. Wake up after 30 minutes or when receiving a LoRa packet
158+
#else
142159
board.sleep(1800); // To sleep. Wake up after 30 minutes or when receiving a LoRa packet
143160
#endif
144161
lastActive = millis();
145162
nextSleepinSecs = 5; // Default: To work for 5s and sleep again
146163
} else {
147164
nextSleepinSecs += 5; // When there is pending work, to work another 5s
148165
}
149-
#endif
166+
#endif
150167
}
151168
}

src/helpers/ExWatchdogManager.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
#pragma once
22

33
class ExWatchdogManager {
4-
public:
4+
protected:
55
unsigned long next_feed_watchdog;
6+
public:
67
ExWatchdogManager() { next_feed_watchdog = 0; }
78
virtual bool begin() { return false; }
89
virtual void loop() { }

variants/heltec_mesh_solar/target.cpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -141,11 +141,16 @@ void SolarExWatchdog::loop() {
141141
}
142142

143143
unsigned long SolarExWatchdog::getIntervalMs() const {
144-
return next_feed_watchdog - millis();
144+
unsigned long interval_ms = 0;
145+
interval_ms = next_feed_watchdog - millis();
146+
if(interval_ms > EX_WATCHDOG_TIMEOUT_MS) {
147+
interval_ms = EX_WATCHDOG_TIMEOUT_MS;
148+
}
149+
return interval_ms;
145150
}
146151

147152
void SolarExWatchdog::feed() {
148153
digitalWrite(EX_WATCHDOG_DONE_PIN, HIGH);
149154
delay(1);
150155
digitalWrite(EX_WATCHDOG_DONE_PIN, LOW);
151-
}
156+
}

0 commit comments

Comments
 (0)