BLE开发指南

引言

移远通信FC41D、FCM100D、FCM740D和FLMx40D模块支持QuecOpen®方案;QuecOpen®是基于RTOS的嵌入式开发平台,可简化IoT应用的软件设计和开发过程。有关QuecOpen®的详细信息,请参考 快速入门指南

本文档适用于SDK构建环境的QuecOpen®方案,主要介绍在QuecOpen®方案下,FC41D、FCM100D、FCM740D和FLMx40D模块的低功耗蓝牙(BLE)API和相关示例以及低功耗蓝牙配网的步骤和代码示例。

适用模块

适用模块:

模块系列 模块
FC41D
FCM100D
FCM740D
FLMx40D FLM040D
FLM140D
FLM240D
FLM340D

BLE API

头文件

BLE API的头文件为ql_ble.hble_api_5_x.h,分别位于SDK包的ql_components/qadpt/include/ql_kernel/driver/include/下。若无特别说明,本文档所涉及头文件均在上述目录下。

函数概览

函数概览:

函数 说明
ql_ble_init() 初始化BLE并使用默认BLE服务
ql_ble_create_db() 初始化BLE并自定义BLE服务
ql_ble_set_notice_cb() 注册BLE事件回调函数
ql_ble_set_tx_power() 设置BLE发射功率
ql_ble_get_idle_actv_idx_handle() 获取空闲的BLE活动序号
ql_ble_actv_state_get() 获取指定BLE活动的状态
ql_ble_create_advertising() 创建BLE广播
ql_ble_set_adv_data() 设置广播数据
ql_ble_set_scan_rsp_data() 设置扫描响应数据
ql_ble_start_advertising() 开启BLE广播
ql_ble_adv_start() 快速开启BLE广播
ql_ble_stop_advertising() 停止BLE广播
ql_ble_delete_advertising() 删除BLE广播
ql_ble_create_scaning() 创建BLE扫描
ql_ble_start_scaning() 开启BLE扫描
ql_ble_scan_start() 快速开启BLE扫描
ql_ble_stop_scaning() 停止BLE扫描
ql_ble_delete_scaning() 删除BLE扫描
ql_ble_update_param() 更新连接参数
ql_ble_gatts_disconnect() 服务器主动断开与客户端的连接
ql_ble_gatt_mtu_changes() 更改MTU大小
ql_ble_gatt_mtu_get() 获取MTU大小
ql_ble_create_conn() 创建连接
ql_ble_set_connect_dev_addr() 设置待连接的BLE设备地址
ql_ble_gattc_register_discovery_callback() 客户端注册发现服务器服务的回调函数
ql_ble_gattc_register_event_recv_callback() 客户端注册事件接收回调函数
ql_ble_start_conn() 发起连接
ql_ble_stop_conn() 停止连接
ql_ble_gattc_disconnect() 客户端主动断开与服务器的连接
ql_ble_gattc_read_service_data_by_handle_req() 客户端通过服务句柄读取服务器数据
ql_ble_gattc_write_service_data_req() 客户端通过服务句柄写数据至服务器
ql_ble_gatts_send_ntf_value() 服务器通过通知方式发送数据至客户端
ql_ble_gatts_send_ind_value() 服务器通过指示方式发送数据至客户端
ql_ble_address_get() 获取BLE MAC地址
ql_ble_gattc_ntf_enable() 启用指定特征句柄的通知
ql_ble_gattc_all_service_discovery() 客户端发现服务器的所有服务
ql_ble_security_param_init() 配置安全配对参数
ql_ble_security_req() 发送安全连接请求
ql_ble_bond_delete_all() 删除所有绑定的BLE设备信息
ql_ble_delete_specified_bound_device() 删除指定的绑定的BLE设备
ql_ble_get_random_number() 获取硬件随机值
ql_ble_get_idle_conn_idx_handle() 获取空闲BLE连接的索引
ql_ble_get_bonded_devices() 获取绑定的BLE设备信息
ql_ble_is_device_bonded() 判断对端BLE设备是否为绑定过的设备
ql_ble_set_device_name() 设置BLE设备名称
ql_ble_get_device_name() 获取BLE设备名称

函数详解

ql_ble_init

该函数用于初始化BLE并使用默认BLE服务。

函数原型

ql_errcode_bt_e ql_ble_init(void)

参数

返回值

函数执行结果码;详见ql_errcode_bt_e

ql_errcode_bt_e

函数执行结果码枚举定义如下:

typedef enum
{
    QL_BT_SUCCESS = 0,
    QL_BT_ERR_PROFILE,
    QL_BT_ERR_CREATE_DB,
    QL_BT_ERR_CMD_NOT_SUPPORT,
    QL_BT_ERR_UNKNOW_IDX,
    QL_BT_ERR_BLE_STATUS,
    QL_BT_ERR_BLE_PARAM,
    QL_BT_ERR_ADV_DATA,
    QL_BT_ERR_CMD_RUN,
    QL_BT_ERR_NO_MEM,
    QL_BT_ERR_INIT_CREATE,
    QL_BT_ERR_INIT_STATE,
    QL_BT_ERR_ATTC_WRITE,
    QL_BT_ERR_ATTC_WRITE_UNREGISTER,
} ql_errcode_bt_e

成员

成员 描述
QL_BT_SUCCESS 函数执行成功
QL_BT_ERR_PROFILE Profile错误
QL_BT_ERR_CREATE_DB 添加BLE服务失败
QL_BT_ERR_CMD_NOT_SUPPORT 不支持该命令
QL_BT_ERR_UNKNOW_IDX 未知的BLE活动序号
QL_BT_ERR_BLE_STATUS 状态错误
QL_BT_ERR_BLE_PARAM 无效参数
QL_BT_ERR_ADV_DATA 广播数据格式错误
QL_BT_ERR_CMD_RUN 命令执行失败
QL_BT_ERR_NO_MEM 内存不足
QL_BT_ERR_INIT_CREATE 创建连接任务失败
QL_BT_ERR_INIT_STATE 连接状态错误
QL_BT_ERR_ATTC_WRITE 写数据错误
QL_BT_ERR_ATTC_WRITE_UNREGISTER 写入数据的BLE服务未注册

ql_ble_create_db

该函数用于初始化BLE并自定义BLE服务。

函数原型

ql_errcode_bt_e ql_ble_create_db(struct ql_ble_db_cfg* ble_db_cfg)

参数

ble_db_cfg

[In] BLE服务列表;详见ql_ble_db_cfg

返回值

函数执行结果码;详见ql_errcode_bt_e

ql_ble_db_cfg

BLE服务列表结构体定义如下:

struct ql_ble_db_cfg
{
    uint16_t prf_task_id;
    uint8_t uuid[16];
    uint8_t att_db_nb;
    uint16_t start_hdl;
    ql_attm_desc_t* att_db;
    uint8_t svc_perm;
}

成员

类型 参数 描述
uint16_t prf_task_id BLE服务ID。
uint8_t uuid 服务的UUID。
uint8_t att_db_nb 属性数据库数量。
uint16_t start_hdl 服务开始句柄。当参数值为0时,表示自动分配句柄。
ql_attm_desc_t* att_db 属性数据库;详见ql_attm_desc_t
uint8_t svc_perm 服务配置。
ql_attm_desc_t

BLE属性数据库结构体定义如下:

typedef struct
{
    uint8_t uuid[16];
    uint16_t perm;
    uint16_t ext_perm;
    uint16_t max_size;
}ql_attm_desc_t

参数

类型 参数 描述
uint8_t uuid 16字节的UUID
uint16_t perm 权限设置
uint16_t ext_perm 扩展权限设置
uint16_t max_size 属性的最大字节数

ql_ble_set_notice_cb

该函数用于注册BLE事件回调函数。

函数原型

ql_errcode_bt_e ql_ble_set_notice_cb(ble_notice_cb_t func)

参数

func

[In] BLE事件回调函数;详见ble_notice_cb_t

返回值

函数执行结果码;详见ql_errcode_bt_e

ble_notice_cb_t

该函数为BLE事件回调函数。

函数原型

typedef void (*ble_notice_cb_t)(ble_notice_t notice, void *param)

参数

  • notice

[In] BLE事件类型;详见ble_notice_t

  • param

[In] BLE事件参数。

ble_notice_t

BLE事件类型枚举定义如下:

typedef enum
{
    BLE_5_STACK_OK,
    BLE_5_WRITE_EVENT,
    BLE_5_READ_EVENT,
    BLE_5_REPORT_ADV,
    BLE_5_MTU_CHANGE,
    BLE_5_CONNECT_EVENT,
    BLE_5_DISCONNECT_EVENT,
    BLE_5_ATT_INFO_REQ,
    BLE_5_CREATE_DB,
    BLE_5_TX_DONE,
    BLE_5_INIT_CONNECT_EVENT,
    BLE_5_INIT_DISCONNECT_EVENT,
    BLE_5_SDP_REGISTER_FAILED,
} ble_notice_t

成员

参数 描述
BLE_5_STACK_OK BLE协议栈准备就绪
BLE_5_WRITE_EVENT 服务器接收到客户端写数据事件
BLE_5_READ_EVENT 服务器接收到客户端读数据事件
BLE_5_REPORT_ADV 扫描结果返回事件
BLE_5_MTU_CHANGE MTU更改事件
BLE_5_CONNECT_EVENT 连接事件
BLE_5_DISCONNECT_EVENT 连接断开事件
BLE_5_ATT_INFO_REQ 请求属性信息事件
BLE_5_CREATE_DB 添加Profile完成事件
BLE_5_TX_DONE 发送数据完成事件
BLE_5_INIT_CONNECT_EVENT 客户端发起连接服务器活动事件
BLE_5_INIT_DISCONNECT_EVENT 客户端与从服务器断开连接事件
BLE_5_SDP_REGISTER_FAILED SDP服务注册失败事件

ql_ble_set_tx_power

该函数用于设置BLE射频发射功率。

函数原型

ql_errcode_bt_e ql_ble_set_tx_power(int8_t tx_power)

参数

tx_power: [In] BLE发射功率。范围:-2~14;默认值:6;单位:dBm。

返回值

函数执行结果码;详见ql_errcode_bt_e

ql_ble_get_idle_actv_idx_handle

该函数用于获取空闲的BLE活动序号。

函数原型

uint8_t ql_ble_get_idle_actv_idx_handle(void)

参数

返回值

空闲BLE活动序号。

ql_ble_actv_state_get

该函数用于获取指定BLE活动的状态。

函数原型

ql_actv_state_t ql_ble_actv_state_get(uint8_t actv_idx)

参数

actv_idx

[In] BLE活动序号。

返回值

BLE活动状态;详见ql_actv_state_t

ql_actv_state_t

BLE活动状态枚举定义如下:

typedef enum {
    QL_ACTV_IDLE,
    QL_ACTV_ADV_CREATED,
    QL_ACTV_ADV_STARTED,
    QL_ACTV_SCAN_CREATED,
    QL_ACTV_SCAN_STARTED,
    QL_ACTV_INIT_CREATED,
    QL_ACTV_PER_SYNC_CREATED,
}ql_actv_state_t

成员

成员 描述
QL_ACTV_IDLE 空闲状态
QL_ACTV_ADV_CREATED 广播创建完成
QL_ACTV_ADV_STARTED 已开始广播
QL_ACTV_SCAN_CREATED 扫描创建完成
QL_ACTV_SCAN_STARTED 已开始扫描
QL_ACTV_INIT_CREATED 连接创建完成
QL_ACTV_PER_SYNC_CREATED 周期同步活动创建完成

ql_ble_create_advertising

该函数用于创建BLE广播。

函数原型

ql_errcode_bt_e ql_ble_create_advertising(uint8_t actv_idx,unsigned char chnl_map,uint32_t intv_min,uint32_t intv_max,ble_cmd_cb_t callback)

参数

  • actv_idx

    [In] 通过ql_ble_get_idle_actv_idx_handle()获取的空闲BLE活动序号。

  • chnl_map

    [In] 选择的广播通道。

    • 1 37通道

    • 2 38通道

    • 3 37和38通道

    • 4 39通道

    • 5 37和39通道

    • 6 38和39通道

    • 7 37、38和39通道

  • intv_min

    [In] 广播间隔最小值。范围:32~16384;单位:0.625毫秒。对应的时间范围:20毫秒~10.24秒。

  • intv_max

    [In] 广播间隔最大值。范围:32~16384;单位:0.625毫秒。对应的时间范围:20毫秒~10.24秒。

  • callback

    [In] 创建BLE活动命令的回调函数。该回调函数暂不支持,可设置为NULL。

返回值

函数执行结果码;详见ql_errcode_bt_e

备注

当前该函数仅支持创建非定向可连接广播,无广播过滤,在1 Mbps PHY模式下广播。

ql_ble_set_adv_data

该函数用于设置广播数据。

函数原型

ql_errcode_bt_e ql_ble_set_adv_data(uint8_t actv_idx, unsigned char* adv_buff, unsigned char adv_len, ble_cmd_cb_t callback)

参数

  • actv_idx

    [In] BLE活动序号,通常对应ql_ble_create_advertising()创建的BLE活动。

  • adv_buff

    [In] 广播数据。需按照BLE广播数据规则写入。

  • adv_len

    [In] 广播数据长度;单位:字节。

  • callback

    [In] 设置广播数据命令的回调函数。该回调函数暂不支持,可设置为NULL。

返回值

函数执行结果码;详见ql_errcode_bt_e

ql_ble_set_scan_rsp_data

该函数用于设置扫描响应数据。

函数原型

ql_errcode_bt_e ql_ble_set_scan_rsp_data(uint8_t actv_idx, unsigned char* scan_buff, unsigned char scan_len, ble_cmd_cb_t callback)

参数

  • actv_idx

    [In] BLE活动序号,通常对应ql_ble_create_advertising()创建的BLE活动。

  • scan_buff

    [In] 扫描响应数据。需按照BLE广播数据规则写入。

  • scan_len

    [In] 扫描响应数据长度;单位:字节。

  • callback

    [In] 设置扫描响应数据命令的回调函数。该回调函数暂不支持,可设置为NULL。

返回值

函数执行结果码;详见ql_errcode_bt_e

ql_ble_start_advertising

该函数用于开启BLE广播。

函数原型

ql_errcode_bt_e ql_ble_start_advertising(uint8_t actv_idx, uint16 duration, ble_cmd_cb_t callback)

参数

  • actv_idx

    [In] BLE活动序号,通常对应ql_ble_create_advertising()创建的BLE活动。

  • duration

    [In] 广播持续时间;单位:10毫秒。0表示不主动停止广播。

  • callback

    [In] 开始广播命令的回调函数。该回调函数暂不支持,可设置为NULL。

返回值

函数执行结果码;详见ql_errcode_bt_e

ql_ble_adv_start

该函数用于快速开启BLE广播。

函数原型

ql_errcode_bt_e ql_ble_adv_start(uint8_t actv_idx, struct adv_param *adv, ble_cmd_cb_t callback)

参数

  • actv_idx

    [In] 通过ql_ble_get_idle_actv_idx_handle()获取的空闲BLE活动序号。

  • adv

    [In] 广播参数;详见adv_param

  • callback

    [In] 快速开启BLE广播命令的回调函数。该回调函数暂不支持,可设置为NULL。

返回值

函数执行结果码;详见ql_errcode_bt_e

adv_param

广播参数结构体定义如下:

struct adv_param {
    uint8_t advData[MAX_ADV_DATA_LEN];
    uint8_t advDataLen;
    uint8_t respData[MAX_ADV_DATA_LEN];
    uint8_t respDataLen;
    uint8_t channel_map;
    uint16_t interval_min;
    uint16_t interval_max;
    uint16_t duration;
}

参数

类型 参数 描述
uint8_t advData 广播数据。最大31字节。
uint8_t advDataLen 广播数据长度。单位:字节。
uint8_t respData 扫描响应数据。最大31字节。
uint8_t respDataLen 扫描响应数据长度。单位:字节。
uint8_t channel_map 广播通道。
uint16_t interval_min 广播间隔最小值。范围:32~16384;单位:0.625毫秒。对应的时间范围:20毫秒~10.24秒。
uint16_t interval_max 广播间隔最大值。范围:32~16384;单位:0.625毫秒。对应的时间范围:20毫秒~10.24秒。
uint16_t duration 广播持续时间;单位:10毫秒。0表示不主动停止广播。

ql_ble_stop_advertising

该函数用于停止BLE广播。

函数原型

ql_errcode_bt_e ql_ble_stop_advertising(uint8_t actv_idx, ble_cmd_cb_t callback)

参数

  • actv_idx

    [In] BLE活动序号,通常对应ql_ble_create_advertising()创建的BLE活动。

  • callback

    [In] 停止广播命令的回调函数。该回调函数暂不支持,可设置为NULL。

返回值

函数执行结果码;详见ql_errcode_bt_e

ql_ble_delete_advertising

该函数用于删除BLE广播。

函数原型

ql_errcode_bt_e ql_ble_delete_advertising(uint8_t actv_idx, ble_cmd_cb_t callback)

参数

  • actv_idx

    [In] BLE活动序号,通常对应ql_ble_create_advertising()创建的BLE活动。

  • callback

    [In] 删除广播命令的回调函数。该回调函数暂不支持,可设置为NULL。

返回值

函数执行结果码;详见ql_errcode_bt_e

ql_ble_create_scaning

该函数用于创建BLE扫描。

函数原型

ql_errcode_bt_e ql_ble_create_scaning(uint8_t actv_idx, ble_cmd_cb_t callback)

参数

  • actv_idx

    [In] 通过ql_ble_get_idle_actv_idx_handle()获取的空闲BLE活动序号。

  • callback

    [In] 创建BLE扫描命令的回调函数。该回调函数暂不支持,可设置为NULL。

返回值

函数执行结果码;详见ql_errcode_bt_e

ql_ble_start_scaning

该函数用于开启BLE扫描。

函数原型

ql_errcode_bt_e ql_ble_start_scaning(uint8_t actv_idx, uint16_t scan_intv, uint16_t scan_wd, ble_cmd_cb_t callback)

参数

  • actv_idx

    [In] BLE活动序号,通常对应ql_ble_create_scaning()创建的BLE活动。

  • scan_intv

    [In] 扫描间隔。范围:18~4096;单位:0.625毫秒。对应的时间范围:11.25毫秒~2560毫秒。

  • scan_wd

    [In] 扫描窗口。范围:17~4096;单位:0.625毫秒。对应的时间范围:10.625毫秒~2560毫秒。

  • callback

    [In] 开启BLE扫描命令的回调函数。该回调函数暂不支持,可设置为NULL。

返回值

函数执行结果码;详见ql_errcode_bt_e

备注

当前该函数开启的扫描在1 Mbps模式下工作,无重复广播包过滤,不主动停止。

ql_ble_scan_start

该函数用于快速开启BLE扫描。

函数原型

ql_errcode_bt_e ql_ble_scan_start(uint8_t actv_idx, struct scan_param *scan, ble_cmd_cb_t callback)

参数

  • actv_idx

    [In] 通过ql_ble_get_idle_actv_idx_handle()获取的空闲BLE活动序号。

  • scan

    [In] 扫描参数;详见scan_param

  • callback

    [In] 快速开启BLE扫描命令的回调函数。该回调函数暂不支持,可设置为NULL。

返回值

函数执行结果码;详见ql_errcode_bt_e

scan_param

扫描参数结构体定义如下:

struct scan_param {
    uint8_t filter_en;
    uint8_t channel_map;
    uint16_t interval;
    uint16_t window;
}

参数

类型 参数 描述
uint8_t filter_en 选择扫描过滤方式;详见ql_scan_dup_filter_e
uint8_t channel_map 扫描通道。
uint16_t interval 扫描间隔。范围:18~4096;单位:0.625毫秒。对应的时间范围:11.25毫秒~2560毫秒。
uint16_t window 扫描窗口。范围:17~4096;单位:0.625毫秒。对应的时间范围:10.625毫秒~2560毫秒。
ql_scan_dup_filter_e

扫描过滤方式枚举定义如下:

typedef enum tag_scan_dup_filter_policy
{
    QL_SCAN_FILT_DUPLIC_DIS = 0x00,
    QL_SCAN_FILT_DUPLIC_EN,
    QL_SCAN_FILT_DUPLIC_EN_PER_PERIOD,
}ql_scan_dup_filter_e

成员

成员 描述
QL_SCAN_FILT_DUPLIC_DIS 禁止扫描过滤
QL_SCAN_FILT_DUPLIC_EN 使能扫描过滤
QL_SCAN_FILT_DUPLIC_EN_PER_PERIOD 启用每个扫描周期的重复数据包过滤

ql_ble_stop_scaning

该函数用于停止BLE扫描。

函数原型

ql_errcode_bt_e ql_ble_stop_scaning(uint8_t actv_idx, ble_cmd_cb_t callback)

参数

  • actv_idx

    [In] BLE活动序号,通常对应ql_ble_create_scaning()创建的BLE活动。

  • callback

    [In] 停止扫描命令的回调函数。该回调函数暂不支持,可设置为NULL。

返回值

函数执行结果码;详见ql_errcode_bt_e

ql_ble_delete_scaning

该函数用于删除BLE扫描。

函数原型

ql_errcode_bt_e ql_ble_delete_scaning(uint8_t actv_idx, ble_cmd_cb_t callback)

参数

  • actv_idx

    [In] BLE活动序号,通常对应ql_ble_create_scaning()创建的BLE活动。

  • callback

    [In] 删除扫描命令的回调函数。该回调函数暂不支持,可设置为NULL。

返回值

函数执行结果码;详见ql_errcode_bt_e

ql_ble_update_param

该函数用于更新连接参数。

函数原型

ql_errcode_bt_e ql_ble_update_param(uint8_t conn_idx, uint16_t intv_min, uint16_t intv_max,uint16_t latency, uint16_t sup_to, ble_cmd_cb_t callback)

参数

  • conn_idx

    [In] 连接索引。

  • intv_min

    [In] 连接间隔最小值。范围:6~3200;单位:1.25毫秒。对应的时间范围:7.5毫秒~4秒。

  • intv_max

    [In] 连接间隔最大值。范围:6~3200;单位:1.25毫秒。对应的时间范围:7.5毫秒~4秒。

  • latency

    [In] 服务器可忽略的连接间隔的数目。需满足:(1 + latency)*intv_max*2*1.25 < sup_to*10。

  • sup_to

    [In] 连接超时时间。范围:10~3200;单位:10毫秒。对应的时间范围:100毫秒~32秒。

  • callback

    [In] 更新连接参数命令的回调函数。该回调函数暂不支持,可设置为NULL。

返回值

函数执行结果码;详见ql_errcode_bt_e

ql_ble_gatts_disconnect

该函数用于服务器主动断开与客户端的连接。

函数原型

ql_errcode_bt_e ql_ble_gatts_disconnect(uint8_t conn_idx, ble_cmd_cb_t callback)

参数

  • conn_idx

    [In] 连接索引。

  • callback

    [In] 服务器主动断开与客户端连接命令的回调函数。该回调函数暂不支持,可设置为NULL。

返回值

函数执行结果码;详见ql_errcode_bt_e

ql_ble_gatt_mtu_changes

该函数用于更改MTU大小。

函数原型

ql_errcode_bt_e ql_ble_gatt_mtu_changes(uint8_t conn_idx,uint16_t mtu_size,ble_cmd_cb_t callback)

参数

  • conn_idx

    [In] 连接索引。

  • mtu_size

    [In] 更新的MTU大小;单位:字节。

  • callback

    [In] 更改MTU大小命令的回调函数。该回调函数暂不支持,可设置为NULL。

返回值

函数执行结果码;详见ql_errcode_bt_e

ql_ble_gatt_mtu_get

该函数用于获取MTU大小。

函数原型

uint16_t ql_ble_gatt_mtu_get(uint8_t conn_idx)

参数

conn_idx

[In] 连接索引。

返回值

MTU的字节数。

ql_ble_create_conn

该函数用于创建连接。

函数原型

ql_errcode_bt_e ql_ble_create_conn(uint8_t actv_idx,unsigned short con_interval,unsigned short con_latency,unsigned short sup_to,ble_cmd_cb_t callback)

参数

  • actv_idx

    [In] 通过ql_ble_get_idle_actv_idx_handle()获取的空闲BLE活动序号。

  • con_interval

    [In] 连接间隔。单位:1.25毫秒。

  • con_latency

    [In] 服务器可忽略的连接间隔的数目。需满足:(1 + con_latency)*max_interval*2*1.25 < sup_to*10。

  • sup_to

    [In] 连接超时时间。单位:10毫秒。

  • callback

    [In] 创建连接命令的回调函数。该回调函数暂不支持,可设置为NULL。

返回值

函数执行结果码;详见ql_errcode_bt_e

ql_ble_set_connect_dev_addr

该函数用于设置待连接的BLE设备地址。

函数原型

ql_errcode_bt_e ql_ble_set_connect_dev_addr(unsigned char actv_idx,struct ql_bd_addr *bdaddr,unsigned char addr_type)

参数

  • actv_idx

    [In] BLE活动序号,通常对应ql_ble_create_conn()创建的BLE活动。

  • bdaddr

    [In] 连接的对端设备的MAC地址。详见ql_bd_addr

  • addr_type

    [In] 对端设备地址类型。

    • 0 公共地址

    • 1 随机地址

返回值

函数执行结果码;详见ql_errcode_bt_e

ql_bd_addr

MAC地址结构体定义如下:

struct ql_bd_addr
{
    uint8_t addr[BD_ADDR_LEN];
}

参数

类型 参数 描述
uint8_t addr 目标BLE设备的MAC地址,长度为6字节。

ql_ble_gattc_register_discovery_callback

该函数用于客户端注册发现服务器服务的回调函数。

函数原型

ql_errcode_bt_e ql_ble_gattc_register_discovery_callback(app_sdp_callback cb)

参数

cb

[In] 发现服务器服务的回调函数;详见app_sdp_callback

返回值

函数执行结果码;详见ql_errcode_bt_e

app_sdp_callback

该函数为用于发现服务器服务的回调函数,用于上报服务发现结果。

函数原型

typedef void (*app_sdp_callback)(unsigned char conidx,uint16_t chars_val_hdl,unsigned char uuid_len,unsigned char *uuid)

参数

  • conidx

    [Out] 连接索引。

  • chars_val_hdl

    [Out] 服务句柄。

  • uuid_len

    [Out] UUID长度;单位:字节。

  • uuid

    [Out] UUID值。

备注

服务器服务的句柄和UUID会依次通过该回调函数返回,用户可存储使用。

ql_ble_gattc_register_event_recv_callback

该函数用于客户端注册事件接收回调函数。

函数原型

ql_errcode_bt_e ql_ble_gattc_register_data_recv_callback(app_sdp_charac_callback cb)

参数

cb

[In] 事件接收回调函数;详见app_sdp_charac_callback

返回值

函数执行结果码;详见ql_errcode_bt_e

app_sdp_charac_callback

该函数为事件接收回调函数,用于客户端接收服务端所上报的事件。

函数原型

typedef void (*app_sdp_charac_callback)(CHAR_TYPE type, uint8 conidx,uint16_t hdl, uint16_t len, uint8 *data)

参数

  • type

    [Out] 事件类型;详见CHAR_TYPE

  • conidx

    [Out] 连接索引。

  • hdl

    [Out] 服务句柄。

  • len

    [Out] 数据长度;单位:字节。

  • data

    [Out] 数据。

CHAR_TYPE

事件类型枚举定义如下:

typedef enum{
    CHARAC_NOTIFY,
    CHARAC_INDICATE,
    CHARAC_READ,
    CHARAC_READ_DONE,
    CHARAC_WRITE_DONE,
}CHAR_TYPE

成员

成员 描述
CHARAC_NOTIFY 接收到服务器通过通知方式发送的数据
CHARAC_INDICATE 接收到服务器通过指示方式发送的数据
CHARAC_READ 读数据事件
CHARAC_READ_DONE 读数据完成事件
CHARAC_WRITE_DONE 写数据完成事件

备注

此枚举定义位于ql_kernel/driver/ble_5_x_rw/ble_pub/app/api/app_sdp.h路径中。

ql_ble_start_conn

该函数用于发起连接。

函数原型

ql_errcode_bt_e ql_ble_start_conn(uint8_t actv_idx,ble_cmd_cb_t callback)

参数

  • actv_idx

    [In] BLE活动序号,通常对应ql_ble_create_conn()创建的BLE活动。

  • callback

    [In] 发起连接命令的回调函数。该回调函数暂不支持,可设置为NULL。

返回值

函数执行结果码;详见ql_errcode_bt_e

ql_ble_stop_conn

该函数用于停止连接。

函数原型

ql_errcode_bt_e ql_ble_stop_conn(uint8_t actv_idx,ble_cmd_cb_t callback)

参数

  • actv_idx

    [In] BLE活动序号,通常对应ql_ble_create_conn()创建的BLE活动。

  • callback

    [In] 停止连接命令的回调函数。该回调函数暂不支持,可设置为NULL。

返回值

函数执行结果码;详见ql_errcode_bt_e

ql_ble_gattc_disconnect

该函数用于客户端主动断开与服务器的连接。

函数原型

ql_errcode_bt_e ql_ble_gattc_disconnect(uint8_t conn_idx, uint8_t reason)

参数

  • conn_idx

    [In] 连接索引。

  • reason

    [In] 连接断开的原因。

返回值

函数执行结果码;详见ql_errcode_bt_e

ql_ble_gattc_read_service_data_by_handle_req

该函数用于客户端通过服务句柄读取服务器数据。

函数原型

ql_errcode_bt_e ql_ble_gattc_read_service_data_by_handle_req(uint8_t conidx,uint16_t handle,ble_cmd_cb_t callback)

参数

  • conidx

    [In] 连接索引。

  • handle

    [In] 指定服务句柄。

  • callback

    [In] 通过服务句柄读取数据命令的回调函数。该回调函数暂不支持,可设置为NULL。

返回值

函数执行结果码;详见ql_errcode_bt_e

ql_ble_gattc_write_service_data_req

该函数用于客户端通过服务句柄写数据至服务器。

函数原型

ql_errcode_bt_e ql_ble_write_service_data_req(uint8_t conidx,uint16_t handle,uint16_t data_len,uint8_t *data,ble_cmd_cb_t callback)

参数

  • conidx

    [In] 连接索引。

  • handle

    [In] 指定服务的句柄。

  • data_len

    [In] 数据长度;单位:字节。

  • data

    [In] 数据。

  • callback

    [In] 通过服务句柄写数据命令的回调函数。该回调函数暂不支持,可设置为NULL。

返回值

函数执行结果码;详见ql_errcode_bt_e

ql_ble_gatts_send_ntf_value

该函数用于服务器通过通知方式发送数据至客户端。

函数原型

ql_errcode_bt_e ql_ble_gatts_send_ntf_value(uint32_t len, uint8_t *buf, uint16_t prf_id,uint16_t att_idx)

参数

  • len

    [In] 数据长度;单位:字节。

  • buf

    [In] 数据。

  • prf_id

    [In] 服务ID号。

  • att_idx

    [In] 一般为添加服务时通过具有notification特征值属性权限的对应特征值序号。

返回值

函数执行结果码;详见ql_errcode_bt_e

ql_ble_gatts_send_ind_value

该函数用于服务器通过指示方式发送数据至客户端。

函数原型

ql_errcode_bt_e ql_ble_gatts_send_ind_value(uint32_t len, uint8_t *buf, uint16_t prf_id, uint16_t att_idx)

参数

  • len

    [In] 数据长度;单位:字节。

  • buf

    [In] 数据。

  • prf_id

    [In] 服务ID号。

  • att_idx

    [In] 一般为添加服务时通过具有indication特征值属性权限的对应特征值序号。

返回值

函数执行结果码;详见ql_errcode_bt_e

ql_ble_address_get

该函数用于获取BLE MAC地址。

函数原型

ql_errcode_bt_e ql_ble_address_get(uint8_t *mac_addr)

参数

mac_addr

[Out] BLE MAC地址。

返回值

函数执行结果码;详见ql_errcode_bt_e

ql_ble_gattc_ntf_enable

该函数用于启用指定特征句柄的通知。

函数原型

ql_errcode_bt_e ql_ble_gattc_ntf_enable(uint8_t conidx,uint16_t handle,bool ntf)

参数

  • conidx

    [In] 连接索引。

  • handle

    [In] 服务表中的特征值句柄。

  • ntf

    [In] 启用或禁用指定特征句柄的通知。

    • 0 禁用

    • 1 启用

返回值

函数执行结果码;详见ql_errcode_bt_e

ql_ble_gattc_all_service_discovery

该函数用于客户端发现服务器的所有服务。

函数原型

ql_errcode_bt_e ql_ble_gattc_all_service_discovery(uint8_t conidx)

参数

conidx

[In] 连接索引。

返回值

函数执行结果码;详见ql_errcode_bt_e

ql_ble_security_param_init

该函数用于配置安全配对参数。

函数原型

ql_errcode_bt_e ql_ble_security_param_init(ql_ble_security_param_t *param)

参数

param

[In] 安全配对参数;详见ql_ble_security_param_t

返回值

函数执行结果码;详见ql_errcode_bt_e

ql_ble_security_param_t

安全配对参数的结构体定义如下:

typedef struct
{
    bool ble_secure_conn;
    ql_ble_io_cap_e io_cap;
    bool bond_auth;
    uint32_t password;
}ql_ble_security_param_t

参数

类型 参数 描述
bool ble_secure_conn 启用或禁用安全连接模式。
0 禁用
1 启用
ql_ble_io_cap_e io_cap 设备输入/输出能力;详见ql_ble_io_cap_e
bool bond_auth 启用或禁用绑定设备时的身份验证。
uint32_t password 配对密码;范围:000000~999999。
ql_ble_io_cap_e

设备输入/输出能力枚举定义如下:

typedef enum
{
    QL_BLE_IO_CAP_DISPLAY_ONLY = 0x00,
    QL_BLE_IO_CAP_DISPLAY_YES_NO = 0x01,
    QL_BLE_IO_CAP_KEYBOARD_ONLY = 0x02,
    QL_BLE_IO_CAP_NO_INPUT_NO_OUTPUT = 0x03,
    QL_BLE_IO_CAP_KEYBOARD_DISPLAY = 0x04,
}ql_ble_io_cap_e

成员

成员 描述
QL_BLE_IO_CAP_DISPLAY_ONLY 仅显示000000~999999范围内的数字。
QL_BLE_IO_CAP_DISPLAY_YES_NO 显示Yes/No按钮。
QL_BLE_IO_CAP_KEYBOARD_ONLY 仅能输入000000~999999范围内的数字。
QL_BLE_IO_CAP_NO_INPUT_NO_OUTPUT 无输入无显示。
QL_BLE_IO_CAP_KEYBOARD_DISPLAY 可输入000000~999999范围内的数字,并显示该范围内的数字。

ql_ble_security_req

该函数用于发送安全连接请求。

函数原型

ql_errcode_bt_e ql_ble_security_req(uint8_t conidx)

参数

conidx

[In] 连接索引。

返回值

函数执行结果码;详见ql_errcode_bt_e

ql_ble_bond_delete_all

该函数用于删除所有绑定的BLE设备信息。

函数原型

ql_errcode_bt_e ql_ble_bond_delete_all(void)

参数

返回值

函数执行结果码;详见ql_errcode_bt_e

ql_ble_delete_specified_bound_device

该函数用于删除指定的绑定的BLE设备。

函数原型

ql_errcode_bt_e ql_ble_delete_specified_bound_device(uint8_t idx)

参数

idx

[In] 绑定设备的索引。

返回值

函数执行结果码;详见ql_errcode_bt_e

ql_ble_get_random_number

该函数用于获取硬件随机值。

函数原型

int ql_ble_get_random_number(void)

参数

返回值

硬件随机值。

ql_ble_get_idle_conn_idx_handle

该函数用于获取空闲BLE连接的索引。

函数原型

uint8_t ql_ble_get_idle_conn_idx_handle(void)

参数

返回值

空闲BLE连接的索引。

ql_ble_get_bonded_devices

该函数用于获取绑定的BLE设备信息。

函数原型

ql_errcode_bt_e ql_ble_get_bonded_devices(uint8_t *bonded_total, ql_ble_bonded_device *bonded_device)

参数

  • bonded_total

    [Out] 绑定设备的总数。

  • bonded_device

    [Out] 绑定设备信息;详见ql_ble_bonded_device

返回值

函数执行结果码;详见ql_errcode_bt_e

ql_ble_bonded_device

绑定设备信息的结构定义如下:

typedef struct
{
    uint8_t idx;
    uint8_t peer_addr_type;
    uint8_t peer_addr[6];
}ql_ble_bonded_device

参数

类型 参数 描述
uint8_t idx 绑定设备的索引。
uint8_t peer_addr_type 对端设备BLE地址类型。
0 公共地址
1 随机地址
uint8_t peer_addr 对端设备BLE地址。

ql_ble_is_device_bonded

该函数用于判断对端BLE设备是否为绑定过的设备。

函数原型

ql_errcode_bt_e ql_ble_is_device_bonded(uint8_t peer_addr_type, uint8_t *peer_addr)

参数

  • peer_addr_type

    [In] 对端设备BLE地址类型。

    • 0 公共地址

    • 1 随机地址

  • peer_addr

    [In] 对端设备BLE地址。

返回值

函数执行结果码;详见ql_errcode_bt_e

ql_ble_set_device_name

该函数用于设置BLE设备名称。

函数原型

uint8_t ql_ble_set_device_name(uint8_t* name , uint8_t len)

参数

  • name

    [In] 设备名称。

  • len

    [In] 设备名称的长度;单位:字节。

返回值

设备名称的实际长度。

ql_ble_get_device_name

该函数用于获取BLE设备名称。

函数原型

uint8_t ql_ble_get_device_name(uint8_t* name, uint32_t buf_len)

参数

  • name

    [Out] 设备名称。

  • buf_len

    [In] 设备名称的长度;单位:字节。

返回值

设备名称的实际长度。

示例

本章节主要介绍如何在应用中使用上述BLE API以及进行简单的BLE数据收发的调试。用户只需在ql_application/quectel_demo/quectel_demo_config.h中使能CFG_ENABLE_QUECTEL_BLE_PERIPHERACFG_ENABLE_QUECTEL_BLE_CENTRAL即可运行BLE
demo程序。

BLE API的示例代码文件为ql_ble_demo.c,位于ql_application/quectel_demo目录下,用户可自行查看完整示例。

BLE GATT服务器

演示步骤

步骤一:调用如下函数注册BLE事件回调函数。

ql_errcode_bt_e ql_ble_set_notice_cb(ble_notice_cb_t func)

步骤二:调用如下函数添加BLE服务。

ql_errcode_bt_e ql_ble_create_db (struct ql_ble_db_cfg* ble_db_cfg)

步骤三:调用如下函数获取空闲的BLE活动序号。

uint8_t ql_ble_get_idle_actv_idx_handle(void)

步骤四:调用如下函数获取BLE活动状态。

ql_actv_state_t app_ble_actv_state_get(uint8_t actv_idx)

步骤五:调用如下函数开启BLE广播。

ql_errcode_bt_e ql_ble_adv_start(uint8_t actv_idx, struct adv_param *adv, ble_cmd_cb_t callback)

步骤六:服务器与客户端连接后,服务器接收到客户端发送的数据可调用如下函数将数据回传至客户
端。

ql_ble_gatts_send_ntf_value(w_req->len , w_req->value, w_req->prf_id , QL_DEMO_IDX_FF03_VAL_VALUE)

代码示例

定义BLE服务:

定义BLE服务

BLE事件回调函数示例:

BLE事件回调函数

设置BLE事件回调函数并初始化BLE:

初始化BLE

设置广播参数、广播数据并开启广播:

开启广播

服务器接收数据并回传数据至客户端:

接收数据并回传

结果如下:

结果

BLE GATT客户端

演示步骤

步骤一:调用如下函数注册BLE事件回调函数。

ql_errcode_bt_e ql_ble_set_notice_cb(ble_notice_cb_t func)

步骤二:调用如下函数初始化BLE。

ql_errcode_bt_e ql_ble_init(void)

步骤三:调用如下函数获取空闲的BLE活动序号。

uint8_t ql_ble_get_idle_actv_idx_handle(void)

步骤四:调用如下函数获取BLE活动状态。

ql_actv_state_t app_ble_actv_state_get(uint8_t actv_idx)

步骤五:调用如下函数开启BLE扫描。

ql_errcode_bt_e ql_ble_scan_start(uint8_t actv_idx, struct scan_param *scan, ble_cmd_cb_t callback)

步骤六:调用如下函数停止BLE扫描。

ql_errcode_bt_e ql_ble_stop_scaning(uint8_t actv_idx, ble_cmd_cb_t callback)

步骤七:调用如下函数创建连接活动。

ql_errcode_bt_e ql_ble_create_conn(uint8_t con_idx,unsigned short con_interval,unsigned short con_latency,unsigned short sup_to,ble_cmd_cb_t callback)

步骤八:调用如下函数开始连接。

ql_errcode_bt_e ql_ble_start_conn(uint8_t con_idx,ble_cmd_cb_t callback)

代码示例

设置BLE事件回调函数并初始化BLE:

初始化BLE

设置扫描参数并开启扫描:

开启扫描

在回调函数返回的BLE_5_REPORT_ADV事件中可获取扫描结果,即周围设备的广播信息。使用app_demo_ble_adv_report_deal()解析出目标BLE设备(广播名为"test"的设备)的地址及地址类型,扫描到该目标设备后即停止广播:

解析目标BLE设备

创建连接活动并进行连接:

创建连接活动

连接

服务器接收数据并回传数据至客户端:

接收数据

回传数据

结果如下:

结果

附录 参考文档及术语缩写

参考文档:

文档名称
Quectel_FC41D&FCM100D&FCM740D&FLMx40D_QuecOpen(SDK)_快速开发指导

术语缩写:

缩写 英文全称 中文全称
AP Access Point 接入点
API Application Programming Interface 应用程序接口
BLE Bluetooth Low Energy 蓝牙低功耗
GATT Generic Attribute Profile 通用属性协议
ID Identifier 标识符
IoT Internet of Things 物联网
MAC Medium Access Control 媒体访问控制
MTU Maximum Transmission Unit 最大传输单元
RTOS Real Time Operating System 实时操作系统
SDK Software Development Kit 软件开发工具包
SDP Service Discovery Protocol 服务发现协议
USB Universal Serial Bus 通用串行总线
UUID Universally Unique Identifier 通用唯一识别码