BLE 扫描结果的上报

BLEScan上报

BLE 扫描结果的上报
文章图片
BLE扫描的目的是为了获取到周围环境中的BLE设备信息上报给应用层apk使用 , 本篇就来简单聊聊scan上报的那点事 。
根据协议可知 , 蓝牙芯片层会将扫描到的设备信息通过LEAdvertisingReportevent事件上报到bluedroid , 单个或者多个BLE设备的信息都可以同时上报 , 但是现行的芯片层处理方式都是依次上报 , 所以上报事件中参数Num_Reports都为1 。 还有同学不清楚HCI_LE_Advertising_Report事件的请查收《低功耗蓝牙BLE扫描》 , 里面详细介绍了该事件中各参数的具体含义 。

BLE 扫描结果的上报
文章图片
蓝牙芯片通过初始化设置的回调函数上报HCI事件 , 啥?你问我哪个回调函数…好家伙我直接一个《安卓系统蓝牙协议栈bluedroid使能流程》请收好 , 还懵逼的同学再次学习学习啊 。 HCI事件上报到协议栈无非就是解析数据 , 继续上报到蓝牙服务层进行数据封装处理 , 最后服务层再通过应用设置的回调函数直接上报这几个步骤 , 接下来就以时序图简单过下安卓系统中scan上报流程:

BLE 扫描结果的上报
文章图片
BLE 扫描结果的上报】经过如上流程 , 蓝牙芯片依次上报HCI_LE_Advertising_Report事件

BLE 扫描结果的上报
文章图片
应用层apk就成功接收到周围环境中所扫描到的BLE设备信息 , 这些数据中相对而言比较重要的有如下两种数据:
EventTypes:对方BLE设备所发广播的类型 , 决定了该广播的用途
Addresses:BLE设备的地址值

BLE 扫描结果的上报
文章图片
在蓝牙服务层GattService处理上报数据时 , 会再次过滤数据将符合条件的BLE设备上报给相对应的应用apk , 因此BLE扫描一般会有如下两个地方进行过滤操作:
蓝牙芯片 , 芯片里有多个过滤器 , 因此可以同时过滤多个条件 , 多个过滤器是或的关系 , 只要符合一个过滤器的要求 , 则该BLE设备信息就会上报
蓝牙服务层 , 过滤符合单个apk的要求 , 并将达标的BLE设备信息上报给该应用
Scanfilter过滤器功能能够最大程度上避免不必要的设备信息上报 , 从而只关注自己感兴趣的信息 , 大大提高了效率 。
本期分享到这儿就结束了 , 感兴趣的小伙伴欢迎私信留言一起讨论 , 共同学习 , 一起进步!