format, cleanups
This commit is contained in:
parent
badf8fe24d
commit
4664d21ddf
12 changed files with 39 additions and 44 deletions
omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm
|
@ -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.
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
),
|
),
|
||||||
) {}
|
)
|
|
@ -1,9 +0,0 @@
|
||||||
package info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.comm.message
|
|
||||||
|
|
||||||
interface Message {
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
fun messagePacket(): MessagePacket
|
|
||||||
}
|
|
|
@ -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)
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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")
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Add table
Reference in a new issue