Type-C 长供电、上电即工作、无软关机,删除 app_boot/app_power 及 DP0 开关相关逻辑, 去掉空占位 app_fan_run 和无效的 usr_timer_pick_mode/rearm(数码管 4ms 扫描已 priority=1, 系统本来就不会进低功耗)。按键 5s 配对 / 12s OTA 改走 key.c 长按分级,去掉自计时与 1~5s 死区。 新增 app_defer,NVM/配对/OTA 只在 ISR 置位、在 500ms 任务上下文落地,避免再在 usr_timer 里写 flash。 规格书与注释同步精简。
71 lines
1.6 KiB
C
71 lines
1.6 KiB
C
/******************************************************************************
|
||
* @file app_fan.c
|
||
* @brief CBR3 风扇档位实现
|
||
* @author cyWu <1917507415@qq.com>
|
||
* @date 2026.08.31
|
||
* @version V1.1.0,删除 app_fan_run(P0 无动作的空占位,从未真正做过软爬坡)
|
||
******************************************************************************/
|
||
|
||
#include "app_fan.h"
|
||
#include "bsp_hw.h"
|
||
#include "board_pin.h"
|
||
|
||
#define LOG_TAG_CONST APP
|
||
#define LOG_TAG "[APP_FAN]"
|
||
#define LOG_INFO_ENABLE
|
||
#include "debug.h"
|
||
|
||
static uint8_t s_gear;
|
||
|
||
/**
|
||
* @brief 初始化风扇(档位 0,PWM 关)
|
||
* @return 无
|
||
*/
|
||
void app_fan_init(void)
|
||
{
|
||
#if !BOARD_FAN_ENABLE
|
||
log_info("fan disabled\n");
|
||
return;
|
||
#endif
|
||
s_gear = 0;
|
||
bsp_fan_set_duty(BOARD_FAN_DUTY_GEAR0);
|
||
log_info("fan init gear=0\n");
|
||
}
|
||
|
||
/**
|
||
* @brief 设置档位并立即生效(P0 无软爬坡)
|
||
* @param gear 0=关,1=50%,2=75%,3=100%;>3 钳位到 3
|
||
* @return 无
|
||
*/
|
||
void app_fan_set_gear(uint8_t gear)
|
||
{
|
||
#if !BOARD_FAN_ENABLE
|
||
(void)gear;
|
||
s_gear = 0;
|
||
return;
|
||
#endif
|
||
static const uint16_t duty_tbl[4] = {
|
||
BOARD_FAN_DUTY_GEAR0, BOARD_FAN_DUTY_GEAR1,
|
||
BOARD_FAN_DUTY_GEAR2, BOARD_FAN_DUTY_GEAR3
|
||
};
|
||
|
||
if (gear > 3) {
|
||
gear = 3;
|
||
}
|
||
if (gear == s_gear) {
|
||
return;
|
||
}
|
||
s_gear = gear;
|
||
bsp_fan_set_duty(duty_tbl[gear]);
|
||
log_info("fan gear=%d duty=%u/10000\n", gear, (unsigned)duty_tbl[gear]);
|
||
}
|
||
|
||
/**
|
||
* @brief 查询当前真实档位(DP2 必须等于它,通风停段时为 0)
|
||
* @return 0~3
|
||
*/
|
||
uint8_t app_fan_get_gear(void)
|
||
{
|
||
return s_gear;
|
||
}
|