Files
JBao_Temp_Humi_Fan_FW/apps/usr_app/app_arbiter.h
T
wuchuyuan e324ebd99b 精简 usr_app 架构:去掉关机/休眠死代码,按键复用 key.c 状态机,ISR 重活统一延后到任务上下文
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。
规格书与注释同步精简。
2026-08-31 17:57:52 +08:00

104 lines
3.4 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/******************************************************************************
* @file app_arbiter.h
* @brief CBR3 模式仲裁器(规格书第 12 章):手动 > 定时 > 条件
* @author cyWu <1917507415@qq.com>
* @date 2026.08.31
* @version V1.0.0,首次发布(P2
*
* @note 把"谁在驱动模式"收成一处,避免 mode/cond/timer 互调成环。
* 唯一状态源是 ownerNONE/COND/TIMER+ 条件快照;
* 条件/定时引擎各自维护占用细节,通过查询 owner 感知被打断:
* - 手动动作(短按/APP 写档/mode)→ app_arbiter_manual_intervene()
* 清 owner;条件引擎感知后作废本轮(RAM),定时引擎感知后本窗
* 不再抢回(规格书 12 章规则 1/2)。
* - 条件自然失效(比较不成立)→ 条件引擎恢复快照后
* app_arbiter_cond_release()。
* - 定时窗结束 → app_arbiter_timer_release() + 收口。
* 快照:第一次条件抢权前保存用户 mode+gear(规格书 10.3-3),
* 后覆盖/手动介入均不更新它(10.3-6),只在条件自然失效恢复后清空。
******************************************************************************/
#ifndef __APP_ARBITER_H__
#define __APP_ARBITER_H__
#include <stdint.h>
/** 当前模式占用者 */
typedef enum {
ARB_OWNER_NONE = 0, /**< 空闲 / 手动接管 */
ARB_OWNER_COND = 1, /**< 条件引擎占用 */
ARB_OWNER_TIMER = 2 /**< 定时引擎占用 */
} ArbOwner_t;
/**
* @brief 初始化仲裁器
* @return 无
*/
void app_arbiter_init(void);
/**
* @brief 当前模式占用者
* @return ArbOwner_t
*/
uint8_t app_arbiter_get_owner(void);
/**
* @brief 手动动作统一入口(短按 / APP 写 fan_gear / APP 写 mode
* @note 立即释放一切自动化占用;条件/定时引擎下个 tick 感知后各自作废
* @return 无
*/
void app_arbiter_manual_intervene(void);
/* ═══ 条件引擎接口 ═══ */
/**
* @brief 条件引擎尝试占用(触发模式前调用)
* @note 定时占用中返回 0(规格书 12:定时窗 vs 条件 → 定时胜,条件不开);
* 占用成功时若尚无快照则保存当前用户 mode+gear(仅第一次)
* @return 1=占用成功,0=被定时占用拒绝
*/
uint8_t app_arbiter_cond_take(void);
/**
* @brief 条件是否仍在占用
* @return 1=owner==COND
*/
uint8_t app_arbiter_cond_active(void);
/**
* @brief 条件自然失效:恢复快照后调用(清 owner 与快照)
* @return 无
*/
void app_arbiter_cond_release(void);
/**
* @brief 取条件快照(恢复用)
* @param mode 输出快照模式
* @param gear 输出快照档位
* @return 无
*/
void app_arbiter_cond_get_snapshot(uint8_t *mode, uint8_t *gear);
/**
* @brief 条件被手动打断:只清快照(快照对应的用户状态已过时),
* 不恢复、不清 ownerowner 已被 manual_intervene 清掉)
* @return 无
*/
void app_arbiter_cond_snapshot_clear(void);
/* ═══ 定时引擎接口 ═══ */
/**
* @brief 定时引擎窗开始占用
* @return 1=成功(恒成功,定时优先级高于条件)
*/
uint8_t app_arbiter_timer_take(void);
/**
* @brief 定时窗结束释放
* @return 无
*/
void app_arbiter_timer_release(void);
#endif /* __APP_ARBITER_H__ */