diff --git a/dana/src/main/java/info/nightscout/androidaps/dana/DanaFragment.kt b/dana/src/main/java/info/nightscout/androidaps/dana/DanaFragment.kt index 5d958944c5..4b1200857a 100644 --- a/dana/src/main/java/info/nightscout/androidaps/dana/DanaFragment.kt +++ b/dana/src/main/java/info/nightscout/androidaps/dana/DanaFragment.kt @@ -80,8 +80,10 @@ class DanaFragment : DaggerFragment() { } } - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, - savedInstanceState: Bundle?): View { + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View { _binding = DanarFragmentBinding.inflate(inflater, container, false) return binding.root } @@ -112,7 +114,9 @@ class DanaFragment : DaggerFragment() { danaPump.reset() commandQueue.readStatus("Clicked connect to pump", null) } - if (activePlugin.activePump.pumpDescription.pumpType == PumpType.DANA_RS) + if (activePlugin.activePump.pumpDescription.pumpType == PumpType.DANA_RS || + activePlugin.activePump.pumpDescription.pumpType == PumpType.DANA_I + ) binding.btconnection.setOnLongClickListener { activity?.let { OKDialog.showConfirmation(it, rh.gs(R.string.resetpairing)) { @@ -152,22 +156,22 @@ class DanaFragment : DaggerFragment() { .toObservable(EventPumpStatusChanged::class.java) .observeOn(aapsSchedulers.main) .subscribe({ - pumpStatusIcon = when (it.status) { - EventPumpStatusChanged.Status.CONNECTING -> - "{fa-bluetooth-b spin} ${it.secondsElapsed}s" - EventPumpStatusChanged.Status.CONNECTED -> - "{fa-bluetooth}" - EventPumpStatusChanged.Status.DISCONNECTED -> - "{fa-bluetooth-b}" + pumpStatusIcon = when (it.status) { + EventPumpStatusChanged.Status.CONNECTING -> + "{fa-bluetooth-b spin} ${it.secondsElapsed}s" + EventPumpStatusChanged.Status.CONNECTED -> + "{fa-bluetooth}" + EventPumpStatusChanged.Status.DISCONNECTED -> + "{fa-bluetooth-b}" - else -> - "{fa-bluetooth-b}" - } - binding.btconnection.text = pumpStatusIcon - pumpStatus = it.getStatus(rh) - binding.pumpStatus.text = pumpStatus - binding.pumpStatusLayout.visibility = (pumpStatus != "").toVisibility() - }, fabricPrivacy::logException) + else -> + "{fa-bluetooth-b}" + } + binding.btconnection.text = pumpStatusIcon + pumpStatus = it.getStatus(rh) + binding.pumpStatus.text = pumpStatus + binding.pumpStatusLayout.visibility = (pumpStatus != "").toVisibility() + }, fabricPrivacy::logException) pumpStatus = "" pumpStatusIcon = "{fa-bluetooth-b}" diff --git a/dana/src/main/res/values/strings.xml b/dana/src/main/res/values/strings.xml index da88761671..995ae01883 100644 --- a/dana/src/main/res/values/strings.xml +++ b/dana/src/main/res/values/strings.xml @@ -9,6 +9,7 @@ danars_v3_randompairing_key_ danars_v3_pairing_key_ danars_v3_randomsync_key_ + dana_ble5_pairingkey rs_logcanulachange rs_loginsulinchange rs_last_clear_key_request diff --git a/danars/src/main/java/info/nightscout/androidaps/danars/DanaRSPlugin.kt b/danars/src/main/java/info/nightscout/androidaps/danars/DanaRSPlugin.kt index bf7c6c01bc..b74ea7d976 100644 --- a/danars/src/main/java/info/nightscout/androidaps/danars/DanaRSPlugin.kt +++ b/danars/src/main/java/info/nightscout/androidaps/danars/DanaRSPlugin.kt @@ -625,5 +625,6 @@ class DanaRSPlugin @Inject constructor( sp.remove(rh.gs(R.string.key_danars_v3_randompairingkey) + mDeviceName) sp.remove(rh.gs(R.string.key_danars_v3_pairingkey) + mDeviceName) sp.remove(rh.gs(R.string.key_danars_v3_randomsynckey) + mDeviceName) + sp.remove(rh.gs(R.string.key_dana_ble5_pairingkey) + mDeviceName) } } \ No newline at end of file diff --git a/danars/src/main/java/info/nightscout/androidaps/danars/services/BLEComm.kt b/danars/src/main/java/info/nightscout/androidaps/danars/services/BLEComm.kt index e9b5e7ad9d..26b1627fd1 100644 --- a/danars/src/main/java/info/nightscout/androidaps/danars/services/BLEComm.kt +++ b/danars/src/main/java/info/nightscout/androidaps/danars/services/BLEComm.kt @@ -149,15 +149,7 @@ class BLEComm @Inject internal constructor( if (lastClearRequest != 0L && dateUtil.isOlderThan(lastClearRequest, 5)) { ToastUtils.showToastInUiThread(context, R.string.invalidpairing) danaRSPlugin.changePump() - sp.getStringOrNull(R.string.key_danars_address, null)?.let { address -> - bluetoothAdapter?.getRemoteDevice(address)?.let { device -> - try { - device::class.java.getMethod("removeBond").invoke(device) - } catch (e: Exception) { - aapsLogger.error("Removing bond has been failed. ${e.message}") - } - } - } + removeBond() } else if (lastClearRequest == 0L) { aapsLogger.error("Clearing pairing keys postponed") sp.putLong(R.string.key_rs_last_clear_key_request, dateUtil.now()) @@ -196,6 +188,18 @@ class BLEComm @Inject internal constructor( SystemClock.sleep(2000) } + private fun removeBond() { + sp.getStringOrNull(R.string.key_danars_address, null)?.let { address -> + bluetoothAdapter?.getRemoteDevice(address)?.let { device -> + try { + device::class.java.getMethod("removeBond").invoke(device) + } catch (e: Exception) { + aapsLogger.error("Removing bond has been failed. ${e.message}") + } + } + } + } + @Synchronized fun close() { /* if (!encryptedDataRead && !encryptedCommandSent) { @@ -558,9 +562,17 @@ class BLEComm @Inject internal constructor( danaPump.hwModel = decryptedBuffer[5].toInt() danaPump.protocol = decryptedBuffer[7].toInt() val pairingKey = DanaRSPacket.asciiStringFromBuff(decryptedBuffer, 8, 6) // used while bonding + if (decryptedBuffer[8] != 0.toByte()) + sp.putString(rh.gs(R.string.key_dana_ble5_pairingkey) + danaRSPlugin.mDeviceName, pairingKey) + + val storedPairingKey = sp.getString(rh.gs(R.string.key_dana_ble5_pairingkey) + danaRSPlugin.mDeviceName, "") + if (storedPairingKey.isNullOrBlank()) { + removeBond() + disconnect("Non existing pairing key") + } if (danaPump.hwModel == 0x09) { - bleEncryption.setBle5Key(pairingKey.encodeToByteArray()) + bleEncryption.setBle5Key(storedPairingKey.encodeToByteArray()) aapsLogger.debug(LTag.PUMPBTCOMM, "<<<<< " + "ENCRYPTION__PUMP_CHECK BLE5 (OK)" + " " + DanaRSPacket.toHexString(decryptedBuffer)) // Dana-i BLE5 Pump sendBLE5PairingInformation() diff --git a/danars/src/main/java/info/nightscout/androidaps/danars/services/DanaRSService.kt b/danars/src/main/java/info/nightscout/androidaps/danars/services/DanaRSService.kt index 4092c4a800..08f8c0d54c 100644 --- a/danars/src/main/java/info/nightscout/androidaps/danars/services/DanaRSService.kt +++ b/danars/src/main/java/info/nightscout/androidaps/danars/services/DanaRSService.kt @@ -118,6 +118,7 @@ class DanaRSService : DaggerService() { val pump = activePlugin.activePump rxBus.send(EventPumpStatusChanged(rh.gs(R.string.gettingpumpsettings))) sendMessage(DanaRSPacketEtcKeepConnection(injector)) // test encryption for v3 & BLE + if (!bleComm.isConnected) return sendMessage(DanaRSPacketGeneralGetShippingInformation(injector)) // serial no sendMessage(DanaRSPacketGeneralGetPumpCheck(injector)) // firmware sendMessage(DanaRSPacketBasalGetProfileNumber(injector))