From 9459deb846f26629817461ac6da3ed768ce405e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E9=A9=AC=5F666?= <13089258+pony-six-hundred-and-sixty-six@user.noreply.gitee.com> Date: Sat, 4 Jan 2025 17:56:37 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=A0=E4=BA=86=E4=B8=AAPDP=E8=BF=9E?= =?UTF-8?q?=E6=8E=A5=E9=94=99=E8=AF=AF=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- applications/user_sys.c | 18 +++++++++++ applications/user_sys.h | 3 ++ bsp/inc/bsp_flash.h | 34 ++++++++++----------- bsp/inc/bsp_ml307.h | 2 +- bsp/src/at_device_ml307.c | 31 +++++++++---------- bsp/src/bsp_flash.c | 63 +++++++++++++++++++-------------------- bsp/src/bsp_hr.c | 6 ++-- bsp/src/bsp_ml307.c | 60 +++++++++++++++++++++++-------------- bsp/src/bsp_mq.c | 6 ++-- 9 files changed, 129 insertions(+), 94 deletions(-) diff --git a/applications/user_sys.c b/applications/user_sys.c index c72cc0a..3ab8263 100644 --- a/applications/user_sys.c +++ b/applications/user_sys.c @@ -245,6 +245,24 @@ rt_uint8_t XOR_CheckSum(const rt_uint8_t *data, rt_size_t len) return sum; } +//利用IMEI号进行错峰延时计算 +rt_uint32_t IMEI_Delay(void) +{ + char imei_str[16]; + char randon_char[8] = {0}; + rt_uint32_t imei_delay = 0; + unsigned int random_number = 0; + + Get_Iot_Imei(imei_str, FLASH_IOT_IMEI_LEN); + // 提取 IMEI 的最后 5 位作为种子 + rt_strncpy(randon_char, &imei_str[0] + FLASH_IOT_IMEI_LEN - 5, 5); + random_number = atoi(randon_char); + imei_delay = (random_number + Get_RandomNumber()) % (K); + // rt_kprintf("IMEI_Delay:%d\r\n", imei_delay); + return (rt_uint32_t)imei_delay; + +} + int BSP_SYS_Init(void) { BSP_Flash_Init(); diff --git a/applications/user_sys.h b/applications/user_sys.h index 15c0f72..1af9bf0 100644 --- a/applications/user_sys.h +++ b/applications/user_sys.h @@ -19,6 +19,8 @@ #define MAX_EXPIRATION_DAYS (uint16_t)(365 * 5 + 30 * 3) +#define K 3 * 1000 + typedef enum { kPowerOnEvent, @@ -80,6 +82,7 @@ unsigned int VerToHex(const char *version); int Extract_Value(const char *str, const char *key); int _Self_Check_Mode(void); rt_uint8_t XOR_CheckSum(const rt_uint8_t *data, rt_size_t len); +rt_uint32_t IMEI_Delay(void); int BSP_SYS_Init(void); diff --git a/bsp/inc/bsp_flash.h b/bsp/inc/bsp_flash.h index c378791..a43f2fa 100644 --- a/bsp/inc/bsp_flash.h +++ b/bsp/inc/bsp_flash.h @@ -88,16 +88,16 @@ #define FLASH_TEMP_ALARM_THRESHOLD_LEN (1) // 上传周期 -#define FLASH_NB_UPLOAD_CYCLE_ADDR (FLASH_TEMP_ALARM_THRESHOLD_ADDR + FLASH_TEMP_ALARM_THRESHOLD_LEN) -#define FLASH_NB_UPLOAD_CYCLE_LEN (2) +#define FLASH_IOT_UPLOAD_CYCLE_ADDR (FLASH_TEMP_ALARM_THRESHOLD_ADDR + FLASH_TEMP_ALARM_THRESHOLD_LEN) +#define FLASH_IOT_UPLOAD_CYCLE_LEN (2) // 重试次数 -#define FLASH_NB_RETRY_ADDR (FLASH_NB_UPLOAD_CYCLE_ADDR + FLASH_NB_UPLOAD_CYCLE_LEN) -#define FLASH_NB_RETRY_LEN (1) +#define FLASH_IOT_RETRY_ADDR (FLASH_IOT_UPLOAD_CYCLE_ADDR + FLASH_IOT_UPLOAD_CYCLE_LEN) +#define FLASH_IOT_RETRY_LEN (1) /*电磁阀功能开启*/ -#define FLASH_EMAGNETIC_SWITCH_ADDR (FLASH_NB_RETRY_ADDR + FLASH_NB_RETRY_LEN) +#define FLASH_EMAGNETIC_SWITCH_ADDR (FLASH_IOT_RETRY_ADDR + FLASH_IOT_RETRY_LEN) #define FLASH_EMAGNETIC_SWITCH_LEN (1) /*继电器功能开启*/ @@ -105,19 +105,19 @@ #define FLASH_RELAY_SWITCH_LEN (1) //imei -#define FLASH_NB_IMEI_ADDR (FLASH_RELAY_SWITCH_ADDR + FLASH_RELAY_SWITCH_LEN) -#define FLASH_NB_IMEI_LEN (15) +#define FLASH_IOT_IMEI_ADDR (FLASH_RELAY_SWITCH_ADDR + FLASH_RELAY_SWITCH_LEN) +#define FLASH_IOT_IMEI_LEN (15) // imsi -#define FLASH_NB_IMSI_ADDR (FLASH_NB_IMEI_ADDR + FLASH_NB_IMEI_LEN) -#define FLASH_NB_IMSI_LEN (15) +#define FLASH_IOT_IMSI_ADDR (FLASH_IOT_IMEI_ADDR + FLASH_IOT_IMEI_LEN) +#define FLASH_IOT_IMSI_LEN (15) // iccid -#define FLASH_NB_ICCID_ADDR (FLASH_NB_IMSI_ADDR + FLASH_NB_IMSI_LEN) -#define FLASH_NB_ICCID_LEN (20) +#define FLASH_IOT_ICCID_ADDR (FLASH_IOT_IMSI_ADDR + FLASH_IOT_IMSI_LEN) +#define FLASH_IOT_ICCID_LEN (20) /*工作时长记录*/ -#define FLASH_WORK_TIME_ADDR (FLASH_NB_ICCID_ADDR + FLASH_NB_ICCID_LEN) +#define FLASH_WORK_TIME_ADDR (FLASH_IOT_ICCID_ADDR + FLASH_IOT_ICCID_LEN) #define FLASH_WORK_TIME_LEN (2)//单位:天 /*正式平台服务器地址*/ @@ -260,13 +260,13 @@ typedef struct __attribute__((packed)) rt_uint16_t alarm_l_value; // 报警低阈值 rt_uint16_t alarm_h_value; // 报警高阈值 rt_uint8_t temp_alarm_threshold;//温度报警阈值 - rt_uint16_t nb_upload_cycle; // NB上传周期 - rt_uint8_t nb_retry; // 重试次数 + rt_uint16_t iot_upload_cycle; // NB上传周期 + rt_uint8_t iot_retry; // 重试次数 rt_uint8_t emagnetic_switch; rt_uint8_t relay_switch; - rt_uint8_t nb_imei[15]; // IMEI - rt_uint8_t nb_imsi[15]; // IMSI - rt_uint8_t nb_iccid[20]; // ICCID + rt_uint8_t iot_imei[15]; // IMEI + rt_uint8_t iot_imsi[15]; // IMSI + rt_uint8_t iot_iccid[20]; // ICCID } sys_config_info; typedef struct diff --git a/bsp/inc/bsp_ml307.h b/bsp/inc/bsp_ml307.h index db5cfa5..fbd252c 100644 --- a/bsp/inc/bsp_ml307.h +++ b/bsp/inc/bsp_ml307.h @@ -232,7 +232,7 @@ extern struct Ml307_Ops ml307_ops; extern rt_sem_t ml307_recv_sem; extern rt_uint8_t ml307_conncet_tcp_flag; extern rt_uint8_t power_on_send_flag; - +extern rt_uint8_t ml307_disconnect_pdp_flag; extern rt_sem_t ml307_disconnect_sem; void Ml307_Send_Event(Ml307Event event_type); int ml307_device_register(void); diff --git a/bsp/src/at_device_ml307.c b/bsp/src/at_device_ml307.c index 892ada3..c9abf9e 100644 --- a/bsp/src/at_device_ml307.c +++ b/bsp/src/at_device_ml307.c @@ -2,7 +2,7 @@ * @Author : stark1898y 1658608470@qq.com * @Date : 2024-09-04 13:33:49 * @LastEditors: mbw && 1600520629@qq.com - * @LastEditTime: 2025-01-04 15:48:16 + * @LastEditTime: 2025-01-04 17:51:47 * @FilePath: \ble_bjq_ch303rct6_ml307\bsp\src\at_device_ml307.c * @Description : * @@ -190,6 +190,7 @@ static void urc_tcp_connect_state(struct at_client *client, const char *data, rt case 571: LOG_D("PDP激活失败"); ml307_conncet_tcp_flag = 0; + ml307_disconnect_pdp_flag = 1; rt_sem_release(ml307_disconnect_sem); break; default: @@ -314,7 +315,7 @@ static int at_device_ml307_connect_tcp(struct at_device *device) { if (at_resp_get_line_by_kw(resp, "OK") != RT_NULL) { - if (rt_sem_take(ml307_connect_flag_sem, 10000) == RT_EOK) + if (rt_sem_take(ml307_connect_flag_sem, 5000) == RT_EOK) { if (ml307_conncet_tcp_flag) { @@ -333,14 +334,8 @@ static int at_device_ml307_connect_tcp(struct at_device *device) ret = RT_EOK; break; } - else if (at_resp_get_line_by_kw(resp, "+CME ERROR: 559") == RT_EOK) // SOCKET错误 - { - ml307_conncet_tcp_flag = 0; - rt_sem_release(ml307_disconnect_sem); - break; - } } - rt_thread_mdelay(60000); + rt_thread_mdelay(5000); } at_delete_resp(resp); return ret; @@ -411,6 +406,12 @@ static int ml307_check_link_status(struct at_device *device) result = RT_EOK; } } + else + { + LOG_E("AT+MIPCALL error."); + result = -RT_ERROR; + goto __exit; + } if (at_obj_exec_cmd(device->client, resp, "AT+CGACT?") < 0) { @@ -967,11 +968,7 @@ static void ml307_init_thread_entry(void *parameter) result = -RT_ERROR; goto __exit; } - if (at_obj_exec_cmd(device->client, resp, "AT+MIPCALL=1,1") != RT_EOK) - { - result = -RT_ERROR; - goto __exit; - } + char parsed_data[10] = {0}; for (i = 0; i < CGATT_RETRY; i++) { @@ -1060,7 +1057,11 @@ static void ml307_init_thread_entry(void *parameter) result = -RT_ERROR; goto __exit; } - + if (at_obj_exec_cmd(device->client, resp, "AT+MIPCALL=1,1") != RT_EOK) + { + result = -RT_ERROR; + goto __exit; + } #if defined(AT_DEBUG) /* check the GPRS network IP address */ for (i = 0; i < IPADDR_RETRY; i++) diff --git a/bsp/src/bsp_flash.c b/bsp/src/bsp_flash.c index 4117c75..db01b88 100644 --- a/bsp/src/bsp_flash.c +++ b/bsp/src/bsp_flash.c @@ -15,16 +15,16 @@ // 在此修改默认的服务器地址 flash_sever_info sever_info = -{ - .server_url = "8.130.122.162", - .server_port = "7153", + { + .server_url = "8.130.122.162", + .server_port = "7153", }; /*默认的系统配置*/ 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 = 0x0001; // 120分钟一次 +rt_uint8_t sys_iot_retry = 0x03; // 重试次数3次 +rt_uint16_t sys_iot_upload_cycle = 0x003C; // 120分钟一次 rt_uint16_t sys_alarm_h_value = 0x09C4; // 2500 rt_uint16_t sys_alarm_l_value = 0x0640; // 1600 rt_uint8_t sys_temp_alarm_threshold = 0x32; @@ -37,13 +37,13 @@ extern int Convert_To_Hex(const flash_sever_info *sever_info, uint8_t *hex_array : (id) == kAlarmLValueId ? (&(info)->alarm_l_value) \ : (id) == kAlarmHValueId ? (&(info)->alarm_h_value) \ : (id) == kTempAlarmThresholdId ? (&(info)->temp_alarm_threshold) \ - : (id) == kIotUploadCycleId ? (&(info)->nb_upload_cycle) \ - : (id) == kIotRetryId ? (&(info)->nb_retry) \ + : (id) == kIotUploadCycleId ? (&(info)->iot_upload_cycle) \ + : (id) == kIotRetryId ? (&(info)->iot_retry) \ : (id) == kEmagneticSwitchId ? (&(info)->emagnetic_switch) \ : (id) == kRelaySwitchId ? (&(info)->relay_switch) \ - : (id) == kIotImeiId ? ((info)->nb_imei) \ - : (id) == kIotImsiId ? ((info)->nb_imsi) \ - : (id) == kIotIccidId ? ((info)->nb_iccid) \ + : (id) == kIotImeiId ? ((info)->iot_imei) \ + : (id) == kIotImsiId ? ((info)->iot_imsi) \ + : (id) == kIotIccidId ? ((info)->iot_iccid) \ : NULL) TsTotalRecords TotalRecords; @@ -70,14 +70,14 @@ const rt_uint32_t hr_sys_cfg_info_addr[kCnt] = { FLASH_SW_VER_ADDR, FLASH_ALARM_L_VALUE_ADDR, FLASH_ALARM_H_VALUE_ADDR, - FLASH_NB_UPLOAD_CYCLE_ADDR, - FLASH_NB_RETRY_ADDR, + FLASH_IOT_UPLOAD_CYCLE_ADDR, + FLASH_IOT_RETRY_ADDR, FLASH_TEMP_ALARM_THRESHOLD_ADDR, FLASH_EMAGNETIC_SWITCH_ADDR, FLASH_RELAY_SWITCH_ADDR, - FLASH_NB_IMEI_ADDR, - FLASH_NB_IMSI_ADDR, - FLASH_NB_ICCID_ADDR, + FLASH_IOT_IMEI_ADDR, + FLASH_IOT_IMSI_ADDR, + FLASH_IOT_ICCID_ADDR, }; const rt_uint32_t hr_sys_cfg_info_len[kCnt] = { @@ -85,19 +85,18 @@ const rt_uint32_t hr_sys_cfg_info_len[kCnt] = { FLASH_SW_VER_LEN, FLASH_ALARM_L_VALUE_LEN, FLASH_ALARM_H_VALUE_LEN, - FLASH_NB_UPLOAD_CYCLE_LEN, - FLASH_NB_RETRY_LEN, + FLASH_IOT_UPLOAD_CYCLE_LEN, + FLASH_IOT_RETRY_LEN, FLASH_TEMP_ALARM_THRESHOLD_LEN, FLASH_EMAGNETIC_SWITCH_LEN, FLASH_RELAY_SWITCH_LEN, - FLASH_NB_IMEI_LEN, - FLASH_NB_IMSI_LEN, - FLASH_NB_ICCID_LEN, + FLASH_IOT_IMEI_LEN, + FLASH_IOT_IMSI_LEN, + FLASH_IOT_ICCID_LEN, }; static rt_base_t interrupt_value; - static void BSP_Flash_UnLock(void) { #if (SystemCoreClock > SYSCLK_FREQ_96MHz_HSE) @@ -152,9 +151,9 @@ static rt_size_t Flash_Read(rt_uint32_t addr, rt_uint8_t *buf, rt_size_t len) int Get_Iot_Imei(char *buf, rt_size_t len) { - if ((*(rt_uint8_t *)FLASH_NB_IMEI_ADDR != 0xE3) && (*(rt_uint8_t *)FLASH_NB_IMEI_ADDR != 0x39)) + if ((*(rt_uint8_t *)FLASH_IOT_IMEI_ADDR != 0xE3) && (*(rt_uint8_t *)FLASH_IOT_IMEI_ADDR != 0x39)) { - rt_memcpy(buf, (char *)FLASH_NB_IMEI_ADDR, len); + rt_memcpy(buf, (char *)FLASH_IOT_IMEI_ADDR, len); LOG_D("NB IMEI: %s", buf); return 0; @@ -173,9 +172,9 @@ int Get_Iot_Imei(char *buf, rt_size_t len) int Get_Iot_Imsi(char *buf, rt_size_t len) { - if ((*(rt_uint8_t *)FLASH_NB_IMSI_ADDR != 0xE3) && (*(rt_uint8_t *)FLASH_NB_IMSI_ADDR != 0x39)) + if ((*(rt_uint8_t *)FLASH_IOT_IMSI_ADDR != 0xE3) && (*(rt_uint8_t *)FLASH_IOT_IMSI_ADDR != 0x39)) { - rt_memcpy(buf, (char *)FLASH_NB_IMSI_ADDR, len); + rt_memcpy(buf, (char *)FLASH_IOT_IMSI_ADDR, len); LOG_D("NB IMSI: %s", buf); return 0; @@ -194,9 +193,9 @@ int Get_Iot_Imsi(char *buf, rt_size_t len) int Get_Iot_Iccid(char *buf, rt_size_t len) { - if ((*(rt_uint8_t *)FLASH_NB_ICCID_ADDR != 0xE3) && (*(rt_uint8_t *)FLASH_NB_ICCID_ADDR != 0x39)) + if ((*(rt_uint8_t *)FLASH_IOT_ICCID_ADDR != 0xE3) && (*(rt_uint8_t *)FLASH_IOT_ICCID_ADDR != 0x39)) { - rt_memcpy(buf, (char *)FLASH_NB_ICCID_ADDR, len); + rt_memcpy(buf, (char *)FLASH_IOT_ICCID_ADDR, len); LOG_D("NB ICCID: %s", buf); return 0; @@ -291,7 +290,7 @@ int Flash_Get_Sever_Addr_Info(flash_sever_info *sever_info) return -RT_ERROR; } - LOG_D("FLASH_SERVER_ADDR_ADDR = %X", FLASH_SERVER_ADDR_ADDR); + LOG_D("FLASH_SERVER_ADDR_ADDR = %X", FLASH_SERVER_ADDR_ADDR); 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(sever_info->server_url, sizeof(sever_info->server_url), "%d.%d.%d.%d", data[3], data[2], data[1], data[0]); @@ -313,7 +312,7 @@ int Flash_Set_Sever_Addr_Info(rt_uint8_t *data) { return -RT_ERROR; } - + LOG_D("Flash_Set_Sever_Addr_Info in_page_offset = %d", in_page_offset); Flash_ErasePage_ReadConfigInfo(page_buf); //*将传入的数据写到flash地址中 @@ -374,7 +373,7 @@ int Flash_Get_Mac_Addr(rt_uint8_t *mac_addr, rt_uint8_t number) rt_uint8_t data[FLASH_VALVE_MAC_ADDR_LEN]; char mac[16] = {20}; - + rt_memcpy(data, (rt_uint8_t *)(FLASH_VALVE_1_MAC_ADDR_ADDR + (number - 1) * FLASH_VALVE_MAC_ADDR_LEN), FLASH_VALVE_MAC_ADDR_LEN); rt_snprintf(mac, 20, "%02x:%02x:%02x:%02x:%02x:%02x", data[5], data[4], data[3], data[2], data[1], data[0]); @@ -903,8 +902,8 @@ int BSP_Flash_Init(void) sci.sw_ver = sys_sw_ver; sci.alarm_l_value = sys_alarm_l_value; sci.alarm_h_value = sys_alarm_h_value; - sci.nb_upload_cycle = sys_nb_upload_cycle; - sci.nb_retry = sys_nb_retry; + sci.iot_upload_cycle = sys_iot_upload_cycle; + sci.iot_retry = sys_iot_retry; sci.temp_alarm_threshold = sys_temp_alarm_threshold; sci.emagnetic_switch = sys_emagnetic_switch; sci.relay_switch = sys_relay_switch; diff --git a/bsp/src/bsp_hr.c b/bsp/src/bsp_hr.c index a9e01aa..b6dcdbe 100644 --- a/bsp/src/bsp_hr.c +++ b/bsp/src/bsp_hr.c @@ -449,9 +449,9 @@ int Process_Factor_Cmd(const char *rx_buff, size_t length) } rt_uint32_t cnt = (rt_uint32_t)((time_buf[2]<<16)| (time_buf[1] << 8)|time_buf[0]); LOG_D("time_buf[2] = %02x time_buf[1] = %02x time_buf[0] = %02x cnt = %04d", time_buf[2], time_buf[1], time_buf[0], cnt); - Get_Iot_Imei(imei, FLASH_NB_IMEI_LEN); - Get_Iot_Imsi(imsi, FLASH_NB_IMSI_LEN); - Get_Iot_Iccid(iccid, FLASH_NB_ICCID_LEN); + Get_Iot_Imei(imei, FLASH_IOT_IMEI_LEN); + Get_Iot_Imsi(imsi, FLASH_IOT_IMSI_LEN); + Get_Iot_Iccid(iccid, FLASH_IOT_ICCID_LEN); rt_sprintf(buf, "\r\n[ID :YD4N02/%02d%02d%02d%04d]\r\n" "[IMEI:%s]\r\n" diff --git a/bsp/src/bsp_ml307.c b/bsp/src/bsp_ml307.c index cf1d43e..d5de2b3 100644 --- a/bsp/src/bsp_ml307.c +++ b/bsp/src/bsp_ml307.c @@ -2,7 +2,7 @@ * @Author: mbw * @Date: 2024-11-30 15:46:21 * @LastEditors: mbw && 1600520629@qq.com - * @LastEditTime: 2025-01-03 16:53:49 + * @LastEditTime: 2025-01-04 17:23:49 * @FilePath: \ble_bjq_ch303rct6_ml307\bsp\src\bsp_ml307.c * @Description: * @@ -17,6 +17,7 @@ #include "bsp_rtc.h" #include "bsp_bt.h" #include "bsp_mq.h" +#include "user_sys.h" #define LOG_TAG "ml307" #include @@ -53,6 +54,7 @@ static rt_timer_t ml307_timer; // 上报心跳 static rt_timer_t ml307_upload_timer; // 更新本地时间定时器 static rt_timer_t ml307_power_error_timer; // 上电失败情况下启动定时器 +rt_uint8_t ml307_disconnect_pdp_flag;// PDP断开连接标志 rt_uint8_t ml307_conncet_tcp_flag; Ml307EventIndex ml307_event_index; @@ -798,6 +800,7 @@ int Ml307_Process_Events(Ml307Event ml307_recv_event, struct at_device *device, if (ml307_conncet_tcp_flag) { // 如果事件有关联的发送函数,则调用该发送函数 + rt_thread_mdelay(IMEI_Delay()); if (event->send_func) { int result = event->send_func(device, ml307_ops); @@ -866,7 +869,7 @@ void Handle_Self_Check(struct Ml307_Ops *ops) { LOG_D("服务器下发自检指令\n"); char imei[16] = {0}; - Get_Iot_Imei(imei, FLASH_NB_IMEI_LEN); + Get_Iot_Imei(imei, FLASH_IOT_IMEI_LEN); LOG_D("imei:%s\n", imei); _Self_Check_Mode(); rt_thread_mdelay(100); @@ -885,7 +888,7 @@ void Handle_Mute(struct Ml307_Ops *ops) LOG_D("服务器下发消音指令\n"); char imei[16] = {0}; - Get_Iot_Imei(imei, FLASH_NB_IMEI_LEN); + Get_Iot_Imei(imei, FLASH_IOT_IMEI_LEN); char temp[32] = "0"; String2Hex(temp, imei); // 将字符串转为十六进制字符串 @@ -902,7 +905,7 @@ rt_err_t Handle_Close_Valve(struct Ml307_Ops *ops) rt_uint8_t data[FLASH_VALVE_MAC_ADDR_LEN + 1] = {0}; rt_uint8_t mac_addr[6] = {0}; char imei[16] = {0}; - Get_Iot_Imei(imei, FLASH_NB_IMEI_LEN); + Get_Iot_Imei(imei, FLASH_IOT_IMEI_LEN); char temp[32] = "0"; String2Hex(temp, imei); // 将字符串转为十六进制字符串 rt_memcpy(data, (ops->recv->recv_data.res_data + 8), FLASH_VALVE_MAC_ADDR_LEN + 1); @@ -981,7 +984,7 @@ void Handle_Open_Valve(struct Ml307_Ops *ops) LOG_D("服务器下发打开阀门指令\n"); char imei[16] = {0}; - Get_Iot_Imei(imei, FLASH_NB_IMEI_LEN); + Get_Iot_Imei(imei, FLASH_IOT_IMEI_LEN); char temp[32] = "0"; String2Hex(temp, imei); // 将字符串转为十六进制字符串 @@ -998,7 +1001,7 @@ void Handle_Open_Relay(struct Ml307_Ops *ops) LOG_D("服务器下发打开继电器指令\n"); char imei[16] = {0}; - Get_Iot_Imei(imei, FLASH_NB_IMEI_LEN); + Get_Iot_Imei(imei, FLASH_IOT_IMEI_LEN); char temp[32] = "0"; String2Hex(temp, imei); // 将字符串转为十六进制字符串 // relay_state_flag = 1; @@ -1014,7 +1017,7 @@ void Handle_Close_Relay(struct Ml307_Ops *ops) char imei[16] = {0}; char temp[32] = "0"; - Get_Iot_Imei(imei, FLASH_NB_IMEI_LEN); + Get_Iot_Imei(imei, FLASH_IOT_IMEI_LEN); String2Hex(temp, imei); // 将字符串转为十六进制字符串 // relay_state_flag = 0; @@ -1029,7 +1032,7 @@ void Handle_Query_Params(struct Ml307_Ops *ops) LOG_D("服务器下发查询系统参数\n"); rt_memcpy(data, (rt_uint8_t *)FLASH_HW_VER_ADDR, sizeof(sys_config_info) - 50); - LOG_D("hw_ver:%02x sw_ver:%02x alarm_low:%02x alarm_high:%02x temp_alarm:%02x nb_upload_cycle:%dmin retry:%02x emagnetic:%02X relay_switch:%02X\n", + LOG_D("hw_ver:%02x sw_ver:%02x alarm_low:%02x alarm_high:%02x temp_alarm:%02x iot_upload_cycle:%dmin retry:%02x emagnetic:%02X relay_switch:%02X\n", data[0], data[1], data[2], data[3], data[4], ((data[5]) | (data[6] << 8)), data[7], data[8], data[9]); rt_sprintf(str, "0000000000%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X", @@ -1048,14 +1051,14 @@ int Handle_Config_Params(struct Ml307_Ops *ops) LOG_D("服务器下发配置参数\n"); - Get_Iot_Imei(imei, FLASH_NB_IMEI_LEN); + Get_Iot_Imei(imei, FLASH_IOT_IMEI_LEN); String2Hex(temp, imei); // 将字符串转为十六进制字符串 rt_memset(data_buf, '0', 32); rt_memcpy(recv_data, (ops->recv->recv_data.res_data + 5), sizeof(sys_config_info) - 50); rt_memcpy(flash_info, (rt_uint8_t *)FLASH_HW_VER_ADDR, sizeof(sys_config_info) - 50); - LOG_D("hw_ver:%02x sw_ver:%02x alarm_low:%02x alarm_high:%02x temp_alarm:%02x nb_upload_cycle:%d min retry:%02x emagnetic:%02X relay_switch:%02X\n", + LOG_D("hw_ver:%02x sw_ver:%02x alarm_low:%02x alarm_high:%02x temp_alarm:%02x iot_upload_cycle:%d min retry:%02x emagnetic:%02X relay_switch:%02X\n", flash_info[0], flash_info[1], flash_info[2], flash_info[3], flash_info[4], (flash_info[5] | (flash_info[6] << 8)), flash_info[7], flash_info[8], recv_data[9]); LOG_D("recv_data: %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x \n", recv_data[0], recv_data[1], recv_data[2], recv_data[3], recv_data[4], @@ -1081,10 +1084,10 @@ int Handle_Config_Params(struct Ml307_Ops *ops) { if (BSP_Flash_Write_Info(recv_data, sizeof(sys_config_info) - 50) != 0) { - rt_uint16_t nb_upload_time = (uint16_t)Flash_Get_SysCfg(kIotUploadCycleId); - unsigned long timeout = nb_upload_time * 60 * RT_TICK_PER_SECOND; + rt_uint16_t iot_upload_time = (uint16_t)Flash_Get_SysCfg(kIotUploadCycleId); + unsigned long timeout = iot_upload_time * 60 * RT_TICK_PER_SECOND; rt_timer_control(ml307_timer, RT_TIMER_CTRL_SET_TIME, (void *)&timeout); // 更新上报周期 - 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]), iot_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) { LOG_D("配置参数写入成功\n"); @@ -1119,7 +1122,7 @@ void Handle_Time_Calibration_Data(struct Ml307_Ops *ops) LOG_D("时间校准数据\n"); - Get_Iot_Imei(imei, FLASH_NB_IMEI_LEN); + Get_Iot_Imei(imei, FLASH_IOT_IMEI_LEN); String2Hex(temp, imei); // 将字符串转为十六进制字符串 rt_memcpy(data, ops->recv->recv_data.res_data, sizeof(data)); @@ -1143,7 +1146,7 @@ void Handle_Sever_Addr_Set(struct Ml307_Ops *ops) char imei[16] = {0}; char temp[32] = "0"; - Get_Iot_Imei(imei, FLASH_NB_IMEI_LEN); + Get_Iot_Imei(imei, FLASH_IOT_IMEI_LEN); String2Hex(temp, imei); // 将字符串转为十六进制字符串 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]); @@ -1167,7 +1170,7 @@ rt_err_t Handle_Valve_Add(struct Ml307_Ops *ops) char imei[16] = {0}; char temp[32] = "0"; rt_uint8_t cnt = Flash_Get_Valve_Num(); - Get_Iot_Imei(imei, FLASH_NB_IMEI_LEN); + Get_Iot_Imei(imei, FLASH_IOT_IMEI_LEN); String2Hex(temp, imei); // 将字符串转为十六进制字符串 if (cnt >= 1) @@ -1229,7 +1232,7 @@ rt_err_t Handle_Valve_Replace(struct Ml307_Ops *ops) char imei[16] = {0}; char temp[32] = "0"; LOG_I("服务器下发更换阀门设备"); - Get_Iot_Imei(imei, FLASH_NB_IMEI_LEN); + Get_Iot_Imei(imei, FLASH_IOT_IMEI_LEN); String2Hex(temp, imei); // 将字符串转为十六进制字符串 rt_memcpy(data, (ops->recv->recv_data.res_data + 2), (2 * FLASH_VALVE_MAC_ADDR_LEN + 1)); LOG_HEX("data", 16, data, sizeof(data)); @@ -1296,7 +1299,7 @@ rt_err_t Handle_Remove_Valve(struct Ml307_Ops *ops) char imei[16] = {0}; char temp[32] = "0"; rt_uint8_t cnt = Flash_Get_Valve_Num(); - Get_Iot_Imei(imei, FLASH_NB_IMEI_LEN); + Get_Iot_Imei(imei, FLASH_IOT_IMEI_LEN); String2Hex(temp, imei); // 将字符串转为十六进制字符串 LOG_I("接收到服务器下发移除阀门指令"); @@ -1352,7 +1355,7 @@ void Handle_Error(struct Ml307_Ops *ops, rt_err_t ret) char imei[16] = {0}; char temp[32] = "0"; - Get_Iot_Imei(imei, FLASH_NB_IMEI_LEN); + Get_Iot_Imei(imei, FLASH_IOT_IMEI_LEN); String2Hex(temp, imei); // 将字符串转为十六进制字符串 ops->Resp(ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_ML307, ops->recv->cmd, temp, RESPONSE_CODE_PARSE_FAIL); } @@ -1676,9 +1679,20 @@ static void Ml307_Life_Thread_Entry(void *parameter) ret = rt_sem_take(ml307_disconnect_sem, RT_WAITING_FOREVER); if (ret == RT_EOK) { + LOG_D("重连网络中...\n"); if (ml307_conncet_tcp_flag != RT_TRUE) { - LOG_D("重连网络中...\n"); + if(ml307_disconnect_pdp_flag) + { + at_response_t resp = at_create_resp(32, 0, 5000); + if (resp == RT_NULL) + { + LOG_E("No memory for response structure!"); + at_delete_resp(resp); + } + at_obj_exec_cmd(device->client, resp, "AT+MIPCALL=1,1"); + at_delete_resp(resp); + } device->class->device_ops->control(device, AT_DEVICE_CTRL_NET_DISCONN, RT_NULL); // 先关闭,再处理 if (device->class->device_ops->control(device, AT_DEVICE_CTRL_NET_CONN, RT_NULL) == RT_EOK) { @@ -1706,9 +1720,9 @@ int BSP_Ml307_Thread_Init(void) rt_err_t ret; Ml307_Event_Init(); - rt_uint32_t nb_upload_time = (uint16_t)Flash_Get_SysCfg(kIotUploadCycleId); - unsigned long timeout = nb_upload_time * 60 * RT_TICK_PER_SECOND; - LOG_I("上报服务器周期:%d分钟", nb_upload_time); + rt_uint32_t iot_upload_time = (uint16_t)Flash_Get_SysCfg(kIotUploadCycleId); + unsigned long timeout = iot_upload_time * 60 * RT_TICK_PER_SECOND; + LOG_I("上报服务器周期:%d分钟", iot_upload_time); ml307_mutex = rt_mutex_create("ml307_mutex", RT_IPC_FLAG_FIFO); if (ml307_mutex == RT_NULL) { diff --git a/bsp/src/bsp_mq.c b/bsp/src/bsp_mq.c index 6eeb1de..57fc12e 100644 --- a/bsp/src/bsp_mq.c +++ b/bsp/src/bsp_mq.c @@ -2,7 +2,7 @@ * @Author : stark1898y 1658608470@qq.com * @Date : 2024-06-18 15:48:01 * @LastEditors: mbw && 1600520629@qq.com - * @LastEditTime: 2024-12-25 17:10:33 + * @LastEditTime: 2025-01-04 17:35:21 * @FilePath: \ble_bjq_ch303rct6_ml307\bsp\src\bsp_mq.c * @Description : * @@ -45,7 +45,7 @@ uint16_t Get_Gas_VoltageInt1000x(void) uint16_t Get_Gas_VoltageAdcInt1000x(void) { rt_uint16_t voltage_adc = (Get_ADC_Average(kGasAdc) * 3.3 / 4096) * 1000; - LOG_D("Get_Gas_VoltageAdcInt1000x = %04d", voltage_adc); + LOG_D("Get_Gas_VoltageAdcInt1000x = %04d", voltage_adc); return voltage_adc; } @@ -197,7 +197,7 @@ int BSP_MQ_Init(void) #endif #ifdef TEST_ENABLE -static void TEST_MQ_EndOfLife(void) +void TEST_MQ_EndOfLife(void) { Sensor_device.end_of_life = 1; }