Fix bolusStop(), some refactoring
This commit is contained in:
parent
ec6f395aed
commit
8647db878c
2 changed files with 63 additions and 29 deletions
|
@ -224,9 +224,8 @@ class MedtrumPump @Inject constructor(
|
||||||
var bolusingTreatment: EventOverviewBolusProgress.Treatment? = null // actually delivered treatment
|
var bolusingTreatment: EventOverviewBolusProgress.Treatment? = null // actually delivered treatment
|
||||||
var bolusAmountToBeDelivered = 0.0 // amount to be delivered
|
var bolusAmountToBeDelivered = 0.0 // amount to be delivered
|
||||||
var bolusProgressLastTimeStamp: Long = 0 // timestamp of last bolus progress message
|
var bolusProgressLastTimeStamp: Long = 0 // timestamp of last bolus progress message
|
||||||
var bolusStopped = false // bolus finished
|
var bolusStopped = false // bolus stopped by user
|
||||||
var bolusStopForced = false // bolus forced to stop by user
|
var bolusDone = false // Bolus completed or stopped on pump
|
||||||
var bolusDone = false // success end
|
|
||||||
|
|
||||||
// Last basal status update (from pump)
|
// Last basal status update (from pump)
|
||||||
private var _lastBasalSequence = 0
|
private var _lastBasalSequence = 0
|
||||||
|
@ -353,19 +352,15 @@ class MedtrumPump @Inject constructor(
|
||||||
return basal
|
return basal
|
||||||
}
|
}
|
||||||
|
|
||||||
fun handleBasalStatusUpdate(basalType: BasalType, basalValue: Double, basalSequence: Int, basalPatchId: Long, basalStartTime: Long) {
|
|
||||||
handleBasalStatusUpdate(basalType, basalValue, basalSequence, basalPatchId, basalStartTime, dateUtil.now())
|
|
||||||
}
|
|
||||||
|
|
||||||
fun handleBolusStatusUpdate(bolusType: Int, bolusCompleted: Boolean, amountDelivered: Double) {
|
fun handleBolusStatusUpdate(bolusType: Int, bolusCompleted: Boolean, amountDelivered: Double) {
|
||||||
aapsLogger.debug(LTag.PUMP, "handleBolusStatusUpdate: bolusType: $bolusType bolusCompleted: $bolusCompleted amountDelivered: $amountDelivered")
|
aapsLogger.debug(LTag.PUMP, "handleBolusStatusUpdate: bolusType: $bolusType bolusCompleted: $bolusCompleted amountDelivered: $amountDelivered")
|
||||||
bolusProgressLastTimeStamp = dateUtil.now()
|
bolusProgressLastTimeStamp = dateUtil.now()
|
||||||
if (bolusCompleted) {
|
bolusingTreatment?.insulin = amountDelivered
|
||||||
bolusDone = true
|
bolusDone = bolusCompleted
|
||||||
bolusingTreatment?.insulin = amountDelivered
|
}
|
||||||
} else {
|
|
||||||
bolusingTreatment?.insulin = amountDelivered
|
fun handleBasalStatusUpdate(basalType: BasalType, basalValue: Double, basalSequence: Int, basalPatchId: Long, basalStartTime: Long) {
|
||||||
}
|
handleBasalStatusUpdate(basalType, basalValue, basalSequence, basalPatchId, basalStartTime, dateUtil.now())
|
||||||
}
|
}
|
||||||
|
|
||||||
fun handleBasalStatusUpdate(basalType: BasalType, basalRate: Double, basalSequence: Int, basalPatchId: Long, basalStartTime: Long, receivedTime: Long) {
|
fun handleBasalStatusUpdate(basalType: BasalType, basalRate: Double, basalSequence: Int, basalPatchId: Long, basalStartTime: Long, receivedTime: Long) {
|
||||||
|
|
|
@ -16,6 +16,7 @@ import info.nightscout.interfaces.profile.Profile
|
||||||
import info.nightscout.interfaces.profile.ProfileFunction
|
import info.nightscout.interfaces.profile.ProfileFunction
|
||||||
import info.nightscout.interfaces.pump.DetailedBolusInfo
|
import info.nightscout.interfaces.pump.DetailedBolusInfo
|
||||||
import info.nightscout.interfaces.pump.DetailedBolusInfoStorage
|
import info.nightscout.interfaces.pump.DetailedBolusInfoStorage
|
||||||
|
import info.nightscout.interfaces.pump.BolusProgressData
|
||||||
import info.nightscout.interfaces.pump.PumpSync
|
import info.nightscout.interfaces.pump.PumpSync
|
||||||
import info.nightscout.interfaces.pump.defs.PumpType
|
import info.nightscout.interfaces.pump.defs.PumpType
|
||||||
import info.nightscout.interfaces.queue.Callback
|
import info.nightscout.interfaces.queue.Callback
|
||||||
|
@ -290,6 +291,7 @@ class MedtrumService : DaggerService(), BLECommCallback {
|
||||||
|
|
||||||
fun setBolus(detailedBolusInfo: DetailedBolusInfo, t: EventOverviewBolusProgress.Treatment): Boolean {
|
fun setBolus(detailedBolusInfo: DetailedBolusInfo, t: EventOverviewBolusProgress.Treatment): Boolean {
|
||||||
if (!isConnected) return false
|
if (!isConnected) return false
|
||||||
|
if (BolusProgressData.stopPressed) return false
|
||||||
val insulin = detailedBolusInfo.insulin
|
val insulin = detailedBolusInfo.insulin
|
||||||
val bolusStart = System.currentTimeMillis()
|
val bolusStart = System.currentTimeMillis()
|
||||||
|
|
||||||
|
@ -297,13 +299,19 @@ class MedtrumService : DaggerService(), BLECommCallback {
|
||||||
medtrumPump.bolusingTreatment = t
|
medtrumPump.bolusingTreatment = t
|
||||||
medtrumPump.bolusAmountToBeDelivered = insulin
|
medtrumPump.bolusAmountToBeDelivered = insulin
|
||||||
medtrumPump.bolusStopped = false
|
medtrumPump.bolusStopped = false
|
||||||
medtrumPump.bolusStopForced = false
|
|
||||||
medtrumPump.bolusProgressLastTimeStamp = bolusStart
|
medtrumPump.bolusProgressLastTimeStamp = bolusStart
|
||||||
|
|
||||||
val result = sendPacketAndGetResponse(SetBolusPacket(injector, insulin))
|
if (insulin > 0 && !medtrumPump.bolusStopped) {
|
||||||
if (result == false) {
|
val result = sendPacketAndGetResponse(SetBolusPacket(injector, insulin))
|
||||||
aapsLogger.error(LTag.PUMPCOMM, "Failed to set bolus")
|
if (result == false) {
|
||||||
commandQueue.loadEvents(null) // make sure if anything is delivered (which is highly unlikely at this point) we get it
|
aapsLogger.error(LTag.PUMPCOMM, "Failed to set bolus")
|
||||||
|
commandQueue.loadEvents(null) // make sure if anything is delivered (which is highly unlikely at this point) we get it
|
||||||
|
t.insulin = 0.0
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
aapsLogger.debug(LTag.PUMPCOMM, "Bolus not set, insulin: $insulin, bolusStopped: ${medtrumPump.bolusStopped}")
|
||||||
|
t.insulin = 0.0
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -328,11 +336,12 @@ class MedtrumService : DaggerService(), BLECommCallback {
|
||||||
}
|
}
|
||||||
|
|
||||||
val bolusingEvent = EventOverviewBolusProgress
|
val bolusingEvent = EventOverviewBolusProgress
|
||||||
while (medtrumPump.bolusStopped == false && result == true && medtrumPump.bolusDone == false) {
|
var communicationLost = false
|
||||||
|
|
||||||
|
while (!medtrumPump.bolusStopped && !medtrumPump.bolusDone && !communicationLost) {
|
||||||
SystemClock.sleep(100)
|
SystemClock.sleep(100)
|
||||||
if (System.currentTimeMillis() - medtrumPump.bolusProgressLastTimeStamp > T.secs(15).msecs()) {
|
if (System.currentTimeMillis() - medtrumPump.bolusProgressLastTimeStamp > T.secs(20).msecs()) {
|
||||||
medtrumPump.bolusStopped = true
|
communicationLost = true
|
||||||
medtrumPump.bolusStopForced = true
|
|
||||||
aapsLogger.warn(LTag.PUMPCOMM, "Communication stopped")
|
aapsLogger.warn(LTag.PUMPCOMM, "Communication stopped")
|
||||||
disconnect("Communication stopped")
|
disconnect("Communication stopped")
|
||||||
} else {
|
} else {
|
||||||
|
@ -343,16 +352,35 @@ class MedtrumService : DaggerService(), BLECommCallback {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bolusingEvent.t = medtrumPump.bolusingTreatment
|
|
||||||
bolusingEvent.percent = 99
|
bolusingEvent.percent = 99
|
||||||
medtrumPump.bolusingTreatment = null
|
|
||||||
|
|
||||||
val bolusDurationInMSec = (insulin * 60 * 1000)
|
val bolusDurationInMSec = (insulin * 60 * 1000)
|
||||||
val expectedEnd = bolusStart + bolusDurationInMSec + 2000
|
val expectedEnd = bolusStart + bolusDurationInMSec + 2000
|
||||||
while (System.currentTimeMillis() < expectedEnd && result == true && medtrumPump.bolusDone == false) {
|
while (System.currentTimeMillis() < expectedEnd && !medtrumPump.bolusDone) {
|
||||||
SystemClock.sleep(1000)
|
SystemClock.sleep(1000)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bolusingEvent.t = medtrumPump.bolusingTreatment
|
||||||
|
medtrumPump.bolusingTreatment = null
|
||||||
|
|
||||||
|
if (medtrumPump.bolusStopped && t.insulin == 0.0) {
|
||||||
|
// In this case we don't get a bolus end event, so need to remove all the stuff added previously
|
||||||
|
val syncOk = pumpSync.syncBolusWithTempId(
|
||||||
|
timestamp = bolusStart,
|
||||||
|
amount = 0.0,
|
||||||
|
temporaryId = bolusStart,
|
||||||
|
type = detailedBolusInfo.bolusType,
|
||||||
|
pumpId = bolusStart,
|
||||||
|
pumpType = medtrumPump.pumpType(),
|
||||||
|
pumpSerial = medtrumPump.pumpSN.toString(radix = 16)
|
||||||
|
)
|
||||||
|
aapsLogger.debug(
|
||||||
|
LTag.PUMPCOMM,
|
||||||
|
"set bolus: **SYNC** EVENT BOLUS (tempId) ${dateUtil.dateAndTimeString(detailedBolusInfo.timestamp)} (${bolusStart}) Bolus: ${0.0}U SyncOK: $syncOk"
|
||||||
|
)
|
||||||
|
// remove detailed bolus info
|
||||||
|
detailedBolusInfoStorage.findDetailedBolusInfo(bolusStart, detailedBolusInfo.insulin)
|
||||||
|
}
|
||||||
|
|
||||||
// Do not call update status directly, reconnection may be needed
|
// Do not call update status directly, reconnection may be needed
|
||||||
commandQueue.loadEvents(object : Callback() {
|
commandQueue.loadEvents(object : Callback() {
|
||||||
override fun run() {
|
override fun run() {
|
||||||
|
@ -360,12 +388,23 @@ class MedtrumService : DaggerService(), BLECommCallback {
|
||||||
bolusingEvent.percent = 100
|
bolusingEvent.percent = 100
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
return result
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
fun stopBolus() {
|
fun stopBolus() {
|
||||||
var result = sendPacketAndGetResponse(CancelBolusPacket(injector))
|
aapsLogger.debug(LTag.PUMPCOMM, "bolusStop >>>>> @ " + if (medtrumPump.bolusingTreatment == null) "" else medtrumPump.bolusingTreatment?.insulin)
|
||||||
aapsLogger.debug(LTag.PUMPCOMM, "bolusStop: result: $result")
|
if (isConnected) {
|
||||||
|
var success = sendPacketAndGetResponse(CancelBolusPacket(injector))
|
||||||
|
var timeout = System.currentTimeMillis() + T.secs(30).msecs()
|
||||||
|
while (!success && System.currentTimeMillis() < timeout) {
|
||||||
|
success = sendPacketAndGetResponse(CancelBolusPacket(injector))
|
||||||
|
SystemClock.sleep(200)
|
||||||
|
}
|
||||||
|
aapsLogger.debug(LTag.PUMPCOMM, "bolusStop success: $success")
|
||||||
|
medtrumPump.bolusStopped = true
|
||||||
|
} else {
|
||||||
|
medtrumPump.bolusStopped = true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun setTempBasal(absoluteRate: Double, durationInMinutes: Int): Boolean {
|
fun setTempBasal(absoluteRate: Double, durationInMinutes: Int): Boolean {
|
||||||
|
|
Loading…
Reference in a new issue