From 44682405285c29f0850f088fa5bdb36433e1ccb8 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: Thu, 2 Jan 2025 15:12:34 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=A0=E4=BA=86=E6=9C=AC=E5=9C=B0=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E9=98=80=E9=97=A8=E6=95=B0=E6=8D=AE=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E7=9A=84=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- applications/main.c | 69 +++++++++++++++++++++------------------ bsp/inc/bsp_beep.h | 4 +-- bsp/inc/bsp_bt.h | 3 +- bsp/inc/bsp_led.h | 2 +- bsp/inc/bsp_ml307.h | 4 ++- bsp/src/at_device_ml307.c | 18 +++++++--- bsp/src/bsp_bt.c | 45 +++++++++++++++++++++---- bsp/src/bsp_button.c | 28 ++++++++++------ bsp/src/bsp_emv.c | 3 +- bsp/src/bsp_flash.c | 46 ++++++++++---------------- bsp/src/bsp_led.c | 58 +++++++++++++++++++++++++++++++- bsp/src/bsp_ml307.c | 15 ++++----- 12 files changed, 198 insertions(+), 97 deletions(-) diff --git a/applications/main.c b/applications/main.c index 409f75b..b97440d 100644 --- a/applications/main.c +++ b/applications/main.c @@ -2,7 +2,7 @@ * @Author: mbw * @Date: 2024-10-23 17:14:16 * @LastEditors: mbw && 1600520629@qq.com - * @LastEditTime: 2024-12-25 17:03:21 + * @LastEditTime: 2025-01-02 09:51:27 * @FilePath: \ble_bjq_ch303rct6_ml307\applications\main.c * @Descrt_thread_ * @@ -14,7 +14,7 @@ #include "drivers/pin.h" #include #include "drv_gpio.h" - +#include "bsp_emv.h" #include "bsp_beep.h" #include "bsp_led.h" #include "bsp_rtc.h" @@ -106,31 +106,20 @@ int _Self_Check_Mode(void) LED_STOP(r); LED_STOP(g); LED_STOP(y); - - LED_CTRL(g, "500,500", 1); + rt_thread_mdelay(500); + LED_CTRL(g, "500,2500", 1); LED_START(g); - rt_thread_mdelay(500); - - LED_CTRL(y, "500,500", 1); + rt_thread_mdelay(1000); + LED_CTRL(y, "500,2500", 1); LED_START(y); - rt_thread_mdelay(500); - - LED_CTRL(r, "500,500", 1); + rt_thread_mdelay(1000); + LED_CTRL(r, "500,2500", 1); LED_START(r); - rt_thread_mdelay(500); + rt_thread_mdelay(1000); + LED_STOP(r); + LED_STOP(g); + LED_STOP(y); BEEP_SELF_CHECK; - rt_thread_mdelay(2000); - // 第5s关闭电磁阀 - LOG_I("自检电磁阀动作"); - Bt_Valve_Handler(kValveCmdCtr, 0, RT_NULL); - if (rt_sem_take(&bt_ctr_sem, 10000) == RT_EOK) - { - LOG_D("电磁阀动作完成"); - } - else - { - LOG_E("电磁阀动作失败"); - } return RT_EOK; } @@ -291,21 +280,37 @@ int main(void) if (Sensor_device.detection_flag == kSensorAlarm) { + LED_G_NORMAL; + rt_thread_mdelay(500); Send_Laser_Alarm_Event(kAlarmEvent); } - else if (Sensor_device.detection_flag == kSensorFault) - { - Send_Laser_Alarm_Event(kFaultEvent); - } - else if (Sensor_device.detection_flag == kSensorEndOfLife) + if (Sensor_device.end_of_life == 1) { Send_Laser_Alarm_Event(kSensorFailureEvent); } - else + else if (Sensor_device.detection_flag == kSensorFault) { - LOG_D("正常检测模式"); LED_G_NORMAL; - LOG_D("LED_G_NORMAL"); + rt_thread_mdelay(500); + Send_Laser_Alarm_Event(kFaultEvent); + } + if (SysControl.last_status == kSelfCheckEvent) + { + rt_thread_mdelay(5000); + // 第5s关闭电磁阀 + LOG_I("自检机械手动作"); + EMV_FORWARD_ON(50); + rt_thread_mdelay(10); + EMV_BACKWARD_ON(50); + Bt_Valve_Handler(kValveCmdCtr, 0, RT_NULL); // 自检无线阀门 + if (rt_sem_take(&bt_ctr_sem, 10000) == RT_EOK) + { + LOG_D("电磁阀动作完成"); + } + else + { + LOG_E("电磁阀动作失败"); + } } } else if (received_event & Get_Sys_Event_Flag(kAlarmExceptionEvent)) // 浓度异常 @@ -434,10 +439,10 @@ int main(void) SysControl.status = kSelfCheckEvent; _Self_Check_Mode(); - Send_Laser_Alarm_Event(kNormalDetectionEvents); #if (IOT_MODULE_SWITCH == 1) Ml307_Send_Event(kMl307SelfCheckEvent); #endif + Send_Laser_Alarm_Event(kNormalDetectionEvents); } else if (received_event & Get_Sys_Event_Flag(kSensorFailureEvent)) // 失效 { diff --git a/bsp/inc/bsp_beep.h b/bsp/inc/bsp_beep.h index 06d402a..40e27ae 100644 --- a/bsp/inc/bsp_beep.h +++ b/bsp/inc/bsp_beep.h @@ -2,7 +2,7 @@ * @Author: mbw * @Date: 2024-11-30 15:46:21 * @LastEditors: mbw && 1600520629@qq.com - * @LastEditTime: 2024-12-03 17:41:41 + * @LastEditTime: 2025-01-02 10:11:17 * @FilePath: \ble_bjq_ch303rct6_ml307\bsp\inc\bsp_beep.h * @Description: * @ @@ -73,7 +73,7 @@ extern agile_led_t *beep; #define BEEP_SELF_CHECK \ do \ { \ - BEEP_CTRL("500,500", 3); \ + BEEP_CTRL("500,500", 1); \ BEEP_START; \ } while (0U) diff --git a/bsp/inc/bsp_bt.h b/bsp/inc/bsp_bt.h index adcc82b..ab85ba4 100644 --- a/bsp/inc/bsp_bt.h +++ b/bsp/inc/bsp_bt.h @@ -33,6 +33,7 @@ typedef enum kValveCmdReg, kValveCmdRem, kValveCmdRep, + kValveCmdRemAll, kValveCmdMax } ValveCmdType; @@ -48,9 +49,9 @@ typedef enum kValveEventReg, kValveEventRem, kValveEventRep, + kValveEventRemAll, kValveEventStatus, kValveEventMax - }ValveEventType; typedef struct __attribute__((packed)) diff --git a/bsp/inc/bsp_led.h b/bsp/inc/bsp_led.h index 2277ed6..7894140 100644 --- a/bsp/inc/bsp_led.h +++ b/bsp/inc/bsp_led.h @@ -74,7 +74,7 @@ extern agile_led_t *led_y; LED_STOP(r); \ LED_STOP(g); \ LED_STOP(y); \ - LED_CTRL(g, "200,200", 3);\ + LED_CTRL(g, "500,500", -1);\ LED_START(g);\ } while (0U) diff --git a/bsp/inc/bsp_ml307.h b/bsp/inc/bsp_ml307.h index eff171d..b132b7c 100644 --- a/bsp/inc/bsp_ml307.h +++ b/bsp/inc/bsp_ml307.h @@ -2,7 +2,7 @@ * @Author: mbw * @Date: 2024-11-30 15:46:21 * @LastEditors: mbw && 1600520629@qq.com - * @LastEditTime: 2024-12-05 09:08:12 + * @LastEditTime: 2025-01-02 10:08:44 * @FilePath: \ble_bjq_ch303rct6_ml307\bsp\inc\bsp_ml307.h * @Description: * @ @@ -231,5 +231,7 @@ struct Ml307_Ops extern struct Ml307_Ops ml307_ops; extern rt_sem_t ml307_recv_sem; extern rt_uint8_t ml307_conncet_tcp_flag; +extern rt_uint8_t power_on_send_flag; + extern rt_sem_t ml307_life_sem; void Ml307_Send_Event(Ml307Event event_type); diff --git a/bsp/src/at_device_ml307.c b/bsp/src/at_device_ml307.c index 209c73b..657e2df 100644 --- a/bsp/src/at_device_ml307.c +++ b/bsp/src/at_device_ml307.c @@ -2,7 +2,7 @@ * @Author : stark1898y 1658608470@qq.com * @Date : 2024-09-04 13:33:49 * @LastEditors: mbw && 1600520629@qq.com - * @LastEditTime: 2024-12-27 13:03:07 + * @LastEditTime: 2025-01-02 10:16:34 * @FilePath: \ble_bjq_ch303rct6_ml307\bsp\src\at_device_ml307.c * @Description : * @@ -150,8 +150,10 @@ static void urc_tcp_recv(struct at_client *client, const char *data, rt_size_t s { rt_memset(ml307_ops.recv, 0, sizeof(struct Ml307RecvData)); // 清空结构体 rt_memcpy(ml307_ops.recv, recv_byte_buf, sizeof(struct Ml307RecvData)); - - rt_sem_release(ml307_recv_sem); + if (ml307_ops.recv->recv_data.event_type != INSTRUCTION_HEART_BEAT)//加这个的原因就是如果有指令下发,会出现两个信号量,指令会执行两次,所以排除心跳包才释放信号量 + { + rt_sem_release(ml307_recv_sem); + } } else { @@ -176,7 +178,6 @@ static void urc_tcp_connect_state(struct at_client *client, const char *data, rt { if (id == socket_id) { - LOG_D("ml307 connect to tcp server success"); ml307_conncet_tcp_flag = 1; rt_sem_release(ml307_connect_sem); } @@ -302,6 +303,15 @@ static int at_device_ml307_connect_tcp(struct at_device *device) LOG_E("ml307 connect to tcp server failed"); } } + else if (at_resp_get_line_by_kw(resp, "+CME ERROR: 552") == RT_EOK)//已经连接了 + { + ret = RT_EOK; + break; + } + else if (at_resp_get_line_by_kw(resp, "+CME ERROR: 559") == RT_EOK)//SOCKET错误 + { + at_device_ml307_disconnect_tcp(device); + } } rt_thread_mdelay(3000); } diff --git a/bsp/src/bsp_bt.c b/bsp/src/bsp_bt.c index 348efab..824238d 100644 --- a/bsp/src/bsp_bt.c +++ b/bsp/src/bsp_bt.c @@ -2,7 +2,7 @@ * @Author: mbw * @Date: 2024-12-03 10:31:45 * @LastEditors: mbw && 1600520629@qq.com - * @LastEditTime: 2024-12-27 13:08:43 + * @LastEditTime: 2025-01-02 14:11:22 * @FilePath: \ble_bjq_ch303rct6_ml307\bsp\src\bsp_bt.c * @Description: * @@ -189,6 +189,26 @@ int BSP_Bt_Remove_Valve(rt_uint8_t id, rt_uint8_t *mac_addr) return RT_ERROR; } +/*移除所有阀门信息*/ +int BSP_Bt_Remove_All_Valve(void) +{ + rt_uint8_t ret = 0; + + BtData_t *ptr = (BtData_t *)rt_malloc(sizeof(BtData_t) + 7); + ptr->cmd = kValveCmdRemAll; + ptr->buf[0] = 0; + BT_GenerateRawFrame(&bt_frame, (rt_uint8_t *)ptr, 2); + rt_free(ptr); + + ret = BSP_Bt_Send_Data((rt_uint8_t *)&bt_frame.buf[0], bt_frame.len); + if (ret == bt_frame.len) + { + return RT_EOK; + } + + return RT_ERROR; +} + /*更换阀门信息*/ int BSP_Bt_Replace_Valve(rt_uint8_t id, rt_uint8_t *mac_addr, rt_uint8_t *new_mac_addr) { @@ -211,25 +231,26 @@ int BSP_Bt_Replace_Valve(rt_uint8_t id, rt_uint8_t *mac_addr, rt_uint8_t *new_ma return RT_ERROR; } -// 这个ID是真实id减一,例:第一个阀门,则为 1 - 1 = 0 -/*data 数据用作阀门更换时的新MAC参数6字节*/ int Bt_Valve_Handler(ValveCmdType type, rt_uint8_t id, rt_uint8_t *data) { int ret = RT_EOK; switch (type) { case kValveCmdCtr: // 阀门控制 - ret = BSP_Bt_Valve_Ctr(valve[id].valve_id, valve[id].valve_mac, WirelessValveClose); // 关阀门 + ret = BSP_Bt_Valve_Ctr(id, &data[0], WirelessValveClose); // 关阀门 break; case kValveCmdReg: // 阀门注册 - ret = BSP_Bt_Register_Valve(valve[id].valve_id, valve[id].valve_mac); + ret = BSP_Bt_Register_Valve(id, &data[0]); break; case kValveCmdRem: // 阀门移除 - ret = BSP_Bt_Remove_Valve(valve[id].valve_id, valve[id].valve_mac); + ret = BSP_Bt_Remove_Valve(id, &data[0]); break; case kValveCmdRep: // 阀门更换 - ret = BSP_Bt_Replace_Valve(valve[id].valve_id, valve[id].valve_mac, data); + ret = BSP_Bt_Replace_Valve(id, &data[0], &data[6]); break; + case kValveCmdRemAll: // 阀门更换 + ret = BSP_Bt_Remove_All_Valve(); + break; default: ret = -RT_ERROR; LOG_E("unknown valve command type"); @@ -337,6 +358,15 @@ int BSP_Bt_Process(uint8_t *data, uint16_t len) LOG_E("阀门更换失败"); } break; + case kValveEventRemAll: + LOG_I("接收到移除所有阀门信息回应"); + LOG_HEX("bt_rx_data:", 16, data_buf, fram_len); + if (data_buf[fram_len - 3] == RT_TRUE) // 移除成功 + { + LOG_D("移除阀门响应成功"); + rt_sem_release(&bt_rem_sem); + } + break; case kValveEventStatus: LOG_I("接收到阀门心跳数据:"); LOG_HEX("bt_rx_data:", 16, data_buf, fram_len); @@ -345,6 +375,7 @@ int BSP_Bt_Process(uint8_t *data, uint16_t len) LOG_HEX("valve_data:", 16, (rt_uint8_t *)&valve[data_buf[3] - 1], sizeof(struct valve_t)); break; + default: LOG_W("unknow cmd: %02X", data[index + 2]); break; diff --git a/bsp/src/bsp_button.c b/bsp/src/bsp_button.c index 1f34fe6..bcebde0 100644 --- a/bsp/src/bsp_button.c +++ b/bsp/src/bsp_button.c @@ -59,25 +59,33 @@ static void _CommonBtnEvtCb(void *arg) if ((flex_button_event_read(&user_button[USER_BUTTON_0]) == FLEX_BTN_PRESS_LONG_HOLD) || (flex_button_event_read(&user_button[USER_BUTTON_1]) == FLEX_BTN_PRESS_LONG_HOLD)) { LOG_I("本地清除阀门信息"); - LED_ON(r); rt_uint8_t mac_addr[6] = {0}; - Bt_Valve_Handler(kValveCmdRem, 0, RT_NULL); + if(Flash_Get_Valve_Num() == 0) + { + LOG_I("本地没有阀门信息"); + } + else + { + //清空本地阀门信息 + if (Flash_Set_Mac_Addr(mac_addr, 1) != RESET) + { + LOG_E("本地阀门信息清空完成"); + } + } + Bt_Valve_Handler(kValveCmdRemAll, RT_NULL, RT_NULL); if (rt_sem_take(&bt_rem_sem, 10000) == RT_EOK) // 如果没刷掉数据,则黄灯会亮一秒,如果刷成功了,则红灯闪一下黄灯不会亮 { - if (Flash_Set_Mac_Addr(mac_addr, 0) != -RT_ERROR) // 将flash数据清掉 - { - rt_thread_mdelay(100); - LED_OFF(r); - LOG_I("本地清除阀门信息成功"); - } + LED_ON(r); + rt_thread_mdelay(100); + LED_OFF(r); + LOG_I("本地清除阀门信息成功"); } else { LOG_E("本地清除阀门信息错误"); - LED_OFF(r); LED_OFF(g); LED_ON(y); - rt_thread_mdelay(1000); + rt_thread_mdelay(100); LED_OFF(y); } } diff --git a/bsp/src/bsp_emv.c b/bsp/src/bsp_emv.c index 4b51978..b663849 100644 --- a/bsp/src/bsp_emv.c +++ b/bsp/src/bsp_emv.c @@ -2,7 +2,7 @@ * @Author: mbw * @Date: 2024-10-09 08:42:14 * @LastEditors: mbw && 1600520629@qq.com - * @LastEditTime: 2024-12-05 15:44:33 + * @LastEditTime: 2025-01-02 09:45:39 * @FilePath: \ble_bjq_ch303rct6_ml307\bsp\src\bsp_emv.c * @Description: * @@ -164,7 +164,6 @@ static void TEST_Jxs(int argc, char **argv) { EMV_BACKWARD_ON(time); } - } } MSH_CMD_EXPORT(TEST_Jxs,"TEST_Jxs 方向 时间ms"); diff --git a/bsp/src/bsp_flash.c b/bsp/src/bsp_flash.c index bb19003..6d7b26d 100644 --- a/bsp/src/bsp_flash.c +++ b/bsp/src/bsp_flash.c @@ -21,6 +21,17 @@ struct flash_sever_info sever_info = // .server_url = "8.135.10.183", }; +/*默认的系统配置*/ +rt_uint8_t sys_hw_ver = 0x10; +rt_uint8_t sys_sw_ver = 0x11; +rt_uint8_t sys_nb_retry = 0x03; // 重试次数3次 +rt_uint16_t sys_nb_upload_cycle = 0x000A; // 120分钟一次 +rt_uint16_t sys_alarm_h_value = 0x0032; // 50 +rt_uint16_t sys_alarm_l_value = 0x09C4; // 2500 +rt_uint8_t sys_temp_alarm_threshold = 0x32; +rt_uint8_t sys_emagnetic_switch = 0x04; // 具备阀门功能 +rt_uint8_t sys_relay_switch = 0x04; // 具备继电器功能 + extern int Convert_To_Hex(const struct flash_sever_info *sever_info, uint8_t *hex_array); #define GETATTR(info, id) ((id) == kHwVerId ? (&(info)->hw_ver) \ : (id) == kSwVerId ? (&(info)->sw_ver) \ @@ -87,16 +98,6 @@ const rt_uint32_t hr_sys_cfg_info_len[kCnt] = { static rt_base_t interrupt_value; -/*默认的系统配置*/ -rt_uint8_t sys_hw_ver = 0x10; -rt_uint8_t sys_sw_ver = 0x11; -rt_uint8_t sys_nb_retry = 0x03; // 重试次数3次 -rt_uint16_t sys_nb_upload_cycle = 0x000A; // 120分钟一次 -rt_uint16_t sys_alarm_h_value = 0x0032; // 50 -rt_uint16_t sys_alarm_l_value = 0x09C4; // 2500 -rt_uint8_t sys_temp_alarm_threshold = 0x32; -rt_uint8_t sys_emagnetic_switch = 0x04; // 具备阀门功能 -rt_uint8_t sys_relay_switch = 0x04; // 具备继电器功能 static void BSP_Flash_UnLock(void) { @@ -361,27 +362,16 @@ int Flash_Set_Mac_Addr(rt_uint8_t *mac_addr, rt_uint8_t number) /*读取MAC地址 number :1-8*/ int Flash_Get_Mac_Addr(rt_uint8_t *mac_addr, rt_uint8_t number) { - rt_uint8_t data[FLASH_VALVE_MAC_ADDR_LEN]; - char mac[16] = {20}; - rt_memcpy(data, (rt_uint8_t *)(FLASH_VALVE_1_MAC_ADDR_ADDR + (number - 1) * FLASH_VALVE_MAC_ADDR_LEN), FLASH_VALVE_MAC_ADDR_LEN); - if (data == RT_NULL) + if (*(rt_uint16_t *)(FLASH_VALVE_1_MAC_ADDR_ADDR + (number - 1) * FLASH_VALVE_MAC_ADDR_LEN) == 0xe339) { - LOG_E("Flash_Get_Mac_Addr failed"); - return -RT_ERROR; - } - // 判断读出来的数是否是flash的默认值 如果默认值是0xe3e9的话 - if ((data[0] == 0xe3 || data[0] == 0xe9) && - (data[1] == 0xe3 || data[1] == 0xe9) && - (data[2] == 0xe3 || data[2] == 0xe9) && - (data[3] == 0xe3 || data[3] == 0xe9) && - (data[4] == 0xe3 || data[4] == 0xe9) && - (data[5] == 0xe3 || data[5] == 0xe9)) - { - rt_memset(data, 0, 6); - rt_memcpy(mac_addr, data, FLASH_VALVE_MAC_ADDR_LEN); - return RT_EOK; + LOG_D("无阀门数据"); + return -1; } + rt_uint8_t data[FLASH_VALVE_MAC_ADDR_LEN]; + char mac[16] = {20}; + + rt_memcpy(data, (rt_uint8_t *)(FLASH_VALVE_1_MAC_ADDR_ADDR + (number - 1) * FLASH_VALVE_MAC_ADDR_LEN), FLASH_VALVE_MAC_ADDR_LEN); rt_snprintf(mac, 20, "%02x:%02x:%02x:%02x:%02x:%02x", data[5], data[4], data[3], data[2], data[1], data[0]); LOG_I("mac_addr:%s", mac); diff --git a/bsp/src/bsp_led.c b/bsp/src/bsp_led.c index f6da075..2d10f15 100644 --- a/bsp/src/bsp_led.c +++ b/bsp/src/bsp_led.c @@ -11,11 +11,17 @@ #include "bsp_led.h" #include "rtthread.h" #include "pin.h" +#include "user_sys.h" +#include "bsp_ml307.h" #define LOG_TAG "bsp.led" #define LOG_LVL LOG_LVL_DBG #include +ALIGN(4) +static char user_led_thread_stack[512]; +static struct rt_thread user_led_thread; + //用到了atoi #include @@ -23,6 +29,44 @@ agile_led_t *led_r = RT_NULL; agile_led_t *led_g = RT_NULL; agile_led_t *led_y = RT_NULL; +static void BSP_Led_thread_entry(void *param) +{ + // static rt_bool_t led_state_flag = RT_FALSE; + while (1) + { +#if 0 + if (mb26_conncet_tcp_flag) + { + if ((SysControl.status == kNormalDetectionEvents) && (led_state_flag != RT_TRUE)) + { + LED_G_INTERNET; + led_state_flag = RT_TRUE; + } + } + else + { + if ((SysControl.status == kNormalDetectionEvents) && (led_state_flag != RT_FALSE)) + { + LED_G_NORMAL; + led_state_flag = RT_FALSE; + } + } +#endif + if (SysControl.status == kNormalDetectionEvents) + { + if ((power_on_send_flag)) + { + LED_G_INTERNET; + } + else if ((!power_on_send_flag)) + { + LED_G_NORMAL; + } + } + rt_thread_mdelay(1000); + } +} + int BSP_LED_Init(void) { @@ -30,8 +74,20 @@ int BSP_LED_Init(void) led_g = agile_led_create(LED_G_PIN, PIN_LOW, "100,100", 0); led_y = agile_led_create(LED_Y_PIN, PIN_LOW, "100,100", 0); - LOG_D("BSP_LED_Init"); + rt_err_t ret = rt_thread_init(&user_led_thread, + "user_led_thread", + BSP_Led_thread_entry, + RT_NULL, + &user_led_thread_stack[0], + sizeof(user_led_thread_stack), + 5, 5); + if (ret == RT_EOK) + { + rt_thread_startup(&user_led_thread); + } + + LOG_D("BSP_LED_Init"); return RT_EOK; } INIT_DEVICE_EXPORT(BSP_LED_Init); diff --git a/bsp/src/bsp_ml307.c b/bsp/src/bsp_ml307.c index 0a35911..b6e4611 100644 --- a/bsp/src/bsp_ml307.c +++ b/bsp/src/bsp_ml307.c @@ -2,7 +2,7 @@ * @Author: mbw * @Date: 2024-11-30 15:46:21 * @LastEditors: mbw && 1600520629@qq.com - * @LastEditTime: 2024-12-27 17:49:25 + * @LastEditTime: 2025-01-02 10:41:22 * @FilePath: \ble_bjq_ch303rct6_ml307\bsp\src\bsp_ml307.c * @Description: * @@ -885,10 +885,10 @@ void Handle_Self_Check(struct Ml307_Ops *ops) char temp[32] = "0"; String2Hex(temp, imei); // 将字符串转为十六进制字符串 LOG_D("temp: %s", temp); - + Send_Laser_Alarm_Event(kSelfCheckEvent); ops->Resp(ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_ML307, INSTRUCTION_DOWN_SELF_CHECK, temp, RESPONSE_CODE_SUCCESS); - Send_Laser_Alarm_Event(SysControl.status); // 自检完要恢复当前系统状态,恢复现场 + Send_Laser_Alarm_Event(kNormalDetectionEvents);//先返回正常状态,然后跳转到所处的状态 } void Handle_Mute(struct Ml307_Ops *ops) @@ -952,7 +952,7 @@ rt_err_t Handle_Close_Valve(struct Ml307_Ops *ops) if (i == FLASH_VALVE_MAC_ADDR_LEN) { LOG_D("mac地址匹配成功,执行关阀动作\n"); - if (Bt_Valve_Handler(kValveCmdCtr, 0, RT_NULL) != RT_EOK) + if (Bt_Valve_Handler(kValveCmdCtr, data[0], &data[1]) != 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); @@ -1195,7 +1195,7 @@ rt_err_t Handle_Valve_Add(struct Ml307_Ops *ops) valve[data[0] - 1].valve_id = data[0];//更新阀门ID rt_memcpy(valve[data[0] - 1].valve_mac, &data[1], FLASH_VALVE_MAC_ADDR_LEN); // 更新MAC地址 - if (Bt_Valve_Handler(kValveCmdReg, data[0] - 1, RT_NULL) != RT_EOK)//更新蓝牙端mac地址 + if (Bt_Valve_Handler(kValveCmdReg, data[0], &data[1]) != RT_EOK)//更新蓝牙端mac地址 { 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); @@ -1253,7 +1253,7 @@ rt_err_t Handle_Valve_Replace(struct Ml307_Ops *ops) data[0], data[1], data[2], data[3], data[4], data[5], data[6], data[7], data[8], data[9], data[10], data[11], data[12]); if (i == FLASH_VALVE_MAC_ADDR_LEN) { - if (Bt_Valve_Handler(kValveCmdRep, data[0] - 1, &data[1]) != RT_EOK) + if (Bt_Valve_Handler(kValveCmdRep, data[0], &data[1]) != RT_EOK) { 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); @@ -1314,7 +1314,7 @@ rt_err_t Handle_Remove_Valve(struct Ml307_Ops *ops) } 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]); - if (Bt_Valve_Handler(kValveCmdRem, 0, RT_NULL) != RT_EOK) + if (Bt_Valve_Handler(kValveCmdRem, data[0], &data[1]) != RT_EOK) { 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); @@ -1706,7 +1706,6 @@ static void Ml307_Life_Thread_Entry(void *parameter) } } -// 定时器回调函数,当1分钟内没有数据交互时,关闭tcp连接 static void Ml307_Upload_Timer_Cb(void *parameter) { Ml307_Send_Event(kMl307TimeCalibrationEvent); // 更新下时间