- kotlin !! refactorings

This commit is contained in:
Andy Rozman 2021-05-22 16:16:05 +01:00
parent 59a3bf8883
commit 921302bdbf
22 changed files with 337 additions and 261 deletions

View file

@ -1,5 +1,6 @@
package info.nightscout.androidaps.db package info.nightscout.androidaps.db
@Deprecated("This class is not needed for new database anymore")
interface DbObjectBase { interface DbObjectBase {
fun getDate(): Long fun getDate(): Long

View file

@ -296,13 +296,13 @@ class MedtronicFragment : DaggerFragment() {
val bolus = medtronicPumpStatus.lastBolusAmount val bolus = medtronicPumpStatus.lastBolusAmount
val bolusTime = medtronicPumpStatus.lastBolusTime val bolusTime = medtronicPumpStatus.lastBolusTime
if (bolus != null && bolusTime != null) { if (bolus != null && bolusTime != null) {
val agoMsc = System.currentTimeMillis() - medtronicPumpStatus.lastBolusTime!!.time val agoMsc = System.currentTimeMillis() - bolusTime.time
val bolusMinAgo = agoMsc.toDouble() / 60.0 / 1000.0 val bolusMinAgo = agoMsc.toDouble() / 60.0 / 1000.0
val unit = resourceHelper.gs(R.string.insulin_unit_shortname) val unit = resourceHelper.gs(R.string.insulin_unit_shortname)
val ago = when { val ago = when {
agoMsc < 60 * 1000 -> resourceHelper.gs(R.string.medtronic_pump_connected_now) agoMsc < 60 * 1000 -> resourceHelper.gs(R.string.medtronic_pump_connected_now)
bolusMinAgo < 60 -> dateUtil.minAgo(resourceHelper, medtronicPumpStatus.lastBolusTime!!.time) bolusMinAgo < 60 -> dateUtil.minAgo(resourceHelper, bolusTime.time)
else -> dateUtil.hourAgo(medtronicPumpStatus.lastBolusTime!!.time, resourceHelper) else -> dateUtil.hourAgo(bolusTime.time, resourceHelper)
} }
binding.lastBolus.text = resourceHelper.gs(R.string.mdt_last_bolus, bolus, unit, ago) binding.lastBolus.text = resourceHelper.gs(R.string.mdt_last_bolus, bolus, unit, ago)
} else { } else {
@ -315,7 +315,7 @@ class MedtronicFragment : DaggerFragment() {
// TBR // TBR
var tbrStr = "" var tbrStr = ""
var tbrRemainingTime: Int? = medtronicPumpStatus.tbrRemainingTime val tbrRemainingTime: Int? = medtronicPumpStatus.tbrRemainingTime
if (tbrRemainingTime != null) { if (tbrRemainingTime != null) {
tbrStr = resourceHelper.gs(R.string.mdt_tbr_remaining, medtronicPumpStatus.tempBasalAmount, tbrRemainingTime); tbrStr = resourceHelper.gs(R.string.mdt_tbr_remaining, medtronicPumpStatus.tempBasalAmount, tbrRemainingTime);

View file

@ -303,7 +303,7 @@ class MedtronicPumpPlugin @Inject constructor(
override fun getPumpStatus(reason: String) { override fun getPumpStatus(reason: String) {
var needRefresh = true var needRefresh = true
if (firstRun) { if (firstRun) {
needRefresh = initializePump(!isRefresh) needRefresh = initializePump() /*!isRefresh*/
} else { } else {
refreshAnyStatusThatNeedsToBeRefreshed() refreshAnyStatusThatNeedsToBeRefreshed()
} }
@ -401,7 +401,7 @@ class MedtronicPumpPlugin @Inject constructor(
rxBus.send(EventRefreshButtonState(enabled)) rxBus.send(EventRefreshButtonState(enabled))
} }
private fun initializePump(realInit: Boolean): Boolean { private fun initializePump(): Boolean {
if (rileyLinkMedtronicService == null) return false if (rileyLinkMedtronicService == null) return false
aapsLogger.info(LTag.PUMP, logPrefix + "initializePump - start") aapsLogger.info(LTag.PUMP, logPrefix + "initializePump - start")
rileyLinkMedtronicService!!.deviceCommunicationManager.setDoWakeUpBeforeCommand(false) rileyLinkMedtronicService!!.deviceCommunicationManager.setDoWakeUpBeforeCommand(false)
@ -562,7 +562,7 @@ class MedtronicPumpPlugin @Inject constructor(
if (clock == null) return if (clock == null) return
val timeDiff = Math.abs(clock.timeDifference) val timeDiff = Math.abs(clock.timeDifference)
if (timeDiff > 20) { if (timeDiff > 20) {
if (clock.localDeviceTime!!.year <= 2015 || timeDiff <= 24 * 60 * 60) { if (clock.localDeviceTime.year <= 2015 || timeDiff <= 24 * 60 * 60) {
aapsLogger.info(LTag.PUMP, String.format(Locale.ENGLISH, "MedtronicPumpPlugin::checkTimeAndOptionallySetTime - Time difference is %d s. Set time on pump.", timeDiff)) aapsLogger.info(LTag.PUMP, String.format(Locale.ENGLISH, "MedtronicPumpPlugin::checkTimeAndOptionallySetTime - Time difference is %d s. Set time on pump.", timeDiff))
rileyLinkMedtronicService!!.medtronicUIComm.executeCommand(MedtronicCommandType.SetRealTimeClock) rileyLinkMedtronicService!!.medtronicUIComm.executeCommand(MedtronicCommandType.SetRealTimeClock)
if (clock.timeDifference == 0) { if (clock.timeDifference == 0) {
@ -570,7 +570,7 @@ class MedtronicPumpPlugin @Inject constructor(
rxBus.send(EventNewNotification(notification)) rxBus.send(EventNewNotification(notification))
} }
} else { } else {
if (clock.localDeviceTime!!.year > 2015) { if (clock.localDeviceTime.year > 2015) {
aapsLogger.error(String.format(Locale.ENGLISH, "MedtronicPumpPlugin::checkTimeAndOptionallySetTime - Time difference over 24h requested [diff=%d s]. Doing nothing.", timeDiff)) aapsLogger.error(String.format(Locale.ENGLISH, "MedtronicPumpPlugin::checkTimeAndOptionallySetTime - Time difference over 24h requested [diff=%d s]. Doing nothing.", timeDiff))
medtronicUtil.sendNotification(MedtronicNotificationType.TimeChangeOver24h, resourceHelper, rxBus) medtronicUtil.sendNotification(MedtronicNotificationType.TimeChangeOver24h, resourceHelper, rxBus)
} }
@ -855,7 +855,7 @@ class MedtronicPumpPlugin @Inject constructor(
if (debugHistory) aapsLogger.debug(LTag.PUMP, logPrefix + "readPumpHistoryLogic(): lastPumpHistoryEntry: not null - " + medtronicUtil.gsonInstance.toJson(lastPumpHistoryEntry)) if (debugHistory) aapsLogger.debug(LTag.PUMP, logPrefix + "readPumpHistoryLogic(): lastPumpHistoryEntry: not null - " + medtronicUtil.gsonInstance.toJson(lastPumpHistoryEntry))
medtronicHistoryData.setIsInInit(false) medtronicHistoryData.setIsInInit(false)
// we need to read 35 minutes in the past so that we can repair any TBR or Bolus values if neeeded // we need to read 35 minutes in the past so that we can repair any TBR or Bolus values if neeeded
targetDate = LocalDateTime(DateTimeUtil.getMillisFromATDWithAddedMinutes(lastPumpHistoryEntry!!.atechDateTime!!, -35)) targetDate = LocalDateTime(DateTimeUtil.getMillisFromATDWithAddedMinutes(lastPumpHistoryEntry!!.atechDateTime, -35))
} }
//aapsLogger.debug(LTag.PUMP, "HST: Target Date: " + targetDate); //aapsLogger.debug(LTag.PUMP, "HST: Target Date: " + targetDate);

View file

@ -35,7 +35,6 @@ import org.joda.time.LocalDateTime
import java.util.* import java.util.*
import javax.inject.Inject import javax.inject.Inject
import javax.inject.Singleton import javax.inject.Singleton
import kotlin.jvm.Throws
/** /**
* Original file created by geoff on 5/30/16. * Original file created by geoff on 5/30/16.
@ -266,8 +265,7 @@ class MedtronicCommunicationManager // This empty constructor must be kept, oth
while (!done) { while (!done) {
// examine current response for problems. // examine current response for problems.
val frameData = currentResponse.frameData val frameData = currentResponse.frameData
if (frameData != null && frameData.size > 0 if (frameData.size > 0 && currentResponse.frameNumber == expectedFrameNum) {
&& currentResponse.frameNumber == expectedFrameNum) {
// success! got a frame. // success! got a frame.
if (frameData.size != 64) { if (frameData.size != 64) {
aapsLogger.warn(LTag.PUMPCOMM, "Expected frame of length 64, got frame of length " + frameData.size) aapsLogger.warn(LTag.PUMPCOMM, "Expected frame of length 64, got frame of length " + frameData.size)
@ -287,7 +285,7 @@ class MedtronicCommunicationManager // This empty constructor must be kept, oth
done = true // successful completion done = true // successful completion
} }
} else { } else {
if (frameData == null) { if (frameData.size == 0) {
aapsLogger.error(LTag.PUMPCOMM, "null frame data, retrying") aapsLogger.error(LTag.PUMPCOMM, "null frame data, retrying")
} else if (currentResponse.frameNumber != expectedFrameNum) { } else if (currentResponse.frameNumber != expectedFrameNum) {
aapsLogger.warn(LTag.PUMPCOMM, String.format(Locale.ENGLISH, "Expected frame number %d, received %d (retrying)", expectedFrameNum, aapsLogger.warn(LTag.PUMPCOMM, String.format(Locale.ENGLISH, "Expected frame number %d, received %d (retrying)", expectedFrameNum,
@ -335,7 +333,7 @@ class MedtronicCommunicationManager // This empty constructor must be kept, oth
rawHistoryPage.dumpToDebug() rawHistoryPage.dumpToDebug()
val medtronicHistoryEntries = medtronicPumpHistoryDecoder.processPageAndCreateRecords(rawHistoryPage) val medtronicHistoryEntries = medtronicPumpHistoryDecoder.processPageAndCreateRecords(rawHistoryPage)
aapsLogger.debug(LTag.PUMPCOMM, String.format(Locale.ENGLISH, "getPumpHistory: Found %d history entries.", medtronicHistoryEntries.size)) aapsLogger.debug(LTag.PUMPCOMM, String.format(Locale.ENGLISH, "getPumpHistory: Found %d history entries.", medtronicHistoryEntries.size))
pumpTotalResult.addHistoryEntries(medtronicHistoryEntries, pageNumber) pumpTotalResult.addHistoryEntries(medtronicHistoryEntries) //, pageNumber)
aapsLogger.debug(LTag.PUMPCOMM, String.format(Locale.ENGLISH, "getPumpHistory: Search status: Search finished: %b", pumpTotalResult.isSearchFinished)) aapsLogger.debug(LTag.PUMPCOMM, String.format(Locale.ENGLISH, "getPumpHistory: Search status: Search finished: %b", pumpTotalResult.isSearchFinished))
if (pumpTotalResult.isSearchFinished) { if (pumpTotalResult.isSearchFinished) {
medtronicPumpStatus.pumpDeviceState = PumpDeviceState.Sleeping medtronicPumpStatus.pumpDeviceState = PumpDeviceState.Sleeping
@ -507,8 +505,6 @@ class MedtronicCommunicationManager // This empty constructor must be kept, oth
} }
} }
fun getBasalProfile(): BasalProfile? { fun getBasalProfile(): BasalProfile? {
// wakeUp // wakeUp
@ -593,26 +589,26 @@ class MedtronicCommunicationManager // This empty constructor must be kept, oth
} }
fun getPumpTime(): ClockDTO? { fun getPumpTime(): ClockDTO? {
val clockDTO = ClockDTO() val localTime = LocalDateTime()
clockDTO.localDeviceTime = LocalDateTime()
val responseObject = sendAndGetResponseWithCheck(MedtronicCommandType.GetRealTimeClock) { _, _, rawContent -> val responseObject = sendAndGetResponseWithCheck(MedtronicCommandType.GetRealTimeClock) { _, _, rawContent ->
medtronicConverter.decodeTime(rawContent) medtronicConverter.decodeTime(rawContent)
} }
if (responseObject != null) { if (responseObject != null) {
clockDTO.pumpTime = responseObject return ClockDTO(localDeviceTime = localTime, pumpTime = responseObject)
return clockDTO
} }
return null return null
} }
fun getTemporaryBasal(): TempBasalPair? { fun getTemporaryBasal(): TempBasalPair? {
return sendAndGetResponseWithCheck(MedtronicCommandType.ReadTemporaryBasal) { _, _, rawContent -> return sendAndGetResponseWithCheck(MedtronicCommandType.ReadTemporaryBasal) { _, _, rawContent ->
TempBasalPair(aapsLogger, rawContent!!) } TempBasalPair(aapsLogger, rawContent!!)
}
} }
fun getPumpSettings(): Map<String, PumpSettingDTO>? { fun getPumpSettings(): Map<String, PumpSettingDTO>? {
return sendAndGetResponseWithCheck(getSettings(medtronicUtil.medtronicPumpModel)) { _, _, rawContent -> return sendAndGetResponseWithCheck(getSettings(medtronicUtil.medtronicPumpModel)) { _, _, rawContent ->
medtronicConverter.decodeSettingsLoop(rawContent) } medtronicConverter.decodeSettingsLoop(rawContent)
}
} }
fun setBolus(units: Double): Boolean { fun setBolus(units: Double): Boolean {

View file

@ -7,8 +7,6 @@ import info.nightscout.androidaps.plugins.pump.common.utils.StringUtil
import info.nightscout.androidaps.plugins.pump.medtronic.util.MedtronicUtil import info.nightscout.androidaps.plugins.pump.medtronic.util.MedtronicUtil
import org.apache.commons.lang3.StringUtils import org.apache.commons.lang3.StringUtils
import java.util.* import java.util.*
import javax.inject.Inject
import kotlin.jvm.Throws
/** /**
* This file was taken from GGC - GNU Gluco Control (ggc.sourceforge.net), application for diabetes * This file was taken from GGC - GNU Gluco Control (ggc.sourceforge.net), application for diabetes
@ -19,9 +17,17 @@ import kotlin.jvm.Throws
*/ */
abstract class MedtronicHistoryDecoder<T : MedtronicHistoryEntry?> : MedtronicHistoryDecoderInterface<T> { abstract class MedtronicHistoryDecoder<T : MedtronicHistoryEntry?> : MedtronicHistoryDecoderInterface<T> {
@Inject lateinit var aapsLogger: AAPSLogger constructor(aapsLogger: AAPSLogger,
@Inject lateinit var medtronicUtil: MedtronicUtil medtronicUtil: MedtronicUtil,
@Inject lateinit var bitUtils: ByteUtil bitUtils: ByteUtil) {
this.aapsLogger = aapsLogger
this.medtronicUtil = medtronicUtil
this.bitUtils = bitUtils
}
var aapsLogger: AAPSLogger
var medtronicUtil: MedtronicUtil
var bitUtils: ByteUtil
// STATISTICS (remove at later time or not) // STATISTICS (remove at later time or not)
protected var statisticsEnabled = true protected var statisticsEnabled = true

View file

@ -5,6 +5,7 @@ import com.google.gson.annotations.Expose
import info.nightscout.androidaps.plugins.pump.common.utils.ByteUtil import info.nightscout.androidaps.plugins.pump.common.utils.ByteUtil
import info.nightscout.androidaps.plugins.pump.common.utils.DateTimeUtil import info.nightscout.androidaps.plugins.pump.common.utils.DateTimeUtil
import info.nightscout.androidaps.plugins.pump.common.utils.StringUtil import info.nightscout.androidaps.plugins.pump.common.utils.StringUtil
import info.nightscout.androidaps.plugins.pump.medtronic.comm.history.pump.PumpHistoryEntryType
import java.util.* import java.util.*
/** /**
@ -42,6 +43,7 @@ abstract class MedtronicHistoryEntry : MedtronicHistoryEntryInterface {
set(value) { set(value) {
field = value field = value
DT = DateTimeUtil.toString(value) DT = DateTimeUtil.toString(value)
if (isEntryTypeSet() && value != 0L) pumpId = generatePumpId()
} }
@Expose @Expose
@ -51,7 +53,7 @@ abstract class MedtronicHistoryEntry : MedtronicHistoryEntryInterface {
/** /**
* Pump id that will be used with AAPS object (time * 1000 + historyType (max is FF = 255) * Pump id that will be used with AAPS object (time * 1000 + historyType (max is FF = 255)
*/ */
open var pumpId: Long? = null open var pumpId: Long = 0L
/** /**
* if history object is already linked to AAPS object (either Treatment, TempBasal or TDD (tdd's * if history object is already linked to AAPS object (either Treatment, TempBasal or TDD (tdd's
@ -75,6 +77,10 @@ abstract class MedtronicHistoryEntry : MedtronicHistoryEntryInterface {
// this.linkedObject = linkedObject // this.linkedObject = linkedObject
// } // }
abstract fun generatePumpId(): Long
abstract fun isEntryTypeSet(): Boolean
override fun setData(listRawData: List<Byte>, doNotProcess: Boolean) { override fun setData(listRawData: List<Byte>, doNotProcess: Boolean) {
rawData = listRawData rawData = listRawData

View file

@ -30,6 +30,17 @@ class CGMSHistoryEntry : MedtronicHistoryEntry() {
override val entryTypeName: String override val entryTypeName: String
get() = entryType!!.name get() = entryType!!.name
override fun generatePumpId(): Long {
return if (entryType==null)
atechDateTime * 1000L
else
entryType!!.code + atechDateTime * 1000L
}
override fun isEntryTypeSet(): Boolean {
return entryType!=null
}
override fun setData(listRawData: List<Byte>, doNotProcess: Boolean) { override fun setData(listRawData: List<Byte>, doNotProcess: Boolean) {
if (entryType!!.schemaSet) { if (entryType!!.schemaSet) {
super.setData(listRawData, doNotProcess) super.setData(listRawData, doNotProcess)

View file

@ -1,18 +1,17 @@
package info.nightscout.androidaps.plugins.pump.medtronic.comm.history.cgms package info.nightscout.androidaps.plugins.pump.medtronic.comm.history.cgms
import info.nightscout.androidaps.logging.AAPSLogger
import info.nightscout.androidaps.logging.LTag import info.nightscout.androidaps.logging.LTag
import info.nightscout.androidaps.logging.StacktraceLoggerWrapper.Companion.getLogger import info.nightscout.androidaps.plugins.pump.common.utils.ByteUtil
import info.nightscout.androidaps.plugins.pump.common.utils.DateTimeUtil import info.nightscout.androidaps.plugins.pump.common.utils.DateTimeUtil
import info.nightscout.androidaps.plugins.pump.medtronic.comm.history.MedtronicHistoryDecoder import info.nightscout.androidaps.plugins.pump.medtronic.comm.history.MedtronicHistoryDecoder
import info.nightscout.androidaps.plugins.pump.medtronic.comm.history.RecordDecodeStatus import info.nightscout.androidaps.plugins.pump.medtronic.comm.history.RecordDecodeStatus
import info.nightscout.androidaps.plugins.pump.medtronic.comm.history.cgms.CGMSHistoryEntryType import info.nightscout.androidaps.plugins.pump.medtronic.comm.history.cgms.CGMSHistoryEntryType
import info.nightscout.androidaps.plugins.pump.medtronic.comm.history.cgms.CGMSHistoryEntryType.Companion.getByCode import info.nightscout.androidaps.plugins.pump.medtronic.comm.history.cgms.CGMSHistoryEntryType.Companion.getByCode
import info.nightscout.androidaps.plugins.pump.medtronic.util.MedtronicUtil
import okhttp3.internal.and import okhttp3.internal.and
import org.joda.time.LocalDateTime import org.joda.time.LocalDateTime
import org.slf4j.Logger
import org.slf4j.LoggerFactory
import java.util.* import java.util.*
import org.slf4j.LoggerFactory.getLogger as getLogger1
/** /**
* This file was taken from GGC - GNU Gluco Control (ggc.sourceforge.net), application for diabetes * This file was taken from GGC - GNU Gluco Control (ggc.sourceforge.net), application for diabetes
@ -21,7 +20,11 @@ import org.slf4j.LoggerFactory.getLogger as getLogger1
* *
* Author: Andy {andy.rozman@gmail.com} * Author: Andy {andy.rozman@gmail.com}
*/ */
class MedtronicCGMSHistoryDecoder : MedtronicHistoryDecoder<CGMSHistoryEntry>() { class MedtronicCGMSHistoryDecoder constructor(
aapsLogger: AAPSLogger,
medtronicUtil: MedtronicUtil,
bitUtils: ByteUtil
) : MedtronicHistoryDecoder<CGMSHistoryEntry>(aapsLogger, medtronicUtil, bitUtils) {
override fun decodeRecord(record: CGMSHistoryEntry): RecordDecodeStatus? { override fun decodeRecord(record: CGMSHistoryEntry): RecordDecodeStatus? {
return try { return try {

View file

@ -30,8 +30,9 @@ import kotlin.experimental.and
@Singleton @Singleton
class MedtronicPumpHistoryDecoder @Inject constructor( class MedtronicPumpHistoryDecoder @Inject constructor(
aapsLogger: AAPSLogger, aapsLogger: AAPSLogger,
medtronicUtil: MedtronicUtil medtronicUtil: MedtronicUtil,
) : MedtronicHistoryDecoder<PumpHistoryEntry>() { bitUtils: ByteUtil
) : MedtronicHistoryDecoder<PumpHistoryEntry>(aapsLogger, medtronicUtil, bitUtils) {
//private var tbrPreviousRecord: PumpHistoryEntry? = null //private var tbrPreviousRecord: PumpHistoryEntry? = null
private var changeTimeRecord: PumpHistoryEntry? = null private var changeTimeRecord: PumpHistoryEntry? = null
@ -133,7 +134,7 @@ class MedtronicPumpHistoryDecoder @Inject constructor(
return try { return try {
decodeRecordInternal(record) decodeRecordInternal(record)
} catch (ex: Exception) { } catch (ex: Exception) {
aapsLogger.error(LTag.PUMPBTCOMM, String.format(Locale.ENGLISH, " Error decoding: type=%s, ex=%s", record.entryType!!.name, ex.message, ex)) aapsLogger.error(LTag.PUMPBTCOMM, String.format(Locale.ENGLISH, " Error decoding: type=%s, ex=%s", record.entryType.name, ex.message, ex))
//ex.printStackTrace() //ex.printStackTrace()
RecordDecodeStatus.Error RecordDecodeStatus.Error
} }
@ -144,16 +145,70 @@ class MedtronicPumpHistoryDecoder @Inject constructor(
decodeDateTime(entry) decodeDateTime(entry)
} }
return when (entry.entryType) { return when (entry.entryType) {
PumpHistoryEntryType.ChangeBasalPattern, PumpHistoryEntryType.CalBGForPH, PumpHistoryEntryType.ChangeRemoteId, PumpHistoryEntryType.ClearAlarm, PumpHistoryEntryType.ChangeAlarmNotifyMode, PumpHistoryEntryType.EnableDisableRemote, PumpHistoryEntryType.BGReceived, PumpHistoryEntryType.SensorAlert, PumpHistoryEntryType.ChangeTimeFormat, PumpHistoryEntryType.ChangeReservoirWarningTime, PumpHistoryEntryType.ChangeBolusReminderEnable, PumpHistoryEntryType.SetBolusReminderTime, PumpHistoryEntryType.ChangeChildBlockEnable, PumpHistoryEntryType.BolusWizardEnabled, PumpHistoryEntryType.ChangeBGReminderOffset, PumpHistoryEntryType.ChangeAlarmClockTime, PumpHistoryEntryType.ChangeMeterId, PumpHistoryEntryType.ChangeParadigmID, PumpHistoryEntryType.JournalEntryMealMarker, PumpHistoryEntryType.JournalEntryExerciseMarker, PumpHistoryEntryType.DeleteBolusReminderTime, PumpHistoryEntryType.SetAutoOff, PumpHistoryEntryType.SelfTest, PumpHistoryEntryType.JournalEntryInsulinMarker, PumpHistoryEntryType.JournalEntryOtherMarker, PumpHistoryEntryType.BolusWizardSetup512, PumpHistoryEntryType.ChangeSensorSetup2, PumpHistoryEntryType.ChangeSensorAlarmSilenceConfig, PumpHistoryEntryType.ChangeSensorRateOfChangeAlertSetup, PumpHistoryEntryType.ChangeBolusScrollStepSize, PumpHistoryEntryType.BolusWizardSetup, PumpHistoryEntryType.ChangeVariableBolus, PumpHistoryEntryType.ChangeAudioBolus, PumpHistoryEntryType.ChangeBGReminderEnable, PumpHistoryEntryType.ChangeAlarmClockEnable, PumpHistoryEntryType.BolusReminder, PumpHistoryEntryType.DeleteAlarmClockTime, PumpHistoryEntryType.ChangeCarbUnits, PumpHistoryEntryType.ChangeWatchdogEnable, PumpHistoryEntryType.ChangeOtherDeviceID, PumpHistoryEntryType.ReadOtherDevicesIDs, PumpHistoryEntryType.BGReceived512, PumpHistoryEntryType.SensorStatus, PumpHistoryEntryType.ReadCaptureEventEnabled, PumpHistoryEntryType.ChangeCaptureEventEnable, PumpHistoryEntryType.ReadOtherDevicesStatus -> RecordDecodeStatus.OK PumpHistoryEntryType.ChangeBasalPattern,
PumpHistoryEntryType.CalBGForPH,
PumpHistoryEntryType.ChangeRemoteId,
PumpHistoryEntryType.ClearAlarm,
PumpHistoryEntryType.ChangeAlarmNotifyMode,
PumpHistoryEntryType.EnableDisableRemote,
PumpHistoryEntryType.BGReceived,
PumpHistoryEntryType.SensorAlert,
PumpHistoryEntryType.ChangeTimeFormat,
PumpHistoryEntryType.ChangeReservoirWarningTime,
PumpHistoryEntryType.ChangeBolusReminderEnable,
PumpHistoryEntryType.SetBolusReminderTime,
PumpHistoryEntryType.ChangeChildBlockEnable,
PumpHistoryEntryType.BolusWizardEnabled,
PumpHistoryEntryType.ChangeBGReminderOffset,
PumpHistoryEntryType.ChangeAlarmClockTime,
PumpHistoryEntryType.ChangeMeterId,
PumpHistoryEntryType.ChangeParadigmID,
PumpHistoryEntryType.JournalEntryMealMarker,
PumpHistoryEntryType.JournalEntryExerciseMarker,
PumpHistoryEntryType.DeleteBolusReminderTime,
PumpHistoryEntryType.SetAutoOff,
PumpHistoryEntryType.SelfTest,
PumpHistoryEntryType.JournalEntryInsulinMarker,
PumpHistoryEntryType.JournalEntryOtherMarker,
PumpHistoryEntryType.BolusWizardSetup512,
PumpHistoryEntryType.ChangeSensorSetup2,
PumpHistoryEntryType.ChangeSensorAlarmSilenceConfig,
PumpHistoryEntryType.ChangeSensorRateOfChangeAlertSetup,
PumpHistoryEntryType.ChangeBolusScrollStepSize,
PumpHistoryEntryType.BolusWizardSetup,
PumpHistoryEntryType.ChangeVariableBolus,
PumpHistoryEntryType.ChangeAudioBolus,
PumpHistoryEntryType.ChangeBGReminderEnable,
PumpHistoryEntryType.ChangeAlarmClockEnable,
PumpHistoryEntryType.BolusReminder,
PumpHistoryEntryType.DeleteAlarmClockTime,
PumpHistoryEntryType.ChangeCarbUnits,
PumpHistoryEntryType.ChangeWatchdogEnable,
PumpHistoryEntryType.ChangeOtherDeviceID,
PumpHistoryEntryType.ReadOtherDevicesIDs,
PumpHistoryEntryType.BGReceived512,
PumpHistoryEntryType.SensorStatus,
PumpHistoryEntryType.ReadCaptureEventEnabled,
PumpHistoryEntryType.ChangeCaptureEventEnable,
PumpHistoryEntryType.ReadOtherDevicesStatus -> RecordDecodeStatus.OK
PumpHistoryEntryType.Sensor_0x54, PumpHistoryEntryType.Sensor_0x55, PumpHistoryEntryType.Sensor_0x51, PumpHistoryEntryType.Sensor_0x52, PumpHistoryEntryType.EventUnknown_MM512_0x2e -> { PumpHistoryEntryType.Sensor_0x54,
PumpHistoryEntryType.Sensor_0x55,
PumpHistoryEntryType.Sensor_0x51,
PumpHistoryEntryType.Sensor_0x52,
PumpHistoryEntryType.EventUnknown_MM512_0x2e -> {
aapsLogger.debug(LTag.PUMPBTCOMM, " -- ignored Unknown Pump Entry: $entry") aapsLogger.debug(LTag.PUMPBTCOMM, " -- ignored Unknown Pump Entry: $entry")
RecordDecodeStatus.Ignored RecordDecodeStatus.Ignored
} }
PumpHistoryEntryType.UnabsorbedInsulin, PumpHistoryEntryType.UnabsorbedInsulin512 -> RecordDecodeStatus.Ignored PumpHistoryEntryType.UnabsorbedInsulin,
PumpHistoryEntryType.DailyTotals522, PumpHistoryEntryType.DailyTotals523, PumpHistoryEntryType.DailyTotals515, PumpHistoryEntryType.EndResultTotals -> decodeDailyTotals(entry) PumpHistoryEntryType.UnabsorbedInsulin512 -> RecordDecodeStatus.Ignored
PumpHistoryEntryType.ChangeBasalProfile_OldProfile, PumpHistoryEntryType.ChangeBasalProfile_NewProfile -> decodeBasalProfile(entry) PumpHistoryEntryType.DailyTotals522,
PumpHistoryEntryType.DailyTotals523,
PumpHistoryEntryType.DailyTotals515,
PumpHistoryEntryType.EndResultTotals -> decodeDailyTotals(entry)
PumpHistoryEntryType.ChangeBasalProfile_OldProfile,
PumpHistoryEntryType.ChangeBasalProfile_NewProfile -> decodeBasalProfile(entry)
PumpHistoryEntryType.BasalProfileStart -> decodeBasalProfileStart(entry) PumpHistoryEntryType.BasalProfileStart -> decodeBasalProfileStart(entry)
PumpHistoryEntryType.ChangeTime -> { PumpHistoryEntryType.ChangeTime -> {
@ -187,7 +242,16 @@ class MedtronicPumpHistoryDecoder @Inject constructor(
RecordDecodeStatus.OK RecordDecodeStatus.OK
} }
PumpHistoryEntryType.LowBattery, PumpHistoryEntryType.SuspendPump, PumpHistoryEntryType.ResumePump, PumpHistoryEntryType.Rewind, PumpHistoryEntryType.NoDeliveryAlarm, PumpHistoryEntryType.ChangeTempBasalType, PumpHistoryEntryType.ChangeMaxBolus, PumpHistoryEntryType.ChangeMaxBasal, PumpHistoryEntryType.ClearSettings, PumpHistoryEntryType.SaveSettings -> RecordDecodeStatus.OK PumpHistoryEntryType.LowBattery,
PumpHistoryEntryType.SuspendPump,
PumpHistoryEntryType.ResumePump,
PumpHistoryEntryType.Rewind,
PumpHistoryEntryType.NoDeliveryAlarm,
PumpHistoryEntryType.ChangeTempBasalType,
PumpHistoryEntryType.ChangeMaxBolus,
PumpHistoryEntryType.ChangeMaxBasal,
PumpHistoryEntryType.ClearSettings,
PumpHistoryEntryType.SaveSettings -> RecordDecodeStatus.OK
PumpHistoryEntryType.BolusWizard -> decodeBolusWizard(entry) PumpHistoryEntryType.BolusWizard -> decodeBolusWizard(entry)
PumpHistoryEntryType.BolusWizard512 -> decodeBolusWizard512(entry) PumpHistoryEntryType.BolusWizard512 -> decodeBolusWizard512(entry)
@ -345,10 +409,10 @@ class MedtronicPumpHistoryDecoder @Inject constructor(
entry.addDecodedData("amount", (ByteUtil.asUINT8(entry.getRawDataByIndex(5)) and 0x80 shl 1) + ByteUtil.asUINT8(entry.getRawDataByIndex(0))) // index moved from 1 -> 0 entry.addDecodedData("amount", (ByteUtil.asUINT8(entry.getRawDataByIndex(5)) and 0x80 shl 1) + ByteUtil.asUINT8(entry.getRawDataByIndex(0))) // index moved from 1 -> 0
} }
private fun decodeNoDeliveryAlarm(entry: PumpHistoryEntry) { // private fun decodeNoDeliveryAlarm(entry: PumpHistoryEntry) {
//rawtype = asUINT8(data[1]); // //rawtype = asUINT8(data[1]);
// not sure if this is actually NoDelivery Alarm? // // not sure if this is actually NoDelivery Alarm?
} // }
override fun postProcess() {} override fun postProcess() {}
@ -357,34 +421,25 @@ class MedtronicPumpHistoryDecoder @Inject constructor(
} }
private fun decodeBolus(entry: PumpHistoryEntry) { private fun decodeBolus(entry: PumpHistoryEntry) {
val bolus = BolusDTO() var bolus: BolusDTO?
val data = entry.head!! val data = entry.head!!
if (MedtronicDeviceType.isSameDevice(medtronicUtil.medtronicPumpModel!!, MedtronicDeviceType.Medtronic_523andHigher)) { if (MedtronicDeviceType.isSameDevice(medtronicUtil.medtronicPumpModel!!, MedtronicDeviceType.Medtronic_523andHigher)) {
bolus.requestedAmount = ByteUtil.toInt(data.get(0), data.get(1)) / 40.0 bolus = BolusDTO(atechDateTime = entry.atechDateTime,
bolus.deliveredAmount = ByteUtil.toInt(data.get(2), data.get(3)) / 40.0 requestedAmount = ByteUtil.toInt(data.get(0), data.get(1)) / 40.0,
deliveredAmount = ByteUtil.toInt(data.get(2), data.get(3)) / 40.0,
duration = data.get(6) * 30)
bolus.insulinOnBoard = ByteUtil.toInt(data.get(4), data.get(5)) / 40.0 bolus.insulinOnBoard = ByteUtil.toInt(data.get(4), data.get(5)) / 40.0
bolus.duration = data.get(6) * 30
} else { } else {
bolus.requestedAmount = ByteUtil.asUINT8(data.get(0)) / 10.0 bolus = BolusDTO(atechDateTime = entry.atechDateTime,
bolus.deliveredAmount = ByteUtil.asUINT8(data.get(1)) / 10.0 requestedAmount = ByteUtil.asUINT8(data.get(0)) / 10.0,
bolus.duration = ByteUtil.asUINT8(data.get(2)) * 30 deliveredAmount = ByteUtil.asUINT8(data.get(1)) / 10.0,
duration = ByteUtil.asUINT8(data.get(2)) * 30)
} }
bolus.bolusType = if (bolus.duration != null && bolus.duration!! > 0) PumpBolusType.Extended else PumpBolusType.Normal bolus.bolusType = if (bolus.duration > 0) PumpBolusType.Extended else PumpBolusType.Normal
bolus.atechDateTime = entry.atechDateTime
entry.addDecodedData("Object", bolus) entry.addDecodedData("Object", bolus)
entry.displayableValue = bolus.displayableValue entry.displayableValue = bolus.displayableValue
} }
// private fun decodeTempBasal(entry: PumpHistoryEntry) {
// if (tbrPreviousRecord == null) {
// // LOG.debug(this.tbrPreviousRecord.toString());
// tbrPreviousRecord = entry
// return
// }
// decodeTempBasal(tbrPreviousRecord, entry)
// tbrPreviousRecord = null
// }
fun decodeTempBasal(tbrPreviousRecord: PumpHistoryEntry, entry: PumpHistoryEntry) { fun decodeTempBasal(tbrPreviousRecord: PumpHistoryEntry, entry: PumpHistoryEntry) {
var tbrRate: PumpHistoryEntry? = null var tbrRate: PumpHistoryEntry? = null
var tbrDuration: PumpHistoryEntry? = null var tbrDuration: PumpHistoryEntry? = null
@ -399,19 +454,12 @@ class MedtronicPumpHistoryDecoder @Inject constructor(
tbrRate = tbrPreviousRecord tbrRate = tbrPreviousRecord
} }
// TempBasalPair tbr = new TempBasalPair(
// tbrRate.getHead()[0],
// tbrDuration.getHead()[0],
// (ByteUtil.asUINT8(tbrRate.getDatetime()[4]) >> 3) == 0);
val tbr = TempBasalPair( val tbr = TempBasalPair(
tbrRate.head!!.get(0), tbrRate.head!!.get(0),
tbrRate.body!!.get(0), tbrRate.body!!.get(0),
tbrDuration!!.head!!.get(0).toInt(), tbrDuration!!.head!!.get(0).toInt(),
ByteUtil.asUINT8(tbrRate.datetime!!.get(4)) shr 3 == 0) ByteUtil.asUINT8(tbrRate.datetime!!.get(4)) shr 3 == 0)
// System.out.println("TBR: amount=" + tbr.getInsulinRate() + ", duration=" + tbr.getDurationMinutes()
// // + " min. Packed: " + tbr.getValue()
// );
entry.addDecodedData("Object", tbr) entry.addDecodedData("Object", tbr)
entry.displayableValue = tbr.description entry.displayableValue = tbr.description
} }
@ -445,7 +493,7 @@ class MedtronicPumpHistoryDecoder @Inject constructor(
//LOG.debug("DT: {} {} {}", year, month, dayOfMonth); //LOG.debug("DT: {} {} {}", year, month, dayOfMonth);
if (dayOfMonth == 32) { if (dayOfMonth == 32) {
aapsLogger.warn(LTag.PUMPBTCOMM, String.format(Locale.ENGLISH, "Entry: Day 32 %s = [%s] %s", entry.entryType!!.name, aapsLogger.warn(LTag.PUMPBTCOMM, String.format(Locale.ENGLISH, "Entry: Day 32 %s = [%s] %s", entry.entryType.name,
ByteUtil.getHex(entry.rawData), entry)) ByteUtil.getHex(entry.rawData), entry))
} }
if (isEndResults(entry.entryType)) { if (isEndResults(entry.entryType)) {
@ -460,7 +508,10 @@ class MedtronicPumpHistoryDecoder @Inject constructor(
} }
private fun isEndResults(entryType: PumpHistoryEntryType?): Boolean { private fun isEndResults(entryType: PumpHistoryEntryType?): Boolean {
return entryType === PumpHistoryEntryType.EndResultTotals || entryType === PumpHistoryEntryType.DailyTotals515 || entryType === PumpHistoryEntryType.DailyTotals522 || entryType === PumpHistoryEntryType.DailyTotals523 return entryType === PumpHistoryEntryType.EndResultTotals ||
entryType === PumpHistoryEntryType.DailyTotals515 ||
entryType === PumpHistoryEntryType.DailyTotals522 ||
entryType === PumpHistoryEntryType.DailyTotals523
} }
private fun fix2DigitYear(year: Int): Int { private fun fix2DigitYear(year: Int): Int {
@ -474,13 +525,10 @@ class MedtronicPumpHistoryDecoder @Inject constructor(
} }
companion object { companion object {
private fun getFormattedValue(value: Float, decimals: Int): String { private fun getFormattedValue(value: Float, decimals: Int): String {
return String.format(Locale.ENGLISH, "%." + decimals + "f", value) return String.format(Locale.ENGLISH, "%." + decimals + "f", value)
} }
} }
init {
super.aapsLogger = aapsLogger
this.medtronicUtil = medtronicUtil
}
} }

View file

@ -19,12 +19,12 @@ import java.util.*
class PumpHistoryEntry : MedtronicHistoryEntry() { class PumpHistoryEntry : MedtronicHistoryEntry() {
@Expose @Expose
var entryType: PumpHistoryEntryType? = null var entryType: PumpHistoryEntryType = PumpHistoryEntryType.None
private set private set
override var opCode: Byte? = null override var opCode: Byte? = null
// this is set only when we have unknown entry... // this is set only when we have unknown entry...
get() = if (field == null) entryType!!.code else field get() = if (field == null) entryType.code else field
set(value) { set(value) {
field = value field = value
} }
@ -41,15 +41,19 @@ class PumpHistoryEntry : MedtronicHistoryEntry() {
sizes[0] = entryType.getHeadLength(medtronicDeviceType) sizes[0] = entryType.getHeadLength(medtronicDeviceType)
sizes[1] = entryType.dateLength sizes[1] = entryType.dateLength
sizes[2] = entryType.getBodyLength(medtronicDeviceType) sizes[2] = entryType.getBodyLength(medtronicDeviceType)
if (this.entryType != null && atechDateTime != 0L) generatePumpId() if (isEntryTypeSet() && atechDateTime != 0L) pumpId = generatePumpId()
} }
private fun generatePumpId() : Long { override fun generatePumpId() : Long {
return entryType!!.code + atechDateTime * 1000L return entryType.code + atechDateTime * 1000L
}
override fun isEntryTypeSet(): Boolean {
return this.entryType != PumpHistoryEntryType.None
} }
override val toStringStart: String override val toStringStart: String
get() = ("PumpHistoryEntry [type=" + StringUtil.getStringInLength(entryType!!.name, 20) + " [" get() = ("PumpHistoryEntry [type=" + StringUtil.getStringInLength(entryType.name, 20) + " ["
+ StringUtil.getStringInLength("" + opCode, 3) + ", 0x" + StringUtil.getStringInLength("" + opCode, 3) + ", 0x"
+ ByteUtil.shortHexString(opCode!!) + "]") + ByteUtil.shortHexString(opCode!!) + "]")
@ -65,16 +69,16 @@ class PumpHistoryEntry : MedtronicHistoryEntry() {
} }
override val entryTypeName: String override val entryTypeName: String
get() = entryType!!.name get() = entryType.name
override val dateLength: Int override val dateLength: Int
get() = entryType!!.dateLength get() = entryType.dateLength
override fun equals(other: Any?): Boolean { override fun equals(other: Any?): Boolean {
if (this === other) return true if (this === other) return true
if (other !is PumpHistoryEntry) return false if (other !is PumpHistoryEntry) return false
val that = other //as PumpHistoryEntry val that = other //as PumpHistoryEntry
return this.pumpId === that.pumpId return this.pumpId == that.pumpId
// return entryType == that.entryType && // // return entryType == that.entryType && //
// atechDateTime === that.atechDateTime // && // // atechDateTime === that.atechDateTime // && //
// Objects.equals(this.decodedData, that.decodedData); // Objects.equals(this.decodedData, that.decodedData);
@ -101,24 +105,26 @@ class PumpHistoryEntry : MedtronicHistoryEntry() {
class Comparator : java.util.Comparator<PumpHistoryEntry> { class Comparator : java.util.Comparator<PumpHistoryEntry> {
override fun compare(o1: PumpHistoryEntry, o2: PumpHistoryEntry): Int { override fun compare(o1: PumpHistoryEntry, o2: PumpHistoryEntry): Int {
val data = (o2.atechDateTime - o1.atechDateTime).toInt() val data = (o2.atechDateTime - o1.atechDateTime).toInt()
return if (data != 0) data else o2.entryType!!.code - o1.entryType!!.code return if (data != 0) data else o2.entryType.code - o1.entryType.code
} }
} }
override var pumpId: Long? = null override var pumpId: Long = 0L
get() { get() {
if (field==0L) {
field = generatePumpId() field = generatePumpId()
}
return field return field
} }
set(pumpId) { set(pumpId) {
super.pumpId = pumpId field = pumpId
} }
fun hasBolusChanged(entry: PumpHistoryEntry) : Boolean { fun hasBolusChanged(entry: PumpHistoryEntry) : Boolean {
if (entryType!=null && entryType == PumpHistoryEntryType.Bolus) { if (entryType == PumpHistoryEntryType.Bolus) {
val thisOne: BolusDTO = this.decodedData["Object"] as BolusDTO val thisOne: BolusDTO = this.decodedData["Object"] as BolusDTO
if (entry.entryType!=null && entry.entryType == PumpHistoryEntryType.Bolus) { if (entry.entryType == PumpHistoryEntryType.Bolus) {
val otherOne: BolusDTO = entry.decodedData["Object"] as BolusDTO val otherOne: BolusDTO = entry.decodedData["Object"] as BolusDTO
return (thisOne.value.equals(otherOne.value)) return (thisOne.value.equals(otherOne.value))
} else } else

View file

@ -22,8 +22,7 @@ class PumpHistoryResult(private val aapsLogger: AAPSLogger, searchEntry: PumpHis
var unprocessedEntries: List<PumpHistoryEntry> = ArrayList() var unprocessedEntries: List<PumpHistoryEntry> = ArrayList()
var validEntries: MutableList<PumpHistoryEntry> = ArrayList() var validEntries: MutableList<PumpHistoryEntry> = ArrayList()
fun addHistoryEntries(entries: List<PumpHistoryEntry> /*, page: Int*/) {
fun addHistoryEntries(entries: List<PumpHistoryEntry>, page: Int) {
unprocessedEntries = entries unprocessedEntries = entries
//aapsLogger.debug(LTag.PUMPCOMM,"PumpHistoryResult. Unprocessed entries: {}", MedtronicUtil.getGsonInstance().toJson(entries)); //aapsLogger.debug(LTag.PUMPCOMM,"PumpHistoryResult. Unprocessed entries: {}", MedtronicUtil.getGsonInstance().toJson(entries));
processEntries() processEntries()
@ -42,7 +41,7 @@ class PumpHistoryResult(private val aapsLogger: AAPSLogger, searchEntry: PumpHis
//Collections.sort(this.unprocessedEntries, new PumpHistoryEntry.Comparator()); //Collections.sort(this.unprocessedEntries, new PumpHistoryEntry.Comparator());
aapsLogger.debug(LTag.PUMPCOMM, "PE. PumpHistoryResult. Search entry date: " + searchEntry!!.atechDateTime) aapsLogger.debug(LTag.PUMPCOMM, "PE. PumpHistoryResult. Search entry date: " + searchEntry!!.atechDateTime)
val date = searchEntry.atechDateTime //val date = searchEntry.atechDateTime
for (unprocessedEntry in unprocessedEntries) { for (unprocessedEntry in unprocessedEntries) {
if (unprocessedEntry.equals(searchEntry)) { if (unprocessedEntry.equals(searchEntry)) {
//aapsLogger.debug(LTag.PUMPCOMM,"PE. Item found {}.", unprocessedEntry); //aapsLogger.debug(LTag.PUMPCOMM,"PE. Item found {}.", unprocessedEntry);
@ -60,7 +59,7 @@ class PumpHistoryResult(private val aapsLogger: AAPSLogger, searchEntry: PumpHis
SearchType.Date -> { SearchType.Date -> {
aapsLogger.debug(LTag.PUMPCOMM, "PE. Date search: Search date: " + searchDate) aapsLogger.debug(LTag.PUMPCOMM, "PE. Date search: Search date: " + searchDate)
for (unprocessedEntry in unprocessedEntries) { for (unprocessedEntry in unprocessedEntries) {
if (unprocessedEntry.atechDateTime == null || unprocessedEntry.atechDateTime == 0L) { if (unprocessedEntry.atechDateTime == 0L) {
aapsLogger.debug(LTag.PUMPCOMM, "PE. PumpHistoryResult. Search entry date: Entry with no date: $unprocessedEntry") aapsLogger.debug(LTag.PUMPCOMM, "PE. PumpHistoryResult. Search entry date: Entry with no date: $unprocessedEntry")
continue continue
} }
@ -99,11 +98,9 @@ class PumpHistoryResult(private val aapsLogger: AAPSLogger, searchEntry: PumpHis
val latestEntry: PumpHistoryEntry? val latestEntry: PumpHistoryEntry?
get() = if (validEntries.size == 0) null else validEntries[0] get() = if (validEntries.size == 0) null else validEntries[0]
// val isSearchRequired: Boolean // val isSearchRequired: Boolean
// get() = searchType != SearchType.None // get() = searchType != SearchType.None
internal enum class SearchType { internal enum class SearchType {
None, // None, //
LastEntry, // LastEntry, //

View file

@ -41,5 +41,11 @@ class GetHistoryPageCarelinkMessageBody : CarelinkLongMessageBody {
} }
val frameData: ByteArray val frameData: ByteArray
get() = ByteUtil.substring(data!!, 1, data!!.size - 1) get() {
return if (data == null) {
byteArrayOf()
} else {
ByteUtil.substring(data!!, 1, data!!.size - 1)
}
}
} }

View file

@ -1,6 +1,5 @@
package info.nightscout.androidaps.plugins.pump.medtronic.comm.ui package info.nightscout.androidaps.plugins.pump.medtronic.comm.ui
import info.nightscout.androidaps.interfaces.PumpDescription
import info.nightscout.androidaps.logging.AAPSLogger import info.nightscout.androidaps.logging.AAPSLogger
import info.nightscout.androidaps.logging.LTag import info.nightscout.androidaps.logging.LTag
import info.nightscout.androidaps.plugins.bus.RxBusWrapper import info.nightscout.androidaps.plugins.bus.RxBusWrapper
@ -55,9 +54,9 @@ class MedtronicUIPostprocessor @Inject constructor(
//aapsLogger.debug("D: basal profile on read: " + basalProfile); //aapsLogger.debug("D: basal profile on read: " + basalProfile);
try { try {
// TODO need to refactor if (basalProfile != null) {
val profilesByHour = basalProfile!!.getProfilesByHour(medtronicPumpPlugin.pumpDescription.pumpType) val profilesByHour = basalProfile.getProfilesByHour(medtronicPumpPlugin.pumpDescription.pumpType)
if (profilesByHour != null) { if (!BasalProfile.isBasalProfileByHourUndefined(profilesByHour)) {
medtronicPumpStatus.basalsByHour = profilesByHour medtronicPumpStatus.basalsByHour = profilesByHour
medtronicPumpStatus.basalProfileStatus = BasalProfileStatus.ProfileOK medtronicPumpStatus.basalProfileStatus = BasalProfileStatus.ProfileOK
//aapsLogger.debug("D: basal profile on read: basalsByHour: " + BasalProfile.getProfilesByHourToString(medtronicPumpStatus.basalsByHour)); //aapsLogger.debug("D: basal profile on read: basalsByHour: " + BasalProfile.getProfilesByHourToString(medtronicPumpStatus.basalsByHour));
@ -66,6 +65,7 @@ class MedtronicUIPostprocessor @Inject constructor(
uiTask.errorDescription = "No profile found." uiTask.errorDescription = "No profile found."
aapsLogger.error(LTag.PUMPCOMM, String.format(Locale.ENGLISH, "Basal Profile was NOT valid. [%s]", basalProfile.basalProfileToStringError())) aapsLogger.error(LTag.PUMPCOMM, String.format(Locale.ENGLISH, "Basal Profile was NOT valid. [%s]", basalProfile.basalProfileToStringError()))
} }
}
} catch (ex: Exception) { } catch (ex: Exception) {
aapsLogger.error(LTag.PUMPCOMM, String.format(Locale.ENGLISH, "Basal Profile was returned, but was invalid. [%s]", basalProfile!!.basalProfileToStringError())) aapsLogger.error(LTag.PUMPCOMM, String.format(Locale.ENGLISH, "Basal Profile was returned, but was invalid. [%s]", basalProfile!!.basalProfileToStringError()))
uiTask.responseType = MedtronicUIResponseType.Error uiTask.responseType = MedtronicUIResponseType.Error
@ -128,12 +128,16 @@ class MedtronicUIPostprocessor @Inject constructor(
private fun processTime(uiTask: MedtronicUITask) { private fun processTime(uiTask: MedtronicUITask) {
val clockDTO = uiTask.result as ClockDTO? val clockDTO = uiTask.result as ClockDTO?
val dur = Duration(clockDTO!!.pumpTime!!.toDateTime(DateTimeZone.UTC), if (clockDTO != null) {
clockDTO.localDeviceTime!!.toDateTime(DateTimeZone.UTC)) val dur = Duration(clockDTO.pumpTime.toDateTime(DateTimeZone.UTC),
clockDTO.localDeviceTime.toDateTime(DateTimeZone.UTC))
clockDTO.timeDifference = dur.standardSeconds.toInt() clockDTO.timeDifference = dur.standardSeconds.toInt()
medtronicUtil.pumpTime = clockDTO medtronicUtil.pumpTime = clockDTO
aapsLogger.debug(LTag.PUMP, "Pump Time: " + clockDTO.localDeviceTime + ", DeviceTime=" + clockDTO.pumpTime + // aapsLogger.debug(LTag.PUMP, "Pump Time: " + clockDTO.localDeviceTime + ", DeviceTime=" + clockDTO.pumpTime + //
", diff: " + dur.standardSeconds + " s") ", diff: " + dur.standardSeconds + " s")
} else {
aapsLogger.debug(LTag.PUMP, "Problem with returned data: " + medtronicUtil.gsonInstance.toJson(uiTask.result))
}
} }
private fun postProcessSettings(uiTask: MedtronicUITask) { private fun postProcessSettings(uiTask: MedtronicUITask) {

View file

@ -66,7 +66,7 @@ class MedtronicUITask {
MedtronicCommandType.GetRealTimeClock -> { MedtronicCommandType.GetRealTimeClock -> {
result = communicationManager.getPumpTime() result = communicationManager.getPumpTime()
medtronicUtil.pumpTime = null //medtronicUtil.pumpTime = null
} }
MedtronicCommandType.SetRealTimeClock -> { MedtronicCommandType.SetRealTimeClock -> {

View file

@ -68,7 +68,6 @@ class MedtronicHistoryData @Inject constructor(
private var gson: Gson = GsonBuilder().excludeFieldsWithoutExposeAnnotation().create() private var gson: Gson = GsonBuilder().excludeFieldsWithoutExposeAnnotation().create()
private var gsonCore: Gson = GsonBuilder().create() private var gsonCore: Gson = GsonBuilder().create()
/** /**
* Add New History entries * Add New History entries
* *
@ -81,12 +80,12 @@ class MedtronicHistoryData @Inject constructor(
if (!allPumpIds.contains(validEntry.pumpId)) { if (!allPumpIds.contains(validEntry.pumpId)) {
newEntries.add(validEntry) newEntries.add(validEntry)
} else { } else {
val entryByPumpId = getEntryByPumpId(validEntry.pumpId!!) val entryByPumpId = getEntryByPumpId(validEntry.pumpId)
if (entryByPumpId != null && entryByPumpId.hasBolusChanged(validEntry)) { if (entryByPumpId != null && entryByPumpId.hasBolusChanged(validEntry)) {
newEntries.add(validEntry) newEntries.add(validEntry)
allHistory.remove(entryByPumpId) allHistory.remove(entryByPumpId)
allPumpIds.remove(validEntry.pumpId!!); allPumpIds.remove(validEntry.pumpId);
} }
} }
} }
@ -96,7 +95,7 @@ class MedtronicHistoryData @Inject constructor(
private fun getEntryByPumpId(pumpId: Long): PumpHistoryEntry? { private fun getEntryByPumpId(pumpId: Long): PumpHistoryEntry? {
val findFirst = this.allHistory.stream() val findFirst = this.allHistory.stream()
.filter { f -> f.pumpId!! == pumpId } .filter { f -> f.pumpId == pumpId }
.findFirst() .findFirst()
return if (findFirst.isPresent()) findFirst.get() else null return if (findFirst.isPresent()) findFirst.get() else null
@ -192,7 +191,7 @@ class MedtronicHistoryData @Inject constructor(
lastIdUsed++ lastIdUsed++
pumpHistoryEntry.id = lastIdUsed pumpHistoryEntry.id = lastIdUsed
allHistory.add(pumpHistoryEntry) allHistory.add(pumpHistoryEntry)
allPumpIds.add(pumpHistoryEntry.pumpId!!) allPumpIds.add(pumpHistoryEntry.pumpId)
} }
} }
@ -210,7 +209,7 @@ class MedtronicHistoryData @Inject constructor(
for (pumpHistoryEntry in allHistory) { for (pumpHistoryEntry in allHistory) {
if (!pumpHistoryEntry.isAfter(dtRemove)) { if (!pumpHistoryEntry.isAfter(dtRemove)) {
removeList.add(pumpHistoryEntry) removeList.add(pumpHistoryEntry)
allPumpIds.remove(pumpHistoryEntry.pumpId!!) allPumpIds.remove(pumpHistoryEntry.pumpId)
} }
} }
allHistory.removeAll(removeList) allHistory.removeAll(removeList)
@ -241,7 +240,6 @@ class MedtronicHistoryData @Inject constructor(
return col != null && !col.isEmpty() return col != null && !col.isEmpty()
} }
fun isPumpSuspended(): Boolean { fun isPumpSuspended(): Boolean {
val items = getDataForPumpSuspends() val items = getDataForPumpSuspends()
showLogs("isPumpSuspended: ", gson.toJson(items)) showLogs("isPumpSuspended: ", gson.toJson(items))
@ -258,7 +256,6 @@ class MedtronicHistoryData @Inject constructor(
} else false } else false
} }
private fun getDataForPumpSuspends(): MutableList<PumpHistoryEntry> { private fun getDataForPumpSuspends(): MutableList<PumpHistoryEntry> {
val newAndAll: MutableList<PumpHistoryEntry> = mutableListOf() val newAndAll: MutableList<PumpHistoryEntry> = mutableListOf()
if (isCollectionNotEmpty(allHistory)) { if (isCollectionNotEmpty(allHistory)) {
@ -429,7 +426,6 @@ class MedtronicHistoryData @Inject constructor(
} }
} }
private fun uploadCareportalEventIfFoundInHistory(historyRecord: PumpHistoryEntry, eventSP: String, eventType: DetailedBolusInfo.EventType) { private fun uploadCareportalEventIfFoundInHistory(historyRecord: PumpHistoryEntry, eventSP: String, eventType: DetailedBolusInfo.EventType) {
val lastPrimeFromAAPS = sp.getLong(eventSP, 0L) val lastPrimeFromAAPS = sp.getLong(eventSP, 0L)
if (historyRecord.atechDateTime != lastPrimeFromAAPS) { if (historyRecord.atechDateTime != lastPrimeFromAAPS) {
@ -448,7 +444,6 @@ class MedtronicHistoryData @Inject constructor(
} }
} }
private fun processTDDs(tddsIn: MutableList<PumpHistoryEntry>) { private fun processTDDs(tddsIn: MutableList<PumpHistoryEntry>) {
val tdds = filterTDDs(tddsIn) val tdds = filterTDDs(tddsIn)
@ -470,14 +465,12 @@ class MedtronicHistoryData @Inject constructor(
} }
} }
private enum class ProcessHistoryRecord(val description: String) { private enum class ProcessHistoryRecord(val description: String) {
Bolus("Bolus"), Bolus("Bolus"),
TBR("TBR"), TBR("TBR"),
Suspend("Suspend"); Suspend("Suspend");
} }
private fun processBolusEntries(entryList: MutableList<PumpHistoryEntry>) { private fun processBolusEntries(entryList: MutableList<PumpHistoryEntry>) {
val boluses = pumpSyncStorage.getBoluses() val boluses = pumpSyncStorage.getBoluses()
@ -497,7 +490,7 @@ class MedtronicHistoryData @Inject constructor(
addExtendedBolus(bolus, bolusDTO, multiwave); addExtendedBolus(bolus, bolusDTO, multiwave);
} }
val deliveredAmount: Double = if (multiwave) bolusDTO.immediateAmount!! else bolusDTO.deliveredAmount!! val deliveredAmount: Double = if (multiwave) bolusDTO.immediateAmount!! else bolusDTO.deliveredAmount
var temporaryId: Long? = null var temporaryId: Long? = null
@ -532,7 +525,7 @@ class MedtronicHistoryData @Inject constructor(
tryToGetByLocalTime(bolus.atechDateTime), tryToGetByLocalTime(bolus.atechDateTime),
deliveredAmount, deliveredAmount,
type, type,
bolus.pumpId!!, bolus.pumpId,
medtronicPumpStatus.pumpType, medtronicPumpStatus.pumpType,
medtronicPumpStatus.serialNumber!!) medtronicPumpStatus.serialNumber!!)
@ -545,25 +538,23 @@ class MedtronicHistoryData @Inject constructor(
} }
} }
private fun addExtendedBolus(bolus: PumpHistoryEntry, bolusDTO: BolusDTO, isMultiwave: Boolean) { private fun addExtendedBolus(bolus: PumpHistoryEntry, bolusDTO: BolusDTO, isMultiwave: Boolean) {
val durationMs : Long = bolusDTO.duration!! * 60L * 1000L val durationMs: Long = bolusDTO.duration * 60L * 1000L
val result = pumpSync.syncExtendedBolusWithPumpId( val result = pumpSync.syncExtendedBolusWithPumpId(
tryToGetByLocalTime(bolus.atechDateTime), tryToGetByLocalTime(bolus.atechDateTime),
bolusDTO.deliveredAmount!!, bolusDTO.deliveredAmount,
durationMs, durationMs,
false, false,
bolus.pumpId!!, bolus.pumpId,
medtronicPumpStatus.pumpType, medtronicPumpStatus.pumpType,
medtronicPumpStatus.serialNumber!!) medtronicPumpStatus.serialNumber!!)
aapsLogger.debug(LTag.PUMP, String.format(Locale.ENGLISH, "syncExtendedBolusWithPumpId [date=%d, amount=%.2f, duration=%d, pumpId=%d, pumpSerial=%s, multiwave=%b] - Result: %b", aapsLogger.debug(LTag.PUMP, String.format(Locale.ENGLISH, "syncExtendedBolusWithPumpId [date=%d, amount=%.2f, duration=%d, pumpId=%d, pumpSerial=%s, multiwave=%b] - Result: %b",
bolus.atechDateTime, bolusDTO.deliveredAmount!!, bolusDTO.duration, bolus.pumpId, bolus.atechDateTime, bolusDTO.deliveredAmount, bolusDTO.duration, bolus.pumpId,
medtronicPumpStatus.serialNumber!!, isMultiwave, result)) medtronicPumpStatus.serialNumber!!, isMultiwave, result))
} }
private fun addCarbs(bolus: PumpHistoryEntry) { private fun addCarbs(bolus: PumpHistoryEntry) {
if (bolus.containsDecodedData("Estimate")) { if (bolus.containsDecodedData("Estimate")) {
val bolusWizard = bolus.decodedData["Estimate"] as BolusWizardDTO val bolusWizard = bolus.decodedData["Estimate"] as BolusWizardDTO
@ -573,12 +564,11 @@ class MedtronicHistoryData @Inject constructor(
bolusWizard.carbs.toDouble(), bolusWizard.carbs.toDouble(),
medtronicPumpStatus.pumpType, medtronicPumpStatus.pumpType,
medtronicPumpStatus.serialNumber!!, medtronicPumpStatus.serialNumber!!,
bolus.pumpId!! bolus.pumpId
)) ))
} }
} }
private fun processTBREntries(entryList: MutableList<PumpHistoryEntry>) { private fun processTBREntries(entryList: MutableList<PumpHistoryEntry>) {
Collections.reverse(entryList) Collections.reverse(entryList)
val tbr = entryList[0].getDecodedDataEntry("Object") as TempBasalPair? val tbr = entryList[0].getDecodedDataEntry("Object") as TempBasalPair?
@ -703,21 +693,16 @@ class MedtronicHistoryData @Inject constructor(
} // collection } // collection
} }
fun isTBRActive(dbEntry: PumpDbEntry): Boolean { fun isTBRActive(dbEntry: PumpDbEntry): Boolean {
return isTBRActive(dbEntry.date, dbEntry.tbrData!!.durationInMinutes) return isTBRActive(dbEntry.date, dbEntry.tbrData!!.durationInMinutes)
} }
fun isTBRActive(startTimestamp: Long, durationMin: Int): Boolean { fun isTBRActive(startTimestamp: Long, durationMin: Int): Boolean {
val endDate = startTimestamp + (durationMin * 60 * 1000) val endDate = startTimestamp + (durationMin * 60 * 1000)
return (endDate > System.currentTimeMillis()) return (endDate > System.currentTimeMillis())
} }
/** /**
* findDbEntry - finds Db entries in database, while theoretically this should have same dateTime they * findDbEntry - finds Db entries in database, while theoretically this should have same dateTime they
* don't. Entry on pump is few seconds before treatment in AAPS, and on manual boluses on pump there * don't. Entry on pump is few seconds before treatment in AAPS, and on manual boluses on pump there
@ -788,7 +773,6 @@ class MedtronicHistoryData @Inject constructor(
return null return null
} }
private fun processSuspends(tempBasalProcessList: List<TempBasalProcessDTO>) { private fun processSuspends(tempBasalProcessList: List<TempBasalProcessDTO>) {
for (tempBasalProcess in tempBasalProcessList) { for (tempBasalProcess in tempBasalProcessList) {
@ -798,18 +782,17 @@ class MedtronicHistoryData @Inject constructor(
tempBasalProcess.duration * 60 * 1000L, tempBasalProcess.duration * 60 * 1000L,
true, true,
PumpSync.TemporaryBasalType.PUMP_SUSPEND, PumpSync.TemporaryBasalType.PUMP_SUSPEND,
tempBasalProcess.itemOne.pumpId!!, tempBasalProcess.itemOne.pumpId,
medtronicPumpStatus.pumpType, medtronicPumpStatus.pumpType,
medtronicPumpStatus.serialNumber!!) medtronicPumpStatus.serialNumber!!)
aapsLogger.debug(LTag.PUMP, String.format(Locale.ENGLISH, "processSuspends::syncTemporaryBasalWithPumpId [date=%d, rate=%.2f, duration=%d, pumpId=%d, pumpSerial=%s] - Result: %b", aapsLogger.debug(LTag.PUMP, String.format(Locale.ENGLISH, "processSuspends::syncTemporaryBasalWithPumpId [date=%d, rate=%.2f, duration=%d, pumpId=%d, pumpSerial=%s] - Result: %b",
tempBasalProcess.itemOne.atechDateTime, 0.0, tempBasalProcess.duration, tempBasalProcess.itemOne.pumpId!!, tempBasalProcess.itemOne.atechDateTime, 0.0, tempBasalProcess.duration, tempBasalProcess.itemOne.pumpId,
medtronicPumpStatus.serialNumber!!, result)) medtronicPumpStatus.serialNumber!!, result))
} }
} }
// suspend/resume // suspend/resume
// no_delivery/prime & rewind/prime // no_delivery/prime & rewind/prime
private fun getSuspendRecords(): MutableList<TempBasalProcessDTO> { private fun getSuspendRecords(): MutableList<TempBasalProcessDTO> {
@ -822,7 +805,6 @@ class MedtronicHistoryData @Inject constructor(
return outList return outList
} }
private fun getSuspendResumeRecordsList(): List<TempBasalProcessDTO> { private fun getSuspendResumeRecordsList(): List<TempBasalProcessDTO> {
val filteredItems = getFilteredItems(newHistory, // val filteredItems = getFilteredItems(newHistory, //
setOf(PumpHistoryEntryType.SuspendPump, PumpHistoryEntryType.ResumePump)) setOf(PumpHistoryEntryType.SuspendPump, PumpHistoryEntryType.ResumePump))
@ -875,7 +857,6 @@ class MedtronicHistoryData @Inject constructor(
return outList return outList
} }
private fun getNoDeliveryRewindPrimeRecordsList(): List<TempBasalProcessDTO> { private fun getNoDeliveryRewindPrimeRecordsList(): List<TempBasalProcessDTO> {
val primeItems: MutableList<PumpHistoryEntry> = getFilteredItems(newHistory, // val primeItems: MutableList<PumpHistoryEntry> = getFilteredItems(newHistory, //
setOf(PumpHistoryEntryType.Prime)) setOf(PumpHistoryEntryType.Prime))
@ -964,7 +945,6 @@ class MedtronicHistoryData @Inject constructor(
return DateTimeUtil.toMillisFromATD(atechDateTime) return DateTimeUtil.toMillisFromATD(atechDateTime)
} }
private fun getTDDType(): PumpHistoryEntryType { private fun getTDDType(): PumpHistoryEntryType {
return if (medtronicUtil.medtronicPumpModel == null) { return if (medtronicUtil.medtronicPumpModel == null) {
PumpHistoryEntryType.EndResultTotals PumpHistoryEntryType.EndResultTotals
@ -984,14 +964,12 @@ class MedtronicHistoryData @Inject constructor(
} }
} }
fun hasBasalProfileChanged(): Boolean { fun hasBasalProfileChanged(): Boolean {
val filteredItems: List<PumpHistoryEntry?> = getFilteredItems(PumpHistoryEntryType.ChangeBasalProfile_NewProfile) val filteredItems: List<PumpHistoryEntry?> = getFilteredItems(PumpHistoryEntryType.ChangeBasalProfile_NewProfile)
aapsLogger.debug(LTag.PUMP, "hasBasalProfileChanged. Items: " + gson.toJson(filteredItems)) aapsLogger.debug(LTag.PUMP, "hasBasalProfileChanged. Items: " + gson.toJson(filteredItems))
return filteredItems.size > 0 return filteredItems.size > 0
} }
fun processLastBasalProfileChange(pumpType: PumpType, mdtPumpStatus: MedtronicPumpStatus) { fun processLastBasalProfileChange(pumpType: PumpType, mdtPumpStatus: MedtronicPumpStatus) {
val filteredItems: List<PumpHistoryEntry> = getFilteredItems(PumpHistoryEntryType.ChangeBasalProfile_NewProfile) val filteredItems: List<PumpHistoryEntry> = getFilteredItems(PumpHistoryEntryType.ChangeBasalProfile_NewProfile)
aapsLogger.debug(LTag.PUMP, "processLastBasalProfileChange. Items: $filteredItems") aapsLogger.debug(LTag.PUMP, "processLastBasalProfileChange. Items: $filteredItems")
@ -1085,12 +1063,11 @@ class MedtronicHistoryData @Inject constructor(
return outList return outList
} }
private val logPrefix: String private val logPrefix: String
get() = "MedtronicHistoryData::" get() = "MedtronicHistoryData::"
companion object { companion object {
/** /**
* Double bolus debug. We seem to have small problem with double Boluses (or sometimes also missing boluses * Double bolus debug. We seem to have small problem with double Boluses (or sometimes also missing boluses
* from history. This flag turns on debugging for that (default is off=false)... Debugging is pretty detailed, * from history. This flag turns on debugging for that (default is off=false)... Debugging is pretty detailed,

View file

@ -291,9 +291,8 @@ class BasalProfile {
return true return true
} }
companion object { companion object {
const val MAX_RAW_DATA_SIZE = 48 * 3 + 1 const val MAX_RAW_DATA_SIZE = 48 * 3 + 1
private const val DEBUG_BASALPROFILE = false private const val DEBUG_BASALPROFILE = false
@ -310,5 +309,15 @@ class BasalProfile {
} }
return stringBuilder.toString() return stringBuilder.toString()
} }
@JvmStatic
fun isBasalProfileByHourUndefined(basalByHour: DoubleArray): Boolean {
for (i in 0..23) {
if (basalByHour[i] > 0.0) {
return false;
}
}
return true
}
} }
} }

View file

@ -30,19 +30,24 @@ import info.nightscout.androidaps.plugins.pump.medtronic.defs.PumpBolusType
* *
* Author: Andy {andy@atech-software.com} * Author: Andy {andy@atech-software.com}
*/ */
class BolusDTO : PumpTimeStampedRecord() { class BolusDTO constructor(atechDateTime: Long,
@Expose var requestedAmount: Double,
@Expose var deliveredAmount: Double,
@Expose var duration: Int = 0
)
: PumpTimeStampedRecord(atechDateTime) {
@Expose // @Expose
var requestedAmount: Double? = null // var requestedAmount: Double? = null
//
@Expose // @Expose
var deliveredAmount: Double? = null // var deliveredAmount: Double? = null
@Expose @Expose
var immediateAmount: Double? = null // when Multiwave this is used var immediateAmount: Double? = null // when Multiwave this is used
@Expose // @Expose
var duration: Int? = null // var duration: Int? = null
@Expose @Expose
var bolusType: PumpBolusType? = null var bolusType: PumpBolusType? = null
@ -51,7 +56,7 @@ class BolusDTO : PumpTimeStampedRecord() {
private val durationString: String private val durationString: String
get() { get() {
var minutes = duration!! var minutes = duration
val h = minutes / 60 val h = minutes / 60
minutes -= h * 60 minutes -= h * 60
return StringUtil.getLeadingZero(h, 2) + ":" + StringUtil.getLeadingZero(minutes, 2) return StringUtil.getLeadingZero(h, 2) + ":" + StringUtil.getLeadingZero(minutes, 2)
@ -59,22 +64,22 @@ class BolusDTO : PumpTimeStampedRecord() {
val value: String val value: String
get() = if (bolusType === PumpBolusType.Normal || bolusType === PumpBolusType.Audio) { get() = if (bolusType === PumpBolusType.Normal || bolusType === PumpBolusType.Audio) {
getFormattedDecimal(deliveredAmount!!) getFormattedDecimal(deliveredAmount)
} else if (bolusType === PumpBolusType.Extended) { } else if (bolusType === PumpBolusType.Extended) {
String.format("AMOUNT_SQUARE=%s;DURATION=%s", getFormattedDecimal(deliveredAmount!!), String.format("AMOUNT_SQUARE=%s;DURATION=%s", getFormattedDecimal(deliveredAmount),
durationString) durationString)
} else { } else {
String.format("AMOUNT=%s;AMOUNT_SQUARE=%s;DURATION=%s", getFormattedDecimal(immediateAmount!!), String.format("AMOUNT=%s;AMOUNT_SQUARE=%s;DURATION=%s", getFormattedDecimal(immediateAmount!!),
getFormattedDecimal(deliveredAmount!!), durationString) getFormattedDecimal(deliveredAmount), durationString)
} }
val displayableValue: String val displayableValue: String
get() { get() {
var value = value var valueTemp = value
value = value!!.replace("AMOUNT_SQUARE=", "Amount Square: ") valueTemp = valueTemp.replace("AMOUNT_SQUARE=", "Amount Square: ")
value = value.replace("AMOUNT=", "Amount: ") valueTemp = valueTemp.replace("AMOUNT=", "Amount: ")
value = value.replace("DURATION=", "Duration: ") valueTemp = valueTemp.replace("DURATION=", "Duration: ")
return value return valueTemp
} }
override fun getFormattedDecimal(value: Double): String { override fun getFormattedDecimal(value: Double): String {

View file

@ -5,8 +5,9 @@ import org.joda.time.LocalDateTime
/** /**
* Created by andy on 2/27/19. * Created by andy on 2/27/19.
*/ */
class ClockDTO { class ClockDTO constructor(var localDeviceTime: LocalDateTime,
var localDeviceTime: LocalDateTime? = null var pumpTime: LocalDateTime) {
var pumpTime: LocalDateTime? = null // var localDeviceTime: LocalDateTime? = null
// var pumpTime: LocalDateTime? = null
var timeDifference = 0 var timeDifference = 0
} }

View file

@ -5,10 +5,10 @@ import info.nightscout.androidaps.plugins.pump.common.utils.StringUtil
/** /**
* Created by andy on 6/2/18. * Created by andy on 6/2/18.
*/ */
open class PumpTimeStampedRecord { open class PumpTimeStampedRecord constructor(var atechDateTime: Long = 0) {
var decimalPrecission = 2 var decimalPrecission = 2
var atechDateTime: Long = 0 // var atechDateTime: Long = 0
open fun getFormattedDecimal(value: Double): String? { open fun getFormattedDecimal(value: Double): String? {
return StringUtil.getFormatedValueUS(value, decimalPrecission) return StringUtil.getFormatedValueUS(value, decimalPrecission)

View file

@ -12,7 +12,7 @@ class TempBasalProcessDTO constructor(var itemOne: PumpHistoryEntry,
get() = itemOne.atechDateTime get() = itemOne.atechDateTime
val pumpId: Long val pumpId: Long
get() = itemOne.pumpId!! get() = itemOne.pumpId
val duration: Int val duration: Int
get() = if (itemTwo == null) { get() = if (itemTwo == null) {

View file

@ -54,7 +54,7 @@ class MedtronicHistoryActivity : DaggerActivity() {
filteredHistoryList.addAll(list) filteredHistoryList.addAll(list)
} else { } else {
for (pumpHistoryEntry in list) { for (pumpHistoryEntry in list) {
if (pumpHistoryEntry.entryType!!.group === group) { if (pumpHistoryEntry.entryType.group === group) {
filteredHistoryList.add(pumpHistoryEntry) filteredHistoryList.add(pumpHistoryEntry)
} }
} }
@ -159,7 +159,7 @@ class MedtronicHistoryActivity : DaggerActivity() {
val record = historyList[position] val record = historyList[position]
//if (record != null) { //if (record != null) {
holder.timeView.text = record.dateTimeString holder.timeView.text = record.dateTimeString
holder.typeView.text = record.entryType!!.description holder.typeView.text = record.entryType.description
holder.valueView.text = record.displayableValue holder.valueView.text = record.displayableValue
//} //}
} }

View file

@ -39,7 +39,7 @@ class RileyLinkMedtronicService // This empty constructor must be kept, otherwi
private val mBinder: IBinder = LocalBinder() private val mBinder: IBinder = LocalBinder()
private var serialChanged = false private var serialChanged = false
private var frequencies: Array<String?>? = null lateinit var frequencies: Array<String>
private var rileyLinkAddress: String? = null private var rileyLinkAddress: String? = null
private var rileyLinkAddressChanged = false private var rileyLinkAddressChanged = false
private var encodingType: RileyLinkEncodingType? = null private var encodingType: RileyLinkEncodingType? = null
@ -68,9 +68,9 @@ class RileyLinkMedtronicService // This empty constructor must be kept, otherwi
* If you have customized RileyLinkServiceData you need to override this * If you have customized RileyLinkServiceData you need to override this
*/ */
override fun initRileyLinkServiceData() { override fun initRileyLinkServiceData() {
frequencies = arrayOfNulls(2) frequencies = arrayOf()
frequencies!![0] = resourceHelper.gs(R.string.key_medtronic_pump_frequency_us_ca) frequencies[0] = resourceHelper.gs(R.string.key_medtronic_pump_frequency_us_ca)
frequencies!![1] = resourceHelper.gs(R.string.key_medtronic_pump_frequency_worldwide) frequencies[1] = resourceHelper.gs(R.string.key_medtronic_pump_frequency_worldwide)
rileyLinkServiceData.targetDevice = RileyLinkTargetDevice.MedtronicPump rileyLinkServiceData.targetDevice = RileyLinkTargetDevice.MedtronicPump
setPumpIDString(sp.getString(MedtronicConst.Prefs.PumpSerial, "000000")) setPumpIDString(sp.getString(MedtronicConst.Prefs.PumpSerial, "000000"))
@ -169,12 +169,12 @@ class RileyLinkMedtronicService // This empty constructor must be kept, otherwi
medtronicPumpStatus.errorDescription = resourceHelper.gs(R.string.medtronic_error_pump_frequency_not_set) medtronicPumpStatus.errorDescription = resourceHelper.gs(R.string.medtronic_error_pump_frequency_not_set)
return false return false
} else { } else {
if (pumpFrequency != frequencies!![0] && pumpFrequency != frequencies!![1]) { if (pumpFrequency != frequencies[0] && pumpFrequency != frequencies[1]) {
medtronicPumpStatus.errorDescription = resourceHelper.gs(R.string.medtronic_error_pump_frequency_invalid) medtronicPumpStatus.errorDescription = resourceHelper.gs(R.string.medtronic_error_pump_frequency_invalid)
return false return false
} else { } else {
medtronicPumpStatus.pumpFrequency = pumpFrequency medtronicPumpStatus.pumpFrequency = pumpFrequency
val isFrequencyUS = pumpFrequency == frequencies!![0] val isFrequencyUS = pumpFrequency == frequencies[0]
val newTargetFrequency = if (isFrequencyUS) // val newTargetFrequency = if (isFrequencyUS) //
RileyLinkTargetFrequency.Medtronic_US else RileyLinkTargetFrequency.Medtronic_WorldWide RileyLinkTargetFrequency.Medtronic_US else RileyLinkTargetFrequency.Medtronic_WorldWide
if (rileyLinkServiceData.rileyLinkTargetFrequency != newTargetFrequency) { if (rileyLinkServiceData.rileyLinkTargetFrequency != newTargetFrequency) {