1

我有 MFi 设备,它使用 BLE 进行控制,使用经典蓝牙进行音频流传输。

在应用程序中,我使用 coreBluetooth 框架来扫描 BLE 和 EAAccessory 框架来扫描经典蓝牙。如果目标设备的经典蓝牙尚未连接,我不希望连接目标设备的 BLE。所以我需要知道哪个 EAAccessory 对应于目标 CBPeripheral。

我熟悉coreBluetooth,有UUID字符串来识别CBPeripheral。但它看起来在 EAAccessory 中不存在。我有一个想法但不确定:也许固件端可以将EAAccessory的序列号CBPeripheral的制造数据配置在相同序列号的广告数据中,以便App端可以检查它们是否相同。

有谁知道在应用程序端和固件端实现此功能的一般方法吗?

4

1 回答 1

1

我真的不认为两者之间有任何关系。BT和BTLE在外设端和手机端由不同的芯片管理。
通常在 BT 中,您使用 MAC 地址来识别 BTLE 端的外围设备,因为 iOS 在第一次连接时将其自己的标识符提供给外围设备,因此不再使用 MAC 地址。
您可以做的可能是在固件方面,通过公开具有某种特征的服务以某种方式与 2.
UPDATE AFTER COMMENT
我看到,据我所知,不存在最佳实践。最糟糕的部分是你有以不同的方式处理连接,主要是由于 iOS 端的连接方式。虽然在 BLE 上,您可以选择不需要配对或绑定的未加密连接,但在 BT 方面,我猜想需要绑定。
可能最简单的流程是,用户绑定 BT 设备。进入应用程序并检测到连接的 BT 设备后,使用扫描方法通过过滤设备公开的特定服务 ID 来检测 BLE 配套设备,一旦您这样做,您还可以使用 BLE 名称过滤发现,而无需制作联系。
Adv 数据包的大小受到限制(29 个可用字节),但您也可以使用扫描响应(31 个字节),它会公开一些附加属性,例如将在字典中公开的制造商数据 ( kCBAdvDataManufacturerData)。
一旦您知道这是正确的设备,您就可以开始连接,它不需要配对或绑定但未加密(配对和绑定将要求用户在您的应用程序中接受连接)。

于 2018-12-19T04:21:38.597 回答