增加网络配置界面

This commit is contained in:
2026-09-10 11:36:33 +08:00
parent 856b6f6426
commit 2b80d34e74
44 changed files with 2488 additions and 332 deletions
+30 -4
View File
@@ -17,6 +17,7 @@
#include "cmsis_os.h"
#include "net_socket.h"
#include "net_select.h"
#include "net_cfg.h"
#include "ch395f.h"
#include "sys_events.h"
@@ -27,14 +28,29 @@
* 函数功能:CH395F 协议栈一次性初始化(两种构建模式共用)
* 入口参数:无
* 返 回 值:0 - 成功,-1 - 失败
* 函数说明:net_init → MAC 打印 → PHY 强制 100M 全双工 → 广播网络就绪事件。
* 函数说明:net_cfg 加载(首启/无文件 = 工厂默认)→ net_init → MAC 回写
* 配置模块 → MAC 打印 → PHY 强制 100M 全双工 → 广播网络就绪事件。
* NET 层模式由 netTask 调用;硬件层模式(阶段 1~5)netTask 不创建,
* 由 testTask 调用后独占 CH395F。
*/
int net_stack_bring_up(void) {
const net_cfg_t *cfg;
char ip[16];
char mask[16];
char gw[16];
DBG_INFO("=== Network Init ===");
if (net_init("192.168.1.100", "255.255.255.0", "192.168.1.1") != 0) {
/* 加载网络配置(存储后端:NAND 上 FatFS 文件 /cfg/netcfg.bin;
* 首启/存储未就绪 = 工厂默认,与既有硬编码组网值一致) */
(void)net_cfg_load();
cfg = net_cfg_get();
net_cfg_fmt_ipv4(cfg->ip, ip, sizeof(ip));
net_cfg_fmt_ipv4(cfg->mask, mask, sizeof(mask));
net_cfg_fmt_ipv4(cfg->gw, gw, sizeof(gw));
if (net_init(ip, mask, gw, cfg->mac) != 0) {
DBG_ERROR("net init: FAIL");
return -1;
}
@@ -45,6 +61,10 @@ int net_stack_bring_up(void) {
DBG_INFO("MAC: %02X:%02X:%02X:%02X:%02X:%02X",
mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
/* 回写芯片实际 MAC 到配置模块(UI "网口设置"页只读影子,
* 不直接触 CH395F SPI——SPI 归 netTask 集中处理) */
net_cfg_set_active_mac(mac);
uint8_t ipinf[20];
ch395f_get_ip_inf(ipinf);
DBG_INFO("IP_INF: IP=%d.%d.%d.%d GW=%d.%d.%d.%d MASK=%d.%d.%d.%d",
@@ -95,7 +115,8 @@ int net_task_init(void) {
* 函数功能:网络任务主函数
* 入口参数:arg - FreeRTOS 传入参数(未使用)
* 返 回 值:无
* 函数说明:启动后先调用 net_stack_bring_up() 初始化 CH395F 协议栈,
* 函数说明:等待存储就绪(就绪屏障,10s 超时回退工厂默认,存储故障
* 不阻塞组网)→ net_stack_bring_up() 初始化 CH395F 协议栈,
* 再进入轮询循环处理网络事件。
* 仅 NET 层测试模式(阶段 6~10)会创建本任务;
* 硬件层模式下 netTask 不创建,CH395F 由 testTask 独占。
@@ -103,7 +124,12 @@ int net_task_init(void) {
void net_task_func(void const *arg) {
(void)arg;
osDelay(2000);
/* 配置在 NAND 的 FatFS 卷上:等存储就绪再读(取代原 2s 魔法延时);
* 超时(存储异常)继续以工厂默认组网,不卡网络启动 */
if (sys_evtHandle != NULL) {
(void)osEventFlagsWait(sys_evtHandle, SYS_EVT_STORAGE_READY,
osFlagsWaitAny, 10000u);
}
if (net_stack_bring_up() != 0) {
for (;;) {