基于ESP32-S3 蓝牙SDK封装设计

以下是一个基于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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值