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

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

View File

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