9ceb218f80
Co-authored-by: Cursor <cursoragent@cursor.com>
173 lines
7.6 KiB
C
173 lines
7.6 KiB
C
|
||
#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 */
|