mirror of
https://github.com/meshtastic/firmware.git
synced 2025-07-30 02:15:41 +00:00
dynamically adjust measurement interval in power management
This commit is contained in:
parent
5d956d6bdc
commit
f1c1808449
@ -572,6 +572,19 @@ Power::Power() : OSThread("Power")
|
||||
#ifdef DEBUG_HEAP
|
||||
lastheap = memGet.getFreeHeap();
|
||||
#endif
|
||||
|
||||
#ifdef ARCH_ESP32
|
||||
lsObserver.observe(¬ifyLightSleep);
|
||||
lsEndObserver.observe(¬ifyLightSleepEnd);
|
||||
#endif
|
||||
}
|
||||
|
||||
Power::~Power()
|
||||
{
|
||||
#ifdef ARCH_ESP32
|
||||
lsObserver.unobserve(¬ifyLightSleep);
|
||||
lsEndObserver.unobserve(¬ifyLightSleepEnd);
|
||||
#endif
|
||||
}
|
||||
|
||||
bool Power::analogInit()
|
||||
@ -708,6 +721,8 @@ void Power::readPowerStatus()
|
||||
OptionalBool hasBattery = OptUnknown; // These must be static because NRF_APM code doesn't run every time
|
||||
OptionalBool isChargingNow = OptUnknown;
|
||||
|
||||
powerFSM.trigger(EVENT_WAKE_TIMER); // ensure we're not light-sleeping
|
||||
|
||||
if (batteryLevel) {
|
||||
hasBattery = batteryLevel->isBatteryConnect() ? OptTrue : OptFalse;
|
||||
usbPowered = batteryLevel->isVbusIn() ? OptTrue : OptFalse;
|
||||
@ -862,10 +877,29 @@ int32_t Power::runOnce()
|
||||
PMU->clearIrqStatus();
|
||||
}
|
||||
#endif
|
||||
|
||||
// Only read once every 20 seconds once the power status for the app has been initialized
|
||||
return (statusHandler && statusHandler->isInitialized()) ? (1000 * 20) : RUN_SAME;
|
||||
if (statusHandler && statusHandler->isInitialized() && interval == 0) {
|
||||
setInterval(20 * 1000UL);
|
||||
}
|
||||
|
||||
return RUN_SAME;
|
||||
}
|
||||
|
||||
#ifdef ARCH_ESP32
|
||||
int Power::beforeLightSleep(void *unused)
|
||||
{
|
||||
setInterval(config.power.ls_secs * 1000UL);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int Power::afterLightSleep(esp_sleep_wakeup_cause_t cause)
|
||||
{
|
||||
setInterval(20 * 1000UL);
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Init the power manager chip
|
||||
*
|
||||
|
11
src/power.h
11
src/power.h
@ -109,6 +109,7 @@ class Power : private concurrency::OSThread
|
||||
Observable<const meshtastic::PowerStatus *> newStatus;
|
||||
|
||||
Power();
|
||||
~Power();
|
||||
|
||||
void shutdown();
|
||||
void readPowerStatus();
|
||||
@ -133,6 +134,16 @@ class Power : private concurrency::OSThread
|
||||
#ifdef DEBUG_HEAP
|
||||
uint32_t lastheap;
|
||||
#endif
|
||||
|
||||
#ifdef ARCH_ESP32
|
||||
// Get notified when lightsleep begins and ends to set power refresh interval
|
||||
CallbackObserver<Power, void *> lsObserver = CallbackObserver<Power, void *>(this, &Power::beforeLightSleep);
|
||||
CallbackObserver<Power, esp_sleep_wakeup_cause_t> lsEndObserver =
|
||||
CallbackObserver<Power, esp_sleep_wakeup_cause_t>(this, &Power::afterLightSleep);
|
||||
|
||||
int beforeLightSleep(void *unused);
|
||||
int afterLightSleep(esp_sleep_wakeup_cause_t cause);
|
||||
#endif
|
||||
};
|
||||
|
||||
extern Power *power;
|
||||
|
Loading…
Reference in New Issue
Block a user