diff --git a/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/session/Connection.kt b/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/session/Connection.kt index 7200aba9fc..c56c69b237 100644 --- a/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/session/Connection.kt +++ b/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/session/Connection.kt @@ -96,7 +96,6 @@ class Connection( connectionWaitCond.timeoutMs = newTimeout } podState.bluetoothConnectionState = OmnipodDashPodStateManager.BluetoothConnectionState.CONNECTED - _connectionWaitCond = null val discoverer = ServiceDiscoverer(aapsLogger, gatt, bleCommCallbacks, this) val discovered = discoverer.discoverServices(connectionWaitCond) @@ -122,21 +121,24 @@ class Connection( cmdBleIO.hello() cmdBleIO.readyToRead() dataBleIO.readyToRead() + _connectionWaitCond = null } @Synchronized fun disconnect(closeGatt: Boolean) { aapsLogger.debug(LTag.PUMPBTCOMM, "Disconnecting closeGatt=$closeGatt") - podState.bluetoothConnectionState = OmnipodDashPodStateManager.BluetoothConnectionState.DISCONNECTED - if (closeGatt) { + if (closeGatt == false && gattConnection != null) { + // Disconnect first, then close gatt + gattConnection?.disconnect() + } else { + // Call with closeGatt=true only when ble is already disconnected or there is no connection gattConnection?.close() + bleCommCallbacks.resetConnection() gattConnection = null - } else { - gattConnection?.disconnect() + session = null + msgIO = null + podState.bluetoothConnectionState = OmnipodDashPodStateManager.BluetoothConnectionState.DISCONNECTED } - bleCommCallbacks.resetConnection() - session = null - msgIO = null } private fun waitForConnection(connectionWaitCond: ConnectionWaitCondition): ConnectionState {