Fix external watchdog timing around sleep

This commit is contained in:
Quency-D
2026-04-27 15:32:02 +08:00
parent 7e0d9f6f39
commit 363ac44461
4 changed files with 17 additions and 17 deletions
+2 -2
View File
@@ -17,7 +17,7 @@ build_flags = ${nrf52_base.build_flags}
-D HAS_EXTERNAL_WATCHDOG
-D EXTERNAL_WATCHDOG_DONE_PIN=9
-D EXTERNAL_WATCHDOG_WAKE_PIN=10
-D EXTERNAL_WATCHDOG_TIMEOUT_MS=480000 ;(6*60*1000) ; 6 minute watchdog
-D EXTERNAL_WATCHDOG_FEED_INTERVAL_MS=480000 ; 8 minute feed interval, safely inside the hardware watchdog timeout
build_src_filter = ${nrf52_base.build_src_filter}
+<helpers/*.cpp>
@@ -97,4 +97,4 @@ build_src_filter = ${Heltec_mesh_solar.build_src_filter}
+<../examples/companion_radio/*.cpp>
lib_deps =
${Heltec_mesh_solar.lib_deps}
densaugeo/base64 @ ~1.4.0
densaugeo/base64 @ ~1.4.0
+7 -8
View File
@@ -124,7 +124,7 @@ bool SolarSensorManager::setSettingValue(const char* name, const char* value) {
}
bool SolarExternalWatchdog::begin() {
next_feed_watchdog = 0;
last_feed_watchdog = 0;
pinMode(EXTERNAL_WATCHDOG_WAKE_PIN, INPUT);
pinMode(EXTERNAL_WATCHDOG_DONE_PIN, OUTPUT);
delay(1);
@@ -134,23 +134,22 @@ bool SolarExternalWatchdog::begin() {
return true;
}
void SolarExternalWatchdog::loop() {
if (millis() > next_feed_watchdog) {
if (millis() - last_feed_watchdog >= EXTERNAL_WATCHDOG_FEED_INTERVAL_MS) {
feed();
next_feed_watchdog = millis() + EXTERNAL_WATCHDOG_TIMEOUT_MS;
}
}
unsigned long SolarExternalWatchdog::getIntervalMs() const {
unsigned long interval_ms = 0;
interval_ms = next_feed_watchdog - millis();
if(interval_ms > EXTERNAL_WATCHDOG_TIMEOUT_MS) {
interval_ms = EXTERNAL_WATCHDOG_TIMEOUT_MS;
unsigned long elapsed_ms = millis() - last_feed_watchdog;
if (elapsed_ms >= EXTERNAL_WATCHDOG_FEED_INTERVAL_MS) {
return 0;
}
return interval_ms;
return EXTERNAL_WATCHDOG_FEED_INTERVAL_MS - elapsed_ms;
}
void SolarExternalWatchdog::feed() {
digitalWrite(EXTERNAL_WATCHDOG_DONE_PIN, HIGH);
delay(1);
digitalWrite(EXTERNAL_WATCHDOG_DONE_PIN, LOW);
last_feed_watchdog = millis();
}