7
  • C/C++ でイベントを検出しようとしています。
  • Bluetooth ライブラリとして Linux で Bluez を使用しています。
  • 私たちの目的は、そのイベントがトリガーされたときに外部スクリプトを実行することです。
  • 具体的には、Motorola H730 ヘッドセットにボタンが付いており、そのボタンが押されたことを検出しようとしています。
  • Bluetooth デバイス (hcitool) をペアリングし、それに接続できます (bluez-test-audio) が、そのアプローチを C/C++ に移行することに興味があります。
  • デバイスが接続され、ボタンが押されたときの hcidump の出力は次のとおりです。

    HCI スニファー - Bluetooth パケット アナライザー バージョン 2.2
    デバイス: hci0 snap_len: 1028 フィルター: 0xffffffff

    HCI イベント: モード変更 (0x14) plen 6
    ステータス 0x00 ハンドル 21 モード 0x00 間隔 0
    モード: アクティブ
    ACL データ: ハンドル 21 フラグ 0x02 dlen 17
    L2CAP(d): cid 0x0041 len 13 [psm 0]
    < ACL データ: ハンドル 21 フラグ0x00 dlen 14
    L2CAP(d): cid 0x0047 len 10 [psm 0]
    < ACL データ: ハンドル 21 フラグ 0x00 dlen 22
    L2CAP(d): cid 0x0047 len 18 [psm 0]
    < ACL データ: ハンドル 21 フラグ 0x00 dlen 22
    L2CAP (d): cid 0x0047 len 18 [psm 0]
    HCI イベント: 完了したパケット数 (0x13) plen 5
    ハンドル 21 パケット 1
    ACL データ: ハンドル 21 フラグ 0x02 dlen 18
    L2CAP(d): cid 0x0041 len 14 [psm 0]
    < ACL データ: ハンドル 21 フラグ 0x00 dlen 14
    L2CAP(d): cid 0x0047 len 10 [psm 0]
    HCI イベント: 完了したパケット数 (0x13) plen 5
    処理 21 パケット 1
    HCI イベント: 完了したパケット数 (0x13) plen 5
    処理 21 パケット 1
    HCI イベント: 数完了したパケット (0x13) plen 5
    ハンドル 21 パケット 1
    HCI イベント: モード変更 (0x14) plen 6
    ステータス 0x00 ハンドル 21 モード 0x02 間隔 2048
    モード: スニフ

  • Bluetooth のドキュメントを探しましたが、あまりうまくいきませんでした。
    Bluez を使用して C/C++ で Bluetooth イベントを検出するにはどうすればよいですか?
4

2 に答える 2

1

昨年も似たようなことをしました。私が決めたアプローチは、libdbus-c++を使用して c++ プロキシ オブジェクト/クラスを生成し、dbus 経由で bluez と通信することでした。

  • ヘッドセットに実装されている Bluetooth インターフェイスを特定します。d-feetを使用して、デバイスが接続されているときにデバイスを調べました。ここでヘッドセットからステータスを手動で制御および読み取ることができます。これはデバッグに役立ちました。
  • 必要なインターフェイスの dbus xml 記述を生成、検索、または作成します。bluez api ドキュメントから xmlに API 仕様を翻訳することでこれを手動で行いましたが、dbus イントロスペクションによっても作成できると思います。
  • dbusxx-xml2cppを使用 してプロキシ オブジェクトを生成する
  • ボタンが押されたときに呼び出されるコールバックを決定する
  • 必要に応じてプロキシ オブジェクトをコードに統合する

コードを libdbus-c++ にリンクし、ターゲットにもインストールする必要があります。

生成されたプロキシ オブジェクトを使用して、ヘッドセットのすべての機能にアクセスできます。これは、ボタンを押すだけでなく、さまざまな用途に役立つ可能性があります。

于 2015-07-08T18:37:20.177 に答える
0

収集された hcidump は、デバイス ホストとコントローラ間のログです。イベントはコントローラーがデバイス ホストに送信したもので、コマンドはデバイス ホストに送信された要求/応答です。

Bluez プログラミング ガイド : http://people.csail.mit.edu/albert/bluez-intro/

于 2013-01-24T10:25:26.173 に答える