写了自闭发的一些事件上报

This commit is contained in:
小马_666 2025-05-23 11:11:18 +08:00
parent 54293c1e73
commit 4742154d0e
3 changed files with 111 additions and 65 deletions

View File

@ -2,7 +2,7 @@
* @Author: mbw
* @Date: 2024-12-09 11:40:04
* @LastEditors: mbw && 1600520629@qq.com
* @LastEditTime: 2025-05-23 10:34:57
* @LastEditTime: 2025-05-23 11:01:23
* @FilePath: \zbf_master_ch584m\bsp\inc\bsp_valve.h
* @Description:
* @
@ -65,19 +65,19 @@ typedef enum
typedef enum
{
kCmdCfg = 0X01,
kCmdCloseVavle,
kCmdOpenVavle,
kCmdData,
kValveCmdOverPressure, // 超压关阀
kValveCmdUnderPressure, // 欠压关阀
kValveCmdOverCurrent, // 过流关阀
kValveCmdMicroLeak, // 微漏关阀
kValveCmdTimer, // 定时关阀
kValveCmdOpenWithStove, // 开灶开阀
kValveCmdCloseWithStove, // 关灶关阀
kValveCmdOverTemperature, // 超温关阀
kValveCmdDelayClose, // 延时关阀
kValveCmdManualClose, // 手动关阀
kCmdCloseVavle, //关阀
kCmdOpenVavle,//开阀
kCmdData,//命令数据(心跳数据)
kRespOverPressure, // 超压关阀
kRespUnderPressure, // 欠压关阀
kRespOverCurrent, // 过流关阀
kRespMicroLeak, // 微漏关阀
kRespTimer, // 定时关阀
kRespOpenWithStove, // 开灶开阀
kRespCloseWithStove, // 关灶关阀
kRespOverTemperature, // 超温关阀
kRespDelayClose, // 延时关阀
kRespManualClose, // 手动关阀
} TeFrameCmd;
/*
@ -121,6 +121,6 @@ int BSP_Bt_Remove_Valve(uint8_t *data, uint8_t len);
int BSP_Bt_Replace_Valve(uint8_t *data, uint8_t len);
void BSP_Bt_Valve_Updata(void);
int BSP_Bt_Remove_All_Valve(void);
int BSP_Bt_Valve_Resp(uint8_t cmd, uint8_t id, uint8_t *mac_addr, uint8_t state);
int BSP_Bt_Valve_Resp(ValveCmdType cmd, uint8_t id, uint8_t *mac_addr, uint8_t state);
#endif // ! __BSP_VALVE_H__

View File

@ -2,7 +2,7 @@
* @Author: mbw
* @Date: 2024-12-06 16:52:30
* @LastEditors: mbw && 1600520629@qq.com
* @LastEditTime: 2025-05-23 10:35:36
* @LastEditTime: 2025-05-23 11:05:49
* @FilePath: \zbf_master_ch584m\bsp\src\bsp_uart.c
* @Description:
*
@ -30,7 +30,7 @@
#define UART3_TX_BUFFER_LENGTH 2048U
uint8_t bt_recv_start_flag = 0;
uint8_t bt_recv_end_flag = 0;
uint8_t bt_recv_end_flag = 0;
lwrb_t uart1_rx_t;
lwrb_t uart1_tx_t;
uint8_t uart1_tx_buf[UART1_TX_BUFFER_LENGTH] = {0};
@ -167,11 +167,11 @@ int BSP_Bt_Process(uint8_t *data, uint16_t len)
switch (data[index + 2])
{
case kValveCmdCtr:
ret = BSP_Bt_Valve_Ctr(&data_buf[0], datalength);
break;
case kValveCmdReg:
ret = BSP_Bt_Register_Valve(&data_buf[0], datalength);
if (ret == 0)
{
@ -183,7 +183,7 @@ int BSP_Bt_Process(uint8_t *data, uint16_t len)
}
break;
case kValveCmdRem:
logDebug("recv cmd: 0x03, 执行的动作是移除阀门");
logDebug("recv cmd: 0x03, 移除阀门");
ret = BSP_Bt_Remove_Valve(&data_buf[0], datalength);
if (ret == 0)
{
@ -195,7 +195,7 @@ int BSP_Bt_Process(uint8_t *data, uint16_t len)
}
break;
case kValveCmdRep:
logDebug("recv cmd: 0x04, 执行的动作是更换阀门");
logDebug("recv cmd: 0x04, 更换阀门");
ret = BSP_Bt_Replace_Valve(&data_buf[0], datalength);
if (ret == 0)
{
@ -207,7 +207,7 @@ int BSP_Bt_Process(uint8_t *data, uint16_t len)
}
break;
case kValveCmdRemAll:
logDebug("recv cmd: 0x04, 执行的动作是移除所有阀门信息");
logDebug("recv cmd: 0x04, 移除所有阀门信息");
ret = BSP_Bt_Remove_All_Valve();
if (ret == 0)
{
@ -257,7 +257,7 @@ uint8_t BT_GenerateRawFrame(BTFrameData *pRawData, const uint8_t *p_src, uint8_t
uint16_t BSP_Send_Process(uint8_t *pdata)
{
int8_t ret = 0;
__attribute__((aligned(4))) uint8_t master_rx_buf[64] = {0};
uint8_t master_rx_buf[64] = {0};
uint8_t found_frame_start = 0;
uint8_t *frame_start = NULL;
@ -312,26 +312,66 @@ uint16_t BSP_Send_Process(uint8_t *pdata)
case kCmdData:
valve_list.valve_data[0].valve_connct_status = 1;
tmos_memcpy(&valve_list.valve_data[0].valve_switch_status, &master_rx_buf[3], master_rx_buf[2]);
if ((bt_connect_flag != 1) && (valve_list.valve_data[0].valve_connct_status == 1))
{
bt_connect_flag = 1;
logDebug("阀门连接成功");
BSP_Bt_Valve_Resp(kValveConncetStatus, valve_list.valve_data[0].valve_id, valve_list.valve_data[0].valve_mac, TRUE);//表示连接成功
BSP_Bt_Valve_Resp(kValveConncetStatus, valve_list.valve_data[0].valve_id, valve_list.valve_data[0].valve_mac, TRUE); // 表示连接成功
}
else
{
BSP_Bt_Valve_Resp(kValveEventStatus, valve_list.valve_data[0].valve_id, valve_list.valve_data[0].valve_mac, TRUE);
}
break;
//TODO:待完成从机的一些主动上报信息解析
case
// TODO:待完成从机的一些主动上报信息解析
case kRespOverPressure:
logDebug("阀门超压关阀");
BSP_Bt_Valve_Resp(kValveCmdOverPressure, valve_list.valve_data[0].valve_id, valve_list.valve_data[0].valve_mac, master_rx_buf[3]);
break;
case kRespUnderPressure:
logDebug("阀门欠压关阀");
BSP_Bt_Valve_Resp(kValveCmdUnderPressure, valve_list.valve_data[0].valve_id, valve_list.valve_data[0].valve_mac, master_rx_buf[3]);
break;
case kRespOverCurrent:
logDebug("阀门过流关阀");
BSP_Bt_Valve_Resp(kValveCmdOverCurrent, valve_list.valve_data[0].valve_id, valve_list.valve_data[0].valve_mac, master_rx_buf[3]);
break;
case kRespMicroLeak:
logDebug("阀门微漏关阀");
BSP_Bt_Valve_Resp(kValveCmdMicroLeak, valve_list.valve_data[0].valve_id, valve_list.valve_data[0].valve_mac, master_rx_buf[3]);
break;
case kRespTimer:
logDebug("阀门定时关阀");
BSP_Bt_Valve_Resp(kValveCmdTimer, valve_list.valve_data[0].valve_id, valve_list.valve_data[0].valve_mac, master_rx_buf[3]);
break;
case kRespOpenWithStove:
logDebug("开灶关阀");
BSP_Bt_Valve_Resp(kValveCmdOpenWithStove, valve_list.valve_data[0].valve_id, valve_list.valve_data[0].valve_mac, master_rx_buf[3]);
break;
case kRespCloseWithStove:
logDebug("关灶关阀");
BSP_Bt_Valve_Resp(kValveCmdCloseWithStove, valve_list.valve_data[0].valve_id, valve_list.valve_data[0].valve_mac, master_rx_buf[3]);
break;
case kRespOverTemperature:
logDebug("阀门超温关阀");
BSP_Bt_Valve_Resp(kValveCmdOverTemperature, valve_list.valve_data[0].valve_id, valve_list.valve_data[0].valve_mac, master_rx_buf[3]);
break;
case kRespDelayClose:
logDebug("阀门延时关闭");
BSP_Bt_Valve_Resp(kValveCmdDelayClose, valve_list.valve_data[0].valve_id, valve_list.valve_data[0].valve_mac, master_rx_buf[3]);
break;
case kRespManualClose:
logDebug("阀门手动关闭");
BSP_Bt_Valve_Resp(kValveCmdManualClose, valve_list.valve_data[0].valve_id, valve_list.valve_data[0].valve_mac, master_rx_buf[3]);
break;
default:
logError("不支持的从机命令: %d", master_rx_buf[1]);
break;
}
return 0;
return 0;
}
uint16_t BT_ProcessEvent(uint8_t task_id, uint16_t events)
@ -363,7 +403,7 @@ uint16_t BT_ProcessEvent(uint8_t task_id, uint16_t events)
if (bt_recv_start_flag)
{
bt_recv_start_flag = 0;
bt_recv_end_flag = 1;
bt_recv_end_flag = 1;
tmos_start_task(task_id, BT_REC_EVT, 100);
}
tmos_start_task(task_id, BT_REC_EVT_FINISH, 50);
@ -375,7 +415,7 @@ uint16_t BT_ProcessEvent(uint8_t task_id, uint16_t events)
if (bt_recv_end_flag)
{
bt_recv_end_flag = 0;
int len = lwrb_get_full(&uart1_rx_t);
int len = lwrb_get_full(&uart1_rx_t);
if (len > 0)
{
__attribute__((aligned(4))) uint8_t buf[256] = {0};
@ -423,7 +463,7 @@ void BSP_UART1_Init(void)
void BSP_UART3_Init(void)
{
#ifdef DEVICE_TYPE_TYQ_LY
GPIOPinRemap(ENABLE, RB_PIN_UART3);
GPIOPinRemap(ENABLE, RB_PIN_UART3);
/* 配置串口3先配置IO口模式再配置串口 */
GPIOB_SetBits(UART3_TX_PIN);
GPIOB_ModeCfg(UART3_RX_PIN, GPIO_ModeIN_PU); // RXD-配置上拉输入
@ -468,10 +508,10 @@ void UART1_IRQHandler(void)
break;
}
case UART_II_RECV_RDY:
case UART_II_RECV_TOUT: // 接收数据
if ((bt_recv_start_flag == 0)&&(bt_recv_end_flag == 0))//用于检测是否是开始接收数据
case UART_II_RECV_TOUT: // 接收数据
if ((bt_recv_start_flag == 0) && (bt_recv_end_flag == 0)) // 用于检测是否是开始接收数据
{
bt_recv_start_flag = 1;
bt_recv_start_flag = 1;
}
while (R8_UART1_RFC)
{
@ -583,7 +623,7 @@ int reboot(void)
{
PFIC_SystemReset();
return 0;
return 0;
}
SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0) | SHELL_CMD_TYPE(SHELL_TYPE_CMD_FUNC),
reboot, reboot, "reboot");

View File

@ -2,8 +2,8 @@
* @Author: mbw
* @Date: 2024-12-09 11:40:10
* @LastEditors: mbw && 1600520629@qq.com
* @LastEditTime: 2025-04-22 15:15:24
* @FilePath: \ble_-tyq_-bjq_-ch584-m\bsp\src\bsp_valve.c
* @LastEditTime: 2025-05-23 11:08:46
* @FilePath: \zbf_master_ch584m\bsp\src\bsp_valve.c
* @Description:
*
* Copyright (c) 2024 by ${git_name_email}, All Rights Reserved.
@ -14,7 +14,6 @@
#include "bsp_uart.h"
#include "multiCentral.h"
/*
info
+ + + + +
@ -29,7 +28,6 @@
valve_data_list_t valve_list = {0};
BTFrameData valve_frame_data = {0};
uint8_t Valve_GenerateRawFrame(BTFrameData *pRawData, const uint8_t cmd, const uint8_t *p_src, uint8_t src_len)
{
pRawData->len = src_len + 5;
@ -62,7 +60,6 @@ int BSP_Valve_Ctr(uint8_t valve_id, const uint8_t cmd)
return -1;
}
logDebug("BSP_Valve_Close: valve id: %d", valve_id);
// TODO:检查是否连接, 如果连接,则发送数据,将关闭阀门指令发送过去,然后等待数据接收响应如果接收到响应是关闭状态0x01则返回成功否则失败
if (cmd == kCmdCloseVavle)
{
Valve_GenerateRawFrame(&valve_frame_data, kCmdCloseVavle, &valve_ctr_valve, 1);
@ -71,7 +68,6 @@ int BSP_Valve_Ctr(uint8_t valve_id, const uint8_t cmd)
{
Valve_GenerateRawFrame(&valve_frame_data, kCmdOpenVavle, &valve_ctr_valve, 1);
}
return BSP_Master_Send(centralConnList, CONNECT0_ITEM, &valve_frame_data.buf[0], valve_frame_data.len);
}
@ -105,7 +101,7 @@ int BSP_Bt_Valve_Ctr(uint8_t *data, uint8_t len)
/*如果到这里了说明ID和MAC地址对应没问题则控制对应阀门*/
if (data[7] == WirelessValveClose)
{
logDebug("recv cmd: 0x01, 执行的动作是关闭阀门");
logDebug("recv cmd: 0x01, 执行的动作是关闭阀门");
return BSP_Valve_Ctr(data[0], kCmdCloseVavle);
}
else if (data[7] == WirelessValveOpen)
@ -156,8 +152,8 @@ int BSP_Bt_Register_Valve(uint8_t *data, uint8_t len)
return 3;
}
else
{
uint8_t num = Flash_Get_Valve_Num();
{
uint8_t num = Flash_Get_Valve_Num();
Flash_Set_Valve_Num(num + 1);
BSP_Bt_Valve_Updata(); // 更新阀门信息
}
@ -176,7 +172,7 @@ int BSP_Bt_Remove_Valve(uint8_t *data, uint8_t len)
{
size_t i = 0;
uint8_t mac_addr[FLASH_MAC_INFO_LEN + 2] = {0};
if ((data[0] >= 1) && (data[0] <= 8))// 判断是否是正确的ID
if ((data[0] >= 1) && (data[0] <= 8)) // 判断是否是正确的ID
{
Flash_Get_Mac_Addr(mac_addr, data[0]);
}
@ -186,10 +182,10 @@ int BSP_Bt_Remove_Valve(uint8_t *data, uint8_t len)
logHexDumpAll(data, len);
return -1;
}
if (tmos_memcmp(&data[1], mac_addr, FLASH_MAC_INFO_LEN) != TRUE)// 判断是否是相同的MAC地址
if (tmos_memcmp(&data[1], mac_addr, FLASH_MAC_INFO_LEN) != TRUE) // 判断是否是相同的MAC地址
{
logError("mac addr error");
logHexDumpAll(data, len);
logHexDumpAll(data, len);
return -2;
}
else
@ -198,10 +194,10 @@ int BSP_Bt_Remove_Valve(uint8_t *data, uint8_t len)
if (Flash_Set_Mac_Addr(mac_addr, data[0]) != 0) // 清空掉对应位置MAC数据
{
logError("移除阀门信息失败");
logHexDumpAll(data, len);
logHexDumpAll(data, len);
return -2;
}
uint8_t num = Flash_Get_Valve_Num();
uint8_t num = Flash_Get_Valve_Num();
if (Flash_Set_Valve_Num(num - 1) != 0) // 移除一个阀门
{
logError("移除阀门信息失败");
@ -219,8 +215,8 @@ int BSP_Bt_Remove_Valve(uint8_t *data, uint8_t len)
int BSP_Bt_Remove_All_Valve(void)
{
uint8_t mac_addr[FLASH_MAC_INFO_LEN + 2] = {0};
uint8_t num = Flash_Get_Valve_Num();
if(num == 0)
uint8_t num = Flash_Get_Valve_Num();
if (num == 0)
{
logError("没有找到任何阀门信息");
return 0;
@ -248,7 +244,7 @@ int BSP_Bt_Replace_Valve(uint8_t *data, uint8_t len)
uint8_t mac_addr[FLASH_MAC_INFO_LEN] = {0};
logDebug("更换阀门信息:");
logHexDumpAll(data, len);
if ((len == 0) || (len < 13))//新旧MAC地址长度加id 6 + 6 + 1 = 13至少要大于12
if ((len == 0) || (len < 13)) // 新旧MAC地址长度加id 6 + 6 + 1 = 13至少要大于12
{
logError("data len error");
return -1;
@ -269,14 +265,14 @@ int BSP_Bt_Replace_Valve(uint8_t *data, uint8_t len)
}
else
{
//新阀门数据在前
// 新阀门数据在前
if (Flash_Set_Mac_Addr(&data[1], data[0]) != 0)
{
logError("阀门注册写入flash 错误");
return 3;
}
BSP_Bt_Valve_Updata(); // 更新阀门信息
Master_DisConnect();//更新后先断联接
Master_DisConnect(); // 更新后先断联接
}
return 0;
}
@ -285,16 +281,16 @@ int BSP_Bt_Replace_Valve(uint8_t *data, uint8_t len)
void BSP_Bt_Valve_Updata(void)
{
uint8_t cnt = 0;
uint8_t mac[6] = {0};
uint8_t mac[6] = {0};
uint8_t num = Flash_Get_Valve_Num();
uint8_t num = Flash_Get_Valve_Num();
logInfo("BSP_Bt_Valve_Updata num: %d ", num);
if (num == 0)
{
return;
}
tmos_memset(&valve_list, 0, sizeof(valve_data_list_t));
for (int i = 1; i < MAX_VALVE_NUM; i++) // 这个循环是为了将数据拷贝到valve_list中 并且保证id号和flash对应起来
{
if (Flash_Get_Mac_Addr(valve_list.valve_data[cnt].valve_mac, i) == 0) // 说明有MAC数据
@ -319,11 +315,10 @@ void BSP_Bt_Valve_Updata(void)
}
}
Flash_Set_Valve_Num(valve_list.valve_num);
}
//蓝牙主机对报警器的响应函数。 state表示此对应的项目可能是执行成功与否可能是蓝牙连接状态码具体参考对应的case
int BSP_Bt_Valve_Resp(uint8_t cmd, uint8_t id, uint8_t *mac_addr, uint8_t state)
// 蓝牙主机对报警器的响应函数。 state表示此对应的项目可能是执行成功与否可能是蓝牙连接状态码具体参考对应的case
int BSP_Bt_Valve_Resp(ValveCmdType cmd, uint8_t id, uint8_t *mac_addr, uint8_t state)
{
uint8_t ret = 0;
BtData_t *ptr = (BtData_t *)tmos_msg_allocate(sizeof(valve_data));
@ -334,6 +329,16 @@ int BSP_Bt_Valve_Resp(uint8_t cmd, uint8_t id, uint8_t *mac_addr, uint8_t state)
case kValveCmdReg:
case kValveCmdRem:
case kValveCmdRep:
// TODO:待完成从机的一些主动上报信息解析
case kValveCmdOverPressure:
case kValveCmdUnderPressure:
case kValveCmdOverCurrent:
case kValveCmdMicroLeak:
case kValveCmdTimer:
case kValveCmdOpenWithStove:
case kValveCmdCloseWithStove:
case kValveCmdOverTemperature:
case kValveCmdDelayClose:
ptr->buf[0] = id;
tmos_memcpy(&ptr->buf[1], mac_addr, 6);
ptr->buf[26] = state;
@ -350,10 +355,11 @@ int BSP_Bt_Valve_Resp(uint8_t cmd, uint8_t id, uint8_t *mac_addr, uint8_t state)
case kValveConncetStatus:
ptr->buf[0] = id;
tmos_memcpy(&ptr->buf[1], mac_addr, 6);
ptr->buf[7] = state; //0表示断开1表示连接
logDebug("连接状态:%d", ptr->buf[7]);
BT_GenerateRawFrame(&valve_frame_data, (uint8_t *)ptr, 9);
ptr->buf[7] = state; // 0表示断开1表示连接
logDebug("连接状态:%d", ptr->buf[7]);
BT_GenerateRawFrame(&valve_frame_data, (uint8_t *)ptr, 9);
break;
default:
break;
}
@ -367,7 +373,7 @@ int BSP_Bt_Valve_Resp(uint8_t cmd, uint8_t id, uint8_t *mac_addr, uint8_t state)
return -1;
}
void BSP_Valve_Init(void)
{
logDebug("BSP_Valve_Init");