P0/P1/P2功能实现:接入业务组合根(按键/LED/过零/配网/OTA),联动、11B定时、运行记录、灯泡寿命(DP3/DP4/DP25)、CBR0 VM、512分包
This commit is contained in:
@@ -0,0 +1,113 @@
|
||||
/******************************************************************************
|
||||
* @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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user