mirror of
https://github.com/meshcore-dev/MeshCore.git
synced 2026-04-20 22:13:47 +00:00
Merge pull request #4 from weebl2000/solar-watchdog
Address review comments
This commit is contained in:
commit
f9b830b5ea
9 changed files with 47 additions and 47 deletions
|
|
@ -110,8 +110,8 @@ void setup() {
|
||||||
|
|
||||||
board.begin();
|
board.begin();
|
||||||
|
|
||||||
#ifdef HAS_EX_WATCHDOG
|
#ifdef HAS_EXTERNAL_WATCHDOG
|
||||||
ex_watchdog.begin();
|
external_watchdog.begin();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DISPLAY_CLASS
|
#ifdef DISPLAY_CLASS
|
||||||
|
|
@ -229,7 +229,7 @@ void loop() {
|
||||||
ui_task.loop();
|
ui_task.loop();
|
||||||
#endif
|
#endif
|
||||||
rtc_clock.tick();
|
rtc_clock.tick();
|
||||||
#ifdef HAS_EX_WATCHDOG
|
#ifdef HAS_EXTERNAL_WATCHDOG
|
||||||
ex_watchdog.loop();
|
external_watchdog.loop();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -29,8 +29,8 @@ void setup() {
|
||||||
|
|
||||||
board.begin();
|
board.begin();
|
||||||
|
|
||||||
#ifdef HAS_EX_WATCHDOG
|
#ifdef HAS_EXTERNAL_WATCHDOG
|
||||||
ex_watchdog.begin();
|
external_watchdog.begin();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(MESH_DEBUG) && defined(NRF52_PLATFORM)
|
#if defined(MESH_DEBUG) && defined(NRF52_PLATFORM)
|
||||||
|
|
@ -138,13 +138,13 @@ void loop() {
|
||||||
#endif
|
#endif
|
||||||
rtc_clock.tick();
|
rtc_clock.tick();
|
||||||
|
|
||||||
#ifdef HAS_EX_WATCHDOG
|
#ifdef HAS_EXTERNAL_WATCHDOG
|
||||||
ex_watchdog.loop();
|
external_watchdog.loop();
|
||||||
#endif
|
#endif
|
||||||
if (the_mesh.getNodePrefs()->powersaving_enabled && !the_mesh.hasPendingWork()) {
|
if (the_mesh.getNodePrefs()->powersaving_enabled && !the_mesh.hasPendingWork()) {
|
||||||
#if defined(NRF52_PLATFORM)
|
#if defined(NRF52_PLATFORM)
|
||||||
#ifdef HAS_EX_WATCHDOG
|
#ifdef HAS_EXTERNAL_WATCHDOG
|
||||||
uint32_t sleep_interval = ex_watchdog.getIntervalMs()/1000;
|
uint32_t sleep_interval = external_watchdog.getIntervalMs()/1000;
|
||||||
board.sleep((sleep_interval > 1800) ? 1800 : sleep_interval); // To sleep. Wake up after 30 minutes or when receiving a LoRa packet
|
board.sleep((sleep_interval > 1800) ? 1800 : sleep_interval); // To sleep. Wake up after 30 minutes or when receiving a LoRa packet
|
||||||
#else
|
#else
|
||||||
board.sleep(1800); // To sleep. Wake up after 30 minutes or when receiving a LoRa packet
|
board.sleep(1800); // To sleep. Wake up after 30 minutes or when receiving a LoRa packet
|
||||||
|
|
@ -152,8 +152,8 @@ void loop() {
|
||||||
board.sleep(1800); // nrf ignores seconds param, sleeps whenever possible
|
board.sleep(1800); // nrf ignores seconds param, sleeps whenever possible
|
||||||
#else
|
#else
|
||||||
if (the_mesh.millisHasNowPassed(lastActive + nextSleepinSecs * 1000)) { // To check if it is time to sleep
|
if (the_mesh.millisHasNowPassed(lastActive + nextSleepinSecs * 1000)) { // To check if it is time to sleep
|
||||||
#ifdef HAS_EX_WATCHDOG
|
#ifdef HAS_EXTERNAL_WATCHDOG
|
||||||
uint32_t sleep_interval = ex_watchdog.getIntervalMs()/1000;
|
uint32_t sleep_interval = external_watchdog.getIntervalMs()/1000;
|
||||||
board.sleep((sleep_interval > 1800) ? 1800 : sleep_interval); // To sleep. Wake up after 30 minutes or when receiving a LoRa packet
|
board.sleep((sleep_interval > 1800) ? 1800 : sleep_interval); // To sleep. Wake up after 30 minutes or when receiving a LoRa packet
|
||||||
#else
|
#else
|
||||||
board.sleep(1800); // To sleep. Wake up after 30 minutes or when receiving a LoRa packet
|
board.sleep(1800); // To sleep. Wake up after 30 minutes or when receiving a LoRa packet
|
||||||
|
|
|
||||||
|
|
@ -24,8 +24,8 @@ void setup() {
|
||||||
|
|
||||||
board.begin();
|
board.begin();
|
||||||
|
|
||||||
#ifdef HAS_EX_WATCHDOG
|
#ifdef HAS_EXTERNAL_WATCHDOG
|
||||||
ex_watchdog.begin();
|
external_watchdog.begin();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DISPLAY_CLASS
|
#ifdef DISPLAY_CLASS
|
||||||
|
|
@ -117,7 +117,7 @@ void loop() {
|
||||||
ui_task.loop();
|
ui_task.loop();
|
||||||
#endif
|
#endif
|
||||||
rtc_clock.tick();
|
rtc_clock.tick();
|
||||||
#ifdef HAS_EX_WATCHDOG
|
#ifdef HAS_EXTERNAL_WATCHDOG
|
||||||
ex_watchdog.loop();
|
external_watchdog.loop();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -559,8 +559,8 @@ void setup() {
|
||||||
|
|
||||||
board.begin();
|
board.begin();
|
||||||
|
|
||||||
#ifdef HAS_EX_WATCHDOG
|
#ifdef HAS_EXTERNAL_WATCHDOG
|
||||||
ex_watchdog.begin();
|
external_watchdog.begin();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (!radio_init()) { halt(); }
|
if (!radio_init()) { halt(); }
|
||||||
|
|
@ -594,7 +594,7 @@ void setup() {
|
||||||
void loop() {
|
void loop() {
|
||||||
the_mesh.loop();
|
the_mesh.loop();
|
||||||
rtc_clock.tick();
|
rtc_clock.tick();
|
||||||
#ifdef HAS_EX_WATCHDOG
|
#ifdef HAS_EXTERNAL_WATCHDOG
|
||||||
ex_watchdog.loop();
|
external_watchdog.loop();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -58,8 +58,8 @@ void setup() {
|
||||||
|
|
||||||
board.begin();
|
board.begin();
|
||||||
|
|
||||||
#ifdef HAS_EX_WATCHDOG
|
#ifdef HAS_EXTERNAL_WATCHDOG
|
||||||
ex_watchdog.begin();
|
external_watchdog.begin();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DISPLAY_CLASS
|
#ifdef DISPLAY_CLASS
|
||||||
|
|
@ -151,7 +151,7 @@ void loop() {
|
||||||
ui_task.loop();
|
ui_task.loop();
|
||||||
#endif
|
#endif
|
||||||
rtc_clock.tick();
|
rtc_clock.tick();
|
||||||
#ifdef HAS_EX_WATCHDOG
|
#ifdef HAS_EXTERNAL_WATCHDOG
|
||||||
ex_watchdog.loop();
|
external_watchdog.loop();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,10 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
class ExWatchdogManager {
|
class ExternalWatchdogManager {
|
||||||
protected:
|
protected:
|
||||||
unsigned long next_feed_watchdog;
|
unsigned long next_feed_watchdog;
|
||||||
public:
|
public:
|
||||||
ExWatchdogManager() { next_feed_watchdog = 0; }
|
ExternalWatchdogManager() { next_feed_watchdog = 0; }
|
||||||
virtual bool begin() { return false; }
|
virtual bool begin() { return false; }
|
||||||
virtual void loop() { }
|
virtual void loop() { }
|
||||||
virtual unsigned long getIntervalMs() const { return 0; }
|
virtual unsigned long getIntervalMs() const { return 0; }
|
||||||
|
|
@ -14,10 +14,10 @@ build_flags = ${nrf52_base.build_flags}
|
||||||
-D LORA_TX_POWER=22
|
-D LORA_TX_POWER=22
|
||||||
-D SX126X_CURRENT_LIMIT=140
|
-D SX126X_CURRENT_LIMIT=140
|
||||||
-D SX126X_RX_BOOSTED_GAIN=1
|
-D SX126X_RX_BOOSTED_GAIN=1
|
||||||
-D HAS_EX_WATCHDOG
|
-D HAS_EXTERNAL_WATCHDOG
|
||||||
-D EX_WATCHDOG_DONE_PIN=9
|
-D EXTERNAL_WATCHDOG_DONE_PIN=9
|
||||||
-D EX_WATCHDOG_WAKE_PIN=10
|
-D EXTERNAL_WATCHDOG_WAKE_PIN=10
|
||||||
-D EX_WATCHDOG_TIMEOUT_MS=480000 ;(6*60*1000) ; 6 minute watchdog
|
-D EXTERNAL_WATCHDOG_TIMEOUT_MS=480000 ;(6*60*1000) ; 6 minute watchdog
|
||||||
|
|
||||||
build_src_filter = ${nrf52_base.build_src_filter}
|
build_src_filter = ${nrf52_base.build_src_filter}
|
||||||
+<helpers/*.cpp>
|
+<helpers/*.cpp>
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ VolatileRTCClock fallback_clock;
|
||||||
AutoDiscoverRTCClock rtc_clock(fallback_clock);
|
AutoDiscoverRTCClock rtc_clock(fallback_clock);
|
||||||
MicroNMEALocationProvider nmea = MicroNMEALocationProvider(Serial1);
|
MicroNMEALocationProvider nmea = MicroNMEALocationProvider(Serial1);
|
||||||
SolarSensorManager sensors = SolarSensorManager(nmea);
|
SolarSensorManager sensors = SolarSensorManager(nmea);
|
||||||
SolarExWatchdog ex_watchdog;
|
SolarExternalWatchdog external_watchdog;
|
||||||
|
|
||||||
#ifdef DISPLAY_CLASS
|
#ifdef DISPLAY_CLASS
|
||||||
DISPLAY_CLASS display;
|
DISPLAY_CLASS display;
|
||||||
|
|
@ -123,34 +123,34 @@ bool SolarSensorManager::setSettingValue(const char* name, const char* value) {
|
||||||
return false; // not supported
|
return false; // not supported
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SolarExWatchdog::begin() {
|
bool SolarExternalWatchdog::begin() {
|
||||||
next_feed_watchdog = 0;
|
next_feed_watchdog = 0;
|
||||||
pinMode(EX_WATCHDOG_WAKE_PIN, INPUT);
|
pinMode(EXTERNAL_WATCHDOG_WAKE_PIN, INPUT);
|
||||||
pinMode(EX_WATCHDOG_DONE_PIN, OUTPUT);
|
pinMode(EXTERNAL_WATCHDOG_DONE_PIN, OUTPUT);
|
||||||
delay(1);
|
delay(1);
|
||||||
digitalWrite(EX_WATCHDOG_DONE_PIN, LOW);
|
digitalWrite(EXTERNAL_WATCHDOG_DONE_PIN, LOW);
|
||||||
delay(1);
|
delay(1);
|
||||||
feed();
|
feed();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
void SolarExWatchdog::loop() {
|
void SolarExternalWatchdog::loop() {
|
||||||
if (millis() > next_feed_watchdog) {
|
if (millis() > next_feed_watchdog) {
|
||||||
feed();
|
feed();
|
||||||
next_feed_watchdog = millis() + EX_WATCHDOG_TIMEOUT_MS;
|
next_feed_watchdog = millis() + EXTERNAL_WATCHDOG_TIMEOUT_MS;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned long SolarExWatchdog::getIntervalMs() const {
|
unsigned long SolarExternalWatchdog::getIntervalMs() const {
|
||||||
unsigned long interval_ms = 0;
|
unsigned long interval_ms = 0;
|
||||||
interval_ms = next_feed_watchdog - millis();
|
interval_ms = next_feed_watchdog - millis();
|
||||||
if(interval_ms > EX_WATCHDOG_TIMEOUT_MS) {
|
if(interval_ms > EXTERNAL_WATCHDOG_TIMEOUT_MS) {
|
||||||
interval_ms = EX_WATCHDOG_TIMEOUT_MS;
|
interval_ms = EXTERNAL_WATCHDOG_TIMEOUT_MS;
|
||||||
}
|
}
|
||||||
return interval_ms;
|
return interval_ms;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SolarExWatchdog::feed() {
|
void SolarExternalWatchdog::feed() {
|
||||||
digitalWrite(EX_WATCHDOG_DONE_PIN, HIGH);
|
digitalWrite(EXTERNAL_WATCHDOG_DONE_PIN, HIGH);
|
||||||
delay(1);
|
delay(1);
|
||||||
digitalWrite(EX_WATCHDOG_DONE_PIN, LOW);
|
digitalWrite(EXTERNAL_WATCHDOG_DONE_PIN, LOW);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@
|
||||||
#include <helpers/AutoDiscoverRTCClock.h>
|
#include <helpers/AutoDiscoverRTCClock.h>
|
||||||
#include <helpers/SensorManager.h>
|
#include <helpers/SensorManager.h>
|
||||||
#include <helpers/sensors/LocationProvider.h>
|
#include <helpers/sensors/LocationProvider.h>
|
||||||
#include <helpers/ExWatchdogManager.h>
|
#include <helpers/ExternalWatchdogManager.h>
|
||||||
#ifdef DISPLAY_CLASS
|
#ifdef DISPLAY_CLASS
|
||||||
#include <helpers/ui/ST7789Display.h>
|
#include <helpers/ui/ST7789Display.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -31,9 +31,9 @@ public:
|
||||||
bool setSettingValue(const char* name, const char* value) override;
|
bool setSettingValue(const char* name, const char* value) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
class SolarExWatchdog : public ExWatchdogManager {
|
class SolarExternalWatchdog : public ExternalWatchdogManager {
|
||||||
public:
|
public:
|
||||||
SolarExWatchdog() {}
|
SolarExternalWatchdog() {}
|
||||||
bool begin() override;
|
bool begin() override;
|
||||||
void loop() override;
|
void loop() override;
|
||||||
unsigned long getIntervalMs() const override;
|
unsigned long getIntervalMs() const override;
|
||||||
|
|
@ -44,7 +44,7 @@ extern MeshSolarBoard board;
|
||||||
extern WRAPPER_CLASS radio_driver;
|
extern WRAPPER_CLASS radio_driver;
|
||||||
extern AutoDiscoverRTCClock rtc_clock;
|
extern AutoDiscoverRTCClock rtc_clock;
|
||||||
extern SolarSensorManager sensors;
|
extern SolarSensorManager sensors;
|
||||||
extern SolarExWatchdog ex_watchdog;
|
extern SolarExternalWatchdog external_watchdog;
|
||||||
|
|
||||||
#ifdef DISPLAY_CLASS
|
#ifdef DISPLAY_CLASS
|
||||||
extern DISPLAY_CLASS display;
|
extern DISPLAY_CLASS display;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue