测试了远端关阀和移除阀门的操作,正常

This commit is contained in:
小马_666 2024-12-16 20:46:38 +08:00
parent 81964ccc97
commit 0a494a737a
4 changed files with 79 additions and 47 deletions

View File

@ -18,7 +18,7 @@
#ifdef BUTTON_USE_THREAD #ifdef BUTTON_USE_THREAD
#define BUTTON_THREAD_PRIORITY 5 // 优先级拉高,这时按键响应快点 #define BUTTON_THREAD_PRIORITY 5 // 优先级拉高,这时按键响应快点
#define BUTTON_THREAD_TICKS 10 #define BUTTON_THREAD_TICKS 10
#define BUTTON_THREAD_STACK_SIZE 768 /**< button_thread 线程堆栈大小 */ #define BUTTON_THREAD_STACK_SIZE 1024 /**< button_thread 线程堆栈大小 */
#endif // !BUTTON_USE_THREAD #endif // !BUTTON_USE_THREAD

View File

@ -2,7 +2,7 @@
* @Author: mbw * @Author: mbw
* @Date: 2024-12-03 10:31:45 * @Date: 2024-12-03 10:31:45
* @LastEditors: mbw && 1600520629@qq.com * @LastEditors: mbw && 1600520629@qq.com
* @LastEditTime: 2024-12-16 11:09:26 * @LastEditTime: 2024-12-16 19:00:53
* @FilePath: \ble_bjq_ch303rct6_ml307\bsp\src\bsp_bt.c * @FilePath: \ble_bjq_ch303rct6_ml307\bsp\src\bsp_bt.c
* @Description: * @Description:
* *
@ -382,7 +382,8 @@ static void Bt_Thread_Entry(void *parameter)
valve[0].valve_mac[3] = 0x10; valve[0].valve_mac[3] = 0x10;
valve[0].valve_mac[4] = 0x53; valve[0].valve_mac[4] = 0x53;
valve[0].valve_mac[5] = 0x5C; valve[0].valve_mac[5] = 0x5C;
Flash_Set_Mac_Addr(valve[0].valve_mac, 0);
Flash_Set_Valve_Num(1);
LOG_D("Bt_Thread_Entry"); LOG_D("Bt_Thread_Entry");
while (1) while (1)
{ {
@ -462,10 +463,14 @@ static void TEST_BT_Send_Data(int argc, char **argv)
Bt_Valve_Handler(kValveCmdCtr, id, RT_NULL); Bt_Valve_Handler(kValveCmdCtr, id, RT_NULL);
break; break;
case 2: case 2:
Flash_Set_Valve_Num(1);
Bt_Valve_Handler(kValveCmdReg, id, RT_NULL); Bt_Valve_Handler(kValveCmdReg, id, RT_NULL);
break; break;
case 3: case 3:
Bt_Valve_Handler(kValveCmdRem, id, RT_NULL); Bt_Valve_Handler(kValveCmdRem, id, RT_NULL);
rt_memset(valve[0].valve_mac, 0, sizeof(struct valve_t));
Flash_Set_Mac_Addr(valve[0].valve_mac, 0);
Flash_Set_Valve_Num(0);
break; break;
case 4: case 4:
Bt_Valve_Handler(kValveCmdRep, id, RT_NULL); Bt_Valve_Handler(kValveCmdRep, id, RT_NULL);

View File

@ -2,7 +2,7 @@
* @Author: mbw * @Author: mbw
* @Date: 2024-11-30 15:46:21 * @Date: 2024-11-30 15:46:21
* @LastEditors: mbw && 1600520629@qq.com * @LastEditors: mbw && 1600520629@qq.com
* @LastEditTime: 2024-12-15 17:09:30 * @LastEditTime: 2024-12-16 19:40:43
* @FilePath: \ble_bjq_ch303rct6_ml307\bsp\src\bsp_ml307.c * @FilePath: \ble_bjq_ch303rct6_ml307\bsp\src\bsp_ml307.c
* @Description: * @Description:
* *
@ -956,7 +956,7 @@ rt_err_t Handle_Close_Valve(struct Ml307_Ops *ops)
if ((data[0] > 0) && (data[0] < MAX_VALVE_NUM)) // 不为零则说明关闭无线阀门 if ((data[0] > 0) && (data[0] < MAX_VALVE_NUM)) // 不为零则说明关闭无线阀门
{ {
LOG_D("无线阀门编号:%d\n", data[0]); LOG_D("无线阀门编号:%d\n", data[0]);
Flash_Get_Mac_Addr(mac_addr, data[0] - 1); Flash_Get_Mac_Addr(mac_addr, 0);
LOG_D("mac_addr[0] = %x mac_addr[1] = %x mac_addr[2] = %x mac_addr[3] = %x mac_addr[4] = %x, mac_addr[5] = %x", mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5]); LOG_D("mac_addr[0] = %x mac_addr[1] = %x mac_addr[2] = %x mac_addr[3] = %x mac_addr[4] = %x, mac_addr[5] = %x", mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5]);
/*对两个数组进行比较,如果值不同则退出*/ /*对两个数组进行比较,如果值不同则退出*/
for (; i < FLASH_VALVE_MAC_ADDR_LEN; i++) for (; i < FLASH_VALVE_MAC_ADDR_LEN; i++)
@ -973,10 +973,26 @@ rt_err_t Handle_Close_Valve(struct Ml307_Ops *ops)
if (i == FLASH_VALVE_MAC_ADDR_LEN) if (i == FLASH_VALVE_MAC_ADDR_LEN)
{ {
LOG_D("mac地址匹配成功,执行关阀动作\n"); LOG_D("mac地址匹配成功,执行关阀动作\n");
// TODO:此处需要增加关阀无线阀门的逻辑 // if (Bt_Valve_Handler(kValveCmdCtr, data[0] - 1, RT_NULL) != RT_EOK)
if (Bt_Valve_Handler(kValveCmdCtr, 0, RT_NULL) != RT_EOK)
{
LOG_E("关阀失败\n");
ops->Resp(ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_ML307, INSTRUCTION_DOWN_CLOSE_VALVE, temp, RESPONSE_CODE_ACTION_FAILURE);
return RT_ERROR;
}
if (rt_sem_take(&bt_ctr_sem, 15000) != RT_EOK) // 等待十秒获取信号量
{
LOG_E("获取信号量失败\n");
ops->Resp(ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_ML307, INSTRUCTION_DOWN_CLOSE_VALVE, temp, RESPONSE_CODE_ACTION_FAILURE);
return RT_ERROR;
}
else
{
LOG_D("关阀成功\n");
ops->Resp(ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_ML307, INSTRUCTION_DOWN_CLOSE_VALVE, temp, RESPONSE_CODE_SUCCESS); ops->Resp(ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_ML307, INSTRUCTION_DOWN_CLOSE_VALVE, temp, RESPONSE_CODE_SUCCESS);
return RT_EOK; return RT_EOK;
} }
}
else else
{ {
LOG_E("mac地址匹配失败\n"); LOG_E("mac地址匹配失败\n");
@ -1256,7 +1272,7 @@ rt_err_t Handle_Valve_Replace(struct Ml307_Ops *ops)
String2Hex(temp, imei); // 将字符串转为十六进制字符串 String2Hex(temp, imei); // 将字符串转为十六进制字符串
rt_memcpy(data, (ops->recv->recv_data.res_data + 3), (2 * FLASH_VALVE_MAC_ADDR_LEN + 1)); rt_memcpy(data, (ops->recv->recv_data.res_data + 3), (2 * FLASH_VALVE_MAC_ADDR_LEN + 1));
/*设备编号1byte+ 新MAC地址6+ 旧阀门MAC地址6 + 补零字节= 15byte*/ /*设备编号1byte+ 新MAC地址6+ 旧阀门MAC地址6 + 补零字节= 15byte*/
if (Flash_Get_Mac_Addr(mac_addr, data[0]) == RT_EOK) if (Flash_Get_Mac_Addr(mac_addr, data[0] - 1) == RT_EOK)
{ {
for (; i < FLASH_VALVE_MAC_ADDR_LEN; i++) for (; i < FLASH_VALVE_MAC_ADDR_LEN; i++)
{ {
@ -1278,6 +1294,14 @@ rt_err_t Handle_Valve_Replace(struct Ml307_Ops *ops)
ops->Resp(ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_ML307, INSTRUCTION_DOWN_VALVE_REPLACE, temp, RESPONSE_CODE_ACTION_FAILURE); ops->Resp(ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_ML307, INSTRUCTION_DOWN_VALVE_REPLACE, temp, RESPONSE_CODE_ACTION_FAILURE);
return RT_ERROR; return RT_ERROR;
} }
if (rt_sem_take(&bt_rep_sem, 10000) != RT_EOK) // 等待十秒获取信号量
{
LOG_E("获取更换阀门信号量失败\n");
ops->Resp(ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_ML307, INSTRUCTION_DOWN_VALVE_ADD, temp, RESPONSE_CODE_ACTION_FAILURE);
return RT_ERROR;
}
else
{
if (Flash_Set_Mac_Addr(&data[2], data[0]) == RESET) if (Flash_Set_Mac_Addr(&data[2], data[0]) == RESET)
{ {
LOG_E("更换阀门设备失败\n"); LOG_E("更换阀门设备失败\n");
@ -1289,17 +1313,6 @@ rt_err_t Handle_Valve_Replace(struct Ml307_Ops *ops)
return RT_EOK; return RT_EOK;
} }
} }
if (Flash_Set_Mac_Addr(&data[1], data[0]) == RESET)
{
LOG_E("更换阀门设备失败\n");
ops->Resp(ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_ML307, INSTRUCTION_DOWN_VALVE_REPLACE, temp, RESPONSE_CODE_ACTION_FAILURE);
return RT_ERROR;
}
else
{
LOG_D("更换阀门设备成功\n");
ops->Resp(ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_ML307, INSTRUCTION_DOWN_VALVE_REPLACE, temp, RESPONSE_CODE_SUCCESS);
return RT_EOK;
} }
} }
@ -1312,6 +1325,7 @@ rt_err_t Handle_Remove_Valve(struct Ml307_Ops *ops)
rt_uint8_t cnt = Flash_Get_Valve_Num(); rt_uint8_t cnt = Flash_Get_Valve_Num();
Get_Iot_Imei(imei, FLASH_NB_IMEI_LEN); Get_Iot_Imei(imei, FLASH_NB_IMEI_LEN);
String2Hex(temp, imei); // 将字符串转为十六进制字符串 String2Hex(temp, imei); // 将字符串转为十六进制字符串
LOG_I("接收到服务器下发移除阀门指令");
if (cnt == 0) if (cnt == 0)
{ {
LOG_E("阀门设备数量为0, 无法移除\n"); LOG_E("阀门设备数量为0, 无法移除\n");
@ -1319,16 +1333,27 @@ rt_err_t Handle_Remove_Valve(struct Ml307_Ops *ops)
return RT_ERROR; return RT_ERROR;
} }
rt_memcpy(data, (ops->recv->recv_data.res_data + 8), FLASH_VALVE_MAC_ADDR_LEN + 1); rt_memcpy(data, (ops->recv->recv_data.res_data + 8), FLASH_VALVE_MAC_ADDR_LEN + 1);
LOG_D("data[0] = %x data[1] = %x data[2] = %x data[3] = %x data[4] = %x, data[5] = %x", data[0], data[1], data[2], data[3], data[4], data[5], data[6]); LOG_D("data[0] = %x data[1] = %x data[2] = %x data[3] = %x data[4] = %x, data[5] = %x", data[0], data[1], data[2], data[3], data[4], data[5], data[6]);
rt_memset(&data[1], 0, sizeof(data) - 1);
if (Bt_Valve_Handler(kValveCmdRem, data[0] - 1, RT_NULL) != RT_EOK) // if (Bt_Valve_Handler(kValveCmdRem, data[0] - 1, RT_NULL) != RT_EOK)
if (Bt_Valve_Handler(kValveCmdRem, 0, RT_NULL) != RT_EOK)
{ {
LOG_E("移除阀门设备失败\n"); LOG_E("移除阀门设备失败\n");
ops->Resp(ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_ML307, INSTRUCTION_DOWN_VALVE_REMOVE, temp, RESPONSE_CODE_ACTION_FAILURE); ops->Resp(ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_ML307, INSTRUCTION_DOWN_VALVE_REMOVE, temp, RESPONSE_CODE_ACTION_FAILURE);
return RT_ERROR; return RT_ERROR;
} }
if (rt_sem_take(&bt_rem_sem, 10000) != RT_EOK) // 等待十秒获取信号量
{
LOG_E("获取更换阀门信号量失败\n");
ops->Resp(ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_ML307, INSTRUCTION_DOWN_VALVE_ADD, temp, RESPONSE_CODE_ACTION_FAILURE);
return RT_ERROR;
}
else
{
rt_memset(&data[1], 0, sizeof(data) - 1);
if (Flash_Set_Mac_Addr(&data[1], data[0] - 1) == RESET) if (Flash_Set_Mac_Addr(&data[1], data[0] - 1) == RESET)
{ {
LOG_E("移除阀门设备失败\n"); LOG_E("移除阀门设备失败\n");
@ -1346,6 +1371,8 @@ rt_err_t Handle_Remove_Valve(struct Ml307_Ops *ops)
} }
} }
}
void Handle_Error(struct Ml307_Ops *ops, rt_err_t ret) void Handle_Error(struct Ml307_Ops *ops, rt_err_t ret)
{ {
LOG_E("数据帧解析失败,错误码: %d", ret); LOG_E("数据帧解析失败,错误码: %d", ret);

View File

@ -165,7 +165,7 @@ int BSP_WDG_Init(void)
return 0; return 0;
} }
#ifdef RT_USING_COMPONENTS_INIT #ifdef RT_USING_COMPONENTS_INIT
INIT_DEVICE_EXPORT(BSP_WDG_Init); INIT_APP_EXPORT(BSP_WDG_Init);
#endif #endif
#if USED_WWDG #if USED_WWDG