加了阀门控制指令和读取接收
This commit is contained in:
parent
c73af3b98e
commit
fafb2aff2f
|
@ -13,5 +13,6 @@ encoding//StdPeriphDriver/inc/CH58x_common.h=GBK
|
||||||
encoding//StdPeriphDriver/inc/CH58x_gpio.h=GBK
|
encoding//StdPeriphDriver/inc/CH58x_gpio.h=GBK
|
||||||
encoding//StdPeriphDriver/inc/CH58x_sys.h=GBK
|
encoding//StdPeriphDriver/inc/CH58x_sys.h=GBK
|
||||||
encoding//StdPeriphDriver/inc/ISP585.h=GBK
|
encoding//StdPeriphDriver/inc/ISP585.h=GBK
|
||||||
|
encoding//bsp/inc/bsp_master.h=GBK
|
||||||
encoding//bsp/inc/bsp_uart.h=UTF-8
|
encoding//bsp/inc/bsp_uart.h=UTF-8
|
||||||
encoding//bsp/src/bsp_master.c=GBK
|
encoding//bsp/src/bsp_master.c=GBK
|
||||||
|
|
|
@ -113,6 +113,8 @@ extern void Central_Init(void);
|
||||||
*/
|
*/
|
||||||
extern uint16_t Central_ProcessEvent(uint8_t task_id, uint16_t events);
|
extern uint16_t Central_ProcessEvent(uint8_t task_id, uint16_t events);
|
||||||
extern centralConnItem_t centralConnList[CENTRAL_MAX_CONNECTION];
|
extern centralConnItem_t centralConnList[CENTRAL_MAX_CONNECTION];
|
||||||
|
|
||||||
|
int BSP_Master_Send(centralConnItem_t *centralConnList, uint8_t id, uint8_t *Data, uint8_t Len);
|
||||||
/*********************************************************************
|
/*********************************************************************
|
||||||
*********************************************************************/
|
*********************************************************************/
|
||||||
|
|
||||||
|
|
|
@ -180,6 +180,7 @@ static void centralAddDeviceInfo(uint8_t *pAddr, uint8_t addrType);
|
||||||
static void centralInitConnItem(uint8_t task_id, centralConnItem_t *centralConnList);
|
static void centralInitConnItem(uint8_t task_id, centralConnItem_t *centralConnList);
|
||||||
static uint8_t centralAddrCmp(peerAddrDefItem_t *PeerAddrDef, uint8_t *addr);
|
static uint8_t centralAddrCmp(peerAddrDefItem_t *PeerAddrDef, uint8_t *addr);
|
||||||
|
|
||||||
|
int BSP_Master_Receive_Data(uint8_t task_id, uint8_t *data, uint16_t len);
|
||||||
/*********************************************************************
|
/*********************************************************************
|
||||||
* PROFILE CALLBACKS
|
* PROFILE CALLBACKS
|
||||||
*/
|
*/
|
||||||
|
@ -638,6 +639,10 @@ static void centralProcessGATTMsg(gattMsgEvent_t *pMsg)
|
||||||
{
|
{
|
||||||
logDebug("Noti: ");
|
logDebug("Noti: ");
|
||||||
logHexDumpAll(pMsg->msg.handleValueNoti.pValue, pMsg->msg.handleValueNoti.len);
|
logHexDumpAll(pMsg->msg.handleValueNoti.pValue, pMsg->msg.handleValueNoti.len);
|
||||||
|
if (connItem == CONNECT0_ITEM)
|
||||||
|
{
|
||||||
|
BSP_Master_Receive_Data(CONNECT0_ITEM, pMsg->msg.handleValueNoti.pValue, pMsg->msg.handleValueNoti.len);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (centralConnList[connItem].discState != BLE_DISC_STATE_IDLE)
|
else if (centralConnList[connItem].discState != BLE_DISC_STATE_IDLE)
|
||||||
{
|
{
|
||||||
|
@ -1077,7 +1082,6 @@ static void centralGATTDiscoveryEvent(uint8_t connItem, gattMsgEvent_t *pMsg)
|
||||||
centralConnList[connItem].procedureInProgress = FALSE;
|
centralConnList[connItem].procedureInProgress = FALSE;
|
||||||
logDebug("char4 Write handle\t:%04x\r\n", char_value_handle);
|
logDebug("char4 Write handle\t:%04x\r\n", char_value_handle);
|
||||||
tmos_start_task(centralConnList[CONNECT0_ITEM].taskID, CH4_NOTI_EVT, 1600);
|
tmos_start_task(centralConnList[CONNECT0_ITEM].taskID, CH4_NOTI_EVT, 1600);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1160,12 +1164,15 @@ static uint8_t centralAddrCmp(peerAddrDefItem_t *PeerAddrDef, uint8_t *addr)
|
||||||
/************************ endfile @ central **************************/
|
/************************ endfile @ central **************************/
|
||||||
|
|
||||||
/*用户自定义文件*/
|
/*用户自定义文件*/
|
||||||
void BSP_Master_Send(centralConnItem_t *centralConnList, uint8_t id, uint8_t *Data, uint8_t Len)
|
int BSP_Master_Send(centralConnItem_t *centralConnList, uint8_t id, uint8_t *Data, uint8_t Len)
|
||||||
{
|
{
|
||||||
|
int ret = 0;
|
||||||
attWriteReq_t req;
|
attWriteReq_t req;
|
||||||
uint8_t res;
|
uint8_t res;
|
||||||
|
|
||||||
if (centralConnList[id].state == BLE_STATE_CONNECTED) // 检查连接状态是否为连接状态
|
if (centralConnList[id].state == BLE_STATE_CONNECTED) // 检查连接状态是否为连接状态
|
||||||
|
{
|
||||||
|
if (centralConnList[id].procedureInProgress == FALSE)
|
||||||
{
|
{
|
||||||
req.cmd = FALSE;
|
req.cmd = FALSE;
|
||||||
req.sig = FALSE;
|
req.sig = FALSE;
|
||||||
|
@ -1179,26 +1186,34 @@ void BSP_Master_Send(centralConnItem_t *centralConnList, uint8_t id, uint8_t *Da
|
||||||
if (res == SUCCESS)
|
if (res == SUCCESS)
|
||||||
{
|
{
|
||||||
logDebug("\n Master Write ok");
|
logDebug("\n Master Write ok");
|
||||||
|
centralConnList[id].procedureInProgress == FALSE;
|
||||||
|
ret = 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
logDebug("\n Master Write faild= %x", res);
|
logDebug("\n Master Write faild= %x", res);
|
||||||
GATT_bm_free((gattMsg_t *)&req, ATT_WRITE_REQ);
|
GATT_bm_free((gattMsg_t *)&req, ATT_WRITE_REQ);
|
||||||
|
ret = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
logDebug("\n alloc Faild");
|
logDebug("\n alloc Faild");
|
||||||
|
ret = 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
ret = 3;
|
||||||
|
}
|
||||||
|
ret = 4;
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int BSP_Master_Receive_Data(uint8_t *data, uint16_t len)
|
int BSP_Master_Receive_Data(uint8_t task_id, uint8_t *data, uint16_t len)
|
||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
uint16_t index = 0;
|
uint16_t index = 0;
|
||||||
uint8_t data_buf[64] = {0};
|
uint8_t data_buf[64] = {0};
|
||||||
// 解析接收到的数据帧,先寻找AA开头,然后再找AA下一个字节,其代表了数据长度,然后找到代表长度的值的长度的下一位,其为校验码,校验码后为结束码0x55,
|
// 解析接收到的数据帧,先寻找AA开头,然后再找AA下一个字节,其代表命令,然后找到代表长度的值的长度的下一位,其为校验码,校验码后为结束码0x55,
|
||||||
// 如果数据正确,则提取数据,不正确,则不处理
|
// 如果数据正确,则提取数据,不正确,则不处理
|
||||||
if (len < 4)
|
if (len < 4)
|
||||||
{ // 至少需要 4 个字节:起始码、长度、校验码、结束码
|
{ // 至少需要 4 个字节:起始码、长度、校验码、结束码
|
||||||
|
@ -1217,8 +1232,8 @@ int BSP_Master_Receive_Data(uint8_t *data, uint16_t len)
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16_t datalength = data[index + 1]; // 读取数据长度
|
uint16_t datalength = data[index + 2]; // 读取数据长度
|
||||||
if (index + 2 + datalength + 1 >= len) // 检查数据长度是否合理 数据长度 + 校验码 + 结束码
|
if (index + 3 + datalength + 1 >= len) // 检查数据长度是否合理 数据长度 + 校验码 + 结束码
|
||||||
{
|
{
|
||||||
|
|
||||||
logError("BT 数据帧长度错误");
|
logError("BT 数据帧长度错误");
|
||||||
|
@ -1226,31 +1241,50 @@ int BSP_Master_Receive_Data(uint8_t *data, uint16_t len)
|
||||||
return 3; //
|
return 3; //
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t rx_sum = data[index + 2 + datalength]; // 读取校验码
|
uint8_t rx_sum = data[index + 3 + datalength]; // 读取校验码
|
||||||
uint8_t calculated_sum = XOR_CheckSum(&data[0], datalength + 2); // 计算校验码
|
uint8_t calculated_sum = _CheckSum(&data[index], datalength + 3); // 计算校验码
|
||||||
|
|
||||||
if (rx_sum != calculated_sum)
|
if (rx_sum != calculated_sum)
|
||||||
{
|
{
|
||||||
|
|
||||||
logError("BT 数据帧校验码错误 rx_sum = %02X, calculated_sum = %02X", rx_sum, calculated_sum);
|
logError("BT 数据帧校验码错误 rx_sum = %02X, calculated_sum = %02X", rx_sum, calculated_sum);
|
||||||
logHexDumpAll(data, len);
|
logHexDumpAll(data, len);
|
||||||
return 4;
|
return 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data[index + 2 + datalength + 1] != 0x55) // 检查结束码
|
if (data[index + 3 + datalength + 1] != 0x55) // 检查结束码
|
||||||
{
|
{
|
||||||
logError("BT 数据帧结束码错误");
|
logError("BT 数据帧结束码错误");
|
||||||
logHexDumpAll(data, len);
|
logHexDumpAll(data, len);
|
||||||
|
|
||||||
return 5;
|
return 5;
|
||||||
}
|
}
|
||||||
// 到这一步说明数据没问题,将接收到的数据通过中心任务发送出去
|
logDebug("BT 数据帧校验通过");
|
||||||
|
|
||||||
|
// //有效数据长度
|
||||||
|
size_t data_len = (datalength + 5);
|
||||||
|
if (data[index + 1] == kCmdCfg) // 0x01 代表了其是控制阀门响应
|
||||||
|
{
|
||||||
|
logDebug("BT 控制阀门响应包");
|
||||||
|
logHexDumpAll(&data[index], len);
|
||||||
|
}
|
||||||
|
else if (data[index + 1] == kCmdData) // 这个是代表了其是心跳数据包
|
||||||
|
{
|
||||||
|
logDebug("BT 心跳数据包");
|
||||||
|
logHexDumpAll(&data[index], len);
|
||||||
|
valve_list.valve_num = task_id + 1;
|
||||||
|
valve_list.valve_data[task_id].valve_id = data[index + 4];
|
||||||
|
// tmos_memcpy(valve_list.valve_data[task_id].valve_mac, &data[index + 5], 6); //将数据提取到结构体中
|
||||||
|
}
|
||||||
|
// //有效数据长度
|
||||||
|
// size_t data_len = (datalength + 5);
|
||||||
|
// //到这一步说明数据没问题,将接收到的数据通过中心任务发送出去
|
||||||
// uint8_t *p_data;
|
// uint8_t *p_data;
|
||||||
// p_data = tmos_msg_allocate(length);
|
// p_data = tmos_msg_allocate(data_len);
|
||||||
// if (p_data)
|
// if (p_data)
|
||||||
// {
|
// {
|
||||||
// tmos_memcpy(p_data, data, length);
|
// tmos_memcpy(p_data, data, data_len);
|
||||||
// tmos_msg_send(task_id, p_data);
|
// tmos_msg_send(BtRxTaskId, p_data);
|
||||||
|
// tmos_start_task(BtRxTaskId, SYS_EVENT_MSG, 0);
|
||||||
// }
|
// }
|
||||||
//
|
|
||||||
// tmos_msg_send(task_id, data);
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,84 +1,19 @@
|
||||||
//#ifndef __BSP_MASTER_H__
|
#ifndef __BSP_MASTER_H__
|
||||||
//#define __BSP_MASTER_H__
|
#define __BSP_MASTER_H__
|
||||||
//
|
|
||||||
//
|
#include "CH58x_common.h"
|
||||||
//#include "CH58x_common.h"
|
#include "CH58xBLE_LIB.h"
|
||||||
//#include "CH58xBLE_LIB.h"
|
|
||||||
//
|
// 0xAA CMD/DATA/ DATA_LEN (DATA) checksum 0x55
|
||||||
//
|
|
||||||
//
|
typedef struct __attribute__((packed))
|
||||||
//typedef enum
|
{
|
||||||
//{
|
uint8_t header;
|
||||||
// BLE_STATE_IDLE,
|
uint8_t cmd; // CMD/DATA
|
||||||
// BLE_STATE_ADV,
|
uint8_t len; // DATA_LEN
|
||||||
// BLE_STATE_CONNECT,
|
uint8_t *pData;
|
||||||
// BLE_STATE_DISCONNECT,
|
uint8_t checksum;
|
||||||
//} BleState;
|
uint8_t tail;
|
||||||
//
|
} TsFrameData;
|
||||||
//typedef enum
|
|
||||||
//{
|
#endif // ! __BSP_MASTER_H__
|
||||||
// kValveClose,
|
|
||||||
// kValveOpen,
|
|
||||||
//}BtValveState;
|
|
||||||
//
|
|
||||||
//typedef struct
|
|
||||||
//{
|
|
||||||
// uint8_t buf[];
|
|
||||||
//}BleValveData;
|
|
||||||
//
|
|
||||||
//struct __attribute__((packed)) valve_data
|
|
||||||
//{
|
|
||||||
// uint8_t header;
|
|
||||||
// uint8_t valve_type; // 阀门类型
|
|
||||||
// uint8_t valve_bat; // 1B 电池电压 30=3V,18=1.8V
|
|
||||||
// uint8_t valve_status; // 1B 阀门工作状态 超欠压、过流
|
|
||||||
// uint8_t valve_connct_status; // 1B 阀门连接状态 (电磁阀BLE控制盒) 0=未连接 1=已连接
|
|
||||||
// uint8_t valve_switch_status; // 1B 阀门开关状态 0=未知 1=关闭 2=关闭过,未按按键恢复 3=关闭过,按下了恢复键 4=打开
|
|
||||||
// int8_t valve_temp; // 1B 阀门温度 有符号整数 25 ℃
|
|
||||||
// uint32_t valve_in_pressure; // 4B 阀门入口压力 Pa
|
|
||||||
// uint32_t valve_out_pressure; // 4B 阀门出口压力 Pa
|
|
||||||
// uint32_t valve_atm_pressure; // 4B 阀门大气压力 Pa
|
|
||||||
// uint8_t check;
|
|
||||||
// uint8_t tail;
|
|
||||||
//};
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//void BSP_Master_Send(centralConnItem_t *centralConnList, uint8_t id, uint8_t *Data, uint8_t Len);
|
|
||||||
//int BSP_Master_Receive_Data(uint8_t *data, uint16_t len);
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//#endif // ! __BSP_MASTER_H__
|
|
||||||
|
|
|
@ -48,7 +48,7 @@ void BSP_UART3_Init(void);
|
||||||
unsigned int BSP_Uart3_Receive_Data(void *buf, unsigned int len);
|
unsigned int BSP_Uart3_Receive_Data(void *buf, unsigned int len);
|
||||||
unsigned int BSP_Uart3_Send_Data(const void *buf, unsigned int len);
|
unsigned int BSP_Uart3_Send_Data(const void *buf, unsigned int len);
|
||||||
|
|
||||||
uint8_t XOR_CheckSum(const uint8_t *data, size_t len);
|
uint8_t _CheckSum(const uint8_t *data, size_t len);
|
||||||
extern uint8_t BtRxTaskId;
|
extern uint8_t BtRxTaskId;
|
||||||
|
|
||||||
#endif // !__BSP_UART_H__
|
#endif // !__BSP_UART_H__
|
||||||
|
|
|
@ -1,3 +1,13 @@
|
||||||
|
/***
|
||||||
|
* @Author: mbw
|
||||||
|
* @Date: 2024-12-09 11:40:04
|
||||||
|
* @LastEditors: mbw && 1600520629@qq.com
|
||||||
|
* @LastEditTime: 2024-12-12 17:50:12
|
||||||
|
* @FilePath: \ble_-tyq_-bjq_-ch584-m\bsp\inc\bsp_valve.h
|
||||||
|
* @Description:
|
||||||
|
* @
|
||||||
|
* @Copyright (c) 2024 by ${git_name_email}, All Rights Reserved.
|
||||||
|
*/
|
||||||
#ifndef __BSP_VALVE_H__
|
#ifndef __BSP_VALVE_H__
|
||||||
#define __BSP_VALVE_H__
|
#define __BSP_VALVE_H__
|
||||||
|
|
||||||
|
@ -5,8 +15,8 @@
|
||||||
|
|
||||||
#define MAX_VALVE_NUM 8
|
#define MAX_VALVE_NUM 8
|
||||||
|
|
||||||
|
typedef enum
|
||||||
typedef enum {
|
{
|
||||||
kValveCmdCtr = 0X01,
|
kValveCmdCtr = 0X01,
|
||||||
kValveCmdReg,
|
kValveCmdReg,
|
||||||
kValveCmdRem,
|
kValveCmdRem,
|
||||||
|
@ -16,10 +26,23 @@ typedef enum {
|
||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
WirelessValveClose,
|
WirelessValveClose = 0x01,
|
||||||
WirelessValveOpen,
|
WirelessValveOpen,
|
||||||
} WireLessState;
|
} WireLessState;
|
||||||
|
|
||||||
|
// 阀门类型
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
kTyq = 0X01,
|
||||||
|
kZbf,
|
||||||
|
kDcf,
|
||||||
|
} TeVavleType;
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
kCmdCfg = 0X01,
|
||||||
|
kCmdData,
|
||||||
|
} TeFrameCmd;
|
||||||
|
|
||||||
typedef struct valve_data valve_data_t;
|
typedef struct valve_data valve_data_t;
|
||||||
|
|
||||||
|
@ -37,12 +60,19 @@ struct __attribute__((packed)) valve_data
|
||||||
{
|
{
|
||||||
uint8_t valve_id;
|
uint8_t valve_id;
|
||||||
uint8_t valve_mac[6];
|
uint8_t valve_mac[6];
|
||||||
uint8_t valve_connct_status;
|
TeVavleType type; // 阀门类型
|
||||||
uint8_t valve_switch_status;
|
|
||||||
uint8_t valve_temp;
|
uint8_t bat; // 1B 电池电压 30=3V,18=1.8V
|
||||||
uint32_t valve_in_pressure;
|
int8_t temp; // 1B 阀门温度 有符号整数 25 ℃
|
||||||
uint32_t valve_out_pressure;
|
uint8_t hum; // 1B 阀门湿度 %RH
|
||||||
uint32_t valve_atm_pressure;
|
|
||||||
|
// uint8_t status; // 1B 阀门工作状态 超欠压、过流
|
||||||
|
// uint8_t connct_status; // 1B 阀门连接状态 (电磁阀BLE控制盒) 0=未连接 1=已连接
|
||||||
|
// uint8_t switch_status; // 1B 阀门开关状态 0=未知 1=关闭 2=关闭过,未按按键恢复 3=关闭过,按下了恢复键 4=打开
|
||||||
|
|
||||||
|
// uint32_t in_pressure; // 4B 阀门入口压力 Pa
|
||||||
|
// uint32_t out_pressure; // 4B 阀门出口压力 Pa
|
||||||
|
// uint32_t atm_pressure; // 4B 阀门大气压力 Pa
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct valve_data_list
|
typedef struct valve_data_list
|
||||||
|
@ -51,8 +81,6 @@ typedef struct valve_data_list
|
||||||
valve_data_t valve_data[MAX_VALVE_NUM];
|
valve_data_t valve_data[MAX_VALVE_NUM];
|
||||||
} valve_data_list_t;
|
} valve_data_list_t;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
extern valve_data_list_t valve_list;
|
extern valve_data_list_t valve_list;
|
||||||
|
|
||||||
int BSP_Bt_Valve_Ctr(uint8_t *data, uint8_t len);
|
int BSP_Bt_Valve_Ctr(uint8_t *data, uint8_t len);
|
||||||
|
@ -61,25 +89,4 @@ int BSP_Bt_Remove_Valve(uint8_t *data, uint8_t len);
|
||||||
int BSP_Bt_Replace_Valve(uint8_t *data, uint8_t len);
|
int BSP_Bt_Replace_Valve(uint8_t *data, uint8_t len);
|
||||||
void BSP_Bt_Valve_Updata(void);
|
void BSP_Bt_Valve_Updata(void);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif // ! __BSP_VALVE_H__
|
#endif // ! __BSP_VALVE_H__
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
* @Author: mbw
|
* @Author: mbw
|
||||||
* @Date: 2024-12-06 16:52:30
|
* @Date: 2024-12-06 16:52:30
|
||||||
* @LastEditors: mbw && 1600520629@qq.com
|
* @LastEditors: mbw && 1600520629@qq.com
|
||||||
* @LastEditTime: 2024-12-12 11:12:18
|
* @LastEditTime: 2024-12-12 17:30:58
|
||||||
* @FilePath: \ble_-tyq_-bjq_-ch584-m\bsp\src\bsp_uart.c
|
* @FilePath: \ble_-tyq_-bjq_-ch584-m\bsp\src\bsp_uart.c
|
||||||
* @Description:
|
* @Description:
|
||||||
*
|
*
|
||||||
|
@ -48,7 +48,7 @@ BTFrameData bt_frame = {0};
|
||||||
* @param {uint16_t} len
|
* @param {uint16_t} len
|
||||||
* @return {*}
|
* @return {*}
|
||||||
*/
|
*/
|
||||||
uint8_t XOR_CheckSum(const uint8_t *data, size_t len)
|
uint8_t _CheckSum(const uint8_t *data, size_t len)
|
||||||
{
|
{
|
||||||
uint8_t sum = 0;
|
uint8_t sum = 0;
|
||||||
|
|
||||||
|
@ -143,7 +143,7 @@ int BSP_Bt_Process(uint8_t *data, uint16_t len)
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t rx_sum = data[index + 2 + datalength]; // 读取校验码
|
uint8_t rx_sum = data[index + 2 + datalength]; // 读取校验码
|
||||||
uint8_t calculated_sum = XOR_CheckSum(&data[0], datalength + 2); // 计算校验码
|
uint8_t calculated_sum = _CheckSum(&data[0], datalength + 2); // 计算校验码
|
||||||
if (rx_sum != calculated_sum)
|
if (rx_sum != calculated_sum)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -200,7 +200,7 @@ uint8_t BT_GenerateRawFrame(BTFrameData *pRawData, const uint8_t *p_src, uint8_t
|
||||||
|
|
||||||
// 从帧起始符开始到校验码之前所有字节的和的模256
|
// 从帧起始符开始到校验码之前所有字节的和的模256
|
||||||
// ,即各字节不计超过255的溢出值的二进制算术和。
|
// ,即各字节不计超过255的溢出值的二进制算术和。
|
||||||
pRawData->buf[pRawData->len - 2] = XOR_CheckSum(&pRawData->buf[0], pRawData->len - 2);
|
pRawData->buf[pRawData->len - 2] = _CheckSum(&pRawData->buf[0], pRawData->len - 2);
|
||||||
pRawData->buf[pRawData->len - 1] = 0X55;
|
pRawData->buf[pRawData->len - 1] = 0X55;
|
||||||
|
|
||||||
logHexDumpAll(&pRawData->buf[0], pRawData->len);
|
logHexDumpAll(&pRawData->buf[0], pRawData->len);
|
||||||
|
@ -231,13 +231,15 @@ uint16_t BT_ProcessEvent(uint8_t task_id, uint16_t events)
|
||||||
if (events & SYS_EVENT_MSG)
|
if (events & SYS_EVENT_MSG)
|
||||||
{
|
{
|
||||||
uint8_t *pMsg;
|
uint8_t *pMsg;
|
||||||
|
uint8_t master_buf[64] = {0};
|
||||||
if ((pMsg = tmos_msg_receive(BtRxTaskId)) != NULL)
|
if ((pMsg = tmos_msg_receive(BtRxTaskId)) != NULL)
|
||||||
{
|
{
|
||||||
PRINT("revice data:");
|
PRINT("revice data:");
|
||||||
for (uint8_t i = 0; i < 8; i++)
|
// for (uint8_t i = 0; i < 5; i++)
|
||||||
{
|
// {
|
||||||
PRINT("%02x ", pMsg[i]);
|
// PRINT("%02x ", pMsg[i]);
|
||||||
}
|
// }
|
||||||
|
tmos_memcpy(master_buf, pMsg, sizeof(master_buf));
|
||||||
PRINT("\r\n");
|
PRINT("\r\n");
|
||||||
// Release the TMOS message
|
// Release the TMOS message
|
||||||
tmos_msg_deallocate(pMsg);
|
tmos_msg_deallocate(pMsg);
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
* @Author: mbw
|
* @Author: mbw
|
||||||
* @Date: 2024-12-09 11:40:10
|
* @Date: 2024-12-09 11:40:10
|
||||||
* @LastEditors: mbw && 1600520629@qq.com
|
* @LastEditors: mbw && 1600520629@qq.com
|
||||||
* @LastEditTime: 2024-12-11 15:43:47
|
* @LastEditTime: 2024-12-12 18:34:45
|
||||||
* @FilePath: \ble_-tyq_-bjq_-ch584-m\bsp\src\bsp_valve.c
|
* @FilePath: \ble_-tyq_-bjq_-ch584-m\bsp\src\bsp_valve.c
|
||||||
* @Description:
|
* @Description:
|
||||||
*
|
*
|
||||||
|
@ -16,8 +16,9 @@
|
||||||
#include "multiCentral.h"
|
#include "multiCentral.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
接收数据帧格式: 帧头 + 数据长度 + 命令 + id + mac + (状态)(只针对控制指令,其他指令不含) + 校验码 + 帧尾
|
接收的蓝牙从机info:
|
||||||
发送数据帧格式: 帧头 + 数据长度 + 命令 + id + mac + 响应码 + 校验码 + 帧尾
|
接收数据帧格式: 帧头 + 命令 + 数据长度 + 心跳数据包 + 校验码 + 帧尾
|
||||||
|
发送数据帧格式: 帧头 + 命令 + 数据长度 + 控制数据 + 校验码 + 帧尾
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#undef LOG_ENABLE
|
#undef LOG_ENABLE
|
||||||
|
@ -26,11 +27,31 @@
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
|
|
||||||
valve_data_list_t valve_list = {0};
|
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;
|
||||||
|
|
||||||
|
tmos_memset(pRawData->buf, 0, sizeof(pRawData->buf));
|
||||||
|
|
||||||
|
pRawData->buf[0] = 0XAA;
|
||||||
|
pRawData->buf[1] = cmd;
|
||||||
|
pRawData->buf[2] = src_len;
|
||||||
|
if (src_len > 0)
|
||||||
|
{
|
||||||
|
tmos_memcpy(&pRawData->buf[3], p_src, src_len);
|
||||||
|
}
|
||||||
|
pRawData->buf[pRawData->len - 2] = _CheckSum(&pRawData->buf[0], pRawData->len - 2);
|
||||||
|
pRawData->buf[pRawData->len - 1] = 0X55;
|
||||||
|
logHexDumpAll(pRawData->buf, pRawData->len);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int BSP_Valve_Close(uint8_t valve_id)
|
int BSP_Valve_Close(uint8_t valve_id)
|
||||||
{
|
{
|
||||||
uint8_t num = Flash_Get_Valve_Num();
|
uint8_t num = Flash_Get_Valve_Num();
|
||||||
|
uint8_t valve_ctr_valve = WirelessValveClose;
|
||||||
if ((valve_id > 8) && (num == 0))
|
if ((valve_id > 8) && (num == 0))
|
||||||
{
|
{
|
||||||
logError("BSP_Valve_Close: valve id error");
|
logError("BSP_Valve_Close: valve id error");
|
||||||
|
@ -40,10 +61,12 @@ int BSP_Valve_Close(uint8_t valve_id)
|
||||||
logDebug("BSP_Valve_Close: valve id: %d", valve_id);
|
logDebug("BSP_Valve_Close: valve id: %d", valve_id);
|
||||||
// TODO:检查是否连接, 如果连接,则发送数据,将关闭阀门指令发送过去,然后等待数据接收响应,如果接收到响应是关闭状态0x01,则返回成功,否则失败
|
// TODO:检查是否连接, 如果连接,则发送数据,将关闭阀门指令发送过去,然后等待数据接收响应,如果接收到响应是关闭状态0x01,则返回成功,否则失败
|
||||||
|
|
||||||
// BSP_Master_Send(centralConnList, CONNECT0_ITEM, 0x01, 1);
|
Valve_GenerateRawFrame(&valve_frame_data, kValveCmdCtr, &valve_ctr_valve, 1);
|
||||||
|
|
||||||
return 0;
|
return BSP_Master_Send(centralConnList, CONNECT0_ITEM, &valve_frame_data.buf[0], valve_frame_data.len);
|
||||||
}
|
}
|
||||||
|
SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0) | SHELL_CMD_TYPE(SHELL_TYPE_CMD_FUNC),
|
||||||
|
BSP_Valve_Close, BSP_Valve_Close, "valve_id:CONNECT0_ITEM = 0");
|
||||||
|
|
||||||
/*用于控制阀门的状态
|
/*用于控制阀门的状态
|
||||||
* id: 1-8
|
* id: 1-8
|
||||||
|
@ -239,5 +262,4 @@ void BSP_Valve_Init(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
logInfo("BSP_Valve_Init end");
|
logInfo("BSP_Valve_Init end");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue