接入温湿度风扇产品固件(仲裁/条件/定时/显示),并补齐规格书与外设驱动
新增 usr_app 产品逻辑:手动>定时>条件仲裁、条件控温湿、定时任务、数码管显示、 按键/LED、风扇档位、NVM 掉电恢复、配对与开关机,上电按规格恢复上次状态。 新增 usr_periph:AHT20、CT1642、板级引脚与硬件封装;见宝协议 cond_config 改为 7 字节编解码,并接入产品 DP。 补充《温湿度风扇_固件需求规格书》,工程加入对应源文件。 .gitignore 忽略 WorkBuddy/Cursor 本地会话
This commit is contained in:
@@ -0,0 +1,100 @@
|
||||
/******************************************************************************
|
||||
* @file app_power.c
|
||||
* @brief CBR3 软关机生命周期实现:无电池、无充电
|
||||
* @author cyWu <1917507415@qq.com>
|
||||
* @date 2026.08.29
|
||||
* @version V1.0.0
|
||||
* @history
|
||||
* - V1.0.0, 2026.08.29, cyWu, 首次发布(移植门夹精简:删 USB/充电/电量/低电)
|
||||
******************************************************************************/
|
||||
|
||||
#include "app_power.h"
|
||||
#include "system/includes.h"
|
||||
|
||||
#define LOG_TAG_CONST APP
|
||||
#define LOG_TAG "[APP_PWR]"
|
||||
#define LOG_INFO_ENABLE
|
||||
#include "debug.h"
|
||||
|
||||
/** 电源模块总状态 */
|
||||
typedef struct {
|
||||
uint8_t req_poweroff;
|
||||
AppPowerHook_t on_request;
|
||||
AppPowerHook_t on_finalize;
|
||||
} AppPowerCtx_t;
|
||||
|
||||
static AppPowerCtx_t s_power;
|
||||
|
||||
static void power_do_poweroff(void *priv);
|
||||
|
||||
/**
|
||||
* @brief 初始化电源模块状态
|
||||
* @return 无
|
||||
*/
|
||||
void app_power_init(void)
|
||||
{
|
||||
s_power.req_poweroff = 0;
|
||||
s_power.on_request = NULL;
|
||||
s_power.on_finalize = NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 注册深睡请求的两段式回调
|
||||
* @param on_request 刚请求深睡时调用(停风扇;灯由调用方按关机类型决定)
|
||||
* @param on_finalize 延时到点后调用(真正进深睡,不会返回)
|
||||
* @return 无
|
||||
*/
|
||||
void app_power_set_hooks(AppPowerHook_t on_request, AppPowerHook_t on_finalize)
|
||||
{
|
||||
s_power.on_request = on_request;
|
||||
s_power.on_finalize = on_finalize;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 请求深睡(按键 3s 等):立即触发 on_request 钩子,50ms 后触发 on_finalize
|
||||
* @return 无
|
||||
*/
|
||||
void app_power_request_poweroff(void)
|
||||
{
|
||||
if (s_power.req_poweroff) {
|
||||
return; /* 已经在关机流程里,不要重复挂定时器 */
|
||||
}
|
||||
s_power.req_poweroff = 1;
|
||||
log_info("request deep off\n");
|
||||
if (s_power.on_request) {
|
||||
s_power.on_request(); /* 立刻停风扇、灯全灭 */
|
||||
}
|
||||
sys_timeout_add(NULL, power_do_poweroff, 50); /* 给 GPIO 落稳一点再真正掉电 */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 查询深睡请求是否已发起
|
||||
* @return 1=已发起,0=未发起
|
||||
*/
|
||||
uint8_t app_power_poweroff_pending(void)
|
||||
{
|
||||
return s_power.req_poweroff;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 当前这次关机是否为空电路径(本产品无电池,恒 0)
|
||||
* @return 0
|
||||
*/
|
||||
uint8_t app_power_empty_off_pending(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 50ms 延时到点:真正进入深睡
|
||||
* @param priv 未使用
|
||||
* @return 无
|
||||
*/
|
||||
static void power_do_poweroff(void *priv)
|
||||
{
|
||||
(void)priv;
|
||||
log_info("enter deep off\n");
|
||||
if (s_power.on_finalize) {
|
||||
s_power.on_finalize();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user