8

C++ で Bluetooth 通信に関する情報を取得するのは非常に難しいと思います。具体的には、サードパーティのライブラリの使用を避けたいと思っており、自分のコンピューターと既にペアリングされているデバイスに接続したいだけです。

デバイスには既にパスコードが入力されており、[デバイスとプリンター] の下の [Bluetooth デバイスの表示] で使用できます。私は C++ での開発に Windows 7 と Visual Studio 2013 Professional を使用しています。

Bluetooth ラジオに情報を表示し、デバイス情報を表示するサンプル コード (ここからhttp://www.winsocketdotnetworkprogramming.com/winsock2programming/winsock2advancedotherprotocol4k.html ) を入手しましたが、うまく機能しているようです。範囲内にあるものではなく、コンピューターと既にペアリングされているすべての Bluetooth デバイスを出力していますが、コードが何をするのかを誤解している可能性があります。

私は Bluetooth リファレンス ページ ( http://msdn.microsoft.com/en-us/library/windows/desktop/aa362930%28v=vs.85%29.aspx ) を調べてきましたが、すべての機能はBluetooth 無線の可用性の設定などを行います。見つかったデバイスに接続する兆候はまったくありません。

Bluetoothデバイスへの接続について何も見つけられなかったので、グーグルなどで間違ったキーワードを使用して、何かが欠けているに違いありません!

誰かが素晴らしい提案、コード、またはリンクを持っていれば! シリアル機能を使用して (非常に簡単に) デバイスに接続できますが、デバイスが登録されている COM ポートを手動で入力する必要があり、ユーザー フレンドリーではありません。Bluetooth デバイス名をスキャンして選択または入力し、その方法で接続したい。

乾杯

編集:

BitBanks の回答は、私を正しい方向に向けてくれました。欠けているのは、ソケット要求の前の WSAStartup 要求だけでした。

WORD wVersionRequested;
WSADATA wsaData;
int err;

/* Use the MAKEWORD(lowbyte, highbyte) macro declared in Windef.h */
wVersionRequested = MAKEWORD(2, 2);

err = WSAStartup(wVersionRequested, &wsaData);
if (err != 0) {
    /* Tell the user that we could not find a usable */
    /* Winsock DLL.                                  */
    printf("WSAStartup failed with error: %d\n", err);
    return 1;
}
4

1 に答える 1

10

検出またはペアリングされたデバイスのリストから Bluetooth アドレスを取得している場合は、次のように接続できます (エラー チェックを追加する必要があります)。

#include <winsock2.h>
#include <ws2bth.h>
SOCKADDR_BTH sockAddr;
SOCKET btSocket;
int error;

   btSocket = socket(AF_BTH, SOCK_STREAM, BTHPROTO_RFCOMM);
   memset (&sockAddr, 0, sizeof(sockAddr));
   sockAddr.addressFamily = AF_BTH;
   sockAddr.serviceClassId = RFCOMM_PROTOCOL_UUID;
   sockAddr.port = BT_PORT_ANY;
   sockAddr.btAddr = <your bluetooth address>
   error = connect(btSocket, (SOCKADDR*)&sockAddr, sizeof(sockAddr));

一部のデバイスは、RFCOMM_PROTOCOL_UUID の代わりに SerialPortServiceClass_UUID をアドバタイズします。また、接続を数回再試行する必要がある場合もあります。一部の実装が不十分な bluetooth デバイス (PowerA モガ咳)では、接続を複数回試行する必要があります。

これは正式な方法ではないかもしれませんが、次のようにペアリングされたリストから、関心のあるデバイスの 6 バイトの BT アドレスを取得します。

unsigned char *p;
ULONGLONG ullAddr;

   p = (unsigned char *)pwsaResults->lpcsaBuffer->RemoteAddr.lpSockaddr; // point to addr
   memcpy(&ullAddr, &p[2], 8); // copy Bluetooth address of device we found
于 2013-11-20T02:09:57.833 に答える