测试了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//board/board.c=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_hr.h=GBK
|
||||
encoding//bsp/inc/bsp_led.h=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_flash.c=UTF-8
|
||||
encoding//bsp/src/bsp_led.c=GBK
|
||||
|
|
|
@ -55,6 +55,8 @@
|
|||
"ulog.h": "c",
|
||||
"ctype.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
|
||||
* @Date: 2024-10-23 17:14:16
|
||||
* @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
|
||||
* @Descrt_thread_
|
||||
*
|
||||
|
@ -162,12 +162,13 @@ int main(void)
|
|||
// 读取历史记录总数
|
||||
Flash_GetTotalRecord(&TotalRecords);
|
||||
g_Calibration_status = Flash_Get_Calibration_State();
|
||||
rt_thread_mdelay(10);
|
||||
if (g_Calibration_status == kNotCalibrated)//没标定
|
||||
{
|
||||
// LED_STOP(r);
|
||||
// LED_STOP(y);
|
||||
// LED_CTRL(g, "1000,500", -1);
|
||||
// LED_START(g);
|
||||
LED_STOP(r);
|
||||
LED_STOP(y);
|
||||
LED_CTRL(g, "1000,500", -1);
|
||||
LED_START(g);
|
||||
|
||||
uint32_t ticks = 0, gas_calibration_voltage;
|
||||
while (1)
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* @Author: mbw
|
||||
* @Date: 2024-10-09 08:42:14
|
||||
* @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
|
||||
* @Description:
|
||||
* @
|
||||
|
@ -27,7 +27,7 @@
|
|||
#include <at_device.h>
|
||||
#include "completion.h"
|
||||
|
||||
/*测试地址*/
|
||||
/*娴嬭瘯鍦板潃*/
|
||||
#if 0
|
||||
#define TCP_SERVER_URL ("8.135.10.183 ") //
|
||||
#define TCP_SERVER_PORT ("35383")
|
||||
|
@ -44,9 +44,9 @@
|
|||
#define AT_SEND_MSOSD_FLAG_DEFAULT AT_SEND_MSOSD_FLAG_100
|
||||
|
||||
#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_STATE ("AT+MIPSTATE=%d")//AT+MIPSTATE=0 //查询指定连接的连接状态
|
||||
#define TCP_SEND_DATA ("AT+MIPSEND=%d,%d,\"%s\"") //第一个参数一般设为0,表示使用自动分配的
|
||||
#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_SEND_DATA ("AT+MIPSEND=%d,%d,\"%s\"") //
|
||||
#define TCP_CLOSE_SOCKET ("AT+MIPCLOSE=%d") /* close socket_id */
|
||||
|
||||
#define AT_DEVICE_ML307_SOCKETS_NUM 5
|
||||
|
@ -77,10 +77,7 @@ typedef struct __attribute__((packed))
|
|||
uint8_t iccid[20];
|
||||
uint8_t imsi[15];
|
||||
uint8_t rssi; // RSSI
|
||||
uint8_t rsrp; // RSRP
|
||||
uint8_t rsrq; // RSRQ
|
||||
uint16_t pci; // PCI
|
||||
uint8_t snr; // SNR
|
||||
uint8_t rsrq; // RSRP
|
||||
} ml307_sys_info;
|
||||
|
||||
extern ml307_sys_info ml307;
|
||||
|
|
|
@ -2,8 +2,8 @@
|
|||
* @Author: mbw
|
||||
* @Date: 2024-12-03 10:31:59
|
||||
* @LastEditors: mbw && 1600520629@qq.com
|
||||
* @LastEditTime: 2024-12-03 10:35:18
|
||||
* @FilePath: \ble_bjq_ch303rct6_ml307\bsp\inc\bsp_at.h
|
||||
* @LastEditTime: 2024-12-04 13:34:14
|
||||
* @FilePath: \ble_bjq_ch303rct6_ml307\bsp\inc\bsp_bt.h
|
||||
* @Description:
|
||||
* @
|
||||
* @Copyright (c) 2024 by ${git_name_email}, All Rights Reserved.
|
||||
|
@ -50,7 +50,6 @@
|
|||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif //BSP_BT_H__
|
||||
|
|
|
@ -128,6 +128,23 @@
|
|||
#define FLASH_CALIBRATION_STATUS_ADDR (FLASH_SERVER_ADDR_ADDR + FLASH_SERVER_LEN)
|
||||
#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)
|
||||
|
@ -293,8 +310,12 @@ void BSP_Flash_EraseRecodrs(void);
|
|||
int BSP_Flash_Init(void);
|
||||
|
||||
rt_uint8_t Flash_Sys_Cfg(TeFlashCfgInfoId id, rt_uint8_t *buf, rt_size_t len);
|
||||
|
||||
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 Flash_Get_Sever_Addr_Info(struct flash_sever_info *sever_info);
|
||||
int Flash_Set_Sever_Addr_Info(rt_uint8_t *data);
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* @Author: mbw
|
||||
* @Date: 2024-11-30 15:46:21
|
||||
* @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
|
||||
* @Description:
|
||||
* @
|
||||
|
@ -12,6 +12,10 @@
|
|||
#include <at_device_ml307.h>
|
||||
#include "drv_gpio.h"
|
||||
|
||||
|
||||
#define MAX_VALVE_NUM 8
|
||||
|
||||
|
||||
#define ML307_ENABLE_3_8_V GET_PIN(B, 3)
|
||||
#define ML307_PWR_PIN GET_PIN(B, 4)
|
||||
#define ML307_RST_PIN GET_PIN(B, 5)
|
||||
|
@ -56,7 +60,6 @@
|
|||
|
||||
/*调压器新增事件类型*/
|
||||
|
||||
|
||||
/*指令下发*/
|
||||
#define INSTRUCTION_DOWN_SELF_CHECK 0x50 // 指令下发 - 自检
|
||||
#define INSTRUCTION_DOWN_MUTE 0x51 // 指令下发 - 消音
|
||||
|
@ -70,13 +73,11 @@
|
|||
#define INSTRUCTION_HEART_BEAT 0x59 // 心跳
|
||||
#define INSTRUCTION_DOWN_SEVER_ADDR 0x60 // 设置服务器地址和端口
|
||||
|
||||
/*调压器新增指令下发*/
|
||||
|
||||
#define INSTRUCTION_DOWN_VALVE_OPEN 0x61 //新增阀门设备
|
||||
#define INSTRUCTION_DOWN_VALVE_REPLACE 0x62 //更换阀门设备
|
||||
#define INSTRUCTION_DOWN_VALVE_REMOVE 0x63//移除阀门设备
|
||||
|
||||
|
||||
/**********************************调压器新增指令下发**********************************************************/
|
||||
#define INSTRUCTION_DOWN_VALVE_ADD 0x61 // 新增阀门设备
|
||||
#define INSTRUCTION_DOWN_VALVE_REPLACE 0x62 // 更换阀门设备
|
||||
#define INSTRUCTION_DOWN_VALVE_REMOVE 0x63 // 移除阀门设备
|
||||
/************************************************************************************************************/
|
||||
#define RESPONSE_CODE_SUCCESS 0x00 // 响应码 - 操作成功
|
||||
#define RESPONSE_CODE_CRC_FAIL 0x01 // 响应码 - CRC 校验失败
|
||||
#define RESPONSE_CODE_PARSE_FAIL 0x02 // 响应码 - 数据解析失败(命令错误或者其他指令错误)
|
||||
|
@ -84,7 +85,7 @@
|
|||
#define RESPONSE_CODE_NO_FUNCTION 0xAF // 响应码 - 无此功能
|
||||
#define RESPONSE_CODE_OTHER_ERROR 0xFF // 响应码 - 其他错误
|
||||
|
||||
#define MAX_DATA_LEN 256 // 数据长度
|
||||
#define MAX_DATA_LEN 512 // 数据长度
|
||||
|
||||
#define ML307_DEFIENE_DATA "000000000000000000000000000000"
|
||||
|
||||
|
@ -137,6 +138,32 @@ typedef struct
|
|||
Ml307Event last_event; // 上次事件
|
||||
} 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
|
||||
{
|
||||
uint8_t device_type; // 设备类型
|
||||
|
@ -148,20 +175,13 @@ struct __attribute__((packed)) DataBody
|
|||
uint8_t imsi[15]; // IMSI
|
||||
uint8_t rssi; // RSSI
|
||||
uint8_t rsrp; // RSRP
|
||||
uint8_t rsrq; // RSRQ
|
||||
uint16_t pci; // PCI
|
||||
int8_t snr; // SNR
|
||||
float product_work_temperature; // 产品工作温度
|
||||
uint16_t work_duration; // 工作时长
|
||||
float lel; // 气体浓度
|
||||
float temp; // 环境温度
|
||||
float laser_temp; // 激光器温度
|
||||
float signal_strength; // 激光光强度
|
||||
float gain; // 放大系数
|
||||
uint8_t fault_code; // 故障码
|
||||
uint16_t gas_voltage; // 传感器电压
|
||||
uint8_t product_work_temperature; //产品工作温度
|
||||
uint16_t work_duration; //工作时长
|
||||
uint8_t device_status; // 设备失效状态
|
||||
uint8_t emv_status; // 电磁阀状态
|
||||
uint8_t relay_status; // 继电器状态
|
||||
rt_uint8_t valve_num; // 阀门数量
|
||||
struct valve_data valve_data[MAX_VALVE_NUM];
|
||||
// valve_data_t* valve_data; // 阀门数据指针
|
||||
};
|
||||
|
||||
// 定义数据帧结构体
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* @Author: mbw
|
||||
* @Date: 2024-11-30 16:46:31
|
||||
* @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
|
||||
* @Description:
|
||||
* @
|
||||
|
@ -52,7 +52,7 @@
|
|||
|
||||
#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_TIMESLICE 5
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* @Author: mbw
|
||||
* @Date: 2024-11-30 15:46:21
|
||||
* @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
|
||||
* @Description:
|
||||
* @
|
||||
|
@ -33,9 +33,10 @@
|
|||
|
||||
// 不含输入二极管的压降
|
||||
// (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
|
||||
#define VIN_ADC_LOW_THRESHOLD (uint16_t)2665 // 9V
|
||||
#define VIN_ADC_LOW_THRESHOLD (uint16_t)2369 // 9V
|
||||
|
||||
|
||||
float Get_VIN_Voltage(void);
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* @Author : stark1898y 1658608470@qq.com
|
||||
* @Date : 2024-09-04 13:33:49
|
||||
* @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
|
||||
* @Description :
|
||||
*
|
||||
|
@ -43,7 +43,7 @@
|
|||
|
||||
#ifdef AT_DEVICE_USING_ML307
|
||||
#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)
|
||||
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)
|
||||
{
|
||||
|
||||
HexStrToBytes(data_buf, recv_byte_buf, len * 2);
|
||||
LOG_D("ml307 recv data: %s", data_buf);
|
||||
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);
|
||||
}
|
||||
// else
|
||||
// {
|
||||
// /*比较数组的长度和结构体的长度是否一致,如果不一致则数据解析错误,如果一致复制数组值到结构体中*/
|
||||
// if (len == sizeof(struct Ml307RecvData))
|
||||
// {
|
||||
// rt_memset(ml307_ops.recv, 0, sizeof(struct Ml307RecvData)); // 清空结构体
|
||||
// rt_memcpy(ml307_ops.recv, recv_byte_buf, sizeof(struct Ml307RecvData));
|
||||
else
|
||||
{
|
||||
/*比较数组的长度和结构体的长度是否一致,如果不一致则数据解析错误,如果一致复制数组值到结构体中*/
|
||||
if (len == sizeof(struct Ml307RecvData))
|
||||
{
|
||||
rt_memset(ml307_ops.recv, 0, sizeof(struct Ml307RecvData)); // 清空结构体
|
||||
rt_memcpy(ml307_ops.recv, recv_byte_buf, sizeof(struct Ml307RecvData));
|
||||
|
||||
// rt_sem_release(ml307_recv_sem);
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// LOG_E("ml307 recv data error {len [%d]!= sizeof(struct Ml307RecvData)[%d]}", len, sizeof(struct Ml307RecvData));
|
||||
// }
|
||||
// }
|
||||
rt_sem_release(ml307_recv_sem);
|
||||
}
|
||||
else
|
||||
{
|
||||
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;
|
||||
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_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",
|
||||
device->name, rsrp, rsrq);
|
||||
ml307.rsrp = rsrp;
|
||||
// ml307.rsrp = rsrp;
|
||||
ml307.rsrq = rsrq;
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -1,8 +1,33 @@
|
|||
#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 =
|
||||
{
|
||||
// .server_url = "47.94.169.135",
|
||||
// .server_port = "7150",
|
||||
.server_port = "36078",
|
||||
.server_url = "8.135.10.183",
|
||||
.server_url = "47.94.169.135",
|
||||
.server_port = "7150",
|
||||
// .server_port = "36078",
|
||||
// .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 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地址中
|
||||
|
||||
|
@ -343,7 +343,54 @@ int Flash_Set_Calibration_State(TeCalibrationStatus status)
|
|||
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
|
||||
* @param {TeRecord} record
|
||||
|
@ -878,7 +925,7 @@ int BSP_Flash_Init(void)
|
|||
LOG_D("Flash_Set_Sever_Addr_Info error!");
|
||||
}
|
||||
Flash_Set_Calibration_State(kSysGasCalibStatus);//未标定状态
|
||||
|
||||
Flash_Set_Valve_Num(0);
|
||||
Flash_Write(FLASH_HW_VER_ADDR, (rt_uint8_t *)&sci,
|
||||
(sizeof(sys_config_info) - 50));
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* @Author: mbw
|
||||
* @Date: 2024-11-30 15:46:21
|
||||
* @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
|
||||
* @Description:
|
||||
*
|
||||
|
@ -15,13 +15,15 @@
|
|||
#include "bsp_flash.h"
|
||||
#include "stddef.h"
|
||||
#include "bsp_rtc.h"
|
||||
#include "bsp_bt.h"
|
||||
#include "bsp_mq.h"
|
||||
|
||||
#define LOG_TAG "ml307"
|
||||
#include <at_log.h>
|
||||
|
||||
#if IOT_MODULE_SWITCH == 1
|
||||
#define ML307_THREAD_STACK_SIZE (4096)
|
||||
#define ML307_RECV_THREAD_STACK_SIZE (4096)
|
||||
#define ML307_THREAD_STACK_SIZE (4096+2048)
|
||||
#define ML307_RECV_THREAD_STACK_SIZE (4096+2048)
|
||||
#define ML307_LIFE_THREAD_STACK_SIZE (1024)
|
||||
#define ML307_THREAD_PRIORITY 25
|
||||
#define ML307_THREAD_TICKS 50
|
||||
|
@ -31,7 +33,6 @@
|
|||
#define ML307_LIFE_THREAD_PRIORITY 26
|
||||
#define ML307_LIFE_THREAD_TICKS 10
|
||||
|
||||
|
||||
// static rt_uint32_t ml307_status = 0;
|
||||
ALIGN(RT_ALIGN_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_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_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);
|
||||
|
@ -147,7 +151,6 @@ rt_uint32_t Ml307_Get_Event_Flag(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.current_event = event_type;
|
||||
if (ml307_event_initialized == RT_TRUE)
|
||||
|
@ -191,12 +194,12 @@ static void Ml307_Error_Timer_Cb(void *parameter)
|
|||
|
||||
static void Ml307_Heartbeat_check_Timer_Cb(void *parameter)
|
||||
{
|
||||
// static rt_uint8_t relay_cnt = 0;
|
||||
// static rt_uint8_t relay_cnt = 0;
|
||||
if (last_value == current_value)
|
||||
{
|
||||
// rt_timer_start(ml307_timer); // 重启一下定时器
|
||||
// relay_cnt++;
|
||||
reboot();//三个心跳周期定时器都没启动,直接重启
|
||||
reboot(); // 三个心跳周期定时器都没启动,直接重启
|
||||
}
|
||||
// else
|
||||
// {
|
||||
|
@ -213,14 +216,13 @@ void Reset_Ml307_Life_Timer(void)
|
|||
{
|
||||
if (ml307_life_timer != RT_NULL)
|
||||
{
|
||||
// rt_timer_stop(ml307_life_timer);//启动这个时,他会自动清除以前的定时器,所以不必担心是否已经启动的问题,困扰我不少时间,点进去第一二句就是
|
||||
rt_timer_start(ml307_life_timer);
|
||||
}
|
||||
}
|
||||
|
||||
int _Pack_Send(struct Ml307_Ops *ops, char *buf)
|
||||
{
|
||||
char ml307_send_buf[512] = {0}; // 发送缓冲区,用于存储最终发送的数据
|
||||
char ml307_send_buf[1024] = {0}; // 发送缓冲区,用于存储最终发送的数据
|
||||
// char byteArr1[512]; // 转换成字节值
|
||||
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);
|
||||
rt_uint16_t data_len = rt_strlen(ml307_send_buf);
|
||||
// 通过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;
|
||||
}
|
||||
|
@ -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)
|
||||
{
|
||||
// 临时缓冲区,用于格式化数据
|
||||
char data_buf[512] = {0};
|
||||
char data_buf[1024] = {0};
|
||||
rt_size_t data_len = rt_strlen(data);
|
||||
|
||||
// 格式化数据,构建发送给ML307模块的数据包
|
||||
|
@ -282,7 +284,7 @@ static int _Send_Handle(struct Ml307_Ops *ops, rt_size_t data_num, rt_size_t cmd
|
|||
ops->frame->manufacture, // 制造商ID
|
||||
data_num,
|
||||
cmd_num,
|
||||
data_len/2,
|
||||
data_len / 2,
|
||||
data);
|
||||
if (len < 0 || len >= sizeof(data_buf))
|
||||
{
|
||||
|
@ -307,7 +309,7 @@ int BSP_Ml307_Init(struct Ml307_Ops *ops, rt_uint8_t version)
|
|||
|
||||
ops->frame->header[0] = 0x4A;
|
||||
ops->frame->header[1] = 0x54;
|
||||
ops->frame->header[2] = 0x34;
|
||||
ops->frame->header[2] = 0x30;
|
||||
|
||||
ops->frame->version = version;
|
||||
ops->frame->manufacture = DEVICE_MANUFACTURE;
|
||||
|
@ -318,28 +320,65 @@ int BSP_Ml307_Init(struct Ml307_Ops *ops, rt_uint8_t version)
|
|||
|
||||
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)
|
||||
{
|
||||
|
||||
|
||||
ops->body->device_type = device_type;
|
||||
ops->body->event_type = event_type;
|
||||
ops->body->hw = (rt_uint8_t)Flash_Get_SysCfg(kHwVerId);
|
||||
ops->body->sw = (rt_uint8_t)Flash_Get_SysCfg(kSwVerId);
|
||||
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->product_work_temperature = ops->body->temp; // 暂时定为激光器测量的环境温度
|
||||
ops->body->gas_voltage = Get_Gas_VoltageInt1000x();
|
||||
ops->body->product_work_temperature = 0x32;
|
||||
ops->body->work_duration = work_duration;
|
||||
ops->body->device_status = device_state_flag;
|
||||
// ops->body->emv_status = emv_state_flag;
|
||||
// ops->body->relay_status = relay_state_flag;
|
||||
ops->body->valve_num = Flash_Get_Valve_Num();
|
||||
_Update_Valve_Data(ops);
|
||||
|
||||
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)
|
||||
{
|
||||
rt_size_t lenght = 0;
|
||||
int ret = 0;
|
||||
char data_buf[512] = {0};
|
||||
char data_buf[1024] = {0};
|
||||
char temp[3]; // 临时缓冲区,用于存储每个字节的十六进制表示
|
||||
|
||||
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);
|
||||
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_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);
|
||||
if (ret != RT_EOK)
|
||||
{
|
||||
|
||||
// rt_free(ops->body->valve_data);
|
||||
return -ret;
|
||||
}
|
||||
rt_mutex_release(ml307_mutex);
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
rt_mutex_release(ml307_mutex);
|
||||
LOG_E("ml307_conncet_tcp_flag = 0");
|
||||
ret = -RT_ERROR;
|
||||
}
|
||||
// rt_free(ops->body->valve_data);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -783,7 +830,7 @@ const Ml307EventInfo ml307_event_info[] = {
|
|||
{kMl307FaultRcyEvent, ML307_PRIORITY_LOWEST, "传感器故障解除事件", Ml307_Send_Fault_Recover},
|
||||
{kMl307TimeCalibrationEvent, ML307_PRIORITY_LOWEST, "时间校准事件", Ml307_Send_Time_Calibration},
|
||||
{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},
|
||||
{kMl307FanStatusEvent, ML307_PRIORITY_LOWEST, "风机状态改变事件", Ml307_Send_Fan_Status},
|
||||
{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);
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
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");
|
||||
|
||||
int i = 0;
|
||||
char mac_addr[6] = {0};
|
||||
char imei[16] = {0};
|
||||
Get_Iot_Imei(imei, FLASH_NB_IMEI_LEN);
|
||||
char temp[32] = "0";
|
||||
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);
|
||||
// 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);
|
||||
return RT_EOK;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
void Handle_Open_Valve(struct Ml307_Ops *ops)
|
||||
{
|
||||
LOG_D("服务器下发打开阀门指令\n");
|
||||
|
||||
// char imei[16] = {0};
|
||||
// Get_Iot_Imei(imei, FLASH_NB_IMEI_LEN);
|
||||
// char temp[32] = "0";
|
||||
// String2Hex(temp, imei); // 将字符串转为十六进制字符串
|
||||
char imei[16] = {0};
|
||||
Get_Iot_Imei(imei, FLASH_NB_IMEI_LEN);
|
||||
char temp[32] = "0";
|
||||
String2Hex(temp, imei); // 将字符串转为十六进制字符串
|
||||
|
||||
// // rt_uint8_t ret = BSP_Set_Emv_Status(1);
|
||||
// emv_state_flag = 1; // 电磁阀动作
|
||||
// rt_thread_mdelay(20);
|
||||
// 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)
|
||||
|
@ -1051,11 +1132,7 @@ int Handle_Config_Params(struct Ml307_Ops *ops)
|
|||
{
|
||||
rt_uint16_t nb_upload_time = (uint16_t)Flash_Get_SysCfg(kIotUploadCycleId);
|
||||
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_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);
|
||||
if (ops->Resp(ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_ML307, INSTRUCTION_DOWN_CONFIG_PARAMS, temp, RESPONSE_CODE_SUCCESS) == RT_EOK)
|
||||
{
|
||||
|
@ -1107,7 +1184,7 @@ void Handle_Time_Calibration_Data(struct Ml307_Ops *ops)
|
|||
ops->Resp(ops, DATA_SERIAL_NUM, CMD_TYPE_TIME_CALIBRATION, DEVICE_TYPE_ML307, INSTRUCTION_DOWN_TIME_CALIBRATION, temp, RESPONSE_CODE_SUCCESS);
|
||||
}
|
||||
|
||||
//下发修改服务器地址指令
|
||||
// 下发修改服务器地址指令
|
||||
void Handle_Sever_Addr_Set(struct Ml307_Ops *ops)
|
||||
{
|
||||
rt_uint8_t data[6] = {0};
|
||||
|
@ -1119,7 +1196,7 @@ void Handle_Sever_Addr_Set(struct Ml307_Ops *ops)
|
|||
rt_memcpy(data, (ops->recv->recv_data.res_data + 9), FLASH_SERVER_LEN);
|
||||
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]);
|
||||
Flash_Set_Sever_Addr_Info(data);
|
||||
if(Flash_Get_Sever_Addr_Info(&sever_info) != RT_EOK)
|
||||
if (Flash_Get_Sever_Addr_Info(&sever_info) != RT_EOK)
|
||||
{
|
||||
LOG_E("服务器地址修改失败\n");
|
||||
}
|
||||
|
@ -1128,7 +1205,99 @@ void Handle_Sever_Addr_Set(struct Ml307_Ops *ops)
|
|||
LOG_D("服务器地址修改成功\n");
|
||||
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)
|
||||
|
@ -1179,6 +1348,15 @@ void Handle_Instruction_Down(struct Ml307_Ops *ops)
|
|||
case INSTRUCTION_DOWN_SEVER_ADDR:
|
||||
Handle_Sever_Addr_Set(ml307_ops);
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1259,7 +1437,7 @@ static void Ml307_Send_Thread_Entry(void *param)
|
|||
else
|
||||
{
|
||||
LOG_D("ml307 init success\n");
|
||||
while (cnt < 5000)//等待激光器进入正常工作状态
|
||||
while (cnt < 5000) // 等待激光器进入正常工作状态
|
||||
{
|
||||
if (SysControl.status == kNormalDetectionEvents)
|
||||
{
|
||||
|
@ -1324,7 +1502,7 @@ static void Ml307_Send_Thread_Entry(void *param)
|
|||
{
|
||||
rt_timer_start(ml307_timer); // 当上电心跳包发送成功时, 开始心跳包周期发送
|
||||
power_on_send_flag = 1;
|
||||
Ml307_Send_Event(kMl307TimeCalibrationEvent); // 上电网络连接成功时,更新下时间
|
||||
// Ml307_Send_Event(kMl307TimeCalibrationEvent); // 上电网络连接成功时,更新下时间
|
||||
rt_timer_start(ml307_upload_timer);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* @Author : stark1898y 1658608470@qq.com
|
||||
* @Date : 2024-06-14 15:28:09
|
||||
* @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
|
||||
* @Description :
|
||||
*
|
||||
|
@ -97,7 +97,7 @@ int BSP_VIN_Detection_Init(void)
|
|||
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
|
||||
NVIC_Init(&NVIC_InitStructure);
|
||||
|
||||
rt_thread_mdelay(50);
|
||||
rt_thread_mdelay(500);
|
||||
|
||||
ADC_ITConfig(USED_ADC, ADC_IT_AWD, ENABLE);
|
||||
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
|
||||
#define RT_USING_TIMER_SOFT
|
||||
#define RT_TIMER_THREAD_PRIO 4
|
||||
#define RT_TIMER_THREAD_STACK_SIZE 512
|
||||
#define RT_TIMER_THREAD_STACK_SIZE 1024
|
||||
|
||||
/* kservice optimization */
|
||||
|
||||
|
@ -145,7 +145,7 @@
|
|||
#define AT_PRINT_RAW_CMD
|
||||
#endif
|
||||
|
||||
#define AT_CMD_MAX_LEN 256
|
||||
#define AT_CMD_MAX_LEN 1024
|
||||
#define AT_SW_VERSION_NUM 0x10301
|
||||
/* end of Network */
|
||||
|
||||
|
@ -159,7 +159,7 @@
|
|||
#define ULOG_OUTPUT_LVL 7 // 生产时将其设为0
|
||||
#define ULOG_USING_ISR_LOG
|
||||
#define ULOG_ASSERT_ENABLE
|
||||
#define ULOG_LINE_BUF_SIZE 512
|
||||
#define ULOG_LINE_BUF_SIZE 1024
|
||||
|
||||
/* log format */
|
||||
// #define ULOG_OUTPUT_FLOAT
|
||||
|
|
Loading…
Reference in New Issue