0

私がやりたいことはこれです: 特定の Bluetooth デバイス (BD_ADDR) のデータベースがあります。デバイスのいずれかが範囲内にあるかどうかを確認し、範囲内にある場合は、何かを行うように指示したいと考えています。1 つの方法は、常に検出を​​実行し、検出されたデバイスのリストを作成して、それをデータベースと比較することです。データベースに存在するデバイスが見つかった場合は、そのデバイスとの接続を開き、何かを行うように指示します。問題は、このプロセスが遅く、すべてのデバイスを確実に見つけるには、問い合わせの長さが長く、プロセスを常に繰り返さなければならないことです。

私のアイデアは、Bluetooth を 1 回だけ検出し、それをデバイスとペアリングし、それ以降、デバイスが範囲内に来るたびに、長時間の検出を行うのではなく、このデバイスについて既に持っている情報を使用して接続を確立することです。 .

つまり、デバイスについて既に知っている情報 (以前にペアリングしたことがある、または接続したばかりの情報) を使用して、最初にデバイスを検出することなく、デバイスとの通信を開始することは可能ですか?

ありがとう、donescamilloATgmail.com

4

1 に答える 1

0

Bluetoothに使用しているライブラリと、通信する予定のソケットの種類は何ですか? ほとんどの場合、BD_ADDR がわかっている場合は、デバイスへのソケット接続を作成するだけで済みます。たとえば、BlueZ では、チャネル 1 で既知のサーバーへの RFCOMM 接続を作成するために、次のように記述するだけで済みます。

struct sockaddr_rc addr = { 0 };
int s, status;

// destination address
char dest[18] = "00:17:EC:35:96:FF";

// allocate a socket
s = socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM);

// set the connection parameters (who to connect to)
addr.rc_family = AF_BLUETOOTH;
addr.rc_channel = 1;
str2ba( dest, &addr.rc_bdaddr );

// connect to server
status = connect(s, (struct sockaddr *)&addr, sizeof(addr));

お役に立てれば。

于 2013-03-20T13:57:46.100 に答える