0.10.2-SNAPSHOT
- added functionality so that encoding can be changed on the fly - chnaged TretmentService, rewrote method for createOrUpdate entry (fix for #125)
This commit is contained in:
parent
fe73eba2a2
commit
a897a72142
|
@ -105,7 +105,7 @@ android {
|
|||
multiDexEnabled true
|
||||
versionCode 1500
|
||||
// dev_version: 2.3.1-dev
|
||||
version "medtronic-0.10.0-SNAPSHOT"
|
||||
version "medtronic-0.10.2-SNAPSHOT"
|
||||
buildConfigField "String", "VERSION", '"' + version + '"'
|
||||
buildConfigField "String", "BUILDVERSION", '"' + generateGitBuild() + '-' + generateDate() + '"'
|
||||
buildConfigField "String", "HEAD", '"' + generateGitBuild() + '"'
|
||||
|
|
|
@ -393,7 +393,7 @@ public class RFSpy {
|
|||
}
|
||||
|
||||
|
||||
private RFSpyResponse setRileyLinkEncoding(RileyLinkEncodingType encoding) {
|
||||
public RFSpyResponse setRileyLinkEncoding(RileyLinkEncodingType encoding) {
|
||||
RFSpyResponse resp = writeToData(new SetHardwareEncoding(encoding), EXPECTED_MAX_BLUETOOTH_LATENCY_MS);
|
||||
|
||||
if (resp.isOK()) {
|
||||
|
|
|
@ -268,4 +268,11 @@ public abstract class RileyLinkService extends Service {
|
|||
private boolean isLogEnabled() {
|
||||
return L.isEnabled(L.PUMPCOMM);
|
||||
}
|
||||
|
||||
|
||||
public void changeRileyLinkEncoding(RileyLinkEncodingType encodingType) {
|
||||
if (rfspy!=null) {
|
||||
rfspy.setRileyLinkEncoding(encodingType);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,40 +0,0 @@
|
|||
package info.nightscout.androidaps.plugins.pump.medtronic.comm.message;
|
||||
|
||||
/**
|
||||
* Created by geoff on 5/29/16.
|
||||
*/
|
||||
@Deprecated
|
||||
public class GetPumpModelCarelinkMessageBody extends MessageBody {
|
||||
|
||||
@Override
|
||||
public int getLength() {
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void init(byte[] rxData) {
|
||||
|
||||
}
|
||||
|
||||
|
||||
public byte[] getRxData() {
|
||||
return new byte[] { 0 };
|
||||
}
|
||||
|
||||
|
||||
public void setRxData(byte[] rxData) {
|
||||
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public byte[] getTxData() {
|
||||
return new byte[] { 0 };
|
||||
}
|
||||
|
||||
|
||||
public void setTxData(byte[] txData) {
|
||||
|
||||
}
|
||||
}
|
|
@ -59,18 +59,21 @@ public class MedtronicPumpStatus extends PumpStatus {
|
|||
|
||||
// fixme
|
||||
public Integer tempBasalLength = 0;
|
||||
String regexMac = "([\\da-fA-F]{1,2}(?:\\:|$)){6}";
|
||||
String regexSN = "[0-9]{6}";
|
||||
boolean serialChanged = false;
|
||||
boolean rileyLinkAddressChanged = false;
|
||||
boolean encodingChanged = false;
|
||||
RileyLinkEncodingType encodingType;
|
||||
|
||||
private String regexMac = "([\\da-fA-F]{1,2}(?:\\:|$)){6}";
|
||||
private String regexSN = "[0-9]{6}";
|
||||
|
||||
private boolean serialChanged = false;
|
||||
private boolean rileyLinkAddressChanged = false;
|
||||
private boolean encodingChanged = false;
|
||||
private boolean targetFrequencyChanged = false;
|
||||
|
||||
private RileyLinkEncodingType encodingType;
|
||||
private String[] frequencies;
|
||||
private boolean isFrequencyUS = false;
|
||||
private Map<String, PumpType> medtronicPumpMap = null;
|
||||
private Map<String, MedtronicDeviceType> medtronicDeviceTypeMap = null;
|
||||
private RileyLinkTargetFrequency targetFrequency;
|
||||
private boolean targetFrequencyChanged = false;
|
||||
public BasalProfileStatus basalProfileStatus;
|
||||
|
||||
|
||||
|
@ -195,7 +198,6 @@ public class MedtronicPumpStatus extends PumpStatus {
|
|||
this.errorDescription = MainApp.gs(R.string.medtronic_error_pump_frequency_invalid);
|
||||
return;
|
||||
} else {
|
||||
// if (this.pumpFrequency == null || !this.pumpFrequency.equals(pumpFrequency))
|
||||
this.pumpFrequency = pumpFrequency;
|
||||
this.isFrequencyUS = pumpFrequency.equals(frequencies[0]);
|
||||
|
||||
|
@ -206,7 +208,7 @@ public class MedtronicPumpStatus extends PumpStatus {
|
|||
if (targetFrequency != newTargetFrequency) {
|
||||
RileyLinkUtil.setRileyLinkTargetFrequency(newTargetFrequency);
|
||||
targetFrequency = newTargetFrequency;
|
||||
// targetFrequencyChanged = true;
|
||||
targetFrequencyChanged = true;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -248,11 +250,19 @@ public class MedtronicPumpStatus extends PumpStatus {
|
|||
//LOG.debug("Max Basal from AAPS settings is " + maxBasal);
|
||||
}
|
||||
|
||||
//RileyLinkEncodingType encodingType = RileyLinkEncodingType.getValueByDescription()
|
||||
|
||||
String encodingTypeStr = SP.getString(MedtronicConst.Prefs.Encoding, null);
|
||||
|
||||
RileyLinkEncodingType newEncodingType = RileyLinkEncodingType.valueOf(encodingTypeStr);
|
||||
|
||||
startService();
|
||||
if (this.encodingType == null) {
|
||||
this.encodingType = newEncodingType;
|
||||
} else if (this.encodingType != newEncodingType) {
|
||||
this.encodingType = newEncodingType;
|
||||
this.encodingChanged = true;
|
||||
}
|
||||
|
||||
reconfigureService();
|
||||
|
||||
} catch (Exception ex) {
|
||||
this.errorDescription = ex.getMessage();
|
||||
|
@ -261,21 +271,26 @@ public class MedtronicPumpStatus extends PumpStatus {
|
|||
}
|
||||
|
||||
|
||||
private boolean startService() {
|
||||
private boolean reconfigureService() {
|
||||
|
||||
// LOG.debug("MedtronicPumpStatus::startService");
|
||||
if (!inPreInit && MedtronicUtil.getMedtronicService() != null) {
|
||||
|
||||
boolean ready = (!inPreInit && MedtronicUtil.getMedtronicService() != null);
|
||||
if (serialChanged) {
|
||||
MedtronicUtil.getMedtronicService().setPumpIDString(this.serialNumber); // short operation
|
||||
serialChanged = false;
|
||||
}
|
||||
|
||||
if (serialChanged && ready) {
|
||||
MedtronicUtil.getMedtronicService().setPumpIDString(this.serialNumber); // short operation
|
||||
serialChanged = false;
|
||||
if (rileyLinkAddressChanged) {
|
||||
MedtronicUtil.sendBroadcastMessage(RileyLinkConst.Intents.RileyLinkNewAddressSet);
|
||||
rileyLinkAddressChanged = false;
|
||||
}
|
||||
|
||||
if (encodingChanged) {
|
||||
RileyLinkUtil.getRileyLinkService().changeRileyLinkEncoding(encodingType);
|
||||
encodingChanged = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (rileyLinkAddressChanged && !inPreInit && MedtronicUtil.getMedtronicService() != null) {
|
||||
MedtronicUtil.sendBroadcastMessage(RileyLinkConst.Intents.RileyLinkNewAddressSet);
|
||||
rileyLinkAddressChanged = false;
|
||||
}
|
||||
|
||||
// if (targetFrequencyChanged && !inPreInit && MedtronicUtil.getMedtronicService() != null) {
|
||||
// RileyLinkUtil.setRileyLinkTargetFrequency(targetFrequency);
|
||||
|
@ -283,7 +298,7 @@ public class MedtronicPumpStatus extends PumpStatus {
|
|||
// targetFrequencyChanged = false;
|
||||
// }
|
||||
|
||||
return (!rileyLinkAddressChanged && !serialChanged); // && !targetFrequencyChanged);
|
||||
return (!rileyLinkAddressChanged && !serialChanged && !encodingChanged); // && !targetFrequencyChanged);
|
||||
}
|
||||
|
||||
|
||||
|
@ -324,7 +339,7 @@ public class MedtronicPumpStatus extends PumpStatus {
|
|||
public boolean setNotInPreInit() {
|
||||
this.inPreInit = false;
|
||||
|
||||
return startService();
|
||||
return reconfigureService();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -15,6 +15,7 @@ import com.j256.ormlite.support.ConnectionSource;
|
|||
import com.j256.ormlite.table.TableUtils;
|
||||
import com.squareup.otto.Subscribe;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
import org.slf4j.Logger;
|
||||
|
@ -38,6 +39,7 @@ import info.nightscout.androidaps.events.EventReloadTreatmentData;
|
|||
import info.nightscout.androidaps.events.EventTreatmentChange;
|
||||
import info.nightscout.androidaps.logging.L;
|
||||
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.events.EventNewHistoryData;
|
||||
import info.nightscout.androidaps.plugins.pump.medtronic.util.MedtronicUtil;
|
||||
import info.nightscout.androidaps.utils.JsonHelper;
|
||||
|
||||
|
||||
|
@ -251,8 +253,53 @@ public class TreatmentService extends OrmLiteBaseService<DatabaseHelper> {
|
|||
}
|
||||
}
|
||||
|
||||
// return true if new record is created
|
||||
|
||||
public UpdateReturn createOrUpdate(Treatment treatment, boolean fromNightScout) {
|
||||
try {
|
||||
treatment.date = DatabaseHelper.roundDateToSec(treatment.date);
|
||||
|
||||
Treatment existingTreatment = getRecord(treatment.pumpId, treatment.date);
|
||||
|
||||
if (existingTreatment==null) {
|
||||
getDao().create(treatment);
|
||||
if (L.isEnabled(L.DATATREATMENTS))
|
||||
log.debug("New record from: " + Source.getString(treatment.source) + " " + treatment.toString());
|
||||
DatabaseHelper.updateEarliestDataChange(treatment.date);
|
||||
scheduleTreatmentChange(treatment);
|
||||
return new UpdateReturn(true, true);
|
||||
} else {
|
||||
|
||||
if (existingTreatment.date==treatment.date) {
|
||||
// we will do update only, if entry changed
|
||||
if (!optionalTreatmentCopy(existingTreatment, treatment, fromNightScout)) {
|
||||
return new UpdateReturn(true, false);
|
||||
}
|
||||
getDao().update(existingTreatment);
|
||||
DatabaseHelper.updateEarliestDataChange(existingTreatment.date);
|
||||
scheduleTreatmentChange(treatment);
|
||||
return new UpdateReturn(true, false);
|
||||
} else {
|
||||
// date is different, we need to remove entry
|
||||
getDao().delete(existingTreatment);
|
||||
optionalTreatmentCopy(existingTreatment, treatment, fromNightScout);
|
||||
getDao().create(existingTreatment);
|
||||
DatabaseHelper.updateEarliestDataChange(existingTreatment.date);
|
||||
scheduleTreatmentChange(treatment);
|
||||
return new UpdateReturn(true, false); //updating a pump treatment with another one from the pump is not counted as clash
|
||||
}
|
||||
}
|
||||
|
||||
} catch (SQLException e) {
|
||||
log.error("Unhandled exception", e);
|
||||
}
|
||||
return new UpdateReturn(false, false);
|
||||
}
|
||||
|
||||
|
||||
|
||||
// return true if new record is created
|
||||
@Deprecated
|
||||
public UpdateReturn createOrUpdateOld(Treatment treatment, boolean fromNightScout) {
|
||||
try {
|
||||
Treatment old;
|
||||
treatment.date = DatabaseHelper.roundDateToSec(treatment.date);
|
||||
|
@ -379,6 +426,7 @@ public class TreatmentService extends OrmLiteBaseService<DatabaseHelper> {
|
|||
return new UpdateReturn(false, false);
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
private boolean preserveCarbsAndSMB(Treatment treatment, Treatment existingTreatment) {
|
||||
if (existingTreatment.isValid) {
|
||||
if (existingTreatment.carbs > 0 && treatment.carbs == 0) {
|
||||
|
@ -393,10 +441,93 @@ public class TreatmentService extends OrmLiteBaseService<DatabaseHelper> {
|
|||
return false;
|
||||
}
|
||||
|
||||
|
||||
private boolean optionalTreatmentCopy(Treatment oldTreatment, Treatment newTreatment, boolean fromNightScout) {
|
||||
|
||||
log.debug("optionalTreatmentCopy [old={}, new={}]", oldTreatment.toString(), newTreatment.toString());
|
||||
|
||||
boolean changed = false;
|
||||
|
||||
if (oldTreatment.date != newTreatment.date) {
|
||||
oldTreatment.date = newTreatment.date;
|
||||
changed = true;
|
||||
}
|
||||
|
||||
if (oldTreatment.isSMB != newTreatment.isSMB) {
|
||||
if (!oldTreatment.isSMB) {
|
||||
oldTreatment.isSMB = newTreatment.isSMB;
|
||||
changed = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (!isSame(oldTreatment.carbs, newTreatment.carbs)) {
|
||||
if (isSame(oldTreatment.carbs, 0.0d)) {
|
||||
oldTreatment.carbs = newTreatment.carbs;
|
||||
changed = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (oldTreatment.mealBolus != (oldTreatment.carbs > 0)) {
|
||||
oldTreatment.mealBolus = (oldTreatment.carbs > 0);
|
||||
changed = true;
|
||||
}
|
||||
|
||||
if (!isSame(oldTreatment.insulin, newTreatment.insulin)) {
|
||||
if (!fromNightScout) {
|
||||
oldTreatment.insulin = newTreatment.insulin;
|
||||
changed = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (!oldTreatment._id.equals(newTreatment._id)) {
|
||||
if (StringUtils.isBlank(oldTreatment._id)) {
|
||||
oldTreatment._id = newTreatment._id;
|
||||
changed = true;
|
||||
}
|
||||
}
|
||||
|
||||
int source = Source.NONE;
|
||||
|
||||
if (oldTreatment.pumpId==0) {
|
||||
if (newTreatment.pumpId > 0) {
|
||||
oldTreatment.pumpId=newTreatment.pumpId;
|
||||
source = Source.PUMP;
|
||||
changed = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (source==Source.NONE) {
|
||||
|
||||
if (oldTreatment.source == newTreatment.source) {
|
||||
source = oldTreatment.source;
|
||||
} else {
|
||||
source = (oldTreatment.source == Source.NIGHTSCOUT || newTreatment.source == Source.NIGHTSCOUT) ? Source.NIGHTSCOUT : Source.USER;
|
||||
}
|
||||
}
|
||||
|
||||
if (oldTreatment.source != source) {
|
||||
oldTreatment.source = source;
|
||||
changed = true;
|
||||
}
|
||||
|
||||
log.debug("optionalTreatmentCopy [changed={}, newAfterChange={}]", changed, oldTreatment.toString());
|
||||
return changed;
|
||||
}
|
||||
|
||||
|
||||
public static boolean isSame(Double d1, Double d2) {
|
||||
double diff = d1 - d2;
|
||||
|
||||
return (Math.abs(diff) <= 0.00001);
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
private void treatmentCopy(Treatment oldTreatment, Treatment newTreatment, boolean fromNightScout) {
|
||||
|
||||
log.debug("treatmentCopy [old={}, new={}]", oldTreatment.toString(), newTreatment.toString());
|
||||
|
||||
|
||||
|
||||
if (fromNightScout) {
|
||||
long pumpId_old = oldTreatment.pumpId;
|
||||
boolean isSMB = (oldTreatment.isSMB || newTreatment.isSMB);
|
||||
|
@ -421,6 +552,32 @@ public class TreatmentService extends OrmLiteBaseService<DatabaseHelper> {
|
|||
|
||||
}
|
||||
|
||||
|
||||
public Treatment getRecord(long pumpId, long date) {
|
||||
|
||||
Treatment record = null;
|
||||
|
||||
if (pumpId>0) {
|
||||
|
||||
record = getPumpRecordById(pumpId);
|
||||
|
||||
if (record != null) {
|
||||
return record;
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
record = getDao().queryForId(date);
|
||||
} catch (SQLException ex) {
|
||||
log.error("Error getting entry by id ({}", date);
|
||||
}
|
||||
|
||||
return record;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Returns the record for the given id, null if none, throws RuntimeException
|
||||
* if multiple records with the same pump id exist.
|
||||
|
|
Loading…
Reference in a new issue