From 04c5ac0d7cad0f7892ecd30d6dcd18925353ffb6 Mon Sep 17 00:00:00 2001 From: claes Date: Tue, 10 Aug 2021 09:23:26 +0200 Subject: [PATCH] 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 --- src/Power.cpp | 5 ++++- src/PowerFSM.cpp | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/Power.cpp b/src/Power.cpp index ce9023a4..1fdefe29 100644 --- a/src/Power.cpp +++ b/src/Power.cpp @@ -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); } /** diff --git a/src/PowerFSM.cpp b/src/PowerFSM.cpp index 53ba66aa..6d6cf96f 100644 --- a/src/PowerFSM.cpp +++ b/src/PowerFSM.cpp @@ -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