加了本地删除阀门数据信息的功能
This commit is contained in:
parent
dac836d401
commit
4468240528
|
@ -2,7 +2,7 @@
|
||||||
* @Author: mbw
|
* @Author: mbw
|
||||||
* @Date: 2024-10-23 17:14:16
|
* @Date: 2024-10-23 17:14:16
|
||||||
* @LastEditors: mbw && 1600520629@qq.com
|
* @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
|
* @FilePath: \ble_bjq_ch303rct6_ml307\applications\main.c
|
||||||
* @Descrt_thread_
|
* @Descrt_thread_
|
||||||
*
|
*
|
||||||
|
@ -14,7 +14,7 @@
|
||||||
#include "drivers/pin.h"
|
#include "drivers/pin.h"
|
||||||
#include <board.h>
|
#include <board.h>
|
||||||
#include "drv_gpio.h"
|
#include "drv_gpio.h"
|
||||||
|
#include "bsp_emv.h"
|
||||||
#include "bsp_beep.h"
|
#include "bsp_beep.h"
|
||||||
#include "bsp_led.h"
|
#include "bsp_led.h"
|
||||||
#include "bsp_rtc.h"
|
#include "bsp_rtc.h"
|
||||||
|
@ -106,31 +106,20 @@ int _Self_Check_Mode(void)
|
||||||
LED_STOP(r);
|
LED_STOP(r);
|
||||||
LED_STOP(g);
|
LED_STOP(g);
|
||||||
LED_STOP(y);
|
LED_STOP(y);
|
||||||
|
rt_thread_mdelay(500);
|
||||||
LED_CTRL(g, "500,500", 1);
|
LED_CTRL(g, "500,2500", 1);
|
||||||
LED_START(g);
|
LED_START(g);
|
||||||
rt_thread_mdelay(500);
|
rt_thread_mdelay(1000);
|
||||||
|
LED_CTRL(y, "500,2500", 1);
|
||||||
LED_CTRL(y, "500,500", 1);
|
|
||||||
LED_START(y);
|
LED_START(y);
|
||||||
rt_thread_mdelay(500);
|
rt_thread_mdelay(1000);
|
||||||
|
LED_CTRL(r, "500,2500", 1);
|
||||||
LED_CTRL(r, "500,500", 1);
|
|
||||||
LED_START(r);
|
LED_START(r);
|
||||||
rt_thread_mdelay(500);
|
rt_thread_mdelay(1000);
|
||||||
|
LED_STOP(r);
|
||||||
|
LED_STOP(g);
|
||||||
|
LED_STOP(y);
|
||||||
BEEP_SELF_CHECK;
|
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;
|
return RT_EOK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -291,21 +280,37 @@ int main(void)
|
||||||
|
|
||||||
if (Sensor_device.detection_flag == kSensorAlarm)
|
if (Sensor_device.detection_flag == kSensorAlarm)
|
||||||
{
|
{
|
||||||
|
LED_G_NORMAL;
|
||||||
|
rt_thread_mdelay(500);
|
||||||
Send_Laser_Alarm_Event(kAlarmEvent);
|
Send_Laser_Alarm_Event(kAlarmEvent);
|
||||||
}
|
}
|
||||||
else if (Sensor_device.detection_flag == kSensorFault)
|
if (Sensor_device.end_of_life == 1)
|
||||||
{
|
|
||||||
Send_Laser_Alarm_Event(kFaultEvent);
|
|
||||||
}
|
|
||||||
else if (Sensor_device.detection_flag == kSensorEndOfLife)
|
|
||||||
{
|
{
|
||||||
Send_Laser_Alarm_Event(kSensorFailureEvent);
|
Send_Laser_Alarm_Event(kSensorFailureEvent);
|
||||||
}
|
}
|
||||||
else
|
else if (Sensor_device.detection_flag == kSensorFault)
|
||||||
{
|
{
|
||||||
LOG_D("正常检测模式");
|
|
||||||
LED_G_NORMAL;
|
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)) // 浓度异常
|
else if (received_event & Get_Sys_Event_Flag(kAlarmExceptionEvent)) // 浓度异常
|
||||||
|
@ -434,10 +439,10 @@ int main(void)
|
||||||
SysControl.status = kSelfCheckEvent;
|
SysControl.status = kSelfCheckEvent;
|
||||||
|
|
||||||
_Self_Check_Mode();
|
_Self_Check_Mode();
|
||||||
Send_Laser_Alarm_Event(kNormalDetectionEvents);
|
|
||||||
#if (IOT_MODULE_SWITCH == 1)
|
#if (IOT_MODULE_SWITCH == 1)
|
||||||
Ml307_Send_Event(kMl307SelfCheckEvent);
|
Ml307_Send_Event(kMl307SelfCheckEvent);
|
||||||
#endif
|
#endif
|
||||||
|
Send_Laser_Alarm_Event(kNormalDetectionEvents);
|
||||||
}
|
}
|
||||||
else if (received_event & Get_Sys_Event_Flag(kSensorFailureEvent)) // 失效
|
else if (received_event & Get_Sys_Event_Flag(kSensorFailureEvent)) // 失效
|
||||||
{
|
{
|
||||||
|
|
|
@ -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-03 17:41:41
|
* @LastEditTime: 2025-01-02 10:11:17
|
||||||
* @FilePath: \ble_bjq_ch303rct6_ml307\bsp\inc\bsp_beep.h
|
* @FilePath: \ble_bjq_ch303rct6_ml307\bsp\inc\bsp_beep.h
|
||||||
* @Description:
|
* @Description:
|
||||||
* @
|
* @
|
||||||
|
@ -73,7 +73,7 @@ extern agile_led_t *beep;
|
||||||
#define BEEP_SELF_CHECK \
|
#define BEEP_SELF_CHECK \
|
||||||
do \
|
do \
|
||||||
{ \
|
{ \
|
||||||
BEEP_CTRL("500,500", 3); \
|
BEEP_CTRL("500,500", 1); \
|
||||||
BEEP_START; \
|
BEEP_START; \
|
||||||
} while (0U)
|
} while (0U)
|
||||||
|
|
||||||
|
|
|
@ -33,6 +33,7 @@ typedef enum
|
||||||
kValveCmdReg,
|
kValveCmdReg,
|
||||||
kValveCmdRem,
|
kValveCmdRem,
|
||||||
kValveCmdRep,
|
kValveCmdRep,
|
||||||
|
kValveCmdRemAll,
|
||||||
kValveCmdMax
|
kValveCmdMax
|
||||||
} ValveCmdType;
|
} ValveCmdType;
|
||||||
|
|
||||||
|
@ -48,9 +49,9 @@ typedef enum
|
||||||
kValveEventReg,
|
kValveEventReg,
|
||||||
kValveEventRem,
|
kValveEventRem,
|
||||||
kValveEventRep,
|
kValveEventRep,
|
||||||
|
kValveEventRemAll,
|
||||||
kValveEventStatus,
|
kValveEventStatus,
|
||||||
kValveEventMax
|
kValveEventMax
|
||||||
|
|
||||||
}ValveEventType;
|
}ValveEventType;
|
||||||
|
|
||||||
typedef struct __attribute__((packed))
|
typedef struct __attribute__((packed))
|
||||||
|
|
|
@ -74,7 +74,7 @@ extern agile_led_t *led_y;
|
||||||
LED_STOP(r); \
|
LED_STOP(r); \
|
||||||
LED_STOP(g); \
|
LED_STOP(g); \
|
||||||
LED_STOP(y); \
|
LED_STOP(y); \
|
||||||
LED_CTRL(g, "200,200", 3);\
|
LED_CTRL(g, "500,500", -1);\
|
||||||
LED_START(g);\
|
LED_START(g);\
|
||||||
} while (0U)
|
} while (0U)
|
||||||
|
|
||||||
|
|
|
@ -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-05 09:08:12
|
* @LastEditTime: 2025-01-02 10:08:44
|
||||||
* @FilePath: \ble_bjq_ch303rct6_ml307\bsp\inc\bsp_ml307.h
|
* @FilePath: \ble_bjq_ch303rct6_ml307\bsp\inc\bsp_ml307.h
|
||||||
* @Description:
|
* @Description:
|
||||||
* @
|
* @
|
||||||
|
@ -231,5 +231,7 @@ struct Ml307_Ops
|
||||||
extern struct Ml307_Ops ml307_ops;
|
extern struct Ml307_Ops ml307_ops;
|
||||||
extern rt_sem_t ml307_recv_sem;
|
extern rt_sem_t ml307_recv_sem;
|
||||||
extern rt_uint8_t ml307_conncet_tcp_flag;
|
extern rt_uint8_t ml307_conncet_tcp_flag;
|
||||||
|
extern rt_uint8_t power_on_send_flag;
|
||||||
|
|
||||||
extern rt_sem_t ml307_life_sem;
|
extern rt_sem_t ml307_life_sem;
|
||||||
void Ml307_Send_Event(Ml307Event event_type);
|
void Ml307_Send_Event(Ml307Event event_type);
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
* @Author : stark1898y 1658608470@qq.com
|
* @Author : stark1898y 1658608470@qq.com
|
||||||
* @Date : 2024-09-04 13:33:49
|
* @Date : 2024-09-04 13:33:49
|
||||||
* @LastEditors: mbw && 1600520629@qq.com
|
* @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
|
* @FilePath: \ble_bjq_ch303rct6_ml307\bsp\src\at_device_ml307.c
|
||||||
* @Description :
|
* @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_memset(ml307_ops.recv, 0, sizeof(struct Ml307RecvData)); // 清空结构体
|
||||||
rt_memcpy(ml307_ops.recv, recv_byte_buf, 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);
|
{
|
||||||
|
rt_sem_release(ml307_recv_sem);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -176,7 +178,6 @@ static void urc_tcp_connect_state(struct at_client *client, const char *data, rt
|
||||||
{
|
{
|
||||||
if (id == socket_id)
|
if (id == socket_id)
|
||||||
{
|
{
|
||||||
LOG_D("ml307 connect to tcp server success");
|
|
||||||
ml307_conncet_tcp_flag = 1;
|
ml307_conncet_tcp_flag = 1;
|
||||||
rt_sem_release(ml307_connect_sem);
|
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");
|
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);
|
rt_thread_mdelay(3000);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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-27 13:08:43
|
* @LastEditTime: 2025-01-02 14:11:22
|
||||||
* @FilePath: \ble_bjq_ch303rct6_ml307\bsp\src\bsp_bt.c
|
* @FilePath: \ble_bjq_ch303rct6_ml307\bsp\src\bsp_bt.c
|
||||||
* @Description:
|
* @Description:
|
||||||
*
|
*
|
||||||
|
@ -189,6 +189,26 @@ int BSP_Bt_Remove_Valve(rt_uint8_t id, rt_uint8_t *mac_addr)
|
||||||
return RT_ERROR;
|
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)
|
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;
|
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 Bt_Valve_Handler(ValveCmdType type, rt_uint8_t id, rt_uint8_t *data)
|
||||||
{
|
{
|
||||||
int ret = RT_EOK;
|
int ret = RT_EOK;
|
||||||
switch (type)
|
switch (type)
|
||||||
{
|
{
|
||||||
case kValveCmdCtr: // 阀门控制
|
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;
|
break;
|
||||||
case kValveCmdReg: // 阀门注册
|
case kValveCmdReg: // 阀门注册
|
||||||
ret = BSP_Bt_Register_Valve(valve[id].valve_id, valve[id].valve_mac);
|
ret = BSP_Bt_Register_Valve(id, &data[0]);
|
||||||
break;
|
break;
|
||||||
case kValveCmdRem: // 阀门移除
|
case kValveCmdRem: // 阀门移除
|
||||||
ret = BSP_Bt_Remove_Valve(valve[id].valve_id, valve[id].valve_mac);
|
ret = BSP_Bt_Remove_Valve(id, &data[0]);
|
||||||
break;
|
break;
|
||||||
case kValveCmdRep: // 阀门更换
|
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;
|
break;
|
||||||
|
case kValveCmdRemAll: // 阀门更换
|
||||||
|
ret = BSP_Bt_Remove_All_Valve();
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
ret = -RT_ERROR;
|
ret = -RT_ERROR;
|
||||||
LOG_E("unknown valve command type");
|
LOG_E("unknown valve command type");
|
||||||
|
@ -337,6 +358,15 @@ int BSP_Bt_Process(uint8_t *data, uint16_t len)
|
||||||
LOG_E("阀门更换失败");
|
LOG_E("阀门更换失败");
|
||||||
}
|
}
|
||||||
break;
|
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:
|
case kValveEventStatus:
|
||||||
LOG_I("接收到阀门心跳数据:");
|
LOG_I("接收到阀门心跳数据:");
|
||||||
LOG_HEX("bt_rx_data:", 16, data_buf, fram_len);
|
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));
|
LOG_HEX("valve_data:", 16, (rt_uint8_t *)&valve[data_buf[3] - 1], sizeof(struct valve_t));
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
LOG_W("unknow cmd: %02X", data[index + 2]);
|
LOG_W("unknow cmd: %02X", data[index + 2]);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -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))
|
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("本地清除阀门信息");
|
LOG_I("本地清除阀门信息");
|
||||||
LED_ON(r);
|
|
||||||
rt_uint8_t mac_addr[6] = {0};
|
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 (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);
|
||||||
rt_thread_mdelay(100);
|
LED_OFF(r);
|
||||||
LED_OFF(r);
|
LOG_I("本地清除阀门信息成功");
|
||||||
LOG_I("本地清除阀门信息成功");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
LOG_E("本地清除阀门信息错误");
|
LOG_E("本地清除阀门信息错误");
|
||||||
LED_OFF(r);
|
|
||||||
LED_OFF(g);
|
LED_OFF(g);
|
||||||
LED_ON(y);
|
LED_ON(y);
|
||||||
rt_thread_mdelay(1000);
|
rt_thread_mdelay(100);
|
||||||
LED_OFF(y);
|
LED_OFF(y);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
* @Author: mbw
|
* @Author: mbw
|
||||||
* @Date: 2024-10-09 08:42:14
|
* @Date: 2024-10-09 08:42:14
|
||||||
* @LastEditors: mbw && 1600520629@qq.com
|
* @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
|
* @FilePath: \ble_bjq_ch303rct6_ml307\bsp\src\bsp_emv.c
|
||||||
* @Description:
|
* @Description:
|
||||||
*
|
*
|
||||||
|
@ -164,7 +164,6 @@ static void TEST_Jxs(int argc, char **argv)
|
||||||
{
|
{
|
||||||
EMV_BACKWARD_ON(time);
|
EMV_BACKWARD_ON(time);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
MSH_CMD_EXPORT(TEST_Jxs,"TEST_Jxs 方向 时间ms");
|
MSH_CMD_EXPORT(TEST_Jxs,"TEST_Jxs 方向 时间ms");
|
||||||
|
|
|
@ -21,6 +21,17 @@ struct flash_sever_info sever_info =
|
||||||
// .server_url = "8.135.10.183",
|
// .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);
|
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) \
|
#define GETATTR(info, id) ((id) == kHwVerId ? (&(info)->hw_ver) \
|
||||||
: (id) == kSwVerId ? (&(info)->sw_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;
|
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)
|
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*/
|
/*读取MAC地址 number :1-8*/
|
||||||
int Flash_Get_Mac_Addr(rt_uint8_t *mac_addr, rt_uint8_t number)
|
int Flash_Get_Mac_Addr(rt_uint8_t *mac_addr, rt_uint8_t number)
|
||||||
{
|
{
|
||||||
rt_uint8_t data[FLASH_VALVE_MAC_ADDR_LEN];
|
if (*(rt_uint16_t *)(FLASH_VALVE_1_MAC_ADDR_ADDR + (number - 1) * FLASH_VALVE_MAC_ADDR_LEN) == 0xe339)
|
||||||
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)
|
|
||||||
{
|
{
|
||||||
LOG_E("Flash_Get_Mac_Addr failed");
|
LOG_D("无阀门数据");
|
||||||
return -RT_ERROR;
|
return -1;
|
||||||
}
|
|
||||||
// 判断读出来的数是否是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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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",
|
rt_snprintf(mac, 20, "%02x:%02x:%02x:%02x:%02x:%02x",
|
||||||
data[5], data[4], data[3], data[2], data[1], data[0]);
|
data[5], data[4], data[3], data[2], data[1], data[0]);
|
||||||
LOG_I("mac_addr:%s", mac);
|
LOG_I("mac_addr:%s", mac);
|
||||||
|
|
|
@ -11,11 +11,17 @@
|
||||||
#include "bsp_led.h"
|
#include "bsp_led.h"
|
||||||
#include "rtthread.h"
|
#include "rtthread.h"
|
||||||
#include "pin.h"
|
#include "pin.h"
|
||||||
|
#include "user_sys.h"
|
||||||
|
#include "bsp_ml307.h"
|
||||||
|
|
||||||
#define LOG_TAG "bsp.led"
|
#define LOG_TAG "bsp.led"
|
||||||
#define LOG_LVL LOG_LVL_DBG
|
#define LOG_LVL LOG_LVL_DBG
|
||||||
#include <ulog.h>
|
#include <ulog.h>
|
||||||
|
|
||||||
|
ALIGN(4)
|
||||||
|
static char user_led_thread_stack[512];
|
||||||
|
static struct rt_thread user_led_thread;
|
||||||
|
|
||||||
//用到了atoi
|
//用到了atoi
|
||||||
#include <stdlib.h>
|
#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_g = RT_NULL;
|
||||||
agile_led_t *led_y = 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)
|
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_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);
|
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;
|
return RT_EOK;
|
||||||
}
|
}
|
||||||
INIT_DEVICE_EXPORT(BSP_LED_Init);
|
INIT_DEVICE_EXPORT(BSP_LED_Init);
|
||||||
|
|
|
@ -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-27 17:49:25
|
* @LastEditTime: 2025-01-02 10:41:22
|
||||||
* @FilePath: \ble_bjq_ch303rct6_ml307\bsp\src\bsp_ml307.c
|
* @FilePath: \ble_bjq_ch303rct6_ml307\bsp\src\bsp_ml307.c
|
||||||
* @Description:
|
* @Description:
|
||||||
*
|
*
|
||||||
|
@ -885,10 +885,10 @@ void Handle_Self_Check(struct Ml307_Ops *ops)
|
||||||
char temp[32] = "0";
|
char temp[32] = "0";
|
||||||
String2Hex(temp, imei); // 将字符串转为十六进制字符串
|
String2Hex(temp, imei); // 将字符串转为十六进制字符串
|
||||||
LOG_D("temp: %s", temp);
|
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);
|
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)
|
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)
|
if (i == FLASH_VALVE_MAC_ADDR_LEN)
|
||||||
{
|
{
|
||||||
LOG_D("mac地址匹配成功,执行关阀动作\n");
|
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");
|
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);
|
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
|
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地址
|
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");
|
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);
|
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]);
|
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 (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");
|
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);
|
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);
|
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]);
|
||||||
if (Bt_Valve_Handler(kValveCmdRem, 0, RT_NULL) != RT_EOK)
|
if (Bt_Valve_Handler(kValveCmdRem, data[0], &data[1]) != 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);
|
||||||
|
@ -1706,7 +1706,6 @@ static void Ml307_Life_Thread_Entry(void *parameter)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 定时器回调函数,当1分钟内没有数据交互时,关闭tcp连接
|
|
||||||
static void Ml307_Upload_Timer_Cb(void *parameter)
|
static void Ml307_Upload_Timer_Cb(void *parameter)
|
||||||
{
|
{
|
||||||
Ml307_Send_Event(kMl307TimeCalibrationEvent); // 更新下时间
|
Ml307_Send_Event(kMl307TimeCalibrationEvent); // 更新下时间
|
||||||
|
|
Loading…
Reference in New Issue