/* * 模块名称:CH395F Driver Test Suite * 模块功能:CH395F 驱动各功能模块的测试入口,分阶段组织测试用例, * 覆盖 SPI 命令路径、协议栈配置、Socket 状态机、大文件传输、 * 边界条件、KeepAlive、PHY 链路恢复等,基于单连接 socket 模式 * 适用平台:STM32F4 系列(CH395F 以太网芯片) * 作者:王建锋 * 创建日期:2026-07-19 * 修改记录: * 2026-07-22 全面重构为单连接模式,增加大文件传输、边界条件等测试 * * === 测试阶段一览(硬件层 1~5 → NET 层 6~10,严格顺序执行) === * Phase | 层 | 描述 * ---------|----------|----------------------------------------------- * Phase 1 | 硬件层 | 独立运行:寄存器读写 + SPI 命令路径验证 * Phase 2 | 硬件层 | PC 配合:TCP Client 收发 + 关闭重连 * Phase 3 | 硬件层 | PC 配合:UDP Server Echo(60 轮动态源地址回显,HELLO 探针不计数) * Phase 4 | 硬件层 | PC 配合:DHCP 自动获取 IP * Phase 5 | 硬件层 | PC 配合:大文件分块回传(裸命令,tcp_server 配合) * Phase 6 | NET 层 | testTask:TCP Echo(单连接模式,基础收发验证) * Phase 7 | NET 层 | testTask:大文件传输(20KB+ 分块收发) * Phase 8 | NET 层 | testTask:Select/Poll I/O 多路复用 * Phase 9 | NET 层 | testTask:边界条件测试(零长度、DMA 边界、缓冲溢出) * Phase 10 | NET 层 | testTask:KeepAlive 超时断开测试 */ #ifndef __CH395F_TEST_H #define __CH395F_TEST_H #ifdef __cplusplus extern "C" { #endif #include /* * 阶段使能开关(取消注释即启用对应阶段) * * 构建模式互斥(详见 docs/CH395F_Test_Guide.md「构建模式与执行顺序」): * 硬件层模式(阶段 1~5):netTask 不创建,ch395fTestTask 独占 CH395F * NET 层模式 (阶段 6~10):完整网络栈,netTask 轮询 + ch395fTestTask 监听循环 * * 注意:同层内可多选(Phase 6~10 共享 testTask 循环); * Phase 4 (DHCP) 会改变 IP,必须独立运行; * 两层同时启用会在下方触发 #error。 */ /* ---- 硬件层(阶段 1~5)---- */ //#define ENABLE_PHASE1_TESTS /* [硬] 寄存器读写 + SPI 命令路径 */ //#define ENABLE_PHASE2_TESTS /* [硬] TCP Client 收发 + 关闭重连 */ //#define ENABLE_PHASE3_TESTS /* [硬] UDP Server Echo */ //#define ENABLE_PHASE4_TESTS /* [硬] DHCP 自动获取 IP(会改 IP!独立运行) */ #define ENABLE_PHASE5_TESTS /* [硬] 大文件传输(硬件层,PC 配合) */ /* ---- NET 层(阶段 6~10)---- */ //#define ENABLE_PHASE6_TESTS /* [网] TCP Echo(单连接基础收发) */ //#define ENABLE_PHASE7_TESTS /* [网] 大文件传输(20KB+ 分块) */ //#define ENABLE_PHASE8_TESTS /* [网] Select/Poll I/O 多路复用 */ //#define ENABLE_PHASE9_TESTS /* [网] 边界条件测试 */ //#define ENABLE_PHASE10_TESTS /* [网] KeepAlive 超时断开测试 */ #if defined(ENABLE_PHASE1_TESTS) || defined(ENABLE_PHASE2_TESTS) || \ defined(ENABLE_PHASE3_TESTS) || defined(ENABLE_PHASE4_TESTS) || \ defined(ENABLE_PHASE5_TESTS) #define ENABLE_HW_LAYER_TESTS 1 #endif #if defined(ENABLE_PHASE6_TESTS) || defined(ENABLE_PHASE7_TESTS) || \ defined(ENABLE_PHASE8_TESTS) || defined(ENABLE_PHASE9_TESTS) || \ defined(ENABLE_PHASE10_TESTS) #define ENABLE_NET_LAYER_TESTS 1 #endif #if defined(ENABLE_HW_LAYER_TESTS) && defined(ENABLE_NET_LAYER_TESTS) #error "硬件层(1~5)与NET层(6~10)测试互斥:请分两次构建,见 CH395F_Test_Guide 构建模式与执行顺序" #endif /* 测试统计 */ typedef struct { uint16_t total; uint16_t passed; uint16_t failed; } test_stats_t; extern test_stats_t g_test_stats; #define TEST_CHECK(cond, fmt, ...) do { \ g_test_stats.total++; \ if (cond) { \ g_test_stats.passed++; \ DBG_INFO("[PASS] " fmt, ##__VA_ARGS__); \ } else { \ g_test_stats.failed++; \ DBG_ERROR("[FAIL] " fmt, ##__VA_ARGS__); \ } \ } while (0) #define TEST_REPORT(name) do { \ DBG_INFO("=== %s: %d/%d PASSED (failed=%d) ===", \ name, g_test_stats.passed, g_test_stats.total, g_test_stats.failed); \ } while (0) #ifdef __cplusplus } #endif #endif /* __CH395F_TEST_H */