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

时间:2015-11-02 18:39:59

标签: bluetooth-lowenergy bluez gatt

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

gatt_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)句柄集成,还是同时建立多个连接的alernative方法?

1 个答案:

答案 0 :(得分:4)

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

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

我怀疑即使DBUS方法提到的只是对HCI方法的抽象,它仍然是按顺序建立连接的过程。

尽管你使用了白名单方法,但我不确定它的实际速度有多快,因为问题是连接间隔以及广告间隔。白名单通过侦听广告包并在检测到连接时建立连接来工作。我也从未使用白名单方法,但你可能不得不使用HCI套接字并自己处理多个设备而不是多个设备。

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