Reconnection issue Android

Issue #118 resolved
Peter Krol created an issue

Duplicate of Github issue

I've been implementing the Movesense library into our Flutter app and was testing some use cases. I noticed that reconnection doesn't work like I expect it to on Android, while it does on iOS. On Android, I'm getting various exception logs from the com.polidea.rxandroidble2 library, so I am not quite sure this issue belongs on this repository.

I am testing what happens when the peripheral goes out of range and afterwards comes back into the range. On iOS, it reconnects and the code gives instructions to resubscribe to various characteristics. On Android, it does the same, but after around 30 seconds, it shows the RxAndroidBle2 exceptions, related to some kind of timeout. I also have a listener on the ConnectedDevices uri, which is never updated on Android reconnection, but is on iOS reconnection.

The versions I use:
mdsflutter: ^2.0.0
mdslib: 3.15.0
sensor core version: 2.0.0 & 2.1.2

The logs during reconnection:

D/BluetoothGatt(16957): onClientConnectionState() - status=0 clientIf=10 device=0C:8C:DC:33:4B:AF
D/BluetoothGatt(16957): onClientConnectionState() - status=0 clientIf=11 device=0C:8C:DC:33:4B:AF
D/BluetoothGatt(16957): onClientConnectionState() - status=0 clientIf=14 device=0C:8C:DC:33:4B:AF
D/BluetoothGatt(16957): onClientConnectionState() - status=0 clientIf=15 device=0C:8C:DC:33:4B:AF
D/BluetoothGatt(16957): onClientConnectionState() - status=0 clientIf=16 device=0C:8C:DC:33:4B:AF
D/BluetoothGatt(16957): onClientConnectionState() - status=0 clientIf=12 device=0C:8C:DC:33:4B:AF
D/BluetoothGatt(16957): onClientConnectionState() - status=0 clientIf=17 device=0C:8C:DC:33:4B:AF
D/BleManager(16957): BLE connection to 0C:8C:DC:33:4B:AF done!
D/BluetoothGatt(16957): onClientConnectionState() - status=0 clientIf=19 device=0C:8C:DC:33:4B:AF
D/BluetoothGatt(16957): onClientConnectionState() - status=0 clientIf=20 device=0C:8C:DC:33:4B:AF
D/BluetoothGatt(16957): onClientConnectionState() - status=0 clientIf=18 device=0C:8C:DC:33:4B:AF
D/BleManager(16957): BLE connection to 0C:8C:DC:33:4B:AF done!
D/BluetoothGatt(16957): discoverServices() - device: 0C:8C:DC:33:4B:AF
D/BleManager(16957): BLE connection to 0C:8C:DC:33:4B:AF done!
D/BleManager(16957): BLE connection to 0C:8C:DC:33:4B:AF done!
D/BleManager(16957): BLE connection to 0C:8C:DC:33:4B:AF done!
D/BleManager(16957): BLE connection to 0C:8C:DC:33:4B:AF done!
D/BleManager(16957): BLE connection to 0C:8C:DC:33:4B:AF done!
D/BluetoothGatt(16957): discoverServices() - device: 0C:8C:DC:33:4B:AF
D/BluetoothGatt(16957): discoverServices() - device: 0C:8C:DC:33:4B:AF
D/BleManager(16957): BLE connection to 0C:8C:DC:33:4B:AF done!
D/BluetoothGatt(16957): discoverServices() - device: 0C:8C:DC:33:4B:AF
D/BleManager(16957): BLE connection to 0C:8C:DC:33:4B:AF done!
D/BluetoothGatt(16957): discoverServices() - device: 0C:8C:DC:33:4B:AF
D/BluetoothGatt(16957): discoverServices() - device: 0C:8C:DC:33:4B:AF
D/BluetoothGatt(16957): discoverServices() - device: 0C:8C:DC:33:4B:AF
D/BluetoothGatt(16957): discoverServices() - device: 0C:8C:DC:33:4B:AF
D/BleManager(16957): BLE connection to 0C:8C:DC:33:4B:AF done!
D/BluetoothGatt(16957): discoverServices() - device: 0C:8C:DC:33:4B:AF
D/BluetoothGatt(16957): discoverServices() - device: 0C:8C:DC:33:4B:AF
D/BluetoothGatt(16957): onConnectionUpdated() - Device=0C:8C:DC:33:4B:AF interval=6 latency=0 timeout=500 status=0
D/BluetoothGatt(16957): onConnectionUpdated() - Device=0C:8C:DC:33:4B:AF interval=6 latency=0 timeout=500 status=0
D/BluetoothGatt(16957): onConnectionUpdated() - Device=0C:8C:DC:33:4B:AF interval=6 latency=0 timeout=500 status=0
D/BluetoothGatt(16957): onConnectionUpdated() - Device=0C:8C:DC:33:4B:AF interval=6 latency=0 timeout=500 status=0
D/BluetoothGatt(16957): onConnectionUpdated() - Device=0C:8C:DC:33:4B:AF interval=6 latency=0 timeout=500 status=0
D/BluetoothGatt(16957): onConnectionUpdated() - Device=0C:8C:DC:33:4B:AF interval=6 latency=0 timeout=500 status=0
D/BluetoothGatt(16957): onConnectionUpdated() - Device=0C:8C:DC:33:4B:AF interval=6 latency=0 timeout=500 status=0
D/BluetoothGatt(16957): onConnectionUpdated() - Device=0C:8C:DC:33:4B:AF interval=6 latency=0 timeout=500 status=0
D/BluetoothGatt(16957): onConnectionUpdated() - Device=0C:8C:DC:33:4B:AF interval=6 latency=0 timeout=500 status=0
D/BluetoothGatt(16957): onConnectionUpdated() - Device=0C:8C:DC:33:4B:AF interval=6 latency=0 timeout=500 status=0
D/BluetoothGatt(16957): onSearchComplete() = Device=0C:8C:DC:33:4B:AF Status=0
D/BleManager(16957): Got service BLE from 0C:8C:DC:33:4B:AF
D/BleManager(16957): service UUID: 00001800-0000-1000-8000-00805f9b34fb
V/BleManager(16957): service Instance Id: 1
D/BleManager(16957): service UUID: 00001801-0000-1000-8000-00805f9b34fb
V/BleManager(16957): service Instance Id: 10
D/BleManager(16957): service UUID: 0000180a-0000-1000-8000-00805f9b34fb
V/BleManager(16957): service Instance Id: 14
D/BleManager(16957): service UUID: 0000180f-0000-1000-8000-00805f9b34fb
V/BleManager(16957): service Instance Id: 19
D/BleManager(16957): service UUID: 0000fdf3-0000-1000-8000-00805f9b34fb
V/BleManager(16957): service Instance Id: 23
D/BluetoothGatt(16957): onSearchComplete() = Device=0C:8C:DC:33:4B:AF Status=0
D/BluetoothGatt(16957): onSearchComplete() = Device=0C:8C:DC:33:4B:AF Status=0
D/BleManager(16957): Got service BLE from 0C:8C:DC:33:4B:AF
D/BleManager(16957): Got service BLE from 0C:8C:DC:33:4B:AF
D/BleManager(16957): service UUID: 00001800-0000-1000-8000-00805f9b34fb
D/BleManager(16957): service UUID: 00001800-0000-1000-8000-00805f9b34fb
V/BleManager(16957): service Instance Id: 1
V/BleManager(16957): service Instance Id: 1
D/BleManager(16957): service UUID: 00001801-0000-1000-8000-00805f9b34fb
D/BleManager(16957): service UUID: 00001801-0000-1000-8000-00805f9b34fb
V/BleManager(16957): service Instance Id: 10
V/BleManager(16957): service Instance Id: 10
D/BleManager(16957): service UUID: 0000180a-0000-1000-8000-00805f9b34fb
D/BleManager(16957): service UUID: 0000180a-0000-1000-8000-00805f9b34fb
V/BleManager(16957): service Instance Id: 14
V/BleManager(16957): service Instance Id: 14
D/BleManager(16957): service UUID: 0000180f-0000-1000-8000-00805f9b34fb
D/BleManager(16957): service UUID: 0000180f-0000-1000-8000-00805f9b34fb
V/BleManager(16957): service Instance Id: 19
V/BleManager(16957): service Instance Id: 19
D/BleManager(16957): service UUID: 0000fdf3-0000-1000-8000-00805f9b34fb
D/BleManager(16957): service UUID: 0000fdf3-0000-1000-8000-00805f9b34fb
V/BleManager(16957): service Instance Id: 23
D/BluetoothGatt(16957): onSearchComplete() = Device=0C:8C:DC:33:4B:AF Status=0
D/BluetoothGatt(16957): onSearchComplete() = Device=0C:8C:DC:33:4B:AF Status=0
V/BleManager(16957): service Instance Id: 23
D/BluetoothGatt(16957): onSearchComplete() = Device=0C:8C:DC:33:4B:AF Status=0
D/BleManager(16957): Got service BLE from 0C:8C:DC:33:4B:AF
D/BleManager(16957): service UUID: 00001800-0000-1000-8000-00805f9b34fb
V/BleManager(16957): service Instance Id: 1
D/BleManager(16957): service UUID: 00001801-0000-1000-8000-00805f9b34fb
V/BleManager(16957): service Instance Id: 10
D/BleManager(16957): service UUID: 0000180a-0000-1000-8000-00805f9b34fb
V/BleManager(16957): service Instance Id: 14
D/BleManager(16957): service UUID: 0000180f-0000-1000-8000-00805f9b34fb
V/BleManager(16957): service Instance Id: 19
D/BleManager(16957): service UUID: 0000fdf3-0000-1000-8000-00805f9b34fb
V/BleManager(16957): service Instance Id: 23
D/BleManager(16957): Got service BLE from 0C:8C:DC:33:4B:AF
D/BleManager(16957): Got service BLE from 0C:8C:DC:33:4B:AF
D/BleManager(16957): service UUID: 00001800-0000-1000-8000-00805f9b34fb
V/BleManager(16957): service Instance Id: 1
D/BleManager(16957): service UUID: 00001800-0000-1000-8000-00805f9b34fb
D/BleManager(16957): service UUID: 00001801-0000-1000-8000-00805f9b34fb
V/BleManager(16957): service Instance Id: 1
V/BleManager(16957): service Instance Id: 10
D/BleManager(16957): service UUID: 0000180a-0000-1000-8000-00805f9b34fb
D/BleManager(16957): service UUID: 00001801-0000-1000-8000-00805f9b34fb
V/BleManager(16957): service Instance Id: 14
D/BleManager(16957): service UUID: 0000180f-0000-1000-8000-00805f9b34fb
V/BleManager(16957): service Instance Id: 19
V/BleManager(16957): service Instance Id: 10
D/BleManager(16957): service UUID: 0000fdf3-0000-1000-8000-00805f9b34fb
V/BleManager(16957): service Instance Id: 23
D/BleManager(16957): service UUID: 0000180a-0000-1000-8000-00805f9b34fb
V/BleManager(16957): service Instance Id: 14
D/BleManager(16957): service UUID: 0000180f-0000-1000-8000-00805f9b34fb
V/BleManager(16957): service Instance Id: 19
D/BleManager(16957): service UUID: 0000fdf3-0000-1000-8000-00805f9b34fb
V/BleManager(16957): service Instance Id: 23
D/BluetoothGatt(16957): onSearchComplete() = Device=0C:8C:DC:33:4B:AF Status=0
D/BleManager(16957): Got service BLE from 0C:8C:DC:33:4B:AF
D/BleManager(16957): service UUID: 00001800-0000-1000-8000-00805f9b34fb
D/BluetoothGatt(16957): onSearchComplete() = Device=0C:8C:DC:33:4B:AF Status=0
V/BleManager(16957): service Instance Id: 1
D/BleManager(16957): service UUID: 00001801-0000-1000-8000-00805f9b34fb
V/BleManager(16957): service Instance Id: 10
D/BleManager(16957): service UUID: 0000180a-0000-1000-8000-00805f9b34fb
V/BleManager(16957): service Instance Id: 14
D/BleManager(16957): service UUID: 0000180f-0000-1000-8000-00805f9b34fb
V/BleManager(16957): service Instance Id: 19
D/BleManager(16957): service UUID: 0000fdf3-0000-1000-8000-00805f9b34fb
V/BleManager(16957): service Instance Id: 23
D/BleManager(16957): Got service BLE from 0C:8C:DC:33:4B:AF
D/BleManager(16957): service UUID: 00001800-0000-1000-8000-00805f9b34fb
V/BleManager(16957): service Instance Id: 1
D/BleManager(16957): service UUID: 00001801-0000-1000-8000-00805f9b34fb
V/BleManager(16957): service Instance Id: 10
D/BleManager(16957): service UUID: 0000180a-0000-1000-8000-00805f9b34fb
V/BleManager(16957): service Instance Id: 14
D/BleManager(16957): service UUID: 0000180f-0000-1000-8000-00805f9b34fb
V/BleManager(16957): service Instance Id: 19
D/BleManager(16957): service UUID: 0000fdf3-0000-1000-8000-00805f9b34fb
V/BleManager(16957): service Instance Id: 23
D/BluetoothGatt(16957): onSearchComplete() = Device=0C:8C:DC:33:4B:AF Status=0
D/BluetoothGatt(16957): onSearchComplete() = Device=0C:8C:DC:33:4B:AF Status=0
D/BleManager(16957): Got service BLE from 0C:8C:DC:33:4B:AF
D/BleManager(16957): service UUID: 00001800-0000-1000-8000-00805f9b34fb
V/BleManager(16957): service Instance Id: 1
D/BleManager(16957): Got service BLE from 0C:8C:DC:33:4B:AF
D/BleManager(16957): service UUID: 00001800-0000-1000-8000-00805f9b34fb
V/BleManager(16957): service Instance Id: 1
D/BleManager(16957): service UUID: 00001801-0000-1000-8000-00805f9b34fb
V/BleManager(16957): service Instance Id: 10
D/BleManager(16957): service UUID: 0000180a-0000-1000-8000-00805f9b34fb
V/BleManager(16957): service Instance Id: 14
D/BleManager(16957): service UUID: 0000180f-0000-1000-8000-00805f9b34fb
V/BleManager(16957): service Instance Id: 19
D/BleManager(16957): service UUID: 00001801-0000-1000-8000-00805f9b34fb
V/BleManager(16957): service Instance Id: 10
D/BleManager(16957): service UUID: 0000180a-0000-1000-8000-00805f9b34fb
V/BleManager(16957): service Instance Id: 14
D/BleManager(16957): service UUID: 0000180f-0000-1000-8000-00805f9b34fb
V/BleManager(16957): service Instance Id: 19
D/BleManager(16957): service UUID: 0000fdf3-0000-1000-8000-00805f9b34fb
V/BleManager(16957): service Instance Id: 23
D/BleManager(16957): service UUID: 0000fdf3-0000-1000-8000-00805f9b34fb
V/BleManager(16957): service Instance Id: 23
D/BluetoothGatt(16957): onConnectionUpdated() - Device=0C:8C:DC:33:4B:AF interval=39 latency=0 timeout=500 status=0
D/BluetoothGatt(16957): onConnectionUpdated() - Device=0C:8C:DC:33:4B:AF interval=39 latency=0 timeout=500 status=0
D/BluetoothGatt(16957): onConnectionUpdated() - Device=0C:8C:DC:33:4B:AF interval=39 latency=0 timeout=500 status=0
D/BluetoothGatt(16957): onConnectionUpdated() - Device=0C:8C:DC:33:4B:AF interval=39 latency=0 timeout=500 status=0
D/BluetoothGatt(16957): onConnectionUpdated() - Device=0C:8C:DC:33:4B:AF interval=39 latency=0 timeout=500 status=0
D/BluetoothGatt(16957): onConnectionUpdated() - Device=0C:8C:DC:33:4B:AF interval=39 latency=0 timeout=500 status=0
I/chatty  (16957): uid=10263(eu.mentechinnovation.hume.qs) Binder:16957_9 identical 1 line
D/BluetoothGatt(16957): onConnectionUpdated() - Device=0C:8C:DC:33:4B:AF interval=39 latency=0 timeout=500 status=0
D/BluetoothGatt(16957): onConnectionUpdated() - Device=0C:8C:DC:33:4B:AF interval=39 latency=0 timeout=500 status=0
D/BluetoothGatt(16957): onConnectionUpdated() - Device=0C:8C:DC:33:4B:AF interval=39 latency=0 timeout=500 status=0

The exceptions after ~30 seconds:

D/BluetoothGatt(16957): setCharacteristicNotification() - uuid: 6b200002-ff4e-4979-8186-fb7ba486fcd7 enable: false
E/BleManager(16957): Ble connection error.
W/System.err(16957): com.polidea.rxandroidble2.exceptions.BleCannotSetCharacteristicNotificationException: Cannot write client characteristic config descriptor (code 3) with characteristic UUID 6b200002-ff4e-4979-8186-fb7ba486fcd7
W/System.err(16957):    at com.polidea.rxandroidble2.internal.connection.NotificationAndIndicationManager.lambda$writeClientCharacteristicConfig$9(NotificationAndIndicationManager.java:194)
E/BleManager(16957): Ble connection error.
W/System.err(16957):    at com.polidea.rxandroidble2.internal.connection.NotificationAndIndicationManager$$ExternalSyntheticLambda2.apply(Unknown Source:4)
W/System.err(16957):    at io.reactivex.internal.operators.completable.CompletableResumeNext$ResumeNextObserver.onError(CompletableResumeNext.java:82)
W/System.err(16957):    at io.reactivex.internal.operators.observable.ObservableIgnoreElementsCompletable$IgnoreObservable.onError(ObservableIgnoreElementsCompletable.java:61)
E/BleManager(16957): Ble connection error.
W/System.err(16957):    at io.reactivex.internal.operators.observable.ObservableCreate$CreateEmitter.tryOnError(ObservableCreate.java:84)
W/System.err(16957):    at com.polidea.rxandroidble2.internal.serialization.FIFORunnableEntry$1$1.onError(FIFORunnableEntry.java:73)
W/System.err(16957):    at io.reactivex.internal.operators.observable.ObservableUnsubscribeOn$UnsubscribeObserver.onError(ObservableUnsubscribeOn.java:70)
W/System.err(16957):    at io.reactivex.internal.operators.observable.ObservableCreate$CreateEmitter.tryOnError(ObservableCreate.java:84)
W/System.err(16957):    at com.polidea.rxandroidble2.internal.util.QueueReleasingEmitterWrapper.onError(QueueReleasingEmitterWrapper.java:47)
W/System.err(16957):    at io.reactivex.internal.observers.DeferredScalarDisposable.error(DeferredScalarDisposable.java:100)
W/System.err(16957):    at io.reactivex.internal.operators.single.SingleToObservable$SingleToObservableObserver.onError(SingleToObservable.java:77)
W/System.err(16957):    at io.reactivex.internal.operators.single.SingleTimeout$TimeoutMainObserver$TimeoutFallbackObserver.onError(SingleTimeout.java:97)
W/System.err(16957):    at io.reactivex.internal.disposables.EmptyDisposable.error(EmptyDisposable.java:78)
E/BleManager(16957): Ble connection error.
W/System.err(16957):    at io.reactivex.internal.operators.single.SingleError.subscribeActual(SingleError.java:42)
W/System.err(16957):    at io.reactivex.Single.subscribe(Single.java:3666)
E/BleManager(16957): Ble connection error.
W/System.err(16957):    at io.reactivex.internal.operators.single.SingleTimeout$TimeoutMainObserver.run(SingleTimeout.java:126)
W/System.err(16957):    at io.reactivex.internal.schedulers.ScheduledDirectTask.call(ScheduledDirectTask.java:38)
W/System.err(16957):    at io.reactivex.internal.schedulers.ScheduledDirectTask.call(ScheduledDirectTask.java:26)
W/System.err(16957):    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
W/System.err(16957):    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)
W/System.err(16957):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
E/BleManager(16957): Ble connection error.
W/System.err(16957):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
E/BleManager(16957): Ble connection error.
W/System.err(16957):    at java.lang.Thread.run(Thread.java:764)
E/BleManager(16957): Ble connection error.
W/System.err(16957): Caused by: com.polidea.rxandroidble2.exceptions.BleGattCallbackTimeoutException: GATT exception from MAC address 0C:8C:DC:33:4B:AF, with type BleGattOperation{description='DESCRIPTOR_WRITE'}
W/System.err(16957):    at com.polidea.rxandroidble2.internal.SingleResponseOperation.timeoutFallbackProcedure(SingleResponseOperation.java:92)
W/System.err(16957):    at com.polidea.rxandroidble2.internal.SingleResponseOperation.protectedRun(SingleResponseOperation.java:54)
W/System.err(16957):    at com.polidea.rxandroidble2.internal.QueueOperation$1.subscribe(QueueOperation.java:41)
W/System.err(16957):    at io.reactivex.internal.operators.observable.ObservableCreate.subscribeActual(ObservableCreate.java:40)
W/System.err(16957):    at io.reactivex.Observable.subscribe(Observable.java:12284)
W/System.err(16957):    at io.reactivex.internal.operators.observable.ObservableUnsubscribeOn.subscribeActual(ObservableUnsubscribeOn.java:32)
W/System.err(16957):    at io.reactivex.Observable.subscribe(Observable.java:12284)
E/BleManager(16957): Ble connection error.
W/System.err(16957):    at com.polidea.rxandroidble2.internal.serialization.FIFORunnableEntry$1.run(FIFORunnableEntry.java:56)
W/System.err(16957):    at io.reactivex.internal.schedulers.ScheduledDirectTask.call(ScheduledDirectTask.java:38)
E/BleManager(16957): Ble connection error.
W/System.err(16957):    at io.reactivex.internal.schedulers.ScheduledDirectTask.call(ScheduledDirectTask.java:26)
W/System.err(16957):    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
W/System.err(16957):    ... 3 more
W/System.err(16957): com.polidea.rxandroidble2.exceptions.BleCannotSetCharacteristicNotificationException: Cannot write client characteristic config descriptor (code 3) with characteristic UUID 6b200002-ff4e-4979-8186-fb7ba486fcd7
W/System.err(16957):    at com.polidea.rxandroidble2.internal.connection.NotificationAndIndicationManager.lambda$writeClientCharacteristicConfig$9(NotificationAndIndicationManager.java:194)
W/System.err(16957):    at com.polidea.rxandroidble2.internal.connection.NotificationAndIndicationManager$$ExternalSyntheticLambda2.apply(Unknown Source:4)
W/System.err(16957):    at io.reactivex.internal.operators.completable.CompletableResumeNext$ResumeNextObserver.onError(CompletableResumeNext.java:82)
W/System.err(16957):    at io.reactivex.internal.operators.observable.ObservableIgnoreElementsCompletable$IgnoreObservable.onError(ObservableIgnoreElementsCompletable.java:61)
W/System.err(16957):    at io.reactivex.internal.operators.observable.ObservableCreate$CreateEmitter.tryOnError(ObservableCreate.java:84)
W/System.err(16957):    at com.polidea.rxandroidble2.internal.serialization.FIFORunnableEntry$1$1.onError(FIFORunnableEntry.java:73)
W/System.err(16957):    at io.reactivex.internal.operators.observable.ObservableUnsubscribeOn$UnsubscribeObserver.onError(ObservableUnsubscribeOn.java:70)
W/System.err(16957):    at io.reactivex.internal.operators.observable.ObservableCreate$CreateEmitter.tryOnError(ObservableCreate.java:84)
W/System.err(16957):    at com.polidea.rxandroidble2.internal.util.QueueReleasingEmitterWrapper.onError(QueueReleasingEmitterWrapper.java:47)
W/System.err(16957):    at io.reactivex.internal.observers.DeferredScalarDisposable.error(DeferredScalarDisposable.java:100)
W/System.err(16957):    at io.reactivex.internal.operators.single.SingleToObservable$SingleToObservableObserver.onError(SingleToObservable.java:77)
W/System.err(16957):    at io.reactivex.internal.operators.single.SingleTimeout$TimeoutMainObserver$TimeoutFallbackObserver.onError(SingleTimeout.java:97)
W/System.err(16957):    at io.reactivex.internal.disposables.EmptyDisposable.error(EmptyDisposable.java:78)
W/System.err(16957):    at io.reactivex.internal.operators.single.SingleError.subscribeActual(SingleError.java:42)
W/System.err(16957):    at io.reactivex.Single.subscribe(Single.java:3666)
W/System.err(16957):    at io.reactivex.internal.operators.single.SingleTimeout$TimeoutMainObserver.run(SingleTimeout.java:126)
W/System.err(16957):    at io.reactivex.internal.schedulers.ScheduledDirectTask.call(ScheduledDirectTask.java:38)
W/System.err(16957):    at io.reactivex.internal.schedulers.ScheduledDirectTask.call(ScheduledDirectTask.java:26)
W/System.err(16957):    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
W/System.err(16957):    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)
W/System.err(16957):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
W/System.err(16957):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
W/System.err(16957):    at java.lang.Thread.run(Thread.java:764)
W/System.err(16957): Caused by: com.polidea.rxandroidble2.exceptions.BleGattCallbackTimeoutException: GATT exception from MAC address 0C:8C:DC:33:4B:AF, with type BleGattOperation{description='DESCRIPTOR_WRITE'}
W/System.err(16957):    at com.polidea.rxandroidble2.internal.SingleResponseOperation.timeoutFallbackProcedure(SingleResponseOperation.java:92)
W/System.err(16957):    at com.polidea.rxandroidble2.internal.SingleResponseOperation.protectedRun(SingleResponseOperation.java:54)
W/System.err(16957):    at com.polidea.rxandroidble2.internal.QueueOperation$1.subscribe(QueueOperation.java:41)
W/System.err(16957):    at io.reactivex.internal.operators.observable.ObservableCreate.subscribeActual(ObservableCreate.java:40)
W/System.err(16957):    at io.reactivex.Observable.subscribe(Observable.java:12284)
W/System.err(16957):    at io.reactivex.internal.operators.observable.ObservableUnsubscribeOn.subscribeActual(ObservableUnsubscribeOn.java:32)
W/System.err(16957):    at io.reactivex.Observable.subscribe(Observable.java:12284)
W/System.err(16957):    at com.polidea.rxandroidble2.internal.serialization.FIFORunnableEntry$1.run(FIFORunnableEntry.java:56)
W/System.err(16957):    at io.reactivex.internal.schedulers.ScheduledDirectTask.call(ScheduledDirectTask.java:38)
W/System.err(16957):    at io.reactivex.internal.schedulers.ScheduledDirectTask.call(ScheduledDirectTask.java:26)
W/System.err(16957):    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
W/System.err(16957):    ... 3 more
W/System.err(16957): com.polidea.rxandroidble2.exceptions.BleCannotSetCharacteristicNotificationException: Cannot write client characteristic config descriptor (code 3) with characteristic UUID 6b200002-ff4e-4979-8186-fb7ba486fcd7
W/System.err(16957):    at com.polidea.rxandroidble2.internal.connection.NotificationAndIndicationManager.lambda$writeClientCharacteristicConfig$9(NotificationAndIndicationManager.java:194)
W/System.err(16957):    at com.polidea.rxandroidble2.internal.connection.NotificationAndIndicationManager$$ExternalSyntheticLambda2.apply(Unknown Source:4)
W/System.err(16957):    at io.reactivex.internal.operators.completable.CompletableResumeNext$ResumeNextObserver.onError(CompletableResumeNext.java:82)
W/System.err(16957):    at io.reactivex.internal.operators.observable.ObservableIgnoreElementsCompletable$IgnoreObservable.onError(ObservableIgnoreElementsCompletable.java:61)
W/System.err(16957):    at io.reactivex.internal.operators.observable.ObservableCreate$CreateEmitter.tryOnError(ObservableCreate.java:84)
W/System.err(16957):    at com.polidea.rxandroidble2.internal.serialization.FIFORunnableEntry$1$1.onError(FIFORunnableEntry.java:73)
W/System.err(16957):    at io.reactivex.internal.operators.observable.ObservableUnsubscribeOn$UnsubscribeObserver.onError(ObservableUnsubscribeOn.java:70)
W/System.err(16957):    at io.reactivex.internal.operators.observable.ObservableCreate$CreateEmitter.tryOnError(ObservableCreate.java:84)
W/System.err(16957):    at com.polidea.rxandroidble2.internal.util.QueueReleasingEmitterWrapper.onError(QueueReleasingEmitterWrapper.java:47)
W/System.err(16957):    at io.reactivex.internal.observers.DeferredScalarDisposable.error(DeferredScalarDisposable.java:100)
W/System.err(16957):    at io.reactivex.internal.operators.single.SingleToObservable$SingleToObservableObserver.onError(SingleToObservable.java:77)
W/System.err(16957):    at io.reactivex.internal.operators.single.SingleTimeout$TimeoutMainObserver$TimeoutFallbackObserver.onError(SingleTimeout.java:97)
W/System.err(16957):    at io.reactivex.internal.disposables.EmptyDisposable.error(EmptyDisposable.java:78)
W/System.err(16957):    at io.reactivex.internal.operators.single.SingleError.subscribeActual(SingleError.java:42)
W/System.err(16957):    at io.reactivex.Single.subscribe(Single.java:3666)
W/System.err(16957):    at io.reactivex.internal.operators.single.SingleTimeout$TimeoutMainObserver.run(SingleTimeout.java:126)
W/System.err(16957):    at io.reactivex.internal.schedulers.ScheduledDirectTask.call(ScheduledDirectTask.java:38)
W/System.err(16957):    at io.reactivex.internal.schedulers.ScheduledDirectTask.call(ScheduledDirectTask.java:26)
W/System.err(16957):    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
W/System.err(16957):    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)
W/System.err(16957):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
W/System.err(16957):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
W/System.err(16957):    at java.lang.Thread.run(Thread.java:764)
W/System.err(16957): Caused by: com.polidea.rxandroidble2.exceptions.BleGattCallbackTimeoutException: GATT exception from MAC address 0C:8C:DC:33:4B:AF, with type BleGattOperation{description='DESCRIPTOR_WRITE'}
W/System.err(16957):    at com.polidea.rxandroidble2.internal.SingleResponseOperation.timeoutFallbackProcedure(SingleResponseOperation.java:92)
W/System.err(16957):    at com.polidea.rxandroidble2.internal.SingleResponseOperation.protectedRun(SingleResponseOperation.java:54)
W/System.err(16957):    at com.polidea.rxandroidble2.internal.QueueOperation$1.subscribe(QueueOperation.java:41)
W/System.err(16957):    at io.reactivex.internal.operators.observable.ObservableCreate.subscribeActual(ObservableCreate.java:40)
W/System.err(16957):    at io.reactivex.Observable.subscribe(Observable.java:12284)
W/System.err(16957):    at io.reactivex.internal.operators.observable.ObservableUnsubscribeOn.subscribeActual(ObservableUnsubscribeOn.java:32)
W/System.err(16957):    at io.reactivex.Observable.subscribe(Observable.java:12284)
W/System.err(16957):    at com.polidea.rxandroidble2.internal.serialization.FIFORunnableEntry$1.run(FIFORunnableEntry.java:56)
W/System.err(16957):    at io.reactivex.internal.schedulers.ScheduledDirectTask.call(ScheduledDirectTask.java:38)
W/System.err(16957):    at io.reactivex.internal.schedulers.ScheduledDirectTask.call(ScheduledDirectTask.java:26)
W/System.err(16957):    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
W/System.err(16957):    ... 3 more
W/System.err(16957): com.polidea.rxandroidble2.exceptions.BleCannotSetCharacteristicNotificationException: Cannot write client characteristic config descriptor (code 3) with characteristic UUID 6b200002-ff4e-4979-8186-fb7ba486fcd7
W/System.err(16957):    at com.polidea.rxandroidble2.internal.connection.NotificationAndIndicationManager.lambda$writeClientCharacteristicConfig$9(NotificationAndIndicationManager.java:194)
W/System.err(16957):    at com.polidea.rxandroidble2.internal.connection.NotificationAndIndicationManager$$ExternalSyntheticLambda2.apply(Unknown Source:4)
W/System.err(16957):    at io.reactivex.internal.operators.completable.CompletableResumeNext$ResumeNextObserver.onError(CompletableResumeNext.java:82)
W/System.err(16957):    at io.reactivex.internal.operators.observable.ObservableIgnoreElementsCompletable$IgnoreObservable.onError(ObservableIgnoreElementsCompletable.java:61)
W/System.err(16957):    at io.reactivex.internal.operators.observable.ObservableCreate$CreateEmitter.tryOnError(ObservableCreate.java:84)
W/System.err(16957):    at com.polidea.rxandroidble2.internal.serialization.FIFORunnableEntry$1$1.onError(FIFORunnableEntry.java:73)
W/System.err(16957):    at io.reactivex.internal.operators.observable.ObservableUnsubscribeOn$UnsubscribeObserver.onError(ObservableUnsubscribeOn.java:70)
W/System.err(16957):    at io.reactivex.internal.operators.observable.ObservableCreate$CreateEmitter.tryOnError(ObservableCreate.java:84)
W/System.err(16957):    at com.polidea.rxandroidble2.internal.util.QueueReleasingEmitterWrapper.onError(QueueReleasingEmitterWrapper.java:47)
W/System.err(16957):    at io.reactivex.internal.observers.DeferredScalarDisposable.error(DeferredScalarDisposable.java:100)
W/System.err(16957):    at io.reactivex.internal.operators.single.SingleToObservable$SingleToObservableObserver.onError(SingleToObservable.java:77)
W/System.err(16957):    at io.reactivex.internal.operators.single.SingleTimeout$TimeoutMainObserver$TimeoutFallbackObserver.onError(SingleTimeout.java:97)
W/System.err(16957):    at io.reactivex.internal.disposables.EmptyDisposable.error(EmptyDisposable.java:78)
W/System.err(16957):    at io.reactivex.internal.operators.single.SingleError.subscribeActual(SingleError.java:42)
W/System.err(16957):    at io.reactivex.Single.subscribe(Single.java:3666)
W/System.err(16957):    at io.reactivex.internal.operators.single.SingleTimeout$TimeoutMainObserver.run(SingleTimeout.java:126)
W/System.err(16957):    at io.reactivex.internal.schedulers.ScheduledDirectTask.call(ScheduledDirectTask.java:38)
W/System.err(16957):    at io.reactivex.internal.schedulers.ScheduledDirectTask.call(ScheduledDirectTask.java:26)
W/System.err(16957):    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
W/System.err(16957):    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)
W/System.err(16957):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
W/System.err(16957):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
W/System.err(16957):    at java.lang.Thread.run(Thread.java:764)
W/System.err(16957): Caused by: com.polidea.rxandroidble2.exceptions.BleGattCallbackTimeoutException: GATT exception from MAC address 0C:8C:DC:33:4B:AF, with type BleGattOperation{description='DESCRIPTOR_WRITE'}
W/System.err(16957):    at com.polidea.rxandroidble2.internal.SingleResponseOperation.timeoutFallbackProcedure(SingleResponseOperation.java:92)
W/System.err(16957):    at com.polidea.rxandroidble2.internal.SingleResponseOperation.protectedRun(SingleResponseOperation.java:54)
W/System.err(16957):    at com.polidea.rxandroidble2.internal.QueueOperation$1.subscribe(QueueOperation.java:41)
W/System.err(16957):    at io.reactivex.internal.operators.observable.ObservableCreate.subscribeActual(ObservableCreate.java:40)
W/System.err(16957):    at io.reactivex.Observable.subscribe(Observable.java:12284)
W/System.err(16957):    at io.reactivex.internal.operators.observable.ObservableUnsubscribeOn.subscribeActual(ObservableUnsubscribeOn.java:32)
W/System.err(16957):    at io.reactivex.Observable.subscribe(Observable.java:12284)
W/System.err(16957):    at com.polidea.rxandroidble2.internal.serialization.FIFORunnableEntry$1.run(FIFORunnableEntry.java:56)
W/System.err(16957):    at io.reactivex.internal.schedulers.ScheduledDirectTask.call(ScheduledDirectTask.java:38)
W/System.err(16957):    at io.reactivex.internal.schedulers.ScheduledDirectTask.call(ScheduledDirectTask.java:26)
W/System.err(16957):    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
W/System.err(16957):    ... 3 more
W/System.err(16957): com.polidea.rxandroidble2.exceptions.BleCannotSetCharacteristicNotificationException: Cannot write client characteristic config descriptor (code 3) with characteristic UUID 6b200002-ff4e-4979-8186-fb7ba486fcd7
W/System.err(16957):    at com.polidea.rxandroidble2.internal.connection.NotificationAndIndicationManager.lambda$writeClientCharacteristicConfig$9(NotificationAndIndicationManager.java:194)
W/System.err(16957):    at com.polidea.rxandroidble2.internal.connection.NotificationAndIndicationManager$$ExternalSyntheticLambda2.apply(Unknown Source:4)
W/System.err(16957):    at io.reactivex.internal.operators.completable.CompletableResumeNext$ResumeNextObserver.onError(CompletableResumeNext.java:82)
W/System.err(16957):    at io.reactivex.internal.operators.observable.ObservableIgnoreElementsCompletable$IgnoreObservable.onError(ObservableIgnoreElementsCompletable.java:61)
W/System.err(16957):    at io.reactivex.internal.operators.observable.ObservableCreate$CreateEmitter.tryOnError(ObservableCreate.java:84)
W/System.err(16957):    at com.polidea.rxandroidble2.internal.serialization.FIFORunnableEntry$1$1.onError(FIFORunnableEntry.java:73)
W/System.err(16957):    at io.reactivex.internal.operators.observable.ObservableUnsubscribeOn$UnsubscribeObserver.onError(ObservableUnsubscribeOn.java:70)
W/System.err(16957):    at io.reactivex.internal.operators.observable.ObservableCreate$CreateEmitter.tryOnError(ObservableCreate.java:84)
W/System.err(16957):    at com.polidea.rxandroidble2.internal.util.QueueReleasingEmitterWrapper.onError(QueueReleasingEmitterWrapper.java:47)
W/System.err(16957):    at io.reactivex.internal.observers.DeferredScalarDisposable.error(DeferredScalarDisposable.java:100)
W/System.err(16957):    at io.reactivex.internal.operators.single.SingleToObservable$SingleToObservableObserver.onError(SingleToObservable.java:77)
W/System.err(16957):    at io.reactivex.internal.operators.single.SingleTimeout$TimeoutMainObserver$TimeoutFallbackObserver.onError(SingleTimeout.java:97)
W/System.err(16957):    at io.reactivex.internal.disposables.EmptyDisposable.error(EmptyDisposable.java:78)
W/System.err(16957):    at io.reactivex.internal.operators.single.SingleError.subscribeActual(SingleError.java:42)
W/System.err(16957):    at io.reactivex.Single.subscribe(Single.java:3666)
W/System.err(16957):    at io.reactivex.internal.operators.single.SingleTimeout$TimeoutMainObserver.run(SingleTimeout.java:126)
W/System.err(16957):    at io.reactivex.internal.schedulers.ScheduledDirectTask.call(ScheduledDirectTask.java:38)
W/System.err(16957):    at io.reactivex.internal.schedulers.ScheduledDirectTask.call(ScheduledDirectTask.java:26)
W/System.err(16957):    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
W/System.err(16957):    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)
W/System.err(16957):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
W/System.err(16957):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
W/System.err(16957):    at java.lang.Thread.run(Thread.java:764)
W/System.err(16957): Caused by: com.polidea.rxandroidble2.exceptions.BleGattCallbackTimeoutException: GATT exception from MAC address 0C:8C:DC:33:4B:AF, with type BleGattOperation{description='DESCRIPTOR_WRITE'}
W/System.err(16957):    at com.polidea.rxandroidble2.internal.SingleResponseOperation.timeoutFallbackProcedure(SingleResponseOperation.java:92)
W/System.err(16957):    at com.polidea.rxandroidble2.internal.SingleResponseOperation.protectedRun(SingleResponseOperation.java:54)
W/System.err(16957):    at com.polidea.rxandroidble2.internal.QueueOperation$1.subscribe(QueueOperation.java:41)
W/System.err(16957):    at io.reactivex.internal.operators.observable.ObservableCreate.subscribeActual(ObservableCreate.java:40)
W/System.err(16957):    at io.reactivex.Observable.subscribe(Observable.java:12284)
W/System.err(16957):    at io.reactivex.internal.operators.observable.ObservableUnsubscribeOn.subscribeActual(ObservableUnsubscribeOn.java:32)
W/System.err(16957):    at io.reactivex.Observable.subscribe(Observable.java:12284)
W/System.err(16957):    at com.polidea.rxandroidble2.internal.serialization.FIFORunnableEntry$1.run(FIFORunnableEntry.java:56)
W/System.err(16957):    at io.reactivex.internal.schedulers.ScheduledDirectTask.call(ScheduledDirectTask.java:38)
W/System.err(16957):    at io.reactivex.internal.schedulers.ScheduledDirectTask.call(ScheduledDirectTask.java:26)
W/System.err(16957):    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
W/System.err(16957):    ... 3 more
W/System.err(16957): com.polidea.rxandroidble2.exceptions.BleCannotSetCharacteristicNotificationException: Cannot write client characteristic config descriptor (code 3) with characteristic UUID 6b200002-ff4e-4979-8186-fb7ba486fcd7
W/System.err(16957):    at com.polidea.rxandroidble2.internal.connection.NotificationAndIndicationManager.lambda$writeClientCharacteristicConfig$9(NotificationAndIndicationManager.java:194)
W/System.err(16957):    at com.polidea.rxandroidble2.internal.connection.NotificationAndIndicationManager$$ExternalSyntheticLambda2.apply(Unknown Source:4)
W/System.err(16957):    at io.reactivex.internal.operators.completable.CompletableResumeNext$ResumeNextObserver.onError(CompletableResumeNext.java:82)
W/System.err(16957):    at io.reactivex.internal.operators.observable.ObservableIgnoreElementsCompletable$IgnoreObservable.onError(ObservableIgnoreElementsCompletable.java:61)
W/System.err(16957):    at io.reactivex.internal.operators.observable.ObservableCreate$CreateEmitter.tryOnError(ObservableCreate.java:84)
W/System.err(16957):    at com.polidea.rxandroidble2.internal.serialization.FIFORunnableEntry$1$1.onError(FIFORunnableEntry.java:73)
W/System.err(16957):    at io.reactivex.internal.operators.observable.ObservableUnsubscribeOn$UnsubscribeObserver.onError(ObservableUnsubscribeOn.java:70)
W/System.err(16957):    at io.reactivex.internal.operators.observable.ObservableCreate$CreateEmitter.tryOnError(ObservableCreate.java:84)
W/System.err(16957):    at com.polidea.rxandroidble2.internal.util.QueueReleasingEmitterWrapper.onError(QueueReleasingEmitterWrapper.java:47)
W/System.err(16957):    at io.reactivex.internal.observers.DeferredScalarDisposable.error(DeferredScalarDisposable.java:100)
W/System.err(16957):    at io.reactivex.internal.operators.single.SingleToObservable$SingleToObservableObserver.onError(SingleToObservable.java:77)
W/System.err(16957):    at io.reactivex.internal.operators.single.SingleTimeout$TimeoutMainObserver$TimeoutFallbackObserver.onError(SingleTimeout.java:97)
W/System.err(16957):    at io.reactivex.internal.disposables.EmptyDisposable.error(EmptyDisposable.java:78)
W/System.err(16957):    at io.reactivex.internal.operators.single.SingleError.subscribeActual(SingleError.java:42)
W/System.err(16957):    at io.reactivex.Single.subscribe(Single.java:3666)
W/System.err(16957):    at io.reactivex.internal.operators.single.SingleTimeout$TimeoutMainObserver.run(SingleTimeout.java:126)
W/System.err(16957):    at io.reactivex.internal.schedulers.ScheduledDirectTask.call(ScheduledDirectTask.java:38)
W/System.err(16957):    at io.reactivex.internal.schedulers.ScheduledDirectTask.call(ScheduledDirectTask.java:26)
W/System.err(16957):    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
W/System.err(16957):    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)
W/System.err(16957):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
W/System.err(16957):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
W/System.err(16957):    at java.lang.Thread.run(Thread.java:764)
W/System.err(16957): Caused by: com.polidea.rxandroidble2.exceptions.BleGattCallbackTimeoutException: GATT exception from MAC address 0C:8C:DC:33:4B:AF, with type BleGattOperation{description='DESCRIPTOR_WRITE'}
W/System.err(16957):    at com.polidea.rxandroidble2.internal.SingleResponseOperation.timeoutFallbackProcedure(SingleResponseOperation.java:92)
W/System.err(16957):    at com.polidea.rxandroidble2.internal.SingleResponseOperation.protectedRun(SingleResponseOperation.java:54)
W/System.err(16957):    at com.polidea.rxandroidble2.internal.QueueOperation$1.subscribe(QueueOperation.java:41)
W/System.err(16957):    at io.reactivex.internal.operators.observable.ObservableCreate.subscribeActual(ObservableCreate.java:40)
W/System.err(16957):    at io.reactivex.Observable.subscribe(Observable.java:12284)
W/System.err(16957):    at io.reactivex.internal.operators.observable.ObservableUnsubscribeOn.subscribeActual(ObservableUnsubscribeOn.java:32)
W/System.err(16957):    at io.reactivex.Observable.subscribe(Observable.java:12284)
W/System.err(16957):    at com.polidea.rxandroidble2.internal.serialization.FIFORunnableEntry$1.run(FIFORunnableEntry.java:56)
W/System.err(16957):    at io.reactivex.internal.schedulers.ScheduledDirectTask.call(ScheduledDirectTask.java:38)
W/System.err(16957):    at io.reactivex.internal.schedulers.ScheduledDirectTask.call(ScheduledDirectTask.java:26)
W/System.err(16957):    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
W/System.err(16957):    ... 3 more
W/System.err(16957): com.polidea.rxandroidble2.exceptions.BleCannotSetCharacteristicNotificationException: Cannot write client characteristic config descriptor (code 3) with characteristic UUID 6b200002-ff4e-4979-8186-fb7ba486fcd7
W/System.err(16957):    at com.polidea.rxandroidble2.internal.connection.NotificationAndIndicationManager.lambda$writeClientCharacteristicConfig$9(NotificationAndIndicationManager.java:194)
W/System.err(16957):    at com.polidea.rxandroidble2.internal.connection.NotificationAndIndicationManager$$ExternalSyntheticLambda2.apply(Unknown Source:4)
W/System.err(16957):    at io.reactivex.internal.operators.completable.CompletableResumeNext$ResumeNextObserver.onError(CompletableResumeNext.java:82)
W/System.err(16957):    at io.reactivex.internal.operators.observable.ObservableIgnoreElementsCompletable$IgnoreObservable.onError(ObservableIgnoreElementsCompletable.java:61)
W/System.err(16957):    at io.reactivex.internal.operators.observable.ObservableCreate$CreateEmitter.tryOnError(ObservableCreate.java:84)
W/System.err(16957):    at com.polidea.rxandroidble2.internal.serialization.FIFORunnableEntry$1$1.onError(FIFORunnableEntry.java:73)
W/System.err(16957):    at io.reactivex.internal.operators.observable.ObservableUnsubscribeOn$UnsubscribeObserver.onError(ObservableUnsubscribeOn.java:70)
W/System.err(16957):    at io.reactivex.internal.operators.observable.ObservableCreate$CreateEmitter.tryOnError(ObservableCreate.java:84)
W/System.err(16957):    at com.polidea.rxandroidble2.internal.util.QueueReleasingEmitterWrapper.onError(QueueReleasingEmitterWrapper.java:47)
W/System.err(16957):    at io.reactivex.internal.observers.DeferredScalarDisposable.error(DeferredScalarDisposable.java:100)
W/System.err(16957):    at io.reactivex.internal.operators.single.SingleToObservable$SingleToObservableObserver.onError(SingleToObservable.java:77)
W/System.err(16957):    at io.reactivex.internal.operators.single.SingleTimeout$TimeoutMainObserver$TimeoutFallbackObserver.onError(SingleTimeout.java:97)
W/System.err(16957):    at io.reactivex.internal.disposables.EmptyDisposable.error(EmptyDisposable.java:78)
W/System.err(16957):    at io.reactivex.internal.operators.single.SingleError.subscribeActual(SingleError.java:42)
W/System.err(16957):    at io.reactivex.Single.subscribe(Single.java:3666)
W/System.err(16957):    at io.reactivex.internal.operators.single.SingleTimeout$TimeoutMainObserver.run(SingleTimeout.java:126)
W/System.err(16957):    at io.reactivex.internal.schedulers.ScheduledDirectTask.call(ScheduledDirectTask.java:38)
W/System.err(16957):    at io.reactivex.internal.schedulers.ScheduledDirectTask.call(ScheduledDirectTask.java:26)
W/System.err(16957):    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
W/System.err(16957):    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)
W/System.err(16957):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
W/System.err(16957):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
W/System.err(16957):    at java.lang.Thread.run(Thread.java:764)
W/System.err(16957): Caused by: com.polidea.rxandroidble2.exceptions.BleGattCallbackTimeoutException: GATT exception from MAC address 0C:8C:DC:33:4B:AF, with type BleGattOperation{description='DESCRIPTOR_WRITE'}
W/System.err(16957):    at com.polidea.rxandroidble2.internal.SingleResponseOperation.timeoutFallbackProcedure(SingleResponseOperation.java:92)
W/System.err(16957):    at com.polidea.rxandroidble2.internal.SingleResponseOperation.protectedRun(SingleResponseOperation.java:54)
W/System.err(16957):    at com.polidea.rxandroidble2.internal.QueueOperation$1.subscribe(QueueOperation.java:41)
W/System.err(16957):    at io.reactivex.internal.operators.observable.ObservableCreate.subscribeActual(ObservableCreate.java:40)
W/System.err(16957):    at io.reactivex.Observable.subscribe(Observable.java:12284)
W/System.err(16957):    at io.reactivex.internal.operators.observable.ObservableUnsubscribeOn.subscribeActual(ObservableUnsubscribeOn.java:32)
W/System.err(16957):    at io.reactivex.Observable.subscribe(Observable.java:12284)
W/System.err(16957):    at com.polidea.rxandroidble2.internal.serialization.FIFORunnableEntry$1.run(FIFORunnableEntry.java:56)
W/System.err(16957):    at io.reactivex.internal.schedulers.ScheduledDirectTask.call(ScheduledDirectTask.java:38)
W/System.err(16957):    at io.reactivex.internal.schedulers.ScheduledDirectTask.call(ScheduledDirectTask.java:26)
W/System.err(16957):    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
W/System.err(16957):    ... 3 more
W/System.err(16957): com.polidea.rxandroidble2.exceptions.BleCannotSetCharacteristicNotificationException: Cannot write client characteristic config descriptor (code 3) with characteristic UUID 6b200002-ff4e-4979-8186-fb7ba486fcd7
W/System.err(16957):    at com.polidea.rxandroidble2.internal.connection.NotificationAndIndicationManager.lambda$writeClientCharacteristicConfig$9(NotificationAndIndicationManager.java:194)
W/System.err(16957):    at com.polidea.rxandroidble2.internal.connection.NotificationAndIndicationManager$$ExternalSyntheticLambda2.apply(Unknown Source:4)
W/System.err(16957):    at io.reactivex.internal.operators.completable.CompletableResumeNext$ResumeNextObserver.onError(CompletableResumeNext.java:82)
W/System.err(16957):    at io.reactivex.internal.operators.observable.ObservableIgnoreElementsCompletable$IgnoreObservable.onError(ObservableIgnoreElementsCompletable.java:61)
W/System.err(16957):    at io.reactivex.internal.operators.observable.ObservableCreate$CreateEmitter.tryOnError(ObservableCreate.java:84)
W/System.err(16957):    at com.polidea.rxandroidble2.internal.serialization.FIFORunnableEntry$1$1.onError(FIFORunnableEntry.java:73)
W/System.err(16957):    at io.reactivex.internal.operators.observable.ObservableUnsubscribeOn$UnsubscribeObserver.onError(ObservableUnsubscribeOn.java:70)
W/System.err(16957):    at io.reactivex.internal.operators.observable.ObservableCreate$CreateEmitter.tryOnError(ObservableCreate.java:84)
W/System.err(16957):    at com.polidea.rxandroidble2.internal.util.QueueReleasingEmitterWrapper.onError(QueueReleasingEmitterWrapper.java:47)
W/System.err(16957):    at io.reactivex.internal.observers.DeferredScalarDisposable.error(DeferredScalarDisposable.java:100)
W/System.err(16957):    at io.reactivex.internal.operators.single.SingleToObservable$SingleToObservableObserver.onError(SingleToObservable.java:77)
W/System.err(16957):    at io.reactivex.internal.operators.single.SingleTimeout$TimeoutMainObserver$TimeoutFallbackObserver.onError(SingleTimeout.java:97)
W/System.err(16957):    at io.reactivex.internal.disposables.EmptyDisposable.error(EmptyDisposable.java:78)
W/System.err(16957):    at io.reactivex.internal.operators.single.SingleError.subscribeActual(SingleError.java:42)
W/System.err(16957):    at io.reactivex.Single.subscribe(Single.java:3666)
W/System.err(16957):    at io.reactivex.internal.operators.single.SingleTimeout$TimeoutMainObserver.run(SingleTimeout.java:126)
W/System.err(16957):    at io.reactivex.internal.schedulers.ScheduledDirectTask.call(ScheduledDirectTask.java:38)
W/System.err(16957):    at io.reactivex.internal.schedulers.ScheduledDirectTask.call(ScheduledDirectTask.java:26)
W/System.err(16957):    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
W/System.err(16957):    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)
W/System.err(16957):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
W/System.err(16957):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
W/System.err(16957):    at java.lang.Thread.run(Thread.java:764)
W/System.err(16957): Caused by: com.polidea.rxandroidble2.exceptions.BleGattCallbackTimeoutException: GATT exception from MAC address 0C:8C:DC:33:4B:AF, with type BleGattOperation{description='DESCRIPTOR_WRITE'}
W/System.err(16957):    at com.polidea.rxandroidble2.internal.SingleResponseOperation.timeoutFallbackProcedure(SingleResponseOperation.java:92)
W/System.err(16957):    at com.polidea.rxandroidble2.internal.SingleResponseOperation.protectedRun(SingleResponseOperation.java:54)
W/System.err(16957):    at com.polidea.rxandroidble2.internal.QueueOperation$1.subscribe(QueueOperation.java:41)
W/System.err(16957):    at io.reactivex.internal.operators.observable.ObservableCreate.subscribeActual(ObservableCreate.java:40)
W/System.err(16957):    at io.reactivex.Observable.subscribe(Observable.java:12284)
W/System.err(16957):    at io.reactivex.internal.operators.observable.ObservableUnsubscribeOn.subscribeActual(ObservableUnsubscribeOn.java:32)
W/System.err(16957):    at io.reactivex.Observable.subscribe(Observable.java:12284)
W/System.err(16957):    at com.polidea.rxandroidble2.internal.serialization.FIFORunnableEntry$1.run(FIFORunnableEntry.java:56)
W/System.err(16957):    at io.reactivex.internal.schedulers.ScheduledDirectTask.call(ScheduledDirectTask.java:38)
W/System.err(16957):    at io.reactivex.internal.schedulers.ScheduledDirectTask.call(ScheduledDirectTask.java:26)
W/System.err(16957):    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
W/System.err(16957):    ... 3 more
W/System.err(16957): com.polidea.rxandroidble2.exceptions.BleCannotSetCharacteristicNotificationException: Cannot write client characteristic config descriptor (code 3) with characteristic UUID 6b200002-ff4e-4979-8186-fb7ba486fcd7
W/System.err(16957):    at com.polidea.rxandroidble2.internal.connection.NotificationAndIndicationManager.lambda$writeClientCharacteristicConfig$9(NotificationAndIndicationManager.java:194)
W/System.err(16957):    at com.polidea.rxandroidble2.internal.connection.NotificationAndIndicationManager$$ExternalSyntheticLambda2.apply(Unknown Source:4)
W/System.err(16957):    at io.reactivex.internal.operators.completable.CompletableResumeNext$ResumeNextObserver.onError(CompletableResumeNext.java:82)
W/System.err(16957):    at io.reactivex.internal.operators.observable.ObservableIgnoreElementsCompletable$IgnoreObservable.onError(ObservableIgnoreElementsCompletable.java:61)
W/System.err(16957):    at io.reactivex.internal.operators.observable.ObservableCreate$CreateEmitter.tryOnError(ObservableCreate.java:84)
W/System.err(16957):    at com.polidea.rxandroidble2.internal.serialization.FIFORunnableEntry$1$1.onError(FIFORunnableEntry.java:73)
W/System.err(16957):    at io.reactivex.internal.operators.observable.ObservableUnsubscribeOn$UnsubscribeObserver.onError(ObservableUnsubscribeOn.java:70)
W/System.err(16957):    at io.reactivex.internal.operators.observable.ObservableCreate$CreateEmitter.tryOnError(ObservableCreate.java:84)
W/System.err(16957):    at com.polidea.rxandroidble2.internal.util.QueueReleasingEmitterWrapper.onError(QueueReleasingEmitterWrapper.java:47)
W/System.err(16957):    at io.reactivex.internal.observers.DeferredScalarDisposable.error(DeferredScalarDisposable.java:100)
W/System.err(16957):    at io.reactivex.internal.operators.single.SingleToObservable$SingleToObservableObserver.onError(SingleToObservable.java:77)
W/System.err(16957):    at io.reactivex.internal.operators.single.SingleTimeout$TimeoutMainObserver$TimeoutFallbackObserver.onError(SingleTimeout.java:97)
W/System.err(16957):    at io.reactivex.internal.disposables.EmptyDisposable.error(EmptyDisposable.java:78)
W/System.err(16957):    at io.reactivex.internal.operators.single.SingleError.subscribeActual(SingleError.java:42)
W/System.err(16957):    at io.reactivex.Single.subscribe(Single.java:3666)
W/System.err(16957):    at io.reactivex.internal.operators.single.SingleTimeout$TimeoutMainObserver.run(SingleTimeout.java:126)
W/System.err(16957):    at io.reactivex.internal.schedulers.ScheduledDirectTask.call(ScheduledDirectTask.java:38)
W/System.err(16957):    at io.reactivex.internal.schedulers.ScheduledDirectTask.call(ScheduledDirectTask.java:26)
W/System.err(16957):    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
W/System.err(16957):    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)
W/System.err(16957):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
W/System.err(16957):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
W/System.err(16957):    at java.lang.Thread.run(Thread.java:764)
W/System.err(16957): Caused by: com.polidea.rxandroidble2.exceptions.BleGattCallbackTimeoutException: GATT exception from MAC address 0C:8C:DC:33:4B:AF, with type BleGattOperation{description='DESCRIPTOR_WRITE'}
W/System.err(16957):    at com.polidea.rxandroidble2.internal.SingleResponseOperation.timeoutFallbackProcedure(SingleResponseOperation.java:92)
W/System.err(16957):    at com.polidea.rxandroidble2.internal.SingleResponseOperation.protectedRun(SingleResponseOperation.java:54)
W/System.err(16957):    at com.polidea.rxandroidble2.internal.QueueOperation$1.subscribe(QueueOperation.java:41)
W/System.err(16957):    at io.reactivex.internal.operators.observable.ObservableCreate.subscribeActual(ObservableCreate.java:40)
W/System.err(16957):    at io.reactivex.Observable.subscribe(Observable.java:12284)
W/System.err(16957):    at io.reactivex.internal.operators.observable.ObservableUnsubscribeOn.subscribeActual(ObservableUnsubscribeOn.java:32)
W/System.err(16957):    at io.reactivex.Observable.subscribe(Observable.java:12284)
W/System.err(16957):    at com.polidea.rxandroidble2.internal.serialization.FIFORunnableEntry$1.run(FIFORunnableEntry.java:56)
W/System.err(16957):    at io.reactivex.internal.schedulers.ScheduledDirectTask.call(ScheduledDirectTask.java:38)
W/System.err(16957):    at io.reactivex.internal.schedulers.ScheduledDirectTask.call(ScheduledDirectTask.java:26)
W/System.err(16957):    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
W/System.err(16957):    ... 3 more
W/System.err(16957): com.polidea.rxandroidble2.exceptions.BleCannotSetCharacteristicNotificationException: Cannot write client characteristic config descriptor (code 3) with characteristic UUID 6b200002-ff4e-4979-8186-fb7ba486fcd7
W/System.err(16957):    at com.polidea.rxandroidble2.internal.connection.NotificationAndIndicationManager.lambda$writeClientCharacteristicConfig$9(NotificationAndIndicationManager.java:194)
W/System.err(16957):    at com.polidea.rxandroidble2.internal.connection.NotificationAndIndicationManager$$ExternalSyntheticLambda2.apply(Unknown Source:4)
W/System.err(16957):    at io.reactivex.internal.operators.completable.CompletableResumeNext$ResumeNextObserver.onError(CompletableResumeNext.java:82)
W/System.err(16957):    at io.reactivex.internal.operators.observable.ObservableIgnoreElementsCompletable$IgnoreObservable.onError(ObservableIgnoreElementsCompletable.java:61)
W/System.err(16957):    at io.reactivex.internal.operators.observable.ObservableCreate$CreateEmitter.tryOnError(ObservableCreate.java:84)
W/System.err(16957):    at com.polidea.rxandroidble2.internal.serialization.FIFORunnableEntry$1$1.onError(FIFORunnableEntry.java:73)
W/System.err(16957):    at io.reactivex.internal.operators.observable.ObservableUnsubscribeOn$UnsubscribeObserver.onError(ObservableUnsubscribeOn.java:70)
W/System.err(16957):    at io.reactivex.internal.operators.observable.ObservableCreate$CreateEmitter.tryOnError(ObservableCreate.java:84)
W/System.err(16957):    at com.polidea.rxandroidble2.internal.util.QueueReleasingEmitterWrapper.onError(QueueReleasingEmitterWrapper.java:47)
W/System.err(16957):    at io.reactivex.internal.observers.DeferredScalarDisposable.error(DeferredScalarDisposable.java:100)
W/System.err(16957):    at io.reactivex.internal.operators.single.SingleToObservable$SingleToObservableObserver.onError(SingleToObservable.java:77)
W/System.err(16957):    at io.reactivex.internal.operators.single.SingleTimeout$TimeoutMainObserver$TimeoutFallbackObserver.onError(SingleTimeout.java:97)
W/System.err(16957):    at io.reactivex.internal.disposables.EmptyDisposable.error(EmptyDisposable.java:78)
W/System.err(16957):    at io.reactivex.internal.operators.single.SingleError.subscribeActual(SingleError.java:42)
W/System.err(16957):    at io.reactivex.Single.subscribe(Single.java:3666)
W/System.err(16957):    at io.reactivex.internal.operators.single.SingleTimeout$TimeoutMainObserver.run(SingleTimeout.java:126)
W/System.err(16957):    at io.reactivex.internal.schedulers.ScheduledDirectTask.call(ScheduledDirectTask.java:38)
W/System.err(16957):    at io.reactivex.internal.schedulers.ScheduledDirectTask.call(ScheduledDirectTask.java:26)
W/System.err(16957):    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
W/System.err(16957):    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)
W/System.err(16957):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
W/System.err(16957):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
W/System.err(16957):    at java.lang.Thread.run(Thread.java:764)
W/System.err(16957): Caused by: com.polidea.rxandroidble2.exceptions.BleGattCallbackTimeoutException: GATT exception from MAC address 0C:8C:DC:33:4B:AF, with type BleGattOperation{description='DESCRIPTOR_WRITE'}
W/System.err(16957):    at com.polidea.rxandroidble2.internal.SingleResponseOperation.timeoutFallbackProcedure(SingleResponseOperation.java:92)
W/System.err(16957):    at com.polidea.rxandroidble2.internal.SingleResponseOperation.protectedRun(SingleResponseOperation.java:54)
W/System.err(16957):    at com.polidea.rxandroidble2.internal.QueueOperation$1.subscribe(QueueOperation.java:41)
W/System.err(16957):    at io.reactivex.internal.operators.observable.ObservableCreate.subscribeActual(ObservableCreate.java:40)
W/System.err(16957):    at io.reactivex.Observable.subscribe(Observable.java:12284)
W/System.err(16957):    at io.reactivex.internal.operators.observable.ObservableUnsubscribeOn.subscribeActual(ObservableUnsubscribeOn.java:32)
W/System.err(16957):    at io.reactivex.Observable.subscribe(Observable.java:12284)
W/System.err(16957):    at com.polidea.rxandroidble2.internal.serialization.FIFORunnableEntry$1.run(FIFORunnableEntry.java:56)
W/System.err(16957):    at io.reactivex.internal.schedulers.ScheduledDirectTask.call(ScheduledDirectTask.java:38)
W/System.err(16957):    at io.reactivex.internal.schedulers.ScheduledDirectTask.call(ScheduledDirectTask.java:26)
W/System.err(16957):    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
W/System.err(16957):    ... 3 more

The thing is, the reconnection did work upon a certain point, as the peripheral cannot be discovered after the 'failed' reconnection until the app is force quit. But because I am not receiving a ConnectedDevices update, I don't know when to start subscribing to certain characteristics. So I am not quite sure what is happening, do you have an idea as to why it is giving timeouts and why it is not giving me a ConnectedDevices update?

Comments (6)

  1. Peter Krol reporter

    I’ll check in a minute, but what is guiding me to an Android specific issue is the fact that the same Flutter code has no issues with automatic reconnection on iOS.

    The code itself should only call the connect method once, when it first goes into a state other than connected.

    I’ll let you know when I have additional findings, but perhaps you can think about the thing stated above

  2. Petri Lipponen

    The code handling connections is different in the MDS library between android and ios. Therefore it is no wonder that it works differently in those two environments. I’d recommend you try to simplify as much as possible. You may want to try to create a simple flutter app that just does scan & connect, nothing else, and then logs when the callbacks happen. One good starting point would be the example app in mdsflutter repository if your current app is too complicated.

  3. Peter Krol reporter

    I have managed to fix the issue, it was indeed related to the multiple connections attempts. The Android mds library attempts an automatic reconnect, which my code also tried doing when it received a ‘disconnected’ event. I have removed my own implementation of that ‘reconnection’ logic and now it seems to work as expected.

    Another issue I came across was the Android release build not working with a similar error to #111. After adding a proguard configuration with the following contents, the build succeeded and everything worked as expected.

    -keepnames class ** { *; }
    -keep class com.movesense.** { *; }
    -keep class com.suunto.** { *; }
    

    We can consider this issue resolved :), thanks for your assistance

  4. Log in to comment