重写了和报警器端的交互方式,测试通过

This commit is contained in:
小马_666 2025-01-02 13:42:24 +08:00
parent ddc0ca7706
commit 29bfea488d
5 changed files with 67 additions and 41 deletions

View File

@ -1148,10 +1148,8 @@ int BSP_Master_Send(centralConnItem_t *centralConnList, uint8_t id, uint8_t *Dat
if (centralConnList[id].state == BLE_STATE_CONNECTED) // 检查连接状态是否为连接状态
{
logDebug("BLE_STATE_CONNECTED");
if (centralConnList[id].procedureInProgress == FALSE)
{
logDebug("FALSE");
req.cmd = FALSE;
req.sig = FALSE;
req.handle = centralConnList[id].charHd3;

View File

@ -2,7 +2,7 @@
* @Author: mbw
* @Date: 2024-12-06 16:52:29
* @LastEditors: mbw && 1600520629@qq.com
* @LastEditTime: 2024-12-14 14:51:37
* @LastEditTime: 2025-01-02 11:22:39
* @FilePath: \ble_-tyq_-bjq_-ch584-m\bsp\inc\bsp_uart.h
* @Description:
* @
@ -17,6 +17,7 @@
#define BT_REC_EVT (0X01 << 1)
#define BT_INFO_UPDATA_EVT (0X01 << 2)
#define BT_SEND_EVT (0X01 << 3)//
#define BT_REC_EVT_FINISH (0X01 << 4) //接收完成事件
#define UART3_RX_PIN GPIO_Pin_20 //PB20
#define UART3_TX_PIN GPIO_Pin_21 // PB21

View File

@ -2,7 +2,7 @@
* @Author: mbw
* @Date: 2024-12-06 14:49:21
* @LastEditors: mbw && 1600520629@qq.com
* @LastEditTime: 2024-12-17 09:36:33
* @LastEditTime: 2025-01-02 13:18:15
* @FilePath: \ble_-tyq_-bjq_-ch584-m\bsp\src\bsp_flash.c
* @Description: MAC地址等关键信息进行保存和读取操作
*
@ -36,7 +36,7 @@ int Flash_Write_ConfigInfo(uint8_t *page_buf)
int Flash_Set_Mac_Addr(uint8_t *mac_addr, uint8_t number)
{
uint8_t page_buf[DATA_FLASH_PAGE_SIZE] = {0};
uint8_t in_page_offset = ((FLASH_MAC_1_ADDR + number * FLASH_MAC_INFO_LEN) - FLASH_MAC_INFO_START_ADDR);
uint8_t in_page_offset = ((FLASH_MAC_INFO_START_ADDR + (number - 1) * FLASH_MAC_INFO_LEN) - FLASH_MAC_INFO_START_ADDR);
if ((mac_addr == NULL)||( number > MAX_VALVE_NUM))
{
return -1;
@ -53,17 +53,9 @@ int Flash_Set_Mac_Addr(uint8_t *mac_addr, uint8_t number)
int Flash_Get_Mac_Addr(uint8_t *mac_addr, uint8_t number)
{
__attribute__((aligned(4)))
uint8_t data[FLASH_MAC_INFO_LEN + 2]; // 读写buf需要4字节对齐
EEPROM_READ((FLASH_MAC_INFO_START_ADDR + number * FLASH_MAC_INFO_LEN), data, FLASH_MAC_INFO_LEN);
if (tmos_isbufset(data, 0xFF, FLASH_MAC_INFO_LEN))
{
logDebug("MAC地址为空,请先配网");
tmos_memset(mac_addr, 0xFF, FLASH_MAC_INFO_LEN);
return -1;
}
tmos_memcpy(mac_addr, data, FLASH_MAC_INFO_LEN);
uint8_t data[FLASH_MAC_INFO_LEN]; // 读写buf需要4字节对齐
EEPROM_READ((FLASH_MAC_INFO_START_ADDR + (number - 1) * FLASH_MAC_INFO_LEN), mac_addr, FLASH_MAC_INFO_LEN);
DelayMs(2);
return 0;
}
@ -75,14 +67,17 @@ int Flash_Set_Valve_Num(uint8_t valve_num)
uint8_t in_page_offset = (FLASH_MAC_NUM_ADDR - FLASH_INFO_ADDR);
Flash_ErasePage_ReadConfigInfo(page_buf);
page_buf[in_page_offset] = valve_num;
return Flash_Write_ConfigInfo(page_buf);
}
/*获取无线调压器数量*/
uint8_t Flash_Get_Valve_Num(void)
{
uint8_t num;
EEPROM_READ(FLASH_MAC_NUM_ADDR, &num, FLASH_MAC_NUM_LEN);
DelayMs(2);
if (num != 0xFF)
{
return num;
@ -91,18 +86,20 @@ uint8_t Flash_Get_Valve_Num(void)
{
return 0;
}
}
void BSP_FLASH_Init(void)
{
uint32_t flash_write_flag = 0;
EEPROM_READ(FLASH_INFO_WRITE_FLAG_ADDR, &flash_write_flag, FLASH_INFO_WRITE_FLAG_LEN);
DelayMs(2);
if (flash_write_flag != FLASH_INFO_WRITE_FLAG_VAL) // 用以防止刷掉写入的数据
{
flash_write_flag = FLASH_INFO_WRITE_FLAG_VAL;
// 擦除数据
EEPROM_ERASE(FLASH_INFO_ADDR, DATA_FLASH_PAGE_SIZE); // 擦除待写区
DelayMs(2);
EEPROM_WRITE(FLASH_INFO_WRITE_FLAG_ADDR, &flash_write_flag, FLASH_INFO_WRITE_FLAG_LEN);
DelayMs(2);
}
}

View File

@ -2,7 +2,7 @@
* @Author: mbw
* @Date: 2024-12-06 16:52:30
* @LastEditors: mbw && 1600520629@qq.com
* @LastEditTime: 2024-12-17 14:17:49
* @LastEditTime: 2025-01-02 11:38:30
* @FilePath: \ble_-tyq_-bjq_-ch584-m\bsp\src\bsp_uart.c
* @Description:
*
@ -29,6 +29,8 @@
#define UART3_RX_BUFFER_LENGTH 1024U
#define UART3_TX_BUFFER_LENGTH 2048U
uint8_t bt_recv_start_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};
@ -324,24 +326,39 @@ uint16_t BT_ProcessEvent(uint8_t task_id, uint16_t events)
{
lwrb_reset(&uart1_rx_t);
lwrb_reset(&uart1_tx_t);
tmos_start_task(task_id, BT_REC_EVT, 800);
tmos_start_task(task_id, BT_REC_EVT_FINISH, 100);
return (events ^ BT_START_EVT);
}
else if (events & BT_REC_EVT_FINISH)
{
if (bt_recv_start_flag)
{
bt_recv_start_flag = 0;
bt_recv_end_flag = 1;
tmos_start_task(task_id, BT_REC_EVT, 100);
}
tmos_start_task(task_id, BT_REC_EVT_FINISH, 50);
return (events ^ BT_REC_EVT_FINISH);
}
else if (events & BT_REC_EVT)
{
int len = lwrb_get_full(&uart1_rx_t);
if (len > 0)
logDebug("BT_REC_EVT");
if (bt_recv_end_flag)
{
__attribute__((aligned(4))) uint8_t buf[256] = {0};
lwrb_read(&uart1_rx_t, buf, len);
ret = BSP_Bt_Process(buf, len);
if (ret != 0)
bt_recv_end_flag = 0;
int len = lwrb_get_full(&uart1_rx_t);
if (len > 0)
{
logError("BT 操作失败[%d]", ret);
__attribute__((aligned(4))) uint8_t buf[256] = {0};
lwrb_read(&uart1_rx_t, buf, len);
ret = BSP_Bt_Process(buf, len);
if (ret != 0)
{
logError("BT 操作失败[%d]", ret);
}
}
}
tmos_start_task(task_id, BT_REC_EVT, 100);
return (events ^ BT_REC_EVT);
}
else if (events & BT_SEND_EVT)
@ -414,6 +431,10 @@ void UART1_IRQHandler(void)
}
case UART_II_RECV_RDY:
case UART_II_RECV_TOUT: // 接收数据
if ((bt_recv_start_flag == 0)&&(bt_recv_end_flag == 0))//用于检测是否是开始接收数据
{
bt_recv_start_flag = 1;
}
while (R8_UART1_RFC)
{
data = R8_UART1_RBR;

View File

@ -2,7 +2,7 @@
* @Author: mbw
* @Date: 2024-12-09 11:40:10
* @LastEditors: mbw && 1600520629@qq.com
* @LastEditTime: 2024-12-17 14:43:12
* @LastEditTime: 2025-01-02 13:24:41
* @FilePath: \ble_-tyq_-bjq_-ch584-m\bsp\src\bsp_valve.c
* @Description:
*
@ -81,7 +81,7 @@ int BSP_Bt_Valve_Ctr(uint8_t *data, uint8_t len)
uint8_t mac_addr[FLASH_MAC_INFO_LEN] = {0};
if ((data[0] >= 1) && (data[0] <= 8))
{
Flash_Get_Mac_Addr(mac_addr, data[0] - 1);
Flash_Get_Mac_Addr(mac_addr, data[0]);
}
else
{
@ -106,7 +106,7 @@ int BSP_Bt_Register_Valve(uint8_t *data, uint8_t len)
if ((data[0] >= 1) && (data[0] <= 8))
{
Flash_Get_Mac_Addr(mac_addr, data[0] - 1);
Flash_Get_Mac_Addr(mac_addr, data[0]);
}
else
{
@ -131,7 +131,7 @@ int BSP_Bt_Register_Valve(uint8_t *data, uint8_t len)
{
logDebug("没有数据,全部写入:");
logDebug("写入MAC 地址: %02X %02X %02X %02X %02X %02X", data[1], data[2], data[3], data[4], data[5], data[6]);
if (Flash_Set_Mac_Addr(&data[1], data[0] - 1) != 0)
if (Flash_Set_Mac_Addr(&data[1], data[0]) != 0)
{
logError("阀门注册写入flash 错误");
return 3;
@ -140,10 +140,10 @@ int BSP_Bt_Register_Valve(uint8_t *data, uint8_t len)
{
uint8_t num = Flash_Get_Valve_Num();
logDebug("num : %02X ", num);
Flash_Set_Valve_Num(1);
logDebug("写入成功,当前阀门数量为: %d", num);
Flash_Set_Valve_Num(num + 1);
logDebug("写入成功,当前阀门数量为: %d", num + 1);
BSP_Bt_Valve_Updata(); // 更新阀门信息
}
}
else
@ -162,7 +162,7 @@ int BSP_Bt_Remove_Valve(uint8_t *data, uint8_t len)
uint8_t mac_addr[FLASH_MAC_INFO_LEN + 2] = {0};
if ((data[0] >= 1) && (data[0] <= 8))// 判断是否是正确的ID
{
Flash_Get_Mac_Addr(mac_addr, data[0] - 1);
Flash_Get_Mac_Addr(mac_addr, data[0]);
}
else
{
@ -179,12 +179,19 @@ int BSP_Bt_Remove_Valve(uint8_t *data, uint8_t len)
else
{
tmos_memset(mac_addr, 0xFF, FLASH_MAC_INFO_LEN);
if (Flash_Set_Mac_Addr(mac_addr, data[0] - 1) != 0) // 清空掉对应位置MAC数据
if (Flash_Set_Mac_Addr(mac_addr, data[0]) != 0) // 清空掉对应位置MAC数据
{
logError("移除阀门信息失败");
logHexDumpAll(data, len);
return -2;
}
uint8_t num = Flash_Get_Valve_Num();
if (Flash_Set_Valve_Num(num - 1) != 0) // 移除一个阀门
{
logError("移除阀门信息失败");
logHexDumpAll(data, len);
return -2;
}
BSP_Bt_Valve_Updata();
Master_DisConnect();
}
@ -206,21 +213,22 @@ int BSP_Bt_Replace_Valve(uint8_t *data, uint8_t len)
}
if ((data[0] >= 1) && (data[0] <= 8))
{
Flash_Get_Mac_Addr(mac_addr, data[0] - 1);
Flash_Get_Mac_Addr(mac_addr, data[0]);
}
else
{
logError("valve id error");
return -2;
}
if (tmos_memcmp(&data[7], mac_addr, FLASH_MAC_INFO_LEN) == TRUE)
if (tmos_memcmp(&data[1], mac_addr, FLASH_MAC_INFO_LEN) == TRUE)
{
logError("已经注册过了"); // 不需要重复写入
return 0; // 说明已经注册过了
}
else
{
if (Flash_Set_Mac_Addr(&data[7], data[0] - 1) != 0)
//新阀门数据在前
if (Flash_Set_Mac_Addr(&data[1], data[0]) != 0)
{
logError("阀门注册写入flash 错误");
return 3;
@ -235,6 +243,7 @@ int BSP_Bt_Replace_Valve(uint8_t *data, uint8_t len)
void BSP_Bt_Valve_Updata(void)
{
uint8_t cnt = 0;
__attribute__((aligned(4)))
uint8_t mac[6] = {0};
uint8_t num = Flash_Get_Valve_Num();
@ -246,12 +255,12 @@ void BSP_Bt_Valve_Updata(void)
tmos_memset(&valve_list, 0, sizeof(valve_data_list_t));
for (int i = 0; i < MAX_VALVE_NUM; i++) // 这个循环是为了将数据拷贝到valve_list中 并且保证id号和flash对应起来
for (int i = 1; i < MAX_VALVE_NUM; i++) // 这个循环是为了将数据拷贝到valve_list中 并且保证id号和flash对应起来
{
if (Flash_Get_Mac_Addr(mac, i) == 0) // 说明有MAC数据
{
tmos_memcpy(valve_list.valve_data[cnt].valve_mac, mac, 6); // 这样做的目的就是读取方便只需要根据flash中读取到的数量进行读取前N个值
valve_list.valve_data[cnt].valve_id = i + 1;
valve_list.valve_data[cnt].valve_id = i;
logDebug("updata valve_id: %d, valve_mac: %02X %02X %02X %02X %02X %02X",
valve_list.valve_data[cnt].valve_id,
valve_list.valve_data[cnt].valve_mac[0],