加了本地删除阀门数据信息的功能

This commit is contained in:
小马_666 2025-01-02 15:12:34 +08:00
parent dac836d401
commit 4468240528
12 changed files with 198 additions and 97 deletions

View File

@ -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 <board.h>
#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 if (Sensor_device.detection_flag == kSensorFault)
{
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_D("正常检测模式");
LED_G_NORMAL;
LOG_D("LED_G_NORMAL");
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)) // 失效
{

View File

@ -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)

View File

@ -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))

View File

@ -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)

View File

@ -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);

View File

@ -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,9 +150,11 @@ 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));
if (ml307_ops.recv->recv_data.event_type != INSTRUCTION_HEART_BEAT)//加这个的原因就是如果有指令下发,会出现两个信号量,指令会执行两次,所以排除心跳包才释放信号量
{
rt_sem_release(ml307_recv_sem);
}
}
else
{
LOG_E("ml307 recv data error {len [%d]!= sizeof(struct Ml307RecvData)[%d]}", len, sizeof(struct Ml307RecvData));
@ -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);
}

View File

@ -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,24 +231,25 @@ 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;
@ -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;

View File

@ -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数据清掉
{
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);
}
}

View File

@ -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");

View File

@ -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);

View File

@ -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 <ulog.h>
ALIGN(4)
static char user_led_thread_stack[512];
static struct rt_thread user_led_thread;
//用到了atoi
#include <stdlib.h>
@ -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);

View File

@ -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); // 更新下时间