1、运行中空电关机改看显示百分比,到 5% 立刻停电机、关绿灯,红灯闪 5 下后再深睡,避免电压先掉、APP 还没到 5% 就关机

2、充电/放电电量缓冲加快,放电突变拦截先关掉,电量曲线满电点收到 4.12V
3、上电串口打印软硬件版本和编译时间
This commit is contained in:
2026-08-27 11:40:57 +08:00
parent fdb43011b7
commit 215e1be6bb
10 changed files with 205 additions and 68 deletions
+21 -6
View File
@@ -2,10 +2,11 @@
* @file app_power.h
* @brief USB / 充电检测、电量采样与低电策略、深睡请求生命周期
* @author cyWu <1917507415@qq.com>
* @date 2026.08.25
* @version V1.0.0
* @date 2026.08.27
* @version V1.2.0
* @history
* - V1.0.0, 2026.08.25, cyWu, 首次发布,实现 USB/充电检测、电量采样与深睡请求
* - V1.2.0, 2026.08.27, cyWu, 显示电量到 5% 立即走空电关机(停电机、红灯闪 5 下再掉电)
*
* @note 本模块只管“电从哪来、还剩多少、要不要关机”,不认识电机/灯/按键。
* 需要在 USB 插拔 / 深睡时联动其它模块的地方,一律走 app_power_set_hooks
@@ -24,7 +25,7 @@ typedef enum {
APP_POWER_EVT_USB_OUT
} AppPowerEvt_t;
/** 深睡请求的钩子:on_request 用于立即停机(马达/灯),on_finalize 用于真正掉电 */
/** 深睡请求的钩子:on_request 立刻停电机并按关机类型处理灯;on_finalize 真正掉电 */
typedef void (*AppPowerHook_t)(void);
/**
@@ -35,8 +36,8 @@ void app_power_init(void);
/**
* @brief 注册深睡请求的两段式回调
* @param on_request 刚请求深睡时调用(停电机、灯全灭
* @param on_finalize 50ms 后调用(真正进深睡,不会返回)
* @param on_request 刚请求深睡时调用(停电机;灯效由调用方按关机类型决定
* @param on_finalize 延时到点后调用(真正进深睡,不会返回)
* @return 无
*/
void app_power_set_hooks(AppPowerHook_t on_request, AppPowerHook_t on_finalize);
@@ -67,15 +68,29 @@ uint8_t app_power_charge_led(void);
uint8_t app_power_low_bat(void);
/**
* @brief 请求深睡:立即触发 on_request 钩子,50ms 后触发 on_finalize
* @brief 请求深睡(按键 3s 等):立即触发 on_request 钩子,50ms 后触发 on_finalize
* @return 无
*/
void app_power_request_poweroff(void);
/**
* @brief 空电关机:立刻停电机,等红灯闪完 5 下后再真正掉电
* @note 调用方在 on_request 里根据 app_power_empty_off_pending() 挂空电灯效,
* 不要立刻灭灯。延时为 BOARD_LED_EMPTY_OFF_WAIT_MS。
* @return 无
*/
void app_power_request_empty_poweroff(void);
/**
* @brief 查询深睡请求是否已发起(发起后其它模块应停止响应新操作)
* @return 1=已发起,0=未发起
*/
uint8_t app_power_poweroff_pending(void);
/**
* @brief 当前这次关机是否为空电路径(红灯闪 5 下再掉电)
* @return 1=空电关机,0=普通关机
*/
uint8_t app_power_empty_off_pending(void);
#endif /* __APP_POWER_H__ */