#ifndef BLE_H #define BLE_H #include "stm32f1xx_hal.h" int parse_general_resp(const char* resp); int parse_laddr_resp(const char* resp); int prepare_diradv_cmd(const char* cmd_template, char* cmd_buf, int buf_size); int prepare_uuid_cmd(const char* cmd_template, char* cmd_buf, int buf_size); int prepare_noti_cmd(const char* cmd_template, char* cmd_buf, int buf_size); int prepare_transport_cmd(const char* cmd_template, char* cmd_buf, int buf_size); uint8_t parse_master_addr_resp(const char* resp); typedef enum{ BLE_INIT = 0, BLE_FIRST_CONECT, BLE_CONNECTED, BLE_WAIT_CONNECT, BLE_CFG_TRANS, // 新增:配置透传模式 BLE_READY, BLE_ERROR, BLE_SET, BLE_WAITTING }BLE_STATE; extern const char* ble_state_names[]; typedef enum { EXEC_STATE_IDLE = 0, EXEC_STATE_SEND_WAIT, EXEC_STATE_PROCESS_RESP, EXEC_STATE_ERROR } ExecState_t; extern const char* ble_sub_state_names[]; typedef enum { EXECUTOR_BUSY, // 执行中,尚未完成 EXECUTOR_DONE, // 整个序列执行成功 EXECUTOR_ERROR // 发生不可恢复错误,错误信息已保存在执行器中 } ExecutorResult_t; typedef enum { RECOVERY_TARGET_NONE = 0, RECOVERY_TARGET_RESTART_SEQ, // 重启当前序列(不在 BLE_SET 中执行,直接重置执行器) RECOVERY_TARGET_SW_RESET_MODULE, // 软件复位模块 RECOVERY_TARGET_FACTORY_RESET, // 恢复出厂设置 RECOVERY_TARGET_RECONFIG_UART, // 重新配置串口(直接操作硬件,不经过 BLE_SET) RECOVERY_TARGET_HARD_RESET_MODULE,// 硬件复位模块(直接操作引脚) RECOVERY_TARGET_SOFT_RESET_MCU, // 软件复位 MCU RECOVERY_TARGET_PANIC // 不可恢复 } RecoveryTarget_t; typedef struct { const char* cmd; uint16_t timeout_ms; uint8_t retry_max; // 关键升级:一个用于生成动态命令参数的回调函数 int (*prepare_cmd)(const char* cmd_template, char* cmd_buf, int buf_size); // 可选升级:一个用于解析自定义响应的回调函数 int (*parse_resp)(const char* resp); } BleAtCmd_t; typedef struct { const BleAtCmd_t* sequence; // 当前正在执行的命令序列 uint16_t cmd_index; // 当前命令索引 uint8_t retry_cnt; // 当前命令已重试次数 uint32_t start_tick; // 命令发送时的时间戳 ExecState_t state; // 执行器状态:IDLE, SENDING, WAITING, DONE, ERROR uint8_t error_type; // ERR_TYPE_xxx int error_code; // 具体错误码(模块返回码或prepare返回值) uint16_t error_cmd_index; // 发生错误的命令索引 } CmdExecutor_t; typedef struct { // 连接参数 AT+LADDR char mac_addr[13]; // 蓝牙MAC地址 "A1B2C3D4E5F6" uint8_t addr_type; // 地址类型 (0=public, 1=random) // 广播参数 (用于 AT+DIRADV 等) uint8_t adv_param; uint8_t adv_type; char target_mac[13]; // 定向广播的目标MAC // 白名单参数 AT+WHITELIST 暂时不用 uint8_t whitelist_count; char whitelist_macs[3][13]; // 假设最多3个白名单设备 // 通信参数 uint32_t baud_rate; // 波特率 uint8_t tx_power; // 发射功率 // UUID AT+UUID uint16_t service_uuid; // 服务UUID,例如 0xFFE0 // NOTIopt AT+NOTI uint8_t Noption; // 1或者0 // TRANSopt AT+TRANSPORT uint8_t Toption; // 1或者0 // ... 其他所有可能用到的参数 } BleGlobalConfig_t; // 错误码信息结构体 typedef struct { int code; // 错误码数字,如 101 const char* desc; // 错误描述,如 "参数错误" RecoveryTarget_t recovery_target; //store the target } BleErrorCodeInfo_t; typedef enum { ERR_TYPE_NONE = 0, ERR_TYPE_PREPARE_FAILED, // prepare_cmd 失败 ERR_TYPE_TIMEOUT_EXCEEDED, // 超时且重试耗尽 ERR_TYPE_PARSE_FAILED, // 解析返回-1且重试耗尽 ERR_TYPE_MODULE_ERROR, // 模块返回错误码且重试耗尽 // 可以按需添加 } ErrorType_t; typedef struct { ErrorType_t type; // 错误类型 uint8_t main_state; // 主状态值(例如 BLE_INIT) uint16_t cmd_index; // 发生错误的命令索引(仅当在初始化阶段有意义) int error_code; // 错误码(内部错误码或模块返回码) uint32_t timestamp; // 时间戳 uint8_t origin_state; // 原始状态(用于恢复后返回) RecoveryTarget_t recovery_target;// error fix target } BleErrorInfo_t; extern char ble_rx_buffer[256]; uint8_t BLE_UART_RxCallback(uint8_t *data, uint16_t len); ExecutorResult_t CmdExecutor_Process(CmdExecutor_t *ex); extern void BLE_StateMachine_Handler(void); extern void BLE_Init(void); #endif