- kotlin !! refactorings
This commit is contained in:
parent
59a3bf8883
commit
921302bdbf
22 changed files with 337 additions and 261 deletions
|
@ -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
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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
|
|
||||||
}
|
|
||||||
}
|
}
|
|
@ -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
|
||||||
|
|
|
@ -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, //
|
||||||
|
|
|
@ -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)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -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) {
|
||||||
|
|
|
@ -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 -> {
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -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 {
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
|
@ -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)
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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
|
||||||
//}
|
//}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
Loading…
Reference in a new issue