diff --git a/core/interfaces/src/main/java/info/nightscout/interfaces/pump/defs/PumpType.kt b/core/interfaces/src/main/java/info/nightscout/interfaces/pump/defs/PumpType.kt
index 68dbf1277d..3bd481629c 100644
--- a/core/interfaces/src/main/java/info/nightscout/interfaces/pump/defs/PumpType.kt
+++ b/core/interfaces/src/main/java/info/nightscout/interfaces/pump/defs/PumpType.kt
@@ -412,7 +412,8 @@ enum class PumpType {
isPatchPump = true,
maxReservoirReading = 400,
source = Source.Medtrum
- );
+ ),
+ MEDTRUM_UNTESTED(description = "Medtrum untested", model = "untested", parent = MEDTRUM_NANO);
val description: String
var manufacturer: ManufacturerType? = null
diff --git a/core/main/src/main/java/info/nightscout/core/pump/PumpTypeExtension.kt b/core/main/src/main/java/info/nightscout/core/pump/PumpTypeExtension.kt
index 8a0b120cc1..321365cba4 100644
--- a/core/main/src/main/java/info/nightscout/core/pump/PumpTypeExtension.kt
+++ b/core/main/src/main/java/info/nightscout/core/pump/PumpTypeExtension.kt
@@ -60,6 +60,7 @@ fun PumpType.Companion.fromDbPumpType(pt: InterfaceIDs.PumpType): PumpType =
InterfaceIDs.PumpType.DIACONN_G8 -> PumpType.DIACONN_G8
InterfaceIDs.PumpType.EOPATCH2 -> PumpType.EOFLOW_EOPATCH2
InterfaceIDs.PumpType.MEDTRUM -> PumpType.MEDTRUM_NANO
+ InterfaceIDs.PumpType.MEDTRUM_UNTESTED -> PumpType.MEDTRUM_UNTESTED
InterfaceIDs.PumpType.CACHE -> PumpType.CACHE
}
@@ -119,5 +120,6 @@ fun PumpType.toDbPumpType(): InterfaceIDs.PumpType =
PumpType.DIACONN_G8 -> InterfaceIDs.PumpType.DIACONN_G8
PumpType.EOFLOW_EOPATCH2 -> InterfaceIDs.PumpType.EOPATCH2
PumpType.MEDTRUM_NANO -> InterfaceIDs.PumpType.MEDTRUM
+ PumpType.MEDTRUM_UNTESTED -> InterfaceIDs.PumpType.MEDTRUM_UNTESTED
PumpType.CACHE -> InterfaceIDs.PumpType.CACHE
}
diff --git a/database/entities/src/main/java/info/nightscout/database/entities/embedments/InterfaceIDs.kt b/database/entities/src/main/java/info/nightscout/database/entities/embedments/InterfaceIDs.kt
index a10a7740cd..0a244aa3c6 100644
--- a/database/entities/src/main/java/info/nightscout/database/entities/embedments/InterfaceIDs.kt
+++ b/database/entities/src/main/java/info/nightscout/database/entities/embedments/InterfaceIDs.kt
@@ -44,6 +44,7 @@ data class InterfaceIDs(
DIACONN_G8,
EOPATCH2,
MEDTRUM,
+ MEDTRUM_UNTESTED,
USER,
CACHE;
diff --git a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/MedtrumPlugin.kt b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/MedtrumPlugin.kt
index ca1cecc7b3..a7b4099c95 100644
--- a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/MedtrumPlugin.kt
+++ b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/MedtrumPlugin.kt
@@ -363,7 +363,7 @@ import kotlin.math.round
}
override fun model(): PumpType {
- return medtrumPump.pumpType
+ return medtrumPump.pumpType()
}
override fun serialNumber(): String {
@@ -371,7 +371,7 @@ import kotlin.math.round
}
override val pumpDescription: PumpDescription
- get() = PumpDescription(medtrumPump.pumpType)
+ get() = PumpDescription(medtrumPump.pumpType())
override fun shortStatus(veryShort: Boolean): String {
var ret = ""
diff --git a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/MedtrumPump.kt b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/MedtrumPump.kt
index 381ec89b88..6783927607 100644
--- a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/MedtrumPump.kt
+++ b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/MedtrumPump.kt
@@ -15,6 +15,7 @@ import info.nightscout.pump.medtrum.extension.toInt
import info.nightscout.rx.events.EventOverviewBolusProgress
import info.nightscout.rx.logging.AAPSLogger
import info.nightscout.rx.logging.LTag
+import info.nightscout.shared.interfaces.ResourceHelper
import info.nightscout.shared.sharedPreferences.SP
import info.nightscout.shared.utils.DateUtil
import info.nightscout.shared.utils.T
@@ -28,6 +29,7 @@ import kotlin.math.round
@Singleton
class MedtrumPump @Inject constructor(
private val aapsLogger: AAPSLogger,
+ private val rh: ResourceHelper,
private val sp: SP,
private val dateUtil: DateUtil,
private val pumpSync: PumpSync,
@@ -168,7 +170,7 @@ class MedtrumPump @Inject constructor(
sp.putLong(R.string.key_last_connection, value)
}
- private var _deviceType: Int = 0 // As reported by pump
+ private var _deviceType: Int = 80 // As reported by pump
var deviceType: Int
get() = _deviceType
set(value) {
@@ -196,16 +198,10 @@ class MedtrumPump @Inject constructor(
val pumpSN: Long
get() = _pumpSN
- val pumpType: PumpType = PumpType.MEDTRUM_NANO // TODO, type based on deviceType from pump
-
var lastTimeReceivedFromPump = 0L // Time in ms! // TODO: Consider removing as is not used?
var suspendTime = 0L // Time in ms!
var patchAge = 0L // Time in seconds?! // TODO: Not used
-
- var alarmFlags = 0
- var alarmParameter = 0
-
// bolus status
var bolusingTreatment: EventOverviewBolusProgress.Treatment? = null // actually delivered treatment
var bolusAmountToBeDelivered = 0.0 // amount to be delivered
@@ -270,6 +266,12 @@ class MedtrumPump @Inject constructor(
}
}
+ fun pumpType(): PumpType =
+ when(deviceType) {
+ 80, 88 -> PumpType.MEDTRUM_NANO
+ else -> PumpType.MEDTRUM_UNTESTED
+ }
+
fun loadUserSettingsFromSP() {
desiredPatchExpiration = sp.getBoolean(info.nightscout.pump.medtrum.R.string.key_patch_expiration, false)
val alarmSettingCode = sp.getString(info.nightscout.pump.medtrum.R.string.key_alarm_setting, AlarmSetting.LIGHT_VIBRATE_AND_BEEP.code.toString()).toByte()
@@ -356,7 +358,7 @@ class MedtrumPump @Inject constructor(
LTag.PUMP,
"handleBasalStatusUpdate: basalType: $basalType basalValue: $basalRate basalSequence: $basalSequence basalPatchId: $basalPatchId basalStartTime: $basalStartTime " + "receivedTime: $receivedTime"
)
- @Suppress("UNNECESSARY_SAFE_CALL") // Safe call to allow mocks to retun null
+ @Suppress("UNNECESSARY_SAFE_CALL") // Safe call to allow mocks to return null
val expectedTemporaryBasal = pumpSync.expectedPumpState()?.temporaryBasal
if (basalType.isTempBasal() && expectedTemporaryBasal?.pumpId != basalStartTime) {
// Note: temporaryBasalInfo will be removed from temporaryBasalStorage after this call
@@ -364,14 +366,19 @@ class MedtrumPump @Inject constructor(
// If duration is unknown, no way to get it now, set patch lifetime as duration
val duration = temporaryBasalInfo?.duration ?: T.mins(FAKE_TBR_LENGTH).msecs()
+ val adjustedBasalRate = if (basalType == BasalType.ABSOLUTE_TEMP) {
+ basalRate
+ } else {
+ (basalRate / baseBasalRate) * 100 // calculate the percentage of the original basal rate
+ }
val newRecord = pumpSync.syncTemporaryBasalWithPumpId(
timestamp = basalStartTime,
- rate = basalRate, // TODO: Support percent here, this will break things? Check if this is correct
+ rate = adjustedBasalRate,
duration = duration,
isAbsolute = (basalType == BasalType.ABSOLUTE_TEMP),
type = temporaryBasalInfo?.type,
pumpId = basalStartTime,
- pumpType = pumpType,
+ pumpType = pumpType(),
pumpSerial = pumpSN.toString(radix = 16)
)
aapsLogger.debug(
@@ -386,7 +393,7 @@ class MedtrumPump @Inject constructor(
isAbsolute = true,
type = PumpSync.TemporaryBasalType.PUMP_SUSPEND,
pumpId = basalStartTime,
- pumpType = pumpType,
+ pumpType = pumpType(),
pumpSerial = pumpSN.toString(radix = 16)
)
aapsLogger.debug(
@@ -439,7 +446,7 @@ class MedtrumPump @Inject constructor(
isAbsolute = true,
type = PumpSync.TemporaryBasalType.PUMP_SUSPEND,
pumpId = dateUtil.now(),
- pumpType = pumpType,
+ pumpType = pumpType(),
pumpSerial = pumpSN.toString(radix = 16)
)
aapsLogger.debug(
@@ -468,6 +475,31 @@ class MedtrumPump @Inject constructor(
saveActiveAlarms()
}
+ fun alarmStateToString(alarmState: AlarmState): String {
+ val stringId = when (alarmState) {
+ AlarmState.NONE -> R.string.alarm_none
+ AlarmState.PUMP_LOW_BATTERY -> R.string.alarm_pump_low_battery
+ AlarmState.PUMP_LOW_RESERVOIR -> R.string.alarm_pump_low_reservoir
+ AlarmState.PUMP_EXPIRES_SOON -> R.string.alarm_pump_expires_soon
+ AlarmState.LOWBG_SUSPENDED -> R.string.alarm_lowbg_suspended
+ AlarmState.LOWBG_SUSPENDED2 -> R.string.alarm_lowbg_suspended2
+ AlarmState.AUTO_SUSPENDED -> R.string.alarm_auto_suspended
+ AlarmState.HMAX_SUSPENDED -> R.string.alarm_hmax_suspended
+ AlarmState.DMAX_SUSPENDED -> R.string.alarm_dmax_suspended
+ AlarmState.SUSPENDED -> R.string.alarm_suspended
+ AlarmState.PAUSED -> R.string.alarm_paused
+ AlarmState.OCCLUSION -> R.string.alarm_occlusion
+ AlarmState.EXPIRED -> R.string.alarm_expired
+ AlarmState.RESERVOIR_EMPTY -> R.string.alarm_reservoir_empty
+ AlarmState.PATCH_FAULT -> R.string.alarm_patch_fault
+ AlarmState.PATCH_FAULT2 -> R.string.alarm_patch_fault2
+ AlarmState.BASE_FAULT -> R.string.alarm_base_fault
+ AlarmState.BATTERY_OUT -> R.string.alarm_battery_out
+ AlarmState.NO_CALIBRATION -> R.string.alarm_no_calibration
+ }
+ return rh.gs(stringId)
+ }
+
private fun saveActiveAlarms() {
val alarmsStr = activeAlarms.joinToString(separator = ",") { it.name }
sp.putString(R.string.key_active_alarms, alarmsStr)
diff --git a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/enums/BolusType.kt b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/enums/BolusType.kt
index ef245d1805..7bf88c9f53 100644
--- a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/enums/BolusType.kt
+++ b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/enums/BolusType.kt
@@ -3,6 +3,6 @@ package info.nightscout.pump.medtrum.comm.enums
enum class BolusType {
NONE,
NORMAL,
- EXTEND,
- COMBINATION;
+ EXTENDED,
+ COMBI;
}
diff --git a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/packets/ActivatePacket.kt b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/packets/ActivatePacket.kt
index 2eaeb17b86..cfe94aee60 100644
--- a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/packets/ActivatePacket.kt
+++ b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/packets/ActivatePacket.kt
@@ -107,13 +107,13 @@ class ActivatePacket(injector: HasAndroidInjector, private val basalProfile: Byt
pumpSync.insertTherapyEventIfNewWithTimestamp(
timestamp = System.currentTimeMillis(),
type = DetailedBolusInfo.EventType.CANNULA_CHANGE,
- pumpType = medtrumPump.pumpType,
+ pumpType = medtrumPump.pumpType(),
pumpSerial = medtrumPump.pumpSN.toString(radix = 16)
)
pumpSync.insertTherapyEventIfNewWithTimestamp(
timestamp = System.currentTimeMillis(),
type = DetailedBolusInfo.EventType.INSULIN_CHANGE,
- pumpType = medtrumPump.pumpType,
+ pumpType = medtrumPump.pumpType(),
pumpSerial = medtrumPump.pumpSN.toString(radix = 16)
)
}
diff --git a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/packets/CancelTempBasalPacket.kt b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/packets/CancelTempBasalPacket.kt
index c3067ed501..8d0ebd477b 100644
--- a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/packets/CancelTempBasalPacket.kt
+++ b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/packets/CancelTempBasalPacket.kt
@@ -53,7 +53,7 @@ class CancelTempBasalPacket(injector: HasAndroidInjector) : MedtrumPacket(inject
pumpSync.syncStopTemporaryBasalWithPumpId(
timestamp = basalStartTime, // Time of normal basal start = time of tbr end
endPumpId = basalStartTime,
- pumpType = medtrumPump.pumpType,
+ pumpType = medtrumPump.pumpType(),
pumpSerial = medtrumPump.pumpSN.toString(radix = 16)
)
aapsLogger.debug(
diff --git a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/packets/GetRecordPacket.kt b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/packets/GetRecordPacket.kt
index 265e7b3ae9..d6a29a66e3 100644
--- a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/packets/GetRecordPacket.kt
+++ b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/comm/packets/GetRecordPacket.kt
@@ -94,7 +94,7 @@ class GetRecordPacket(injector: HasAndroidInjector, private val recordIndex: Int
val bolusNormalAmount = data.copyOfRange(RESP_RECORD_DATA_START + 8, RESP_RECORD_DATA_START + 10).toInt() * 0.05
val bolusNormalDelivered = data.copyOfRange(RESP_RECORD_DATA_START + 10, RESP_RECORD_DATA_START + 12).toInt() * 0.05
val bolusExtendedAmount = data.copyOfRange(RESP_RECORD_DATA_START + 12, RESP_RECORD_DATA_START + 14).toInt() * 0.05
- val bolusExtendedDuration = data.copyOfRange(RESP_RECORD_DATA_START + 14, RESP_RECORD_DATA_START + 16).toInt()
+ val bolusExtendedDuration = data.copyOfRange(RESP_RECORD_DATA_START + 14, RESP_RECORD_DATA_START + 16).toLong() * 1000
val bolusExtendedDelivered = data.copyOfRange(RESP_RECORD_DATA_START + 16, RESP_RECORD_DATA_START + 18).toInt() * 0.05
val bolusCarb = data.copyOfRange(RESP_RECORD_DATA_START + 18, RESP_RECORD_DATA_START + 20).toInt()
val bolusGlucose = data.copyOfRange(RESP_RECORD_DATA_START + 20, RESP_RECORD_DATA_START + 22).toInt()
@@ -114,7 +114,7 @@ class GetRecordPacket(injector: HasAndroidInjector, private val recordIndex: Int
amount = bolusNormalDelivered,
type = detailedBolusInfo?.bolusType,
pumpId = bolusStartTime,
- pumpType = medtrumPump.pumpType,
+ pumpType = medtrumPump.pumpType(),
pumpSerial = medtrumPump.pumpSN.toString(radix = 16)
)
aapsLogger.debug(
@@ -129,12 +129,54 @@ class GetRecordPacket(injector: HasAndroidInjector, private val recordIndex: Int
medtrumPump.lastBolusTime = bolusStartTime
medtrumPump.lastBolusAmount = bolusNormalDelivered
}
- } else {
- // TODO: at least record the bolus
+ } else if (bolusType == BolusType.EXTENDED) {
+ val newRecord = pumpSync.syncExtendedBolusWithPumpId(
+ timestamp = bolusStartTime,
+ amount = bolusExtendedDelivered,
+ duration = bolusExtendedDuration,
+ isEmulatingTB = false,
+ pumpId = bolusStartTime,
+ pumpType = medtrumPump.pumpType(),
+ pumpSerial = medtrumPump.pumpSN.toString(radix = 16)
+ )
+ aapsLogger.debug(
+ LTag.PUMPCOMM,
+ "from record: ${if (newRecord) "**NEW** " else ""}EVENT EXTENDED BOLUS ${dateUtil.dateAndTimeString(bolusStartTime)} ($bolusStartTime) Bolus: ${bolusNormalDelivered}U "
+ )
+ } else if (bolusType == BolusType.COMBI) {
+ // Note, this should never happen, as we don't use combo bolus
+ val detailedBolusInfo = detailedBolusInfoStorage.findDetailedBolusInfo(bolusStartTime, bolusNormalDelivered)
+ val newRecord = pumpSync.syncBolusWithPumpId(
+ timestamp = bolusStartTime,
+ amount = bolusNormalDelivered,
+ type = detailedBolusInfo?.bolusType,
+ pumpId = bolusStartTime,
+ pumpType = medtrumPump.pumpType(),
+ pumpSerial = medtrumPump.pumpSN.toString(radix = 16)
+ )
+ pumpSync.syncExtendedBolusWithPumpId(
+ timestamp = bolusStartTime,
+ amount = bolusExtendedDelivered,
+ duration = bolusExtendedDuration,
+ isEmulatingTB = false,
+ pumpId = bolusStartTime,
+ pumpType = medtrumPump.pumpType(),
+ pumpSerial = medtrumPump.pumpSN.toString(radix = 16)
+ )
aapsLogger.error(
LTag.PUMPCOMM,
- "from record: EVENT BOLUS ${dateUtil.dateAndTimeString(bolusStartTime)} ($bolusStartTime) " + "Bolus type: $bolusType not supported"
+ "from record: ${if (newRecord) "**NEW** " else ""}EVENT COMBI BOLUS ${dateUtil.dateAndTimeString(bolusStartTime)} ($bolusStartTime) Bolus: ${bolusNormalDelivered}U Extended: ${bolusExtendedDelivered} THIS SHOULD NOT HAPPEN!!!"
)
+ if (!newRecord && detailedBolusInfo != null) {
+ // detailedInfo can be from another similar record. Reinsert
+ detailedBolusInfoStorage.add(detailedBolusInfo)
+ }
+ if (bolusStartTime > medtrumPump.lastBolusTime) {
+ medtrumPump.lastBolusTime = bolusStartTime
+ medtrumPump.lastBolusAmount = bolusNormalDelivered
+ }
+ } else {
+ aapsLogger.error(LTag.PUMPCOMM, "GetRecordPacket HandleResponse: BOLUS_RECORD: Unknown bolus type: $bolusType")
}
}
@@ -171,7 +213,7 @@ class GetRecordPacket(injector: HasAndroidInjector, private val recordIndex: Int
isAbsolute = (basalType == BasalType.ABSOLUTE_TEMP),
type = PumpSync.TemporaryBasalType.NORMAL,
pumpId = basalStartTime,
- pumpType = medtrumPump.pumpType,
+ pumpType = medtrumPump.pumpType(),
pumpSerial = medtrumPump.pumpSN.toString(radix = 16)
)
aapsLogger.debug(
@@ -183,7 +225,7 @@ class GetRecordPacket(injector: HasAndroidInjector, private val recordIndex: Int
pumpSync.syncStopTemporaryBasalWithPumpId(
timestamp = basalEndTime,
endPumpId = basalEndTime,
- pumpType = medtrumPump.pumpType,
+ pumpType = medtrumPump.pumpType(),
pumpSerial = medtrumPump.pumpSN.toString(radix = 16)
)
aapsLogger.warn(
@@ -202,7 +244,7 @@ class GetRecordPacket(injector: HasAndroidInjector, private val recordIndex: Int
isAbsolute = true,
type = PumpSync.TemporaryBasalType.PUMP_SUSPEND,
pumpId = basalStartTime,
- pumpType = medtrumPump.pumpType,
+ pumpType = medtrumPump.pumpType(),
pumpSerial = medtrumPump.pumpSN.toString(radix = 16)
)
aapsLogger.debug(
@@ -210,11 +252,9 @@ class GetRecordPacket(injector: HasAndroidInjector, private val recordIndex: Int
"handleBasalStatusUpdate from record: ${if (newRecord) "**NEW** " else ""}EVENT SUSPEND: ($basalType) ${dateUtil.dateAndTimeString(basalStartTime)} ($basalStartTime) " +
"Rate: $basalRate Duration: ${duration}"
)
-
}
else -> {
aapsLogger.error(LTag.PUMPCOMM, "GetRecordPacket HandleResponse: BASAL_RECORD: Unknown basal type: $basalType")
- // TODO: Error warning
}
}
}
diff --git a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/services/MedtrumService.kt b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/services/MedtrumService.kt
index 233c63449f..39c55b5cca 100644
--- a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/services/MedtrumService.kt
+++ b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/services/MedtrumService.kt
@@ -15,6 +15,7 @@ import info.nightscout.interfaces.plugin.ActivePlugin
import info.nightscout.interfaces.profile.Profile
import info.nightscout.interfaces.profile.ProfileFunction
import info.nightscout.interfaces.pump.PumpSync
+import info.nightscout.interfaces.pump.defs.PumpType
import info.nightscout.interfaces.queue.Callback
import info.nightscout.interfaces.queue.CommandQueue
import info.nightscout.interfaces.ui.UiInteraction
@@ -473,7 +474,7 @@ class MedtrumService : DaggerService(), BLECommCallback {
// Pump suspended due to error, show error!
uiInteraction.addNotificationWithSound(
Notification.PUMP_ERROR,
- rh.gs(R.string.pump_error, state.toString()),
+ rh.gs(R.string.pump_error, alarmState?.let { medtrumPump.alarmStateToString(it) }),
Notification.URGENT,
info.nightscout.core.ui.R.raw.alarm
)
@@ -626,7 +627,21 @@ class MedtrumService : DaggerService(), BLECommCallback {
// Succes!
responseHandled = true
responseSuccess = true
- toState(GetDeviceTypeState())
+ // Check if we have a supported pump
+ if (medtrumPump.pumpType() == PumpType.MEDTRUM_UNTESTED) {
+ // Throw error
+ aapsLogger.error(LTag.PUMPCOMM, "Unsupported pump type")
+ uiInteraction.addNotificationWithSound(
+ Notification.PUMP_ERROR,
+ rh.gs(R.string.pump_unsupported, medtrumPump.deviceType),
+ Notification.URGENT,
+ info.nightscout.core.ui.R.raw.alarm
+ )
+ bleComm.disconnect("Unsupported pump")
+ toState(IdleState())
+ } else {
+ toState(GetDeviceTypeState())
+ }
} else if (mPacket?.failed == true) {
// Failure
responseHandled = true
diff --git a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/viewmodel/MedtrumOverviewViewModel.kt b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/viewmodel/MedtrumOverviewViewModel.kt
index e7a64049fd..d86a3efb25 100644
--- a/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/viewmodel/MedtrumOverviewViewModel.kt
+++ b/pump/medtrum/src/main/java/info/nightscout/pump/medtrum/ui/viewmodel/MedtrumOverviewViewModel.kt
@@ -150,9 +150,11 @@ class MedtrumOverviewViewModel @Inject constructor(
fun updateGUI() {
// Update less dynamic values
- val agoMilliseconds = System.currentTimeMillis() - medtrumPump.lastConnection
- val agoMinutes = agoMilliseconds / 1000 / 60
- _lastConnectionMinAgo.postValue(rh.gs(info.nightscout.shared.R.string.minago, agoMinutes))
+ if (medtrumPump.lastConnection != 0L) {
+ val agoMilliseconds = System.currentTimeMillis() - medtrumPump.lastConnection
+ val agoMinutes = agoMilliseconds / 1000 / 60
+ _lastConnectionMinAgo.postValue(rh.gs(info.nightscout.shared.R.string.minago, agoMinutes))
+ }
if (medtrumPump.lastBolusTime != 0L) {
val agoMilliseconds = System.currentTimeMillis() - medtrumPump.lastBolusTime
val agoHours = agoMilliseconds.toDouble() / 60.0 / 60.0 / 1000.0
@@ -169,7 +171,7 @@ class MedtrumOverviewViewModel @Inject constructor(
_lastBolus.postValue("")
}
- val activeAlarmStrings = medtrumPump.activeAlarms.map { alarmStateToString(it) }
+ val activeAlarmStrings = medtrumPump.activeAlarms.map { medtrumPump.alarmStateToString(it) }
_activeAlarms.postValue(activeAlarmStrings.joinToString("\n"))
_pumpType.postValue(medtrumPump.deviceType.toString())
_fwVersion.postValue(medtrumPump.swVersion)
@@ -182,30 +184,5 @@ class MedtrumOverviewViewModel @Inject constructor(
_patchExpiry.postValue(rh.gs(R.string.expiry_not_enabled))
}
}
-
- private fun alarmStateToString(alarmState: AlarmState): String {
- val stringId = when (alarmState) {
- AlarmState.NONE -> R.string.alarm_none
- AlarmState.PUMP_LOW_BATTERY -> R.string.alarm_pump_low_battery
- AlarmState.PUMP_LOW_RESERVOIR -> R.string.alarm_pump_low_reservoir
- AlarmState.PUMP_EXPIRES_SOON -> R.string.alarm_pump_expires_soon
- AlarmState.LOWBG_SUSPENDED -> R.string.alarm_lowbg_suspended
- AlarmState.LOWBG_SUSPENDED2 -> R.string.alarm_lowbg_suspended2
- AlarmState.AUTO_SUSPENDED -> R.string.alarm_auto_suspended
- AlarmState.HMAX_SUSPENDED -> R.string.alarm_hmax_suspended
- AlarmState.DMAX_SUSPENDED -> R.string.alarm_dmax_suspended
- AlarmState.SUSPENDED -> R.string.alarm_suspended
- AlarmState.PAUSED -> R.string.alarm_paused
- AlarmState.OCCLUSION -> R.string.alarm_occlusion
- AlarmState.EXPIRED -> R.string.alarm_expired
- AlarmState.RESERVOIR_EMPTY -> R.string.alarm_reservoir_empty
- AlarmState.PATCH_FAULT -> R.string.alarm_patch_fault
- AlarmState.PATCH_FAULT2 -> R.string.alarm_patch_fault2
- AlarmState.BASE_FAULT -> R.string.alarm_base_fault
- AlarmState.BATTERY_OUT -> R.string.alarm_battery_out
- AlarmState.NO_CALIBRATION -> R.string.alarm_no_calibration
- }
- return rh.gs(stringId)
- }
}
\ No newline at end of file
diff --git a/pump/medtrum/src/main/res/values/strings.xml b/pump/medtrum/src/main/res/values/strings.xml
index 53ee9e747b..ee5e673d94 100644
--- a/pump/medtrum/src/main/res/values/strings.xml
+++ b/pump/medtrum/src/main/res/values/strings.xml
@@ -27,6 +27,7 @@
Medtrum Nano
Medtrum pump settings
Pump error: %1$s !!
+ Pump untested: %1$d! Please contact us at discord or github for support
Pump is suspended
Pump is suspended due to hourly max insulin exceeded
Pump is suspended due to daily max insulin exceeded