More cleanup after conversion
This commit is contained in:
parent
ba65a47380
commit
dcf7672a24
19 changed files with 185 additions and 319 deletions
|
@ -3,7 +3,6 @@ package info.nightscout.androidaps.plugins.pump.omnipod.dash.driver
|
|||
import info.nightscout.androidaps.logging.AAPSLogger
|
||||
import info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.comm.OmnipodDashBleManager
|
||||
import info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.event.PodEvent
|
||||
import info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.event.PodEventType
|
||||
import info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.pod.command.GetVersionCommand
|
||||
import info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.pod.command.GetVersionCommand.Companion.DEFAULT_UNIQUE_ID
|
||||
import info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.pod.definition.ActivationProgress
|
||||
|
@ -31,25 +30,26 @@ class OmnipodDashManagerImpl @Inject constructor(
|
|||
return Observable.error(IllegalStateException("Pod is in an incorrect state"))
|
||||
}
|
||||
|
||||
private val observeConnectToPod: Observable<PodEvent> = Observable.defer {
|
||||
// TODO
|
||||
// send CONNECTING event here
|
||||
bleManager.connect()
|
||||
Observable.just(PodEvent(PodEventType.CONNECTED, null))
|
||||
}
|
||||
private val observeConnectToPod: Observable<PodEvent>
|
||||
get() {
|
||||
return Observable.defer {
|
||||
bleManager.connect()
|
||||
Observable.just(PodEvent.Connected(0)) // TODO should be returned in BleManager
|
||||
}
|
||||
}
|
||||
|
||||
override fun activatePodPart1(): Observable<PodEvent> {
|
||||
// TODO
|
||||
val command = GetVersionCommand.Builder() //
|
||||
.setSequenceNumber(podStateManager.messageSequenceNumber) //
|
||||
.setUniqueId(DEFAULT_UNIQUE_ID) //
|
||||
.build()
|
||||
|
||||
return Observable.concat(
|
||||
observePodReadyForActivationPart1,
|
||||
observeConnectToPod,
|
||||
Observable.defer {
|
||||
bleManager.sendCommand(GetVersionCommand.Builder() //
|
||||
.setSequenceNumber(podStateManager.messageSequenceNumber) //
|
||||
.setUniqueId(DEFAULT_UNIQUE_ID) //
|
||||
.build()
|
||||
)
|
||||
Observable.just(PodEvent(PodEventType.COMMAND_SENT, null))
|
||||
bleManager.sendCommand(command)
|
||||
Observable.just(PodEvent.CommandSent(command)) // TODO should be returned in BleManager
|
||||
}
|
||||
// ... Send more commands
|
||||
)
|
||||
|
|
|
@ -1,8 +1,16 @@
|
|||
package info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.event
|
||||
|
||||
import java.io.Serializable
|
||||
import info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.pod.command.base.Command
|
||||
import info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.pod.response.Response
|
||||
|
||||
sealed class PodEvent {
|
||||
|
||||
object Scanning : PodEvent()
|
||||
object Pairing : PodEvent()
|
||||
object Connecting : PodEvent()
|
||||
class Connected(val uniqueId: Int) : PodEvent()
|
||||
class CommandSending(val command: Command) : PodEvent()
|
||||
class CommandSent(val command: Command) : PodEvent()
|
||||
class ResponseReceived(val response: Response) : PodEvent()
|
||||
}
|
||||
|
||||
class PodEvent(
|
||||
val type: PodEventType,
|
||||
val data: Serializable?
|
||||
)
|
|
@ -1,12 +0,0 @@
|
|||
package info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.event
|
||||
|
||||
enum class PodEventType {
|
||||
SCANNING,
|
||||
PAIRING,
|
||||
CONNECTING,
|
||||
CONNECTED,
|
||||
COMMAND_SENDING,
|
||||
COMMAND_SENT,
|
||||
RESPONSE_RECEIVED,
|
||||
// ...
|
||||
}
|
|
@ -11,7 +11,7 @@ class ProgramAlertsCommand private constructor(
|
|||
uniqueId: Int,
|
||||
sequenceNumber: Short,
|
||||
multiCommandFlag: Boolean,
|
||||
alertConfigurations: List<AlertConfiguration>?,
|
||||
alertConfigurations: List<AlertConfiguration>,
|
||||
nonce: Int
|
||||
) : NonceEnabledCommand(CommandType.PROGRAM_ALERTS, uniqueId, sequenceNumber, multiCommandFlag, nonce) {
|
||||
|
||||
|
@ -52,6 +52,7 @@ class ProgramAlertsCommand private constructor(
|
|||
class Builder : NonceEnabledCommandBuilder<Builder, ProgramAlertsCommand>() {
|
||||
|
||||
private var alertConfigurations: List<AlertConfiguration>? = null
|
||||
|
||||
fun setAlertConfigurations(alertConfigurations: List<AlertConfiguration>?): Builder {
|
||||
this.alertConfigurations = alertConfigurations
|
||||
return this
|
||||
|
@ -59,7 +60,7 @@ class ProgramAlertsCommand private constructor(
|
|||
|
||||
override fun buildCommand(): ProgramAlertsCommand {
|
||||
requireNotNull(alertConfigurations) { "alertConfigurations can not be null" } // !!?
|
||||
return ProgramAlertsCommand(uniqueId!!, sequenceNumber!!, multiCommandFlag, alertConfigurations, nonce!!) // TODO this might crash if not all are set
|
||||
return ProgramAlertsCommand(uniqueId!!, sequenceNumber!!, multiCommandFlag, alertConfigurations!!, nonce!!) // TODO this might crash if not all are set
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -76,6 +76,7 @@ class ProgramBasalCommand private constructor(
|
|||
private var basalProgram: BasalProgram? = null
|
||||
private var programReminder: ProgramReminder? = null
|
||||
private var currentTime: Date? = null
|
||||
|
||||
fun setBasalProgram(basalProgram: BasalProgram?): Builder {
|
||||
this.basalProgram = basalProgram
|
||||
return this
|
||||
|
|
|
@ -57,6 +57,7 @@ class ProgramBolusCommand private constructor(
|
|||
private var numberOfUnits: Double? = null
|
||||
private var delayBetweenPulsesInEighthSeconds: Byte? = null
|
||||
private var programReminder: ProgramReminder? = null
|
||||
|
||||
fun setNumberOfUnits(numberOfUnits: Double): Builder {
|
||||
require(numberOfUnits > 0.0) { "Number of units should be greater than zero" }
|
||||
require((numberOfUnits * 1000).toInt() % 50 == 0) { "Number of units must be dividable by 0.05" }
|
||||
|
@ -78,6 +79,7 @@ class ProgramBolusCommand private constructor(
|
|||
requireNotNull(numberOfUnits) { "numberOfUnits can not be null" }
|
||||
requireNotNull(delayBetweenPulsesInEighthSeconds) { "delayBetweenPulsesInEighthSeconds can not be null" }
|
||||
requireNotNull(programReminder) { "programReminder can not be null" }
|
||||
|
||||
val numberOfPulses = Math.round(numberOfUnits!! * 20).toShort()
|
||||
val byte10And11 = (numberOfPulses * delayBetweenPulsesInEighthSeconds!!).toShort()
|
||||
val interlockCommand = ProgramInsulinCommand(uniqueId!!, sequenceNumber!!, multiCommandFlag, nonce!!, listOf(BolusShortInsulinProgramElement(numberOfPulses)), calculateChecksum(0x01.toByte(), byte10And11, numberOfPulses),
|
||||
|
|
|
@ -34,14 +34,6 @@ class ProgramInsulinCommand internal constructor(
|
|||
}
|
||||
}
|
||||
|
||||
fun calculateChecksum(bytes: ByteArray): Short {
|
||||
var sum: Short = 0
|
||||
for (b in bytes) {
|
||||
sum = ((b.toInt() and 0xff) + sum).toShort()
|
||||
}
|
||||
return sum
|
||||
}
|
||||
|
||||
override val encoded: ByteArray
|
||||
get() {
|
||||
val buffer = ByteBuffer.allocate(getLength().toInt()) //
|
||||
|
|
|
@ -31,6 +31,7 @@ class ProgramTempBasalCommand private constructor(
|
|||
private var programReminder: ProgramReminder? = null
|
||||
private var rateInUnitsPerHour: Double? = null
|
||||
private var durationInMinutes: Short? = null
|
||||
|
||||
fun setProgramReminder(programReminder: ProgramReminder?): Builder {
|
||||
this.programReminder = programReminder
|
||||
return this
|
||||
|
@ -43,6 +44,7 @@ class ProgramTempBasalCommand private constructor(
|
|||
|
||||
fun setDurationInMinutes(durationInMinutes: Short): Builder {
|
||||
require(durationInMinutes % 30 == 0) { "durationInMinutes must be dividable by 30" }
|
||||
|
||||
this.durationInMinutes = durationInMinutes
|
||||
return this
|
||||
}
|
||||
|
@ -51,6 +53,7 @@ class ProgramTempBasalCommand private constructor(
|
|||
requireNotNull(programReminder) { "programReminder can not be null" }
|
||||
requireNotNull(rateInUnitsPerHour) { "rateInUnitsPerHour can not be null" }
|
||||
requireNotNull(durationInMinutes) { "durationInMinutes can not be null" }
|
||||
|
||||
val durationInSlots = (durationInMinutes!! / 30).toByte()
|
||||
val pulsesPerSlot = ProgramTempBasalUtil.mapTempBasalToPulsesPerSlot(durationInSlots, rateInUnitsPerHour!!)
|
||||
val tenthPulsesPerSlot = ProgramTempBasalUtil.mapTempBasalToTenthPulsesPerSlot(durationInSlots.toInt(), rateInUnitsPerHour!!)
|
||||
|
|
|
@ -45,6 +45,7 @@ class SetUniqueIdCommand private constructor(
|
|||
private var lotNumber: Int? = null
|
||||
private var podSequenceNumber: Int? = null
|
||||
private var initializationTime: Date? = null
|
||||
|
||||
fun setLotNumber(lotNumber: Int): Builder {
|
||||
this.lotNumber = lotNumber
|
||||
return this
|
||||
|
|
|
@ -63,6 +63,7 @@ class SilenceAlertsCommand private constructor(
|
|||
private var silenceSuspendInProgressAlert = false
|
||||
private var silenceSuspendEndedAlert = false
|
||||
private var silencePodExpirationAlert = false
|
||||
|
||||
fun setSilenceAutoOffAlert(silenceAutoOffAlert: Boolean): Builder {
|
||||
this.silenceAutoOffAlert = silenceAutoOffAlert
|
||||
return this
|
||||
|
|
|
@ -57,6 +57,7 @@ class StopDeliveryCommand private constructor(
|
|||
|
||||
private var deliveryType: DeliveryType? = null
|
||||
private var beepType: BeepType? = BeepType.LONG_SINGLE_BEEP
|
||||
|
||||
fun setDeliveryType(deliveryType: DeliveryType?): Builder {
|
||||
this.deliveryType = deliveryType
|
||||
return this
|
||||
|
@ -70,6 +71,7 @@ class StopDeliveryCommand private constructor(
|
|||
override fun buildCommand(): StopDeliveryCommand {
|
||||
requireNotNull(deliveryType) { "deliveryType can not be null" }
|
||||
requireNotNull(beepType) { "beepType can not be null" }
|
||||
|
||||
return StopDeliveryCommand(uniqueId!!, sequenceNumber!!, multiCommandFlag, deliveryType!!, beepType!!, nonce!!)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,6 +8,7 @@ abstract class HeaderEnabledCommandBuilder<T : HeaderEnabledCommandBuilder<T, R>
|
|||
protected var uniqueId: Int? = null
|
||||
protected var sequenceNumber: Short? = null
|
||||
protected var multiCommandFlag = false
|
||||
|
||||
override fun build(): R {
|
||||
requireNotNull(uniqueId) { "uniqueId can not be null" }
|
||||
requireNotNull(sequenceNumber) { "sequenceNumber can not be null" }
|
||||
|
|
|
@ -7,7 +7,7 @@ class BasalProgram(
|
|||
) {
|
||||
|
||||
val segments: MutableList<Segment> = segments.toMutableList()
|
||||
get() = Collections.unmodifiableList(field) // TODO Adrian: moved method here
|
||||
get() = Collections.unmodifiableList(field)
|
||||
|
||||
fun addSegment(segment: Segment) {
|
||||
segments.add(segment)
|
||||
|
|
|
@ -1,10 +1,8 @@
|
|||
package info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.pod.definition
|
||||
|
||||
enum class BeepType( // Used in stop delivery command
|
||||
val value: Byte
|
||||
) {
|
||||
enum class BeepType(val value: Byte) {
|
||||
|
||||
SILENT(0x00.toByte()),
|
||||
FOUR_TIMES_BIP_BEEP(0x02.toByte()), // Used in low reservoir alert, user expiration alert, expiration alert, imminent expiration alert, lump of coal alert
|
||||
LONG_SINGLE_BEEP(0x06.toByte());
|
||||
FOUR_TIMES_BIP_BEEP(0x02.toByte()), // Used in low reservoir alert, user expiration alert, expiration alert, imminent expiration alert, lump of coal alert
|
||||
LONG_SINGLE_BEEP(0x06.toByte()); // Used in stop delivery command
|
||||
}
|
|
@ -9,101 +9,25 @@ class SetUniqueIdResponse(
|
|||
encoded: ByteArray
|
||||
) : ActivationResponseBase(ActivationResponseType.SET_UNIQUE_ID_RESPONSE, encoded) {
|
||||
|
||||
private val messageType: Byte // TODO directly assign here
|
||||
private val messageLength: Short
|
||||
private val pulseVolumeInTenThousandthMicroLiter: Short
|
||||
private val pumpRate: Short
|
||||
private val primePumpRate: Short
|
||||
private val numberOfEngagingClutchDrivePulses: Short
|
||||
private val numberOfPrimePulses: Short
|
||||
private val podExpirationTimeInHours: Short
|
||||
private val firmwareVersionMajor: Short
|
||||
private val firmwareVersionMinor: Short
|
||||
private val firmwareVersionInterim: Short
|
||||
private val bleVersionMajor: Short
|
||||
private val bleVersionMinor: Short
|
||||
private val bleVersionInterim: Short
|
||||
private val productId: Short
|
||||
private val podStatus: PodStatus
|
||||
private val lotNumber: Long
|
||||
private val podSequenceNumber: Long
|
||||
private val uniqueIdReceivedInCommand: Long
|
||||
|
||||
fun getMessageType(): Byte {
|
||||
return messageType
|
||||
}
|
||||
|
||||
fun getMessageLength(): Short { // TODO value getters
|
||||
return messageLength
|
||||
}
|
||||
|
||||
fun getPulseVolumeInTenThousandthMicroLiter(): Short {
|
||||
return pulseVolumeInTenThousandthMicroLiter
|
||||
}
|
||||
|
||||
fun getDeliveryRate(): Short {
|
||||
return pumpRate
|
||||
}
|
||||
|
||||
fun getPrimeRate(): Short {
|
||||
return primePumpRate
|
||||
}
|
||||
|
||||
fun getNumberOfEngagingClutchDrivePulses(): Short {
|
||||
return numberOfEngagingClutchDrivePulses
|
||||
}
|
||||
|
||||
fun getNumberOfPrimePulses(): Short {
|
||||
return numberOfPrimePulses
|
||||
}
|
||||
|
||||
fun getPodExpirationTimeInHours(): Short {
|
||||
return podExpirationTimeInHours
|
||||
}
|
||||
|
||||
fun getFirmwareVersionMajor(): Short {
|
||||
return firmwareVersionMajor
|
||||
}
|
||||
|
||||
fun getFirmwareVersionMinor(): Short {
|
||||
return firmwareVersionMinor
|
||||
}
|
||||
|
||||
fun getFirmwareVersionInterim(): Short {
|
||||
return firmwareVersionInterim
|
||||
}
|
||||
|
||||
fun getBleVersionMajor(): Short {
|
||||
return bleVersionMajor
|
||||
}
|
||||
|
||||
fun getBleVersionMinor(): Short {
|
||||
return bleVersionMinor
|
||||
}
|
||||
|
||||
fun getBleVersionInterim(): Short {
|
||||
return bleVersionInterim
|
||||
}
|
||||
|
||||
fun getProductId(): Short {
|
||||
return productId
|
||||
}
|
||||
|
||||
fun getPodStatus(): PodStatus {
|
||||
return podStatus
|
||||
}
|
||||
|
||||
fun getLotNumber(): Long {
|
||||
return lotNumber
|
||||
}
|
||||
|
||||
fun getPodSequenceNumber(): Long {
|
||||
return podSequenceNumber
|
||||
}
|
||||
|
||||
fun getUniqueIdReceivedInCommand(): Long {
|
||||
return uniqueIdReceivedInCommand
|
||||
}
|
||||
val messageType: Byte = encoded[0]
|
||||
val messageLength: Short = (encoded[1].toInt() and 0xff).toShort()
|
||||
val pulseVolumeInTenThousandthMicroLiter: Short = ByteBuffer.wrap(byteArrayOf(encoded[2], encoded[3])).short
|
||||
val pumpRate: Short = (encoded[4].toInt() and 0xff).toShort()
|
||||
val primePumpRate: Short = (encoded[5].toInt() and 0xff).toShort()
|
||||
val numberOfEngagingClutchDrivePulses: Short = (encoded[6].toInt() and 0xff).toShort()
|
||||
val numberOfPrimePulses: Short = (encoded[7].toInt() and 0xff).toShort()
|
||||
val podExpirationTimeInHours: Short = (encoded[8].toInt() and 0xff).toShort()
|
||||
val firmwareVersionMajor: Short = (encoded[9].toInt() and 0xff).toShort()
|
||||
val firmwareVersionMinor: Short = (encoded[10].toInt() and 0xff).toShort()
|
||||
val firmwareVersionInterim: Short = (encoded[11].toInt() and 0xff).toShort()
|
||||
val bleVersionMajor: Short = (encoded[12].toInt() and 0xff).toShort()
|
||||
val bleVersionMinor: Short = (encoded[13].toInt() and 0xff).toShort()
|
||||
val bleVersionInterim: Short = (encoded[14].toInt() and 0xff).toShort()
|
||||
val productId: Short = (encoded[15].toInt() and 0xff).toShort()
|
||||
val podStatus: PodStatus = byValue(encoded[16], PodStatus.UNKNOWN)
|
||||
val lotNumber: Long = ByteBuffer.wrap(byteArrayOf(0, 0, 0, 0, encoded[17], encoded[18], encoded[19], encoded[20])).long
|
||||
val podSequenceNumber: Long = ByteBuffer.wrap(byteArrayOf(0, 0, 0, 0, encoded[21], encoded[22], encoded[23], encoded[24])).long
|
||||
val uniqueIdReceivedInCommand: Long = ByteBuffer.wrap(byteArrayOf(0, 0, 0, 0, encoded[25], encoded[26], encoded[27], encoded[28])).long
|
||||
|
||||
override fun toString(): String {
|
||||
return "SetUniqueIdResponse{" +
|
||||
|
@ -132,25 +56,4 @@ class SetUniqueIdResponse(
|
|||
'}'
|
||||
}
|
||||
|
||||
init {
|
||||
messageType = encoded[0]
|
||||
messageLength = (encoded[1].toInt() and 0xff).toShort()
|
||||
pulseVolumeInTenThousandthMicroLiter = ByteBuffer.wrap(byteArrayOf(encoded[2], encoded[3])).short
|
||||
pumpRate = (encoded[4].toInt() and 0xff).toShort()
|
||||
primePumpRate = (encoded[5].toInt() and 0xff).toShort()
|
||||
numberOfEngagingClutchDrivePulses = (encoded[6].toInt() and 0xff).toShort()
|
||||
numberOfPrimePulses = (encoded[7].toInt() and 0xff).toShort()
|
||||
podExpirationTimeInHours = (encoded[8].toInt() and 0xff).toShort()
|
||||
firmwareVersionMajor = (encoded[9].toInt() and 0xff).toShort()
|
||||
firmwareVersionMinor = (encoded[10].toInt() and 0xff).toShort()
|
||||
firmwareVersionInterim = (encoded[11].toInt() and 0xff).toShort()
|
||||
bleVersionMajor = (encoded[12].toInt() and 0xff).toShort()
|
||||
bleVersionMinor = (encoded[13].toInt() and 0xff).toShort()
|
||||
bleVersionInterim = (encoded[14].toInt() and 0xff).toShort()
|
||||
productId = (encoded[15].toInt() and 0xff).toShort()
|
||||
podStatus = byValue(encoded[16], PodStatus.UNKNOWN)
|
||||
lotNumber = ByteBuffer.wrap(byteArrayOf(0, 0, 0, 0, encoded[17], encoded[18], encoded[19], encoded[20])).long
|
||||
podSequenceNumber = ByteBuffer.wrap(byteArrayOf(0, 0, 0, 0, encoded[21], encoded[22], encoded[23], encoded[24])).long
|
||||
uniqueIdReceivedInCommand = ByteBuffer.wrap(byteArrayOf(0, 0, 0, 0, encoded[25], encoded[26], encoded[27], encoded[28])).long
|
||||
}
|
||||
}
|
|
@ -11,81 +11,21 @@ class VersionResponse(
|
|||
encoded: ByteArray
|
||||
) : ActivationResponseBase(ActivationResponseType.GET_VERSION_RESPONSE, encoded) {
|
||||
|
||||
private val messageType: Byte = encoded[0]
|
||||
private val messageLength: Short = (encoded[1].toInt() and 0xff).toShort()
|
||||
private val firmwareVersionMajor: Short = (encoded[2].toInt() and 0xff).toShort()
|
||||
private val firmwareVersionMinor: Short = (encoded[3].toInt() and 0xff).toShort()
|
||||
private val firmwareVersionInterim: Short = (encoded[4].toInt() and 0xff).toShort()
|
||||
private val bleVersionMajor: Short = (encoded[5].toInt() and 0xff).toShort()
|
||||
private val bleVersionMinor: Short = (encoded[6].toInt() and 0xff).toShort()
|
||||
private val bleVersionInterim: Short = (encoded[7].toInt() and 0xff).toShort()
|
||||
private val productId: Short = (encoded[8].toInt() and 0xff).toShort()
|
||||
private val podStatus: PodStatus = byValue((encoded[9] and 0xf), PodStatus.UNKNOWN)
|
||||
private val lotNumber: Long = ByteBuffer.wrap(byteArrayOf(0, 0, 0, 0, encoded[10], encoded[11], encoded[12], encoded[13])).long
|
||||
private val podSequenceNumber: Long = ByteBuffer.wrap(byteArrayOf(0, 0, 0, 0, encoded[14], encoded[15], encoded[16], encoded[17])).long
|
||||
private val rssi: Byte = (encoded[18] and 0x3f)
|
||||
private val receiverLowerGain: Byte = ((encoded[18].toInt() shr 6 and 0x03).toByte())
|
||||
private val uniqueIdReceivedInCommand: Long = ByteBuffer.wrap(byteArrayOf(0, 0, 0, 0, encoded[19], encoded[20], encoded[21], encoded[22])).long
|
||||
|
||||
fun getMessageType(): Byte {
|
||||
return messageType
|
||||
}
|
||||
|
||||
fun getMessageLength(): Short {
|
||||
return messageLength
|
||||
}
|
||||
|
||||
fun getFirmwareVersionMajor(): Short {
|
||||
return firmwareVersionMajor
|
||||
}
|
||||
|
||||
fun getFirmwareVersionMinor(): Short {
|
||||
return firmwareVersionMinor
|
||||
}
|
||||
|
||||
fun getFirmwareVersionInterim(): Short {
|
||||
return firmwareVersionInterim
|
||||
}
|
||||
|
||||
fun getBleVersionMajor(): Short {
|
||||
return bleVersionMajor
|
||||
}
|
||||
|
||||
fun getBleVersionMinor(): Short {
|
||||
return bleVersionMinor
|
||||
}
|
||||
|
||||
fun getBleVersionInterim(): Short {
|
||||
return bleVersionInterim
|
||||
}
|
||||
|
||||
fun getProductId(): Short {
|
||||
return productId
|
||||
}
|
||||
|
||||
fun getPodStatus(): PodStatus {
|
||||
return podStatus
|
||||
}
|
||||
|
||||
fun getLotNumber(): Long {
|
||||
return lotNumber
|
||||
}
|
||||
|
||||
fun getPodSequenceNumber(): Long {
|
||||
return podSequenceNumber
|
||||
}
|
||||
|
||||
fun getRssi(): Byte {
|
||||
return rssi
|
||||
}
|
||||
|
||||
fun getReceiverLowerGain(): Byte {
|
||||
return receiverLowerGain
|
||||
}
|
||||
|
||||
fun getUniqueIdReceivedInCommand(): Long {
|
||||
return uniqueIdReceivedInCommand
|
||||
}
|
||||
val messageType: Byte = encoded[0]
|
||||
val messageLength: Short = (encoded[1].toInt() and 0xff).toShort()
|
||||
val firmwareVersionMajor: Short = (encoded[2].toInt() and 0xff).toShort()
|
||||
val firmwareVersionMinor: Short = (encoded[3].toInt() and 0xff).toShort()
|
||||
val firmwareVersionInterim: Short = (encoded[4].toInt() and 0xff).toShort()
|
||||
val bleVersionMajor: Short = (encoded[5].toInt() and 0xff).toShort()
|
||||
val bleVersionMinor: Short = (encoded[6].toInt() and 0xff).toShort()
|
||||
val bleVersionInterim: Short = (encoded[7].toInt() and 0xff).toShort()
|
||||
val productId: Short = (encoded[8].toInt() and 0xff).toShort()
|
||||
val podStatus: PodStatus = byValue((encoded[9] and 0xf), PodStatus.UNKNOWN)
|
||||
val lotNumber: Long = ByteBuffer.wrap(byteArrayOf(0, 0, 0, 0, encoded[10], encoded[11], encoded[12], encoded[13])).long
|
||||
val podSequenceNumber: Long = ByteBuffer.wrap(byteArrayOf(0, 0, 0, 0, encoded[14], encoded[15], encoded[16], encoded[17])).long
|
||||
val rssi: Byte = (encoded[18] and 0x3f)
|
||||
val receiverLowerGain: Byte = ((encoded[18].toInt() shr 6 and 0x03).toByte())
|
||||
val uniqueIdReceivedInCommand: Long = ByteBuffer.wrap(byteArrayOf(0, 0, 0, 0, encoded[19], encoded[20], encoded[21], encoded[22])).long
|
||||
|
||||
override fun toString(): String {
|
||||
return "VersionResponse{" +
|
||||
|
|
|
@ -36,14 +36,18 @@ class OmnipodDashPodStateManagerImpl @Inject constructor(
|
|||
|
||||
// TODO: dynamic get() fun instead of assignment
|
||||
|
||||
override val isUniqueIdSet: Boolean = activationProgress.isAtLeast(ActivationProgress.SET_UNIQUE_ID)
|
||||
override val isUniqueIdSet: Boolean
|
||||
get() = activationProgress.isAtLeast(ActivationProgress.SET_UNIQUE_ID)
|
||||
|
||||
override val isActivationCompleted: Boolean = activationProgress == ActivationProgress.COMPLETED
|
||||
override val isActivationCompleted: Boolean
|
||||
get() = activationProgress == ActivationProgress.COMPLETED
|
||||
|
||||
override val isSuspended: Boolean = podState.deliveryStatus?.equals(DeliveryStatus.SUSPENDED)
|
||||
?: true
|
||||
override val isSuspended: Boolean
|
||||
get() = podState.deliveryStatus?.equals(DeliveryStatus.SUSPENDED)
|
||||
?: true
|
||||
|
||||
override val isPodRunning: Boolean = podState.podStatus?.isRunning() ?: false
|
||||
override val isPodRunning: Boolean
|
||||
get() = podState.podStatus?.isRunning() ?: false
|
||||
|
||||
override var lastConnection: Long
|
||||
get() = podState.lastConnection
|
||||
|
@ -52,54 +56,77 @@ class OmnipodDashPodStateManagerImpl @Inject constructor(
|
|||
store()
|
||||
}
|
||||
|
||||
override val lastUpdated: Long = podState.lastUpdated
|
||||
override val lastUpdated: Long
|
||||
get() = podState.lastUpdated
|
||||
|
||||
override val messageSequenceNumber: Short = podState.messageSequenceNumber
|
||||
override val messageSequenceNumber: Short
|
||||
get() = podState.messageSequenceNumber
|
||||
|
||||
override val sequenceNumberOfLastProgrammingCommand: Short? = podState.sequenceNumberOfLastProgrammingCommand
|
||||
override val sequenceNumberOfLastProgrammingCommand: Short?
|
||||
get() = podState.sequenceNumberOfLastProgrammingCommand
|
||||
|
||||
override val activationTime: Long? = podState.activationTime
|
||||
override val activationTime: Long?
|
||||
get() = podState.activationTime
|
||||
|
||||
override val uniqueId: Long? = podState.uniqueId
|
||||
override val uniqueId: Long?
|
||||
get() = podState.uniqueId
|
||||
|
||||
override val bluetoothAddress: String? = podState.bluetoothAddress
|
||||
override val bluetoothAddress: String?
|
||||
get() = podState.bluetoothAddress
|
||||
|
||||
override val bluetoothVersion: SoftwareVersion? = podState.bleVersion
|
||||
override val bluetoothVersion: SoftwareVersion?
|
||||
get() = podState.bleVersion
|
||||
|
||||
override val firmwareVersion: SoftwareVersion? = podState.firmwareVersion
|
||||
override val firmwareVersion: SoftwareVersion?
|
||||
get() = podState.firmwareVersion
|
||||
|
||||
override val lotNumber: Long? = podState.lotNumber
|
||||
override val lotNumber: Long?
|
||||
get() = podState.lotNumber
|
||||
|
||||
override val podSequenceNumber: Long? = podState.podSequenceNumber
|
||||
override val podSequenceNumber: Long?
|
||||
get() = podState.podSequenceNumber
|
||||
|
||||
override val pulseRate: Short? = podState.pulseRate
|
||||
override val pulseRate: Short?
|
||||
get() = podState.pulseRate
|
||||
|
||||
override val primePulseRate: Short? = podState.primePulseRate
|
||||
override val primePulseRate: Short?
|
||||
get() = podState.primePulseRate
|
||||
|
||||
override val podLifeInHours: Short? = podState.podLifeInHours
|
||||
override val podLifeInHours: Short?
|
||||
get() = podState.podLifeInHours
|
||||
|
||||
override val firstPrimeBolusVolume: Short? = podState.firstPrimeBolusVolume
|
||||
override val firstPrimeBolusVolume: Short?
|
||||
get() = podState.firstPrimeBolusVolume
|
||||
|
||||
override val secondPrimeBolusVolume: Short? = podState.secondPrimeBolusVolume
|
||||
override val secondPrimeBolusVolume: Short?
|
||||
get() = podState.secondPrimeBolusVolume
|
||||
|
||||
override val pulsesDelivered: Short? = podState.pulsesDelivered
|
||||
override val pulsesDelivered: Short?
|
||||
get() = podState.pulsesDelivered
|
||||
|
||||
override val pulsesRemaining: Short? = podState.pulsesRemaining
|
||||
override val pulsesRemaining: Short?
|
||||
get() = podState.pulsesRemaining
|
||||
|
||||
override val podStatus: PodStatus? = podState.podStatus
|
||||
override val podStatus: PodStatus?
|
||||
get() = podState.podStatus
|
||||
|
||||
override val deliveryStatus: DeliveryStatus? = podState.deliveryStatus
|
||||
override val deliveryStatus: DeliveryStatus?
|
||||
get() = podState.deliveryStatus
|
||||
|
||||
override val minutesSinceActivation: Short? = podState.minutesSinceActivation
|
||||
override val minutesSinceActivation: Short?
|
||||
get() = podState.minutesSinceActivation
|
||||
|
||||
override val activeAlerts: EnumSet<AlertSlot>? = podState.activeAlerts
|
||||
override val activeAlerts: EnumSet<AlertSlot>?
|
||||
get() = podState.activeAlerts
|
||||
|
||||
override val tempBasal: OmnipodDashPodStateManager.TempBasal? = podState.tempBasal
|
||||
override val tempBasal: OmnipodDashPodStateManager.TempBasal?
|
||||
get() = podState.tempBasal
|
||||
|
||||
override val tempBasalActive: Boolean
|
||||
get() = tempBasal != null && tempBasal.startTime + tempBasal.durationInMinutes * 60 * 1000 > System.currentTimeMillis()
|
||||
get() = tempBasal != null && tempBasal!!.startTime + tempBasal!!.durationInMinutes * 60 * 1000 > System.currentTimeMillis()
|
||||
|
||||
override val basalProgram: BasalProgram? = podState.basalProgram
|
||||
override val basalProgram: BasalProgram?
|
||||
get() = podState.basalProgram
|
||||
|
||||
override fun increaseMessageSequenceNumber() {
|
||||
podState.messageSequenceNumber = ((podState.messageSequenceNumber.toInt() + 1) and 0x0f).toShort()
|
||||
|
@ -121,28 +148,28 @@ class OmnipodDashPodStateManagerImpl @Inject constructor(
|
|||
}
|
||||
|
||||
override fun updateFromVersionResponse(response: VersionResponse) {
|
||||
podState.bleVersion = SoftwareVersion(response.getBleVersionMajor(), response.getBleVersionMinor(), response.getBleVersionInterim())
|
||||
podState.firmwareVersion = SoftwareVersion(response.getFirmwareVersionMajor(), response.getFirmwareVersionMinor(), response.getFirmwareVersionInterim())
|
||||
podState.podStatus = response.getPodStatus()
|
||||
podState.lotNumber = response.getLotNumber()
|
||||
podState.podSequenceNumber = response.getPodSequenceNumber()
|
||||
podState.bleVersion = SoftwareVersion(response.bleVersionMajor, response.bleVersionMinor, response.bleVersionInterim)
|
||||
podState.firmwareVersion = SoftwareVersion(response.firmwareVersionMajor, response.firmwareVersionMinor, response.firmwareVersionInterim)
|
||||
podState.podStatus = response.podStatus
|
||||
podState.lotNumber = response.lotNumber
|
||||
podState.podSequenceNumber = response.podSequenceNumber
|
||||
|
||||
podState.lastUpdated = System.currentTimeMillis()
|
||||
store()
|
||||
}
|
||||
|
||||
override fun updateFromSetUniqueIdResponse(response: SetUniqueIdResponse) {
|
||||
podState.pulseRate = response.getDeliveryRate()
|
||||
podState.primePulseRate = response.getPrimeRate()
|
||||
podState.firstPrimeBolusVolume = response.getNumberOfPrimePulses()
|
||||
podState.secondPrimeBolusVolume = response.getNumberOfEngagingClutchDrivePulses()
|
||||
podState.podLifeInHours = response.getPodExpirationTimeInHours()
|
||||
podState.bleVersion = SoftwareVersion(response.getBleVersionMajor(), response.getBleVersionMinor(), response.getBleVersionInterim())
|
||||
podState.firmwareVersion = SoftwareVersion(response.getFirmwareVersionMajor(), response.getFirmwareVersionMinor(), response.getFirmwareVersionInterim())
|
||||
podState.podStatus = response.getPodStatus()
|
||||
podState.lotNumber = response.getLotNumber()
|
||||
podState.podSequenceNumber = response.getPodSequenceNumber()
|
||||
podState.uniqueId = response.getUniqueIdReceivedInCommand()
|
||||
podState.pulseRate = response.pumpRate
|
||||
podState.primePulseRate = response.primePumpRate
|
||||
podState.firstPrimeBolusVolume = response.numberOfPrimePulses
|
||||
podState.secondPrimeBolusVolume = response.numberOfEngagingClutchDrivePulses
|
||||
podState.podLifeInHours = response.podExpirationTimeInHours
|
||||
podState.bleVersion = SoftwareVersion(response.bleVersionMajor, response.bleVersionMinor, response.bleVersionInterim)
|
||||
podState.firmwareVersion = SoftwareVersion(response.firmwareVersionMajor, response.firmwareVersionMinor, response.firmwareVersionInterim)
|
||||
podState.podStatus = response.podStatus
|
||||
podState.lotNumber = response.lotNumber
|
||||
podState.podSequenceNumber = response.podSequenceNumber
|
||||
podState.uniqueId = response.uniqueIdReceivedInCommand
|
||||
|
||||
podState.lastUpdated = System.currentTimeMillis()
|
||||
store()
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
package info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.pod.response
|
||||
|
||||
import info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.pod.definition.PodStatus
|
||||
import info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.pod.response.ResponseType
|
||||
import org.apache.commons.codec.DecoderException
|
||||
import org.apache.commons.codec.binary.Hex
|
||||
import org.junit.Assert
|
||||
|
@ -17,24 +16,24 @@ class SetUniqueIdResponseTest {
|
|||
Assert.assertNotSame(encoded, response.encoded)
|
||||
Assert.assertEquals(ResponseType.ACTIVATION_RESPONSE, response.responseType)
|
||||
Assert.assertEquals(ResponseType.ActivationResponseType.SET_UNIQUE_ID_RESPONSE, response.activationResponseType)
|
||||
Assert.assertEquals(ResponseType.ACTIVATION_RESPONSE.value, response.getMessageType())
|
||||
Assert.assertEquals(27.toShort(), response.getMessageLength())
|
||||
Assert.assertEquals(5000.toShort(), response.getPulseVolumeInTenThousandthMicroLiter())
|
||||
Assert.assertEquals(16.toShort(), response.getDeliveryRate())
|
||||
Assert.assertEquals(8.toShort(), response.getPrimeRate())
|
||||
Assert.assertEquals(52.toShort(), response.getNumberOfEngagingClutchDrivePulses())
|
||||
Assert.assertEquals(10.toShort(), response.getNumberOfPrimePulses())
|
||||
Assert.assertEquals(80.toShort(), response.getPodExpirationTimeInHours())
|
||||
Assert.assertEquals(4.toShort(), response.getFirmwareVersionMajor())
|
||||
Assert.assertEquals(10.toShort(), response.getFirmwareVersionMinor())
|
||||
Assert.assertEquals(0.toShort(), response.getFirmwareVersionInterim())
|
||||
Assert.assertEquals(1.toShort(), response.getBleVersionMajor())
|
||||
Assert.assertEquals(3.toShort(), response.getBleVersionMinor())
|
||||
Assert.assertEquals(0.toShort(), response.getBleVersionInterim())
|
||||
Assert.assertEquals(4.toShort(), response.getProductId())
|
||||
Assert.assertEquals(PodStatus.UID_SET, response.getPodStatus())
|
||||
Assert.assertEquals(135556289L, response.getLotNumber())
|
||||
Assert.assertEquals(611540L, response.getPodSequenceNumber())
|
||||
Assert.assertEquals(37879809L, response.getUniqueIdReceivedInCommand())
|
||||
Assert.assertEquals(ResponseType.ACTIVATION_RESPONSE.value, response.messageType)
|
||||
Assert.assertEquals(27.toShort(), response.messageLength)
|
||||
Assert.assertEquals(5000.toShort(), response.pulseVolumeInTenThousandthMicroLiter)
|
||||
Assert.assertEquals(16.toShort(), response.pumpRate)
|
||||
Assert.assertEquals(8.toShort(), response.primePumpRate)
|
||||
Assert.assertEquals(52.toShort(), response.numberOfEngagingClutchDrivePulses)
|
||||
Assert.assertEquals(10.toShort(), response.numberOfPrimePulses)
|
||||
Assert.assertEquals(80.toShort(), response.podExpirationTimeInHours)
|
||||
Assert.assertEquals(4.toShort(), response.firmwareVersionMajor)
|
||||
Assert.assertEquals(10.toShort(), response.firmwareVersionMinor)
|
||||
Assert.assertEquals(0.toShort(), response.firmwareVersionInterim)
|
||||
Assert.assertEquals(1.toShort(), response.bleVersionMajor)
|
||||
Assert.assertEquals(3.toShort(), response.bleVersionMinor)
|
||||
Assert.assertEquals(0.toShort(), response.bleVersionInterim)
|
||||
Assert.assertEquals(4.toShort(), response.productId)
|
||||
Assert.assertEquals(PodStatus.UID_SET, response.podStatus)
|
||||
Assert.assertEquals(135556289L, response.lotNumber)
|
||||
Assert.assertEquals(611540L, response.podSequenceNumber)
|
||||
Assert.assertEquals(37879809L, response.uniqueIdReceivedInCommand)
|
||||
}
|
||||
}
|
|
@ -1,7 +1,6 @@
|
|||
package info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.pod.response
|
||||
|
||||
import info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.pod.definition.PodStatus
|
||||
import info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.pod.response.ResponseType
|
||||
import org.apache.commons.codec.DecoderException
|
||||
import org.apache.commons.codec.binary.Hex
|
||||
import org.junit.Assert
|
||||
|
@ -17,20 +16,20 @@ class VersionResponseTest {
|
|||
Assert.assertNotSame(encoded, response.encoded)
|
||||
Assert.assertEquals(ResponseType.ACTIVATION_RESPONSE, response.responseType)
|
||||
Assert.assertEquals(ResponseType.ActivationResponseType.GET_VERSION_RESPONSE, response.activationResponseType)
|
||||
Assert.assertEquals(ResponseType.ACTIVATION_RESPONSE.value, response.getMessageType())
|
||||
Assert.assertEquals(21.toShort(), response.getMessageLength())
|
||||
Assert.assertEquals(4.toShort(), response.getFirmwareVersionMajor())
|
||||
Assert.assertEquals(10.toShort(), response.getFirmwareVersionMinor())
|
||||
Assert.assertEquals(0.toShort(), response.getFirmwareVersionInterim())
|
||||
Assert.assertEquals(1.toShort(), response.getBleVersionMajor())
|
||||
Assert.assertEquals(3.toShort(), response.getBleVersionMinor())
|
||||
Assert.assertEquals(0.toShort(), response.getBleVersionInterim())
|
||||
Assert.assertEquals(4.toShort(), response.getProductId())
|
||||
Assert.assertEquals(PodStatus.FILLED, response.getPodStatus())
|
||||
Assert.assertEquals(135556289L, response.getLotNumber())
|
||||
Assert.assertEquals(611540L, response.getPodSequenceNumber())
|
||||
Assert.assertEquals(0.toByte(), response.getRssi())
|
||||
Assert.assertEquals(0.toByte(), response.getReceiverLowerGain())
|
||||
Assert.assertEquals(4294967295L, response.getUniqueIdReceivedInCommand())
|
||||
Assert.assertEquals(ResponseType.ACTIVATION_RESPONSE.value, response.messageType)
|
||||
Assert.assertEquals(21.toShort(), response.messageLength)
|
||||
Assert.assertEquals(4.toShort(), response.firmwareVersionMajor)
|
||||
Assert.assertEquals(10.toShort(), response.firmwareVersionMinor)
|
||||
Assert.assertEquals(0.toShort(), response.firmwareVersionInterim)
|
||||
Assert.assertEquals(1.toShort(), response.bleVersionMajor)
|
||||
Assert.assertEquals(3.toShort(), response.bleVersionMinor)
|
||||
Assert.assertEquals(0.toShort(), response.bleVersionInterim)
|
||||
Assert.assertEquals(4.toShort(), response.productId)
|
||||
Assert.assertEquals(PodStatus.FILLED, response.podStatus)
|
||||
Assert.assertEquals(135556289L, response.lotNumber)
|
||||
Assert.assertEquals(611540L, response.podSequenceNumber)
|
||||
Assert.assertEquals(0.toByte(), response.rssi)
|
||||
Assert.assertEquals(0.toByte(), response.receiverLowerGain)
|
||||
Assert.assertEquals(4294967295L, response.uniqueIdReceivedInCommand)
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue