将保活每隔30min钟3重新启动一下

This commit is contained in:
小马_666 2025-01-10 09:52:43 +08:00
parent 0ef073439e
commit 5e5ecc7d30
5 changed files with 45 additions and 39 deletions

View File

@ -2,7 +2,7 @@
* @Author: mbw
* @Date: 2024-10-23 17:14:16
* @LastEditors: mbw && 1600520629@qq.com
* @LastEditTime: 2025-01-09 14:50:14
* @LastEditTime: 2025-01-09 15:41:13
* @FilePath: \JT-DT-YD4N02A_RTT_MRS-NT26K\applications\main.c
* @Descrt_thread_
*
@ -348,6 +348,7 @@ int main(void)
else if (received_event & Get_Sys_Event_Flag(kFaultEvent)) // 故障
{
LOG_D("故障模式");
if (Flash_GetNum_Records(kRecordSensoEndOfLife) != 1)//当设备失效时,只上报设备失效的故障,其他故障不上报
{
SysControl.last_status = SysControl.status;

View File

@ -202,6 +202,7 @@ struct Nt26k_Ops
extern struct Nt26k_Ops nt26k_ops;
extern rt_sem_t nt26k_recv_sem;
extern rt_sem_t nt26k_recv_heart_sem;
extern rt_sem_t nt26k_disconnect_sem;
extern rt_uint8_t nt26k_conncet_tcp_flag;
extern rt_uint8_t nt26k_disconnect_pdp_flag;

View File

@ -2,8 +2,8 @@
* @Author : stark1898y 1658608470@qq.com
* @Date : 2024-09-04 13:33:49
* @LastEditors: mbw && 1600520629@qq.com
* @LastEditTime: 2025-01-08 17:33:11
* @FilePath: \JT-DT-YD4N02A_RTT_MRS-4G\bsp\src\at_device_nt26k.c
* @LastEditTime: 2025-01-10 09:35:07
* @FilePath: \JT-DT-YD4N02A_RTT_MRS-NT26K\bsp\src\at_device_nt26k.c
* @Description :
*
* Copyright (c) 2024 by yzy, All Rights Reserved.
@ -218,6 +218,11 @@ static void urc_tcp_recv(struct at_client *client, const char *data, rt_size_t s
{
rt_sem_release(nt26k_recv_sem);
}
else
{
// 接收到的是心跳包
rt_sem_release(nt26k_recv_heart_sem);
}
}
else
{
@ -378,28 +383,8 @@ int at_send_data(struct at_device *device, const char *data, rt_size_t size)
int nt26k_check_link_status(struct at_device *device)
{
at_response_t resp = RT_NULL;
struct at_device_nt26k *nt26k = RT_NULL;
int result = -RT_ERROR;
nt26k = (struct at_device_nt26k *)device->user_data;
if (!nt26k->power_status) // power off
{
LOG_D("the power is off,power on device");
device->class->device_ops->control(device, AT_DEVICE_CTRL_POWER_ON, RT_NULL); // 开启设备
}
if (nt26k->sleep_status) // is sleep status
{
if (nt26k->pwr_key_pin != -1)
{
rt_pin_write(nt26k->pwr_key_pin, PIN_LOW);
rt_thread_mdelay(100);
rt_pin_write(nt26k->pwr_key_pin, PIN_HIGH);
rt_thread_mdelay(100);
rt_pin_write(nt26k->pwr_key_pin, PIN_LOW);
}
}
resp = at_create_resp(64, 0, rt_tick_from_millisecond(300));
if (resp == RT_NULL)
{
@ -420,15 +405,10 @@ int nt26k_check_link_status(struct at_device *device)
}
}
}
if (nt26k->sleep_status) // is sleep status
if (at_obj_exec_cmd(device->client, resp, "AT+QICFG=\"tcp/keepalive\",1,1800,50,5") != RT_EOK)//保活期为最大30min故30min重设一下
{
if (at_obj_exec_cmd(device->client, resp, "AT+CPSMS=1,,,,\"00100010\"") != RT_EOK)
{
LOG_D("startup entry into sleep fail.");
}
result = -RT_ERROR;
}
at_delete_resp(resp);
return (result);
@ -484,7 +464,7 @@ __exit:
*/
static void nt26k_check_link_status_entry(void *parameter)
{
#define NT26K_LINK_DELAY_TIME (60 * RT_TICK_PER_SECOND)
#define NT26K_LINK_DELAY_TIME (30 * 60 * RT_TICK_PER_SECOND)
#define NT26K_LINK_STATUS_OK 1
@ -512,6 +492,7 @@ static void nt26k_check_link_status_entry(void *parameter)
{
netdev_low_level_set_link_status(netdev, (NT26K_LINK_STATUS_OK == link_status));
}
rt_thread_delay(NT26K_LINK_DELAY_TIME);
}
}
@ -862,7 +843,7 @@ static void nt26k_init_thread_entry(void *parameter)
goto __exit;
}
/*设置保活信息*/
if (at_obj_exec_cmd(device->client, resp, "AT+QICFG=\"tcp/keepalive\",1,1800,100,3") != RT_EOK)
if (at_obj_exec_cmd(device->client, resp, "AT+QICFG=\"tcp/keepalive\",1,1800,50,5") != RT_EOK)
{
result = -RT_ERROR;
goto __exit;
@ -1107,7 +1088,7 @@ static void nt26k_init_thread_entry(void *parameter)
/* set network interface device status and address information */
nt26k_netdev_set_info(device->netdev);
/* check and create link staus sync thread */
// nt26k_netdev_check_link_status(device->netdev);
nt26k_netdev_check_link_status(device->netdev);
LOG_I("%s device network initialize success.", device->name);
rt_completion_done(&nt26k_init_complate); // 通知初始化完成
}

View File

@ -2,8 +2,8 @@
* @Author: mbw
* @Date: 2024-10-09 08:42:14
* @LastEditors: mbw && 1600520629@qq.com
* @LastEditTime: 2025-01-09 09:39:59
* @FilePath: \JT-DT-YD4N02A_RTT_MRS-4G\bsp\src\bsp_nt26k.c
* @LastEditTime: 2025-01-10 09:03:13
* @FilePath: \JT-DT-YD4N02A_RTT_MRS-NT26K\bsp\src\bsp_nt26k.c
* @Description:
*
* Copyright (c) 2024 by ${git_name_email}, All Rights Reserved.
@ -60,6 +60,7 @@ static struct rt_thread nt26k_life_thread;
struct rt_event at_device_event;
rt_sem_t nt26k_recv_sem;
rt_sem_t nt26k_recv_heart_sem;// 用于接收心跳信号
rt_sem_t nt26k_disconnect_sem;
static rt_timer_t nt26k_timer; // 上报心跳
static rt_timer_t nt26k_upload_timer; // 更新本地时间定时器
@ -795,7 +796,25 @@ int Nt26k_Process_Events (Nt26kEvent nt26k_recv_event, struct at_device *device,
LOG_E ("nt26k send cmd failed\n");
}
else
return RT_EOK; // 函数执行完毕返回0
{
if (rt_strcmp (event->event_name, "定时心跳事件") == RT_EOK)//定时心跳是有回应的
{
if (rt_sem_take(nt26k_recv_heart_sem, 5000) == RT_EOK)
{
LOG_D ("收到心跳回复\n");
return RT_EOK; // 函数执行完毕返回0
}
else
{
LOG_E ("nt26k send cmd failed\n");
continue;
}
}
else
{
return RT_EOK; // 函数执行完毕返回0
}
}
}
}
else
@ -1484,7 +1503,11 @@ int BSP_Nt26k_Thread_Init (void)
{
LOG_E ("nt26k_recv_sem create failed");
}
nt26k_recv_heart_sem = rt_sem_create ("nt26k_recv_heart", 0, RT_IPC_FLAG_PRIO);
if (nt26k_recv_heart_sem == RT_NULL)
{
LOG_E ("nt26k_recv_heart_sem create failed");
}
nt26k_disconnect_sem = rt_sem_create ("nt26k_life", 0, RT_IPC_FLAG_PRIO);
if (nt26k_disconnect_sem == RT_NULL)
{

View File

@ -510,11 +510,11 @@ int rt_hw_usart_init(void)
uart_obj[i].serial.ops = &ch32_uart_ops;
uart_obj[i].serial.config = config;
if (uart_obj[i].config->name == "uart1")
if (rt_memcmp(uart_obj[i].config->name, "uart1", rt_strlen("uart1")) == 0)
{
uart_obj[i].serial.config.baud_rate = BAUD_RATE_115200;
}
else if (uart_obj[i].config->name == "uart2")
else if (rt_memcmp(uart_obj[i].config->name, "uart2", rt_strlen("uart2")) == 0)
{
// BAUD_RATE_921600下串口终端 方向键有问题
uart_obj[i].serial.config.baud_rate = BAUD_RATE_460800;