diff options
author | Ben West <bewest@gmail.com> | 2016-03-31 15:27:57 -0700 |
---|---|---|
committer | Ben West <bewest@gmail.com> | 2016-03-31 15:27:57 -0700 |
commit | 12751d803cde318b75f848940c99889719129acd (patch) | |
tree | fc868892c61ba3fb9ee1021c2e792ed60fd2f413 | |
parent | d14218bd047f3162b2aad58a490a61e1a5eca9b9 (diff) | |
parent | c565013e7b7c78510f4445456dff5be4a5110a6b (diff) |
Merge pull request #2 from openaps/dev
bump version on next dev
-rw-r--r-- | dexcom_reader/constants.py | 4 | ||||
-rw-r--r-- | dexcom_reader/database_records.py | 15 | ||||
-rw-r--r-- | dexcom_reader/readdata.py | 47 | ||||
-rw-r--r-- | setup.py | 2 |
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 | |||
55 | READ_FIRMWARE_SETTINGS = 54 | 55 | READ_FIRMWARE_SETTINGS = 54 |
56 | READ_ENABLE_SETUP_WIZARD_FLAG = 55 | 56 | READ_ENABLE_SETUP_WIZARD_FLAG = 55 |
57 | READ_SETUP_WIZARD_STATE = 57 | 57 | READ_SETUP_WIZARD_STATE = 57 |
58 | MAX_COMMAND = 59 | 58 | READ_CHARGER_CURRENT_SETTING = 59 |
59 | WRITE_CHARGER_CURRENT_SETTING = 60 | ||
60 | MAX_COMMAND = 61 | ||
59 | MAX_POSSIBLE_COMMAND = 255 | 61 | MAX_POSSIBLE_COMMAND = 255 |
60 | 62 | ||
61 | EGV_VALUE_MASK = 1023 | 63 | EGV_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): | |||
137 | class EventRecord(GenericTimestampedRecord): | 137 | class 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): | |||
171 | class SensorRecord(GenericTimestampedRecord): | 172 | class 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 | ||
200 | class EGVRecord(GenericTimestampedRecord): | 191 | class 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) |
@@ -10,7 +10,7 @@ def readme(): | |||
10 | return f.read() | 10 | return f.read() |
11 | 11 | ||
12 | setup(name='dexcom_reader', | 12 | setup(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", |