ComboPlugin: new deliverTreatment contract.

This commit is contained in:
Johannes Mockenhaupt 2021-04-09 15:58:30 +02:00
parent aadeeeebbf
commit 3a87c29d2b
No known key found for this signature in database
GPG key ID: 9E1EA6AF7BBBB0D1

View file

@ -96,7 +96,7 @@ public class ComboPlugin extends PumpPluginBase implements PumpInterface, Constr
*/ */
private volatile boolean scripterIsBolusing; private volatile boolean scripterIsBolusing;
/** /**
* This is set to true to request a bolus cancellation. {@link #deliverBolus(DetailedBolusInfo)} * This is set to true to request a bolus cancellation. {@link #deliverTreatment(DetailedBolusInfo)} (DetailedBolusInfo)}
* will reset this flag. * will reset this flag.
*/ */
private volatile boolean cancelBolus; private volatile boolean cancelBolus;
@ -105,7 +105,7 @@ public class ComboPlugin extends PumpPluginBase implements PumpInterface, Constr
* This is set (in {@link #checkHistory()} whenever a connection to the pump is made and * This is set (in {@link #checkHistory()} whenever a connection to the pump is made and
* indicates if new history records on the pump have been found. This effectively blocks * indicates if new history records on the pump have been found. This effectively blocks
* high temps ({@link #setTempBasalPercent(Integer, Integer, PumpSync.TemporaryBasalType)} and boluses * high temps ({@link #setTempBasalPercent(Integer, Integer, PumpSync.TemporaryBasalType)} and boluses
* ({@link #deliverBolus(DetailedBolusInfo)} till the queue is empty and the connection * ({@link #deliverTreatment(DetailedBolusInfo)} till the queue is empty and the connection
* is shut down. * is shut down.
* {@link #initializePump()} resets this since on startup the history is allowed to have * {@link #initializePump()} resets this since on startup the history is allowed to have
* changed (and the user can't possible have already calculated anything with out of date IOB). * changed (and the user can't possible have already calculated anything with out of date IOB).
@ -120,7 +120,7 @@ public class ComboPlugin extends PumpPluginBase implements PumpInterface, Constr
/** /**
* Cache of the last <=2 boluses on the pump. Used to detect changes in pump history, * Cache of the last <=2 boluses on the pump. Used to detect changes in pump history,
* requiring reading more pump history. This is read/set in {@link #checkHistory()} when changed * requiring reading more pump history. This is read/set in {@link #checkHistory()} when changed
* pump history was detected and was read, as well as in {@link #deliverBolus(DetailedBolusInfo)} * pump history was detected and was read, as well as in {@link #deliverTreatment(DetailedBolusInfo)}
* after bolus delivery. Newest record is the first one. * after bolus delivery. Newest record is the first one.
*/ */
private volatile List<Bolus> recentBoluses = new ArrayList<>(0); private volatile List<Bolus> recentBoluses = new ArrayList<>(0);
@ -474,41 +474,9 @@ public class ComboPlugin extends PumpPluginBase implements PumpInterface, Constr
*/ */
@NonNull @Override @NonNull @Override
public PumpEnactResult deliverTreatment(DetailedBolusInfo detailedBolusInfo) { public PumpEnactResult deliverTreatment(DetailedBolusInfo detailedBolusInfo) {
try { if (detailedBolusInfo.insulin == 0 || detailedBolusInfo.carbs > 0) {
if (detailedBolusInfo.insulin == 0 && detailedBolusInfo.carbs == 0) { throw new IllegalArgumentException(detailedBolusInfo.toString());
// neither carbs nor bolus requested
getAapsLogger().error("deliverTreatment: Invalid input");
return new PumpEnactResult(getInjector()).success(false).enacted(false)
.bolusDelivered(0d).carbsDelivered(0d)
.comment(R.string.invalidinput);
// } else if (detailedBolusInfo.insulin > 0) {
} else {
// bolus needed, ask pump to deliver it
return deliverBolus(detailedBolusInfo);
}
/* This should not happen anymore
else {
// no bolus required, carb only treatment
treatmentsPlugin.addToHistoryTreatment(detailedBolusInfo, false);
EventOverviewBolusProgress bolusingEvent = EventOverviewBolusProgress.INSTANCE;
bolusingEvent.setT(new EventOverviewBolusProgress.Treatment(0.0, 0, detailedBolusInfo.getBolusType() == DetailedBolusInfo.BolusType.SMB));
bolusingEvent.setPercent(100);
rxBus.send(bolusingEvent);
return new PumpEnactResult(getInjector()).success(true).enacted(true)
.bolusDelivered(0d).carbsDelivered(detailedBolusInfo.carbs)
.comment(R.string.virtualpump_resultok);
}
*/
} finally {
rxBus.send(new EventComboPumpUpdateGUI());
} }
}
@NonNull
private PumpEnactResult deliverBolus(final DetailedBolusInfo detailedBolusInfo) {
try { try {
pump.activity = getResourceHelper().gs(R.string.combo_pump_action_bolusing, detailedBolusInfo.insulin); pump.activity = getResourceHelper().gs(R.string.combo_pump_action_bolusing, detailedBolusInfo.insulin);
rxBus.send(new EventComboPumpUpdateGUI()); rxBus.send(new EventComboPumpUpdateGUI());
@ -668,39 +636,18 @@ public class ComboPlugin extends PumpPluginBase implements PumpInterface, Constr
* Creates a treatment record based on the request in DetailBolusInfo and the delivered bolus. * Creates a treatment record based on the request in DetailBolusInfo and the delivered bolus.
*/ */
private boolean addBolusToTreatments(DetailedBolusInfo detailedBolusInfo, Bolus lastPumpBolus) { private boolean addBolusToTreatments(DetailedBolusInfo detailedBolusInfo, Bolus lastPumpBolus) {
DetailedBolusInfo bolusInfo = detailedBolusInfo.copy();
bolusInfo.setBolusTimestamp(calculateFakeBolusDate(lastPumpBolus));
bolusInfo.setPumpType(PumpType.ACCU_CHEK_COMBO);
bolusInfo.setPumpSerial(serialNumber());
bolusInfo.setBolusPumpId(bolusInfo.timestamp);
bolusInfo.insulin = lastPumpBolus.amount;
try { try {
/* this should not happen
if (bolusInfo.carbs > 0 && bolusInfo.carbTime != 0) {
// split out a separate carbs record without a pumpId
DetailedBolusInfo carbInfo = new DetailedBolusInfo();
carbInfo.timestamp = bolusInfo.timestamp + bolusInfo.carbTime * 60L * 1000L;
carbInfo.carbs = bolusInfo.carbs;
carbInfo.setPumpType(PumpType.USER);
treatmentsPlugin.addToHistoryTreatment(carbInfo, true);
// remove carbs from bolusInfo to not trigger any unwanted code paths in
// TreatmentsPlugin.addToHistoryTreatment() method
bolusInfo.carbTime = 0;
bolusInfo.carbs = 0;
}
*/
pumpSync.syncBolusWithPumpId( pumpSync.syncBolusWithPumpId(
calculateFakeBolusDate(lastPumpBolus), calculateFakeBolusDate(lastPumpBolus),
lastPumpBolus.amount, lastPumpBolus.amount,
detailedBolusInfo.getBolusType(), detailedBolusInfo.getBolusType(),
bolusInfo.timestamp, detailedBolusInfo.timestamp,
PumpType.ACCU_CHEK_COMBO, PumpType.ACCU_CHEK_COMBO,
serialNumber() serialNumber()
); );
} catch (Exception e) { } catch (Exception e) {
getAapsLogger().error("Adding treatment record failed", e); getAapsLogger().error("Adding treatment record failed", e);
if (bolusInfo.getBolusType() == DetailedBolusInfo.BolusType.SMB) { if (detailedBolusInfo.getBolusType() == DetailedBolusInfo.BolusType.SMB) {
Notification notification = new Notification(Notification.COMBO_PUMP_ALARM, getResourceHelper().gs(R.string.combo_error_updating_treatment_record), Notification.URGENT); Notification notification = new Notification(Notification.COMBO_PUMP_ALARM, getResourceHelper().gs(R.string.combo_error_updating_treatment_record), Notification.URGENT);
rxBus.send(new EventNewNotification(notification)); rxBus.send(new EventNewNotification(notification));
} }
@ -820,7 +767,6 @@ public class ComboPlugin extends PumpPluginBase implements PumpInterface, Constr
@NonNull @Override @NonNull @Override
public PumpEnactResult cancelTempBasal(boolean enforceNew) { public PumpEnactResult cancelTempBasal(boolean enforceNew) {
getAapsLogger().debug(LTag.PUMP, "cancelTempBasal called"); getAapsLogger().debug(LTag.PUMP, "cancelTempBasal called");
//final TemporaryBasal activeTemp = treatmentsPlugin.getTempBasalFromHistoryIncludingConvertedExtended(System.currentTimeMillis());
PumpSync.PumpState pumpSate = pumpSync.expectedPumpState(); PumpSync.PumpState pumpSate = pumpSync.expectedPumpState();
final PumpSync.PumpState.TemporaryBasal activeTemp = pumpSate.getTemporaryBasal(); final PumpSync.PumpState.TemporaryBasal activeTemp = pumpSate.getTemporaryBasal();
if (enforceNew) { if (enforceNew) {