Linux下的bluez是否可以同时连接多个经典低功耗设备?bluez 网站提供这样的信息并不是很有帮助。
问问题
2774 次
1 回答
6
是的,我已经设法同时连接到 7 个低能耗设备。最大值取决于您使用的硬件。您还可以连接到多个经典设备。
这是用于通过 L2CAP 连接的 CI 的一些伪/片段:
#include <sys/types.h>
#include <sys/socket.h>
#include <bluetooth/bluetooth.h>
#include <bluetooth/l2cap.h>
char *bdaddr;
int cid = 0;
int psm = 0;
int bdaddr_type = BDADDR_LE_PUBLIC;
int err;
struct sockaddr_l2 addr;
int sock_fd = socket(AF_BLUETOOTH, SOCK_SEQPACKET, BTPROTO_L2CAP)
memset(&addr, 0, sizeof(addr));
addr.l2_family = sock->sock_family;
str2ba(bdaddr, &addr.l2_bdaddr);
if (cid)
addr.l2_cid = htobs(cid);
else
addr.l2_psm = htobs(psm);
addr.l2_bdaddr_type = bdaddr_type;
err = connect(sock_fd, (struct sockaddr *) &addr, sizeof(addr));
我的代码是 C 和 Python 的混合体,所以我尝试对其进行重组,使其只是 C 部分。一切都来自阅读 Bluez 源代码,特别是gatttool
.
更新: 在处理 L2CAP 套接字时,Linux 内核的 bluez 代码在 3.4 版及之前的版本中存在一个错误。本质上,如果您有多个连接,它会将它们混合在一起,以便您在最后一个连接上获得所有数据。因此,如果您只建立一个 L2CAP 连接,我提供的代码将仅适用于内核 3.4 及更早版本。
于 2013-08-22T13:16:31.570 回答