访问L2CAP的常用方法是创建一个L2CAP套接字,只需在其上调用connect()
即可连接到要访问的蓝牙设备。 这通常完全可以正常工作。 但是,我正在尝试在具有 Linux 内核 3.0 的 ARM 设备上执行此操作,并且似乎存在一个令人讨厌的错误,即如果没有所有数据,您就无法拥有多个 L2CAP 连接,而最后创建的通道。 (即,如果我使用2个l2cap插座连接到2个蓝牙传感器,则两个设备的所有通知都通过最后打开的插座发出,而插座上没有任何东西先打开。 但是,如果我在 HCI 套接字上设置过滤器,我可以看到 ACL 数据通过正确的连接句柄,以便我可以在那里正确获取数据。
所以。。。 我想更改我的代码以仅使用 HCI 套接字。
我的问题是,我不确定如何(甚至是否可能)。 HCI 中有一个"创建逻辑链接命令",它似乎会创建一个 L2CAP 连接,但这些参数对我来说毫无意义。 通过 LE 建立 HCI 连接后,我得到一个"连接完成事件",它给了我一个 2 个八位字节的"Connection_Handle"。 不过,"创建逻辑链接命令"采用 1 个八位字节的"Physical_Link_Handle"。
"创建逻辑链接命令"适用于 AMP 控制器,与 L2CAP 无关。 使用 LE,您可以自动通过固定通道建立"连接",并且可以简单地将 ATT 命令作为 CID 4 上的 ACL 数据包发送。 ACL 数据包使用从 HCI LE 连接事件返回的连接句柄。
(在 #bluez IRC频道上礼貌回答;我不记得是谁了)
在 BLE 中,每当您建立连接时,都可以使用 L2CAP。
您无需connect
或其他任何事情。收到 LE 连接完成事件后,您就可以开始了,您可以开始通过 L2CAP 进行通信。
您提到的其他命令和数据不是 LE,它们仅适用于 BR/EDR。