Report implicitly canceled TBR's to treatment plugin
This commit is contained in:
parent
9ef83c19f8
commit
b3984b796d
1 changed files with 32 additions and 10 deletions
|
@ -18,6 +18,8 @@ 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.data.PumpEnactResult;
|
import info.nightscout.androidaps.data.PumpEnactResult;
|
||||||
|
import info.nightscout.androidaps.db.Source;
|
||||||
|
import info.nightscout.androidaps.db.TemporaryBasal;
|
||||||
import info.nightscout.androidaps.events.Event;
|
import info.nightscout.androidaps.events.Event;
|
||||||
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;
|
||||||
|
@ -59,6 +61,7 @@ import info.nightscout.androidaps.plugins.pump.omnipod.exception.OmnipodExceptio
|
||||||
import info.nightscout.androidaps.plugins.pump.omnipod.exception.PodFaultException;
|
import info.nightscout.androidaps.plugins.pump.omnipod.exception.PodFaultException;
|
||||||
import info.nightscout.androidaps.plugins.pump.omnipod.exception.PodReturnedErrorResponseException;
|
import info.nightscout.androidaps.plugins.pump.omnipod.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 io.reactivex.disposables.Disposable;
|
import io.reactivex.disposables.Disposable;
|
||||||
|
|
||||||
public class AapsOmnipodManager implements OmnipodCommunicationManagerInterface {
|
public class AapsOmnipodManager implements OmnipodCommunicationManagerInterface {
|
||||||
|
@ -200,7 +203,6 @@ public class AapsOmnipodManager implements OmnipodCommunicationManagerInterface
|
||||||
return new PumpEnactResult().success(true).enacted(true);
|
return new PumpEnactResult().success(true).enacted(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO cancels TBR. Notify treatments plugin
|
|
||||||
@Override
|
@Override
|
||||||
public PumpEnactResult setBasalProfile(Profile basalProfile) {
|
public PumpEnactResult setBasalProfile(Profile basalProfile) {
|
||||||
try {
|
try {
|
||||||
|
@ -213,6 +215,9 @@ public class AapsOmnipodManager implements OmnipodCommunicationManagerInterface
|
||||||
return new PumpEnactResult().success(false).enacted(false).comment(comment);
|
return new PumpEnactResult().success(false).enacted(false).comment(comment);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Because setting a basal profile actually suspends and then resumes delivery, TBR is implicitly cancelled
|
||||||
|
reportImplicitlyCanceledTbr();
|
||||||
|
|
||||||
return new PumpEnactResult().success(true).enacted(true);
|
return new PumpEnactResult().success(true).enacted(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -249,7 +254,7 @@ public class AapsOmnipodManager implements OmnipodCommunicationManagerInterface
|
||||||
return new PumpEnactResult().success(false).enacted(false).comment(comment);
|
return new PumpEnactResult().success(false).enacted(false).comment(comment);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (OmnipodManager.CommandDeliveryStatus.UNCERTAIN_FAILURE.equals(bolusCommandResult.getCommandDeliveryStatus()) && !isSmb /* TODO or should we also warn for SMB? */) {
|
if (OmnipodManager.CommandDeliveryStatus.UNCERTAIN_FAILURE.equals(bolusCommandResult.getCommandDeliveryStatus())) {
|
||||||
// TODO notify user about uncertain failure ---> we're unsure whether or not the bolus has been delivered
|
// TODO notify user about uncertain failure ---> we're unsure whether or not the bolus has been delivered
|
||||||
// For safety reasons, we should treat this as a bolus that has been delivered, in order to prevent insulin overdose
|
// For safety reasons, we should treat this as a bolus that has been delivered, in order to prevent insulin overdose
|
||||||
}
|
}
|
||||||
|
@ -362,7 +367,6 @@ public class AapsOmnipodManager implements OmnipodCommunicationManagerInterface
|
||||||
|
|
||||||
// TODO should we add this to the OmnipodCommunicationManager interface?
|
// TODO should we add this to the OmnipodCommunicationManager interface?
|
||||||
// Updates the pods current time based on the device timezone and the pod's time zone
|
// Updates the pods current time based on the device timezone and the pod's time zone
|
||||||
// TODO cancels TBR. Notify treatments plugin
|
|
||||||
public PumpEnactResult setTime() {
|
public PumpEnactResult setTime() {
|
||||||
try {
|
try {
|
||||||
delegate.setTime(isBasalBeepsEnabled());
|
delegate.setTime(isBasalBeepsEnabled());
|
||||||
|
@ -373,6 +377,10 @@ public class AapsOmnipodManager implements OmnipodCommunicationManagerInterface
|
||||||
String comment = handleAndTranslateException(ex);
|
String comment = handleAndTranslateException(ex);
|
||||||
return new PumpEnactResult().success(false).enacted(false).comment(comment);
|
return new PumpEnactResult().success(false).enacted(false).comment(comment);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Because set time actually suspends and then resumes delivery, TBR is implicitly cancelled
|
||||||
|
reportImplicitlyCanceledTbr();
|
||||||
|
|
||||||
return new PumpEnactResult().success(true).enacted(true);
|
return new PumpEnactResult().success(true).enacted(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -392,26 +400,40 @@ public class AapsOmnipodManager implements OmnipodCommunicationManagerInterface
|
||||||
return delegate.getPodStateAsString();
|
return delegate.getPodStateAsString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void reportImplicitlyCanceledTbr() {
|
||||||
|
TreatmentsPlugin plugin = TreatmentsPlugin.getPlugin();
|
||||||
|
if (plugin.isTempBasalInProgress()) {
|
||||||
|
if (isLoggingEnabled()) {
|
||||||
|
LOG.debug("Reporting implicitly cancelled TBR to Treatments plugin");
|
||||||
|
}
|
||||||
|
|
||||||
|
TemporaryBasal temporaryBasal = new TemporaryBasal() //
|
||||||
|
.date(System.currentTimeMillis()) //
|
||||||
|
.duration(0) //
|
||||||
|
// TODO bs should be Source.PUMP imo, but that doesn't work:
|
||||||
|
// it says a TEMPBASAL record already exists
|
||||||
|
.source(Source.USER);
|
||||||
|
plugin.addToHistoryTempBasal(temporaryBasal);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void addToHistory(long requestTime, PodHistoryEntryType entryType, String data, boolean success) {
|
private void addToHistory(long requestTime, PodHistoryEntryType entryType, String data, boolean success) {
|
||||||
// TODO andy needs to be refactored
|
// TODO andy needs to be refactored
|
||||||
|
|
||||||
//PodDbEntry entry = new PodDbEntry(requestTime, entryType);
|
//PodDbEntry entry = new PodDbEntry(requestTime, entryType);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void handleSetupActionResult(PodInitActionType podInitActionType, PodInitReceiver podInitReceiver, SetupActionResult res) {
|
private void handleSetupActionResult(PodInitActionType podInitActionType, PodInitReceiver podInitReceiver, SetupActionResult res) {
|
||||||
String comment = null;
|
String comment = null;
|
||||||
switch (res.getResultType()) {
|
switch (res.getResultType()) {
|
||||||
case FAILURE:
|
case FAILURE:
|
||||||
if (loggingEnabled()) {
|
if (isLoggingEnabled()) {
|
||||||
LOG.error("Setup action failed: illegal setup progress: {}", res.getSetupProgress());
|
LOG.error("Setup action failed: illegal setup progress: {}", res.getSetupProgress());
|
||||||
}
|
}
|
||||||
comment = getStringResource(R.string.omnipod_driver_error_invalid_progress_state, res.getSetupProgress());
|
comment = getStringResource(R.string.omnipod_driver_error_invalid_progress_state, res.getSetupProgress());
|
||||||
break;
|
break;
|
||||||
case VERIFICATION_FAILURE:
|
case VERIFICATION_FAILURE:
|
||||||
if (loggingEnabled()) {
|
if (isLoggingEnabled()) {
|
||||||
LOG.error("Setup action verification failed: caught exception", res.getException());
|
LOG.error("Setup action verification failed: caught exception", res.getException());
|
||||||
}
|
}
|
||||||
comment = getStringResource(R.string.omnipod_driver_error_setup_action_verification_failed);
|
comment = getStringResource(R.string.omnipod_driver_error_setup_action_verification_failed);
|
||||||
|
@ -455,12 +477,12 @@ public class AapsOmnipodManager implements OmnipodCommunicationManagerInterface
|
||||||
// Shouldn't be reachable
|
// Shouldn't be reachable
|
||||||
comment = getStringResource(R.string.omnipod_driver_error_unexpected_exception_type, ex.getClass().getName());
|
comment = getStringResource(R.string.omnipod_driver_error_unexpected_exception_type, ex.getClass().getName());
|
||||||
}
|
}
|
||||||
if (loggingEnabled()) {
|
if (isLoggingEnabled()) {
|
||||||
LOG.error(String.format("Caught OmnipodException[certainFailure=%s] from OmnipodManager (user-friendly error message: %s)", ((OmnipodException) ex).isCertainFailure(), comment), ex);
|
LOG.error(String.format("Caught OmnipodException[certainFailure=%s] from OmnipodManager (user-friendly error message: %s)", ((OmnipodException) ex).isCertainFailure(), comment), ex);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
comment = getStringResource(R.string.omnipod_driver_error_unexpected_exception_type, ex.getClass().getName());
|
comment = getStringResource(R.string.omnipod_driver_error_unexpected_exception_type, ex.getClass().getName());
|
||||||
if (loggingEnabled()) {
|
if (isLoggingEnabled()) {
|
||||||
LOG.error(String.format("Caught unexpected exception type[certainFailure=false] from OmnipodManager (user-friendly error message: %s)", comment), ex);
|
LOG.error(String.format("Caught unexpected exception type[certainFailure=false] from OmnipodManager (user-friendly error message: %s)", comment), ex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -510,7 +532,7 @@ public class AapsOmnipodManager implements OmnipodCommunicationManagerInterface
|
||||||
return MainApp.gs(id, args);
|
return MainApp.gs(id, args);
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean loggingEnabled() {
|
private boolean isLoggingEnabled() {
|
||||||
return L.isEnabled(L.PUMP);
|
return L.isEnabled(L.PUMP);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue