我已经试验了Bluez 5.50蓝牙堆栈,这里我对使用白名单的过程自动连接有一些困惑。
假设,
设备A-广告器
设备B-扫描仪
configuration
。
配对设备与白名单设备的基本区别是什么?
发布于 2022-03-28 14:19:59
白名单既可以用于扫描,也可以在连接时使用。
请注意,广告期间的数据包交换是这样的,当中央设备正在扫描时:
ADV_IND.
当中心设备对外围设备进行挂起启动(即连接尝试)时,分组交换如下:
ADV_IND.
注意,以上流中的数据包之间的定时是150微秒(T_IFS),这是相当快的。如果广告商没有检测到SCAN_REQ,它就不会发送SCAN_RSP。如果它也没有检测到CONNECT_IND,它就不会进入连接状态,而是继续做广告。需要有一个白名单,因为主机不会足够快地决定包是否应该丢弃。因此,白名单直接实现在蓝牙控制器硬件。
使用白名单的中央设备将简单地删除任何具有在白名单中找不到的地址的ADV_IND。因此,在这种情况下不发送SCAN_REQ或CONNECT_IND。
因此,“自动连接”是指发起者不断寻找发件人地址在白名单中的ADV_IND数据包时。如果找到一个,就会发送一个CONNECT_IND并建立连接,从而导致一个"LE connection Complete“事件。使用白名单是拥有两个或多个挂起连接的唯一方法,否则在启动连接时需要指定一个目标地址。(虽然有时在不能使用白名单时会使用变通方法,例如,如果它太小,无法包含所有所需的地址,那就是让中央首先执行扫描,然后启动到目标地址的连接,并且有一些短暂的超时。这会引入延迟,因为至少必须发送两个ADV_INDs。)
成对/键合的设备是完全不同的东西。这意味着这两个设备都存储在其数据库中,有关远程设备的信息,如加密密钥、客户端特征配置描述符状态、gatt db缓存。键合设备通常也会在用户界面中列出。
当在建立连接时使用白名单时,可以在此非键合设备列表中包含地址。您还可以拥有当前不希望连接到的绑定设备,然后这些设备将不包括在白名单中。
我上面写的是一般的BLE,没有任何特定的蓝牙堆栈。当使用白名单时,BlueZ可能有某些条件/流。
https://stackoverflow.com/questions/71647899
复制相似问题