3

Linux で bluez を使用して、複数の従来の低エネルギー デバイスに同時に接続することは可能ですか? bluez サイトは、このような情報を提供するのにあまり役に立ちません。

4

1 に答える 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 ソケットを扱う場合、バージョン 3.4 以前の Linux カーネルの bluez コードにバグがあります。基本的に、複数の接続がある場合、それらが混同されるため、最後に行われた接続ですべてのデータが取得されます。したがって、L2CAP 接続を 1 つしか作成しない場合、私が提供したコードはカーネル 3.4 以前でのみ機能します。

于 2013-08-22T13:16:31.570 に答える