File tree Expand file tree Collapse file tree
variants/heltec_mesh_solar Expand file tree Collapse file tree Original file line number Diff line number Diff 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}
Original file line number Diff line number Diff line change 11#pragma once
22
33class 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 () { }
Original file line number Diff line number Diff line change @@ -141,11 +141,16 @@ void SolarExWatchdog::loop() {
141141}
142142
143143unsigned 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
147152void SolarExWatchdog::feed () {
148153 digitalWrite (EX_WATCHDOG_DONE_PIN , HIGH );
149154 delay (1 );
150155 digitalWrite (EX_WATCHDOG_DONE_PIN , LOW );
151- }
156+ }
You can’t perform that action at this time.
0 commit comments