From ec156e3cb3165c3475d27ed286c98792a12251f6 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=E5=AD=99=E6=98=A5=E9=98=B3?= Date: Mon, 13 Oct 2025 13:00:31 +0800 Subject: [PATCH] =?utf8?q?ppp=E8=87=AA=E5=8A=A8=E6=8B=A8=E5=8F=B7=EF=BC=8C?= =?utf8?q?=E5=8F=A6=E5=A4=96=E5=8F=AA=E6=9C=89ppp=E8=81=94=E9=80=9A?= =?utf8?q?=E6=89=8D=E8=AE=BE=E7=BD=AEnetwork=5Fon?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- code/sdk/zhihui/ppp/src/ppp_api.c | 5 +-- code/sdk/zhihui/ppp/src/ppp_lwip.c | 17 ++++++++++ code/sdk/zhihui/tcptest/src/zhihui_tcp_test.c | 33 ++++++++++++++++--- 3 files changed, 48 insertions(+), 7 deletions(-) diff --git a/code/sdk/zhihui/ppp/src/ppp_api.c b/code/sdk/zhihui/ppp/src/ppp_api.c index b7e9a09b8..3d24246d8 100644 --- a/code/sdk/zhihui/ppp/src/ppp_api.c +++ b/code/sdk/zhihui/ppp/src/ppp_api.c @@ -239,7 +239,8 @@ errcode_t zhihui_ppp_init(const ppp_config_t *config) ppp_api_update_all_runtime_status(); ppp_get_network_signal_info(); - + + ppp_start_dial(); #endif return ERRCODE_SUCC; @@ -1693,7 +1694,7 @@ errcode_t ppp_api_update_network_status(void) // 根据网络注册状态设置网络连接状态 uint8_t network_on = (network_status == 1 || network_status == 5) ? 1 : 0; - cat1_api_runtime_set_cat1_networkstat(network_on); + // cat1_api_runtime_set_cat1_networkstat(network_on); cat1_api_runtime_set_cat1_networktype(network_status); PPP_DEBUG_INFO("Updated network status (CEREG): %d, network_on: %d", network_status, network_on); diff --git a/code/sdk/zhihui/ppp/src/ppp_lwip.c b/code/sdk/zhihui/ppp/src/ppp_lwip.c index e0ff8b79f..c694fcb63 100644 --- a/code/sdk/zhihui/ppp/src/ppp_lwip.c +++ b/code/sdk/zhihui/ppp/src/ppp_lwip.c @@ -4,6 +4,7 @@ #include "ppp_debug.h" #include "ppp_serial.h" #include "ppp_power_ctl.h" // 添加电源控制头文件 +#include "ppp_cat1_api.h" // 添加cat1_api头文件,用于更新runtime状态 #include "securec.h" #include "osal_addr.h" // 添加OSAL内存管理头文件 #include "osal_timer.h" // 添加OSAL时间函数头文件 @@ -499,6 +500,10 @@ ppp_error_t ppp_lwip_disconnect(void) /* 停止连接监控 */ ppp_lwip_stop_connection_monitor(); + /* 清空runtime状态 */ + cat1_api_runtime_set_cat1_networkstat(0); + PPP_DEBUG_INFO("PPP runtime: network_on cleared to 0"); + err_t err = pppapi_close(g_lwip_ctx.ppp_pcb, 0); if (err != ERR_OK) { PPP_DEBUG_ERROR("Failed to close PPP connection: %d", err); @@ -720,6 +725,10 @@ static void ppp_lwip_status_callback(ppp_pcb *pcb, int err_code, void *ctx) g_lwip_ctx.connected = false; event.type = PPP_LWIP_EVENT_DISCONNECTED; PPP_DEBUG_INFO("PPP connection disconnected (phase DISCONNECT)"); + + /* 清空runtime状态 */ + cat1_api_runtime_set_cat1_networkstat(0); + PPP_DEBUG_INFO("PPP runtime: network_on cleared (phase DISCONNECT)"); break; default: @@ -765,6 +774,10 @@ static void ppp_lwip_link_status_callback(ppp_pcb *pcb, int err_code, void *ctx) PPP_DEBUG_WARN("PPP link down: %d", err_code); g_lwip_ctx.connected = false; + /* 清空runtime状态 */ + cat1_api_runtime_set_cat1_networkstat(0); + PPP_DEBUG_INFO("PPP runtime: network_on cleared (link down)"); + /* 通知链路断开 */ if (g_lwip_ctx.event_callback) { ppp_lwip_event_t event; @@ -927,6 +940,10 @@ static void ppp_lwip_netif_status_callback(struct netif *netif) (g_lwip_ctx.remote_ip >> 8) & 0xFF, (g_lwip_ctx.remote_ip >> 16) & 0xFF, (g_lwip_ctx.remote_ip >> 24) & 0xFF); + + // ⚠️ 网络连接成功,更新runtime状态 + cat1_api_runtime_set_cat1_networkstat(1); + PPP_DEBUG_INFO("PPP runtime: network_on set to 1"); } } } diff --git a/code/sdk/zhihui/tcptest/src/zhihui_tcp_test.c b/code/sdk/zhihui/tcptest/src/zhihui_tcp_test.c index 482482e1e..f47db5c92 100644 --- a/code/sdk/zhihui/tcptest/src/zhihui_tcp_test.c +++ b/code/sdk/zhihui/tcptest/src/zhihui_tcp_test.c @@ -38,9 +38,7 @@ #define TCP_TIMER_CREATE(id, cb, arg, period, cycle) (*(id) = 0) /* 简化实现 */ #define TCP_TIMER_DELETE(id) /* 简化实现 */ #define TCP_TASK_CREATE(func, arg, name, size) \ - do { \ - osal_kthread_create((osal_kthread_handler)func, arg, name, size); \ - } while(0) + osal_kthread_create((osal_kthread_handler)func, arg, name, size) #define TCP_SLEEP_MS(ms) osal_msleep(ms) #define TCP_STRERROR(err) "socket error" @@ -351,7 +349,19 @@ static errcode_t tcp_test_create_connection_threads(uint16_t conn_id) } *send_arg = conn_id; - TCP_TASK_CREATE(tcp_test_send_worker, send_arg, "tcp_send", 4096); + // ⚠️ 减小栈大小:4096 -> 2048,节省内存 + osal_task *send_task = TCP_TASK_CREATE(tcp_test_send_worker, send_arg, "tcp_send", 2048); + if (!send_task) { + ZHIHUI_TCP_LOG_ERROR("[连接 %03d] 创建发送线程失败 (内存不足)", conn_id); + free(send_arg); + TCP_CLOSE(conn->socket_fd); + conn->connected = false; + TCP_MUTEX_LOCK(g_tcp_stats_mutex); + g_tcp_test_manager.global_stats.failed_connections++; + g_tcp_test_manager.global_stats.successful_connections--; + TCP_MUTEX_UNLOCK(g_tcp_stats_mutex); + return ERRCODE_FAIL; + } // 创建接收线程 uint16_t *recv_arg = malloc(sizeof(uint16_t)); @@ -362,8 +372,21 @@ static errcode_t tcp_test_create_connection_threads(uint16_t conn_id) } *recv_arg = conn_id; - TCP_TASK_CREATE(tcp_test_recv_worker, recv_arg, "tcp_recv", 4096); + osal_task *recv_task = TCP_TASK_CREATE(tcp_test_recv_worker, recv_arg, "tcp_recv", 2048); + if (!recv_task) { + ZHIHUI_TCP_LOG_ERROR("[连接 %03d] 创建接收线程失败 (内存不足)", conn_id); + free(recv_arg); + free(send_arg); + TCP_CLOSE(conn->socket_fd); + conn->connected = false; + TCP_MUTEX_LOCK(g_tcp_stats_mutex); + g_tcp_test_manager.global_stats.failed_connections++; + g_tcp_test_manager.global_stats.successful_connections--; + TCP_MUTEX_UNLOCK(g_tcp_stats_mutex); + return ERRCODE_FAIL; + } + ZHIHUI_TCP_LOG_INFO("[连接 %03d] 发送和接收线程创建成功", conn_id); return ERRCODE_SUCC; } /** -- 2.17.1