summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen West <bewest@gmail.com>2016-03-31 15:27:57 -0700
committerBen West <bewest@gmail.com>2016-03-31 15:27:57 -0700
commit12751d803cde318b75f848940c99889719129acd (patch)
treefc868892c61ba3fb9ee1021c2e792ed60fd2f413
parentd14218bd047f3162b2aad58a490a61e1a5eca9b9 (diff)
parentc565013e7b7c78510f4445456dff5be4a5110a6b (diff)
Merge pull request #2 from openaps/dev
bump version on next dev
-rw-r--r--dexcom_reader/constants.py4
-rw-r--r--dexcom_reader/database_records.py15
-rw-r--r--dexcom_reader/readdata.py47
-rw-r--r--setup.py2
4 files changed, 50 insertions, 18 deletions
diff --git a/dexcom_reader/constants.py b/dexcom_reader/constants.py
index 2f60020..421c190 100644
--- a/dexcom_reader/constants.py
+++ b/dexcom_reader/constants.py
@@ -55,7 +55,9 @@ READ_HARDWARE_BOARD_ID = 49
55READ_FIRMWARE_SETTINGS = 54 55READ_FIRMWARE_SETTINGS = 54
56READ_ENABLE_SETUP_WIZARD_FLAG = 55 56READ_ENABLE_SETUP_WIZARD_FLAG = 55
57READ_SETUP_WIZARD_STATE = 57 57READ_SETUP_WIZARD_STATE = 57
58MAX_COMMAND = 59 58READ_CHARGER_CURRENT_SETTING = 59
59WRITE_CHARGER_CURRENT_SETTING = 60
60MAX_COMMAND = 61
59MAX_POSSIBLE_COMMAND = 255 61MAX_POSSIBLE_COMMAND = 255
60 62
61EGV_VALUE_MASK = 1023 63EGV_VALUE_MASK = 1023
diff --git a/dexcom_reader/database_records.py b/dexcom_reader/database_records.py
index 79ae323..8d471f4 100644
--- a/dexcom_reader/database_records.py
+++ b/dexcom_reader/database_records.py
@@ -137,6 +137,7 @@ class MeterRecord(GenericTimestampedRecord):
137class EventRecord(GenericTimestampedRecord): 137class EventRecord(GenericTimestampedRecord):
138 # sys_time,display_time,glucose,meter_time,crc 138 # sys_time,display_time,glucose,meter_time,crc
139 FORMAT = '<2I2c2IH' 139 FORMAT = '<2I2c2IH'
140 FIELDS = ['event_type', 'event_sub_type', 'event_value' ]
140 141
141 @property 142 @property
142 def event_type(self): 143 def event_type(self):
@@ -171,7 +172,7 @@ class EventRecord(GenericTimestampedRecord):
171class SensorRecord(GenericTimestampedRecord): 172class SensorRecord(GenericTimestampedRecord):
172 # uint, uint, uint, uint, ushort 173 # uint, uint, uint, uint, ushort
173 # (system_seconds, display_seconds, unfiltered, filtered, rssi, crc) 174 # (system_seconds, display_seconds, unfiltered, filtered, rssi, crc)
174 FORMAT = '<2IIIHH' 175 FORMAT = '<2IIIhH'
175 # (unfiltered, filtered, rssi) 176 # (unfiltered, filtered, rssi)
176 FIELDS = ['unfiltered', 'filtered', 'rssi'] 177 FIELDS = ['unfiltered', 'filtered', 'rssi']
177 @property 178 @property
@@ -184,17 +185,7 @@ class SensorRecord(GenericTimestampedRecord):
184 185
185 @property 186 @property
186 def rssi(self): 187 def rssi(self):
187 return self.data[3] 188 return self.data[4]
188
189 """
190 def to_dict (self):
191 return dict(display_time=self.display_time.isoformat( )
192 , system_time=self.system_time.isoformat( )
193 , unfiltered=self.unfiltered
194 , filtered=self.filtered
195 , rssi=self.rssi
196 )
197 """
198 189
199 190
200class EGVRecord(GenericTimestampedRecord): 191class EGVRecord(GenericTimestampedRecord):
diff --git a/dexcom_reader/readdata.py b/dexcom_reader/readdata.py
index 3009f37..cc02de3 100644
--- a/dexcom_reader/readdata.py
+++ b/dexcom_reader/readdata.py
@@ -151,12 +151,19 @@ class Dexcom(object):
151 return util.ReceiverTimeToTime(struct.unpack('I', rtc)[0]) 151 return util.ReceiverTimeToTime(struct.unpack('I', rtc)[0])
152 152
153 def ReadSystemTimeOffset(self): 153 def ReadSystemTimeOffset(self):
154 rtc = self.GenericReadCommand(constants.READ_SYSTEM_TIME_OFFSET).data 154 raw = self.GenericReadCommand(constants.READ_SYSTEM_TIME_OFFSET).data
155 return datetime.timedelta(seconds=struct.unpack('i', rtc)[0]) 155 return datetime.timedelta(seconds=struct.unpack('i', raw)[0])
156 156
157 def ReadDisplayTimeOffset(self): 157 def ReadDisplayTimeOffset(self):
158 rtc = self.GenericReadCommand(constants.READ_DISPLAY_TIME_OFFSET).data 158 raw = self.GenericReadCommand(constants.READ_DISPLAY_TIME_OFFSET).data
159 return datetime.timedelta(seconds=struct.unpack('i', rtc)[0]) 159 return datetime.timedelta(seconds=struct.unpack('i', raw)[0])
160
161 def WriteDisplayTimeOffset(self, offset=None):
162 payload = struct.pack('i', offset)
163 self.WriteCommand(constants.WRITE_DISPLAY_TIME_OFFSET, payload)
164 packet = self.readpacket()
165 return dict(ACK=ord(packet.command) == constants.ACK)
166
160 167
161 def ReadDisplayTime(self): 168 def ReadDisplayTime(self):
162 return self.ReadSystemTime() + self.ReadDisplayTimeOffset() 169 return self.ReadSystemTime() + self.ReadDisplayTimeOffset()
@@ -172,8 +179,40 @@ class Dexcom(object):
172 return CLOCK_MODE[ord(cm[0])] 179 return CLOCK_MODE[ord(cm[0])]
173 180
174 def ReadDeviceMode(self): 181 def ReadDeviceMode(self):
182 # ???
175 return self.GenericReadCommand(constants.READ_DEVICE_MODE).data 183 return self.GenericReadCommand(constants.READ_DEVICE_MODE).data
176 184
185 def ReadBlindedMode(self):
186 MODES = { 0: False }
187 raw = self.GenericReadCommand(constants.READ_BLINDED_MODE).data
188 mode = MODES.get(bytearray(raw)[0], True)
189 return mode
190
191 def ReadHardwareBoardId(self):
192 return self.GenericReadCommand(constants.READ_HARDWARE_BOARD_ID).data
193
194 def ReadEnableSetupWizardFlag (self):
195 # ???
196 return self.GenericReadCommand(constants.READ_ENABLE_SETUP_WIZARD_FLAG).data
197
198 def ReadSetupWizardState (self):
199 # ???
200 return self.GenericReadCommand(constants.READ_SETUP_WIZARD_STATE).data
201
202 def WriteChargerCurrentSetting (self, status):
203 MAP = ( 'Off', 'Power100mA', 'Power500mA', 'PowerMax', 'PowerSuspended' )
204 payload = str(bytearray([MAP.index(status)]))
205 self.WriteCommand(constants.WRITE_CHARGER_CURRENT_SETTING, payload)
206 packet = self.readpacket()
207 raw = bytearray(packet.data)
208 return dict(ACK=ord(packet.command) == constants.ACK, raw=list(raw))
209
210 def ReadChargerCurrentSetting (self):
211 MAP = ( 'Off', 'Power100mA', 'Power500mA', 'PowerMax', 'PowerSuspended' )
212 raw = bytearray(self.GenericReadCommand(constants.READ_CHARGER_CURRENT_SETTING).data)
213 return MAP[raw[0]]
214
215
177 def ReadManufacturingData(self): 216 def ReadManufacturingData(self):
178 data = self.ReadRecords('MANUFACTURING_DATA')[0].xmldata 217 data = self.ReadRecords('MANUFACTURING_DATA')[0].xmldata
179 return ET.fromstring(data) 218 return ET.fromstring(data)
diff --git a/setup.py b/setup.py
index 5de075a..3bad349 100644
--- a/setup.py
+++ b/setup.py
@@ -10,7 +10,7 @@ def readme():
10 return f.read() 10 return f.read()
11 11
12setup(name='dexcom_reader', 12setup(name='dexcom_reader',
13 version='0.0.7', # http://semver.org/ 13 version='0.0.8', # http://semver.org/
14 description='Audit, and inspect data from Dexcom G4.', 14 description='Audit, and inspect data from Dexcom G4.',
15 long_description=readme(), 15 long_description=readme(),
16 author="Will Nowak", 16 author="Will Nowak",