mirror of
https://github.com/meshtastic/firmware.git
synced 2025-07-31 02:45: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
|
#ifdef DEBUG_HEAP
|
||||||
lastheap = memGet.getFreeHeap();
|
lastheap = memGet.getFreeHeap();
|
||||||
#endif
|
#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()
|
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 hasBattery = OptUnknown; // These must be static because NRF_APM code doesn't run every time
|
||||||
OptionalBool isChargingNow = OptUnknown;
|
OptionalBool isChargingNow = OptUnknown;
|
||||||
|
|
||||||
|
powerFSM.trigger(EVENT_WAKE_TIMER); // ensure we're not light-sleeping
|
||||||
|
|
||||||
if (batteryLevel) {
|
if (batteryLevel) {
|
||||||
hasBattery = batteryLevel->isBatteryConnect() ? OptTrue : OptFalse;
|
hasBattery = batteryLevel->isBatteryConnect() ? OptTrue : OptFalse;
|
||||||
usbPowered = batteryLevel->isVbusIn() ? OptTrue : OptFalse;
|
usbPowered = batteryLevel->isVbusIn() ? OptTrue : OptFalse;
|
||||||
@ -862,10 +877,29 @@ int32_t Power::runOnce()
|
|||||||
PMU->clearIrqStatus();
|
PMU->clearIrqStatus();
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Only read once every 20 seconds once the power status for the app has been initialized
|
// 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
|
* 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;
|
Observable<const meshtastic::PowerStatus *> newStatus;
|
||||||
|
|
||||||
Power();
|
Power();
|
||||||
|
~Power();
|
||||||
|
|
||||||
void shutdown();
|
void shutdown();
|
||||||
void readPowerStatus();
|
void readPowerStatus();
|
||||||
@ -133,6 +134,16 @@ class Power : private concurrency::OSThread
|
|||||||
#ifdef DEBUG_HEAP
|
#ifdef DEBUG_HEAP
|
||||||
uint32_t lastheap;
|
uint32_t lastheap;
|
||||||
#endif
|
#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;
|
extern Power *power;
|
||||||
|
Loading…
Reference in New Issue
Block a user