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」を使用します。