From 5e5ecc7d30c06c9ff8ecee7a27ed8577988c0e18 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: Fri, 10 Jan 2025 09:52:43 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=86=E4=BF=9D=E6=B4=BB=E6=AF=8F=E9=9A=9430?= =?UTF-8?q?min=E9=92=9F3=E9=87=8D=E6=96=B0=E5=90=AF=E5=8A=A8=E4=B8=80?= =?UTF-8?q?=E4=B8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- applications/main.c | 3 ++- bsp/inc/bsp_nt26k.h | 1 + bsp/src/at_device_nt26k.c | 45 +++++++++---------------------- bsp/src/bsp_nt26k.c | 31 ++++++++++++++++++--- libraries/hal_drivers/drv_usart.c | 4 +-- 5 files changed, 45 insertions(+), 39 deletions(-) diff --git a/applications/main.c b/applications/main.c index f0835af..a9197ce 100644 --- a/applications/main.c +++ b/applications/main.c @@ -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; diff --git a/bsp/inc/bsp_nt26k.h b/bsp/inc/bsp_nt26k.h index 110cd22..9a37901 100644 --- a/bsp/inc/bsp_nt26k.h +++ b/bsp/inc/bsp_nt26k.h @@ -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; diff --git a/bsp/src/at_device_nt26k.c b/bsp/src/at_device_nt26k.c index c067dc1..0e10324 100644 --- a/bsp/src/at_device_nt26k.c +++ b/bsp/src/at_device_nt26k.c @@ -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); // 通知初始化完成 } diff --git a/bsp/src/bsp_nt26k.c b/bsp/src/bsp_nt26k.c index 00ea14b..b6b58c3 100644 --- a/bsp/src/bsp_nt26k.c +++ b/bsp/src/bsp_nt26k.c @@ -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) { diff --git a/libraries/hal_drivers/drv_usart.c b/libraries/hal_drivers/drv_usart.c index 1597bb4..6498f22 100644 --- a/libraries/hal_drivers/drv_usart.c +++ b/libraries/hal_drivers/drv_usart.c @@ -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;