diff --git a/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/MedtronicFragment.kt b/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/MedtronicFragment.kt index 86666790a5..84ac9a6138 100644 --- a/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/MedtronicFragment.kt +++ b/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/MedtronicFragment.kt @@ -188,7 +188,7 @@ class MedtronicFragment : DaggerFragment() { @Synchronized private fun setDeviceStatus() { val resourceId = rileyLinkServiceData.rileyLinkServiceState.resourceId - val rileyLinkError = medtronicPumpPlugin.rileyLinkService?.error + val rileyLinkError =rileyLinkServiceData.rileyLinkError binding.rlStatus.text = when { rileyLinkServiceData.rileyLinkServiceState == RileyLinkServiceState.NotStarted -> rh.gs(resourceId) diff --git a/omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/OmnipodErosPumpPlugin.java b/omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/OmnipodErosPumpPlugin.java index 402d836bb3..f4c1bb19c7 100644 --- a/omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/OmnipodErosPumpPlugin.java +++ b/omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/OmnipodErosPumpPlugin.java @@ -375,7 +375,7 @@ public class OmnipodErosPumpPlugin extends PumpPluginBase implements Pump, Riley } public boolean isRileyLinkReady() { - return rileyLinkServiceData.rileyLinkServiceState.isReady(); + return rileyLinkServiceData.getRileyLinkServiceState().isReady(); } private void handleCancelledTbr() { @@ -1014,7 +1014,7 @@ public class OmnipodErosPumpPlugin extends PumpPluginBase implements Pump, Riley // - RileyLink has been connecting for over RILEY_LINK_CONNECT_TIMEOUT return (podStateManager.getLastFailedCommunication() != null && podStateManager.getLastSuccessfulCommunication().isBefore(podStateManager.getLastFailedCommunication())) || podStateManager.isSuspended() || - rileyLinkServiceData.rileyLinkServiceState.isError() || + rileyLinkServiceData.getRileyLinkServiceState().isError() || // The below clause is a hack for working around the RL service state forever staying in connecting state on startup if the RL is switched off / unreachable (rileyLinkServiceData.getRileyLinkServiceState().isConnecting() && rileyLinkServiceData.getLastServiceStateChange() + RILEY_LINK_CONNECT_TIMEOUT_MILLIS < currentTimeMillis); } diff --git a/omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/rileylink/service/RileyLinkOmnipodService.java b/omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/rileylink/service/RileyLinkOmnipodService.java index 8520db88d3..c6a7d37063 100644 --- a/omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/rileylink/service/RileyLinkOmnipodService.java +++ b/omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/rileylink/service/RileyLinkOmnipodService.java @@ -97,10 +97,8 @@ public class RileyLinkOmnipodService extends RileyLinkService { /* private functions */ - // PumpInterface - REMOVE - public boolean isInitialized() { - return rileyLinkServiceData.rileyLinkServiceState.isReady(); + return rileyLinkServiceData.getRileyLinkServiceState().isReady(); } @Override diff --git a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/dialog/RileyLinkStatusGeneralFragment.kt b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/dialog/RileyLinkStatusGeneralFragment.kt index 115849b46d..d9b6ee141c 100644 --- a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/dialog/RileyLinkStatusGeneralFragment.kt +++ b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/dialog/RileyLinkStatusGeneralFragment.kt @@ -72,7 +72,7 @@ class RileyLinkStatusGeneralFragment : DaggerFragment() { } val rileyLinkPumpDevice = activePlugin.activePump as RileyLinkPumpDevice val rileyLinkPumpInfo = rileyLinkPumpDevice.pumpInfo - binding.deviceType.setText(targetDevice.resourceId) + targetDevice?.resourceId?.let { binding.deviceType.setText(it) } if (targetDevice == RileyLinkTargetDevice.MedtronicPump) { binding.connectedDeviceDetails.visibility = View.VISIBLE binding.configuredDeviceModel.text = activePlugin.activePump.pumpDescription.pumpType.description diff --git a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/RileyLinkBroadcastReceiver.kt b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/RileyLinkBroadcastReceiver.kt index 1177388890..ff9fca17f3 100644 --- a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/RileyLinkBroadcastReceiver.kt +++ b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/RileyLinkBroadcastReceiver.kt @@ -153,7 +153,7 @@ class RileyLinkBroadcastReceiver : DaggerBroadcastReceiver() { private fun processTuneUpBroadcasts(action: String): Boolean = if (broadcastIdentifiers["TuneUp"]?.contains(action) == true) { - if (rileyLinkService?.rileyLinkTargetDevice?.isTuneUpEnabled == true) serviceTaskExecutor.startTask(WakeAndTuneTask(injector)) + if (rileyLinkServiceData.targetDevice?.isTuneUpEnabled == true) serviceTaskExecutor.startTask(WakeAndTuneTask(injector)) true } else false } \ No newline at end of file diff --git a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/RileyLinkService.kt b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/RileyLinkService.kt index d7503bf2a6..d7efd6ca73 100644 --- a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/RileyLinkService.kt +++ b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/RileyLinkService.kt @@ -94,7 +94,7 @@ abstract class RileyLinkService : DaggerService() { fun bluetoothInit(): Boolean { aapsLogger.debug(LTag.PUMPBTCOMM, "bluetoothInit: attempting to get an adapter") - rileyLinkServiceData.setRileyLinkServiceState(RileyLinkServiceState.BluetoothInitializing) + rileyLinkServiceData.rileyLinkServiceState = RileyLinkServiceState.BluetoothInitializing if (bluetoothAdapter == null) { aapsLogger.error("Unable to obtain a BluetoothAdapter.") rileyLinkServiceData.setServiceState(RileyLinkServiceState.BluetoothError, RileyLinkError.NoBluetoothAdapter) @@ -103,7 +103,7 @@ abstract class RileyLinkService : DaggerService() { aapsLogger.error("Bluetooth is not enabled.") rileyLinkServiceData.setServiceState(RileyLinkServiceState.BluetoothError, RileyLinkError.BluetoothDisabled) } else { - rileyLinkServiceData.setRileyLinkServiceState(RileyLinkServiceState.BluetoothReady) + rileyLinkServiceData.rileyLinkServiceState = RileyLinkServiceState.BluetoothReady return true } } @@ -112,7 +112,7 @@ abstract class RileyLinkService : DaggerService() { // returns true if our Rileylink configuration changed fun reconfigureRileyLink(deviceAddress: String): Boolean { - rileyLinkServiceData.setRileyLinkServiceState(RileyLinkServiceState.RileyLinkInitializing) + rileyLinkServiceData.rileyLinkServiceState = RileyLinkServiceState.RileyLinkInitializing return if (rileyLinkBLE.isConnected) { if (deviceAddress == rileyLinkServiceData.rileyLinkAddress) { aapsLogger.info(LTag.PUMPBTCOMM, "No change to RL address. Not reconnecting.") @@ -128,9 +128,9 @@ abstract class RileyLinkService : DaggerService() { } } else { aapsLogger.debug(LTag.PUMPBTCOMM, "Using RL $deviceAddress") - if (rileyLinkServiceData.getRileyLinkServiceState() == RileyLinkServiceState.NotStarted) { + if (rileyLinkServiceData.rileyLinkServiceState == RileyLinkServiceState.NotStarted) { if (!bluetoothInit()) { - aapsLogger.error("RileyLink can't get activated, Bluetooth is not functioning correctly. ${error?.name ?: "Unknown error (null)"}") + aapsLogger.error("RileyLink can't get activated, Bluetooth is not functioning correctly. ${rileyLinkServiceData.rileyLinkError?.name ?: "Unknown error (null)"}") return false } } @@ -141,7 +141,7 @@ abstract class RileyLinkService : DaggerService() { // FIXME: This needs to be run in a session so that is incorruptible, has a separate thread, etc. fun doTuneUpDevice() { - rileyLinkServiceData.setRileyLinkServiceState(RileyLinkServiceState.TuneUpDevice) + rileyLinkServiceData.rileyLinkServiceState = RileyLinkServiceState.TuneUpDevice setPumpDeviceState(PumpDeviceState.Sleeping) val lastGoodFrequency = rileyLinkServiceData.lastGoodFrequency ?: sp.getDouble(RileyLinkConst.Prefs.LastGoodDeviceFrequency, 0.0) val newFrequency = deviceCommunicationManager.tuneForDevice() @@ -157,7 +157,7 @@ abstract class RileyLinkService : DaggerService() { rileyLinkServiceData.setServiceState(RileyLinkServiceState.PumpConnectorError, RileyLinkError.TuneUpOfDeviceFailed) } else { deviceCommunicationManager.clearNotConnectedCount() - rileyLinkServiceData.setRileyLinkServiceState(RileyLinkServiceState.PumpConnectorReady) + rileyLinkServiceData.rileyLinkServiceState = RileyLinkServiceState.PumpConnectorReady } } @@ -168,22 +168,13 @@ abstract class RileyLinkService : DaggerService() { rileyLinkServiceData.rileyLinkAddress = null rileyLinkServiceData.rileyLinkName = null } - rileyLinkServiceData.setRileyLinkServiceState(RileyLinkServiceState.BluetoothReady) + rileyLinkServiceData.rileyLinkServiceState = RileyLinkServiceState.BluetoothReady } - /** - * Get Target Device for Service - */ - val rileyLinkTargetDevice: RileyLinkTargetDevice - get() = rileyLinkServiceData.targetDevice - fun changeRileyLinkEncoding(encodingType: RileyLinkEncodingType?) { rfSpy.setRileyLinkEncoding(encodingType) } - val error: RileyLinkError? - get() = rileyLinkServiceData.rileyLinkError - fun verifyConfiguration(): Boolean { return verifyConfiguration(false) } diff --git a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/RileyLinkServiceData.java b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/RileyLinkServiceData.java deleted file mode 100644 index 7876fb1f1f..0000000000 --- a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/RileyLinkServiceData.java +++ /dev/null @@ -1,103 +0,0 @@ -package info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service; - -import java.util.Locale; - -import javax.annotation.Nullable; -import javax.inject.Inject; -import javax.inject.Singleton; - -import info.nightscout.androidaps.plugins.bus.RxBus; -import info.nightscout.androidaps.plugins.pump.common.events.EventRileyLinkDeviceStatusChange; -import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.RileyLinkUtil; -import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.ble.defs.RileyLinkFirmwareVersion; -import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.ble.defs.RileyLinkTargetFrequency; -import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.data.RLHistoryItem; -import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs.RileyLinkError; -import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs.RileyLinkServiceState; -import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs.RileyLinkTargetDevice; -import info.nightscout.shared.logging.AAPSLogger; -import info.nightscout.shared.logging.LTag; - -/** - * Created by andy on 16/05/2018. - */ - -// FIXME encapsulation -@Singleton -public class RileyLinkServiceData { - - @Inject AAPSLogger aapsLogger; - @Inject RileyLinkUtil rileyLinkUtil; - @Inject RxBus rxBus; - - boolean tuneUpDone = false; - @Nullable public RileyLinkError rileyLinkError; - public RileyLinkServiceState rileyLinkServiceState = RileyLinkServiceState.NotStarted; - private long lastServiceStateChange = 0L; - @Nullable public RileyLinkFirmwareVersion firmwareVersion; // here we have "compatibility level" version - @Nullable public RileyLinkTargetFrequency rileyLinkTargetFrequency; - @Nullable public String rileyLinkAddress; - @Nullable public String rileyLinkName; - @Nullable public Integer batteryLevel; - public boolean showBatteryLevel = false; - long lastTuneUpTime = 0L; - @Nullable public Double lastGoodFrequency; - - // bt version - @Nullable public String versionBLE113; - // radio version - @Nullable public String versionCC110; - - // orangeLink - public boolean isOrange = false; - @Nullable public String versionOrangeFirmware; - @Nullable public String versionOrangeHardware; - - public RileyLinkTargetDevice targetDevice; - - // Medtronic Pump - public String pumpID; - public byte[] pumpIDBytes; - - @Inject - public RileyLinkServiceData() { - } - - public void setPumpID(String pumpId, byte[] pumpIdBytes) { - this.pumpID = pumpId; - this.pumpIDBytes = pumpIdBytes; - } - - public void setRileyLinkServiceState(RileyLinkServiceState newState) { - setServiceState(newState, null); - } - - public RileyLinkServiceState getRileyLinkServiceState() { - return workWithServiceState(null, null, false); - } - - public void setServiceState(RileyLinkServiceState newState, RileyLinkError errorCode) { - workWithServiceState(newState, errorCode, true); - } - - public long getLastServiceStateChange() { - return lastServiceStateChange; - } - - private synchronized RileyLinkServiceState workWithServiceState(RileyLinkServiceState newState, RileyLinkError errorCode, boolean set) { - if (set) { - rileyLinkServiceState = newState; - lastServiceStateChange = System.currentTimeMillis(); - this.rileyLinkError = errorCode; - - aapsLogger.info(LTag.PUMP, String.format(Locale.ENGLISH, "RileyLink State Changed: %s %s", newState, errorCode == null ? "" : " - Error State: " + errorCode.name())); - - rileyLinkUtil.getRileyLinkHistory().add(new RLHistoryItem(rileyLinkServiceState, errorCode, targetDevice)); - rxBus.send(new EventRileyLinkDeviceStatusChange(targetDevice, newState, errorCode)); - return null; - } else { - return rileyLinkServiceState; - } - } - -} diff --git a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/RileyLinkServiceData.kt b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/RileyLinkServiceData.kt new file mode 100644 index 0000000000..047467fd7f --- /dev/null +++ b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/RileyLinkServiceData.kt @@ -0,0 +1,73 @@ +package info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service + +import info.nightscout.androidaps.plugins.bus.RxBus +import info.nightscout.androidaps.plugins.pump.common.events.EventRileyLinkDeviceStatusChange +import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.RileyLinkUtil +import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.ble.defs.RileyLinkFirmwareVersion +import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.ble.defs.RileyLinkTargetFrequency +import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.data.RLHistoryItem +import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs.RileyLinkError +import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs.RileyLinkServiceState +import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs.RileyLinkTargetDevice +import info.nightscout.shared.logging.AAPSLogger +import info.nightscout.shared.logging.LTag +import java.util.* +import javax.inject.Inject +import javax.inject.Singleton + +/** + * Created by andy on 16/05/2018. + */ +@Singleton +class RileyLinkServiceData @Inject constructor() { + + @Inject lateinit var aapsLogger: AAPSLogger + @Inject lateinit var rileyLinkUtil: RileyLinkUtil + @Inject lateinit var rxBus: RxBus + var tuneUpDone = false + var rileyLinkError: RileyLinkError? = null + var rileyLinkServiceState: RileyLinkServiceState = RileyLinkServiceState.NotStarted + var lastServiceStateChange = 0L + private set + + // here we have "compatibility level" version + @JvmField var firmwareVersion: RileyLinkFirmwareVersion? = null + @JvmField var rileyLinkTargetFrequency: RileyLinkTargetFrequency? = null + @JvmField var rileyLinkAddress: String? = null + @JvmField var rileyLinkName: String? = null + @JvmField var batteryLevel: Int? = null + var showBatteryLevel = false + var lastTuneUpTime = 0L + var lastGoodFrequency: Double? = null + + // bt version + var versionBLE113: String? = null + + // radio version + @JvmField var versionCC110: String? = null + + // orangeLink + var isOrange = false + var versionOrangeFirmware: String? = null + var versionOrangeHardware: String? = null + @JvmField var targetDevice: RileyLinkTargetDevice? = null + + // Medtronic Pump + var pumpID: String? = null + var pumpIDBytes: ByteArray = byteArrayOf(0, 0, 0) + + fun setPumpID(pumpId: String?, pumpIdBytes: ByteArray) { + pumpID = pumpId + pumpIDBytes = pumpIdBytes + } + + @Synchronized + fun setServiceState(newState: RileyLinkServiceState, errorCode: RileyLinkError) { + rileyLinkServiceState = newState + lastServiceStateChange = System.currentTimeMillis() + rileyLinkError = errorCode + aapsLogger.info(LTag.PUMP, String.format(Locale.ENGLISH, "RileyLink State Changed: $newState - Error State: ${errorCode.name}")) + rileyLinkUtil.rileyLinkHistory.add(RLHistoryItem(rileyLinkServiceState, errorCode, targetDevice)) + rxBus.send(EventRileyLinkDeviceStatusChange(targetDevice!!, newState, errorCode)) + } +} \ No newline at end of file diff --git a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/InitializePumpManagerTask.kt b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/InitializePumpManagerTask.kt index 903200d3d4..935aff66bc 100644 --- a/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/InitializePumpManagerTask.kt +++ b/rileylink/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/service/tasks/InitializePumpManagerTask.kt @@ -39,10 +39,10 @@ class InitializePumpManagerTask(injector: HasAndroidInjector, private val contex val rileyLinkCommunicationManager = pumpDevice?.rileyLinkService?.deviceCommunicationManager if (activePlugin.activePump.manufacturer() === ManufacturerType.Medtronic) { if (lastGoodFrequency > 0.0 && rileyLinkCommunicationManager?.isValidFrequency(lastGoodFrequency) == true) { - rileyLinkServiceData.setRileyLinkServiceState(RileyLinkServiceState.RileyLinkReady) + rileyLinkServiceData.rileyLinkServiceState = RileyLinkServiceState.RileyLinkReady aapsLogger.info(LTag.PUMPBTCOMM, "Setting radio frequency to $lastGoodFrequency MHz") rileyLinkCommunicationManager.setRadioFrequencyForPump(lastGoodFrequency) - if (rileyLinkCommunicationManager.tryToConnectToDevice()) rileyLinkServiceData.setRileyLinkServiceState(RileyLinkServiceState.PumpConnectorReady) + if (rileyLinkCommunicationManager.tryToConnectToDevice()) rileyLinkServiceData.rileyLinkServiceState = RileyLinkServiceState.PumpConnectorReady else { rileyLinkServiceData.setServiceState(RileyLinkServiceState.PumpConnectorError, RileyLinkError.NoContactWithDevice) rileyLinkUtil.sendBroadcastMessage(RileyLinkConst.IPC.MSG_PUMP_tunePump, context) @@ -54,11 +54,11 @@ class InitializePumpManagerTask(injector: HasAndroidInjector, private val contex lastGoodFrequency = (lastGoodFrequency * 1000.0).roundToLong() / 1000.0 rileyLinkServiceData.lastGoodFrequency = lastGoodFrequency } - rileyLinkServiceData.setRileyLinkServiceState(RileyLinkServiceState.RileyLinkReady) + rileyLinkServiceData.rileyLinkServiceState = RileyLinkServiceState.RileyLinkReady rileyLinkServiceData.rileyLinkTargetFrequency = RileyLinkTargetFrequency.Omnipod // TODO shouldn't be needed aapsLogger.info(LTag.PUMPBTCOMM, "Setting radio frequency to $lastGoodFrequency MHz") rileyLinkCommunicationManager?.setRadioFrequencyForPump(lastGoodFrequency) - rileyLinkServiceData.setRileyLinkServiceState(RileyLinkServiceState.PumpConnectorReady) + rileyLinkServiceData.rileyLinkServiceState = RileyLinkServiceState.PumpConnectorReady } } } \ No newline at end of file