跳到主要内容

电池服务

电池服务负责管理系统电池状态,包括电池电量、电压、电流、充电状态等信息。服务从电池硬件设备获取原始数据,进行处理后提供给上层应用。

电池数据结构

原始电池数据

电池硬件设备报告的原始测量数据:

typedef struct {
int8_t percent; // 电池百分比 (0-100),不可用时为 -1
int16_t voltage_mv; // 电池电压(毫伏),不可用时为 -1
int16_t current_ma; // 电池电流(毫安),正数为放电,负数为充电
bool charging; // true 表示正在充电
} eos_battery_raw_t;

电池状态数据

经过处理并带有时间戳的电池状态:

typedef struct {
int8_t percent; // 电池百分比 (0-100)
int16_t voltage_mv; // 电池电压(毫伏)
int16_t current_ma; // 电池电流(毫安)
bool charging; // true 表示正在充电
uint32_t ts; // 状态记录的时间戳
bool valid; // 有效性标志
} eos_battery_state_t;

电池模式

电池服务支持多种工作模式,每种模式有不同的轮询策略:

typedef enum {
EOS_BATTERY_MODE_NORMAL = 0, // 正常模式
EOS_BATTERY_MODE_LOW_POWER, // 低功耗模式
EOS_BATTERY_MODE_CHARGING, // 充电模式
EOS_BATTERY_MODE_ACTIVE, // 活动模式
EOS_BATTERY_MODE_COUNT,
} eos_battery_mode_t;

电池策略

每种模式有一个对应的策略:

typedef struct {
uint32_t interval_ms; // 轮询间隔(毫秒)
uint8_t threshold_percent; // 电量阈值
} eos_battery_policy_t;

服务初始化

初始化电池服务,注册电池更新事件:

eos_result_t eos_service_battery_init(void);

获取电池信息

获取电池百分比

int8_t eos_battery_get_percent(void);

返回电池百分比 (0-100),不可用时返回 -1。

获取电池电压

int16_t eos_battery_get_voltage_mv(void);

返回电池电压(毫伏),不可用时返回 -1。

获取充电状态

bool eos_battery_is_charging(void);

返回 true 表示正在充电。

获取完整电池状态

bool eos_battery_get_state(eos_battery_state_t *state);

成功返回 true,服务未初始化或状态无效返回 false。

获取电池容量信息

uint32_t eos_battery_get_design_capacity(void); // 设计容量(mAh)
uint32_t eos_battery_get_current_capacity(void); // 当前估算容量(mAh)
uint32_t eos_battery_get_cycle_count(void); // 电池循环次数

电池事件

使用事件 ID 注册电池状态变化通知。当电池百分比或充电状态发生变化时,事件会被广播:

eos_event_id_t eos_battery_get_event_id(void);

自定义电量计算

默认使用线性插值算法将电压转换为百分比。如需使用自定义算法:

void eos_battery_set_calc_fn(eos_battery_calc_fn_t fn);

回调函数类型:

typedef int (*eos_battery_calc_fn_t)(int voltage_mv);

传入电压(毫伏),返回计算后的百分比 (0-100),出错返回负数。传入 NULL 使用默认算法。

策略管理

设置模式策略

eos_result_t eos_battery_set_policy(eos_battery_mode_t mode, const eos_battery_policy_t *policy);

获取模式策略

eos_result_t eos_battery_get_policy(eos_battery_mode_t mode, eos_battery_policy_t *policy);

状态持久化键

电池服务使用的持久化存储键:

#define EOS_STATE_KEY_CAPACITY "battery_capacity" // 电池容量
#define EOS_STATE_KEY_CYCLE_COUNT "cycle_count" // 循环次数