concurrency extension
This commit is contained in:
parent
295ae79d20
commit
58fe62c45a
3 changed files with 26 additions and 37 deletions
|
@ -19,15 +19,13 @@ import info.nightscout.androidaps.plugins.pump.danaRS.activities.EnterPinActivit
|
||||||
import info.nightscout.androidaps.plugins.pump.danaRS.activities.PairingHelperActivity
|
import info.nightscout.androidaps.plugins.pump.danaRS.activities.PairingHelperActivity
|
||||||
import info.nightscout.androidaps.plugins.pump.danaRS.comm.DanaRSMessageHashTable
|
import info.nightscout.androidaps.plugins.pump.danaRS.comm.DanaRSMessageHashTable
|
||||||
import info.nightscout.androidaps.plugins.pump.danaRS.comm.DanaRS_Packet
|
import info.nightscout.androidaps.plugins.pump.danaRS.comm.DanaRS_Packet
|
||||||
import info.nightscout.androidaps.plugins.pump.danaRS.comm.DanaRS_Packet_Etc_Keep_Connection
|
|
||||||
import info.nightscout.androidaps.plugins.pump.danaRS.comm.DanaRS_Packet_General_Get_Pump_Check
|
|
||||||
import info.nightscout.androidaps.plugins.pump.danaRS.encryption.BleEncryption
|
import info.nightscout.androidaps.plugins.pump.danaRS.encryption.BleEncryption
|
||||||
import info.nightscout.androidaps.plugins.pump.danaRS.events.EventDanaRSPairingSuccess
|
import info.nightscout.androidaps.plugins.pump.danaRS.events.EventDanaRSPairingSuccess
|
||||||
import info.nightscout.androidaps.utils.ToastUtils
|
import info.nightscout.androidaps.utils.ToastUtils
|
||||||
|
import info.nightscout.androidaps.utils.extensions.notify
|
||||||
|
import info.nightscout.androidaps.utils.extensions.waitMillis
|
||||||
import info.nightscout.androidaps.utils.resources.ResourceHelper
|
import info.nightscout.androidaps.utils.resources.ResourceHelper
|
||||||
import info.nightscout.androidaps.utils.sharedPreferences.SP
|
import info.nightscout.androidaps.utils.sharedPreferences.SP
|
||||||
import okhttp3.internal.notify
|
|
||||||
import okhttp3.internal.waitMillis
|
|
||||||
import java.util.*
|
import java.util.*
|
||||||
import java.util.concurrent.ScheduledFuture
|
import java.util.concurrent.ScheduledFuture
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
@ -230,7 +228,7 @@ class BLEComm @Inject internal constructor(
|
||||||
//aapsLogger.debug("writeCharacteristic:" + DanaRS_Packet.toHexString(data))
|
//aapsLogger.debug("writeCharacteristic:" + DanaRS_Packet.toHexString(data))
|
||||||
bluetoothGatt?.writeCharacteristic(characteristic)
|
bluetoothGatt?.writeCharacteristic(characteristic)
|
||||||
}).start()
|
}).start()
|
||||||
waitMillis(50)
|
SystemClock.sleep(50)
|
||||||
}
|
}
|
||||||
|
|
||||||
private val uartReadBTGattChar: BluetoothGattCharacteristic
|
private val uartReadBTGattChar: BluetoothGattCharacteristic
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package info.nightscout.androidaps.utils
|
package info.nightscout.androidaps.utils
|
||||||
|
|
||||||
|
import info.nightscout.androidaps.utils.extensions.toHex
|
||||||
import org.spongycastle.util.encoders.Base64
|
import org.spongycastle.util.encoders.Base64
|
||||||
import java.nio.ByteBuffer
|
import java.nio.ByteBuffer
|
||||||
import java.security.MessageDigest
|
import java.security.MessageDigest
|
||||||
|
@ -13,38 +14,6 @@ import javax.crypto.spec.GCMParameterSpec
|
||||||
import javax.crypto.spec.PBEKeySpec
|
import javax.crypto.spec.PBEKeySpec
|
||||||
import javax.crypto.spec.SecretKeySpec
|
import javax.crypto.spec.SecretKeySpec
|
||||||
|
|
||||||
private val HEX_CHARS = "0123456789abcdef"
|
|
||||||
private val HEX_CHARS_ARRAY = "0123456789abcdef".toCharArray()
|
|
||||||
|
|
||||||
fun String.hexStringToByteArray() : ByteArray {
|
|
||||||
|
|
||||||
val upperCased = this.toLowerCase()
|
|
||||||
val result = ByteArray(length / 2)
|
|
||||||
for (i in 0 until length step 2) {
|
|
||||||
val firstIndex = HEX_CHARS.indexOf(upperCased[i]);
|
|
||||||
val secondIndex = HEX_CHARS.indexOf(upperCased[i + 1]);
|
|
||||||
|
|
||||||
val octet = firstIndex.shl(4).or(secondIndex)
|
|
||||||
result.set(i.shr(1), octet.toByte())
|
|
||||||
}
|
|
||||||
|
|
||||||
return result
|
|
||||||
}
|
|
||||||
|
|
||||||
fun ByteArray.toHex() : String{
|
|
||||||
val result = StringBuffer()
|
|
||||||
|
|
||||||
forEach {
|
|
||||||
val octet = it.toInt()
|
|
||||||
val firstIndex = (octet and 0xF0).ushr(4)
|
|
||||||
val secondIndex = octet and 0x0F
|
|
||||||
result.append(HEX_CHARS_ARRAY[firstIndex])
|
|
||||||
result.append(HEX_CHARS_ARRAY[secondIndex])
|
|
||||||
}
|
|
||||||
|
|
||||||
return result.toString()
|
|
||||||
}
|
|
||||||
|
|
||||||
object CryptoUtil {
|
object CryptoUtil {
|
||||||
|
|
||||||
private const val IV_LENGTH_BYTE = 12
|
private const val IV_LENGTH_BYTE = 12
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
package info.nightscout.androidaps.utils.extensions
|
||||||
|
|
||||||
|
|
||||||
|
@Suppress("PLATFORM_CLASS_MAPPED_TO_KOTLIN", "NOTHING_TO_INLINE")
|
||||||
|
inline fun Any.wait() = (this as Object).wait()
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Lock and wait a duration in milliseconds and nanos.
|
||||||
|
* Unlike [java.lang.Object.wait] this interprets 0 as "don't wait" instead of "wait forever".
|
||||||
|
*/
|
||||||
|
@Suppress("PLATFORM_CLASS_MAPPED_TO_KOTLIN")
|
||||||
|
fun Any.waitMillis(timeout: Long, nanos: Int = 0) {
|
||||||
|
if (timeout > 0L || nanos > 0) {
|
||||||
|
(this as Object).wait(timeout, nanos)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Suppress("PLATFORM_CLASS_MAPPED_TO_KOTLIN", "NOTHING_TO_INLINE")
|
||||||
|
inline fun Any.notify() = (this as Object).notify()
|
||||||
|
|
||||||
|
@Suppress("PLATFORM_CLASS_MAPPED_TO_KOTLIN", "NOTHING_TO_INLINE")
|
||||||
|
inline fun Any.notifyAll() = (this as Object).notifyAll()
|
Loading…
Reference in a new issue