From 559d17678cc0b14106a10f60f3d8de8982ac9a7e Mon Sep 17 00:00:00 2001 From: Erik Johansson Date: Sat, 24 Nov 2018 22:40:41 +0100 Subject: [PATCH] Stop scan before connecting to Medisana Fixes #353 (hopefully) --- .../openscale/core/bluetooth/BluetoothCommunication.java | 8 ++++++++ .../openscale/core/bluetooth/BluetoothMedisanaBS44x.java | 6 ++++++ 2 files changed, 14 insertions(+) diff --git a/android_app/app/src/main/java/com/health/openscale/core/bluetooth/BluetoothCommunication.java b/android_app/app/src/main/java/com/health/openscale/core/bluetooth/BluetoothCommunication.java index 01bfa3a1..e574c3f9 100644 --- a/android_app/app/src/main/java/com/health/openscale/core/bluetooth/BluetoothCommunication.java +++ b/android_app/app/src/main/java/com/health/openscale/core/bluetooth/BluetoothCommunication.java @@ -227,6 +227,10 @@ public abstract class BluetoothCommunication { */ protected void onBluetoothDataChange(BluetoothGatt bluetoothGatt, BluetoothGattCharacteristic gattCharacteristic) {} + protected boolean doScanWhileConnecting() { + return true; + } + /** * Set the Bluetooth machine state to a specific state. * @@ -455,6 +459,10 @@ public abstract class BluetoothCommunication { private void connectGatt(BluetoothDevice device) { Timber.i("Connecting to [%s] (driver: %s)", device.getAddress(), driverName()); + if (!doScanWhileConnecting()) { + stopLeScan(); + } + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { bluetoothGatt = device.connectGatt( context, false, gattCallback, BluetoothDevice.TRANSPORT_LE); diff --git a/android_app/app/src/main/java/com/health/openscale/core/bluetooth/BluetoothMedisanaBS44x.java b/android_app/app/src/main/java/com/health/openscale/core/bluetooth/BluetoothMedisanaBS44x.java index 2d578925..bbb30f95 100644 --- a/android_app/app/src/main/java/com/health/openscale/core/bluetooth/BluetoothMedisanaBS44x.java +++ b/android_app/app/src/main/java/com/health/openscale/core/bluetooth/BluetoothMedisanaBS44x.java @@ -47,6 +47,12 @@ public class BluetoothMedisanaBS44x extends BluetoothCommunication { return "Medisana BS44x"; } + @Override + protected boolean doScanWhileConnecting() { + // Medisana seems to have problem connecting if scan is running (see #278 and #353) + return false; + } + @Override protected boolean nextInitCmd(int stateNr) { return false;