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
File diff suppressed because it is too large Load Diff
+124
View File
@@ -0,0 +1,124 @@
/**
* @file fc41d_ble.h
* @brief FC41D 蓝牙调试:配置宏 + 对外接口(仅 BLE_DEBUG_EN=1 有效)
*
* 分层:
* - 本头文件:编译配置、DIP 选路、comm_link 后端 API
* - fc41d_ble.cAT 命令、模组电源、BLE 状态机、QBLETRANMODE 透传收发(内部 static
*/
#ifndef FC41D_BLE_H
#define FC41D_BLE_H
#include <stdint.h>
#include "publicdata/public_define.h"
#if BLE_DEBUG_EN
#include "usart.h"
/* ---------- 硬件 / 串口 ---------- */
#ifndef FC41D_USART_ID
#define FC41D_USART_ID E_USART_7 /* UART7 PE1/PE0,接 FC41D */
#endif
#ifndef FC41D_UART_HW_NUM
#define FC41D_UART_HW_NUM 7U /* UART7 PE1/PE0 */
#endif
#ifndef FC41D_RST_PULSE_MS
#define FC41D_RST_PULSE_MS 200U /* 复位脉冲高电平保持时间 */
#endif
#ifndef FC41D_POWER_ON_DELAY_MS
#define FC41D_POWER_ON_DELAY_MS 5000U /* 复位释放后等待模组启动 */
#endif
#ifndef FC41D_UART_BAUD
#define FC41D_UART_BAUD 115200U /* UART7 固定波特率,不再做双波特率探测 */
#endif
#ifndef FC41D_AT_CMD_WAIT_MS
#define FC41D_AT_CMD_WAIT_MS 1500U /* 常规 AT 阻塞等待 */
#endif
#ifndef FC41D_GATT_AT_WAIT_MS
#define FC41D_GATT_AT_WAIT_MS 1200U /* QBLEGATTSNTFY 阻塞等待 */
#endif
#ifndef FC41D_AT_INIT_WAIT_MS
#define FC41D_AT_INIT_WAIT_MS 8000U /* QBLEINIT 栈初始化较慢,单独加长 */
#endif
#ifndef FC41D_STAT_POLL_MS
#define FC41D_STAT_POLL_MS 10000U /* 等待连接时 QBLESTAT 兜底查询间隔 */
#endif
#ifndef FC41D_CONNECT_WAIT_MS
#define FC41D_CONNECT_WAIT_MS (120000U) /* 等待手机连接最长时间 */
#endif
/* ---------- BLE GATT / 广播名(Quectel 手册 §4.2.1 外设示例) ---------- */
#ifndef FC41D_BLE_NAME
#define FC41D_BLE_NAME "CCU621_Debug"
#endif
#ifndef FC41D_SRV_UUID
#define FC41D_SRV_UUID "fff1"
#endif
#ifndef FC41D_CHAR_WRITE_UUID
#define FC41D_CHAR_WRITE_UUID "fff2" /* 手机 → 设备 Write */
#endif
#ifndef FC41D_CHAR_NOTIFY_UUID
#define FC41D_CHAR_NOTIFY_UUID "fff3" /* 设备 → 手机 Notify */
#endif
/** QBLETRANMODE 优先尝试的 UUID(部分固件需 fff2 而非 fff3 */
#ifndef FC41D_TRAN_UUID
#define FC41D_TRAN_UUID FC41D_CHAR_WRITE_UUID
#endif
/** 1=连接后 AT+QBLETRANMODE 透传(手册);0=GATT 非透传 +QBLERECV */
#ifndef FC41D_BLE_USE_TRANSPARENT
#define FC41D_BLE_USE_TRANSPARENT 1
#endif
#ifndef BLE_DEBUG_PRINT
#define BLE_DEBUG_PRINT 1
#endif
#if BLE_DEBUG_PRINT
#include <stdio.h>
#define BT_PRINT(fmt, ...) printf("[BT] " fmt, ##__VA_ARGS__)
#else
#define BT_PRINT(fmt, ...) do {} while (0)
#endif
/* ---------- DIP1 拨码选路(副板 sub_comm 上报) ---------- */
/** @brief 等待副板 DI 帧就绪,便于读取 DIP1 */
int ble_link_wait_dip_ready(uint32_t timeout_ms);
/** @brief DIP1=1 时为蓝牙调试上位机模式 */
uint8_t ble_link_is_bt_mode(void);
/* ---------- comm_link 后端(与 tcp_server 共用 JSON 协议) ---------- */
int comm_link_ble_start(void);
void comm_link_ble_stop(void);
void comm_link_ble_process(void);
int comm_link_ble_is_client_connected(void);
void comm_link_ble_close_client(void);
int comm_link_ble_receive_data(uint8_t *buffer, uint32_t buffer_size);
int comm_link_ble_rx_upgrade_begin(void);
int comm_link_ble_rx_upgrade_end(void);
void comm_link_ble_rx_flush_pending(void);
int comm_link_ble_diag_trace(void);
int comm_link_ble_send_data(const uint8_t *data, uint32_t len);
int comm_link_ble_get_peer_info(char *buf, uint32_t buf_size);
#endif /* BLE_DEBUG_EN */
#endif /* FC41D_BLE_H */
+75
View File
@@ -0,0 +1,75 @@
/**
* @file fc41d_ble_priv.h
* @brief FC41D BLE 后端私有上下文(与 tcp_link_ctx_t 在 comm_link 中 union 复用)
*/
#ifndef FC41D_BLE_PRIV_H
#define FC41D_BLE_PRIV_H
#include <stdint.h>
#include "fc41d_ble.h"
#define FC41D_AT_RX_ACC_SIZE 768U
#define FC41D_AT_LINE_MAX 128U
#define FC41D_AT_CMD_MAX 1200U
/** link 解析缓冲(AT 行与 +QBLERECV */
#define FC41D_LINK_RX_NORMAL 512U
/** 固件升级:单包 1024B Base64 JSON + UART 残包 */
#define FC41D_LINK_RX_UPGRADE 2048U
/** 应用 RX 环(心跳/参数查询等) */
#define FC41D_APP_RX_NORMAL 1024U
/** 固件升级 Data JSON 拼包(1024B 载荷约 1.6KB JSON */
#define FC41D_APP_RX_UPGRADE 2048U
typedef enum {
FC41D_BLE_ST_IDLE = 0,
FC41D_BLE_ST_POWER_ON,
FC41D_BLE_ST_WAIT_CONNECT,
FC41D_BLE_ST_CONNECTED,
FC41D_BLE_ST_ERROR,
} fc41d_ble_state_t;
typedef enum {
FC41D_BLE_URC_NONE = 0,
FC41D_BLE_URC_CONNECTED,
FC41D_BLE_URC_DISCONNECTED,
} fc41d_ble_urc_t;
typedef struct {
char rx_acc[FC41D_AT_RX_ACC_SIZE];
uint16_t rx_acc_len;
fc41d_ble_urc_t pending_urc;
char at_cmd_buf[FC41D_AT_LINE_MAX];
char ble_cmd_buf[64];
char gatt_at_cmd[FC41D_AT_CMD_MAX];
} fc41d_ble_at_t;
typedef struct {
uint8_t *link_rx_acc;
uint16_t link_rx_acc_cap;
uint16_t link_rx_acc_len;
uint16_t qble_payload_need;
uint8_t *app_rx;
uint16_t app_rx_cap;
uint16_t app_rx_wr;
uint16_t app_rx_rd;
} fc41d_ble_io_t;
typedef struct {
fc41d_ble_state_t state;
uint64_t connect_deadline_ms;
uint64_t power_on_deadline_ms;
uint64_t last_stat_poll_ms;
uint8_t transparent; /* 1=QBLETRANMODE 已生效,UART 直传 JSON */
uint8_t gatt_fallback; /* 1=透传 AT 失败,回退 +QBLERECV/QBLEGATTSNTFY */
} fc41d_ble_sm_t;
typedef struct {
fc41d_ble_at_t at;
fc41d_ble_io_t io;
fc41d_ble_sm_t sm;
} fc41d_ble_ctx_t;
#endif /* FC41D_BLE_PRIV_H */