This commit is contained in:
Johannes Mockenhaupt 2017-08-18 11:54:57 +02:00
parent fabaf7c2ef
commit d851637d4f
No known key found for this signature in database
GPG key ID: 9E1EA6AF7BBBB0D1
3 changed files with 34 additions and 22 deletions

View file

@ -14,10 +14,10 @@ import java.util.Locale;
import de.jotomo.ruffyscripter.PumpState; import de.jotomo.ruffyscripter.PumpState;
import de.jotomo.ruffyscripter.RuffyScripter; import de.jotomo.ruffyscripter.RuffyScripter;
import static de.jotomo.ruffyscripter.commands.ProgressReportCallback.State.DELIVERING; import static de.jotomo.ruffyscripter.commands.BolusCommand.ProgressReportCallback.State.DELIVERING;
import static de.jotomo.ruffyscripter.commands.ProgressReportCallback.State.STOPPED; import static de.jotomo.ruffyscripter.commands.BolusCommand.ProgressReportCallback.State.STOPPED;
import static de.jotomo.ruffyscripter.commands.ProgressReportCallback.State.STOPPING; import static de.jotomo.ruffyscripter.commands.BolusCommand.ProgressReportCallback.State.STOPPING;
import static de.jotomo.ruffyscripter.commands.ProgressReportCallback.State.DELIVERED; import static de.jotomo.ruffyscripter.commands.BolusCommand.ProgressReportCallback.State.DELIVERED;
public class BolusCommand implements Command { public class BolusCommand implements Command {
private static final Logger log = LoggerFactory.getLogger(BolusCommand.class); private static final Logger log = LoggerFactory.getLogger(BolusCommand.class);
@ -86,11 +86,23 @@ public class BolusCommand implements Command {
double lastBolusReported = 0; double lastBolusReported = 0;
// wait for bolus delivery to complete; the remaining units to deliver are counted // wait for bolus delivery to complete; the remaining units to deliver are counted
// down and are displayed on the main menu. // down and are displayed on the main menu.
// TODO extract into method
while (bolusRemaining != null) { while (bolusRemaining != null) {
if (cancelRequested) { if (cancelRequested) {
progressReportCallback.report(STOPPING, 0, 0); progressReportCallback.report(STOPPING, 0, 0);
// TODO just press up 3s in a separated thread and let this loop run
// and at the end handle the outcome and returned raise alarms, whether cancel was reuqested etc
// TODO press up 3s, deal with bolus cancelled error, retrieved amount actually delivered from history and return it // TODO press up 3s, deal with bolus cancelled error, retrieved amount actually delivered from history and return it
// since the cancellation takes three seconds some insulin will have definately been delivered (delivery speed is roughly 0.1U/s) // since the cancellation takes three seconds some insulin will have definitely been delivered (delivery speed is roughly 0.1U/s),
// but the pump may also finish delivering the bolus while we try to cancel it
// so, press a button, keep it press and deal with three outcomes:
// * delivery finished (no more remaining bolus displayed)
// * bolus was cancelled (warning raised)
// * any other error (low cartridge, occlusion, both will also trigger 'bolus cancelled' errors)
// cancelBolusInDelivery()
// TODO new thread to press button and then deal with outcomes below, since all errors can occur at all time, pressing
// abort just forces an error (if keyrpess is in time)
progressReportCallback.report(STOPPED, 0, 0); progressReportCallback.report(STOPPED, 0, 0);
} }
if (lastBolusReported != bolusRemaining) { if (lastBolusReported != bolusRemaining) {
@ -111,7 +123,7 @@ public class BolusCommand implements Command {
// how does the dana handle pump errors? has no vibration, but sound i guess // how does the dana handle pump errors? has no vibration, but sound i guess
// should this be configurabe? initially? // should this be configurabe? initially?
if (scripter.currentMenu.getType() == MenuType.WARNING_OR_ERROR) { if (scripter.currentMenu.getType() == MenuType.WARNING_OR_ERROR) {
// see errors being dealt with trying to cancel
} }
SystemClock.sleep(50); SystemClock.sleep(50);
bolusRemaining = (Double) scripter.currentMenu.getAttribute(MenuAttribute.BOLUS_REMAINING); bolusRemaining = (Double) scripter.currentMenu.getAttribute(MenuAttribute.BOLUS_REMAINING);
@ -162,6 +174,8 @@ public class BolusCommand implements Command {
} }
} }
// TODO confirmAlarms? and report back which were cancelled?
private boolean confirmAlert(String alertText, int maxWaitTillExpectedAlert) { private boolean confirmAlert(String alertText, int maxWaitTillExpectedAlert) {
// TODO // TODO
return false; return false;
@ -230,4 +244,15 @@ public class BolusCommand implements Command {
"bolus=" + bolus + "bolus=" + bolus +
'}'; '}';
} }
public interface ProgressReportCallback {
enum State {
DELIVERING,
DELIVERED,
STOPPING,
STOPPED
}
void report(State state, int percent, double delivered);
}
} }

View file

@ -1,12 +0,0 @@
package de.jotomo.ruffyscripter.commands;
public interface ProgressReportCallback {
enum State {
DELIVERING,
DELIVERED,
STOPPING,
STOPPED
}
void report(State state, int percent, double delivered);
}

View file

@ -31,7 +31,6 @@ import de.jotomo.ruffyscripter.commands.BolusCommand;
import de.jotomo.ruffyscripter.commands.CancelTbrCommand; import de.jotomo.ruffyscripter.commands.CancelTbrCommand;
import de.jotomo.ruffyscripter.commands.Command; import de.jotomo.ruffyscripter.commands.Command;
import de.jotomo.ruffyscripter.commands.CommandResult; import de.jotomo.ruffyscripter.commands.CommandResult;
import de.jotomo.ruffyscripter.commands.ProgressReportCallback;
import de.jotomo.ruffyscripter.commands.DetermineCapabilitiesCommand; import de.jotomo.ruffyscripter.commands.DetermineCapabilitiesCommand;
import de.jotomo.ruffyscripter.commands.ReadPumpStateCommand; import de.jotomo.ruffyscripter.commands.ReadPumpStateCommand;
import de.jotomo.ruffyscripter.commands.SetTbrCommand; import de.jotomo.ruffyscripter.commands.SetTbrCommand;
@ -366,9 +365,9 @@ public class ComboPlugin implements PluginBase, PumpInterface {
return basal; return basal;
} }
private static ProgressReportCallback bolusProgressReportCallback = new ProgressReportCallback() { private static BolusCommand.ProgressReportCallback bolusProgressReportCallback = new BolusCommand.ProgressReportCallback() {
@Override @Override
public void report(ProgressReportCallback.State state, int percent, double delivered) { public void report(BolusCommand.ProgressReportCallback.State state, int percent, double delivered) {
EventOverviewBolusProgress enent = EventOverviewBolusProgress.getInstance(); EventOverviewBolusProgress enent = EventOverviewBolusProgress.getInstance();
switch (state) { switch (state) {
case DELIVERING: case DELIVERING:
@ -399,7 +398,7 @@ public class ComboPlugin implements PluginBase, PumpInterface {
// TODO read history to ensure there are no boluses delivered on the pump we aren't // 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 // aware of and haven't included in the bolus calulation
// Note that the BolusCommand send progress updates to the bolusProgressReporterCallback, // 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 // which then posts appropriate events on the bus, so in this branch no posts are needed
runningBolusCommand = new BolusCommand(detailedBolusInfo.insulin, bolusProgressReportCallback); runningBolusCommand = new BolusCommand(detailedBolusInfo.insulin, bolusProgressReportCallback);
CommandResult bolusCmdResult = runCommand(runningBolusCommand); CommandResult bolusCmdResult = runCommand(runningBolusCommand);