测试了4G的心跳包
This commit is contained in:
parent
21b3098a03
commit
039fca89a4
|
@ -4,12 +4,12 @@ encoding//applications/main.c=UTF-8
|
||||||
encoding//applications/user_sys.h=UTF-8
|
encoding//applications/user_sys.h=UTF-8
|
||||||
encoding//board/board.c=UTF-8
|
encoding//board/board.c=UTF-8
|
||||||
encoding//board/board.h=UTF-8
|
encoding//board/board.h=UTF-8
|
||||||
encoding//bsp/inc/at_device_ml307.h=GBK
|
encoding//bsp/inc/at_device_ml307.h=UTF-8
|
||||||
encoding//bsp/inc/bsp_bt.h=GBK
|
encoding//bsp/inc/bsp_bt.h=GBK
|
||||||
encoding//bsp/inc/bsp_hr.h=GBK
|
encoding//bsp/inc/bsp_hr.h=GBK
|
||||||
encoding//bsp/inc/bsp_led.h=UTF-8
|
encoding//bsp/inc/bsp_led.h=UTF-8
|
||||||
encoding//bsp/src/at_device_ml307.c=UTF-8
|
encoding//bsp/src/at_device_ml307.c=UTF-8
|
||||||
encoding//bsp/src/bsp_bt.c=GBK
|
encoding//bsp/src/bsp_bt.c=UTF-8
|
||||||
encoding//bsp/src/bsp_button.c=GBK
|
encoding//bsp/src/bsp_button.c=GBK
|
||||||
encoding//bsp/src/bsp_flash.c=UTF-8
|
encoding//bsp/src/bsp_flash.c=UTF-8
|
||||||
encoding//bsp/src/bsp_led.c=GBK
|
encoding//bsp/src/bsp_led.c=GBK
|
||||||
|
|
|
@ -55,6 +55,8 @@
|
||||||
"ulog.h": "c",
|
"ulog.h": "c",
|
||||||
"ctype.h": "c",
|
"ctype.h": "c",
|
||||||
"string.h": "c",
|
"string.h": "c",
|
||||||
"completion.h": "c"
|
"completion.h": "c",
|
||||||
|
"bsp_bt.h": "c",
|
||||||
|
"bsp_ml307.h": "c"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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-04 09:23:08
|
* @LastEditTime: 2024-12-04 11:37:55
|
||||||
* @FilePath: \ble_bjq_ch303rct6_ml307\applications\main.c
|
* @FilePath: \ble_bjq_ch303rct6_ml307\applications\main.c
|
||||||
* @Descrt_thread_
|
* @Descrt_thread_
|
||||||
*
|
*
|
||||||
|
@ -162,12 +162,13 @@ int main(void)
|
||||||
// 读取历史记录总数
|
// 读取历史记录总数
|
||||||
Flash_GetTotalRecord(&TotalRecords);
|
Flash_GetTotalRecord(&TotalRecords);
|
||||||
g_Calibration_status = Flash_Get_Calibration_State();
|
g_Calibration_status = Flash_Get_Calibration_State();
|
||||||
|
rt_thread_mdelay(10);
|
||||||
if (g_Calibration_status == kNotCalibrated)//没标定
|
if (g_Calibration_status == kNotCalibrated)//没标定
|
||||||
{
|
{
|
||||||
// LED_STOP(r);
|
LED_STOP(r);
|
||||||
// LED_STOP(y);
|
LED_STOP(y);
|
||||||
// LED_CTRL(g, "1000,500", -1);
|
LED_CTRL(g, "1000,500", -1);
|
||||||
// LED_START(g);
|
LED_START(g);
|
||||||
|
|
||||||
uint32_t ticks = 0, gas_calibration_voltage;
|
uint32_t ticks = 0, gas_calibration_voltage;
|
||||||
while (1)
|
while (1)
|
||||||
|
|
|
@ -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-02 16:54:17
|
* @LastEditTime: 2024-12-04 15:56:22
|
||||||
* @FilePath: \ble_bjq_ch303rct6_ml307\bsp\inc\at_device_ml307.h
|
* @FilePath: \ble_bjq_ch303rct6_ml307\bsp\inc\at_device_ml307.h
|
||||||
* @Description:
|
* @Description:
|
||||||
* @
|
* @
|
||||||
|
@ -27,7 +27,7 @@
|
||||||
#include <at_device.h>
|
#include <at_device.h>
|
||||||
#include "completion.h"
|
#include "completion.h"
|
||||||
|
|
||||||
/*测试地址*/
|
/*娴嬭瘯鍦板潃*/
|
||||||
#if 0
|
#if 0
|
||||||
#define TCP_SERVER_URL ("8.135.10.183 ") //
|
#define TCP_SERVER_URL ("8.135.10.183 ") //
|
||||||
#define TCP_SERVER_PORT ("35383")
|
#define TCP_SERVER_PORT ("35383")
|
||||||
|
@ -44,9 +44,9 @@
|
||||||
#define AT_SEND_MSOSD_FLAG_DEFAULT AT_SEND_MSOSD_FLAG_100
|
#define AT_SEND_MSOSD_FLAG_DEFAULT AT_SEND_MSOSD_FLAG_100
|
||||||
|
|
||||||
#define TCP_GET_SOCKET_STATUS ("AT+NSOSTATUS=%d")
|
#define TCP_GET_SOCKET_STATUS ("AT+NSOSTATUS=%d")
|
||||||
#define TCP_CONNECT_CMD ("AT+MIPOPEN=%d,\"TCP\",\"%s\",%s") //AT+MIPOPEN=0,"TCP","120.27.12.119",2040 建立TCP连接
|
#define TCP_CONNECT_CMD ("AT+MIPOPEN=%d,\"TCP\",\"%s\",%s") //AT+MIPOPEN=0,"TCP","120.27.12.119",2040
|
||||||
#define TCP_CONNECT_STATE ("AT+MIPSTATE=%d")//AT+MIPSTATE=0 //查询指定连接的连接状态
|
#define TCP_CONNECT_STATE ("AT+MIPSTATE=%d")//AT+MIPSTATE=0 //
|
||||||
#define TCP_SEND_DATA ("AT+MIPSEND=%d,%d,\"%s\"") //第一个参数一般设为0,表示使用自动分配的
|
#define TCP_SEND_DATA ("AT+MIPSEND=%d,%d,\"%s\"") //
|
||||||
#define TCP_CLOSE_SOCKET ("AT+MIPCLOSE=%d") /* close socket_id */
|
#define TCP_CLOSE_SOCKET ("AT+MIPCLOSE=%d") /* close socket_id */
|
||||||
|
|
||||||
#define AT_DEVICE_ML307_SOCKETS_NUM 5
|
#define AT_DEVICE_ML307_SOCKETS_NUM 5
|
||||||
|
@ -77,10 +77,7 @@ typedef struct __attribute__((packed))
|
||||||
uint8_t iccid[20];
|
uint8_t iccid[20];
|
||||||
uint8_t imsi[15];
|
uint8_t imsi[15];
|
||||||
uint8_t rssi; // RSSI
|
uint8_t rssi; // RSSI
|
||||||
uint8_t rsrp; // RSRP
|
uint8_t rsrq; // RSRP
|
||||||
uint8_t rsrq; // RSRQ
|
|
||||||
uint16_t pci; // PCI
|
|
||||||
uint8_t snr; // SNR
|
|
||||||
} ml307_sys_info;
|
} ml307_sys_info;
|
||||||
|
|
||||||
extern ml307_sys_info ml307;
|
extern ml307_sys_info ml307;
|
||||||
|
|
|
@ -2,8 +2,8 @@
|
||||||
* @Author: mbw
|
* @Author: mbw
|
||||||
* @Date: 2024-12-03 10:31:59
|
* @Date: 2024-12-03 10:31:59
|
||||||
* @LastEditors: mbw && 1600520629@qq.com
|
* @LastEditors: mbw && 1600520629@qq.com
|
||||||
* @LastEditTime: 2024-12-03 10:35:18
|
* @LastEditTime: 2024-12-04 13:34:14
|
||||||
* @FilePath: \ble_bjq_ch303rct6_ml307\bsp\inc\bsp_at.h
|
* @FilePath: \ble_bjq_ch303rct6_ml307\bsp\inc\bsp_bt.h
|
||||||
* @Description:
|
* @Description:
|
||||||
* @
|
* @
|
||||||
* @Copyright (c) 2024 by ${git_name_email}, All Rights Reserved.
|
* @Copyright (c) 2024 by ${git_name_email}, All Rights Reserved.
|
||||||
|
@ -50,7 +50,6 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif //BSP_BT_H__
|
#endif //BSP_BT_H__
|
||||||
|
|
|
@ -128,6 +128,23 @@
|
||||||
#define FLASH_CALIBRATION_STATUS_ADDR (FLASH_SERVER_ADDR_ADDR + FLASH_SERVER_LEN)
|
#define FLASH_CALIBRATION_STATUS_ADDR (FLASH_SERVER_ADDR_ADDR + FLASH_SERVER_LEN)
|
||||||
#define FLASH_CALIBRATION_STATUS_LEN (1)
|
#define FLASH_CALIBRATION_STATUS_LEN (1)
|
||||||
|
|
||||||
|
/*无线阀门数量*/
|
||||||
|
#define FLASH_VALVE_NUM_ADDR (FLASH_CALIBRATION_STATUS_ADDR + FLASH_CALIBRATION_STATUS_LEN)
|
||||||
|
#define FLASH_VALVE_NUM_LEN (1)
|
||||||
|
|
||||||
|
/*无线阀门 1号 MAC地址*/
|
||||||
|
#define FLASH_VALVE_1_MAC_ADDR_ADDR (FLASH_VALVE_NUM_ADDR + FLASH_VALVE_NUM_LEN)
|
||||||
|
#define FLASH_VALVE_MAC_ADDR_LEN (6)
|
||||||
|
|
||||||
|
#define FLASH_VALVE_2_MAC_ADDR_ADDR (FLASH_VALVE_1_MAC_ADDR_ADDR + FLASH_VALVE_MAC_ADDR_LEN)
|
||||||
|
#define FLASH_VALVE_3_MAC_ADDR_ADDR (FLASH_VALVE_2_MAC_ADDR_ADDR + FLASH_VALVE_MAC_ADDR_LEN)
|
||||||
|
#define FLASH_VALVE_4_MAC_ADDR_ADDR (FLASH_VALVE_3_MAC_ADDR_ADDR + FLASH_VALVE_MAC_ADDR_LEN)
|
||||||
|
#define FLASH_VALVE_5_MAC_ADDR_ADDR (FLASH_VALVE_4_MAC_ADDR_ADDR + FLASH_VALVE_MAC_ADDR_LEN)
|
||||||
|
#define FLASH_VALVE_6_MAC_ADDR_ADDR (FLASH_VALVE_5_MAC_ADDR_ADDR + FLASH_VALVE_MAC_ADDR_LEN)
|
||||||
|
#define FLASH_VALVE_7_MAC_ADDR_ADDR (FLASH_VALVE_6_MAC_ADDR_ADDR + FLASH_VALVE_MAC_ADDR_LEN)
|
||||||
|
#define FLASH_VALVE_8_MAC_ADDR_ADDR (FLASH_VALVE_7_MAC_ADDR_ADDR + FLASH_VALVE_MAC_ADDR_LEN)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#define FLASH_INIT_FLAG_ADDR (FLASH_CONFIG_INFO_START_ADDR + 254)
|
#define FLASH_INIT_FLAG_ADDR (FLASH_CONFIG_INFO_START_ADDR + 254)
|
||||||
|
@ -293,8 +310,12 @@ void BSP_Flash_EraseRecodrs(void);
|
||||||
int BSP_Flash_Init(void);
|
int BSP_Flash_Init(void);
|
||||||
|
|
||||||
rt_uint8_t Flash_Sys_Cfg(TeFlashCfgInfoId id, rt_uint8_t *buf, rt_size_t len);
|
rt_uint8_t Flash_Sys_Cfg(TeFlashCfgInfoId id, rt_uint8_t *buf, rt_size_t len);
|
||||||
|
|
||||||
size_t Flash_Get_SysCfg(TeFlashCfgInfoId id);
|
size_t Flash_Get_SysCfg(TeFlashCfgInfoId id);
|
||||||
|
|
||||||
|
int Flash_Set_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 Flash_Get_Valve_Num(void);
|
||||||
|
int Flash_Set_Valve_Num(rt_uint8_t valve_num);
|
||||||
int BSP_Flash_Write_Info(rt_uint8_t *buf, rt_size_t len);
|
int BSP_Flash_Write_Info(rt_uint8_t *buf, rt_size_t len);
|
||||||
int Flash_Get_Sever_Addr_Info(struct flash_sever_info *sever_info);
|
int Flash_Get_Sever_Addr_Info(struct flash_sever_info *sever_info);
|
||||||
int Flash_Set_Sever_Addr_Info(rt_uint8_t *data);
|
int Flash_Set_Sever_Addr_Info(rt_uint8_t *data);
|
||||||
|
|
|
@ -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-04 09:34:21
|
* @LastEditTime: 2024-12-04 18:49:45
|
||||||
* @FilePath: \ble_bjq_ch303rct6_ml307\bsp\inc\bsp_ml307.h
|
* @FilePath: \ble_bjq_ch303rct6_ml307\bsp\inc\bsp_ml307.h
|
||||||
* @Description:
|
* @Description:
|
||||||
* @
|
* @
|
||||||
|
@ -12,6 +12,10 @@
|
||||||
#include <at_device_ml307.h>
|
#include <at_device_ml307.h>
|
||||||
#include "drv_gpio.h"
|
#include "drv_gpio.h"
|
||||||
|
|
||||||
|
|
||||||
|
#define MAX_VALVE_NUM 8
|
||||||
|
|
||||||
|
|
||||||
#define ML307_ENABLE_3_8_V GET_PIN(B, 3)
|
#define ML307_ENABLE_3_8_V GET_PIN(B, 3)
|
||||||
#define ML307_PWR_PIN GET_PIN(B, 4)
|
#define ML307_PWR_PIN GET_PIN(B, 4)
|
||||||
#define ML307_RST_PIN GET_PIN(B, 5)
|
#define ML307_RST_PIN GET_PIN(B, 5)
|
||||||
|
@ -56,7 +60,6 @@
|
||||||
|
|
||||||
/*调压器新增事件类型*/
|
/*调压器新增事件类型*/
|
||||||
|
|
||||||
|
|
||||||
/*指令下发*/
|
/*指令下发*/
|
||||||
#define INSTRUCTION_DOWN_SELF_CHECK 0x50 // 指令下发 - 自检
|
#define INSTRUCTION_DOWN_SELF_CHECK 0x50 // 指令下发 - 自检
|
||||||
#define INSTRUCTION_DOWN_MUTE 0x51 // 指令下发 - 消音
|
#define INSTRUCTION_DOWN_MUTE 0x51 // 指令下发 - 消音
|
||||||
|
@ -70,13 +73,11 @@
|
||||||
#define INSTRUCTION_HEART_BEAT 0x59 // 心跳
|
#define INSTRUCTION_HEART_BEAT 0x59 // 心跳
|
||||||
#define INSTRUCTION_DOWN_SEVER_ADDR 0x60 // 设置服务器地址和端口
|
#define INSTRUCTION_DOWN_SEVER_ADDR 0x60 // 设置服务器地址和端口
|
||||||
|
|
||||||
/*调压器新增指令下发*/
|
/**********************************调压器新增指令下发**********************************************************/
|
||||||
|
#define INSTRUCTION_DOWN_VALVE_ADD 0x61 // 新增阀门设备
|
||||||
#define INSTRUCTION_DOWN_VALVE_OPEN 0x61 //新增阀门设备
|
|
||||||
#define INSTRUCTION_DOWN_VALVE_REPLACE 0x62 // 更换阀门设备
|
#define INSTRUCTION_DOWN_VALVE_REPLACE 0x62 // 更换阀门设备
|
||||||
#define INSTRUCTION_DOWN_VALVE_REMOVE 0x63 // 移除阀门设备
|
#define INSTRUCTION_DOWN_VALVE_REMOVE 0x63 // 移除阀门设备
|
||||||
|
/************************************************************************************************************/
|
||||||
|
|
||||||
#define RESPONSE_CODE_SUCCESS 0x00 // 响应码 - 操作成功
|
#define RESPONSE_CODE_SUCCESS 0x00 // 响应码 - 操作成功
|
||||||
#define RESPONSE_CODE_CRC_FAIL 0x01 // 响应码 - CRC 校验失败
|
#define RESPONSE_CODE_CRC_FAIL 0x01 // 响应码 - CRC 校验失败
|
||||||
#define RESPONSE_CODE_PARSE_FAIL 0x02 // 响应码 - 数据解析失败(命令错误或者其他指令错误)
|
#define RESPONSE_CODE_PARSE_FAIL 0x02 // 响应码 - 数据解析失败(命令错误或者其他指令错误)
|
||||||
|
@ -84,7 +85,7 @@
|
||||||
#define RESPONSE_CODE_NO_FUNCTION 0xAF // 响应码 - 无此功能
|
#define RESPONSE_CODE_NO_FUNCTION 0xAF // 响应码 - 无此功能
|
||||||
#define RESPONSE_CODE_OTHER_ERROR 0xFF // 响应码 - 其他错误
|
#define RESPONSE_CODE_OTHER_ERROR 0xFF // 响应码 - 其他错误
|
||||||
|
|
||||||
#define MAX_DATA_LEN 256 // 数据长度
|
#define MAX_DATA_LEN 512 // 数据长度
|
||||||
|
|
||||||
#define ML307_DEFIENE_DATA "000000000000000000000000000000"
|
#define ML307_DEFIENE_DATA "000000000000000000000000000000"
|
||||||
|
|
||||||
|
@ -137,6 +138,32 @@ typedef struct
|
||||||
Ml307Event last_event; // 上次事件
|
Ml307Event last_event; // 上次事件
|
||||||
} Ml307EventIndex;
|
} Ml307EventIndex;
|
||||||
|
|
||||||
|
/*
|
||||||
|
无线调压阀编号
|
||||||
|
无线调压阀 MAC 地址
|
||||||
|
无线调压阀连接状态
|
||||||
|
无线调压阀开关状态
|
||||||
|
无线调压阀温度
|
||||||
|
无线调压阀进口压力
|
||||||
|
无线调压阀出口压力
|
||||||
|
无线调压阀大气压
|
||||||
|
*/
|
||||||
|
typedef struct valve_data valve_data_t;
|
||||||
|
|
||||||
|
|
||||||
|
struct __attribute__((packed)) valve_data
|
||||||
|
{
|
||||||
|
uint8_t valve_id;
|
||||||
|
uint8_t valve_mac[6];
|
||||||
|
uint8_t valve_connct_status;
|
||||||
|
uint8_t valve_switch_status;
|
||||||
|
uint8_t valve_temp;
|
||||||
|
uint32_t valve_in_pressure;
|
||||||
|
uint32_t valve_out_pressure;
|
||||||
|
uint32_t valve_atm_pressure;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
struct __attribute__((packed)) DataBody
|
struct __attribute__((packed)) DataBody
|
||||||
{
|
{
|
||||||
uint8_t device_type; // 设备类型
|
uint8_t device_type; // 设备类型
|
||||||
|
@ -148,20 +175,13 @@ struct __attribute__((packed)) DataBody
|
||||||
uint8_t imsi[15]; // IMSI
|
uint8_t imsi[15]; // IMSI
|
||||||
uint8_t rssi; // RSSI
|
uint8_t rssi; // RSSI
|
||||||
uint8_t rsrp; // RSRP
|
uint8_t rsrp; // RSRP
|
||||||
uint8_t rsrq; // RSRQ
|
uint16_t gas_voltage; // 传感器电压
|
||||||
uint16_t pci; // PCI
|
uint8_t product_work_temperature; //产品工作温度
|
||||||
int8_t snr; // SNR
|
|
||||||
float product_work_temperature; // 产品工作温度
|
|
||||||
uint16_t work_duration; //工作时长
|
uint16_t work_duration; //工作时长
|
||||||
float lel; // 气体浓度
|
|
||||||
float temp; // 环境温度
|
|
||||||
float laser_temp; // 激光器温度
|
|
||||||
float signal_strength; // 激光光强度
|
|
||||||
float gain; // 放大系数
|
|
||||||
uint8_t fault_code; // 故障码
|
|
||||||
uint8_t device_status; // 设备失效状态
|
uint8_t device_status; // 设备失效状态
|
||||||
uint8_t emv_status; // 电磁阀状态
|
rt_uint8_t valve_num; // 阀门数量
|
||||||
uint8_t relay_status; // 继电器状态
|
struct valve_data valve_data[MAX_VALVE_NUM];
|
||||||
|
// valve_data_t* valve_data; // 阀门数据指针
|
||||||
};
|
};
|
||||||
|
|
||||||
// 定义数据帧结构体
|
// 定义数据帧结构体
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
* @Author: mbw
|
* @Author: mbw
|
||||||
* @Date: 2024-11-30 16:46:31
|
* @Date: 2024-11-30 16:46:31
|
||||||
* @LastEditors: mbw && 1600520629@qq.com
|
* @LastEditors: mbw && 1600520629@qq.com
|
||||||
* @LastEditTime: 2024-11-30 16:57:58
|
* @LastEditTime: 2024-12-04 16:18:21
|
||||||
* @FilePath: \ble_bjq_ch303rct6_ml307\bsp\inc\bsp_mq.h
|
* @FilePath: \ble_bjq_ch303rct6_ml307\bsp\inc\bsp_mq.h
|
||||||
* @Description:
|
* @Description:
|
||||||
* @
|
* @
|
||||||
|
@ -52,7 +52,7 @@
|
||||||
|
|
||||||
#define MQ_END_OF_LIFE_TIMS_DAYS (uint16_t)(365 * 5 + 30 * 3)
|
#define MQ_END_OF_LIFE_TIMS_DAYS (uint16_t)(365 * 5 + 30 * 3)
|
||||||
|
|
||||||
#define GAS_SNESOR_THREAD_STACK_SIZE (512+128)
|
#define GAS_SNESOR_THREAD_STACK_SIZE (1024)
|
||||||
#define GAS_SENSOR_THREAD_PRIORITY 9
|
#define GAS_SENSOR_THREAD_PRIORITY 9
|
||||||
#define GAS_SENSOR_THREAD_TIMESLICE 5
|
#define GAS_SENSOR_THREAD_TIMESLICE 5
|
||||||
|
|
||||||
|
|
|
@ -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-04 10:13:57
|
* @LastEditTime: 2024-12-04 17:06:16
|
||||||
* @FilePath: \ble_bjq_ch303rct6_ml307\bsp\inc\bsp_vin_detection.h
|
* @FilePath: \ble_bjq_ch303rct6_ml307\bsp\inc\bsp_vin_detection.h
|
||||||
* @Description:
|
* @Description:
|
||||||
* @
|
* @
|
||||||
|
@ -33,9 +33,10 @@
|
||||||
|
|
||||||
// 不含输入二极管的压降
|
// 不含输入二极管的压降
|
||||||
// (4.7/19.7) * 13V = 3.1V, 3.1/3.3*4096 = 3723
|
// (4.7/19.7) * 13V = 3.1V, 3.1/3.3*4096 = 3723
|
||||||
#define VIN_ADC_HIGH_THRESHOLD (uint16_t)3723 // 13V
|
// #define VIN_ADC_HIGH_THRESHOLD (uint16_t)3723 // 13V
|
||||||
|
#define VIN_ADC_HIGH_THRESHOLD (uint16_t)4095 //
|
||||||
// (4.7/19.7) * 10V = 2.39V, 2.39/3.3*4096 = 2966
|
// (4.7/19.7) * 10V = 2.39V, 2.39/3.3*4096 = 2966
|
||||||
#define VIN_ADC_LOW_THRESHOLD (uint16_t)2665 // 9V
|
#define VIN_ADC_LOW_THRESHOLD (uint16_t)2369 // 9V
|
||||||
|
|
||||||
|
|
||||||
float Get_VIN_Voltage(void);
|
float Get_VIN_Voltage(void);
|
||||||
|
|
|
@ -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-04 10:25:18
|
* @LastEditTime: 2024-12-04 16:23:57
|
||||||
* @FilePath: \ble_bjq_ch303rct6_ml307\bsp\src\at_device_ml307.c
|
* @FilePath: \ble_bjq_ch303rct6_ml307\bsp\src\at_device_ml307.c
|
||||||
* @Description :
|
* @Description :
|
||||||
*
|
*
|
||||||
|
@ -43,7 +43,7 @@
|
||||||
|
|
||||||
#ifdef AT_DEVICE_USING_ML307
|
#ifdef AT_DEVICE_USING_ML307
|
||||||
#define ML307_WAIT_CONNECT_TIME 5000
|
#define ML307_WAIT_CONNECT_TIME 5000
|
||||||
#define ML307_THREAD_STACK_SIZE 2560
|
#define ML307_THREAD_STACK_SIZE 4096
|
||||||
#define ML307_THREAD_PRIORITY (RT_THREAD_PRIORITY_MAX / 2)
|
#define ML307_THREAD_PRIORITY (RT_THREAD_PRIORITY_MAX / 2)
|
||||||
char data_buf[AT_CLIENT_RECV_BUFF_LEN] = {0};
|
char data_buf[AT_CLIENT_RECV_BUFF_LEN] = {0};
|
||||||
|
|
||||||
|
@ -239,7 +239,6 @@ static void urc_tcp_recv(struct at_client *client, const char *data, rt_size_t s
|
||||||
{
|
{
|
||||||
if (id == socket_id)
|
if (id == socket_id)
|
||||||
{
|
{
|
||||||
|
|
||||||
HexStrToBytes(data_buf, recv_byte_buf, len * 2);
|
HexStrToBytes(data_buf, recv_byte_buf, len * 2);
|
||||||
LOG_D("ml307 recv data: %s", data_buf);
|
LOG_D("ml307 recv data: %s", data_buf);
|
||||||
crc16 = crc1021(data_buf, len * 2 - 10); // 去掉帧尾三个字节和2个字节的校验值,字符长度为10
|
crc16 = crc1021(data_buf, len * 2 - 10); // 去掉帧尾三个字节和2个字节的校验值,字符长度为10
|
||||||
|
@ -251,21 +250,21 @@ static void urc_tcp_recv(struct at_client *client, const char *data, rt_size_t s
|
||||||
{
|
{
|
||||||
LOG_E("ml307 recv data error {crc16 [%x]!= rec_crc16[%x]}", crc16, rec_crc16);
|
LOG_E("ml307 recv data error {crc16 [%x]!= rec_crc16[%x]}", crc16, rec_crc16);
|
||||||
}
|
}
|
||||||
// else
|
else
|
||||||
// {
|
{
|
||||||
// /*比较数组的长度和结构体的长度是否一致,如果不一致则数据解析错误,如果一致复制数组值到结构体中*/
|
/*比较数组的长度和结构体的长度是否一致,如果不一致则数据解析错误,如果一致复制数组值到结构体中*/
|
||||||
// if (len == sizeof(struct Ml307RecvData))
|
if (len == sizeof(struct Ml307RecvData))
|
||||||
// {
|
{
|
||||||
// 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));
|
||||||
|
|
||||||
// rt_sem_release(ml307_recv_sem);
|
rt_sem_release(ml307_recv_sem);
|
||||||
// }
|
}
|
||||||
// else
|
else
|
||||||
// {
|
{
|
||||||
// LOG_E("ml307 recv data error {len [%d]!= sizeof(struct Ml307RecvData)[%d]}", len, sizeof(struct Ml307RecvData));
|
LOG_E("ml307 recv data error {len [%d]!= sizeof(struct Ml307RecvData)[%d]}", len, sizeof(struct Ml307RecvData));
|
||||||
// }
|
}
|
||||||
// }
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1106,6 +1105,13 @@ static void ml307_init_thread_entry(void *parameter)
|
||||||
result = -RT_ERROR;
|
result = -RT_ERROR;
|
||||||
goto __exit;
|
goto __exit;
|
||||||
}
|
}
|
||||||
|
/*设置包模式*/
|
||||||
|
if (at_obj_exec_cmd(device->client, resp, "AT+MIPCFG=\"encoding\",0,1,1") != RT_EOK)
|
||||||
|
{
|
||||||
|
result = -RT_ERROR;
|
||||||
|
goto __exit;
|
||||||
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
#define ML307_NETDEV_HWADDR_LEN 8
|
#define ML307_NETDEV_HWADDR_LEN 8
|
||||||
#define ML307_IMEI_LEN 15
|
#define ML307_IMEI_LEN 15
|
||||||
|
@ -1466,7 +1472,7 @@ rt_err_t Ml307_Get_Signal_Info(struct at_device *device)
|
||||||
{
|
{
|
||||||
LOG_D("%s device signal rsrp: %d, rsrq: %d",
|
LOG_D("%s device signal rsrp: %d, rsrq: %d",
|
||||||
device->name, rsrp, rsrq);
|
device->name, rsrp, rsrq);
|
||||||
ml307.rsrp = rsrp;
|
// ml307.rsrp = rsrp;
|
||||||
ml307.rsrq = rsrq;
|
ml307.rsrq = rsrq;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,33 @@
|
||||||
#include "bsp_bt.h"
|
#include "bsp_bt.h"
|
||||||
|
#include "bsp_ml307.h"
|
||||||
|
#include "bsp_flash.h"
|
||||||
|
#include "rtdef.h"
|
||||||
|
|
||||||
|
|
||||||
|
valve_data_t valve_t[MAX_VALVE_NUM];
|
||||||
|
|
||||||
|
int BSP_BT_Init(void)
|
||||||
|
{
|
||||||
|
rt_uint8_t num = Flash_Get_Valve_Num();
|
||||||
|
rt_uint8_t mac_buf[FLASH_VALVE_MAC_ADDR_LEN] = {0};
|
||||||
|
if (num != 0)
|
||||||
|
{
|
||||||
|
for (size_t i = 0; i < MAX_VALVE_NUM; i++)
|
||||||
|
{
|
||||||
|
valve_t[i].valve_id = i;
|
||||||
|
if (Flash_Get_Mac_Addr(valve_t[i].valve_mac, i) == RT_EOK)
|
||||||
|
{
|
||||||
|
rt_memcpy(valve_t[i].valve_mac, mac_buf, 6);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (size_t i = 0; i < MAX_VALVE_NUM; i++)
|
||||||
|
{
|
||||||
|
rt_memset(&valve_t[i], 0, sizeof(valve_data_t));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return RT_EOK;
|
||||||
|
}
|
||||||
|
INIT_PREV_EXPORT(BSP_BT_Init);
|
||||||
|
|
|
@ -91,10 +91,10 @@ rt_uint8_t sys_relay_switch = 0x04; // 具备继电器功能
|
||||||
|
|
||||||
struct flash_sever_info sever_info =
|
struct flash_sever_info sever_info =
|
||||||
{
|
{
|
||||||
// .server_url = "47.94.169.135",
|
.server_url = "47.94.169.135",
|
||||||
// .server_port = "7150",
|
.server_port = "7150",
|
||||||
.server_port = "36078",
|
// .server_port = "36078",
|
||||||
.server_url = "8.135.10.183",
|
// .server_url = "8.135.10.183",
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -334,7 +334,7 @@ int Flash_Set_Calibration_State(TeCalibrationStatus status)
|
||||||
{
|
{
|
||||||
rt_uint8_t page_buf[FLASH_PAGE_SIZE] = {0};
|
rt_uint8_t page_buf[FLASH_PAGE_SIZE] = {0};
|
||||||
rt_uint8_t in_page_offset = (FLASH_CALIBRATION_STATUS_ADDR - FLASH_CONFIG_INFO_START_ADDR);
|
rt_uint8_t in_page_offset = (FLASH_CALIBRATION_STATUS_ADDR - FLASH_CONFIG_INFO_START_ADDR);
|
||||||
|
LOG_D("FLASH_CALIBRATION_STATUS_ADDR = %X", FLASH_CALIBRATION_STATUS_ADDR);
|
||||||
Flash_ErasePage_ReadConfigInfo(page_buf);
|
Flash_ErasePage_ReadConfigInfo(page_buf);
|
||||||
//*将传入的数据写到flash地址中
|
//*将传入的数据写到flash地址中
|
||||||
|
|
||||||
|
@ -343,7 +343,54 @@ int Flash_Set_Calibration_State(TeCalibrationStatus status)
|
||||||
return Flash_Write_ConfigInfo(page_buf);
|
return Flash_Write_ConfigInfo(page_buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*写入MAC地址*/
|
||||||
|
int Flash_Set_Mac_Addr(rt_uint8_t *mac_addr, rt_uint8_t number)
|
||||||
|
{
|
||||||
|
rt_uint8_t page_buf[FLASH_PAGE_SIZE] = {0};
|
||||||
|
rt_uint8_t in_page_offset = ((FLASH_VALVE_1_MAC_ADDR_ADDR + number * FLASH_VALVE_MAC_ADDR_LEN) - FLASH_CONFIG_INFO_START_ADDR);
|
||||||
|
if (mac_addr == RT_NULL)
|
||||||
|
{
|
||||||
|
return -RT_ERROR;
|
||||||
|
}
|
||||||
|
Flash_ErasePage_ReadConfigInfo(page_buf);
|
||||||
|
for (size_t i = 0; i < FLASH_VALVE_MAC_ADDR_LEN; i++)
|
||||||
|
{
|
||||||
|
page_buf[in_page_offset++] = mac_addr[i];
|
||||||
|
}
|
||||||
|
return Flash_Write_ConfigInfo(page_buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*读取MAC地址*/
|
||||||
|
int Flash_Get_Mac_Addr(rt_uint8_t *mac_addr, rt_uint8_t number)
|
||||||
|
{
|
||||||
|
rt_uint8_t data[FLASH_VALVE_MAC_ADDR_LEN];
|
||||||
|
rt_memcpy(data, (rt_uint8_t *)(FLASH_VALVE_1_MAC_ADDR_ADDR + number * FLASH_VALVE_MAC_ADDR_LEN), FLASH_VALVE_MAC_ADDR_LEN);
|
||||||
|
if (data == RT_NULL)
|
||||||
|
{
|
||||||
|
LOG_E("Flash_Get_Mac_Addr failed");
|
||||||
|
return -RT_ERROR;
|
||||||
|
}
|
||||||
|
LOG_D("data[%d] = %x data[%d] = %x data[%d] = %x data[%d] = %x data[%d] = %x data[%d] = %x", 0, data[0], 1, data[1], 2, data[2], 3, data[3], 4, data[4], 5, data[5]);
|
||||||
|
rt_snprintf(mac_addr, 6, "%02x:%02x:%02x:%02x:%02x:%02x",
|
||||||
|
data[5], data[4], data[3], data[2], data[1], data[0]);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*设置无线调压器数量*/
|
||||||
|
int Flash_Set_Valve_Num(rt_uint8_t valve_num)
|
||||||
|
{
|
||||||
|
rt_uint8_t page_buf[FLASH_PAGE_SIZE] = {0};
|
||||||
|
rt_uint8_t in_page_offset = (FLASH_VALVE_NUM_ADDR - FLASH_CONFIG_INFO_START_ADDR);
|
||||||
|
Flash_ErasePage_ReadConfigInfo(page_buf);
|
||||||
|
page_buf[in_page_offset] = valve_num;
|
||||||
|
return Flash_Write_ConfigInfo(page_buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*获取无线调压器数量*/
|
||||||
|
rt_uint8_t Flash_Get_Valve_Num(void)
|
||||||
|
{
|
||||||
|
return *(rt_uint8_t *)FLASH_VALVE_NUM_ADDR;
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* @description: Flash Erase Page
|
* @description: Flash Erase Page
|
||||||
* @param {TeRecord} record
|
* @param {TeRecord} record
|
||||||
|
@ -878,7 +925,7 @@ int BSP_Flash_Init(void)
|
||||||
LOG_D("Flash_Set_Sever_Addr_Info error!");
|
LOG_D("Flash_Set_Sever_Addr_Info error!");
|
||||||
}
|
}
|
||||||
Flash_Set_Calibration_State(kSysGasCalibStatus);//未标定状态
|
Flash_Set_Calibration_State(kSysGasCalibStatus);//未标定状态
|
||||||
|
Flash_Set_Valve_Num(0);
|
||||||
Flash_Write(FLASH_HW_VER_ADDR, (rt_uint8_t *)&sci,
|
Flash_Write(FLASH_HW_VER_ADDR, (rt_uint8_t *)&sci,
|
||||||
(sizeof(sys_config_info) - 50));
|
(sizeof(sys_config_info) - 50));
|
||||||
|
|
||||||
|
|
|
@ -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-04 09:10:26
|
* @LastEditTime: 2024-12-04 18:54:55
|
||||||
* @FilePath: \ble_bjq_ch303rct6_ml307\bsp\src\bsp_ml307.c
|
* @FilePath: \ble_bjq_ch303rct6_ml307\bsp\src\bsp_ml307.c
|
||||||
* @Description:
|
* @Description:
|
||||||
*
|
*
|
||||||
|
@ -15,13 +15,15 @@
|
||||||
#include "bsp_flash.h"
|
#include "bsp_flash.h"
|
||||||
#include "stddef.h"
|
#include "stddef.h"
|
||||||
#include "bsp_rtc.h"
|
#include "bsp_rtc.h"
|
||||||
|
#include "bsp_bt.h"
|
||||||
|
#include "bsp_mq.h"
|
||||||
|
|
||||||
#define LOG_TAG "ml307"
|
#define LOG_TAG "ml307"
|
||||||
#include <at_log.h>
|
#include <at_log.h>
|
||||||
|
|
||||||
#if IOT_MODULE_SWITCH == 1
|
#if IOT_MODULE_SWITCH == 1
|
||||||
#define ML307_THREAD_STACK_SIZE (4096)
|
#define ML307_THREAD_STACK_SIZE (4096+2048)
|
||||||
#define ML307_RECV_THREAD_STACK_SIZE (4096)
|
#define ML307_RECV_THREAD_STACK_SIZE (4096+2048)
|
||||||
#define ML307_LIFE_THREAD_STACK_SIZE (1024)
|
#define ML307_LIFE_THREAD_STACK_SIZE (1024)
|
||||||
#define ML307_THREAD_PRIORITY 25
|
#define ML307_THREAD_PRIORITY 25
|
||||||
#define ML307_THREAD_TICKS 50
|
#define ML307_THREAD_TICKS 50
|
||||||
|
@ -31,7 +33,6 @@
|
||||||
#define ML307_LIFE_THREAD_PRIORITY 26
|
#define ML307_LIFE_THREAD_PRIORITY 26
|
||||||
#define ML307_LIFE_THREAD_TICKS 10
|
#define ML307_LIFE_THREAD_TICKS 10
|
||||||
|
|
||||||
|
|
||||||
// static rt_uint32_t ml307_status = 0;
|
// static rt_uint32_t ml307_status = 0;
|
||||||
ALIGN(RT_ALIGN_SIZE)
|
ALIGN(RT_ALIGN_SIZE)
|
||||||
static char ml307_thread_stack[ML307_THREAD_STACK_SIZE];
|
static char ml307_thread_stack[ML307_THREAD_STACK_SIZE];
|
||||||
|
@ -59,6 +60,9 @@ Ml307EventIndex ml307_event_index;
|
||||||
|
|
||||||
rt_uint8_t power_on_send_flag = 0;
|
rt_uint8_t power_on_send_flag = 0;
|
||||||
rt_mutex_t ml307_mutex;
|
rt_mutex_t ml307_mutex;
|
||||||
|
|
||||||
|
extern valve_data_t valve_t[MAX_VALVE_NUM];
|
||||||
|
|
||||||
int BSP_Ml307_Init(struct Ml307_Ops *ops, rt_uint8_t version);
|
int BSP_Ml307_Init(struct Ml307_Ops *ops, rt_uint8_t version);
|
||||||
int BSP_Ml307_Update(struct Ml307_Ops *ops, rt_uint8_t device_type, rt_uint8_t event_type);
|
int BSP_Ml307_Update(struct Ml307_Ops *ops, rt_uint8_t device_type, rt_uint8_t event_type);
|
||||||
int Ml307_Send_Data(struct Ml307_Ops *ops, rt_uint8_t data_num, rt_uint8_t cmd, rt_uint8_t device_type, rt_uint8_t event_type);
|
int Ml307_Send_Data(struct Ml307_Ops *ops, rt_uint8_t data_num, rt_uint8_t cmd, rt_uint8_t device_type, rt_uint8_t event_type);
|
||||||
|
@ -147,7 +151,6 @@ rt_uint32_t Ml307_Get_Event_Flag(Ml307Event event_type)
|
||||||
|
|
||||||
void Ml307_Send_Event(Ml307Event event_type)
|
void Ml307_Send_Event(Ml307Event event_type)
|
||||||
{
|
{
|
||||||
LOG_D("Send_Ml307_Event = %d", event_type);
|
|
||||||
ml307_event_index.last_event = ml307_event_index.current_event;
|
ml307_event_index.last_event = ml307_event_index.current_event;
|
||||||
ml307_event_index.current_event = event_type;
|
ml307_event_index.current_event = event_type;
|
||||||
if (ml307_event_initialized == RT_TRUE)
|
if (ml307_event_initialized == RT_TRUE)
|
||||||
|
@ -213,14 +216,13 @@ void Reset_Ml307_Life_Timer(void)
|
||||||
{
|
{
|
||||||
if (ml307_life_timer != RT_NULL)
|
if (ml307_life_timer != RT_NULL)
|
||||||
{
|
{
|
||||||
// rt_timer_stop(ml307_life_timer);//启动这个时,他会自动清除以前的定时器,所以不必担心是否已经启动的问题,困扰我不少时间,点进去第一二句就是
|
|
||||||
rt_timer_start(ml307_life_timer);
|
rt_timer_start(ml307_life_timer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int _Pack_Send(struct Ml307_Ops *ops, char *buf)
|
int _Pack_Send(struct Ml307_Ops *ops, char *buf)
|
||||||
{
|
{
|
||||||
char ml307_send_buf[512] = {0}; // 发送缓冲区,用于存储最终发送的数据
|
char ml307_send_buf[1024] = {0}; // 发送缓冲区,用于存储最终发送的数据
|
||||||
// char byteArr1[512]; // 转换成字节值
|
// char byteArr1[512]; // 转换成字节值
|
||||||
unsigned short crc16 = 0; // 存储CRC16校验和
|
unsigned short crc16 = 0; // 存储CRC16校验和
|
||||||
|
|
||||||
|
@ -246,7 +248,7 @@ int _Pack_Send(struct Ml307_Ops *ops, char *buf)
|
||||||
// LOG_D("ml307_send_buf: %s", ml307_send_buf);
|
// LOG_D("ml307_send_buf: %s", ml307_send_buf);
|
||||||
rt_uint16_t data_len = rt_strlen(ml307_send_buf);
|
rt_uint16_t data_len = rt_strlen(ml307_send_buf);
|
||||||
// 通过AT指令发送数据给ML307模块
|
// 通过AT指令发送数据给ML307模块
|
||||||
if (at_send_data(device, ml307_send_buf, data_len) != RT_EOK)
|
if (at_send_data(device, ml307_send_buf, data_len/2) != RT_EOK)
|
||||||
{
|
{
|
||||||
return -RT_ERROR;
|
return -RT_ERROR;
|
||||||
}
|
}
|
||||||
|
@ -269,7 +271,7 @@ int _Pack_Send(struct Ml307_Ops *ops, char *buf)
|
||||||
static int _Send_Handle(struct Ml307_Ops *ops, rt_size_t data_num, rt_size_t cmd_num, const char *data)
|
static int _Send_Handle(struct Ml307_Ops *ops, rt_size_t data_num, rt_size_t cmd_num, const char *data)
|
||||||
{
|
{
|
||||||
// 临时缓冲区,用于格式化数据
|
// 临时缓冲区,用于格式化数据
|
||||||
char data_buf[512] = {0};
|
char data_buf[1024] = {0};
|
||||||
rt_size_t data_len = rt_strlen(data);
|
rt_size_t data_len = rt_strlen(data);
|
||||||
|
|
||||||
// 格式化数据,构建发送给ML307模块的数据包
|
// 格式化数据,构建发送给ML307模块的数据包
|
||||||
|
@ -307,7 +309,7 @@ int BSP_Ml307_Init(struct Ml307_Ops *ops, rt_uint8_t version)
|
||||||
|
|
||||||
ops->frame->header[0] = 0x4A;
|
ops->frame->header[0] = 0x4A;
|
||||||
ops->frame->header[1] = 0x54;
|
ops->frame->header[1] = 0x54;
|
||||||
ops->frame->header[2] = 0x34;
|
ops->frame->header[2] = 0x30;
|
||||||
|
|
||||||
ops->frame->version = version;
|
ops->frame->version = version;
|
||||||
ops->frame->manufacture = DEVICE_MANUFACTURE;
|
ops->frame->manufacture = DEVICE_MANUFACTURE;
|
||||||
|
@ -318,28 +320,65 @@ int BSP_Ml307_Init(struct Ml307_Ops *ops, rt_uint8_t version)
|
||||||
|
|
||||||
return RT_EOK;
|
return RT_EOK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int _Update_Valve_Data(struct Ml307_Ops *ops)
|
||||||
|
{
|
||||||
|
valve_data_t valve_data_t[MAX_VALVE_NUM] = {0};
|
||||||
|
rt_uint8_t id = 0;
|
||||||
|
rt_uint8_t mac_addr[FLASH_VALVE_MAC_ADDR_LEN] = {0};
|
||||||
|
ops->body->valve_num = Flash_Get_Valve_Num();
|
||||||
|
if (ops->body->valve_num == 0)//确保至少有一个阀门数据体
|
||||||
|
{
|
||||||
|
LOG_D("No valve data");
|
||||||
|
rt_memcpy(&ops->body->valve_data, &valve_data_t[0], sizeof(struct valve_data));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (int i = 0; i < MAX_VALVE_NUM; i++)
|
||||||
|
{
|
||||||
|
size_t j = 0;
|
||||||
|
Flash_Get_Mac_Addr(mac_addr, i);
|
||||||
|
for (; j < FLASH_VALVE_MAC_ADDR_LEN; j++)
|
||||||
|
{
|
||||||
|
if ((mac_addr[j] == 0xe3)||(mac_addr[j] == 0xe9))
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(i == FLASH_VALVE_MAC_ADDR_LEN)
|
||||||
|
{
|
||||||
|
rt_memcpy(&ops->body->valve_data[id], &valve_t[i], sizeof(valve_data_t));
|
||||||
|
id++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return RT_EOK;
|
||||||
|
}
|
||||||
// 更新函数
|
// 更新函数
|
||||||
int BSP_Ml307_Update(struct Ml307_Ops *ops, rt_uint8_t device_type, rt_uint8_t event_type)
|
int BSP_Ml307_Update(struct Ml307_Ops *ops, rt_uint8_t device_type, rt_uint8_t event_type)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
ops->body->device_type = device_type;
|
ops->body->device_type = device_type;
|
||||||
ops->body->event_type = event_type;
|
ops->body->event_type = event_type;
|
||||||
ops->body->hw = (rt_uint8_t)Flash_Get_SysCfg(kHwVerId);
|
ops->body->hw = (rt_uint8_t)Flash_Get_SysCfg(kHwVerId);
|
||||||
ops->body->sw = (rt_uint8_t)Flash_Get_SysCfg(kSwVerId);
|
ops->body->sw = (rt_uint8_t)Flash_Get_SysCfg(kSwVerId);
|
||||||
rt_memcpy(ops->body->imei, &ml307, sizeof(ml307_sys_info)); // 直接赋值结构体数据
|
rt_memcpy(ops->body->imei, &ml307, sizeof(ml307_sys_info)); // 直接赋值结构体数据
|
||||||
// rt_memcpy(&(ops->body->lel), &Sensor_device.Data, (rt_ubase_t)offsetof(TsH308Data, checksum)); // 复制除了校验码以外的数据
|
ops->body->gas_voltage = Get_Gas_VoltageInt1000x();
|
||||||
ops->body->product_work_temperature = ops->body->temp; // 暂时定为激光器测量的环境温度
|
ops->body->product_work_temperature = 0x32;
|
||||||
ops->body->work_duration = work_duration;
|
ops->body->work_duration = work_duration;
|
||||||
ops->body->device_status = device_state_flag;
|
ops->body->device_status = device_state_flag;
|
||||||
// ops->body->emv_status = emv_state_flag;
|
ops->body->valve_num = Flash_Get_Valve_Num();
|
||||||
// ops->body->relay_status = relay_state_flag;
|
_Update_Valve_Data(ops);
|
||||||
|
|
||||||
return RT_EOK;
|
return RT_EOK;
|
||||||
}
|
}
|
||||||
|
|
||||||
int Ml307_Send_Data(struct Ml307_Ops *ops, rt_uint8_t data_num, rt_uint8_t cmd, rt_uint8_t device_type, rt_uint8_t event_type)
|
int Ml307_Send_Data(struct Ml307_Ops *ops, rt_uint8_t data_num, rt_uint8_t cmd, rt_uint8_t device_type, rt_uint8_t event_type)
|
||||||
{
|
{
|
||||||
|
rt_size_t lenght = 0;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
char data_buf[512] = {0};
|
char data_buf[1024] = {0};
|
||||||
char temp[3]; // 临时缓冲区,用于存储每个字节的十六进制表示
|
char temp[3]; // 临时缓冲区,用于存储每个字节的十六进制表示
|
||||||
|
|
||||||
if (ops == NULL || ops->body == NULL)
|
if (ops == NULL || ops->body == NULL)
|
||||||
|
@ -361,7 +400,15 @@ int Ml307_Send_Data(struct Ml307_Ops *ops, rt_uint8_t data_num, rt_uint8_t cmd,
|
||||||
ret = ml307_ops.update_data(ops, device_type, event_type);
|
ret = ml307_ops.update_data(ops, device_type, event_type);
|
||||||
if (ret == RT_EOK)
|
if (ret == RT_EOK)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < sizeof(struct DataBody); i++)
|
if (ops->body->valve_num == 0)
|
||||||
|
{
|
||||||
|
lenght = (sizeof(struct DataBody) - (MAX_VALVE_NUM - 1) * sizeof(struct valve_data));//至少要发送一个阀门数据体
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
lenght = (sizeof(struct DataBody) - (MAX_VALVE_NUM - ops->body->valve_num) * sizeof(struct valve_data));//至少要发送一个阀门数据体
|
||||||
|
}
|
||||||
|
for (int i = 0; i < lenght; i++)
|
||||||
{
|
{
|
||||||
rt_snprintf(temp, sizeof(temp), "%02X", ((rt_uint8_t *)ops->body)[i]);
|
rt_snprintf(temp, sizeof(temp), "%02X", ((rt_uint8_t *)ops->body)[i]);
|
||||||
rt_memcpy(data_buf + i * 2, temp, 2);
|
rt_memcpy(data_buf + i * 2, temp, 2);
|
||||||
|
@ -370,18 +417,18 @@ int Ml307_Send_Data(struct Ml307_Ops *ops, rt_uint8_t data_num, rt_uint8_t cmd,
|
||||||
ret = _Send_Handle(ops, data_num, cmd, data_buf);
|
ret = _Send_Handle(ops, data_num, cmd, data_buf);
|
||||||
if (ret != RT_EOK)
|
if (ret != RT_EOK)
|
||||||
{
|
{
|
||||||
|
// rt_free(ops->body->valve_data);
|
||||||
return -ret;
|
return -ret;
|
||||||
}
|
}
|
||||||
rt_mutex_release(ml307_mutex);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
rt_mutex_release(ml307_mutex);
|
||||||
LOG_E("ml307_conncet_tcp_flag = 0");
|
LOG_E("ml307_conncet_tcp_flag = 0");
|
||||||
ret = -RT_ERROR;
|
ret = -RT_ERROR;
|
||||||
}
|
}
|
||||||
|
// rt_free(ops->body->valve_data);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -783,7 +830,7 @@ const Ml307EventInfo ml307_event_info[] = {
|
||||||
{kMl307FaultRcyEvent, ML307_PRIORITY_LOWEST, "传感器故障解除事件", Ml307_Send_Fault_Recover},
|
{kMl307FaultRcyEvent, ML307_PRIORITY_LOWEST, "传感器故障解除事件", Ml307_Send_Fault_Recover},
|
||||||
{kMl307TimeCalibrationEvent, ML307_PRIORITY_LOWEST, "时间校准事件", Ml307_Send_Time_Calibration},
|
{kMl307TimeCalibrationEvent, ML307_PRIORITY_LOWEST, "时间校准事件", Ml307_Send_Time_Calibration},
|
||||||
{kMl307SilenceEvent, ML307_PRIORITY_LOWEST, "消音事件", Ml307_Send_Silence},
|
{kMl307SilenceEvent, ML307_PRIORITY_LOWEST, "消音事件", Ml307_Send_Silence},
|
||||||
{kMl307ExceptionEvent, ML307_PRIORITY_LOWEST, "异常事件", Ml307_Send_Exception},
|
// {kMl307ExceptionEvent, ML307_PRIORITY_LOWEST, "异常事件", Ml307_Send_Exception},
|
||||||
{kMl307ValveStatusEvent, ML307_PRIORITY_LOWEST, "电磁阀状态改变事件", Ml307_Send_Valve_Status},
|
{kMl307ValveStatusEvent, ML307_PRIORITY_LOWEST, "电磁阀状态改变事件", Ml307_Send_Valve_Status},
|
||||||
{kMl307FanStatusEvent, ML307_PRIORITY_LOWEST, "风机状态改变事件", Ml307_Send_Fan_Status},
|
{kMl307FanStatusEvent, ML307_PRIORITY_LOWEST, "风机状态改变事件", Ml307_Send_Fan_Status},
|
||||||
{kMl307DeviceFailureEvent, ML307_PRIORITY_LOWEST, "设备失效事件", Ml307_Send_Device_Failure}};
|
{kMl307DeviceFailureEvent, ML307_PRIORITY_LOWEST, "设备失效事件", Ml307_Send_Device_Failure}};
|
||||||
|
@ -808,8 +855,7 @@ int Ml307_Process_Events(Ml307Event ml307_recv_event, struct at_device *device,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 处理该事件
|
if (event)// 处理该事件
|
||||||
if (event)
|
|
||||||
{
|
{
|
||||||
// 打印事件的名称
|
// 打印事件的名称
|
||||||
LOG_D("%s上报\n", event->event_name);
|
LOG_D("%s上报\n", event->event_name);
|
||||||
|
@ -928,37 +974,72 @@ void Handle_Mute(struct Ml307_Ops *ops)
|
||||||
ops->Resp(ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_ML307, INSTRUCTION_DOWN_MUTE, temp, RESPONSE_CODE_SUCCESS);
|
ops->Resp(ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_ML307, INSTRUCTION_DOWN_MUTE, temp, RESPONSE_CODE_SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Handle_Close_Valve(struct Ml307_Ops *ops)
|
/*关阀 52-阀门编号(1byte)+ MAC地址(6byte)+ 补零字节 = 15byte 如果内容全部为0,则默认为关闭有线阀门*/
|
||||||
|
rt_err_t Handle_Close_Valve(struct Ml307_Ops *ops)
|
||||||
{
|
{
|
||||||
LOG_D("服务器下发关闭阀门指令\n");
|
LOG_D("服务器下发关闭阀门指令\n");
|
||||||
|
int i = 0;
|
||||||
|
char mac_addr[6] = {0};
|
||||||
char imei[16] = {0};
|
char imei[16] = {0};
|
||||||
Get_Iot_Imei(imei, FLASH_NB_IMEI_LEN);
|
Get_Iot_Imei(imei, FLASH_NB_IMEI_LEN);
|
||||||
char temp[32] = "0";
|
char temp[32] = "0";
|
||||||
String2Hex(temp, imei); // 将字符串转为十六进制字符串
|
String2Hex(temp, imei); // 将字符串转为十六进制字符串
|
||||||
|
if (ops->recv->recv_data.res_data[0] != 0)//不为零则说明关闭无线阀门
|
||||||
|
{
|
||||||
|
Flash_Get_Mac_Addr(mac_addr, ops->recv->recv_data.res_data[0]);
|
||||||
|
/*对两个数组进行比较,如果值不同则退出*/
|
||||||
|
for (; i < FLASH_VALVE_MAC_ADDR_LEN; i++)
|
||||||
|
{
|
||||||
|
if (mac_addr[i] != ops->recv->recv_data.res_data[i + 1])
|
||||||
|
{
|
||||||
|
LOG_E("mac_addr[%x] != ops->recv->recv_data.res_data[%x]\n", mac_addr[i], ops->recv->recv_data.res_data[i + 1]);
|
||||||
|
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(i == FLASH_VALVE_MAC_ADDR_LEN)
|
||||||
|
{
|
||||||
|
LOG_D("mac地址匹配成功,执行关阀动作\n");
|
||||||
|
//TODO:此处需要增加关阀无线阀门的逻辑
|
||||||
|
|
||||||
// emv_state_flag = 1;
|
ops->Resp(ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_ML307, INSTRUCTION_DOWN_CLOSE_VALVE, temp, RESPONSE_CODE_SUCCESS);
|
||||||
|
return RT_EOK;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LOG_E("mac地址匹配失败\n");
|
||||||
|
ops->Resp(ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_ML307, INSTRUCTION_DOWN_CLOSE_VALVE, temp, RESPONSE_CODE_ACTION_FAILURE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LOG_D("关闭有线阀门\n");
|
||||||
|
//TODO:此处需要增加关阀有线阀门的逻辑
|
||||||
|
// emv_state_flag = 0; // 电磁阀动作
|
||||||
// rt_thread_mdelay(20);
|
// rt_thread_mdelay(20);
|
||||||
// emv_state_flag = 0;
|
// emv_state_flag = 0;
|
||||||
// rt_uint8_t ret = BSP_Set_Emv_Status(0);
|
|
||||||
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Handle_Open_Valve(struct Ml307_Ops *ops)
|
void Handle_Open_Valve(struct Ml307_Ops *ops)
|
||||||
{
|
{
|
||||||
LOG_D("服务器下发打开阀门指令\n");
|
LOG_D("服务器下发打开阀门指令\n");
|
||||||
|
|
||||||
// char imei[16] = {0};
|
char imei[16] = {0};
|
||||||
// Get_Iot_Imei(imei, FLASH_NB_IMEI_LEN);
|
Get_Iot_Imei(imei, FLASH_NB_IMEI_LEN);
|
||||||
// char temp[32] = "0";
|
char temp[32] = "0";
|
||||||
// String2Hex(temp, imei); // 将字符串转为十六进制字符串
|
String2Hex(temp, imei); // 将字符串转为十六进制字符串
|
||||||
|
|
||||||
// // rt_uint8_t ret = BSP_Set_Emv_Status(1);
|
// // rt_uint8_t ret = BSP_Set_Emv_Status(1);
|
||||||
// emv_state_flag = 1; // 电磁阀动作
|
// emv_state_flag = 1; // 电磁阀动作
|
||||||
// rt_thread_mdelay(20);
|
// rt_thread_mdelay(20);
|
||||||
// emv_state_flag = 0;
|
// emv_state_flag = 0;
|
||||||
|
|
||||||
// ops->Resp(ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_ML307, INSTRUCTION_DOWN_OPEN_VALVE, temp, RESPONSE_CODE_SUCCESS);
|
ops->Resp(ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_ML307, INSTRUCTION_DOWN_OPEN_VALVE, temp, RESPONSE_CODE_SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Handle_Open_Relay(struct Ml307_Ops *ops)
|
void Handle_Open_Relay(struct Ml307_Ops *ops)
|
||||||
|
@ -1051,11 +1132,7 @@ int Handle_Config_Params(struct Ml307_Ops *ops)
|
||||||
{
|
{
|
||||||
rt_uint16_t nb_upload_time = (uint16_t)Flash_Get_SysCfg(kIotUploadCycleId);
|
rt_uint16_t nb_upload_time = (uint16_t)Flash_Get_SysCfg(kIotUploadCycleId);
|
||||||
unsigned long timeout = nb_upload_time * 60 * RT_TICK_PER_SECOND;
|
unsigned long timeout = nb_upload_time * 60 * RT_TICK_PER_SECOND;
|
||||||
// rt_timer_stop(ml307_timer);
|
|
||||||
rt_timer_control(ml307_timer, RT_TIMER_CTRL_SET_TIME, (void *)&timeout); // 更新上报周期
|
rt_timer_control(ml307_timer, RT_TIMER_CTRL_SET_TIME, (void *)&timeout); // 更新上报周期
|
||||||
// rt_timer_control(ml307_timer, RT_TIMER_CTRL_GET_TIME, &timeout);
|
|
||||||
// LOG_D("timeout:%d", timeout/1000/60);
|
|
||||||
// rt_timer_start(ml307_timer);
|
|
||||||
LOG_D("上报周期由%dmin更新为%dmin", ((flash_info[5] << 8) | flash_info[6]), nb_upload_time);
|
LOG_D("上报周期由%dmin更新为%dmin", ((flash_info[5] << 8) | flash_info[6]), nb_upload_time);
|
||||||
if (ops->Resp(ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_ML307, INSTRUCTION_DOWN_CONFIG_PARAMS, temp, RESPONSE_CODE_SUCCESS) == RT_EOK)
|
if (ops->Resp(ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_ML307, INSTRUCTION_DOWN_CONFIG_PARAMS, temp, RESPONSE_CODE_SUCCESS) == RT_EOK)
|
||||||
{
|
{
|
||||||
|
@ -1128,7 +1205,99 @@ void Handle_Sever_Addr_Set(struct Ml307_Ops *ops)
|
||||||
LOG_D("服务器地址修改成功\n");
|
LOG_D("服务器地址修改成功\n");
|
||||||
ops->Resp(ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_ML307, INSTRUCTION_DOWN_SEVER_ADDR, temp, RESPONSE_CODE_SUCCESS);
|
ops->Resp(ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_ML307, INSTRUCTION_DOWN_SEVER_ADDR, temp, RESPONSE_CODE_SUCCESS);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*新增阀门设备*/
|
||||||
|
rt_err_t Handle_Valve_Add(struct Ml307_Ops *ops)
|
||||||
|
{
|
||||||
|
rt_uint8_t data[7] = {0};
|
||||||
|
char imei[16] = {0};
|
||||||
|
char temp[32] = "0";
|
||||||
|
rt_uint8_t cnt = Flash_Get_Valve_Num();
|
||||||
|
|
||||||
|
Get_Iot_Imei(imei, FLASH_NB_IMEI_LEN);
|
||||||
|
String2Hex(temp, imei); // 将字符串转为十六进制字符串
|
||||||
|
|
||||||
|
if (cnt > MAX_VALVE_NUM)
|
||||||
|
{
|
||||||
|
LOG_E("阀门设备数量超过最大值\n");
|
||||||
|
ops->Resp(ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_ML307, INSTRUCTION_DOWN_VALVE_ADD, temp, RESPONSE_CODE_OTHER_ERROR);
|
||||||
|
return RT_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
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 (Flash_Set_Mac_Addr(&data[1], data[0]) != 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;
|
||||||
|
}
|
||||||
|
LOG_D("新增阀门设备成功\n");
|
||||||
|
Flash_Set_Valve_Num(cnt + 1);
|
||||||
|
ops->Resp(ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_ML307, INSTRUCTION_DOWN_VALVE_ADD, temp, RESPONSE_CODE_SUCCESS);
|
||||||
|
return RT_EOK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*更换阀门设备*/
|
||||||
|
rt_err_t Handle_Valve_Replace(struct Ml307_Ops *ops)
|
||||||
|
{
|
||||||
|
rt_uint8_t data[6] = {0};
|
||||||
|
char imei[16] = {0};
|
||||||
|
char temp[32] = "0";
|
||||||
|
|
||||||
|
Get_Iot_Imei(imei, FLASH_NB_IMEI_LEN);
|
||||||
|
String2Hex(temp, imei); // 将字符串转为十六进制字符串
|
||||||
|
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 (Flash_Set_Mac_Addr(&data[1], data[0]) != 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);
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*移除阀门设备*/
|
||||||
|
rt_err_t Handle_Remove_Valve(struct Ml307_Ops *ops)
|
||||||
|
{
|
||||||
|
rt_uint8_t data[6] = {0};
|
||||||
|
char imei[16] = {0};
|
||||||
|
char temp[32] = "0";
|
||||||
|
rt_uint8_t cnt = Flash_Get_Valve_Num();
|
||||||
|
Get_Iot_Imei(imei, FLASH_NB_IMEI_LEN);
|
||||||
|
String2Hex(temp, imei); // 将字符串转为十六进制字符串
|
||||||
|
if (cnt == 0)
|
||||||
|
{
|
||||||
|
LOG_E("阀门设备数量为0, 无法移除\n");
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
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]);
|
||||||
|
rt_memset(&data[1], 0, sizeof(data) - 1);
|
||||||
|
if (Flash_Set_Mac_Addr(&data[1], data[0]) != 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);
|
||||||
|
return RT_ERROR;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LOG_D("移除阀门设备成功\n");
|
||||||
|
Flash_Set_Valve_Num(cnt - 1);
|
||||||
|
ops->Resp(ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_ML307, INSTRUCTION_DOWN_VALVE_REMOVE, temp, RESPONSE_CODE_SUCCESS);
|
||||||
|
return RT_EOK;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Handle_Error(struct Ml307_Ops *ops, rt_err_t ret)
|
void Handle_Error(struct Ml307_Ops *ops, rt_err_t ret)
|
||||||
|
@ -1179,6 +1348,15 @@ void Handle_Instruction_Down(struct Ml307_Ops *ops)
|
||||||
case INSTRUCTION_DOWN_SEVER_ADDR:
|
case INSTRUCTION_DOWN_SEVER_ADDR:
|
||||||
Handle_Sever_Addr_Set(ml307_ops);
|
Handle_Sever_Addr_Set(ml307_ops);
|
||||||
break;
|
break;
|
||||||
|
case INSTRUCTION_DOWN_VALVE_ADD:
|
||||||
|
Handle_Valve_Add(ml307_ops);
|
||||||
|
break;
|
||||||
|
case INSTRUCTION_DOWN_VALVE_REPLACE:
|
||||||
|
Handle_Valve_Replace(ml307_ops);
|
||||||
|
break;
|
||||||
|
case INSTRUCTION_DOWN_VALVE_REMOVE:
|
||||||
|
Handle_Remove_Valve(ml307_ops);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1324,7 +1502,7 @@ static void Ml307_Send_Thread_Entry(void *param)
|
||||||
{
|
{
|
||||||
rt_timer_start(ml307_timer); // 当上电心跳包发送成功时, 开始心跳包周期发送
|
rt_timer_start(ml307_timer); // 当上电心跳包发送成功时, 开始心跳包周期发送
|
||||||
power_on_send_flag = 1;
|
power_on_send_flag = 1;
|
||||||
Ml307_Send_Event(kMl307TimeCalibrationEvent); // 上电网络连接成功时,更新下时间
|
// Ml307_Send_Event(kMl307TimeCalibrationEvent); // 上电网络连接成功时,更新下时间
|
||||||
rt_timer_start(ml307_upload_timer);
|
rt_timer_start(ml307_upload_timer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
* @Author : stark1898y 1658608470@qq.com
|
* @Author : stark1898y 1658608470@qq.com
|
||||||
* @Date : 2024-06-14 15:28:09
|
* @Date : 2024-06-14 15:28:09
|
||||||
* @LastEditors: mbw && 1600520629@qq.com
|
* @LastEditors: mbw && 1600520629@qq.com
|
||||||
* @LastEditTime: 2024-12-04 10:30:42
|
* @LastEditTime: 2024-12-04 16:09:54
|
||||||
* @FilePath: \ble_bjq_ch303rct6_ml307\bsp\src\bsp_vin_detection.c
|
* @FilePath: \ble_bjq_ch303rct6_ml307\bsp\src\bsp_vin_detection.c
|
||||||
* @Description :
|
* @Description :
|
||||||
*
|
*
|
||||||
|
@ -97,7 +97,7 @@ int BSP_VIN_Detection_Init(void)
|
||||||
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
|
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
|
||||||
NVIC_Init(&NVIC_InitStructure);
|
NVIC_Init(&NVIC_InitStructure);
|
||||||
|
|
||||||
rt_thread_mdelay(50);
|
rt_thread_mdelay(500);
|
||||||
|
|
||||||
ADC_ITConfig(USED_ADC, ADC_IT_AWD, ENABLE);
|
ADC_ITConfig(USED_ADC, ADC_IT_AWD, ENABLE);
|
||||||
|
|
||||||
|
|
|
@ -31,7 +31,7 @@
|
||||||
|
|
||||||
#define RT_USING_TIMER_SOFT
|
#define RT_USING_TIMER_SOFT
|
||||||
#define RT_TIMER_THREAD_PRIO 4
|
#define RT_TIMER_THREAD_PRIO 4
|
||||||
#define RT_TIMER_THREAD_STACK_SIZE 512
|
#define RT_TIMER_THREAD_STACK_SIZE 1024
|
||||||
|
|
||||||
/* kservice optimization */
|
/* kservice optimization */
|
||||||
|
|
||||||
|
@ -145,7 +145,7 @@
|
||||||
#define AT_PRINT_RAW_CMD
|
#define AT_PRINT_RAW_CMD
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define AT_CMD_MAX_LEN 256
|
#define AT_CMD_MAX_LEN 1024
|
||||||
#define AT_SW_VERSION_NUM 0x10301
|
#define AT_SW_VERSION_NUM 0x10301
|
||||||
/* end of Network */
|
/* end of Network */
|
||||||
|
|
||||||
|
@ -159,7 +159,7 @@
|
||||||
#define ULOG_OUTPUT_LVL 7 // 生产时将其设为0
|
#define ULOG_OUTPUT_LVL 7 // 生产时将其设为0
|
||||||
#define ULOG_USING_ISR_LOG
|
#define ULOG_USING_ISR_LOG
|
||||||
#define ULOG_ASSERT_ENABLE
|
#define ULOG_ASSERT_ENABLE
|
||||||
#define ULOG_LINE_BUF_SIZE 512
|
#define ULOG_LINE_BUF_SIZE 1024
|
||||||
|
|
||||||
/* log format */
|
/* log format */
|
||||||
// #define ULOG_OUTPUT_FLOAT
|
// #define ULOG_OUTPUT_FLOAT
|
||||||
|
|
Loading…
Reference in New Issue