有什么可以从根本上杜绝以下情况的发生吗?
假设您有两部具有蓝牙低功耗功能的智能手机。我询问的是 IOS 或 Android 设备的任意组合。
两款手机同时充当 BLE 外围设备和 BLE 中央设备。每部手机作为中央设备连接到另一部手机的外围元件。
这可能吗?
我的用例如下:我希望两部手机都宣传相同的 BLE 服务 (Q)。然后,当手机进入联系范围时,我希望它们自动相互连接并读取另一部手机的 Q 的所有特征。
蓝牙 SIG 明确禁止在相同的两个设备之间建立多个连接。蓝牙核心规范 v6.0 第 6 卷 B 部分第 4.5 节(连接状态)中明确概述了此限制:
当两个设备连接时,两个设备的行为不同 角色。中心角色中的链路层称为中心。一个链接 层中的Peripheral角色称为Peripheral。中央 控制连接事件的时间。连接事件是 中央和外设之间的同步点。 两个 LE 设备地址(包括两个不同的可解析地址)之间只能有一个 ACL 连接,无论是否建立。 解析为相同 IRK 的私有地址)。发起人应 不向已连接的广告商发送连接请求 到。周期性广告商不得向 已连接的同步设备。
此规范明确防止出现您问题中描述的情况。当两个设备之间存在连接时,它们分别充当 Central 和 Peripheral,并且它们之间只允许单个 ACL(异步无连接)连接。
在您的使用案例中,两部手机同时充当 BLE 外围设备和中央设备以相互连接并读取同一 BLE 服务 (Q) 的特征,这种设置在蓝牙规范下不可行。每部电话都将被限制为与另一部电话的单个 ACL 连接,从而防止作为中央设备和外围设备同时连接。