功耗减低到900uA,还有优化空间,还要陈杰明那边支持一下

This commit is contained in:
2026-08-25 11:16:54 +08:00
parent e0f5da6f39
commit d5ec6ecde0
8 changed files with 290 additions and 72 deletions
+43 -13
View File
@@ -1,11 +1,12 @@
/******************************************************************************
* @file app_led.c
* @brief CBC2 灯效:充电 > 配对 > APP 暂停 > 低电 > 切模式闪 > 开机常亮
* @brief CBC2 灯效:充电 > 配对 > APP 暂停 > 低电 > 切模式闪 > 开机绿灯提示后灭
* @author cyWu <1917507415@qq.com>
* @date 2026.08.21
* @version V1.0.0
* @date 2026.08.25
* @version V1.1.0
* @history
* - V1.0.0, 2026.08.21, cyWu, 首次发布
* - V1.1.0, 2026.08.25, cyWu, 开机绿灯只提示几秒,避免待机常亮耗电
******************************************************************************/
#include "app_led.h"
@@ -19,6 +20,7 @@ static uint16_t s_mode_ms;
static uint8_t s_mode_on;
static uint16_t s_pair_res_ms;
static uint8_t s_pair_res; /* 0 none 1 ok 2 fail */
static uint16_t s_power_green_ms; /* 开机绿灯剩余 ms,0 则待机灭灯 */
/**
* @brief 灯效初始化,先全灭
@@ -30,6 +32,7 @@ AppLed_Ret_t app_led_init(void)
return APP_LED_OK;
}
bsp_led_all_off();
s_power_green_ms = BOARD_LED_POWER_ON_MS;
s_initialized = 1;
return APP_LED_OK;
}
@@ -54,6 +57,15 @@ void app_led_request_mode_blink(void)
s_mode_on = 0;
}
/**
* @brief 重新亮几秒开机绿灯(上电 / APP 再开)
* @return 无
*/
void app_led_hint_power_on(void)
{
s_power_green_ms = BOARD_LED_POWER_ON_MS;
}
/**
* @brief 播放一次性配对结果灯:成功常绿,失败红绿交替
* @param ok 1=成功,0=失败
@@ -67,11 +79,12 @@ void app_led_start_pair_result(uint8_t ok)
}
/**
* @brief 按优先级刷新灯1ms 调用
* @brief 按优先级刷新灯
* @param ctx 当前充电/配对/开关/低电;为空则直接返回
* @param dt 距上次调用的毫秒数
* @return 无
*/
void app_led_tick_1ms(const AppLedCtx_t *ctx)
void app_led_tick_1ms(const AppLedCtx_t *ctx, uint16_t dt)
{
uint8_t red = 0;
uint8_t green = 0;
@@ -79,8 +92,11 @@ void app_led_tick_1ms(const AppLedCtx_t *ctx)
if (!s_initialized || !ctx) {
return;
}
if (dt == 0) {
dt = 1;
}
s_phase_ms++;
s_phase_ms = (uint16_t)(s_phase_ms + dt);
/* 1-2 充电独占 */
if (ctx->charge_led == 1) {
@@ -117,11 +133,11 @@ void app_led_tick_1ms(const AppLedCtx_t *ctx)
green = 1;
}
}
if (s_pair_res_ms > 0) {
s_pair_res_ms--;
if (s_pair_res_ms == 0) {
s_pair_res = 0;
}
if (s_pair_res_ms > dt) {
s_pair_res_ms = (uint16_t)(s_pair_res_ms - dt);
} else {
s_pair_res_ms = 0;
s_pair_res = 0;
}
bsp_led_red_set(red);
bsp_led_green_set(green);
@@ -145,7 +161,7 @@ void app_led_tick_1ms(const AppLedCtx_t *ctx)
/* 7 切模式闪 2 下 */
if (s_mode_left) {
s_mode_ms++;
s_mode_ms = (uint16_t)(s_mode_ms + dt);
if (!s_mode_on) {
if (s_mode_ms >= BOARD_LED_MODE_OFF_MS) {
s_mode_ms = 0;
@@ -165,12 +181,26 @@ void app_led_tick_1ms(const AppLedCtx_t *ctx)
return;
}
/* 8 开机绿灯常亮 */
#if BOARD_LED_STANDBY_ON
/* 待机绿灯常亮 */
if (ctx->life_on && ctx->app_power) {
bsp_led_red_set(0);
bsp_led_green_set(1);
return;
}
#else
/* 开机绿灯只亮几秒,用来对比灭灯待机电流 */
if (ctx->life_on && ctx->app_power && s_power_green_ms) {
if (s_power_green_ms > dt) {
s_power_green_ms = (uint16_t)(s_power_green_ms - dt);
} else {
s_power_green_ms = 0;
}
bsp_led_red_set(0);
bsp_led_green_set(1);
return;
}
#endif
bsp_led_all_off();
}