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
+24 -4
View File
@@ -94,6 +94,7 @@ static UsrSchedulerCtx_t s_sched;
static void usr_timer_tick(void *priv);
static void usr_timer_rearm(UsrTickMode_t mode);
static void usr_log_boot_version(void);
/**
* @brief USB 插拔的联动:插入即停电机,拔出即软关并刷新系统电源图标
@@ -116,13 +117,18 @@ static void usr_on_power_evt(AppPowerEvt_t evt)
}
/**
* @brief 深睡请求钩子:立停电机、灯全灭(真正掉电在 50ms 后)
* @brief 深睡请求钩子:立停电机;空电路径挂红闪,按键关机则灯全灭
* @return 无
*/
static void usr_poweroff_request_hook(void)
{
app_function_stop_all();
app_led_clear();
if (app_power_empty_off_pending()) {
/* 电量到 5%:关绿灯,红灯闪 5 下,真正掉电等闪完 */
app_led_request_empty_off();
} else {
app_led_clear();
}
}
/**
@@ -220,8 +226,8 @@ static void usr_timer_tick(void *priv)
/* 重新查询而非复用上面的判断:user_key_handle() 可能在本拍内刚请求关机,
* 要用最新状态决定这一拍还要不要播灯效,否则会多播一帧才熄灭。
* OTA 期间灯效优先:关机钩子不要把红绿交替清掉。 */
if (app_led_is_ota()) {
* OTA / 空电红闪期间灯效优先:关机钩子不要把提示灯清掉。 */
if (app_led_is_ota() || app_led_is_empty_off()) {
app_led_run(dt, app_function_is_power_on());
} else if (app_power_poweroff_pending()) {
app_led_clear();
@@ -235,6 +241,18 @@ static void usr_timer_tick(void *priv)
}
}
/**
* @brief 上电打印固件版本与编译时间,方便串口对应当前是哪一包
* @return 无
*/
static void usr_log_boot_version(void)
{
log_info("sw V%d.%d.%d hw V%d.%d.%d build %s %s\n",
JB_MCU_SW_VERSION_MAJOR, JB_MCU_SW_VERSION_MINOR, JB_MCU_SW_VERSION_PATCH,
JB_MCU_HW_VERSION_MAJOR, JB_MCU_HW_VERSION_MINOR, JB_MCU_HW_VERSION_PATCH,
__DATE__, __TIME__);
}
/**
* @brief 业务初始化(在 BLE 栈起来之前由 app_main 调用)
* @note 内部会等按键 3s/5s;不足 3s 直接深睡,不会启动业务定时器。
@@ -245,6 +263,8 @@ static void usr_timer_tick(void *priv)
*/
void usr_jb_init(void)
{
usr_log_boot_version(); /* UART 已在 app_main 起来,按键判定前就能看到版本 */
bsp_hw_init();
app_boot_wait_key(); /* 深睡分支不会返回;返回即代表确定要开机 */