Restore bolus splitting hack.

This commit is contained in:
Johannes Mockenhaupt 2017-08-17 11:21:16 +02:00
parent ecd05bef2d
commit b85f5324de
No known key found for this signature in database
GPG key ID: 9E1EA6AF7BBBB0D1
3 changed files with 66 additions and 28 deletions

View file

@ -212,8 +212,8 @@ public class RuffyScripter {
synchronized (RuffyScripter.class) {
try {
long connectStart = System.currentTimeMillis();
activeCmd = cmd;
long connectStart = System.currentTimeMillis();
ensureConnected();
final RuffyScripter scripter = this;
final Returnable returnable = new Returnable();

View file

@ -49,5 +49,9 @@ public class Config {
public static final boolean logDanaSerialEngine = true;
// Combo specific
public static final boolean comboExperimentalBolus = false;
/** enable the UNFINISHED and currently BROKEN bolus cammand that reports progress and can be cancelled */
public static final boolean comboExperimentalBolus = true;
/** very quick hack to split up bolus into 2 U parts, spaced roughly 45s apart.
* Don't combine with experimental bolus */
public static final boolean comboSplitBoluses = false && !comboExperimentalBolus;
}

View file

@ -10,6 +10,7 @@ import android.media.RingtoneManager;
import android.net.Uri;
import android.os.IBinder;
import android.os.SystemClock;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.NotificationCompat;
@ -224,7 +225,7 @@ public class ComboPlugin implements PluginBase, PumpInterface {
}
if (!boundSucceeded) {
pump.stateSummary = "No connection to ruffy. Pump control not available.";
pump.stateSummary = "No connection to ruffy. Pump control unavailable.";
}
return true;
}
@ -393,36 +394,41 @@ public class ComboPlugin implements PluginBase, PumpInterface {
if (detailedBolusInfo.insulin > 0 || detailedBolusInfo.carbs > 0) {
if (detailedBolusInfo.insulin > 0) {
// bolus needed, ask pump to deliver it
// TODO read history to ensure there are no boluses delivered on the pump we aren't
// aware of and haven't included in the bolus calulation
// Note that the BolusCommand sends progress updates to the bolusProgressReporterCallback,
// which then posts appropriate events on the bus, so in this branch no posts are needed
runningBolusCommand = Config.comboExperimentalBolus
? new CancellableBolusCommand(detailedBolusInfo.insulin, bolusProgressReportCallback)
: new BolusCommand(detailedBolusInfo.insulin);
CommandResult bolusCmdResult = runCommand(runningBolusCommand);
runningBolusCommand = null;
if (!Config.comboSplitBoluses) {
return deliverBolus(detailedBolusInfo);
} else {
// split up bolus into 2 U parts
PumpEnactResult pumpEnactResult = new PumpEnactResult();
pumpEnactResult.success = bolusCmdResult.success;
pumpEnactResult.enacted = bolusCmdResult.enacted;
pumpEnactResult.comment = bolusCmdResult.message;
// if enacted by pump, add bolus and carbs to treatment history
if (pumpEnactResult.enacted) {
pumpEnactResult.bolusDelivered = detailedBolusInfo.insulin;
pumpEnactResult.success = true;
pumpEnactResult.enacted = true;
pumpEnactResult.bolusDelivered = 0d;
pumpEnactResult.carbsDelivered = detailedBolusInfo.carbs;
detailedBolusInfo.date = bolusCmdResult.completionTime;
MainApp.getConfigBuilder().addToHistoryTreatment(detailedBolusInfo);
} else {
pumpEnactResult.bolusDelivered = 0d;
pumpEnactResult.carbsDelivered = 0d;
double remainingBolus = detailedBolusInfo.insulin;
int split = 1;
while (remainingBolus > 0.05) {
double bolus = remainingBolus > 2 ? 2 : remainingBolus;
DetailedBolusInfo bolusInfo = new DetailedBolusInfo();
bolusInfo.insulin = bolus;
bolusInfo.isValid = false;
log.debug("Delivering split bolus #" + split + " with " + bolus + " U");
PumpEnactResult bolusResult = deliverBolus(bolusInfo);
if (!bolusResult.success) {
return bolusResult;
}
pumpEnactResult.bolusDelivered += bolus;
remainingBolus -= 2;
split++;
}
MainApp.getConfigBuilder().addToHistoryTreatment(detailedBolusInfo);
return pumpEnactResult;
}
} else {
// no bolus required, carb only treatment
// TODO the ui freezes when the calculator issues a carb-only treatment
// so just wait, yeah, this is dumb. for now; proper fix via GL#10
// info.nightscout.androidaps.plugins.Overview.Dialogs.BolusProgressDialog.scheduleDismiss()
SystemClock.sleep(6000);
PumpEnactResult pumpEnactResult = new PumpEnactResult();
pumpEnactResult.success = true;
@ -450,6 +456,35 @@ public class ComboPlugin implements PluginBase, PumpInterface {
}
}
@NonNull
private PumpEnactResult deliverBolus(DetailedBolusInfo detailedBolusInfo) {
runningBolusCommand = Config.comboExperimentalBolus
? new CancellableBolusCommand(detailedBolusInfo.insulin, bolusProgressReportCallback)
: new BolusCommand(detailedBolusInfo.insulin);
CommandResult bolusCmdResult = runCommand(runningBolusCommand);
PumpEnactResult pumpEnactResult = new PumpEnactResult();
pumpEnactResult.success = bolusCmdResult.success;
pumpEnactResult.enacted = bolusCmdResult.enacted;
pumpEnactResult.comment = bolusCmdResult.message;
// if enacted, add bolus and carbs to treatment history
if (pumpEnactResult.enacted) {
// TODO if no error occurred, the requested bolus is what the pump delievered,
// that has been checked. If an error occurred, we should check how much insulin
// was delivered, e.g. when the cartridge went empty mid-bolus
// For the first iteration, the alert the pump raises must suffice
pumpEnactResult.bolusDelivered = detailedBolusInfo.insulin;
pumpEnactResult.carbsDelivered = detailedBolusInfo.carbs;
detailedBolusInfo.date = bolusCmdResult.completionTime;
MainApp.getConfigBuilder().addToHistoryTreatment(detailedBolusInfo);
} else {
pumpEnactResult.bolusDelivered = 0d;
pumpEnactResult.carbsDelivered = 0d;
}
return pumpEnactResult;
}
@Override
public void stopBolusDelivering() {
BolusCommand localRunningBolusCommand = runningBolusCommand;
@ -553,7 +588,6 @@ public class ComboPlugin implements PluginBase, PumpInterface {
@Override
public PumpEnactResult setExtendedBolus(Double insulin, Integer durationInMinutes) {
// TODO GL#70
return OPERATION_NOT_SUPPORTED;
}