package com.nightscout.core.dexcom.records; import com.nightscout.core.dexcom.TrendArrow; import com.nightscout.core.model.GlucoseUnit; import com.nightscout.core.model.SensorEntry; import com.nightscout.core.model.SensorGlucoseValueEntry; import com.nightscout.core.utils.GlucoseReading; import com.squareup.wire.Message; import org.joda.time.DateTime; public class GlucoseDataSet extends GenericTimestampRecord { private long sensorRawSystemTime; private long sensorRawDisplayTime; private GlucoseReading reading; private TrendArrow trend; private int noise; private long unfiltered; private long filtered; private int rssi; public GlucoseDataSet(SensorGlucoseValueEntry egvRecord, long receiverTime, long referenceTime) { super(egvRecord.sys_timestamp_sec, egvRecord.disp_timestamp_sec, receiverTime, referenceTime); reading = new GlucoseReading(egvRecord.sgv_mgdl, GlucoseUnit.MGDL); trend = TrendArrow.values()[egvRecord.trend.ordinal()]; noise = egvRecord.noise.ordinal(); setRecordType(); } public GlucoseDataSet(EGVRecord egvRecord) { super(egvRecord.getSystemTime(), egvRecord.getDisplayTime(), egvRecord.getWallTime()); reading = egvRecord.getReading(); trend = egvRecord.getTrend(); noise = egvRecord.getNoiseMode().ordinal(); setRecordType(); } public GlucoseDataSet(EGVRecord egvRecord, SensorRecord sensorRecord) { this(egvRecord); this.sensorRawSystemTime = sensorRecord.getRawSystemTimeSeconds(); this.sensorRawDisplayTime = sensorRecord.getRawDisplayTimeSeconds(); // TODO check times match between record unfiltered = sensorRecord.getUnfiltered(); filtered = sensorRecord.getFiltered(); rssi = sensorRecord.getRssi(); setRecordType(); } public GlucoseDataSet(SensorGlucoseValueEntry egvRecord, SensorEntry sensorRecord, long receiverTimestamp, long referenceTime) { super(egvRecord.disp_timestamp_sec, egvRecord.sys_timestamp_sec, receiverTimestamp, referenceTime); this.sensorRawSystemTime = sensorRecord.sys_timestamp_sec; this.sensorRawDisplayTime = sensorRecord.disp_timestamp_sec; this.reading = new GlucoseReading(egvRecord.sgv_mgdl, GlucoseUnit.MGDL); this.trend = TrendArrow.values()[egvRecord.trend.ordinal()]; this.noise = egvRecord.noise.ordinal(); this.unfiltered = sensorRecord.unfiltered; this.filtered = sensorRecord.filtered; this.rssi = sensorRecord.rssi; setRecordType(); } public boolean areRecordsMatched() { return Math.abs(sensorRawSystemTime - rawSystemTimeSeconds) <= 10; } public long getRawDisplayTimeEgv() { return rawDisplayTimeSeconds; } public long getRawSysemTimeEgv() { return rawSystemTimeSeconds; } public long getSensorRawSystemTime() { return sensorRawSystemTime; } public long getSensorRawDisplayTime() { return sensorRawDisplayTime; } public DateTime getSystemTime() { return systemTime; } public DateTime getDisplayTime() { return displayTime; } public int getBgMgdl() { return reading.asMgdl(); } public GlucoseReading getReading() { return reading; } public TrendArrow getTrend() { return trend; } public String getTrendSymbol() { return trend.symbol(); } public int getNoise() { return noise; } public long getUnfiltered() { return unfiltered; } public long getFiltered() { return filtered; } public int getRssi() { return rssi; } public DateTime getWallTime() { return wallTime; } @Override protected Message toProtobuf() { return null; } @Override protected void setRecordType() { this.recordType = "sgv"; } }