0
BLE血圧デバイスからデータを取得しようとしています。教師は、デバイスが接続されるたびに日付と時刻を同期させる必要があると言います。 コード:BLEデバイスwriteCharacteristicが失敗する
interactionSub = Observable.concat(
deviceConnection
.writeCharacteristic(ReactiveBluetoothHelpers.DATE_TIME_CHARACTERISTIC_UUID, testDateTime)
.doOnSubscribe(() -> Log.d(TAG, "doOnSubscribe called inside writeCharacteristic!"))
.doOnError(Error -> Log.e(TAG, "doOnError called inside writeCharacteristic. " + Error.getMessage()))
.doOnNext(bytes -> Log.d(TAG, "doOnNext called inside writeCharacteristic."))
.delay(500L, TimeUnit.MILLISECONDS)
.ignoreElements(),
deviceConnection
.setupIndication(ReactiveBluetoothHelpers.BLOOD_PRESSURE_MEASUREMENT_UUID)
.doOnNext(indicationObservable -> {
Log.d(TAG, "Blood Pressure measurement indication has been set up.");
})
.flatMap(indicationObservable -> indicationObservable) //
) // end of concat
.subscribe(
this::handleBpMeasurement,
this::handleBpMeasurementError
);
デバイスを接続して、購読しているが、特性を書き込もうとするとエラーが発生します。 BleDisconnectedExceptionからのエラーメッセージは、説明のない「F4:5E:AB:10:DF:5C」からの「Disconnected」です。
このエラーの原因はわかりません。書き込みしようとしているテスト日時には、年(16ビットリトルエンディアン)とその他の1バイト数の有効な値があります。
典型的なログ・シーケンスは:あなたがログに見ることができるように
12-04 15:47:46.617 16544-16612/com.calderadev.truecareccm.truecareservice D/RxBle#ClientOperationQueue: QUEUED ConnectOperation(13884208)
12-04 15:47:46.618 16544-16571/com.calderadev.truecareccm.truecareservice D/BluetoothGatt: unregisterApp() - mClientIf=8
12-04 15:47:46.621 16544-16565/com.calderadev.truecareccm.truecareservice D/RxBle#ClientOperationQueue: FINISHED DisconnectOperation(252854751)
12-04 15:47:46.624 16544-16565/com.calderadev.truecareccm.truecareservice D/RxBle#ClientOperationQueue: STARTED ConnectOperation(13884208)
12-04 15:47:46.630 16544-16571/com.calderadev.truecareccm.truecareservice D/BluetoothGatt: connect() - device: F4:5E:AB:10:DF:5C, auto: false
12-04 15:47:46.630 16544-16571/com.calderadev.truecareccm.truecareservice D/BluetoothGatt: registerApp()
12-04 15:47:46.630 16544-16571/com.calderadev.truecareccm.truecareservice D/BluetoothGatt: registerApp() - UUID=91617ce4-e91f-4117-acd4-95a1b2acbf29
12-04 15:47:46.633 16544-16575/com.calderadev.truecareccm.truecareservice D/BluetoothGatt: onClientRegistered() - status=0 clientIf=8
12-04 15:47:47.042 16544-16575/com.calderadev.truecareccm.truecareservice D/BluetoothGatt: onClientConnectionState() - status=0 clientIf=8 device=F4:5E:AB:10:DF:5C
12-04 15:47:47.043 16544-16575/com.calderadev.truecareccm.truecareservice D/RxBle#BluetoothGatt: onConnectionStateChange newState=2 status=0
12-04 15:47:47.044 16544-16575/com.calderadev.truecareccm.truecareservice D/BluetoothGatt: onClientConnectionState() - status=62 clientIf=8 device=F4:5E:AB:10:DF:5C
12-04 15:47:47.044 16544-16575/com.calderadev.truecareccm.truecareservice D/RxBle#BluetoothGatt: onConnectionStateChange newState=0 status=62
12-04 15:47:47.045 16544-16575/com.calderadev.truecareccm.truecareservice I/RxBle#ConnectionOperationQueue: Connection operations queue to be terminated (F4:5E:AB:10:DF:5C)
12-04 15:47:47.047 16544-16565/com.calderadev.truecareccm.truecareservice D/RxBle#ClientOperationQueue: FINISHED ConnectOperation(13884208)
12-04 15:47:47.054 16544-16612/com.calderadev.truecareccm.truecareservice D/BPMonitor: We have connected to A&D_UA-651BLE_10DF5C with MAC F4:5E:AB:10:DF:5C
12-04 15:47:47.062 16544-16611/com.calderadev.truecareccm.truecareservice D/RxBle#Executors$RunnableAdapter: Terminated.
12-04 15:47:47.083 16544-16612/com.calderadev.truecareccm.truecareservice D/BPMonitor: doOnSubscribe called inside writeCharacteristic!
12-04 15:47:47.100 16544-16612/com.calderadev.truecareccm.truecareservice E/BPMonitor: doOnError called inside writeCharacteristic. Disconnected from F4:5E:AB:10:DF:5C
12-04 15:47:47.118 16544-16612/com.calderadev.truecareccm.truecareservice D/RxBle#ClientOperationQueue: QUEUED DisconnectOperation(246198672)
12-04 15:47:47.120 16544-16565/com.calderadev.truecareccm.truecareservice D/RxBle#ClientOperationQueue: STARTED DisconnectOperation(246198672)
12-04 15:47:47.121 16544-16571/com.calderadev.truecareccm.truecareservice D/BluetoothManager: getConnectionState()
12-04 15:47:47.121 16544-16571/com.calderadev.truecareccm.truecareservice D/BluetoothManager: getConnectedDevices
12-04 15:47:47.125 16544-16612/com.calderadev.truecareccm.truecareservice D/RxBle#ClientOperationQueue: QUEUED ConnectOperation(589767105)
12-04 15:47:47.125 16544-16571/com.calderadev.truecareccm.truecareservice D/BluetoothGatt: close()
12-04 15:47:47.127 16544-16571/com.calderadev.truecareccm.truecareservice D/BluetoothGatt: unregisterApp() - mClientIf=8
12-04 15:47:47.131 16544-16565/com.calderadev.truecareccm.truecareservice D/RxBle#ClientOperationQueue: FINISHED DisconnectOperation(246198672)
が、私は何を行うことができます。
は、だから、最初に接続して、それが報告されているが、接続が実際にOSの下位層の上に確立されていないようですそれについて?携帯電話のBLEスタックに障害がある可能性はありますか?周辺機器は予期されていた以前の測定結果からキャッシュされたような間違ったデータを報告しますが、 'setupIndication()'が動作することを可能にするコードの以前のバージョン(Observable.concat()はありません)を持っています'writeCharacteristic()'でデバイスの内部時計を設定しようとすると失敗します。したがって、以前のバージョンでは、 'writeCharacteristic()'は動作しませんが、少なくとも接続が切断されることはありません。多分、 'concat()'を 'concatDelayError()'に置き換えます。 –
'携帯電話のBLEスタックに障害が発生している可能性はありますか? '確かに、Android BLE APIよりも低いレベルが発生しています。現在、特性書き込みは実行されていません。あなたがアプリケーションの面で手助けをすることができることは何もないと私は考えています。興味深いものがあれば、HCIログをチェックすることができます。周辺機器が故障している可能性もあります。 HCIのログやスニッファーのログはもっと分かります。 –
これは、 'writeCharacteristic()'によってデバイスに不正な値を書き込んで、すぐに切断することで説明できますか?ロギングはObservableが切断する前に短時間購読されたことを示します。 –