代码暂存 通过蓝牙上报阀门状态及数据
This commit is contained in:
parent
3724b20e2f
commit
6032d61ead
|
@ -725,19 +725,20 @@ static void peripheralStateNotificationCB(gapRole_States_t newState, gapRoleEven
|
|||
*/
|
||||
static void performPeriodicTask(void)
|
||||
{
|
||||
gValveData.bat = BSP_ReadVbat();
|
||||
if (gValveData.bat <= LOW_VABAT_CLOSE_VALUE)
|
||||
{
|
||||
tmos_set_event(vavle_task_id, VAVLE_CLOSE_START_EVT);
|
||||
}
|
||||
else if (gValveData.bat <= LOW_VABAT_ALARM_VALUE)
|
||||
{
|
||||
tmos_set_event(vavle_task_id, VAVLE_LOW_VBAT_ALARM_EVT);
|
||||
}
|
||||
logDebug("switch_status:%d Temp:%d Bat:%d Humi:%d%% RSSI: %d",
|
||||
gValveData.switch_status, gValveData.temp, gValveData.bat, gValveData.humi, gValveData.rssi);
|
||||
// gValveData.bat = BSP_ReadVbat();
|
||||
// if (gValveData.bat <= LOW_VABAT_CLOSE_VALUE)
|
||||
// {
|
||||
// tmos_set_event(vavle_task_id, VAVLE_CLOSE_START_EVT);
|
||||
// }
|
||||
// else if (gValveData.bat <= LOW_VABAT_ALARM_VALUE)
|
||||
// {
|
||||
// tmos_set_event(vavle_task_id, VAVLE_LOW_VBAT_ALARM_EVT);
|
||||
// }
|
||||
// logDebug("switch_status:%d Temp:%d Bat:%d Humi:%d%% RSSI: %d",
|
||||
// gValveData.switch_status, gValveData.temp, gValveData.bat, gValveData.humi, gValveData.rssi);
|
||||
TsRawFrameData RawData;
|
||||
BSP_VALVE_Generate_UploadData(&RawData);
|
||||
// BSP_VALVE_Generate_UploadData(&RawData);
|
||||
BSP_VALVE_Generate_Data(&RawData, kCmdData);
|
||||
peripheralChar4Notify(&RawData.buf[0], RawData.len);
|
||||
}
|
||||
|
||||
|
|
|
@ -7,3 +7,7 @@
|
|||
6.低功耗优化
|
||||
7.电机停止需判断COIL_ADC优化
|
||||
8.低电压判断及后续处理
|
||||
|
||||
|
||||
灯显示加到开关阀流程中
|
||||
4G上报添加到统一的开关阀函数中
|
||||
|
|
|
@ -32,6 +32,31 @@ void Function_Check(void);
|
|||
extern uint8_t volatile fault_state;
|
||||
extern uint8_t keydown_flag;
|
||||
|
||||
// 安全阈值参数统一定义
|
||||
#define SAFETY_AUTO_OPEN_THRESHOLD 3 // 自动开阀阈值(连续检测次数)
|
||||
#define SAFETY_MICRO_LEAK_THRESHOLD 5 // 微泄漏检测阈值(连续检测次数)
|
||||
#define SAFETY_MICRO_LEAK_PRESS_DIFF 15 // 微泄漏压力差阈值(Pa),对应流量约0.3L/min
|
||||
#define SAFETY_OVER_TEMP_THRESHOLD 65 // 超温阈值(℃)
|
||||
#define SAFETY_GAS_REQUEST_PRESS_DIFF 50 // 用气请求压力差阈值(Pa)
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int in_press_raw;
|
||||
int out_press_raw;
|
||||
|
||||
int8_t in_temp;
|
||||
int8_t out_temp;
|
||||
int8_t atom_temp;
|
||||
|
||||
int in_press; // 表压 单位Pa
|
||||
int out_press;
|
||||
int atom_press;
|
||||
|
||||
// 进气端和出气端压力差值 单位Pa
|
||||
int in_out_press_diff;
|
||||
} TsValveRawData;
|
||||
extern TsValveRawData ValveRawData;
|
||||
|
||||
// 微泄漏检测相关函数
|
||||
void startMicroLeakDetection(void);
|
||||
|
||||
|
|
|
@ -68,6 +68,7 @@ typedef enum
|
|||
kValveCmdOverTemperature, // 超温关阀
|
||||
kValveCmdDelayClose, // 延时关阀
|
||||
kValveCmdManualClose, // 手动关阀
|
||||
KValveCmdTimeSet, // 设置定时关阀时间
|
||||
kValveCmdTimeResp, // 设置定时关阀时间响应
|
||||
kValveCmdLowBatClose, // 低电量关阀
|
||||
kValveCmdManualOpen, // 手动开阀
|
||||
|
@ -99,19 +100,18 @@ typedef enum
|
|||
|
||||
typedef enum
|
||||
{
|
||||
kUnknown = 0,
|
||||
kOpened= 0,
|
||||
kClosed,
|
||||
kOpened,
|
||||
kDisconnect,
|
||||
} TeValveSwitchStatus;
|
||||
|
||||
typedef struct __attribute__((packed))
|
||||
{
|
||||
// uint8_t status; // 1B 阀门工作状态 超欠压、过流
|
||||
// uint8_t valve_id;
|
||||
// uint8_t valve_mac[6];
|
||||
// uint8_t connct_status; // 1B 阀门连接状态 (电磁阀BLE控制盒) 0=未连接 1=已连接
|
||||
uint8_t switch_status; // 1B 阀门开关状态 0=未知 1=关闭=关闭过,未按按键恢复 2=关闭过,按下了恢复键 = 打开
|
||||
uint8_t switch_status; // 1B 阀门开关状态 0=未知 1=关闭, 2=打开
|
||||
int8_t temp; // 1B 阀门温度 有符号整数 25 ℃
|
||||
|
||||
uint32_t in_pressure; // 4B 阀门入口压力 Pa
|
||||
uint32_t out_pressure; // 4B 阀门出口压力 Pa
|
||||
uint32_t atm_pressure; // 4B 阀门大气压力 Pa
|
||||
|
@ -119,10 +119,10 @@ typedef struct __attribute__((packed))
|
|||
uint8_t bat; // 1B 电池电压 30=3V,18=1.8V
|
||||
uint8_t humi; // 1B 阀门湿度 %RH
|
||||
int8_t rssi;
|
||||
|
||||
} TsValveData;
|
||||
extern TsValveData gValveData;
|
||||
|
||||
|
||||
typedef struct __attribute__((packed))
|
||||
{
|
||||
uint32_t timer_minutes; // 设置的定时分钟数,0表示未激活
|
||||
|
@ -140,7 +140,7 @@ TsFrameData* BSP_VAVLE_GetFrameData(uint8_t *data, uint8_t len);
|
|||
|
||||
uint8_t GenerateRawFrame(TsRawFrameData *pRawData, uint8_t cmd, const uint8_t *p_src, uint8_t src_len);
|
||||
|
||||
void BSP_VALVE_Generate_Data(TsRawFrameData *pRawData, uint8_t switch_status, uint8_t bat, int8_t temp, uint8_t humi);
|
||||
void BSP_VALVE_Generate_Data(TsRawFrameData *pRawData, TeFrameCmd cmd);
|
||||
void BSP_VALVE_Generate_ValveResponse(TsRawFrameData *pRawData, TeFrameCmd cmd, uint8_t status);
|
||||
|
||||
void BSP_VALVE_Generate_UploadData(TsRawFrameData *pRawData);
|
||||
|
|
|
@ -13,31 +13,7 @@ uint8_t keydown_flag = 0;
|
|||
uint8_t keydown_time = 0;
|
||||
uint8_t volatile fault_state = 0;
|
||||
|
||||
// 安全阈值参数统一定义
|
||||
#define SAFETY_AUTO_OPEN_THRESHOLD 3 // 自动开阀阈值(连续检测次数)
|
||||
#define SAFETY_MICRO_LEAK_THRESHOLD 5 // 微泄漏检测阈值(连续检测次数)
|
||||
#define SAFETY_MICRO_LEAK_PRESS_DIFF 15 // 微泄漏压力差阈值(Pa),对应流量约0.3L/min
|
||||
#define SAFETY_OVER_TEMP_THRESHOLD 65 // 超温阈值(℃)
|
||||
#define SAFETY_GAS_REQUEST_PRESS_DIFF 50 // 用气请求压力差阈值(Pa)
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int in_press_raw;
|
||||
int out_press_raw;
|
||||
|
||||
int8_t in_temp;
|
||||
int8_t out_temp;
|
||||
int8_t atom_temp;
|
||||
|
||||
int in_press; // 表压 单位Pa
|
||||
int out_press;
|
||||
int atom_press;
|
||||
|
||||
// 进气端和出气端压力差值 单位Pa
|
||||
int in_out_press_diff;
|
||||
} TsValveRawData;
|
||||
TsValveRawData ValveRawData;
|
||||
|
||||
TsValveRawData ValveRawData_buffer[5];
|
||||
|
||||
typedef struct
|
||||
|
|
|
@ -145,37 +145,65 @@ uint8_t GenerateRawFrame(TsRawFrameData *pRawData, uint8_t cmd, const uint8_t *p
|
|||
return 0;
|
||||
}
|
||||
|
||||
void BSP_VALVE_Generate_UploadData(TsRawFrameData *pRawData) // 生成上传数据函数
|
||||
{
|
||||
GenerateRawFrame(pRawData, kCmdData, (uint8_t *)&gValveData, sizeof(gValveData));
|
||||
}
|
||||
// void BSP_VALVE_Generate_UploadData(TsRawFrameData *pRawData) // 生成上传数据函数
|
||||
// {
|
||||
// GenerateRawFrame(pRawData, kCmdData, (uint8_t *)&gValveData, sizeof(gValveData));
|
||||
// }
|
||||
|
||||
void BSP_VALVE_Generate_Data(TsRawFrameData *pRawData, uint8_t switch_status, uint8_t bat, int8_t temp, uint8_t humi) // 生成阀门数据函数
|
||||
void BSP_VALVE_Generate_Data(TsRawFrameData *pRawData, TeFrameCmd cmd) // 生成阀门数据函数
|
||||
{
|
||||
TsValveData ValveData;
|
||||
// uint8_t MacAddr[6];
|
||||
// GetMACAddress(MacAddr);
|
||||
|
||||
ValveData.switch_status = 0;
|
||||
ValveData.temp = temp;
|
||||
// ValveData.valve_id = 1;
|
||||
// tmos_memset(ValveData.valve_mac, 0, sizeof(ValveData.valve_mac));
|
||||
// tmos_memcpy(ValveData.valve_mac, MacAddr, sizeof(ValveData.valve_mac));
|
||||
|
||||
ValveData.in_pressure = 0;
|
||||
ValveData.out_pressure = 0;
|
||||
ValveData.atm_pressure = 0;
|
||||
// ValveData.connct_status = gValveData.connct_status;
|
||||
ValveData.switch_status = gValveData.switch_status;
|
||||
ValveData.temp = ValveRawData.atom_temp;
|
||||
|
||||
ValveData.type = kTyq;
|
||||
ValveData.bat = bat;
|
||||
ValveData.humi = humi;
|
||||
ValveData.in_pressure = ValveRawData.in_press_raw;
|
||||
ValveData.out_pressure = ValveRawData.out_press_raw;
|
||||
ValveData.atm_pressure = ValveRawData.atom_press;
|
||||
|
||||
ValveData.rssi = 0;
|
||||
ValveData.type = kZbf;
|
||||
ValveData.bat = BSP_ReadVbat();
|
||||
ValveData.humi = 50;
|
||||
ValveData.rssi = gValveData.rssi;
|
||||
|
||||
GenerateRawFrame(pRawData, kCmdData, (uint8_t *)&ValveData, sizeof(ValveData));
|
||||
// 打印ValveData的所有字段
|
||||
logDebug("ValveData 详细信息:\r\n"
|
||||
"switch_status: %d\r\n"
|
||||
"temp: %d\r\n"
|
||||
"in_pressure: %d\r\n"
|
||||
"out_pressure: %d\r\n"
|
||||
"atm_pressure: %d\r\n"
|
||||
"type: %d\r\n"
|
||||
"bat: %d\r\n"
|
||||
"humi: %d\r\n"
|
||||
"rssi: %d",
|
||||
ValveData.switch_status,
|
||||
ValveData.temp,
|
||||
ValveData.in_pressure,
|
||||
ValveData.out_pressure,
|
||||
ValveData.atm_pressure,
|
||||
ValveData.type,
|
||||
ValveData.bat,
|
||||
ValveData.humi,
|
||||
ValveData.rssi);
|
||||
|
||||
GenerateRawFrame(pRawData, cmd, (uint8_t *)&ValveData, sizeof(ValveData));
|
||||
}
|
||||
|
||||
void BSP_VALVE_Generate_ValveResponse(TsRawFrameData *pRawData, TeFrameCmd cmd, uint8_t status) // 生成阀门响应函数
|
||||
{
|
||||
uint8_t data = 0;
|
||||
data = status;
|
||||
GenerateRawFrame(pRawData, cmd, &data, 1);
|
||||
}
|
||||
|
||||
// void BSP_VALVE_Generate_ValveResponse(TsRawFrameData *pRawData, TeFrameCmd cmd, uint8_t status) // 生成阀门响应函数
|
||||
// {
|
||||
// uint8_t data = 0;
|
||||
// data = status;
|
||||
// GenerateRawFrame(pRawData, cmd, &data, 1);
|
||||
// }
|
||||
|
||||
static void VAVLE_Task_ProcessTmosMsg(uint8_t *p_rev_msg) // 处理TMOS消息函数
|
||||
{
|
||||
|
@ -192,26 +220,38 @@ static void VAVLE_Task_ProcessTmosMsg(uint8_t *p_rev_msg) // 处理TMOS消息函
|
|||
break;
|
||||
case kCmdCloseVavle: // 关阀命令
|
||||
logDebug("kCmdCloseVavle");
|
||||
BSP_VALVE_Close(kCmdCloseVavle); // 使用普通关阀命令
|
||||
uint8_t CloseStatus = 0;
|
||||
CloseStatus = BSP_VALVE_Close(kCmdCloseVavle); // 使用普通关阀命令
|
||||
if(CloseStatus == 1)
|
||||
{
|
||||
BSP_VALVE_Generate_Data(&RelyData, kCmdCloseVavle);
|
||||
tmos_set_event(Peripheral_TaskID, SBP_REPLY_CMD_EVT);
|
||||
}
|
||||
break;
|
||||
|
||||
case kCmdOpenVavle: // 开阀命令
|
||||
logDebug("kCmdOpenVavle");
|
||||
BSP_VALVE_Open(kCmdOpenVavle); // 使用普通开阀命令
|
||||
uint8_t OpenStatus = 0;
|
||||
OpenStatus = BSP_VALVE_Open(kCmdOpenVavle); // 使用普通开阀命令
|
||||
if(OpenStatus == 1)
|
||||
{
|
||||
BSP_VALVE_Generate_Data(&RelyData, kCmdOpenVavle);
|
||||
tmos_set_event(Peripheral_TaskID, SBP_REPLY_CMD_EVT);
|
||||
}
|
||||
break;
|
||||
case kValveCmdTimer: // 设置定时关阀命令
|
||||
case KValveCmdTimeSet: // 设置定时关阀命令
|
||||
{
|
||||
uint8_t result = 0;
|
||||
if (HostFrameData->len >= 4) {
|
||||
if (HostFrameData->len >= 2) {
|
||||
uint32_t minutes = 0;
|
||||
tmos_memcpy(&minutes, HostFrameData->data, 4); // 安全的内存拷贝
|
||||
tmos_memcpy(&minutes, HostFrameData->data, 2); // 安全的内存拷贝
|
||||
result = BSP_VALVE_SetTimerClose(minutes);
|
||||
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, kValveCmdTimer, response, 5);
|
||||
// 生成响应: 设置的分钟数(2字节) + 状态(1字节)
|
||||
uint8_t response[3] = {result};
|
||||
tmos_memcpy(&response[1], &gTimerCloseState.timer_minutes, 2); // 安全的内存拷贝
|
||||
GenerateRawFrame(&RelyData, kValveCmdTimeResp, response, 3);
|
||||
tmos_set_event(Peripheral_TaskID, SBP_REPLY_CMD_EVT);
|
||||
break;
|
||||
}
|
||||
|
@ -316,7 +356,8 @@ static uint16_t VAVLE_Task_ProcessEvent(uint8_t task_id, uint16_t events) // 阀
|
|||
logWarning("gValveCloseReason %d",gValveCloseReason);
|
||||
// gValveCloseReason = kCmdData;
|
||||
tmos_memset(&RelyData, 0, sizeof(RelyData));
|
||||
BSP_VALVE_Generate_ValveResponse(&RelyData, gValveCloseReason, 1);
|
||||
// BSP_VALVE_Generate_ValveResponse(&RelyData, gValveCloseReason, 1);
|
||||
BSP_VALVE_Generate_Data(&RelyData, gValveCloseReason);
|
||||
// 重置为默认值
|
||||
gValveCloseReason = kCmdCloseVavle;
|
||||
|
||||
|
@ -366,7 +407,8 @@ static uint16_t VAVLE_Task_ProcessEvent(uint8_t task_id, uint16_t events) // 阀
|
|||
// gValveOpenReason = kCmdData;
|
||||
// 生成响应
|
||||
tmos_memset(&RelyData, 0, sizeof(RelyData));
|
||||
BSP_VALVE_Generate_ValveResponse(&RelyData, gValveOpenReason, 1);
|
||||
// BSP_VALVE_Generate_ValveResponse(&RelyData, gValveOpenReason, 1);
|
||||
BSP_VALVE_Generate_Data(&RelyData, gValveOpenReason);
|
||||
|
||||
// 重置为默认值
|
||||
gValveOpenReason = kCmdOpenVavle;
|
||||
|
@ -447,10 +489,10 @@ static uint16_t VAVLE_Task_ProcessEvent(uint8_t task_id, uint16_t events) // 阀
|
|||
// 使用统一接口关阀
|
||||
BSP_VALVE_Close(kValveCmdTimer);
|
||||
|
||||
// 发送定时关阀完成通知
|
||||
uint8_t notification = 1; // 定时关阀完成
|
||||
GenerateRawFrame(&RelyData, kValveCmdTimeResp, ¬ification, 1);
|
||||
tmos_set_event(Peripheral_TaskID, SBP_REPLY_CMD_EVT);
|
||||
// // 发送定时关阀完成通知
|
||||
// uint8_t notification = 1; // 定时关阀完成
|
||||
// GenerateRawFrame(&RelyData, kValveCmdTimeResp, ¬ification, 1);
|
||||
// tmos_set_event(Peripheral_TaskID, SBP_REPLY_CMD_EVT);
|
||||
|
||||
return (events ^ VAVLE_TIMER_CLOSE_EVT);
|
||||
}
|
||||
|
@ -488,13 +530,13 @@ static uint8_t BSP_VALVE_SetTimerClose(uint32_t minutes)
|
|||
// 参数验证
|
||||
if (minutes == 0 || minutes > 1440) { // 1分钟到24小时
|
||||
logError("Invalid timer minutes: %d", minutes);
|
||||
return 0; // 设置失败
|
||||
return 1; // 设置失败
|
||||
}
|
||||
|
||||
// 检查当前阀门状态,如果已经关闭则不需要定时关阀
|
||||
if (gValveData.switch_status == kClosed) {
|
||||
logDebug("Valve already closed, timer not needed");
|
||||
return 2; // 阀门已关闭
|
||||
return 1; // 阀门已关闭
|
||||
}
|
||||
|
||||
// 停止现有定时器(如果有)
|
||||
|
@ -513,14 +555,14 @@ static uint8_t BSP_VALVE_SetTimerClose(uint32_t minutes)
|
|||
tmos_start_task(vavle_task_id, VAVLE_TIMER_CLOSE_EVT, MS1_TO_SYSTEM_TIME(delay_ms));
|
||||
|
||||
logInfo("Timer close set: %d minutes", minutes);
|
||||
return 1; // 设置成功
|
||||
return 0; // 设置成功
|
||||
}
|
||||
|
||||
static uint8_t BSP_VALVE_CancelTimerClose(void)
|
||||
{
|
||||
if (!gTimerCloseState.is_active) {
|
||||
logDebug("No active timer to cancel");
|
||||
return 0; // 没有激活的定时器
|
||||
return 1; // 没有激活的定时器
|
||||
}
|
||||
|
||||
// 停止定时器
|
||||
|
@ -531,7 +573,7 @@ static uint8_t BSP_VALVE_CancelTimerClose(void)
|
|||
gTimerCloseState.timer_minutes = 0;
|
||||
|
||||
logInfo("Timer close cancelled");
|
||||
return 1; // 取消成功
|
||||
return 0; // 取消成功
|
||||
}
|
||||
|
||||
static uint32_t BSP_VALVE_GetRemainingMinutes(void)
|
||||
|
@ -569,7 +611,7 @@ uint8_t BSP_VALVE_Close(TeFrameCmd close_reason)
|
|||
// 触发关阀事件
|
||||
tmos_set_event(vavle_task_id, VAVLE_CLOSE_START_EVT);
|
||||
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -590,7 +632,7 @@ uint8_t BSP_VALVE_Open(TeFrameCmd open_reason)
|
|||
// 触发开阀事件
|
||||
tmos_set_event(vavle_task_id, VAVLE_OPEN_START_EVT);
|
||||
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue