Hi!请登陆

BLE 扫描结果的上报

2021-2-26 37 2/26

BLE Scan上报

BLE扫描的目的是为了获取到周围环境中的BLE设备信息上报给应用层apk使用,本篇就来简单聊聊scan上报的那点事。

根据协议可知,蓝牙芯片层会将扫描到的设备信息通过 LE Advertising Report event 事件上报到bluedroid,单个或者多个BLE设备的信息都可以同时上报,但是现行的芯片层处理方式都是依次上报,所以上报事件中参数 Num_Reports 都为1。还有同学不清楚 HCI_LE_Advertising_Report
事件的直接点击这里《低功耗蓝牙BLE扫描》,里面详细介绍了该事件中各参数的具体含义。

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

经过如上流程,蓝牙芯片依次上报HCI_LE_Advertising_Repor事件

应用层apk就成功接收到周围环境中所扫描到的BLE设备信息,这些数据中相对而言比较重要的有如下两种数据:

Event Types:对方BLE设备所发广播的类型,决定了该广播的用途

Addresses:BLE设备的地址值

在蓝牙服务层GattService处理上报数据时,会再次过滤数据将符合条件的BLE设备上报给相对应的应用apk,因此BLE扫描一般会有如下两个地方进行过滤操作:

蓝牙芯片,芯片里有多个过滤器,因此可以同时过滤多个条件,多个过滤器是或的关系,只要符合一个过滤器的要求,则该BLE设备信息就会上报

蓝牙服务层,过滤符合单个apk的要求,并将达标的BLE设备信息上报给该应用

Scan filter过滤器功能能够最大程度上避免不必要的设备信息上报,从而只关注自己感兴趣的信息,大大提高了效率。

本期分享到这儿就结束了,感兴趣的小伙伴欢迎私信留言一起讨论,共同学习,一起进步!

更多互联互通技术,欢迎关注微信公众号:Connectivity

相关推荐