Initial commit: CCU621_M firmware project with BLE debug link support.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-07-08 17:28:36 +08:00
commit 9ceb218f80
1597 changed files with 724159 additions and 0 deletions
+172
View File
@@ -0,0 +1,172 @@
#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 FTPTLS 与业务 TCP 同 PDP */
/* -------------------------------------------------------------------------- */
/** 业务 TCPQIOPEN/QSSLOPEN、模组 QIACT)使用的 PDP context ID。 */
#ifndef EC200A_TCP_PDP_CTX_ID
#define EC200A_TCP_PDP_CTX_ID (1U)
#endif
/** FTPQFTPCFG、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
/** TLSQSSL*)使用的 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) FTPAT+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 / UFSQFUPL 与单次读写块长 */
/* -------------------------------------------------------------------------- */
/** `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+QISDE1 将 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 */