Voltage and sleep fix for NRF52

Dont let the NRF52 go to SDS Super Deep Sleep
Show bat percentage on NRF52 when above 4210 mV
pull/837/head
claes 2021-08-10 09:23:26 +02:00
rodzic b2524ceaff
commit 04c5ac0d7c
2 zmienionych plików z 8 dodań i 2 usunięć

Wyświetl plik

@ -82,10 +82,13 @@ class AnalogBatteryLevel : public HasBatteryLevel
if (v < noBatVolt)
return -1; // If voltage is super low assume no battery installed
#ifndef NRF52_SERIES
// This does not work on a RAK4631 with battery connected
if (v > chargingVolt)
return 0; // While charging we can't report % full on the battery
#endif
return 100 * (v - emptyVolt) / (fullVolt - emptyVolt);
return clamp((int)(100 * (v - emptyVolt) / (fullVolt - emptyVolt)), 0, 100);
}
/**

Wyświetl plik

@ -299,6 +299,8 @@ void PowerFSM_setup()
// On most boards we use light-sleep to be our main state, but on NRF52 we just stay in DARK
State *lowPowerState = &stateLS;
auto meshSds = 0;
#ifndef NRF52_SERIES
// We never enter light-sleep or NB states on NRF52 (because the CPU uses so little power normally)
@ -307,11 +309,12 @@ void PowerFSM_setup()
powerFSM.add_timed_transition(&stateNB, &stateLS, getPref_min_wake_secs() * 1000, NULL, "Min wake timeout");
powerFSM.add_timed_transition(&stateDARK, &stateLS, getPref_wait_bluetooth_secs() * 1000, NULL, "Bluetooth timeout");
meshSds = getPref_mesh_sds_timeout_secs();
#else
lowPowerState = &stateDARK;
meshSds = UINT32_MAX; //Workaround for now: Don't go into deep sleep on the RAK4631
#endif
auto meshSds = getPref_mesh_sds_timeout_secs();
if (meshSds != UINT32_MAX)
powerFSM.add_timed_transition(lowPowerState, &stateSDS, meshSds * 1000, NULL, "mesh timeout");
// removing for now, because some users don't even have phones