diff --git a/app/src/main/java/de/jotomo/ruffyscripter/commands/GetBasalCommand.java b/app/src/main/java/de/jotomo/ruffyscripter/commands/GetBasalCommand.java index 8f02a40132..ea78d0e536 100644 --- a/app/src/main/java/de/jotomo/ruffyscripter/commands/GetBasalCommand.java +++ b/app/src/main/java/de/jotomo/ruffyscripter/commands/GetBasalCommand.java @@ -1,5 +1,7 @@ package de.jotomo.ruffyscripter.commands; +import android.util.Log; + import org.monkey.d.ruffy.ruffy.driver.display.MenuAttribute; import org.monkey.d.ruffy.ruffy.driver.display.MenuType; import org.monkey.d.ruffy.ruffy.driver.display.menu.MenuTime; @@ -7,71 +9,45 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Locale; +import java.util.Map; +import java.util.Objects; import de.jotomo.ruffyscripter.PumpState; import de.jotomo.ruffyscripter.RuffyScripter; -import static de.jotomo.ruffyscripter.commands.SetTbrCommand.State.AFTER; -import static de.jotomo.ruffyscripter.commands.SetTbrCommand.State.BEFORE; -import static de.jotomo.ruffyscripter.commands.SetTbrCommand.State.ERROR; -import static de.jotomo.ruffyscripter.commands.SetTbrCommand.State.MAIN; -import static de.jotomo.ruffyscripter.commands.SetTbrCommand.State.SET; -import static de.jotomo.ruffyscripter.commands.SetTbrCommand.State.SET_TBR; -import static de.jotomo.ruffyscripter.commands.SetTbrCommand.State.SET_TIME; -import static de.jotomo.ruffyscripter.commands.SetTbrCommand.State.TBR; -import static de.jotomo.ruffyscripter.commands.SetTbrCommand.State.TIME; +import static de.jotomo.ruffyscripter.commands.GetBasalCommand.State.BEFORE; +import static de.jotomo.ruffyscripter.commands.GetBasalCommand.State.MAIN; +import static de.jotomo.ruffyscripter.commands.GetBasalCommand.State.BASAL_1_MENU; +import static de.jotomo.ruffyscripter.commands.GetBasalCommand.State.BASAL_OVERVIEW; +import static de.jotomo.ruffyscripter.commands.GetBasalCommand.State.READ_BASAL; +import static de.jotomo.ruffyscripter.commands.GetBasalCommand.State.ERROR; +import static de.jotomo.ruffyscripter.commands.GetBasalCommand.State.AFTER; -public class SetTbrCommand implements Command { - private static final Logger log = LoggerFactory.getLogger(SetTbrCommand.class); +public class GetBasalCommand implements Command { + private static final Logger log = LoggerFactory.getLogger(GetBasalCommand.class); - private final long percentage; - private final long duration; private RuffyScripter scripter; - public SetTbrCommand(long percentage, long duration) { - this.percentage = percentage; - this.duration = duration; - } + public GetBasalCommand() {} @Override public List validateArguments() { List violations = new ArrayList<>(); - if (percentage % 10 != 0) { - violations.add("TBR percentage must be set in 10% steps"); - } - if (percentage < 0 || percentage > 500) { - violations.add("TBR percentage must be within 0-500%"); - } - - if (percentage != 100) { - if (duration % 15 != 0) { - violations.add("TBR duration can only be set in 15 minute steps"); - } - if (duration > 60 * 24) { - violations.add("Maximum TBR duration is 24 hours"); - } - } - - if (percentage == 0 && duration > 120) { - violations.add("Max allowed zero-temp duration is 2h"); - } - return violations; } enum State { BEFORE, MAIN, - TBR, - SET_TBR, - TIME, - SET_TIME, - SET, + BASAL_1_MENU, + BASAL_OVERVIEW, + READ_BASAL, + ERROR, AFTER, - ERROR }; private State lastState,state; private long last; @@ -105,6 +81,9 @@ public class SetTbrCommand implements Command { } private MenuType lastMenu; private int retries = 0; + private double basalTotal = 0; + private Map rate = new HashMap<>(); + private void tick() { switch (state) @@ -120,147 +99,61 @@ public class SetTbrCommand implements Command { break; case MAIN: if(retries>0) - if(scripter.goToMainMenuScreen(MenuType.TBR_MENU,30000)) + if(scripter.goToMainMenuScreen(MenuType.BASAL_1_MENU,30000)) { - updateState(TBR,30); - retries=0; + if(scripter.enterMenu(MenuType.BASAL_1_MENU,MenuType.BASAL_TOTAL, RuffyScripter.Key.CHECK,2000)); + { + updateState(BASAL_OVERVIEW, 30); + retries=0; + } } else retries--; else updateState(ERROR,30); break; - case TBR: - if(scripter.enterMenu(MenuType.TBR_MENU,MenuType.TBR_SET, RuffyScripter.Key.CHECK,20000)) + case BASAL_OVERVIEW: + if(scripter.currentMenu.getType()==MenuType.BASAL_TOTAL && scripter.currentMenu.getAttribute(MenuAttribute.BASAL_TOTAL)!=null && (Integer)scripter.currentMenu.getAttribute(MenuAttribute.BASAL_SELECTED)==1) { - updateState(SET_TBR,60); - retries = 10; - } - else - updateState(ERROR,30); - break; - case SET_TBR: - if(scripter.currentMenu!=null && scripter.currentMenu.getType()==MenuType.TBR_SET) - { - Object percentageObj = scripter.currentMenu.getAttribute(MenuAttribute.BASAL_RATE); - if(percentageObj != null && percentageObj instanceof Double) + basalTotal = (Double)scripter.currentMenu.getAttribute(MenuAttribute.BASAL_TOTAL); + if(scripter.enterMenu(MenuType.BASAL_TOTAL,MenuType.BASAL_SET, RuffyScripter.Key.MENU,3000)) { - double currentPercentage = ((Double) percentageObj).doubleValue(); - - if(currentPercentage!=percentage) - { - if(retries>0) { - retries--; - int steps = (int) ((percentage - currentPercentage) / 10.0); - scripter.step(steps,(steps<0? RuffyScripter.Key.DOWN: RuffyScripter.Key.UP), 3000); - } - else - updateState(ERROR,30); - } - else - { - if(percentage==100) - { - scripter.pressCheckKey(); - updateState(SET,30); - } - else { - updateState(TIME, 30); - } - retries=10; - } + updateState(READ_BASAL,30); + retries = 96; } } - else - { - updateState(ERROR,30); - } break; - case TIME: - if((scripter.currentMenu!=null && scripter.currentMenu.getType()==MenuType.TBR_DURATION) || scripter.enterMenu(MenuType.TBR_SET,MenuType.TBR_DURATION, RuffyScripter.Key.MENU,20000)) - { - updateState(SET_TIME,60); - retries = 10; - } - else if(retries==0) - updateState(ERROR,30); - else retries--; - break; - case SET_TIME: - if(scripter.currentMenu!=null && scripter.currentMenu.getType()==MenuType.TBR_DURATION) - { - Object durationObj = scripter.currentMenu.getAttribute(MenuAttribute.RUNTIME); - if(durationObj != null && durationObj instanceof MenuTime) - { - MenuTime time = (MenuTime) durationObj; - double currentDuration = (time.getHour()*60)+time.getMinute(); - if(currentDuration!=duration) - { - if(retries>0) { - retries--; - int steps = (int)((currentDuration - duration)/15.0); - if(currentDuration+(steps*15)duration) - steps--; - scripter.step(steps,(steps>0? RuffyScripter.Key.UP: RuffyScripter.Key.DOWN), 3000); - } - else - updateState(ERROR,30); - } - else { - scripter.pressCheckKey(); - updateState(SET, 30); - } + case READ_BASAL: + if(scripter.currentMenu.getType()==MenuType.BASAL_SET && scripter.currentMenu.getAttribute(MenuAttribute.BASAL_START)!=null) { + Object rateObj = scripter.currentMenu.getAttribute(MenuAttribute.BASAL_RATE); + MenuTime time = (MenuTime) scripter.currentMenu.getAttribute(MenuAttribute.BASAL_START); + if (rateObj instanceof Double) { + rate.put(time.getHour(), (Double) rateObj); } - } - else - { - updateState(ERROR,60); - } - break; - case SET: - if(scripter.currentMenu!=null && scripter.currentMenu.getType()==MenuType.WARNING_OR_ERROR) - { - lastMenu = scripter.currentMenu.getType(); - scripter.pressCheckKey(); - updateState(SET, 30); - } - else if(scripter.currentMenu!=null && scripter.currentMenu.getType()==MenuType.MAIN_MENU) { - Object setPercentage = scripter.currentMenu.getAttribute(MenuAttribute.TBR); - Object setDuration = scripter.currentMenu.getAttribute(MenuAttribute.RUNTIME); - if (setPercentage== null ||setDuration==null) { - if(percentage!=100) - { - updateState(ERROR,10); - } - else - { - if(lastMenu==MenuType.WARNING_OR_ERROR) - updateState(AFTER,10); - else - updateState(SET,10); - } + boolean complete = true; + for (int t = 0; t < 24; t++) { + if (rate.get(t) == null) + complete = false; } - else { - double mmTbrPercentage = (Double) setPercentage; - MenuTime mmTbrDuration = (MenuTime) setDuration; - // ... and be the same as what we set - // note that displayed duration might have already counted down, e.g. from 30 minutes to - // 29 minutes and 59 seconds, so that 29 minutes are displayed - int mmTbrDurationInMinutes = mmTbrDuration.getHour() * 60 + mmTbrDuration.getMinute(); - if (mmTbrPercentage == percentage && mmTbrDurationInMinutes <= duration) { - updateState(AFTER, 10); + if (retries > 0) { + if (complete) { + scripter.pressBackKey(); + updateState(AFTER, 30); } else { - updateState(ERROR, 10); + retries--; + scripter.pressMenuKey(); + scripter.waitScreen(250); } + } else { + updateState(ERROR, 30); } } break; case ERROR: case AFTER: - synchronized(SetTbrCommand.this) { - SetTbrCommand.this.notify(); + scripter.goToMainMenuScreen(MenuType.MAIN_MENU,2000); + synchronized(GetBasalCommand.this) { + GetBasalCommand.this.notify(); } break; } @@ -282,20 +175,17 @@ public class SetTbrCommand implements Command { } if(state==AFTER) { - if(percentage==100) - return new CommandResult().success(true).enacted(true).message("TBR was cancelled"); - - return new CommandResult().success(true).enacted(true).message( - String.format(Locale.US, "TBR set to %d%% for %d min", percentage, duration)); + for(int i = 0; i < 24;i++) + { + Log.v("BASAL_RATE","BASAL_RATE from "+String.format("%02d",i)+":00 = "+rate.get(i)); + } + return new CommandResult().success(true).enacted(true).message("Basal Rate was read"); } return new CommandResult().success(false).message("failed with state: "+state+" from: "+lastState); } @Override public String toString() { - return "SetTbrCommand{" + - "percentage=" + percentage + - ", duration=" + duration + - '}'; + return "GetTbrCommand{}"; } }