#pragma once #include #include #include #include #include "HalGPIO.h" class HalPowerManager { int normalFreq = 0; // MHz bool isLowPower = false; enum LockMode { None, NormalSpeed }; LockMode currentLockMode = None; SemaphoreHandle_t modeMutex = nullptr; public: static constexpr int LOW_POWER_FREQ = 10; // MHz static constexpr unsigned long IDLE_POWER_SAVING_MS = 3000; // ms void begin(); // Control CPU frequency for power saving void setPowerSaving(bool enabled); // Setup wake up GPIO and enter deep sleep void startDeepSleep(HalGPIO& gpio) const; // Get battery percentage (range 0-100) int getBatteryPercentage() const; // RAII lock to prevent low-power mode during critical work (e.g. rendering) class Lock { friend class HalPowerManager; bool valid = false; public: Lock(); ~Lock(); Lock(const Lock&) = delete; Lock& operator=(const Lock&) = delete; Lock(Lock&&) = delete; Lock& operator=(Lock&&) = delete; }; }; extern HalPowerManager powerManager;