Ersa Wearable Platform
Embedded smartwatch firmware and application framework
Loading...
Searching...
No Matches
power_manager.h
Go to the documentation of this file.
1#pragma once
2
3#include "ersa/common/types.h"
4#include "ersa/hal/battery.h"
6#include <stdint.h>
7#include <stddef.h>
8
9namespace ersa {
10namespace services {
11
13enum class PowerState : uint8_t {
14 Active = 0,
15 Idle,
18};
19
21enum class BatteryPowerLevel : uint8_t {
22 Normal = 0,
23 Low,
25};
26
27class PowerManager;
28
35class WakeLock {
36public:
38 explicit WakeLock(const char* tag);
40 ~WakeLock();
41
42 WakeLock(const WakeLock&) = delete;
43 WakeLock& operator=(const WakeLock&) = delete;
44
46 WakeLock(WakeLock&& other) noexcept;
48 WakeLock& operator=(WakeLock&& other) noexcept;
49
51 void release();
52
53private:
54 const char* tag_{nullptr};
55 bool active_{false};
56};
57
66public:
68 static constexpr size_t MAX_WAKE_LOCKS = 16;
70 static constexpr uint32_t DEEP_SLEEP_TIMEOUT_MS = 60000;
72 static constexpr uint8_t LOW_BATTERY_PERCENT = 20;
74 static constexpr uint16_t LOW_BATTERY_MV = 3600;
76 static constexpr uint8_t CRITICAL_BATTERY_PERCENT = 3;
78 static constexpr uint16_t CRITICAL_BATTERY_MV = 3350;
79
82
90 void tick(uint32_t currentUptimeMs);
92 uint32_t nextBatterySampleDelayMs(uint32_t currentUptimeMs) const;
93
94 // WakeLock API (Section 10)
96 WakeLock acquireWakeLock(const char* tag);
98 bool acquireWakeLockRaw(const char* tag);
100 bool releaseWakeLockRaw(const char* tag);
102 size_t getActiveWakeLockCount() const;
104 bool hasWakeLocks() const;
105
107 void noteActivity(uint32_t currentUptimeMs);
109 uint32_t getIdleTimeMs(uint32_t currentUptimeMs) const;
110
112 uint16_t getBatteryMv() const;
114 uint32_t getBatterySampleAgeMs(uint32_t nowMs) const { return nowMs - lastBatterySampleMs_; }
116 bool hasBatterySample() const { return cachedMv_ != 0; }
118 uint8_t getBatteryPercent() const;
120 bool isBatteryConnected() const;
122 bool isCharging() const;
125
127 PowerState getState() const;
129 void requestState(PowerState state);
130
132 bool canSleep() const;
134 void enterDeepSleep(uint64_t sleepTimeUs = 0);
135
137 static PowerManager& instance();
139 static void setInstance(PowerManager* instance);
140
141private:
144
146 uint32_t lastActivityMs_{0};
148 uint32_t batterySampleIntervalMs() const;
149
150 uint16_t cachedMv_{0};
151 uint8_t cachedPercent_{100};
152 bool cachedConnected_{false};
153 bool cachedCharging_{false};
156
160};
161
162} // namespace services
163} // namespace ersa
Definition types.h:52
Definition event_bus.h:48
static EventBus & instance()
Definition event_bus.cpp:10
Definition battery.h:17
Definition power_manager.h:65
void noteActivity(uint32_t currentUptimeMs)
Definition power_manager.cpp:124
bool cachedCharging_
Definition power_manager.h:153
uint32_t getBatterySampleAgeMs(uint32_t nowMs) const
Return the age of the most recent battery sample in milliseconds.
Definition power_manager.h:114
WakeLock acquireWakeLock(const char *tag)
Definition power_manager.cpp:77
void enterDeepSleep(uint64_t sleepTimeUs=0)
Definition power_manager.cpp:233
uint32_t lastBatterySampleMs_
Definition power_manager.h:147
bool canSleep() const
Definition power_manager.cpp:228
uint32_t getIdleTimeMs(uint32_t currentUptimeMs) const
Definition power_manager.cpp:129
static constexpr uint8_t LOW_BATTERY_PERCENT
Definition power_manager.h:72
bool isBatteryConnected() const
Return whether a usable battery is connected.
Definition power_manager.cpp:208
void tick(uint32_t currentUptimeMs)
Definition power_manager.cpp:136
hal::IBattery & battery_
Definition power_manager.h:142
size_t getActiveWakeLockCount() const
Return the number of active wake locks.
Definition power_manager.cpp:116
PowerState state_
Definition power_manager.h:145
static constexpr uint32_t DEEP_SLEEP_TIMEOUT_MS
Definition power_manager.h:70
static constexpr uint8_t CRITICAL_BATTERY_PERCENT
Definition power_manager.h:76
bool hasBatterySample() const
Return whether at least one battery sample has been recorded.
Definition power_manager.h:116
uint16_t getBatteryMv() const
Return the latest battery voltage in millivolts.
Definition power_manager.cpp:200
BatteryPowerLevel batteryPowerLevel_
Definition power_manager.h:154
bool releaseWakeLockRaw(const char *tag)
Definition power_manager.cpp:102
bool acquireWakeLockRaw(const char *tag)
Definition power_manager.cpp:81
void requestState(PowerState state)
Set the service-level power state.
Definition power_manager.cpp:224
uint32_t nextBatterySampleDelayMs(uint32_t currentUptimeMs) const
Definition power_manager.cpp:194
bool hasWakeLocks() const
Return whether at least one wake lock blocks sleep.
Definition power_manager.cpp:120
static constexpr size_t MAX_WAKE_LOCKS
Definition power_manager.h:68
static void setInstance(PowerManager *instance)
Install the process-wide power manager.
Definition power_manager.cpp:54
bool isCharging() const
Return whether external charging power is present.
Definition power_manager.cpp:212
size_t activeWakeLocks_
Definition power_manager.h:159
uint32_t batterySampleIntervalMs() const
Definition power_manager.cpp:180
BatteryPowerLevel getBatteryPowerLevel() const
Definition power_manager.cpp:216
Result< void > init()
Definition power_manager.cpp:66
uint8_t getBatteryPercent() const
Return estimated battery charge as a percentage.
Definition power_manager.cpp:204
uint16_t cachedMv_
Definition power_manager.h:150
PowerState getState() const
Return the current service-level power state.
Definition power_manager.cpp:220
static constexpr uint16_t LOW_BATTERY_MV
Definition power_manager.h:74
bool cachedConnected_
Definition power_manager.h:152
static constexpr uint16_t CRITICAL_BATTERY_MV
Definition power_manager.h:78
uint8_t criticalSampleCount_
Definition power_manager.h:155
events::EventBus & bus_
Definition power_manager.h:143
static PowerManager & instance()
Return the installed process-wide power manager.
Definition power_manager.cpp:50
uint8_t cachedPercent_
Definition power_manager.h:151
uint32_t lastActivityMs_
Definition power_manager.h:146
const char * wakeLockTags_[MAX_WAKE_LOCKS]
Definition power_manager.h:157
uint16_t wakeLockReferences_[MAX_WAKE_LOCKS]
Definition power_manager.h:158
Definition power_manager.h:35
~WakeLock()
Definition power_manager.cpp:21
const char * tag_
Definition power_manager.h:54
void release()
Definition power_manager.cpp:42
WakeLock & operator=(const WakeLock &)=delete
bool active_
Definition power_manager.h:55
WakeLock(const WakeLock &)=delete
PowerState
Definition power_manager.h:13
BatteryPowerLevel
Definition power_manager.h:21
Definition application.h:10
char tag[32]
Definition ota_service.cpp:43