From 46f2425bac8ff07044696335ef438f9c2c3697c8 Mon Sep 17 00:00:00 2001 From: Ben West Date: Mon, 23 Nov 2015 11:35:56 -0800 Subject: bump version on next dev --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 5de075a..3bad349 100644 --- a/setup.py +++ b/setup.py @@ -10,7 +10,7 @@ def readme(): return f.read() setup(name='dexcom_reader', - version='0.0.7', # http://semver.org/ + version='0.0.8', # http://semver.org/ description='Audit, and inspect data from Dexcom G4.', long_description=readme(), author="Will Nowak", -- cgit v1.2.3 From dcfec77c984ae747b6d4bab29f9b8cbb1eeb1b6b Mon Sep 17 00:00:00 2001 From: Ben West Date: Fri, 8 Jan 2016 13:08:42 -0800 Subject: improve Sensor records: make rssi signed --- dexcom_reader/database_records.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dexcom_reader/database_records.py b/dexcom_reader/database_records.py index 79ae323..710271f 100644 --- a/dexcom_reader/database_records.py +++ b/dexcom_reader/database_records.py @@ -171,7 +171,7 @@ class EventRecord(GenericTimestampedRecord): class SensorRecord(GenericTimestampedRecord): # uint, uint, uint, uint, ushort # (system_seconds, display_seconds, unfiltered, filtered, rssi, crc) - FORMAT = '<2IIIHH' + FORMAT = '<2IIIhH' # (unfiltered, filtered, rssi) FIELDS = ['unfiltered', 'filtered', 'rssi'] @property @@ -184,7 +184,7 @@ class SensorRecord(GenericTimestampedRecord): @property def rssi(self): - return self.data[3] + return self.data[4] """ def to_dict (self): -- cgit v1.2.3 From a1ba78211092766ae55e2cf5fcf17fa51bd152c2 Mon Sep 17 00:00:00 2001 From: Ben West Date: Fri, 8 Jan 2016 13:09:15 -0800 Subject: eliminate redundant/commented code --- dexcom_reader/database_records.py | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/dexcom_reader/database_records.py b/dexcom_reader/database_records.py index 710271f..09c0aca 100644 --- a/dexcom_reader/database_records.py +++ b/dexcom_reader/database_records.py @@ -186,16 +186,6 @@ class SensorRecord(GenericTimestampedRecord): def rssi(self): return self.data[4] - """ - def to_dict (self): - return dict(display_time=self.display_time.isoformat( ) - , system_time=self.system_time.isoformat( ) - , unfiltered=self.unfiltered - , filtered=self.filtered - , rssi=self.rssi - ) - """ - class EGVRecord(GenericTimestampedRecord): # uint, uint, ushort, byte, ushort -- cgit v1.2.3 From aacf99186a23f4c1134d506faebba535d2192328 Mon Sep 17 00:00:00 2001 From: Ben West Date: Tue, 12 Jan 2016 13:36:49 -0800 Subject: try to export fields on user event data types --- dexcom_reader/database_records.py | 1 + 1 file changed, 1 insertion(+) diff --git a/dexcom_reader/database_records.py b/dexcom_reader/database_records.py index 09c0aca..8d471f4 100644 --- a/dexcom_reader/database_records.py +++ b/dexcom_reader/database_records.py @@ -137,6 +137,7 @@ class MeterRecord(GenericTimestampedRecord): class EventRecord(GenericTimestampedRecord): # sys_time,display_time,glucose,meter_time,crc FORMAT = '<2I2c2IH' + FIELDS = ['event_type', 'event_sub_type', 'event_value' ] @property def event_type(self): -- cgit v1.2.3 From 21419e7221a23f0739c595fb049d1067635ef1d2 Mon Sep 17 00:00:00 2001 From: Ben West Date: Mon, 14 Mar 2016 18:15:13 -0700 Subject: add newer commands Found from https://github.com/nightscout/lasso/blob/master/core/src/main/java/com/nightscout/core/dexcom/Command.java --- dexcom_reader/constants.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) 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 READ_FIRMWARE_SETTINGS = 54 READ_ENABLE_SETUP_WIZARD_FLAG = 55 READ_SETUP_WIZARD_STATE = 57 -MAX_COMMAND = 59 +READ_CHARGER_CURRENT_SETTING = 59 +WRITE_CHARGER_CURRENT_SETTING = 60 +MAX_COMMAND = 61 MAX_POSSIBLE_COMMAND = 255 EGV_VALUE_MASK = 1023 -- cgit v1.2.3 From aba0b700ef44b65b7a2ecf60de81241b731927f3 Mon Sep 17 00:00:00 2001 From: Ben West Date: Mon, 14 Mar 2016 19:29:17 -0700 Subject: add four more read commands --- dexcom_reader/readdata.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/dexcom_reader/readdata.py b/dexcom_reader/readdata.py index 3009f37..9fa60a5 100644 --- a/dexcom_reader/readdata.py +++ b/dexcom_reader/readdata.py @@ -172,8 +172,27 @@ class Dexcom(object): return CLOCK_MODE[ord(cm[0])] def ReadDeviceMode(self): + # ??? return self.GenericReadCommand(constants.READ_DEVICE_MODE).data + def ReadBlindedMode(self): + MODES = { 0: False } + raw = self.GenericReadCommand(constants.READ_BLINDED_MODE).data + mode = MODES.get(bytearray(raw)[0], True) + return mode + + def ReadHardwareBoardId(self): + return self.GenericReadCommand(constants.READ_HARDWARE_BOARD_ID).data + + def ReadEnableSetupWizardFlag (self): + # ??? + return self.GenericReadCommand(constants.READ_ENABLE_SETUP_WIZARD_FLAG).data + + def ReadSetupWizardState (self): + # ??? + return self.GenericReadCommand(constants.READ_SETUP_WIZARD_STATE).data + + def ReadManufacturingData(self): data = self.ReadRecords('MANUFACTURING_DATA')[0].xmldata return ET.fromstring(data) -- cgit v1.2.3 From b9c31db6f8e2e7f1d92dc8fb9f6a092ec8e2e9cd Mon Sep 17 00:00:00 2001 From: Ben West Date: Tue, 15 Mar 2016 14:59:51 -0700 Subject: read ChargerCurrent settings --- dexcom_reader/readdata.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/dexcom_reader/readdata.py b/dexcom_reader/readdata.py index 9fa60a5..35d6318 100644 --- a/dexcom_reader/readdata.py +++ b/dexcom_reader/readdata.py @@ -192,6 +192,11 @@ class Dexcom(object): # ??? return self.GenericReadCommand(constants.READ_SETUP_WIZARD_STATE).data + def ReadChargerCurrentSetting (self): + MAP = ( 'Unknown', 'Power100mA', 'Power500mA', 'PowerMax', 'PowerSuspended' ) + raw = bytearray(self.GenericReadCommand(constants.READ_CHARGER_CURRENT_SETTING).data) + return MAP[raw[0]] + def ReadManufacturingData(self): data = self.ReadRecords('MANUFACTURING_DATA')[0].xmldata -- cgit v1.2.3 From 8b9ee35f1a9fd5f23306f792db37c73fe7d7ed9f Mon Sep 17 00:00:00 2001 From: Ben West Date: Tue, 15 Mar 2016 15:48:16 -0700 Subject: add support for WriteDisplayTimeOffset: update clock! Allow updating clock on the receiver. --- dexcom_reader/readdata.py | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/dexcom_reader/readdata.py b/dexcom_reader/readdata.py index 35d6318..b044a3b 100644 --- a/dexcom_reader/readdata.py +++ b/dexcom_reader/readdata.py @@ -151,12 +151,19 @@ class Dexcom(object): return util.ReceiverTimeToTime(struct.unpack('I', rtc)[0]) def ReadSystemTimeOffset(self): - rtc = self.GenericReadCommand(constants.READ_SYSTEM_TIME_OFFSET).data - return datetime.timedelta(seconds=struct.unpack('i', rtc)[0]) + raw = self.GenericReadCommand(constants.READ_SYSTEM_TIME_OFFSET).data + return datetime.timedelta(seconds=struct.unpack('i', raw)[0]) def ReadDisplayTimeOffset(self): - rtc = self.GenericReadCommand(constants.READ_DISPLAY_TIME_OFFSET).data - return datetime.timedelta(seconds=struct.unpack('i', rtc)[0]) + raw = self.GenericReadCommand(constants.READ_DISPLAY_TIME_OFFSET).data + return datetime.timedelta(seconds=struct.unpack('i', raw)[0]) + + def WriteDisplayTimeOffset(self, offset=None): + payload = struct.pack('i', offset) + self.WriteCommand(constants.WRITE_DISPLAY_TIME_OFFSET, payload) + packet = self.readpacket() + return dict(ACK=ord(packet.command) == constants.ACK) + def ReadDisplayTime(self): return self.ReadSystemTime() + self.ReadDisplayTimeOffset() -- cgit v1.2.3 From c565013e7b7c78510f4445456dff5be4a5110a6b Mon Sep 17 00:00:00 2001 From: Ben West Date: Tue, 15 Mar 2016 16:56:17 -0700 Subject: add WriteChargerCurrentSetting Allows turning off the usb charging. --- dexcom_reader/readdata.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/dexcom_reader/readdata.py b/dexcom_reader/readdata.py index b044a3b..cc02de3 100644 --- a/dexcom_reader/readdata.py +++ b/dexcom_reader/readdata.py @@ -199,8 +199,16 @@ class Dexcom(object): # ??? return self.GenericReadCommand(constants.READ_SETUP_WIZARD_STATE).data + def WriteChargerCurrentSetting (self, status): + MAP = ( 'Off', 'Power100mA', 'Power500mA', 'PowerMax', 'PowerSuspended' ) + payload = str(bytearray([MAP.index(status)])) + self.WriteCommand(constants.WRITE_CHARGER_CURRENT_SETTING, payload) + packet = self.readpacket() + raw = bytearray(packet.data) + return dict(ACK=ord(packet.command) == constants.ACK, raw=list(raw)) + def ReadChargerCurrentSetting (self): - MAP = ( 'Unknown', 'Power100mA', 'Power500mA', 'PowerMax', 'PowerSuspended' ) + MAP = ( 'Off', 'Power100mA', 'Power500mA', 'PowerMax', 'PowerSuspended' ) raw = bytearray(self.GenericReadCommand(constants.READ_CHARGER_CURRENT_SETTING).data) return MAP[raw[0]] -- cgit v1.2.3