1、喷淋器 P1/P2功能实现

2、红灯按连接态慢闪
This commit is contained in:
2026-09-09 19:57:00 +08:00
parent 074960eb02
commit 0dd65e1552
31 changed files with 2805 additions and 258 deletions
+82
View File
@@ -0,0 +1,82 @@
/******************************************************************************
* @file app_arbiter.c
* @brief CBR2 喷淋仲裁(规格书第 13 章):手动 > 计划队列 > 联动
* @author cyWu <1917507415@qq.com>
* @date 2026.09.09
* @version V1.0.0, 首次发布
*
* @note 决策落点(13 章冲突表逐条对应):
* 手动开 vs 任何轮 → req_restart/req_start10.5+ 作废联动
* 手动停 vs 任何轮 → req_stop + 本模块 intervene(作废联动)
* 计划到点 vs 在跑 → 计划入队不插队(app_timer_task 排队)
* 计划轮 vs 联动 → 联动查 owner==PLAN / 队列让位(app_linkage
* 联动 vs 空闲 → 联动开/停(app_linkage
* 本模块只做两件事:手动作废转调 + 轮结束边沿分发(计划自毁 /
* 出队续跑 / 联动补判),避免收口逻辑散落在调用点。
* 全部接口只在任务上下文调用。
******************************************************************************/
#include "system/includes.h"
#include "app_arbiter.h"
#include "app_spray.h"
#include "app_linkage.h"
#include "app_timer_task.h"
#define LOG_TAG_CONST APP
#define LOG_TAG "[ARB]"
#define LOG_INFO_ENABLE
#include "debug.h"
/**
* @brief 初始化仲裁器
* @return 无
*/
void app_arbiter_init(void)
{
log_info("arbiter init\n");
}
/**
* @brief 消费轮结束事件并收口(500ms 任务上下文)
* @return 无
*/
void app_arbiter_poll(void)
{
uint8_t owner;
uint8_t slot;
while (app_spray_pop_done(&owner, &slot)) {
app_arbiter_on_round_done(owner, slot);
}
}
/**
* @brief 手动介入:作废联动轮(RAM 标志,不写 VM;规格书 13 章)
* @return 无
*/
void app_arbiter_manual_intervene(void)
{
app_linkage_void();
}
/**
* @brief 轮结束边沿收口(规格书 12.4 / 13 章)
* @param owner 结束轮来源
* @param slot 结束轮槽位(owner==PLAN 时有效)
* @return 无
*/
void app_arbiter_on_round_done(uint8_t owner, uint8_t slot)
{
if (owner == (uint8_t)APP_SPRAY_OWNER_PLAN) {
/* 单次计划:正常跑完或被手动停都清该条使能(12.3-4 / 10.4 */
app_timer_on_plan_done(slot);
}
/* 计划队列优先于联动:队列非空立刻续跑(不插队当前轮的承诺由
* "只在空闲 kick"保证);否则计划/手动/联动轮结束后补判联动 */
if (app_timer_has_pending()) {
app_timer_kick();
} else {
app_linkage_reeval();
}
}