BLE(14)—— Device Filtering

it2022-05-05  165

基于 BLE 5.1 协议 Core Spec。

 

目录

1、White List

2、Advertising Filter Policy

3、Scanner Filter Policy

4、Initiator Filter Policy

5、Configuration


 

BLE 提供设备地址过滤机制,设备的过滤机制是基于 White List(白名单,也称白表)。旨在Link Layer进行设备回应机制的最小化。在不同的 State 会有不同的 filter 策略,按照 State 来分为:

Advertising State 过滤策略

Scanning State 过滤策略

Initiating State 过滤策略

 

1、White List

白名单,可以理解为一组设备地址的集合,Link Layer 通过记录在白名单上的地址信息(地址和地址类型),在不同的 State 启动不同的过滤策略。

注:White List 属于一个功能,可以开启,也可以关闭

White List (后面简称 WL)中存储的白名单,由上层指定。那么一个系统有多少个 WL 呢?肯定不是无限个。这个和具体的 BLE BaseBand 的硬件实现有关系,绝大多数情况下,WL 过滤都是由硬件来做的(软件做也行,不过每次都要收包后,再去判断,这样造成工作量非常之大),硬件来做这个的话,就需要消耗硬件资源来存储地址信息,所以不同的基带实现,会有不同的 WL 支持的个数。上层可以通过 HCI 命令,来获取 Link Layer 支持的 WL 的设置个数(Link Layer 其实是和硬件交互,返回硬件能够支持的 WL 的个数)。上层知道最多能够同时存在多少个 WL,就可以更好的进行配置,利用。

在系统初始化初期,WL 为空(合理)。后续根据业务情况,上层进行配置。

 

2、Advertising Filter Policy

Advertising Filter Policy 过滤策略指明了 Advertising 如何处理 Scan 和 Connection 请求。

注:如果 Link Layer 使用如下类型的广播,那么 Advertising Filter Policy 过滤策略被忽略:

1、non-connectable and non-scannable directed advertising events

2、scannable directed advertising events

3、connectable directed advertising events

其实翻译一下,就是定向广播不用过滤策略,因为定向广播指定了对端的地址,这就算是过滤了。

Advertising Filter Policy 过滤策略有 4 种 Mode,并且同一时间只能处于其中一种 Mode:

Mode

Advertising Filter Policy

1

Link Layer只接受位于 WL 白名单中的设备的 Scan connection 请求(最严格);

2

Link Layer可以接受任何设备的 Scan connection 请求(最不严格,Controller reset后的默认状态);此时白名单无作用

3

Link Layer可以接受任何设备的 Scan 请求,但只接受位于白名单中的设备的 connection 请求;

4

Link Layer可以接受任何设备的 connection 请求,但只接受位于白名单中的设备的 Scan 请求;

 

3、Scanner Filter Policy

因为 Scanner 只和 Advertising 交互,故 Scanner Filter Policy 指明了扫描者如何处理 Advertising Packages,在同一时刻,使用且仅仅只能使用下述策略中的一种过滤策略:

Mode

Scanner Filter Policy

1

Link Layer 只处理位于白名单中的设备的广播数据,并且忽略没有包括该 Scanner 的 Connectable Directed advertising packet

2

Link Layer 处理所有设备的广播数据,并且忽略没有包括自身地址的 Connectable Directed advertising packetController reset后的默认状态),此时白名单无作用

注:如果 Link Layer 支持 Extended Scanner Filter 策略,则下述策略也需要支持

Mode

Scanner Filter Policy

3

Link Layer 只处理位于白名单中的设备的广播数据,并且不能忽略InitA地址为“resolvable private address”connectable Directed advertising packet

4

Link Layer处理所有设备的广播数据,并且不能忽略InitA地址为“resolvable private address”connectable Directed advertising packet

 

4、Initiator Filter Policy

因为 Initiator 只和 Advertising 交互,故 Initiator Filter Policy 指明了扫描者如何处理 Advertising Packages,在同一时刻,使用且仅仅只能使用下述策略中的一种过滤策略:

Mode

Initiator Filter Policy

1

Link Layer只处理位于白名单中的设备发送的可连接的广播包,并在收到的时候发起连接请求;

2

忽略白名单,Link  Layer处理由Host指定的设备所发送的可连接的广播包,并在收到的时候发起连接请求。

 

5、Configuration

综上所述,我们知道了白名单机制是用于过滤的,不同的状态,有自己的 Mode,那么我们怎么样告诉 Link Layer ,我们想让当前的状态处于什么 Mode 呢?当然也是由上层发送给的 HCI 指定的。打个比方,我们要开启一个 ADV,根据开启 ADV 的流程,先需要配置 ADV 的参数,我们看看这一条 HCI:

看到最后一个参数了么,这个参数就决定了我们将要启动的这个 ADV 的 Fliter Policy,我们看看这个字段的解释:

看到了么,这里的 4 个 Mode,就对应到了 Link Layer 让 Advertising 进入的 Fliter Polcy 的 Mode。

其他两个状态类似,这里不再多说。

 

 


最新回复(0)