2

L2CAP にアクセスする通常の方法は、L2CAP ソケットを作成し、connect()それを呼び出して、アクセスしたい Bluetooth デバイスに接続することです。これは通常、完全に正常に機能します。ただし、Linux カーネル 3.0 を搭載した ARM デバイスでこれを実行しようとしていますが、最後に作成されたチャネルのすべてのデータがダウンしない限り、複数の L2CAP 接続を確立できないという厄介なバグがあるようです。(つまり、2 つの l2cap ソケットを備えた 2 つの Bluetooth センサーに接続すると、両方のデバイスのすべての通知は最後に開いたソケットを介して送信され、最初に開いたソケットには何も送信されません。)ただし、HCI ソケットにフィルターを正しく設定すると、次のことができます。 ACL データが適切な接続ハンドルを使用して送信されていることを確認してください。そのため、データを適切に取得できます。

だから... HCIソケットだけを利用するようにコードを変更したいと思います。

私の問題は、方法がわからないことです(または可能かどうかさえも)。L2CAP接続を作成するように見えるHCIの「論理リンク作成コマンド」がありますが、引数は私には意味がありません。LE 経由で HCI 接続を確立すると、2 オクテットの「Connection_Handle」を提供する「接続完了イベント」が返されます。ただし、「論理リンク コマンドの作成」は 1 オクテットの「Physical_Link_Handle」を使用します。

4

2 に答える 2

1

「create logic link コマンド」は AMP コントローラー用であり、L2CAP とは関係ありません。LE を使用すると、固定チャネルを介して自動的に「接続」が確立され、CID 4 で ATT コマンドを ACL パケットとして簡単に送信できます。ACL パケットは、HCI LE 接続イベントから返された接続ハンドルを利用します。

(#bluez IRC チャンネルの誰かに礼儀正しく答えてください。誰だったか思い出せません)

于 2013-10-30T13:39:37.547 に答える
0

BLE では、接続を確立するたびに、L2CAP を使用する準備が整います。

あなたはする必要はありませconnectん。LE 接続完了イベントを受信すると、準備が整い、L2CAP を介して通信を開始できます。

あなたが言及している他のコマンドとデータはLEではなく、BR / EDR専用です。

于 2014-10-09T15:11:37.710 に答える