From 54293c1e73dd9eebe140ea9b85f50e9fc1edccc7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=B0=8F=E9=A9=AC=5F666?=
<13089258+pony-six-hundred-and-sixty-six@user.noreply.gitee.com>
Date: Fri, 23 May 2025 10:36:28 +0800
Subject: [PATCH 1/3] =?UTF-8?q?=E5=85=88=E6=9A=82=E5=AD=98=EF=BC=8C?=
=?UTF-8?q?=E5=87=86=E5=A4=87=E6=9B=B4=E6=96=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.cproject | 477 +++++++++++-------
...kspace => ZBF_Master_ch584m.mrs-workspace} | 2 +-
.mrs/launch.json | 8 +-
.project | 67 ++-
.template | 23 +
.vscode/settings.json | 5 +-
APP/multiCentral.c | 21 +-
APP/multiCentral_main.c | 5 +-
ZBF_Master_ch584m.launch | 62 +++
..._CH584M.wvproj => ZBF_Master_ch584m.wvproj | Bin
bsp/inc/bsp_uart.h | 12 +-
bsp/inc/bsp_valve.h | 52 +-
bsp/src/bsp_tim.c | 20 +-
bsp/src/bsp_uart.c | 28 +-
bsp/src/bsp_valve.c | 49 +-
15 files changed, 561 insertions(+), 270 deletions(-)
rename .mrs/{BLE_TYQ_BJQ_CH584M.mrs-workspace => ZBF_Master_ch584m.mrs-workspace} (90%)
create mode 100644 ZBF_Master_ch584m.launch
rename BLE_TYQ_BJQ_CH584M.wvproj => ZBF_Master_ch584m.wvproj (100%)
diff --git a/.cproject b/.cproject
index fca4c0a..0a88c5f 100644
--- a/.cproject
+++ b/.cproject
@@ -1,174 +1,307 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.mrs/BLE_TYQ_BJQ_CH584M.mrs-workspace b/.mrs/ZBF_Master_ch584m.mrs-workspace
similarity index 90%
rename from .mrs/BLE_TYQ_BJQ_CH584M.mrs-workspace
rename to .mrs/ZBF_Master_ch584m.mrs-workspace
index d15aa25..9198ead 100644
--- a/.mrs/BLE_TYQ_BJQ_CH584M.mrs-workspace
+++ b/.mrs/ZBF_Master_ch584m.mrs-workspace
@@ -4,7 +4,7 @@
"path": "."
},
{
- "name": "BLE_TYQ_BJQ_CH584M",
+ "name": "ZBF_Master_ch584m",
"path": "../"
}
],
diff --git a/.mrs/launch.json b/.mrs/launch.json
index f3acb26..0b07c05 100644
--- a/.mrs/launch.json
+++ b/.mrs/launch.json
@@ -4,8 +4,8 @@
{
"type": "mrs-debugger",
"request": "launch",
- "name": "BLE_TYQ_BJQ_CH584M",
- "cwd": "d:\\SXDT\\Project\\CH32\\ble_-tyq_-bjq_-ch584-m",
+ "name": "ZBF_Master_ch584m",
+ "cwd": "d:\\SXDT\\Project\\HED\\zbf_master_ch584m",
"openOCDCfg": {
"useLocalOpenOCD": true,
"executable": "c:/MounRiver/MounRiver_Studio2/resources/app/resources/win32/components/WCH/OpenOCD/OpenOCD/bin/openocd.exe",
@@ -39,8 +39,8 @@
"additionalCommands": []
},
"loadedFiles": {
- "executableFile": "d:\\SXDT\\Project\\CH32\\ble_-tyq_-bjq_-ch584-m\\obj\\BLE_TYQ_BJQ_CH584M.elf",
- "symbolFile": "d:\\SXDT\\Project\\CH32\\ble_-tyq_-bjq_-ch584-m\\obj\\BLE_TYQ_BJQ_CH584M.elf",
+ "executableFile": "d:\\SXDT\\Project\\HED\\zbf_master_ch584m\\obj\\ZBF_Master_ch584m.elf",
+ "symbolFile": "d:\\SXDT\\Project\\HED\\zbf_master_ch584m\\obj\\ZBF_Master_ch584m.elf",
"executableFileOffset": 0,
"symbolFileOffset": 0
},
diff --git a/.project b/.project
index 2aa28b2..47824a0 100644
--- a/.project
+++ b/.project
@@ -1,37 +1,34 @@
- BLE_TYQ_BJQ_CH584M
-
-
-
-
-
- org.eclipse.cdt.managedbuilder.core.genmakebuilder
- clean,full,incremental,
-
-
-
-
- org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder
- full,incremental,
-
-
-
-
-
- org.eclipse.cdt.core.cnature
- org.eclipse.cdt.managedbuilder.core.managedBuildNature
- org.eclipse.cdt.managedbuilder.core.ScannerConfigNature
-
-
-
- 1602468250279
-
- 22
-
- org.eclipse.ui.ide.multiFilter
- 1.0-name-matches-false-false-*.wvproj
-
-
-
-
+ ZBF_Master_ch584m
+
+
+
+
+ org.eclipse.cdt.managedbuilder.core.genmakebuilder
+ clean,full,incremental,
+
+
+
+ org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder
+ full,incremental,
+
+
+
+
+ org.eclipse.cdt.core.cnature
+ org.eclipse.cdt.managedbuilder.core.managedBuildNature
+ org.eclipse.cdt.managedbuilder.core.ScannerConfigNature
+
+
+
+
+
+ 6
+
+ org.eclipse.ui.ide.multiFilter
+ 1.0-name-matches-false-false-*.wvproj
+
+
+
+
\ No newline at end of file
diff --git a/.template b/.template
index e69de29..da0444e 100644
--- a/.template
+++ b/.template
@@ -0,0 +1,23 @@
+Vendor=WCH
+Toolchain=RISC-V
+Series=CH32L103
+RTOS=NoneOS
+MCU=CH32L103C8T6
+Link=WCH-Link
+PeripheralVersion=1.0
+Description=
+Mcu Type=
+Address=
+Target Path=
+Exe Path=
+Exe Arguments=
+CLKSpeed=1
+DebugInterfaceMode=0
+Erase All=false
+Program=false
+Verify=false
+Reset=false
+SDIPrintf=false
+Disable Power Output=false
+Clear CodeFlash=false
+Disable Code-Protect=false
\ No newline at end of file
diff --git a/.vscode/settings.json b/.vscode/settings.json
index 38c6d82..051a531 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -18,9 +18,9 @@
}
],
"files.associations": {
+ "*.dbclient-js": "javascript",
"*.sqlbook": "sql",
"*.ndjson": "jsonl",
- "*.dbclient-js": "javascript",
"config.h": "c",
"ch58xble_lib.h": "c",
"bsp_uart.h": "c",
@@ -37,6 +37,7 @@
"bsp_flash.h": "c",
"shell.h": "c",
"ch58x_uart.h": "c",
- "bsp_tim.h": "c"
+ "bsp_tim.h": "c",
+ "ch58x_common.h": "c"
}
}
\ No newline at end of file
diff --git a/APP/multiCentral.c b/APP/multiCentral.c
index 34a3d8c..30147a7 100644
--- a/APP/multiCentral.c
+++ b/APP/multiCentral.c
@@ -18,6 +18,7 @@
#define MASTER_DETECT_EVT (0X01 << 3)
uint8_t MasterCtrTaskId;
+uint8_t bt_conncet_cnt = 0;
/*********************************************************************
* MACROS
@@ -1252,15 +1253,17 @@ int BSP_Master_Receive_Data(uint8_t task_id, uint8_t *data, uint16_t len)
return -5;
}
+
// //有效数据长度
size_t data_len = (datalength + 5);
ret = data_len;
- if (data[index + 1] == kCmdCloseVavle) // 0x02 代表了其是控制阀门响应
+ if (data[index + 1] == 0x02) // 0x02 代表了其是控制阀门响应
{
- // logDebug("BT 控制阀门响应包");
+ logDebug("BT 控制阀门响应包");
+ logHexDumpAll(data, len);
if (data[index + datalength + 2] == 1) // 响应数据位
{
- logInfo("关闭阀门成功");
+ logInfo("BT 控制阀门成功");
}
else
{
@@ -1272,8 +1275,14 @@ int BSP_Master_Receive_Data(uint8_t task_id, uint8_t *data, uint16_t len)
logDebug("蓝牙从机心跳数据包:");
logHexDumpAll(data, data_len);
}
+ else
+ {
+ logDebug("蓝牙从机数据包:");
+ logHexDumpAll(data, len);
+ }
// 到这一步说明数据没问题,将接收到的数据通过中心任务发送出去
uint8_t *p_data;
+
p_data = tmos_msg_allocate(data_len);
if (p_data)
{
@@ -1337,6 +1346,12 @@ uint16_t Master_ProcessEvent(uint8_t task_id, uint16_t events)
if (Flash_Get_Valve_Num())
{
logDebug("有设备,尝试连接\r\n");
+ bt_conncet_cnt++;
+ if (bt_conncet_cnt > 180)
+ {
+ bt_conncet_cnt = 0;
+ PFIC_SystemReset();
+ }
tmos_start_task(task_id, MASTER_CONNECT_EVT, 1600);
}
}
diff --git a/APP/multiCentral_main.c b/APP/multiCentral_main.c
index 97925fa..0619bfe 100644
--- a/APP/multiCentral_main.c
+++ b/APP/multiCentral_main.c
@@ -96,15 +96,12 @@ int main(void)
logDebug("test log debug\n");
#endif
+
CH58x_BLEInit();
HAL_Init();
GAPRole_CentralInit();
Central_Init();
- logDebug("get_ticks %d", BSP_Get_Tick());
- DelayMs(2000);
- logDebug("get_ticks %d", BSP_Get_Tick());
-
BSP_FLASH_Init();
BSP_Valve_Init();
BSP_UART1_Init(); // BT UART
diff --git a/ZBF_Master_ch584m.launch b/ZBF_Master_ch584m.launch
new file mode 100644
index 0000000..22e6c4b
--- /dev/null
+++ b/ZBF_Master_ch584m.launch
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/BLE_TYQ_BJQ_CH584M.wvproj b/ZBF_Master_ch584m.wvproj
similarity index 100%
rename from BLE_TYQ_BJQ_CH584M.wvproj
rename to ZBF_Master_ch584m.wvproj
diff --git a/bsp/inc/bsp_uart.h b/bsp/inc/bsp_uart.h
index 4ca0ade..a1cb70e 100644
--- a/bsp/inc/bsp_uart.h
+++ b/bsp/inc/bsp_uart.h
@@ -13,15 +13,25 @@
#include "CH58x_common.h"
+// #define DEVICE_TYPE_TYQ_LY
+#define DEVICE_TYPE_FXJB_LY
+
+
#define BT_START_EVT (0X01 << 0)
#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) //接收完成事件
+#ifdef DEVICE_TYPE_TYQ_LY
#define UART3_RX_PIN GPIO_Pin_20 //PB20
#define UART3_TX_PIN GPIO_Pin_21 // PB21
-
+#endif
+#ifdef DEVICE_TYPE_FXJB_LY
+/*方形将本是PA4 PA5*/
+#define UART3_RX_PIN GPIO_Pin_4 //PA4
+#define UART3_TX_PIN GPIO_Pin_5 // PA5
+#endif
#define BT_UART_TX_PIN GPIO_Pin_9 //PA9
#define BT_UART_RX_PIN GPIO_Pin_8 //PA8
diff --git a/bsp/inc/bsp_valve.h b/bsp/inc/bsp_valve.h
index 7f9896b..7526f79 100644
--- a/bsp/inc/bsp_valve.h
+++ b/bsp/inc/bsp_valve.h
@@ -2,8 +2,8 @@
* @Author: mbw
* @Date: 2024-12-09 11:40:04
* @LastEditors: mbw && 1600520629@qq.com
- * @LastEditTime: 2025-04-22 13:19:22
- * @FilePath: \ble_-tyq_-bjq_-ch584-m\bsp\inc\bsp_valve.h
+ * @LastEditTime: 2025-05-23 10:34:57
+ * @FilePath: \zbf_master_ch584m\bsp\inc\bsp_valve.h
* @Description:
* @
* @Copyright (c) 2025 by ${git_name_email}, All Rights Reserved.
@@ -27,16 +27,27 @@
typedef enum
{
- kValveCmdCtr = 0X01,
- kValveCmdReg,
- kValveCmdRem,
- kValveCmdRep,
- kValveCmdRemAll,//移除所有的阀门地址
- kValveEventStatus,//阀门状态包
- kValveConncetStatus,//阀门状态包
- kValveCmdMax,
-} ValveCmdType;
+ kValveCmdCtr = 0X01, // 控制命令
+ kValveCmdReg, // 注册命令
+ kValveCmdRem, // 移除命令
+ kValveCmdRep, // 替换命令
+ kValveCmdRemAll, // 移除所有的阀门地址
+ kValveEventStatus, // 阀门状态包
+ kValveConncetStatus, // 阀门连接状态
+ kValveCmdOverPressure, // 超压关阀
+ kValveCmdUnderPressure, // 欠压关阀
+ kValveCmdOverCurrent, // 过流关阀
+ kValveCmdMicroLeak, // 微漏关阀
+ kValveCmdTimer, // 定时关阀
+ kValveCmdOpenWithStove, // 开灶开阀
+ kValveCmdCloseWithStove, // 关灶关阀
+ kValveCmdOverTemperature, // 超温关阀
+ kValveCmdDelayClose, // 延时关阀
+ kValveCmdManualClose, // 手动关阀
+
+ kValveCmdMax, // 枚举最大值
+} ValveCmdType;
typedef enum
{
WirelessValveClose = 0x01,
@@ -57,6 +68,16 @@ typedef enum
kCmdCloseVavle,
kCmdOpenVavle,
kCmdData,
+ kValveCmdOverPressure, // 超压关阀
+ kValveCmdUnderPressure, // 欠压关阀
+ kValveCmdOverCurrent, // 过流关阀
+ kValveCmdMicroLeak, // 微漏关阀
+ kValveCmdTimer, // 定时关阀
+ kValveCmdOpenWithStove, // 开灶开阀
+ kValveCmdCloseWithStove, // 关灶关阀
+ kValveCmdOverTemperature, // 超温关阀
+ kValveCmdDelayClose, // 延时关阀
+ kValveCmdManualClose, // 手动关阀
} TeFrameCmd;
/*
@@ -69,7 +90,7 @@ typedef enum
无线调压阀出口压力
无线调压阀大气压
*/
-struct __attribute__((packed)) valve_data
+typedef struct __attribute__((packed))
{
uint8_t valve_id;
uint8_t valve_mac[6];
@@ -80,12 +101,15 @@ struct __attribute__((packed)) valve_data
uint32_t valve_out_pressure;
uint32_t valve_atm_pressure;
uint8_t valve_type;
-};
+ uint8_t valve_bat;
+ uint8_t valve_hum;//阀门湿度
+ int8_t valve_rssi;//阀门rssi
+}valve_data;
typedef struct valve_data_list
{
uint8_t valve_num;
- struct valve_data valve_data[MAX_VALVE_NUM];
+ valve_data valve_data[MAX_VALVE_NUM];
} valve_data_list_t;
extern valve_data_list_t valve_list;
diff --git a/bsp/src/bsp_tim.c b/bsp/src/bsp_tim.c
index 3582b35..7c782bb 100644
--- a/bsp/src/bsp_tim.c
+++ b/bsp/src/bsp_tim.c
@@ -11,7 +11,7 @@
#include "bsp_tim.h"
#include "HAL.h"
-volatile uint32_t tick_1ms_cnt = 0;
+// volatile uint32_t tick_1ms_cnt = 0;
/**
* @description:
@@ -25,15 +25,15 @@ uint32_t BSP_Get_Tick(void)
}
-__INTERRUPT
-__HIGH_CODE
-void SysTick_Handler()
-{
- static uint8_t cnt_ms = 0;
+// __INTERRUPT
+// __HIGH_CODE
+// void SysTick_Handler()
+// {
+// static uint8_t cnt_ms = 0;
- SysTick->SR = 0;
- tick_1ms_cnt++;
+// SysTick->SR = 0;
+// tick_1ms_cnt++;
- cnt_ms++;
-}
+// cnt_ms++;
+// }
diff --git a/bsp/src/bsp_uart.c b/bsp/src/bsp_uart.c
index 2fd4294..5b1618f 100644
--- a/bsp/src/bsp_uart.c
+++ b/bsp/src/bsp_uart.c
@@ -2,8 +2,8 @@
* @Author: mbw
* @Date: 2024-12-06 16:52:30
* @LastEditors: mbw && 1600520629@qq.com
- * @LastEditTime: 2025-04-22 15:16:57
- * @FilePath: \ble_-tyq_-bjq_-ch584-m\bsp\src\bsp_uart.c
+ * @LastEditTime: 2025-05-23 10:35:36
+ * @FilePath: \zbf_master_ch584m\bsp\src\bsp_uart.c
* @Description:
*
* Copyright (c) 2024 by ${git_name_email}, All Rights Reserved.
@@ -167,11 +167,11 @@ int BSP_Bt_Process(uint8_t *data, uint16_t len)
switch (data[index + 2])
{
case kValveCmdCtr:
- logDebug("recv cmd: 0x01, 执行的动作是关闭阀门");
+
ret = BSP_Bt_Valve_Ctr(&data_buf[0], datalength);
break;
case kValveCmdReg:
- logDebug("recv cmd: 0x02, 执行的动作是注册阀门");
+
ret = BSP_Bt_Register_Valve(&data_buf[0], datalength);
if (ret == 0)
{
@@ -237,7 +237,6 @@ uint8_t BT_GenerateRawFrame(BTFrameData *pRawData, const uint8_t *p_src, uint8_t
pRawData->buf[1] = src_len;
tmos_memcpy(&pRawData->buf[2], p_src, src_len);
-
// 从帧起始符开始到校验码之前所有字节的和的模256
// ,即各字节不计超过255的溢出值的二进制算术和。
pRawData->buf[pRawData->len - 2] = _CheckSum(&pRawData->buf[0], pRawData->len - 2);
@@ -308,6 +307,7 @@ uint16_t BSP_Send_Process(uint8_t *pdata)
BSP_Bt_Valve_Resp(kValveCmdCtr, valve_list.valve_data[0].valve_id, valve_list.valve_data[0].valve_mac, master_rx_buf[3]);
break;
case kCmdOpenVavle:
+ BSP_Bt_Valve_Resp(kValveCmdCtr, valve_list.valve_data[0].valve_id, valve_list.valve_data[0].valve_mac, master_rx_buf[3]);
break;
case kCmdData:
valve_list.valve_data[0].valve_connct_status = 1;
@@ -324,8 +324,10 @@ uint16_t BSP_Send_Process(uint8_t *pdata)
BSP_Bt_Valve_Resp(kValveEventStatus, valve_list.valve_data[0].valve_id, valve_list.valve_data[0].valve_mac, TRUE);
}
break;
+ //TODO:待完成从机的一些主动上报信息解析
+ case
default:
- logError("不支持的命令: %d", master_rx_buf[1]);
+ logError("不支持的从机命令: %d", master_rx_buf[1]);
break;
}
@@ -369,7 +371,7 @@ uint16_t BT_ProcessEvent(uint8_t task_id, uint16_t events)
}
else if (events & BT_REC_EVT)
{
- logDebug("BT_REC_EVT");
+ // logDebug("BT_REC_EVT");
if (bt_recv_end_flag)
{
bt_recv_end_flag = 0;
@@ -420,12 +422,22 @@ void BSP_UART1_Init(void)
/*调试接口*/
void BSP_UART3_Init(void)
{
- GPIOPinRemap(ENABLE, RB_PIN_UART3);
+#ifdef DEVICE_TYPE_TYQ_LY
+ GPIOPinRemap(ENABLE, RB_PIN_UART3);
/* 配置串口3:先配置IO口模式,再配置串口 */
GPIOB_SetBits(UART3_TX_PIN);
GPIOB_ModeCfg(UART3_RX_PIN, GPIO_ModeIN_PU); // RXD-配置上拉输入
GPIOB_ModeCfg(UART3_TX_PIN, GPIO_ModeOut_PP_5mA); // TXD-配置推挽输出,注意先让IO口输出高电平
+#endif
+#ifdef DEVICE_TYPE_FXJB_LY
+ /* 配置串口3:先配置IO口模式,再配置串口 */
+ GPIOA_SetBits(UART3_TX_PIN);
+ GPIOA_ModeCfg(UART3_RX_PIN, GPIO_ModeIN_PU); // RXD-配置上拉输入
+ GPIOA_ModeCfg(UART3_TX_PIN, GPIO_ModeOut_PP_5mA); // TXD-配置推挽输出,注意先让IO口输出高电平
+#endif
+
UART3_DefInit();
+
UART3_BaudRateCfg(460800);
UART3_ByteTrigCfg(UART_1BYTE_TRIG);
// 中断方式接收数据
diff --git a/bsp/src/bsp_valve.c b/bsp/src/bsp_valve.c
index 648e8e6..08d74c1 100644
--- a/bsp/src/bsp_valve.c
+++ b/bsp/src/bsp_valve.c
@@ -51,10 +51,10 @@ uint8_t Valve_GenerateRawFrame(BTFrameData *pRawData, const uint8_t cmd, const u
return 0;
}
-int BSP_Valve_Close(uint8_t valve_id)
+int BSP_Valve_Ctr(uint8_t valve_id, const uint8_t cmd)
{
uint8_t num = Flash_Get_Valve_Num();
- uint8_t valve_ctr_valve = WirelessValveClose;
+ uint8_t valve_ctr_valve = cmd;
if ((valve_id > 8) && (num == 0))
{
logError("BSP_Valve_Close: valve id error");
@@ -63,13 +63,20 @@ int BSP_Valve_Close(uint8_t valve_id)
}
logDebug("BSP_Valve_Close: valve id: %d", valve_id);
// TODO:检查是否连接, 如果连接,则发送数据,将关闭阀门指令发送过去,然后等待数据接收响应,如果接收到响应是关闭状态0x01,则返回成功,否则失败
-
- Valve_GenerateRawFrame(&valve_frame_data, kCmdCloseVavle, &valve_ctr_valve, 1);
+ if (cmd == kCmdCloseVavle)
+ {
+ Valve_GenerateRawFrame(&valve_frame_data, kCmdCloseVavle, &valve_ctr_valve, 1);
+ }
+ else
+ {
+ 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);
}
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");
+ BSP_Valve_Ctr, BSP_Valve_Ctr, "valve_id: 0, close: 0x01, open :0x02");
/*用于控制阀门的状态
* id: 1-8
@@ -95,13 +102,25 @@ int BSP_Bt_Valve_Ctr(uint8_t *data, uint8_t len)
return -2;
}
- /*如果到这里了,说明ID和MAC地址对应没问题,则关闭对应阀门*/
- return BSP_Valve_Close(data[0]);
+ /*如果到这里了,说明ID和MAC地址对应没问题,则控制对应阀门*/
+ if (data[7] == WirelessValveClose)
+ {
+ logDebug("recv cmd: 0x01, 执行的动作是关闭阀门");
+ return BSP_Valve_Ctr(data[0], kCmdCloseVavle);
+ }
+ else if (data[7] == WirelessValveOpen)
+ {
+ logDebug("recv cmd: 0x02, 执行的动作是打开阀门");
+ return BSP_Valve_Ctr(data[0], kCmdOpenVavle);
+ }
+ logDebug("data[7] = %#x", data[7]);
+ return -1;
}
/*注册阀门信息*/
int BSP_Bt_Register_Valve(uint8_t *data, uint8_t len)
{
+ logDebug("recv cmd: 0x02, 执行的动作是注册阀门");
uint8_t mac_addr[FLASH_MAC_INFO_LEN] = {0};
if ((data[0] >= 1) && (data[0] <= 8))
@@ -266,8 +285,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 mac[6] = {0};
uint8_t num = Flash_Get_Valve_Num();
logInfo("BSP_Bt_Valve_Updata num: %d ", num);
@@ -275,7 +293,6 @@ void BSP_Bt_Valve_Updata(void)
{
return;
}
-
tmos_memset(&valve_list, 0, sizeof(valve_data_list_t));
for (int i = 1; i < MAX_VALVE_NUM; i++) // 这个循环是为了将数据拷贝到valve_list中, 并且保证id号和flash对应起来
@@ -305,11 +322,11 @@ void BSP_Bt_Valve_Updata(void)
}
-//蓝牙主机对报警器的响应函数。 state表示此对应的项目,可能是执行成功与否,可能是蓝牙连接状态吗,具体参考对应的case
+//蓝牙主机对报警器的响应函数。 state表示此对应的项目,可能是执行成功与否,可能是蓝牙连接状态码,具体参考对应的case
int BSP_Bt_Valve_Resp(uint8_t cmd, uint8_t id, uint8_t *mac_addr, uint8_t state)
{
uint8_t ret = 0;
- BtData_t *ptr = (BtData_t *)tmos_msg_allocate(sizeof(struct valve_data));
+ BtData_t *ptr = (BtData_t *)tmos_msg_allocate(sizeof(valve_data));
ptr->cmd = cmd;
switch (cmd)
{
@@ -319,16 +336,16 @@ int BSP_Bt_Valve_Resp(uint8_t cmd, uint8_t id, uint8_t *mac_addr, uint8_t state)
case kValveCmdRep:
ptr->buf[0] = id;
tmos_memcpy(&ptr->buf[1], mac_addr, 6);
- ptr->buf[7] = state;
- BT_GenerateRawFrame(&valve_frame_data, (uint8_t *)ptr, 9);
+ ptr->buf[26] = state;
+ BT_GenerateRawFrame(&valve_frame_data, (uint8_t *)ptr, 28);
break;
case kValveCmdRemAll:
ptr->buf[0] = state;
BT_GenerateRawFrame(&valve_frame_data, (uint8_t *)ptr, 2);
break;
case kValveEventStatus:
- tmos_memcpy(&ptr->buf[0], &valve_list.valve_data[id - 1], sizeof(struct valve_data));
- BT_GenerateRawFrame(&valve_frame_data, (uint8_t *)ptr, sizeof(struct valve_data));
+ tmos_memcpy(&ptr->buf[0], &valve_list.valve_data[id - 1], sizeof(valve_data));
+ BT_GenerateRawFrame(&valve_frame_data, (uint8_t *)ptr, sizeof(valve_data));
break;
case kValveConncetStatus:
ptr->buf[0] = id;
From 4742154d0e81b7fa7fa2ffc69ae0de5d7520717a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=B0=8F=E9=A9=AC=5F666?=
<13089258+pony-six-hundred-and-sixty-six@user.noreply.gitee.com>
Date: Fri, 23 May 2025 11:11:18 +0800
Subject: [PATCH 2/3] =?UTF-8?q?=E5=86=99=E4=BA=86=E8=87=AA=E9=97=AD?=
=?UTF-8?q?=E5=8F=91=E7=9A=84=E4=B8=80=E4=BA=9B=E4=BA=8B=E4=BB=B6=E4=B8=8A?=
=?UTF-8?q?=E6=8A=A5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
bsp/inc/bsp_valve.h | 30 ++++++++---------
bsp/src/bsp_uart.c | 82 +++++++++++++++++++++++++++++++++------------
bsp/src/bsp_valve.c | 64 +++++++++++++++++++----------------
3 files changed, 111 insertions(+), 65 deletions(-)
diff --git a/bsp/inc/bsp_valve.h b/bsp/inc/bsp_valve.h
index 7526f79..f66ceb5 100644
--- a/bsp/inc/bsp_valve.h
+++ b/bsp/inc/bsp_valve.h
@@ -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__
diff --git a/bsp/src/bsp_uart.c b/bsp/src/bsp_uart.c
index 5b1618f..b4115c0 100644
--- a/bsp/src/bsp_uart.c
+++ b/bsp/src/bsp_uart.c
@@ -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");
diff --git a/bsp/src/bsp_valve.c b/bsp/src/bsp_valve.c
index 08d74c1..44eae44 100644
--- a/bsp/src/bsp_valve.c
+++ b/bsp/src/bsp_valve.c
@@ -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");
From b359ca31ba23eac16a4689edfc57bbc833547ae2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=B0=8F=E9=A9=AC=5F666?=
<13089258+pony-six-hundred-and-sixty-six@user.noreply.gitee.com>
Date: Fri, 23 May 2025 11:11:21 +0800
Subject: [PATCH 3/3] =?UTF-8?q?=E6=9A=82=E5=AD=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
bsp/src/bsp_uart.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/bsp/src/bsp_uart.c b/bsp/src/bsp_uart.c
index b4115c0..eaa647d 100644
--- a/bsp/src/bsp_uart.c
+++ b/bsp/src/bsp_uart.c
@@ -2,7 +2,7 @@
* @Author: mbw
* @Date: 2024-12-06 16:52:30
* @LastEditors: mbw && 1600520629@qq.com
- * @LastEditTime: 2025-05-23 11:05:49
+ * @LastEditTime: 2025-05-23 11:11:18
* @FilePath: \zbf_master_ch584m\bsp\src\bsp_uart.c
* @Description:
*