/****************************************************************************** * @file app_arbiter.c * @brief 加热占用仲裁:手动 > 定时 > 联动 * @author cyWu <1917507415@qq.com> * @date 2026.09.04 * @version V1.1.0 * @history * - V1.1.0, 2026.09.04, cyWu, 精简注释(单标志不包结构体) * - V1.0.0, 2026.09.04, cyWu, 由风扇仲裁器改为继电器开关 ******************************************************************************/ #include "system/includes.h" #include "app_arbiter.h" #include "app_linkage.h" #define LOG_TAG_CONST APP #define LOG_TAG "[ARB]" #define LOG_INFO_ENABLE #include "debug.h" static uint8_t s_owner; /** * @brief 初始化仲裁器 * @return 无 */ void app_arbiter_init(void) { s_owner = ARB_OWNER_NONE; log_info("arbiter init\n"); } /** * @brief 当前加热占用者 * @return ArbOwner_t */ uint8_t app_arbiter_get_owner(void) { return s_owner; } /** * @brief 短按 / DP0:清占用并作废本轮联动 * @return 无 */ void app_arbiter_manual_intervene(void) { if (s_owner != ARB_OWNER_NONE) { log_info("manual intervene, owner %d -> none\n", s_owner); } s_owner = ARB_OWNER_NONE; app_linkage_void(); } /** * @brief 联动引擎尝试占用 * @return 1=成功;0=定时占用中(12 章:定时窗内联动不插嘴) */ uint8_t app_arbiter_linkage_take(void) { if (s_owner == ARB_OWNER_TIMER) { return 0; } if (s_owner != ARB_OWNER_LINKAGE) { log_info("linkage take\n"); } s_owner = ARB_OWNER_LINKAGE; return 1; } /** * @brief 联动是否仍在占用 * @return 1=owner==LINKAGE */ uint8_t app_arbiter_linkage_active(void) { return (s_owner == ARB_OWNER_LINKAGE) ? 1 : 0; } /** * @brief 联动自然失效:让出占用(请求关由调用方发) * @return 无 */ void app_arbiter_linkage_release(void) { if (s_owner == ARB_OWNER_LINKAGE) { s_owner = ARB_OWNER_NONE; } } /** * @brief 定时窗开始占用(优先级高于联动) * @return 1=成功 */ uint8_t app_arbiter_timer_take(void) { if (s_owner != ARB_OWNER_TIMER) { log_info("timer take\n"); } s_owner = ARB_OWNER_TIMER; return 1; } /** * @brief 定时窗结束释放(调用方负责收口:请求关 + 立刻按 10.3 补判联动) * @return 无 */ void app_arbiter_timer_release(void) { if (s_owner == ARB_OWNER_TIMER) { s_owner = ARB_OWNER_NONE; } }