通过HCI套接字连接L2CAP?

时间:2013-10-28 16:09:39

标签: bluetooth bluetooth-lowenergy bluez hci l2cap

访问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”。

2 个答案:

答案 0 :(得分:1)

“创建逻辑链接命令”适用于AMP控制器,与L2CAP无关。使用LE,您可以通过固定通道自动进行“连接”,并且可以在CID 4上简单地将ATT命令作为ACL数据包发送.ACL数据包利用从HCI LE连接事件返回的连接句柄。

(在#bluez IRC频道上的某人提供回答;我不记得是谁)

答案 1 :(得分:0)

在BLE中,无论何时建立连接,都可以使用L2CAP。

您不需要connect或其他任何内容。收到LE连接完成事件后,您就可以开始通过L2CAP进行通信了。

您提到的其他命令和数据不是LE,它们仅适用于BR / EDR。