- daggerizing omnipod

This commit is contained in:
Andy Rozman 2020-04-29 17:35:55 +01:00
parent b1a220499d
commit 4d39cbba95
53 changed files with 962 additions and 621 deletions

View file

@ -39,6 +39,8 @@ import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.ble.data.Radi
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.tasks.* import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.tasks.*
import info.nightscout.androidaps.plugins.pump.medtronic.comm.MedtronicCommunicationManager import info.nightscout.androidaps.plugins.pump.medtronic.comm.MedtronicCommunicationManager
import info.nightscout.androidaps.plugins.pump.medtronic.comm.ui.MedtronicUITask import info.nightscout.androidaps.plugins.pump.medtronic.comm.ui.MedtronicUITask
import info.nightscout.androidaps.plugins.pump.omnipod.comm.OmnipodCommunicationManager
import info.nightscout.androidaps.plugins.pump.omnipod.driver.ui.OmnipodUITask
import info.nightscout.androidaps.plugins.treatments.Treatment import info.nightscout.androidaps.plugins.treatments.Treatment
import info.nightscout.androidaps.queue.CommandQueue import info.nightscout.androidaps.queue.CommandQueue
import info.nightscout.androidaps.queue.commands.* import info.nightscout.androidaps.queue.commands.*
@ -211,6 +213,11 @@ interface AppComponent : AndroidInjector<MainApp> {
fun injectSendAndListen(sendAndListen: SendAndListen) fun injectSendAndListen(sendAndListen: SendAndListen)
fun injectSetPreamble(setPreamble: SetPreamble) fun injectSetPreamble(setPreamble: SetPreamble)
fun injectRadioPacket(radioPacket: RadioPacket) fun injectRadioPacket(radioPacket: RadioPacket)
fun injectOmnipodUITask(omnipodUITask: OmnipodUITask)
// Omnipod
fun injectOmnipodCommunicationManager(omnipodCommunicationManager: OmnipodCommunicationManager)
@Component.Builder @Component.Builder
interface Builder { interface Builder {

View file

@ -56,6 +56,8 @@ import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.ble.data.Radi
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.tasks.* import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.tasks.*
import info.nightscout.androidaps.plugins.pump.medtronic.comm.MedtronicCommunicationManager import info.nightscout.androidaps.plugins.pump.medtronic.comm.MedtronicCommunicationManager
import info.nightscout.androidaps.plugins.pump.medtronic.comm.ui.MedtronicUITask import info.nightscout.androidaps.plugins.pump.medtronic.comm.ui.MedtronicUITask
import info.nightscout.androidaps.plugins.pump.omnipod.comm.OmnipodCommunicationManager
import info.nightscout.androidaps.plugins.pump.omnipod.driver.comm.AapsOmnipodManager
import info.nightscout.androidaps.plugins.treatments.Treatment import info.nightscout.androidaps.plugins.treatments.Treatment
import info.nightscout.androidaps.queue.CommandQueue import info.nightscout.androidaps.queue.CommandQueue
import info.nightscout.androidaps.queue.commands.* import info.nightscout.androidaps.queue.commands.*
@ -307,6 +309,8 @@ open class AppModule {
// Omnipod // Omnipod
@ContributesAndroidInjector fun aapsOmnipodManagerInjector(): AapsOmnipodManager @ContributesAndroidInjector fun aapsOmnipodManagerInjector(): AapsOmnipodManager
@ContributesAndroidInjector fun omnipodCommunicationManagerProvider(): OmnipodCommunicationManager
@Binds @Binds
fun bindActivePluginProvider(pluginStore: PluginStore): ActivePluginProvider fun bindActivePluginProvider(pluginStore: PluginStore): ActivePluginProvider

View file

@ -38,6 +38,7 @@ import info.nightscout.androidaps.plugins.pump.danaR.DanaRFragment
import info.nightscout.androidaps.plugins.pump.insight.LocalInsightFragment import info.nightscout.androidaps.plugins.pump.insight.LocalInsightFragment
import info.nightscout.androidaps.plugins.pump.medtronic.MedtronicFragment import info.nightscout.androidaps.plugins.pump.medtronic.MedtronicFragment
import info.nightscout.androidaps.plugins.pump.medtronic.dialog.RileyLinkStatusDeviceMedtronic import info.nightscout.androidaps.plugins.pump.medtronic.dialog.RileyLinkStatusDeviceMedtronic
import info.nightscout.androidaps.plugins.pump.omnipod.OmnipodFragment
import info.nightscout.androidaps.plugins.pump.virtual.VirtualPumpFragment import info.nightscout.androidaps.plugins.pump.virtual.VirtualPumpFragment
import info.nightscout.androidaps.plugins.source.BGSourceFragment import info.nightscout.androidaps.plugins.source.BGSourceFragment
import info.nightscout.androidaps.plugins.treatments.TreatmentsFragment import info.nightscout.androidaps.plugins.treatments.TreatmentsFragment

View file

@ -44,6 +44,7 @@ import info.nightscout.androidaps.utils.DateUtil;
import info.nightscout.androidaps.utils.DecimalFormatter; import info.nightscout.androidaps.utils.DecimalFormatter;
import info.nightscout.androidaps.utils.FabricPrivacy; import info.nightscout.androidaps.utils.FabricPrivacy;
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 io.reactivex.disposables.CompositeDisposable; import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.schedulers.Schedulers; import io.reactivex.schedulers.Schedulers;
@ -57,11 +58,14 @@ import io.reactivex.schedulers.Schedulers;
public abstract class PumpPluginAbstract extends PumpPluginBase implements PumpInterface, ConstraintsInterface { public abstract class PumpPluginAbstract extends PumpPluginBase implements PumpInterface, ConstraintsInterface {
private CompositeDisposable disposable = new CompositeDisposable(); private CompositeDisposable disposable = new CompositeDisposable();
protected HasAndroidInjector injector;
protected AAPSLogger aapsLogger; protected AAPSLogger aapsLogger;
protected RxBusWrapper rxBus; protected RxBusWrapper rxBus;
protected ActivePluginProvider activePlugin; protected ActivePluginProvider activePlugin;
protected Context context; protected Context context;
protected FabricPrivacy fabricPrivacy; protected FabricPrivacy fabricPrivacy;
protected ResourceHelper resourceHelper;
protected CommandQueueProvider commandQueue;
protected SP sp; protected SP sp;
/* /*
@ -99,7 +103,9 @@ public abstract class PumpPluginAbstract extends PumpPluginBase implements PumpI
this.activePlugin = activePlugin; this.activePlugin = activePlugin;
this.context = context; this.context = context;
this.fabricPrivacy = fabricPrivacy; this.fabricPrivacy = fabricPrivacy;
this.resourceHelper = resourceHelper;
this.sp = sp; this.sp = sp;
this.commandQueue = commandQueue;
pumpDescription.setPumpDescription(pumpType); pumpDescription.setPumpDescription(pumpType);
this.pumpType = pumpType; this.pumpType = pumpType;
@ -109,12 +115,6 @@ public abstract class PumpPluginAbstract extends PumpPluginBase implements PumpI
public abstract void initPumpStatusData(); public abstract void initPumpStatusData();
public abstract void resetRileyLinkConfiguration();
public abstract void doTuneUpDevice();
public abstract RileyLinkService getRileyLinkService();
@Override @Override
protected void onStart() { protected void onStart() {
super.onStart(); super.onStart();
@ -464,6 +464,7 @@ public abstract class PumpPluginAbstract extends PumpPluginBase implements PumpI
public void setPumpType(PumpType pumpType) { public void setPumpType(PumpType pumpType) {
this.pumpType = pumpType; this.pumpType = pumpType;
this.pumpDescription.setPumpDescription(pumpType);
} }

View file

@ -3,9 +3,14 @@ package info.nightscout.androidaps.plugins.pump.common.data;
import java.util.Date; import java.util.Date;
import info.nightscout.androidaps.data.ProfileStore; import info.nightscout.androidaps.data.ProfileStore;
import info.nightscout.androidaps.interfaces.PumpDescription;
import info.nightscout.androidaps.plugins.bus.RxBusWrapper;
import info.nightscout.androidaps.plugins.pump.common.defs.PumpStatusType; import info.nightscout.androidaps.plugins.pump.common.defs.PumpStatusType;
import info.nightscout.androidaps.plugins.pump.common.defs.PumpType; import info.nightscout.androidaps.plugins.pump.common.defs.PumpType;
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.RileyLinkUtil;
import info.nightscout.androidaps.utils.DateUtil; import info.nightscout.androidaps.utils.DateUtil;
import info.nightscout.androidaps.utils.resources.ResourceHelper;
import info.nightscout.androidaps.utils.sharedPreferences.SP;
/** /**
* Created by andy on 4/28/18. * Created by andy on 4/28/18.
@ -13,6 +18,8 @@ import info.nightscout.androidaps.utils.DateUtil;
public abstract class PumpStatus { public abstract class PumpStatus {
// connection // connection
public long lastDataTime; public long lastDataTime;
public long lastConnection = 0L; public long lastConnection = 0L;
@ -49,16 +56,20 @@ public abstract class PumpStatus {
public int tempBasalRatio = 0; public int tempBasalRatio = 0;
public int tempBasalRemainMin = 0; public int tempBasalRemainMin = 0;
public Date tempBasalStart; public Date tempBasalStart;
private PumpType pumpType;
//protected PumpDescription pumpDescription; //protected PumpDescription pumpDescription;
public PumpStatus() { public PumpStatus(PumpType pumpType) {
// public PumpStatus(PumpDescription pumpDescription) { // public PumpStatus(PumpDescription pumpDescription) {
// this.pumpDescription = pumpDescription; // this.pumpDescription = pumpDescription;
// this.initSettings(); // this.initSettings();
this.pumpType = pumpType;
} }
public abstract void initSettings();
public void setLastCommunicationToNow() { public void setLastCommunicationToNow() {
this.lastDataTime = DateUtil.now(); this.lastDataTime = DateUtil.now();

View file

@ -41,14 +41,22 @@ import javax.inject.Inject;
import info.nightscout.androidaps.R; import info.nightscout.androidaps.R;
import info.nightscout.androidaps.activities.NoSplashAppCompatActivity; import info.nightscout.androidaps.activities.NoSplashAppCompatActivity;
import info.nightscout.androidaps.interfaces.ActivePluginProvider;
import info.nightscout.androidaps.interfaces.PumpInterface;
import info.nightscout.androidaps.logging.AAPSLogger; import info.nightscout.androidaps.logging.AAPSLogger;
import info.nightscout.androidaps.plugins.bus.RxBusWrapper; import info.nightscout.androidaps.plugins.bus.RxBusWrapper;
import info.nightscout.androidaps.plugins.common.ManufacturerType;
import info.nightscout.androidaps.plugins.pump.common.defs.PumpType;
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.RileyLinkConst; import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.RileyLinkConst;
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.RileyLinkUtil; import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.RileyLinkUtil;
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.ble.data.GattAttributes; import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.ble.data.GattAttributes;
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs.RileyLinkPumpDevice;
import info.nightscout.androidaps.plugins.pump.common.utils.LocationHelper; import info.nightscout.androidaps.plugins.pump.common.utils.LocationHelper;
import info.nightscout.androidaps.plugins.pump.medtronic.MedtronicPumpPlugin; import info.nightscout.androidaps.plugins.pump.medtronic.MedtronicPumpPlugin;
import info.nightscout.androidaps.plugins.pump.medtronic.events.EventMedtronicPumpConfigurationChanged; import info.nightscout.androidaps.plugins.pump.medtronic.events.EventMedtronicPumpConfigurationChanged;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.OmnipodPumpStatus;
import info.nightscout.androidaps.plugins.pump.omnipod.events.EventOmnipodPumpValuesChanged;
import info.nightscout.androidaps.plugins.pump.omnipod.util.OmnipodUtil;
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;
@ -61,7 +69,7 @@ public class RileyLinkBLEScanActivity extends NoSplashAppCompatActivity {
@Inject ResourceHelper resourceHelper; @Inject ResourceHelper resourceHelper;
@Inject RileyLinkUtil rileyLinkUtil; @Inject RileyLinkUtil rileyLinkUtil;
// TODO change this. Currently verifyConfiguration uses MDT data not only RL // TODO change this. Currently verifyConfiguration uses MDT data not only RL
@Inject MedtronicPumpPlugin medtronicPumpPlugin; // @Inject MedtronicPumpPlugin medtronicPumpPlugin;
@Inject ActivePluginProvider activePlugin; @Inject ActivePluginProvider activePlugin;
private static final int PERMISSION_REQUEST_COARSE_LOCATION = 30241; // arbitrary. private static final int PERMISSION_REQUEST_COARSE_LOCATION = 30241; // arbitrary.
@ -113,17 +121,26 @@ public class RileyLinkBLEScanActivity extends NoSplashAppCompatActivity {
//RileyLinkUtil.getRileyLinkSelectPreference().setSummary(bleAddress); //RileyLinkUtil.getRileyLinkSelectPreference().setSummary(bleAddress);
if (activePlugin.getActivePump().manufacturer()== ManufacturerType.Medtronic) { // TODO refactor this
medtronicPumpPlugin.getRileyLinkService().verifyConfiguration(); // force reloading of address
PumpInterface activePump = activePlugin.getActivePump();
if (activePump.manufacturer()== ManufacturerType.Medtronic) {
RileyLinkPumpDevice rileyLinkPump = (RileyLinkPumpDevice)activePump;
rileyLinkPump.getRileyLinkService().verifyConfiguration(); // force reloading of address
rxBus.send(new EventMedtronicPumpConfigurationChanged()); rxBus.send(new EventMedtronicPumpConfigurationChanged());
} else if (activePlugin.getActivePump().manufacturer()== ManufacturerType.Insulet) { } else if (activePlugin.getActivePump().manufacturer()== ManufacturerType.Insulet) {
OmnipodPumpStatus pumpStatus = OmnipodUtil.getPumpStatus(); if (activePump.model()== PumpType.Insulet_Omnipod_Dash) {
pumpStatus.verifyConfiguration(); aapsLogger.error("Omnipod Dash not yet implemented.");
} else {
RileyLinkPumpDevice rileyLinkPump = (RileyLinkPumpDevice)activePump;
rileyLinkPump.getRileyLinkService().verifyConfiguration(); // force reloading of address
rxBus.send(new EventOmnipodPumpValuesChanged()); rxBus.send(new EventOmnipodPumpValuesChanged());
} }
}
finish(); finish();
}); });

View file

@ -22,6 +22,7 @@ import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.tasks
import info.nightscout.androidaps.plugins.pump.common.utils.ByteUtil; import info.nightscout.androidaps.plugins.pump.common.utils.ByteUtil;
import info.nightscout.androidaps.plugins.pump.medtronic.defs.PumpDeviceState; import info.nightscout.androidaps.plugins.pump.medtronic.defs.PumpDeviceState;
import info.nightscout.androidaps.plugins.pump.medtronic.driver.MedtronicPumpStatus; import info.nightscout.androidaps.plugins.pump.medtronic.driver.MedtronicPumpStatus;
import info.nightscout.androidaps.utils.Round;
import info.nightscout.androidaps.utils.sharedPreferences.SP; import info.nightscout.androidaps.utils.sharedPreferences.SP;
/** /**
@ -34,7 +35,7 @@ public abstract class RileyLinkCommunicationManager {
@Inject protected AAPSLogger aapsLogger; @Inject protected AAPSLogger aapsLogger;
@Inject protected SP sp; @Inject protected SP sp;
@Inject MedtronicPumpStatus medtronicPumpStatus; //@Inject MedtronicPumpStatus medtronicPumpStatus;
@Inject RileyLinkServiceData rileyLinkServiceData; @Inject RileyLinkServiceData rileyLinkServiceData;
@Inject ServiceTaskExecutor serviceTaskExecutor; @Inject ServiceTaskExecutor serviceTaskExecutor;
@ -77,7 +78,7 @@ public abstract class RileyLinkCommunicationManager {
return sendAndListen(msg, timeout_ms, repeatCount, 0, extendPreamble_ms, clazz); return sendAndListen(msg, timeout_ms, repeatCount, 0, extendPreamble_ms, clazz);
} }
private <E extends RLMessage> E sendAndListen(RLMessage msg, int timeout_ms, int repeatCount, int retryCount, Integer extendPreamble_ms, Class<E> clazz) protected <E extends RLMessage> E sendAndListen(RLMessage msg, int timeout_ms, int repeatCount, int retryCount, Integer extendPreamble_ms, Class<E> clazz)
throws RileyLinkCommunicationException { throws RileyLinkCommunicationException {
// internal flag // internal flag
@ -129,6 +130,9 @@ public abstract class RileyLinkCommunicationManager {
public abstract <E extends RLMessage> E createResponseMessage(byte[] payload, Class<E> clazz); public abstract <E extends RLMessage> E createResponseMessage(byte[] payload, Class<E> clazz);
public abstract void setPumpDeviceState(PumpDeviceState pumpDeviceState);
public void wakeUp(boolean force) { public void wakeUp(boolean force) {
wakeUp(receiverDeviceAwakeForMinutes, force); wakeUp(receiverDeviceAwakeForMinutes, force);
} }
@ -150,7 +154,7 @@ public abstract class RileyLinkCommunicationManager {
// **** FIXME: this wakeup doesn't seem to work well... must revisit // **** FIXME: this wakeup doesn't seem to work well... must revisit
// receiverDeviceAwakeForMinutes = duration_minutes; // receiverDeviceAwakeForMinutes = duration_minutes;
medtronicPumpStatus.setPumpDeviceState(PumpDeviceState.WakingUp); setPumpDeviceState(PumpDeviceState.WakingUp);
if (force) if (force)
nextWakeUpRequired = 0L; nextWakeUpRequired = 0L;
@ -208,7 +212,7 @@ public abstract class RileyLinkCommunicationManager {
double[] scanFrequencies = rileyLinkServiceData.rileyLinkTargetFrequency.getScanFrequencies(); double[] scanFrequencies = rileyLinkServiceData.rileyLinkTargetFrequency.getScanFrequencies();
if (scanFrequencies.length == 1) { if (scanFrequencies.length == 1) {
return RileyLinkUtil.isSame(scanFrequencies[0], frequency); return Round.isSame(scanFrequencies[0], frequency);
} else { } else {
return (scanFrequencies[0] <= frequency && scanFrequencies[scanFrequencies.length - 1] >= frequency); return (scanFrequencies[0] <= frequency && scanFrequencies[scanFrequencies.length - 1] >= frequency);
} }

View file

@ -18,6 +18,7 @@ import javax.inject.Singleton;
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.ble.data.encoding.Encoding4b6b; import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.ble.data.encoding.Encoding4b6b;
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.ble.data.encoding.Encoding4b6bGeoff; import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.ble.data.encoding.Encoding4b6bGeoff;
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.ble.defs.RileyLinkEncodingType; import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.ble.defs.RileyLinkEncodingType;
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.ble.defs.RileyLinkTargetFrequency;
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.data.BleAdvertisedData; import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.data.BleAdvertisedData;
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.data.RLHistoryItem; import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.data.RLHistoryItem;
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.data.ServiceResult; import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.data.ServiceResult;
@ -37,6 +38,9 @@ public class RileyLinkUtil {
private RileyLinkEncodingType encoding; private RileyLinkEncodingType encoding;
private Encoding4b6b encoding4b6b; private Encoding4b6b encoding4b6b;
// TODO maybe not needed
private RileyLinkTargetFrequency rileyLinkTargetFrequency;
@Inject @Inject
public RileyLinkUtil() { public RileyLinkUtil() {
} }
@ -154,4 +158,8 @@ public class RileyLinkUtil {
public Encoding4b6b getEncoding4b6b() { public Encoding4b6b getEncoding4b6b() {
return encoding4b6b; return encoding4b6b;
} }
public void setRileyLinkTargetFrequency(RileyLinkTargetFrequency rileyLinkTargetFrequency_) {
this.rileyLinkTargetFrequency = rileyLinkTargetFrequency_;
}
} }

View file

@ -363,7 +363,7 @@ public class RFSpy {
} }
this.selectedTargetFrequency = frequency; //this.selectedTargetFrequency = frequency;
} }

View file

@ -1,4 +1,19 @@
package info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs; package info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs;
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.RileyLinkService;
public interface RileyLinkPumpDevice { public interface RileyLinkPumpDevice {
void setIsBusy(boolean isBusy_);
boolean isBusy();
void resetRileyLinkConfiguration();
boolean hasTuneUp();
void doTuneUpDevice();
RileyLinkService getRileyLinkService();
} }

View file

@ -13,7 +13,15 @@ import java.util.Locale;
import javax.inject.Inject; import javax.inject.Inject;
import dagger.android.support.DaggerFragment; import dagger.android.support.DaggerFragment;
import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R; import info.nightscout.androidaps.R;
import info.nightscout.androidaps.interfaces.ActivePluginProvider;
import info.nightscout.androidaps.interfaces.PumpDescription;
import info.nightscout.androidaps.logging.AAPSLogger;
import info.nightscout.androidaps.plugins.common.ManufacturerType;
import info.nightscout.androidaps.plugins.pump.common.PumpPluginAbstract;
import info.nightscout.androidaps.plugins.pump.common.data.PumpStatus;
import info.nightscout.androidaps.plugins.pump.common.defs.PumpType;
import info.nightscout.androidaps.plugins.pump.common.dialog.RefreshableInterface; import info.nightscout.androidaps.plugins.pump.common.dialog.RefreshableInterface;
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.RileyLinkUtil; 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.RileyLinkFirmwareVersion;
@ -23,6 +31,7 @@ import info.nightscout.androidaps.plugins.pump.common.utils.StringUtil;
import info.nightscout.androidaps.plugins.pump.medtronic.MedtronicPumpPlugin; import info.nightscout.androidaps.plugins.pump.medtronic.MedtronicPumpPlugin;
import info.nightscout.androidaps.plugins.pump.medtronic.driver.MedtronicPumpStatus; import info.nightscout.androidaps.plugins.pump.medtronic.driver.MedtronicPumpStatus;
import info.nightscout.androidaps.plugins.pump.medtronic.util.MedtronicUtil; import info.nightscout.androidaps.plugins.pump.medtronic.util.MedtronicUtil;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.OmnipodPumpStatus;
import info.nightscout.androidaps.utils.resources.ResourceHelper; import info.nightscout.androidaps.utils.resources.ResourceHelper;
/** /**
@ -31,12 +40,17 @@ import info.nightscout.androidaps.utils.resources.ResourceHelper;
public class RileyLinkStatusGeneralFragment extends DaggerFragment implements RefreshableInterface { public class RileyLinkStatusGeneralFragment extends DaggerFragment implements RefreshableInterface {
// TODO fix this is not correct @Inject ActivePluginProvider activePlugin;
@Inject RileyLinkUtil rileyLinkUtil;
@Inject MedtronicUtil medtronicUtil;
@Inject MedtronicPumpStatus medtronicPumpStatus;
@Inject ResourceHelper resourceHelper; @Inject ResourceHelper resourceHelper;
@Inject MedtronicPumpPlugin medtronicPumpPlugin; @Inject MedtronicUtil medtronicUtil;
@Inject AAPSLogger aapsLogger;
// TODO fix this is not correct
//@Inject RileyLinkUtil rileyLinkUtil;
//@Inject MedtronicUtil medtronicUtil;
//@Inject MedtronicPumpStatus medtronicPumpStatus;
//@Inject MedtronicPumpPlugin medtronicPumpPlugin;
@Inject RileyLinkServiceData rileyLinkServiceData; @Inject RileyLinkServiceData rileyLinkServiceData;
TextView connectionStatus; TextView connectionStatus;
@ -51,10 +65,10 @@ public class RileyLinkStatusGeneralFragment extends DaggerFragment implements Re
TextView lastDeviceContact; TextView lastDeviceContact;
TextView firmwareVersion; TextView firmwareVersion;
RileyLinkServiceData rileyLinkServiceData; //RileyLinkServiceData rileyLinkServiceData;
MedtronicPumpStatus medtronicPumpStatus; //MedtronicPumpStatus medtronicPumpStatus;
OmnipodPumpStatus omnipodPumpStatus; //OmnipodPumpStatus omnipodPumpStatus;
boolean first = false; boolean first = false;
@ -69,7 +83,6 @@ public class RileyLinkStatusGeneralFragment extends DaggerFragment implements Re
@Override @Override
public void onStart() { public void onStart() {
super.onStart(); super.onStart();
rileyLinkServiceData = RileyLinkUtil.getRileyLinkServiceData();
this.connectionStatus = getActivity().findViewById(R.id.rls_t1_connection_status); this.connectionStatus = getActivity().findViewById(R.id.rls_t1_connection_status);
this.configuredAddress = getActivity().findViewById(R.id.rls_t1_configured_address); this.configuredAddress = getActivity().findViewById(R.id.rls_t1_configured_address);
@ -129,14 +142,19 @@ public class RileyLinkStatusGeneralFragment extends DaggerFragment implements Re
// TODO add handling for Omnipod pump status // TODO add handling for Omnipod pump status
// TODO refactor this Omnipod // TODO refactor this Omnipod
if (medtronicPumpStatus != null) { PumpPluginAbstract pumpPlugin = (PumpPluginAbstract)activePlugin.getActivePump();
//if (activePlugin)
if (pumpPlugin.manufacturer()== ManufacturerType.Medtronic) {
MedtronicPumpStatus medtronicPumpStatus = (MedtronicPumpStatus)pumpPlugin.getPumpStatusData();
this.deviceType.setText(resourceHelper.gs(RileyLinkTargetDevice.MedtronicPump.getResourceId())); this.deviceType.setText(resourceHelper.gs(RileyLinkTargetDevice.MedtronicPump.getResourceId()));
this.deviceModel.setText(medtronicPumpPlugin.getPumpDescription().pumpType.getDescription()); this.deviceModel.setText(pumpPlugin.getPumpType().getDescription());
this.serialNumber.setText(medtronicPumpStatus.serialNumber); this.serialNumber.setText(medtronicPumpStatus.serialNumber);
this.pumpFrequency.setText(resourceHelper.gs(medtronicPumpStatus.pumpFrequency.equals("medtronic_pump_frequency_us_ca") ? R.string.medtronic_pump_frequency_us_ca : R.string.medtronic_pump_frequency_worldwide)); this.pumpFrequency.setText(resourceHelper.gs(medtronicPumpStatus.pumpFrequency.equals("medtronic_pump_frequency_us_ca") ? R.string.medtronic_pump_frequency_us_ca : R.string.medtronic_pump_frequency_worldwide));
// TODO extend when Omnipod used
if (medtronicUtil.getMedtronicPumpModel() != null) if (medtronicUtil.getMedtronicPumpModel() != null)
this.connectedDevice.setText("Medtronic " + medtronicUtil.getMedtronicPumpModel().getPumpModel()); this.connectedDevice.setText("Medtronic " + medtronicUtil.getMedtronicPumpModel().getPumpModel());
else else
@ -150,17 +168,23 @@ public class RileyLinkStatusGeneralFragment extends DaggerFragment implements Re
this.lastDeviceContact.setText(StringUtil.toDateTimeString(new LocalDateTime( this.lastDeviceContact.setText(StringUtil.toDateTimeString(new LocalDateTime(
medtronicPumpStatus.lastDataTime))); medtronicPumpStatus.lastDataTime)));
else else
this.lastDeviceContact.setText("Never"); this.lastDeviceContact.setText(resourceHelper.gs(R.string.common_never));
} else { } else {
// if (OmnipodUtil.isOmnipodDash()) OmnipodPumpStatus omnipodPumpStatus = (OmnipodPumpStatus)pumpPlugin.getPumpStatusData();
// TODO add handling for Omnipod Dash pump status
this.omnipodPumpStatus = OmnipodUtil.getPumpStatus(); this.deviceType.setText(resourceHelper.gs(RileyLinkTargetDevice.Omnipod.getResourceId()));
this.deviceModel.setText(pumpPlugin.getPumpType() == PumpType.Insulet_Omnipod ? "Eros" : "Dash");
if (pumpPlugin.getPumpType()== PumpType.Insulet_Omnipod_Dash) {
aapsLogger.error("Omnipod Dash not yet supported !!!");
this.pumpFrequency.setText("-");
} else {
this.pumpFrequency.setText(resourceHelper.gs(R.string.omnipod_frequency));
if (omnipodPumpStatus != null) { if (omnipodPumpStatus != null) {
this.deviceType.setText(MainApp.gs(RileyLinkTargetDevice.Omnipod.getResourceId()));
this.deviceModel.setText(omnipodPumpStatus.pumpType == PumpType.Insulet_Omnipod ? "Eros" : "Dash");
this.pumpFrequency.setText(MainApp.gs(R.string.omnipod_frequency));
if (omnipodPumpStatus.podAvailable) { if (omnipodPumpStatus.podAvailable) {
this.serialNumber.setText(omnipodPumpStatus.podLotNumber); this.serialNumber.setText(omnipodPumpStatus.podLotNumber);
@ -178,7 +202,8 @@ public class RileyLinkStatusGeneralFragment extends DaggerFragment implements Re
this.lastDeviceContact.setText(StringUtil.toDateTimeString(new LocalDateTime( this.lastDeviceContact.setText(StringUtil.toDateTimeString(new LocalDateTime(
omnipodPumpStatus.lastDataTime))); omnipodPumpStatus.lastDataTime)));
else else
this.lastDeviceContact.setText(MainApp.gs(R.string.common_never)); this.lastDeviceContact.setText(resourceHelper.gs(R.string.common_never));
}
} }
} }

View file

@ -10,6 +10,8 @@ import org.jetbrains.annotations.NotNull;
import javax.inject.Inject; import javax.inject.Inject;
import dagger.android.DaggerService; import dagger.android.DaggerService;
import dagger.android.HasAndroidInjector;
import info.nightscout.androidaps.interfaces.ActivePluginProvider;
import info.nightscout.androidaps.logging.AAPSLogger; import info.nightscout.androidaps.logging.AAPSLogger;
import info.nightscout.androidaps.logging.LTag; import info.nightscout.androidaps.logging.LTag;
import info.nightscout.androidaps.plugins.bus.RxBusWrapper; import info.nightscout.androidaps.plugins.bus.RxBusWrapper;
@ -27,6 +29,7 @@ import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.data.
import info.nightscout.androidaps.plugins.pump.medtronic.defs.PumpDeviceState; import info.nightscout.androidaps.plugins.pump.medtronic.defs.PumpDeviceState;
import info.nightscout.androidaps.plugins.pump.medtronic.driver.MedtronicPumpStatus; import info.nightscout.androidaps.plugins.pump.medtronic.driver.MedtronicPumpStatus;
import info.nightscout.androidaps.plugins.pump.medtronic.util.MedtronicUtil; import info.nightscout.androidaps.plugins.pump.medtronic.util.MedtronicUtil;
import info.nightscout.androidaps.utils.resources.ResourceHelper;
import info.nightscout.androidaps.utils.sharedPreferences.SP; import info.nightscout.androidaps.utils.sharedPreferences.SP;
/** /**
@ -40,9 +43,10 @@ public abstract class RileyLinkService extends DaggerService {
@Inject protected Context context; @Inject protected Context context;
@Inject protected RxBusWrapper rxBus; @Inject protected RxBusWrapper rxBus;
@Inject protected RileyLinkUtil rileyLinkUtil; @Inject protected RileyLinkUtil rileyLinkUtil;
@Inject protected MedtronicUtil medtronicUtil; // TODO should be avoided here as it's MDT @Inject protected HasAndroidInjector injector;
@Inject protected ResourceHelper resourceHelper;
@Inject protected RileyLinkServiceData rileyLinkServiceData; @Inject protected RileyLinkServiceData rileyLinkServiceData;
@Inject protected MedtronicPumpStatus medtronicPumpStatus; @Inject protected ActivePluginProvider activePlugin;
@NotNull protected RileyLinkBLE rileyLinkBLE; // android-bluetooth management, must be set in initRileyLinkServiceData @NotNull protected RileyLinkBLE rileyLinkBLE; // android-bluetooth management, must be set in initRileyLinkServiceData
protected BluetoothAdapter bluetoothAdapter; protected BluetoothAdapter bluetoothAdapter;
@ -202,11 +206,13 @@ public abstract class RileyLinkService extends DaggerService {
} }
// FIXME: This needs to be run in a session so that is interruptable, has a separate thread, etc. // FIXME: This needs to be run in a session so that is interruptable, has a separate thread, etc.
public void doTuneUpDevice() { public void doTuneUpDevice() {
rileyLinkServiceData.setRileyLinkServiceState(RileyLinkServiceState.TuneUpDevice); rileyLinkServiceData.setRileyLinkServiceState(RileyLinkServiceState.TuneUpDevice);
medtronicPumpStatus.setPumpDeviceState(PumpDeviceState.Sleeping); setPumpDeviceState(PumpDeviceState.Sleeping);
double lastGoodFrequency = 0.0d; double lastGoodFrequency = 0.0d;
@ -238,6 +244,9 @@ public abstract class RileyLinkService extends DaggerService {
} }
public abstract void setPumpDeviceState(PumpDeviceState pumpDeviceState);
public void disconnectRileyLink() { public void disconnectRileyLink() {
if (rileyLinkBLE.isConnected()) { if (rileyLinkBLE.isConnected()) {
@ -272,4 +281,6 @@ public abstract class RileyLinkService extends DaggerService {
else else
return null; return null;
} }
public abstract boolean verifyConfiguration();
} }

View file

@ -8,14 +8,18 @@ import dagger.android.HasAndroidInjector;
import info.nightscout.androidaps.interfaces.ActivePluginProvider; import info.nightscout.androidaps.interfaces.ActivePluginProvider;
import info.nightscout.androidaps.logging.AAPSLogger; import info.nightscout.androidaps.logging.AAPSLogger;
import info.nightscout.androidaps.logging.LTag; import info.nightscout.androidaps.logging.LTag;
import info.nightscout.androidaps.plugins.common.ManufacturerType;
import info.nightscout.androidaps.plugins.pump.common.PumpPluginAbstract; import info.nightscout.androidaps.plugins.pump.common.PumpPluginAbstract;
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.RileyLinkCommunicationManager; import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.RileyLinkCommunicationManager;
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.RileyLinkConst; import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.RileyLinkConst;
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.RileyLinkUtil; import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.RileyLinkUtil;
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.ble.defs.RileyLinkTargetFrequency;
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs.RileyLinkError; import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs.RileyLinkError;
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs.RileyLinkPumpDevice;
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs.RileyLinkServiceState; import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs.RileyLinkServiceState;
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.RileyLinkServiceData; import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.RileyLinkServiceData;
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.data.ServiceTransport; import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.data.ServiceTransport;
import info.nightscout.androidaps.utils.Round;
import info.nightscout.androidaps.utils.sharedPreferences.SP; import info.nightscout.androidaps.utils.sharedPreferences.SP;
/** /**
@ -63,9 +67,9 @@ public class InitializePumpManagerTask extends ServiceTask {
} }
// TODO Omnipod/Dagger needs refactoring // TODO Omnipod/Dagger needs refactoring
RileyLinkCommunicationManager rileyLinkCommunicationManager = ((RileyLinkPumpDevice) activePlugin.getActivePump()).getRileyLinkService().getDeviceCommunicationManager();
if (MedtronicUtil.isMedtronicPump()) { if (activePlugin.getActivePump().manufacturer() == ManufacturerType.Medtronic) {
RileyLinkCommunicationManager rileyLinkCommunicationManager = ((PumpPluginAbstract) activePlugin.getActivePump()).getRileyLinkService().getDeviceCommunicationManager();
if ((lastGoodFrequency > 0.0d) if ((lastGoodFrequency > 0.0d)
&& rileyLinkCommunicationManager.isValidFrequency(lastGoodFrequency)) { && rileyLinkCommunicationManager.isValidFrequency(lastGoodFrequency)) {
@ -91,27 +95,24 @@ public class InitializePumpManagerTask extends ServiceTask {
} }
} else { } else {
if (!RileyLinkUtil.isSame(lastGoodFrequency, RileyLinkTargetFrequency.Omnipod.getScanFrequencies()[0])) { if (!Round.isSame(lastGoodFrequency, RileyLinkTargetFrequency.Omnipod.getScanFrequencies()[0])) {
lastGoodFrequency = RileyLinkTargetFrequency.Omnipod.getScanFrequencies()[0]; lastGoodFrequency = RileyLinkTargetFrequency.Omnipod.getScanFrequencies()[0];
lastGoodFrequency = Math.round(lastGoodFrequency * 1000d) / 1000d; lastGoodFrequency = Math.round(lastGoodFrequency * 1000d) / 1000d;
RileyLinkUtil.getRileyLinkServiceData().lastGoodFrequency = lastGoodFrequency; rileyLinkServiceData.lastGoodFrequency = lastGoodFrequency;
} }
RileyLinkUtil.setServiceState(RileyLinkServiceState.RileyLinkReady); rileyLinkServiceData.setRileyLinkServiceState(RileyLinkServiceState.RileyLinkReady);
RileyLinkUtil.setRileyLinkTargetFrequency(RileyLinkTargetFrequency.Omnipod); rileyLinkUtil.setRileyLinkTargetFrequency(RileyLinkTargetFrequency.Omnipod);
if (L.isEnabled(L.PUMPCOMM)) aapsLogger.info(LTag.PUMPCOMM, "Setting radio frequency to {} MHz", lastGoodFrequency);
LOG.info("Setting radio frequency to {} MHz", lastGoodFrequency);
RileyLinkUtil.getRileyLinkCommunicationManager().setRadioFrequencyForPump(lastGoodFrequency); rileyLinkCommunicationManager.setRadioFrequencyForPump(lastGoodFrequency);
rileyLinkServiceData.setRileyLinkServiceState(RileyLinkServiceState.PumpConnectorReady);
LOG.error("TRYYYYYY TO CONNECT IF AVAILABLE");
RileyLinkUtil.setServiceState(RileyLinkServiceState.PumpConnectorReady);
} }
} }
} }

View file

@ -1,6 +1,14 @@
package info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.tasks; package info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.tasks;
import javax.inject.Inject;
import dagger.android.HasAndroidInjector;
import info.nightscout.androidaps.interfaces.ActivePluginProvider;
import info.nightscout.androidaps.plugins.bus.RxBus; import info.nightscout.androidaps.plugins.bus.RxBus;
import info.nightscout.androidaps.plugins.bus.RxBusWrapper;
import info.nightscout.androidaps.plugins.common.ManufacturerType;
import info.nightscout.androidaps.plugins.pump.common.PumpPluginAbstract;
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs.RileyLinkPumpDevice;
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.data.ServiceTransport; import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.data.ServiceTransport;
import info.nightscout.androidaps.plugins.pump.medtronic.MedtronicPumpPlugin; import info.nightscout.androidaps.plugins.pump.medtronic.MedtronicPumpPlugin;
import info.nightscout.androidaps.plugins.pump.medtronic.events.EventRefreshButtonState; import info.nightscout.androidaps.plugins.pump.medtronic.events.EventRefreshButtonState;
@ -12,31 +20,32 @@ import info.nightscout.androidaps.plugins.pump.medtronic.service.RileyLinkMedtro
public class ResetRileyLinkConfigurationTask extends PumpTask { public class ResetRileyLinkConfigurationTask extends PumpTask {
private static final String TAG = "ResetRileyLinkTask"; private static final String TAG = "ResetRileyLinkTask";
@Inject ActivePluginProvider activePlugin;
@Inject RxBusWrapper rxBus;
public ResetRileyLinkConfigurationTask(HasAndroidInjector injector) {
public ResetRileyLinkConfigurationTask() { super(injector);
} }
public ResetRileyLinkConfigurationTask(ServiceTransport transport) { public ResetRileyLinkConfigurationTask(HasAndroidInjector injector, ServiceTransport transport) {
super(transport); super(injector, transport);
} }
@Override @Override
public void run() { public void run() {
// TODO Omnipod refactor this // this is intended only for RL supported pump, so we can cast to PumpPluginAbstract
if (MedtronicUtil.isMedtronicPump()) { RileyLinkPumpDevice pumpAbstract = (RileyLinkPumpDevice)activePlugin.getActivePump();
RxBus.Companion.getINSTANCE().send(new EventRefreshButtonState(false));
MedtronicPumpPlugin.isBusy = true; rxBus.send(new EventRefreshButtonState(false));
RileyLinkMedtronicService.getInstance().resetRileyLinkConfiguration();
MedtronicPumpPlugin.isBusy = false; pumpAbstract.setIsBusy(true);
RxBus.Companion.getINSTANCE().send(new EventRefreshButtonState(true)); pumpAbstract.resetRileyLinkConfiguration();
} else if (OmnipodUtil.isOmnipodEros()) { pumpAbstract.setIsBusy(false);
OmnipodPumpPlugin.isBusy = true;
RileyLinkOmnipodService.getInstance().resetRileyLinkConfiguration(); rxBus.send(new EventRefreshButtonState(true));
OmnipodPumpPlugin.isBusy = false;
} }
RxBus.Companion.getINSTANCE().send(new EventRefreshButtonState(true));
} }

View file

@ -6,6 +6,7 @@ import dagger.android.HasAndroidInjector;
import info.nightscout.androidaps.interfaces.ActivePluginProvider; import info.nightscout.androidaps.interfaces.ActivePluginProvider;
import info.nightscout.androidaps.plugins.bus.RxBusWrapper; import info.nightscout.androidaps.plugins.bus.RxBusWrapper;
import info.nightscout.androidaps.plugins.pump.common.PumpPluginAbstract; import info.nightscout.androidaps.plugins.pump.common.PumpPluginAbstract;
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs.RileyLinkPumpDevice;
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.data.ServiceTransport; import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.data.ServiceTransport;
import info.nightscout.androidaps.plugins.pump.medtronic.MedtronicPumpPlugin; import info.nightscout.androidaps.plugins.pump.medtronic.MedtronicPumpPlugin;
import info.nightscout.androidaps.plugins.pump.medtronic.events.EventRefreshButtonState; import info.nightscout.androidaps.plugins.pump.medtronic.events.EventRefreshButtonState;
@ -34,9 +35,10 @@ public class WakeAndTuneTask extends PumpTask {
@Override @Override
public void run() { public void run() {
PumpPluginAbstract pump = (PumpPluginAbstract) activePlugin.getActivePump(); PumpPluginAbstract pump = (PumpPluginAbstract) activePlugin.getActivePump();
RileyLinkPumpDevice pumpDevice = (RileyLinkPumpDevice)pump;
rxBus.send(new EventRefreshButtonState(false)); rxBus.send(new EventRefreshButtonState(false));
MedtronicPumpPlugin.isBusy = true; MedtronicPumpPlugin.isBusy = true;
pump.doTuneUpDevice(); pumpDevice.doTuneUpDevice();
MedtronicPumpPlugin.isBusy = false; MedtronicPumpPlugin.isBusy = false;
rxBus.send(new EventRefreshButtonState(true)); rxBus.send(new EventRefreshButtonState(true));
} }

View file

@ -57,6 +57,7 @@ import info.nightscout.androidaps.plugins.pump.common.defs.PumpDriverState;
import info.nightscout.androidaps.plugins.pump.common.defs.PumpType; import info.nightscout.androidaps.plugins.pump.common.defs.PumpType;
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.RileyLinkConst; import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.RileyLinkConst;
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.RileyLinkUtil; import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.RileyLinkUtil;
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs.RileyLinkPumpDevice;
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs.RileyLinkServiceState; import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs.RileyLinkServiceState;
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.RileyLinkServiceData; import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.RileyLinkServiceData;
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.tasks.ResetRileyLinkConfigurationTask; import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.tasks.ResetRileyLinkConfigurationTask;
@ -95,7 +96,7 @@ import info.nightscout.androidaps.utils.sharedPreferences.SP;
* @author Andy Rozman (andy.rozman@gmail.com) * @author Andy Rozman (andy.rozman@gmail.com)
*/ */
@Singleton @Singleton
public class MedtronicPumpPlugin extends PumpPluginAbstract implements PumpInterface { public class MedtronicPumpPlugin extends PumpPluginAbstract implements PumpInterface, RileyLinkPumpDevice {
private final SP sp; private final SP sp;
private final RileyLinkUtil rileyLinkUtil; private final RileyLinkUtil rileyLinkUtil;
@ -244,6 +245,11 @@ public class MedtronicPumpPlugin extends PumpPluginAbstract implements PumpInter
rileyLinkMedtronicService.resetRileyLinkConfiguration(); rileyLinkMedtronicService.resetRileyLinkConfiguration();
} }
@Override
public boolean hasTuneUp() {
return true;
}
@Override public void doTuneUpDevice() { @Override public void doTuneUpDevice() {
rileyLinkMedtronicService.doTuneUpDevice(); rileyLinkMedtronicService.doTuneUpDevice();
} }
@ -339,6 +345,11 @@ public class MedtronicPumpPlugin extends PumpPluginAbstract implements PumpInter
} }
@Override
public void setIsBusy(boolean isBusy_) {
isBusy = isBusy_;
}
@Override @Override
public boolean isBusy() { public boolean isBusy() {
if (displayConnectionMessages) if (displayConnectionMessages)

View file

@ -92,6 +92,11 @@ public class MedtronicCommunicationManager extends RileyLinkCommunicationManager
return (E) pumpMessage; return (E) pumpMessage;
} }
@Override
public void setPumpDeviceState(PumpDeviceState pumpDeviceState) {
this.medtronicPumpStatus.setPumpDeviceState(pumpDeviceState);
}
public void setDoWakeUpBeforeCommand(boolean doWakeUp) { public void setDoWakeUpBeforeCommand(boolean doWakeUp) {
this.doWakeUpBeforeCommand = doWakeUp; this.doWakeUpBeforeCommand = doWakeUp;
} }

View file

@ -55,6 +55,7 @@ import info.nightscout.androidaps.plugins.treatments.Treatment;
import info.nightscout.androidaps.plugins.treatments.TreatmentService; import info.nightscout.androidaps.plugins.treatments.TreatmentService;
import info.nightscout.androidaps.plugins.treatments.TreatmentsPlugin; import info.nightscout.androidaps.plugins.treatments.TreatmentsPlugin;
import info.nightscout.androidaps.utils.DateUtil; import info.nightscout.androidaps.utils.DateUtil;
import info.nightscout.androidaps.utils.Round;
import info.nightscout.androidaps.utils.sharedPreferences.SP; import info.nightscout.androidaps.utils.sharedPreferences.SP;
@ -655,7 +656,7 @@ public class MedtronicHistoryData {
Treatment treatment = (Treatment) dbObjectBase; Treatment treatment = (Treatment) dbObjectBase;
if (RileyLinkUtil.isSame(treatment.insulin, 0d)) { if (Round.isSame(treatment.insulin, 0d)) {
removeList.add(dbObjectBase); removeList.add(dbObjectBase);
} }
} }

View file

@ -60,13 +60,12 @@ public class MedtronicPumpStatus extends PumpStatus {
@Inject @Inject
public MedtronicPumpStatus( public MedtronicPumpStatus(ResourceHelper resourceHelper,
ResourceHelper resourceHelper,
SP sp, SP sp,
RxBusWrapper rxBus, RxBusWrapper rxBus,
RileyLinkUtil rileyLinkUtil RileyLinkUtil rileyLinkUtil
) { ) {
super(); super(PumpType.Medtronic_522_722);
this.resourceHelper = resourceHelper; this.resourceHelper = resourceHelper;
this.sp = sp; this.sp = sp;
this.rxBus = rxBus; this.rxBus = rxBus;
@ -75,7 +74,7 @@ public class MedtronicPumpStatus extends PumpStatus {
} }
private void initSettings() { public void initSettings() {
this.activeProfileName = "STD"; this.activeProfileName = "STD";
this.reservoirRemainingUnits = 75d; this.reservoirRemainingUnits = 75d;
@ -122,7 +121,6 @@ public class MedtronicPumpStatus extends PumpStatus {
medtronicPumpMap.put("723", PumpType.Medtronic_523_723_Revel); medtronicPumpMap.put("723", PumpType.Medtronic_523_723_Revel);
medtronicPumpMap.put("554", PumpType.Medtronic_554_754_Veo); medtronicPumpMap.put("554", PumpType.Medtronic_554_754_Veo);
medtronicPumpMap.put("754", PumpType.Medtronic_554_754_Veo); medtronicPumpMap.put("754", PumpType.Medtronic_554_754_Veo);
} }
public Map<String, PumpType> getMedtronicPumpMap() { public Map<String, PumpType> getMedtronicPumpMap() {

View file

@ -38,8 +38,6 @@ import info.nightscout.androidaps.utils.resources.ResourceHelper;
*/ */
public class RileyLinkMedtronicService extends RileyLinkService { public class RileyLinkMedtronicService extends RileyLinkService {
@Inject HasAndroidInjector injector;
@Inject ResourceHelper resourceHelper;
@Inject MedtronicPumpPlugin medtronicPumpPlugin; @Inject MedtronicPumpPlugin medtronicPumpPlugin;
@Inject MedtronicUtil medtronicUtil; @Inject MedtronicUtil medtronicUtil;
@Inject MedtronicUIPostprocessor medtronicUIPostprocessor; @Inject MedtronicUIPostprocessor medtronicUIPostprocessor;
@ -120,6 +118,12 @@ public class RileyLinkMedtronicService extends RileyLinkService {
} }
@Override
public void setPumpDeviceState(PumpDeviceState pumpDeviceState) {
this.medtronicPumpStatus.setPumpDeviceState(pumpDeviceState);
}
public MedtronicUIComm getMedtronicUIComm() { public MedtronicUIComm getMedtronicUIComm() {
return medtronicUIComm; return medtronicUIComm;
} }
@ -236,7 +240,8 @@ public class RileyLinkMedtronicService extends RileyLinkService {
} else { } else {
PumpType pumpType = medtronicPumpStatus.getMedtronicPumpMap().get(pumpTypePart); PumpType pumpType = medtronicPumpStatus.getMedtronicPumpMap().get(pumpTypePart);
medtronicPumpStatus.medtronicDeviceType = medtronicPumpStatus.getMedtronicDeviceTypeMap().get(pumpTypePart); medtronicPumpStatus.medtronicDeviceType = medtronicPumpStatus.getMedtronicDeviceTypeMap().get(pumpTypePart);
medtronicPumpPlugin.getPumpDescription().setPumpDescription(pumpType); //medtronicPumpPlugin.getPumpDescription().setPumpDescription(pumpType);
medtronicPumpPlugin.setPumpType(pumpType);
if (pumpTypePart.startsWith("7")) if (pumpTypePart.startsWith("7"))
medtronicPumpStatus.reservoirFullUnits = 300; medtronicPumpStatus.reservoirFullUnits = 300;

View file

@ -68,6 +68,7 @@ public class MedtronicUtil {
this.medtronicPumpStatus = medtronicPumpStatus; this.medtronicPumpStatus = medtronicPumpStatus;
} }
public LocalTime getTimeFrom30MinInterval(int interval) { public LocalTime getTimeFrom30MinInterval(int interval) {
if (interval % 2 == 0) { if (interval % 2 == 0) {
return new LocalTime(interval / 2, 0); return new LocalTime(interval / 2, 0);

View file

@ -7,7 +7,6 @@ import android.os.Handler
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.fragment.app.Fragment
import dagger.android.support.DaggerFragment import dagger.android.support.DaggerFragment
import info.nightscout.androidaps.MainApp import info.nightscout.androidaps.MainApp
import info.nightscout.androidaps.R import info.nightscout.androidaps.R
@ -17,16 +16,13 @@ import info.nightscout.androidaps.interfaces.CommandQueueProvider
import info.nightscout.androidaps.logging.AAPSLogger import info.nightscout.androidaps.logging.AAPSLogger
import info.nightscout.androidaps.logging.L import info.nightscout.androidaps.logging.L
import info.nightscout.androidaps.logging.LTag import info.nightscout.androidaps.logging.LTag
import info.nightscout.androidaps.plugins.bus.RxBus
import info.nightscout.androidaps.plugins.bus.RxBusWrapper import info.nightscout.androidaps.plugins.bus.RxBusWrapper
import info.nightscout.androidaps.plugins.configBuilder.ConfigBuilderPlugin
import info.nightscout.androidaps.plugins.pump.common.defs.PumpType import info.nightscout.androidaps.plugins.pump.common.defs.PumpType
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.RileyLinkUtil import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.RileyLinkUtil
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs.RileyLinkError 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.RileyLinkServiceState
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs.RileyLinkTargetDevice import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs.RileyLinkTargetDevice
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.dialog.RileyLinkStatusActivity import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.dialog.RileyLinkStatusActivity
import info.nightscout.androidaps.plugins.pump.medtronic.MedtronicPumpPlugin
import info.nightscout.androidaps.plugins.pump.omnipod.defs.OmnipodStatusRequest import info.nightscout.androidaps.plugins.pump.omnipod.defs.OmnipodStatusRequest
import info.nightscout.androidaps.plugins.pump.omnipod.defs.PodDeviceState import info.nightscout.androidaps.plugins.pump.omnipod.defs.PodDeviceState
import info.nightscout.androidaps.plugins.pump.omnipod.dialogs.PodManagementActivity import info.nightscout.androidaps.plugins.pump.omnipod.dialogs.PodManagementActivity
@ -38,16 +34,15 @@ import info.nightscout.androidaps.plugins.pump.omnipod.events.EventOmnipodPumpVa
import info.nightscout.androidaps.plugins.pump.omnipod.events.EventOmnipodRefreshButtonState import info.nightscout.androidaps.plugins.pump.omnipod.events.EventOmnipodRefreshButtonState
import info.nightscout.androidaps.plugins.pump.omnipod.util.OmnipodConst import info.nightscout.androidaps.plugins.pump.omnipod.util.OmnipodConst
import info.nightscout.androidaps.plugins.pump.omnipod.util.OmnipodUtil import info.nightscout.androidaps.plugins.pump.omnipod.util.OmnipodUtil
import info.nightscout.androidaps.plugins.treatments.TreatmentsPlugin
import info.nightscout.androidaps.queue.Callback import info.nightscout.androidaps.queue.Callback
import info.nightscout.androidaps.utils.* import info.nightscout.androidaps.utils.*
import info.nightscout.androidaps.utils.alertDialogs.OKDialog
import info.nightscout.androidaps.utils.resources.ResourceHelper import info.nightscout.androidaps.utils.resources.ResourceHelper
import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.CompositeDisposable import io.reactivex.disposables.CompositeDisposable
import io.reactivex.disposables.Disposable import io.reactivex.disposables.Disposable
import io.reactivex.schedulers.Schedulers import io.reactivex.schedulers.Schedulers
import kotlinx.android.synthetic.main.omnipod_fragment.* import kotlinx.android.synthetic.main.omnipod_fragment.*
import org.slf4j.LoggerFactory
import javax.inject.Inject import javax.inject.Inject
class OmnipodFragment : DaggerFragment() { class OmnipodFragment : DaggerFragment() {
@ -61,6 +56,7 @@ class OmnipodFragment : DaggerFragment() {
@Inject lateinit var activePlugin: ActivePluginProvider @Inject lateinit var activePlugin: ActivePluginProvider
@Inject lateinit var omnipodPumpPlugin: OmnipodPumpPlugin @Inject lateinit var omnipodPumpPlugin: OmnipodPumpPlugin
@Inject lateinit var warnColors: WarnColors @Inject lateinit var warnColors: WarnColors
@Inject lateinit var omnipodPumpStatus: OmnipodPumpStatus
private var disposable: CompositeDisposable = CompositeDisposable() private var disposable: CompositeDisposable = CompositeDisposable()
@ -100,19 +96,19 @@ class OmnipodFragment : DaggerFragment() {
omnipod_pod_status.text = "{fa-bed}" omnipod_pod_status.text = "{fa-bed}"
omnipod_pod_mgmt.setOnClickListener { omnipod_pod_mgmt.setOnClickListener {
if (OmnipodUtil.getPumpStatus().verifyConfiguration()) { if (omnipodPumpPlugin.rileyLinkService?.verifyConfiguration() == true) {
startActivity(Intent(context, PodManagementActivity::class.java)) startActivity(Intent(context, PodManagementActivity::class.java))
} else { } else {
OmnipodUtil.displayNotConfiguredDialog(context) displayNotConfiguredDialog()
} }
} }
omnipod_refresh.setOnClickListener { omnipod_refresh.setOnClickListener {
if (!OmnipodUtil.getPumpStatus().verifyConfiguration()) { if (omnipodPumpPlugin.rileyLinkService?.verifyConfiguration() != true) {
OmnipodUtil.displayNotConfiguredDialog(context) OmnipodUtil.displayNotConfiguredDialog(context)
} else { } else {
omnipod_refresh.isEnabled = false omnipod_refresh.isEnabled = false
OmnipodUtil.getPlugin().addPodStatusRequest(OmnipodStatusRequest.GetPodState); omnipodPumpPlugin.addPodStatusRequest(OmnipodStatusRequest.GetPodState);
commandQueue.readStatus("Clicked Refresh", object : Callback() { commandQueue.readStatus("Clicked Refresh", object : Callback() {
override fun run() { override fun run() {
activity?.runOnUiThread { omnipod_refresh.isEnabled = true } activity?.runOnUiThread { omnipod_refresh.isEnabled = true }
@ -122,26 +118,26 @@ class OmnipodFragment : DaggerFragment() {
} }
omnipod_stats.setOnClickListener { omnipod_stats.setOnClickListener {
if (OmnipodUtil.getPumpStatus().verifyConfiguration()) { if (omnipodPumpPlugin.rileyLinkService?.verifyConfiguration() == true) {
startActivity(Intent(context, RileyLinkStatusActivity::class.java)) startActivity(Intent(context, RileyLinkStatusActivity::class.java))
} else { } else {
OmnipodUtil.displayNotConfiguredDialog(context) displayNotConfiguredDialog()
} }
} }
omnipod_pod_active_alerts_ack.setOnClickListener { omnipod_pod_active_alerts_ack.setOnClickListener {
if (!OmnipodUtil.getPumpStatus().verifyConfiguration()) { if (omnipodPumpPlugin.rileyLinkService?.verifyConfiguration() != true) {
OmnipodUtil.displayNotConfiguredDialog(context) displayNotConfiguredDialog()
} else { } else {
omnipod_pod_active_alerts_ack.isEnabled = false omnipod_pod_active_alerts_ack.isEnabled = false
OmnipodUtil.getPlugin().addPodStatusRequest(OmnipodStatusRequest.AcknowledgeAlerts); omnipodPumpPlugin.addPodStatusRequest(OmnipodStatusRequest.AcknowledgeAlerts);
commandQueue.readStatus("Clicked Alert Ack", null) commandQueue.readStatus("Clicked Alert Ack", null)
} }
} }
omnipod_pod_debug.setOnClickListener { omnipod_pod_debug.setOnClickListener {
if (!OmnipodUtil.getPumpStatus().verifyConfiguration()) { if (omnipodPumpPlugin.rileyLinkService?.verifyConfiguration() != true) {
OmnipodUtil.displayNotConfiguredDialog(context) displayNotConfiguredDialog()
} else { } else {
// val readPulseLog = AapsOmnipodManager.getInstance().readPulseLog() // val readPulseLog = AapsOmnipodManager.getInstance().readPulseLog()
// //
@ -150,7 +146,7 @@ class OmnipodFragment : DaggerFragment() {
// //
omnipod_pod_debug.isEnabled = false omnipod_pod_debug.isEnabled = false
OmnipodUtil.getPlugin().addPodStatusRequest(OmnipodStatusRequest.GetPodPulseLog); omnipodPumpPlugin.addPodStatusRequest(OmnipodStatusRequest.GetPodPulseLog);
commandQueue.readStatus("Clicked Refresh", object : Callback() { commandQueue.readStatus("Clicked Refresh", object : Callback() {
override fun run() { override fun run() {
activity?.runOnUiThread { omnipod_pod_debug.isEnabled = true } activity?.runOnUiThread { omnipod_pod_debug.isEnabled = true }
@ -189,7 +185,7 @@ class OmnipodFragment : DaggerFragment() {
disposable += rxBus disposable += rxBus
.toObservable(EventOmnipodAcknowledgeAlertsChanged::class.java) .toObservable(EventOmnipodAcknowledgeAlertsChanged::class.java)
.observeOn(AndroidSchedulers.mainThread()) .observeOn(AndroidSchedulers.mainThread())
.subscribe({ updateAcknowledgeAlerts(OmnipodUtil.getPumpStatus()) }, { fabricPrivacy.logException(it) }) .subscribe({ updateAcknowledgeAlerts() }, { fabricPrivacy.logException(it) })
disposable += rxBus disposable += rxBus
.toObservable(EventPreferenceChange::class.java) .toObservable(EventPreferenceChange::class.java)
.observeOn(Schedulers.io()) .observeOn(Schedulers.io())
@ -210,6 +206,13 @@ class OmnipodFragment : DaggerFragment() {
} }
private fun displayNotConfiguredDialog() {
context?.let {
OKDialog.show(it, resourceHelper.gs(R.string.combo_warning),
resourceHelper.gs(R.string.omnipod_error_operation_not_possible_no_configuration), null)
}
}
override fun onPause() { override fun onPause() {
super.onPause() super.onPause()
disposable.clear() disposable.clear()
@ -219,28 +222,32 @@ class OmnipodFragment : DaggerFragment() {
@Synchronized @Synchronized
private fun setDeviceStatus() { private fun setDeviceStatus() {
val pumpStatus: OmnipodPumpStatus = OmnipodUtil.getPumpStatus() //val omnipodPumpStatus: OmnipodPumpStatus = OmnipodUtil.getPumpStatus()
pumpStatus.rileyLinkServiceState = checkStatusSet(pumpStatus.rileyLinkServiceState, // omnipodPumpStatus.rileyLinkServiceState = checkStatusSet(omnipodPumpStatus.rileyLinkServiceState,
RileyLinkUtil.getServiceState()) as RileyLinkServiceState? // RileyLinkUtil.getServiceState()) as RileyLinkServiceState?
aapsLogger.info(LTag.PUMP,"setDeviceStatus: [pumpStatus={}]", pumpStatus)
val resourceId = pumpStatus.rileyLinkServiceState.getResourceId(RileyLinkTargetDevice.Omnipod)
val rileyLinkError = RileyLinkUtil.getError() aapsLogger.info(LTag.PUMP,"setDeviceStatus: [pumpStatus={}]", omnipodPumpStatus)
val resourceId = omnipodPumpStatus.rileyLinkServiceState.getResourceId(RileyLinkTargetDevice.Omnipod)
val rileyLinkError = omnipodPumpPlugin.rileyLinkService?.error
omnipod_rl_status.text = omnipod_rl_status.text =
when { when {
pumpStatus.rileyLinkServiceState == RileyLinkServiceState.NotStarted -> resourceHelper.gs(resourceId) omnipodPumpStatus.rileyLinkServiceState == RileyLinkServiceState.NotStarted -> resourceHelper.gs(resourceId)
pumpStatus.rileyLinkServiceState.isConnecting -> "{fa-bluetooth-b spin} " + resourceHelper.gs(resourceId) omnipodPumpStatus.rileyLinkServiceState.isConnecting -> "{fa-bluetooth-b spin} " + resourceHelper.gs(resourceId)
pumpStatus.rileyLinkServiceState.isError && rileyLinkError == null -> "{fa-bluetooth-b} " + resourceHelper.gs(resourceId) omnipodPumpStatus.rileyLinkServiceState.isError && rileyLinkError == null -> "{fa-bluetooth-b} " + resourceHelper.gs(resourceId)
pumpStatus.rileyLinkServiceState.isError && rileyLinkError != null -> "{fa-bluetooth-b} " + resourceHelper.gs(rileyLinkError.getResourceId(RileyLinkTargetDevice.MedtronicPump)) omnipodPumpStatus.rileyLinkServiceState.isError && rileyLinkError != null -> "{fa-bluetooth-b} " + resourceHelper.gs(rileyLinkError.getResourceId(RileyLinkTargetDevice.MedtronicPump))
else -> "{fa-bluetooth-b} " + resourceHelper.gs(resourceId) else -> "{fa-bluetooth-b} " + resourceHelper.gs(resourceId)
} }
omnipod_rl_status.setTextColor(if (rileyLinkError != null) Color.RED else Color.WHITE) omnipod_rl_status.setTextColor(if (rileyLinkError != null) Color.RED else Color.WHITE)
pumpStatus.rileyLinkError = checkStatusSet(pumpStatus.rileyLinkError, RileyLinkUtil.getError()) as RileyLinkError? // omnipodPumpStatus.rileyLinkError = checkStatusSet(omnipodPumpStatus.rileyLinkError,
// RileyLinkUtil.getError()) as RileyLinkError?
omnipod_errors.text = omnipod_errors.text =
pumpStatus.rileyLinkError?.let { omnipodPumpStatus.rileyLinkError?.let {
resourceHelper.gs(it.getResourceId(RileyLinkTargetDevice.Omnipod)) resourceHelper.gs(it.getResourceId(RileyLinkTargetDevice.Omnipod))
} ?: "-" } ?: "-"
@ -252,31 +259,31 @@ class OmnipodFragment : DaggerFragment() {
omnipod_pod_address.text = resourceHelper.gs(R.string.omnipod_pod_name_no_info) omnipod_pod_address.text = resourceHelper.gs(R.string.omnipod_pod_name_no_info)
omnipod_pod_expiry.text = "-" omnipod_pod_expiry.text = "-"
omnipod_pod_status.text = resourceHelper.gs(R.string.omnipod_pod_not_initalized) omnipod_pod_status.text = resourceHelper.gs(R.string.omnipod_pod_not_initalized)
pumpStatus.podAvailable = false omnipodPumpStatus.podAvailable = false
pumpStatus.podNumber == null omnipodPumpStatus.podNumber == null
} else if (driverState == OmnipodDriverState.Initalized_NoPod) { } else if (driverState == OmnipodDriverState.Initalized_NoPod) {
omnipod_pod_address.text = resourceHelper.gs(R.string.omnipod_pod_name_no_info) omnipod_pod_address.text = resourceHelper.gs(R.string.omnipod_pod_name_no_info)
omnipod_pod_expiry.text = "-" omnipod_pod_expiry.text = "-"
omnipod_pod_status.text = resourceHelper.gs(R.string.omnipod_pod_no_pod_connected) omnipod_pod_status.text = resourceHelper.gs(R.string.omnipod_pod_no_pod_connected)
pumpStatus.podAvailable = false omnipodPumpStatus.podAvailable = false
pumpStatus.podNumber == null omnipodPumpStatus.podNumber == null
} else if (driverState == OmnipodDriverState.Initalized_PodInitializing) { } else if (driverState == OmnipodDriverState.Initalized_PodInitializing) {
omnipod_pod_address.text = pumpStatus.podSessionState.address.toString() omnipod_pod_address.text = omnipodPumpStatus.podSessionState.address.toString()
omnipod_pod_expiry.text = "-" omnipod_pod_expiry.text = "-"
omnipod_pod_status.text = OmnipodUtil.getPodSessionState().getSetupProgress().name omnipod_pod_status.text = omnipodPumpStatus.podSessionState.getSetupProgress().name
pumpStatus.podAvailable = false omnipodPumpStatus.podAvailable = false
pumpStatus.podNumber == pumpStatus.podSessionState.address.toString() omnipodPumpStatus.podNumber == omnipodPumpStatus.podSessionState.address.toString()
}else { }else {
pumpStatus.podLotNumber = "" + pumpStatus.podSessionState.lot omnipodPumpStatus.podLotNumber = "" + omnipodPumpStatus.podSessionState.lot
pumpStatus.podAvailable = true omnipodPumpStatus.podAvailable = true
omnipod_pod_address.text = pumpStatus.podSessionState.address.toString() omnipod_pod_address.text = omnipodPumpStatus.podSessionState.address.toString()
omnipod_pod_expiry.text = pumpStatus.podSessionState.expiryDateAsString omnipod_pod_expiry.text = omnipodPumpStatus.podSessionState.expiryDateAsString
pumpStatus.podNumber = pumpStatus.podSessionState.address.toString() omnipodPumpStatus.podNumber = omnipodPumpStatus.podSessionState.address.toString()
//pumpStatus.podSessionState = checkStatusSet(pumpStatus.podSessionState, //pumpStatus.podSessionState = checkStatusSet(pumpStatus.podSessionState,
// OmnipodUtil.getPodSessionState()) as PodSessionState? // OmnipodUtil.getPodSessionState()) as PodSessionState?
var podDeviceState = pumpStatus.podDeviceState var podDeviceState = omnipodPumpStatus.podDeviceState
when (podDeviceState) { when (podDeviceState) {
null, null,
@ -307,7 +314,7 @@ class OmnipodFragment : DaggerFragment() {
// } // }
// } // }
} }
else -> aapsLogger.warn(LTag.PUMP,"Unknown pump state: " + pumpStatus.podDeviceState) else -> aapsLogger.warn(LTag.PUMP,"Unknown pump state: " + omnipodPumpStatus.podDeviceState)
} }
@ -371,8 +378,8 @@ class OmnipodFragment : DaggerFragment() {
// GUI functions // GUI functions
fun updateGUI() { fun updateGUI() {
val plugin = omnipodPumpPlugin val plugin = omnipodPumpPlugin
val pumpStatus = OmnipodUtil.getPumpStatus() //val omnipodPumpStatus = OmnipodUtil.getPumpStatus()
var pumpType = OmnipodUtil.getPumpType() var pumpType = omnipodPumpStatus.pumpType
if (pumpType==null) { if (pumpType==null) {
aapsLogger.warn(LTag.PUMP,"PumpType was not set, reseting to Omnipod.") aapsLogger.warn(LTag.PUMP,"PumpType was not set, reseting to Omnipod.")
@ -381,12 +388,12 @@ class OmnipodFragment : DaggerFragment() {
setDeviceStatus() setDeviceStatus()
if (pumpStatus.podAvailable) { if (omnipodPumpStatus.podAvailable) {
// last connection // last connection
if (pumpStatus.lastConnection != 0L) { if (omnipodPumpStatus.lastConnection != 0L) {
//val minAgo = DateUtil.minAgo(pumpStatus.lastConnection) //val minAgo = DateUtil.minAgo(pumpStatus.lastConnection)
val min = (System.currentTimeMillis() - pumpStatus.lastConnection) / 1000 / 60 val min = (System.currentTimeMillis() - omnipodPumpStatus.lastConnection) / 1000 / 60
if (pumpStatus.lastConnection + 60 * 1000 > System.currentTimeMillis()) { if (omnipodPumpStatus.lastConnection + 60 * 1000 > System.currentTimeMillis()) {
omnipod_lastconnection.setText(R.string.combo_pump_connected_now) omnipod_lastconnection.setText(R.string.combo_pump_connected_now)
//omnipod_lastconnection.setTextColor(Color.WHITE) //omnipod_lastconnection.setTextColor(Color.WHITE)
} else { //if (pumpStatus.lastConnection + 30 * 60 * 1000 < System.currentTimeMillis()) { } else { //if (pumpStatus.lastConnection + 30 * 60 * 1000 < System.currentTimeMillis()) {
@ -413,19 +420,19 @@ class OmnipodFragment : DaggerFragment() {
} }
// last bolus // last bolus
val bolus = pumpStatus.lastBolusAmount val bolus = omnipodPumpStatus.lastBolusAmount
val bolusTime = pumpStatus.lastBolusTime val bolusTime = omnipodPumpStatus.lastBolusTime
if (bolus != null && bolusTime != null && pumpStatus.podAvailable) { if (bolus != null && bolusTime != null && omnipodPumpStatus.podAvailable) {
val agoMsc = System.currentTimeMillis() - pumpStatus.lastBolusTime.time val agoMsc = System.currentTimeMillis() - omnipodPumpStatus.lastBolusTime.time
val bolusMinAgo = agoMsc.toDouble() / 60.0 / 1000.0 val bolusMinAgo = agoMsc.toDouble() / 60.0 / 1000.0
val unit = resourceHelper.gs(R.string.insulin_unit_shortname) val unit = resourceHelper.gs(R.string.insulin_unit_shortname)
val ago: String val ago: String
if (agoMsc < 60 * 1000) { if (agoMsc < 60 * 1000) {
ago = resourceHelper.gs(R.string.combo_pump_connected_now) ago = resourceHelper.gs(R.string.combo_pump_connected_now)
} else if (bolusMinAgo < 60) { } else if (bolusMinAgo < 60) {
ago = DateUtil.minAgo(resourceHelper, pumpStatus.lastBolusTime.time) ago = DateUtil.minAgo(resourceHelper, omnipodPumpStatus.lastBolusTime.time)
} else { } else {
ago = DateUtil.hourAgo(pumpStatus.lastBolusTime.time, resourceHelper) ago = DateUtil.hourAgo(omnipodPumpStatus.lastBolusTime.time, resourceHelper)
} }
omnipod_lastbolus.text = resourceHelper.gs(R.string.omnipod_last_bolus, pumpType.determineCorrectBolusSize(bolus), unit, ago) omnipod_lastbolus.text = resourceHelper.gs(R.string.omnipod_last_bolus, pumpType.determineCorrectBolusSize(bolus), unit, ago)
} else { } else {
@ -439,12 +446,12 @@ class OmnipodFragment : DaggerFragment() {
.getTempBasalFromHistory(System.currentTimeMillis())?.toStringFull() ?: "" .getTempBasalFromHistory(System.currentTimeMillis())?.toStringFull() ?: ""
// reservoir // reservoir
if (RileyLinkUtil.isSame(pumpStatus.reservoirRemainingUnits, 75.0)) { if (Round.isSame(omnipodPumpStatus.reservoirRemainingUnits, 75.0)) {
omnipod_reservoir.text = resourceHelper.gs(R.string.omnipod_reservoir_over50) omnipod_reservoir.text = resourceHelper.gs(R.string.omnipod_reservoir_over50)
} else { } else {
omnipod_reservoir.text = resourceHelper.gs(R.string.omnipod_reservoir_left, pumpStatus.reservoirRemainingUnits) omnipod_reservoir.text = resourceHelper.gs(R.string.omnipod_reservoir_left, omnipodPumpStatus.reservoirRemainingUnits)
} }
warnColors.setColorInverse(omnipod_reservoir, pumpStatus.reservoirRemainingUnits, 50.0, 20.0) warnColors.setColorInverse(omnipod_reservoir, omnipodPumpStatus.reservoirRemainingUnits, 50.0, 20.0)
} else { } else {
omnipod_basabasalrate.text = "" omnipod_basabasalrate.text = ""
@ -455,20 +462,18 @@ class OmnipodFragment : DaggerFragment() {
omnipod_lastconnection.setTextColor(Color.WHITE) omnipod_lastconnection.setTextColor(Color.WHITE)
} }
omnipod_errors.text = pumpStatus.errorInfo omnipod_errors.text = omnipodPumpStatus.errorInfo
updateAcknowledgeAlerts(pumpStatus) updateAcknowledgeAlerts()
omnipod_refresh.isEnabled = pumpStatus.podAvailable omnipod_refresh.isEnabled = omnipodPumpStatus.podAvailable
} }
private fun updateAcknowledgeAlerts(pumpStatus: OmnipodPumpStatus) { private fun updateAcknowledgeAlerts() {
if (pumpStatus != null) { omnipod_pod_active_alerts_ack.isEnabled = omnipodPumpStatus.ackAlertsAvailable
omnipod_pod_active_alerts_ack.isEnabled = pumpStatus.ackAlertsAvailable omnipod_pod_active_alerts.text = omnipodPumpStatus.ackAlertsText
omnipod_pod_active_alerts.text = pumpStatus.ackAlertsText
}
} }

View file

@ -9,7 +9,6 @@ import android.os.SystemClock;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import org.joda.time.LocalDateTime;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -49,10 +48,14 @@ import info.nightscout.androidaps.plugins.general.overview.events.EventDismissNo
import info.nightscout.androidaps.plugins.general.overview.events.EventNewNotification; import info.nightscout.androidaps.plugins.general.overview.events.EventNewNotification;
import info.nightscout.androidaps.plugins.general.overview.notifications.Notification; import info.nightscout.androidaps.plugins.general.overview.notifications.Notification;
import info.nightscout.androidaps.plugins.pump.common.PumpPluginAbstract; import info.nightscout.androidaps.plugins.pump.common.PumpPluginAbstract;
import info.nightscout.androidaps.plugins.pump.common.data.PumpStatus;
import info.nightscout.androidaps.plugins.pump.common.data.TempBasalPair; import info.nightscout.androidaps.plugins.pump.common.data.TempBasalPair;
import info.nightscout.androidaps.plugins.pump.common.defs.PumpDriverState; import info.nightscout.androidaps.plugins.pump.common.defs.PumpDriverState;
import info.nightscout.androidaps.plugins.pump.common.defs.PumpType; import info.nightscout.androidaps.plugins.pump.common.defs.PumpType;
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.RileyLinkConst; import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.RileyLinkConst;
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs.RileyLinkPumpDevice;
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.RileyLinkService;
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.RileyLinkServiceData;
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.tasks.ResetRileyLinkConfigurationTask; import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.tasks.ResetRileyLinkConfigurationTask;
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.tasks.ServiceTaskExecutor; import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.tasks.ServiceTaskExecutor;
import info.nightscout.androidaps.plugins.pump.common.utils.DateTimeUtil; import info.nightscout.androidaps.plugins.pump.common.utils.DateTimeUtil;
@ -60,13 +63,11 @@ import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.response.pod
import info.nightscout.androidaps.plugins.pump.omnipod.defs.OmnipodCommandType; import info.nightscout.androidaps.plugins.pump.omnipod.defs.OmnipodCommandType;
import info.nightscout.androidaps.plugins.pump.omnipod.defs.OmnipodCommunicationManagerInterface; import info.nightscout.androidaps.plugins.pump.omnipod.defs.OmnipodCommunicationManagerInterface;
import info.nightscout.androidaps.plugins.pump.omnipod.defs.OmnipodCustomActionType; import info.nightscout.androidaps.plugins.pump.omnipod.defs.OmnipodCustomActionType;
import info.nightscout.androidaps.plugins.pump.omnipod.defs.OmnipodPodType;
import info.nightscout.androidaps.plugins.pump.omnipod.defs.OmnipodPumpPluginInterface; import info.nightscout.androidaps.plugins.pump.omnipod.defs.OmnipodPumpPluginInterface;
import info.nightscout.androidaps.plugins.pump.omnipod.defs.OmnipodStatusRequest; import info.nightscout.androidaps.plugins.pump.omnipod.defs.OmnipodStatusRequest;
import info.nightscout.androidaps.plugins.pump.omnipod.defs.state.PodSessionState; import info.nightscout.androidaps.plugins.pump.omnipod.defs.state.PodSessionState;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.OmnipodDriverState; import info.nightscout.androidaps.plugins.pump.omnipod.driver.OmnipodDriverState;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.OmnipodPumpStatus; import info.nightscout.androidaps.plugins.pump.omnipod.driver.OmnipodPumpStatus;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.comm.AapsOmnipodManager;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.ui.OmnipodUIComm; import info.nightscout.androidaps.plugins.pump.omnipod.driver.ui.OmnipodUIComm;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.ui.OmnipodUITask; import info.nightscout.androidaps.plugins.pump.omnipod.driver.ui.OmnipodUITask;
import info.nightscout.androidaps.plugins.pump.omnipod.events.EventOmnipodPumpValuesChanged; import info.nightscout.androidaps.plugins.pump.omnipod.events.EventOmnipodPumpValuesChanged;
@ -75,9 +76,10 @@ import info.nightscout.androidaps.plugins.pump.omnipod.service.RileyLinkOmnipodS
import info.nightscout.androidaps.plugins.pump.omnipod.util.OmnipodConst; import info.nightscout.androidaps.plugins.pump.omnipod.util.OmnipodConst;
import info.nightscout.androidaps.plugins.pump.omnipod.util.OmnipodUtil; import info.nightscout.androidaps.plugins.pump.omnipod.util.OmnipodUtil;
import info.nightscout.androidaps.utils.FabricPrivacy; import info.nightscout.androidaps.utils.FabricPrivacy;
import info.nightscout.androidaps.utils.SP;
import info.nightscout.androidaps.utils.TimeChangeType; import info.nightscout.androidaps.utils.TimeChangeType;
import info.nightscout.androidaps.utils.resources.ResourceHelper; import info.nightscout.androidaps.utils.resources.ResourceHelper;
import info.nightscout.androidaps.utils.sharedPreferences.SP;
import io.reactivex.disposables.CompositeDisposable; import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.schedulers.Schedulers; import io.reactivex.schedulers.Schedulers;
@ -87,16 +89,20 @@ import io.reactivex.schedulers.Schedulers;
* @author Andy Rozman (andy.rozman@gmail.com) * @author Andy Rozman (andy.rozman@gmail.com)
*/ */
@Singleton @Singleton
public class OmnipodPumpPlugin extends PumpPluginAbstract implements OmnipodPumpPluginInterface { public class OmnipodPumpPlugin extends PumpPluginAbstract implements OmnipodPumpPluginInterface, RileyLinkPumpDevice {
private static final Logger LOG = LoggerFactory.getLogger(L.PUMP); private static final Logger LOG = LoggerFactory.getLogger(L.PUMP);
private static OmnipodPumpPlugin plugin = null; private static OmnipodPumpPlugin plugin = null;
private RileyLinkOmnipodService omnipodService; private RileyLinkServiceData rileyLinkServiceData;
protected OmnipodPumpStatus pumpStatusLocal = null; private ServiceTaskExecutor serviceTaskExecutor;
private RileyLinkOmnipodService rileyLinkOmnipodService;
private OmnipodUtil omnipodUtil;
protected OmnipodPumpStatus omnipodPumpStatus = null;
protected OmnipodUIComm omnipodUIComm; protected OmnipodUIComm omnipodUIComm;
private CompositeDisposable disposable = new CompositeDisposable(); private CompositeDisposable disposable = new CompositeDisposable();
// variables for handling statuses and history // variables for handling statuses and history
protected boolean firstRun = true; protected boolean firstRun = true;
protected boolean isRefresh = false; protected boolean isRefresh = false;
@ -126,9 +132,13 @@ public class OmnipodPumpPlugin extends PumpPluginAbstract implements OmnipodPump
Context context, Context context,
ResourceHelper resourceHelper, ResourceHelper resourceHelper,
ActivePluginProvider activePlugin, ActivePluginProvider activePlugin,
info.nightscout.androidaps.utils.sharedPreferences.SP sp, SP sp,
OmnipodUtil omnipodUtil,
OmnipodPumpStatus omnipodPumpStatus,
CommandQueueProvider commandQueue, CommandQueueProvider commandQueue,
FabricPrivacy fabricPrivacy) { FabricPrivacy fabricPrivacy,
RileyLinkServiceData rileyLinkServiceData,
ServiceTaskExecutor serviceTaskExecutor) {
super(new PluginDescription() // super(new PluginDescription() //
.mainType(PluginType.PUMP) // .mainType(PluginType.PUMP) //
@ -140,9 +150,13 @@ public class OmnipodPumpPlugin extends PumpPluginAbstract implements OmnipodPump
PumpType.Insulet_Omnipod, PumpType.Insulet_Omnipod,
injector, resourceHelper, aapsLogger, commandQueue, rxBus, activePlugin, sp, context, fabricPrivacy injector, resourceHelper, aapsLogger, commandQueue, rxBus, activePlugin, sp, context, fabricPrivacy
); );
this.rileyLinkServiceData = rileyLinkServiceData;
this.serviceTaskExecutor = serviceTaskExecutor;
displayConnectionMessages = false; displayConnectionMessages = false;
OmnipodPumpPlugin.plugin = this; OmnipodPumpPlugin.plugin = this;
this.omnipodUtil = omnipodUtil;
this.omnipodPumpStatus = omnipodPumpStatus;
//OmnipodUtil.setDriverState(); //OmnipodUtil.setDriverState();
@ -156,13 +170,14 @@ public class OmnipodPumpPlugin extends PumpPluginAbstract implements OmnipodPump
// // TODO ccc // // TODO ccc
serviceConnection = new ServiceConnection() { serviceConnection = new ServiceConnection() {
@Override @Override
public void onServiceDisconnected(ComponentName name) { public void onServiceDisconnected(ComponentName name) {
aapsLogger.debug(LTag.PUMP, "RileyLinkOmnipodService is disconnected"); aapsLogger.debug(LTag.PUMP, "RileyLinkOmnipodService is disconnected");
omnipodService = null; rileyLinkOmnipodService = null;
} }
@Override @Override
@ -170,34 +185,43 @@ public class OmnipodPumpPlugin extends PumpPluginAbstract implements OmnipodPump
aapsLogger.debug(LTag.PUMP, "RileyLinkOmnipodService is connected"); aapsLogger.debug(LTag.PUMP, "RileyLinkOmnipodService is connected");
RileyLinkOmnipodService.LocalBinder mLocalBinder = (RileyLinkOmnipodService.LocalBinder) service; RileyLinkOmnipodService.LocalBinder mLocalBinder = (RileyLinkOmnipodService.LocalBinder) service;
omnipodService = mLocalBinder.getServiceInstance(); rileyLinkOmnipodService = mLocalBinder.getServiceInstance();
new Thread(() -> { new Thread(() -> {
for (int i = 0; i < 20; i++) { for (int i = 0; i < 20; i++) {
SystemClock.sleep(5000);
if (pumpStatusLocal != null) { aapsLogger.debug(LTag.PUMP, "Starting Omnipod-RileyLink service");
if (rileyLinkOmnipodService.setNotInPreInit()) {
aapsLogger.debug(LTag.PUMP, "Starting OmniPod-RileyLink service");
if (OmnipodUtil.getPumpStatus().setNotInPreInit()) {
if (omnipodCommunicationManager == null) {
omnipodCommunicationManager = AapsOmnipodManager.getInstance();
omnipodCommunicationManager.setPumpStatus(pumpStatusLocal);
omnipodServiceRunning = true;
} else {
omnipodCommunicationManager.setPumpStatus(pumpStatusLocal);
}
OmnipodUtil.setOmnipodPodType(OmnipodPodType.Eros);
OmnipodUtil.setPlugin(OmnipodPumpPlugin.this);
omnipodUIComm = new OmnipodUIComm(omnipodCommunicationManager, plugin, pumpStatusLocal);
break; break;
} }
} }
SystemClock.sleep(5000);
}
// if (OmnipodPumpPlugin.this.omnipodPumpStatus != null) {
//
// aapsLogger.debug(LTag.PUMP, "Starting OmniPod-RileyLink service");
// if (omnipodService.setNotInPreInit()) {
// if (omnipodCommunicationManager == null) {
// omnipodCommunicationManager = AapsOmnipodManager.getInstance();
// omnipodCommunicationManager.setPumpStatus(OmnipodPumpPlugin.this.omnipodPumpStatus);
// omnipodServiceRunning = true;
// } else {
// omnipodCommunicationManager.setPumpStatus(OmnipodPumpPlugin.this.omnipodPumpStatus);
// }
//
// omnipodUtil.setOmnipodPodType(OmnipodPodType.Eros);
// //omnipodUtil.setPlugin(OmnipodPumpPlugin.this);
//
// omnipodUIComm = new OmnipodUIComm(omnipodCommunicationManager, plugin, OmnipodPumpPlugin.this.omnipodPumpStatus);
// break;
// }
// }
//
// SystemClock.sleep(5000);
//}
}).start(); }).start();
} }
}; };
@ -214,6 +238,15 @@ public class OmnipodPumpPlugin extends PumpPluginAbstract implements OmnipodPump
CommandQueueProvider commandQueue, CommandQueueProvider commandQueue,
FabricPrivacy fabricPrivacy) { FabricPrivacy fabricPrivacy) {
super(pluginDescription, pumpType, injector, resourceHelper, aapsLogger, commandQueue, rxBus, activePlugin, sp, context, fabricPrivacy); super(pluginDescription, pumpType, injector, resourceHelper, aapsLogger, commandQueue, rxBus, activePlugin, sp, context, fabricPrivacy);
// this.rileyLinkUtil = rileyLinkUtil;
// this.medtronicUtil = medtronicUtil;
// this.sp = sp;
// this.medtronicPumpStatus = medtronicPumpStatus;
// this.medtronicHistoryData = medtronicHistoryData;
// this.rileyLinkServiceData = rileyLinkServiceData;
// this.serviceTaskExecutor = serviceTaskExecutor;
} }
@Deprecated @Deprecated
@ -237,10 +270,11 @@ public class OmnipodPumpPlugin extends PumpPluginAbstract implements OmnipodPump
(event.isChanged(getResourceHelper(), R.string.key_omnipod_pod_debugging_options_enabled)) || (event.isChanged(getResourceHelper(), R.string.key_omnipod_pod_debugging_options_enabled)) ||
(event.isChanged(getResourceHelper(), R.string.key_omnipod_beep_smb_enabled)) || (event.isChanged(getResourceHelper(), R.string.key_omnipod_beep_smb_enabled)) ||
(event.isChanged(getResourceHelper(), R.string.key_omnipod_timechange_enabled))) (event.isChanged(getResourceHelper(), R.string.key_omnipod_timechange_enabled)))
refreshConfiguration(); rileyLinkOmnipodService.verifyConfiguration();
}, fabricPrivacy::logException) }, fabricPrivacy::logException)
); );
refreshConfiguration(); //rileyLinkOmnipodService.verifyConfiguration();
//initPumpStatusData();
} }
// @Override // @Override
@ -248,11 +282,12 @@ public class OmnipodPumpPlugin extends PumpPluginAbstract implements OmnipodPump
// //
// } // }
private void refreshConfiguration() { // private void refreshConfiguration() {
if (pumpStatusLocal != null) { // if (pumpStatusLocal != null) {
pumpStatusLocal.refreshConfiguration(); // pumpStatusLocal.refreshConfiguration();
} // }
} // verifyConfiguration()
// }
@Override @Override
protected void onStop() { protected void onStop() {
@ -268,27 +303,17 @@ public class OmnipodPumpPlugin extends PumpPluginAbstract implements OmnipodPump
@Override @Override
public void initPumpStatusData() { public void initPumpStatusData() {
this.pumpStatusLocal = new OmnipodPumpStatus(pumpDescription); omnipodPumpStatus.lastConnection = sp.getLong(RileyLinkConst.Prefs.LastGoodDeviceCommunicationTime, 0L);
if (omnipodCommunicationManager != null) { omnipodPumpStatus.lastDataTime = omnipodPumpStatus.lastConnection;
omnipodCommunicationManager.setPumpStatus(pumpStatusLocal); omnipodPumpStatus.previousConnection = omnipodPumpStatus.lastConnection;
}
OmnipodUtil.setPumpStatus(pumpStatusLocal); if (rileyLinkOmnipodService != null) rileyLinkOmnipodService.verifyConfiguration();
pumpStatusLocal.lastConnection = SP.getLong(RileyLinkConst.Prefs.LastGoodDeviceCommunicationTime, 0L); aapsLogger.debug(LTag.PUMP, "initPumpStatusData: " + this.omnipodPumpStatus);
pumpStatusLocal.lastDataTime = new LocalDateTime(pumpStatusLocal.lastConnection);
pumpStatusLocal.previousConnection = pumpStatusLocal.lastConnection;
pumpStatusLocal.refreshConfiguration(); // set first Omnipod Pump Start
if (!sp.contains(OmnipodConst.Statistics.FirstPumpStart)) {
sp.putLong(OmnipodConst.Statistics.FirstPumpStart, System.currentTimeMillis());
aapsLogger.debug(LTag.PUMP, "initPumpStatusData: {}", this.pumpStatusLocal);
this.pumpStatus = pumpStatusLocal;
// set first Omnipod Start
if (!SP.contains(OmnipodConst.Statistics.FirstPumpStart)) {
SP.putLong(OmnipodConst.Statistics.FirstPumpStart, System.currentTimeMillis());
} }
} }
@ -324,7 +349,7 @@ public class OmnipodPumpPlugin extends PumpPluginAbstract implements OmnipodPump
if (System.currentTimeMillis() > this.nextPodCheck) { if (System.currentTimeMillis() > this.nextPodCheck) {
if (OmnipodUtil.getDriverState() == OmnipodDriverState.Initalized_NoPod) { if (OmnipodUtil.getDriverState() == OmnipodDriverState.Initalized_NoPod) {
Notification notification = new Notification(Notification.OMNIPOD_POD_NOT_ATTACHED, MainApp.gs(R.string.omnipod_error_pod_not_attached), Notification.NORMAL); Notification notification = new Notification(Notification.OMNIPOD_POD_NOT_ATTACHED, resourceHelper.gs(R.string.omnipod_error_pod_not_attached), Notification.NORMAL);
rxBus.send(new EventNewNotification(notification)); rxBus.send(new EventNewNotification(notification));
} else { } else {
rxBus.send(new EventDismissNotification(Notification.OMNIPOD_POD_NOT_ATTACHED)); rxBus.send(new EventDismissNotification(Notification.OMNIPOD_POD_NOT_ATTACHED));
@ -340,6 +365,11 @@ public class OmnipodPumpPlugin extends PumpPluginAbstract implements OmnipodPump
return RileyLinkOmnipodService.class; return RileyLinkOmnipodService.class;
} }
@Override
public PumpStatus getPumpStatusData() {
return this.omnipodPumpStatus;
}
@Override @Override
public String deviceID() { public String deviceID() {
@ -350,7 +380,7 @@ public class OmnipodPumpPlugin extends PumpPluginAbstract implements OmnipodPump
// Pump Plugin // Pump Plugin
private boolean isServiceSet() { private boolean isServiceSet() {
return omnipodService != null; return rileyLinkOmnipodService != null;
} }
@ -369,7 +399,7 @@ public class OmnipodPumpPlugin extends PumpPluginAbstract implements OmnipodPump
if (isServiceSet()) { if (isServiceSet()) {
if (isBusy || !pumpStatusLocal.podAvailable) if (isBusy || !omnipodPumpStatus.podAvailable)
return true; return true;
if (busyTimestamps.size() > 0) { if (busyTimestamps.size() > 0) {
@ -384,6 +414,30 @@ public class OmnipodPumpPlugin extends PumpPluginAbstract implements OmnipodPump
} }
@Override
public void resetRileyLinkConfiguration() {
rileyLinkOmnipodService.resetRileyLinkConfiguration();
}
@Override
public boolean hasTuneUp() {
return false;
}
@Override
public void doTuneUpDevice() {
rileyLinkOmnipodService.doTuneUpDevice();
}
@Override
public RileyLinkOmnipodService getRileyLinkService() {
return rileyLinkOmnipodService;
}
private synchronized void clearBusyQueue() { private synchronized void clearBusyQueue() {
if (busyTimestamps.size() == 0) { if (busyTimestamps.size() == 0) {
@ -415,7 +469,7 @@ public class OmnipodPumpPlugin extends PumpPluginAbstract implements OmnipodPump
public boolean isConnected() { public boolean isConnected() {
if (displayConnectionMessages) if (displayConnectionMessages)
aapsLogger.debug(LTag.PUMP, getLogPrefix() + "isConnected"); aapsLogger.debug(LTag.PUMP, getLogPrefix() + "isConnected");
return isServiceSet() && omnipodService.isInitialized(); return isServiceSet() && rileyLinkOmnipodService.isInitialized();
} }
@ -423,15 +477,15 @@ public class OmnipodPumpPlugin extends PumpPluginAbstract implements OmnipodPump
public boolean isConnecting() { public boolean isConnecting() {
if (displayConnectionMessages) if (displayConnectionMessages)
aapsLogger.debug(LTag.PUMP, getLogPrefix() + "isConnecting"); aapsLogger.debug(LTag.PUMP, getLogPrefix() + "isConnecting");
return !isServiceSet() || !omnipodService.isInitialized(); return !isServiceSet() || !rileyLinkOmnipodService.isInitialized();
} }
@Override @Override
public boolean isSuspended() { public boolean isSuspended() {
return (OmnipodUtil.getDriverState() == OmnipodDriverState.Initalized_NoPod) || return (omnipodUtil.getDriverState() == OmnipodDriverState.Initalized_NoPod) ||
(OmnipodUtil.getPodSessionState() != null && OmnipodUtil.getPodSessionState().isSuspended()); (omnipodUtil.getPodSessionState() != null && omnipodUtil.getPodSessionState().isSuspended());
// return (pumpStatusLocal != null && !pumpStatusLocal.podAvailable) || // return (pumpStatusLocal != null && !pumpStatusLocal.podAvailable) ||
// (OmnipodUtil.getPodSessionState() != null && OmnipodUtil.getPodSessionState().isSuspended()); // (OmnipodUtil.getPodSessionState() != null && OmnipodUtil.getPodSessionState().isSuspended());
@ -494,7 +548,7 @@ public class OmnipodPumpPlugin extends PumpPluginAbstract implements OmnipodPump
Notification notification = new Notification( Notification notification = new Notification(
Notification.TIME_OR_TIMEZONE_CHANGE, Notification.TIME_OR_TIMEZONE_CHANGE,
MainApp.gs(R.string.time_or_timezone_change), resourceHelper.gs(R.string.time_or_timezone_change),
Notification.INFO, 60); Notification.INFO, 60);
rxBus.send(new EventNewNotification(notification)); rxBus.send(new EventNewNotification(notification));
@ -565,16 +619,16 @@ public class OmnipodPumpPlugin extends PumpPluginAbstract implements OmnipodPump
PodSessionState podSessionState = null; PodSessionState podSessionState = null;
if (OmnipodUtil.getPodSessionState() != null) { if (omnipodUtil.getPodSessionState() != null) {
podSessionState = OmnipodUtil.getPodSessionState(); podSessionState = omnipodUtil.getPodSessionState();
} else { } else {
String podState = SP.getString(OmnipodConst.Prefs.PodState, null); String podState = sp.getString(OmnipodConst.Prefs.PodState, null);
aapsLogger.info(LTag.PUMP, "PodSessionState-SP: loaded from SharedPreferences: " + podState); aapsLogger.info(LTag.PUMP, "PodSessionState-SP: loaded from SharedPreferences: " + podState);
if (podState != null) { if (podState != null) {
podSessionState = OmnipodUtil.getGsonInstance().fromJson(podState, PodSessionState.class); podSessionState = OmnipodUtil.getGsonInstance().fromJson(podState, PodSessionState.class);
OmnipodUtil.setPodSessionState(podSessionState); omnipodUtil.setPodSessionState(podSessionState);
} }
} }
@ -629,8 +683,8 @@ public class OmnipodPumpPlugin extends PumpPluginAbstract implements OmnipodPump
public long lastDataTime() { public long lastDataTime() {
getPodPumpStatusObject(); getPodPumpStatusObject();
if (pumpStatusLocal.lastConnection != 0) { if (omnipodPumpStatus.lastConnection != 0) {
return pumpStatusLocal.lastConnection; return omnipodPumpStatus.lastConnection;
} }
return System.currentTimeMillis(); return System.currentTimeMillis();
@ -662,17 +716,17 @@ public class OmnipodPumpPlugin extends PumpPluginAbstract implements OmnipodPump
protected OmnipodPumpStatus getPodPumpStatusObject() { protected OmnipodPumpStatus getPodPumpStatusObject() {
if (pumpStatusLocal == null) { if (omnipodPumpStatus == null) {
// FIXME I don't know why this happens // FIXME I don't know why this happens
aapsLogger.warn(LTag.PUMP, "!!!! Reset Pump Status Local"); aapsLogger.warn(LTag.PUMP, "!!!! Reset Pump Status Local");
pumpStatusLocal = OmnipodUtil.getPumpStatus(); // pumpStatusLocal = OmnipodUtil.getPumpStatus();
if (omnipodCommunicationManager != null) { // if (omnipodCommunicationManager != null) {
omnipodCommunicationManager.setPumpStatus(pumpStatusLocal); // omnipodCommunicationManager.setPumpStatus(pumpStatusLocal);
} // }
} }
return pumpStatusLocal; return omnipodPumpStatus;
} }
@ -744,9 +798,9 @@ public class OmnipodPumpPlugin extends PumpPluginAbstract implements OmnipodPump
private void incrementStatistics(String statsKey) { private void incrementStatistics(String statsKey) {
long currentCount = SP.getLong(statsKey, 0L); long currentCount = sp.getLong(statsKey, 0L);
currentCount++; currentCount++;
SP.putLong(statsKey, currentCount); sp.putLong(statsKey, currentCount);
} }
@ -823,14 +877,14 @@ public class OmnipodPumpPlugin extends PumpPluginAbstract implements OmnipodPump
protected TempBasalPair readTBR() { protected TempBasalPair readTBR() {
// TODO we can do it like this or read status from pod ?? // TODO we can do it like this or read status from pod ??
if (pumpStatusLocal.tempBasalEnd < System.currentTimeMillis()) { if (omnipodPumpStatus.tempBasalEnd < System.currentTimeMillis()) {
// TBR done // TBR done
pumpStatusLocal.clearTemporaryBasal(); omnipodPumpStatus.clearTemporaryBasal();
return null; return null;
} }
return pumpStatusLocal.getTemporaryBasal(); return omnipodPumpStatus.getTemporaryBasal();
} }
@ -955,7 +1009,7 @@ public class OmnipodPumpPlugin extends PumpPluginAbstract implements OmnipodPump
switch (mcat) { switch (mcat) {
case ResetRileyLinkConfiguration: { case ResetRileyLinkConfiguration: {
ServiceTaskExecutor.startTask(new ResetRileyLinkConfigurationTask()); serviceTaskExecutor.startTask(new ResetRileyLinkConfigurationTask(getInjector()));
} }
break; break;
@ -968,10 +1022,10 @@ public class OmnipodPumpPlugin extends PumpPluginAbstract implements OmnipodPump
@Override @Override
public void timezoneOrDSTChanged(TimeChangeType timeChangeType) { public void timezoneOrDSTChanged(TimeChangeType timeChangeType) {
aapsLogger.warn(LTag.PUMP, getLogPrefix() + "Time, Date and/or TimeZone changed. [changeType=" + timeChangeType.name() + ", eventHandlingEnabled=" + pumpStatusLocal.timeChangeEventEnabled + "]"); aapsLogger.warn(LTag.PUMP, getLogPrefix() + "Time, Date and/or TimeZone changed. [changeType=" + timeChangeType.name() + ", eventHandlingEnabled=" + omnipodPumpStatus.timeChangeEventEnabled + "]");
if (OmnipodUtil.getDriverState() == OmnipodDriverState.Initalized_PodAttached) { if (OmnipodUtil.getDriverState() == OmnipodDriverState.Initalized_PodAttached) {
if (pumpStatusLocal.timeChangeEventEnabled) { if (omnipodPumpStatus.timeChangeEventEnabled) {
aapsLogger.info(LTag.PUMP, getLogPrefix() + "Time,and/or TimeZone changed event received and will be consumed by driver."); aapsLogger.info(LTag.PUMP, getLogPrefix() + "Time,and/or TimeZone changed event received and will be consumed by driver.");
this.hasTimeDateOrTimeZoneChanged = true; this.hasTimeDateOrTimeZoneChanged = true;
} }
@ -982,9 +1036,9 @@ public class OmnipodPumpPlugin extends PumpPluginAbstract implements OmnipodPump
public boolean isUnreachableAlertTimeoutExceeded(long unreachableTimeoutMilliseconds) { public boolean isUnreachableAlertTimeoutExceeded(long unreachableTimeoutMilliseconds) {
getPodPumpStatusObject(); getPodPumpStatusObject();
if (pumpStatusLocal.lastConnection != 0 || pumpStatusLocal.lastErrorConnection != 0) { if (omnipodPumpStatus.lastConnection != 0 || omnipodPumpStatus.lastErrorConnection != 0) {
if (pumpStatusLocal.lastConnection + unreachableTimeoutMilliseconds < System.currentTimeMillis()) { if (omnipodPumpStatus.lastConnection + unreachableTimeoutMilliseconds < System.currentTimeMillis()) {
if (pumpStatusLocal.lastErrorConnection > pumpStatusLocal.lastConnection) { if (omnipodPumpStatus.lastErrorConnection > omnipodPumpStatus.lastConnection) {
// We exceeded the alert threshold, and our last connection failed // We exceeded the alert threshold, and our last connection failed
// We should show an alert // We should show an alert
return true; return true;

View file

@ -8,9 +8,13 @@ import java.util.List;
import javax.inject.Inject; import javax.inject.Inject;
import dagger.android.HasAndroidInjector;
import info.nightscout.androidaps.logging.AAPSLogger; import info.nightscout.androidaps.logging.AAPSLogger;
import info.nightscout.androidaps.logging.L; import info.nightscout.androidaps.logging.L;
import info.nightscout.androidaps.logging.LTag;
import info.nightscout.androidaps.plugins.pump.common.data.PumpStatus;
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.RileyLinkCommunicationManager; import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.RileyLinkCommunicationManager;
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.RileyLinkConst;
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.ble.RFSpy; import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.ble.RFSpy;
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.ble.RileyLinkCommunicationException; import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.ble.RileyLinkCommunicationException;
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.ble.data.RLMessage; import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.ble.data.RLMessage;
@ -22,8 +26,10 @@ import info.nightscout.androidaps.plugins.pump.common.utils.ByteUtil;
import info.nightscout.androidaps.plugins.pump.medtronic.MedtronicPumpPlugin; import info.nightscout.androidaps.plugins.pump.medtronic.MedtronicPumpPlugin;
import info.nightscout.androidaps.plugins.pump.medtronic.comm.MedtronicConverter; import info.nightscout.androidaps.plugins.pump.medtronic.comm.MedtronicConverter;
import info.nightscout.androidaps.plugins.pump.medtronic.comm.history.pump.MedtronicPumpHistoryDecoder; import info.nightscout.androidaps.plugins.pump.medtronic.comm.history.pump.MedtronicPumpHistoryDecoder;
import info.nightscout.androidaps.plugins.pump.medtronic.defs.PumpDeviceState;
import info.nightscout.androidaps.plugins.pump.medtronic.driver.MedtronicPumpStatus; import info.nightscout.androidaps.plugins.pump.medtronic.driver.MedtronicPumpStatus;
import info.nightscout.androidaps.plugins.pump.medtronic.util.MedtronicUtil; import info.nightscout.androidaps.plugins.pump.medtronic.util.MedtronicUtil;
import info.nightscout.androidaps.plugins.pump.omnipod.OmnipodPumpPlugin;
import info.nightscout.androidaps.plugins.pump.omnipod.comm.action.OmnipodAction; import info.nightscout.androidaps.plugins.pump.omnipod.comm.action.OmnipodAction;
import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.MessageBlock; import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.MessageBlock;
import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.OmnipodMessage; import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.OmnipodMessage;
@ -44,6 +50,7 @@ import info.nightscout.androidaps.plugins.pump.omnipod.comm.exception.IllegalRes
import info.nightscout.androidaps.plugins.pump.omnipod.comm.exception.NonceOutOfSyncException; import info.nightscout.androidaps.plugins.pump.omnipod.comm.exception.NonceOutOfSyncException;
import info.nightscout.androidaps.plugins.pump.omnipod.comm.exception.NonceResyncException; import info.nightscout.androidaps.plugins.pump.omnipod.comm.exception.NonceResyncException;
import info.nightscout.androidaps.plugins.pump.omnipod.comm.exception.NotEnoughDataException; import info.nightscout.androidaps.plugins.pump.omnipod.comm.exception.NotEnoughDataException;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.OmnipodPumpStatus;
import info.nightscout.androidaps.plugins.pump.omnipod.exception.OmnipodException; import info.nightscout.androidaps.plugins.pump.omnipod.exception.OmnipodException;
import info.nightscout.androidaps.plugins.pump.omnipod.comm.exception.PodFaultException; import info.nightscout.androidaps.plugins.pump.omnipod.comm.exception.PodFaultException;
import info.nightscout.androidaps.plugins.pump.omnipod.comm.exception.PodReturnedErrorResponseException; import info.nightscout.androidaps.plugins.pump.omnipod.comm.exception.PodReturnedErrorResponseException;
@ -51,26 +58,25 @@ import info.nightscout.androidaps.plugins.pump.omnipod.comm.exception.PodReturne
/** /**
* Created by andy on 6/29/18. * Created by andy on 6/29/18.
*/ */
// FIXME should be named OmnipodCommunicationManager public class OmnipodCommunicationManager extends RileyLinkCommunicationManager {
public class OmnipodCommunicationService extends RileyLinkCommunicationManager {
@Inject AAPSLogger aapsLogger; @Inject AAPSLogger aapsLogger;
@Inject MedtronicPumpStatus medtronicPumpStatus; @Inject OmnipodPumpStatus omnipodPumpStatus;
@Inject MedtronicPumpPlugin medtronicPumpPlugin; @Inject OmnipodPumpPlugin omnipodPumpPlugin;
@Inject MedtronicConverter medtronicConverter;
@Inject MedtronicUtil medtronicUtil;
@Inject MedtronicPumpHistoryDecoder medtronicPumpHistoryDecoder;
@Inject RileyLinkServiceData rileyLinkServiceData; @Inject RileyLinkServiceData rileyLinkServiceData;
@Inject ServiceTaskExecutor serviceTaskExecutor; @Inject ServiceTaskExecutor serviceTaskExecutor;
private static final Logger LOG = LoggerFactory.getLogger(L.PUMPCOMM);
public OmnipodCommunicationService(RFSpy rfspy) { //private static final Logger LOG = LoggerFactory.getLogger(L.PUMPCOMM);
super(rfspy);
public OmnipodCommunicationManager(HasAndroidInjector injector, RFSpy rfspy) {
super(injector, rfspy);
omnipodPumpStatus.previousConnection = sp.getLong(
RileyLinkConst.Prefs.LastGoodDeviceCommunicationTime, 0L);
} }
@Override // @Override
protected void configurePumpSpecificSettings() { // protected void configurePumpSpecificSettings() {
} // }
@Override @Override
public boolean tryToConnectToDevice() { public boolean tryToConnectToDevice() {
@ -83,6 +89,14 @@ public class OmnipodCommunicationService extends RileyLinkCommunicationManager {
return new byte[0]; return new byte[0];
} }
@Override public PumpStatus getPumpStatus() {
return null;
}
@Override public boolean isDeviceReachable() {
return false;
}
@Override @Override
public boolean hasTunning() { public boolean hasTunning() {
return false; return false;
@ -93,6 +107,11 @@ public class OmnipodCommunicationService extends RileyLinkCommunicationManager {
return (E) new OmnipodPacket(payload); return (E) new OmnipodPacket(payload);
} }
@Override
public void setPumpDeviceState(PumpDeviceState pumpDeviceState) {
this.omnipodPumpStatus.setPumpDeviceState(pumpDeviceState);
}
public <T extends MessageBlock> T sendCommand(Class<T> responseClass, PodState podState, MessageBlock command) { public <T extends MessageBlock> T sendCommand(Class<T> responseClass, PodState podState, MessageBlock command) {
return sendCommand(responseClass, podState, command, true); return sendCommand(responseClass, podState, command, true);
} }
@ -120,10 +139,10 @@ public class OmnipodCommunicationService extends RileyLinkCommunicationManager {
} }
public synchronized <T extends MessageBlock> T exchangeMessages(Class<T> responseClass, PodState podState, OmnipodMessage message, Integer addressOverride, Integer ackAddressOverride, boolean automaticallyResyncNonce) { public synchronized <T extends MessageBlock> T exchangeMessages(Class<T> responseClass, PodState podState, OmnipodMessage message, Integer addressOverride, Integer ackAddressOverride, boolean automaticallyResyncNonce) {
if (isLoggingEnabled()) {
LOG.debug("Exchanging OmnipodMessage [responseClass={}, podState={}, message={}, addressOverride={}, ackAddressOverride={}, automaticallyResyncNonce={}]: {}", // aapsLogger.debug(LTag.PUMPCOMM,"Exchanging OmnipodMessage [responseClass={}, podState={}, message={}, addressOverride={}, ackAddressOverride={}, automaticallyResyncNonce={}]: {}", //
responseClass.getSimpleName(), podState, message, addressOverride, ackAddressOverride, automaticallyResyncNonce, message); responseClass.getSimpleName(), podState, message, addressOverride, ackAddressOverride, automaticallyResyncNonce, message);
}
for (int i = 0; 2 > i; i++) { for (int i = 0; 2 > i; i++) {
@ -216,9 +235,8 @@ public class OmnipodCommunicationService extends RileyLinkCommunicationManager {
// so it's impossible for the pod to have received the message // so it's impossible for the pod to have received the message
newException.setCertainFailure(!lastPacket); newException.setCertainFailure(!lastPacket);
if (isLoggingEnabled()) {
LOG.debug("Caught exception in transportMessages. Set certainFailure to {} because encodedMessage.length={}", newException.isCertainFailure(), encodedMessage.length); aapsLogger.debug(LTag.PUMPCOMM,"Caught exception in transportMessages. Set certainFailure to {} because encodedMessage.length={}", newException.isCertainFailure(), encodedMessage.length);
}
throw newException; throw newException;
} }
@ -263,9 +281,7 @@ public class OmnipodCommunicationService extends RileyLinkCommunicationManager {
throw new NotEnoughDataException(receivedMessageData); throw new NotEnoughDataException(receivedMessageData);
} else if (messageBlocks.size() > 1) { } else if (messageBlocks.size() > 1) {
// BS: don't expect this to happen // BS: don't expect this to happen
if (isLoggingEnabled()) { aapsLogger.error(LTag.PUMPCOMM,"Received more than one message block: {}", messageBlocks.toString());
LOG.error("Received more than one message block: {}", messageBlocks.toString());
}
} }
return messageBlocks.get(0); return messageBlocks.get(0);
@ -292,14 +308,10 @@ public class OmnipodCommunicationService extends RileyLinkCommunicationManager {
if (RileyLinkBLEError.Timeout.equals(ex.getErrorCode())) { if (RileyLinkBLEError.Timeout.equals(ex.getErrorCode())) {
quiet = true; quiet = true;
} else { } else {
if (isLoggingEnabled()) { aapsLogger.debug(LTag.PUMPCOMM,"Ignoring exception in ackUntilQuiet", ex);
LOG.debug("Ignoring exception in ackUntilQuiet", ex);
}
} }
} catch (OmnipodException ex) { } catch (OmnipodException ex) {
if (isLoggingEnabled()) { aapsLogger.debug(LTag.PUMPCOMM,"Ignoring exception in ackUntilQuiet", ex);
LOG.debug("Ignoring exception in ackUntilQuiet", ex);
}
} catch (Exception ex) { } catch (Exception ex) {
throw new CommunicationException(CommunicationException.Type.UNEXPECTED_EXCEPTION, ex); throw new CommunicationException(CommunicationException.Type.UNEXPECTED_EXCEPTION, ex);
} }
@ -323,9 +335,7 @@ public class OmnipodCommunicationService extends RileyLinkCommunicationManager {
try { try {
response = sendAndListen(packet, responseTimeoutMilliseconds, repeatCount, 9, preambleExtensionMilliseconds, OmnipodPacket.class); response = sendAndListen(packet, responseTimeoutMilliseconds, repeatCount, 9, preambleExtensionMilliseconds, OmnipodPacket.class);
} catch (RileyLinkCommunicationException | OmnipodException ex) { } catch (RileyLinkCommunicationException | OmnipodException ex) {
if (isLoggingEnabled()) { aapsLogger.debug(LTag.PUMPCOMM,"Ignoring exception in exchangePackets", ex);
LOG.debug("Ignoring exception in exchangePackets", ex);
}
} catch (Exception ex) { } catch (Exception ex) {
throw new CommunicationException(CommunicationException.Type.UNEXPECTED_EXCEPTION, ex); throw new CommunicationException(CommunicationException.Type.UNEXPECTED_EXCEPTION, ex);
} }
@ -345,7 +355,4 @@ public class OmnipodCommunicationService extends RileyLinkCommunicationManager {
throw new CommunicationException(CommunicationException.Type.TIMEOUT); throw new CommunicationException(CommunicationException.Type.TIMEOUT);
} }
private boolean isLoggingEnabled() {
return L.isEnabled(L.PUMPCOMM);
}
} }

View file

@ -10,7 +10,12 @@ import java.util.EnumSet;
import java.util.TimeZone; import java.util.TimeZone;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import javax.inject.Inject;
import dagger.android.HasAndroidInjector;
import info.nightscout.androidaps.logging.AAPSLogger;
import info.nightscout.androidaps.logging.L; import info.nightscout.androidaps.logging.L;
import info.nightscout.androidaps.logging.LTag;
import info.nightscout.androidaps.plugins.pump.omnipod.comm.action.AcknowledgeAlertsAction; import info.nightscout.androidaps.plugins.pump.omnipod.comm.action.AcknowledgeAlertsAction;
import info.nightscout.androidaps.plugins.pump.omnipod.comm.action.AssignAddressAction; import info.nightscout.androidaps.plugins.pump.omnipod.comm.action.AssignAddressAction;
import info.nightscout.androidaps.plugins.pump.omnipod.comm.action.BolusAction; import info.nightscout.androidaps.plugins.pump.omnipod.comm.action.BolusAction;
@ -44,7 +49,8 @@ import info.nightscout.androidaps.plugins.pump.omnipod.comm.exception.NonceOutOf
import info.nightscout.androidaps.plugins.pump.omnipod.exception.OmnipodException; import info.nightscout.androidaps.plugins.pump.omnipod.exception.OmnipodException;
import info.nightscout.androidaps.plugins.pump.omnipod.comm.exception.PodFaultException; import info.nightscout.androidaps.plugins.pump.omnipod.comm.exception.PodFaultException;
import info.nightscout.androidaps.plugins.pump.omnipod.util.OmnipodConst; import info.nightscout.androidaps.plugins.pump.omnipod.util.OmnipodConst;
import info.nightscout.androidaps.utils.SP;
import info.nightscout.androidaps.utils.sharedPreferences.SP;
import io.reactivex.Completable; import io.reactivex.Completable;
import io.reactivex.Flowable; import io.reactivex.Flowable;
import io.reactivex.Single; import io.reactivex.Single;
@ -55,17 +61,25 @@ import io.reactivex.subjects.SingleSubject;
public class OmnipodManager { public class OmnipodManager {
private static final int ACTION_VERIFICATION_TRIES = 3; private static final int ACTION_VERIFICATION_TRIES = 3;
private static final Logger LOG = LoggerFactory.getLogger(L.PUMP); //private static final Logger LOG = LoggerFactory.getLogger(L.PUMP);
protected final OmnipodCommunicationService communicationService; protected final OmnipodCommunicationManager communicationService;
private final PodStateChangedHandler podStateChangedHandler; private final PodStateChangedHandler podStateChangedHandler;
protected PodSessionState podState; protected PodSessionState podState;
private ActiveBolusData activeBolusData; private ActiveBolusData activeBolusData;
private final Object bolusDataMutex = new Object(); private final Object bolusDataMutex = new Object();
public OmnipodManager(OmnipodCommunicationService communicationService, PodSessionState podState, private HasAndroidInjector injector;
@Inject AAPSLogger aapsLogger;
@Inject SP sp;
public OmnipodManager(HasAndroidInjector injector,
OmnipodCommunicationManager communicationService,
PodSessionState podState,
PodStateChangedHandler podStateChangedHandler) { PodStateChangedHandler podStateChangedHandler) {
this.injector = injector;
this.injector.androidInjector().inject(this);
if (communicationService == null) { if (communicationService == null) {
throw new IllegalArgumentException("Communication service cannot be null"); throw new IllegalArgumentException("Communication service cannot be null");
} }
@ -77,8 +91,10 @@ public class OmnipodManager {
this.podStateChangedHandler = podStateChangedHandler; this.podStateChangedHandler = podStateChangedHandler;
} }
public OmnipodManager(OmnipodCommunicationService communicationService, PodSessionState podState) { public OmnipodManager(HasAndroidInjector injector,
this(communicationService, podState, null); OmnipodCommunicationManager communicationService,
PodSessionState podState) {
this(injector, communicationService, podState, null);
} }
public synchronized Single<SetupActionResult> pairAndPrime() { public synchronized Single<SetupActionResult> pairAndPrime() {
@ -239,7 +255,7 @@ public class OmnipodManager {
return executeAndVerify(() -> { return executeAndVerify(() -> {
StatusResponse statusResponse = communicationService.executeAction(new CancelDeliveryAction(podState, deliveryTypes, acknowledgementBeep)); StatusResponse statusResponse = communicationService.executeAction(new CancelDeliveryAction(podState, deliveryTypes, acknowledgementBeep));
if (isLoggingEnabled()) { if (isLoggingEnabled()) {
LOG.info("Status response after cancel delivery[types={}]: {}", deliveryTypes.toString(), statusResponse.toString()); aapsLogger.info(LTag.PUMPCOMM,"Status response after cancel delivery[types={}]: {}", deliveryTypes.toString(), statusResponse.toString());
} }
return statusResponse; return statusResponse;
}); });
@ -267,7 +283,7 @@ public class OmnipodManager {
// Catch uncertain exceptions as we still want to report bolus progress indication // Catch uncertain exceptions as we still want to report bolus progress indication
if (isLoggingEnabled()) { if (isLoggingEnabled()) {
LOG.error("Caught exception[certainFailure=false] in bolus", ex); aapsLogger.error(LTag.PUMPCOMM,"Caught exception[certainFailure=false] in bolus", ex);
} }
commandDeliveryStatus = CommandDeliveryStatus.UNCERTAIN_FAILURE; commandDeliveryStatus = CommandDeliveryStatus.UNCERTAIN_FAILURE;
} finally { } finally {
@ -320,12 +336,12 @@ public class OmnipodManager {
unitsNotDelivered = ex.getFaultEvent().getInsulinNotDelivered(); unitsNotDelivered = ex.getFaultEvent().getInsulinNotDelivered();
if (isLoggingEnabled()) { if (isLoggingEnabled()) {
LOG.debug("Caught PodFaultException in bolus completion verification", ex); aapsLogger.debug(LTag.PUMPCOMM,"Caught PodFaultException in bolus completion verification", ex);
} }
break; break;
} catch (Exception ex) { } catch (Exception ex) {
if (isLoggingEnabled()) { if (isLoggingEnabled()) {
LOG.debug("Ignoring exception in bolus completion verification", ex); aapsLogger.debug(LTag.PUMPCOMM,"Ignoring exception in bolus completion verification", ex);
} }
} }
} }
@ -434,9 +450,9 @@ public class OmnipodManager {
try { try {
PodInfoResponse podInfoResponse = communicationService.executeAction(new GetPodInfoAction(podState, PodInfoType.RECENT_PULSE_LOG)); PodInfoResponse podInfoResponse = communicationService.executeAction(new GetPodInfoAction(podState, PodInfoType.RECENT_PULSE_LOG));
PodInfoRecentPulseLog pulseLogInfo = podInfoResponse.getPodInfo(); PodInfoRecentPulseLog pulseLogInfo = podInfoResponse.getPodInfo();
LOG.info("Retrieved pulse log from the pod: {}", pulseLogInfo.toString()); aapsLogger.info(LTag.PUMPCOMM,"Retrieved pulse log from the pod: {}", pulseLogInfo.toString());
} catch (Exception ex) { } catch (Exception ex) {
LOG.warn("Failed to retrieve pulse log from the pod", ex); aapsLogger.warn(LTag.PUMPCOMM,"Failed to retrieve pulse log from the pod", ex);
} }
} }
@ -445,7 +461,7 @@ public class OmnipodManager {
communicationService.executeAction(new DeactivatePodAction(podState, true)); communicationService.executeAction(new DeactivatePodAction(podState, true));
} catch (PodFaultException ex) { } catch (PodFaultException ex) {
if (isLoggingEnabled()) { if (isLoggingEnabled()) {
LOG.info("Ignoring PodFaultException in deactivatePod", ex); aapsLogger.info(LTag.PUMPCOMM,"Ignoring PodFaultException in deactivatePod", ex);
} }
} finally { } finally {
logCommandExecutionFinished("deactivatePod"); logCommandExecutionFinished("deactivatePod");
@ -456,13 +472,13 @@ public class OmnipodManager {
public void resetPodState(boolean forcedByUser) { public void resetPodState(boolean forcedByUser) {
if (isLoggingEnabled()) { if (isLoggingEnabled()) {
LOG.warn("resetPodState has been called. forcedByUser={}", forcedByUser); aapsLogger.warn(LTag.PUMPCOMM,"resetPodState has been called. forcedByUser={}", forcedByUser);
} }
podState = null; podState = null;
SP.remove(OmnipodConst.Prefs.PodState); sp.remove(OmnipodConst.Prefs.PodState);
} }
public OmnipodCommunicationService getCommunicationService() { public OmnipodCommunicationManager getCommunicationService() {
return communicationService; return communicationService;
} }
@ -499,7 +515,7 @@ public class OmnipodManager {
throw originalException; throw originalException;
} else { } else {
if (isLoggingEnabled()) { if (isLoggingEnabled()) {
LOG.warn("Caught exception in executeAndVerify. Verifying command by using cancel none command to verify nonce", originalException); aapsLogger.warn(LTag.PUMPCOMM,"Caught exception in executeAndVerify. Verifying command by using cancel none command to verify nonce", originalException);
} }
try { try {
@ -507,13 +523,13 @@ public class OmnipodManager {
StatusResponse statusResponse = communicationService.sendCommand(StatusResponse.class, podState, StatusResponse statusResponse = communicationService.sendCommand(StatusResponse.class, podState,
new CancelDeliveryCommand(podState.getCurrentNonce(), BeepType.NO_BEEP, DeliveryType.NONE), false); new CancelDeliveryCommand(podState.getCurrentNonce(), BeepType.NO_BEEP, DeliveryType.NONE), false);
if (isLoggingEnabled()) { if (isLoggingEnabled()) {
LOG.info("Command status resolved to SUCCESS. Status response after cancelDelivery[types=DeliveryType.NONE]: {}", statusResponse); aapsLogger.info(LTag.PUMPCOMM,"Command status resolved to SUCCESS. Status response after cancelDelivery[types=DeliveryType.NONE]: {}", statusResponse);
} }
return statusResponse; return statusResponse;
} catch (NonceOutOfSyncException verificationException) { } catch (NonceOutOfSyncException verificationException) {
if (isLoggingEnabled()) { if (isLoggingEnabled()) {
LOG.error("Command resolved to FAILURE (CERTAIN_FAILURE)", verificationException); aapsLogger.error(LTag.PUMPCOMM,"Command resolved to FAILURE (CERTAIN_FAILURE)", verificationException);
} }
if (originalException instanceof OmnipodException) { if (originalException instanceof OmnipodException) {
((OmnipodException) originalException).setCertainFailure(true); ((OmnipodException) originalException).setCertainFailure(true);
@ -525,7 +541,7 @@ public class OmnipodManager {
} }
} catch (Exception verificationException) { } catch (Exception verificationException) {
if (isLoggingEnabled()) { if (isLoggingEnabled()) {
LOG.error("Command unresolved (UNCERTAIN_FAILURE)", verificationException); aapsLogger.error(LTag.PUMPCOMM,"Command unresolved (UNCERTAIN_FAILURE)", verificationException);
} }
throw originalException; throw originalException;
} finally { } finally {
@ -566,18 +582,19 @@ public class OmnipodManager {
private void logStartingCommandExecution(String action) { private void logStartingCommandExecution(String action) {
if (isLoggingEnabled()) { if (isLoggingEnabled()) {
LOG.debug("Starting command execution for action: " + action); aapsLogger.debug(LTag.PUMPCOMM,"Starting command execution for action: " + action);
} }
} }
private void logCommandExecutionFinished(String action) { private void logCommandExecutionFinished(String action) {
if (isLoggingEnabled()) { if (isLoggingEnabled()) {
LOG.debug("Command execution finished for action: " + action); aapsLogger.debug(LTag.PUMPCOMM,"Command execution finished for action: " + action);
} }
} }
// TODO remove this
private boolean isLoggingEnabled() { private boolean isLoggingEnabled() {
return L.isEnabled(L.PUMP); return true;
} }
private static Duration calculateBolusDuration(double units, double deliveryRate) { private static Duration calculateBolusDuration(double units, double deliveryRate) {

View file

@ -2,7 +2,7 @@ package info.nightscout.androidaps.plugins.pump.omnipod.comm.action;
import java.util.Collections; import java.util.Collections;
import info.nightscout.androidaps.plugins.pump.omnipod.comm.OmnipodCommunicationService; import info.nightscout.androidaps.plugins.pump.omnipod.comm.OmnipodCommunicationManager;
import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.command.AcknowledgeAlertsCommand; import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.command.AcknowledgeAlertsCommand;
import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.response.StatusResponse; import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.response.StatusResponse;
import info.nightscout.androidaps.plugins.pump.omnipod.defs.AlertSet; import info.nightscout.androidaps.plugins.pump.omnipod.defs.AlertSet;
@ -32,7 +32,7 @@ public class AcknowledgeAlertsAction implements OmnipodAction<StatusResponse> {
} }
@Override @Override
public StatusResponse execute(OmnipodCommunicationService communicationService) { public StatusResponse execute(OmnipodCommunicationManager communicationService) {
return communicationService.sendCommand(StatusResponse.class, podState, return communicationService.sendCommand(StatusResponse.class, podState,
new AcknowledgeAlertsCommand(podState.getCurrentNonce(), alerts)); new AcknowledgeAlertsCommand(podState.getCurrentNonce(), alerts));
} }

View file

@ -5,7 +5,7 @@ import org.joda.time.DateTimeZone;
import java.util.Collections; import java.util.Collections;
import java.util.Random; import java.util.Random;
import info.nightscout.androidaps.plugins.pump.omnipod.comm.OmnipodCommunicationService; import info.nightscout.androidaps.plugins.pump.omnipod.comm.OmnipodCommunicationManager;
import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.OmnipodMessage; import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.OmnipodMessage;
import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.command.AssignAddressCommand; import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.command.AssignAddressCommand;
import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.response.VersionResponse; import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.response.VersionResponse;
@ -28,7 +28,7 @@ public class AssignAddressAction implements OmnipodAction<PodSessionState> {
} }
@Override @Override
public PodSessionState execute(OmnipodCommunicationService communicationService) { public PodSessionState execute(OmnipodCommunicationManager communicationService) {
PodSetupState setupState = new PodSetupState(address, 0x00, 0x00); PodSetupState setupState = new PodSetupState(address, 0x00, 0x00);
AssignAddressCommand assignAddress = new AssignAddressCommand(setupState.getAddress()); AssignAddressCommand assignAddress = new AssignAddressCommand(setupState.getAddress());

View file

@ -4,7 +4,7 @@ import org.joda.time.Duration;
import java.util.Arrays; import java.util.Arrays;
import info.nightscout.androidaps.plugins.pump.omnipod.comm.OmnipodCommunicationService; import info.nightscout.androidaps.plugins.pump.omnipod.comm.OmnipodCommunicationManager;
import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.OmnipodMessage; import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.OmnipodMessage;
import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.command.BolusExtraCommand; import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.command.BolusExtraCommand;
import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.command.SetInsulinScheduleCommand; import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.command.SetInsulinScheduleCommand;
@ -40,7 +40,7 @@ public class BolusAction implements OmnipodAction<StatusResponse> {
} }
@Override @Override
public StatusResponse execute(OmnipodCommunicationService communicationService) { public StatusResponse execute(OmnipodCommunicationManager communicationService) {
BolusDeliverySchedule bolusDeliverySchedule = new BolusDeliverySchedule(units, timeBetweenPulses); BolusDeliverySchedule bolusDeliverySchedule = new BolusDeliverySchedule(units, timeBetweenPulses);
SetInsulinScheduleCommand setInsulinScheduleCommand = new SetInsulinScheduleCommand( SetInsulinScheduleCommand setInsulinScheduleCommand = new SetInsulinScheduleCommand(
podState.getCurrentNonce(), bolusDeliverySchedule); podState.getCurrentNonce(), bolusDeliverySchedule);

View file

@ -4,7 +4,7 @@ import java.util.ArrayList;
import java.util.EnumSet; import java.util.EnumSet;
import java.util.List; import java.util.List;
import info.nightscout.androidaps.plugins.pump.omnipod.comm.OmnipodCommunicationService; import info.nightscout.androidaps.plugins.pump.omnipod.comm.OmnipodCommunicationManager;
import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.MessageBlock; import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.MessageBlock;
import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.OmnipodMessage; import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.OmnipodMessage;
import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.command.CancelDeliveryCommand; import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.command.CancelDeliveryCommand;
@ -33,7 +33,7 @@ public class CancelDeliveryAction implements OmnipodAction<StatusResponse> {
} }
@Override @Override
public StatusResponse execute(OmnipodCommunicationService communicationService) { public StatusResponse execute(OmnipodCommunicationManager communicationService) {
List<MessageBlock> messageBlocks = new ArrayList<>(); List<MessageBlock> messageBlocks = new ArrayList<>();
if (acknowledgementBeep && deliveryTypes.size() > 1) { if (acknowledgementBeep && deliveryTypes.size() > 1) {

View file

@ -2,7 +2,7 @@ package info.nightscout.androidaps.plugins.pump.omnipod.comm.action;
import java.util.List; import java.util.List;
import info.nightscout.androidaps.plugins.pump.omnipod.comm.OmnipodCommunicationService; import info.nightscout.androidaps.plugins.pump.omnipod.comm.OmnipodCommunicationManager;
import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.command.ConfigureAlertsCommand; import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.command.ConfigureAlertsCommand;
import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.response.StatusResponse; import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.response.StatusResponse;
import info.nightscout.androidaps.plugins.pump.omnipod.defs.AlertConfiguration; import info.nightscout.androidaps.plugins.pump.omnipod.defs.AlertConfiguration;
@ -25,7 +25,7 @@ public class ConfigureAlertsAction implements OmnipodAction<StatusResponse> {
} }
@Override @Override
public StatusResponse execute(OmnipodCommunicationService communicationService) { public StatusResponse execute(OmnipodCommunicationManager communicationService) {
ConfigureAlertsCommand configureAlertsCommand = new ConfigureAlertsCommand(podState.getCurrentNonce(), alertConfigurations); ConfigureAlertsCommand configureAlertsCommand = new ConfigureAlertsCommand(podState.getCurrentNonce(), alertConfigurations);
StatusResponse statusResponse = communicationService.sendCommand(StatusResponse.class, podState, configureAlertsCommand); StatusResponse statusResponse = communicationService.sendCommand(StatusResponse.class, podState, configureAlertsCommand);
for (AlertConfiguration alertConfiguration : alertConfigurations) { for (AlertConfiguration alertConfiguration : alertConfigurations) {

View file

@ -4,7 +4,7 @@ import org.joda.time.DateTime;
import java.util.Collections; import java.util.Collections;
import info.nightscout.androidaps.plugins.pump.omnipod.comm.OmnipodCommunicationService; import info.nightscout.androidaps.plugins.pump.omnipod.comm.OmnipodCommunicationManager;
import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.OmnipodMessage; import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.OmnipodMessage;
import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.command.ConfigurePodCommand; import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.command.ConfigurePodCommand;
import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.response.VersionResponse; import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.response.VersionResponse;
@ -25,7 +25,7 @@ public class ConfigurePodAction implements OmnipodAction<VersionResponse> {
} }
@Override @Override
public VersionResponse execute(OmnipodCommunicationService communicationService) { public VersionResponse execute(OmnipodCommunicationManager communicationService) {
if (!podState.getSetupProgress().equals(SetupProgress.ADDRESS_ASSIGNED)) { if (!podState.getSetupProgress().equals(SetupProgress.ADDRESS_ASSIGNED)) {
throw new IllegalSetupProgressException(SetupProgress.ADDRESS_ASSIGNED, podState.getSetupProgress()); throw new IllegalSetupProgressException(SetupProgress.ADDRESS_ASSIGNED, podState.getSetupProgress());
} }

View file

@ -2,7 +2,7 @@ package info.nightscout.androidaps.plugins.pump.omnipod.comm.action;
import java.util.EnumSet; import java.util.EnumSet;
import info.nightscout.androidaps.plugins.pump.omnipod.comm.OmnipodCommunicationService; import info.nightscout.androidaps.plugins.pump.omnipod.comm.OmnipodCommunicationManager;
import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.command.DeactivatePodCommand; import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.command.DeactivatePodCommand;
import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.response.StatusResponse; import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.response.StatusResponse;
import info.nightscout.androidaps.plugins.pump.omnipod.defs.DeliveryType; import info.nightscout.androidaps.plugins.pump.omnipod.defs.DeliveryType;
@ -23,7 +23,7 @@ public class DeactivatePodAction implements OmnipodAction<StatusResponse> {
} }
@Override @Override
public StatusResponse execute(OmnipodCommunicationService communicationService) { public StatusResponse execute(OmnipodCommunicationManager communicationService) {
if (!podState.isSuspended() && !podState.hasFaultEvent()) { if (!podState.isSuspended() && !podState.hasFaultEvent()) {
try { try {
communicationService.executeAction(new CancelDeliveryAction(podState, communicationService.executeAction(new CancelDeliveryAction(podState,

View file

@ -1,6 +1,6 @@
package info.nightscout.androidaps.plugins.pump.omnipod.comm.action; package info.nightscout.androidaps.plugins.pump.omnipod.comm.action;
import info.nightscout.androidaps.plugins.pump.omnipod.comm.OmnipodCommunicationService; import info.nightscout.androidaps.plugins.pump.omnipod.comm.OmnipodCommunicationManager;
import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.command.GetStatusCommand; import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.command.GetStatusCommand;
import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.response.podinfo.PodInfoResponse; import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.response.podinfo.PodInfoResponse;
import info.nightscout.androidaps.plugins.pump.omnipod.defs.PodInfoType; import info.nightscout.androidaps.plugins.pump.omnipod.defs.PodInfoType;
@ -23,7 +23,7 @@ public class GetPodInfoAction implements OmnipodAction<PodInfoResponse> {
} }
@Override @Override
public PodInfoResponse execute(OmnipodCommunicationService communicationService) { public PodInfoResponse execute(OmnipodCommunicationManager communicationService) {
return communicationService.sendCommand(PodInfoResponse.class, podState, new GetStatusCommand(podInfoType)); return communicationService.sendCommand(PodInfoResponse.class, podState, new GetStatusCommand(podInfoType));
} }
} }

View file

@ -1,6 +1,6 @@
package info.nightscout.androidaps.plugins.pump.omnipod.comm.action; package info.nightscout.androidaps.plugins.pump.omnipod.comm.action;
import info.nightscout.androidaps.plugins.pump.omnipod.comm.OmnipodCommunicationService; import info.nightscout.androidaps.plugins.pump.omnipod.comm.OmnipodCommunicationManager;
import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.command.GetStatusCommand; import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.command.GetStatusCommand;
import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.response.StatusResponse; import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.response.StatusResponse;
import info.nightscout.androidaps.plugins.pump.omnipod.defs.PodInfoType; import info.nightscout.androidaps.plugins.pump.omnipod.defs.PodInfoType;
@ -18,7 +18,7 @@ public class GetStatusAction implements OmnipodAction<StatusResponse> {
} }
@Override @Override
public StatusResponse execute(OmnipodCommunicationService communicationService) { public StatusResponse execute(OmnipodCommunicationManager communicationService) {
return communicationService.sendCommand(StatusResponse.class, podState, new GetStatusCommand(PodInfoType.NORMAL)); return communicationService.sendCommand(StatusResponse.class, podState, new GetStatusCommand(PodInfoType.NORMAL));
} }
} }

View file

@ -3,7 +3,7 @@ package info.nightscout.androidaps.plugins.pump.omnipod.comm.action;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import info.nightscout.androidaps.plugins.pump.omnipod.comm.OmnipodCommunicationService; import info.nightscout.androidaps.plugins.pump.omnipod.comm.OmnipodCommunicationManager;
import info.nightscout.androidaps.plugins.pump.omnipod.comm.action.service.InsertCannulaService; import info.nightscout.androidaps.plugins.pump.omnipod.comm.action.service.InsertCannulaService;
import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.response.StatusResponse; import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.response.StatusResponse;
import info.nightscout.androidaps.plugins.pump.omnipod.defs.SetupProgress; import info.nightscout.androidaps.plugins.pump.omnipod.defs.SetupProgress;
@ -45,7 +45,7 @@ public class InsertCannulaAction implements OmnipodAction<StatusResponse> {
} }
@Override @Override
public StatusResponse execute(OmnipodCommunicationService communicationService) { public StatusResponse execute(OmnipodCommunicationManager communicationService) {
if (podState.getSetupProgress().isBefore(SetupProgress.PRIMING_FINISHED)) { if (podState.getSetupProgress().isBefore(SetupProgress.PRIMING_FINISHED)) {
throw new IllegalSetupProgressException(SetupProgress.PRIMING_FINISHED, podState.getSetupProgress()); throw new IllegalSetupProgressException(SetupProgress.PRIMING_FINISHED, podState.getSetupProgress());
} }

View file

@ -1,7 +1,7 @@
package info.nightscout.androidaps.plugins.pump.omnipod.comm.action; package info.nightscout.androidaps.plugins.pump.omnipod.comm.action;
import info.nightscout.androidaps.plugins.pump.omnipod.comm.OmnipodCommunicationService; import info.nightscout.androidaps.plugins.pump.omnipod.comm.OmnipodCommunicationManager;
public interface OmnipodAction<T> { public interface OmnipodAction<T> {
T execute(OmnipodCommunicationService communicationService); T execute(OmnipodCommunicationManager communicationService);
} }

View file

@ -3,7 +3,7 @@ package info.nightscout.androidaps.plugins.pump.omnipod.comm.action;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import info.nightscout.androidaps.plugins.pump.omnipod.comm.OmnipodCommunicationService; import info.nightscout.androidaps.plugins.pump.omnipod.comm.OmnipodCommunicationManager;
import info.nightscout.androidaps.plugins.pump.omnipod.comm.action.service.PrimeService; import info.nightscout.androidaps.plugins.pump.omnipod.comm.action.service.PrimeService;
import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.response.StatusResponse; import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.response.StatusResponse;
import info.nightscout.androidaps.plugins.pump.omnipod.defs.PodProgressStatus; import info.nightscout.androidaps.plugins.pump.omnipod.defs.PodProgressStatus;
@ -39,7 +39,7 @@ public class PrimeAction implements OmnipodAction<StatusResponse> {
} }
@Override @Override
public StatusResponse execute(OmnipodCommunicationService communicationService) { public StatusResponse execute(OmnipodCommunicationManager communicationService) {
if (podState.getSetupProgress().isBefore(SetupProgress.POD_CONFIGURED)) { if (podState.getSetupProgress().isBefore(SetupProgress.POD_CONFIGURED)) {
throw new IllegalSetupProgressException(SetupProgress.POD_CONFIGURED, podState.getSetupProgress()); throw new IllegalSetupProgressException(SetupProgress.POD_CONFIGURED, podState.getSetupProgress());
} }

View file

@ -4,7 +4,7 @@ import org.joda.time.Duration;
import java.util.Arrays; import java.util.Arrays;
import info.nightscout.androidaps.plugins.pump.omnipod.comm.OmnipodCommunicationService; import info.nightscout.androidaps.plugins.pump.omnipod.comm.OmnipodCommunicationManager;
import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.OmnipodMessage; import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.OmnipodMessage;
import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.command.BasalScheduleExtraCommand; import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.command.BasalScheduleExtraCommand;
import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.command.SetInsulinScheduleCommand; import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.command.SetInsulinScheduleCommand;
@ -39,7 +39,7 @@ public class SetBasalScheduleAction implements OmnipodAction<StatusResponse> {
} }
@Override @Override
public StatusResponse execute(OmnipodCommunicationService communicationService) { public StatusResponse execute(OmnipodCommunicationManager communicationService) {
SetInsulinScheduleCommand setBasal = new SetInsulinScheduleCommand(podState.getCurrentNonce(), basalSchedule, scheduleOffset); SetInsulinScheduleCommand setBasal = new SetInsulinScheduleCommand(podState.getCurrentNonce(), basalSchedule, scheduleOffset);
BasalScheduleExtraCommand extraCommand = new BasalScheduleExtraCommand(basalSchedule, scheduleOffset, BasalScheduleExtraCommand extraCommand = new BasalScheduleExtraCommand(basalSchedule, scheduleOffset,
acknowledgementBeep, confidenceReminder, Duration.ZERO); acknowledgementBeep, confidenceReminder, Duration.ZERO);

View file

@ -5,7 +5,7 @@ import org.joda.time.Duration;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import info.nightscout.androidaps.plugins.pump.omnipod.comm.OmnipodCommunicationService; import info.nightscout.androidaps.plugins.pump.omnipod.comm.OmnipodCommunicationManager;
import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.MessageBlock; import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.MessageBlock;
import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.OmnipodMessage; import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.OmnipodMessage;
import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.command.SetInsulinScheduleCommand; import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.command.SetInsulinScheduleCommand;
@ -37,7 +37,7 @@ public class SetTempBasalAction implements OmnipodAction<StatusResponse> {
} }
@Override @Override
public StatusResponse execute(OmnipodCommunicationService communicationService) { public StatusResponse execute(OmnipodCommunicationManager communicationService) {
List<MessageBlock> messageBlocks = Arrays.asList( // List<MessageBlock> messageBlocks = Arrays.asList( //
new SetInsulinScheduleCommand(podState.getCurrentNonce(), rate, duration), new SetInsulinScheduleCommand(podState.getCurrentNonce(), rate, duration),
new TempBasalExtraCommand(rate, duration, acknowledgementBeep, completionBeep, Duration.ZERO)); new TempBasalExtraCommand(rate, duration, acknowledgementBeep, completionBeep, Duration.ZERO));

View file

@ -6,7 +6,7 @@ import org.joda.time.Duration;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import info.nightscout.androidaps.plugins.pump.omnipod.comm.OmnipodCommunicationService; import info.nightscout.androidaps.plugins.pump.omnipod.comm.OmnipodCommunicationManager;
import info.nightscout.androidaps.plugins.pump.omnipod.comm.action.BolusAction; import info.nightscout.androidaps.plugins.pump.omnipod.comm.action.BolusAction;
import info.nightscout.androidaps.plugins.pump.omnipod.comm.action.ConfigureAlertsAction; import info.nightscout.androidaps.plugins.pump.omnipod.comm.action.ConfigureAlertsAction;
import info.nightscout.androidaps.plugins.pump.omnipod.comm.action.SetBasalScheduleAction; import info.nightscout.androidaps.plugins.pump.omnipod.comm.action.SetBasalScheduleAction;
@ -18,13 +18,13 @@ import info.nightscout.androidaps.plugins.pump.omnipod.defs.state.PodSessionStat
import info.nightscout.androidaps.plugins.pump.omnipod.util.OmnipodConst; import info.nightscout.androidaps.plugins.pump.omnipod.util.OmnipodConst;
public class InsertCannulaService { public class InsertCannulaService {
public StatusResponse programInitialBasalSchedule(OmnipodCommunicationService communicationService, public StatusResponse programInitialBasalSchedule(OmnipodCommunicationManager communicationService,
PodSessionState podState, BasalSchedule basalSchedule) { PodSessionState podState, BasalSchedule basalSchedule) {
return communicationService.executeAction(new SetBasalScheduleAction(podState, basalSchedule, return communicationService.executeAction(new SetBasalScheduleAction(podState, basalSchedule,
true, podState.getScheduleOffset(), false)); true, podState.getScheduleOffset(), false));
} }
public StatusResponse executeExpirationRemindersAlertCommand(OmnipodCommunicationService communicationService, public StatusResponse executeExpirationRemindersAlertCommand(OmnipodCommunicationManager communicationService,
PodSessionState podState) { PodSessionState podState) {
AlertConfiguration lowReservoirAlertConfiguration = AlertConfigurationFactory.createLowReservoirAlertConfiguration(OmnipodConst.LOW_RESERVOIR_ALERT); AlertConfiguration lowReservoirAlertConfiguration = AlertConfigurationFactory.createLowReservoirAlertConfiguration(OmnipodConst.LOW_RESERVOIR_ALERT);
@ -52,7 +52,7 @@ public class InsertCannulaService {
return new ConfigureAlertsAction(podState, alertConfigurations).execute(communicationService); return new ConfigureAlertsAction(podState, alertConfigurations).execute(communicationService);
} }
public StatusResponse executeInsertionBolusCommand(OmnipodCommunicationService communicationService, PodSessionState podState) { public StatusResponse executeInsertionBolusCommand(OmnipodCommunicationManager communicationService, PodSessionState podState) {
return communicationService.executeAction(new BolusAction(podState, OmnipodConst.POD_CANNULA_INSERTION_BOLUS_UNITS, return communicationService.executeAction(new BolusAction(podState, OmnipodConst.POD_CANNULA_INSERTION_BOLUS_UNITS,
Duration.standardSeconds(1), false, false)); Duration.standardSeconds(1), false, false));
} }

View file

@ -4,7 +4,7 @@ import org.joda.time.Duration;
import java.util.Collections; import java.util.Collections;
import info.nightscout.androidaps.plugins.pump.omnipod.comm.OmnipodCommunicationService; import info.nightscout.androidaps.plugins.pump.omnipod.comm.OmnipodCommunicationManager;
import info.nightscout.androidaps.plugins.pump.omnipod.comm.action.BolusAction; import info.nightscout.androidaps.plugins.pump.omnipod.comm.action.BolusAction;
import info.nightscout.androidaps.plugins.pump.omnipod.comm.action.ConfigureAlertsAction; import info.nightscout.androidaps.plugins.pump.omnipod.comm.action.ConfigureAlertsAction;
import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.OmnipodMessage; import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.OmnipodMessage;
@ -17,20 +17,20 @@ import info.nightscout.androidaps.plugins.pump.omnipod.util.OmnipodConst;
public class PrimeService { public class PrimeService {
public StatusResponse executeDisableTab5Sub16FaultConfigCommand(OmnipodCommunicationService communicationService, PodSessionState podState) { public StatusResponse executeDisableTab5Sub16FaultConfigCommand(OmnipodCommunicationManager communicationService, PodSessionState podState) {
FaultConfigCommand faultConfigCommand = new FaultConfigCommand(podState.getCurrentNonce(), (byte) 0x00, (byte) 0x00); FaultConfigCommand faultConfigCommand = new FaultConfigCommand(podState.getCurrentNonce(), (byte) 0x00, (byte) 0x00);
OmnipodMessage faultConfigMessage = new OmnipodMessage(podState.getAddress(), OmnipodMessage faultConfigMessage = new OmnipodMessage(podState.getAddress(),
Collections.singletonList(faultConfigCommand), podState.getMessageNumber()); Collections.singletonList(faultConfigCommand), podState.getMessageNumber());
return communicationService.exchangeMessages(StatusResponse.class, podState, faultConfigMessage); return communicationService.exchangeMessages(StatusResponse.class, podState, faultConfigMessage);
} }
public StatusResponse executeFinishSetupReminderAlertCommand(OmnipodCommunicationService communicationService, PodSessionState podState) { public StatusResponse executeFinishSetupReminderAlertCommand(OmnipodCommunicationManager communicationService, PodSessionState podState) {
AlertConfiguration finishSetupReminderAlertConfiguration = AlertConfigurationFactory.createFinishSetupReminderAlertConfiguration(); AlertConfiguration finishSetupReminderAlertConfiguration = AlertConfigurationFactory.createFinishSetupReminderAlertConfiguration();
return communicationService.executeAction(new ConfigureAlertsAction(podState, return communicationService.executeAction(new ConfigureAlertsAction(podState,
Collections.singletonList(finishSetupReminderAlertConfiguration))); Collections.singletonList(finishSetupReminderAlertConfiguration)));
} }
public StatusResponse executePrimeBolusCommand(OmnipodCommunicationService communicationService, PodSessionState podState) { public StatusResponse executePrimeBolusCommand(OmnipodCommunicationManager communicationService, PodSessionState podState) {
return communicationService.executeAction(new BolusAction(podState, OmnipodConst.POD_PRIME_BOLUS_UNITS, return communicationService.executeAction(new BolusAction(podState, OmnipodConst.POD_PRIME_BOLUS_UNITS,
Duration.standardSeconds(1), false, false)); Duration.standardSeconds(1), false, false));
} }

View file

@ -44,7 +44,7 @@ class PodManagementActivity : NoSplashAppCompatActivity() {
@Inject lateinit var profileFunction: ProfileFunction @Inject lateinit var profileFunction: ProfileFunction
@Inject lateinit var fabricPrivacy: FabricPrivacy @Inject lateinit var fabricPrivacy: FabricPrivacy
@Inject lateinit var commandQueue: CommandQueueProvider @Inject lateinit var commandQueue: CommandQueueProvider
@Inject lateinit var omnipodUtil: OmnipodUtil
private var initPodChanged = false private var initPodChanged = false
private var podSessionFullyInitalized = false private var podSessionFullyInitalized = false
@ -103,7 +103,7 @@ class PodManagementActivity : NoSplashAppCompatActivity() {
wizardPagerContext.clearContext() wizardPagerContext.clearContext()
wizardPagerContext.pagerSettings = pagerSettings wizardPagerContext.pagerSettings = pagerSettings
val podSessionState = OmnipodUtil.getPodSessionState() val podSessionState = omnipodUtil.getPodSessionState()
val isFullInit = podSessionState == null || podSessionState.setupProgress.isBefore(SetupProgress.PRIMING_FINISHED) val isFullInit = podSessionState == null || podSessionState.setupProgress.isBefore(SetupProgress.PRIMING_FINISHED)
if (isFullInit) { if (isFullInit) {
wizardPagerContext.wizardModel = FullInitPodWizardModel(applicationContext) wizardPagerContext.wizardModel = FullInitPodWizardModel(applicationContext)
@ -140,7 +140,7 @@ class PodManagementActivity : NoSplashAppCompatActivity() {
fun resetPodAction() { fun resetPodAction() {
OKDialog.showConfirmation(this, OKDialog.showConfirmation(this,
MainApp.gs(R.string.omnipod_cmd_reset_pod_desc), Thread { resourceHelper.gs(R.string.omnipod_cmd_reset_pod_desc), Thread {
AapsOmnipodManager.getInstance().resetPodStatus() AapsOmnipodManager.getInstance().resetPodStatus()
OmnipodUtil.setDriverState(OmnipodDriverState.Initalized_NoPod) OmnipodUtil.setDriverState(OmnipodDriverState.Initalized_NoPod)
refreshButtons() refreshButtons()
@ -155,10 +155,10 @@ class PodManagementActivity : NoSplashAppCompatActivity() {
} }
fun refreshButtons() { fun refreshButtons() {
initpod_init_pod.isEnabled = (OmnipodUtil.getPodSessionState() == null || initpod_init_pod.isEnabled = (omnipodUtil.getPodSessionState() == null ||
OmnipodUtil.getPodSessionState().getSetupProgress().isBefore(SetupProgress.COMPLETED)) omnipodUtil.getPodSessionState().getSetupProgress().isBefore(SetupProgress.COMPLETED))
val isPodSessionActive = (OmnipodUtil.getPodSessionState() != null) val isPodSessionActive = (omnipodUtil.getPodSessionState() != null)
initpod_remove_pod.isEnabled = isPodSessionActive initpod_remove_pod.isEnabled = isPodSessionActive
initpod_reset_pod.isEnabled = isPodSessionActive initpod_reset_pod.isEnabled = isPodSessionActive

View file

@ -30,6 +30,8 @@ public class InitPodRefreshAction extends AbstractCancelAction implements Finish
private PodManagementActivity podManagementActivity; private PodManagementActivity podManagementActivity;
private PodActionType actionType; private PodActionType actionType;
OmnipodUtil omnipodUtil;
public InitPodRefreshAction(PodManagementActivity podManagementActivity, PodActionType actionType) { public InitPodRefreshAction(PodManagementActivity podManagementActivity, PodActionType actionType) {
this.podManagementActivity = podManagementActivity; this.podManagementActivity = podManagementActivity;
this.actionType = actionType; this.actionType = actionType;
@ -51,14 +53,14 @@ public class InitPodRefreshAction extends AbstractCancelAction implements Finish
@Override @Override
public void execute() { public void execute() {
if (actionType==PodActionType.InitPod) { if (actionType==PodActionType.InitPod) {
if (OmnipodUtil.getPodSessionState().getSetupProgress().isBefore(SetupProgress.COMPLETED)) { if (omnipodUtil.getPodSessionState().getSetupProgress().isBefore(SetupProgress.COMPLETED)) {
OmnipodUtil.setDriverState(OmnipodDriverState.Initalized_PodInitializing); omnipodUtil.setDriverState(OmnipodDriverState.Initalized_PodInitializing);
} else { } else {
OmnipodUtil.setDriverState(OmnipodDriverState.Initalized_PodAttached); omnipodUtil.setDriverState(OmnipodDriverState.Initalized_PodAttached);
uploadCareportalEvent(System.currentTimeMillis(), CareportalEvent.SITECHANGE); uploadCareportalEvent(System.currentTimeMillis(), CareportalEvent.SITECHANGE);
} }
} else { } else {
OmnipodUtil.setDriverState(OmnipodDriverState.Initalized_NoPod); omnipodUtil.setDriverState(OmnipodDriverState.Initalized_NoPod);
} }
podManagementActivity.refreshButtons(); podManagementActivity.refreshButtons();

View file

@ -29,6 +29,9 @@ import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import javax.inject.Inject;
import dagger.android.support.DaggerFragment;
import info.nightscout.androidaps.R; import info.nightscout.androidaps.R;
import info.nightscout.androidaps.plugins.pump.omnipod.defs.FirmwareVersion; import info.nightscout.androidaps.plugins.pump.omnipod.defs.FirmwareVersion;
import info.nightscout.androidaps.plugins.pump.omnipod.defs.state.PodSessionState; import info.nightscout.androidaps.plugins.pump.omnipod.defs.state.PodSessionState;
@ -38,9 +41,11 @@ import info.nightscout.androidaps.plugins.pump.omnipod.util.OmnipodUtil;
/** /**
* Created by andy on 12/11/2019 * Created by andy on 12/11/2019
*/ */
public class PodInfoFragment extends Fragment { public class PodInfoFragment extends DaggerFragment {
private static final String ARG_KEY = "key"; private static final String ARG_KEY = "key";
@Inject OmnipodUtil omnipodUtil;
private PageFragmentCallbacks mCallbacks; private PageFragmentCallbacks mCallbacks;
private String mKey; private String mKey;
private PodInfoPage mPage; private PodInfoPage mPage;
@ -95,7 +100,7 @@ public class PodInfoFragment extends Fragment {
private boolean createDataOfPod() { private boolean createDataOfPod() {
PodSessionState podSessionState = OmnipodUtil.getPodSessionState(); PodSessionState podSessionState = omnipodUtil.getPodSessionState();
// PodSessionState podSessionState = new PodSessionState(DateTimeZone.UTC, // PodSessionState podSessionState = new PodSessionState(DateTimeZone.UTC,
// 483748738, // 483748738,

View file

@ -6,28 +6,43 @@ import org.slf4j.LoggerFactory;
import java.util.Arrays; import java.util.Arrays;
import javax.inject.Inject;
import javax.inject.Singleton;
import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R; import info.nightscout.androidaps.R;
import info.nightscout.androidaps.interfaces.PumpDescription; import info.nightscout.androidaps.interfaces.PumpDescription;
import info.nightscout.androidaps.logging.L; import info.nightscout.androidaps.logging.L;
import info.nightscout.androidaps.plugins.bus.RxBusWrapper;
import info.nightscout.androidaps.plugins.pump.common.data.PumpStatus; import info.nightscout.androidaps.plugins.pump.common.data.PumpStatus;
import info.nightscout.androidaps.plugins.pump.common.data.TempBasalPair; import info.nightscout.androidaps.plugins.pump.common.data.TempBasalPair;
import info.nightscout.androidaps.plugins.pump.common.defs.PumpType; import info.nightscout.androidaps.plugins.pump.common.defs.PumpType;
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.RileyLinkConst; import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.RileyLinkConst;
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.RileyLinkUtil;
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.RileyLinkError;
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs.RileyLinkServiceState; 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.androidaps.plugins.pump.medtronic.defs.PumpDeviceState;
import info.nightscout.androidaps.plugins.pump.medtronic.events.EventMedtronicDeviceStatusChange;
import info.nightscout.androidaps.plugins.pump.omnipod.defs.PodDeviceState; import info.nightscout.androidaps.plugins.pump.omnipod.defs.PodDeviceState;
import info.nightscout.androidaps.plugins.pump.omnipod.defs.state.PodSessionState; import info.nightscout.androidaps.plugins.pump.omnipod.defs.state.PodSessionState;
import info.nightscout.androidaps.plugins.pump.omnipod.util.OmnipodConst; import info.nightscout.androidaps.plugins.pump.omnipod.util.OmnipodConst;
import info.nightscout.androidaps.plugins.pump.omnipod.util.OmnipodUtil; import info.nightscout.androidaps.plugins.pump.omnipod.util.OmnipodUtil;
import info.nightscout.androidaps.utils.SP; import info.nightscout.androidaps.utils.SP;
import info.nightscout.androidaps.utils.resources.ResourceHelper;
/** /**
* Created by andy on 4.8.2019 * Created by andy on 4.8.2019
*/ */
@Singleton
public class OmnipodPumpStatus extends PumpStatus { public class OmnipodPumpStatus extends PumpStatus {
private static Logger LOG = LoggerFactory.getLogger(L.PUMP); //private static Logger LOG = LoggerFactory.getLogger(L.PUMP);
private final ResourceHelper resourceHelper;
private final info.nightscout.androidaps.utils.sharedPreferences.SP sp;
private final RileyLinkUtil rileyLinkUtil;
private final RxBusWrapper rxBus;
public String errorDescription = null; public String errorDescription = null;
public String rileyLinkAddress = null; public String rileyLinkAddress = null;
@ -43,6 +58,7 @@ public class OmnipodPumpStatus extends PumpStatus {
public Integer tempBasalLength; public Integer tempBasalLength;
public long tempBasalPumpId; public long tempBasalPumpId;
public PodSessionState podSessionState; public PodSessionState podSessionState;
public PumpType pumpType;
private boolean rileyLinkAddressChanged = false; private boolean rileyLinkAddressChanged = false;
private String regexMac = "([\\da-fA-F]{1,2}(?:\\:|$)){6}"; private String regexMac = "([\\da-fA-F]{1,2}(?:\\:|$)){6}";
@ -64,9 +80,19 @@ public class OmnipodPumpStatus extends PumpStatus {
public boolean timeChangeEventEnabled = true; public boolean timeChangeEventEnabled = true;
public OmnipodDriverState driverState = OmnipodDriverState.NotInitalized; public OmnipodDriverState driverState = OmnipodDriverState.NotInitalized;
private PumpDeviceState pumpDeviceState;
public OmnipodPumpStatus(PumpDescription pumpDescription) { @Inject
super(pumpDescription); public OmnipodPumpStatus(ResourceHelper resourceHelper,
info.nightscout.androidaps.utils.sharedPreferences.SP sp,
RxBusWrapper rxBus,
RileyLinkUtil rileyLinkUtil) {
super(PumpType.Insulet_Omnipod);
this.resourceHelper = resourceHelper;
this.sp = sp;
this.rxBus = rxBus;
this.rileyLinkUtil = rileyLinkUtil;
initSettings();
} }
@ -75,91 +101,28 @@ public class OmnipodPumpStatus extends PumpStatus {
this.activeProfileName = ""; this.activeProfileName = "";
this.reservoirRemainingUnits = 75d; this.reservoirRemainingUnits = 75d;
this.batteryRemaining = 75; this.batteryRemaining = 75;
this.lastConnection = SP.getLong(OmnipodConst.Statistics.LastGoodPumpCommunicationTime, 0L); this.lastConnection = sp.getLong(OmnipodConst.Statistics.LastGoodPumpCommunicationTime, 0L);
this.lastDataTime = new LocalDateTime(this.lastConnection); this.lastDataTime = this.lastConnection;
this.pumpType = PumpType.Insulet_Omnipod; this.pumpType = PumpType.Insulet_Omnipod;
this.podAvailable = false; this.podAvailable = false;
} }
public boolean verifyConfiguration() {
try {
this.errorDescription = "-";
String rileyLinkAddress = SP.getString(RileyLinkConst.Prefs.RileyLinkAddress, null);
if (rileyLinkAddress == null) {
if (isLogEnabled())
LOG.debug("RileyLink address invalid: null");
this.errorDescription = MainApp.gs(R.string.medtronic_error_rileylink_address_invalid);
return false;
} else {
if (!rileyLinkAddress.matches(regexMac)) {
this.errorDescription = MainApp.gs(R.string.medtronic_error_rileylink_address_invalid);
if (isLogEnabled())
LOG.debug("RileyLink address invalid: {}", rileyLinkAddress);
} else {
if (!rileyLinkAddress.equals(this.rileyLinkAddress)) {
this.rileyLinkAddress = rileyLinkAddress;
rileyLinkAddressChanged = true;
}
}
}
this.beepBasalEnabled = SP.getBoolean(OmnipodConst.Prefs.BeepBasalEnabled, true);
this.beepBolusEnabled = SP.getBoolean(OmnipodConst.Prefs.BeepBolusEnabled, true);
this.beepSMBEnabled = SP.getBoolean(OmnipodConst.Prefs.BeepSMBEnabled, true);
this.beepTBREnabled = SP.getBoolean(OmnipodConst.Prefs.BeepTBREnabled, true);
this.podDebuggingOptionsEnabled = SP.getBoolean(OmnipodConst.Prefs.PodDebuggingOptionsEnabled, false);
this.timeChangeEventEnabled = SP.getBoolean(OmnipodConst.Prefs.TimeChangeEventEnabled, true);
LOG.debug("Beeps [basal={}, bolus={}, SMB={}, TBR={}]", this.beepBasalEnabled, this.beepBolusEnabled, this.beepSMBEnabled, this.beepTBREnabled);
reconfigureService();
return true;
} catch (Exception ex) {
this.errorDescription = ex.getMessage();
LOG.error("Error on Verification: " + ex.getMessage(), ex);
return false;
}
}
private boolean reconfigureService() {
if (!inPreInit && OmnipodUtil.getOmnipodService() != null) {
if (rileyLinkAddressChanged) {
OmnipodUtil.sendBroadcastMessage(RileyLinkConst.Intents.RileyLinkNewAddressSet);
rileyLinkAddressChanged = false;
}
}
return (!rileyLinkAddressChanged);
}
public String getErrorInfo() { public String getErrorInfo() {
verifyConfiguration(); //verifyConfiguration();
return (this.errorDescription == null) ? "-" : this.errorDescription; return (this.errorDescription == null) ? "-" : this.errorDescription;
} }
@Override
public void refreshConfiguration() {
verifyConfiguration();
}
// public boolean setNotInPreInit() {
public boolean setNotInPreInit() { // this.inPreInit = false;
this.inPreInit = false; //
// return reconfigureService();
return reconfigureService(); // }
}
public void clearTemporaryBasal() { public void clearTemporaryBasal() {
@ -230,7 +193,22 @@ public class OmnipodPumpStatus extends PumpStatus {
", tempBasalRatio=" + tempBasalRatio + ", tempBasalRatio=" + tempBasalRatio +
", tempBasalRemainMin=" + tempBasalRemainMin + ", tempBasalRemainMin=" + tempBasalRemainMin +
", tempBasalStart=" + tempBasalStart + ", tempBasalStart=" + tempBasalStart +
", pumpDescription=" + pumpDescription + ", pumpType=" + pumpType +
"} "; "} ";
} }
public PumpDeviceState getPumpDeviceState() {
return pumpDeviceState;
}
public void setPumpDeviceState(PumpDeviceState pumpDeviceState) {
this.pumpDeviceState = pumpDeviceState;
rileyLinkUtil.getRileyLinkHistory().add(new RLHistoryItem(pumpDeviceState, RileyLinkTargetDevice.Omnipod));
rxBus.send(new EventMedtronicDeviceStatusChange(pumpDeviceState));
}
} }

View file

@ -6,17 +6,12 @@ import android.text.TextUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.joda.time.DateTime; import org.joda.time.DateTime;
import org.joda.time.Duration; import org.joda.time.Duration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import javax.inject.Inject;
import javax.inject.Singleton;
import dagger.android.HasAndroidInjector; import dagger.android.HasAndroidInjector;
import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R; import info.nightscout.androidaps.R;
@ -33,7 +28,6 @@ import info.nightscout.androidaps.interfaces.TreatmentsInterface;
import info.nightscout.androidaps.logging.AAPSLogger; import info.nightscout.androidaps.logging.AAPSLogger;
import info.nightscout.androidaps.logging.L; import info.nightscout.androidaps.logging.L;
import info.nightscout.androidaps.logging.LTag; import info.nightscout.androidaps.logging.LTag;
import info.nightscout.androidaps.plugins.bus.RxBus;
import info.nightscout.androidaps.plugins.bus.RxBusWrapper; import info.nightscout.androidaps.plugins.bus.RxBusWrapper;
import info.nightscout.androidaps.plugins.general.overview.events.EventNewNotification; import info.nightscout.androidaps.plugins.general.overview.events.EventNewNotification;
import info.nightscout.androidaps.plugins.general.overview.events.EventOverviewBolusProgress; import info.nightscout.androidaps.plugins.general.overview.events.EventOverviewBolusProgress;
@ -43,7 +37,7 @@ import info.nightscout.androidaps.plugins.pump.common.defs.PumpStatusType;
import info.nightscout.androidaps.plugins.pump.common.defs.PumpType; import info.nightscout.androidaps.plugins.pump.common.defs.PumpType;
import info.nightscout.androidaps.plugins.pump.common.utils.ByteUtil; import info.nightscout.androidaps.plugins.pump.common.utils.ByteUtil;
import info.nightscout.androidaps.plugins.pump.common.utils.DateTimeUtil; import info.nightscout.androidaps.plugins.pump.common.utils.DateTimeUtil;
import info.nightscout.androidaps.plugins.pump.omnipod.comm.OmnipodCommunicationService; import info.nightscout.androidaps.plugins.pump.omnipod.comm.OmnipodCommunicationManager;
import info.nightscout.androidaps.plugins.pump.omnipod.comm.OmnipodManager; import info.nightscout.androidaps.plugins.pump.omnipod.comm.OmnipodManager;
import info.nightscout.androidaps.plugins.pump.omnipod.comm.SetupActionResult; import info.nightscout.androidaps.plugins.pump.omnipod.comm.SetupActionResult;
import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.response.StatusResponse; import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.response.StatusResponse;
@ -81,12 +75,12 @@ import info.nightscout.androidaps.plugins.pump.omnipod.exception.OmnipodExceptio
import info.nightscout.androidaps.plugins.pump.omnipod.comm.exception.PodFaultException; import info.nightscout.androidaps.plugins.pump.omnipod.comm.exception.PodFaultException;
import info.nightscout.androidaps.plugins.pump.omnipod.comm.exception.PodReturnedErrorResponseException; import info.nightscout.androidaps.plugins.pump.omnipod.comm.exception.PodReturnedErrorResponseException;
import info.nightscout.androidaps.plugins.pump.omnipod.util.OmnipodUtil; import info.nightscout.androidaps.plugins.pump.omnipod.util.OmnipodUtil;
import info.nightscout.androidaps.plugins.treatments.TreatmentsPlugin;
import info.nightscout.androidaps.utils.resources.ResourceHelper; import info.nightscout.androidaps.utils.resources.ResourceHelper;
import io.reactivex.disposables.Disposable; import io.reactivex.disposables.Disposable;
public class AapsOmnipodManager implements OmnipodCommunicationManagerInterface { public class AapsOmnipodManager implements OmnipodCommunicationManagerInterface {
private OmnipodUtil omnipodUtil;
AAPSLogger aapsLogger; AAPSLogger aapsLogger;
RxBusWrapper rxBus; RxBusWrapper rxBus;
ResourceHelper resourceHelper; ResourceHelper resourceHelper;
@ -106,23 +100,26 @@ public class AapsOmnipodManager implements OmnipodCommunicationManagerInterface
return instance; return instance;
} }
public AapsOmnipodManager(OmnipodCommunicationService communicationService, public AapsOmnipodManager(OmnipodCommunicationManager communicationService,
PodSessionState podState, PodSessionState podState,
OmnipodPumpStatus _pumpStatus, OmnipodPumpStatus _pumpStatus,
OmnipodUtil omnipodUtil,
AAPSLogger aapsLogger, AAPSLogger aapsLogger,
RxBusWrapper rxBus, RxBusWrapper rxBus,
ResourceHelper resourceHelper, ResourceHelper resourceHelper,
HasAndroidInjector injector, HasAndroidInjector injector,
ActivePluginProvider activePlugin) { ActivePluginProvider activePlugin) {
this.omnipodUtil = omnipodUtil;
this.aapsLogger = aapsLogger; this.aapsLogger = aapsLogger;
this.rxBus = rxBus; this.rxBus = rxBus;
this.resourceHelper = resourceHelper; this.resourceHelper = resourceHelper;
this.injector = injector; this.injector = injector;
this.activePlugin = activePlugin; this.activePlugin = activePlugin;
this.pumpStatus = _pumpStatus; this.pumpStatus = _pumpStatus;
delegate = new OmnipodManager(communicationService, podState, podSessionState -> { delegate = new OmnipodManager(communicationService, podState, podSessionState -> {
// Handle pod state changes // Handle pod state changes
OmnipodUtil.setPodSessionState(podSessionState); omnipodUtil.setPodSessionState(podSessionState);
updatePumpStatus(podSessionState); updatePumpStatus(podSessionState);
}); });
instance = this; instance = this;
@ -260,7 +257,7 @@ public class AapsOmnipodManager implements OmnipodCommunicationManagerInterface
podInitReceiver.returnInitTaskStatus(PodInitActionType.DeactivatePodWizardStep, true, null); podInitReceiver.returnInitTaskStatus(PodInitActionType.DeactivatePodWizardStep, true, null);
OmnipodUtil.setPodSessionState(null); this.omnipodUtil.setPodSessionState(null);
return new PumpEnactResult(injector).success(true).enacted(true); return new PumpEnactResult(injector).success(true).enacted(true);
} }
@ -301,7 +298,7 @@ public class AapsOmnipodManager implements OmnipodCommunicationManagerInterface
reportImplicitlyCanceledTbr(); reportImplicitlyCanceledTbr();
OmnipodUtil.setPodSessionState(null); this.omnipodUtil.setPodSessionState(null);
addSuccessToHistory(System.currentTimeMillis(), PodHistoryEntryType.ResetPodState, null); addSuccessToHistory(System.currentTimeMillis(), PodHistoryEntryType.ResetPodState, null);
@ -457,7 +454,7 @@ public class AapsOmnipodManager implements OmnipodCommunicationManagerInterface
@Override @Override
public void setPumpStatus(OmnipodPumpStatus pumpStatus) { public void setPumpStatus(OmnipodPumpStatus pumpStatus) {
this.pumpStatus = pumpStatus; this.pumpStatus = pumpStatus;
this.getCommunicationService().setPumpStatus(pumpStatus); //this.getCommunicationService().setPumpStatus(pumpStatus);
updatePumpStatus(delegate.getPodState()); updatePumpStatus(delegate.getPodState());
} }
@ -530,7 +527,7 @@ public class AapsOmnipodManager implements OmnipodCommunicationManagerInterface
return response.getPodInfo(); return response.getPodInfo();
} }
public OmnipodCommunicationService getCommunicationService() { public OmnipodCommunicationManager getCommunicationService() {
return delegate.getCommunicationService(); return delegate.getCommunicationService();
} }

View file

@ -3,8 +3,14 @@ package info.nightscout.androidaps.plugins.pump.omnipod.driver.ui;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import dagger.android.HasAndroidInjector;
import info.nightscout.androidaps.logging.AAPSLogger;
import info.nightscout.androidaps.logging.L; import info.nightscout.androidaps.logging.L;
import info.nightscout.androidaps.plugins.pump.medtronic.comm.MedtronicCommunicationManager;
import info.nightscout.androidaps.plugins.pump.medtronic.comm.ui.MedtronicUIPostprocessor;
import info.nightscout.androidaps.plugins.pump.medtronic.util.MedtronicUtil;
import info.nightscout.androidaps.plugins.pump.omnipod.OmnipodPumpPlugin; import info.nightscout.androidaps.plugins.pump.omnipod.OmnipodPumpPlugin;
import info.nightscout.androidaps.plugins.pump.omnipod.comm.OmnipodCommunicationManager;
import info.nightscout.androidaps.plugins.pump.omnipod.defs.OmnipodCommunicationManagerInterface; import info.nightscout.androidaps.plugins.pump.omnipod.defs.OmnipodCommunicationManagerInterface;
import info.nightscout.androidaps.plugins.pump.omnipod.defs.OmnipodCommandType; import info.nightscout.androidaps.plugins.pump.omnipod.defs.OmnipodCommandType;
import info.nightscout.androidaps.plugins.pump.omnipod.defs.OmnipodPumpPluginInterface; import info.nightscout.androidaps.plugins.pump.omnipod.defs.OmnipodPumpPluginInterface;
@ -18,18 +24,42 @@ public class OmnipodUIComm {
private static final Logger LOG = LoggerFactory.getLogger(L.PUMP); private static final Logger LOG = LoggerFactory.getLogger(L.PUMP);
OmnipodCommunicationManagerInterface ocmInstance = null; private final HasAndroidInjector injector;
OmnipodUIPostprocessor uiPostprocessor; // = new OmnipodUIPostprocessor(); private final AAPSLogger aapsLogger;
private final OmnipodUtil omnipodUtil;
private final OmnipodCommunicationManagerInterface omnipodCommunicationManager;
private final OmnipodUIPostprocessor omnipodUIPostprocessor;
//OmnipodCommunicationManagerInterface ocmInstance = null;
//OmnipodUIPostprocessor uiPostprocessor; // = new OmnipodUIPostprocessor();
public OmnipodUIComm(
HasAndroidInjector injector,
AAPSLogger aapsLogger,
OmnipodUtil omnipodUtil,
OmnipodUIPostprocessor omnipodUIPostprocessor,
OmnipodCommunicationManagerInterface omnipodCommunicationManager
) {
this.injector = injector;
this.aapsLogger = aapsLogger;
this.omnipodUtil = omnipodUtil;
this.omnipodUIPostprocessor = omnipodUIPostprocessor;
this.omnipodCommunicationManager = omnipodCommunicationManager;
}
private OmnipodCommunicationManagerInterface getCommunicationManager() { private OmnipodCommunicationManagerInterface getCommunicationManager() {
return ocmInstance; return omnipodCommunicationManager;
} }
public OmnipodUIComm(OmnipodCommunicationManagerInterface communicationManager, OmnipodPumpPluginInterface plugin, OmnipodPumpStatus status) { // public OmnipodUIComm(OmnipodCommunicationManagerInterface communicationManager, OmnipodPumpPluginInterface plugin, OmnipodPumpStatus status) {
ocmInstance = communicationManager; // ocmInstance = communicationManager;
uiPostprocessor = new OmnipodUIPostprocessor(plugin, status); // uiPostprocessor = new OmnipodUIPostprocessor(plugin, status);
} // }
public OmnipodUITask executeCommand(OmnipodCommandType commandType, Object... parameters) { public OmnipodUITask executeCommand(OmnipodCommandType commandType, Object... parameters) {
@ -37,9 +67,9 @@ public class OmnipodUIComm {
if (isLogEnabled()) if (isLogEnabled())
LOG.warn("Execute Command: " + commandType.name()); LOG.warn("Execute Command: " + commandType.name());
OmnipodUITask task = new OmnipodUITask(commandType, parameters); OmnipodUITask task = new OmnipodUITask(injector, commandType, parameters);
OmnipodUtil.setCurrentCommand(commandType); omnipodUtil.setCurrentCommand(commandType);
// new Thread(() -> { // new Thread(() -> {
// LOG.warn("@@@ Start Thread"); // LOG.warn("@@@ Start Thread");
@ -73,7 +103,7 @@ public class OmnipodUIComm {
LOG.warn("Reply not received for " + commandType); LOG.warn("Reply not received for " + commandType);
} }
task.postProcess(uiPostprocessor); task.postProcess(omnipodUIPostprocessor);
return task; return task;

View file

@ -3,18 +3,27 @@ package info.nightscout.androidaps.plugins.pump.omnipod.driver.ui;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import javax.inject.Inject;
import dagger.android.HasAndroidInjector;
import info.nightscout.androidaps.data.DetailedBolusInfo; import info.nightscout.androidaps.data.DetailedBolusInfo;
import info.nightscout.androidaps.data.Profile; import info.nightscout.androidaps.data.Profile;
import info.nightscout.androidaps.data.PumpEnactResult; import info.nightscout.androidaps.data.PumpEnactResult;
import info.nightscout.androidaps.logging.AAPSLogger;
import info.nightscout.androidaps.logging.L; import info.nightscout.androidaps.logging.L;
import info.nightscout.androidaps.logging.LTag;
import info.nightscout.androidaps.plugins.bus.RxBus; import info.nightscout.androidaps.plugins.bus.RxBus;
import info.nightscout.androidaps.plugins.bus.RxBusWrapper;
import info.nightscout.androidaps.plugins.pump.common.data.TempBasalPair; import info.nightscout.androidaps.plugins.pump.common.data.TempBasalPair;
import info.nightscout.androidaps.plugins.pump.medtronic.driver.MedtronicPumpStatus;
import info.nightscout.androidaps.plugins.pump.medtronic.util.MedtronicUtil;
import info.nightscout.androidaps.plugins.pump.omnipod.defs.OmnipodCommandType; import info.nightscout.androidaps.plugins.pump.omnipod.defs.OmnipodCommandType;
import info.nightscout.androidaps.plugins.pump.omnipod.defs.OmnipodCommunicationManagerInterface; import info.nightscout.androidaps.plugins.pump.omnipod.defs.OmnipodCommunicationManagerInterface;
import info.nightscout.androidaps.plugins.pump.omnipod.defs.PodDeviceState; import info.nightscout.androidaps.plugins.pump.omnipod.defs.PodDeviceState;
import info.nightscout.androidaps.plugins.pump.omnipod.defs.PodInitActionType; import info.nightscout.androidaps.plugins.pump.omnipod.defs.PodInitActionType;
import info.nightscout.androidaps.plugins.pump.omnipod.defs.PodInitReceiver; import info.nightscout.androidaps.plugins.pump.omnipod.defs.PodInitReceiver;
import info.nightscout.androidaps.plugins.pump.omnipod.defs.PodResponseType; import info.nightscout.androidaps.plugins.pump.omnipod.defs.PodResponseType;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.OmnipodPumpStatus;
import info.nightscout.androidaps.plugins.pump.omnipod.events.EventOmnipodDeviceStatusChange; import info.nightscout.androidaps.plugins.pump.omnipod.events.EventOmnipodDeviceStatusChange;
import info.nightscout.androidaps.plugins.pump.omnipod.events.EventOmnipodPumpValuesChanged; import info.nightscout.androidaps.plugins.pump.omnipod.events.EventOmnipodPumpValuesChanged;
import info.nightscout.androidaps.plugins.pump.omnipod.util.OmnipodUtil; import info.nightscout.androidaps.plugins.pump.omnipod.util.OmnipodUtil;
@ -25,7 +34,14 @@ import info.nightscout.androidaps.plugins.pump.omnipod.util.OmnipodUtil;
public class OmnipodUITask { public class OmnipodUITask {
private static final Logger LOG = LoggerFactory.getLogger(L.PUMP); @Inject RxBusWrapper rxBus;
@Inject AAPSLogger aapsLogger;
@Inject OmnipodPumpStatus omnipodPumpStatus;
@Inject OmnipodUtil omnipodUtil;
private final HasAndroidInjector injector;
//private static final Logger LOG = LoggerFactory.getLogger(L.PUMP);
public OmnipodCommandType commandType; public OmnipodCommandType commandType;
public PumpEnactResult returnData; public PumpEnactResult returnData;
@ -35,12 +51,16 @@ public class OmnipodUITask {
public Object returnDataObject; public Object returnDataObject;
public OmnipodUITask(OmnipodCommandType commandType) { public OmnipodUITask(HasAndroidInjector injector, OmnipodCommandType commandType) {
this.injector = injector;
this.injector.androidInjector().inject(this);
this.commandType = commandType; this.commandType = commandType;
} }
public OmnipodUITask(OmnipodCommandType commandType, Object... parameters) { public OmnipodUITask(HasAndroidInjector injector, OmnipodCommandType commandType, Object... parameters) {
this.injector = injector;
this.injector.androidInjector().inject(this);
this.commandType = commandType; this.commandType = commandType;
this.parameters = parameters; this.parameters = parameters;
} }
@ -48,8 +68,8 @@ public class OmnipodUITask {
public void execute(OmnipodCommunicationManagerInterface communicationManager) { public void execute(OmnipodCommunicationManagerInterface communicationManager) {
if (isLogEnabled())
LOG.debug("OmnipodUITask: @@@ In execute. {}", commandType); aapsLogger.debug(LTag.PUMP,"OmnipodUITask: @@@ In execute. {}", commandType);
switch (commandType) { switch (commandType) {
@ -91,8 +111,8 @@ public class OmnipodUITask {
responseType = PodResponseType.Acknowledgment; responseType = PodResponseType.Acknowledgment;
break; break;
} catch (Exception ex) { } catch (Exception ex) {
if (isLogEnabled()) { {
LOG.warn("Failed to retrieve pulse log", ex); aapsLogger.warn(LTag.PUMP,"Failed to retrieve pulse log", ex);
} }
returnDataObject = null; returnDataObject = null;
responseType = PodResponseType.Error; responseType = PodResponseType.Error;
@ -129,7 +149,7 @@ public class OmnipodUITask {
break; break;
default: { default: {
LOG.warn("This commandType is not supported (yet) - {}.", commandType); aapsLogger.warn(LTag.PUMP,"This commandType is not supported (yet) - {}.", commandType);
responseType = PodResponseType.Error; responseType = PodResponseType.Error;
} }
@ -183,33 +203,32 @@ public class OmnipodUITask {
public void postProcess(OmnipodUIPostprocessor postprocessor) { public void postProcess(OmnipodUIPostprocessor postprocessor) {
EventOmnipodDeviceStatusChange statusChange; EventOmnipodDeviceStatusChange statusChange;
if (isLogEnabled())
LOG.debug("OmnipodUITask: @@@ postProcess. {}", commandType);
LOG.debug("OmnipodUITask: @@@ postProcess. responseType={}", responseType); aapsLogger.debug(LTag.PUMP,"OmnipodUITask: @@@ postProcess. {}", commandType);
aapsLogger.debug(LTag.PUMP,"OmnipodUITask: @@@ postProcess. responseType={}", responseType);
if (responseType == PodResponseType.Data || responseType == PodResponseType.Acknowledgment) { if (responseType == PodResponseType.Data || responseType == PodResponseType.Acknowledgment) {
postprocessor.postProcessData(this); postprocessor.postProcessData(this);
} }
LOG.debug("OmnipodUITask: @@@ postProcess. responseType={}", responseType); aapsLogger.debug(LTag.PUMP,"OmnipodUITask: @@@ postProcess. responseType={}", responseType);
if (responseType == PodResponseType.Invalid) { if (responseType == PodResponseType.Invalid) {
statusChange = new EventOmnipodDeviceStatusChange(PodDeviceState.ErrorWhenCommunicating, statusChange = new EventOmnipodDeviceStatusChange(PodDeviceState.ErrorWhenCommunicating,
"Unsupported command in OmnipodUITask"); "Unsupported command in OmnipodUITask");
OmnipodUtil.getPumpStatus().setLastFailedCommunicationToNow(); omnipodPumpStatus.setLastFailedCommunicationToNow();
postprocessor.getRxBus().send(statusChange); rxBus.send(statusChange);
} else if (responseType == PodResponseType.Error) { } else if (responseType == PodResponseType.Error) {
statusChange = new EventOmnipodDeviceStatusChange(PodDeviceState.ErrorWhenCommunicating, statusChange = new EventOmnipodDeviceStatusChange(PodDeviceState.ErrorWhenCommunicating,
errorDescription); errorDescription);
OmnipodUtil.getPumpStatus().setLastFailedCommunicationToNow(); omnipodPumpStatus.setLastFailedCommunicationToNow();
postprocessor.getRxBus().send(statusChange); rxBus.send(statusChange);
} else { } else {
OmnipodUtil.getPumpStatus().setLastCommunicationToNow(); omnipodPumpStatus.setLastCommunicationToNow();
postprocessor.getRxBus().send(new EventOmnipodPumpValuesChanged()); rxBus.send(new EventOmnipodPumpValuesChanged());
} }
OmnipodUtil.setPodDeviceState(PodDeviceState.Sleeping); omnipodUtil.setPodDeviceState(PodDeviceState.Sleeping);
} }

View file

@ -1,6 +1,5 @@
package info.nightscout.androidaps.plugins.pump.omnipod.service; package info.nightscout.androidaps.plugins.pump.omnipod.service;
import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.IntentFilter; import android.content.IntentFilter;
import android.content.res.Configuration; import android.content.res.Configuration;
@ -9,18 +8,11 @@ import android.os.IBinder;
import com.google.gson.Gson; import com.google.gson.Gson;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.inject.Inject; import javax.inject.Inject;
import dagger.android.HasAndroidInjector;
import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.interfaces.ActivePluginProvider; import info.nightscout.androidaps.R;
import info.nightscout.androidaps.logging.AAPSLogger;
import info.nightscout.androidaps.logging.L;
import info.nightscout.androidaps.logging.LTag; import info.nightscout.androidaps.logging.LTag;
import info.nightscout.androidaps.plugins.bus.RxBusWrapper;
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.RileyLinkCommunicationManager; import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.RileyLinkCommunicationManager;
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.RileyLinkConst; import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.RileyLinkConst;
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.RileyLinkUtil; import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.RileyLinkUtil;
@ -32,16 +24,18 @@ import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs.RileyLin
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.RileyLinkService; import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.RileyLinkService;
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.RileyLinkServiceData; import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.RileyLinkServiceData;
import info.nightscout.androidaps.plugins.pump.medtronic.MedtronicPumpPlugin; import info.nightscout.androidaps.plugins.pump.medtronic.MedtronicPumpPlugin;
import info.nightscout.androidaps.plugins.pump.medtronic.comm.ui.MedtronicUIPostprocessor;
import info.nightscout.androidaps.plugins.pump.medtronic.defs.PumpDeviceState;
import info.nightscout.androidaps.plugins.pump.medtronic.driver.MedtronicPumpStatus;
import info.nightscout.androidaps.plugins.pump.medtronic.util.MedtronicUtil;
import info.nightscout.androidaps.plugins.pump.omnipod.OmnipodPumpPlugin; import info.nightscout.androidaps.plugins.pump.omnipod.OmnipodPumpPlugin;
import info.nightscout.androidaps.plugins.pump.omnipod.comm.OmnipodCommunicationService; import info.nightscout.androidaps.plugins.pump.omnipod.comm.OmnipodCommunicationManager;
import info.nightscout.androidaps.plugins.pump.omnipod.defs.OmnipodCommunicationManagerInterface; import info.nightscout.androidaps.plugins.pump.omnipod.defs.OmnipodCommunicationManagerInterface;
import info.nightscout.androidaps.plugins.pump.omnipod.defs.state.PodSessionState; import info.nightscout.androidaps.plugins.pump.omnipod.defs.state.PodSessionState;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.OmnipodPumpStatus; import info.nightscout.androidaps.plugins.pump.omnipod.driver.OmnipodPumpStatus;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.comm.AapsOmnipodManager; import info.nightscout.androidaps.plugins.pump.omnipod.driver.comm.AapsOmnipodManager;
import info.nightscout.androidaps.plugins.pump.omnipod.util.OmnipodConst; import info.nightscout.androidaps.plugins.pump.omnipod.util.OmnipodConst;
import info.nightscout.androidaps.plugins.pump.omnipod.util.OmnipodUtil; import info.nightscout.androidaps.plugins.pump.omnipod.util.OmnipodUtil;
import info.nightscout.androidaps.utils.resources.ResourceHelper;
import info.nightscout.androidaps.utils.sharedPreferences.SP;
/** /**
@ -50,23 +44,24 @@ import info.nightscout.androidaps.utils.sharedPreferences.SP;
*/ */
public class RileyLinkOmnipodService extends RileyLinkService { public class RileyLinkOmnipodService extends RileyLinkService {
// @Inject AAPSLogger aapsLogger;
// @Inject Context context;
@Inject OmnipodPumpPlugin omnipodPumpPlugin; @Inject OmnipodPumpPlugin omnipodPumpPlugin;
// @Inject SP sp; @Inject OmnipodPumpStatus omnipodPumpStatus;
@Inject RxBusWrapper rxBus; @Inject OmnipodUtil omnipodUtil;
@Inject ActivePluginProvider activePlugin;
@Inject HasAndroidInjector injector;
@Inject ResourceHelper resourceHelper;
//@Inject MedtronicPumpPlugin medtronicPumpPlugin;
//@Inject MedtronicUtil medtronicUtil;
//@Inject MedtronicUIPostprocessor medtronicUIPostprocessor;
//@Inject MedtronicPumpStatus medtronicPumpStatus;
//private static final Logger LOG = LoggerFactory.getLogger(L.PUMPCOMM);
private static RileyLinkOmnipodService instance; private static RileyLinkOmnipodService instance;
OmnipodCommunicationManagerInterface omnipodCommunicationManager; private OmnipodCommunicationManager omnipodCommunicationManager;
OmnipodPumpStatus pumpStatus = null; private AapsOmnipodManager aapsOmnipodManager;
private IBinder mBinder = new LocalBinder(); private IBinder mBinder = new LocalBinder();
private boolean rileyLinkAddressChanged = false;
private boolean inPreInit = true;
public RileyLinkOmnipodService() { public RileyLinkOmnipodService() {
@ -80,14 +75,8 @@ public class RileyLinkOmnipodService extends RileyLinkService {
} }
// public static MedtronicCommunicationManager getCommunicationManager() {
// return instance.medtronicCommunicationManager;
// }
@Override @Override
public void onConfigurationChanged(Configuration newConfig) { public void onConfigurationChanged(Configuration newConfig) {
if (isLogEnabled())
aapsLogger.warn(LTag.PUMPCOMM,"onConfigurationChanged"); aapsLogger.warn(LTag.PUMPCOMM,"onConfigurationChanged");
super.onConfigurationChanged(newConfig); super.onConfigurationChanged(newConfig);
} }
@ -110,29 +99,20 @@ public class RileyLinkOmnipodService extends RileyLinkService {
*/ */
public void initRileyLinkServiceData() { public void initRileyLinkServiceData() {
rileyLinkServiceData = new RileyLinkServiceData(RileyLinkTargetDevice.Omnipod); // TODO
rileyLinkServiceData.targetDevice = RileyLinkTargetDevice.Omnipod;
RileyLinkUtil.setRileyLinkServiceData(rileyLinkServiceData);
RileyLinkUtil.setTargetDevice(RileyLinkTargetDevice.Omnipod);
// get most recently used RileyLink address // get most recently used RileyLink address
rileyLinkServiceData.rileylinkAddress = sp.getString(RileyLinkConst.Prefs.RileyLinkAddress, ""); rileyLinkServiceData.rileylinkAddress = sp.getString(RileyLinkConst.Prefs.RileyLinkAddress, "");
rileyLinkBLE = new RileyLinkBLE(this.context); // or this rileyLinkBLE = new RileyLinkBLE(injector, this); // or this
rfspy = new RFSpy(rileyLinkBLE); rfspy = new RFSpy(injector, rileyLinkBLE);
rfspy.startReader(); rfspy.startReader();
RileyLinkUtil.setRileyLinkBLE(rileyLinkBLE);
// init rileyLinkCommunicationManager
initializeErosOmnipodManager(); initializeErosOmnipodManager();
// TODO Dash
if (isLogEnabled())
aapsLogger.debug(LTag.PUMPCOMM,"RileyLinkOmnipodService newly constructed"); aapsLogger.debug(LTag.PUMPCOMM,"RileyLinkOmnipodService newly constructed");
OmnipodUtil.setOmnipodService(this); //omnipodPumpStatus = (OmnipodPumpStatus) omnipodPumpPlugin.getPumpStatusData();
pumpStatus = (OmnipodPumpStatus) omnipodPumpPlugin.getPumpStatusData();
//aapsLogger.debug(LTag.PUMPCOMM,"RRRRRRRRRR: " + pumpStatus);
} }
private void initializeErosOmnipodManager() { private void initializeErosOmnipodManager() {
@ -144,18 +124,19 @@ public class RileyLinkOmnipodService extends RileyLinkService {
String storedPodState = sp.getString(OmnipodConst.Prefs.PodState, null); String storedPodState = sp.getString(OmnipodConst.Prefs.PodState, null);
aapsLogger.info(LTag.PUMPCOMM,"PodSessionState-SP: loaded from SharedPreferences: " + storedPodState); aapsLogger.info(LTag.PUMPCOMM,"PodSessionState-SP: loaded from SharedPreferences: " + storedPodState);
podState = gson.fromJson(storedPodState, PodSessionState.class); podState = gson.fromJson(storedPodState, PodSessionState.class);
OmnipodUtil.setPodSessionState(podState); omnipodUtil.setPodSessionState(podState);
} catch (Exception ex) { } catch (Exception ex) {
aapsLogger.error(LTag.PUMPCOMM,"Could not deserialize Pod state", ex); aapsLogger.error(LTag.PUMPCOMM,"Could not deserialize Pod state", ex);
} }
} }
OmnipodCommunicationService omnipodCommunicationService = new OmnipodCommunicationService(rfspy); OmnipodCommunicationManager omnipodCommunicationService = new OmnipodCommunicationManager(injector, rfspy);
omnipodCommunicationService.setPumpStatus(pumpStatus); //omnipodCommunicationService.setPumpStatus(omnipodPumpStatus);
this.omnipodCommunicationManager = omnipodCommunicationService;
omnipodCommunicationManager = new AapsOmnipodManager(omnipodCommunicationService, podState, pumpStatus, this.aapsOmnipodManager = new AapsOmnipodManager(omnipodCommunicationService, podState, omnipodPumpStatus,
aapsLogger, rxBus, resourceHelper, injector, activePlugin); omnipodUtil, aapsLogger, rxBus, resourceHelper, injector, activePlugin);
} else { } else {
omnipodCommunicationManager = AapsOmnipodManager.getInstance(); aapsOmnipodManager = AapsOmnipodManager.getInstance();
} }
} }
@ -167,11 +148,16 @@ public class RileyLinkOmnipodService extends RileyLinkService {
@Override @Override
public RileyLinkCommunicationManager getDeviceCommunicationManager() { public RileyLinkCommunicationManager getDeviceCommunicationManager() {
if (omnipodCommunicationManager instanceof AapsOmnipodManager) { // Eros // if (omnipodCommunicationManager instanceof AapsOmnipodManager) { // Eros
return ((AapsOmnipodManager) omnipodCommunicationManager).getCommunicationService(); // return ((AapsOmnipodManager) omnipodCommunicationManager).getCommunicationService();
// }
// // FIXME is this correct for Dash?
return omnipodCommunicationManager;
} }
// FIXME is this correct for Dash?
return (RileyLinkCommunicationManager) omnipodCommunicationManager; @Override
public void setPumpDeviceState(PumpDeviceState pumpDeviceState) {
} }
@ -188,7 +174,7 @@ public class RileyLinkOmnipodService extends RileyLinkService {
// PumpInterface - REMOVE // PumpInterface - REMOVE
public boolean isInitialized() { public boolean isInitialized() {
return RileyLinkServiceState.isReady(RileyLinkUtil.getRileyLinkServiceData().serviceState); return RileyLinkServiceState.isReady(rileyLinkServiceData.rileyLinkServiceState);
} }
@ -208,7 +194,70 @@ public class RileyLinkOmnipodService extends RileyLinkService {
} }
private boolean isLogEnabled() {
return L.isEnabled(L.PUMPCOMM);
public boolean verifyConfiguration() {
try {
//String regexSN = "[0-9]{6}";
String regexMac = "([\\da-fA-F]{1,2}(?:\\:|$)){6}";
omnipodPumpStatus.errorDescription = "-";
String rileyLinkAddress = info.nightscout.androidaps.utils.SP.getString(RileyLinkConst.Prefs.RileyLinkAddress, null);
if (rileyLinkAddress == null) {
aapsLogger.debug(LTag.PUMPCOMM,"RileyLink address invalid: null");
omnipodPumpStatus.errorDescription = resourceHelper.gs(R.string.medtronic_error_rileylink_address_invalid);
return false;
} else {
if (!rileyLinkAddress.matches(regexMac)) {
omnipodPumpStatus.errorDescription = resourceHelper.gs(R.string.medtronic_error_rileylink_address_invalid);
aapsLogger.debug(LTag.PUMPCOMM,"RileyLink address invalid: {}", rileyLinkAddress);
} else {
if (!rileyLinkAddress.equals(this.omnipodPumpStatus.rileyLinkAddress)) {
this.omnipodPumpStatus.rileyLinkAddress = rileyLinkAddress;
rileyLinkAddressChanged = true;
}
}
}
this.omnipodPumpStatus.beepBasalEnabled = sp.getBoolean(OmnipodConst.Prefs.BeepBasalEnabled, true);
this.omnipodPumpStatus.beepBolusEnabled = sp.getBoolean(OmnipodConst.Prefs.BeepBolusEnabled, true);
this.omnipodPumpStatus.beepSMBEnabled = sp.getBoolean(OmnipodConst.Prefs.BeepSMBEnabled, true);
this.omnipodPumpStatus.beepTBREnabled = sp.getBoolean(OmnipodConst.Prefs.BeepTBREnabled, true);
this.omnipodPumpStatus.podDebuggingOptionsEnabled = sp.getBoolean(OmnipodConst.Prefs.PodDebuggingOptionsEnabled, false);
this.omnipodPumpStatus.timeChangeEventEnabled = sp.getBoolean(OmnipodConst.Prefs.TimeChangeEventEnabled, true);
aapsLogger.debug(LTag.PUMPCOMM,"Beeps [basal={}, bolus={}, SMB={}, TBR={}]", this.omnipodPumpStatus.beepBasalEnabled, this.omnipodPumpStatus.beepBolusEnabled, this.omnipodPumpStatus.beepSMBEnabled, this.omnipodPumpStatus.beepTBREnabled);
reconfigureService();
return true;
} catch (Exception ex) {
this.omnipodPumpStatus.errorDescription = ex.getMessage();
aapsLogger.error(LTag.PUMPCOMM,"Error on Verification: " + ex.getMessage(), ex);
return false;
}
}
private boolean reconfigureService() {
if (!inPreInit) {
if (rileyLinkAddressChanged) {
rileyLinkUtil.sendBroadcastMessage(RileyLinkConst.Intents.RileyLinkNewAddressSet, this);
rileyLinkAddressChanged = false;
}
}
return (!rileyLinkAddressChanged);
}
public boolean setNotInPreInit() {
this.inPreInit = false;
return reconfigureService();
} }
} }

View file

@ -18,16 +18,19 @@ import org.slf4j.LoggerFactory;
import java.util.List; import java.util.List;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Singleton;
import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R; import info.nightscout.androidaps.R;
import info.nightscout.androidaps.interfaces.PluginType; import info.nightscout.androidaps.interfaces.PluginType;
import info.nightscout.androidaps.logging.AAPSLogger;
import info.nightscout.androidaps.logging.L; import info.nightscout.androidaps.logging.L;
import info.nightscout.androidaps.plugins.bus.RxBus; import info.nightscout.androidaps.plugins.bus.RxBus;
import info.nightscout.androidaps.plugins.bus.RxBusWrapper; import info.nightscout.androidaps.plugins.bus.RxBusWrapper;
import info.nightscout.androidaps.plugins.pump.common.defs.PumpType; import info.nightscout.androidaps.plugins.pump.common.defs.PumpType;
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.RileyLinkUtil; import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.RileyLinkUtil;
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.data.RLHistoryItem; import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.data.RLHistoryItem;
import info.nightscout.androidaps.plugins.pump.medtronic.driver.MedtronicPumpStatus;
import info.nightscout.androidaps.plugins.pump.omnipod.OmnipodPumpPlugin; import info.nightscout.androidaps.plugins.pump.omnipod.OmnipodPumpPlugin;
import info.nightscout.androidaps.plugins.pump.omnipod.defs.OmnipodCommandType; import info.nightscout.androidaps.plugins.pump.omnipod.defs.OmnipodCommandType;
import info.nightscout.androidaps.plugins.pump.omnipod.defs.OmnipodCommunicationManagerInterface; import info.nightscout.androidaps.plugins.pump.omnipod.defs.OmnipodCommunicationManagerInterface;
@ -46,26 +49,41 @@ import info.nightscout.androidaps.utils.alertDialogs.OKDialog;
* Created by andy on 4/8/19. * Created by andy on 4/8/19.
*/ */
// FIXME // FIXME
public class OmnipodUtil extends RileyLinkUtil { @Singleton
public class OmnipodUtil {
@Inject RxBusWrapper rxBus; //@Inject RxBusWrapper rxBus;
private static final Logger LOG = LoggerFactory.getLogger(L.PUMPCOMM); private static final Logger LOG = LoggerFactory.getLogger(L.PUMPCOMM);
private static boolean lowLevelDebug = true; private static boolean lowLevelDebug = true;
private static RileyLinkOmnipodService omnipodService; private static RileyLinkOmnipodService omnipodService;
private static OmnipodPumpStatus omnipodPumpStatus; //private static OmnipodPumpStatus omnipodPumpStatus;
private static OmnipodCommandType currentCommand; private static OmnipodCommandType currentCommand;
private static Gson gsonInstance = createGson(); private static Gson gsonInstance = createGson();
//private static PodSessionState podSessionState; //private static PodSessionState podSessionState;
//private static PodDeviceState podDeviceState; //private static PodDeviceState podDeviceState;
private static OmnipodPumpPluginInterface omnipodPumpPlugin; //private static OmnipodPumpPluginInterface omnipodPumpPlugin;
private static OmnipodPodType omnipodPodType; private static OmnipodPodType omnipodPodType;
private static OmnipodDriverState driverState = OmnipodDriverState.NotInitalized; private static OmnipodDriverState driverState = OmnipodDriverState.NotInitalized;
private static PumpType pumpType; //private static PumpType pumpType;
public static Gson getGsonInstance() { private final AAPSLogger aapsLogger;
return gsonInstance; private final RxBusWrapper rxBus;
private final RileyLinkUtil rileyLinkUtil;
private final OmnipodPumpStatus omnipodPumpStatus;
@Inject
public OmnipodUtil(
AAPSLogger aapsLogger,
RxBusWrapper rxBus,
RileyLinkUtil rileyLinkUtil,
OmnipodPumpStatus omnipodPumpStatus
) {
this.aapsLogger = aapsLogger;
this.rxBus = rxBus;
this.rileyLinkUtil = rileyLinkUtil;
this.omnipodPumpStatus = omnipodPumpStatus;
} }
public static int makeUnsignedShort(int b2, int b1) { public static int makeUnsignedShort(int b2, int b1) {
@ -113,14 +131,14 @@ public class OmnipodUtil extends RileyLinkUtil {
} }
public static OmnipodCommunicationManagerInterface getOmnipodCommunicationManager() { // public static OmnipodCommunicationManagerInterface getOmnipodCommunicationManager() {
return (OmnipodCommunicationManagerInterface) RileyLinkUtil.rileyLinkCommunicationManager; // return (OmnipodCommunicationManagerInterface) RileyLinkUtil.rileyLinkCommunicationManager;
} // }
public static RileyLinkOmnipodService getOmnipodService() { // public static RileyLinkOmnipodService getOmnipodService() {
return OmnipodUtil.omnipodService; // return OmnipodUtil.omnipodService;
} // }
public static void setOmnipodService(RileyLinkOmnipodService medtronicService) { public static void setOmnipodService(RileyLinkOmnipodService medtronicService) {
@ -133,12 +151,11 @@ public class OmnipodUtil extends RileyLinkUtil {
// FIXME // FIXME
public static void setCurrentCommand(OmnipodCommandType currentCommand) { public void setCurrentCommand(OmnipodCommandType currentCommand) {
OmnipodUtil.currentCommand = currentCommand; OmnipodUtil.currentCommand = currentCommand;
if (currentCommand != null) if (currentCommand != null)
historyRileyLink.add(new RLHistoryItem(currentCommand)); rileyLinkUtil.getRileyLinkHistory().add(new RLHistoryItem(currentCommand));
} }
@ -153,10 +170,10 @@ public class OmnipodUtil extends RileyLinkUtil {
OKDialog.showConfirmation(context, MainApp.gs(R.string.combo_warning), OKDialog.showConfirmation(context, MainApp.gs(R.string.combo_warning),
MainApp.gs(R.string.omnipod_error_operation_not_possible_no_configuration), (Runnable)null); MainApp.gs(R.string.omnipod_error_operation_not_possible_no_configuration), (Runnable)null);
} }
//
public static OmnipodPumpStatus getPumpStatus() { // public static OmnipodPumpStatus getPumpStatus() {
return omnipodPumpStatus; // return omnipodPumpStatus;
} // }
public static OmnipodDriverState getDriverState() { public static OmnipodDriverState getDriverState() {
return OmnipodUtil.driverState; return OmnipodUtil.driverState;
@ -178,9 +195,9 @@ public class OmnipodUtil extends RileyLinkUtil {
// } // }
} }
public static void setPumpStatus(OmnipodPumpStatus omnipodPumpStatus) { // public static void setPumpStatus(OmnipodPumpStatus omnipodPumpStatus) {
OmnipodUtil.omnipodPumpStatus = omnipodPumpStatus; // OmnipodUtil.omnipodPumpStatus = omnipodPumpStatus;
} // }
private static Gson createGson() { private static Gson createGson() {
GsonBuilder gsonBuilder = new GsonBuilder() GsonBuilder gsonBuilder = new GsonBuilder()
@ -196,27 +213,27 @@ public class OmnipodUtil extends RileyLinkUtil {
return gsonBuilder.create(); return gsonBuilder.create();
} }
public static void setPodSessionState(PodSessionState podSessionState) { public void setPodSessionState(PodSessionState podSessionState) {
omnipodPumpStatus.podSessionState = podSessionState; omnipodPumpStatus.podSessionState = podSessionState;
omnipodPumpPlugin.getRxBus().send(new EventOmnipodDeviceStatusChange(podSessionState)); rxBus.send(new EventOmnipodDeviceStatusChange(podSessionState));
} }
public static void setPodDeviceState(PodDeviceState podDeviceState) { public void setPodDeviceState(PodDeviceState podDeviceState) {
omnipodPumpStatus.podDeviceState = podDeviceState; omnipodPumpStatus.podDeviceState = podDeviceState;
} }
@NotNull // @NotNull
public static OmnipodPumpPluginInterface getPlugin() { // public static OmnipodPumpPluginInterface getPlugin() {
return OmnipodUtil.omnipodPumpPlugin; // return OmnipodUtil.omnipodPumpPlugin;
} // }
@NotNull // @NotNull
public static void setPlugin(OmnipodPumpPluginInterface pumpPlugin) { // public static void setPlugin(OmnipodPumpPluginInterface pumpPlugin) {
OmnipodUtil.omnipodPumpPlugin = pumpPlugin; // OmnipodUtil.omnipodPumpPlugin = pumpPlugin;
} // }
public static void setOmnipodPodType(OmnipodPodType omnipodPodType) { public static void setOmnipodPodType(OmnipodPodType omnipodPodType) {
@ -227,29 +244,38 @@ public class OmnipodUtil extends RileyLinkUtil {
return omnipodPodType; return omnipodPodType;
} }
public static PodDeviceState getPodDeviceState() { public PodDeviceState getPodDeviceState() {
return omnipodPumpStatus.podDeviceState; return omnipodPumpStatus.podDeviceState;
} }
public static PodSessionState getPodSessionState() { public PodSessionState getPodSessionState() {
return omnipodPumpStatus.podSessionState; return omnipodPumpStatus.podSessionState;
} }
public static boolean isOmnipodEros() { // public static boolean isOmnipodEros() {
return OmnipodPumpPlugin.getPlugin().isEnabled(PluginType.PUMP); // return OmnipodPumpPlugin.getPlugin().isEnabled(PluginType.PUMP);
// }
//
// public static boolean isOmnipodDash() {
// return OmnipodDashPumpPlugin.getPlugin().isEnabled(PluginType.PUMP);
// }
public void setPumpType(PumpType pumpType_) {
omnipodPumpStatus.pumpType = pumpType_;
} }
public static boolean isOmnipodDash() { public PumpType getPumpType() {
return OmnipodDashPumpPlugin.getPlugin().isEnabled(PluginType.PUMP); return omnipodPumpStatus.pumpType;
}
public static Gson getGsonInstance() {
return gsonInstance;
} }
public static void setPumpType(PumpType pumpType) {
OmnipodUtil.pumpType = pumpType;
}
public static PumpType getPumpType() {
return pumpType;
}
} }

View file

@ -13,7 +13,6 @@ import javax.inject.Inject;
import dagger.android.HasAndroidInjector; import dagger.android.HasAndroidInjector;
import info.nightscout.androidaps.BuildConfig; import info.nightscout.androidaps.BuildConfig;
import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R; import info.nightscout.androidaps.R;
import info.nightscout.androidaps.data.Profile; import info.nightscout.androidaps.data.Profile;
import info.nightscout.androidaps.interfaces.ActivePluginProvider; import info.nightscout.androidaps.interfaces.ActivePluginProvider;
@ -22,7 +21,6 @@ import info.nightscout.androidaps.interfaces.PluginDescription;
import info.nightscout.androidaps.interfaces.PluginType; import info.nightscout.androidaps.interfaces.PluginType;
import info.nightscout.androidaps.logging.AAPSLogger; import info.nightscout.androidaps.logging.AAPSLogger;
import info.nightscout.androidaps.logging.L; import info.nightscout.androidaps.logging.L;
import info.nightscout.androidaps.plugins.bus.RxBus;
import info.nightscout.androidaps.plugins.bus.RxBusWrapper; import info.nightscout.androidaps.plugins.bus.RxBusWrapper;
import info.nightscout.androidaps.plugins.general.actions.defs.CustomAction; import info.nightscout.androidaps.plugins.general.actions.defs.CustomAction;
import info.nightscout.androidaps.plugins.pump.common.defs.PumpDriverState; import info.nightscout.androidaps.plugins.pump.common.defs.PumpDriverState;
@ -30,7 +28,6 @@ import info.nightscout.androidaps.plugins.pump.common.defs.PumpType;
import info.nightscout.androidaps.plugins.pump.omnipod.OmnipodFragment; import info.nightscout.androidaps.plugins.pump.omnipod.OmnipodFragment;
import info.nightscout.androidaps.plugins.pump.omnipod.OmnipodPumpPlugin; import info.nightscout.androidaps.plugins.pump.omnipod.OmnipodPumpPlugin;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.ui.OmnipodUIComm; import info.nightscout.androidaps.plugins.pump.omnipod.driver.ui.OmnipodUIComm;
import info.nightscout.androidaps.plugins.pump.omnipod.defs.OmnipodPodType;
import info.nightscout.androidaps.plugins.pump.omnipod.defs.OmnipodPumpPluginInterface; import info.nightscout.androidaps.plugins.pump.omnipod.defs.OmnipodPumpPluginInterface;
import info.nightscout.androidaps.plugins.pump.omnipod.events.EventOmnipodPumpValuesChanged; import info.nightscout.androidaps.plugins.pump.omnipod.events.EventOmnipodPumpValuesChanged;
import info.nightscout.androidaps.plugins.pump.omnipod.events.EventOmnipodRefreshButtonState; import info.nightscout.androidaps.plugins.pump.omnipod.events.EventOmnipodRefreshButtonState;
@ -98,9 +95,9 @@ public class OmnipodDashPumpPlugin extends OmnipodPumpPlugin implements OmnipodP
omnipodCommunicationManager = OmnipodDashCommunicationManager.getInstance(); omnipodCommunicationManager = OmnipodDashCommunicationManager.getInstance();
} }
omnipodUIComm = new OmnipodUIComm(omnipodCommunicationManager, this, this.pumpStatusLocal); // DG omnipodUIComm = new OmnipodUIComm(omnipodCommunicationManager, this, this.omnipodPumpStatus);
OmnipodUtil.setPlugin(this); //OmnipodUtil.setPlugin(this);
// FIXME // FIXME
// serviceConnection = new ServiceConnection() { // serviceConnection = new ServiceConnection() {

View file

@ -24,6 +24,7 @@ import info.nightscout.androidaps.utils.SP;
/** /**
* Created by andy on 4.8.2019 * Created by andy on 4.8.2019
*/ */
// TODO refactor to use dagger, just commented out errors
public class OmnipodDashCommunicationManager implements OmnipodCommunicationManagerInterface { public class OmnipodDashCommunicationManager implements OmnipodCommunicationManagerInterface {
private static final Logger LOG = LoggerFactory.getLogger(L.PUMPCOMM); private static final Logger LOG = LoggerFactory.getLogger(L.PUMPCOMM);
@ -34,8 +35,8 @@ public class OmnipodDashCommunicationManager implements OmnipodCommunicationMana
public OmnipodDashCommunicationManager(Context context, RFSpy rfspy) { public OmnipodDashCommunicationManager(Context context, RFSpy rfspy) {
omnipodCommunicationManager = this; omnipodCommunicationManager = this;
OmnipodUtil.getPumpStatus().previousConnection = SP.getLong( // OmnipodUtil.getPumpStatus().previousConnection = SP.getLong(
RileyLinkConst.Prefs.LastGoodDeviceCommunicationTime, 0L); // RileyLinkConst.Prefs.LastGoodDeviceCommunicationTime, 0L);
} }

View file

@ -1,4 +1,21 @@
package info.nightscout.androidaps.plugins.pump.omnipod_dash.driver; package info.nightscout.androidaps.plugins.pump.omnipod_dash.driver;
public class OmnipodDashPumpStatus { import javax.inject.Inject;
import javax.inject.Singleton;
import info.nightscout.androidaps.plugins.bus.RxBusWrapper;
import info.nightscout.androidaps.plugins.pump.common.defs.PumpType;
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.RileyLinkUtil;
import info.nightscout.androidaps.plugins.pump.omnipod.driver.OmnipodPumpStatus;
import info.nightscout.androidaps.utils.resources.ResourceHelper;
import info.nightscout.androidaps.utils.sharedPreferences.SP;
@Singleton
public class OmnipodDashPumpStatus extends OmnipodPumpStatus {
@Inject
public OmnipodDashPumpStatus(ResourceHelper resourceHelper, SP sp, RxBusWrapper rxBus, RileyLinkUtil rileyLinkUtil) {
super(resourceHelper, sp, rxBus, rileyLinkUtil);
this.pumpType = PumpType.Insulet_Omnipod_Dash;
}
} }