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"에서 단절된 것입니다.
이 오류의 출처를 알 수 없습니다. 작성하려는 테스트 날짜/시간에는 연도 (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)
가 재미있는, 그러나 나는 무엇을 할 수 그것에 대해? 휴대 전화의 BLE 스택에 오류가 발생했을 가능성이 있습니까? 필자는 적어도'setupIndication()'이 작동하는 것을 허용하는 코드의 이전 버전 ('Observable.concat()'이 없다)을 가지고있다. 주변기기는 앞의 측정에서 캐싱 된 잘못된 데이터를보고한다. 'writeCharacteristic()'로 장치의 내부 시계를 설정하려는 시도가 실패하면. 따라서 이전 버전에서는'writeCharacteristic()'이 작동하지 않지만 적어도 연결이 끊어지지는 않습니다. 어쩌면'concat()'를'concatDelayError()'로 대체 할 것입니다. –
'휴대 전화의 BLE 스택에 오류가 발생했을 가능성이 있습니까? '분명히 Android BLE API보다 낮은 수준에서 진행되고 있습니다. 현재 특성 쓰기는 실행되지 않습니다. 나는 당신이 도움을 줄 수있는 응용 프로그램 측면에서 할 수있는 일이 있는지 의심 스럽다. 흥미로운 것이 있으면 HCI 로그를 확인할 수 있습니다. 주변 장치가 고장 났을 수도 있습니다. HCI 로그 또는 스니퍼 로그에서 더 많이 알 수 있습니다. –
이것은'writeCharacteristic()'에 의해 장치에 잘못된 값을 쓰는 것으로 설명 될 수 있습니까? 로깅은 Observable이 연결 해제되기 전에 잠시 구독되었음을 나타냅니다. –