From 140c62ac55a910181d4d7d5a5a150f1216921349 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Mon, 20 Nov 2023 11:02:16 +0000 Subject: [PATCH] Bangle.js: Fix #2996 - force a reconnect when rx/tx characteristics can't be found --- .../service/devices/banglejs/BangleJSDeviceSupport.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/banglejs/BangleJSDeviceSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/banglejs/BangleJSDeviceSupport.java index 0d9b27326..ee816e6c3 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/banglejs/BangleJSDeviceSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/banglejs/BangleJSDeviceSupport.java @@ -131,6 +131,7 @@ import nodomain.freeyourgadget.gadgetbridge.service.btle.AbstractBTLEDeviceSuppo import nodomain.freeyourgadget.gadgetbridge.service.btle.BLETypeConversions; import nodomain.freeyourgadget.gadgetbridge.service.btle.BtLEQueue; import nodomain.freeyourgadget.gadgetbridge.service.btle.TransactionBuilder; +import nodomain.freeyourgadget.gadgetbridge.service.btle.actions.SetDeviceStateAction; import nodomain.freeyourgadget.gadgetbridge.util.EmojiConverter; import nodomain.freeyourgadget.gadgetbridge.util.FileUtils; import nodomain.freeyourgadget.gadgetbridge.util.GB; @@ -318,6 +319,12 @@ public class BangleJSDeviceSupport extends AbstractBTLEDeviceSupport { rxCharacteristic = getCharacteristic(BangleJSConstants.UUID_CHARACTERISTIC_NORDIC_UART_RX); txCharacteristic = getCharacteristic(BangleJSConstants.UUID_CHARACTERISTIC_NORDIC_UART_TX); + if (rxCharacteristic==null || txCharacteristic==null) { + // https://codeberg.org/Freeyourgadget/Gadgetbridge/issues/2996 - sometimes we get + // initializeDevice called but no characteristics have been fetched - try and reconnect in that case + LOG.warn("RX/TX characteristics are null, will attempt to reconnect"); + builder.add(new SetDeviceStateAction(getDevice(), GBDevice.State.WAITING_FOR_RECONNECT, getContext())); + } builder.setCallback(this); builder.notify(rxCharacteristic, true);