Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Supported Devices #862

Open
phildharmadr opened this issue May 7, 2024 · 2 comments
Open

Supported Devices #862

phildharmadr opened this issue May 7, 2024 · 2 comments

Comments

@phildharmadr
Copy link

Describe the bug
We have a functioning app that works across iPhone7, iPhone7 plus, iPhone 12, iPhone14, Pixel 5, Pixel 8, Samsung Galaxy S22 and operates with our BLE device.

Recently we ran into a Samsung Galaxy S20 with SDK33, Android 13 and we are unable to connect to our BLE device.

Is there a list of supported devices and OS versions?

@pmagnuson
Copy link

the log capture below shows a little bit of information about this failure.
[log] entries are from the application logging (with timestamp)
I/Bluetooth entries are from the verbose logging on the ble library.

From the application perspective

  • connected status occurs at 08:46:58.983
  • a disconnect is received at 08:47:04.624
    This sequence occurs every time and is consistently a 5 second interval.
    In this log the application does a write to characteristic 0eaa6294-88f3-4817-985e-f0b869ad5e05. However the disconnect occurs even when the write is not done.

For this application and device, this error only occurs on the Galaxy S20 and not other iOS or Android devices that have been tested.

[log] 08:46:27.091: TabProvider: startDiscovery
I/flutter (22327): REACTIVE_BLE: Scan for devices with services:[0eaa6289-88f3-4817-985e-f0b869ad5e05, 8d53dc1d-1db7-4cd3-868b-8a527460aa84], scanMode: ScanMode.balanced, requireLocationServicesEnabled: true
[log] 08:46:27.116: TabSessionCountProvider: user brieS366tsh0CCMkYCu1b0Crpbf1 usageCount 188
I/BLASTBufferQueue(22327): update, w= 1080 h= 2400 mName = ViewRootImpl@c62eca9[MainActivity] mNativeObject= 0xb4000075eb9dce70 sc.mNativeObject= 0xb40000757ba34f70 format= -3 caller= android.view.ViewRootImpl.updateBlastSurfaceIfNeeded:2898 android.view.ViewRootImpl.relayoutWindow:9847 android.view.ViewRootImpl.performTraversals:3884 android.view.ViewRootImpl.doTraversal:3116 android.view.ViewRootImpl$TraversalRunnable.run:10885 android.view.Choreographer$CallbackRecord.run:1301
[log] 08:46:27.117: DatabaseService: checkUserDebugLevel not found
[log] 08:46:27.117: DatabaseService: getUserInfo logLevel FINER
[log] 08:46:27.117: cloudLogging: updateUserLogLevel FINER
[log] 08:46:27.117: DatabaseService: getUserInfo brieS366tsh0CCMkYCu1b0Crpbf1 {image: https://lh3.googleusercontent.com/a/ACg8ocL1OkNgDEsG3gtRXbvq6R12OCjPhrSi9gbWZIG6bLaJAjq9=s96-c, SAVETHREAD: thread_qEQP54daRj42QHXnZRIiiFVd, session_count: 188, name: phil magnuson, last_active: Timestamp(seconds=1715265986, nanoseconds=252000000), email: [email protected]}
I/BluetoothAdapter(22327): STATE_ON
I/BluetoothAdapter(22327): STATE_ON
I/BluetoothAdapter(22327): STATE_ON
I/BluetoothAdapter(22327): STATE_ON
D/BluetoothLeScanner(22327): Start Scan with callback
D/BluetoothLeScanner(22327): onScannerRegistered() - status=0 scannerId=4 mScannerId=0
I/flutter (22327): REACTIVE_BLE: Received ScanResult(result: Result<DiscoveredDevice, GenericFailure<ScanFailure>?>.success(DiscoveredDevice(id: 76:6C:68:B5:8A:54, name: DharmaDr, serviceData: {}, serviceUuids: [0eaa6289-88f3-4817-985e-f0b869ad5e05], manufacturerData: [], rssi: -73, connectable: Connectable.available)))
[log] 08:46:58.177: TabProvider: discovery 76:6C:68:B5:8A:54 DharmaDr inProgress false
[log] 08:46:58.179: TabProvider: connect start 76:6C:68:B5:8A:54
I/flutter (22327): REACTIVE_BLE: Received ScanResult(result: Result<DiscoveredDevice, GenericFailure<ScanFailure>?>.success(DiscoveredDevice(id: 76:6C:68:B5:8A:54, name: DharmaDr, serviceData: {}, serviceUuids: [0eaa6289-88f3-4817-985e-f0b869ad5e05], manufacturerData: [], rssi: -73, connectable: Connectable.available)))
[log] 08:46:58.247: TabProvider: discovery 76:6C:68:B5:8A:54 DharmaDr inProgress true
I/flutter (22327): REACTIVE_BLE: Connect to device: 76:6C:68:B5:8A:54, servicesWithCharacteristicsToDiscover: null, timeout: 0:00:01.500000
I/BluetoothAdapter(22327): STATE_ON
D/BluetoothGatt(22327): connect() - device: 766C68_4, auto: false
I/flutter (22327): REACTIVE_BLE: Received ConnectionStateUpdate(deviceId: 76:6C:68:B5:8A:54, connectionState: DeviceConnectionState.connecting, failure: null)
D/BluetoothGatt(22327): registerApp()
D/BluetoothGatt(22327): registerApp() - UUID=54f40e04-01cf-47e5-80de-da66c94a6395
D/BluetoothGatt(22327): onClientRegistered() - status=0 clientIf=6
[log] 08:46:58.725: TabProvider: connect listen 76:6C:68:B5:8A:54 connecting null
D/BluetoothGatt(22327): onClientConnectionState() - status=0 clientIf=6 device=766C68_4
I/flutter (22327): REACTIVE_BLE: Received ConnectionStateUpdate(deviceId: 76:6C:68:B5:8A:54, connectionState: DeviceConnectionState.connected, failure: null)
[log] 08:46:58.983: TabProvider: connect listen 76:6C:68:B5:8A:54 connected null
[log] 08:46:58.985: AppBle: writeSecureMode
I/flutter (22327): REACTIVE_BLE: Get discovered services for device: 76:6C:68:B5:8A:54
I/flutter (22327): REACTIVE_BLE: Get discovered services for device: 76:6C:68:B5:8A:54
D/BluetoothGatt(22327): discoverServices() - device: 766C68_4
D/BluetoothGatt(22327): onConnectionUpdated() - Device=766C68_4 interval=6 latency=0 timeout=500 status=0
D/BluetoothGatt(22327): onPhyUpdate() - status=0 address=766C68_4 txPhy=2 rxPhy=2
D/BluetoothGatt(22327): onClientConnectionState() - status=0 clientIf=6 device=766C68_4
D/BluetoothGatt(22327): close()
D/BluetoothGatt(22327): unregisterApp() - mClientIf=6
[log] 08:47:04.624: TabProvider: connect listen 76:6C:68:B5:8A:54 disconnected ConnectionError.failedToConnect
I/flutter (22327): REACTIVE_BLE: Received ConnectionStateUpdate(deviceId: 76:6C:68:B5:8A:54, connectionState: DeviceConnectionState.disconnected, failure: GenericFailure<ConnectionError>(code: ConnectionError.failedToConnect, message: "Disconnected from MAC='XX:XX:XX:XX:XX:XX' with status 0 (GATT_SUCCESS)"))
I/flutter (22327): REACTIVE_BLE: Received ConnectionStateUpdate(deviceId: 76:6C:68:B5:8A:54, connectionState: DeviceConnectionState.disconnected, failure: GenericFailure<ConnectionError>(code: ConnectionError.failedToConnect, message: "Disconnected from MAC='XX:XX:XX:XX:XX:XX' with status 0 (GATT_SUCCESS)"))
I/flutter (22327): REACTIVE_BLE: Disconnect device: 76:6C:68:B5:8A:54
I/flutter (22327): REACTIVE_BLE: Received ConnectionStateUpdate(deviceId: 76:6C:68:B5:8A:54, connectionState: DeviceConnectionState.disconnected, failure: GenericFailure<ConnectionError>(code: ConnectionError.failedToConnect, message: "Disconnected from MAC='XX:XX:XX:XX:XX:XX' with status 0 (GATT_SUCCESS)"))
I/flutter (22327): REACTIVE_BLE: Received ConnectionStateUpdate(deviceId: 76:6C:68:B5:8A:54, connectionState: DeviceConnectionState.disconnecting, failure: null)
E/flutter (22327): [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: PlatformException(service_discovery_failure, java.lang.Exception: Disconnected from MAC='XX:XX:XX:XX:XX:XX' with status 0 (GATT_SUCCESS), [com.signify.hue.flutterreactiveble.ble.ReactiveBleClient$discoverServices$1.invoke(ReactiveBleClient.kt:150), com.signify.hue.flutterreactiveble.ble.ReactiveBleClient$discoverServices$1.invoke(ReactiveBleClient.kt:142), com.signify.hue.flutterreactiveble.ble.ReactiveBleClient.discoverServices$lambda$5(ReactiveBleClient.kt:142), com.signify.hue.flutterreactiveble.ble.ReactiveBleClient.$r8$lambda$74mYToVtuy5yOEqTNCOq1V3-cL8(Unknown Source:0), com.signify.hue.flutterreactiveble.ble.ReactiveBleClient$$ExternalSyntheticLambda7.apply(Unknown Source:2), io.reactivex.internal.operators.observable.ObservableFlatMapSingle$FlatMapSingleObserver.onNext(ObservableFlatMapSingle.java:100), io.reactivex.internal.util.NotificationLite.accept(NotificationLite.java:246), io.reactivex.subjects.BehaviorSubject$BehaviorDisposable.test(BehaviorSubject.java:569), io.reactivex.subjects.BehaviorSubject$BehaviorDisposable.emitNext(BehaviorSubject.java:564), io.reactivex.subjects.BehaviorSubject.onNext(BehaviorSubject.java:268), com.signify.hue.flutterreactiveble.ble.DeviceConnector$establishConnection$5.invoke(DeviceConnector.kt:125), com.signify.hue.flutterreactiveble.ble.DeviceConnector$establishConnection$5.invoke(DeviceConnector.kt:125), com.signify.hue.flutterreactiveble.ble.DeviceConnector.establishConnection$lambda$5(DeviceConnector.kt:125), com.signify.hue.flutterreactiveble.ble.DeviceConnector.$r8$lambda$d0bWqnSR02eBFn1cc8Jt0mPjL0E(Unknown Source:0), com.signify.hue.flutterreactiveble.ble.DeviceConnector$$ExternalSyntheticLambda5.accept(Unknown Source:2), io.reactivex.internal.observers.LambdaObserver.onNext(LambdaObserver.java:63), io.reactivex.internal.operators.observable.ObservableDoOnEach$DoOnEachObserver.onNext(ObservableDoOnEach.java:101), io.reactivex.internal.operators.observable.ObservableDoOnEach$DoOnEachObserver.onNext(ObservableDoOnEach.java:101), io.reactivex.internal.operators.observable.ObservableOnErrorReturn$OnErrorReturnObserver.onError(ObservableOnErrorReturn.java:86), io.reactivex.internal.operators.observable.ObservableSwitchMap$SwitchMapObserver.drain(ObservableSwitchMap.java:211), io.reactivex.internal.operators.observable.ObservableSwitchMap$SwitchMapObserver.innerError(ObservableSwitchMap.java:320), io.reactivex.internal.operators.observable.ObservableSwitchMap$SwitchMapInnerObserver.onError(ObservableSwitchMap.java:381), io.reactivex.internal.observers.BasicFuseableObserver.onError(BasicFuseableObserver.java:100), io.reactivex.internal.operators.observable.ObservableTimeout$TimeoutObserver.onError(ObservableTimeout.java:136), io.reactivex.internal.operators.observable.ObservableDoFinally$DoFinallyObserver.onError(ObservableDoFinally.java:85), io.reactivex.internal.operators.observable.ObservableUnsubscribeOn$UnsubscribeObserver.onError(ObservableUnsubscribeOn.java:70), io.reactivex.internal.operators.observable.ObservableSubscribeOn$SubscribeOnObserver.onError(ObservableSubscribeOn.java:63), io.reactivex.internal.operators.observable.ObservableDoFinally$DoFinallyObserver.onError(ObservableDoFinally.java:85), io.reactivex.internal.observers.DisposableLambdaObserver.onError(DisposableLambdaObserver.java:65), io.reactivex.internal.operators.observable.ObservableDelaySubscriptionOther$DelayObserver$OnComplete.onError(ObservableDelaySubscriptionOther.java:99), io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.checkTerminate(ObservableFlatMap.java:496), io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.drainLoop(ObservableFlatMap.java:334), io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.drain(ObservableFlatMap.java:326), io.reactivex.internal.operators.observable.ObservableFlatMap$InnerObserver.onError(ObservableFlatMap.java:575), io.reactivex.internal.operators.obs
E/flutter (22327): #0      StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:651:7)
E/flutter (22327): #1      MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:334:18)
E/flutter (22327): <asynchronous suspension>
E/flutter (22327): #2      ReactiveBleMobilePlatform.getDiscoverServices.<anonymous closure> (package:reactive_ble_mobile/src/reactive_ble_mobile_platform.dart:303:15)
E/flutter (22327): <asynchronous suspension>
E/flutter (22327): #3      FlutterReactiveBle.getDiscoveredServices (package:flutter_reactive_ble/src/reactive_ble.dart:338:32)
E/flutter (22327): <asynchronous suspension>
E/flutter (22327): #4      FlutterReactiveBle.resolve (package:flutter_reactive_ble/src/reactive_ble.dart:419:22)
E/flutter (22327): <asynchronous suspension>
E/flutter (22327): #5      FlutterReactiveBle.resolveSingle (package:flutter_reactive_ble/src/reactive_ble.dart:426:19)
E/flutter (22327): <asynchronous suspension>
E/flutter (22327): #6      FlutterReactiveBle.readCharacteristic (package:flutter_reactive_ble/src/reactive_ble.dart:167:13)
E/flutter (22327): <asynchronous suspension>
E/flutter (22327): #7      TabProvider._leftConnectDevice.<anonymous closure> (package:dharmadr/ble/tab_provider.dart:337:17)
E/flutter (22327): <asynchronous suspension>
E/flutter (22327):
I/flutter (22327): REACTIVE_BLE: Received ConnectionStateUpdate(deviceId: 76:6C:68:B5:8A:54, connectionState: DeviceConnectionState.disconnected, failure: null)
[log] 08:47:04.643: HomePage: build mode: HomeScreenMode.localOnly  chatID
[log] 08:47:04.637: AppBle: QualifiedCharacteristic(characteristicId: 0eaa6294-88f3-4817-985e-f0b869ad5e05, serviceId: 0eaa6289-88f3-4817-985e-f0b869ad5e05, deviceId: 76:6C:68:B5:8A:54) [254]
[log] 08:47:04.638: AppBle: bleWriteCommandWithResponse PlatformException(service_discovery_failure, java.lang.Exception: Disconnected from MAC='XX:XX:XX:XX:XX:XX' with status 0 (GATT_SUCCESS), [com.signify.hue.flutterreactiveble.ble.ReactiveBleClient$discoverServices$1.invoke(ReactiveBleClient.kt:150), com.signify.hue.flutterreactiveble.ble.ReactiveBleClient$discoverServices$1.invoke(ReactiveBleClient.kt:142), com.signify.hue.flutterreactiveble.ble.ReactiveBleClient.discoverServices$lambda$5(ReactiveBleClient.kt:142), com.signify.hue.flutterreactiveble.ble.ReactiveBleClient.$r8$lambda$74mYToVtuy5yOEqTNCOq1V3-cL8(Unknown Source:0), com.signify.hue.flutterreactiveble.ble.ReactiveBleClient$$ExternalSyntheticLambda7.apply(Unknown Source:2), io.reactivex.internal.operators.observable.ObservableFlatMapSingle$FlatMapSingleObserver.onNext(ObservableFlatMapSingle.java:100), io.reactivex.internal.util.NotificationLite.accept(NotificationLite.java:246), io.reactivex.subjects.BehaviorSubject$BehaviorDisposable.test(BehaviorSubject.java:569), io.reactivex.subjects.BehaviorSubject$BehaviorDisposable.emitNext(BehaviorSubject.java:564), io.reactivex.subjects.BehaviorSubject.onNext(BehaviorSubject.java:268), com.signify.hue.flutterreactiveble.ble.DeviceConnector$establishConnection$5.invoke(DeviceConnector.kt:125), com.signify.hue.flutterreactiveble.ble.DeviceConnector$establishConnection$5.invoke(DeviceConnector.kt:125), com.signify.hue.flutterreactiveble.ble.DeviceConnector.establishConnection$lambda$5(DeviceConnector.kt:125), com.signify.hue.flutterreactiveble.ble.DeviceConnector.$r8$lambda$d0bWqnSR02eBFn1cc8Jt0mPjL0E(Unknown Source:0), com.signify.hue.flutterreactiveble.ble.DeviceConnector$$ExternalSyntheticLambda5.accept(Unknown Source:2), io.reactivex.internal.observers.LambdaObserver.onNext(LambdaObserver.java:63), io.reactivex.internal.operators.observable.ObservableDoOnEach$DoOnEachObserver.onNext(ObservableDoOnEach.java:101), io.reactivex.internal.operators.observable.ObservableDoOnEach$DoOnEachObserver.onNext(ObservableDoOnEach.java:101), io.reactivex.internal.operators.observable.ObservableOnErrorReturn$OnErrorReturnObserver.onError(ObservableOnErrorReturn.java:86), io.reactivex.internal.operators.observable.ObservableSwitchMap$SwitchMapObserver.drain(ObservableSwitchMap.java:211), io.reactivex.internal.operators.observable.ObservableSwitchMap$SwitchMapObserver.innerError(ObservableSwitchMap.java:320), io.reactivex.internal.operators.observable.ObservableSwitchMap$SwitchMapInnerObserver.onError(ObservableSwitchMap.java:381), io.reactivex.internal.observers.BasicFuseableObserver.onError(BasicFuseableObserver.java:100), io.reactivex.internal.operators.observable.ObservableTimeout$TimeoutObserver.onError(ObservableTimeout.java:136), io.reactivex.internal.operators.observable.ObservableDoFinally$DoFinallyObserver.onError(ObservableDoFinally.java:85), io.reactivex.internal.operators.observable.ObservableUnsubscribeOn$UnsubscribeObserver.onError(ObservableUnsubscribeOn.java:70), io.reactivex.internal.operators.observable.ObservableSubscribeOn$SubscribeOnObserver.onError(ObservableSubscribeOn.java:63), io.reactivex.internal.operators.observable.ObservableDoFinally$DoFinallyObserver.onError(ObservableDoFinally.java:85), io.reactivex.internal.observers.DisposableLambdaObserver.onError(DisposableLambdaObserver.java:65), io.reactivex.internal.operators.observable.ObservableDelaySubscriptionOther$DelayObserver$OnComplete.onError(ObservableDelaySubscriptionOther.java:99), io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.checkTerminate(ObservableFlatMap.java:496), io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.drainLoop(ObservableFlatMap.java:334), io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.drain(ObservableFlatMap.java:326), io.reactivex.internal.operators.observable.ObservableFlatMap$InnerObserver.onError(ObservableFlatMap.java:575), io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.checkTerminate(ObservableFlatMap.java:496), io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.drainLoop(ObservableFlatMap.java:334), io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.drain(ObservableFlatMap.java:326), io.reactivex.internal.operators.observable.ObservableFlatMap$InnerObserver.onError(ObservableFlatMap.java:575), io.reactivex.internal.disposables.EmptyDisposable.error(EmptyDisposable.java:63), io.reactivex.internal.operators.observable.ObservableError.subscribeActual(ObservableError.java:38), io.reactivex.Observable.subscribe(Observable.java:12284), io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.subscribeInner(ObservableFlatMap.java:165), io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.onNext(ObservableFlatMap.java:139), io.reactivex.internal.util.NotificationLite.accept(NotificationLite.java:246), io.reactivex.internal.operators.observable.ObservableReplay$UnboundedReplayBuffer.replay(ObservableReplay.java:553), io.reactivex.internal.operators.observable.ObservableReplay$ReplayObserver.replay(ObservableReplay.java:401), io.reactivex.internal.operators.observable.ObservableReplay$ReplayObserver.onNext(ObservableReplay.java:366), io.reactivex.internal.operators.observable.ObservableDoOnEach$DoOnEachObserver.onNext(ObservableDoOnEach.java:101), io.reactivex.internal.operators.observable.ObservableElementAt$ElementAtObserver.onNext(ObservableElementAt.java:86), com.jakewharton.rxrelay2.BehaviorRelay$BehaviorDisposable.test(BehaviorRelay.java:364), com.jakewharton.rxrelay2.BehaviorRelay$BehaviorDisposable.emitNext(BehaviorRelay.java:358), com.jakewharton.rxrelay2.BehaviorRelay.accept(BehaviorRelay.java:135), com.polidea.rxandroidble2.internal.connection.DisconnectionRouter.onDisconnectedException(DisconnectionRouter.java:110), com.polidea.rxandroidble2.internal.connection.RxBleGattCallback$2.onConnectionStateChange(RxBleGattCallback.java:81), android.bluetooth.BluetoothGatt$1$5.run(BluetoothGatt.java:363), android.bluetooth.BluetoothGatt.runOrQueueCallback(BluetoothGatt.java:1003), android.bluetooth.BluetoothGatt.-$$Nest$mrunOrQueueCallback(Unknown Source:0), android.bluetooth.BluetoothGatt$1.onClientConnectionState(BluetoothGatt.java:358), android.bluetooth.IBluetoothGattCallback$Stub.onTransact(IBluetoothGattCallback.java:135), android.os.Binder.execTransactInternal(Binder.java:1321), android.os.Binder.execTransact(Binder.java:1280)], null)
[log] 08:47:04.652: TabUIState: build mode: HomeScreenMode.localOnly connected: false chatID:
[log] 08:47:04.667: ContentCards: content length: 2
[log] 08:47:04.677: MenuScreen: build leftIsConnected false
[log] 08:47:04.701: BatteryStatus: connected: false levels: [100, 100]
[log] 08:47:04.706: BatteryStatus: connected: false levels: [100, 100]
I/flutter (22327): REACTIVE_BLE: Received ConnectionStateUpdate(deviceId: 76:6C:68:B5:8A:54, connectionState: DeviceConnectionState.disconnected, failure: null)
I/TRuntime.CctTransportBackend(22327): Making request to: https://firebaselogging-pa.googleapis.com/v1/firelog/legacy/batchlog
D/TrafficStats(22327): tagSocket(6) with statsTag=0xffffffff, statsUid=-1
I/TRuntime.CctTransportBackend(22327): Status Code: 200

@pmagnuson
Copy link

This can be closed. We found that the Galaxy S20 did not respond well to request from the device for the 2M PHY.

It would still be very useful to know what devices are used for testing of the library.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants