- kotlin !! refactorings
This commit is contained in:
parent
59a3bf8883
commit
921302bdbf
|
@ -1,5 +1,6 @@
|
|||
package info.nightscout.androidaps.db
|
||||
|
||||
@Deprecated("This class is not needed for new database anymore")
|
||||
interface DbObjectBase {
|
||||
|
||||
fun getDate(): Long
|
||||
|
|
|
@ -296,13 +296,13 @@ class MedtronicFragment : DaggerFragment() {
|
|||
val bolus = medtronicPumpStatus.lastBolusAmount
|
||||
val bolusTime = medtronicPumpStatus.lastBolusTime
|
||||
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 unit = resourceHelper.gs(R.string.insulin_unit_shortname)
|
||||
val ago = when {
|
||||
agoMsc < 60 * 1000 -> resourceHelper.gs(R.string.medtronic_pump_connected_now)
|
||||
bolusMinAgo < 60 -> dateUtil.minAgo(resourceHelper, medtronicPumpStatus.lastBolusTime!!.time)
|
||||
else -> dateUtil.hourAgo(medtronicPumpStatus.lastBolusTime!!.time, resourceHelper)
|
||||
bolusMinAgo < 60 -> dateUtil.minAgo(resourceHelper, bolusTime.time)
|
||||
else -> dateUtil.hourAgo(bolusTime.time, resourceHelper)
|
||||
}
|
||||
binding.lastBolus.text = resourceHelper.gs(R.string.mdt_last_bolus, bolus, unit, ago)
|
||||
} else {
|
||||
|
@ -315,9 +315,9 @@ class MedtronicFragment : DaggerFragment() {
|
|||
|
||||
// TBR
|
||||
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);
|
||||
}
|
||||
binding.tempBasal.text = tbrStr
|
||||
|
|
|
@ -303,7 +303,7 @@ class MedtronicPumpPlugin @Inject constructor(
|
|||
override fun getPumpStatus(reason: String) {
|
||||
var needRefresh = true
|
||||
if (firstRun) {
|
||||
needRefresh = initializePump(!isRefresh)
|
||||
needRefresh = initializePump() /*!isRefresh*/
|
||||
} else {
|
||||
refreshAnyStatusThatNeedsToBeRefreshed()
|
||||
}
|
||||
|
@ -401,7 +401,7 @@ class MedtronicPumpPlugin @Inject constructor(
|
|||
rxBus.send(EventRefreshButtonState(enabled))
|
||||
}
|
||||
|
||||
private fun initializePump(realInit: Boolean): Boolean {
|
||||
private fun initializePump(): Boolean {
|
||||
if (rileyLinkMedtronicService == null) return false
|
||||
aapsLogger.info(LTag.PUMP, logPrefix + "initializePump - start")
|
||||
rileyLinkMedtronicService!!.deviceCommunicationManager.setDoWakeUpBeforeCommand(false)
|
||||
|
@ -562,7 +562,7 @@ class MedtronicPumpPlugin @Inject constructor(
|
|||
if (clock == null) return
|
||||
val timeDiff = Math.abs(clock.timeDifference)
|
||||
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))
|
||||
rileyLinkMedtronicService!!.medtronicUIComm.executeCommand(MedtronicCommandType.SetRealTimeClock)
|
||||
if (clock.timeDifference == 0) {
|
||||
|
@ -570,7 +570,7 @@ class MedtronicPumpPlugin @Inject constructor(
|
|||
rxBus.send(EventNewNotification(notification))
|
||||
}
|
||||
} 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))
|
||||
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))
|
||||
medtronicHistoryData.setIsInInit(false)
|
||||
// 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);
|
||||
|
|
|
@ -35,7 +35,6 @@ import org.joda.time.LocalDateTime
|
|||
import java.util.*
|
||||
import javax.inject.Inject
|
||||
import javax.inject.Singleton
|
||||
import kotlin.jvm.Throws
|
||||
|
||||
/**
|
||||
* Original file created by geoff on 5/30/16.
|
||||
|
@ -266,8 +265,7 @@ class MedtronicCommunicationManager // This empty constructor must be kept, oth
|
|||
while (!done) {
|
||||
// examine current response for problems.
|
||||
val frameData = currentResponse.frameData
|
||||
if (frameData != null && frameData.size > 0
|
||||
&& currentResponse.frameNumber == expectedFrameNum) {
|
||||
if (frameData.size > 0 && currentResponse.frameNumber == expectedFrameNum) {
|
||||
// success! got a frame.
|
||||
if (frameData.size != 64) {
|
||||
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
|
||||
}
|
||||
} else {
|
||||
if (frameData == null) {
|
||||
if (frameData.size == 0) {
|
||||
aapsLogger.error(LTag.PUMPCOMM, "null frame data, retrying")
|
||||
} else if (currentResponse.frameNumber != 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()
|
||||
val medtronicHistoryEntries = medtronicPumpHistoryDecoder.processPageAndCreateRecords(rawHistoryPage)
|
||||
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))
|
||||
if (pumpTotalResult.isSearchFinished) {
|
||||
medtronicPumpStatus.pumpDeviceState = PumpDeviceState.Sleeping
|
||||
|
@ -507,8 +505,6 @@ class MedtronicCommunicationManager // This empty constructor must be kept, oth
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
fun getBasalProfile(): BasalProfile? {
|
||||
|
||||
// wakeUp
|
||||
|
@ -552,7 +548,7 @@ class MedtronicCommunicationManager // This empty constructor must be kept, oth
|
|||
}
|
||||
|
||||
|
||||
aapsLogger.debug(LTag.PUMPCOMM,"End Response: {}", ByteUtil.getHex(data))
|
||||
aapsLogger.debug(LTag.PUMPCOMM, "End Response: {}", ByteUtil.getHex(data))
|
||||
|
||||
var basalProfile: BasalProfile? = medtronicConverter.decodeBasalProfile(medtronicPumpPlugin.pumpDescription.pumpType, data)
|
||||
// checkResponseRawContent(data, commandType) {
|
||||
|
@ -593,26 +589,26 @@ class MedtronicCommunicationManager // This empty constructor must be kept, oth
|
|||
}
|
||||
|
||||
fun getPumpTime(): ClockDTO? {
|
||||
val clockDTO = ClockDTO()
|
||||
clockDTO.localDeviceTime = LocalDateTime()
|
||||
val localTime = LocalDateTime()
|
||||
val responseObject = sendAndGetResponseWithCheck(MedtronicCommandType.GetRealTimeClock) { _, _, rawContent ->
|
||||
medtronicConverter.decodeTime(rawContent)
|
||||
}
|
||||
if (responseObject != null) {
|
||||
clockDTO.pumpTime = responseObject
|
||||
return clockDTO
|
||||
return ClockDTO(localDeviceTime = localTime, pumpTime = responseObject)
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
fun getTemporaryBasal(): TempBasalPair? {
|
||||
return sendAndGetResponseWithCheck(MedtronicCommandType.ReadTemporaryBasal) { _, _, rawContent ->
|
||||
TempBasalPair(aapsLogger, rawContent!!) }
|
||||
TempBasalPair(aapsLogger, rawContent!!)
|
||||
}
|
||||
}
|
||||
|
||||
fun getPumpSettings(): Map<String, PumpSettingDTO>? {
|
||||
return sendAndGetResponseWithCheck(getSettings(medtronicUtil.medtronicPumpModel)) { _, _, rawContent ->
|
||||
medtronicConverter.decodeSettingsLoop(rawContent) }
|
||||
medtronicConverter.decodeSettingsLoop(rawContent)
|
||||
}
|
||||
}
|
||||
|
||||
fun setBolus(units: Double): Boolean {
|
||||
|
|
|
@ -7,8 +7,6 @@ import info.nightscout.androidaps.plugins.pump.common.utils.StringUtil
|
|||
import info.nightscout.androidaps.plugins.pump.medtronic.util.MedtronicUtil
|
||||
import org.apache.commons.lang3.StringUtils
|
||||
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
|
||||
|
@ -19,9 +17,17 @@ import kotlin.jvm.Throws
|
|||
*/
|
||||
abstract class MedtronicHistoryDecoder<T : MedtronicHistoryEntry?> : MedtronicHistoryDecoderInterface<T> {
|
||||
|
||||
@Inject lateinit var aapsLogger: AAPSLogger
|
||||
@Inject lateinit var medtronicUtil: MedtronicUtil
|
||||
@Inject lateinit var bitUtils: ByteUtil
|
||||
constructor(aapsLogger: AAPSLogger,
|
||||
medtronicUtil: MedtronicUtil,
|
||||
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)
|
||||
protected var statisticsEnabled = true
|
||||
|
|
|
@ -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.DateTimeUtil
|
||||
import info.nightscout.androidaps.plugins.pump.common.utils.StringUtil
|
||||
import info.nightscout.androidaps.plugins.pump.medtronic.comm.history.pump.PumpHistoryEntryType
|
||||
import java.util.*
|
||||
|
||||
/**
|
||||
|
@ -42,6 +43,7 @@ abstract class MedtronicHistoryEntry : MedtronicHistoryEntryInterface {
|
|||
set(value) {
|
||||
field = value
|
||||
DT = DateTimeUtil.toString(value)
|
||||
if (isEntryTypeSet() && value != 0L) pumpId = generatePumpId()
|
||||
}
|
||||
|
||||
@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)
|
||||
*/
|
||||
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
|
||||
|
@ -75,6 +77,10 @@ abstract class MedtronicHistoryEntry : MedtronicHistoryEntryInterface {
|
|||
// this.linkedObject = linkedObject
|
||||
// }
|
||||
|
||||
abstract fun generatePumpId(): Long
|
||||
|
||||
abstract fun isEntryTypeSet(): Boolean
|
||||
|
||||
override fun setData(listRawData: List<Byte>, doNotProcess: Boolean) {
|
||||
rawData = listRawData
|
||||
|
||||
|
|
|
@ -30,6 +30,17 @@ class CGMSHistoryEntry : MedtronicHistoryEntry() {
|
|||
override val entryTypeName: String
|
||||
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) {
|
||||
if (entryType!!.schemaSet) {
|
||||
super.setData(listRawData, doNotProcess)
|
||||
|
|
|
@ -1,18 +1,17 @@
|
|||
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.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.medtronic.comm.history.MedtronicHistoryDecoder
|
||||
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.Companion.getByCode
|
||||
import info.nightscout.androidaps.plugins.pump.medtronic.util.MedtronicUtil
|
||||
import okhttp3.internal.and
|
||||
import org.joda.time.LocalDateTime
|
||||
import org.slf4j.Logger
|
||||
import org.slf4j.LoggerFactory
|
||||
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
|
||||
|
@ -21,13 +20,17 @@ import org.slf4j.LoggerFactory.getLogger as getLogger1
|
|||
*
|
||||
* 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? {
|
||||
return try {
|
||||
decodeRecordInternal(record)
|
||||
} catch (ex: Exception) {
|
||||
aapsLogger.error(LTag.PUMPCOMM," Error decoding: type={}, ex={}", record.entryType!!.name, ex.message, ex)
|
||||
aapsLogger.error(LTag.PUMPCOMM, " Error decoding: type={}, ex={}", record.entryType!!.name, ex.message, ex)
|
||||
RecordDecodeStatus.Error
|
||||
}
|
||||
}
|
||||
|
@ -127,7 +130,7 @@ class MedtronicCGMSHistoryDecoder : MedtronicHistoryDecoder<CGMSHistoryEntry>()
|
|||
} else {
|
||||
if (dateTime != null) entry.setDateTime(dateTime, getIndex)
|
||||
}
|
||||
aapsLogger.debug(LTag.PUMPCOMM,"Record: {}", entry)
|
||||
aapsLogger.debug(LTag.PUMPCOMM, "Record: {}", entry)
|
||||
}
|
||||
return reversedOutList
|
||||
}
|
||||
|
@ -171,7 +174,7 @@ class MedtronicCGMSHistoryDecoder : MedtronicHistoryDecoder<CGMSHistoryEntry>()
|
|||
entry.atechDateTime = atechDateTime
|
||||
atechDateTime
|
||||
} else if (entry.entryType!!.dateType === CGMSHistoryEntryType.DateType.SecondSpecific) {
|
||||
aapsLogger.warn(LTag.PUMPCOMM,"parseDate for SecondSpecific type is not implemented.")
|
||||
aapsLogger.warn(LTag.PUMPCOMM, "parseDate for SecondSpecific type is not implemented.")
|
||||
throw RuntimeException()
|
||||
// return null;
|
||||
} else null
|
||||
|
|
|
@ -30,8 +30,9 @@ import kotlin.experimental.and
|
|||
@Singleton
|
||||
class MedtronicPumpHistoryDecoder @Inject constructor(
|
||||
aapsLogger: AAPSLogger,
|
||||
medtronicUtil: MedtronicUtil
|
||||
) : MedtronicHistoryDecoder<PumpHistoryEntry>() {
|
||||
medtronicUtil: MedtronicUtil,
|
||||
bitUtils: ByteUtil
|
||||
) : MedtronicHistoryDecoder<PumpHistoryEntry>(aapsLogger, medtronicUtil, bitUtils) {
|
||||
|
||||
//private var tbrPreviousRecord: PumpHistoryEntry? = null
|
||||
private var changeTimeRecord: PumpHistoryEntry? = null
|
||||
|
@ -133,7 +134,7 @@ class MedtronicPumpHistoryDecoder @Inject constructor(
|
|||
return try {
|
||||
decodeRecordInternal(record)
|
||||
} 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()
|
||||
RecordDecodeStatus.Error
|
||||
}
|
||||
|
@ -144,16 +145,70 @@ class MedtronicPumpHistoryDecoder @Inject constructor(
|
|||
decodeDateTime(entry)
|
||||
}
|
||||
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")
|
||||
RecordDecodeStatus.Ignored
|
||||
}
|
||||
|
||||
PumpHistoryEntryType.UnabsorbedInsulin, PumpHistoryEntryType.UnabsorbedInsulin512 -> RecordDecodeStatus.Ignored
|
||||
PumpHistoryEntryType.DailyTotals522, PumpHistoryEntryType.DailyTotals523, PumpHistoryEntryType.DailyTotals515, PumpHistoryEntryType.EndResultTotals -> decodeDailyTotals(entry)
|
||||
PumpHistoryEntryType.ChangeBasalProfile_OldProfile, PumpHistoryEntryType.ChangeBasalProfile_NewProfile -> decodeBasalProfile(entry)
|
||||
PumpHistoryEntryType.UnabsorbedInsulin,
|
||||
PumpHistoryEntryType.UnabsorbedInsulin512 -> RecordDecodeStatus.Ignored
|
||||
PumpHistoryEntryType.DailyTotals522,
|
||||
PumpHistoryEntryType.DailyTotals523,
|
||||
PumpHistoryEntryType.DailyTotals515,
|
||||
PumpHistoryEntryType.EndResultTotals -> decodeDailyTotals(entry)
|
||||
PumpHistoryEntryType.ChangeBasalProfile_OldProfile,
|
||||
PumpHistoryEntryType.ChangeBasalProfile_NewProfile -> decodeBasalProfile(entry)
|
||||
PumpHistoryEntryType.BasalProfileStart -> decodeBasalProfileStart(entry)
|
||||
|
||||
PumpHistoryEntryType.ChangeTime -> {
|
||||
|
@ -187,7 +242,16 @@ class MedtronicPumpHistoryDecoder @Inject constructor(
|
|||
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.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
|
||||
}
|
||||
|
||||
private fun decodeNoDeliveryAlarm(entry: PumpHistoryEntry) {
|
||||
//rawtype = asUINT8(data[1]);
|
||||
// not sure if this is actually NoDelivery Alarm?
|
||||
}
|
||||
// private fun decodeNoDeliveryAlarm(entry: PumpHistoryEntry) {
|
||||
// //rawtype = asUINT8(data[1]);
|
||||
// // not sure if this is actually NoDelivery Alarm?
|
||||
// }
|
||||
|
||||
override fun postProcess() {}
|
||||
|
||||
|
@ -357,34 +421,25 @@ class MedtronicPumpHistoryDecoder @Inject constructor(
|
|||
}
|
||||
|
||||
private fun decodeBolus(entry: PumpHistoryEntry) {
|
||||
val bolus = BolusDTO()
|
||||
var bolus: BolusDTO?
|
||||
val data = entry.head!!
|
||||
if (MedtronicDeviceType.isSameDevice(medtronicUtil.medtronicPumpModel!!, MedtronicDeviceType.Medtronic_523andHigher)) {
|
||||
bolus.requestedAmount = ByteUtil.toInt(data.get(0), data.get(1)) / 40.0
|
||||
bolus.deliveredAmount = ByteUtil.toInt(data.get(2), data.get(3)) / 40.0
|
||||
bolus = BolusDTO(atechDateTime = entry.atechDateTime,
|
||||
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.duration = data.get(6) * 30
|
||||
} else {
|
||||
bolus.requestedAmount = ByteUtil.asUINT8(data.get(0)) / 10.0
|
||||
bolus.deliveredAmount = ByteUtil.asUINT8(data.get(1)) / 10.0
|
||||
bolus.duration = ByteUtil.asUINT8(data.get(2)) * 30
|
||||
bolus = BolusDTO(atechDateTime = entry.atechDateTime,
|
||||
requestedAmount = ByteUtil.asUINT8(data.get(0)) / 10.0,
|
||||
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.atechDateTime = entry.atechDateTime
|
||||
bolus.bolusType = if (bolus.duration > 0) PumpBolusType.Extended else PumpBolusType.Normal
|
||||
entry.addDecodedData("Object", bolus)
|
||||
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) {
|
||||
var tbrRate: PumpHistoryEntry? = null
|
||||
var tbrDuration: PumpHistoryEntry? = null
|
||||
|
@ -399,25 +454,18 @@ class MedtronicPumpHistoryDecoder @Inject constructor(
|
|||
tbrRate = tbrPreviousRecord
|
||||
}
|
||||
|
||||
// TempBasalPair tbr = new TempBasalPair(
|
||||
// tbrRate.getHead()[0],
|
||||
// tbrDuration.getHead()[0],
|
||||
// (ByteUtil.asUINT8(tbrRate.getDatetime()[4]) >> 3) == 0);
|
||||
val tbr = TempBasalPair(
|
||||
tbrRate.head!!.get(0),
|
||||
tbrRate.body!!.get(0),
|
||||
tbrDuration!!.head!!.get(0).toInt(),
|
||||
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.displayableValue = tbr.description
|
||||
}
|
||||
|
||||
private fun decodeDateTime(entry: PumpHistoryEntry) {
|
||||
if (entry.datetime==null) {
|
||||
if (entry.datetime == null) {
|
||||
aapsLogger.warn(LTag.PUMPBTCOMM, "DateTime not set.")
|
||||
}
|
||||
val dt = entry.datetime!!
|
||||
|
@ -445,7 +493,7 @@ class MedtronicPumpHistoryDecoder @Inject constructor(
|
|||
|
||||
//LOG.debug("DT: {} {} {}", year, month, dayOfMonth);
|
||||
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))
|
||||
}
|
||||
if (isEndResults(entry.entryType)) {
|
||||
|
@ -460,7 +508,10 @@ class MedtronicPumpHistoryDecoder @Inject constructor(
|
|||
}
|
||||
|
||||
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 {
|
||||
|
@ -474,13 +525,10 @@ class MedtronicPumpHistoryDecoder @Inject constructor(
|
|||
}
|
||||
|
||||
companion object {
|
||||
|
||||
private fun getFormattedValue(value: Float, decimals: Int): String {
|
||||
return String.format(Locale.ENGLISH, "%." + decimals + "f", value)
|
||||
}
|
||||
}
|
||||
|
||||
init {
|
||||
super.aapsLogger = aapsLogger
|
||||
this.medtronicUtil = medtronicUtil
|
||||
}
|
||||
}
|
|
@ -19,12 +19,12 @@ import java.util.*
|
|||
class PumpHistoryEntry : MedtronicHistoryEntry() {
|
||||
|
||||
@Expose
|
||||
var entryType: PumpHistoryEntryType? = null
|
||||
var entryType: PumpHistoryEntryType = PumpHistoryEntryType.None
|
||||
private set
|
||||
|
||||
override var opCode: Byte? = null
|
||||
// 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) {
|
||||
field = value
|
||||
}
|
||||
|
@ -41,15 +41,19 @@ class PumpHistoryEntry : MedtronicHistoryEntry() {
|
|||
sizes[0] = entryType.getHeadLength(medtronicDeviceType)
|
||||
sizes[1] = entryType.dateLength
|
||||
sizes[2] = entryType.getBodyLength(medtronicDeviceType)
|
||||
if (this.entryType != null && atechDateTime != 0L) generatePumpId()
|
||||
if (isEntryTypeSet() && atechDateTime != 0L) pumpId = generatePumpId()
|
||||
}
|
||||
|
||||
private fun generatePumpId() : Long {
|
||||
return entryType!!.code + atechDateTime * 1000L
|
||||
override fun generatePumpId() : Long {
|
||||
return entryType.code + atechDateTime * 1000L
|
||||
}
|
||||
|
||||
override fun isEntryTypeSet(): Boolean {
|
||||
return this.entryType != PumpHistoryEntryType.None
|
||||
}
|
||||
|
||||
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"
|
||||
+ ByteUtil.shortHexString(opCode!!) + "]")
|
||||
|
||||
|
@ -65,16 +69,16 @@ class PumpHistoryEntry : MedtronicHistoryEntry() {
|
|||
}
|
||||
|
||||
override val entryTypeName: String
|
||||
get() = entryType!!.name
|
||||
get() = entryType.name
|
||||
|
||||
override val dateLength: Int
|
||||
get() = entryType!!.dateLength
|
||||
get() = entryType.dateLength
|
||||
|
||||
override fun equals(other: Any?): Boolean {
|
||||
if (this === other) return true
|
||||
if (other !is PumpHistoryEntry) return false
|
||||
val that = other //as PumpHistoryEntry
|
||||
return this.pumpId === that.pumpId
|
||||
return this.pumpId == that.pumpId
|
||||
// return entryType == that.entryType && //
|
||||
// atechDateTime === that.atechDateTime // && //
|
||||
// Objects.equals(this.decodedData, that.decodedData);
|
||||
|
@ -101,24 +105,26 @@ class PumpHistoryEntry : MedtronicHistoryEntry() {
|
|||
class Comparator : java.util.Comparator<PumpHistoryEntry> {
|
||||
override fun compare(o1: PumpHistoryEntry, o2: PumpHistoryEntry): Int {
|
||||
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() {
|
||||
if (field==0L) {
|
||||
field = generatePumpId()
|
||||
}
|
||||
return field
|
||||
}
|
||||
set(pumpId) {
|
||||
super.pumpId = pumpId
|
||||
field = pumpId
|
||||
}
|
||||
|
||||
fun hasBolusChanged(entry: PumpHistoryEntry) : Boolean {
|
||||
if (entryType!=null && entryType == PumpHistoryEntryType.Bolus) {
|
||||
if (entryType == PumpHistoryEntryType.Bolus) {
|
||||
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
|
||||
return (thisOne.value.equals(otherOne.value))
|
||||
} else
|
||||
|
|
|
@ -22,8 +22,7 @@ class PumpHistoryResult(private val aapsLogger: AAPSLogger, searchEntry: PumpHis
|
|||
var unprocessedEntries: List<PumpHistoryEntry> = ArrayList()
|
||||
var validEntries: MutableList<PumpHistoryEntry> = ArrayList()
|
||||
|
||||
|
||||
fun addHistoryEntries(entries: List<PumpHistoryEntry>, page: Int) {
|
||||
fun addHistoryEntries(entries: List<PumpHistoryEntry> /*, page: Int*/) {
|
||||
unprocessedEntries = entries
|
||||
//aapsLogger.debug(LTag.PUMPCOMM,"PumpHistoryResult. Unprocessed entries: {}", MedtronicUtil.getGsonInstance().toJson(entries));
|
||||
processEntries()
|
||||
|
@ -42,7 +41,7 @@ class PumpHistoryResult(private val aapsLogger: AAPSLogger, searchEntry: PumpHis
|
|||
|
||||
//Collections.sort(this.unprocessedEntries, new PumpHistoryEntry.Comparator());
|
||||
aapsLogger.debug(LTag.PUMPCOMM, "PE. PumpHistoryResult. Search entry date: " + searchEntry!!.atechDateTime)
|
||||
val date = searchEntry.atechDateTime
|
||||
//val date = searchEntry.atechDateTime
|
||||
for (unprocessedEntry in unprocessedEntries) {
|
||||
if (unprocessedEntry.equals(searchEntry)) {
|
||||
//aapsLogger.debug(LTag.PUMPCOMM,"PE. Item found {}.", unprocessedEntry);
|
||||
|
@ -60,7 +59,7 @@ class PumpHistoryResult(private val aapsLogger: AAPSLogger, searchEntry: PumpHis
|
|||
SearchType.Date -> {
|
||||
aapsLogger.debug(LTag.PUMPCOMM, "PE. Date search: Search date: " + searchDate)
|
||||
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")
|
||||
continue
|
||||
}
|
||||
|
@ -99,11 +98,9 @@ class PumpHistoryResult(private val aapsLogger: AAPSLogger, searchEntry: PumpHis
|
|||
val latestEntry: PumpHistoryEntry?
|
||||
get() = if (validEntries.size == 0) null else validEntries[0]
|
||||
|
||||
|
||||
// val isSearchRequired: Boolean
|
||||
// get() = searchType != SearchType.None
|
||||
|
||||
|
||||
internal enum class SearchType {
|
||||
None, //
|
||||
LastEntry, //
|
||||
|
|
|
@ -41,5 +41,11 @@ class GetHistoryPageCarelinkMessageBody : CarelinkLongMessageBody {
|
|||
}
|
||||
|
||||
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)
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,6 +1,5 @@
|
|||
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.LTag
|
||||
import info.nightscout.androidaps.plugins.bus.RxBusWrapper
|
||||
|
@ -55,9 +54,9 @@ class MedtronicUIPostprocessor @Inject constructor(
|
|||
|
||||
//aapsLogger.debug("D: basal profile on read: " + basalProfile);
|
||||
try {
|
||||
// TODO need to refactor
|
||||
val profilesByHour = basalProfile!!.getProfilesByHour(medtronicPumpPlugin.pumpDescription.pumpType)
|
||||
if (profilesByHour != null) {
|
||||
if (basalProfile != null) {
|
||||
val profilesByHour = basalProfile.getProfilesByHour(medtronicPumpPlugin.pumpDescription.pumpType)
|
||||
if (!BasalProfile.isBasalProfileByHourUndefined(profilesByHour)) {
|
||||
medtronicPumpStatus.basalsByHour = profilesByHour
|
||||
medtronicPumpStatus.basalProfileStatus = BasalProfileStatus.ProfileOK
|
||||
//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."
|
||||
aapsLogger.error(LTag.PUMPCOMM, String.format(Locale.ENGLISH, "Basal Profile was NOT valid. [%s]", basalProfile.basalProfileToStringError()))
|
||||
}
|
||||
}
|
||||
} catch (ex: Exception) {
|
||||
aapsLogger.error(LTag.PUMPCOMM, String.format(Locale.ENGLISH, "Basal Profile was returned, but was invalid. [%s]", basalProfile!!.basalProfileToStringError()))
|
||||
uiTask.responseType = MedtronicUIResponseType.Error
|
||||
|
@ -128,12 +128,16 @@ class MedtronicUIPostprocessor @Inject constructor(
|
|||
|
||||
private fun processTime(uiTask: MedtronicUITask) {
|
||||
val clockDTO = uiTask.result as ClockDTO?
|
||||
val dur = Duration(clockDTO!!.pumpTime!!.toDateTime(DateTimeZone.UTC),
|
||||
clockDTO.localDeviceTime!!.toDateTime(DateTimeZone.UTC))
|
||||
if (clockDTO != null) {
|
||||
val dur = Duration(clockDTO.pumpTime.toDateTime(DateTimeZone.UTC),
|
||||
clockDTO.localDeviceTime.toDateTime(DateTimeZone.UTC))
|
||||
clockDTO.timeDifference = dur.standardSeconds.toInt()
|
||||
medtronicUtil.pumpTime = clockDTO
|
||||
aapsLogger.debug(LTag.PUMP, "Pump Time: " + clockDTO.localDeviceTime + ", DeviceTime=" + clockDTO.pumpTime + //
|
||||
", diff: " + dur.standardSeconds + " s")
|
||||
} else {
|
||||
aapsLogger.debug(LTag.PUMP, "Problem with returned data: " + medtronicUtil.gsonInstance.toJson(uiTask.result))
|
||||
}
|
||||
}
|
||||
|
||||
private fun postProcessSettings(uiTask: MedtronicUITask) {
|
||||
|
|
|
@ -66,7 +66,7 @@ class MedtronicUITask {
|
|||
|
||||
MedtronicCommandType.GetRealTimeClock -> {
|
||||
result = communicationManager.getPumpTime()
|
||||
medtronicUtil.pumpTime = null
|
||||
//medtronicUtil.pumpTime = null
|
||||
}
|
||||
|
||||
MedtronicCommandType.SetRealTimeClock -> {
|
||||
|
|
|
@ -68,7 +68,6 @@ class MedtronicHistoryData @Inject constructor(
|
|||
private var gson: Gson = GsonBuilder().excludeFieldsWithoutExposeAnnotation().create()
|
||||
private var gsonCore: Gson = GsonBuilder().create()
|
||||
|
||||
|
||||
/**
|
||||
* Add New History entries
|
||||
*
|
||||
|
@ -81,12 +80,12 @@ class MedtronicHistoryData @Inject constructor(
|
|||
if (!allPumpIds.contains(validEntry.pumpId)) {
|
||||
newEntries.add(validEntry)
|
||||
} 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)
|
||||
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? {
|
||||
val findFirst = this.allHistory.stream()
|
||||
.filter { f -> f.pumpId!! == pumpId }
|
||||
.filter { f -> f.pumpId == pumpId }
|
||||
.findFirst()
|
||||
|
||||
return if (findFirst.isPresent()) findFirst.get() else null
|
||||
|
@ -192,7 +191,7 @@ class MedtronicHistoryData @Inject constructor(
|
|||
lastIdUsed++
|
||||
pumpHistoryEntry.id = lastIdUsed
|
||||
allHistory.add(pumpHistoryEntry)
|
||||
allPumpIds.add(pumpHistoryEntry.pumpId!!)
|
||||
allPumpIds.add(pumpHistoryEntry.pumpId)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -210,7 +209,7 @@ class MedtronicHistoryData @Inject constructor(
|
|||
for (pumpHistoryEntry in allHistory) {
|
||||
if (!pumpHistoryEntry.isAfter(dtRemove)) {
|
||||
removeList.add(pumpHistoryEntry)
|
||||
allPumpIds.remove(pumpHistoryEntry.pumpId!!)
|
||||
allPumpIds.remove(pumpHistoryEntry.pumpId)
|
||||
}
|
||||
}
|
||||
allHistory.removeAll(removeList)
|
||||
|
@ -241,7 +240,6 @@ class MedtronicHistoryData @Inject constructor(
|
|||
return col != null && !col.isEmpty()
|
||||
}
|
||||
|
||||
|
||||
fun isPumpSuspended(): Boolean {
|
||||
val items = getDataForPumpSuspends()
|
||||
showLogs("isPumpSuspended: ", gson.toJson(items))
|
||||
|
@ -258,7 +256,6 @@ class MedtronicHistoryData @Inject constructor(
|
|||
} else false
|
||||
}
|
||||
|
||||
|
||||
private fun getDataForPumpSuspends(): MutableList<PumpHistoryEntry> {
|
||||
val newAndAll: MutableList<PumpHistoryEntry> = mutableListOf()
|
||||
if (isCollectionNotEmpty(allHistory)) {
|
||||
|
@ -397,7 +394,7 @@ class MedtronicHistoryData @Inject constructor(
|
|||
continue
|
||||
}
|
||||
if (primeRecord.atechDateTime > maxAllowedTimeInPast) {
|
||||
if (lastPrimeRecordTime!=0L && lastPrimeRecordTime < primeRecord.atechDateTime) {
|
||||
if (lastPrimeRecordTime != 0L && lastPrimeRecordTime < primeRecord.atechDateTime) {
|
||||
lastPrimeRecordTime = primeRecord.atechDateTime
|
||||
lastPrimeRecord = primeRecord
|
||||
}
|
||||
|
@ -429,7 +426,6 @@ class MedtronicHistoryData @Inject constructor(
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
private fun uploadCareportalEventIfFoundInHistory(historyRecord: PumpHistoryEntry, eventSP: String, eventType: DetailedBolusInfo.EventType) {
|
||||
val lastPrimeFromAAPS = sp.getLong(eventSP, 0L)
|
||||
if (historyRecord.atechDateTime != lastPrimeFromAAPS) {
|
||||
|
@ -448,7 +444,6 @@ class MedtronicHistoryData @Inject constructor(
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
private fun processTDDs(tddsIn: MutableList<PumpHistoryEntry>) {
|
||||
val tdds = filterTDDs(tddsIn)
|
||||
|
||||
|
@ -470,14 +465,12 @@ class MedtronicHistoryData @Inject constructor(
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
private enum class ProcessHistoryRecord(val description: String) {
|
||||
Bolus("Bolus"),
|
||||
TBR("TBR"),
|
||||
Suspend("Suspend");
|
||||
}
|
||||
|
||||
|
||||
private fun processBolusEntries(entryList: MutableList<PumpHistoryEntry>) {
|
||||
|
||||
val boluses = pumpSyncStorage.getBoluses()
|
||||
|
@ -488,16 +481,16 @@ class MedtronicHistoryData @Inject constructor(
|
|||
var type: DetailedBolusInfo.BolusType = DetailedBolusInfo.BolusType.NORMAL
|
||||
var multiwave = false
|
||||
|
||||
if (bolusDTO.bolusType==PumpBolusType.Extended) {
|
||||
if (bolusDTO.bolusType == PumpBolusType.Extended) {
|
||||
addExtendedBolus(bolus, bolusDTO, multiwave)
|
||||
continue;
|
||||
} else if (bolusDTO.bolusType==PumpBolusType.Multiwave) {
|
||||
} else if (bolusDTO.bolusType == PumpBolusType.Multiwave) {
|
||||
multiwave = true
|
||||
aapsLogger.debug(LTag.PUMP, String.format(Locale.ENGLISH, "Multiwave bolus from pump, extended bolus and normal bolus will be added."))
|
||||
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
|
||||
|
||||
|
@ -514,7 +507,7 @@ class MedtronicHistoryData @Inject constructor(
|
|||
}
|
||||
}
|
||||
|
||||
if (temporaryId!=null) {
|
||||
if (temporaryId != null) {
|
||||
val result = pumpSync.syncBolusWithTempId(
|
||||
tryToGetByLocalTime(bolus.atechDateTime),
|
||||
deliveredAmount,
|
||||
|
@ -532,7 +525,7 @@ class MedtronicHistoryData @Inject constructor(
|
|||
tryToGetByLocalTime(bolus.atechDateTime),
|
||||
deliveredAmount,
|
||||
type,
|
||||
bolus.pumpId!!,
|
||||
bolus.pumpId,
|
||||
medtronicPumpStatus.pumpType,
|
||||
medtronicPumpStatus.serialNumber!!)
|
||||
|
||||
|
@ -545,25 +538,23 @@ class MedtronicHistoryData @Inject constructor(
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
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(
|
||||
tryToGetByLocalTime(bolus.atechDateTime),
|
||||
bolusDTO.deliveredAmount!!,
|
||||
bolusDTO.deliveredAmount,
|
||||
durationMs,
|
||||
false,
|
||||
bolus.pumpId!!,
|
||||
bolus.pumpId,
|
||||
medtronicPumpStatus.pumpType,
|
||||
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",
|
||||
bolus.atechDateTime, bolusDTO.deliveredAmount!!, bolusDTO.duration, bolus.pumpId,
|
||||
bolus.atechDateTime, bolusDTO.deliveredAmount, bolusDTO.duration, bolus.pumpId,
|
||||
medtronicPumpStatus.serialNumber!!, isMultiwave, result))
|
||||
}
|
||||
|
||||
|
||||
private fun addCarbs(bolus: PumpHistoryEntry) {
|
||||
if (bolus.containsDecodedData("Estimate")) {
|
||||
val bolusWizard = bolus.decodedData["Estimate"] as BolusWizardDTO
|
||||
|
@ -573,12 +564,11 @@ class MedtronicHistoryData @Inject constructor(
|
|||
bolusWizard.carbs.toDouble(),
|
||||
medtronicPumpStatus.pumpType,
|
||||
medtronicPumpStatus.serialNumber!!,
|
||||
bolus.pumpId!!
|
||||
bolus.pumpId
|
||||
))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private fun processTBREntries(entryList: MutableList<PumpHistoryEntry>) {
|
||||
Collections.reverse(entryList)
|
||||
val tbr = entryList[0].getDecodedDataEntry("Object") as TempBasalPair?
|
||||
|
@ -609,14 +599,14 @@ class MedtronicHistoryData @Inject constructor(
|
|||
readOldItem = false
|
||||
}
|
||||
} else {
|
||||
aapsLogger.warn(LTag.PUMP,"processDTO was null - shouldn't happen, ignoring item. ItemTwo=$treatment")
|
||||
aapsLogger.warn(LTag.PUMP, "processDTO was null - shouldn't happen, ignoring item. ItemTwo=$treatment")
|
||||
}
|
||||
} else {
|
||||
if (processDTO != null) {
|
||||
processList.add(processDTO)
|
||||
}
|
||||
processDTO = TempBasalProcessDTO(
|
||||
itemOne= treatment,
|
||||
itemOne = treatment,
|
||||
processOperation = TempBasalProcessDTO.Operation.Add)
|
||||
}
|
||||
}
|
||||
|
@ -628,13 +618,13 @@ class MedtronicHistoryData @Inject constructor(
|
|||
|
||||
val entryWithTempId = findDbEntry(tempBasalProcessDTO.itemOne, tbrRecords)
|
||||
|
||||
aapsLogger.debug(LTag.PUMP, "DD: entryWithTempId: " + (if (entryWithTempId==null) "null" else entryWithTempId.toString()))
|
||||
aapsLogger.debug(LTag.PUMP, "DD: entryWithTempId: " + (if (entryWithTempId == null) "null" else entryWithTempId.toString()))
|
||||
|
||||
val tbrEntry = tempBasalProcessDTO.itemOne.getDecodedDataEntry("Object") as TempBasalPair
|
||||
|
||||
aapsLogger.debug(LTag.PUMP, String.format("DD: tbrEntry=%s, tempBasalProcessDTO=%s", gson.toJson(tbrEntry), gson.toJson(tempBasalProcessDTO)))
|
||||
|
||||
if (entryWithTempId!=null) {
|
||||
if (entryWithTempId != null) {
|
||||
|
||||
aapsLogger.debug(LTag.PUMP, String.format("DD: tempIdEntry=%s, tbrEntry=%s, tempBasalProcessDTO=%s, pumpType=%s, serial=%s",
|
||||
gson.toJson(entryWithTempId), gson.toJson(tbrEntry), gson.toJson(tempBasalProcessDTO), medtronicPumpStatus.pumpType, medtronicPumpStatus.serialNumber!!))
|
||||
|
@ -681,7 +671,7 @@ class MedtronicHistoryData @Inject constructor(
|
|||
tbrEntry.insulinRate, (if (tbrEntry.isPercent) "%" else "U"), tempBasalProcessDTO.duration,
|
||||
medtronicPumpStatus.serialNumber!!, result))
|
||||
|
||||
if (medtronicPumpStatus.runningTBR!=null) {
|
||||
if (medtronicPumpStatus.runningTBR != null) {
|
||||
if (!isTBRActive(medtronicPumpStatus.runningTBR!!)) {
|
||||
medtronicPumpStatus.runningTBR = null
|
||||
}
|
||||
|
@ -703,21 +693,16 @@ class MedtronicHistoryData @Inject constructor(
|
|||
} // collection
|
||||
}
|
||||
|
||||
|
||||
fun isTBRActive(dbEntry: PumpDbEntry) : Boolean {
|
||||
fun isTBRActive(dbEntry: PumpDbEntry): Boolean {
|
||||
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)
|
||||
|
||||
return (endDate > System.currentTimeMillis())
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 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
|
||||
|
@ -742,7 +727,7 @@ class MedtronicHistoryData @Inject constructor(
|
|||
// pumpTime should never be null, but it can theoretically happen if reading of time from pump fails
|
||||
this.pumpTime?.let { proposedTime += (it.timeDifference * 1000) }
|
||||
|
||||
val proposedTimeDiff : LongArray = longArrayOf(proposedTime-(2*60*1000), proposedTime+(2L*60L*1000L))
|
||||
val proposedTimeDiff: LongArray = longArrayOf(proposedTime - (2 * 60 * 1000), proposedTime + (2L * 60L * 1000L))
|
||||
val tempEntriesList: MutableList<PumpDbEntry> = mutableListOf()
|
||||
|
||||
for (temporaryEntry in temporaryEntries) {
|
||||
|
@ -753,7 +738,7 @@ class MedtronicHistoryData @Inject constructor(
|
|||
|
||||
if (tempEntriesList.isEmpty()) {
|
||||
return null
|
||||
} else if (tempEntriesList.size==1) {
|
||||
} else if (tempEntriesList.size == 1) {
|
||||
return tempEntriesList[0]
|
||||
}
|
||||
|
||||
|
@ -788,7 +773,6 @@ class MedtronicHistoryData @Inject constructor(
|
|||
return null
|
||||
}
|
||||
|
||||
|
||||
private fun processSuspends(tempBasalProcessList: List<TempBasalProcessDTO>) {
|
||||
for (tempBasalProcess in tempBasalProcessList) {
|
||||
|
||||
|
@ -798,18 +782,17 @@ class MedtronicHistoryData @Inject constructor(
|
|||
tempBasalProcess.duration * 60 * 1000L,
|
||||
true,
|
||||
PumpSync.TemporaryBasalType.PUMP_SUSPEND,
|
||||
tempBasalProcess.itemOne.pumpId!!,
|
||||
tempBasalProcess.itemOne.pumpId,
|
||||
medtronicPumpStatus.pumpType,
|
||||
medtronicPumpStatus.serialNumber!!)
|
||||
|
||||
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))
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// suspend/resume
|
||||
// no_delivery/prime & rewind/prime
|
||||
private fun getSuspendRecords(): MutableList<TempBasalProcessDTO> {
|
||||
|
@ -822,7 +805,6 @@ class MedtronicHistoryData @Inject constructor(
|
|||
return outList
|
||||
}
|
||||
|
||||
|
||||
private fun getSuspendResumeRecordsList(): List<TempBasalProcessDTO> {
|
||||
val filteredItems = getFilteredItems(newHistory, //
|
||||
setOf(PumpHistoryEntryType.SuspendPump, PumpHistoryEntryType.ResumePump))
|
||||
|
@ -864,8 +846,8 @@ class MedtronicHistoryData @Inject constructor(
|
|||
var i = 0
|
||||
while (i < filtered2Items.size) {
|
||||
outList.add(TempBasalProcessDTO(
|
||||
itemOne= filtered2Items[i],
|
||||
itemTwo= filtered2Items[i + 1],
|
||||
itemOne = filtered2Items[i],
|
||||
itemTwo = filtered2Items[i + 1],
|
||||
processOperation = TempBasalProcessDTO.Operation.Add))
|
||||
|
||||
i += 2
|
||||
|
@ -875,7 +857,6 @@ class MedtronicHistoryData @Inject constructor(
|
|||
return outList
|
||||
}
|
||||
|
||||
|
||||
private fun getNoDeliveryRewindPrimeRecordsList(): List<TempBasalProcessDTO> {
|
||||
val primeItems: MutableList<PumpHistoryEntry> = getFilteredItems(newHistory, //
|
||||
setOf(PumpHistoryEntryType.Prime))
|
||||
|
@ -930,16 +911,16 @@ class MedtronicHistoryData @Inject constructor(
|
|||
items = getFilteredItems(tempData, PumpHistoryEntryType.NoDeliveryAlarm)
|
||||
if (items.size > 0) {
|
||||
outList.add(TempBasalProcessDTO(
|
||||
itemOne=items[items.size - 1],
|
||||
itemTwo= itemTwo,
|
||||
processOperation=TempBasalProcessDTO.Operation.Add))
|
||||
itemOne = items[items.size - 1],
|
||||
itemTwo = itemTwo,
|
||||
processOperation = TempBasalProcessDTO.Operation.Add))
|
||||
return outList
|
||||
}
|
||||
items = getFilteredItems(tempData, PumpHistoryEntryType.Rewind)
|
||||
if (items.size > 0) {
|
||||
outList.add(TempBasalProcessDTO(
|
||||
itemOne=items[0],
|
||||
processOperation=TempBasalProcessDTO.Operation.Add))
|
||||
itemOne = items[0],
|
||||
processOperation = TempBasalProcessDTO.Operation.Add))
|
||||
return outList
|
||||
}
|
||||
return outList
|
||||
|
@ -964,7 +945,6 @@ class MedtronicHistoryData @Inject constructor(
|
|||
return DateTimeUtil.toMillisFromATD(atechDateTime)
|
||||
}
|
||||
|
||||
|
||||
private fun getTDDType(): PumpHistoryEntryType {
|
||||
return if (medtronicUtil.medtronicPumpModel == null) {
|
||||
PumpHistoryEntryType.EndResultTotals
|
||||
|
@ -984,14 +964,12 @@ class MedtronicHistoryData @Inject constructor(
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
fun hasBasalProfileChanged(): Boolean {
|
||||
val filteredItems: List<PumpHistoryEntry?> = getFilteredItems(PumpHistoryEntryType.ChangeBasalProfile_NewProfile)
|
||||
aapsLogger.debug(LTag.PUMP, "hasBasalProfileChanged. Items: " + gson.toJson(filteredItems))
|
||||
return filteredItems.size > 0
|
||||
}
|
||||
|
||||
|
||||
fun processLastBasalProfileChange(pumpType: PumpType, mdtPumpStatus: MedtronicPumpStatus) {
|
||||
val filteredItems: List<PumpHistoryEntry> = getFilteredItems(PumpHistoryEntryType.ChangeBasalProfile_NewProfile)
|
||||
aapsLogger.debug(LTag.PUMP, "processLastBasalProfileChange. Items: $filteredItems")
|
||||
|
@ -1085,12 +1063,11 @@ class MedtronicHistoryData @Inject constructor(
|
|||
return outList
|
||||
}
|
||||
|
||||
|
||||
private val logPrefix: String
|
||||
get() = "MedtronicHistoryData::"
|
||||
|
||||
|
||||
companion object {
|
||||
|
||||
/**
|
||||
* 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,
|
||||
|
|
|
@ -33,7 +33,7 @@ class BasalProfile {
|
|||
private val aapsLogger: AAPSLogger
|
||||
|
||||
@Expose
|
||||
lateinit var rawData : ByteArray // store as byte array to make transport (via parcel) easier
|
||||
lateinit var rawData: ByteArray // store as byte array to make transport (via parcel) easier
|
||||
private set
|
||||
|
||||
private var listEntries: MutableList<BasalProfileEntry>? = null
|
||||
|
@ -49,7 +49,7 @@ class BasalProfile {
|
|||
}
|
||||
|
||||
fun init() {
|
||||
rawData = byteArrayOf(0,0,0x3f)
|
||||
rawData = byteArrayOf(0, 0, 0x3f)
|
||||
}
|
||||
|
||||
private fun setRawData(data: ByteArray): Boolean {
|
||||
|
@ -291,9 +291,8 @@ class BasalProfile {
|
|||
return true
|
||||
}
|
||||
|
||||
|
||||
|
||||
companion object {
|
||||
|
||||
const val MAX_RAW_DATA_SIZE = 48 * 3 + 1
|
||||
private const val DEBUG_BASALPROFILE = false
|
||||
|
||||
|
@ -310,5 +309,15 @@ class BasalProfile {
|
|||
}
|
||||
return stringBuilder.toString()
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun isBasalProfileByHourUndefined(basalByHour: DoubleArray): Boolean {
|
||||
for (i in 0..23) {
|
||||
if (basalByHour[i] > 0.0) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
|
@ -30,19 +30,24 @@ import info.nightscout.androidaps.plugins.pump.medtronic.defs.PumpBolusType
|
|||
*
|
||||
* 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
|
||||
var requestedAmount: Double? = null
|
||||
|
||||
@Expose
|
||||
var deliveredAmount: Double? = null
|
||||
// @Expose
|
||||
// var requestedAmount: Double? = null
|
||||
//
|
||||
// @Expose
|
||||
// var deliveredAmount: Double? = null
|
||||
|
||||
@Expose
|
||||
var immediateAmount: Double? = null // when Multiwave this is used
|
||||
|
||||
@Expose
|
||||
var duration: Int? = null
|
||||
// @Expose
|
||||
// var duration: Int? = null
|
||||
|
||||
@Expose
|
||||
var bolusType: PumpBolusType? = null
|
||||
|
@ -51,7 +56,7 @@ class BolusDTO : PumpTimeStampedRecord() {
|
|||
|
||||
private val durationString: String
|
||||
get() {
|
||||
var minutes = duration!!
|
||||
var minutes = duration
|
||||
val h = minutes / 60
|
||||
minutes -= h * 60
|
||||
return StringUtil.getLeadingZero(h, 2) + ":" + StringUtil.getLeadingZero(minutes, 2)
|
||||
|
@ -59,22 +64,22 @@ class BolusDTO : PumpTimeStampedRecord() {
|
|||
|
||||
val value: String
|
||||
get() = if (bolusType === PumpBolusType.Normal || bolusType === PumpBolusType.Audio) {
|
||||
getFormattedDecimal(deliveredAmount!!)
|
||||
getFormattedDecimal(deliveredAmount)
|
||||
} else if (bolusType === PumpBolusType.Extended) {
|
||||
String.format("AMOUNT_SQUARE=%s;DURATION=%s", getFormattedDecimal(deliveredAmount!!),
|
||||
String.format("AMOUNT_SQUARE=%s;DURATION=%s", getFormattedDecimal(deliveredAmount),
|
||||
durationString)
|
||||
} else {
|
||||
String.format("AMOUNT=%s;AMOUNT_SQUARE=%s;DURATION=%s", getFormattedDecimal(immediateAmount!!),
|
||||
getFormattedDecimal(deliveredAmount!!), durationString)
|
||||
getFormattedDecimal(deliveredAmount), durationString)
|
||||
}
|
||||
|
||||
val displayableValue: String
|
||||
get() {
|
||||
var value = value
|
||||
value = value!!.replace("AMOUNT_SQUARE=", "Amount Square: ")
|
||||
value = value.replace("AMOUNT=", "Amount: ")
|
||||
value = value.replace("DURATION=", "Duration: ")
|
||||
return value
|
||||
var valueTemp = value
|
||||
valueTemp = valueTemp.replace("AMOUNT_SQUARE=", "Amount Square: ")
|
||||
valueTemp = valueTemp.replace("AMOUNT=", "Amount: ")
|
||||
valueTemp = valueTemp.replace("DURATION=", "Duration: ")
|
||||
return valueTemp
|
||||
}
|
||||
|
||||
override fun getFormattedDecimal(value: Double): String {
|
||||
|
|
|
@ -5,8 +5,9 @@ import org.joda.time.LocalDateTime
|
|||
/**
|
||||
* Created by andy on 2/27/19.
|
||||
*/
|
||||
class ClockDTO {
|
||||
var localDeviceTime: LocalDateTime? = null
|
||||
var pumpTime: LocalDateTime? = null
|
||||
class ClockDTO constructor(var localDeviceTime: LocalDateTime,
|
||||
var pumpTime: LocalDateTime) {
|
||||
// var localDeviceTime: LocalDateTime? = null
|
||||
// var pumpTime: LocalDateTime? = null
|
||||
var timeDifference = 0
|
||||
}
|
|
@ -5,10 +5,10 @@ import info.nightscout.androidaps.plugins.pump.common.utils.StringUtil
|
|||
/**
|
||||
* Created by andy on 6/2/18.
|
||||
*/
|
||||
open class PumpTimeStampedRecord {
|
||||
open class PumpTimeStampedRecord constructor(var atechDateTime: Long = 0) {
|
||||
|
||||
var decimalPrecission = 2
|
||||
var atechDateTime: Long = 0
|
||||
// var atechDateTime: Long = 0
|
||||
|
||||
open fun getFormattedDecimal(value: Double): String? {
|
||||
return StringUtil.getFormatedValueUS(value, decimalPrecission)
|
||||
|
|
|
@ -12,7 +12,7 @@ class TempBasalProcessDTO constructor(var itemOne: PumpHistoryEntry,
|
|||
get() = itemOne.atechDateTime
|
||||
|
||||
val pumpId: Long
|
||||
get() = itemOne.pumpId!!
|
||||
get() = itemOne.pumpId
|
||||
|
||||
val duration: Int
|
||||
get() = if (itemTwo == null) {
|
||||
|
|
|
@ -54,7 +54,7 @@ class MedtronicHistoryActivity : DaggerActivity() {
|
|||
filteredHistoryList.addAll(list)
|
||||
} else {
|
||||
for (pumpHistoryEntry in list) {
|
||||
if (pumpHistoryEntry.entryType!!.group === group) {
|
||||
if (pumpHistoryEntry.entryType.group === group) {
|
||||
filteredHistoryList.add(pumpHistoryEntry)
|
||||
}
|
||||
}
|
||||
|
@ -159,7 +159,7 @@ class MedtronicHistoryActivity : DaggerActivity() {
|
|||
val record = historyList[position]
|
||||
//if (record != null) {
|
||||
holder.timeView.text = record.dateTimeString
|
||||
holder.typeView.text = record.entryType!!.description
|
||||
holder.typeView.text = record.entryType.description
|
||||
holder.valueView.text = record.displayableValue
|
||||
//}
|
||||
}
|
||||
|
|
|
@ -39,7 +39,7 @@ class RileyLinkMedtronicService // This empty constructor must be kept, otherwi
|
|||
|
||||
private val mBinder: IBinder = LocalBinder()
|
||||
private var serialChanged = false
|
||||
private var frequencies: Array<String?>? = null
|
||||
lateinit var frequencies: Array<String>
|
||||
private var rileyLinkAddress: String? = null
|
||||
private var rileyLinkAddressChanged = false
|
||||
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
|
||||
*/
|
||||
override fun initRileyLinkServiceData() {
|
||||
frequencies = arrayOfNulls(2)
|
||||
frequencies!![0] = resourceHelper.gs(R.string.key_medtronic_pump_frequency_us_ca)
|
||||
frequencies!![1] = resourceHelper.gs(R.string.key_medtronic_pump_frequency_worldwide)
|
||||
frequencies = arrayOf()
|
||||
frequencies[0] = resourceHelper.gs(R.string.key_medtronic_pump_frequency_us_ca)
|
||||
frequencies[1] = resourceHelper.gs(R.string.key_medtronic_pump_frequency_worldwide)
|
||||
rileyLinkServiceData.targetDevice = RileyLinkTargetDevice.MedtronicPump
|
||||
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)
|
||||
return false
|
||||
} 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)
|
||||
return false
|
||||
} else {
|
||||
medtronicPumpStatus.pumpFrequency = pumpFrequency
|
||||
val isFrequencyUS = pumpFrequency == frequencies!![0]
|
||||
val isFrequencyUS = pumpFrequency == frequencies[0]
|
||||
val newTargetFrequency = if (isFrequencyUS) //
|
||||
RileyLinkTargetFrequency.Medtronic_US else RileyLinkTargetFrequency.Medtronic_WorldWide
|
||||
if (rileyLinkServiceData.rileyLinkTargetFrequency != newTargetFrequency) {
|
||||
|
|
Loading…
Reference in a new issue