From 193814c739ed9675ec5f944002f8ee272ee943e0 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Tue, 26 Apr 2022 11:13:17 +0200 Subject: [PATCH 01/21] lint --- .../androidaps/plugins/constraints/safety/SafetyPlugin.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/constraints/safety/SafetyPlugin.kt b/app/src/main/java/info/nightscout/androidaps/plugins/constraints/safety/SafetyPlugin.kt index a91cf4fe54..80d6728b82 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/constraints/safety/SafetyPlugin.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/constraints/safety/SafetyPlugin.kt @@ -37,7 +37,7 @@ class SafetyPlugin @Inject constructor( private val constraintChecker: ConstraintChecker, private val openAPSAMAPlugin: OpenAPSAMAPlugin, private val openAPSSMBPlugin: OpenAPSSMBPlugin, - private val OpenAPSSMBDynamicISFPlugin: OpenAPSSMBDynamicISFPlugin, + private val openAPSSMBDynamicISFPlugin: OpenAPSSMBDynamicISFPlugin, private val sensitivityOref1Plugin: SensitivityOref1Plugin, private val activePlugin: ActivePlugin, private val hardLimits: HardLimits, @@ -190,12 +190,12 @@ class SafetyPlugin @Inject constructor( override fun applyMaxIOBConstraints(maxIob: Constraint): Constraint { val apsMode = sp.getString(R.string.key_aps_mode, "open") - val maxIobPref: Double = if (openAPSSMBPlugin.isEnabled() || OpenAPSSMBDynamicISFPlugin.isEnabled()) sp.getDouble(R.string.key_openapssmb_max_iob, 3.0) else sp.getDouble(R.string + val maxIobPref: Double = if (openAPSSMBPlugin.isEnabled() || openAPSSMBDynamicISFPlugin.isEnabled()) sp.getDouble(R.string.key_openapssmb_max_iob, 3.0) else sp.getDouble(R.string .key_openapsma_max_iob, 1.5) maxIob.setIfSmaller(aapsLogger, maxIobPref, rh.gs(R.string.limitingiob, maxIobPref, rh.gs(R.string.maxvalueinpreferences)), this) if (openAPSAMAPlugin.isEnabled()) maxIob.setIfSmaller(aapsLogger, hardLimits.maxIobAMA(), rh.gs(R.string.limitingiob, hardLimits.maxIobAMA(), rh.gs(R.string.hardlimit)), this) if (openAPSSMBPlugin.isEnabled()) maxIob.setIfSmaller(aapsLogger, hardLimits.maxIobSMB(), rh.gs(R.string.limitingiob, hardLimits.maxIobSMB(), rh.gs(R.string.hardlimit)), this) - if (OpenAPSSMBDynamicISFPlugin.isEnabled()) maxIob.setIfSmaller(aapsLogger, hardLimits.maxIobSMB(), rh.gs(R.string.limitingiob, hardLimits.maxIobSMB(), rh.gs(R.string.hardlimit)), this) + if (openAPSSMBDynamicISFPlugin.isEnabled()) maxIob.setIfSmaller(aapsLogger, hardLimits.maxIobSMB(), rh.gs(R.string.limitingiob, hardLimits.maxIobSMB(), rh.gs(R.string.hardlimit)), this) if (apsMode == "lgs") maxIob.setIfSmaller(aapsLogger, HardLimits.MAX_IOB_LGS, rh.gs(R.string.limitingiob, HardLimits.MAX_IOB_LGS, rh.gs(R.string.lowglucosesuspend)), this) return maxIob } From 4ea3420cb52eab87ab9c08d804522767dfe8cefe Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Tue, 26 Apr 2022 11:23:30 +0200 Subject: [PATCH 02/21] lint --- .../androidaps/interfaces/DetermineBasalAdapterInterface.kt | 2 +- .../java/info/nightscout/androidaps/utils/ui/NumberPicker.kt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/info/nightscout/androidaps/interfaces/DetermineBasalAdapterInterface.kt b/core/src/main/java/info/nightscout/androidaps/interfaces/DetermineBasalAdapterInterface.kt index 4e1ba57422..9b8ed0d9c2 100644 --- a/core/src/main/java/info/nightscout/androidaps/interfaces/DetermineBasalAdapterInterface.kt +++ b/core/src/main/java/info/nightscout/androidaps/interfaces/DetermineBasalAdapterInterface.kt @@ -30,7 +30,7 @@ interface DetermineBasalAdapterInterface { uamAllowed: Boolean = false, advancedFiltering: Boolean = false, isSaveCgmSource: Boolean = false - ) {} + ) operator fun invoke(): APSResult? } \ No newline at end of file diff --git a/core/src/main/java/info/nightscout/androidaps/utils/ui/NumberPicker.kt b/core/src/main/java/info/nightscout/androidaps/utils/ui/NumberPicker.kt index b4cecb63f1..71d0b7c392 100644 --- a/core/src/main/java/info/nightscout/androidaps/utils/ui/NumberPicker.kt +++ b/core/src/main/java/info/nightscout/androidaps/utils/ui/NumberPicker.kt @@ -136,7 +136,7 @@ open class NumberPicker(context: Context, attrs: AttributeSet? = null) : LinearL } fun updateA11yDescription() { - val description = if (mCustomContentDescription != null) mCustomContentDescription else "" + val description = mCustomContentDescription ?: "" binding.minusButton.contentDescription = context.getString(R.string.a11y_min_button_description, description, formatter?.format(this.step)) binding.plusButton.contentDescription = context.getString(R.string.a11y_plus_button_description, description, formatter?.format(this.step)) } From a30c5d4a29d3d7ea1d86ae444345ed9781ab89f5 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Tue, 26 Apr 2022 11:25:30 +0200 Subject: [PATCH 03/21] lint --- .../java/info/nightscout/androidaps/danar/comm/MessageBase.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/danar/src/main/java/info/nightscout/androidaps/danar/comm/MessageBase.kt b/danar/src/main/java/info/nightscout/androidaps/danar/comm/MessageBase.kt index 33007e943f..571db17cbf 100644 --- a/danar/src/main/java/info/nightscout/androidaps/danar/comm/MessageBase.kt +++ b/danar/src/main/java/info/nightscout/androidaps/danar/comm/MessageBase.kt @@ -122,7 +122,7 @@ open class MessageBase(injector: HasAndroidInjector) { } } - open fun handleMessageNotReceived() {} + open fun handleMessageNotReceived() {} // do nothing by default val command: Int get() = byteFromRawBuff(buffer, 5) or (byteFromRawBuff(buffer, 4) shl 8) From 8edb23069a4d41e7658d6773eaebd74de004d5ec Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Tue, 26 Apr 2022 11:28:36 +0200 Subject: [PATCH 04/21] lint --- .../plugins/pump/insight/activities/InsightPairingActivity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/insight/src/main/java/info/nightscout/androidaps/plugins/pump/insight/activities/InsightPairingActivity.java b/insight/src/main/java/info/nightscout/androidaps/plugins/pump/insight/activities/InsightPairingActivity.java index 65d8185d26..97a5c9dfbe 100644 --- a/insight/src/main/java/info/nightscout/androidaps/plugins/pump/insight/activities/InsightPairingActivity.java +++ b/insight/src/main/java/info/nightscout/androidaps/plugins/pump/insight/activities/InsightPairingActivity.java @@ -58,7 +58,7 @@ public class InsightPairingActivity extends NoSplashAppCompatActivity implements private RecyclerView deviceList; private final DeviceAdapter deviceAdapter = new DeviceAdapter(); - private final int PERMISSION_REQUEST_BLUETOOTH = 30242; + private static final int PERMISSION_REQUEST_BLUETOOTH = 30242; private InsightConnectionService service; From 8dde3bcfa4be0382b840270b233022e60f57c881 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Tue, 26 Apr 2022 11:44:32 +0200 Subject: [PATCH 05/21] lint --- .../main/java/info/nightscout/androidaps/skins/SkinInterface.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/java/info/nightscout/androidaps/skins/SkinInterface.kt b/app/src/main/java/info/nightscout/androidaps/skins/SkinInterface.kt index 3ef7501ae4..2e338955d5 100644 --- a/app/src/main/java/info/nightscout/androidaps/skins/SkinInterface.kt +++ b/app/src/main/java/info/nightscout/androidaps/skins/SkinInterface.kt @@ -17,6 +17,7 @@ interface SkinInterface { val mainGraphHeight: Int // in dp val secondaryGraphHeight: Int // in dp + // no pre processing by default fun preProcessLandscapeActionsLayout(dm: DisplayMetrics, binding: ActionsFragmentBinding) { } From 296fe300529ce2d7940d9911886f331294f56cb4 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Tue, 26 Apr 2022 12:28:12 +0200 Subject: [PATCH 06/21] SMB: add log --- .../info/nightscout/androidaps/plugins/aps/loop/LoopPlugin.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/aps/loop/LoopPlugin.kt b/app/src/main/java/info/nightscout/androidaps/plugins/aps/loop/LoopPlugin.kt index fa8c085404..89f394f696 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/aps/loop/LoopPlugin.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/aps/loop/LoopPlugin.kt @@ -588,6 +588,7 @@ class LoopPlugin @Inject constructor( private fun applySMBRequest(request: APSResult, callback: Callback?) { if (!request.bolusRequested()) { + aapsLogger.debug(LTag.APS, "No SMB requested") return } val pump = activePlugin.activePump From 8249118a149f0659d8065473983a1d2cd315d144 Mon Sep 17 00:00:00 2001 From: osodebailar Date: Tue, 26 Apr 2022 19:34:13 +0200 Subject: [PATCH 07/21] improve localprofile on entry --- app/src/main/res/layout/localprofile_fragment.xml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/src/main/res/layout/localprofile_fragment.xml b/app/src/main/res/layout/localprofile_fragment.xml index f1bd26f410..ff453c53e0 100644 --- a/app/src/main/res/layout/localprofile_fragment.xml +++ b/app/src/main/res/layout/localprofile_fragment.xml @@ -302,6 +302,7 @@ android:paddingStart="10dp" android:paddingEnd="10dp" android:text="@string/activate_profile" + android:visibility="gone" app:icon="@drawable/ic_local_activate" app:iconTint="@color/ic_local_activate" /> @@ -323,6 +324,7 @@ android:paddingStart="1dp" android:paddingEnd="1dp" android:text="@string/reset" + android:visibility="gone" app:icon="@drawable/ic_local_reset" app:iconTint="@color/ic_local_reset" /> @@ -338,6 +340,7 @@ android:paddingStart="1dp" android:paddingEnd="1dp" android:text="@string/save" + android:visibility="gone" app:icon="@drawable/ic_local_save" app:iconTint="@color/ic_local_save" /> From ff34e9bdd2b071d456b412e7f856e10ee0cfa385 Mon Sep 17 00:00:00 2001 From: osodebailar Date: Tue, 26 Apr 2022 19:34:19 +0200 Subject: [PATCH 08/21] improve dana bottom buttons --- core/src/main/res/drawable/ic_danarstats.xml | 8 ++-- dana/src/main/res/layout/danar_fragment.xml | 39 ++++++++++++-------- 2 files changed, 28 insertions(+), 19 deletions(-) diff --git a/core/src/main/res/drawable/ic_danarstats.xml b/core/src/main/res/drawable/ic_danarstats.xml index 81b3952eb4..a95eef3884 100644 --- a/core/src/main/res/drawable/ic_danarstats.xml +++ b/core/src/main/res/drawable/ic_danarstats.xml @@ -7,24 +7,24 @@ android:pathData="M5.719,19.125L5.719,11.828" android:strokeWidth="2.2677" android:fillColor="#00000000" - android:strokeColor="#FEAF05" + android:strokeColor="?attr/statsColor" android:strokeLineCap="round"/> diff --git a/dana/src/main/res/layout/danar_fragment.xml b/dana/src/main/res/layout/danar_fragment.xml index e26919aebd..8cc0d95305 100644 --- a/dana/src/main/res/layout/danar_fragment.xml +++ b/dana/src/main/res/layout/danar_fragment.xml @@ -2,6 +2,7 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" + xmlns:app="http://schemas.android.com/apk/res-auto" tools:context="info.nightscout.androidaps.dana.DanaFragment" android:orientation="vertical"> @@ -658,50 +659,58 @@ android:layout_height="wrap_content" android:orientation="horizontal"> - + android:text="@string/viewprofile" + android:maxLines="2" + android:ellipsize="end" + app:iconPadding="-4dp"/> - - + android:text="@string/stats" + android:maxLines="2" + android:ellipsize="end" + app:iconPadding="-4dp"/> - + android:text="@string/danar_useroptions" + android:maxLines="2" + android:ellipsize="end" + app:iconPadding="-4dp"/> From ee78a24ac8a9d9d7ce90e12929800a2addcbf4c7 Mon Sep 17 00:00:00 2001 From: youn7986 Date: Fri, 29 Apr 2022 13:33:24 +0900 Subject: [PATCH 09/21] wrong pump description changed --- .../nightscout/androidaps/plugins/pump/common/defs/PumpType.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/java/info/nightscout/androidaps/plugins/pump/common/defs/PumpType.kt b/core/src/main/java/info/nightscout/androidaps/plugins/pump/common/defs/PumpType.kt index 9e5ee7c4e2..10740a2b52 100644 --- a/core/src/main/java/info/nightscout/androidaps/plugins/pump/common/defs/PumpType.kt +++ b/core/src/main/java/info/nightscout/androidaps/plugins/pump/common/defs/PumpType.kt @@ -316,7 +316,7 @@ enum class PumpType { baseBasalMaxValue = 3.0, baseBasalStep = 0.01, baseBasalSpecialSteps = null, - pumpCapability = PumpCapability.DanaWithHistoryCapabilities, + pumpCapability = PumpCapability.DiaconnCapabilities, source = Sources.DiaconnG8, useHardwareLink = true); From 507632d9a7209c3a9cf3bf168c525be6c013f297 Mon Sep 17 00:00:00 2001 From: youn7986 Date: Fri, 29 Apr 2022 14:01:39 +0900 Subject: [PATCH 10/21] Added pump log SP values to initialize after pref import --- .../general/maintenance/ImportExportPrefsImpl.kt | 2 ++ .../diaconn/events/EventDiaconnG8PumpLogReset.kt | 5 +++++ .../androidaps/diaconn/service/DiaconnG8Service.kt | 13 +++++++++++++ 3 files changed, 20 insertions(+) create mode 100644 diaconn/src/main/java/info/nightscout/androidaps/diaconn/events/EventDiaconnG8PumpLogReset.kt diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/maintenance/ImportExportPrefsImpl.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/maintenance/ImportExportPrefsImpl.kt index 397f71248a..69e2fd7c25 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/maintenance/ImportExportPrefsImpl.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/maintenance/ImportExportPrefsImpl.kt @@ -21,6 +21,7 @@ import info.nightscout.androidaps.database.AppRepository import info.nightscout.androidaps.database.entities.UserEntry import info.nightscout.androidaps.database.entities.UserEntry.Action import info.nightscout.androidaps.database.entities.UserEntry.Sources +import info.nightscout.androidaps.diaconn.events.EventDiaconnG8PumpLogReset import info.nightscout.androidaps.events.EventAppExit import info.nightscout.androidaps.interfaces.Config import info.nightscout.androidaps.interfaces.ImportExportPrefs @@ -339,6 +340,7 @@ class ImportExportPrefsImpl @Inject constructor( } private fun restartAppAfterImport(context: Context) { + rxBus.send(EventDiaconnG8PumpLogReset()) sp.putBoolean(R.string.key_setupwizard_processed, true) OKDialog.show(context, rh.gs(R.string.setting_imported), rh.gs(R.string.restartingapp)) { uel.log(Action.IMPORT_SETTINGS, Sources.Maintenance) diff --git a/diaconn/src/main/java/info/nightscout/androidaps/diaconn/events/EventDiaconnG8PumpLogReset.kt b/diaconn/src/main/java/info/nightscout/androidaps/diaconn/events/EventDiaconnG8PumpLogReset.kt new file mode 100644 index 0000000000..40d1b4a74c --- /dev/null +++ b/diaconn/src/main/java/info/nightscout/androidaps/diaconn/events/EventDiaconnG8PumpLogReset.kt @@ -0,0 +1,5 @@ +package info.nightscout.androidaps.diaconn.events + +import info.nightscout.androidaps.events.Event + +class EventDiaconnG8PumpLogReset : Event() diff --git a/diaconn/src/main/java/info/nightscout/androidaps/diaconn/service/DiaconnG8Service.kt b/diaconn/src/main/java/info/nightscout/androidaps/diaconn/service/DiaconnG8Service.kt index d278b76b48..fbd6ab0dbf 100644 --- a/diaconn/src/main/java/info/nightscout/androidaps/diaconn/service/DiaconnG8Service.kt +++ b/diaconn/src/main/java/info/nightscout/androidaps/diaconn/service/DiaconnG8Service.kt @@ -15,6 +15,7 @@ import info.nightscout.androidaps.diaconn.DiaconnG8Plugin import info.nightscout.androidaps.diaconn.DiaconnG8Pump import info.nightscout.androidaps.diaconn.R import info.nightscout.androidaps.diaconn.events.EventDiaconnG8NewStatus +import info.nightscout.androidaps.diaconn.events.EventDiaconnG8PumpLogReset import info.nightscout.androidaps.diaconn.packet.* import info.nightscout.androidaps.diaconn.pumplog.PumplogUtil import info.nightscout.androidaps.dialogs.BolusProgressDialog @@ -85,6 +86,13 @@ class DiaconnG8Service : DaggerService() { .observeOn(aapsSchedulers.io) .subscribe({ stopSelf() }) { fabricPrivacy.logException(it) } ) + disposable.add(rxBus + .toObservable(EventDiaconnG8PumpLogReset::class.java) + .observeOn(aapsSchedulers.io) + .subscribe { + pumpLogResetAfterPrefImport() + } + ) } inner class LocalBinder : Binder() { @@ -641,6 +649,11 @@ class DiaconnG8Service : DaggerService() { sp.putInt(rh.gs(R.string.apsWrappingCount), apsWrappingCount) } + private fun pumpLogResetAfterPrefImport() { + sp.putInt(rh.gs(R.string.apslastLogNum), 0) + sp.putInt(rh.gs(R.string.apsWrappingCount), 0) + } + private fun processConfirm(msgType: Byte): Boolean { // pump confirm if (diaconnG8Pump.otpNumber == 0) { From f61cac20873cb183e721a316a4f185e9e575e0db Mon Sep 17 00:00:00 2001 From: miyeongkim Date: Fri, 29 Apr 2022 14:33:54 +0900 Subject: [PATCH 11/21] Added pump logs upload setting to diacon platform --- .../androidaps/diaconn/DiaconnG8Pump.kt | 8 + .../diaconn/api/DiaconnApiResponse.kt | 25 + .../diaconn/api/DiaconnApiService.kt | 24 + .../diaconn/api/DiaconnLogUploader.kt | 33 + .../androidaps/diaconn/di/DiaconnG8Module.kt | 3 +- .../diaconn/di/DiaconnLogUploaderModule.kt | 12 + .../packet/BigLogInquireResponsePacket.kt | 1227 +++++++++-------- .../diaconn/service/DiaconnG8Service.kt | 122 +- .../src/main/res/values-ko-rKR/strings.xml | 2 + diaconn/src/main/res/values/strings.xml | 5 +- diaconn/src/main/res/xml/pref_diaconn.xml | 6 + 11 files changed, 849 insertions(+), 618 deletions(-) create mode 100644 diaconn/src/main/java/info/nightscout/androidaps/diaconn/api/DiaconnApiResponse.kt create mode 100644 diaconn/src/main/java/info/nightscout/androidaps/diaconn/api/DiaconnApiService.kt create mode 100644 diaconn/src/main/java/info/nightscout/androidaps/diaconn/api/DiaconnLogUploader.kt create mode 100644 diaconn/src/main/java/info/nightscout/androidaps/diaconn/di/DiaconnLogUploaderModule.kt diff --git a/diaconn/src/main/java/info/nightscout/androidaps/diaconn/DiaconnG8Pump.kt b/diaconn/src/main/java/info/nightscout/androidaps/diaconn/DiaconnG8Pump.kt index 61d15fc0a6..fcb383fa8c 100644 --- a/diaconn/src/main/java/info/nightscout/androidaps/diaconn/DiaconnG8Pump.kt +++ b/diaconn/src/main/java/info/nightscout/androidaps/diaconn/DiaconnG8Pump.kt @@ -187,6 +187,13 @@ class DiaconnG8Pump @Inject constructor( var lgsTime:Int = 0 // LGS Setting time (0~255 min) var lgsElapsedTime:Int = 0 // LGS Passed Time (0~255 min) + val pumpUid: String + get() = "$country-$productType-$makeYear-${makeMonth.toString().padStart(2,'0')}-${makeDay.toString().padStart(2, '0')}-${lotNo.toString().padStart(3,'0')}-${serialNo.toString().padStart(5,'0')}" + + val pumpVersion: String + get() = "$majorVersion.$minorVersion" + + fun buildDiaconnG8ProfileRecord(nsProfile: Profile): Array { val record = Array(24) { 0.0 } for (hour in 0..23) { @@ -247,6 +254,7 @@ class DiaconnG8Pump @Inject constructor( var apslastLogNum = 0 // 앱에서 처리한 마지막 로그 번호. var apsWrappingCount = 0 // 앱에서 처리한 마지막 로그 번호. var isProgressPumpLogSync = false // 로그 동기화 진행 여부 + var isPlatformUploadStarted = false // 플랫폼 로그 동기화 진행 여부 // 6. bolus speed status. var speed = 0 // 주입 속도(1 ~ 8) diff --git a/diaconn/src/main/java/info/nightscout/androidaps/diaconn/api/DiaconnApiResponse.kt b/diaconn/src/main/java/info/nightscout/androidaps/diaconn/api/DiaconnApiResponse.kt new file mode 100644 index 0000000000..2f75a27951 --- /dev/null +++ b/diaconn/src/main/java/info/nightscout/androidaps/diaconn/api/DiaconnApiResponse.kt @@ -0,0 +1,25 @@ +package info.nightscout.androidaps.diaconn.api + +import com.google.gson.annotations.SerializedName + +data class LastNoResponse(val ok: Boolean, val info:Info ) + +data class Info(val pumplog_no: Long) + +data class ApiResponse(val ok: Boolean) + +data class PumpLogDto( + @SerializedName("app_uid") val app_uid: String, + @SerializedName("app_version") val app_version: String, + @SerializedName("pump_uid") val pump_uid: String, + @SerializedName("pump_version") val pump_version: String, + @SerializedName("incarnation_num") val incarnation_num: Int, + @SerializedName("pumplog_info") val pumplog_info: List +) + +data class PumpLog( + @SerializedName("pumplog_no") val pumplog_no: Long, + @SerializedName("pumplog_wrapping_count") val pumplog_wrapping_count: Int, + @SerializedName("pumplog_data") val pumplog_data: String, + @SerializedName("act_type") val act_type: String +) \ No newline at end of file diff --git a/diaconn/src/main/java/info/nightscout/androidaps/diaconn/api/DiaconnApiService.kt b/diaconn/src/main/java/info/nightscout/androidaps/diaconn/api/DiaconnApiService.kt new file mode 100644 index 0000000000..7c83cfdf10 --- /dev/null +++ b/diaconn/src/main/java/info/nightscout/androidaps/diaconn/api/DiaconnApiService.kt @@ -0,0 +1,24 @@ +package info.nightscout.androidaps.diaconn.api + +import retrofit2.Call +import retrofit2.http.Body +import retrofit2.http.GET +import retrofit2.http.Headers +import retrofit2.http.POST +import retrofit2.http.Query + +interface DiaconnApiService { + + @Headers("api-key: ${DiaconnLogUploader.UPLOAD_API_KEY}") + @GET("v1/pumplog/last_no") + fun getPumpLastNo( + @Query("pump_uid") pump_uid: String, + @Query("pump_version") pump_version: String, + @Query("incarnation_num") incarnation_num: Int): Call + + @Headers("api-key: ${DiaconnLogUploader.UPLOAD_API_KEY}") + @POST("v1/pumplog/save") + fun uploadPumpLogs(@Body pumpLogDto: PumpLogDto): Call + + +} \ No newline at end of file diff --git a/diaconn/src/main/java/info/nightscout/androidaps/diaconn/api/DiaconnLogUploader.kt b/diaconn/src/main/java/info/nightscout/androidaps/diaconn/api/DiaconnLogUploader.kt new file mode 100644 index 0000000000..e4b26986dd --- /dev/null +++ b/diaconn/src/main/java/info/nightscout/androidaps/diaconn/api/DiaconnLogUploader.kt @@ -0,0 +1,33 @@ +package info.nightscout.androidaps.diaconn.api + +import android.content.Context +import info.nightscout.androidaps.plugins.bus.RxBus +import info.nightscout.shared.logging.AAPSLogger +import info.nightscout.shared.logging.LTag +import retrofit2.Retrofit +import retrofit2.converter.gson.GsonConverterFactory +import javax.inject.Inject +import javax.inject.Singleton + +@Singleton +class DiaconnLogUploader @Inject constructor ( + private val aapsLogger: AAPSLogger, +) { + companion object { + private const val BASE_URL = "https://api.diaconn.com/aaps/" + const val UPLOAD_API_KEY = "D7B3DA9FA8229D5253F3D75E1E2B1BA4" + } + + private var retrofit: Retrofit? = null + + fun getRetrofitInstance(): Retrofit? { + //aapsLogger.debug(LTag.PUMPCOMM, "Diaconn pump logs upload BASE_URL : $BASE_URL") + if (retrofit == null) { + retrofit = Retrofit.Builder() + .baseUrl(BASE_URL) + .addConverterFactory(GsonConverterFactory.create()) + .build() + } + return retrofit + } +} \ No newline at end of file diff --git a/diaconn/src/main/java/info/nightscout/androidaps/diaconn/di/DiaconnG8Module.kt b/diaconn/src/main/java/info/nightscout/androidaps/diaconn/di/DiaconnG8Module.kt index 870d460bf0..89a795be77 100644 --- a/diaconn/src/main/java/info/nightscout/androidaps/diaconn/di/DiaconnG8Module.kt +++ b/diaconn/src/main/java/info/nightscout/androidaps/diaconn/di/DiaconnG8Module.kt @@ -6,7 +6,8 @@ import dagger.Module DiaconnG8ActivitiesModule::class, DiaconnG8ServiceModule::class, DiaconnG8PacketModule::class, - DiaconnHistoryModule::class + DiaconnHistoryModule::class, + DiaconnLogUploaderModule::class ]) open class DiaconnG8Module \ No newline at end of file diff --git a/diaconn/src/main/java/info/nightscout/androidaps/diaconn/di/DiaconnLogUploaderModule.kt b/diaconn/src/main/java/info/nightscout/androidaps/diaconn/di/DiaconnLogUploaderModule.kt new file mode 100644 index 0000000000..3a5f18c52a --- /dev/null +++ b/diaconn/src/main/java/info/nightscout/androidaps/diaconn/di/DiaconnLogUploaderModule.kt @@ -0,0 +1,12 @@ +package info.nightscout.androidaps.diaconn.di + +import dagger.Module +import dagger.android.ContributesAndroidInjector +import info.nightscout.androidaps.diaconn.api.DiaconnLogUploader +import info.nightscout.androidaps.diaconn.service.DiaconnG8Service + +@Module +@Suppress("unused") +abstract class DiaconnLogUploaderModule { + @ContributesAndroidInjector abstract fun contributesDiaconnLogUploader(): DiaconnLogUploader +} \ No newline at end of file diff --git a/diaconn/src/main/java/info/nightscout/androidaps/diaconn/packet/BigLogInquireResponsePacket.kt b/diaconn/src/main/java/info/nightscout/androidaps/diaconn/packet/BigLogInquireResponsePacket.kt index 5ca09ea8e7..099a562435 100644 --- a/diaconn/src/main/java/info/nightscout/androidaps/diaconn/packet/BigLogInquireResponsePacket.kt +++ b/diaconn/src/main/java/info/nightscout/androidaps/diaconn/packet/BigLogInquireResponsePacket.kt @@ -1,9 +1,12 @@ package info.nightscout.androidaps.diaconn.packet +import android.app.Application +import android.content.Context import dagger.android.HasAndroidInjector import info.nightscout.androidaps.data.DetailedBolusInfo import info.nightscout.androidaps.diaconn.DiaconnG8Pump import info.nightscout.androidaps.diaconn.R +import info.nightscout.androidaps.diaconn.api.* import info.nightscout.androidaps.diaconn.common.RecordTypes import info.nightscout.androidaps.diaconn.database.DiaconnHistoryRecord import info.nightscout.androidaps.diaconn.database.DiaconnHistoryRecordDao @@ -22,6 +25,10 @@ import info.nightscout.androidaps.utils.resources.ResourceHelper import info.nightscout.shared.sharedPreferences.SP import org.apache.commons.lang3.time.DateUtils import org.joda.time.DateTime +import retrofit2.Call +import retrofit2.Response +import java.lang.Exception +import java.util.* import javax.inject.Inject /** @@ -30,7 +37,6 @@ import javax.inject.Inject class BigLogInquireResponsePacket( injector: HasAndroidInjector ) : DiaconnG8Packet(injector) { - @Inject lateinit var rxBus: RxBus @Inject lateinit var rh: ResourceHelper @Inject lateinit var activePlugin: ActivePlugin @@ -40,6 +46,9 @@ class BigLogInquireResponsePacket( @Inject lateinit var sp: SP @Inject lateinit var pumpSync: PumpSync @Inject lateinit var diaconnHistoryRecordDao: DiaconnHistoryRecordDao + @Inject lateinit var diaconnLogUploader: DiaconnLogUploader + @Inject lateinit var context: Context + var result = 0// 조회결과 private var pumpDesc = PumpDescription(PumpType.DIACONN_G8) init { @@ -66,6 +75,7 @@ class BigLogInquireResponsePacket( // initalize val dailyMaxvalInfo = mutableMapOf>() dailyMaxvalInfo[""] = mutableMapOf() + val pumpLogs : MutableList = mutableListOf() // 15 byte를 로그갯수만큼 돌기. for(i in 0 until logLength) { @@ -86,637 +96,693 @@ class BigLogInquireResponsePacket( PumplogUtil.getByte(bufferData), PumplogUtil.getByte(bufferData) ) - - diaconnG8Pump.apsWrappingCount = wrapingCount - diaconnG8Pump.apslastLogNum = logNum - sp.putInt(rh.gs(R.string.apslastLogNum), logNum) - sp.putInt(rh.gs(R.string.apsWrappingCount), wrapingCount) - // process Log to DB val logDataToHexString = toNarrowHex(logdata) val pumplogKind: Byte = PumplogUtil.getKind(logDataToHexString) var status: String val diaconnG8HistoryRecord = DiaconnHistoryRecord(0) - when(pumplogKind) { - LOG_INJECT_MEAL_SUCCESS.LOG_KIND -> { - val logItem = LOG_INJECT_MEAL_SUCCESS.parse(logDataToHexString) - aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") - val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") - val logDateTime = logStartDate.time - val detailedBolusInfo = detailedBolusInfoStorage.findDetailedBolusInfo(logDateTime, logItem.injectAmount / 100.0) - val newRecord = pumpSync.syncBolusWithPumpId( - timestamp = logDateTime, - amount = logItem.injectAmount / 100.0, - type = detailedBolusInfo?.bolusType, - pumpId = logDateTime, - pumpType = PumpType.DIACONN_G8, - pumpSerial = diaconnG8Pump.serialNo.toString()) - aapsLogger.debug(LTag.PUMPCOMM, (if (newRecord) "**NEW** " else "") + "EVENT MEALBOLUS (" + pumplogKind + ") " + dateUtil.dateAndTimeString(logDateTime) + " (" + logDateTime + ")" + " Bolus: " + logItem.injectAmount / 100.0 + "U ") - diaconnG8HistoryRecord.code = RecordTypes.RECORD_TYPE_BOLUS - diaconnG8HistoryRecord.timestamp = logDateTime - diaconnG8HistoryRecord.value = logItem.injectAmount / 100.0 - diaconnG8HistoryRecord.duration = logItem.getInjectTime() - diaconnG8HistoryRecord.bolusType = "M" // meal bolus - diaconnG8HistoryRecord.stringValue = rh.gs(R.string.diaconn_g8_logmealsuccess) - diaconnHistoryRecordDao.createOrUpdate(diaconnG8HistoryRecord) - if (!newRecord && detailedBolusInfo != null) { - // detailedInfo can be from another similar record. Reinsert - detailedBolusInfoStorage.add(detailedBolusInfo) - } - status = "MEALBOLUSSUCCESS" + dateUtil.timeString(logDateTime) - } + if(diaconnG8Pump.isPlatformUploadStarted){ + // Diaconn Platform upload start + aapsLogger.debug(LTag.PUMPCOMM, "make api upload parameter") + val pumpLog = PumpLog( + pumplog_no = logNum.toLong(), + pumplog_wrapping_count = wrapingCount, + pumplog_data = logDataToHexString, + act_type = "1" + ) + pumpLogs.add(pumpLog) + continue - LOG_INJECT_MEAL_FAIL.LOG_KIND -> { - val logItem = LOG_INJECT_MEAL_FAIL.parse(logDataToHexString) - aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") - val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") - val logDateTime = logStartDate.time - val detailedBolusInfo = detailedBolusInfoStorage.findDetailedBolusInfo(logDateTime, logItem.injectAmount / 100.0) - val newRecord = pumpSync.syncBolusWithPumpId( - timestamp = logDateTime, - amount = logItem.injectAmount / 100.0, - type = detailedBolusInfo?.bolusType, - pumpId = logDateTime, - pumpType = PumpType.DIACONN_G8, - pumpSerial = diaconnG8Pump.serialNo.toString()) - aapsLogger.debug(LTag.PUMPCOMM, (if (newRecord) "**NEW** " else "") + "EVENT MEALBOLUS (" + pumplogKind + ") " + dateUtil.dateAndTimeString(logDateTime) + " (" + logDateTime + ")" + " Bolus: " + logItem.injectAmount / 100.0 + "U ") - diaconnG8HistoryRecord.code = RecordTypes.RECORD_TYPE_BOLUS - diaconnG8HistoryRecord.timestamp = logDateTime - diaconnG8HistoryRecord.value = if ((logItem.injectAmount / 100.0) < 0) 0.0 else (logItem.injectAmount / 100.0) - diaconnG8HistoryRecord.duration = logItem.getInjectTime() - diaconnG8HistoryRecord.bolusType = "M" // Meal bolus - diaconnG8HistoryRecord.stringValue = rh.gs(R.string.diaconn_g8_logmealfail) - diaconnHistoryRecordDao.createOrUpdate(diaconnG8HistoryRecord) - if (!newRecord && detailedBolusInfo != null) { - // detailedInfo can be from another similar record. Reinsert - detailedBolusInfoStorage.add(detailedBolusInfo) - } - status = "MEALBOLUSFAIL " + dateUtil.timeString(logDateTime) - } + } else { + // APS Local history sync start + diaconnG8Pump.apsWrappingCount = wrapingCount + diaconnG8Pump.apslastLogNum = logNum + sp.putInt(rh.gs(R.string.apslastLogNum), logNum) + sp.putInt(rh.gs(R.string.apsWrappingCount), wrapingCount) - LOG_INJECT_NORMAL_SUCCESS.LOG_KIND -> { - val logItem = LOG_INJECT_NORMAL_SUCCESS.parse(logDataToHexString) - aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") + when(pumplogKind) { - val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") - val logDateTime = logStartDate.time - val detailedBolusInfo = detailedBolusInfoStorage.findDetailedBolusInfo(logDateTime, logItem.injectAmount / 100.0) - val newRecord = pumpSync.syncBolusWithPumpId( - timestamp = logDateTime, - amount = logItem.injectAmount / 100.0, - type = detailedBolusInfo?.bolusType, - pumpId = logDateTime, - pumpType = PumpType.DIACONN_G8, - pumpSerial = diaconnG8Pump.serialNo.toString()) - aapsLogger.debug(LTag.PUMPCOMM, (if (newRecord) "**NEW** " else "") + "EVENT BOLUS (" + pumplogKind + ") " + dateUtil.dateAndTimeString(logDateTime) + " (" + logDateTime + ")" + " Bolus: " + logItem.injectAmount / 100.0 + "U ") - diaconnG8HistoryRecord.code = RecordTypes.RECORD_TYPE_BOLUS - diaconnG8HistoryRecord.timestamp = logDateTime - diaconnG8HistoryRecord.value = logItem.injectAmount / 100.0 - diaconnG8HistoryRecord.duration = logItem.getInjectTime() - diaconnG8HistoryRecord.bolusType = "B" // bolus - diaconnG8HistoryRecord.stringValue = rh.gs(R.string.diaconn_g8_logsuccess) - diaconnHistoryRecordDao.createOrUpdate(diaconnG8HistoryRecord) - if (!newRecord && detailedBolusInfo != null) { - // detailedInfo can be from another similar record. Reinsert - detailedBolusInfoStorage.add(detailedBolusInfo) - } - status = "BOLUSSUCCESS" + dateUtil.timeString(logDateTime) - } - - LOG_INJECT_NORMAL_FAIL.LOG_KIND -> { - val logItem = LOG_INJECT_NORMAL_FAIL.parse(logDataToHexString) - aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") - val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") - val logDateTime = logStartDate.time - - // APS DB process - val detailedBolusInfo = detailedBolusInfoStorage.findDetailedBolusInfo(logDateTime, logItem.injectAmount / 100.0) - val newRecord = pumpSync.syncBolusWithPumpId( - timestamp = logDateTime, - amount = logItem.injectAmount / 100.0, - type = detailedBolusInfo?.bolusType, - pumpId = logDateTime, - pumpType = PumpType.DIACONN_G8, - pumpSerial = diaconnG8Pump.serialNo.toString()) - aapsLogger.debug(LTag.PUMPCOMM, (if (newRecord) "**NEW** " else "") + "EVENT BOLUS (" + pumplogKind + ") " + dateUtil.dateAndTimeString(logDateTime) + " (" + logDateTime + ")" + " Bolus: " + logItem.injectAmount / 100.0 + "U ") - // Diaconn History Process - diaconnG8HistoryRecord.code = RecordTypes.RECORD_TYPE_BOLUS - diaconnG8HistoryRecord.timestamp = logDateTime - diaconnG8HistoryRecord.value = if ((logItem.injectAmount / 100.0) < 0) 0.0 else (logItem.injectAmount / 100.0) - diaconnG8HistoryRecord.duration = logItem.getInjectTime() - diaconnG8HistoryRecord.bolusType = "B" // bolus - diaconnG8HistoryRecord.stringValue = getReasonName(pumplogKind, logItem.reason) - diaconnHistoryRecordDao.createOrUpdate(diaconnG8HistoryRecord) - if (!newRecord && detailedBolusInfo != null) { - // detailedInfo can be from another similar record. Reinsert - detailedBolusInfoStorage.add(detailedBolusInfo) - } - status = "BOLUSFAIL " + dateUtil.timeString(logDateTime) - } - - LOG_SET_SQUARE_INJECTION.LOG_KIND -> { - val logItem = LOG_SET_SQUARE_INJECTION.parse(logDataToHexString) - aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") - val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") - val logDateTime = logStartDate.time - val newRecord = pumpSync.syncExtendedBolusWithPumpId( - timestamp = logDateTime, - amount = logItem.setAmount / 100.0, - duration = T.mins((logItem.getInjectTime() * 10).toLong()).msecs(), - isEmulatingTB = false, - pumpId = logDateTime, - pumpType = PumpType.DIACONN_G8, - pumpSerial = diaconnG8Pump.serialNo.toString()) - aapsLogger.debug(LTag.PUMPCOMM, (if (newRecord) "**NEW** " else "") + "EVENT EXTENDEDSTART (" + pumplogKind + ") " + dateUtil.dateAndTimeString(logDateTime) + " (" + logDateTime + ")" + " Amount: " + logItem.setAmount / 100.0 + "U Duration: " + logItem.getInjectTime() * 10 + "min") - diaconnG8HistoryRecord.code = RecordTypes.RECORD_TYPE_BOLUS - diaconnG8HistoryRecord.timestamp = logDateTime - diaconnG8HistoryRecord.value = logItem.setAmount / 100.0 - diaconnG8HistoryRecord.duration = logItem.getInjectTime() - diaconnG8HistoryRecord.stringValue = rh.gs(R.string.diaconn_g8_logsquarestart) - diaconnG8HistoryRecord.bolusType = "E" // Extended - diaconnHistoryRecordDao.createOrUpdate(diaconnG8HistoryRecord) - status = "EXTENDEDBOLUSSTART " + dateUtil.timeString(logDateTime) - } - - LOG_INJECT_SQUARE_SUCCESS.LOG_KIND -> { - val logItem = LOG_INJECT_SQUARE_SUCCESS.parse(logDataToHexString) - aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") - val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") - val logDateTime = logStartDate.time - diaconnG8HistoryRecord.code = RecordTypes.RECORD_TYPE_BOLUS - diaconnG8HistoryRecord.timestamp = logDateTime - diaconnG8HistoryRecord.duration = logItem.getInjectTime() - diaconnG8HistoryRecord.stringValue = rh.gs(R.string.diaconn_g8_logsquaresuccess) - diaconnG8HistoryRecord.bolusType = "E" // Extended - diaconnHistoryRecordDao.createOrUpdate(diaconnG8HistoryRecord) - status = "EXTENDEDBOLUSEND " + dateUtil.timeString(logDateTime) - } - - LOG_INJECT_SQUARE_FAIL.LOG_KIND -> { - val logItem = LOG_INJECT_SQUARE_FAIL.parse(logDataToHexString) - aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") - val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") - val logDateTime = logStartDate.time - val newRecord = pumpSync.syncStopExtendedBolusWithPumpId( - timestamp = logDateTime, - endPumpId = logDateTime, - pumpType = PumpType.DIACONN_G8, - pumpSerial = diaconnG8Pump.serialNo.toString()) - aapsLogger.debug(LTag.PUMPCOMM, (if (newRecord) "**NEW** " else "") + "EVENT EXTENDEDSTOP (" + pumplogKind + ") " + dateUtil.dateAndTimeString(logDateTime) + " (" + logDateTime + ")" + " Delivered: " + logItem.injectAmount / 100.0 + "U RealDuration: " + logItem.getInjectTime() + "min") - diaconnG8HistoryRecord.code = RecordTypes.RECORD_TYPE_BOLUS - diaconnG8HistoryRecord.timestamp = logDateTime - diaconnG8HistoryRecord.value = logItem.injectAmount / 100.0 - diaconnG8HistoryRecord.duration = logItem.getInjectTime() - diaconnG8HistoryRecord.stringValue = getReasonName(pumplogKind, logItem.reason) - diaconnG8HistoryRecord.bolusType = "E" - diaconnHistoryRecordDao.createOrUpdate(diaconnG8HistoryRecord) - status = "EXTENDEDBOLUSFAIL " + dateUtil.timeString(logDateTime) - } - - LOG_SET_DUAL_INJECTION.LOG_KIND -> { - val logItem = LOG_SET_DUAL_INJECTION.parse(logDataToHexString) - aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") - val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") - val logDateTime = logStartDate.time - - // dual square 처리. - val newRecord = pumpSync.syncExtendedBolusWithPumpId( - timestamp = logDateTime, - amount = logItem.setSquareAmount / 100.0, - duration = T.mins((logItem.getInjectTime() * 10).toLong()).msecs(), - isEmulatingTB = false, - pumpId = logDateTime, - pumpType = PumpType.DIACONN_G8, - pumpSerial = diaconnG8Pump.serialNo.toString()) - aapsLogger.debug(LTag.PUMPCOMM, (if (newRecord) "**NEW** " else "") + "EVENT EXTENDEDSTART (" + pumplogKind + ") " + dateUtil.dateAndTimeString(logDateTime) + " (" + logDateTime + ")" + " Amount: " + logItem.setSquareAmount / 100.0 + "U Duration: " + logItem.getInjectTime() * 10 + "min") - diaconnG8HistoryRecord.code = RecordTypes.RECORD_TYPE_BOLUS - diaconnG8HistoryRecord.timestamp = logDateTime - diaconnG8HistoryRecord.value = logItem.setSquareAmount / 100.0 - diaconnG8HistoryRecord.duration = logItem.getInjectTime() * 10 // (1~30) 1:10min 30:300min - diaconnG8HistoryRecord.stringValue = rh.gs(R.string.diaconn_g8_logdualsquarestart) - diaconnG8HistoryRecord.bolusType = "D" // Extended - diaconnHistoryRecordDao.createOrUpdate(diaconnG8HistoryRecord) - - status = "DUALEXTENTEDSTART " + dateUtil.timeString(logDateTime) - } - - LOG_INJECTION_DUAL_NORMAL.LOG_KIND -> { - val logItem = LOG_INJECTION_DUAL_NORMAL.parse(logDataToHexString) - aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") - val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") - val logDateTime = logStartDate.time - val detailedBolusInfo = detailedBolusInfoStorage.findDetailedBolusInfo(logDateTime, logItem.injectAmount / 100.0) - val newRecord = pumpSync.syncBolusWithPumpId( - timestamp = logDateTime, - amount = logItem.injectAmount / 100.0, - type = detailedBolusInfo?.bolusType, - pumpId = logDateTime, - pumpType = PumpType.DIACONN_G8, - pumpSerial = diaconnG8Pump.serialNo.toString()) - aapsLogger.debug(LTag.PUMPCOMM, (if (newRecord) "**NEW** " else "") + "EVENT DUALBOLUS (" + pumplogKind + ") " + dateUtil.dateAndTimeString(logDateTime) + " (" + logDateTime + ")" + " Bolus: " + logItem.injectAmount / 100.0 + "U Duration: " + logItem.getInjectTime() + "min") - - diaconnG8Pump.lastBolusAmount = logItem.injectAmount / 100.0 - diaconnG8Pump.lastBolusTime = logDateTime - - //Diaconn History - diaconnG8HistoryRecord.code = RecordTypes.RECORD_TYPE_BOLUS - diaconnG8HistoryRecord.timestamp = logDateTime - diaconnG8HistoryRecord.value = logItem.injectAmount / 100.0 - diaconnG8HistoryRecord.duration = logItem.getInjectTime() - diaconnG8HistoryRecord.bolusType = "D" // bolus - diaconnG8HistoryRecord.stringValue = rh.gs(R.string.diaconn_g8_logdualnormalsuccess) - diaconnHistoryRecordDao.createOrUpdate(diaconnG8HistoryRecord) - if (!newRecord && detailedBolusInfo != null) { - // detailedInfo can be from another similar record. Reinsert - detailedBolusInfoStorage.add(detailedBolusInfo) - } - status = "DUALBOLUS" + dateUtil.timeString(logDateTime) - } - - LOG_INJECT_DUAL_SUCCESS.LOG_KIND -> { - val logItem = LOG_INJECT_DUAL_SUCCESS.parse(logDataToHexString) - aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") - val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") - val logDateTime = logStartDate.time - - diaconnG8HistoryRecord.code = RecordTypes.RECORD_TYPE_BOLUS - diaconnG8HistoryRecord.timestamp = logDateTime - diaconnG8HistoryRecord.value = logItem.injectSquareAmount / 100.0 - diaconnG8HistoryRecord.duration = logItem.getInjectTime() - diaconnG8HistoryRecord.bolusType = "D" - diaconnG8HistoryRecord.stringValue = rh.gs(R.string.diaconn_g8_logdualsquaresuccess) - diaconnHistoryRecordDao.createOrUpdate(diaconnG8HistoryRecord) - status = "DUALBOLUS SQUARESUCCESS " + dateUtil.timeString(logDateTime) - } - - LOG_INJECT_DUAL_FAIL.LOG_KIND -> { - val logItem = LOG_INJECT_DUAL_FAIL.parse(logDataToHexString) - aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") - val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") - val logDateTime = logStartDate.time - val newRecord = pumpSync.syncStopExtendedBolusWithPumpId( - timestamp = logDateTime, - endPumpId = logDateTime, - pumpType = PumpType.DIACONN_G8, - pumpSerial = diaconnG8Pump.serialNo.toString()) - aapsLogger.debug(LTag.PUMPCOMM, (if (newRecord) "**NEW** " else "") + "EVENT EXTENDEDSTOP (" + pumplogKind + ") " + dateUtil.dateAndTimeString(logDateTime) + " (" + logDateTime + ")" + " Delivered: " + logItem.injectSquareAmount / 100.0 + "U RealDuration: " + logItem.getInjectTime() + "min") - - diaconnG8HistoryRecord.code = RecordTypes.RECORD_TYPE_BOLUS - diaconnG8HistoryRecord.timestamp = logDateTime - diaconnG8HistoryRecord.value = logItem.injectNormAmount / 100.0 + logItem.injectSquareAmount / 100.0 - diaconnG8HistoryRecord.duration = logItem.getInjectTime() - diaconnG8HistoryRecord.bolusType = "D" - diaconnG8HistoryRecord.stringValue = getReasonName(pumplogKind, logItem.reason) - diaconnHistoryRecordDao.createOrUpdate(diaconnG8HistoryRecord) - status = "DUALBOLUS FAIL " + dateUtil.timeString(logDateTime) - } - - LOG_INJECTION_1HOUR_BASAL.LOG_KIND -> { - val logItem = LOG_INJECTION_1HOUR_BASAL.parse(logDataToHexString) - aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") - val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") - val logDateTime = logStartDate.time - diaconnG8HistoryRecord.code = RecordTypes.RECORD_TYPE_BASALHOUR - diaconnG8HistoryRecord.timestamp = logDateTime - diaconnG8HistoryRecord.value = logItem.beforeAmount / 100.0 - diaconnG8HistoryRecord.stringValue = "TB before: ${logItem.beforeAmount / 100.0} / TB after: ${logItem.afterAmount / 100.0}" - diaconnHistoryRecordDao.createOrUpdate(diaconnG8HistoryRecord) - status = "1HOUR BASAL " + dateUtil.dateAndTimeString(logDateTime) - } - - LOG_SUSPEND_V2.LOG_KIND -> { - val logItem = LOG_SUSPEND_V2.parse(logDataToHexString) - aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") - val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") - val logDateTime = logStartDate.time - diaconnG8HistoryRecord.code = RecordTypes.RECORD_TYPE_SUSPEND - diaconnG8HistoryRecord.timestamp = logDateTime - diaconnG8HistoryRecord.stringValue = rh.gs(R.string.diaconn_g8_lgosuspend, logItem.getBasalPattern()) - diaconnHistoryRecordDao.createOrUpdate(diaconnG8HistoryRecord) - status = "SUSPEND " + dateUtil.timeString(logDateTime) - } - - LOG_SUSPEND_RELEASE_V2.LOG_KIND -> { - val logItem = LOG_SUSPEND_RELEASE_V2.parse(logDataToHexString) - aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") - val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") - val logDateTime = logStartDate.time - diaconnG8HistoryRecord.code = RecordTypes.RECORD_TYPE_SUSPEND - diaconnG8HistoryRecord.timestamp = logDateTime - diaconnG8HistoryRecord.stringValue = rh.gs(R.string.diaconn_g8_lgorelease, logItem.getBasalPattern()) - diaconnHistoryRecordDao.createOrUpdate(diaconnG8HistoryRecord) - status = "SUSPENDRELEASE " + dateUtil.timeString(logDateTime) - } - - LOG_CHANGE_INJECTOR_SUCCESS.LOG_KIND -> { - val logItem = LOG_CHANGE_INJECTOR_SUCCESS.parse(logDataToHexString) - aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") - val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") - val logDateTime = logStartDate.time - if (sp.getBoolean(R.string.key_diaconn_g8_loginsulinchange, true)) { - val newRecord = pumpSync.insertTherapyEventIfNewWithTimestamp( + LOG_INJECT_MEAL_SUCCESS.LOG_KIND -> { + val logItem = LOG_INJECT_MEAL_SUCCESS.parse(logDataToHexString) + aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") + val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") + val logDateTime = logStartDate.time + val detailedBolusInfo = detailedBolusInfoStorage.findDetailedBolusInfo(logDateTime, logItem.injectAmount / 100.0) + val newRecord = pumpSync.syncBolusWithPumpId( timestamp = logDateTime, - type = DetailedBolusInfo.EventType.INSULIN_CHANGE, + amount = logItem.injectAmount / 100.0, + type = detailedBolusInfo?.bolusType, pumpId = logDateTime, pumpType = PumpType.DIACONN_G8, - pumpSerial = diaconnG8Pump.serialNo.toString() - ) - aapsLogger.debug(LTag.PUMPCOMM, (if (newRecord) "**NEW** " else "") + "EVENT INSULINCHANGE(" + pumplogKind + ") " + dateUtil.dateAndTimeString(logDateTime) + " (" + logDateTime + ")" + " Amount: " + logItem.remainAmount / 100.0 + "U") + pumpSerial = diaconnG8Pump.serialNo.toString()) + aapsLogger.debug(LTag.PUMPCOMM, (if (newRecord) "**NEW** " else "") + "EVENT MEALBOLUS (" + pumplogKind + ") " + dateUtil.dateAndTimeString(logDateTime) + " (" + logDateTime + ")" + " Bolus: " + logItem.injectAmount / 100.0 + "U ") + diaconnG8HistoryRecord.code = RecordTypes.RECORD_TYPE_BOLUS + diaconnG8HistoryRecord.timestamp = logDateTime + diaconnG8HistoryRecord.value = logItem.injectAmount / 100.0 + diaconnG8HistoryRecord.duration = logItem.getInjectTime() + diaconnG8HistoryRecord.bolusType = "M" // meal bolus + diaconnG8HistoryRecord.stringValue = rh.gs(R.string.diaconn_g8_logmealsuccess) + diaconnHistoryRecordDao.createOrUpdate(diaconnG8HistoryRecord) + if (!newRecord && detailedBolusInfo != null) { + // detailedInfo can be from another similar record. Reinsert + detailedBolusInfoStorage.add(detailedBolusInfo) + } + status = "MEALBOLUSSUCCESS" + dateUtil.timeString(logDateTime) } - diaconnG8HistoryRecord.code = RecordTypes.RECORD_TYPE_REFILL - diaconnG8HistoryRecord.timestamp = logDateTime - diaconnG8HistoryRecord.value = logItem.remainAmount / 100.0 - diaconnG8HistoryRecord.stringValue = rh.gs(R.string.diaconn_g8_loginjectorprime, logItem.primeAmount / 100.0) - diaconnHistoryRecordDao.createOrUpdate(diaconnG8HistoryRecord) - status = "INSULINCHANGE " + dateUtil.timeString(logDateTime) - } - LOG_CHANGE_TUBE_SUCCESS.LOG_KIND -> { - val logItem = LOG_CHANGE_TUBE_SUCCESS.parse(logDataToHexString) - aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") - val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") - val logDateTime = logStartDate.time - if (sp.getBoolean(R.string.key_diaconn_g8_logtubechange, true)) { - val newRecord = pumpSync.insertTherapyEventIfNewWithTimestamp( + LOG_INJECT_MEAL_FAIL.LOG_KIND -> { + val logItem = LOG_INJECT_MEAL_FAIL.parse(logDataToHexString) + aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") + val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") + val logDateTime = logStartDate.time + val detailedBolusInfo = detailedBolusInfoStorage.findDetailedBolusInfo(logDateTime, logItem.injectAmount / 100.0) + val newRecord = pumpSync.syncBolusWithPumpId( timestamp = logDateTime, - type = DetailedBolusInfo.EventType.NOTE, - note = rh.gs(R.string.diaconn_g8_logtubeprime, logItem.primeAmount / 100.0), + amount = logItem.injectAmount / 100.0, + type = detailedBolusInfo?.bolusType, pumpId = logDateTime, pumpType = PumpType.DIACONN_G8, - pumpSerial = diaconnG8Pump.serialNo.toString() - ) - aapsLogger.debug(LTag.PUMPCOMM, (if (newRecord) "**NEW** " else "") + "EVENT TUBECHANGE(" + pumplogKind + ") " + dateUtil.dateAndTimeString(logDateTime) + " (" + logDateTime + ")" + " Amount: " + logItem.primeAmount / 100.0 + "U") + pumpSerial = diaconnG8Pump.serialNo.toString()) + aapsLogger.debug(LTag.PUMPCOMM, (if (newRecord) "**NEW** " else "") + "EVENT MEALBOLUS (" + pumplogKind + ") " + dateUtil.dateAndTimeString(logDateTime) + " (" + logDateTime + ")" + " Bolus: " + logItem.injectAmount / 100.0 + "U ") + diaconnG8HistoryRecord.code = RecordTypes.RECORD_TYPE_BOLUS + diaconnG8HistoryRecord.timestamp = logDateTime + diaconnG8HistoryRecord.value = if ((logItem.injectAmount / 100.0) < 0) 0.0 else (logItem.injectAmount / 100.0) + diaconnG8HistoryRecord.duration = logItem.getInjectTime() + diaconnG8HistoryRecord.bolusType = "M" // Meal bolus + diaconnG8HistoryRecord.stringValue = rh.gs(R.string.diaconn_g8_logmealfail) + diaconnHistoryRecordDao.createOrUpdate(diaconnG8HistoryRecord) + if (!newRecord && detailedBolusInfo != null) { + // detailedInfo can be from another similar record. Reinsert + detailedBolusInfoStorage.add(detailedBolusInfo) + } + status = "MEALBOLUSFAIL " + dateUtil.timeString(logDateTime) } - diaconnG8HistoryRecord.code = RecordTypes.RECORD_TYPE_REFILL - diaconnG8HistoryRecord.timestamp = logDateTime - diaconnG8HistoryRecord.value = logItem.remainAmount / 100.0 - diaconnG8HistoryRecord.stringValue = rh.gs(R.string.diaconn_g8_logtubeprime, logItem.primeAmount / 100.0) - diaconnHistoryRecordDao.createOrUpdate(diaconnG8HistoryRecord) - status = "TUBECHANGE " + dateUtil.timeString(logDateTime) - } + LOG_INJECT_NORMAL_SUCCESS.LOG_KIND -> { + val logItem = LOG_INJECT_NORMAL_SUCCESS.parse(logDataToHexString) + aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") - LOG_INJECTION_1DAY.LOG_KIND -> { // Daily Bolus Log - val logItem = LOG_INJECTION_1DAY.parse(logDataToHexString) - aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") - val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") - val logDateTime = logStartDate.time - - diaconnG8HistoryRecord.code = RecordTypes.RECORD_TYPE_DAILY - diaconnG8HistoryRecord.timestamp = DateTime(logDateTime).withTimeAtStartOfDay().millis - diaconnG8HistoryRecord.dailyBolus = logItem.extAmount / 100.0 + logItem.mealAmount / 100.0 - - val recordDateStr = "" + diaconnG8HistoryRecord.timestamp - var recordMap: MutableMap = mutableMapOf("dummy" to 0.0) - - if (dailyMaxvalInfo.containsKey(recordDateStr)) { - recordMap = dailyMaxvalInfo[recordDateStr]!! - } else { - recordMap["bolus"] = 0.0 - recordMap["basal"] = 0.0 - dailyMaxvalInfo[recordDateStr] = recordMap - } - - if (diaconnG8HistoryRecord.dailyBolus > recordMap["bolus"]!!) { - recordMap["bolus"] = diaconnG8HistoryRecord.dailyBolus - } else { - diaconnG8HistoryRecord.dailyBolus = recordMap["bolus"]!! - } - - if (recordMap["basal"]!! > 0.0) { - diaconnG8HistoryRecord.dailyBasal = recordMap["basal"]!! - } - - diaconnHistoryRecordDao.createOrUpdate(diaconnG8HistoryRecord) - - //If it is a TDD, store it for stats also. - pumpSync.createOrUpdateTotalDailyDose( - timestamp = diaconnG8HistoryRecord.timestamp, - bolusAmount = diaconnG8HistoryRecord.dailyBolus, - basalAmount = diaconnG8HistoryRecord.dailyBasal, - totalAmount = 0.0, - pumpId = null, - pumpType = PumpType.DIACONN_G8, - diaconnG8Pump.serialNo.toString() - ) - - status = "DAILYBOLUS " + dateUtil.timeString(logDateTime) - } - - LOG_INJECTION_1DAY_BASAL.LOG_KIND -> { // Daily Basal Log - val logItem = LOG_INJECTION_1DAY_BASAL.parse(logDataToHexString) - aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") - val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") - val logDateTime = logStartDate.time - - diaconnG8HistoryRecord.code = RecordTypes.RECORD_TYPE_DAILY - diaconnG8HistoryRecord.timestamp = DateTime(logDateTime).withTimeAtStartOfDay().millis - diaconnG8HistoryRecord.dailyBasal = logItem.amount / 100.0 - - val recordDateStr = "" + diaconnG8HistoryRecord.timestamp - var recordMap: MutableMap = mutableMapOf("dummy" to 0.0) - - if (dailyMaxvalInfo.containsKey(recordDateStr)) { - recordMap = dailyMaxvalInfo[recordDateStr]!! - } else { - recordMap["bolus"] = 0.0 - recordMap["basal"] = 0.0 - dailyMaxvalInfo[recordDateStr] = recordMap - } - - if (diaconnG8HistoryRecord.dailyBasal > recordMap["basal"]!!) { - recordMap["basal"] = diaconnG8HistoryRecord.dailyBasal - } else { - diaconnG8HistoryRecord.dailyBasal = recordMap["basal"]!! - } - - if (recordMap["bolus"]!! > 0.0) { - diaconnG8HistoryRecord.dailyBolus = recordMap["bolus"]!! - } - - diaconnHistoryRecordDao.createOrUpdate(diaconnG8HistoryRecord) - - //If it is a TDD, store it for stats also. - // pumpSync.createOrUpdateTotalDailyDose( - // timestamp = diaconnG8HistoryRecord.timestamp, - // bolusAmount = diaconnG8HistoryRecord.dailyBolus, - // basalAmount = diaconnG8HistoryRecord.dailyBasal, - // totalAmount = 0.0, - // pumpId = null, - // pumpType = PumpType.DIACONN_G8, - // diaconnG8Pump.serialNo.toString() - // ) - - status = "DAILYBASAL " + dateUtil.timeString(logDateTime) - } - - LOG_CHANGE_NEEDLE_SUCCESS.LOG_KIND -> { - val logItem = LOG_CHANGE_NEEDLE_SUCCESS.parse(logDataToHexString) - aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") - val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") - val logDateTime = logStartDate.time - if (sp.getBoolean(R.string.key_diaconn_g8_logneedlechange, true)) { - val newRecord = pumpSync.insertTherapyEventIfNewWithTimestamp( + val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") + val logDateTime = logStartDate.time + val detailedBolusInfo = detailedBolusInfoStorage.findDetailedBolusInfo(logDateTime, logItem.injectAmount / 100.0) + val newRecord = pumpSync.syncBolusWithPumpId( timestamp = logDateTime, - type = DetailedBolusInfo.EventType.CANNULA_CHANGE, + amount = logItem.injectAmount / 100.0, + type = detailedBolusInfo?.bolusType, pumpId = logDateTime, pumpType = PumpType.DIACONN_G8, - pumpSerial = diaconnG8Pump.serialNo.toString() - ) - aapsLogger.debug(LTag.PUMPCOMM, (if (newRecord) "**NEW** " else "") + "EVENT NEEDLECHANGE(" + pumplogKind + ") " + dateUtil.dateAndTimeString(logDateTime) + " (" + logDateTime + ")" + " Amount: " + logItem.remainAmount / 100.0 + "U") + pumpSerial = diaconnG8Pump.serialNo.toString()) + aapsLogger.debug(LTag.PUMPCOMM, (if (newRecord) "**NEW** " else "") + "EVENT BOLUS (" + pumplogKind + ") " + dateUtil.dateAndTimeString(logDateTime) + " (" + logDateTime + ")" + " Bolus: " + logItem.injectAmount / 100.0 + "U ") + diaconnG8HistoryRecord.code = RecordTypes.RECORD_TYPE_BOLUS + diaconnG8HistoryRecord.timestamp = logDateTime + diaconnG8HistoryRecord.value = logItem.injectAmount / 100.0 + diaconnG8HistoryRecord.duration = logItem.getInjectTime() + diaconnG8HistoryRecord.bolusType = "B" // bolus + diaconnG8HistoryRecord.stringValue = rh.gs(R.string.diaconn_g8_logsuccess) + diaconnHistoryRecordDao.createOrUpdate(diaconnG8HistoryRecord) + if (!newRecord && detailedBolusInfo != null) { + // detailedInfo can be from another similar record. Reinsert + detailedBolusInfoStorage.add(detailedBolusInfo) + } + status = "BOLUSSUCCESS" + dateUtil.timeString(logDateTime) } - diaconnG8HistoryRecord.code = RecordTypes.RECORD_TYPE_REFILL - diaconnG8HistoryRecord.timestamp = logDateTime - diaconnG8HistoryRecord.value = logItem.remainAmount / 100.0 - diaconnG8HistoryRecord.stringValue = rh.gs(R.string.diaconn_g8_logneedleprime, logItem.primeAmount / 100.0) - diaconnHistoryRecordDao.createOrUpdate(diaconnG8HistoryRecord) - status = "NEEDLECHANGE " + dateUtil.timeString(logDateTime) - } + LOG_INJECT_NORMAL_FAIL.LOG_KIND -> { + val logItem = LOG_INJECT_NORMAL_FAIL.parse(logDataToHexString) + aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") + val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") + val logDateTime = logStartDate.time - LOG_TB_START_V3.LOG_KIND -> { - val logItem = LOG_TB_START_V3.parse(logDataToHexString) - aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") - - val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") - val logDateTime = logStartDate.time - var absoluteRate = 0.0 - if (logItem.getTbInjectRateRatio() >= 50000) { - val tempBasalPercent = logItem.getTbInjectRateRatio() - 50000 - absoluteRate = pumpDesc.pumpType.determineCorrectBasalSize(diaconnG8Pump.baseAmount * (tempBasalPercent / 100.0)) + // APS DB process + val detailedBolusInfo = detailedBolusInfoStorage.findDetailedBolusInfo(logDateTime, logItem.injectAmount / 100.0) + val newRecord = pumpSync.syncBolusWithPumpId( + timestamp = logDateTime, + amount = logItem.injectAmount / 100.0, + type = detailedBolusInfo?.bolusType, + pumpId = logDateTime, + pumpType = PumpType.DIACONN_G8, + pumpSerial = diaconnG8Pump.serialNo.toString()) + aapsLogger.debug(LTag.PUMPCOMM, (if (newRecord) "**NEW** " else "") + "EVENT BOLUS (" + pumplogKind + ") " + dateUtil.dateAndTimeString(logDateTime) + " (" + logDateTime + ")" + " Bolus: " + logItem.injectAmount / 100.0 + "U ") + // Diaconn History Process + diaconnG8HistoryRecord.code = RecordTypes.RECORD_TYPE_BOLUS + diaconnG8HistoryRecord.timestamp = logDateTime + diaconnG8HistoryRecord.value = if ((logItem.injectAmount / 100.0) < 0) 0.0 else (logItem.injectAmount / 100.0) + diaconnG8HistoryRecord.duration = logItem.getInjectTime() + diaconnG8HistoryRecord.bolusType = "B" // bolus + diaconnG8HistoryRecord.stringValue = getReasonName(pumplogKind, logItem.reason) + diaconnHistoryRecordDao.createOrUpdate(diaconnG8HistoryRecord) + if (!newRecord && detailedBolusInfo != null) { + // detailedInfo can be from another similar record. Reinsert + detailedBolusInfoStorage.add(detailedBolusInfo) + } + status = "BOLUSFAIL " + dateUtil.timeString(logDateTime) } - if (logItem.getTbInjectRateRatio() in 1000..2500) { - absoluteRate = (logItem.getTbInjectRateRatio() - 1000) / 100.0 + LOG_SET_SQUARE_INJECTION.LOG_KIND -> { + val logItem = LOG_SET_SQUARE_INJECTION.parse(logDataToHexString) + aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") + val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") + val logDateTime = logStartDate.time + val newRecord = pumpSync.syncExtendedBolusWithPumpId( + timestamp = logDateTime, + amount = logItem.setAmount / 100.0, + duration = T.mins((logItem.getInjectTime() * 10).toLong()).msecs(), + isEmulatingTB = false, + pumpId = logDateTime, + pumpType = PumpType.DIACONN_G8, + pumpSerial = diaconnG8Pump.serialNo.toString()) + aapsLogger.debug(LTag.PUMPCOMM, (if (newRecord) "**NEW** " else "") + "EVENT EXTENDEDSTART (" + pumplogKind + ") " + dateUtil.dateAndTimeString(logDateTime) + " (" + logDateTime + ")" + " Amount: " + logItem.setAmount / 100.0 + "U Duration: " + logItem.getInjectTime() * 10 + "min") + diaconnG8HistoryRecord.code = RecordTypes.RECORD_TYPE_BOLUS + diaconnG8HistoryRecord.timestamp = logDateTime + diaconnG8HistoryRecord.value = logItem.setAmount / 100.0 + diaconnG8HistoryRecord.duration = logItem.getInjectTime() + diaconnG8HistoryRecord.stringValue = rh.gs(R.string.diaconn_g8_logsquarestart) + diaconnG8HistoryRecord.bolusType = "E" // Extended + diaconnHistoryRecordDao.createOrUpdate(diaconnG8HistoryRecord) + status = "EXTENDEDBOLUSSTART " + dateUtil.timeString(logDateTime) } - val temporaryBasalInfo = temporaryBasalStorage.findTemporaryBasal(logDateTime, absoluteRate) - val newRecord = pumpSync.syncTemporaryBasalWithPumpId( - timestamp = logDateTime, - rate = absoluteRate, - duration = T.mins((logItem.tbTime * 15).toLong()).msecs(), - isAbsolute = true, - type = temporaryBasalInfo?.type, - pumpId = logDateTime, - pumpType = PumpType.DIACONN_G8, - pumpSerial = diaconnG8Pump.serialNo.toString()) - aapsLogger.debug(LTag.PUMPCOMM, (if (newRecord) "**NEW** " else "") + "EVENT TEMPSTART (" + pumplogKind + ") " + dateUtil.dateAndTimeString(logDateTime) + " (" + logDateTime + ")" + " Ratio: " + absoluteRate + "U Duration: " + logItem.tbTime * 15 + "min") - - diaconnG8HistoryRecord.code = RecordTypes.RECORD_TYPE_TB - diaconnG8HistoryRecord.timestamp = logDateTime - diaconnG8HistoryRecord.duration = logItem.tbTime * 15 - diaconnG8HistoryRecord.value = absoluteRate - diaconnG8HistoryRecord.stringValue = rh.gs(R.string.diaconn_g8_logtempstart) - diaconnHistoryRecordDao.createOrUpdate(diaconnG8HistoryRecord) - status = "TEMPSTART " + dateUtil.timeString(logDateTime) - } - - LOG_TB_STOP_V3.LOG_KIND -> { - val logItem = LOG_TB_STOP_V3.parse(logDataToHexString) - aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") - val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") - val logDateTime = logStartDate.time - var absoluteRate = 0.0 - if (logItem.getTbInjectRateRatio() >= 50000) { - val tempBasalPercent = logItem.getTbInjectRateRatio() - 50000 - absoluteRate = diaconnG8Pump.baseAmount * (tempBasalPercent / 100.0) - } - if (logItem.getTbInjectRateRatio() in 1000..2500) { - absoluteRate = (logItem.getTbInjectRateRatio() - 1000) / 100.0 + LOG_INJECT_SQUARE_SUCCESS.LOG_KIND -> { + val logItem = LOG_INJECT_SQUARE_SUCCESS.parse(logDataToHexString) + aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") + val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") + val logDateTime = logStartDate.time + diaconnG8HistoryRecord.code = RecordTypes.RECORD_TYPE_BOLUS + diaconnG8HistoryRecord.timestamp = logDateTime + diaconnG8HistoryRecord.duration = logItem.getInjectTime() + diaconnG8HistoryRecord.stringValue = rh.gs(R.string.diaconn_g8_logsquaresuccess) + diaconnG8HistoryRecord.bolusType = "E" // Extended + diaconnHistoryRecordDao.createOrUpdate(diaconnG8HistoryRecord) + status = "EXTENDEDBOLUSEND " + dateUtil.timeString(logDateTime) } - val newRecord = pumpSync.syncStopTemporaryBasalWithPumpId( - timestamp = logDateTime, - endPumpId = dateUtil.now(), - pumpType = PumpType.DIACONN_G8, - pumpSerial = diaconnG8Pump.serialNo.toString()) - aapsLogger.debug(LTag.PUMPCOMM, (if (newRecord) "**NEW** " else "") + "EVENT TEMPSTOP (" + pumplogKind + ") " + dateUtil.dateAndTimeString(logDateTime) + " (" + logDateTime + ")") + LOG_INJECT_SQUARE_FAIL.LOG_KIND -> { + val logItem = LOG_INJECT_SQUARE_FAIL.parse(logDataToHexString) + aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") + val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") + val logDateTime = logStartDate.time + val newRecord = pumpSync.syncStopExtendedBolusWithPumpId( + timestamp = logDateTime, + endPumpId = logDateTime, + pumpType = PumpType.DIACONN_G8, + pumpSerial = diaconnG8Pump.serialNo.toString()) + aapsLogger.debug(LTag.PUMPCOMM, (if (newRecord) "**NEW** " else "") + "EVENT EXTENDEDSTOP (" + pumplogKind + ") " + dateUtil.dateAndTimeString(logDateTime) + " (" + logDateTime + ")" + " Delivered: " + logItem.injectAmount / 100.0 + "U RealDuration: " + logItem.getInjectTime() + "min") + diaconnG8HistoryRecord.code = RecordTypes.RECORD_TYPE_BOLUS + diaconnG8HistoryRecord.timestamp = logDateTime + diaconnG8HistoryRecord.value = logItem.injectAmount / 100.0 + diaconnG8HistoryRecord.duration = logItem.getInjectTime() + diaconnG8HistoryRecord.stringValue = getReasonName(pumplogKind, logItem.reason) + diaconnG8HistoryRecord.bolusType = "E" + diaconnHistoryRecordDao.createOrUpdate(diaconnG8HistoryRecord) + status = "EXTENDEDBOLUSFAIL " + dateUtil.timeString(logDateTime) + } - diaconnG8HistoryRecord.code = RecordTypes.RECORD_TYPE_TB - diaconnG8HistoryRecord.timestamp = logDateTime - diaconnG8HistoryRecord.value = absoluteRate - diaconnG8HistoryRecord.stringValue = getReasonName(pumplogKind, logItem.reason) - diaconnHistoryRecordDao.createOrUpdate(diaconnG8HistoryRecord) - status = "TEMPSTOP " + dateUtil.timeString(logDateTime) - } + LOG_SET_DUAL_INJECTION.LOG_KIND -> { + val logItem = LOG_SET_DUAL_INJECTION.parse(logDataToHexString) + aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") + val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") + val logDateTime = logStartDate.time - LOG_ALARM_BATTERY.LOG_KIND -> { // BATTERY SHORTAGE ALARM - val logItem = LOG_ALARM_BATTERY.parse(logDataToHexString) - aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") - val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") - val logDateTime = logStartDate.time + // dual square 처리. + val newRecord = pumpSync.syncExtendedBolusWithPumpId( + timestamp = logDateTime, + amount = logItem.setSquareAmount / 100.0, + duration = T.mins((logItem.getInjectTime() * 10).toLong()).msecs(), + isEmulatingTB = false, + pumpId = logDateTime, + pumpType = PumpType.DIACONN_G8, + pumpSerial = diaconnG8Pump.serialNo.toString()) + aapsLogger.debug(LTag.PUMPCOMM, (if (newRecord) "**NEW** " else "") + "EVENT EXTENDEDSTART (" + pumplogKind + ") " + dateUtil.dateAndTimeString(logDateTime) + " (" + logDateTime + ")" + " Amount: " + logItem.setSquareAmount / 100.0 + "U Duration: " + logItem.getInjectTime() * 10 + "min") + diaconnG8HistoryRecord.code = RecordTypes.RECORD_TYPE_BOLUS + diaconnG8HistoryRecord.timestamp = logDateTime + diaconnG8HistoryRecord.value = logItem.setSquareAmount / 100.0 + diaconnG8HistoryRecord.duration = logItem.getInjectTime() * 10 // (1~30) 1:10min 30:300min + diaconnG8HistoryRecord.stringValue = rh.gs(R.string.diaconn_g8_logdualsquarestart) + diaconnG8HistoryRecord.bolusType = "D" // Extended + diaconnHistoryRecordDao.createOrUpdate(diaconnG8HistoryRecord) - diaconnG8HistoryRecord.code = RecordTypes.RECORD_TYPE_ALARM - diaconnG8HistoryRecord.timestamp = logDateTime - diaconnG8HistoryRecord.stringValue = rh.gs(R.string.diaconn_g8_logbatteryshorage) - diaconnHistoryRecordDao.createOrUpdate(diaconnG8HistoryRecord) - status = "BATTERYALARM " + dateUtil.timeString(logDateTime) - } + status = "DUALEXTENTEDSTART " + dateUtil.timeString(logDateTime) + } - LOG_ALARM_BLOCK.LOG_KIND -> { // INJECTION BLOCKED ALARM - val logItem = LOG_ALARM_BLOCK.parse(logDataToHexString) - aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") + LOG_INJECTION_DUAL_NORMAL.LOG_KIND -> { + val logItem = LOG_INJECTION_DUAL_NORMAL.parse(logDataToHexString) + aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") + val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") + val logDateTime = logStartDate.time + val detailedBolusInfo = detailedBolusInfoStorage.findDetailedBolusInfo(logDateTime, logItem.injectAmount / 100.0) + val newRecord = pumpSync.syncBolusWithPumpId( + timestamp = logDateTime, + amount = logItem.injectAmount / 100.0, + type = detailedBolusInfo?.bolusType, + pumpId = logDateTime, + pumpType = PumpType.DIACONN_G8, + pumpSerial = diaconnG8Pump.serialNo.toString()) + aapsLogger.debug(LTag.PUMPCOMM, (if (newRecord) "**NEW** " else "") + "EVENT DUALBOLUS (" + pumplogKind + ") " + dateUtil.dateAndTimeString(logDateTime) + " (" + logDateTime + ")" + " Bolus: " + logItem.injectAmount / 100.0 + "U Duration: " + logItem.getInjectTime() + "min") - val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") - val logDateTime = logStartDate.time + diaconnG8Pump.lastBolusAmount = logItem.injectAmount / 100.0 + diaconnG8Pump.lastBolusTime = logDateTime - diaconnG8HistoryRecord.code = RecordTypes.RECORD_TYPE_ALARM - diaconnG8HistoryRecord.timestamp = logDateTime - diaconnG8HistoryRecord.value = logItem.amount / 100.0 - diaconnG8HistoryRecord.stringValue = rh.gs(R.string.diaconn_g8_logalarmblock, getReasonName(pumplogKind, logItem.reason)) - diaconnHistoryRecordDao.createOrUpdate(diaconnG8HistoryRecord) - status = "BLOCKALARM " + dateUtil.timeString(logDateTime) - } + //Diaconn History + diaconnG8HistoryRecord.code = RecordTypes.RECORD_TYPE_BOLUS + diaconnG8HistoryRecord.timestamp = logDateTime + diaconnG8HistoryRecord.value = logItem.injectAmount / 100.0 + diaconnG8HistoryRecord.duration = logItem.getInjectTime() + diaconnG8HistoryRecord.bolusType = "D" // bolus + diaconnG8HistoryRecord.stringValue = rh.gs(R.string.diaconn_g8_logdualnormalsuccess) + diaconnHistoryRecordDao.createOrUpdate(diaconnG8HistoryRecord) + if (!newRecord && detailedBolusInfo != null) { + // detailedInfo can be from another similar record. Reinsert + detailedBolusInfoStorage.add(detailedBolusInfo) + } + status = "DUALBOLUS" + dateUtil.timeString(logDateTime) + } - LOG_ALARM_SHORTAGE.LOG_KIND -> { // INSULIN SHORTAGE ALARM - val logItem = LOG_ALARM_SHORTAGE.parse(logDataToHexString) - aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") + LOG_INJECT_DUAL_SUCCESS.LOG_KIND -> { + val logItem = LOG_INJECT_DUAL_SUCCESS.parse(logDataToHexString) + aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") + val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") + val logDateTime = logStartDate.time - val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") - val logDateTime = logStartDate.time + diaconnG8HistoryRecord.code = RecordTypes.RECORD_TYPE_BOLUS + diaconnG8HistoryRecord.timestamp = logDateTime + diaconnG8HistoryRecord.value = logItem.injectSquareAmount / 100.0 + diaconnG8HistoryRecord.duration = logItem.getInjectTime() + diaconnG8HistoryRecord.bolusType = "D" + diaconnG8HistoryRecord.stringValue = rh.gs(R.string.diaconn_g8_logdualsquaresuccess) + diaconnHistoryRecordDao.createOrUpdate(diaconnG8HistoryRecord) + status = "DUALBOLUS SQUARESUCCESS " + dateUtil.timeString(logDateTime) + } - diaconnG8HistoryRecord.code = RecordTypes.RECORD_TYPE_ALARM - diaconnG8HistoryRecord.timestamp = logDateTime - diaconnG8HistoryRecord.value = logItem.remain.toDouble() - diaconnG8HistoryRecord.stringValue = rh.gs(R.string.diaconn_g8_loginsulinshorage) - diaconnHistoryRecordDao.createOrUpdate(diaconnG8HistoryRecord) - status = "SHORTAGEALARM " + dateUtil.timeString(logDateTime) - } + LOG_INJECT_DUAL_FAIL.LOG_KIND -> { + val logItem = LOG_INJECT_DUAL_FAIL.parse(logDataToHexString) + aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") + val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") + val logDateTime = logStartDate.time + val newRecord = pumpSync.syncStopExtendedBolusWithPumpId( + timestamp = logDateTime, + endPumpId = logDateTime, + pumpType = PumpType.DIACONN_G8, + pumpSerial = diaconnG8Pump.serialNo.toString()) + aapsLogger.debug(LTag.PUMPCOMM, (if (newRecord) "**NEW** " else "") + "EVENT EXTENDEDSTOP (" + pumplogKind + ") " + dateUtil.dateAndTimeString(logDateTime) + " (" + logDateTime + ")" + " Delivered: " + logItem.injectSquareAmount / 100.0 + "U RealDuration: " + logItem.getInjectTime() + "min") - LOG_RESET_SYS_V3.LOG_KIND -> { - val logItem = LOG_RESET_SYS_V3.parse(logDataToHexString) - aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") + diaconnG8HistoryRecord.code = RecordTypes.RECORD_TYPE_BOLUS + diaconnG8HistoryRecord.timestamp = logDateTime + diaconnG8HistoryRecord.value = logItem.injectNormAmount / 100.0 + logItem.injectSquareAmount / 100.0 + diaconnG8HistoryRecord.duration = logItem.getInjectTime() + diaconnG8HistoryRecord.bolusType = "D" + diaconnG8HistoryRecord.stringValue = getReasonName(pumplogKind, logItem.reason) + diaconnHistoryRecordDao.createOrUpdate(diaconnG8HistoryRecord) + status = "DUALBOLUS FAIL " + dateUtil.timeString(logDateTime) + } - val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") - val logDateTime = logStartDate.time + LOG_INJECTION_1HOUR_BASAL.LOG_KIND -> { + val logItem = LOG_INJECTION_1HOUR_BASAL.parse(logDataToHexString) + aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") + val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") + val logDateTime = logStartDate.time + diaconnG8HistoryRecord.code = RecordTypes.RECORD_TYPE_BASALHOUR + diaconnG8HistoryRecord.timestamp = logDateTime + diaconnG8HistoryRecord.value = logItem.beforeAmount / 100.0 + diaconnG8HistoryRecord.stringValue = "TB before: ${logItem.beforeAmount / 100.0} / TB after: ${logItem.afterAmount / 100.0}" + diaconnHistoryRecordDao.createOrUpdate(diaconnG8HistoryRecord) + status = "1HOUR BASAL " + dateUtil.dateAndTimeString(logDateTime) + } - diaconnG8HistoryRecord.code = RecordTypes.RECORD_TYPE_ALARM - diaconnG8HistoryRecord.timestamp = logDateTime - diaconnG8HistoryRecord.stringValue = getReasonName(pumplogKind, logItem.reason) - diaconnHistoryRecordDao.createOrUpdate(diaconnG8HistoryRecord) - if (logItem.reason == 3.toByte()) { - if (sp.getBoolean(R.string.key_diaconn_g8_logbatterychange, true)) { + LOG_SUSPEND_V2.LOG_KIND -> { + val logItem = LOG_SUSPEND_V2.parse(logDataToHexString) + aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") + val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") + val logDateTime = logStartDate.time + diaconnG8HistoryRecord.code = RecordTypes.RECORD_TYPE_SUSPEND + diaconnG8HistoryRecord.timestamp = logDateTime + diaconnG8HistoryRecord.stringValue = rh.gs(R.string.diaconn_g8_lgosuspend, logItem.getBasalPattern()) + diaconnHistoryRecordDao.createOrUpdate(diaconnG8HistoryRecord) + status = "SUSPEND " + dateUtil.timeString(logDateTime) + } + + LOG_SUSPEND_RELEASE_V2.LOG_KIND -> { + val logItem = LOG_SUSPEND_RELEASE_V2.parse(logDataToHexString) + aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") + val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") + val logDateTime = logStartDate.time + diaconnG8HistoryRecord.code = RecordTypes.RECORD_TYPE_SUSPEND + diaconnG8HistoryRecord.timestamp = logDateTime + diaconnG8HistoryRecord.stringValue = rh.gs(R.string.diaconn_g8_lgorelease, logItem.getBasalPattern()) + diaconnHistoryRecordDao.createOrUpdate(diaconnG8HistoryRecord) + status = "SUSPENDRELEASE " + dateUtil.timeString(logDateTime) + } + + LOG_CHANGE_INJECTOR_SUCCESS.LOG_KIND -> { + val logItem = LOG_CHANGE_INJECTOR_SUCCESS.parse(logDataToHexString) + aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") + val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") + val logDateTime = logStartDate.time + if (sp.getBoolean(R.string.key_diaconn_g8_loginsulinchange, true)) { val newRecord = pumpSync.insertTherapyEventIfNewWithTimestamp( timestamp = logDateTime, - type = DetailedBolusInfo.EventType.PUMP_BATTERY_CHANGE, + type = DetailedBolusInfo.EventType.INSULIN_CHANGE, pumpId = logDateTime, pumpType = PumpType.DIACONN_G8, pumpSerial = diaconnG8Pump.serialNo.toString() ) - aapsLogger.debug(LTag.PUMPCOMM, (if (newRecord) "**NEW** " else "") + "EVENT BATTERYCHANGE(" + pumplogKind + ") " + dateUtil.dateAndTimeString(logDateTime) + " (" + logDateTime + ")" + " remainAmount: " + logItem.batteryRemain.toInt() + "%") + aapsLogger.debug(LTag.PUMPCOMM, (if (newRecord) "**NEW** " else "") + "EVENT INSULINCHANGE(" + pumplogKind + ") " + dateUtil.dateAndTimeString(logDateTime) + " (" + logDateTime + ")" + " Amount: " + logItem.remainAmount / 100.0 + "U") + } + diaconnG8HistoryRecord.code = RecordTypes.RECORD_TYPE_REFILL + diaconnG8HistoryRecord.timestamp = logDateTime + diaconnG8HistoryRecord.value = logItem.remainAmount / 100.0 + diaconnG8HistoryRecord.stringValue = rh.gs(R.string.diaconn_g8_loginjectorprime, logItem.primeAmount / 100.0) + diaconnHistoryRecordDao.createOrUpdate(diaconnG8HistoryRecord) + status = "INSULINCHANGE " + dateUtil.timeString(logDateTime) + } + + LOG_CHANGE_TUBE_SUCCESS.LOG_KIND -> { + val logItem = LOG_CHANGE_TUBE_SUCCESS.parse(logDataToHexString) + aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") + val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") + val logDateTime = logStartDate.time + if (sp.getBoolean(R.string.key_diaconn_g8_logtubechange, true)) { + val newRecord = pumpSync.insertTherapyEventIfNewWithTimestamp( + timestamp = logDateTime, + type = DetailedBolusInfo.EventType.NOTE, + note = rh.gs(R.string.diaconn_g8_logtubeprime, logItem.primeAmount / 100.0), + pumpId = logDateTime, + pumpType = PumpType.DIACONN_G8, + pumpSerial = diaconnG8Pump.serialNo.toString() + ) + aapsLogger.debug(LTag.PUMPCOMM, (if (newRecord) "**NEW** " else "") + "EVENT TUBECHANGE(" + pumplogKind + ") " + dateUtil.dateAndTimeString(logDateTime) + " (" + logDateTime + ")" + " Amount: " + logItem.primeAmount / 100.0 + "U") + } + + + diaconnG8HistoryRecord.code = RecordTypes.RECORD_TYPE_REFILL + diaconnG8HistoryRecord.timestamp = logDateTime + diaconnG8HistoryRecord.value = logItem.remainAmount / 100.0 + diaconnG8HistoryRecord.stringValue = rh.gs(R.string.diaconn_g8_logtubeprime, logItem.primeAmount / 100.0) + diaconnHistoryRecordDao.createOrUpdate(diaconnG8HistoryRecord) + status = "TUBECHANGE " + dateUtil.timeString(logDateTime) + } + + LOG_INJECTION_1DAY.LOG_KIND -> { // Daily Bolus Log + val logItem = LOG_INJECTION_1DAY.parse(logDataToHexString) + aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") + val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") + val logDateTime = logStartDate.time + + diaconnG8HistoryRecord.code = RecordTypes.RECORD_TYPE_DAILY + diaconnG8HistoryRecord.timestamp = DateTime(logDateTime).withTimeAtStartOfDay().millis + diaconnG8HistoryRecord.dailyBolus = logItem.extAmount / 100.0 + logItem.mealAmount / 100.0 + + val recordDateStr = "" + diaconnG8HistoryRecord.timestamp + var recordMap: MutableMap = mutableMapOf("dummy" to 0.0) + + if (dailyMaxvalInfo.containsKey(recordDateStr)) { + recordMap = dailyMaxvalInfo[recordDateStr]!! + } else { + recordMap["bolus"] = 0.0 + recordMap["basal"] = 0.0 + dailyMaxvalInfo[recordDateStr] = recordMap + } + + if (diaconnG8HistoryRecord.dailyBolus > recordMap["bolus"]!!) { + recordMap["bolus"] = diaconnG8HistoryRecord.dailyBolus + } else { + diaconnG8HistoryRecord.dailyBolus = recordMap["bolus"]!! + } + + if (recordMap["basal"]!! > 0.0) { + diaconnG8HistoryRecord.dailyBasal = recordMap["basal"]!! + } + + diaconnHistoryRecordDao.createOrUpdate(diaconnG8HistoryRecord) + + //If it is a TDD, store it for stats also. + pumpSync.createOrUpdateTotalDailyDose( + timestamp = diaconnG8HistoryRecord.timestamp, + bolusAmount = diaconnG8HistoryRecord.dailyBolus, + basalAmount = diaconnG8HistoryRecord.dailyBasal, + totalAmount = 0.0, + pumpId = null, + pumpType = PumpType.DIACONN_G8, + diaconnG8Pump.serialNo.toString() + ) + + status = "DAILYBOLUS " + dateUtil.timeString(logDateTime) + } + + LOG_INJECTION_1DAY_BASAL.LOG_KIND -> { // Daily Basal Log + val logItem = LOG_INJECTION_1DAY_BASAL.parse(logDataToHexString) + aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") + val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") + val logDateTime = logStartDate.time + + diaconnG8HistoryRecord.code = RecordTypes.RECORD_TYPE_DAILY + diaconnG8HistoryRecord.timestamp = DateTime(logDateTime).withTimeAtStartOfDay().millis + diaconnG8HistoryRecord.dailyBasal = logItem.amount / 100.0 + + val recordDateStr = "" + diaconnG8HistoryRecord.timestamp + var recordMap: MutableMap = mutableMapOf("dummy" to 0.0) + + if (dailyMaxvalInfo.containsKey(recordDateStr)) { + recordMap = dailyMaxvalInfo[recordDateStr]!! + } else { + recordMap["bolus"] = 0.0 + recordMap["basal"] = 0.0 + dailyMaxvalInfo[recordDateStr] = recordMap + } + + if (diaconnG8HistoryRecord.dailyBasal > recordMap["basal"]!!) { + recordMap["basal"] = diaconnG8HistoryRecord.dailyBasal + } else { + diaconnG8HistoryRecord.dailyBasal = recordMap["basal"]!! + } + + if (recordMap["bolus"]!! > 0.0) { + diaconnG8HistoryRecord.dailyBolus = recordMap["bolus"]!! + } + + diaconnHistoryRecordDao.createOrUpdate(diaconnG8HistoryRecord) + + //If it is a TDD, store it for stats also. + // pumpSync.createOrUpdateTotalDailyDose( + // timestamp = diaconnG8HistoryRecord.timestamp, + // bolusAmount = diaconnG8HistoryRecord.dailyBolus, + // basalAmount = diaconnG8HistoryRecord.dailyBasal, + // totalAmount = 0.0, + // pumpId = null, + // pumpType = PumpType.DIACONN_G8, + // diaconnG8Pump.serialNo.toString() + // ) + + + status = "DAILYBASAL " + dateUtil.timeString(logDateTime) + } + + LOG_CHANGE_NEEDLE_SUCCESS.LOG_KIND -> { + val logItem = LOG_CHANGE_NEEDLE_SUCCESS.parse(logDataToHexString) + aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") + val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") + val logDateTime = logStartDate.time + if (sp.getBoolean(R.string.key_diaconn_g8_logneedlechange, true)) { + val newRecord = pumpSync.insertTherapyEventIfNewWithTimestamp( + timestamp = logDateTime, + type = DetailedBolusInfo.EventType.CANNULA_CHANGE, + pumpId = logDateTime, + pumpType = PumpType.DIACONN_G8, + pumpSerial = diaconnG8Pump.serialNo.toString() + ) + aapsLogger.debug(LTag.PUMPCOMM, (if (newRecord) "**NEW** " else "") + "EVENT NEEDLECHANGE(" + pumplogKind + ") " + dateUtil.dateAndTimeString(logDateTime) + " (" + logDateTime + ")" + " Amount: " + logItem.remainAmount / 100.0 + "U") + } + + diaconnG8HistoryRecord.code = RecordTypes.RECORD_TYPE_REFILL + diaconnG8HistoryRecord.timestamp = logDateTime + diaconnG8HistoryRecord.value = logItem.remainAmount / 100.0 + diaconnG8HistoryRecord.stringValue = rh.gs(R.string.diaconn_g8_logneedleprime, logItem.primeAmount / 100.0) + diaconnHistoryRecordDao.createOrUpdate(diaconnG8HistoryRecord) + status = "NEEDLECHANGE " + dateUtil.timeString(logDateTime) + } + + LOG_TB_START_V3.LOG_KIND -> { + val logItem = LOG_TB_START_V3.parse(logDataToHexString) + aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") + + val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") + val logDateTime = logStartDate.time + var absoluteRate = 0.0 + if (logItem.getTbInjectRateRatio() >= 50000) { + val tempBasalPercent = logItem.getTbInjectRateRatio() - 50000 + absoluteRate = pumpDesc.pumpType.determineCorrectBasalSize(diaconnG8Pump.baseAmount * (tempBasalPercent / 100.0)) + } + + if (logItem.getTbInjectRateRatio() in 1000..2500) { + absoluteRate = (logItem.getTbInjectRateRatio() - 1000) / 100.0 + } + + val temporaryBasalInfo = temporaryBasalStorage.findTemporaryBasal(logDateTime, absoluteRate) + val newRecord = pumpSync.syncTemporaryBasalWithPumpId( + timestamp = logDateTime, + rate = absoluteRate, + duration = T.mins((logItem.tbTime * 15).toLong()).msecs(), + isAbsolute = true, + type = temporaryBasalInfo?.type, + pumpId = logDateTime, + pumpType = PumpType.DIACONN_G8, + pumpSerial = diaconnG8Pump.serialNo.toString()) + aapsLogger.debug(LTag.PUMPCOMM, (if (newRecord) "**NEW** " else "") + "EVENT TEMPSTART (" + pumplogKind + ") " + dateUtil.dateAndTimeString(logDateTime) + " (" + logDateTime + ")" + " Ratio: " + absoluteRate + "U Duration: " + logItem.tbTime * 15 + "min") + + diaconnG8HistoryRecord.code = RecordTypes.RECORD_TYPE_TB + diaconnG8HistoryRecord.timestamp = logDateTime + diaconnG8HistoryRecord.duration = logItem.tbTime * 15 + diaconnG8HistoryRecord.value = absoluteRate + diaconnG8HistoryRecord.stringValue = rh.gs(R.string.diaconn_g8_logtempstart) + diaconnHistoryRecordDao.createOrUpdate(diaconnG8HistoryRecord) + status = "TEMPSTART " + dateUtil.timeString(logDateTime) + } + + LOG_TB_STOP_V3.LOG_KIND -> { + val logItem = LOG_TB_STOP_V3.parse(logDataToHexString) + aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") + val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") + val logDateTime = logStartDate.time + var absoluteRate = 0.0 + if (logItem.getTbInjectRateRatio() >= 50000) { + val tempBasalPercent = logItem.getTbInjectRateRatio() - 50000 + absoluteRate = diaconnG8Pump.baseAmount * (tempBasalPercent / 100.0) + } + if (logItem.getTbInjectRateRatio() in 1000..2500) { + absoluteRate = (logItem.getTbInjectRateRatio() - 1000) / 100.0 + } + + val newRecord = pumpSync.syncStopTemporaryBasalWithPumpId( + timestamp = logDateTime, + endPumpId = dateUtil.now(), + pumpType = PumpType.DIACONN_G8, + pumpSerial = diaconnG8Pump.serialNo.toString()) + aapsLogger.debug(LTag.PUMPCOMM, (if (newRecord) "**NEW** " else "") + "EVENT TEMPSTOP (" + pumplogKind + ") " + dateUtil.dateAndTimeString(logDateTime) + " (" + logDateTime + ")") + + + diaconnG8HistoryRecord.code = RecordTypes.RECORD_TYPE_TB + diaconnG8HistoryRecord.timestamp = logDateTime + diaconnG8HistoryRecord.value = absoluteRate + diaconnG8HistoryRecord.stringValue = getReasonName(pumplogKind, logItem.reason) + diaconnHistoryRecordDao.createOrUpdate(diaconnG8HistoryRecord) + status = "TEMPSTOP " + dateUtil.timeString(logDateTime) + } + + LOG_ALARM_BATTERY.LOG_KIND -> { // BATTERY SHORTAGE ALARM + val logItem = LOG_ALARM_BATTERY.parse(logDataToHexString) + aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") + val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") + val logDateTime = logStartDate.time + + diaconnG8HistoryRecord.code = RecordTypes.RECORD_TYPE_ALARM + diaconnG8HistoryRecord.timestamp = logDateTime + diaconnG8HistoryRecord.stringValue = rh.gs(R.string.diaconn_g8_logbatteryshorage) + diaconnHistoryRecordDao.createOrUpdate(diaconnG8HistoryRecord) + status = "BATTERYALARM " + dateUtil.timeString(logDateTime) + } + + LOG_ALARM_BLOCK.LOG_KIND -> { // INJECTION BLOCKED ALARM + val logItem = LOG_ALARM_BLOCK.parse(logDataToHexString) + aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") + + val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") + val logDateTime = logStartDate.time + + diaconnG8HistoryRecord.code = RecordTypes.RECORD_TYPE_ALARM + diaconnG8HistoryRecord.timestamp = logDateTime + diaconnG8HistoryRecord.value = logItem.amount / 100.0 + diaconnG8HistoryRecord.stringValue = rh.gs(R.string.diaconn_g8_logalarmblock, getReasonName(pumplogKind, logItem.reason)) + diaconnHistoryRecordDao.createOrUpdate(diaconnG8HistoryRecord) + status = "BLOCKALARM " + dateUtil.timeString(logDateTime) + } + + LOG_ALARM_SHORTAGE.LOG_KIND -> { // INSULIN SHORTAGE ALARM + val logItem = LOG_ALARM_SHORTAGE.parse(logDataToHexString) + aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") + + val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") + val logDateTime = logStartDate.time + + diaconnG8HistoryRecord.code = RecordTypes.RECORD_TYPE_ALARM + diaconnG8HistoryRecord.timestamp = logDateTime + diaconnG8HistoryRecord.value = logItem.remain.toDouble() + diaconnG8HistoryRecord.stringValue = rh.gs(R.string.diaconn_g8_loginsulinshorage) + diaconnHistoryRecordDao.createOrUpdate(diaconnG8HistoryRecord) + status = "SHORTAGEALARM " + dateUtil.timeString(logDateTime) + } + + LOG_RESET_SYS_V3.LOG_KIND -> { + val logItem = LOG_RESET_SYS_V3.parse(logDataToHexString) + aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") + + val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") + val logDateTime = logStartDate.time + + diaconnG8HistoryRecord.code = RecordTypes.RECORD_TYPE_ALARM + diaconnG8HistoryRecord.timestamp = logDateTime + diaconnG8HistoryRecord.stringValue = getReasonName(pumplogKind, logItem.reason) + diaconnHistoryRecordDao.createOrUpdate(diaconnG8HistoryRecord) + if (logItem.reason == 3.toByte()) { + if (sp.getBoolean(R.string.key_diaconn_g8_logbatterychange, true)) { + val newRecord = pumpSync.insertTherapyEventIfNewWithTimestamp( + timestamp = logDateTime, + type = DetailedBolusInfo.EventType.PUMP_BATTERY_CHANGE, + pumpId = logDateTime, + pumpType = PumpType.DIACONN_G8, + pumpSerial = diaconnG8Pump.serialNo.toString() + ) + aapsLogger.debug(LTag.PUMPCOMM, (if (newRecord) "**NEW** " else "") + "EVENT BATTERYCHANGE(" + pumplogKind + ") " + dateUtil.dateAndTimeString(logDateTime) + " (" + logDateTime + ")" + " remainAmount: " + logItem.batteryRemain.toInt() + "%") + } + } + status = "RESET " + dateUtil.timeString(logDateTime) + } + + else -> { + status = rh.gs(R.string.diaconn_g8_logsyncinprogress) + rxBus.send(EventPumpStatusChanged(status)) + continue + } + } + rxBus.send(EventPumpStatusChanged(rh.gs(R.string.processinghistory) + ": " + status)) + } + + } + + // 플랫폼 동기화이면, + if(diaconnG8Pump.isPlatformUploadStarted){ + aapsLogger.debug(LTag.PUMPCOMM, "Diaconn api upload start!!") + var appUid:String = sp.getString(R.string.key_diaconn_g8_appuid, "") + if (appUid.isEmpty()) { + appUid = UUID.randomUUID().toString() + sp.putString(R.string.key_diaconn_g8_appuid, appUid) + } + //api send + val retrofit = diaconnLogUploader.getRetrofitInstance() + val api = retrofit?.create(DiaconnApiService::class.java) + val pumpLogDto = PumpLogDto( + app_uid = appUid, + app_version = context.packageManager.getPackageInfo(context.packageName, 0).versionName, + pump_uid = diaconnG8Pump.pumpUid, + pump_version = diaconnG8Pump.pumpVersion, + incarnation_num = diaconnG8Pump.pumpIncarnationNum, + pumplog_info = pumpLogs, + ) + try { + api?.uploadPumpLogs(pumpLogDto)?.enqueue( + object : retrofit2.Callback { + override fun onResponse(call: Call, response: Response) { + if(response.body()?.ok == true) { + aapsLogger.debug(LTag.PUMPCOMM, "logs upload Success") + } + } + override fun onFailure(call: Call, t: Throwable) { + t.printStackTrace() } } - status = "RESET " + dateUtil.timeString(logDateTime) - } - - else -> { - status = rh.gs(R.string.diaconn_g8_logsyncinprogress) - rxBus.send(EventPumpStatusChanged(status)) - continue - } + ) + } catch(e: Exception) { + aapsLogger.error("Unhandled exception", e) } - rxBus.send(EventPumpStatusChanged(rh.gs(R.string.processinghistory) + ": " + status)) } } @@ -780,5 +846,4 @@ class BigLogInquireResponsePacket( else -> "" } } - -} +} \ No newline at end of file diff --git a/diaconn/src/main/java/info/nightscout/androidaps/diaconn/service/DiaconnG8Service.kt b/diaconn/src/main/java/info/nightscout/androidaps/diaconn/service/DiaconnG8Service.kt index fbd6ab0dbf..b553e3a212 100644 --- a/diaconn/src/main/java/info/nightscout/androidaps/diaconn/service/DiaconnG8Service.kt +++ b/diaconn/src/main/java/info/nightscout/androidaps/diaconn/service/DiaconnG8Service.kt @@ -14,6 +14,8 @@ import info.nightscout.androidaps.data.PumpEnactResult import info.nightscout.androidaps.diaconn.DiaconnG8Plugin import info.nightscout.androidaps.diaconn.DiaconnG8Pump import info.nightscout.androidaps.diaconn.R +import info.nightscout.androidaps.diaconn.api.DiaconnApiService +import info.nightscout.androidaps.diaconn.api.DiaconnLogUploader import info.nightscout.androidaps.diaconn.events.EventDiaconnG8NewStatus import info.nightscout.androidaps.diaconn.events.EventDiaconnG8PumpLogReset import info.nightscout.androidaps.diaconn.packet.* @@ -51,6 +53,7 @@ import java.util.concurrent.TimeUnit import javax.inject.Inject import kotlin.math.abs import kotlin.math.ceil +import kotlin.math.floor import kotlin.math.min class DiaconnG8Service : DaggerService() { @@ -74,6 +77,7 @@ class DiaconnG8Service : DaggerService() { @Inject lateinit var pumpSync: PumpSync @Inject lateinit var dateUtil: DateUtil @Inject lateinit var aapsSchedulers: AapsSchedulers + @Inject lateinit var diaconnLogUploader: DiaconnLogUploader private val disposable = CompositeDisposable() private val mBinder: IBinder = LocalBinder() @@ -137,11 +141,14 @@ class DiaconnG8Service : DaggerService() { } private fun sendMessage(message: DiaconnG8Packet) { - bleCommonService.sendMessage(message, 500) + bleCommonService.sendMessage(message, 2000) } fun readPumpStatus() { try { + + aapsLogger.error(LTag.PUMPCOMM, "패키지 명!!! : "+context.packageManager.getPackageInfo(context.packageName, 0).versionName) + val pump = activePlugin.activePump rxBus.send(EventPumpStatusChanged(rh.gs(R.string.gettingpumpsettings))) @@ -283,51 +290,89 @@ class DiaconnG8Service : DaggerService() { apsWrappingCount = sp.getInt(rh.gs(R.string.apsWrappingCount), 0) apsLastLogNum = sp.getInt(rh.gs(R.string.apslastLogNum), 0) - val apsLastNum = apsWrappingCount * 10000 + apsLastLogNum + aapsLogger.debug(LTag.PUMPCOMM, "apsWrappingCount : $apsWrappingCount, apsLastLogNum : $apsLastLogNum") + if ((pumpWrappingCount * 10000 + pumpLastNum) < apsLastLogNum) { pumpLogDefaultSetting() } - - val start: Int? // log sync startNo - val end: Int? // log sync endNo - if (((pumpWrappingCount * 10000 + pumpLastNum) - apsLastNum) > 10000) { - start = pumpLastNum - end = 10000 - } else if (pumpWrappingCount > apsWrappingCount && apsLastLogNum < 9999) { - start = apsLastLogNum + 1 - end = 10000 - } else if (pumpWrappingCount > apsWrappingCount && apsLastLogNum >= 9999) { - start = 0 - end = pumpLastNum - } else { - start = apsLastLogNum + 1 - end = pumpLastNum - } - // pump log loop size val pumpLogPageSize = 11 - val loopCount: Int = ceil(((end - start) / 11.0)).toInt() - + val (start, end, loopSize) = getLogLoopCount(apsLastLogNum, apsWrappingCount, pumpLastNum, pumpWrappingCount) // log sync start! - if (loopCount > 0) { - diaconnG8Pump.isProgressPumpLogSync = true - - for (i in 0 until loopCount) { + if (loopSize > 0) { + for (i in 0 until loopSize) { val startLogNo: Int = start + i * pumpLogPageSize val endLogNo: Int = startLogNo + min(end - startLogNo, pumpLogPageSize) val msg = BigLogInquirePacket(injector, startLogNo, endLogNo, 100) - sendMessage(msg) - } - diaconnG8Pump.historyDoneReceived = true - while (!diaconnG8Pump.historyDoneReceived && bleCommonService.isConnected) { - SystemClock.sleep(100) + sendMessage(msg, 500) } result.success(true) diaconnG8Pump.lastConnection = System.currentTimeMillis() } + + // upload pump log to Diaconn Cloud + if (sp.getBoolean(R.string.key_diaconn_g8_cloudsend, true)) { + SystemClock.sleep(1000) + try { + // getting last uploaded log number + val retrofit = diaconnLogUploader.getRetrofitInstance() + val api = retrofit?.create(DiaconnApiService::class.java) + val response = api?.getPumpLastNo(diaconnG8Pump.pumpUid, diaconnG8Pump.pumpVersion, diaconnG8Pump.pumpIncarnationNum)?.execute() + if(response?.body()?.ok == true) { + aapsLogger.debug(LTag.PUMPCOMM, "pumplog_no = ${response.body()?.info?.pumplog_no}") + val platformLastNo = response.body()?.info?.pumplog_no!! + val platformWrappingCount: Int = floor(platformLastNo / 10000.0).toInt() + val platformLogNo: Int = if (platformLastNo.toInt() == -1) { + 9999 + } else { + (platformLastNo % 10000).toInt() + } + aapsLogger.debug(LTag.PUMPCOMM, "platformLogNo: $platformLogNo, platformWrappingCount: $platformWrappingCount") + + // 페이지 사이즈로 처리할 때 루핑 횟수 계산 + val (platformStart, platformEnd, platformLoopSize) = getLogLoopCount(platformLogNo, platformWrappingCount, pumpLastNum, pumpWrappingCount) + if(platformLoopSize > 0) { + diaconnG8Pump.isPlatformUploadStarted = true + for (i in 0 until platformLoopSize) { + rxBus.send(EventPumpStatusChanged("클라우드동기화 진행 중 : $i / $platformLoopSize")) + val startLogNo: Int = platformStart + i * pumpLogPageSize + val endLogNo: Int = startLogNo + min(platformEnd - startLogNo, pumpLogPageSize) + val msg = BigLogInquirePacket(injector, startLogNo, endLogNo, 100) + sendMessage(msg, 500) + } + SystemClock.sleep(1000) + diaconnG8Pump.isPlatformUploadStarted = false + } + } + } catch (e:Exception) { + aapsLogger.error("Unhandled exception", e) + } + } return result } + private fun getLogLoopCount(lastLogNum: Int, wrappingCount: Int, pumpLastNum: Int, pumpWrappingCount: Int): Triple { + val start: Int// log sync start number + val end: Int // log sync end number1311 + + if (pumpWrappingCount * 10000 + pumpLastNum - lastLogNum > 10000) { + start = pumpLastNum + end = 10000 + } else if (pumpWrappingCount > wrappingCount && lastLogNum < 9999) { + start = (lastLogNum + 1) + end = 10000 + } else if (pumpWrappingCount > wrappingCount && lastLogNum >= 9999) { + start = 0 // 처음부터 시작 + end = pumpLastNum + } else { + start = (lastLogNum + 1) + end = pumpLastNum + } + val size = ceil((end - start) / 11.0).toInt() + // + return Triple(start, end, size) + } + fun setUserSettings(): PumpEnactResult { val result = PumpEnactResult(injector) @@ -344,7 +389,7 @@ class DiaconnG8Service : DaggerService() { if (diaconnG8Pump.otpNumber == 0) { aapsLogger.error(LTag.PUMPCOMM, "otp is not received yet") result.success(false) - result.comment("펌프와 연결 상태를 확인해주세요.") + result.comment("") return result } sendMessage(AppConfirmSettingPacket(injector, msg.msgType, diaconnG8Pump.otpNumber)) @@ -356,6 +401,13 @@ class DiaconnG8Service : DaggerService() { fun bolus(insulin: Double, carbs: Int, carbTime: Long, t: EventOverviewBolusProgress.Treatment): Boolean { if (!isConnected) return false if (BolusProgressDialog.stopPressed) return false + + // Only Carbs + if (carbs > 0 && insulin == 0.0) { + pumpSync.syncCarbsWithTimestamp(carbTime, carbs.toDouble(), null, PumpType.DIACONN_G8, diaconnG8Pump.serialNo.toString()) + return true + } + rxBus.send(EventPumpStatusChanged(rh.gs(R.string.startingbolus))) // bolus speed setting @@ -622,9 +674,9 @@ class DiaconnG8Service : DaggerService() { (basalList[23] * 100).toInt() ) // setting basal pattern 1,2,3,4 - sendMessage(requestReqPacket1) - sendMessage(requestReqPacket2) - sendMessage(requestReqPacket3) + sendMessage(requestReqPacket1, 500) + sendMessage(requestReqPacket2, 500) + sendMessage(requestReqPacket3, 500) sendMessage(requestReqPacket4) // otp process @@ -671,7 +723,7 @@ class DiaconnG8Service : DaggerService() { return false } - sendMessage(AppConfirmSettingPacket(injector, msgType, diaconnG8Pump.otpNumber), 2000) + sendMessage(AppConfirmSettingPacket(injector, msgType, diaconnG8Pump.otpNumber)) diaconnG8Pump.otpNumber = 0 return true } diff --git a/diaconn/src/main/res/values-ko-rKR/strings.xml b/diaconn/src/main/res/values-ko-rKR/strings.xml index 29cb87c694..f17e4a3c77 100644 --- a/diaconn/src/main/res/values-ko-rKR/strings.xml +++ b/diaconn/src/main/res/values-ko-rKR/strings.xml @@ -89,6 +89,8 @@ 바늘 교체 로그 동기화 시 케어포털 \"위치 교체\" 정보 자동 업로드 로그 동기화 시 케어포털 \"베터리 교체\" 정보 자동 업로드 + 펌프 로그정보를 \"디아콘 클라우드\"로 자동 업로드 + 디아콘 클라우드 전송 베터리 교체 로그 동기화 진행 중 인슐린 부족 경고 diff --git a/diaconn/src/main/res/values/strings.xml b/diaconn/src/main/res/values/strings.xml index ac1ad0868e..ea014d7ef3 100644 --- a/diaconn/src/main/res/values/strings.xml +++ b/diaconn/src/main/res/values/strings.xml @@ -10,6 +10,7 @@ diaconn_g8_logbatterychanges diaconn_g8_loginsulinchange diaconn_g8_logneedlechange + diaconn_g8_cloudsend Reset Pairing No Device available @@ -166,5 +167,7 @@ LGS status is OFF, OFF Command is declined. Tempbasal start is rejected when tempbasal is running Tempbasal stop is rejected when tempbasal is not running - + Send pump logs to the Diaconn Cloud. + Diaconn Cloud Sync + diaconn_g8_appuid diff --git a/diaconn/src/main/res/xml/pref_diaconn.xml b/diaconn/src/main/res/xml/pref_diaconn.xml index f81699e887..ec409e5636 100644 --- a/diaconn/src/main/res/xml/pref_diaconn.xml +++ b/diaconn/src/main/res/xml/pref_diaconn.xml @@ -45,6 +45,12 @@ android:summary="@string/diaconn_g8_logbatterychange_summary" android:title="@string/diaconn_g8_logbatterychange_title" /> + + \ No newline at end of file From 2d653c67ef9c32201fe0e28897af4904f9c423cb Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Fri, 29 Apr 2022 19:07:36 +0200 Subject: [PATCH 12/21] Better log TBR --- .../androidaps/plugins/pump/PumpSyncImplementation.kt | 2 +- .../transactions/SyncPumpTemporaryBasalTransaction.kt | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/core/src/main/java/info/nightscout/androidaps/plugins/pump/PumpSyncImplementation.kt b/core/src/main/java/info/nightscout/androidaps/plugins/pump/PumpSyncImplementation.kt index ddf0aeb680..8913f54436 100644 --- a/core/src/main/java/info/nightscout/androidaps/plugins/pump/PumpSyncImplementation.kt +++ b/core/src/main/java/info/nightscout/androidaps/plugins/pump/PumpSyncImplementation.kt @@ -271,7 +271,7 @@ class PumpSyncImplementation @Inject constructor( .blockingGet() .also { result -> result.inserted.forEach { aapsLogger.debug(LTag.DATABASE, "Inserted TemporaryBasal $it") } - result.updated.forEach { aapsLogger.debug(LTag.DATABASE, "Updated TemporaryBasal $it") } + result.updated.forEach { aapsLogger.debug(LTag.DATABASE, "Updated ${it.first} TemporaryBasal ${it.second}") } return result.inserted.size > 0 } } diff --git a/database/src/main/java/info/nightscout/androidaps/database/transactions/SyncPumpTemporaryBasalTransaction.kt b/database/src/main/java/info/nightscout/androidaps/database/transactions/SyncPumpTemporaryBasalTransaction.kt index bcd49fd43a..50b14f195d 100644 --- a/database/src/main/java/info/nightscout/androidaps/database/transactions/SyncPumpTemporaryBasalTransaction.kt +++ b/database/src/main/java/info/nightscout/androidaps/database/transactions/SyncPumpTemporaryBasalTransaction.kt @@ -29,7 +29,7 @@ class SyncPumpTemporaryBasalTransaction( existing.duration = temporaryBasal.duration existing.type = type ?: existing.type database.temporaryBasalDao.updateExistingEntry(existing) - result.updated.add(existing) + result.updated.add(Pair(Reason.EXISTING_ID, existing)) } } else { val running = database.temporaryBasalDao.getTemporaryBasalActiveAt(temporaryBasal.timestamp).blockingGet() @@ -37,7 +37,7 @@ class SyncPumpTemporaryBasalTransaction( running.end = temporaryBasal.timestamp running.interfaceIDs.endId = temporaryBasal.interfaceIDs.pumpId database.temporaryBasalDao.updateExistingEntry(running) - result.updated.add(running) + result.updated.add(Pair(Reason.ACTIVE, running)) } database.temporaryBasalDao.insertNewEntry(temporaryBasal) result.inserted.add(temporaryBasal) @@ -45,9 +45,12 @@ class SyncPumpTemporaryBasalTransaction( return result } + enum class Reason { + EXISTING_ID, ACTIVE + } class TransactionResult { val inserted = mutableListOf() - val updated = mutableListOf() + val updated = mutableListOf>() } } \ No newline at end of file From 219bdba21531c8f9d5df0ebaf5a7a3821c179d9a Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Mon, 2 May 2022 18:03:52 +0200 Subject: [PATCH 13/21] RS: Fix pumpcontrol --- app/build.gradle | 2 +- .../jniLibs/arm64-v8a/libBleEncryption.so | Bin 22776 -> 22776 bytes .../jniLibs/armeabi-v7a/libBleEncryption.so | Bin 26548 -> 26548 bytes .../src/main/jniLibs/x86/libBleEncryption.so | Bin 22432 -> 22432 bytes .../main/jniLibs/x86_64/libBleEncryption.so | Bin 23056 -> 23056 bytes 5 files changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index e94c3d61ef..cf3c8d61f8 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -109,7 +109,7 @@ android { defaultConfig { multiDexEnabled true versionCode 1500 - version "3.0.0.1" + version "3.0.0.2" buildConfigField "String", "VERSION", '"' + version + '"' buildConfigField "String", "BUILDVERSION", '"' + generateGitBuild() + '-' + generateDate() + '"' buildConfigField "String", "REMOTE", '"' + generateGitRemote() + '"' diff --git a/danars/src/main/jniLibs/arm64-v8a/libBleEncryption.so b/danars/src/main/jniLibs/arm64-v8a/libBleEncryption.so index baf90143284bf75740351f28416241fa26698748..a475f6b187392ee14a789d517d66e33079a0e240 100644 GIT binary patch delta 1096 zcmYk6e@q-j6vyZ7{f0|{0@W@OwrjYfI#!~I2#?*+)8Dk)A>Rr<)7+Y(^X4i0zZ&_@e#cvM*q^vejnl@z0C)t#$4b8)5VMaMYRdfOr7LN`^}L`ybEm&QmX) zJK>&g6<<8Hfl4%>1l%)>K-vv(&+f99)}6SdX~?I zG39v%Ca}oc1nt=A6=563y=|c2H02~(UODtb*jY2{fE{r;Yc-?Ur#*aV2-3NCJd?Q= z(EW_f`8WCW0P(SReR>`{{C(0Tnd3th=4n@jxhOJgshC+w*Iskn^^*Ckk6G9L=A)Sc zW=)Xh2gUM#6kQ$97AV$DpJFj+`Z1Hwtc<8w*?h(NiRLF6+nOnM`fv?HmF0M+pd5Es z#^F=rQssF;_{TDOAN>sAJ)<`KrvPc(RNVjuzEFJ>&SAD%gfnPWSC+nQl9?-Jj$esg zpejd%1;x^_zNQ#7Y_0hkI*p>*Qvf;amm6@gPK6s-E4RTc^>;xEQ?dvbjRjc(cpa_C zThL*=Szip2d5@2Bmwhg-$=nsD3ye)ggMOV3ZmQ>LzwyBnonCkBFFuN8TMioojhEd* z{xaTa+HPn&1^~v4+f5e%WSnfSkm9|sB`C-%b=}>42mAWp=<7-JY6lYg z@yq7N4}C&6Q%X_t4d-*jIpSU7^0%B90%I%RaULel%yF&|2h*JIAx;qch{GAqM~GXq zoKF$kZ;}u3Y0< z=kvtK3g;&AR*v%xbP9~&So9Hi3R6+3bAFcdD%yp$2g?h`gp+Q2oLUJ*jN&>~t4^wDZ-y(*}sMZ==R@ZH`QAROC5y9>j$+LWe^9k%wMb8RpgE-zI z(Uqqt@5e0VAc87}2C4qlw_aTrp=r(z^du3iS4Eh?ovH-KF|JC&_1kz%t$=57lB6Jh zMLB{?l)o?nt-t$>Z5>HJT*Zaw<)W+2wiRRlaW96tX{VnJp#R>9CRutUhEZG41oNF-5$v2J1jVU0$b zN~`hFV8Z6Kfe$SmKA1>C6f%6+R3kwWV_K`A#>xkEAzC5v88yxj@p^`}w&_jI{oOhD zod4W&Zmu~9<{)%#_a>^?{7A&3!x>B8eY_`@!ivm?6{(Pai7n9M|Lfbut=of38ZXW+ z@P`LR9&HVG^%(g=zW`-8?v$VaXPk=gv>ZPWi{TiC#cEJ7E=mEjB&DZ`DK-%@SvqUR z5pg4QV1}z4g1FfwK@LV;)sT;aG#^IGr34ZMshrCxup^FCZmm(_jx9MDg7LXFXWyIy z;vUAvJcF*dm$hHh9kSVbDA%0IV%GFRX6cS?=46&?%{Z8KXO?#*)0uUOd>&9O&&kTv ze!6N+IaG^5`OT!8S;>W}HR&cF#kVu|Ndar$a%xmg2#ooMiTdcagln!%>*FDei)m)wraIuebFCKYph!JD+o>#uM{7E`xsWL;X1~Z&*2i@RwTG!yi{a>7R+9~ z4{D4PtFr(&_O9`#<+$V2v4MtKw=ukCvkMxGjM9)OWWK;Ob%W9Q*?xeNhF3icx$BYH0psQmcg09`^h*`_}^w=cwZh4Y8R;8o6j zz*xx`=lMjFSVl~Yb6!KdN8C-kl;pgFSTo6aKXLaI=@1X!BORjlH|bD+FB9{L-495I zST;>M0#jJY4CgU&{QQ*jABn+doDUIwuQI*g>lyT1kOAs;tP4(H1PVkwbQl ztQmVlvbgpx)rTiENqkK{9VbIFbR%dobmB)e2eCqv0y%H$EzA+wIA-n}7-D@2H diff --git a/danars/src/main/jniLibs/armeabi-v7a/libBleEncryption.so b/danars/src/main/jniLibs/armeabi-v7a/libBleEncryption.so index f5daf1449d693d9be3843e36ac13b3e9318e9e98..9dc6e23990e7f4c2dd6dc4dda877901f4a7641bc 100644 GIT binary patch delta 2975 zcmYk8dsI}%9mjvOFLsd?K|y@(!m_e}C=?Ztx4^{}Ef9%t<&=vSFSq;&h&p=}B!vbgpA z@Hg-mr5c~gMMM&}RfVjL{B5Zww>S+ZxAlUIXfvWrZv7VYmoT;o-Ndm1(S99CGzoT5 zFGH4F=|oz0d?IR!;R8|)3*>$>jsB5=$n5rAL97+A32yx=>S_*#pBKo&bN7T0O~A~= ztalJ$jU`HP>ngOR7`4#d(}2+<^h9Ue`h8^n2ARiJY#;1J{BJT%?jKW#>fKRaqSuwg zpL(4_uL1O$f6E#jjP zKQ`mt$m;Vm|4cYk8FoRjeP-1=Hl@YGsyO7ocx$@cB0gmnWsRctsjH)33W=H822c1( z>qy6}KEhOiy;qYdvB+yAh-mL8gGcMgL)oZy1DdpLZQ#rz`iH$)zn9Ib>7$laMxt3T z5g1%T)B{d|dT<#0m}xH$Q81MRv1c-gF57n)K4uKcc{ki3Rx8;34H~b*`g}o&_gRx^=9+As7 z@|6*xp-ybyd4cF8I0|+GGbjUVKn{>-pSqUthKLw8kAELAk%jSrh>PqJ|HGVRVy?M2 zt6u1$mYv9C2CG3K2nN1D1|;A*w(v9X1vm^+fEEO}TYt0)@E9+cNGG@q{sKM)7Vsu0 z0|JNy82nKFIZGmB0Ww0JP$RSPLF6uy2WtWZtIU6AO?M?|eNtWN(U_ z&%D3tDV~qgVz6M~m;A}XTJ{#_@yl5ue;BW4d0d?kIxf9OTBjA%fy1taJT*bbf_O;bc@m6h(6k_)UsNYNmjRKs-#73Ywjd(XY;VD zteaXG&c;^WkQh3*xZAHI%_$?fLDj~>RACMY3K{%;m|^>^zUd^ETg*tYf>mH91Oi zs*BAhLszRrduNa)C`Kpf@qB_y`S;0zET2nLqO$Wx^RMa}cCG31Lgp|1h&<;K{Rd~< zHOT%zDfkHFq|a3$DTjK%TIksjB#@4rvO$T~@zBf@Q$v`Om!yVFIqb-GlBfE# zR;X|?Htec)XaysBxATuv<01|?B=BTAN20L64oQunNF4Wq?(9nOKSw)$%!~N(GK98{tj{gFyoXE=XZ8Mv0?NVnxy!d|3?X!6rx21cT0!`zr ztYO#{#MNn2rl0BzhJUBYw~+}n&OG2%wwkn68~@vuI|wRu;KlLB%JFU>qSbIWMNRz&=|?}|6h0YuD2L_Oq*-rRrj zF-^c|$aI8gaioreW8W;?`(AjTAs6tr#X7anchA9eOb~|?I5SR>e$t!HXBbN-EBm%K zO5a=Gs9q8&qzc~-DlOa7hg>p#+!&}|-Frrln+YX<(Ih*k6vi7T3ER@urce{JV&>LT zWcxS&r%@-3?R~+nT9U@tQNAoID*AknIMAm(L$1$zs6~P#`8cagz=E>=tivyiif9$& zfN?~5uz$!Kv*M&ekICMf6)mk2uhJacZRX5p&+Jk8*>kTa(L!{)kM=uo2egA*pcQ-r zu7RuIGPnp@Kr?6p=fOE}1~h<^;3H5Ej)OW+N}_im9043y!9lPeh=cC|zXflDUEnvM z3hV%HfNlJE_Oz8J>AQXfEy(j(*|HrrG#4{Uj%F#vr>+(nyesM^9Wu!{^*1Ofm&c{i~5G zo6S}od{u0v)v;)uuphIla&JgArR8fY=9HJNGi`e9)r!rV<`fl~Uo&ssV1BiteAC8? zGJAX8pOpOiOJ0da+}&AV8Tb__0_(u*UV6Es~+6k z0N>*VxK3^LOsTrG!Ol)GbrW58=7m|$U~0$l^sIzSfVvvkK=uv&v2K5ScyG`9yzlS! zhVHwp`z~v(lC7;ITHCg@Mc!XRG>qNNlSaQDPiX6at*_uVY@Np2$rc--7b(SfW<3 z{Zov$@p3`oSD8m75qssx+QAPBiqbU(bcwy)Qlj;UsukP!(JshD8`GR?sZhSJB??5p zvt5TQSMrIJVth9Cq~Ko(3MS`4QbqKDhNxZ~>qYEt#Ab=@Ti91m6wx|fDUB~}h#~UD zl{vExAYykqkzQ=eQI=xWP2x-qRu76MIxn{Wj?9;kdEt&7LBEMVkSa<~>4{E?QGdX! z3)$byI*VD4F)L6UCyZZ5RaG3q{grxCUAbZU^L z7k3a3bpBd4U_2MA;Bw~M(-^Phy)wniiJ0Xn_G+@mCv53yJ6V5VBGRoUS_Hlzg^yPeU54}EU1T{Fq=j@!vD^U1gX!^P2a*gW1!O*pnxF{SaWn2HKNvuaPif9-RJ zd32%Yl-P6ezdgSad%AdGd<)ZA{u*Dv*jXNtSjzVC9f`5AZdmY7MxtwQ5jvq64#4YB z3limX$69_pF)c_xQZZE*-dx`{El|bOt^_|Uzk+)uU1xXr-J}r7g-&j%Zz55cyv~*N6DzrsWf`2W*tUenWbh)d~a4R^W@g7Y-Z=PSt|C3 zE3$LghkRppnn&k|Guj8y@9V;8zaJ?B9RS9l=4B@S4|CC;}Z1l;-R{<$d^Zys8@~5I%-Ewgy43k5Zw(XidjVT zWia2a(}XS^3I6}I39^0-CN1T^(S@*deoL38aGy`(jWqt)(j*ep00iqjQt_!`o4& zIBVRYH(|-#+yK_h%X4Gc4Bwj@6ME8CJVEYWT}tDQ3C3m}M{G)?3Gq*OPi{tHr%i&9 z;)%Hw+$Ec&U9;J_(#N)kQ}}>8^kEXKkGW@vd?tEk9eG@x7ZX*5`M8_5Sx23XtV4-J zp9SED3grWwqE}I$^5@(0!dN{&oR=DzFdv?T@Nd~<82liC=oJL+hC}|`+Yro(_+(zF zaA&BVdl^C^l5EV#+9`ICm6WPlkIutkQmd!=9@g(3%Hp|(5Q)UbziZf}un$QmOQ`st z9SyS%`;gK|Dw>F!Cgr^zX%f*&%YfmWMDQOE=Le13BK*gd#u-Q8_>5!Gc#AJyZydbI z-b8ZL1GraVMMS^d8Syv!jN>!=V)VKr;))kO4Af8XHw#-L_s>ThKt!|sj1N9Z{G9n9 zq6zh<-aM)3mx`$Q5Dh{SaO#asa$KvZbTFL@yDhJ_9g$fNiF1$ zy=qadGBEZIuU?&!dTrF1^!KAPj+>)o4MT7}j)*3x#}@k4M2F?LHKa0Cv+ zA$SX#U@z=}o$w?0AvC}a_ mM%s$X7N~|-U^8rl_3#o@LIsq=i%<&1@B(bZ#=nhn zH55Ss*B8c`Hl`M_Yynn9DY7HQ2w z#3|b_FE1p8g9#?aY{^haAYfi4`(ha2oFjFNz!c`tIw#g-Q!-FNk>lycO#E=q@4j>I z`QLL+PG0XB=sg38pdqtfh|J+ojVyZ=x=T=6H~ zfne$2S|Kii5X*!~>=HthID{BwX1`x%CNM5ppcmhhETv+#5ZfQ$4Ktss7b0d@xO+t> z#2}7K9+1CTKb^Y}(LJx;qq9I7kFy=qhIHQ@H5wP2;xoGYH({(jR~L_&9yt>Q>~*G zpvdzLxAP6Ln1FLJfgC)t#+Cbhw%MQjiX&?}AfT}H-~_(!u|pIuu-$;ac&xAm zO|q3MtC6izDun@grIbnGKDna&A-82B+sei#jXlyjlfie;@UFf~Cyg!D>)CDNwTVY8 ziC@Wf_yB*GErwH5MBDMIoR3a#L1~&(&kops3exWR&=Ph{XNMD8yjDnI58G$)q}KtH zIL@{i!Dp8;vsmF<1!wUUpWR@5Ky-0lIN>w1ug_=aVn%$`o!ys+t`pIgA)@|=MDiCz zsVs+y?lEIu5*7Z#=OaW7%(}}&&CD3Ho0*&>I?FtIi|7WkpUW1HSTjvj!mQ(xUSuYj zVP=qvN-*y+laHu^KA$E^vm-V`w3HLE&2kX4;4aZN=F$875HqOttv{8c9eT-<3&-%Z h-?C(@hv$^n4jlJe38C0U^?aU2GBjd4=d>B-YEAUtyzkzz*Ce9a%$eA=bUyTgPpG+x)A5}|XYJ}Z8lgAaIG51{-2VBOZJa(Dgmif-w&@&=^d)(M= zGuBSgOI&)j%c@`1)girVP!HbM8~bD5{6RG9x~|3y)n*7|#}W27f;OWurl-5~2A8!r z;Igs1FxIjvLJ?h!8fx6Ais~c!$5vf(J{G`Mmw#HzC9X+`p#J+OpRU>&FNq~qtADth zG#~G{YQc{Sau30%`82mkLXVl2zX;&4xyExB;20Kp&u64PCECxr2Z_28>&Ha*nb)2WiMN~|B62cUa!E^={meRM zqIX-F>0Dg+EzO`PPlhf zd7j_%=Y5~|dtWkemJQ(VSmJ=FlAnPigBSE?Y8B-^4n5CGnPJ7}ACF6}SX=tVsYKUU zq`%w#Rxu4S(@P;WeIo2NR#qrs8G?c#z~ibU)$8#mc{5pkIw*|>3Tb1?eRUzN!_6&S^1jg zv#aRMY-<{osZ>JTrw__~pMCIogN+ZpYWo&r?L+r+)(Ol)Yx6uTM2GWQ_V*SqaNZ3C zrIx{jWsF9GeFs2RQ#P@DEaXxasqSCT&VS zx5chfm;HC_&qH}D_b~65g?vs*ulUC^yM0>j)ims4R5J?b(?WP3LYND$af`?xou{k$ z1^Zus{!oIiK9v(}hFy&Iwn&oHCkj~G8lGWMpO^r76_?jAvB&qs|A)V=guCQ$O$tD+ zZ{-oZege11_4VB3;^KoU#ZykqX5{v4FHaNw8808M68fr8wRlYCZq2sRxT9o$7c^`D z-$2Zx8XA_dT+w`rrh|4-Q^y@4#TLoxDyY0uu`Ti^lh0LMuN@YoF)R$^%7Q>mJTL>s zD0LTDtyc<^T!_2|G2Tahre>R_7{OROoW!^fFP;dj6fn+ej}tf55iVV}&7Yp&p+7NoBON@I6*ao}yE1 zC(RV4v2Ap>2p0v_xy-_hop!mNW{2pqYdPCae|K$uVi6V{&<*d_;N)Hsn>LOIbR*W} zp!04ZY)uB?yNyd?0cQtyFA%mTqy8U3!Nnbj+!Fg!MybCzoek2N;%v5ut`u)&sZ>;w zDa@~+P>F?oK;0!Fl>QUs@6vxtGFb&JDa}t^wgQa|j`xhRNN_y1=Pu68Q}U)fPFqS( zu@=&}*VBvc6#Bk|ka9dH*h!l3q^;bE%TPDmE<|o(`Hk6Jap7~~i`mB) zqjvk*%|KY~#)SQ3D6=vXdCHz)zo(y3Ufc(~wwhV^h>#p2b;=gLJ-p z8QV>NDR00fVE3AsnpS)3*%1BGo5o(IVQ;;T=f3p4EPR$pKV8+&>S=k! zDq+q-->yg%{$`=>iYNKzRhU^b#VR&uXf5&vG~!_3dTrV`p&KzJ2Xa3SoA~zJ$e`xR zr`b>FLS+WqM>CaH)<_zEDJvkKe{Jd&eviv>b%^t7o%5ApFF&2Xp%eZPdy4M(&8(2p zsv0XkO6MzR#0|j9)J>qRF0J4BX&~(40dFZZ?|Pi}YW-|Fpyc}%{kE#Xv;j_W2i=H4 z8_2y8HfZ}cz8y~SkhQv$>FJqjv$=KG_O|?8t?r|*51+HwX?mcZCB?D zZ98aBb&YfMT}fJurp6xw1Q*^nVdrNx{&4$Rysy(-^-|+$u-Z5U?2NGqpyPL*dt?&O}KfTs%o;? zF>0;h6N=P0K%B$4jA9tIWUO@{dUdU1zxo|a5qG5Fq9m=w`LP0WOV*IBH0Ivg^frmcB3shf|q?5pL-~{mK4Fm$M|3ETK{NxJy{%4(`+)!!agI`^(p;v_e0&1sPQUCw| delta 2387 zcmZ8j4^Wfm8PD^Pw82Re925eP0478VHiRaCkO+Y<_^kz-Rx46l+n(%7JKNb!t7~OU z11=%5qdxV9+x3oimfbwN)#2Ejcc?ecisd@C^;U1C6+3npy51($UFBBx?e~7)P*^T` zf6t%a^E~hSyx;qN={rSz`1Yqp6odAOyz=_l^d0MU9`drm}N}HEE-^&@o751`;Bg!p;%|M>tHY=w_v`_=Z))akrLf}{tg|#4G>-{7nnS> zlOMwPy`lZ4!Mv4zhryu4!{l=(zc!<)O5F4Y=eo-2o4mo5OB?xF*9WHOYvATw zx2JG9mK6>9pp&J07p&1>iEvuF(ljNnhO^xvzFg$Y9jZ1Mqy^G(D7Q$jahCfeO%IK^ zHxl&?tt{RkQHXbxtff6XSkm74rhgH+9|~$^!-RF5OY9z35}Ai!OlEzesx#Y`*mnuL zdR0}U!N;^D-D{Wl+l1eOxZ9~(g=zU>lR0yPu%&*&M@oN1pAS8-<|PW;eV>?<-YoGj zBoAKEnx&SDd6}jFJ!T01gb)+Ld%~g+q)8@ES?6KsOA_Sh30{U>Np!cXs@kJSSlhEA z!?GSF1@bl_-%m<3_>KP$|L|k2{w6KlZwOn|5eR*Ga2V;PetbuXxIR;ftbg3XjsNdU3*;DEYRLDJtv5eW|nE{ zHmIUgGuyOhW`j^I-KDS~jc;+FP!Sn%8bS4*HT_7wR15dT$9m&Ch%7tM3QLGHl*I`+YH^gsB?3);O=`h*0$N zG|@)>rT1m(;g#v%0e{im zqUj6nfH_20WIf**{$u@S`!0|c2$qoyvt0aXEW_OM$eCDXE6WX)wBvDzK9ClWj!c0q}?I?e)*k9V}~h#ViQ~tcF+We!tR13E~5iWxE;5+ z$H3jf@vuY6p5o)-BAmBBgxx4Lhwy&3HNr8?)s1=BgVsj3Wc?c-Xe^@N@Xs0@w3^2n zJ#frntm5MJ9#~p2wsU;Fr&GRwDdGa$^p2`F;dHbC+km@(`+!}*SAnkrPXJE=M}eCz zs_L}BF;z9r!;c1)0^88uCZIg7syl=ZJOn&8iCCcTBh&+CV7WKu)mBxWQdRqZkN|Hk z8EC}os10}w*adX{6*6!dI1W687yS*O{C6b5#7Ac#15bT{Ndw=X10Oi_iqdK10VOnK sZ5~L)zmSugJ?T$2hz=VJ3s}pun?0!m|FaHoaZ6?D?Y~LSwER^1FYoU)Z~y=R From 4be6931e65e3985b292b0404996396f6c24027fa Mon Sep 17 00:00:00 2001 From: Philoul Date: Mon, 2 May 2022 21:12:48 +0200 Subject: [PATCH 14/21] Add Peak in Insulin interface --- .../androidaps/plugins/insulin/InsulinOrefBasePlugin.kt | 2 +- .../main/java/info/nightscout/androidaps/interfaces/Insulin.kt | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/insulin/InsulinOrefBasePlugin.kt b/app/src/main/java/info/nightscout/androidaps/plugins/insulin/InsulinOrefBasePlugin.kt index a0d3652240..8300c9147a 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/insulin/InsulinOrefBasePlugin.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/insulin/InsulinOrefBasePlugin.kt @@ -101,7 +101,7 @@ abstract class InsulinOrefBasePlugin( return comment } - abstract val peak: Int + override abstract val peak: Int abstract fun commentStandardText(): String companion object { diff --git a/core/src/main/java/info/nightscout/androidaps/interfaces/Insulin.kt b/core/src/main/java/info/nightscout/androidaps/interfaces/Insulin.kt index ab3a8296e3..d483553ba1 100644 --- a/core/src/main/java/info/nightscout/androidaps/interfaces/Insulin.kt +++ b/core/src/main/java/info/nightscout/androidaps/interfaces/Insulin.kt @@ -27,6 +27,7 @@ interface Insulin : ConfigExportImport { val friendlyName: String val comment: String val dia: Double + val peak: Int fun iobCalcForTreatment(bolus: Bolus, time: Long, dia: Double): Iob From c57ec0a48014d40072972c540716f41574a36753 Mon Sep 17 00:00:00 2001 From: Philoul Date: Mon, 2 May 2022 21:34:17 +0200 Subject: [PATCH 15/21] Add Autotune strings and keys --- app/src/main/res/values/strings.xml | 1 - core/src/main/res/values/strings.xml | 61 ++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+), 1 deletion(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 6aa775cad1..2f37a9e9a6 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -561,7 +561,6 @@ En Pr Fat - ]]> Command is executed right now Missed BG readings raise_urgent_alarms_as_android_notification diff --git a/core/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml index 39ff22b27b..4c4a0f2322 100644 --- a/core/src/main/res/values/strings.xml +++ b/core/src/main/res/values/strings.xml @@ -65,6 +65,14 @@ pregnant app_expiration use_dark_mode + insulin_oref_peak + autotune_auto + categorize_uam_as_basal + autotune_default_tune_days + autotune_circadian_ic_isf + autotune_additional_log + key_autotune_plugin + key_autotune_last_run Refresh @@ -107,6 +115,7 @@ Carbs Invalid profile !!! NO PROFILE SET + ]]> Date Units DIA @@ -564,6 +573,58 @@ file user + + Autotune + Help for potential adjustments of profile (ISF, carb ratio, and basal rates) + AT + Autotune settings + Automation Switch Profile + If enabled, Autotune will automatically update and switch to input profile after calculation from an automation rule. + Categorize UAM as basal + Enable only if you have reliably entered all carbs eaten, with this option sudden rises seen by Autotune will be used to recommend changes to the basal rate. + Number of days of data + Apply average result in circadian IC/ISF + Autotune will not tune circadian variations, this option only apply the average tuning of IC and ISF to your circadian input profile + Include more log information for debugging + Switch on only if requested by dev to send more log information to help debugging Autotune plugin + Default number of days of data to be processed by Autotune (up to xx) + Tuned + Profile : + Tune days : + Last run : + Warning : + Select profile to tune + Autotune works with only one IC value, your profile has %1$d values. Average value is %2$.2fg/U + Autotune works with only one ISF value, your profile has %1$d values. Average value is %2$.1f%3$s/U + Error in input data, try to reduce the number of days + Autotune calculation started, please be patient + Check the results carefully before using it! + Partial result day %1$d / %2$d tuned + Result: %1$s + Param + % + Missing + Autotune profile %1$s + Run Autotune + Check input profile + Compare profiles + Copy to local profile + Update input profile + Revert input profile + Create a new local profile from this Autotune Profile? + Update %1$s profile with Autotune Profile? + Revert %1$s profile with Input Profile? + Profile invalid + |Param|Profile|Tuned|%/Miss.\n + +------------------------------------------\n + | %1$4.4s |\t%2$3.3f |\t%3$3.3f |\n + | %1$4.4s |\t%2$3.3f |\t%3$3.3f |\n + |\t%1$02.0f\t| %2$3.3f |%3$3.3f\t| %5$.0f%% / %4$d\n + |\t∑\t|\t%1$3.1f |\t%2$3.1f |\n + Autotune runned without profile switch + Autotune runned and profile automatically switched + Error during last Autotune run + %1$d day %1$d days From 3b6985af247c3fdb0addab53615df6aa68be25fc Mon Sep 17 00:00:00 2001 From: Philoul Date: Mon, 2 May 2022 21:40:11 +0200 Subject: [PATCH 16/21] Add Autotune strings, keys and icon --- app/src/main/res/drawable/ic_clone_48.xml | 4 ++-- core/src/main/res/drawable/ic_autotune.xml | 12 ++++++++++++ icons/autotune.svg | 20 ++++++++++++++++++++ icons/clone_48.svg | 9 +++++++++ 4 files changed, 43 insertions(+), 2 deletions(-) create mode 100644 core/src/main/res/drawable/ic_autotune.xml create mode 100644 icons/autotune.svg create mode 100644 icons/clone_48.svg diff --git a/app/src/main/res/drawable/ic_clone_48.xml b/app/src/main/res/drawable/ic_clone_48.xml index 5156d7525e..33c95d193f 100644 --- a/app/src/main/res/drawable/ic_clone_48.xml +++ b/app/src/main/res/drawable/ic_clone_48.xml @@ -4,6 +4,6 @@ android:viewportWidth="24" android:viewportHeight="24"> + android:pathData="M20.156,12.76V4.35l-2.588,2.588c-3.811,-3.012 -8.811,-3.261 -11.692,-0.38C2.715,9.719 3.307,15.437 7.2,19.33c0.377,0.377 0.774,0.713 1.181,1.027c-0.483,-0.742 -0.91,-1.573 -1.245,-2.483c-1.569,-4.257 -0.64,-8.518 2.075,-9.519c1.648,-0.607 3.573,0.134 5.184,1.757l-2.648,2.648H20.156z" + android:fillColor="#638CE1"/> diff --git a/core/src/main/res/drawable/ic_autotune.xml b/core/src/main/res/drawable/ic_autotune.xml new file mode 100644 index 0000000000..99e966ae4b --- /dev/null +++ b/core/src/main/res/drawable/ic_autotune.xml @@ -0,0 +1,12 @@ + + + + diff --git a/icons/autotune.svg b/icons/autotune.svg new file mode 100644 index 0000000000..2ecf74c309 --- /dev/null +++ b/icons/autotune.svg @@ -0,0 +1,20 @@ + + + + + + + diff --git a/icons/clone_48.svg b/icons/clone_48.svg new file mode 100644 index 0000000000..8d9b5d62f4 --- /dev/null +++ b/icons/clone_48.svg @@ -0,0 +1,9 @@ + + + + + + From 8c23f4f6cff9be646914171234b395b42b1e8a46 Mon Sep 17 00:00:00 2001 From: Johannes Mockenhaupt Date: Tue, 3 May 2022 10:41:46 +0200 Subject: [PATCH 17/21] Fix #1619 by removing unnecessarily chatty ruffy logging. --- .../plugins/pump/combo/ruffyscripter/RuffyScripter.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/combo/src/main/java/info/nightscout/androidaps/plugins/pump/combo/ruffyscripter/RuffyScripter.java b/combo/src/main/java/info/nightscout/androidaps/plugins/pump/combo/ruffyscripter/RuffyScripter.java index f2fcf05bbf..565cf66f70 100644 --- a/combo/src/main/java/info/nightscout/androidaps/plugins/pump/combo/ruffyscripter/RuffyScripter.java +++ b/combo/src/main/java/info/nightscout/androidaps/plugins/pump/combo/ruffyscripter/RuffyScripter.java @@ -70,7 +70,14 @@ public class RuffyScripter implements RuffyCommands { private final IRTHandler mHandler = new IRTHandler.Stub() { @Override public void log(String message) { - aapsLogger.debug(LTag.PUMP, "Ruffy says: " + message); + // Ruffy is very verbose at this level, but the data provided isn't too helpful for + // debugging. For debugging Ruffy, it makes more sense to check logcat, where other + // possibly relevant (BT) events are also logged. + // Due to the amount of calls, logging this causes timing issues as reported in + // https://github.com/nightscout/AndroidAPS/issues/1619#issuecomment-1115811485 + // This was caused by changing the log level from trace to debug so these messages + // where logged by default. + //aapsLogger.debug(LTag.PUMP, "Ruffy says: " + message); } @Override From 527952276fbef0314bf907bbb4112baf388814f2 Mon Sep 17 00:00:00 2001 From: miyeongkim Date: Wed, 4 May 2022 13:23:09 +0900 Subject: [PATCH 18/21] add columns to DiaconnHistoryRecord table --- .../1.json | 25 +++++- .../diaconn/api/DiaconnLogUploader.kt | 4 +- .../diaconn/database/DiaconnHistoryRecord.kt | 5 +- .../database/DiaconnHistoryRecordDao.kt | 3 + .../packet/BigLogInquireResponsePacket.kt | 86 +++++++++++++++++-- .../diaconn/service/DiaconnG8Service.kt | 80 +++++++---------- 6 files changed, 141 insertions(+), 62 deletions(-) diff --git a/diaconn/schemas/info.nightscout.androidaps.diaconn.database.DiaconnHistoryDatabase/1.json b/diaconn/schemas/info.nightscout.androidaps.diaconn.database.DiaconnHistoryDatabase/1.json index b6e405a524..e1745bce91 100644 --- a/diaconn/schemas/info.nightscout.androidaps.diaconn.database.DiaconnHistoryDatabase/1.json +++ b/diaconn/schemas/info.nightscout.androidaps.diaconn.database.DiaconnHistoryDatabase/1.json @@ -2,11 +2,11 @@ "formatVersion": 1, "database": { "version": 1, - "identityHash": "698b023da2f9efdc0351236c43eb20b6", + "identityHash": "d604d25c3edbdf18cc5a39121cf5a779", "entities": [ { "tableName": "diaconnHistory", - "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`timestamp` INTEGER NOT NULL, `code` INTEGER NOT NULL, `value` REAL NOT NULL, `bolusType` TEXT NOT NULL, `stringValue` TEXT NOT NULL, `duration` INTEGER NOT NULL, `dailyBasal` REAL NOT NULL, `dailyBolus` REAL NOT NULL, `alarm` TEXT NOT NULL, PRIMARY KEY(`timestamp`))", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`timestamp` INTEGER NOT NULL, `code` INTEGER NOT NULL, `value` REAL NOT NULL, `bolusType` TEXT NOT NULL, `stringValue` TEXT NOT NULL, `duration` INTEGER NOT NULL, `dailyBasal` REAL NOT NULL, `dailyBolus` REAL NOT NULL, `alarm` TEXT NOT NULL, `lognum` INTEGER NOT NULL, `wrappingCount` INTEGER NOT NULL, `pumpUid` TEXT NOT NULL, PRIMARY KEY(`timestamp`))", "fields": [ { "fieldPath": "timestamp", @@ -61,6 +61,24 @@ "columnName": "alarm", "affinity": "TEXT", "notNull": true + }, + { + "fieldPath": "lognum", + "columnName": "lognum", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "wrappingCount", + "columnName": "wrappingCount", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "pumpUid", + "columnName": "pumpUid", + "affinity": "TEXT", + "notNull": true } ], "primaryKey": { @@ -77,6 +95,7 @@ "code", "timestamp" ], + "orders": [], "createSql": "CREATE INDEX IF NOT EXISTS `index_diaconnHistory_code_timestamp` ON `${TABLE_NAME}` (`code`, `timestamp`)" } ], @@ -86,7 +105,7 @@ "views": [], "setupQueries": [ "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", - "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '698b023da2f9efdc0351236c43eb20b6')" + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'd604d25c3edbdf18cc5a39121cf5a779')" ] } } \ No newline at end of file diff --git a/diaconn/src/main/java/info/nightscout/androidaps/diaconn/api/DiaconnLogUploader.kt b/diaconn/src/main/java/info/nightscout/androidaps/diaconn/api/DiaconnLogUploader.kt index e4b26986dd..bcc35fcb18 100644 --- a/diaconn/src/main/java/info/nightscout/androidaps/diaconn/api/DiaconnLogUploader.kt +++ b/diaconn/src/main/java/info/nightscout/androidaps/diaconn/api/DiaconnLogUploader.kt @@ -1,7 +1,5 @@ package info.nightscout.androidaps.diaconn.api -import android.content.Context -import info.nightscout.androidaps.plugins.bus.RxBus import info.nightscout.shared.logging.AAPSLogger import info.nightscout.shared.logging.LTag import retrofit2.Retrofit @@ -21,7 +19,7 @@ class DiaconnLogUploader @Inject constructor ( private var retrofit: Retrofit? = null fun getRetrofitInstance(): Retrofit? { - //aapsLogger.debug(LTag.PUMPCOMM, "Diaconn pump logs upload BASE_URL : $BASE_URL") + aapsLogger.debug(LTag.PUMPCOMM, "diaconn pump logs upload instance") if (retrofit == null) { retrofit = Retrofit.Builder() .baseUrl(BASE_URL) diff --git a/diaconn/src/main/java/info/nightscout/androidaps/diaconn/database/DiaconnHistoryRecord.kt b/diaconn/src/main/java/info/nightscout/androidaps/diaconn/database/DiaconnHistoryRecord.kt index 46d7e28e89..45a4b35779 100644 --- a/diaconn/src/main/java/info/nightscout/androidaps/diaconn/database/DiaconnHistoryRecord.kt +++ b/diaconn/src/main/java/info/nightscout/androidaps/diaconn/database/DiaconnHistoryRecord.kt @@ -15,5 +15,8 @@ data class DiaconnHistoryRecord( var duration: Int = 0, var dailyBasal: Double = 0.0, var dailyBolus: Double = 0.0, - var alarm: String = "" + var alarm: String = "", + var lognum: Int = 0, + var wrappingCount: Int = 0, + var pumpUid: String = "" ) diff --git a/diaconn/src/main/java/info/nightscout/androidaps/diaconn/database/DiaconnHistoryRecordDao.kt b/diaconn/src/main/java/info/nightscout/androidaps/diaconn/database/DiaconnHistoryRecordDao.kt index 5115d3d1b8..9e5a7eb8eb 100644 --- a/diaconn/src/main/java/info/nightscout/androidaps/diaconn/database/DiaconnHistoryRecordDao.kt +++ b/diaconn/src/main/java/info/nightscout/androidaps/diaconn/database/DiaconnHistoryRecordDao.kt @@ -14,4 +14,7 @@ abstract class DiaconnHistoryRecordDao { @Insert(onConflict = OnConflictStrategy.REPLACE) abstract fun createOrUpdate(diaconnHistoryRecord: DiaconnHistoryRecord) + + @Query( "SELECT * from $TABLE_DIACONN_HISTORY WHERE pumpUid = :pumpUid ORDER BY timestamp DESC LIMIT 1" ) + abstract fun getLastRecord(pumpUid: String): DiaconnHistoryRecord? } diff --git a/diaconn/src/main/java/info/nightscout/androidaps/diaconn/packet/BigLogInquireResponsePacket.kt b/diaconn/src/main/java/info/nightscout/androidaps/diaconn/packet/BigLogInquireResponsePacket.kt index 099a562435..f224d7d834 100644 --- a/diaconn/src/main/java/info/nightscout/androidaps/diaconn/packet/BigLogInquireResponsePacket.kt +++ b/diaconn/src/main/java/info/nightscout/androidaps/diaconn/packet/BigLogInquireResponsePacket.kt @@ -1,12 +1,15 @@ package info.nightscout.androidaps.diaconn.packet -import android.app.Application import android.content.Context import dagger.android.HasAndroidInjector import info.nightscout.androidaps.data.DetailedBolusInfo import info.nightscout.androidaps.diaconn.DiaconnG8Pump import info.nightscout.androidaps.diaconn.R -import info.nightscout.androidaps.diaconn.api.* +import info.nightscout.androidaps.diaconn.api.ApiResponse +import info.nightscout.androidaps.diaconn.api.DiaconnApiService +import info.nightscout.androidaps.diaconn.api.DiaconnLogUploader +import info.nightscout.androidaps.diaconn.api.PumpLog +import info.nightscout.androidaps.diaconn.api.PumpLogDto import info.nightscout.androidaps.diaconn.common.RecordTypes import info.nightscout.androidaps.diaconn.database.DiaconnHistoryRecord import info.nightscout.androidaps.diaconn.database.DiaconnHistoryRecordDao @@ -15,19 +18,18 @@ import info.nightscout.androidaps.events.EventPumpStatusChanged import info.nightscout.androidaps.interfaces.ActivePlugin import info.nightscout.androidaps.interfaces.PumpDescription import info.nightscout.androidaps.interfaces.PumpSync -import info.nightscout.shared.logging.LTag import info.nightscout.androidaps.plugins.bus.RxBus import info.nightscout.androidaps.plugins.pump.common.bolusInfo.DetailedBolusInfoStorage import info.nightscout.androidaps.plugins.pump.common.bolusInfo.TemporaryBasalStorage import info.nightscout.androidaps.plugins.pump.common.defs.PumpType import info.nightscout.androidaps.utils.T import info.nightscout.androidaps.utils.resources.ResourceHelper +import info.nightscout.shared.logging.LTag import info.nightscout.shared.sharedPreferences.SP import org.apache.commons.lang3.time.DateUtils import org.joda.time.DateTime import retrofit2.Call import retrofit2.Response -import java.lang.Exception import java.util.* import javax.inject.Inject @@ -118,8 +120,6 @@ class BigLogInquireResponsePacket( // APS Local history sync start diaconnG8Pump.apsWrappingCount = wrapingCount diaconnG8Pump.apslastLogNum = logNum - sp.putInt(rh.gs(R.string.apslastLogNum), logNum) - sp.putInt(rh.gs(R.string.apsWrappingCount), wrapingCount) when(pumplogKind) { @@ -143,6 +143,9 @@ class BigLogInquireResponsePacket( diaconnG8HistoryRecord.duration = logItem.getInjectTime() diaconnG8HistoryRecord.bolusType = "M" // meal bolus diaconnG8HistoryRecord.stringValue = rh.gs(R.string.diaconn_g8_logmealsuccess) + diaconnG8HistoryRecord.lognum = logNum + diaconnG8HistoryRecord.wrappingCount = wrapingCount + diaconnG8HistoryRecord.pumpUid = diaconnG8Pump.pumpUid diaconnHistoryRecordDao.createOrUpdate(diaconnG8HistoryRecord) if (!newRecord && detailedBolusInfo != null) { // detailedInfo can be from another similar record. Reinsert @@ -171,6 +174,9 @@ class BigLogInquireResponsePacket( diaconnG8HistoryRecord.duration = logItem.getInjectTime() diaconnG8HistoryRecord.bolusType = "M" // Meal bolus diaconnG8HistoryRecord.stringValue = rh.gs(R.string.diaconn_g8_logmealfail) + diaconnG8HistoryRecord.lognum = logNum + diaconnG8HistoryRecord.wrappingCount = wrapingCount + diaconnG8HistoryRecord.pumpUid = diaconnG8Pump.pumpUid diaconnHistoryRecordDao.createOrUpdate(diaconnG8HistoryRecord) if (!newRecord && detailedBolusInfo != null) { // detailedInfo can be from another similar record. Reinsert @@ -200,6 +206,9 @@ class BigLogInquireResponsePacket( diaconnG8HistoryRecord.duration = logItem.getInjectTime() diaconnG8HistoryRecord.bolusType = "B" // bolus diaconnG8HistoryRecord.stringValue = rh.gs(R.string.diaconn_g8_logsuccess) + diaconnG8HistoryRecord.lognum = logNum + diaconnG8HistoryRecord.wrappingCount = wrapingCount + diaconnG8HistoryRecord.pumpUid = diaconnG8Pump.pumpUid diaconnHistoryRecordDao.createOrUpdate(diaconnG8HistoryRecord) if (!newRecord && detailedBolusInfo != null) { // detailedInfo can be from another similar record. Reinsert @@ -231,6 +240,9 @@ class BigLogInquireResponsePacket( diaconnG8HistoryRecord.duration = logItem.getInjectTime() diaconnG8HistoryRecord.bolusType = "B" // bolus diaconnG8HistoryRecord.stringValue = getReasonName(pumplogKind, logItem.reason) + diaconnG8HistoryRecord.lognum = logNum + diaconnG8HistoryRecord.wrappingCount = wrapingCount + diaconnG8HistoryRecord.pumpUid = diaconnG8Pump.pumpUid diaconnHistoryRecordDao.createOrUpdate(diaconnG8HistoryRecord) if (!newRecord && detailedBolusInfo != null) { // detailedInfo can be from another similar record. Reinsert @@ -259,6 +271,9 @@ class BigLogInquireResponsePacket( diaconnG8HistoryRecord.duration = logItem.getInjectTime() diaconnG8HistoryRecord.stringValue = rh.gs(R.string.diaconn_g8_logsquarestart) diaconnG8HistoryRecord.bolusType = "E" // Extended + diaconnG8HistoryRecord.lognum = logNum + diaconnG8HistoryRecord.wrappingCount = wrapingCount + diaconnG8HistoryRecord.pumpUid = diaconnG8Pump.pumpUid diaconnHistoryRecordDao.createOrUpdate(diaconnG8HistoryRecord) status = "EXTENDEDBOLUSSTART " + dateUtil.timeString(logDateTime) } @@ -273,6 +288,9 @@ class BigLogInquireResponsePacket( diaconnG8HistoryRecord.duration = logItem.getInjectTime() diaconnG8HistoryRecord.stringValue = rh.gs(R.string.diaconn_g8_logsquaresuccess) diaconnG8HistoryRecord.bolusType = "E" // Extended + diaconnG8HistoryRecord.lognum = logNum + diaconnG8HistoryRecord.wrappingCount = wrapingCount + diaconnG8HistoryRecord.pumpUid = diaconnG8Pump.pumpUid diaconnHistoryRecordDao.createOrUpdate(diaconnG8HistoryRecord) status = "EXTENDEDBOLUSEND " + dateUtil.timeString(logDateTime) } @@ -294,6 +312,9 @@ class BigLogInquireResponsePacket( diaconnG8HistoryRecord.duration = logItem.getInjectTime() diaconnG8HistoryRecord.stringValue = getReasonName(pumplogKind, logItem.reason) diaconnG8HistoryRecord.bolusType = "E" + diaconnG8HistoryRecord.lognum = logNum + diaconnG8HistoryRecord.wrappingCount = wrapingCount + diaconnG8HistoryRecord.pumpUid = diaconnG8Pump.pumpUid diaconnHistoryRecordDao.createOrUpdate(diaconnG8HistoryRecord) status = "EXTENDEDBOLUSFAIL " + dateUtil.timeString(logDateTime) } @@ -320,6 +341,9 @@ class BigLogInquireResponsePacket( diaconnG8HistoryRecord.duration = logItem.getInjectTime() * 10 // (1~30) 1:10min 30:300min diaconnG8HistoryRecord.stringValue = rh.gs(R.string.diaconn_g8_logdualsquarestart) diaconnG8HistoryRecord.bolusType = "D" // Extended + diaconnG8HistoryRecord.lognum = logNum + diaconnG8HistoryRecord.wrappingCount = wrapingCount + diaconnG8HistoryRecord.pumpUid = diaconnG8Pump.pumpUid diaconnHistoryRecordDao.createOrUpdate(diaconnG8HistoryRecord) status = "DUALEXTENTEDSTART " + dateUtil.timeString(logDateTime) @@ -350,6 +374,9 @@ class BigLogInquireResponsePacket( diaconnG8HistoryRecord.duration = logItem.getInjectTime() diaconnG8HistoryRecord.bolusType = "D" // bolus diaconnG8HistoryRecord.stringValue = rh.gs(R.string.diaconn_g8_logdualnormalsuccess) + diaconnG8HistoryRecord.lognum = logNum + diaconnG8HistoryRecord.wrappingCount = wrapingCount + diaconnG8HistoryRecord.pumpUid = diaconnG8Pump.pumpUid diaconnHistoryRecordDao.createOrUpdate(diaconnG8HistoryRecord) if (!newRecord && detailedBolusInfo != null) { // detailedInfo can be from another similar record. Reinsert @@ -370,6 +397,9 @@ class BigLogInquireResponsePacket( diaconnG8HistoryRecord.duration = logItem.getInjectTime() diaconnG8HistoryRecord.bolusType = "D" diaconnG8HistoryRecord.stringValue = rh.gs(R.string.diaconn_g8_logdualsquaresuccess) + diaconnG8HistoryRecord.lognum = logNum + diaconnG8HistoryRecord.wrappingCount = wrapingCount + diaconnG8HistoryRecord.pumpUid = diaconnG8Pump.pumpUid diaconnHistoryRecordDao.createOrUpdate(diaconnG8HistoryRecord) status = "DUALBOLUS SQUARESUCCESS " + dateUtil.timeString(logDateTime) } @@ -392,6 +422,9 @@ class BigLogInquireResponsePacket( diaconnG8HistoryRecord.duration = logItem.getInjectTime() diaconnG8HistoryRecord.bolusType = "D" diaconnG8HistoryRecord.stringValue = getReasonName(pumplogKind, logItem.reason) + diaconnG8HistoryRecord.lognum = logNum + diaconnG8HistoryRecord.wrappingCount = wrapingCount + diaconnG8HistoryRecord.pumpUid = diaconnG8Pump.pumpUid diaconnHistoryRecordDao.createOrUpdate(diaconnG8HistoryRecord) status = "DUALBOLUS FAIL " + dateUtil.timeString(logDateTime) } @@ -405,6 +438,9 @@ class BigLogInquireResponsePacket( diaconnG8HistoryRecord.timestamp = logDateTime diaconnG8HistoryRecord.value = logItem.beforeAmount / 100.0 diaconnG8HistoryRecord.stringValue = "TB before: ${logItem.beforeAmount / 100.0} / TB after: ${logItem.afterAmount / 100.0}" + diaconnG8HistoryRecord.lognum = logNum + diaconnG8HistoryRecord.wrappingCount = wrapingCount + diaconnG8HistoryRecord.pumpUid = diaconnG8Pump.pumpUid diaconnHistoryRecordDao.createOrUpdate(diaconnG8HistoryRecord) status = "1HOUR BASAL " + dateUtil.dateAndTimeString(logDateTime) } @@ -417,6 +453,9 @@ class BigLogInquireResponsePacket( diaconnG8HistoryRecord.code = RecordTypes.RECORD_TYPE_SUSPEND diaconnG8HistoryRecord.timestamp = logDateTime diaconnG8HistoryRecord.stringValue = rh.gs(R.string.diaconn_g8_lgosuspend, logItem.getBasalPattern()) + diaconnG8HistoryRecord.lognum = logNum + diaconnG8HistoryRecord.wrappingCount = wrapingCount + diaconnG8HistoryRecord.pumpUid = diaconnG8Pump.pumpUid diaconnHistoryRecordDao.createOrUpdate(diaconnG8HistoryRecord) status = "SUSPEND " + dateUtil.timeString(logDateTime) } @@ -429,6 +468,9 @@ class BigLogInquireResponsePacket( diaconnG8HistoryRecord.code = RecordTypes.RECORD_TYPE_SUSPEND diaconnG8HistoryRecord.timestamp = logDateTime diaconnG8HistoryRecord.stringValue = rh.gs(R.string.diaconn_g8_lgorelease, logItem.getBasalPattern()) + diaconnG8HistoryRecord.lognum = logNum + diaconnG8HistoryRecord.wrappingCount = wrapingCount + diaconnG8HistoryRecord.pumpUid = diaconnG8Pump.pumpUid diaconnHistoryRecordDao.createOrUpdate(diaconnG8HistoryRecord) status = "SUSPENDRELEASE " + dateUtil.timeString(logDateTime) } @@ -452,6 +494,9 @@ class BigLogInquireResponsePacket( diaconnG8HistoryRecord.timestamp = logDateTime diaconnG8HistoryRecord.value = logItem.remainAmount / 100.0 diaconnG8HistoryRecord.stringValue = rh.gs(R.string.diaconn_g8_loginjectorprime, logItem.primeAmount / 100.0) + diaconnG8HistoryRecord.lognum = logNum + diaconnG8HistoryRecord.wrappingCount = wrapingCount + diaconnG8HistoryRecord.pumpUid = diaconnG8Pump.pumpUid diaconnHistoryRecordDao.createOrUpdate(diaconnG8HistoryRecord) status = "INSULINCHANGE " + dateUtil.timeString(logDateTime) } @@ -478,6 +523,9 @@ class BigLogInquireResponsePacket( diaconnG8HistoryRecord.timestamp = logDateTime diaconnG8HistoryRecord.value = logItem.remainAmount / 100.0 diaconnG8HistoryRecord.stringValue = rh.gs(R.string.diaconn_g8_logtubeprime, logItem.primeAmount / 100.0) + diaconnG8HistoryRecord.lognum = logNum + diaconnG8HistoryRecord.wrappingCount = wrapingCount + diaconnG8HistoryRecord.pumpUid = diaconnG8Pump.pumpUid diaconnHistoryRecordDao.createOrUpdate(diaconnG8HistoryRecord) status = "TUBECHANGE " + dateUtil.timeString(logDateTime) } @@ -512,7 +560,9 @@ class BigLogInquireResponsePacket( if (recordMap["basal"]!! > 0.0) { diaconnG8HistoryRecord.dailyBasal = recordMap["basal"]!! } - + diaconnG8HistoryRecord.lognum = logNum + diaconnG8HistoryRecord.wrappingCount = wrapingCount + diaconnG8HistoryRecord.pumpUid = diaconnG8Pump.pumpUid diaconnHistoryRecordDao.createOrUpdate(diaconnG8HistoryRecord) //If it is a TDD, store it for stats also. @@ -559,7 +609,9 @@ class BigLogInquireResponsePacket( if (recordMap["bolus"]!! > 0.0) { diaconnG8HistoryRecord.dailyBolus = recordMap["bolus"]!! } - + diaconnG8HistoryRecord.lognum = logNum + diaconnG8HistoryRecord.wrappingCount = wrapingCount + diaconnG8HistoryRecord.pumpUid = diaconnG8Pump.pumpUid diaconnHistoryRecordDao.createOrUpdate(diaconnG8HistoryRecord) //If it is a TDD, store it for stats also. @@ -597,6 +649,9 @@ class BigLogInquireResponsePacket( diaconnG8HistoryRecord.timestamp = logDateTime diaconnG8HistoryRecord.value = logItem.remainAmount / 100.0 diaconnG8HistoryRecord.stringValue = rh.gs(R.string.diaconn_g8_logneedleprime, logItem.primeAmount / 100.0) + diaconnG8HistoryRecord.lognum = logNum + diaconnG8HistoryRecord.wrappingCount = wrapingCount + diaconnG8HistoryRecord.pumpUid = diaconnG8Pump.pumpUid diaconnHistoryRecordDao.createOrUpdate(diaconnG8HistoryRecord) status = "NEEDLECHANGE " + dateUtil.timeString(logDateTime) } @@ -634,6 +689,9 @@ class BigLogInquireResponsePacket( diaconnG8HistoryRecord.duration = logItem.tbTime * 15 diaconnG8HistoryRecord.value = absoluteRate diaconnG8HistoryRecord.stringValue = rh.gs(R.string.diaconn_g8_logtempstart) + diaconnG8HistoryRecord.lognum = logNum + diaconnG8HistoryRecord.wrappingCount = wrapingCount + diaconnG8HistoryRecord.pumpUid = diaconnG8Pump.pumpUid diaconnHistoryRecordDao.createOrUpdate(diaconnG8HistoryRecord) status = "TEMPSTART " + dateUtil.timeString(logDateTime) } @@ -664,6 +722,9 @@ class BigLogInquireResponsePacket( diaconnG8HistoryRecord.timestamp = logDateTime diaconnG8HistoryRecord.value = absoluteRate diaconnG8HistoryRecord.stringValue = getReasonName(pumplogKind, logItem.reason) + diaconnG8HistoryRecord.lognum = logNum + diaconnG8HistoryRecord.wrappingCount = wrapingCount + diaconnG8HistoryRecord.pumpUid = diaconnG8Pump.pumpUid diaconnHistoryRecordDao.createOrUpdate(diaconnG8HistoryRecord) status = "TEMPSTOP " + dateUtil.timeString(logDateTime) } @@ -677,6 +738,9 @@ class BigLogInquireResponsePacket( diaconnG8HistoryRecord.code = RecordTypes.RECORD_TYPE_ALARM diaconnG8HistoryRecord.timestamp = logDateTime diaconnG8HistoryRecord.stringValue = rh.gs(R.string.diaconn_g8_logbatteryshorage) + diaconnG8HistoryRecord.lognum = logNum + diaconnG8HistoryRecord.wrappingCount = wrapingCount + diaconnG8HistoryRecord.pumpUid = diaconnG8Pump.pumpUid diaconnHistoryRecordDao.createOrUpdate(diaconnG8HistoryRecord) status = "BATTERYALARM " + dateUtil.timeString(logDateTime) } @@ -692,6 +756,9 @@ class BigLogInquireResponsePacket( diaconnG8HistoryRecord.timestamp = logDateTime diaconnG8HistoryRecord.value = logItem.amount / 100.0 diaconnG8HistoryRecord.stringValue = rh.gs(R.string.diaconn_g8_logalarmblock, getReasonName(pumplogKind, logItem.reason)) + diaconnG8HistoryRecord.lognum = logNum + diaconnG8HistoryRecord.wrappingCount = wrapingCount + diaconnG8HistoryRecord.pumpUid = diaconnG8Pump.pumpUid diaconnHistoryRecordDao.createOrUpdate(diaconnG8HistoryRecord) status = "BLOCKALARM " + dateUtil.timeString(logDateTime) } @@ -707,6 +774,9 @@ class BigLogInquireResponsePacket( diaconnG8HistoryRecord.timestamp = logDateTime diaconnG8HistoryRecord.value = logItem.remain.toDouble() diaconnG8HistoryRecord.stringValue = rh.gs(R.string.diaconn_g8_loginsulinshorage) + diaconnG8HistoryRecord.lognum = logNum + diaconnG8HistoryRecord.wrappingCount = wrapingCount + diaconnG8HistoryRecord.pumpUid = diaconnG8Pump.pumpUid diaconnHistoryRecordDao.createOrUpdate(diaconnG8HistoryRecord) status = "SHORTAGEALARM " + dateUtil.timeString(logDateTime) } diff --git a/diaconn/src/main/java/info/nightscout/androidaps/diaconn/service/DiaconnG8Service.kt b/diaconn/src/main/java/info/nightscout/androidaps/diaconn/service/DiaconnG8Service.kt index b553e3a212..43caae85d4 100644 --- a/diaconn/src/main/java/info/nightscout/androidaps/diaconn/service/DiaconnG8Service.kt +++ b/diaconn/src/main/java/info/nightscout/androidaps/diaconn/service/DiaconnG8Service.kt @@ -16,6 +16,7 @@ import info.nightscout.androidaps.diaconn.DiaconnG8Pump import info.nightscout.androidaps.diaconn.R import info.nightscout.androidaps.diaconn.api.DiaconnApiService import info.nightscout.androidaps.diaconn.api.DiaconnLogUploader +import info.nightscout.androidaps.diaconn.database.DiaconnHistoryRecordDao import info.nightscout.androidaps.diaconn.events.EventDiaconnG8NewStatus import info.nightscout.androidaps.diaconn.events.EventDiaconnG8PumpLogReset import info.nightscout.androidaps.diaconn.packet.* @@ -78,6 +79,7 @@ class DiaconnG8Service : DaggerService() { @Inject lateinit var dateUtil: DateUtil @Inject lateinit var aapsSchedulers: AapsSchedulers @Inject lateinit var diaconnLogUploader: DiaconnLogUploader + @Inject lateinit var diaconnHistoryRecordDao: DiaconnHistoryRecordDao private val disposable = CompositeDisposable() private val mBinder: IBinder = LocalBinder() @@ -90,13 +92,6 @@ class DiaconnG8Service : DaggerService() { .observeOn(aapsSchedulers.io) .subscribe({ stopSelf() }) { fabricPrivacy.logException(it) } ) - disposable.add(rxBus - .toObservable(EventDiaconnG8PumpLogReset::class.java) - .observeOn(aapsSchedulers.io) - .subscribe { - pumpLogResetAfterPrefImport() - } - ) } inner class LocalBinder : Binder() { @@ -146,9 +141,6 @@ class DiaconnG8Service : DaggerService() { fun readPumpStatus() { try { - - aapsLogger.error(LTag.PUMPCOMM, "패키지 명!!! : "+context.packageManager.getPackageInfo(context.packageName, 0).versionName) - val pump = activePlugin.activePump rxBus.send(EventPumpStatusChanged(rh.gs(R.string.gettingpumpsettings))) @@ -247,6 +239,7 @@ class DiaconnG8Service : DaggerService() { } fun loadHistory(): PumpEnactResult { + if (!diaconnG8Plugin.isInitialized()) { val result = PumpEnactResult(injector).success(false) result.comment = "pump not initialized" @@ -260,6 +253,16 @@ class DiaconnG8Service : DaggerService() { } val result = PumpEnactResult(injector) + var apsLastLogNum = 9999 + var apsWrappingCount = -1 + // get saved last loginfo + val diaconnHistoryRecord = diaconnHistoryRecordDao.getLastRecord(diaconnG8Pump.pumpUid) + aapsLogger.error(LTag.PUMPCOMM, "diaconnHistoryRecord :: $diaconnHistoryRecord") + + if(diaconnHistoryRecord != null) { + apsLastLogNum = diaconnHistoryRecord.lognum + apsWrappingCount = diaconnHistoryRecord.wrappingCount + } // pump log status val pumpLastNum = diaconnG8Pump.pumpLastLogNum @@ -267,37 +270,31 @@ class DiaconnG8Service : DaggerService() { val apsIncarnationNum = sp.getInt(rh.gs(R.string.apsIncarnationNo), 65536) // aps last log num val pumpSerialNo = sp.getInt(rh.gs(R.string.pumpserialno), 0) - var apsWrappingCount = sp.getInt(rh.gs(R.string.apsWrappingCount), 0) - var apsLastLogNum = sp.getInt(rh.gs(R.string.apslastLogNum), 0) + // if first install app - if (apsWrappingCount == 0 && apsLastLogNum == 0) { - pumpLogDefaultSetting() + if (apsWrappingCount == -1 && apsLastLogNum == 9999 ) { + apsWrappingCount = pumpWrappingCount + apsLastLogNum = if (pumpLastNum - 1 < 0) 0 else pumpLastNum -2 } - - // if pump reset - if (apsIncarnationNum != diaconnG8Pump.pumpIncarnationNum) { - pumpLogDefaultSetting() - sp.putInt(rh.gs(R.string.apsIncarnationNo), diaconnG8Pump.pumpIncarnationNum) - } - // if another pump if (pumpSerialNo != diaconnG8Pump.serialNo) { - pumpLogDefaultSetting() + apsWrappingCount = pumpWrappingCount + apsLastLogNum = if (pumpLastNum - 1 < 0) 0 else pumpLastNum -2 sp.putInt(rh.gs(R.string.pumpserialno), diaconnG8Pump.serialNo) } - - apsWrappingCount = sp.getInt(rh.gs(R.string.apsWrappingCount), 0) - apsLastLogNum = sp.getInt(rh.gs(R.string.apslastLogNum), 0) - - aapsLogger.debug(LTag.PUMPCOMM, "apsWrappingCount : $apsWrappingCount, apsLastLogNum : $apsLastLogNum") - - if ((pumpWrappingCount * 10000 + pumpLastNum) < apsLastLogNum) { - pumpLogDefaultSetting() + // if pump reset + if (apsIncarnationNum != diaconnG8Pump.pumpIncarnationNum) { + apsWrappingCount = pumpWrappingCount + apsLastLogNum = if (pumpLastNum - 1 < 0) 0 else pumpLastNum -2 + sp.putInt(R.string.apsIncarnationNo, apsIncarnationNum) } + aapsLogger.debug(LTag.PUMPCOMM, "apsWrappingCount : $apsWrappingCount, apsLastLogNum : $apsLastLogNum") + // pump log loop size val pumpLogPageSize = 11 - val (start, end, loopSize) = getLogLoopCount(apsLastLogNum, apsWrappingCount, pumpLastNum, pumpWrappingCount) + val (start, end, loopSize) = getLogLoopCount(apsLastLogNum, apsWrappingCount, pumpLastNum, pumpWrappingCount, false) + aapsLogger.debug(LTag.PUMPCOMM, "loopinfo start : $start, end : $end, loopSize : $loopSize") // log sync start! if (loopSize > 0) { for (i in 0 until loopSize) { @@ -330,7 +327,7 @@ class DiaconnG8Service : DaggerService() { aapsLogger.debug(LTag.PUMPCOMM, "platformLogNo: $platformLogNo, platformWrappingCount: $platformWrappingCount") // 페이지 사이즈로 처리할 때 루핑 횟수 계산 - val (platformStart, platformEnd, platformLoopSize) = getLogLoopCount(platformLogNo, platformWrappingCount, pumpLastNum, pumpWrappingCount) + val (platformStart, platformEnd, platformLoopSize) = getLogLoopCount(platformLogNo, platformWrappingCount, pumpLastNum, pumpWrappingCount, true) if(platformLoopSize > 0) { diaconnG8Pump.isPlatformUploadStarted = true for (i in 0 until platformLoopSize) { @@ -351,17 +348,18 @@ class DiaconnG8Service : DaggerService() { return result } - private fun getLogLoopCount(lastLogNum: Int, wrappingCount: Int, pumpLastNum: Int, pumpWrappingCount: Int): Triple { + private fun getLogLoopCount(lastLogNum: Int, wrappingCount: Int, pumpLastNum: Int, pumpWrappingCount: Int, isPlatform: Boolean): Triple { val start: Int// log sync start number val end: Int // log sync end number1311 + aapsLogger.debug(LTag.PUMPCOMM, "lastLogNum : $lastLogNum, wrappingCount : $wrappingCount , pumpLastNum: $pumpLastNum, pumpWrappingCount : $pumpWrappingCount") - if (pumpWrappingCount * 10000 + pumpLastNum - lastLogNum > 10000) { + if ((pumpWrappingCount * 10000 + pumpLastNum - lastLogNum > 10000 && isPlatform)) { start = pumpLastNum end = 10000 } else if (pumpWrappingCount > wrappingCount && lastLogNum < 9999) { start = (lastLogNum + 1) end = 10000 - } else if (pumpWrappingCount > wrappingCount && lastLogNum >= 9999) { + } else if (pumpWrappingCount > wrappingCount && lastLogNum >= 9999 && isPlatform) { start = 0 // 처음부터 시작 end = pumpLastNum } else { @@ -694,18 +692,6 @@ class DiaconnG8Service : DaggerService() { return requestReqPacket4.success() } - private fun pumpLogDefaultSetting() { - val apsWrappingCount = diaconnG8Pump.pumpWrappingCount - val apsLastLogNum = if (diaconnG8Pump.pumpLastLogNum - 1 < 0) 0 else diaconnG8Pump.pumpLastLogNum - 1 - sp.putInt(rh.gs(R.string.apslastLogNum), apsLastLogNum) - sp.putInt(rh.gs(R.string.apsWrappingCount), apsWrappingCount) - } - - private fun pumpLogResetAfterPrefImport() { - sp.putInt(rh.gs(R.string.apslastLogNum), 0) - sp.putInt(rh.gs(R.string.apsWrappingCount), 0) - } - private fun processConfirm(msgType: Byte): Boolean { // pump confirm if (diaconnG8Pump.otpNumber == 0) { From f486d1cfb31ab5d1db0f172b3ddb05194f526839 Mon Sep 17 00:00:00 2001 From: Andrei Vereha Date: Wed, 4 May 2022 09:16:24 +0200 Subject: [PATCH 19/21] add logging --- .../plugins/pump/omnipod/dash/OmnipodDashPumpPlugin.kt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/OmnipodDashPumpPlugin.kt b/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/OmnipodDashPumpPlugin.kt index db68af0a20..0050a23481 100644 --- a/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/OmnipodDashPumpPlugin.kt +++ b/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/OmnipodDashPumpPlugin.kt @@ -1364,16 +1364,17 @@ class OmnipodDashPumpPlugin @Inject constructor( private fun handleCommandConfirmation(confirmation: CommandConfirmed) { val command = confirmation.command val historyEntry = history.getById(command.historyId) - aapsLogger.debug(LTag.PUMPCOMM, "handling command confirmation: $confirmation") + aapsLogger.debug(LTag.PUMPCOMM, "handling command confirmation: $confirmation ${historyEntry.commandType}") when (historyEntry.commandType) { OmnipodCommandType.CANCEL_TEMPORARY_BASAL -> { if (confirmation.success) { - pumpSync.syncStopTemporaryBasalWithPumpId( + val ret = pumpSync.syncStopTemporaryBasalWithPumpId( historyEntry.createdAt, historyEntry.pumpId(), PumpType.OMNIPOD_DASH, serialNumber() ) + aapsLogger.info(LTag.PUMP, "syncStopTemporaryBasalWithPumpId ret=$ret") podStateManager.tempBasal = null } rxBus.send(EventDismissNotification(Notification.OMNIPOD_TBR_ALERTS)) From ac498736cf77045e61c2848653ac6a0c16b4c343 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 4 May 2022 08:08:30 +0000 Subject: [PATCH 20/21] Bump org.jlleitschuh.gradle.ktlint from 10.2.1 to 10.3.0 Bumps org.jlleitschuh.gradle.ktlint from 10.2.1 to 10.3.0. --- updated-dependencies: - dependency-name: org.jlleitschuh.gradle.ktlint dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 49b6b483bd..485c840d99 100644 --- a/build.gradle +++ b/build.gradle @@ -57,7 +57,7 @@ buildscript { plugins { id "io.gitlab.arturbosch.detekt" version "1.20.0" - id "org.jlleitschuh.gradle.ktlint" version "10.2.1" + id "org.jlleitschuh.gradle.ktlint" version "10.3.0" id 'org.barfuin.gradle.jacocolog' version '2.0.0' id 'org.jetbrains.kotlin.android' version '1.6.21' apply false } From b1482f19716feccbc2bfc0cbbfcff9cfa804ccb1 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Wed, 4 May 2022 22:07:04 +0200 Subject: [PATCH 21/21] G8: do not translate key --- diaconn/src/main/res/values/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/diaconn/src/main/res/values/strings.xml b/diaconn/src/main/res/values/strings.xml index ea014d7ef3..f74b46b0af 100644 --- a/diaconn/src/main/res/values/strings.xml +++ b/diaconn/src/main/res/values/strings.xml @@ -169,5 +169,5 @@ Tempbasal stop is rejected when tempbasal is not running Send pump logs to the Diaconn Cloud. Diaconn Cloud Sync - diaconn_g8_appuid + diaconn_g8_appuid