format, cleanups

This commit is contained in:
Andrei Vereha 2021-02-26 17:00:36 +01:00
parent badf8fe24d
commit 4664d21ddf
12 changed files with 39 additions and 44 deletions

View file

@ -95,7 +95,7 @@ class OmnipodDashBleManagerImpl @Inject constructor(private val context: Context
companion object { companion object {
private const val CONNECT_TIMEOUT_MS = 5000 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.
} }
} }

View file

@ -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 val dataChar = service.getCharacteristic(CharacteristicType.DATA.uuid) // TODO: this is never used
?: throw CharacteristicNotFoundException(CharacteristicType.DATA.value) ?: throw CharacteristicNotFoundException(CharacteristicType.DATA.value)
var chars = mapOf(CharacteristicType.CMD to cmdChar, var chars = mapOf(CharacteristicType.CMD to cmdChar,
CharacteristicType.DATA to dataChar) CharacteristicType.DATA to dataChar)
return chars return chars
} }
private fun String.toUuid(): UUID = UUID( private fun String.toUuid(): UUID = UUID(
BigInteger(replace("-", "").substring(0, 16), 16).toLong(), BigInteger(replace("-", "").substring(0, 16), 16).toLong(),
BigInteger(replace("-", "").substring(16), 16).toLong() BigInteger(replace("-", "").substring(16), 16).toLong()
) )
companion object { companion object {
private const val SERVICE_UUID = "1a7e-4024-e3ed-4464-8b7e-751e03d0dc5f" private const val SERVICE_UUID = "1a7e-4024-e3ed-4464-8b7e-751e03d0dc5f"
private const val DISCOVER_SERVICES_TIMEOUT_MS = 5000 private const val DISCOVER_SERVICES_TIMEOUT_MS = 5000
} }

View file

@ -1,12 +1,8 @@
package info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.comm.ltk 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) { data class LTK(val ltk: ByteArray, val noncePrefix: ByteArray) {
init { init {
require(ltk.size == 16) require(ltk.size == 16)
require(noncePrefix.size == 16) require(noncePrefix.size == 16)
} }
} }

View file

@ -10,11 +10,11 @@ data class PairMessage(
val destination: Id, val destination: Id,
val payload: ByteArray, val payload: ByteArray,
val messagePacket: MessagePacket = MessagePacket( val messagePacket: MessagePacket = MessagePacket(
type=MessageType.PAIRING, type = MessageType.PAIRING,
source=source, source = source,
destination = destination, destination = destination,
payload=payload, payload = payload,
sequenceNumber=sequenceNumber, sequenceNumber = sequenceNumber,
sas=true, // TODO: understand why this is true for PairMessages sas = true, // TODO: understand why this is true for PairMessages
), ),
) {} )

View file

@ -1,9 +0,0 @@
package info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.comm.message
interface Message {
/**
*
*/
fun messagePacket(): MessagePacket
}

View file

@ -4,8 +4,11 @@ import info.nightscout.androidaps.logging.AAPSLogger
import info.nightscout.androidaps.logging.LTag 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.command.*
import info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.comm.exceptions.UnexpectedCommandException 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.BleIO
import info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.comm.io.PayloadSplitter 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 import info.nightscout.androidaps.utils.extensions.toHex
class MessageIO(private val aapsLogger: AAPSLogger, private val bleIO: BleIO) { 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()) { val finalCmd = when (joiner.finalize()) {
is PayloadJoinerActionAccept -> BleCommandSuccess() is PayloadJoinerActionAccept -> BleCommandSuccess()
is PayloadJoinerActionReject -> BleCommandFail() is PayloadJoinerActionReject -> BleCommandFail()
} }
bleIO.sendAndConfirmPacket(CharacteristicType.CMD, finalCmd.data) bleIO.sendAndConfirmPacket(CharacteristicType.CMD, finalCmd.data)

View file

@ -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) { fun set(idx: Byte, set: Boolean) {
val mask = 1 shl (7 - idx) val mask = 1 shl (7 - idx)

View file

@ -7,8 +7,9 @@ enum class MessageType(val value: Byte) {
PAIRING(3); PAIRING(3);
companion object { companion object {
fun byValue(value: Byte): MessageType = fun byValue(value: Byte): MessageType =
MessageType.values().firstOrNull() {it.value == value} MessageType.values().firstOrNull { it.value == value }
?: throw IllegalArgumentException("Unknown MessageType: $value") ?: throw IllegalArgumentException("Unknown MessageType: $value")
} }
} }

View file

@ -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.BlePacket
import info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.comm.packet.FirstBlePacket 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 import java.util.zip.CRC32
internal class PayloadSplitter(private val payload: ByteArray) { internal class PayloadSplitter(private val payload: ByteArray) {
fun splitInPackets(): List<BlePacket> { fun splitInPackets(): List<BlePacket> {
val ret = ArrayList<BlePacket>() val ret = ArrayList<BlePacket>()
val crc32 = payload.crc32(); val crc32 = payload.crc32()
if (payload.size <= 18) { if (payload.size <= 18) {
val end = min(14, payload.size) val end = min(14, payload.size)
ret.add(FirstBlePacket( ret.add(FirstBlePacket(
totalFragments = 0, totalFragments = 0,
payload = payload.copyOfRange(0, end), payload = payload.copyOfRange(0, end),
size = payload.size.toByte(), size = payload.size.toByte(),
crc32 = crc32, crc32 = crc32,
)) ))
if (payload.size > 14) { if (payload.size > 14) {
ret.add(LastOptionalPlusOneBlePacket( ret.add(LastOptionalPlusOneBlePacket(
@ -26,19 +27,19 @@ internal class PayloadSplitter(private val payload: ByteArray) {
payload = payload.copyOfRange(end, payload.size), 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() val rest = ((payload.size - middleFragments.toInt() * 19) - 18).toByte()
ret.add(FirstBlePacket( ret.add(FirstBlePacket(
totalFragments = (middleFragments + 1).toByte(), totalFragments = (middleFragments + 1).toByte(),
payload = payload.copyOfRange(0, 18), payload = payload.copyOfRange(0, 18),
)) ))
for( i in 1..middleFragments ) { for (i in 1..middleFragments) {
val p = if (i ==1 ) { val p = if (i == 1) {
payload.copyOfRange(18,37) payload.copyOfRange(18, 37)
}else { } else {
payload.copyOfRange((i-1)*19+18, (i-1)*19+18+19) payload.copyOfRange((i - 1) * 19 + 18, (i - 1) * 19 + 18 + 19)
} }
ret.add(MiddleBlePacket( ret.add(MiddleBlePacket(
index = i.toByte(), index = i.toByte(),
@ -47,18 +48,18 @@ internal class PayloadSplitter(private val payload: ByteArray) {
} }
val end = min(14, rest.toInt()) val end = min(14, rest.toInt())
ret.add(LastBlePacket( ret.add(LastBlePacket(
index = (middleFragments+1).toByte(), index = (middleFragments + 1).toByte(),
size = rest, size = rest,
payload = payload.copyOfRange(middleFragments*19+18,middleFragments*19+18+end), payload = payload.copyOfRange(middleFragments * 19 + 18, middleFragments * 19 + 18 + end),
crc32 = crc32, crc32 = crc32,
)) ))
if (rest > 14) { if (rest > 14) {
ret.add(LastOptionalPlusOneBlePacket( ret.add(LastOptionalPlusOneBlePacket(
index = (middleFragments+2).toByte(), index = (middleFragments + 2).toByte(),
payload = payload.copyOfRange(middleFragments*19+18+14, payload.size), payload = payload.copyOfRange(middleFragments * 19 + 18 + 14, payload.size),
)) ))
} }
return ret; return ret
} }
} }

View file

@ -7,6 +7,7 @@ sealed class BlePacket {
abstract fun asByteArray(): ByteArray abstract fun asByteArray(): ByteArray
companion object { companion object {
const val MAX_BLE_PACKET_LEN = 30 // we use this as the size allocated for the ByteBuffer const val MAX_BLE_PACKET_LEN = 30 // we use this as the size allocated for the ByteBuffer
} }
} }

View file

@ -9,6 +9,7 @@ class BleDiscoveredDevice(val scanResult: ScanResult, private val scanRecord: Sc
private val sequenceNo: Int private val sequenceNo: Int
private val lotNo: Long private val lotNo: Long
@Throws(DiscoveredInvalidPodException::class) @Throws(DiscoveredInvalidPodException::class)
private fun validateServiceUUIDs() { private fun validateServiceUUIDs() {
val serviceUuids = scanRecord.serviceUuids val serviceUuids = scanRecord.serviceUuids
@ -65,7 +66,8 @@ class BleDiscoveredDevice(val scanResult: ScanResult, private val scanRecord: Sc
} }
companion object { 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? const val UNKNOWN_THIRD_SERVICE_UUID = "000a" // FIXME: why is this 000a?
private fun extractUUID16(uuid: ParcelUuid): String { private fun extractUUID16(uuid: ParcelUuid): String {
return uuid.toString().substring(4, 8) return uuid.toString().substring(4, 8)