2013-10-28 15 views
2

访问L2CAP的常用方法是创建一个L2CAP套接字,只需调用connect()即可连接到您要访问的蓝牙设备。这通常工程完全正常。但是,我试图在一个带有Linux内核3.0的ARM设备上执行此操作,并且似乎存在一个令人讨厌的错误,即如果没有所有数据下来,哪个通道最后创建的通道就无法连接多个L2CAP连接。 (也就是说,如果我连接到2个蓝牙传感器和2个l2cap插座,两个设备的所有通知都会通过最后一个打开的套接字打开,并且没有任何事情先打开套接字。)但是,如果我将过滤器设置在HCI套接字上,我可以看到ACL数据正在通过正确的连接句柄传递,所以我可以在那里正确地获取数据。通过HCI套接字进行L2CAP连接?

所以...我想改变我的代码,只使用HCI套接字。

我的问题是,我不知道如何(或者即使这是可能的)。在HCI中有一个“创建逻辑链接命令”,看起来好像会创建一个L2CAP连接,但这些参数对我来说没有任何意义。在通过LE建立HCI连接后,我得到一个“连接完成事件”,它给了我一个2个八位字节“Connection_Handle”。然而,“创建逻辑链接命令”需要1个八位字节“Physical_Link_Handle”。

回答

0

在BLE,当你建立连接,则L2CAP是随时可以使用。

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

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

1

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

(回答礼貌有人在#bluez IRC频道,我不记得是谁)