2

次のコマンドを使用して、Bluetooth le 周辺機器に接続します。

  • gatttool -t ランダム -b xx:xx:xx:xx:xx:xx -I
  • 接続する

指定された MAC アドレスが存在する場合、問題はありません。

指定された MAC アドレスが存在しない場合、gatttool の応答が「エラー: 接続エラー: 接続が拒否されました (111)」になるまで、gatttool は約 40 秒間接続を試みます。

私の質問は、gatttool の 40 秒の接続タイムアウトをどこでどのように変更できますか?

4

3 に答える 3

1

残念ながら、gatttool コードを変更したい場合を除き、これを行う方法はないと思います。以前に調べたところ、gatttool がソケットの「接続」呼び出しをブロックしていることがわかります。

于 2015-02-03T21:56:23.627 に答える
0

gatttool コードを変更する準備ができている場合は、Bluez の接続ソケットにタイムアウトを追加する必要があります。

再試行をブロックしないようにするために、GattLibを作成したときに同じ回避策を実行する必要がありました。

このコミットで私の変更を確認できます: https://github.com/labapart/gattlib/commit/ee58e4cb64af6c698dea1fabb5b6d5e0fc174883

ただし、主な変更点は次の行です。

    if (setsockopt (sock, SOL_SOCKET, SO_RCVTIMEO, (char *)&timeout, sizeof(timeout)) < 0) {
        fprintf(stderr, "l2cap_connect: Failed to setsockopt for receive timeout.\n");
        return -1;
    }

    if (setsockopt (sock, SOL_SOCKET, SO_SNDTIMEO, (char *)&timeout, sizeof(timeout)) < 0) {
        fprintf(stderr, "l2cap_connect: Failed to setsockopt for sending timeout.\n");
        return -1;
    }

ble_scan独自のコードを書きたい場合は、GattLib の例に興味があるかもしれません。

于 2016-05-02T22:54:08.877 に答える