断网重连加了延时,最大60s

This commit is contained in:
小马_666 2025-02-14 11:44:02 +08:00
parent 2e72e72eb5
commit b82b191300
6 changed files with 110 additions and 10 deletions

View File

@ -46,6 +46,10 @@
// rt_kprintf("Compiled at: %s\n", __TIMESTAMP__); \ // rt_kprintf("Compiled at: %s\n", __TIMESTAMP__); \
// } while (0) // } while (0)
#ifndef MIN
#define MIN(a, b) ((a) < (b) ? (a) : (b))
#endif
typedef enum typedef enum
{ {
kPowerOnEvent, kPowerOnEvent,

View File

@ -1,3 +1,13 @@
/***
* @Author: mbw
* @Date: 2025-01-24 08:40:39
* @LastEditors: mbw && 1600520629@qq.com
* @LastEditTime: 2025-02-14 11:06:11
* @FilePath: \JT-DT-YD4N02A_RTT_MRS-NT26K\bsp\inc\bsp_h308.h
* @Description:
* @
* @Copyright (c) 2025 by ${git_name_email}, All Rights Reserved.
*/
/*** /***
* @Author: mbw * @Author: mbw
* @Date: 2025-01-24 08:40:39 * @Date: 2025-01-24 08:40:39
@ -26,6 +36,9 @@
#define H308_PWR_ON rt_pin_write(H308_PWR_PIN, PIN_HIGH) #define H308_PWR_ON rt_pin_write(H308_PWR_PIN, PIN_HIGH)
#define H308_PWR_OFF rt_pin_write(H308_PWR_PIN, PIN_LOW) #define H308_PWR_OFF rt_pin_write(H308_PWR_PIN, PIN_LOW)
// #define H308_PWR_ON rt_pin_write(H308_PWR_PIN, PIN_LOW)
// #define H308_PWR_OFF rt_pin_write(H308_PWR_PIN, PIN_HIGH)
#define H308_RST_ON rt_pin_write(H308_RST_PIN, PIN_LOW) #define H308_RST_ON rt_pin_write(H308_RST_PIN, PIN_LOW)
#define H308_RST_OFF rt_pin_write(H308_RST_PIN, PIN_HIGH) #define H308_RST_OFF rt_pin_write(H308_RST_PIN, PIN_HIGH)

View File

@ -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: 2025-02-13 08:55:43 * @LastEditTime: 2025-02-14 11:10:57
* @FilePath: \JT-DT-YD4N02A_RTT_MRS-NT26K\bsp\src\at_device_nt26k.c * @FilePath: \JT-DT-YD4N02A_RTT_MRS-NT26K\bsp\src\at_device_nt26k.c
* @Description : * @Description :
* *
@ -356,6 +356,10 @@ static int at_device_nt26k_connect_tcp(struct at_device *device)
{ {
nt26k_disconnect_pdp_flag = 1; nt26k_disconnect_pdp_flag = 1;
} }
if (err_code == 407)
{
LOG_W("请检查服务器");
}
} }
} }
} }

View File

@ -57,12 +57,34 @@ static uint8_t relay_cnt = 1;
static void _CommonBtnEvtCb(void *arg) static void _CommonBtnEvtCb(void *arg)
{ {
// static rt_uint8_t cnt = 0;
if (flex_button_event_read(&user_button[USER_BUTTON_0]) == FLEX_BTN_PRESS_CLICK) if (flex_button_event_read(&user_button[USER_BUTTON_0]) == FLEX_BTN_PRESS_CLICK)
{ {
if (SysControl.status == kAlarmEvent) if (SysControl.status == kAlarmEvent)
{ {
Send_Laser_Alarm_Event(KMuteEvent); Send_Laser_Alarm_Event(KMuteEvent);
} }
// cnt++;
// if (cnt == 1)
// {
// LED_G_NORMAL;
// }
// else if (cnt == 2)
// {
// LED_Y_FAULT;
// }
// else if (cnt == 3)
// {
// LED_R_ALARM;
// }
// else
// {
// LED_STOP(r);
// LED_STOP(g);
// LED_STOP(y);
// cnt = 0;
// }
} }
else if (flex_button_event_read(&user_button[USER_BUTTON_0]) == FLEX_BTN_PRESS_LONG_HOLD) else if (flex_button_event_read(&user_button[USER_BUTTON_0]) == FLEX_BTN_PRESS_LONG_HOLD)
{ {

View File

@ -1,3 +1,13 @@
/*
* @Author: mbw
* @Date: 2025-01-24 08:40:39
* @LastEditors: mbw && 1600520629@qq.com
* @LastEditTime: 2025-02-14 11:36:24
* @FilePath: \JT-DT-YD4N02A_RTT_MRS-NT26K\bsp\src\bsp_led.c
* @Description:
*
* Copyright (c) 2025 by ${git_name_email}, All Rights Reserved.
*/
#include "bsp_led.h" #include "bsp_led.h"
#include "rtthread.h" #include "rtthread.h"
#include "pin.h" #include "pin.h"

View File

@ -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: 2025-02-12 11:01:27 * @LastEditTime: 2025-02-14 10:10:31
* @FilePath: \JT-DT-YD4N02A_RTT_MRS-NT26K\bsp\src\bsp_nt26k.c * @FilePath: \JT-DT-YD4N02A_RTT_MRS-NT26K\bsp\src\bsp_nt26k.c
* @Description: * @Description:
* *
@ -372,7 +372,6 @@ int Data_Resp(struct Nt26k_Ops *ops, rt_uint8_t data_num, rt_uint8_t cmd, rt_uin
LOG_E("nt26k_conncet_tcp_flag error"); LOG_E("nt26k_conncet_tcp_flag error");
return -RT_ERROR; return -RT_ERROR;
} }
char data_buf[512] = {0}; char data_buf[512] = {0};
rt_int32_t len = rt_snprintf(data_buf, sizeof(data_buf), "%02X%02X%30s%02X", device_type, event_type, data, res); rt_int32_t len = rt_snprintf(data_buf, sizeof(data_buf), "%02X%02X%30s%02X", device_type, event_type, data, res);
@ -1464,6 +1463,7 @@ static void Nt26k_Life_Thread_Entry(void *parameter)
rt_err_t result = RT_ETIMEOUT; rt_err_t result = RT_ETIMEOUT;
rt_uint32_t delay_n = 0; rt_uint32_t delay_n = 0;
at_response_t resp = RT_NULL; at_response_t resp = RT_NULL;
rt_uint32_t retry_delay = 1000;
LOG_D("nt26k_life_thread entry\n"); LOG_D("nt26k_life_thread entry\n");
while (1) while (1)
@ -1483,6 +1483,8 @@ static void Nt26k_Life_Thread_Entry(void *parameter)
result = -RT_ETIMEOUT; result = -RT_ETIMEOUT;
goto __exit; goto __exit;
} }
device->class->device_ops->control(device, AT_DEVICE_RF_CLOSE, RT_NULL);
rt_thread_mdelay(RT_TICK_PER_SECOND);//这里如果有TCP连接先关掉TCP,没有返回错误无所谓
if (device->class->device_ops->control(device, AT_DEVICE_CTRL_WAKEUP, RT_NULL) == RT_EOK) if (device->class->device_ops->control(device, AT_DEVICE_CTRL_WAKEUP, RT_NULL) == RT_EOK)
{ {
if (device->class->device_ops->control(device, AT_DEVICE_CTRL_POWER_ON, RT_NULL) == RT_EOK) if (device->class->device_ops->control(device, AT_DEVICE_CTRL_POWER_ON, RT_NULL) == RT_EOK)
@ -1496,7 +1498,6 @@ static void Nt26k_Life_Thread_Entry(void *parameter)
result = -RT_ERROR; result = -RT_ERROR;
goto __exit; goto __exit;
} }
/* disable echo */ /* disable echo */
LOG_D("ATE0"); LOG_D("ATE0");
if (at_obj_exec_cmd(device->client, resp, "ATE0") != RT_EOK) if (at_obj_exec_cmd(device->client, resp, "ATE0") != RT_EOK)
@ -1542,6 +1543,54 @@ static void Nt26k_Life_Thread_Entry(void *parameter)
result = -RT_ETIMEOUT; result = -RT_ETIMEOUT;
goto __exit; goto __exit;
} }
rt_uint8_t cnt = 0;
/* check signal strength */
for (cnt = 0; cnt < 10; cnt++)
{
if (at_obj_exec_cmd(device->client, resp, "AT+CSQ") == RT_EOK)
{
int signal_strength = 0, err_rate = 0;
if (at_resp_parse_line_args_by_kw(resp, "+CSQ:", "+CSQ: %d,%d", &signal_strength, &err_rate) > 0)
{
if ((signal_strength != 99) && (signal_strength != 0))
{
break;
}
}
}
rt_thread_mdelay(1000);
}
if (cnt == 10)
{
LOG_E("%s device signal strength check failed", device->name);
result = -RT_ERROR;
goto __exit;
}
/* check the GPRS network is registered */
for (cnt = 0; cnt < 10; cnt++)
{
if (at_obj_exec_cmd(device->client, resp, "AT+CEREG?") == RT_EOK) // 60s内注册CS业务
{
int link_stat = 0;
if (at_resp_parse_line_args_by_kw(resp, "+CEREG:", "+CEREG: %*d,%d", &link_stat) > 0)
{
if ((link_stat == 1) || (link_stat == 5))
{
LOG_D("%s device GPRS is registered", device->name);
break;
}
}
}
rt_thread_mdelay(1000);
}
if (cnt == 10)
{
LOG_E("%s device GPRS is register failed", device->name);
result = -RT_ERROR;
goto __exit;
}
if (device->class->device_ops->control(device, AT_DEVICE_CTRL_NET_CONN, RT_NULL) == RT_EOK) if (device->class->device_ops->control(device, AT_DEVICE_CTRL_NET_CONN, RT_NULL) == RT_EOK)
{ {
LOG_D("重连网络成功\n"); LOG_D("重连网络成功\n");
@ -1549,15 +1598,12 @@ static void Nt26k_Life_Thread_Entry(void *parameter)
delay_n = 0; delay_n = 0;
nt26k_disconnect_retry_flag = 0; nt26k_disconnect_retry_flag = 0;
at_delete_resp(resp); at_delete_resp(resp);
retry_delay = 1000; // 重置重连延迟时间
rt_thread_mdelay(100); rt_thread_mdelay(100);
Nt26k_Send_Event(kNt26kHeartbeatEvent); Nt26k_Send_Event(kNt26kHeartbeatEvent);
} }
else else
{ {
if (device->class->device_ops->control(device, AT_DEVICE_RF_CLOSE, RT_NULL) == RT_EOK)
{
LOG_D("关闭模组功能");
}
result = -RT_ETIMEOUT; result = -RT_ETIMEOUT;
goto __exit; goto __exit;
} }
@ -1593,8 +1639,9 @@ static void Nt26k_Life_Thread_Entry(void *parameter)
at_delete_resp(resp); at_delete_resp(resp);
} }
nt26k_disconnect_retry_flag = 1; nt26k_disconnect_retry_flag = 1;
LOG_D("联网错误,等待10s后重连"); LOG_D("联网错误,等待%dms后重连", retry_delay);
rt_thread_mdelay(10000);//上一版本未加延时 rt_thread_mdelay(retry_delay);
retry_delay = MIN(retry_delay * 2, 60000); // 最大延迟60秒
delay_n++; delay_n++;
if (delay_n >= 360) // 连续重连大于1小时都不行则重启设备 if (delay_n >= 360) // 连续重连大于1小时都不行则重启设备
{ {