修复了网络参数的保存逻辑

This commit is contained in:
2026-09-10 14:21:07 +08:00
parent 2b80d34e74
commit 4515ee4c80
24 changed files with 1457 additions and 72 deletions
+1
View File
@@ -27,6 +27,7 @@ extern osEventFlagsId_t sys_evtHandle;
#define SYS_EVT_STORAGE_READY (1u << 1) /* defaultTask:FTL/FatFS 挂载完成 */
#define SYS_EVT_FTP_READY (1u << 2) /* ftpTask:lftpd_start 完成 */
#define SYS_EVT_TIMESYNC_READY (1u << 3) /* timeSyncTask:首次时间同步完成 */
#define SYS_EVT_NET_RECONFIG (1u << 4) /* UI:请求立即应用新网口配置(netTask 消费后重建网络) */
#ifdef __cplusplus
}
+34
View File
@@ -24,6 +24,20 @@
#define DBG_TAG "[NET_TASK]"
#include "dbg_log.h"
/*
* 函数功能:"立即应用网口配置"平台回调(注册给 net_cfg)
* 入口参数:无
* 返回值:无
* 限定条件:UI 保存成功后经 net_cfg_request_apply() 调用(任意任务上下文)
* 函数说明:只置事件位;真正的重建在主循环内完成(CH395F SPI 归 netTask 独占,
* UI 不得直接操作)
*/
static void net_reconfig_request_cb(void) {
if (sys_evtHandle != NULL) {
(void)osEventFlagsSet(sys_evtHandle, SYS_EVT_NET_RECONFIG);
}
}
/*
* 函数功能:CH395F 协议栈一次性初始化(两种构建模式共用)
* 入口参数:无
@@ -96,6 +110,10 @@ int net_stack_bring_up(void) {
(phy == CH395F_PHY_10M_HALF) ? "10M HALF" :
(phy == CH395F_PHY_DISCONN) ? "DISCONNECT" : "UNKNOWN");
/* 网络已重建完成、对外可用:递增代次号,通知各 TCP 服务(FTP/对时/远程显示)
* 旧 Socket 已随芯片复位失效、应重建监听 */
net_generation_inc();
return 0;
}
@@ -142,10 +160,26 @@ void net_task_func(void const *arg) {
osEventFlagsSet(sys_evtHandle, SYS_EVT_NET_READY);
}
/* 注册"立即应用网口配置"回调:UI 保存成功后经 net_cfg_request_apply() 触发 */
net_cfg_set_apply_cb(net_reconfig_request_cb);
DBG_INFO("netTask: started (single-socket mode)");
/* ==================== 主轮询循环 ==================== */
for (;;) {
/* UI 保存网口配置后请求立即应用:在此重建网络(新 IP/掩码/网关/MAC)。
* 重建完成后代次号已递增,各 TCP 服务据此重建监听;期间连接会断开(预期)。 */
if (sys_evtHandle != NULL
&& (osEventFlagsGet(sys_evtHandle) & SYS_EVT_NET_RECONFIG) != 0u) {
(void)osEventFlagsClear(sys_evtHandle, SYS_EVT_NET_RECONFIG);
DBG_INFO("netTask: apply new net config (re-init)");
if (net_stack_bring_up() == 0) {
(void)osEventFlagsSet(sys_evtHandle, SYS_EVT_NET_READY);
} else {
DBG_ERROR("netTask: re-init FAIL");
}
}
net_poll();
net_process_messages();
osDelay(1);
+12
View File
@@ -114,6 +114,9 @@ void time_sync_task(void *argument) {
}
for (;;) {
/* 记录本次监听对应的网络代次;代次变化(网络重建)则放弃旧监听重建 */
uint32_t gen = net_get_generation();
int ls = time_sync_open_listener();
if (ls < 0) {
DBG_ERROR("time_sync: open listener FAIL, retry later");
@@ -126,10 +129,19 @@ void time_sync_task(void *argument) {
do {
conn = net_accept(ls, NULL, NULL);
if (conn < 0) {
if (net_get_generation() != gen) {
net_close(ls); /* 网络重建:旧监听失效,回外层重建 */
break;
}
vTaskDelay(pdMS_TO_TICKS(200));
}
} while (conn < 0);
if (conn < 0) {
DBG_INFO("time_sync: network re-init, relisten");
continue;
}
time_sync_handle_conn(conn);
/* conn(单连接模式下即 ls)已被 net_close 释放,下次循环重建监听 */