diff --git a/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/OmnipodDashBleManagerImpl.kt b/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/OmnipodDashBleManagerImpl.kt index 00f440ac73..243cb0f59b 100644 --- a/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/OmnipodDashBleManagerImpl.kt +++ b/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/OmnipodDashBleManagerImpl.kt @@ -95,7 +95,7 @@ class OmnipodDashBleManagerImpl @Inject constructor(private val context: Context companion object { private const val CONNECT_TIMEOUT_MS = 5000 - public const val CONTROLLER_ID = 4242 // TODO read from preferences or somewhere else. + const val CONTROLLER_ID = 4242 // TODO read from preferences or somewhere else. } } \ No newline at end of file diff --git a/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/ServiceDiscoverer.kt b/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/ServiceDiscoverer.kt index a86173507f..8ebde34478 100644 --- a/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/ServiceDiscoverer.kt +++ b/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/ServiceDiscoverer.kt @@ -30,17 +30,17 @@ class ServiceDiscoverer(private val logger: AAPSLogger, private val gatt: Blueto val dataChar = service.getCharacteristic(CharacteristicType.DATA.uuid) // TODO: this is never used ?: throw CharacteristicNotFoundException(CharacteristicType.DATA.value) var chars = mapOf(CharacteristicType.CMD to cmdChar, - CharacteristicType.DATA to dataChar) + CharacteristicType.DATA to dataChar) return chars } - private fun String.toUuid(): UUID = UUID( BigInteger(replace("-", "").substring(0, 16), 16).toLong(), BigInteger(replace("-", "").substring(16), 16).toLong() ) companion object { + private const val SERVICE_UUID = "1a7e-4024-e3ed-4464-8b7e-751e03d0dc5f" private const val DISCOVER_SERVICES_TIMEOUT_MS = 5000 } diff --git a/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/ltk/LTK.kt b/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/ltk/LTK.kt index 1f83940f2e..407d00a289 100644 --- a/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/ltk/LTK.kt +++ b/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/ltk/LTK.kt @@ -1,12 +1,8 @@ package info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.comm.ltk -import info.nightscout.androidaps.logging.AAPSLogger -import info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.comm.io.BleIO - data class LTK(val ltk: ByteArray, val noncePrefix: ByteArray) { init { require(ltk.size == 16) require(noncePrefix.size == 16) } } - diff --git a/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/ltk/PairMessage.kt b/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/ltk/PairMessage.kt index 99466e3b4e..1879626479 100644 --- a/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/ltk/PairMessage.kt +++ b/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/ltk/PairMessage.kt @@ -10,11 +10,11 @@ data class PairMessage( val destination: Id, val payload: ByteArray, val messagePacket: MessagePacket = MessagePacket( - type=MessageType.PAIRING, - source=source, + type = MessageType.PAIRING, + source = source, destination = destination, - payload=payload, - sequenceNumber=sequenceNumber, - sas=true, // TODO: understand why this is true for PairMessages + payload = payload, + sequenceNumber = sequenceNumber, + sas = true, // TODO: understand why this is true for PairMessages ), -) {} \ No newline at end of file +) \ No newline at end of file diff --git a/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/message/Message.kt b/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/message/Message.kt deleted file mode 100644 index 8b157a4399..0000000000 --- a/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/message/Message.kt +++ /dev/null @@ -1,9 +0,0 @@ -package info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.comm.message - -interface Message { - - /** - * - */ - fun messagePacket(): MessagePacket -} \ No newline at end of file diff --git a/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/message/MessageIO.kt b/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/message/MessageIO.kt index d64d693edc..7f742a4aca 100644 --- a/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/message/MessageIO.kt +++ b/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/message/MessageIO.kt @@ -4,8 +4,11 @@ import info.nightscout.androidaps.logging.AAPSLogger import info.nightscout.androidaps.logging.LTag import info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.comm.command.* import info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.comm.exceptions.UnexpectedCommandException -import info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.comm.io.* -import info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.comm.io.PayloadSplitter +import info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.comm.io.BleIO +import info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.comm.io.CharacteristicType +import info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.comm.io.PayloadJoiner +import info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.comm.io.PayloadJoinerActionAccept +import info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.comm.io.PayloadJoinerActionReject import info.nightscout.androidaps.utils.extensions.toHex class MessageIO(private val aapsLogger: AAPSLogger, private val bleIO: BleIO) { @@ -57,7 +60,7 @@ class MessageIO(private val aapsLogger: AAPSLogger, private val bleIO: BleIO) { } } val finalCmd = when (joiner.finalize()) { - is PayloadJoinerActionAccept -> BleCommandSuccess() + is PayloadJoinerActionAccept -> BleCommandSuccess() is PayloadJoinerActionReject -> BleCommandFail() } bleIO.sendAndConfirmPacket(CharacteristicType.CMD, finalCmd.data) diff --git a/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/message/MessagePacket.kt b/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/message/MessagePacket.kt index f18cbc9369..125219b866 100644 --- a/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/message/MessagePacket.kt +++ b/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/message/MessagePacket.kt @@ -75,7 +75,7 @@ data class MessagePacket( } } -private class Flag(var value: Int=0) { +private class Flag(var value: Int = 0) { fun set(idx: Byte, set: Boolean) { val mask = 1 shl (7 - idx) diff --git a/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/message/MessageType.kt b/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/message/MessageType.kt index f0a68e5cba..6d4ce0314f 100644 --- a/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/message/MessageType.kt +++ b/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/message/MessageType.kt @@ -7,8 +7,9 @@ enum class MessageType(val value: Byte) { PAIRING(3); companion object { + fun byValue(value: Byte): MessageType = - MessageType.values().firstOrNull() {it.value == value} + MessageType.values().firstOrNull { it.value == value } ?: throw IllegalArgumentException("Unknown MessageType: $value") } } \ No newline at end of file diff --git a/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/io/PayloadJoiner.kt b/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/message/PayloadJoiner.kt similarity index 100% rename from omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/io/PayloadJoiner.kt rename to omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/message/PayloadJoiner.kt diff --git a/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/io/PayloadSplitter.kt b/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/message/PayloadSplitter.kt similarity index 71% rename from omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/io/PayloadSplitter.kt rename to omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/message/PayloadSplitter.kt index 4257011fa5..8a5be5bafb 100644 --- a/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/io/PayloadSplitter.kt +++ b/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/message/PayloadSplitter.kt @@ -1,4 +1,4 @@ -package info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.comm.io +package info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.comm.message import info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.comm.packet.BlePacket import info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.comm.packet.FirstBlePacket @@ -9,16 +9,17 @@ import java.lang.Integer.min import java.util.zip.CRC32 internal class PayloadSplitter(private val payload: ByteArray) { + fun splitInPackets(): List<BlePacket> { val ret = ArrayList<BlePacket>() - val crc32 = payload.crc32(); + val crc32 = payload.crc32() if (payload.size <= 18) { val end = min(14, payload.size) ret.add(FirstBlePacket( totalFragments = 0, - payload = payload.copyOfRange(0, end), + payload = payload.copyOfRange(0, end), size = payload.size.toByte(), - crc32 = crc32, + crc32 = crc32, )) if (payload.size > 14) { ret.add(LastOptionalPlusOneBlePacket( @@ -26,19 +27,19 @@ internal class PayloadSplitter(private val payload: ByteArray) { payload = payload.copyOfRange(end, payload.size), )) } - return ret; + return ret } - val middleFragments = (payload.size-18)/19 + val middleFragments = (payload.size - 18) / 19 val rest = ((payload.size - middleFragments.toInt() * 19) - 18).toByte() ret.add(FirstBlePacket( totalFragments = (middleFragments + 1).toByte(), payload = payload.copyOfRange(0, 18), )) - for( i in 1..middleFragments ) { - val p = if (i ==1 ) { - payload.copyOfRange(18,37) - }else { - payload.copyOfRange((i-1)*19+18, (i-1)*19+18+19) + for (i in 1..middleFragments) { + val p = if (i == 1) { + payload.copyOfRange(18, 37) + } else { + payload.copyOfRange((i - 1) * 19 + 18, (i - 1) * 19 + 18 + 19) } ret.add(MiddleBlePacket( index = i.toByte(), @@ -47,18 +48,18 @@ internal class PayloadSplitter(private val payload: ByteArray) { } val end = min(14, rest.toInt()) ret.add(LastBlePacket( - index = (middleFragments+1).toByte(), + index = (middleFragments + 1).toByte(), size = rest, - payload = payload.copyOfRange(middleFragments*19+18,middleFragments*19+18+end), + payload = payload.copyOfRange(middleFragments * 19 + 18, middleFragments * 19 + 18 + end), crc32 = crc32, )) if (rest > 14) { ret.add(LastOptionalPlusOneBlePacket( - index = (middleFragments+2).toByte(), - payload = payload.copyOfRange(middleFragments*19+18+14, payload.size), + index = (middleFragments + 2).toByte(), + payload = payload.copyOfRange(middleFragments * 19 + 18 + 14, payload.size), )) } - return ret; + return ret } } diff --git a/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/packet/BlePacket.kt b/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/packet/BlePacket.kt index e517790bee..0c3fda1b8c 100644 --- a/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/packet/BlePacket.kt +++ b/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/packet/BlePacket.kt @@ -7,6 +7,7 @@ sealed class BlePacket { abstract fun asByteArray(): ByteArray companion object { + const val MAX_BLE_PACKET_LEN = 30 // we use this as the size allocated for the ByteBuffer } } diff --git a/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/scan/BleDiscoveredDevice.kt b/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/scan/BleDiscoveredDevice.kt index 88e4733eed..1b4a2cee2a 100644 --- a/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/scan/BleDiscoveredDevice.kt +++ b/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/scan/BleDiscoveredDevice.kt @@ -9,6 +9,7 @@ class BleDiscoveredDevice(val scanResult: ScanResult, private val scanRecord: Sc private val sequenceNo: Int private val lotNo: Long + @Throws(DiscoveredInvalidPodException::class) private fun validateServiceUUIDs() { val serviceUuids = scanRecord.serviceUuids @@ -65,7 +66,8 @@ class BleDiscoveredDevice(val scanResult: ScanResult, private val scanRecord: Sc } companion object { - const val MAIN_SERVICE_UUID = "4024"; + + const val MAIN_SERVICE_UUID = "4024" const val UNKNOWN_THIRD_SERVICE_UUID = "000a" // FIXME: why is this 000a? private fun extractUUID16(uuid: ParcelUuid): String { return uuid.toString().substring(4, 8)