notification on pod suspend. try to getpodstatus on activecommands
This commit is contained in:
parent
c803f6504b
commit
2a35c60e81
1 changed files with 77 additions and 9 deletions
|
@ -1,6 +1,8 @@
|
||||||
package info.nightscout.androidaps.plugins.pump.omnipod.dash
|
package info.nightscout.androidaps.plugins.pump.omnipod.dash
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
|
import android.os.Handler
|
||||||
|
import android.os.Looper
|
||||||
import dagger.android.HasAndroidInjector
|
import dagger.android.HasAndroidInjector
|
||||||
import info.nightscout.androidaps.activities.ErrorHelperActivity.Companion.runAlarm
|
import info.nightscout.androidaps.activities.ErrorHelperActivity.Companion.runAlarm
|
||||||
import info.nightscout.androidaps.data.DetailedBolusInfo
|
import info.nightscout.androidaps.data.DetailedBolusInfo
|
||||||
|
@ -19,6 +21,7 @@ import info.nightscout.androidaps.plugins.general.overview.events.EventNewNotifi
|
||||||
import info.nightscout.androidaps.plugins.general.overview.events.EventOverviewBolusProgress
|
import info.nightscout.androidaps.plugins.general.overview.events.EventOverviewBolusProgress
|
||||||
import info.nightscout.androidaps.plugins.general.overview.notifications.Notification
|
import info.nightscout.androidaps.plugins.general.overview.notifications.Notification
|
||||||
import info.nightscout.androidaps.plugins.pump.common.defs.PumpType
|
import info.nightscout.androidaps.plugins.pump.common.defs.PumpType
|
||||||
|
import info.nightscout.androidaps.plugins.pump.common.utils.DateTimeUtil
|
||||||
import info.nightscout.androidaps.plugins.pump.omnipod.common.definition.OmnipodCommandType
|
import info.nightscout.androidaps.plugins.pump.omnipod.common.definition.OmnipodCommandType
|
||||||
import info.nightscout.androidaps.plugins.pump.omnipod.common.queue.command.*
|
import info.nightscout.androidaps.plugins.pump.omnipod.common.queue.command.*
|
||||||
import info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.OmnipodDashManager
|
import info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.OmnipodDashManager
|
||||||
|
@ -67,10 +70,14 @@ class OmnipodDashPumpPlugin @Inject constructor(
|
||||||
commandQueue: CommandQueueProvider
|
commandQueue: CommandQueueProvider
|
||||||
) : PumpPluginBase(pluginDescription, injector, aapsLogger, resourceHelper, commandQueue), Pump {
|
) : PumpPluginBase(pluginDescription, injector, aapsLogger, resourceHelper, commandQueue), Pump {
|
||||||
@Volatile var bolusCanceled = false
|
@Volatile var bolusCanceled = false
|
||||||
|
private val handler: Handler = Handler(Looper.getMainLooper())
|
||||||
|
lateinit private var statusChecker: Runnable
|
||||||
|
var nextPodWarningCheck : Long = 0
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private const val BOLUS_RETRY_INTERVAL_MS = 2000.toLong()
|
private const val BOLUS_RETRY_INTERVAL_MS = 2000.toLong()
|
||||||
private const val BOLUS_RETRIES = 5 // numer of retries for cancel/get bolus status
|
private const val BOLUS_RETRIES = 5 // number of retries for cancel/get bolus status
|
||||||
|
private const val STATUS_CHECK_INTERVAL_MS = (60L * 1000)
|
||||||
|
|
||||||
private val pluginDescription = PluginDescription()
|
private val pluginDescription = PluginDescription()
|
||||||
.mainType(PluginType.PUMP)
|
.mainType(PluginType.PUMP)
|
||||||
|
@ -84,6 +91,52 @@ class OmnipodDashPumpPlugin @Inject constructor(
|
||||||
private val pumpDescription = PumpDescription(PumpType.OMNIPOD_DASH)
|
private val pumpDescription = PumpDescription(PumpType.OMNIPOD_DASH)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
init {
|
||||||
|
statusChecker = Runnable {
|
||||||
|
refreshStatusOnUnacknowledgedCommands()
|
||||||
|
updatePodWarnings()
|
||||||
|
handler.postDelayed(statusChecker, STATUS_CHECK_INTERVAL_MS)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun updatePodWarnings() {
|
||||||
|
if (System.currentTimeMillis() > nextPodWarningCheck) {
|
||||||
|
if (!podStateManager.isPodRunning) {
|
||||||
|
val notification =
|
||||||
|
Notification(
|
||||||
|
Notification.OMNIPOD_POD_NOT_ATTACHED,
|
||||||
|
"Pod not activated",
|
||||||
|
Notification.NORMAL
|
||||||
|
)
|
||||||
|
rxBus.send(EventNewNotification(notification))
|
||||||
|
} else {
|
||||||
|
rxBus.send(EventDismissNotification(Notification.OMNIPOD_POD_NOT_ATTACHED))
|
||||||
|
if (podStateManager.isSuspended) {
|
||||||
|
val notification =
|
||||||
|
Notification(
|
||||||
|
Notification.OMNIPOD_POD_SUSPENDED,
|
||||||
|
"Insulin delivery suspended",
|
||||||
|
Notification.NORMAL
|
||||||
|
)
|
||||||
|
rxBus.send(EventNewNotification(notification))
|
||||||
|
} else {
|
||||||
|
rxBus.send(EventDismissNotification(Notification.OMNIPOD_POD_SUSPENDED))
|
||||||
|
// TODO: time out of sync notification?
|
||||||
|
}
|
||||||
|
}
|
||||||
|
nextPodWarningCheck = DateTimeUtil.getTimeInFutureFromMinutes(15)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun refreshStatusOnUnacknowledgedCommands() {
|
||||||
|
if (podStateManager.isPodRunning &&
|
||||||
|
podStateManager.activeCommand != null &&
|
||||||
|
commandQueue.size() == 0 &&
|
||||||
|
commandQueue.performing() == null) {
|
||||||
|
commandQueue.readStatus("Unconfirmed command", null)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override fun isInitialized(): Boolean {
|
override fun isInitialized(): Boolean {
|
||||||
// TODO
|
// TODO
|
||||||
return true
|
return true
|
||||||
|
@ -129,6 +182,8 @@ class OmnipodDashPumpPlugin @Inject constructor(
|
||||||
// TODO
|
// TODO
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
override fun getPumpStatus(reason: String) {
|
override fun getPumpStatus(reason: String) {
|
||||||
if (reason != "REQUESTED BY USER" && !podStateManager.isActivationCompleted) {
|
if (reason != "REQUESTED BY USER" && !podStateManager.isActivationCompleted) {
|
||||||
// prevent races on BLE when the pod is not activated
|
// prevent races on BLE when the pod is not activated
|
||||||
|
@ -279,16 +334,15 @@ class OmnipodDashPumpPlugin @Inject constructor(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* override fun onStop() {
|
|
||||||
super.onStop()
|
|
||||||
disposable.clear()
|
|
||||||
}
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
override fun onStart() {
|
override fun onStart() {
|
||||||
super.onStart()
|
super.onStart()
|
||||||
podStateManager.onStart()
|
podStateManager.onStart()
|
||||||
|
handler.postDelayed(statusChecker, STATUS_CHECK_INTERVAL_MS)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onStop() {
|
||||||
|
super.onStop()
|
||||||
|
handler.removeCallbacks(statusChecker)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun observeDeliverySuspended(): Completable = Completable.defer {
|
private fun observeDeliverySuspended(): Completable = Completable.defer {
|
||||||
|
@ -979,7 +1033,19 @@ class OmnipodDashPumpPlugin @Inject constructor(
|
||||||
val historyEntry = history.getById(command.historyId)
|
val historyEntry = history.getById(command.historyId)
|
||||||
aapsLogger.debug(LTag.PUMPCOMM, "handling command confirmation: $confirmation")
|
aapsLogger.debug(LTag.PUMPCOMM, "handling command confirmation: $confirmation")
|
||||||
when (historyEntry.commandType) {
|
when (historyEntry.commandType) {
|
||||||
OmnipodCommandType.CANCEL_TEMPORARY_BASAL,
|
OmnipodCommandType.CANCEL_TEMPORARY_BASAL -> {
|
||||||
|
if (confirmation.success) {
|
||||||
|
pumpSync.syncStopTemporaryBasalWithPumpId(
|
||||||
|
historyEntry.createdAt,
|
||||||
|
historyEntry.pumpId(),
|
||||||
|
PumpType.OMNIPOD_DASH,
|
||||||
|
serialNumber()
|
||||||
|
)
|
||||||
|
podStateManager.tempBasal = null
|
||||||
|
}
|
||||||
|
rxBus.send(EventDismissNotification(Notification.OMNIPOD_TBR_ALERTS))
|
||||||
|
|
||||||
|
}
|
||||||
OmnipodCommandType.RESUME_DELIVERY -> {
|
OmnipodCommandType.RESUME_DELIVERY -> {
|
||||||
// We can't invalidate this command,
|
// We can't invalidate this command,
|
||||||
// and this is why it is pumpSync-ed at this point
|
// and this is why it is pumpSync-ed at this point
|
||||||
|
@ -991,6 +1057,7 @@ class OmnipodDashPumpPlugin @Inject constructor(
|
||||||
serialNumber()
|
serialNumber()
|
||||||
)
|
)
|
||||||
podStateManager.tempBasal = null
|
podStateManager.tempBasal = null
|
||||||
|
rxBus.send(EventDismissNotification(Notification.OMNIPOD_POD_SUSPENDED))
|
||||||
}
|
}
|
||||||
rxBus.send(EventDismissNotification(Notification.OMNIPOD_TBR_ALERTS))
|
rxBus.send(EventDismissNotification(Notification.OMNIPOD_TBR_ALERTS))
|
||||||
}
|
}
|
||||||
|
@ -1011,6 +1078,7 @@ class OmnipodDashPumpPlugin @Inject constructor(
|
||||||
PumpType.OMNIPOD_DASH,
|
PumpType.OMNIPOD_DASH,
|
||||||
serialNumber()
|
serialNumber()
|
||||||
)
|
)
|
||||||
|
rxBus.send(EventDismissNotification(Notification.OMNIPOD_POD_SUSPENDED))
|
||||||
}
|
}
|
||||||
rxBus.send(EventDismissNotification(Notification.OMNIPOD_TBR_ALERTS))
|
rxBus.send(EventDismissNotification(Notification.OMNIPOD_TBR_ALERTS))
|
||||||
rxBus.send(EventDismissNotification(Notification.FAILED_UPDATE_PROFILE))
|
rxBus.send(EventDismissNotification(Notification.FAILED_UPDATE_PROFILE))
|
||||||
|
|
Loading…
Reference in a new issue