访问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”。
答案 0 :(得分:1)
“创建逻辑链接命令”适用于AMP控制器,与L2CAP无关。使用LE,您可以通过固定通道自动进行“连接”,并且可以在CID 4上简单地将ATT命令作为ACL数据包发送.ACL数据包利用从HCI LE连接事件返回的连接句柄。
(在#bluez IRC频道上的某人提供回答;我不记得是谁)
答案 1 :(得分:0)
在BLE中,无论何时建立连接,都可以使用L2CAP。
您不需要connect
或其他任何内容。收到LE连接完成事件后,您就可以开始通过L2CAP进行通信了。
您提到的其他命令和数据不是LE,它们仅适用于BR / EDR。