Bluetoothの信号を受け取ってみるのを目標に、今回はまず一覧取得まで作ってみた(コードはGistに投げました)。
こちらのページを参考に、C++で作成。変更したのはwcoutとendlをそれぞれstd::wcout,std::endlにして#include<iostream>を追加したくらい。
基本的には、
- radio側の情報取得用配列(para_radio)を用意し初期化
- radio側ではHANDLEを作成、BluetoothFindFirstRadioでPC側の持っているBTH機器の位置(?)を構造体に送る(findで成功失敗を確認)
- 成功した場合、BluetoothGetRadioInfoでPC側の機器情報を用意した配列(info)に送る
- 機器名出力、BluetoothFindNextRadioで次のBTH機器を確認、あれば3へ
- device側の情報取得用配列(para_dev)を用意し、情報取得のためのフラグ設定を行う
- BluetoothFindFirstDeviceで情報を取得する
- 機器名出力後、BluetoothFindNextDeviceで次の機器を確認、あれば6へ
HANDLE型のradioは、FILEみたいな振る舞いをするものかと思ったけれど、device側ではHANDLE型は使われていない。radio側とdevice側で扱う関数は、似ているけれど部分で違うようです。
visual studioで、構造体名などで右クリックで定義が見られることを知ったので、ヘッダファイルの見方も慣れていきたいと思いつつ。
--
構造体BLUETOOTH_DEVICE_SEARCH_PARAMSに関して、
定義では
BOOL fReturnAuthenticated; // IN return authenticated devices
BOOL fReturnRemembered; // IN return remembered devices
BOOL fReturnUnknown; // IN return unknown devices
BOOL fReturnConnected; // IN return connected devices
BOOL fIssueInquiry; // IN issue a new inquiry
UCHAR cTimeoutMultiplier; // IN timeout for the inquiry
HANDLE hRadio; // IN handle to radio to enumerate - NULL == all radios will be searched
とあったが、実際にどうなるのか気になったのでfReturnUnknownとfReturnConnectedのみ確認しました(他はすべてTRUE)。
windows側のBluetooth設定で「BSHSBE21(ペアリング済)」「iphone(ペアリング可能」「不明なデバイス」の3つが表示されている状態での実行結果です。
fReturnUnknownはTRUEにすると「名前の取得に失敗していても表示」、fReturnConnectedは「ペアリング済のみ表示」になるようです。
0 件のコメント:
コメントを投稿