From 11ac01f0e8524a30aa4e2e270122ecaeb21b14b5 Mon Sep 17 00:00:00 2001 From: cpfeiffer Date: Wed, 23 Mar 2016 22:50:42 +0100 Subject: [PATCH] Set low latency mode during initialization #249 This appears to fix the initialization getting stuck sometimes, e.g. after turning on bluetooth and then connecting. The band incidentally sends 0x8 when it's stuck (won't accept the UUID_PAIR request). --- .../service/devices/miband/MiBandSupport.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/miband/MiBandSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/miband/MiBandSupport.java index 8dab5a4cd..ff12bf681 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/miband/MiBandSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/miband/MiBandSupport.java @@ -97,6 +97,7 @@ public class MiBandSupport extends AbstractBTLEDeviceSupport { protected TransactionBuilder initializeDevice(TransactionBuilder builder) { builder.add(new SetDeviceStateAction(getDevice(), State.INITIALIZING, getContext())); enableNotifications(builder, true) + .setLowLatency(builder) .pair(builder) .requestDeviceInfo(builder) .sendUserInfo(builder) @@ -106,10 +107,21 @@ public class MiBandSupport extends AbstractBTLEDeviceSupport { .enableFurtherNotifications(builder, true) .setCurrentTime(builder) .requestBatteryInfo(builder) + .setHighLatency(builder) .setInitialized(builder); return builder; } + private MiBandSupport setLowLatency(TransactionBuilder builder) { + builder.write(getCharacteristic(MiBandService.UUID_CHARACTERISTIC_LE_PARAMS), getLowLatency()); + return this; + } + + private MiBandSupport setHighLatency(TransactionBuilder builder) { + builder.write(getCharacteristic(MiBandService.UUID_CHARACTERISTIC_LE_PARAMS), getHighLatency()); + return this; + } + private MiBandSupport checkAuthenticationNeeded(TransactionBuilder builder, GBDevice device) { builder.add(new CheckAuthenticationNeededAction(device)); return this;