使用 BlueZ 同时建立多个 BLE 连接

Establishing multiple BLE connections simultaneously using BlueZ

我有一个 Linux C 应用程序,它需要与 BLE 设备建立多个连接。该应用程序使用从 gatttool 中剥离的库。 BLE 设备的广播速度非常慢,因此需要很长时间才能建立连接。因此,我需要能够同时发出多个 gatt_connect 请求。

gatt_connect 使用标准 socket/connect 建立到设备的 L2CAP 连接。尽管此方法允许您拥有多个活动连接,但它一次只允许您建立一个连接。使用 HCI 接口,您可以同时建立多个接口(即 hcitool lecc --whitelist),但是我想不出办法让它与 gatttool 库 L2CAP socket/connect.

谁能建议一种将 gatttool L2CAP socket/connect 与 "hcitool lecc --whitelist" 使用的 hci 接口 (hci_open_dev/hci_le_create_conn) 句柄集成的方法,或者同时建立多个连接的替​​代方法?

我认为白名单方法是处理同时建立多个连接的唯一方法。 HCI 一次只能处理建立一个连接,因为(如果我没记错的话)在建立连接之前你没有任何连接句柄。

L2CAP 套接字是利用 HCI 方法的内核抽象。如果您尝试在一个连接挂起时启动另一个连接,我认为您会收到错误消息。

我什至怀疑提到的DBUS方法只是对HCI方法的抽象,它仍然是一个顺序连接的过程。

不过,即使您使用了白名单方法,我也不确定它实际上会快多少,因为问题在于连接间隔和广告间隔。白名单通过侦听广告数据包并在检测到它们时建立连接来工作。我也从未使用过白名单方法,但您可能必须使用 HCI 套接字并自己处理通过该套接字多路复用不同设备。

大多数硬件允许您在扫描的同时建立连接,因此您可以在等待当前连接建立的同时收集新的广告包。连接建立完成后,您可以转到下一个。只要可以相对快速地建立连接,使用白名单就没有任何好处。 (实际的底层实现可能以任何方式相同)