ppp自动拨号,另外只有ppp联通才设置network_on 2491/1 2491/head 2492/target/1
author孙春阳 <snickersun@163.com>
Mon, 13 Oct 2025 05:00:31 +0000 (13:00 +0800)
committer孙春阳 <snickersun@163.com>
Mon, 13 Oct 2025 05:00:31 +0000 (13:00 +0800)
code/sdk/zhihui/ppp/src/ppp_api.c
code/sdk/zhihui/ppp/src/ppp_lwip.c
code/sdk/zhihui/tcptest/src/zhihui_tcp_test.c

index b7e9a09..3d24246 100644 (file)
@@ -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);
     
index e0ff8b7..c694fcb 100644 (file)
@@ -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");
         }
     }
 }
index 482482e..f47db5c 100644 (file)
@@ -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;
 }
 /**