通知を受信した後にBLEデバイスが切断される(BLEGattExceptionステータス= 0x8)

私のBLEサーバーは恒久的にセンサー値を測定して、測定のたびに20バイトのユーザーデータで通知を送ります。目標は、できるだけ多くのスループットを生成することです。

クライアント側では、サーバーによって送信された値が受信されて処理されます。

rxBleConnection.setupNotification(setDescriptorEnableNotification(characteristic))
                .flatMap(notificationObservable -> notificationObservable)
                .observeOn(Schedulers.newThread())
                .buffer(1)
                .subscribe(bytes -> {
                            onNotificationReceived(bytes, buffer);
                        } , throwable -> {
                           //Handle an error here.
                            onNotificationSetupFailure(throwable);
                        }

                ); 

Connection intervallを11.25msに設定した場合、すべての値を受け取ります。ただし、接続間隔を30msに設定した場合、いくつかの値を受け取ると、接続は閉じられます。

Androidのログに私は次のメッセージが表示されます。

BleGattExceptionステータス= 8(0x8)、   bleGattOperationType = BleGattOperation {description = 'CONNECTION_STATE'

接続が中断され、トリガーが発生するのはなぜですか。

BLEスニファーの助けを借りて、これは認識できません。設定された接続パラメータが受け入れられ、転送が始まります。突然送信が終了し、エラーメッセージが表示されます。

0

5 答え

エラー8は接続がタイムアウトしたことを意味します。 Android側に問題はありません。問題は、2つのBluetoothコントローラ間の通信にあります。あなたがスニファを持っているなら、あなたは誰がパケットを送信できなかったのかを見ることができるはずです。

0
追加された
あなたは良い説明を得るために周辺機器のチップの製造元サポートフォーラムにスニファーログを掲示するべきです。
追加された 著者 Emil,
スニファでは何も見えません。しかし、 "More Data"フラグはtrueに設定されています。次のメッセージには "Sequence Number = False"というフラグがあります。
追加された 著者 Chris 123,

30ミリ秒、これはあなたがサーバーやアンドロイドに設定した接続間隔ですか?

ところで、アンドロイドであなたはスピードモードを設定することができます

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
    mBluetoothGatt.requestConnectionPriority(BluetoothGatt.CONNECTION_PRIORITY_HIGH);
}
0
追加された
サーバー側で設定した30msのインターバル。 CurieBLEと一緒にArduino 101を使っています
追加された 著者 Chris 123,

私は同様の問題を抱えています。 Android 7.0では、接続を維持する方法が2つありました。

1)デバイスが結合されていて、一定のパケットスレッドを持つ文字読み取りコールバックがある場合しばらくしてもパケットがなければ、接続は失敗します。

2)分割が結合されていない場合でも、数秒ごとにTXCharacheristic.readを実行します。しばらくしないと、接続に失敗します。

しかし、Android 7.1.2では、この方法は機能しません。 あなたのために働く最初の方法かもしれません。 あなたのAndroidデバイス上であなたはボンディングをするべきです、あなたのキット上であなたはこのボンディングを扱うべきです。 Nexus 6PとSamsung S7ではもう動作しませんが、他のデバイスでは試しませんでした。

0
追加された

BLEキットの最小接続間隔は7.5ですが、現在はAndroidでは推奨されていません。 BLEキットで最小接続間隔を11.25に設定し、接続優先順位を設定してみてください。

gatt.requestConnectionPriority(CONNECTION_PRIORITY_HIGH);

CONNECTION_PRIORITY_HIGH = 1です。

onConnectionStateChangeにあります。 私の北欧での最小接続間隔を7.5から11.25に変更したとき、それは私のために働きました。

0
追加された

これはBLEスニファーからの画像です。

BLEスニファ

0
追加された