#ifndef EC200A_4G_CFG_H #define EC200A_4G_CFG_H #include "usart.h" /** * @file ec200a_4g_cfg.h * @brief EC200A 模组:串口选择、TCP/FTP/TLS 场景、FTP 轮询与 UFS 块长、非透传 TCP 分包与缓冲派生。 * 可在包含本头或 `ec200a_4g.h` 之前用 `#define 宏名 值` 覆盖下列默认值。 */ /* ========== 模组 UART 与调试(`ec200a_4g.c` 发送/排空等共用) ========== */ /** 1:在 `v_4g_send_data` / `u16_4g_recv_data` 等路径打印调试信息;0:关闭。开启时 printf 须走调试口,勿与模组口 COM_PORT_BS 共用 TX。 */ #ifndef TEST_BS_PRINTF_FLAG #define TEST_BS_PRINTF_FLAG (0) #endif /** 与 Quectel 模组通信的 USART 逻辑编号(见 `usart.h` 中 `E_USART_ID`,默认 UART12 接 4G)。 */ #ifndef COM_PORT_BS #define COM_PORT_BS E_USART_6 #endif /** `v_4g_send_data` 第一形参占位 ID;当前实现未区分多路,固定 0xFF 即可。 */ #ifndef ID_4G #define ID_4G (0xFFU) #endif /* -------------------------------------------------------------------------- */ /* 1) 透传 / QIOPEN 访问模式 */ /* -------------------------------------------------------------------------- */ /** Socket 数据路径:1 = UART 透传数据态;0 = 缓冲/命令模式(AT+QISEND / AT+QIRD)。 */ #ifndef EC200A_TCP_USE_TRANSPARENT_MODE #define EC200A_TCP_USE_TRANSPARENT_MODE (0) #endif /** AT+QIOPEN / AT+QSSLOPEN 最后一参「access_mode」:透传为 2,缓冲模式为 0(随 `EC200A_TCP_USE_TRANSPARENT_MODE` 自动选择)。 */ #if EC200A_TCP_USE_TRANSPARENT_MODE #define EC200A_TCP_QIOPEN_ACCESS_MODE (2) #else #define EC200A_TCP_QIOPEN_ACCESS_MODE (0) #endif /* -------------------------------------------------------------------------- */ /* 2) PDP:业务 TCP vs FTP;TLS 与业务 TCP 同 PDP */ /* -------------------------------------------------------------------------- */ /** 业务 TCP(QIOPEN/QSSLOPEN、模组 QIACT)使用的 PDP context ID。 */ #ifndef EC200A_TCP_PDP_CTX_ID #define EC200A_TCP_PDP_CTX_ID (1U) #endif /** FTP(QFTPCFG、QICSGP、QIACT、QIDEACT)使用的 PDP context ID;须与 `EC200A_TCP_PDP_CTX_ID` 不同,避免 FTP 去激活时拆掉业务 TCP。 */ #ifndef EC200A_FTP_PDP_CTX_ID #define EC200A_FTP_PDP_CTX_ID (2U) #endif /* 编译期约束:TCP 与 FTP 不得共用同一 PDP,否则 FTP 侧 QIDEACT/重配会拆掉业务 TCP。 */ #if (EC200A_TCP_PDP_CTX_ID) == (EC200A_FTP_PDP_CTX_ID) #error EC200A_FTP_PDP_CTX_ID must not equal EC200A_TCP_PDP_CTX_ID #endif /** TLS(QSSL*)使用的 PDP 与业务 TCP 相同,与 `EC200A_TCP_PDP_CTX_ID` 保持一致。 */ #define EC200A_SSL_PDP_CTX_ID EC200A_TCP_PDP_CTX_ID /** AT+QSSLCFG 等命令中的 SSL context 编号(模组侧 ctx)。 */ #ifndef EC200A_SSL_CTX_ID #define EC200A_SSL_CTX_ID (1) #endif /** AT+QSSLOPEN 使用的 clientID / 套接字索引(与明文 TCP 的 connectID 区分)。 */ #ifndef EC200A_SSL_CLIENT_ID #define EC200A_SSL_CLIENT_ID (4) #endif /* -------------------------------------------------------------------------- */ /* 3) FTP:AT+QFREAD / AT+QFWRITE 轮询(单次 sleep 与总等待次数) */ /* -------------------------------------------------------------------------- */ /** QFREAD/QFWRITE 收 UART 时,每轮循环内单次 `mSleep` 间隔(毫秒)。 */ #ifndef EC200A_FTP_UART_SLICE_WAIT_MS #define EC200A_FTP_UART_SLICE_WAIT_MS (25U) #endif /** 单次 `s16_qfread_at_slice` 调用内,最多执行「sleep + 收包」的次数;超时仍未见应答则本次读失败。 */ #ifndef EC200A_FTP_QFREAD_TOTAL_WAITS #define EC200A_FTP_QFREAD_TOTAL_WAITS (80U) #endif /** 单次 `s8_ec200a_qfwrite_log_bin` 调用内,等待 CONNECT/OK 等阶段的最多次数;超出则本次写失败。 */ #ifndef EC200A_FTP_QFWRITE_TOTAL_WAITS #define EC200A_FTP_QFWRITE_TOTAL_WAITS (200U) #endif /* -------------------------------------------------------------------------- */ /* 4) GetDiagnostics / UFS:QFUPL 与单次读写块长 */ /* -------------------------------------------------------------------------- */ /** `AT+QFUPL` 第三参数:UART 侧无数据输入超时(秒),手册范围 1~65535;分片发送时须大于单 PlatComm 周期可能间隔。 */ #ifndef EC200A_FTP_QFUPL_AT_TIMEOUT_SEC #define EC200A_FTP_QFUPL_AT_TIMEOUT_SEC (120U) #endif /** QFUPL 数据态下,单次向模组 UART 写入负载的上限(字节);0 表示按整块发送的旧策略(由上层决定)。 */ #ifndef EC200A_FTP_QFUPL_UART_SLICE_MAX #define EC200A_FTP_QFUPL_UART_SLICE_MAX (512U) #endif /** 模组 UFS 单次 `AT+QFREAD` / `AT+QFWRITE` 数据负载(字节)。FTP 升级 QFREAD 缓冲、日志 FAT 读块与 QFWRITE 上限均以此为界;须为 Flash `PACKET_SIZE` 的倍数且 ≤65535。 */ #ifndef EC200A_FTP_UFS_RW_CHUNK_BYTES #define EC200A_FTP_UFS_RW_CHUNK_BYTES (4096U) #endif #if !EC200A_TCP_USE_TRANSPARENT_MODE /* -------------------------------------------------------------------------- */ /* 5) 非透传 TCP:软重连、QISDE、应用分包、模组 AT 上限与接收环形区派生尺寸 */ /* -------------------------------------------------------------------------- */ /** 连续「仅 QICLOSE+QIOPEN 软重连」失败达到此次数后,才走全量 `v_bs_4G_data_init` 类驻网恢复。 */ #ifndef EC200A_TCP_SOFT_REOPEN_FAIL_MAX #define EC200A_TCP_SOFT_REOPEN_FAIL_MAX (5U) #endif /** AT+QISDE:1 将 QISEND 的 TCP 负载回显到模组 UART(调试用);0 关闭(初始化通常下发 AT+QISDE=0)。 */ #ifndef EC200A_QISDE_ECHO #define EC200A_QISDE_ECHO (0U) #endif /** 应用层单次 TCP 读/写意向上限(字节);`ec200a_4g.c` 内会再钳位到 `EC200A_QIRD_AT_READ_MAX` / `EC200A_QISEND_AT_LEN_MAX`。 */ #ifndef EC200A_TCP_APP_RW_MAX #define EC200A_TCP_APP_RW_MAX (2048U) #endif /** AT+QIRD 第二参数「欲读长度」上限(Quectel 文档常见上限 1500);超过模组可能直接 ERROR。 */ #ifndef EC200A_QIRD_AT_READ_MAX #define EC200A_QIRD_AT_READ_MAX (1500U) #endif /** AT+QISEND 单次发送负载上限(字节,Quectel 常见上限 1460)。 */ #ifndef EC200A_QISEND_AT_LEN_MAX #define EC200A_QISEND_AT_LEN_MAX (1460U) #endif /** 读到 +QIRD: 0(缓冲无数据)后额外延时(毫秒),减轻空轮询;0 表示不延时。 */ #ifndef EC200A_QIRD_EMPTY_POLL_DELAY_MS #define EC200A_QIRD_EMPTY_POLL_DELAY_MS (0U) #endif /** 存放 AT+QIRD 应答及 +QIRD: 前缀等 URC 的缓冲上限:`EC200A_TCP_APP_RW_MAX` + 固定余量(字节)。 */ #define EC200A_QIRD_RSP_MAX ((EC200A_TCP_APP_RW_MAX) + 384U) /** 非透传下 QIOPEN/QSSLOPEN 应答在单任务内拼接用的累计缓冲大小(字节)。 */ #define EC200A_QIOPEN_ACCUM_SZ (640U) #if EC200A_QISDE_ECHO /** QISDE=1 时:等待 `>` / SEND OK 的环形接收区容量(字节),需容纳回显的应用数据。 */ #define EC200A_QISEND_WAIT_RB_SZ ((EC200A_TCP_APP_RW_MAX) * 2U + 512U) /** QISDE=1 时:`memmove` 收缩接收区时保留的尾部字节数,避免截断半条 URC。 */ #define EC200A_QISEND_RB_TAIL_KEEP ((EC200A_TCP_APP_RW_MAX) / 2U + 256U) #else /** QISDE=0 时:等待 QISEND 提示与应答的接收缓冲容量(字节)。 */ #define EC200A_QISEND_WAIT_RB_SZ (896U) /** QISDE=0 时:接收区收缩时保留的尾部字节数(字节)。 */ #define EC200A_QISEND_RB_TAIL_KEEP (384U) #endif #endif /* !EC200A_TCP_USE_TRANSPARENT_MODE */ #endif /* EC200A_4G_CFG_H */