【炬芯(Actions)BLE ATB110X】 BLE Central 设计说明

1 概述

1.1 文档目的
通过一个简单的示例介绍BLE Central 的编写方法,供用户学习参考。
1.2 术语说明



1.3 参考文档
• https://www.bluetooth.com/specifications/gatt
• https://www.bluetooth.com/specifications/bluetooth-core-specification
 
2 BLE Central 概述

2.1 BLE Central 简介
根据GAP (通用访问配置文件) 中的定义,主动发起连接的设备称为Central,作为链路层的主设备, 接受连接的设备称为Peripheral,作为链路层的从设备。
在GATT 中定义了两种角色:Server 和Client。
GATT Server 是向GATT Client 提供数据服务的设备,GATT Client 是从GATT Server 读写应用数据的设备。
GATT 角色不与特定的GAP 角色相关联。但在多数应用中,Central 会实现GATT Client 角色,Peripheral 会实现GATT Server角色,
下面以该应用场景描述Central-Peripheral 之间通信模型,如图所示:



更多信息请登录Bluetooth 官网:
• 核心规格:  https://www.bluetooth.com/specifications/bluetooth-core-specification
• GATT 规格:  https://www.bluetooth.com/specifications/gatt
对于所有的BLE Central,它们几乎都遵循同一流程:



下面以sample\bluetooth\central_rmc 示例为例,说明BLE Central 的程序流程。

3 BLE Central 编写

3.1 central_rmc 示例简介
central_rmc 是BLE Central 的一个示例, 用于连接遥控器(工程路径:samples\voice_rcu\keil5\peripheral_rmc)。
它通过匹配广播数据包和扫描回应数据包中的设备名,对远端设备发起连接。连接成功后,发现服务,使能notify, 最后接收并打印notification 的内容。

3.2 central_rmc 程序流程
central_rmc 几乎和一般BLE Central 的流程一致,如图所示:



在central_rmc 中,首先调用bt_enable 完成蓝牙协议栈的初始化,随后调用start_scan启动扫描。
当空中接口扫描到广播包时,扫描回调函数device_found 会被调用,用来解析扫描到的广播数据和扫描回应数据,
当设备名和RMC_NAME 相同时,它会先停止扫描,随后发起连接。
连接成功后connected 函数会被调用,它会发送一个类型为MSG_CONNECTED 的异步消息,主函数接收到该消息后会调用start_discover启动发现。
当发现到服务时discover_func 会被调用,发现完成后discover_func 会发送类型为MSG_DISCOVER_COMPLETE 异步消息,

主函数接收到该消息后会调用nofity_enable 开启所有通知,并将所有开启的通知注册进协议栈,至此所有的命令和动作都执行完毕。
当远端设备有通知上报时,通知回调函数notify_func 会被调用,打印上报的数据。

注意: 为保证所有请求/命令的同步,务必不要在回调函数中执行BLE 命令或请求,须采用异步消息的方式在主函数中进行操作。

3.3 central_rmc 配置

1. 目标设备名称配置
central_rmc 根据广播中的设备名对远端设备发起连接,修改方法:

 
2. 扫描参数配置
默认采用主动扫描方式,type 等于BT_HCI_LE_SCAN_ACTIVE,该扫描方式可接收扫描回应, 但不可接收定向广播包,
相反的有被动扫描,type 等于BT_HCI_LE_SCAN_PASSIVE, 被动扫描无扫描回应, 可以收到定向广播包。
filter_dup 用于过滤重复广播包, 当值为BT_HCI_LE_SCAN_FILTER_DUP_DISABLE 时不进行过滤,
当值为BT_HCI_LE_SCAN_FILTER_DUP_ENABLE 时使能过滤,应用将收不到相同广播包。



3. 安全等级配置


4. 发现参数配置
发现过程分为两种: 根据UUID 发现服务/特性和发现所有服务/特性。发现的类型有5 种: 主服务、次要服务、包含服务、特性和描述符。
当uuid为NULL 时发现所有服务/特性,为具体UUID 时则发现特定服务/特性。
start_handle 和end_handle 用于限定发现服务/特性的handle 的范围。



5. 可发现的服务最大个数配置



6. 服务的最大特性个数



7. 通知配置

当远端设备是遥控器时,配置下面宏为1,当远端设备不是遥控器时,需要将该宏配置为0。


4 BLE Central 常用API 



 

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论