Initial commit: CCU621_M firmware project with BLE debug link support.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,124 @@
|
||||
/**
|
||||
* @file fc41d_ble.h
|
||||
* @brief FC41D 蓝牙调试:配置宏 + 对外接口(仅 BLE_DEBUG_EN=1 有效)
|
||||
*
|
||||
* 分层:
|
||||
* - 本头文件:编译配置、DIP 选路、comm_link 后端 API
|
||||
* - fc41d_ble.c:AT 命令、模组电源、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 */
|
||||
@@ -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 */
|
||||
Reference in New Issue
Block a user