1.如何打开BLE
在target.mk文件中设置BLE ?= 1,如下图所示。如果协议栈用的是ble_stack_v2(..\Services路径下还有ble_stack_v2文件夹),则还需要打开BLE_V2 ?= 1。
2.BLE相关文件
- stack中相关接口文件在\services\ble_app\app_mian目录下app.c、app_task.c、app_ble_mode_switch.c。
3.Adv和scan rsp数据格式
如BT SPEC Vol3 PartC 11中介绍,adv和scan rsp的格式如下所示,其中Length指ad type + ad data的长度。
- ad type指该段广播数据类型,常见的有Flag(0x01)、Complete Local name(0x09)、Services data(0x16),具体参考Spec:Generic Access Profile
- ad data指该段广播数据,所有发出的adv以及scan rsp数据都必须满足该格式要求,否则无法正常发送。

4.广播模式
广播模式主要分为legacy adv(传统广播)和extended adv(可扩展广播),两者主要区别:
- legacy adv模式下,adv和scan rsp最大长度为31Bytes
- extended adv模式下,adv和scan rsp最大长度为255Bytes,但只能被支持spec5.0及以上的设备扫描到。
5.如何添加新的广播
(1)创建USER_X
在app_ble_mode_switch.h文件中的BLE_ADV_USER_E中的BLE_ADV_USER_NUM前面添加需要注册的USER_X。
(2)定义数据填充函数
定义USER_X的广播数据填充接口,可参考app_ble_stub_user_data_fill_handler。
Notes:
- adv data和scan data需要按照前面的步骤进行填充
- 通过app_ble_data_fill_enable函数,来使能/禁用USER_X的adv和scan rsp
(3)初始化
在初始化阶段通过接口app_ble_register_data_fill_handle注册USER_X的数据填充函数,参考如下
(4)Log分析:
- log中搜索app_ble_data_fill_enable,确认USER_x是否使能;
- log中搜索HCI TX的数据:01 37 20,确认该数据包中是否包含USER_X的adv数据;或01 038 20,确认该数据中是否包含USER_x的scan rsp数据。如下示例:01 37 20中包含了3组广播数据。
6.如何开始广播
调用接口app_ble_start_connectable_adv开始广播,或接口app_ble_refresh_adv_state刷新广播。
7.如何确认广播成功
(1)如第5点第(4)条log分析中所说,确认USER_X的数据已经成功添加;
(2)通过01 37 20 或者 01 38 20 确认改adv、scan rsp的handle(第5个byte),通过01 39 20确认该handle有使能,01 39 20 第 5 个 byte 代表是否使能,第 7 个 byte为 handle。也可通过 activity state 状态判断,当 actv state 从 4 变成 5 即该 adv 已经成功。如下:
以上就是BES平台BLE模块基础经验分享,多有不足,还望补充指正!!!