WIP on ProgramBasalCommand
This commit is contained in:
parent
e2e2c579d4
commit
d944df725f
1 changed files with 57 additions and 4 deletions
|
@ -1,5 +1,6 @@
|
|||
package info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.pod.command;
|
||||
|
||||
import java.nio.ByteBuffer;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
|
@ -8,22 +9,50 @@ import info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.pod.definitio
|
|||
|
||||
public final class ProgramBasalCommand extends CommandBase {
|
||||
private final List<InsulinProgramElement> insulinProgramElements;
|
||||
private final ProgramReminder programReminder;
|
||||
private final byte currentHalfOurEntryIndex;
|
||||
private final short remainingPulsesInCurrentHalfHourEntry;
|
||||
private final int delayUntilNextTenthPulseInUsec;
|
||||
|
||||
private ProgramBasalCommand(int address, short sequenceNumber, boolean multiCommandFlag, ProgramReminder programReminder, List<InsulinProgramElement> insulinProgramElements) {
|
||||
private ProgramBasalCommand(int address, short sequenceNumber, boolean multiCommandFlag, ProgramReminder programReminder, List<InsulinProgramElement> insulinProgramElements, byte currentHalfOurEntryIndex, short remainingPulsesInCurrentHalfHourEntry, int delayUntilNextTenthPulseInUsec) {
|
||||
super(CommandType.PROGRAM_BASAL, address, sequenceNumber, multiCommandFlag);
|
||||
this.insulinProgramElements = new ArrayList<>(insulinProgramElements);
|
||||
this.programReminder = programReminder;
|
||||
this.currentHalfOurEntryIndex = currentHalfOurEntryIndex;
|
||||
this.remainingPulsesInCurrentHalfHourEntry = remainingPulsesInCurrentHalfHourEntry;
|
||||
this.delayUntilNextTenthPulseInUsec = delayUntilNextTenthPulseInUsec;
|
||||
}
|
||||
|
||||
private final ProgramReminder programReminder;
|
||||
public byte getBodyLength() {
|
||||
return (byte) (insulinProgramElements.size() * 6 + 8);
|
||||
}
|
||||
|
||||
@Override public byte[] getEncoded() {
|
||||
return new byte[0];
|
||||
ByteBuffer basalCommandBuffer = ByteBuffer.allocate(this.getBodyLength()) //
|
||||
.put(commandType.getValue()) //
|
||||
.put(getBodyLength()) //
|
||||
.put(programReminder.getEncoded()) //
|
||||
.put(currentHalfOurEntryIndex) //
|
||||
.putShort(remainingPulsesInCurrentHalfHourEntry) //
|
||||
.putInt(delayUntilNextTenthPulseInUsec);
|
||||
|
||||
for (InsulinProgramElement element : insulinProgramElements) {
|
||||
basalCommandBuffer.put(element.getEncoded());
|
||||
}
|
||||
|
||||
byte[] basalCommand = basalCommandBuffer.array();
|
||||
|
||||
// TODO basal interlock and header
|
||||
|
||||
return basalCommand;
|
||||
}
|
||||
|
||||
public static final class Builder extends CommandBase.Builder<Builder, ProgramBasalCommand> {
|
||||
private List<InsulinProgramElement> insulinProgramElements;
|
||||
private ProgramReminder programReminder;
|
||||
private Byte currentHalfOurEntryIndex;
|
||||
private Short remainingPulsesInCurrentHalfHourEntry;
|
||||
private Integer delayUntilNextTenthPulseInUsec;
|
||||
|
||||
public Builder setInsulinProgramElements(List<InsulinProgramElement> insulinProgramElements) {
|
||||
if (insulinProgramElements == null) {
|
||||
|
@ -38,6 +67,21 @@ public final class ProgramBasalCommand extends CommandBase {
|
|||
return this;
|
||||
}
|
||||
|
||||
public Builder setCurrentHalfOurEntryIndex(byte currentHalfOurEntryIndex) {
|
||||
this.currentHalfOurEntryIndex = currentHalfOurEntryIndex;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setRemainingPulsesInCurrentHalfHourEntry(short remainingPulsesInCurrentHalfHourEntry) {
|
||||
this.remainingPulsesInCurrentHalfHourEntry = remainingPulsesInCurrentHalfHourEntry;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setDelayUntilNextTenthPulseInUsec(Integer delayUntilNextTenthPulseInUsec) {
|
||||
this.delayUntilNextTenthPulseInUsec = delayUntilNextTenthPulseInUsec;
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override final ProgramBasalCommand buildCommand() {
|
||||
if (insulinProgramElements == null) {
|
||||
throw new IllegalArgumentException("insulinProgramElements can not be null");
|
||||
|
@ -45,7 +89,16 @@ public final class ProgramBasalCommand extends CommandBase {
|
|||
if (programReminder == null) {
|
||||
throw new IllegalArgumentException("programReminder can not be null");
|
||||
}
|
||||
return new ProgramBasalCommand(address, sequenceNumber, multiCommandFlag, programReminder, insulinProgramElements);
|
||||
if (currentHalfOurEntryIndex == null) {
|
||||
throw new IllegalArgumentException("currentHalfOurEntryIndex can not be null");
|
||||
}
|
||||
if (remainingPulsesInCurrentHalfHourEntry == null) {
|
||||
throw new IllegalArgumentException("remainingPulsesInCurrentHalfHourEntry can not be null");
|
||||
}
|
||||
if (delayUntilNextTenthPulseInUsec == null) {
|
||||
throw new IllegalArgumentException("durationUntilNextTenthPulseInUsec can not be null");
|
||||
}
|
||||
return new ProgramBasalCommand(address, sequenceNumber, multiCommandFlag, programReminder, insulinProgramElements, currentHalfOurEntryIndex, remainingPulsesInCurrentHalfHourEntry, delayUntilNextTenthPulseInUsec);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue