use of com.eveningoutpost.dexdrip.ImportedLibraries.dexcom.records.EGVRecord in project xDrip-plus by jamorham.
the class ReadDataShare method ParsePage.
private <T> T ParsePage(byte[] data, int recordType, Action1<T> parsedPageReceiver) {
int HEADER_LEN = 28;
PageHeader pageHeader = new PageHeader(data);
int NUM_REC_OFFSET = 4;
int numRec = data[NUM_REC_OFFSET];
int rec_len;
switch(Constants.RECORD_TYPES.values()[recordType]) {
case MANUFACTURING_DATA:
GenericXMLRecord xmlRecord = new GenericXMLRecord(Arrays.copyOfRange(data, HEADER_LEN, data.length - 1));
if (parsedPageReceiver != null) {
Observable.just((T) xmlRecord).subscribe(parsedPageReceiver);
} else {
return (T) xmlRecord;
}
break;
case SENSOR_DATA:
rec_len = 20;
SensorRecord[] sensorRecords = new SensorRecord[numRec];
for (int i = 0; i < numRec; i++) {
int startIdx = HEADER_LEN + rec_len * i;
sensorRecords[i] = new SensorRecord(Arrays.copyOfRange(data, startIdx, startIdx + rec_len - 1));
}
if (parsedPageReceiver != null) {
Observable.just((T) sensorRecords).subscribe(parsedPageReceiver);
} else {
return (T) sensorRecords;
}
break;
case EGV_DATA:
rec_len = 13;
EGVRecord[] egvRecords = new EGVRecord[numRec];
for (int i = 0; i < numRec; i++) {
int startIdx = HEADER_LEN + rec_len * i;
egvRecords[i] = new EGVRecord(Arrays.copyOfRange(data, startIdx, startIdx + rec_len - 1));
}
if (parsedPageReceiver != null) {
Observable.just((T) egvRecords).subscribe(parsedPageReceiver);
} else {
return (T) egvRecords;
}
break;
case METER_DATA:
rec_len = 16;
MeterRecord[] meterRecords = new MeterRecord[numRec];
for (int i = 0; i < numRec; i++) {
int startIdx = HEADER_LEN + rec_len * i;
meterRecords[i] = new MeterRecord(Arrays.copyOfRange(data, startIdx, startIdx + rec_len - 1));
}
if (parsedPageReceiver != null) {
Observable.just((T) meterRecords).subscribe(parsedPageReceiver);
} else {
return (T) meterRecords;
}
break;
case CAL_SET:
rec_len = 249;
if (pageHeader.getRevision() <= 2) {
rec_len = 148;
}
CalRecord[] calRecords = new CalRecord[numRec];
for (int i = 0; i < numRec; i++) {
int startIdx = HEADER_LEN + rec_len * i;
calRecords[i] = new CalRecord(Arrays.copyOfRange(data, startIdx, startIdx + rec_len - 1));
}
if (parsedPageReceiver != null) {
Observable.just((T) calRecords).subscribe(parsedPageReceiver);
} else {
return (T) calRecords;
}
break;
default:
break;
}
Observable.just((T) null).subscribe(parsedPageReceiver);
return (T) null;
}
use of com.eveningoutpost.dexdrip.ImportedLibraries.dexcom.records.EGVRecord in project xDrip-plus by jamorham.
the class DexShareCollectionService method attemptRead.
public void attemptRead() {
PowerManager powerManager = (PowerManager) getApplicationContext().getSystemService(Context.POWER_SERVICE);
final PowerManager.WakeLock wakeLock1 = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "ReadingShareData");
wakeLock1.acquire(60000);
requestHighPriority();
Log.d(TAG, "Attempting to read data");
final Action1<Long> systemTimeListener = new Action1<Long>() {
@Override
public void call(Long s) {
if (s != null) {
Log.d(TAG, "Made the full round trip, got " + s + " as the system time");
final long additiveSystemTimeOffset = new Date().getTime() - s;
final Action1<Long> dislpayTimeListener = new Action1<Long>() {
@Override
public void call(Long s) {
if (s != null) {
Log.d(TAG, "Made the full round trip, got " + s + " as the display time offset");
final long addativeDisplayTimeOffset = additiveSystemTimeOffset - (s * 1000);
Log.d(TAG, "Making " + addativeDisplayTimeOffset + " the the total time offset");
final Action1<EGVRecord[]> evgRecordListener = new Action1<EGVRecord[]>() {
@Override
public void call(EGVRecord[] egvRecords) {
if (egvRecords != null) {
Log.d(TAG, "Made the full round trip, got " + egvRecords.length + " EVG Records");
BgReading.create(egvRecords, additiveSystemTimeOffset, getApplicationContext());
statusErrors = 0;
{
Log.d(TAG, "Releasing wl in egv");
requestLowPriority();
if (wakeLock1 != null && wakeLock1.isHeld())
wakeLock1.release();
Log.d(TAG, "released");
}
if (shouldDisconnect) {
stopSelf();
} else {
setRetryTimer();
}
}
}
};
final Action1<SensorRecord[]> sensorRecordListener = new Action1<SensorRecord[]>() {
@Override
public void call(SensorRecord[] sensorRecords) {
if (sensorRecords != null) {
Log.d(TAG, "Made the full round trip, got " + sensorRecords.length + " Sensor Records");
BgReading.create(sensorRecords, additiveSystemTimeOffset, getApplicationContext());
statusErrors = 0;
readData.getRecentEGVs(evgRecordListener);
}
}
};
final Action1<CalRecord[]> calRecordListener = new Action1<CalRecord[]>() {
@Override
public void call(CalRecord[] calRecords) {
if (calRecords != null) {
Log.d(TAG, "Made the full round trip, got " + calRecords.length + " Cal Records");
Calibration.create(calRecords, addativeDisplayTimeOffset, getApplicationContext());
statusErrors = 0;
readData.getRecentSensorRecords(sensorRecordListener);
}
}
};
readData.getRecentCalRecords(calRecordListener);
} else if (wakeLock1 != null && wakeLock1.isHeld())
wakeLock1.release();
}
};
readData.readDisplayTimeOffset(dislpayTimeListener);
} else if (wakeLock1 != null && wakeLock1.isHeld())
wakeLock1.release();
}
};
readData.readSystemTime(systemTimeListener);
}
Aggregations