代码暂存 添加特定枚举值用于上报

This commit is contained in:
常正强 2025-05-25 12:15:34 +08:00
parent ca43b87897
commit de383dc573
2 changed files with 32 additions and 13 deletions

View File

@ -55,12 +55,20 @@ extern tmosTaskID vavle_task_id;
typedef enum
{
kCmdCfg = 0X01,
kCmdCloseVavle,
kCmdOpenVavle,
kCmdData,
kCmdTimerClose = 0x05, // 设置定时关阀
kCmdCancelTimer = 0x06, // 取消定时关阀
kCmdQueryTimer = 0x07, // 查询定时器状态
kCmdCloseVavle, // 关阀
kCmdOpenVavle, // 开阀
kCmdData, // 命令数据(心跳数据)
kValveCmdOverPressure, // 超压关阀
kValveCmdUnderPressure, // 欠压关阀
kValveCmdOverCurrent, // 过流关阀
kValveCmdMicroLeak, // 微漏关阀
kValveCmdTimer, // 定时关阀
kValveCmdOpenWithStove, // 开灶开阀
kValveCmdCloseWithStove, // 关灶关阀
kValveCmdOverTemperature, // 超温关阀
kValveCmdDelayClose, // 延时关阀
kValveCmdManualClose, // 手动关阀
kValveCmdTimeResp, // 设置定时关阀时间响应
} TeFrameCmd;
typedef struct __attribute__((packed))

View File

@ -30,6 +30,7 @@
TsValveData gValveData = {0};
TsRawFrameData RelyData;
TsTimerCloseState gTimerCloseState = {0};
static TeFrameCmd gValveCloseReason = kCmdCloseVavle; // 默认为普通关阀命令
tmosTaskID vavle_task_id = INVALID_TASK_ID;
@ -190,30 +191,32 @@ static void VAVLE_Task_ProcessTmosMsg(uint8_t *p_rev_msg) // 处理TMOS消息函
break;
case kCmdCloseVavle: // 关阀命令
logDebug("kCmdCloseVavle");
gValveCloseReason = kCmdCloseVavle; // 确保使用普通关阀命令
tmos_set_event(vavle_task_id, VAVLE_CLOSE_START_EVT);
break;
case kCmdOpenVavle: // 开阀命令
logDebug("kCmdOpenVavle");
tmos_set_event(vavle_task_id, VAVLE_OPEN_START_EVT);
break;
case kCmdTimerClose: // 设置定时关阀命令
case kValveCmdTimer: // 设置定时关阀命令
{
uint8_t result = 0;
if (HostFrameData->len >= 4) {
uint32_t minutes = 0;
tmos_memcpy(&minutes, HostFrameData->data, 4); // 安全的内存拷贝
result = BSP_VALVE_SetTimerClose(minutes);
logDebug("kCmdTimerClose: %d minutes, result: %d", minutes, result);
logDebug("kValveCmdTimer: %d minutes, result: %d", minutes, result);
}
// 生成响应: 状态(1字节) + 设置的分钟数(4字节)
uint8_t response[5] = {result};
tmos_memcpy(&response[1], &gTimerCloseState.timer_minutes, 4); // 安全的内存拷贝
GenerateRawFrame(&RelyData, kCmdTimerClose, response, 5);
GenerateRawFrame(&RelyData, kValveCmdTimer, response, 5);
tmos_set_event(Peripheral_TaskID, SBP_REPLY_CMD_EVT);
break;
}
// 定时器取消和查询功能暂时屏蔽
/*
case kCmdCancelTimer: // 取消定时关阀命令
{
uint8_t result = BSP_VALVE_CancelTimerClose();
@ -233,6 +236,7 @@ static void VAVLE_Task_ProcessTmosMsg(uint8_t *p_rev_msg) // 处理TMOS消息函
tmos_set_event(Peripheral_TaskID, SBP_REPLY_CMD_EVT);
break;
}
*/
default:
logError("Invalid command");
break;
@ -311,7 +315,10 @@ static uint16_t VAVLE_Task_ProcessEvent(uint8_t task_id, uint16_t events) // 阀
LED_ALL_CLOSE;
tmos_memset(&RelyData, 0, sizeof(RelyData));
BSP_VALVE_Generate_ValveResponse(&RelyData, kCmdCloseVavle, 1);
BSP_VALVE_Generate_ValveResponse(&RelyData, gValveCloseReason, 1);
// 重置为默认值
gValveCloseReason = kCmdCloseVavle;
tmos_set_event(Peripheral_TaskID, SBP_REPLY_CMD_EVT);
@ -378,6 +385,7 @@ static uint16_t VAVLE_Task_ProcessEvent(uint8_t task_id, uint16_t events) // 阀
logDebug("gValveData.switch_status %d",gValveData.switch_status);
if(gValveData.switch_status != kClosed)
{
gValveCloseReason = kValveCmdUnderPressure; // 设置为欠压关阀
tmos_set_event(vavle_task_id, VAVLE_CLOSE_START_EVT);
}
}
@ -428,12 +436,15 @@ static uint16_t VAVLE_Task_ProcessEvent(uint8_t task_id, uint16_t events) // 阀
gTimerCloseState.is_active = 0;
gTimerCloseState.timer_minutes = 0;
// 设置关阀原因为定时关阀
gValveCloseReason = kValveCmdTimer;
// 触发关阀动作
tmos_set_event(vavle_task_id, VAVLE_CLOSE_START_EVT);
// 发送定时关阀完成通知
uint8_t notification = 1; // 定时关阀完成
GenerateRawFrame(&RelyData, kCmdTimerClose, &notification, 1);
GenerateRawFrame(&RelyData, kValveCmdTimeResp, &notification, 1);
tmos_set_event(Peripheral_TaskID, SBP_REPLY_CMD_EVT);
return (events ^ VAVLE_TIMER_CLOSE_EVT);