From 2b77fd6248a827b8b2a53c4b9fd1292d9465e9e3 Mon Sep 17 00:00:00 2001 From: hehaifeng <2228747511@qq.com> Date: Thu, 26 Mar 2026 15:02:40 +0800 Subject: [PATCH] fix(equil): adjust resistance threshold by firmware version 1. increase BLE command spacing from 150ms to 500ms to improve the success rate of consecutive multi-packet transmissions 2. centralize resistance threshold logic in EquilManager 3. use firmware version and serial prefix to choose legacy or high threshold 4. reuse shared serial prefix checks in device support detection --- .../kotlin/app/aaps/pump/equil/EquilConst.kt | 2 +- .../aaps/pump/equil/manager/EquilManager.kt | 23 +++++++++++++++++++ .../equil/manager/command/CmdDevicesOldGet.kt | 3 +-- .../equil/manager/command/CmdResistanceGet.kt | 3 ++- 4 files changed, 27 insertions(+), 4 deletions(-) diff --git a/pump/equil/src/main/kotlin/app/aaps/pump/equil/EquilConst.kt b/pump/equil/src/main/kotlin/app/aaps/pump/equil/EquilConst.kt index b7cef694f62..311d3ea1c35 100644 --- a/pump/equil/src/main/kotlin/app/aaps/pump/equil/EquilConst.kt +++ b/pump/equil/src/main/kotlin/app/aaps/pump/equil/EquilConst.kt @@ -4,7 +4,7 @@ object EquilConst { const val EQUIL_CMD_TIME_OUT: Long = 300000 const val EQUIL_BLE_WRITE_TIME_OUT: Long = 20 - const val EQUIL_BLE_NEXT_CMD: Long = 150 + const val EQUIL_BLE_NEXT_CMD: Long = 500 const val EQUIL_SUPPORT_LEVEL = 5.3f const val EQUIL_BOLUS_THRESHOLD_STEP = 1600 const val EQUIL_BASAL_THRESHOLD_STEP = 240 diff --git a/pump/equil/src/main/kotlin/app/aaps/pump/equil/manager/EquilManager.kt b/pump/equil/src/main/kotlin/app/aaps/pump/equil/manager/EquilManager.kt index f4a4b7f9a96..aa513b0cc34 100644 --- a/pump/equil/src/main/kotlin/app/aaps/pump/equil/manager/EquilManager.kt +++ b/pump/equil/src/main/kotlin/app/aaps/pump/equil/manager/EquilManager.kt @@ -526,6 +526,24 @@ class EquilManager @Inject constructor( fun getSerialNumber(): String = equilState?.serialNumber ?: "UNKNOWN" + fun getFirmwareVersion(): String? = equilState?.firmwareVersion + + fun getResistanceThreshold(): Int = getResistanceThreshold(getSerialNumber(), getFirmwareVersion()) + + fun getResistanceThreshold(serialNumber: String?, firmwareVersion: String?): Int { + val firstChar = serialNumber?.firstOrNull()?.uppercaseChar() ?: return LEGACY_RESISTANCE_THRESHOLD + if (firstChar !in VERSION_CHECK_SERIAL_PREFIXES) { + return LEGACY_RESISTANCE_THRESHOLD + } + + val version = firmwareVersion?.toFloatOrNull() ?: return LEGACY_RESISTANCE_THRESHOLD + return if (version >= EquilConst.EQUIL_SUPPORT_LEVEL) { + HIGH_RESISTANCE_THRESHOLD + } else { + LEGACY_RESISTANCE_THRESHOLD + } + } + fun setBolusRecord(bolusRecord: EquilBolusRecord?) { equilState?.bolusRecord = bolusRecord storePodState() @@ -651,6 +669,7 @@ class EquilManager @Inject constructor( var basalSchedule: BasalSchedule? = null } + fun setRunMode(mode: Int) { when (mode) { 0 -> setRunMode(RunMode.SUSPEND) @@ -775,6 +794,10 @@ class EquilManager @Inject constructor( companion object { + const val HIGH_RESISTANCE_THRESHOLD = 500 + const val LEGACY_RESISTANCE_THRESHOLD = 220 + val VERSION_CHECK_SERIAL_PREFIXES = setOf('0', '1', '3', 'A', 'D') + private fun createGson(): Gson { val gsonBuilder = GsonBuilder() .registerTypeAdapter(DateTime::class.java, JsonSerializer { dateTime: DateTime?, typeOfSrc: Type?, context: JsonSerializationContext? -> JsonPrimitive(ISODateTimeFormat.dateTime().print(dateTime)) }) diff --git a/pump/equil/src/main/kotlin/app/aaps/pump/equil/manager/command/CmdDevicesOldGet.kt b/pump/equil/src/main/kotlin/app/aaps/pump/equil/manager/command/CmdDevicesOldGet.kt index 174c3500b13..acc02076a79 100644 --- a/pump/equil/src/main/kotlin/app/aaps/pump/equil/manager/command/CmdDevicesOldGet.kt +++ b/pump/equil/src/main/kotlin/app/aaps/pump/equil/manager/command/CmdDevicesOldGet.kt @@ -176,9 +176,8 @@ class CmdDevicesOldGet( fun isSupport(serialNumber: String): Boolean { val firstChar = serialNumber.firstOrNull()?.uppercaseChar() - val needsVersionCheck = setOf('0', '1', '3', 'A', 'D') return when (firstChar) { - in needsVersionCheck -> firmwareVersion >= EquilConst.EQUIL_SUPPORT_LEVEL + in EquilManager.VERSION_CHECK_SERIAL_PREFIXES -> firmwareVersion >= EquilConst.EQUIL_SUPPORT_LEVEL else -> true } } diff --git a/pump/equil/src/main/kotlin/app/aaps/pump/equil/manager/command/CmdResistanceGet.kt b/pump/equil/src/main/kotlin/app/aaps/pump/equil/manager/command/CmdResistanceGet.kt index 7ceae8dc33a..3442f7705b6 100644 --- a/pump/equil/src/main/kotlin/app/aaps/pump/equil/manager/command/CmdResistanceGet.kt +++ b/pump/equil/src/main/kotlin/app/aaps/pump/equil/manager/command/CmdResistanceGet.kt @@ -36,8 +36,9 @@ class CmdResistanceGet( override fun decodeConfirmData(data: ByteArray) { val value = Utils.bytesToInt(data[7], data[6]) + val resistanceThreshold = equilManager.getResistanceThreshold() cmdSuccess = true - enacted = value >= 500 + enacted = value >= resistanceThreshold synchronized(this) { (this as Object).notify() }