combov2: Check in connect() if pump is being unpaired
Signed-off-by: Carlos Rafael Giani <crg7475@mailbox.org>
This commit is contained in:
parent
bd765fabbd
commit
894f629738
|
@ -155,6 +155,12 @@ class ComboV2Plugin @Inject constructor (
|
||||||
// state (in other words, while isBusy() was returning true).
|
// state (in other words, while isBusy() was returning true).
|
||||||
private var disconnectRequestPending = false
|
private var disconnectRequestPending = false
|
||||||
|
|
||||||
|
// Set to true in when unpair() starts and back to false in the
|
||||||
|
// pumpManager onPumpUnpaired callback. This fixes a race condition
|
||||||
|
// that can happen if the user unpairs the pump while AndroidAPS
|
||||||
|
// is calling connect().
|
||||||
|
private var unpairing = false
|
||||||
|
|
||||||
// The current driver state. We use a StateFlow here to
|
// The current driver state. We use a StateFlow here to
|
||||||
// allow other components to react to state changes.
|
// allow other components to react to state changes.
|
||||||
private val _driverStateFlow = MutableStateFlow<DriverState>(DriverState.NotInitialized)
|
private val _driverStateFlow = MutableStateFlow<DriverState>(DriverState.NotInitialized)
|
||||||
|
@ -239,6 +245,7 @@ class ComboV2Plugin @Inject constructor (
|
||||||
pumpManager = ComboCtlPumpManager(bluetoothInterface!!, pumpStateStore)
|
pumpManager = ComboCtlPumpManager(bluetoothInterface!!, pumpStateStore)
|
||||||
pumpManager!!.setup {
|
pumpManager!!.setup {
|
||||||
_pairedStateUIFlow.value = false
|
_pairedStateUIFlow.value = false
|
||||||
|
unpairing = false
|
||||||
}
|
}
|
||||||
|
|
||||||
// UI flows that must have defined values right
|
// UI flows that must have defined values right
|
||||||
|
@ -268,6 +275,11 @@ class ComboV2Plugin @Inject constructor (
|
||||||
bluetoothInterface?.teardown()
|
bluetoothInterface?.teardown()
|
||||||
bluetoothInterface = null
|
bluetoothInterface = null
|
||||||
|
|
||||||
|
// Set this flag to false here in case an ongoing pairing attempt
|
||||||
|
// is somehow aborted inside the interface without the onPumpUnpaired
|
||||||
|
// callback being invoked.
|
||||||
|
unpairing = false
|
||||||
|
|
||||||
setDriverState(DriverState.NotInitialized)
|
setDriverState(DriverState.NotInitialized)
|
||||||
|
|
||||||
super.onStop()
|
super.onStop()
|
||||||
|
@ -366,6 +378,11 @@ class ComboV2Plugin @Inject constructor (
|
||||||
override fun connect(reason: String) {
|
override fun connect(reason: String) {
|
||||||
aapsLogger.debug(LTag.PUMP, "Connecting to Combo; reason: $reason")
|
aapsLogger.debug(LTag.PUMP, "Connecting to Combo; reason: $reason")
|
||||||
|
|
||||||
|
if (unpairing) {
|
||||||
|
aapsLogger.debug(LTag.PUMP, "Aborting connect attempt since we are currently unpairing")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
when (driverStateFlow.value) {
|
when (driverStateFlow.value) {
|
||||||
DriverState.Connecting,
|
DriverState.Connecting,
|
||||||
DriverState.CheckingPump,
|
DriverState.CheckingPump,
|
||||||
|
@ -1405,8 +1422,13 @@ class ComboV2Plugin @Inject constructor (
|
||||||
}
|
}
|
||||||
|
|
||||||
fun unpair() {
|
fun unpair() {
|
||||||
|
if (unpairing)
|
||||||
|
return
|
||||||
|
|
||||||
val bluetoothAddress = getBluetoothAddress() ?: return
|
val bluetoothAddress = getBluetoothAddress() ?: return
|
||||||
|
|
||||||
|
unpairing = true
|
||||||
|
|
||||||
disconnectInternal(forceDisconnect = true)
|
disconnectInternal(forceDisconnect = true)
|
||||||
|
|
||||||
runBlocking {
|
runBlocking {
|
||||||
|
@ -1436,6 +1458,9 @@ class ComboV2Plugin @Inject constructor (
|
||||||
_baseBasalRateUIFlow.value = null
|
_baseBasalRateUIFlow.value = null
|
||||||
_serialNumberUIFlow.value = ""
|
_serialNumberUIFlow.value = ""
|
||||||
_bluetoothAddressUIFlow.value = ""
|
_bluetoothAddressUIFlow.value = ""
|
||||||
|
|
||||||
|
// The unpairing variable is set to false in
|
||||||
|
// the PumpManager onPumpUnpaired callback.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue