initial InsightPumpPlugin rough and untested
This commit is contained in:
parent
979dc2d5e2
commit
c85854fe93
1 changed files with 637 additions and 0 deletions
|
@ -0,0 +1,637 @@
|
||||||
|
package info.nightscout.androidaps.plugins.PumpInsight;
|
||||||
|
|
||||||
|
import android.os.Handler;
|
||||||
|
|
||||||
|
import org.json.JSONException;
|
||||||
|
import org.json.JSONObject;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import java.text.DecimalFormat;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
import info.nightscout.androidaps.BuildConfig;
|
||||||
|
import info.nightscout.androidaps.Config;
|
||||||
|
import info.nightscout.androidaps.MainApp;
|
||||||
|
import info.nightscout.androidaps.R;
|
||||||
|
import info.nightscout.androidaps.data.DetailedBolusInfo;
|
||||||
|
import info.nightscout.androidaps.data.Profile;
|
||||||
|
import info.nightscout.androidaps.data.PumpEnactResult;
|
||||||
|
import info.nightscout.androidaps.db.ExtendedBolus;
|
||||||
|
import info.nightscout.androidaps.db.Source;
|
||||||
|
import info.nightscout.androidaps.db.TemporaryBasal;
|
||||||
|
import info.nightscout.androidaps.interfaces.PluginBase;
|
||||||
|
import info.nightscout.androidaps.interfaces.PumpDescription;
|
||||||
|
import info.nightscout.androidaps.interfaces.PumpInterface;
|
||||||
|
import info.nightscout.androidaps.interfaces.TreatmentsInterface;
|
||||||
|
import info.nightscout.androidaps.plugins.Overview.events.EventNewNotification;
|
||||||
|
import info.nightscout.androidaps.plugins.Overview.events.EventOverviewBolusProgress;
|
||||||
|
import info.nightscout.androidaps.plugins.Overview.notifications.Notification;
|
||||||
|
import info.nightscout.androidaps.plugins.PumpInsight.connector.CancelBolusTaskRunner;
|
||||||
|
import info.nightscout.androidaps.plugins.PumpInsight.connector.Connector;
|
||||||
|
import info.nightscout.androidaps.plugins.PumpInsight.events.EventInsightPumpUpdateGui;
|
||||||
|
import info.nightscout.androidaps.plugins.PumpInsight.utils.Helpers;
|
||||||
|
import info.nightscout.utils.DateUtil;
|
||||||
|
import info.nightscout.utils.NSUpload;
|
||||||
|
import sugar.free.sightparser.applayer.remote_control.CancelTBRMessage;
|
||||||
|
import sugar.free.sightparser.applayer.remote_control.ExtendedBolusMessage;
|
||||||
|
import sugar.free.sightparser.applayer.remote_control.StandardBolusMessage;
|
||||||
|
import sugar.free.sightparser.applayer.status.BolusType;
|
||||||
|
import sugar.free.sightparser.handling.SingleMessageTaskRunner;
|
||||||
|
import sugar.free.sightparser.handling.TaskRunner;
|
||||||
|
import sugar.free.sightparser.handling.taskrunners.SetTBRTaskRunner;
|
||||||
|
import sugar.free.sightparser.handling.taskrunners.StatusTaskRunner;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by jamorham on 23/01/2018.
|
||||||
|
*
|
||||||
|
* Connects to SightRemote app service using SightParser library
|
||||||
|
*
|
||||||
|
* SightRemote and SightParser created by Tebbe Ubben
|
||||||
|
*
|
||||||
|
* Original proof of concept SightProxy by jamorham
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class InsightPumpPlugin implements PluginBase, PumpInterface {
|
||||||
|
|
||||||
|
static Integer batteryPercent = 0;
|
||||||
|
static Integer reservoirInUnits = 0;
|
||||||
|
static boolean initialized = false;
|
||||||
|
|
||||||
|
private static Logger log = LoggerFactory.getLogger(InsightPumpPlugin.class);
|
||||||
|
|
||||||
|
private static volatile InsightPumpPlugin plugin;
|
||||||
|
private Date lastDataTime = new Date(0);
|
||||||
|
private TaskRunner taskRunner;
|
||||||
|
private boolean fragmentEnabled = true;
|
||||||
|
private boolean fragmentVisible = true;
|
||||||
|
private PumpDescription pumpDescription = new PumpDescription();
|
||||||
|
private Handler handler = new Handler();
|
||||||
|
private StatusTaskRunner.StatusResult statusResult;
|
||||||
|
private double basalRate = 0;
|
||||||
|
private final TaskRunner.ResultCallback statusResultHandler = new TaskRunner.ResultCallback() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onError(Exception e) {
|
||||||
|
log("Got error taskrunner: " + e);
|
||||||
|
|
||||||
|
if (e instanceof sugar.free.sightparser.error.DisconnectedError) {
|
||||||
|
if (Helpers.ratelimit("insight-reconnect", 2)) {
|
||||||
|
Connector.connectToPump();
|
||||||
|
updateGui();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onResult(Object result) {
|
||||||
|
log("GOT STATUS RESULT!!!");
|
||||||
|
statusResult = (StatusTaskRunner.StatusResult) result;
|
||||||
|
processStatusResult();
|
||||||
|
updateGui();
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
};
|
||||||
|
private Connector connector;
|
||||||
|
|
||||||
|
private InsightPumpPlugin() {
|
||||||
|
log("InsightPumpPlugin");
|
||||||
|
pumpDescription.isBolusCapable = true;
|
||||||
|
pumpDescription.bolusStep = 0.05d; // specification says 0.05U up to 2U then 0.1U @ 2-5U 0.2U @ 10-20U 0.5U 10-20U (are these just UI restrictions?)
|
||||||
|
|
||||||
|
pumpDescription.isExtendedBolusCapable = true;
|
||||||
|
pumpDescription.extendedBolusStep = 0.05d; // specification probably same as above
|
||||||
|
pumpDescription.extendedBolusDurationStep = 15; // 15 minutes up to 24 hours
|
||||||
|
pumpDescription.extendedBolusMaxDuration = 24 * 60;
|
||||||
|
|
||||||
|
pumpDescription.isTempBasalCapable = true;
|
||||||
|
//pumpDescription.tempBasalStyle = PumpDescription.PERCENT | PumpDescription.ABSOLUTE;
|
||||||
|
pumpDescription.tempBasalStyle = PumpDescription.PERCENT;
|
||||||
|
|
||||||
|
pumpDescription.maxTempPercent = 250; // 0-250%
|
||||||
|
pumpDescription.tempPercentStep = 10;
|
||||||
|
|
||||||
|
pumpDescription.tempDurationStep = 15; // 15 minutes up to 24 hours
|
||||||
|
pumpDescription.tempMaxDuration = 24 * 60;
|
||||||
|
|
||||||
|
|
||||||
|
pumpDescription.isSetBasalProfileCapable = false; // leave this for now
|
||||||
|
pumpDescription.basalStep = 0.01d;
|
||||||
|
pumpDescription.basalMinimumRate = 0.02d;
|
||||||
|
|
||||||
|
pumpDescription.isRefillingCapable = false;
|
||||||
|
|
||||||
|
this.connector = Connector.get();
|
||||||
|
this.connector.init();
|
||||||
|
log("back from init");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static InsightPumpPlugin getPlugin() {
|
||||||
|
if (plugin == null) {
|
||||||
|
createInstance();
|
||||||
|
}
|
||||||
|
return plugin;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static synchronized void createInstance() {
|
||||||
|
if (plugin == null) {
|
||||||
|
log("creating instance");
|
||||||
|
plugin = new InsightPumpPlugin();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void log(String msg) {
|
||||||
|
android.util.Log.e("INSIGHTPUMP", msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getFragmentClass() {
|
||||||
|
return InsightPumpFragment.class.getName();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getName() {
|
||||||
|
return MainApp.instance().getString(R.string.insightpump);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getNameShort() {
|
||||||
|
String name = MainApp.instance().getString(R.string.insightpump_shortname);
|
||||||
|
if (!name.trim().isEmpty()) {
|
||||||
|
//only if translation exists
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
// use long name as fallback
|
||||||
|
return getName();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isEnabled(int type) {
|
||||||
|
return type == PUMP && fragmentEnabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isVisibleInTabs(int type) {
|
||||||
|
return type == PUMP && fragmentVisible;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean canBeHidden(int type) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasFragment() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean showInList(int type) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setFragmentEnabled(int type, boolean fragmentEnabled) {
|
||||||
|
if (type == PUMP) this.fragmentEnabled = fragmentEnabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setFragmentVisible(int type, boolean fragmentVisible) {
|
||||||
|
if (type == PUMP) this.fragmentVisible = fragmentVisible;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getPreferencesId() {
|
||||||
|
return R.xml.pref_insightpump;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getType() {
|
||||||
|
return PluginBase.PUMP;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isFakingTempsByExtendedBoluses() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isInitialized() {
|
||||||
|
return initialized;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isSuspended() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isBusy() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isConnected() {
|
||||||
|
return Connector.get().isPumpConnected();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isConnecting() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void connect(String reason) {
|
||||||
|
if (!Config.NSCLIENT && !Config.G5UPLOADER)
|
||||||
|
NSUpload.uploadDeviceStatus();
|
||||||
|
lastDataTime = new Date();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void disconnect(String reason) {
|
||||||
|
try {
|
||||||
|
connector.getServiceConnector().disconnect();
|
||||||
|
} catch (NullPointerException e) {
|
||||||
|
log("Could not disconnect - null pointer: " + e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void stopConnecting() {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void getPumpStatus() {
|
||||||
|
|
||||||
|
log("getPumpStatus");
|
||||||
|
lastDataTime = new Date();
|
||||||
|
if (Connector.get().isPumpConnected()) {
|
||||||
|
log("is connected.. requesting status");
|
||||||
|
//handler.removeCallbacks(statusTaskRunnable);
|
||||||
|
handler.postDelayed(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
taskRunner = new StatusTaskRunner(connector.getServiceConnector());
|
||||||
|
taskRunner.fetch(statusResultHandler);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
, 500);
|
||||||
|
} else {
|
||||||
|
log("not connected.. not requesting status");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PumpEnactResult setNewBasalProfile(Profile profile) {
|
||||||
|
lastDataTime = new Date();
|
||||||
|
// Do nothing here. we are using MainApp.getConfigBuilder().getActiveProfile().getProfile();
|
||||||
|
PumpEnactResult result = new PumpEnactResult();
|
||||||
|
result.success = false;
|
||||||
|
Notification notification = new Notification(Notification.PROFILE_SET_OK, MainApp.sResources.getString(R.string.profile_set_ok), Notification.INFO, 60);
|
||||||
|
MainApp.bus().post(new EventNewNotification(notification));
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isThisProfileSet(Profile profile) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Date lastDataTime() {
|
||||||
|
return lastDataTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public double getBaseBasalRate() {
|
||||||
|
return basalRate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getBaseBasalRateString() {
|
||||||
|
final DecimalFormat df = new DecimalFormat("#.##");
|
||||||
|
return df.format(basalRate);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PumpEnactResult deliverTreatment(DetailedBolusInfo detailedBolusInfo) {
|
||||||
|
PumpEnactResult result = new PumpEnactResult();
|
||||||
|
result.success = true;
|
||||||
|
result.bolusDelivered = detailedBolusInfo.insulin;
|
||||||
|
result.carbsDelivered = detailedBolusInfo.carbs;
|
||||||
|
result.enacted = result.bolusDelivered > 0 || result.carbsDelivered > 0;
|
||||||
|
result.comment = MainApp.instance().getString(R.string.virtualpump_resultok);
|
||||||
|
|
||||||
|
Double delivering = 0d;
|
||||||
|
|
||||||
|
/* while (delivering < detailedBolusInfo.insulin) {
|
||||||
|
SystemClock.sleep(200);
|
||||||
|
EventOverviewBolusProgress bolusingEvent = EventOverviewBolusProgress.getInstance();
|
||||||
|
bolusingEvent.status = String.format(MainApp.sResources.getString(R.string.bolusdelivering), delivering);
|
||||||
|
bolusingEvent.percent = Math.min((int) (delivering / detailedBolusInfo.insulin * 100), 100);
|
||||||
|
MainApp.bus().post(bolusingEvent);
|
||||||
|
delivering += 0.1d;
|
||||||
|
}
|
||||||
|
SystemClock.sleep(200); */
|
||||||
|
deliverBolus((float) detailedBolusInfo.insulin); // actually request delivery
|
||||||
|
// TODO handle status result
|
||||||
|
EventOverviewBolusProgress bolusingEvent = EventOverviewBolusProgress.getInstance();
|
||||||
|
bolusingEvent.status = String.format(MainApp.sResources.getString(R.string.bolusdelivered), detailedBolusInfo.insulin);
|
||||||
|
bolusingEvent.percent = 100;
|
||||||
|
MainApp.bus().post(bolusingEvent);
|
||||||
|
// SystemClock.sleep(1000);
|
||||||
|
if (Config.logPumpComm)
|
||||||
|
log.debug("Delivering treatment insulin: " + detailedBolusInfo.insulin + "U carbs: " + detailedBolusInfo.carbs + "g " + result);
|
||||||
|
MainApp.bus().post(new EventInsightPumpUpdateGui());
|
||||||
|
lastDataTime = new Date();
|
||||||
|
MainApp.getConfigBuilder().addToHistoryTreatment(detailedBolusInfo);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void stopBolusDelivering() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PumpEnactResult setTempBasalAbsolute(Double absoluteRate, Integer durationInMinutes, boolean enforceNew) {
|
||||||
|
TreatmentsInterface treatmentsInterface = MainApp.getConfigBuilder();
|
||||||
|
TemporaryBasal tempBasal = new TemporaryBasal();
|
||||||
|
tempBasal.date = System.currentTimeMillis();
|
||||||
|
tempBasal.isAbsolute = true;
|
||||||
|
tempBasal.absoluteRate = absoluteRate;
|
||||||
|
tempBasal.durationInMinutes = durationInMinutes;
|
||||||
|
tempBasal.source = Source.USER;
|
||||||
|
PumpEnactResult result = new PumpEnactResult();
|
||||||
|
result.success = false;
|
||||||
|
result.enacted = true;
|
||||||
|
result.isTempCancel = false;
|
||||||
|
result.absolute = absoluteRate;
|
||||||
|
result.duration = durationInMinutes;
|
||||||
|
result.comment = MainApp.instance().getString(R.string.virtualpump_resultok);
|
||||||
|
treatmentsInterface.addToHistoryTempBasal(tempBasal);
|
||||||
|
if (Config.logPumpComm)
|
||||||
|
log.debug("Setting temp basal absolute: " + result);
|
||||||
|
MainApp.bus().post(new EventInsightPumpUpdateGui());
|
||||||
|
lastDataTime = new Date();
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*@Override
|
||||||
|
public PumpEnactResult setTempBasalPercent(Integer percent, Integer durationInMinutes, boolean enforceNew) {
|
||||||
|
TreatmentsInterface treatmentsInterface = MainApp.getConfigBuilder();
|
||||||
|
PumpEnactResult result = new PumpEnactResult();
|
||||||
|
if (MainApp.getConfigBuilder().isTempBasalInProgress()) {
|
||||||
|
result = cancelTempBasal(false);
|
||||||
|
if (!result.success)
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
TemporaryBasal tempBasal = new TemporaryBasal();
|
||||||
|
tempBasal.date = System.currentTimeMillis();
|
||||||
|
tempBasal.isAbsolute = false;
|
||||||
|
tempBasal.percentRate = percent;
|
||||||
|
tempBasal.durationInMinutes = durationInMinutes;
|
||||||
|
tempBasal.source = Source.USER;
|
||||||
|
result.success = true;
|
||||||
|
result.enacted = true;
|
||||||
|
result.percent = percent;
|
||||||
|
result.isPercent = true;
|
||||||
|
result.isTempCancel = false;
|
||||||
|
result.duration = durationInMinutes;
|
||||||
|
result.comment = MainApp.instance().getString(R.string.virtualpump_resultok);
|
||||||
|
treatmentsInterface.addToHistoryTempBasal(tempBasal);
|
||||||
|
if (Config.logPumpComm)
|
||||||
|
log.debug("Settings temp basal percent: " + result);
|
||||||
|
MainApp.bus().post(new EventInsightPumpUpdateGui());
|
||||||
|
lastDataTime = new Date();
|
||||||
|
return result;
|
||||||
|
}*/
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PumpEnactResult setTempBasalPercent(Integer percent, Integer durationInMinutes, boolean enforceNew) {
|
||||||
|
try {
|
||||||
|
SetTBRTaskRunner setTBRTaskRunner = new SetTBRTaskRunner(connector.getServiceConnector(), percent, durationInMinutes);
|
||||||
|
setTBRTaskRunner.fetchBlockingCall();
|
||||||
|
PumpEnactResult pumpEnactResult = new PumpEnactResult().success(true).enacted(true).isPercent(true).duration(durationInMinutes);
|
||||||
|
pumpEnactResult.percent = percent;
|
||||||
|
return pumpEnactResult;
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return new PumpEnactResult().success(false).enacted(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PumpEnactResult setExtendedBolus(Double insulin, Integer durationInMinutes) {
|
||||||
|
ExtendedBolusMessage extendedBolusMessage = new ExtendedBolusMessage();
|
||||||
|
extendedBolusMessage.setAmount((float) ((double) insulin));
|
||||||
|
extendedBolusMessage.setDuration((short) ((int) durationInMinutes));
|
||||||
|
SingleMessageTaskRunner singleMessageTaskRunner = new SingleMessageTaskRunner(connector.getServiceConnector(), extendedBolusMessage);
|
||||||
|
try {
|
||||||
|
singleMessageTaskRunner.fetchBlockingCall();
|
||||||
|
return new PumpEnactResult().enacted(true).success(true).bolusDelivered(insulin).duration(durationInMinutes);
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return new PumpEnactResult().success(false).enacted(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PumpEnactResult cancelTempBasal(boolean enforceNew) {
|
||||||
|
CancelTBRMessage cancelTBRMessage = new CancelTBRMessage();
|
||||||
|
SingleMessageTaskRunner singleMessageTaskRunner = new SingleMessageTaskRunner(connector.getServiceConnector(), cancelTBRMessage);
|
||||||
|
try {
|
||||||
|
singleMessageTaskRunner.fetchBlockingCall();
|
||||||
|
return new PumpEnactResult().success(true).enacted(true);
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return new PumpEnactResult().success(false).enacted(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PumpEnactResult cancelExtendedBolus() {
|
||||||
|
CancelBolusTaskRunner cancelBolusTaskRunner = new CancelBolusTaskRunner(connector.getServiceConnector(), BolusType.EXTENDED);
|
||||||
|
try {
|
||||||
|
cancelBolusTaskRunner.fetchBlockingCall();
|
||||||
|
return new PumpEnactResult().success(true).enacted(true);
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return new PumpEnactResult().success(false).enacted(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
@Override
|
||||||
|
public PumpEnactResult setExtendedBolus(Double insulin, Integer durationInMinutes) {
|
||||||
|
TreatmentsInterface treatmentsInterface = MainApp.getConfigBuilder();
|
||||||
|
PumpEnactResult result = cancelExtendedBolus();
|
||||||
|
if (!result.success)
|
||||||
|
return result;
|
||||||
|
ExtendedBolus extendedBolus = new ExtendedBolus();
|
||||||
|
extendedBolus.date = System.currentTimeMillis();
|
||||||
|
extendedBolus.insulin = insulin;
|
||||||
|
extendedBolus.durationInMinutes = durationInMinutes;
|
||||||
|
extendedBolus.source = Source.USER;
|
||||||
|
result.success = false;
|
||||||
|
result.enacted = true;
|
||||||
|
result.bolusDelivered = insulin;
|
||||||
|
result.isTempCancel = false;
|
||||||
|
result.duration = durationInMinutes;
|
||||||
|
result.comment = MainApp.instance().getString(R.string.virtualpump_resultok);
|
||||||
|
treatmentsInterface.addToHistoryExtendedBolus(extendedBolus);
|
||||||
|
if (Config.logPumpComm)
|
||||||
|
log.debug("Setting extended bolus: " + result);
|
||||||
|
MainApp.bus().post(new EventInsightPumpUpdateGui());
|
||||||
|
lastDataTime = new Date();
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* @Override
|
||||||
|
public PumpEnactResult cancelTempBasal(boolean force) {
|
||||||
|
TreatmentsInterface treatmentsInterface = MainApp.getConfigBuilder();
|
||||||
|
PumpEnactResult result = new PumpEnactResult();
|
||||||
|
result.success = true;
|
||||||
|
result.isTempCancel = true;
|
||||||
|
result.comment = MainApp.instance().getString(R.string.virtualpump_resultok);
|
||||||
|
if (treatmentsInterface.isTempBasalInProgress()) {
|
||||||
|
result.enacted = true;
|
||||||
|
TemporaryBasal tempStop = new TemporaryBasal(System.currentTimeMillis());
|
||||||
|
tempStop.source = Source.USER;
|
||||||
|
treatmentsInterface.addToHistoryTempBasal(tempStop);
|
||||||
|
//tempBasal = null;
|
||||||
|
if (Config.logPumpComm)
|
||||||
|
log.debug("Canceling temp basal: " + result);
|
||||||
|
MainApp.bus().post(new EventInsightPumpUpdateGui());
|
||||||
|
}
|
||||||
|
lastDataTime = new Date();
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
/* @Override
|
||||||
|
public PumpEnactResult cancelExtendedBolus() {
|
||||||
|
TreatmentsInterface treatmentsInterface = MainApp.getConfigBuilder();
|
||||||
|
PumpEnactResult result = new PumpEnactResult();
|
||||||
|
if (treatmentsInterface.isInHistoryExtendedBoluslInProgress()) {
|
||||||
|
ExtendedBolus exStop = new ExtendedBolus(System.currentTimeMillis());
|
||||||
|
exStop.source = Source.USER;
|
||||||
|
treatmentsInterface.addToHistoryExtendedBolus(exStop);
|
||||||
|
}
|
||||||
|
result.success = false;
|
||||||
|
result.enacted = true;
|
||||||
|
result.isTempCancel = true;
|
||||||
|
result.comment = MainApp.instance().getString(R.string.virtualpump_resultok);
|
||||||
|
if (Config.logPumpComm)
|
||||||
|
log.debug("Canceling extended basal: " + result);
|
||||||
|
MainApp.bus().post(new EventInsightPumpUpdateGui());
|
||||||
|
lastDataTime = new Date();
|
||||||
|
return result;
|
||||||
|
}*/
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public JSONObject getJSONStatus() {
|
||||||
|
|
||||||
|
// TODO review
|
||||||
|
|
||||||
|
JSONObject pump = new JSONObject();
|
||||||
|
JSONObject battery = new JSONObject();
|
||||||
|
JSONObject status = new JSONObject();
|
||||||
|
JSONObject extended = new JSONObject();
|
||||||
|
try {
|
||||||
|
battery.put("percent", batteryPercent);
|
||||||
|
status.put("status", "normal");
|
||||||
|
extended.put("Version", BuildConfig.VERSION_NAME + "-" + BuildConfig.BUILDVERSION);
|
||||||
|
try {
|
||||||
|
extended.put("ActiveProfile", MainApp.getConfigBuilder().getProfileName());
|
||||||
|
} catch (Exception e) {
|
||||||
|
}
|
||||||
|
TemporaryBasal tb = MainApp.getConfigBuilder().getTempBasalFromHistory(System.currentTimeMillis());
|
||||||
|
if (tb != null) {
|
||||||
|
extended.put("TempBasalAbsoluteRate", tb.tempBasalConvertedToAbsolute(System.currentTimeMillis()));
|
||||||
|
extended.put("TempBasalStart", DateUtil.dateAndTimeString(tb.date));
|
||||||
|
extended.put("TempBasalRemaining", tb.getPlannedRemainingMinutes());
|
||||||
|
}
|
||||||
|
ExtendedBolus eb = MainApp.getConfigBuilder().getExtendedBolusFromHistory(System.currentTimeMillis());
|
||||||
|
if (eb != null) {
|
||||||
|
extended.put("ExtendedBolusAbsoluteRate", eb.absoluteRate());
|
||||||
|
extended.put("ExtendedBolusStart", DateUtil.dateAndTimeString(eb.date));
|
||||||
|
extended.put("ExtendedBolusRemaining", eb.getPlannedRemainingMinutes());
|
||||||
|
}
|
||||||
|
status.put("timestamp", DateUtil.toISOString(new Date()));
|
||||||
|
|
||||||
|
pump.put("battery", battery);
|
||||||
|
pump.put("status", status);
|
||||||
|
pump.put("extended", extended);
|
||||||
|
pump.put("reservoir", reservoirInUnits);
|
||||||
|
pump.put("clock", DateUtil.toISOString(new Date()));
|
||||||
|
} catch (JSONException e) {
|
||||||
|
log.error("Unhandled exception", e);
|
||||||
|
}
|
||||||
|
return pump;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String deviceID() {
|
||||||
|
return "InsightPump";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PumpDescription getPumpDescription() {
|
||||||
|
return pumpDescription;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String shortStatus(boolean veryShort) {
|
||||||
|
return "Insight Pump";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void processStatusResult() {
|
||||||
|
if (statusResult != null) {
|
||||||
|
batteryPercent = statusResult.getBatteryAmountMessage().getBatteryAmount();
|
||||||
|
reservoirInUnits = (int) statusResult.getCartridgeAmountMessage().getCartridgeAmount();
|
||||||
|
basalRate = statusResult.getCurrentBasalMessage().getCurrentBasalAmount();
|
||||||
|
initialized = true; // basic communication test
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void deliverBolus(float bolusValue) {
|
||||||
|
log("!!!!!!!!!! DeliverBolus: " + bolusValue);
|
||||||
|
|
||||||
|
|
||||||
|
// Bare sanity checking
|
||||||
|
if (bolusValue == 0) return;
|
||||||
|
if (bolusValue > 10) return;
|
||||||
|
if (bolusValue < 0) return;
|
||||||
|
|
||||||
|
// TODO check limits here?
|
||||||
|
|
||||||
|
StandardBolusMessage message = new StandardBolusMessage();
|
||||||
|
message.setAmount(bolusValue);
|
||||||
|
final SingleMessageTaskRunner taskRunner = new SingleMessageTaskRunner(Connector.get().getServiceConnector(), message);
|
||||||
|
|
||||||
|
|
||||||
|
taskRunner.fetch(new TaskRunner.ResultCallback() {
|
||||||
|
@Override
|
||||||
|
public void onResult(Object result) {
|
||||||
|
log("Bolus result: " + result.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onError(Exception e) {
|
||||||
|
log("Bolus error");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void updateGui() {
|
||||||
|
MainApp.bus().post(new EventInsightPumpUpdateGui());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in a new issue