feat(power): add battery monitoring and status overlays

This commit is contained in:
chenjintao
2026-08-18 11:53:14 +08:00
parent 609fe978f1
commit 8f8254b397
31 changed files with 1655 additions and 22 deletions
@@ -10,6 +10,7 @@
#include "multimodal/audio_pipeline.h"
#include "multimodal/transport_ws.h"
#include "platform_battery_internal.h"
#include "freertos/FreeRTOS.h"
#include "freertos/portmacro.h"
@@ -17,6 +18,38 @@ static platform_multimodal_transport_callbacks_t s_multimodal_transport_callback
static portMUX_TYPE s_multimodal_transport_cb_lock = portMUX_INITIALIZER_UNLOCKED;
static platform_multimodal_downstream_playback_callbacks_t s_multimodal_downstream_playback_callbacks;
static portMUX_TYPE s_multimodal_downstream_playback_cb_lock = portMUX_INITIALIZER_UNLOCKED;
static uint32_t s_battery_playback_generation;
static bool s_battery_playback_active;
static void platform_battery_note_playback_event(
multimodal_audio_downstream_playback_event_type_t type,
uint32_t generation)
{
bool begin_load = false;
bool end_load = false;
portENTER_CRITICAL(&s_multimodal_downstream_playback_cb_lock);
if (type == MULTIMODAL_AUDIO_DOWNSTREAM_PLAYBACK_STARTED) {
if (!s_battery_playback_active) {
s_battery_playback_active = true;
begin_load = true;
}
s_battery_playback_generation = generation;
} else if (s_battery_playback_active &&
s_battery_playback_generation == generation) {
s_battery_playback_active = false;
s_battery_playback_generation = 0U;
end_load = true;
}
portEXIT_CRITICAL(&s_multimodal_downstream_playback_cb_lock);
if (begin_load) {
platform_battery_load_begin(PLATFORM_BATTERY_LOAD_AUDIO);
}
if (end_load) {
platform_battery_load_end(PLATFORM_BATTERY_LOAD_AUDIO);
}
}
static void snapshot_transport_callbacks(
platform_multimodal_transport_callbacks_t *out_callbacks)
@@ -228,6 +261,8 @@ static void platform_multimodal_downstream_playback_bridge(
return;
}
platform_battery_note_playback_event(event->type, event->playback_generation);
switch (event->type) {
case MULTIMODAL_AUDIO_DOWNSTREAM_PLAYBACK_STARTED:
if (callbacks.on_started != NULL) {