Skip to content

Commit 576055c

Browse files
committed
Merge pull request openaps#6 from openaps/wip/g5
Wip/g5
2 parents cf10d70 + ea9d852 commit 576055c

File tree

2 files changed

+43
-5
lines changed

2 files changed

+43
-5
lines changed

dexcom_reader/database_records.py

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,12 +103,16 @@ def insertion_time(self):
103103
def session_state(self):
104104
states = [None, 'REMOVED', 'EXPIRED', 'RESIDUAL_DEVIATION',
105105
'COUNTS_DEVIATION', 'SECOND_SESSION', 'OFF_TIME_LOSS',
106-
'STARTED', 'BAD_TRANSMITTER', 'MANUFACTURING_MODE']
106+
'STARTED', 'BAD_TRANSMITTER', 'MANUFACTURING_MODE',
107+
'UNKNOWN1', 'UNKNOWN2', 'UNKNOWN3', 'UNKNOWN4', 'UNKNOWN5',
108+
'UNKNOWN6', 'UNKNOWN7', 'UNKNOWN8']
107109
return states[ord(self.data[3])]
108110

109111
def __repr__(self):
110112
return '%s: state=%s' % (self.display_time, self.session_state)
111113

114+
class G5InsertionRecord (InsertionRecord):
115+
FORMAT = '<3Ic10BH'
112116

113117
class Calibration(GenericTimestampedRecord):
114118
FORMAT = '<2Iddd3cdb'
@@ -182,6 +186,12 @@ def to_dict (self):
182186
def crc(self):
183187
return struct.unpack('H', self.raw_data[-2:])[0]
184188

189+
class LegacyCalibration (Calibration):
190+
@classmethod
191+
def _ClassSize(cls):
192+
193+
return cls.LEGACY_SIZE
194+
185195

186196
class SubCal (GenericTimestampedRecord):
187197
FORMAT = '<IIIIc'
@@ -219,6 +229,8 @@ def meter_time(self):
219229
def __repr__(self):
220230
return '%s: Meter BG:%s' % (self.display_time, self.meter_glucose)
221231

232+
class G5MeterRecord (MeterRecord):
233+
FORMAT = '<2IHI5BH'
222234

223235
class EventRecord(GenericTimestampedRecord):
224236
# sys_time,display_time,glucose,meter_time,crc
@@ -316,3 +328,11 @@ def __repr__(self):
316328
else:
317329
return '%s: CGM BG:%s (%s) DO:%s' % (self.display_time, self.glucose,
318330
self.trend_arrow, self.display_only)
331+
332+
class G5EGVRecord (EGVRecord):
333+
FORMAT = '<2IHBBBBBBBBBcBH'
334+
@property
335+
def full_trend(self):
336+
return self.data[12]
337+
338+

dexcom_reader/readdata.py

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -266,17 +266,21 @@ def GenericRecordYielder(self, header, data, record_type):
266266
for x in xrange(header[1]):
267267
yield record_type.Create(data, x)
268268

269-
def ParsePage(self, header, data):
270-
record_type = constants.RECORD_TYPES[ord(header[2])]
271-
revision = int(header[3])
272-
generic_parser_map = {
269+
PARSER_MAP = {
273270
'USER_EVENT_DATA': database_records.EventRecord,
274271
'METER_DATA': database_records.MeterRecord,
275272
'CAL_SET': database_records.Calibration,
273+
# 'CAL_SET': database_records.Calibration,
276274
'INSERTION_TIME': database_records.InsertionRecord,
277275
'EGV_DATA': database_records.EGVRecord,
278276
'SENSOR_DATA': database_records.SensorRecord,
279277
}
278+
def ParsePage(self, header, data):
279+
record_type = constants.RECORD_TYPES[ord(header[2])]
280+
revision = int(header[3])
281+
generic_parser_map = self.PARSER_MAP
282+
if revision < 2 and record_type == 'CAL_SET':
283+
generic_parser_map.update(CAL_SET=database_records.LegacyCalibration)
280284
xml_parsed = ['PC_SOFTWARE_PARAMETER', 'MANUFACTURING_DATA']
281285
if record_type in generic_parser_map:
282286
return self.GenericRecordYielder(header, data,
@@ -310,6 +314,20 @@ def ReadRecords(self, record_type):
310314
records.extend(self.ReadDatabasePage(record_type, x))
311315
return records
312316

317+
class DexcomG5 (Dexcom):
318+
PARSER_MAP = {
319+
'USER_EVENT_DATA': database_records.EventRecord,
320+
'METER_DATA': database_records.G5MeterRecord,
321+
'CAL_SET': database_records.Calibration,
322+
'INSERTION_TIME': database_records.G5InsertionRecord,
323+
'EGV_DATA': database_records.G5EGVRecord,
324+
'SENSOR_DATA': database_records.SensorRecord,
325+
}
326+
327+
def GetDevice (port, G5=False):
328+
if G5:
329+
return DexcomG5(port)
330+
return Dexcom(port)
313331

314332
if __name__ == '__main__':
315333
Dexcom.LocateAndDownload()

0 commit comments

Comments
 (0)