From 7cca69be0d4c095bffe100f230d1a71aaf6c5310 Mon Sep 17 00:00:00 2001 From: geeksville Date: Sun, 14 Jun 2020 16:43:36 -0700 Subject: [PATCH] properly mark when we are disconnected --- .../mesh/service/BluetoothInterface.kt | 3 ++- .../mesh/service/RadioInterfaceService.kt | 16 ++++++++++++++-- .../geeksville/mesh/service/SerialInterface.kt | 2 +- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/geeksville/mesh/service/BluetoothInterface.kt b/app/src/main/java/com/geeksville/mesh/service/BluetoothInterface.kt index c52b0133d..4c79387fd 100644 --- a/app/src/main/java/com/geeksville/mesh/service/BluetoothInterface.kt +++ b/app/src/main/java/com/geeksville/mesh/service/BluetoothInterface.kt @@ -326,6 +326,7 @@ class BluetoothInterface(val service: RadioInterfaceService, val address: String ignoreException { s.closeConnection() } + service.onDisconnect(false) // assume we will fail delay(1000) // Give some nasty time for buggy BLE stacks to shutdown (500ms was not enough) reconnectJob = null // Any new reconnect requests after this will be allowed to run warn("Attempting reconnect") @@ -364,7 +365,7 @@ class BluetoothInterface(val service: RadioInterfaceService, val address: String isFirstSend = true // Now tell clients they can (finally use the api) - service.broadcastConnectionChanged(true, isPermanent = false) + service.onConnect() // Immediately broadcast any queued packets sitting on the device doReadFromRadio(true) diff --git a/app/src/main/java/com/geeksville/mesh/service/RadioInterfaceService.kt b/app/src/main/java/com/geeksville/mesh/service/RadioInterfaceService.kt index aed2886ca..fc79ee4aa 100644 --- a/app/src/main/java/com/geeksville/mesh/service/RadioInterfaceService.kt +++ b/app/src/main/java/com/geeksville/mesh/service/RadioInterfaceService.kt @@ -135,7 +135,7 @@ class RadioInterfaceService : Service(), Logging { startInterface() // If bluetooth just got turned on, try to restart our ble link } - fun broadcastConnectionChanged(isConnected: Boolean, isPermanent: Boolean) { + private fun broadcastConnectionChanged(isConnected: Boolean, isPermanent: Boolean) { debug("Broadcasting connection=$isConnected") val intent = Intent(RADIO_CONNECTED_ACTION) intent.putExtra(EXTRA_CONNECTED, isConnected) @@ -163,8 +163,20 @@ class RadioInterfaceService : Service(), Logging { ) } + private var isConnected = false + + fun onConnect() { + if (!isConnected) { + isConnected = true + broadcastConnectionChanged(true, false) + } + } + fun onDisconnect(isPermanent: Boolean) { - broadcastConnectionChanged(false, isPermanent) + if (isConnected) { + isConnected = false + broadcastConnectionChanged(false, isPermanent) + } } diff --git a/app/src/main/java/com/geeksville/mesh/service/SerialInterface.kt b/app/src/main/java/com/geeksville/mesh/service/SerialInterface.kt index 74c2f7ec2..914708dbd 100644 --- a/app/src/main/java/com/geeksville/mesh/service/SerialInterface.kt +++ b/app/src/main/java/com/geeksville/mesh/service/SerialInterface.kt @@ -161,7 +161,7 @@ class SerialInterface(private val service: RadioInterfaceService, val address: S io.writeAsync(wakeBytes) // Now tell clients they can (finally use the api) - service.broadcastConnectionChanged(true, isPermanent = false) + service.onConnect() } } else { errormsg("Can't find device")