Linuxで接続しようとしているBluetoothデバイスがいくつかあります。1つを除いて、どのデバイスにも問題はありません。違いは、他のすべてのデバイスが Bluetooth 接続を標準的な方法 (私が想定する方法) で処理することです。つまり、ホスト デバイス (PC) が接続を開始するのを待ちます。一方、もう一方のデバイスは、数秒ごとに接続自体を開始しようとし、その間に 1 秒程度のスリープが入ります。
他のデバイスについては、次のように接続しています。
rfcomm connect /dev/rfcommX <deviceMacAddress>
(X は未使用の rfcomm ポート番号)
このコマンドを発行する前に、必要なペアリング キーを使用して bluetooth-agent を実行します。ここではすべて正常に動作します。
問題のデバイスの場合、デバイスがペアリングされる前に、これは初めてうまく機能します。ただし、ペアリング後、rfcomm connect コマンドは失敗する可能性が非常に高くなります。これは、デバイス自体が接続を開始しようとしているためです。デバイスがスリープ状態の場合、接続は失敗します (「ホスト ダウン」)。
代わりに、このデバイスでは、次のコマンドが魅力的に機能することがわかりました。
rfcomm listen /dev/rfcommX
(最初にsdptool add SPを介してシリアルポートを追加する必要がありました)
PC はそこに座ってデバイスからの着信接続を待機するため、これは毎回機能します。
ただし、複数のデバイスがある場合に問題が発生します。rfcomm listen コマンドは見事に機能しますが、どのデバイス (Mac アドレスで識別される) がどの rfcomm ポートに接続するかを制御する方法はないようです。複数のデバイスの電源が入っている場合は、最初に接続しようとしたデバイスが接続されます。ただし、このアプリケーションでは、ユーザーが接続しているデバイスをユーザーに知らせたいと考えています。
誰かが以前にこのようなことを扱ったことがありますか? bluez bluetooth パッケージのカスタム バージョンを作成することを考えているところまで来ています。