From 6d4521ca6bc19a7f7bb56859683a3f1454b5934f Mon Sep 17 00:00:00 2001 From: Bart Sopers Date: Mon, 15 Mar 2021 00:51:07 +0100 Subject: [PATCH] WIP on integrating Omnipod Dash activation wizard --- .../omnipod/dash/driver/OmnipodDashManagerImpl.kt | 2 +- .../omnipod/dash/driver/comm/session/Session.kt | 14 ++++++++++++-- .../pod/state/OmnipodDashPodStateManagerImpl.kt | 4 ++-- .../omnipod/dash/ui/DashPodManagementActivity.kt | 5 +---- .../omnipod/dash/ui/OmnipodDashOverviewFragment.kt | 2 +- .../res/layout/omnipod_dash_pod_management.xml | 3 ++- 6 files changed, 19 insertions(+), 11 deletions(-) diff --git a/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/OmnipodDashManagerImpl.kt b/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/OmnipodDashManagerImpl.kt index 32d8baee94..ecb847fb35 100644 --- a/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/OmnipodDashManagerImpl.kt +++ b/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/OmnipodDashManagerImpl.kt @@ -161,7 +161,7 @@ class OmnipodDashManagerImpl @Inject constructor( if (podStateManager.podStatus == PodStatus.CLUTCH_DRIVE_ENGAGED) { Observable.empty() } else { - Observable.error(IllegalStateException("Unexpected Pod status")) + Observable.error(IllegalStateException("Unexpected Pod status: got ${podStateManager.podStatus}, expected CLUTCH_DRIVE_ENGAGED")) } } ) diff --git a/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/session/Session.kt b/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/session/Session.kt index 4169dac629..6714e218aa 100644 --- a/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/session/Session.kt +++ b/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/session/Session.kt @@ -47,6 +47,7 @@ class Session( val responseMsg = msgIO.receiveMessage() val decrypted = enDecrypt.decrypt(responseMsg) aapsLogger.debug(LTag.PUMPBTCOMM, "Received response: $decrypted") + val response = parseResponse(decrypted) if (!responseType.isInstance(response)) { @@ -69,8 +70,17 @@ class Session( @Throws(CouldNotParseResponseException::class, UnsupportedOperationException::class) private fun parseResponse(decrypted: MessagePacket): Response { - val payload = parseKeys(arrayOf(RESPONSE_PREFIX), decrypted.payload)[0] - aapsLogger.info(LTag.PUMPBTCOMM, "Received decrypted response: ${payload.toHex()} in packet: $decrypted") + val data = parseKeys(arrayOf(RESPONSE_PREFIX), decrypted.payload)[0] + aapsLogger.info(LTag.PUMPBTCOMM, "Received decrypted response: ${data.toHex()} in packet: $decrypted") + + // TODO verify length + + val uniqueId = data.copyOfRange(0, 4) + val lenghtAndSequenceNumber = data.copyOfRange(4, 6) + val payload = data.copyOfRange(6, data.size - 2) + val crc = data.copyOfRange(data.size - 2, data.size) + + // TODO validate uniqueId, sequenceNumber and crc return ResponseUtil.parseResponse(payload) } diff --git a/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/pod/state/OmnipodDashPodStateManagerImpl.kt b/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/pod/state/OmnipodDashPodStateManagerImpl.kt index dcf5289266..b55719a341 100644 --- a/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/pod/state/OmnipodDashPodStateManagerImpl.kt +++ b/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/pod/state/OmnipodDashPodStateManagerImpl.kt @@ -216,8 +216,8 @@ class OmnipodDashPodStateManagerImpl @Inject constructor( override fun updateFromSetUniqueIdResponse(response: SetUniqueIdResponse) { podState.pulseRate = response.pumpRate podState.primePulseRate = response.primePumpRate - podState.firstPrimeBolusVolume = response.numberOfPrimePulses - podState.secondPrimeBolusVolume = response.numberOfEngagingClutchDrivePulses + podState.firstPrimeBolusVolume = response.numberOfEngagingClutchDrivePulses + podState.secondPrimeBolusVolume = response.numberOfPrimePulses podState.podLifeInHours = response.podExpirationTimeInHours podState.bleVersion = SoftwareVersion( response.bleVersionMajor, diff --git a/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/ui/DashPodManagementActivity.kt b/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/ui/DashPodManagementActivity.kt index 58779f9682..4e0df13403 100644 --- a/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/ui/DashPodManagementActivity.kt +++ b/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/ui/DashPodManagementActivity.kt @@ -25,9 +25,6 @@ import io.reactivex.disposables.CompositeDisposable import io.reactivex.rxkotlin.plusAssign import javax.inject.Inject -/** - * Created by andy on 30/08/2019 - */ class DashPodManagementActivity : NoSplashAppCompatActivity() { @Inject lateinit var rxBus: RxBusWrapper @@ -70,7 +67,7 @@ class DashPodManagementActivity : NoSplashAppCompatActivity() { this, resourceHelper.gs(R.string.omnipod_common_pod_management_discard_pod_confirmation), Thread { - // TODO discard Pod + podStateManager.reset() } ) } diff --git a/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/ui/OmnipodDashOverviewFragment.kt b/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/ui/OmnipodDashOverviewFragment.kt index 749f0d0de5..601932644a 100644 --- a/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/ui/OmnipodDashOverviewFragment.kt +++ b/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/ui/OmnipodDashOverviewFragment.kt @@ -313,7 +313,7 @@ class OmnipodDashOverviewFragment : DaggerFragment() { podInfoBinding.reservoir.text = resourceHelper.gs( R.string.omnipod_common_overview_reservoir_value, - podStateManager.pulsesRemaining + (podStateManager.pulsesRemaining!! / 20.0) ) podInfoBinding.reservoir.setTextColor( if (podStateManager.pulsesRemaining!! < lowReservoirThreshold) { diff --git a/omnipod-dash/src/main/res/layout/omnipod_dash_pod_management.xml b/omnipod-dash/src/main/res/layout/omnipod_dash_pod_management.xml index 9790b2335a..461781eabe 100644 --- a/omnipod-dash/src/main/res/layout/omnipod_dash_pod_management.xml +++ b/omnipod-dash/src/main/res/layout/omnipod_dash_pod_management.xml @@ -119,6 +119,7 @@ android:orientation="vertical" app:layout_constraintGuide_percent="0.5" /> +