Medtrum: Lints
This commit is contained in:
parent
5074195315
commit
ae5c4ddeeb
4 changed files with 271 additions and 263 deletions
|
@ -255,7 +255,11 @@ import kotlin.math.abs
|
||||||
|
|
||||||
override fun isConnected(): Boolean {
|
override fun isConnected(): Boolean {
|
||||||
// This is a workaround to prevent AAPS to trigger connects when we have no patch activated
|
// This is a workaround to prevent AAPS to trigger connects when we have no patch activated
|
||||||
return if (!isInitialized()) true else medtrumService?.isConnected ?: false
|
return if (!isInitialized()) {
|
||||||
|
true
|
||||||
|
} else {
|
||||||
|
medtrumService?.isConnected ?: false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun isConnecting(): Boolean = medtrumService?.isConnecting ?: false
|
override fun isConnecting(): Boolean = medtrumService?.isConnecting ?: false
|
||||||
|
@ -544,31 +548,19 @@ import kotlin.math.abs
|
||||||
|
|
||||||
// Medtrum interface
|
// Medtrum interface
|
||||||
override fun loadEvents(): PumpEnactResult {
|
override fun loadEvents(): PumpEnactResult {
|
||||||
if (!isInitialized()) {
|
if (!isInitialized()) return PumpEnactResult(injector).success(false).enacted(false)
|
||||||
val result = PumpEnactResult(injector).success(false)
|
|
||||||
result.comment = "pump not initialized"
|
|
||||||
return result
|
|
||||||
}
|
|
||||||
val connectionOK = medtrumService?.loadEvents() ?: false
|
val connectionOK = medtrumService?.loadEvents() ?: false
|
||||||
return PumpEnactResult(injector).success(connectionOK)
|
return PumpEnactResult(injector).success(connectionOK)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun setUserOptions(): PumpEnactResult {
|
override fun setUserOptions(): PumpEnactResult {
|
||||||
if (!isInitialized()) {
|
if (!isInitialized()) return PumpEnactResult(injector).success(false).enacted(false)
|
||||||
val result = PumpEnactResult(injector).success(false)
|
|
||||||
result.comment = "pump not initialized"
|
|
||||||
return result
|
|
||||||
}
|
|
||||||
val connectionOK = medtrumService?.setUserSettings() ?: false
|
val connectionOK = medtrumService?.setUserSettings() ?: false
|
||||||
return PumpEnactResult(injector).success(connectionOK)
|
return PumpEnactResult(injector).success(connectionOK)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun clearAlarms(): PumpEnactResult {
|
override fun clearAlarms(): PumpEnactResult {
|
||||||
if (!isInitialized()) {
|
if (!isInitialized()) return PumpEnactResult(injector).success(false).enacted(false)
|
||||||
val result = PumpEnactResult(injector).success(false)
|
|
||||||
result.comment = "pump not initialized"
|
|
||||||
return result
|
|
||||||
}
|
|
||||||
val connectionOK = medtrumService?.clearAlarms() ?: false
|
val connectionOK = medtrumService?.clearAlarms() ?: false
|
||||||
return PumpEnactResult(injector).success(connectionOK)
|
return PumpEnactResult(injector).success(connectionOK)
|
||||||
}
|
}
|
||||||
|
@ -579,11 +571,7 @@ import kotlin.math.abs
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun updateTime(): PumpEnactResult {
|
override fun updateTime(): PumpEnactResult {
|
||||||
if (!isInitialized()) {
|
if (!isInitialized()) return PumpEnactResult(injector).success(false).enacted(false)
|
||||||
val result = PumpEnactResult(injector).success(false)
|
|
||||||
result.comment = "pump not initialized"
|
|
||||||
return result
|
|
||||||
}
|
|
||||||
val connectionOK = medtrumService?.updateTimeIfNeeded() ?: false
|
val connectionOK = medtrumService?.updateTimeIfNeeded() ?: false
|
||||||
return PumpEnactResult(injector).success(connectionOK)
|
return PumpEnactResult(injector).success(connectionOK)
|
||||||
}
|
}
|
||||||
|
|
|
@ -315,7 +315,7 @@ class MedtrumPump @Inject constructor(
|
||||||
}
|
}
|
||||||
|
|
||||||
loadUserSettingsFromSP()
|
loadUserSettingsFromSP()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun loadUserSettingsFromSP() {
|
fun loadUserSettingsFromSP() {
|
||||||
desiredPatchExpiration = sp.getBoolean(R.string.key_patch_expiration, false)
|
desiredPatchExpiration = sp.getBoolean(R.string.key_patch_expiration, false)
|
||||||
|
@ -421,7 +421,7 @@ class MedtrumPump @Inject constructor(
|
||||||
)
|
)
|
||||||
aapsLogger.debug(
|
aapsLogger.debug(
|
||||||
LTag.PUMPCOMM,
|
LTag.PUMPCOMM,
|
||||||
"handleBasalStatusUpdate: ${if (newRecord) "**NEW** " else ""}EVENT TEMP_START ($basalType) ${dateUtil.dateAndTimeString(basalStartTime)} ($basalStartTime) " + "Rate: $basalRate Duration: ${duration} temporaryBasalInfo: $temporaryBasalInfo, expectedTemporaryBasal: $expectedTemporaryBasal"
|
"handleBasalStatusUpdate: ${newRecordInfo(newRecord)}EVENT TEMP_START ($basalType) ${dateUtil.dateAndTimeString(basalStartTime)} ($basalStartTime) " + "Rate: $basalRate Duration: ${duration} temporaryBasalInfo: $temporaryBasalInfo, expectedTemporaryBasal: $expectedTemporaryBasal"
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -438,7 +438,7 @@ class MedtrumPump @Inject constructor(
|
||||||
)
|
)
|
||||||
aapsLogger.debug(
|
aapsLogger.debug(
|
||||||
LTag.PUMPCOMM,
|
LTag.PUMPCOMM,
|
||||||
"handleBasalStatusUpdate: ${if (newRecord) "**NEW** " else ""}EVENT TEMP_START ($basalType) ${dateUtil.dateAndTimeString(basalStartTime)} ($basalStartTime) expectedTemporaryBasal: $expectedTemporaryBasal"
|
"handleBasalStatusUpdate: ${newRecordInfo(newRecord)}EVENT TEMP_START ($basalType) ${dateUtil.dateAndTimeString(basalStartTime)} ($basalStartTime) expectedTemporaryBasal: $expectedTemporaryBasal"
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -507,7 +507,7 @@ class MedtrumPump @Inject constructor(
|
||||||
)
|
)
|
||||||
aapsLogger.debug(
|
aapsLogger.debug(
|
||||||
LTag.PUMPCOMM,
|
LTag.PUMPCOMM,
|
||||||
"handleBasalStatusUpdate: ${if (newRecord) "**NEW** " else ""}EVENT TEMP_START (FAKE)"
|
"handleBasalStatusUpdate: ${newRecordInfo(newRecord)}EVENT TEMP_START (FAKE)"
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -597,4 +597,8 @@ class MedtrumPump @Inject constructor(
|
||||||
.let { EnumSet.copyOf(it) }
|
.let { EnumSet.copyOf(it) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun newRecordInfo(newRecord: Boolean): String {
|
||||||
|
return "${if (newRecord) "**NEW** " else ""}"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -87,204 +87,11 @@ class GetRecordPacket(injector: HasAndroidInjector, private val recordIndex: Int
|
||||||
if (recordHeader == VALID_HEADER) {
|
if (recordHeader == VALID_HEADER) {
|
||||||
when (recordType) {
|
when (recordType) {
|
||||||
BOLUS_RECORD, BOLUS_RECORD_ALT -> {
|
BOLUS_RECORD, BOLUS_RECORD_ALT -> {
|
||||||
aapsLogger.debug(LTag.PUMPCOMM, "GetRecordPacket HandleResponse: BOLUS_RECORD")
|
handleBolusRecord(data)
|
||||||
val typeAndWizard = data.copyOfRange(RESP_RECORD_DATA_START, RESP_RECORD_DATA_START + 1).toInt()
|
|
||||||
val bolusCause = data.copyOfRange(RESP_RECORD_DATA_START + 1, RESP_RECORD_DATA_START + 2).toInt()
|
|
||||||
val unknown = data.copyOfRange(RESP_RECORD_DATA_START + 2, RESP_RECORD_DATA_START + 4).toInt()
|
|
||||||
val bolusStartTime = MedtrumTimeUtil().convertPumpTimeToSystemTimeMillis(data.copyOfRange(RESP_RECORD_DATA_START + 4, RESP_RECORD_DATA_START + 8).toLong())
|
|
||||||
val bolusNormalAmount = data.copyOfRange(RESP_RECORD_DATA_START + 8, RESP_RECORD_DATA_START + 10).toInt() * 0.05
|
|
||||||
val bolusNormalDelivered = data.copyOfRange(RESP_RECORD_DATA_START + 10, RESP_RECORD_DATA_START + 12).toInt() * 0.05
|
|
||||||
val bolusExtendedAmount = data.copyOfRange(RESP_RECORD_DATA_START + 12, RESP_RECORD_DATA_START + 14).toInt() * 0.05
|
|
||||||
val bolusExtendedDuration = T.mins(data.copyOfRange(RESP_RECORD_DATA_START + 14, RESP_RECORD_DATA_START + 16).toLong()).msecs()
|
|
||||||
val bolusExtendedDelivered = data.copyOfRange(RESP_RECORD_DATA_START + 16, RESP_RECORD_DATA_START + 18).toInt() * 0.05
|
|
||||||
val bolusCarb = data.copyOfRange(RESP_RECORD_DATA_START + 18, RESP_RECORD_DATA_START + 20).toInt()
|
|
||||||
val bolusGlucose = data.copyOfRange(RESP_RECORD_DATA_START + 20, RESP_RECORD_DATA_START + 22).toInt()
|
|
||||||
val bolusIOB = data.copyOfRange(RESP_RECORD_DATA_START + 22, RESP_RECORD_DATA_START + 24).toInt()
|
|
||||||
val unknown1 = data.copyOfRange(RESP_RECORD_DATA_START + 24, RESP_RECORD_DATA_START + 26).toInt()
|
|
||||||
val unknown2 = data.copyOfRange(RESP_RECORD_DATA_START + 26, RESP_RECORD_DATA_START + 28).toInt()
|
|
||||||
val bolusType = enumValues<BolusType>()[typeAndWizard and 0x0F]
|
|
||||||
val bolusWizard = (typeAndWizard and 0xF0) != 0
|
|
||||||
aapsLogger.debug(
|
|
||||||
LTag.PUMPCOMM,
|
|
||||||
"GetRecordPacket HandleResponse: BOLUS_RECORD: typeAndWizard: $typeAndWizard, bolusCause: $bolusCause, unknown: $unknown, bolusStartTime: $bolusStartTime, " +
|
|
||||||
"bolusNormalAmount: $bolusNormalAmount, bolusNormalDelivered: $bolusNormalDelivered, bolusExtendedAmount: $bolusExtendedAmount, bolusExtendedDuration: " +
|
|
||||||
"$bolusExtendedDuration, " + "bolusExtendedDelivered: $bolusExtendedDelivered, bolusCarb: $bolusCarb, bolusGlucose: $bolusGlucose, bolusIOB: $bolusIOB, unknown1: $unknown1, unknown2: $unknown2, " + "bolusType: $bolusType, bolusWizard: $bolusWizard"
|
|
||||||
)
|
|
||||||
|
|
||||||
when (bolusType) {
|
|
||||||
BolusType.NORMAL -> {
|
|
||||||
val detailedBolusInfo = detailedBolusInfoStorage.findDetailedBolusInfo(bolusStartTime, bolusNormalDelivered)
|
|
||||||
var newRecord = false
|
|
||||||
if (detailedBolusInfo != null) {
|
|
||||||
val syncOk = pumpSync.syncBolusWithTempId(
|
|
||||||
timestamp = bolusStartTime,
|
|
||||||
amount = bolusNormalDelivered,
|
|
||||||
temporaryId = detailedBolusInfo.timestamp,
|
|
||||||
type = detailedBolusInfo.bolusType,
|
|
||||||
pumpId = bolusStartTime,
|
|
||||||
pumpType = medtrumPump.pumpType(),
|
|
||||||
pumpSerial = medtrumPump.pumpSN.toString(radix = 16)
|
|
||||||
)
|
|
||||||
if (!syncOk) {
|
|
||||||
aapsLogger.warn(LTag.PUMPCOMM, "GetRecordPacket HandleResponse: BOLUS_RECORD: Failed to sync bolus with tempId: ${detailedBolusInfo.timestamp}")
|
|
||||||
// detailedInfo can be from another similar record. Reinsert
|
|
||||||
detailedBolusInfoStorage.add(detailedBolusInfo)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
newRecord = pumpSync.syncBolusWithPumpId(
|
|
||||||
timestamp = bolusStartTime,
|
|
||||||
amount = bolusNormalDelivered,
|
|
||||||
type = null,
|
|
||||||
pumpId = bolusStartTime,
|
|
||||||
pumpType = medtrumPump.pumpType(),
|
|
||||||
pumpSerial = medtrumPump.pumpSN.toString(radix = 16)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
aapsLogger.debug(
|
|
||||||
LTag.PUMPCOMM,
|
|
||||||
"from record: ${if (newRecord) "**NEW** " else ""}EVENT BOLUS ${dateUtil.dateAndTimeString(bolusStartTime)} ($bolusStartTime) Bolus: ${bolusNormalDelivered}U "
|
|
||||||
)
|
|
||||||
if (bolusStartTime > medtrumPump.lastBolusTime) {
|
|
||||||
medtrumPump.lastBolusTime = bolusStartTime
|
|
||||||
medtrumPump.lastBolusAmount = bolusNormalDelivered
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
BolusType.EXTENDED -> {
|
|
||||||
val newRecord = pumpSync.syncExtendedBolusWithPumpId(
|
|
||||||
timestamp = bolusStartTime,
|
|
||||||
amount = bolusExtendedDelivered,
|
|
||||||
duration = bolusExtendedDuration,
|
|
||||||
isEmulatingTB = false,
|
|
||||||
pumpId = bolusStartTime,
|
|
||||||
pumpType = medtrumPump.pumpType(),
|
|
||||||
pumpSerial = medtrumPump.pumpSN.toString(radix = 16)
|
|
||||||
)
|
|
||||||
aapsLogger.debug(
|
|
||||||
LTag.PUMPCOMM,
|
|
||||||
"from record: ${if (newRecord) "**NEW** " else ""}EVENT EXTENDED BOLUS ${dateUtil.dateAndTimeString(bolusStartTime)} ($bolusStartTime) Bolus: ${bolusNormalDelivered}U "
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
BolusType.COMBI -> {
|
|
||||||
// Note, this should never happen, as we don't use combo bolus
|
|
||||||
val detailedBolusInfo = detailedBolusInfoStorage.findDetailedBolusInfo(bolusStartTime, bolusNormalDelivered)
|
|
||||||
val newRecord = pumpSync.syncBolusWithPumpId(
|
|
||||||
timestamp = bolusStartTime,
|
|
||||||
amount = bolusNormalDelivered,
|
|
||||||
type = detailedBolusInfo?.bolusType,
|
|
||||||
pumpId = bolusStartTime,
|
|
||||||
pumpType = medtrumPump.pumpType(),
|
|
||||||
pumpSerial = medtrumPump.pumpSN.toString(radix = 16)
|
|
||||||
)
|
|
||||||
pumpSync.syncExtendedBolusWithPumpId(
|
|
||||||
timestamp = bolusStartTime,
|
|
||||||
amount = bolusExtendedDelivered,
|
|
||||||
duration = bolusExtendedDuration,
|
|
||||||
isEmulatingTB = false,
|
|
||||||
pumpId = bolusStartTime,
|
|
||||||
pumpType = medtrumPump.pumpType(),
|
|
||||||
pumpSerial = medtrumPump.pumpSN.toString(radix = 16)
|
|
||||||
)
|
|
||||||
aapsLogger.error(
|
|
||||||
LTag.PUMPCOMM,
|
|
||||||
"from record: ${if (newRecord) "**NEW** " else ""}EVENT COMBI BOLUS ${dateUtil.dateAndTimeString(bolusStartTime)} ($bolusStartTime) Bolus: ${bolusNormalDelivered}U Extended: ${bolusExtendedDelivered} THIS SHOULD NOT HAPPEN!!!"
|
|
||||||
)
|
|
||||||
if (!newRecord && detailedBolusInfo != null) {
|
|
||||||
// detailedInfo can be from another similar record. Reinsert
|
|
||||||
detailedBolusInfoStorage.add(detailedBolusInfo)
|
|
||||||
}
|
|
||||||
if (bolusStartTime > medtrumPump.lastBolusTime) {
|
|
||||||
medtrumPump.lastBolusTime = bolusStartTime
|
|
||||||
medtrumPump.lastBolusAmount = bolusNormalDelivered
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
else -> {
|
|
||||||
aapsLogger.error(LTag.PUMPCOMM, "GetRecordPacket HandleResponse: BOLUS_RECORD: Unknown bolus type: $bolusType")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
BASAL_RECORD, BASAL_RECORD_ALT -> {
|
BASAL_RECORD, BASAL_RECORD_ALT -> {
|
||||||
val medtrumTimeUtil = MedtrumTimeUtil()
|
handleBasalRecord(data)
|
||||||
val basalStartTime = medtrumTimeUtil.convertPumpTimeToSystemTimeMillis(data.copyOfRange(RESP_RECORD_DATA_START, RESP_RECORD_DATA_START + 4).toLong())
|
|
||||||
val basalEndTime = medtrumTimeUtil.convertPumpTimeToSystemTimeMillis(data.copyOfRange(RESP_RECORD_DATA_START + 4, RESP_RECORD_DATA_START + 8).toLong())
|
|
||||||
val basalType = enumValues<BasalType>()[data.copyOfRange(RESP_RECORD_DATA_START + 8, RESP_RECORD_DATA_START + 9).toInt()]
|
|
||||||
val basalEndReason = enumValues<BasalEndReason>()[data.copyOfRange(RESP_RECORD_DATA_START + 9, RESP_RECORD_DATA_START + 10).toInt()]
|
|
||||||
val basalRate = data.copyOfRange(RESP_RECORD_DATA_START + 10, RESP_RECORD_DATA_START + 12).toInt() * 0.05
|
|
||||||
val basalDelivered = data.copyOfRange(RESP_RECORD_DATA_START + 12, RESP_RECORD_DATA_START + 14).toInt() * 0.05
|
|
||||||
val basalPercent = data.copyOfRange(RESP_RECORD_DATA_START + 14, RESP_RECORD_DATA_START + 16).toInt()
|
|
||||||
|
|
||||||
aapsLogger.debug(
|
|
||||||
LTag.PUMPCOMM,
|
|
||||||
"GetRecordPacket HandleResponse: BASAL_RECORD: Start: $basalStartTime, End: $basalEndTime, Type: $basalType, EndReason: $basalEndReason, Rate: $basalRate, Delivered: $basalDelivered, Percent: $basalPercent"
|
|
||||||
)
|
|
||||||
|
|
||||||
when (basalType) {
|
|
||||||
BasalType.STANDARD -> {
|
|
||||||
aapsLogger.debug(LTag.PUMPCOMM, "GetRecordPacket HandleResponse: BASAL_RECORD: Standard basal")
|
|
||||||
// If we are here it means the basal has ended
|
|
||||||
}
|
|
||||||
|
|
||||||
BasalType.ABSOLUTE_TEMP, BasalType.RELATIVE_TEMP -> {
|
|
||||||
aapsLogger.debug(LTag.PUMPCOMM, "GetRecordPacket HandleResponse: BASAL_RECORD: temp basal")
|
|
||||||
var duration = (basalEndTime - basalStartTime)
|
|
||||||
// Work around for pumpSync not accepting 0 duration.
|
|
||||||
// sometimes we get 0 duration for very short basal because the pump only reports time in seconds
|
|
||||||
if (duration < 250) duration = 250 // 250ms to make sure AAPS accepts it
|
|
||||||
|
|
||||||
val newRecord = pumpSync.syncTemporaryBasalWithPumpId(
|
|
||||||
timestamp = basalStartTime,
|
|
||||||
rate = if (basalType == BasalType.ABSOLUTE_TEMP) basalRate else basalPercent.toDouble(),
|
|
||||||
duration = duration,
|
|
||||||
isAbsolute = (basalType == BasalType.ABSOLUTE_TEMP),
|
|
||||||
type = PumpSync.TemporaryBasalType.NORMAL,
|
|
||||||
pumpId = basalStartTime,
|
|
||||||
pumpType = medtrumPump.pumpType(),
|
|
||||||
pumpSerial = medtrumPump.pumpSN.toString(radix = 16)
|
|
||||||
)
|
|
||||||
aapsLogger.debug(
|
|
||||||
LTag.PUMPCOMM,
|
|
||||||
"handleBasalStatusUpdate from record: ${if (newRecord) "**NEW** " else ""}EVENT TEMP_SYNC: ($basalType) ${dateUtil.dateAndTimeString(basalStartTime)} ($basalStartTime) " +
|
|
||||||
"Rate: $basalRate Duration: ${duration}"
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
in BasalType.SUSPEND_LOW_GLUCOSE..BasalType.STOP -> {
|
|
||||||
aapsLogger.debug(LTag.PUMPCOMM, "GetRecordPacket HandleResponse: BASAL_RECORD: Suspend basal")
|
|
||||||
// Never seen a packet like this from a pump, even when suspended by app, but leave it in just in case
|
|
||||||
val duration = (basalEndTime - basalStartTime)
|
|
||||||
val newRecord = pumpSync.syncTemporaryBasalWithPumpId(
|
|
||||||
timestamp = basalStartTime,
|
|
||||||
rate = 0.0,
|
|
||||||
duration = duration,
|
|
||||||
isAbsolute = true,
|
|
||||||
type = PumpSync.TemporaryBasalType.PUMP_SUSPEND,
|
|
||||||
pumpId = basalStartTime,
|
|
||||||
pumpType = medtrumPump.pumpType(),
|
|
||||||
pumpSerial = medtrumPump.pumpSN.toString(radix = 16)
|
|
||||||
)
|
|
||||||
aapsLogger.debug(
|
|
||||||
LTag.PUMPCOMM,
|
|
||||||
"handleBasalStatusUpdate from record: ${if (newRecord) "**NEW** " else ""}EVENT SUSPEND: ($basalType) ${dateUtil.dateAndTimeString(basalStartTime)} ($basalStartTime) " +
|
|
||||||
"Rate: $basalRate Duration: ${duration}"
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
else -> {
|
|
||||||
aapsLogger.error(LTag.PUMPCOMM, "GetRecordPacket HandleResponse: BASAL_RECORD: Unknown basal type: $basalType")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (basalEndReason.isSuspendedByPump()) {
|
|
||||||
// Pump doesn't seem to sync suspend explicitly, so we need to do it here
|
|
||||||
// Sync suspend using handleBasalStatusUpdate to make sure other variables are updated as well
|
|
||||||
aapsLogger.warn(LTag.PUMPCOMM, "GetRecordPacket HandleResponse: Got suspended end reason, syncing suspend")
|
|
||||||
medtrumPump.handleBasalStatusUpdate(BasalType.fromBasalEndReason(basalEndReason), 0.0, recordSequence, recordPatchId, basalEndTime)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ALARM_RECORD -> {
|
ALARM_RECORD -> {
|
||||||
|
@ -312,54 +119,13 @@ class GetRecordPacket(injector: HasAndroidInjector, private val recordIndex: Int
|
||||||
}
|
}
|
||||||
|
|
||||||
TDD_RECORD -> {
|
TDD_RECORD -> {
|
||||||
aapsLogger.debug(LTag.PUMPCOMM, "GetRecordPacket HandleResponse: TDD_RECORD")
|
handleTddRecord(data)
|
||||||
val timestamp = MedtrumTimeUtil().convertPumpTimeToSystemTimeMillis(data.copyOfRange(RESP_RECORD_DATA_START, RESP_RECORD_DATA_START + 4).toLong())
|
|
||||||
val timeZoneOffset = data.copyOfRange(RESP_RECORD_DATA_START + 4, RESP_RECORD_DATA_START + 6).toInt()
|
|
||||||
val tddMinutes = data.copyOfRange(RESP_RECORD_DATA_START + 6, RESP_RECORD_DATA_START + 8).toInt()
|
|
||||||
val glucoseRecordTime = data.copyOfRange(RESP_RECORD_DATA_START + 8, RESP_RECORD_DATA_START + 12).toLong()
|
|
||||||
val tdd = data.copyOfRange(RESP_RECORD_DATA_START + 12, RESP_RECORD_DATA_START + 16).toFloat()
|
|
||||||
val basalTdd = data.copyOfRange(RESP_RECORD_DATA_START + 16, RESP_RECORD_DATA_START + 20).toFloat()
|
|
||||||
val glucose = data.copyOfRange(RESP_RECORD_DATA_START + 20, RESP_RECORD_DATA_START + 24).toFloat()
|
|
||||||
val unknown = data.copyOfRange(RESP_RECORD_DATA_START + 24, RESP_RECORD_DATA_START + 28).toFloat()
|
|
||||||
val meanSomething = data.copyOfRange(RESP_RECORD_DATA_START + 28, RESP_RECORD_DATA_START + 32).toFloat()
|
|
||||||
val usedTdd = data.copyOfRange(RESP_RECORD_DATA_START + 32, RESP_RECORD_DATA_START + 36).toFloat()
|
|
||||||
val usedIBasal = data.copyOfRange(RESP_RECORD_DATA_START + 36, RESP_RECORD_DATA_START + 40).toFloat()
|
|
||||||
val usedSgBasal = data.copyOfRange(RESP_RECORD_DATA_START + 40, RESP_RECORD_DATA_START + 44).toFloat()
|
|
||||||
val usedUMax = data.copyOfRange(RESP_RECORD_DATA_START + 44, RESP_RECORD_DATA_START + 48).toFloat()
|
|
||||||
val newTdd = data.copyOfRange(RESP_RECORD_DATA_START + 48, RESP_RECORD_DATA_START + 52).toFloat()
|
|
||||||
val newIBasal = data.copyOfRange(RESP_RECORD_DATA_START + 52, RESP_RECORD_DATA_START + 56).toFloat()
|
|
||||||
val newSgBasal = data.copyOfRange(RESP_RECORD_DATA_START + 56, RESP_RECORD_DATA_START + 60).toFloat()
|
|
||||||
val newUMax = data.copyOfRange(RESP_RECORD_DATA_START + 60, RESP_RECORD_DATA_START + 64).toFloat()
|
|
||||||
|
|
||||||
aapsLogger.debug(
|
|
||||||
LTag.PUMPCOMM, "TDD_RECORD: timestamp: $timestamp, timeZoneOffset: $timeZoneOffset, tddMinutes: $tddMinutes, glucoseRecordTime: $glucoseRecordTime, tdd: " +
|
|
||||||
"$tdd, basalTdd: $basalTdd, glucose: $glucose, unknown: $unknown, meanSomething: $meanSomething, usedTdd: $usedTdd, usedIBasal: $usedIBasal, usedSgBasal: " +
|
|
||||||
"$usedSgBasal, usedUMax: $usedUMax, newTdd: $newTdd, newIBasal: $newIBasal, newSgBasal: $newSgBasal, newUMax: $newUMax"
|
|
||||||
)
|
|
||||||
|
|
||||||
val newRecord = pumpSync.createOrUpdateTotalDailyDose(
|
|
||||||
timestamp = timestamp,
|
|
||||||
bolusAmount = (tdd - basalTdd).toDouble(),
|
|
||||||
basalAmount = basalTdd.toDouble(),
|
|
||||||
totalAmount = tdd.toDouble(),
|
|
||||||
pumpId = timestamp,
|
|
||||||
pumpType = medtrumPump.pumpType(),
|
|
||||||
pumpSerial = medtrumPump.pumpSN.toString(radix = 16)
|
|
||||||
)
|
|
||||||
|
|
||||||
aapsLogger.debug(
|
|
||||||
LTag.PUMPCOMM,
|
|
||||||
"handleBasalStatusUpdate from record: ${if (newRecord) "**NEW** " else ""}EVENT TDD: ${dateUtil.dateAndTimeString(timestamp)} ($timestamp) " +
|
|
||||||
"TDD: $tdd, BasalTDD: $basalTdd, BolusTDD: ${tdd - basalTdd}"
|
|
||||||
)
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
else -> {
|
else -> {
|
||||||
aapsLogger.debug(LTag.PUMPCOMM, "GetRecordPacket HandleResponse: Unknown record type: $recordType")
|
aapsLogger.debug(LTag.PUMPCOMM, "GetRecordPacket HandleResponse: Unknown record type: $recordType")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
aapsLogger.error(LTag.PUMPCOMM, "GetRecordPacket HandleResponse: Invalid record header")
|
aapsLogger.error(LTag.PUMPCOMM, "GetRecordPacket HandleResponse: Invalid record header")
|
||||||
}
|
}
|
||||||
|
@ -370,4 +136,255 @@ class GetRecordPacket(injector: HasAndroidInjector, private val recordIndex: Int
|
||||||
|
|
||||||
return success
|
return success
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun handleBolusRecord(data: ByteArray) {
|
||||||
|
aapsLogger.debug(LTag.PUMPCOMM, "GetRecordPacket HandleResponse: BOLUS_RECORD")
|
||||||
|
val typeAndWizard = data.copyOfRange(RESP_RECORD_DATA_START, RESP_RECORD_DATA_START + 1).toInt()
|
||||||
|
val bolusCause = data.copyOfRange(RESP_RECORD_DATA_START + 1, RESP_RECORD_DATA_START + 2).toInt()
|
||||||
|
val unknown = data.copyOfRange(RESP_RECORD_DATA_START + 2, RESP_RECORD_DATA_START + 4).toInt()
|
||||||
|
val bolusStartTime = MedtrumTimeUtil().convertPumpTimeToSystemTimeMillis(data.copyOfRange(RESP_RECORD_DATA_START + 4, RESP_RECORD_DATA_START + 8).toLong())
|
||||||
|
val bolusNormalAmount = data.copyOfRange(RESP_RECORD_DATA_START + 8, RESP_RECORD_DATA_START + 10).toInt() * 0.05
|
||||||
|
val bolusNormalDelivered = data.copyOfRange(RESP_RECORD_DATA_START + 10, RESP_RECORD_DATA_START + 12).toInt() * 0.05
|
||||||
|
val bolusExtendedAmount = data.copyOfRange(RESP_RECORD_DATA_START + 12, RESP_RECORD_DATA_START + 14).toInt() * 0.05
|
||||||
|
val bolusExtendedDuration = T.mins(data.copyOfRange(RESP_RECORD_DATA_START + 14, RESP_RECORD_DATA_START + 16).toLong()).msecs()
|
||||||
|
val bolusExtendedDelivered = data.copyOfRange(RESP_RECORD_DATA_START + 16, RESP_RECORD_DATA_START + 18).toInt() * 0.05
|
||||||
|
val bolusCarb = data.copyOfRange(RESP_RECORD_DATA_START + 18, RESP_RECORD_DATA_START + 20).toInt()
|
||||||
|
val bolusGlucose = data.copyOfRange(RESP_RECORD_DATA_START + 20, RESP_RECORD_DATA_START + 22).toInt()
|
||||||
|
val bolusIOB = data.copyOfRange(RESP_RECORD_DATA_START + 22, RESP_RECORD_DATA_START + 24).toInt()
|
||||||
|
val unknown1 = data.copyOfRange(RESP_RECORD_DATA_START + 24, RESP_RECORD_DATA_START + 26).toInt()
|
||||||
|
val unknown2 = data.copyOfRange(RESP_RECORD_DATA_START + 26, RESP_RECORD_DATA_START + 28).toInt()
|
||||||
|
val bolusType = enumValues<BolusType>()[typeAndWizard and 0x0F]
|
||||||
|
val bolusWizard = (typeAndWizard and 0xF0) != 0
|
||||||
|
aapsLogger.debug(
|
||||||
|
LTag.PUMPCOMM,
|
||||||
|
"GetRecordPacket HandleResponse: BOLUS_RECORD: typeAndWizard: $typeAndWizard, bolusCause: $bolusCause, unknown: $unknown, bolusStartTime: $bolusStartTime, " +
|
||||||
|
"bolusNormalAmount: $bolusNormalAmount, bolusNormalDelivered: $bolusNormalDelivered, bolusExtendedAmount: $bolusExtendedAmount, bolusExtendedDuration: " +
|
||||||
|
"$bolusExtendedDuration, " + "bolusExtendedDelivered: $bolusExtendedDelivered, bolusCarb: $bolusCarb, bolusGlucose: $bolusGlucose, bolusIOB: $bolusIOB, unknown1: $unknown1, unknown2: $unknown2, " + "bolusType: $bolusType, bolusWizard: $bolusWizard"
|
||||||
|
)
|
||||||
|
|
||||||
|
when (bolusType) {
|
||||||
|
BolusType.NORMAL -> {
|
||||||
|
val detailedBolusInfo = detailedBolusInfoStorage.findDetailedBolusInfo(bolusStartTime, bolusNormalDelivered)
|
||||||
|
var newRecord = false
|
||||||
|
if (detailedBolusInfo != null) {
|
||||||
|
val syncOk = pumpSync.syncBolusWithTempId(
|
||||||
|
timestamp = bolusStartTime,
|
||||||
|
amount = bolusNormalDelivered,
|
||||||
|
temporaryId = detailedBolusInfo.timestamp,
|
||||||
|
type = detailedBolusInfo.bolusType,
|
||||||
|
pumpId = bolusStartTime,
|
||||||
|
pumpType = medtrumPump.pumpType(),
|
||||||
|
pumpSerial = medtrumPump.pumpSN.toString(radix = 16)
|
||||||
|
)
|
||||||
|
if (!syncOk) {
|
||||||
|
aapsLogger.warn(LTag.PUMPCOMM, "GetRecordPacket HandleResponse: BOLUS_RECORD: Failed to sync bolus with tempId: ${detailedBolusInfo.timestamp}")
|
||||||
|
// detailedInfo can be from another similar record. Reinsert
|
||||||
|
detailedBolusInfoStorage.add(detailedBolusInfo)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
newRecord = pumpSync.syncBolusWithPumpId(
|
||||||
|
timestamp = bolusStartTime,
|
||||||
|
amount = bolusNormalDelivered,
|
||||||
|
type = null,
|
||||||
|
pumpId = bolusStartTime,
|
||||||
|
pumpType = medtrumPump.pumpType(),
|
||||||
|
pumpSerial = medtrumPump.pumpSN.toString(radix = 16)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
aapsLogger.debug(
|
||||||
|
LTag.PUMPCOMM,
|
||||||
|
"from record: ${newRecordInfo(newRecord)}EVENT BOLUS ${dateUtil.dateAndTimeString(bolusStartTime)} ($bolusStartTime) Bolus: ${bolusNormalDelivered}U "
|
||||||
|
)
|
||||||
|
if (bolusStartTime > medtrumPump.lastBolusTime) {
|
||||||
|
medtrumPump.lastBolusTime = bolusStartTime
|
||||||
|
medtrumPump.lastBolusAmount = bolusNormalDelivered
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
BolusType.EXTENDED -> {
|
||||||
|
val newRecord = pumpSync.syncExtendedBolusWithPumpId(
|
||||||
|
timestamp = bolusStartTime,
|
||||||
|
amount = bolusExtendedDelivered,
|
||||||
|
duration = bolusExtendedDuration,
|
||||||
|
isEmulatingTB = false,
|
||||||
|
pumpId = bolusStartTime,
|
||||||
|
pumpType = medtrumPump.pumpType(),
|
||||||
|
pumpSerial = medtrumPump.pumpSN.toString(radix = 16)
|
||||||
|
)
|
||||||
|
aapsLogger.debug(
|
||||||
|
LTag.PUMPCOMM,
|
||||||
|
"from record: ${newRecordInfo(newRecord)}EVENT EXTENDED BOLUS ${dateUtil.dateAndTimeString(bolusStartTime)} ($bolusStartTime) Bolus: ${bolusNormalDelivered}U "
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
BolusType.COMBI -> {
|
||||||
|
// Note, this should never happen, as we don't use combo bolus
|
||||||
|
val detailedBolusInfo = detailedBolusInfoStorage.findDetailedBolusInfo(bolusStartTime, bolusNormalDelivered)
|
||||||
|
val newRecord = pumpSync.syncBolusWithPumpId(
|
||||||
|
timestamp = bolusStartTime,
|
||||||
|
amount = bolusNormalDelivered,
|
||||||
|
type = detailedBolusInfo?.bolusType,
|
||||||
|
pumpId = bolusStartTime,
|
||||||
|
pumpType = medtrumPump.pumpType(),
|
||||||
|
pumpSerial = medtrumPump.pumpSN.toString(radix = 16)
|
||||||
|
)
|
||||||
|
pumpSync.syncExtendedBolusWithPumpId(
|
||||||
|
timestamp = bolusStartTime,
|
||||||
|
amount = bolusExtendedDelivered,
|
||||||
|
duration = bolusExtendedDuration,
|
||||||
|
isEmulatingTB = false,
|
||||||
|
pumpId = bolusStartTime,
|
||||||
|
pumpType = medtrumPump.pumpType(),
|
||||||
|
pumpSerial = medtrumPump.pumpSN.toString(radix = 16)
|
||||||
|
)
|
||||||
|
aapsLogger.error(
|
||||||
|
LTag.PUMPCOMM,
|
||||||
|
"from record: ${newRecordInfo(newRecord)}EVENT COMBI BOLUS ${dateUtil.dateAndTimeString(bolusStartTime)} ($bolusStartTime) Bolus: ${bolusNormalDelivered}U Extended: ${bolusExtendedDelivered} THIS SHOULD NOT HAPPEN!!!"
|
||||||
|
)
|
||||||
|
if (!newRecord && detailedBolusInfo != null) {
|
||||||
|
// detailedInfo can be from another similar record. Reinsert
|
||||||
|
detailedBolusInfoStorage.add(detailedBolusInfo)
|
||||||
|
}
|
||||||
|
if (bolusStartTime > medtrumPump.lastBolusTime) {
|
||||||
|
medtrumPump.lastBolusTime = bolusStartTime
|
||||||
|
medtrumPump.lastBolusAmount = bolusNormalDelivered
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
else -> {
|
||||||
|
aapsLogger.error(LTag.PUMPCOMM, "GetRecordPacket HandleResponse: BOLUS_RECORD: Unknown bolus type: $bolusType")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun handleBasalRecord(data: ByteArray) {
|
||||||
|
val medtrumTimeUtil = MedtrumTimeUtil()
|
||||||
|
|
||||||
|
val recordPatchId = data.copyOfRange(RESP_RECORD_PATCH_ID_START, RESP_RECORD_PATCH_ID_END).toLong()
|
||||||
|
val recordSequence = data.copyOfRange(RESP_RECORD_SEQUENCE_START, RESP_RECORD_SEQUENCE_END).toInt()
|
||||||
|
|
||||||
|
val basalStartTime = medtrumTimeUtil.convertPumpTimeToSystemTimeMillis(data.copyOfRange(RESP_RECORD_DATA_START, RESP_RECORD_DATA_START + 4).toLong())
|
||||||
|
val basalEndTime = medtrumTimeUtil.convertPumpTimeToSystemTimeMillis(data.copyOfRange(RESP_RECORD_DATA_START + 4, RESP_RECORD_DATA_START + 8).toLong())
|
||||||
|
val basalType = enumValues<BasalType>()[data.copyOfRange(RESP_RECORD_DATA_START + 8, RESP_RECORD_DATA_START + 9).toInt()]
|
||||||
|
val basalEndReason = enumValues<BasalEndReason>()[data.copyOfRange(RESP_RECORD_DATA_START + 9, RESP_RECORD_DATA_START + 10).toInt()]
|
||||||
|
val basalRate = data.copyOfRange(RESP_RECORD_DATA_START + 10, RESP_RECORD_DATA_START + 12).toInt() * 0.05
|
||||||
|
val basalDelivered = data.copyOfRange(RESP_RECORD_DATA_START + 12, RESP_RECORD_DATA_START + 14).toInt() * 0.05
|
||||||
|
val basalPercent = data.copyOfRange(RESP_RECORD_DATA_START + 14, RESP_RECORD_DATA_START + 16).toInt()
|
||||||
|
|
||||||
|
aapsLogger.debug(
|
||||||
|
LTag.PUMPCOMM,
|
||||||
|
"GetRecordPacket HandleResponse: BASAL_RECORD: Start: $basalStartTime, End: $basalEndTime, Type: $basalType, EndReason: $basalEndReason, Rate: $basalRate, Delivered: $basalDelivered, Percent: $basalPercent"
|
||||||
|
)
|
||||||
|
|
||||||
|
when (basalType) {
|
||||||
|
BasalType.STANDARD -> {
|
||||||
|
aapsLogger.debug(LTag.PUMPCOMM, "GetRecordPacket HandleResponse: BASAL_RECORD: Standard basal")
|
||||||
|
// If we are here it means the basal has ended
|
||||||
|
}
|
||||||
|
|
||||||
|
BasalType.ABSOLUTE_TEMP, BasalType.RELATIVE_TEMP -> {
|
||||||
|
aapsLogger.debug(LTag.PUMPCOMM, "GetRecordPacket HandleResponse: BASAL_RECORD: temp basal")
|
||||||
|
var duration = (basalEndTime - basalStartTime)
|
||||||
|
// Work around for pumpSync not accepting 0 duration.
|
||||||
|
// sometimes we get 0 duration for very short basal because the pump only reports time in seconds
|
||||||
|
if (duration < 250) duration = 250 // 250ms to make sure AAPS accepts it
|
||||||
|
|
||||||
|
val newRecord = pumpSync.syncTemporaryBasalWithPumpId(
|
||||||
|
timestamp = basalStartTime,
|
||||||
|
rate = if (basalType == BasalType.ABSOLUTE_TEMP) basalRate else basalPercent.toDouble(),
|
||||||
|
duration = duration,
|
||||||
|
isAbsolute = (basalType == BasalType.ABSOLUTE_TEMP),
|
||||||
|
type = PumpSync.TemporaryBasalType.NORMAL,
|
||||||
|
pumpId = basalStartTime,
|
||||||
|
pumpType = medtrumPump.pumpType(),
|
||||||
|
pumpSerial = medtrumPump.pumpSN.toString(radix = 16)
|
||||||
|
)
|
||||||
|
aapsLogger.debug(
|
||||||
|
LTag.PUMPCOMM,
|
||||||
|
"handleBasalStatusUpdate from record: ${newRecordInfo(newRecord)}EVENT TEMP_SYNC: ($basalType) ${dateUtil.dateAndTimeString(basalStartTime)} ($basalStartTime) " +
|
||||||
|
"Rate: $basalRate Duration: ${duration}"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
in BasalType.SUSPEND_LOW_GLUCOSE..BasalType.STOP -> {
|
||||||
|
aapsLogger.debug(LTag.PUMPCOMM, "GetRecordPacket HandleResponse: BASAL_RECORD: Suspend basal")
|
||||||
|
// Never seen a packet like this from a pump, even when suspended by app, but leave it in just in case
|
||||||
|
val duration = (basalEndTime - basalStartTime)
|
||||||
|
val newRecord = pumpSync.syncTemporaryBasalWithPumpId(
|
||||||
|
timestamp = basalStartTime,
|
||||||
|
rate = 0.0,
|
||||||
|
duration = duration,
|
||||||
|
isAbsolute = true,
|
||||||
|
type = PumpSync.TemporaryBasalType.PUMP_SUSPEND,
|
||||||
|
pumpId = basalStartTime,
|
||||||
|
pumpType = medtrumPump.pumpType(),
|
||||||
|
pumpSerial = medtrumPump.pumpSN.toString(radix = 16)
|
||||||
|
)
|
||||||
|
aapsLogger.debug(
|
||||||
|
LTag.PUMPCOMM,
|
||||||
|
"handleBasalStatusUpdate from record: ${newRecordInfo(newRecord)}EVENT SUSPEND: ($basalType) ${dateUtil.dateAndTimeString(basalStartTime)} ($basalStartTime) " +
|
||||||
|
"Rate: $basalRate Duration: ${duration}"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
else -> {
|
||||||
|
aapsLogger.error(LTag.PUMPCOMM, "GetRecordPacket HandleResponse: BASAL_RECORD: Unknown basal type: $basalType")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (basalEndReason.isSuspendedByPump()) {
|
||||||
|
// Pump doesn't seem to sync suspend explicitly, so we need to do it here
|
||||||
|
// Sync suspend using handleBasalStatusUpdate to make sure other variables are updated as well
|
||||||
|
aapsLogger.warn(LTag.PUMPCOMM, "GetRecordPacket HandleResponse: Got suspended end reason, syncing suspend")
|
||||||
|
medtrumPump.handleBasalStatusUpdate(BasalType.fromBasalEndReason(basalEndReason), 0.0, recordSequence, recordPatchId, basalEndTime)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun handleTddRecord(data: ByteArray) {
|
||||||
|
aapsLogger.debug(LTag.PUMPCOMM, "GetRecordPacket HandleResponse: TDD_RECORD")
|
||||||
|
val timestamp = MedtrumTimeUtil().convertPumpTimeToSystemTimeMillis(data.copyOfRange(RESP_RECORD_DATA_START, RESP_RECORD_DATA_START + 4).toLong())
|
||||||
|
val timeZoneOffset = data.copyOfRange(RESP_RECORD_DATA_START + 4, RESP_RECORD_DATA_START + 6).toInt()
|
||||||
|
val tddMinutes = data.copyOfRange(RESP_RECORD_DATA_START + 6, RESP_RECORD_DATA_START + 8).toInt()
|
||||||
|
val glucoseRecordTime = data.copyOfRange(RESP_RECORD_DATA_START + 8, RESP_RECORD_DATA_START + 12).toLong()
|
||||||
|
val tdd = data.copyOfRange(RESP_RECORD_DATA_START + 12, RESP_RECORD_DATA_START + 16).toFloat()
|
||||||
|
val basalTdd = data.copyOfRange(RESP_RECORD_DATA_START + 16, RESP_RECORD_DATA_START + 20).toFloat()
|
||||||
|
val glucose = data.copyOfRange(RESP_RECORD_DATA_START + 20, RESP_RECORD_DATA_START + 24).toFloat()
|
||||||
|
val unknown = data.copyOfRange(RESP_RECORD_DATA_START + 24, RESP_RECORD_DATA_START + 28).toFloat()
|
||||||
|
val meanSomething = data.copyOfRange(RESP_RECORD_DATA_START + 28, RESP_RECORD_DATA_START + 32).toFloat()
|
||||||
|
val usedTdd = data.copyOfRange(RESP_RECORD_DATA_START + 32, RESP_RECORD_DATA_START + 36).toFloat()
|
||||||
|
val usedIBasal = data.copyOfRange(RESP_RECORD_DATA_START + 36, RESP_RECORD_DATA_START + 40).toFloat()
|
||||||
|
val usedSgBasal = data.copyOfRange(RESP_RECORD_DATA_START + 40, RESP_RECORD_DATA_START + 44).toFloat()
|
||||||
|
val usedUMax = data.copyOfRange(RESP_RECORD_DATA_START + 44, RESP_RECORD_DATA_START + 48).toFloat()
|
||||||
|
val newTdd = data.copyOfRange(RESP_RECORD_DATA_START + 48, RESP_RECORD_DATA_START + 52).toFloat()
|
||||||
|
val newIBasal = data.copyOfRange(RESP_RECORD_DATA_START + 52, RESP_RECORD_DATA_START + 56).toFloat()
|
||||||
|
val newSgBasal = data.copyOfRange(RESP_RECORD_DATA_START + 56, RESP_RECORD_DATA_START + 60).toFloat()
|
||||||
|
val newUMax = data.copyOfRange(RESP_RECORD_DATA_START + 60, RESP_RECORD_DATA_START + 64).toFloat()
|
||||||
|
|
||||||
|
aapsLogger.debug(
|
||||||
|
LTag.PUMPCOMM, "TDD_RECORD: timestamp: $timestamp, timeZoneOffset: $timeZoneOffset, tddMinutes: $tddMinutes, glucoseRecordTime: $glucoseRecordTime, tdd: " +
|
||||||
|
"$tdd, basalTdd: $basalTdd, glucose: $glucose, unknown: $unknown, meanSomething: $meanSomething, usedTdd: $usedTdd, usedIBasal: $usedIBasal, usedSgBasal: " +
|
||||||
|
"$usedSgBasal, usedUMax: $usedUMax, newTdd: $newTdd, newIBasal: $newIBasal, newSgBasal: $newSgBasal, newUMax: $newUMax"
|
||||||
|
)
|
||||||
|
|
||||||
|
val newRecord = pumpSync.createOrUpdateTotalDailyDose(
|
||||||
|
timestamp = timestamp,
|
||||||
|
bolusAmount = (tdd - basalTdd).toDouble(),
|
||||||
|
basalAmount = basalTdd.toDouble(),
|
||||||
|
totalAmount = tdd.toDouble(),
|
||||||
|
pumpId = timestamp,
|
||||||
|
pumpType = medtrumPump.pumpType(),
|
||||||
|
pumpSerial = medtrumPump.pumpSN.toString(radix = 16)
|
||||||
|
)
|
||||||
|
|
||||||
|
aapsLogger.debug(
|
||||||
|
LTag.PUMPCOMM,
|
||||||
|
"handleBasalStatusUpdate from record: ${newRecordInfo(newRecord)}EVENT TDD: ${dateUtil.dateAndTimeString(timestamp)} ($timestamp) " +
|
||||||
|
"TDD: $tdd, BasalTDD: $basalTdd, BolusTDD: ${tdd - basalTdd}"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun newRecordInfo(newRecord: Boolean): String {
|
||||||
|
return "${if (newRecord) "**NEW** " else ""}"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -109,7 +109,6 @@ class NotificationPacket(val injector: HasAndroidInjector) {
|
||||||
|
|
||||||
if (fieldMask and MASK_EXTENDED_BOLUS != 0) {
|
if (fieldMask and MASK_EXTENDED_BOLUS != 0) {
|
||||||
aapsLogger.error(LTag.PUMPCOMM, "Extended bolus notification received, extended bolus not supported!")
|
aapsLogger.error(LTag.PUMPCOMM, "Extended bolus notification received, extended bolus not supported!")
|
||||||
// TODO Handle error and stop pump if this happens?
|
|
||||||
offset += 3
|
offset += 3
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue