never loop waiting on hardware without some sort of timeout ;-)

related to https://github.com/meshtastic/Meshtastic-esp32/issues/53
1.2-legacy
geeksville 2020-03-25 12:25:46 -07:00
rodzic 65128a04c9
commit 3443e60718
2 zmienionych plików z 11 dodań i 2 usunięć

Wyświetl plik

@ -23,14 +23,23 @@ static void sdsEnter()
doDeepSleep(radioConfig.preferences.sds_secs * 1000LL);
}
#include "error.h"
static void lsEnter()
{
DEBUG_MSG("lsEnter begin, ls_secs=%u\n", radioConfig.preferences.ls_secs);
screen.setOn(false);
while (!service.radio.rf95.canSleep())
uint32_t now = millis();
while (!service.radio.rf95.canSleep()) {
delay(10); // Kinda yucky - wait until radio says say we can shutdown (finished in process sends/receives)
if (millis() - now > 30 * 1000) { // If we wait too long just report an error and go to sleep
recordCriticalError(ErrSleepEnterWait);
break;
}
}
gps.prepareSleep(); // abandon in-process parsing
// if (!isUSBPowered) // FIXME - temp hack until we can put gps in sleep mode, if we have AC when we go to sleep then

Wyświetl plik

@ -1,7 +1,7 @@
#pragma once
/// Error codes for critical error
enum CriticalErrorCode { NoError, ErrTxWatchdog };
enum CriticalErrorCode { NoError, ErrTxWatchdog, ErrSleepEnterWait };
/// Record an error that should be reported via analytics
void recordCriticalError(CriticalErrorCode code, uint32_t address = 0);