以下是一个基于ESP32-S3的蓝牙SDK封装设计,包含双模蓝牙(BLE+经典蓝牙)支持,提供清晰的数据结构、枚举类型和API接口。
1. 头文件定义 (esp32_s3_bt_sdk.h)
c
复制
#ifndef ESP32_S3_BT_SDK_H
#define ESP32_S3_BT_SDK_H
#include "esp_bt.h"
#include "esp_bt_main.h"
#include "esp_gap_ble_api.h"
#include "esp_gatts_api.h"
#include "esp_gattc_api.h"
#include "esp_spp_api.h"
#include "esp_bt_defs.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief 蓝牙工作模式枚举
*/
typedef enum {
BT_MODE_NONE = 0, // 无模式
BT_MODE_BLE, // 仅BLE模式
BT_MODE_CLASSIC, // 仅经典蓝牙模式
BT_MODE_DUAL // 双模模式(BLE+经典蓝牙)
} bt_mode_t;
/**
* @brief 蓝牙角色枚举
*/
typedef enum {
BT_ROLE_PERIPHERAL = 0, // BLE外设模式
BT_ROLE_CENTRAL, // BLE中心设备模式
BT_ROLE_IDLE // 空闲模式
} bt_role_t;
/**
* @brief 蓝牙连接状态枚举
*/
typedef enum {
BT_STATE_DISCONNECTED = 0, // 未连接
BT_STATE_CONNECTING, // 连接中
BT_STATE_CONNECTED, // 已连接
BT_STATE_DISCONNECTING // 断开中
} bt_state_t;
/**
* @brief 蓝牙安全模式枚举
*/
typedef enum {
BT_SEC_NONE = 0, // 无安全要求
BT_SEC_ENCRYPT, // 需要加密
BT_SEC_ENCRYPT_NO_MITM, // 加密但不需MITM保护
BT_SEC_ENCRYPT_MITM // 加密且需要MITM保护
} bt_sec_mode_t;
/**
* @brief 蓝牙设备信息结构体
*/
typedef struct {
char name[32]; // 设备名称
esp_bd_addr_t addr; // 设备地址
int8_t rssi; // 信号强度
bt_role_t role; // 设备角色
uint16_t appearance; // 设备外观(仅BLE)
} bt_device_info_t;
/**
* @brief BLE GATT服务配置结构体
*/
typedef struct {
esp_bt_uuid_t service_uuid; // 服务UUID
esp_bt_uuid_t char_uuid; // 特征UUID
esp_gatt_perm_t perm; // 权限
esp_gatt_char_prop_t prop; // 属性
uint16_t handle; // 句柄(输出参数)
} ble_gatt_service_t;
/**
* @brief 蓝牙配置参数结构体
*/
typedef struct {
bt_mode_t mode; // 工作模式
bt_role_t role; // 设备角色
char device_name[32]; // 设备名称
uint16_t mtu_size; // BLE MTU大小
uint32_t spp_baudrate; // SPP波特率(经典蓝牙)
bt_sec_mode_t sec_mode; // 安全模式
uint16_t conn_params_min; // 最小连接间隔(ms)
uint16_t conn_params_max; // 最大连接间隔(ms)
} bt_config_t;
/**
* @brief 蓝牙数据回调结构体
*/
typedef struct {
void (*on_ble_data)(const uint8_t *data, uint16_t length); // BLE数据接收回调
void (*on_spp_data)(const uint8_t *data, uint16_t length); // SPP数据接收回调
void (*on_conn_state)(bt_state_t state, const bt_device_info_t *device); // 连接状态回调
void (*on_scan_result)(const bt_device_info_t *device); // 扫描结果回调
} bt_callback_t;
/**
* @brief 初始化蓝牙SDK
* @param config 蓝牙配置参数
* @param callback 回调函数集合
* @return esp_err_t 执行结果
*/
esp_err_t bt_sdk_init(const bt_config_t *config, const bt_callback_t *callback);
/**
* @brief 反初始化蓝牙SDK
*/
void bt_sdk_deinit(void);
/**
* @brief 开始蓝牙设备扫描
* @param duration_sec 扫描持续时间(秒),0表示持续扫描
* @return esp_err_t 执行结果
*/
esp_err_t bt_sdk_start_scan(uint32_t duration_sec);
/**
* @brief 停止蓝牙设备扫描
*/
void bt_sdk_stop_scan(void);
/**
* @brief 连接指定蓝牙设备
* @param device 目标设备信息
* @return esp_err_t 执行结果
*/
esp_err_t bt_sdk_conn

最低0.47元/天 解锁文章
922

被折叠的 条评论
为什么被折叠?



