2 个设备之间的并发 L2CAP 和/或 GATT 连接

Posted

技术标签:

【中文标题】2 个设备之间的并发 L2CAP 和/或 GATT 连接【英文标题】:Concurrent L2CAP and/or GATT Connections between 2 Devices 【发布时间】:2022-01-10 05:30:15 【问题描述】:

我想知道这里是否有人知道是否可以在两个设备之间同时建立两个活动连接。

设备 A 将是一个连接中的中心角色,而同一设备将在另一个活动连接中扮演外围设备的角色。另一个设备,设备 B,然后将分别承担外围和中心角色。设备 B 是 ios 手机,设备 A 是树莓派。两个连接都使用 L2CAP 通道,或者一个连接将使用 GATT/ATT,而另一个连接将是 L2CAP 通道。

如果这不可能,是否有可能在设备 A 中有 2 个应用程序,每个应用程序都使用 btstack 宣传自己独特的服务,然后让设备 B 充当中心并连接/订阅两个宣传的服务同时来自设备 A 的应用程序?

下面关于 Stack Overflow 的帖子似乎得出结论,这可能是可能的,但在技术上不在蓝牙规范范围内。 Can a single BLE central connect with multiple BLE peripherals via bluetooth low energy? 该组的另一篇文章 (https://groups.google.com/g/btstack-dev/c/FjEhludeL6U) 似乎提出了类似的问题,但使用了 SPP。

【问题讨论】:

iOS 设备可以同时充当中心和外围设备。作为一个中心,它可以连接到多个外围设备。作为外围设备,它可以接收来自多个中心的连接。两种模式同时支持 L2CAP 连接。如果树莓派不能同时扮演这两个角色,我会感到惊讶。 感谢您的澄清 【参考方案1】:

如果我们谈论 BLE,那么两个设备之间只能有一个链路层连接。每台设备也只有一个 GATT 数据库。

但是,两个 GATT 角色可以同时处于活动状态,这意味着您可以在每台设备上同时独立运行一个 GATT 服务器软件和一个 GATT 客户端软件。我所知道的所有操作系统也可以将多个想要充当 GATT 客户端的应用程序“多路复用”到单个 GATT 链路上。当作为 GATT 服务器时,每个应用程序都可以在通用 GATT 数据库中注册自己的服务。

对于具有基于信用的流量控制的面向 L2CAP 连接的通道,您可以在同一个 BLE 连接上运行多个此类连接。

所以是的,您尝试实现的目标似乎绝对是可能的。

【讨论】:

感谢您的澄清

以上是关于2 个设备之间的并发 L2CAP 和/或 GATT 连接的主要内容,如果未能解决你的问题,请参考以下文章

L2CAP 通道,已发送但未到达的字节

蓝牙 GATT 向 BLE 设备发送数据

七L2CAP

Android BLE GATT 断开与设备断开

Android BLE GATT 外设模式通知

在没有发布 GATT 配置文件的情况下解释来自 BLE 设备的数据