From 396983cb2499c38607dbb898113eac9d89dfabcc Mon Sep 17 00:00:00 2001 From: Aleksander Nowakowski Date: Fri, 4 May 2018 16:32:39 +0200 Subject: [PATCH] Added an option to call BLE requests in synchronous way. Not tested. --- .../nrftoolbox/battery/BatteryManager.java | 3 +- .../android/nrftoolbox/bpm/BPMManager.java | 44 ++++++++++--------- .../android/nrftoolbox/cgms/CGMSManager.java | 21 +++++---- .../android/nrftoolbox/csc/CSCManager.java | 3 +- .../nrftoolbox/gls/GlucoseManager.java | 14 +++--- 5 files changed, 49 insertions(+), 36 deletions(-) diff --git a/app/src/main/java/no/nordicsemi/android/nrftoolbox/battery/BatteryManager.java b/app/src/main/java/no/nordicsemi/android/nrftoolbox/battery/BatteryManager.java index 886295ae..88b9c992 100644 --- a/app/src/main/java/no/nordicsemi/android/nrftoolbox/battery/BatteryManager.java +++ b/app/src/main/java/no/nordicsemi/android/nrftoolbox/battery/BatteryManager.java @@ -68,8 +68,9 @@ public abstract class BatteryManager extends public void enableBatteryLevelCharacteristicNotifications() { if (isConnected()) { // If the Battery Level characteristic is null, the request will be ignored + setNotificationCallback(mBatteryLevelCharacteristic) + .with(mBatteryLevelDataCallback); enableNotifications(mBatteryLevelCharacteristic) - .with(mBatteryLevelDataCallback) .done(device -> log(LogContract.Log.Level.INFO, "Battery Level notifications enabled")) .fail((device, status) -> log(LogContract.Log.Level.WARNING, "Battery Level characteristic not found")); } diff --git a/app/src/main/java/no/nordicsemi/android/nrftoolbox/bpm/BPMManager.java b/app/src/main/java/no/nordicsemi/android/nrftoolbox/bpm/BPMManager.java index a8fa6c2c..280ef529 100644 --- a/app/src/main/java/no/nordicsemi/android/nrftoolbox/bpm/BPMManager.java +++ b/app/src/main/java/no/nordicsemi/android/nrftoolbox/bpm/BPMManager.java @@ -81,31 +81,30 @@ public class BPMManager extends BatteryManager { protected void initialize() { super.initialize(); - enableNotifications(mICPCharacteristic) + setNotificationCallback(mICPCharacteristic) .with(new IntermediateCuffPressureDataCallback() { - @Override - public void onDataReceived(@NonNull final BluetoothDevice device, @NonNull final Data data) { - log(LogContract.Log.Level.APPLICATION, "\"" + IntermediateCuffPressureParser.parse(data) + "\" received"); + @Override + public void onDataReceived(@NonNull final BluetoothDevice device, @NonNull final Data data) { + log(LogContract.Log.Level.APPLICATION, "\"" + IntermediateCuffPressureParser.parse(data) + "\" received"); - // Pass through received data - super.onDataReceived(device, data); - } + // Pass through received data + super.onDataReceived(device, data); + } - @Override - public void onIntermediateCuffPressureReceived(@NonNull final BluetoothDevice device, - final float cuffPressure, final int unit, - @Nullable final Float pulseRate, @Nullable final Integer userID, - @Nullable final BPMStatus status, @Nullable final Calendar calendar) { - mCallbacks.onIntermediateCuffPressureReceived(device, cuffPressure, unit, pulseRate, userID, status, calendar); - } + @Override + public void onIntermediateCuffPressureReceived(@NonNull final BluetoothDevice device, + final float cuffPressure, final int unit, + @Nullable final Float pulseRate, @Nullable final Integer userID, + @Nullable final BPMStatus status, @Nullable final Calendar calendar) { + mCallbacks.onIntermediateCuffPressureReceived(device, cuffPressure, unit, pulseRate, userID, status, calendar); + } - @Override - public void onInvalidDataReceived(@NonNull final BluetoothDevice device, @NonNull final Data data) { - log(LogContract.Log.Level.WARNING, "Invalid ICP data received: " + data); - } - }); - - enableIndications(mBPMCharacteristic) + @Override + public void onInvalidDataReceived(@NonNull final BluetoothDevice device, @NonNull final Data data) { + log(LogContract.Log.Level.WARNING, "Invalid ICP data received: " + data); + } + }); + setIndicationCallback(mBPMCharacteristic) .with(new BloodPressureMeasurementDataCallback() { @Override public void onDataReceived(@NonNull final BluetoothDevice device, @NonNull final Data data) { @@ -129,6 +128,9 @@ public class BPMManager extends BatteryManager { log(LogContract.Log.Level.WARNING, "Invalid BPM data received: " + data); } }); + + enableNotifications(mICPCharacteristic); + enableIndications(mBPMCharacteristic); } @Override diff --git a/app/src/main/java/no/nordicsemi/android/nrftoolbox/cgms/CGMSManager.java b/app/src/main/java/no/nordicsemi/android/nrftoolbox/cgms/CGMSManager.java index b6d40ac1..efbed728 100644 --- a/app/src/main/java/no/nordicsemi/android/nrftoolbox/cgms/CGMSManager.java +++ b/app/src/main/java/no/nordicsemi/android/nrftoolbox/cgms/CGMSManager.java @@ -124,8 +124,8 @@ public class CGMSManager extends BatteryManager { } }).fail((device, status) -> log(LogContract.Log.Level.WARNING, "Could not read CGM Status characteristic")); - // Enable Continuous Glucose Measurement notifications - enableNotifications(mCGMMeasurementCharacteristic) + // Set notification and indication callbacks + setNotificationCallback(mCGMMeasurementCharacteristic) .with(new ContinuousGlucoseMeasurementDataCallback() { @Override public void onDataReceived(@NonNull final BluetoothDevice device, @NonNull final Data data) { @@ -153,11 +153,9 @@ public class CGMSManager extends BatteryManager { public void onContinuousGlucoseMeasurementReceivedWithCrcError(@NonNull final BluetoothDevice device, @NonNull final Data data) { log(LogContract.Log.Level.WARNING, "Continuous Glucose Measurement record received with CRC error"); } - }) - .fail((device, status) -> log(LogContract.Log.Level.WARNING, "Failed to enable Continuous Glucose Measurement notifications (" + status + ")")); + }); - // Enable CGM Specific Ops indications - enableIndications(mCGMSpecificOpsControlPointCharacteristic) + setIndicationCallback(mCGMSpecificOpsControlPointCharacteristic) .with(new CGMSpecificOpsControlPointDataCallback() { @Override public void onDataReceived(@NonNull final BluetoothDevice device, @NonNull final Data data) { @@ -198,7 +196,7 @@ public class CGMSManager extends BatteryManager { } }); - enableIndications(mRecordAccessControlPointCharacteristic) + setIndicationCallback(mRecordAccessControlPointCharacteristic) .with(new RecordAccessControlPointDataCallback() { @Override public void onDataReceived(@NonNull final BluetoothDevice device, @NonNull final Data data) { @@ -250,7 +248,14 @@ public class CGMSManager extends BatteryManager { mCallbacks.onOperationFailed(device); } } - }) + }); + + // Enable notifications and indications + enableNotifications(mCGMMeasurementCharacteristic) + .fail((device, status) -> log(LogContract.Log.Level.WARNING, "Failed to enable Continuous Glucose Measurement notifications (" + status + ")")); + enableIndications(mCGMSpecificOpsControlPointCharacteristic) + .fail((device, status) -> log(LogContract.Log.Level.WARNING, "Failed to enable CGM Specific Ops Control Point indications notifications (" + status + ")")); + enableIndications(mRecordAccessControlPointCharacteristic) .fail((device, status) -> log(LogContract.Log.Level.WARNING, "Failed to enabled Record Access Control Point indications (error " + status + ")")); // Start Continuous Glucose session if hasn't been started before diff --git a/app/src/main/java/no/nordicsemi/android/nrftoolbox/csc/CSCManager.java b/app/src/main/java/no/nordicsemi/android/nrftoolbox/csc/CSCManager.java index 96b789eb..52656aab 100644 --- a/app/src/main/java/no/nordicsemi/android/nrftoolbox/csc/CSCManager.java +++ b/app/src/main/java/no/nordicsemi/android/nrftoolbox/csc/CSCManager.java @@ -69,7 +69,7 @@ public class CSCManager extends BatteryManager { super.initialize(); // CSC characteristic is required - enableNotifications(mCSCMeasurementCharacteristic) + setNotificationCallback(mCSCMeasurementCharacteristic) .with(new CyclingSpeedAndCadenceDataCallback() { @Override public void onDataReceived(@NonNull final BluetoothDevice device, final @NonNull Data data) { @@ -99,6 +99,7 @@ public class CSCManager extends BatteryManager { log(LogContract.Log.Level.WARNING, "Invalid CSC Measurement data received: " + data); } }); + enableNotifications(mCSCMeasurementCharacteristic); } @Override diff --git a/app/src/main/java/no/nordicsemi/android/nrftoolbox/gls/GlucoseManager.java b/app/src/main/java/no/nordicsemi/android/nrftoolbox/gls/GlucoseManager.java index 7c04ff5a..0faed40d 100644 --- a/app/src/main/java/no/nordicsemi/android/nrftoolbox/gls/GlucoseManager.java +++ b/app/src/main/java/no/nordicsemi/android/nrftoolbox/gls/GlucoseManager.java @@ -112,8 +112,7 @@ public class GlucoseManager extends BatteryManager { } device.setCharacteristicNotification(mRecordAccessControlPointCharacteristic, true); */ - - enableNotifications(mGlucoseMeasurementCharacteristic) + setNotificationCallback(mGlucoseMeasurementCharacteristic) .with(new GlucoseMeasurementDataCallback() { @Override public void onDataReceived(@NonNull final BluetoothDevice device, @NonNull final Data data) { @@ -148,7 +147,8 @@ public class GlucoseManager extends BatteryManager { }); } }); - enableNotifications(mGlucoseMeasurementContextCharacteristic) + + setNotificationCallback(mGlucoseMeasurementContextCharacteristic) .with(new GlucoseMeasurementContextDataCallback() { @Override public void onDataReceived(@NonNull final BluetoothDevice device, @NonNull final Data data) { @@ -190,7 +190,7 @@ public class GlucoseManager extends BatteryManager { } }); - enableIndications(mRecordAccessControlPointCharacteristic) + setIndicationCallback(mRecordAccessControlPointCharacteristic) .with(new RecordAccessControlPointDataCallback() { @Override public void onDataReceived(@NonNull final BluetoothDevice device, @NonNull final Data data) { @@ -239,7 +239,11 @@ public class GlucoseManager extends BatteryManager { mCallbacks.onOperationFailed(device); } } - }) + }); + + enableNotifications(mGlucoseMeasurementCharacteristic); + enableNotifications(mGlucoseMeasurementContextCharacteristic); + enableIndications(mRecordAccessControlPointCharacteristic) .fail((device, status) -> log(LogContract.Log.Level.WARNING, "Failed to enabled Record Access Control Point indications (error " + status + ")")); }