【问题标题】:Establishing multiple BLE connections simultaneously using BlueZ使用 BlueZ 同时建立多个 BLE 连接
【发布时间】:2016-02-02 17:57:48
【问题描述】:

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

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

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

【问题讨论】:

  • 有什么理由不用DBUS接口?这是官方支持的接口,很容易同时建立多个连接(一旦你通过了 DBUS 学习曲线)。
  • 不幸的是,我必须在标准 ubuntu 14.04.03 LTS (bluez 4.101) 和 Intel Edison (bluez 5.x) 上运行代码。 ubuntu bluez 版本是 4.101,据我了解,它不能正确支持 bluez 的 dbus(或者至少不像 5.x 那样支持它)。我也了解 bluez dbus GATT 仍处于试验阶段且经常更改。
  • @mw。 : 我也在尝试类似的东西。我想知道您的项目的状态。
  • 我使用下面评论中描述的方法为 bluez 4.101 和一些早期的 5.x 工作。不幸的是,较新的版本将一堆蓝牙功能向下移动到内核中。这破坏了我的代码。解决这个问题会变得非常难看,因为内核会干扰我的代码或重写东西以禁用 bluez/kernel 访问并编写我自己的 ATT/L2CAP 例程。

标签: bluetooth-lowenergy bluez gatt


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 作为参考,我最终做的是编写一个连接例程,使用 hci_le_rm_white_list 和 hci_le_add_white_list 管理白名单条目。当我想建立一个连接时,我调用 le_create_conn(列入白名单),然后用这个连接建立一个 L2CAP 套接字。如果我需要添加更多连接请求,我用 hci_le_create_conn_cancel 停止当前连接请求,将其添加到白名单,然后用 le_create_conn 恢复。
猜你喜欢
  • 2013-04-19
  • 2015-03-08
  • 2020-11-07
  • 2016-02-02
  • 1970-01-01
  • 2016-04-18
  • 1970-01-01
  • 1970-01-01
  • 2021-07-22
相关资源
最近更新 更多