From 3f79163b8f350ef7fc0d9a546e8261a282d493b7 Mon Sep 17 00:00:00 2001
From: Lennart Goedhart <lennart@omnibase.com.au>
Date: Sat, 14 May 2016 20:56:46 +1000
Subject: [PATCH] - Hopefully fix timezone issues (works for Australia now,
 anyway) - Refactor MedtronicNG class names - Add support for uploading Pump
 status to Nightscout (pump battery, IOB, reservoir level)

---
 .idea/workspace.xml                           | 367 +++++++++++++++---
 .../android/dexcom/DexcomG4Activity.java      |  13 +-
 .../android/medtronic/MedtronicCNLReader.java |  43 +-
 .../medtronic/message/MessageUtils.java       |  16 +-
 .../service/MedtronicCNLService.java          |  15 +-
 .../android/upload/DeviceRecord.java          |   4 +-
 .../CGMRecord.java}                           |  24 +-
 .../upload/MedtronicNG/PumpStatusRecord.java  |  24 ++
 .../android/upload/UploadHelper.java          |  25 +-
 9 files changed, 415 insertions(+), 116 deletions(-)
 rename app/src/main/java/com/nightscout/android/upload/{Medtronic640gPumpRecord.java => MedtronicNG/CGMRecord.java} (74%)
 create mode 100644 app/src/main/java/com/nightscout/android/upload/MedtronicNG/PumpStatusRecord.java

diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index e6fff1f..a421251 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -10,10 +10,15 @@
   </component>
   <component name="ChangeListManager">
     <list default="true" id="ffce6e62-d498-4e17-b121-42833fbda3f5" name="Default" comment="">
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/misc.xml" afterPath="$PROJECT_DIR$/.idea/misc.xml" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/upload/MedtronicNG/PumpStatusRecord.java" />
+      <change type="MOVED" beforePath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/upload/Medtronic640gPumpRecord.java" afterPath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/upload/MedtronicNG/CGMRecord.java" />
       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/workspace.xml" afterPath="$PROJECT_DIR$/.idea/workspace.xml" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/data/CNLConfigDbHelper.java" afterPath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/data/CNLConfigDbHelper.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/dexcom/DexcomG4Activity.java" afterPath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/dexcom/DexcomG4Activity.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/MedtronicCNLReader.java" afterPath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/MedtronicCNLReader.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/MessageUtils.java" afterPath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/MessageUtils.java" />
       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/service/MedtronicCNLService.java" afterPath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/service/MedtronicCNLService.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/upload/DeviceRecord.java" afterPath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/upload/DeviceRecord.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/upload/UploadHelper.java" afterPath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/upload/UploadHelper.java" />
     </list>
     <ignored path="Medtronic640gUploader.iws" />
     <ignored path=".idea/workspace.xml" />
@@ -37,18 +42,30 @@
       <file leaf-file-name="DexcomG4Activity.java" pinned="false" current-in-tab="false">
         <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/dexcom/DexcomG4Activity.java">
           <provider selected="true" editor-type-id="text-editor">
-            <state vertical-scroll-proportion="0.0">
-              <caret line="72" column="0" selection-start-line="72" selection-start-column="0" selection-end-line="72" selection-end-column="0" />
+            <state vertical-scroll-proportion="75.55556">
+              <caret line="150" column="0" selection-start-line="150" selection-start-column="0" selection-end-line="150" selection-end-column="0" />
               <folding />
             </state>
           </provider>
         </entry>
       </file>
-      <file leaf-file-name="MedtronicCNLService.java" pinned="false" current-in-tab="true">
+      <file leaf-file-name="UploadHelper.java" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/upload/UploadHelper.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state vertical-scroll-proportion="-10.0">
+              <caret line="688" column="43" selection-start-line="688" selection-start-column="43" selection-end-line="688" selection-end-column="43" />
+              <folding>
+                <element signature="imports" expanded="true" />
+              </folding>
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="MedtronicCNLService.java" pinned="false" current-in-tab="false">
         <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/service/MedtronicCNLService.java">
           <provider selected="true" editor-type-id="text-editor">
-            <state vertical-scroll-proportion="2.0631971">
-              <caret line="102" column="55" selection-start-line="102" selection-start-column="55" selection-end-line="102" selection-end-column="55" />
+            <state vertical-scroll-proportion="-7.6296296">
+              <caret line="145" column="0" selection-start-line="145" selection-start-column="0" selection-end-line="145" selection-end-column="0" />
               <folding>
                 <element signature="imports" expanded="true" />
               </folding>
@@ -56,11 +73,21 @@
           </provider>
         </entry>
       </file>
-      <file leaf-file-name="MedtronicCNLReader.java" pinned="false" current-in-tab="false">
+      <file leaf-file-name="MedtronicCNLReader.java" pinned="false" current-in-tab="true">
         <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/MedtronicCNLReader.java">
           <provider selected="true" editor-type-id="text-editor">
-            <state vertical-scroll-proportion="-11.888889">
-              <caret line="359" column="97" selection-start-line="359" selection-start-column="71" selection-end-line="359" selection-end-column="97" />
+            <state vertical-scroll-proportion="0.59431523">
+              <caret line="332" column="0" selection-start-line="332" selection-start-column="0" selection-end-line="332" selection-end-column="0" />
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="PumpStatusRecord.java" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/upload/MedtronicNG/PumpStatusRecord.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state vertical-scroll-proportion="0.0">
+              <caret line="20" column="56" selection-start-line="20" selection-start-column="56" selection-end-line="20" selection-end-column="56" />
               <folding />
             </state>
           </provider>
@@ -1745,8 +1772,18 @@
         <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/dexcom/DexcomG4Service.java" />
         <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/data/CNLConfigDbHelper.java" />
         <option value="$PROJECT_DIR$/app/src/main/assets/logback.xml" />
-        <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/MedtronicCNLReader.java" />
+        <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/MessageUtils.java" />
+        <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/upload/Medtronic640gPumpRecord.java" />
+        <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/upload/Medtronic640gCGMRecord.java" />
+        <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/upload/Medtronic640gPumpStatusRecord.java" />
+        <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/upload/MedtronicNG/Medtronic640gCGMRecord.java" />
+        <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/upload/MedtronicNG/CGMRecord.java" />
+        <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/dexcom/DexcomG4Activity.java" />
         <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/service/MedtronicCNLService.java" />
+        <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/upload/DeviceRecord.java" />
+        <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/upload/UploadHelper.java" />
+        <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/upload/MedtronicNG/PumpStatusRecord.java" />
+        <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/MedtronicCNLReader.java" />
       </list>
     </option>
   </component>
@@ -1782,8 +1819,6 @@
     <panes>
       <pane id="PackagesPane" />
       <pane id="ProjectPane" />
-      <pane id="Scratches" />
-      <pane id="Scope" />
       <pane id="AndroidView">
         <subPane>
           <PATH>
@@ -1896,6 +1931,54 @@
               <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidPsiDirectoryNode" />
             </PATH_ELEMENT>
           </PATH>
+          <PATH>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="Medtronic640gUploader" />
+              <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidViewProjectNode" />
+            </PATH_ELEMENT>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="app" />
+              <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidModuleNode" />
+            </PATH_ELEMENT>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="java" />
+              <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidSourceTypeNode" />
+            </PATH_ELEMENT>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="android" />
+              <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidPsiDirectoryNode" />
+            </PATH_ELEMENT>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="upload" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+            </PATH_ELEMENT>
+          </PATH>
+          <PATH>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="Medtronic640gUploader" />
+              <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidViewProjectNode" />
+            </PATH_ELEMENT>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="app" />
+              <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidModuleNode" />
+            </PATH_ELEMENT>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="java" />
+              <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidSourceTypeNode" />
+            </PATH_ELEMENT>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="android" />
+              <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidPsiDirectoryNode" />
+            </PATH_ELEMENT>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="upload" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+            </PATH_ELEMENT>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="MedtronicNG" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+            </PATH_ELEMENT>
+          </PATH>
           <PATH>
             <PATH_ELEMENT>
               <option name="myItemId" value="Medtronic640gUploader" />
@@ -1982,16 +2065,26 @@
           </PATH>
         </subPane>
       </pane>
+      <pane id="Scope" />
+      <pane id="Scratches" />
     </panes>
   </component>
   <component name="PropertiesComponent">
     <property name="settings.editor.selected.configurable" value="android.sdk-updates" />
     <property name="settings.editor.splitter.proportion" value="0.2" />
-    <property name="SearchEverywhereHistoryKey" value="g4&#9;PSI&#9;JAVA://com.nightscout.android.dexcom.DexcomG4Activity&#10;cnlread&#9;PSI&#9;JAVA://com.nightscout.android.medtronic.MedtronicCNLReader" />
+    <property name="SearchEverywhereHistoryKey" value="uploa&#9;PSI&#9;JAVA://com.nightscout.android.upload.UploadHelper&#10;g4&#9;PSI&#9;JAVA://com.nightscout.android.dexcom.DexcomG4Activity&#10;cnlread&#9;PSI&#9;JAVA://com.nightscout.android.medtronic.MedtronicCNLReader" />
     <property name="android.project.structure.last.selected" value="app" />
     <property name="android.project.structure.proportion" value="0.15" />
     <property name="device.picker.selection" value="192.168.0.115:5555" />
   </component>
+  <component name="RecentsManager">
+    <key name="MoveClassesOrPackagesDialog.RECENTS_KEY">
+      <recent name="com.nightscout.android.upload.MedtronicNG" />
+    </key>
+    <key name="CopyClassDialog.RECENTS_KEY">
+      <recent name="com.nightscout.android.upload" />
+    </key>
+  </component>
   <component name="RunManager" selected="Android Application.640gUploader">
     <configuration default="true" type="AndroidRunConfigurationType" factoryName="Android Application">
       <module name="" />
@@ -2270,7 +2363,7 @@
   </component>
   <component name="ToolWindowManager">
     <frame x="0" y="23" width="1400" height="807" extended-state="0" />
-    <editor active="false" />
+    <editor active="true" />
     <layout>
       <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
       <window_info id="Messages" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.3299566" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
@@ -2278,28 +2371,28 @@
       <window_info id="Palette&#9;" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
       <window_info id="Capture Analysis" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
       <window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="true" content_ui="tabs" />
-      <window_info id="Android Monitor" active="true" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.53111434" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
-      <window_info id="Preview" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
+      <window_info id="Android Monitor" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.41678727" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
       <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
-      <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
+      <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.3299566" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
       <window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.3299566" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
       <window_info id="Captures" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
       <window_info id="Capture Tool" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
       <window_info id="Gradle Console" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="true" content_ui="tabs" />
       <window_info id="Designer" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
       <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.2496318" sideWeight="0.4949349" order="0" side_tool="false" content_ui="tabs" />
-      <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
+      <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.3299566" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
       <window_info id="Gradle" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
-      <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
+      <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.2496318" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
       <window_info id="Android Model" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="true" content_ui="tabs" />
       <window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="true" content_ui="tabs" />
-      <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
+      <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.39942113" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
       <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
       <window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
       <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="SLIDING" type="SLIDING" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
       <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
       <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
       <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
+      <window_info id="Preview" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
     </layout>
   </component>
   <component name="Vcs.Log.UiProperties">
@@ -2314,19 +2407,44 @@
     <option name="myLimit" value="2678400000" />
   </component>
   <component name="XDebuggerManager">
-    <breakpoint-manager />
+    <breakpoint-manager>
+      <breakpoints-dialog>
+        <breakpoints-dialog />
+      </breakpoints-dialog>
+      <option name="time" value="15" />
+    </breakpoint-manager>
     <watches-manager />
   </component>
   <component name="editorHistoryManager">
     <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/dexcom/DexcomG4Activity.java">
       <provider selected="true" editor-type-id="text-editor">
         <state vertical-scroll-proportion="0.0">
-          <caret line="72" column="0" selection-start-line="72" selection-start-column="0" selection-end-line="72" selection-end-column="0" />
+          <caret line="166" column="77" selection-start-line="166" selection-start-column="71" selection-end-line="166" selection-end-column="77" />
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/app/build.gradle">
+    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/upload/UploadHelper.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.0">
+          <caret line="397" column="29" selection-start-line="397" selection-start-column="17" selection-end-line="397" selection-end-column="29" />
+          <folding>
+            <element signature="imports" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/service/MedtronicCNLService.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.0">
+          <caret line="138" column="37" selection-start-line="138" selection-start-column="35" selection-end-line="138" selection-end-column="37" />
+          <folding>
+            <element signature="imports" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/MedtronicCNLReader.java">
       <provider selected="true" editor-type-id="text-editor">
         <state vertical-scroll-proportion="0.0">
           <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
@@ -2334,71 +2452,126 @@
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/MedtronicCNLReader.java">
+    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/dexcom/DexcomG4Activity.java">
       <provider selected="true" editor-type-id="text-editor">
         <state vertical-scroll-proportion="0.0">
-          <caret line="43" column="13" selection-start-line="43" selection-start-column="13" selection-end-line="43" selection-end-column="13" />
+          <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/CommandSenderThread.java">
+    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/upload/UploadHelper.java">
       <provider selected="true" editor-type-id="text-editor">
         <state vertical-scroll-proportion="0.0">
-          <caret line="31" column="22" selection-start-line="31" selection-start-column="22" selection-end-line="31" selection-end-column="22" />
+          <caret line="397" column="29" selection-start-line="397" selection-start-column="17" selection-end-line="397" selection-end-column="29" />
           <folding>
             <element signature="imports" expanded="true" />
           </folding>
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/app/src/main/res/values/strings.xml">
+    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/service/MedtronicCNLService.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="0.09803922">
-          <caret line="4" column="21" selection-start-line="4" selection-start-column="18" selection-end-line="4" selection-end-column="21" />
-          <folding />
+        <state vertical-scroll-proportion="0.0">
+          <caret line="138" column="37" selection-start-line="138" selection-start-column="35" selection-end-line="138" selection-end-column="37" />
+          <folding>
+            <element signature="imports" expanded="true" />
+          </folding>
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/app/src/main/AndroidManifest.xml">
+    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/dexcom/DexcomG4Activity.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="0.6103286">
-          <caret line="26" column="39" selection-start-line="26" selection-start-column="39" selection-end-line="26" selection-end-column="39" />
+        <state vertical-scroll-proportion="0.0">
+          <caret line="166" column="77" selection-start-line="166" selection-start-column="71" selection-end-line="166" selection-end-column="77" />
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/CommandSenderThread.java">
+    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/upload/UploadHelper.java">
       <provider selected="true" editor-type-id="text-editor">
         <state vertical-scroll-proportion="0.0">
-          <caret line="31" column="22" selection-start-line="31" selection-start-column="22" selection-end-line="31" selection-end-column="22" />
+          <caret line="397" column="29" selection-start-line="397" selection-start-column="17" selection-end-line="397" selection-end-column="29" />
           <folding>
             <element signature="imports" expanded="true" />
           </folding>
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/build.gradle">
+    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/service/MedtronicCNLService.java">
       <provider selected="true" editor-type-id="text-editor">
         <state vertical-scroll-proportion="0.0">
           <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+          <folding>
+            <element signature="imports" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/MedtronicCNLReader.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.0">
+          <caret line="329" column="11" selection-start-line="329" selection-start-column="11" selection-end-line="329" selection-end-column="11" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/dexcom/DexcomG4Activity.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.0">
+          <caret line="72" column="0" selection-start-line="72" selection-start-column="0" selection-end-line="72" selection-end-column="0" />
           <folding />
         </state>
       </provider>
     </entry>
     <entry file="file://$PROJECT_DIR$/app/build.gradle">
       <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="0.15837105">
-          <caret line="7" column="46" selection-start-line="7" selection-start-column="46" selection-end-line="7" selection-end-column="46" />
+        <state vertical-scroll-proportion="0.0">
+          <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/MedtronicCNLReader.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.0">
+          <caret line="43" column="13" selection-start-line="43" selection-start-column="13" selection-end-line="43" selection-end-column="13" />
           <folding />
         </state>
       </provider>
     </entry>
+    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/CommandSenderThread.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.0">
+          <caret line="31" column="22" selection-start-line="31" selection-start-column="22" selection-end-line="31" selection-end-column="22" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/app/src/main/res/values/strings.xml">
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.09803922">
+          <caret line="4" column="21" selection-start-line="4" selection-start-column="18" selection-end-line="4" selection-end-column="21" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/app/src/main/AndroidManifest.xml">
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.6103286">
+          <caret line="26" column="39" selection-start-line="26" selection-start-column="39" selection-end-line="26" selection-end-column="39" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/CommandSenderThread.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.0">
+          <caret line="31" column="22" selection-start-line="31" selection-start-column="22" selection-end-line="31" selection-end-column="22" />
+        </state>
+      </provider>
+    </entry>
     <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/USB/USBPower.java">
       <provider selected="true" editor-type-id="text-editor">
         <state vertical-scroll-proportion="0.33333334">
           <caret line="20" column="24" selection-start-line="20" selection-start-column="24" selection-end-line="20" selection-end-column="24" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -2406,7 +2579,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state vertical-scroll-proportion="0.0">
           <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -2414,7 +2586,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state vertical-scroll-proportion="0.0">
           <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -2422,7 +2593,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state vertical-scroll-proportion="0.7100372">
           <caret line="19" column="20" selection-start-line="19" selection-start-column="20" selection-end-line="19" selection-end-column="20" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -2430,7 +2600,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state vertical-scroll-proportion="0.09653092">
           <caret line="1373" column="13" selection-start-line="1373" selection-start-column="13" selection-end-line="1373" selection-end-column="13" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -2438,7 +2607,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state vertical-scroll-proportion="0.49019608">
           <caret line="119" column="25" selection-start-line="119" selection-start-column="25" selection-end-line="119" selection-end-column="25" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -2446,35 +2614,128 @@
       <provider selected="true" editor-type-id="text-editor">
         <state vertical-scroll-proportion="0.094339624">
           <caret line="104" column="25" selection-start-line="104" selection-start-column="20" selection-end-line="104" selection-end-column="25" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$USER_HOME$/Library/Android/sdk/sources/android-21/android/os/AsyncTask.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.33333334">
+          <caret line="348" column="30" selection-start-line="348" selection-start-column="30" selection-end-line="348" selection-end-column="30" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/app/build.gradle">
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.27131784">
+          <caret line="7" column="46" selection-start-line="7" selection-start-column="46" selection-end-line="7" selection-end-column="46" />
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/dexcom/DexcomG4Activity.java">
+    <entry file="file://$PROJECT_DIR$/build.gradle">
       <provider selected="true" editor-type-id="text-editor">
         <state vertical-scroll-proportion="0.0">
-          <caret line="72" column="0" selection-start-line="72" selection-start-column="0" selection-end-line="72" selection-end-column="0" />
+          <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/MedtronicCNLReader.java">
+    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/MessageUtils.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="1.3167421">
+          <caret line="65" column="94" selection-start-line="65" selection-start-column="94" selection-end-line="65" selection-end-column="94" />
+          <folding>
+            <element signature="imports" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$USER_HOME$/Library/Android/sdk/sources/android-21/android/text/format/DateUtils.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.33333334">
+          <caret line="61" column="28" selection-start-line="61" selection-start-column="28" selection-end-line="61" selection-end-column="28" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/upload/MedtronicPumpRecord.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.09049774">
+          <caret line="11" column="13" selection-start-line="11" selection-start-column="13" selection-end-line="11" selection-end-column="13" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/upload/GlucometerRecord.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.09049774">
+          <caret line="4" column="13" selection-start-line="4" selection-start-column="13" selection-end-line="4" selection-end-column="13" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/dexcom/DexcomG4Activity.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="-11.888889">
-          <caret line="359" column="97" selection-start-line="359" selection-start-column="71" selection-end-line="359" selection-end-column="97" />
+        <state vertical-scroll-proportion="75.55556">
+          <caret line="150" column="0" selection-start-line="150" selection-start-column="0" selection-end-line="150" selection-end-column="0" />
           <folding />
         </state>
       </provider>
     </entry>
+    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/upload/DeviceRecord.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.6511628">
+          <caret line="19" column="36" selection-start-line="19" selection-start-column="36" selection-end-line="19" selection-end-column="36" />
+          <folding>
+            <element signature="e#395#396#0" expanded="true" />
+            <element signature="e#430#431#0" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/upload/UploadHelper.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="-10.0">
+          <caret line="688" column="43" selection-start-line="688" selection-start-column="43" selection-end-line="688" selection-end-column="43" />
+          <folding>
+            <element signature="imports" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
     <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/service/MedtronicCNLService.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="2.0631971">
-          <caret line="102" column="55" selection-start-line="102" selection-start-column="55" selection-end-line="102" selection-end-column="55" />
+        <state vertical-scroll-proportion="-7.6296296">
+          <caret line="145" column="0" selection-start-line="145" selection-start-column="0" selection-end-line="145" selection-end-column="0" />
           <folding>
             <element signature="imports" expanded="true" />
           </folding>
         </state>
       </provider>
     </entry>
+    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/upload/MedtronicNG/CGMRecord.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.61085975">
+          <caret line="32" column="6" selection-start-line="32" selection-start-column="6" selection-end-line="32" selection-end-column="6" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/upload/MedtronicNG/PumpStatusRecord.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.0">
+          <caret line="20" column="56" selection-start-line="20" selection-start-column="56" selection-end-line="20" selection-end-column="56" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/MedtronicCNLReader.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.59431523">
+          <caret line="332" column="0" selection-start-line="332" selection-start-column="0" selection-end-line="332" selection-end-column="0" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
   </component>
 </project>
\ No newline at end of file
diff --git a/app/src/main/java/com/nightscout/android/dexcom/DexcomG4Activity.java b/app/src/main/java/com/nightscout/android/dexcom/DexcomG4Activity.java
index f183f11..d400107 100644
--- a/app/src/main/java/com/nightscout/android/dexcom/DexcomG4Activity.java
+++ b/app/src/main/java/com/nightscout/android/dexcom/DexcomG4Activity.java
@@ -42,7 +42,8 @@ import com.nightscout.android.medtronic.MedtronicConstants;
 import com.nightscout.android.medtronic.service.MedtronicCNLService;
 import com.nightscout.android.service.ServiceManager;
 import com.nightscout.android.settings.SettingsActivity;
-import com.nightscout.android.upload.Medtronic640gPumpRecord;
+import com.nightscout.android.upload.MedtronicNG.CGMRecord;
+import com.nightscout.android.upload.MedtronicNG.PumpStatusRecord;
 import com.nightscout.android.upload.Record;
 
 import org.slf4j.Logger;
@@ -81,6 +82,7 @@ public class DexcomG4Activity extends Activity implements OnSharedPreferenceChan
     private ServiceManager cgmService; // > service
     private int msgsDisplayed = 0;
     public static int batLevel = 0;
+    public static PumpStatusRecord pumpStatusRecord = new PumpStatusRecord();
     BatteryReceiver mArrow;
     IBinder bService = null;
     Intent batteryReceiver;
@@ -114,7 +116,7 @@ public class DexcomG4Activity extends Activity implements OnSharedPreferenceChan
                             display.setText(msg.obj.toString(), BufferType.EDITABLE);
                             break;
                         case MSG_DATA:
-                            Medtronic640gPumpRecord record = (Medtronic640gPumpRecord) msg.obj;
+                            CGMRecord record = (CGMRecord) msg.obj;
 
                             DecimalFormat df = null;
                             if (prefs.getBoolean("mmolDecimals", false))
@@ -146,8 +148,8 @@ public class DexcomG4Activity extends Activity implements OnSharedPreferenceChan
                             mDumpTextView.setText(Html.fromHtml(
                                 String.format( "<b>BGL at:</b> %s<br/><b>Pump Time:</b> %s<br/><b>Active Insulin: </b>%.3f<br/><b>Rate of Change: </b>%s",
                                     DateUtils.formatDateTime(getBaseContext(),record.sensorBGLDate.getTime(),DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_SHOW_TIME),
-                                    DateUtils.formatDateTime(getBaseContext(),record.pumpDate.getTime(),DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_SHOW_TIME),
-                                    record.activeInsulin,
+                                    DateUtils.formatDateTime(getBaseContext(),pumpStatusRecord.pumpDate.getTime(),DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_SHOW_TIME),
+                                    pumpStatusRecord.activeInsulin,
                                     record.direction
                                 )
                             ));
@@ -259,7 +261,6 @@ public class DexcomG4Activity extends Activity implements OnSharedPreferenceChan
             @Override
             public void onClick(View v) {
                 display.setKeyListener(null);
-                Log.d( TAG, "Pursh de butten" );
                 if( cgmService != null ) {
                     if (!cgmService.isRunning()) {
                         cgmService.start();
@@ -543,7 +544,7 @@ public class DexcomG4Activity extends Activity implements OnSharedPreferenceChan
 
     }
 
-    private String renderTrendHtml(Medtronic640gPumpRecord.TREND trend)
+    private String renderTrendHtml(CGMRecord.TREND trend)
     {
         switch( trend )
         {
diff --git a/app/src/main/java/com/nightscout/android/medtronic/MedtronicCNLReader.java b/app/src/main/java/com/nightscout/android/medtronic/MedtronicCNLReader.java
index 51abaf2..7ff4d9b 100644
--- a/app/src/main/java/com/nightscout/android/medtronic/MedtronicCNLReader.java
+++ b/app/src/main/java/com/nightscout/android/medtronic/MedtronicCNLReader.java
@@ -3,6 +3,7 @@ package com.nightscout.android.medtronic;
 import android.util.Log;
 
 import com.nightscout.android.USB.UsbHidDriver;
+import com.nightscout.android.dexcom.DexcomG4Activity;
 import com.nightscout.android.dexcom.USB.HexDump;
 import com.nightscout.android.medtronic.message.BeginEHSMMessage;
 import com.nightscout.android.medtronic.message.ChannelNegotiateMessage;
@@ -22,15 +23,15 @@ import com.nightscout.android.medtronic.message.PumpTimeResponseMessage;
 import com.nightscout.android.medtronic.message.ReadInfoResponseMessage;
 import com.nightscout.android.medtronic.message.UnexpectedMessageException;
 import com.nightscout.android.medtronic.service.MedtronicCNLService;
-import com.nightscout.android.upload.Medtronic640gPumpRecord;
+import com.nightscout.android.upload.MedtronicNG.CGMRecord;
 
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
+import java.math.BigDecimal;
 import java.nio.ByteBuffer;
 import java.nio.ByteOrder;
 import java.text.DateFormat;
 import java.text.SimpleDateFormat;
-import java.util.Calendar;
 import java.util.Date;
 import java.util.Locale;
 import java.util.TimeZone;
@@ -256,7 +257,7 @@ public class MedtronicCNLReader implements ContourNextLinkMessageHandler {
         readMessage();
     }
 
-    public void getPumpTime(Medtronic640gPumpRecord pumpRecord) throws EncryptionException, IOException, ChecksumException, TimeoutException {
+    public void getPumpTime(CGMRecord pumpRecord) throws EncryptionException, IOException, ChecksumException, TimeoutException {
         // FIXME - throw if not in EHSM mode (add a state machine)
 
         new PumpTimeRequestMessage(mPumpSession).send(this);
@@ -279,19 +280,15 @@ public class MedtronicCNLReader implements ContourNextLinkMessageHandler {
         long offset = dateBuffer.getInt(4);
 
         Date pumpDate = MessageUtils.decodeDateTime(rtc, offset);
-        // FIXME - HAX! Add 1 hour during AEST until we can figure out what Medtronic is doing
-        Calendar cal = Calendar.getInstance();
-        cal.setTime(pumpDate);
-        cal.add(Calendar.HOUR_OF_DAY, 1);
-        pumpDate = cal.getTime();
+
         // Set displayTime to be an ISO 8601 date (so that it's parsable).
         DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.US);
         dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
         pumpRecord.displayTime = dateFormat.format(pumpDate);
-        pumpRecord.pumpDate = pumpDate;
+        DexcomG4Activity.pumpStatusRecord.pumpDate = pumpDate;
     }
 
-    public void getPumpStatus(Medtronic640gPumpRecord pumpRecord) throws IOException, EncryptionException, ChecksumException, TimeoutException {
+    public void getPumpStatus(CGMRecord pumpRecord) throws IOException, EncryptionException, ChecksumException, TimeoutException {
         // FIXME - throw if not in EHSM mode (add a state machine)
 
         new PumpStatusRequestMessage(mPumpSession).send(this);
@@ -309,11 +306,12 @@ public class MedtronicCNLReader implements ContourNextLinkMessageHandler {
         // FIXME - this needs to go into PumpStatusResponseMessage
         ByteBuffer statusBuffer = ByteBuffer.allocate(96);
         statusBuffer.order(ByteOrder.BIG_ENDIAN);
-        statusBuffer.put(response.encode(), 57, 96);
+        statusBuffer.put(response.encode(), 0x39, 96);
 
         // Read the data into the record
-        pumpRecord.activeInsulin = (statusBuffer.getShort(51) & 0x0000ffff) / 10000f;
-        pumpRecord.sensorBGL = statusBuffer.getShort(53) & 0x0000ffff; // In mg/DL. 0 means no CGM reading
+        long rawActiveInsulin = statusBuffer.getShort(0x33) & 0x0000ffff;
+        DexcomG4Activity.pumpStatusRecord.activeInsulin = new BigDecimal( rawActiveInsulin / 10000f ).setScale(3, BigDecimal.ROUND_HALF_UP);
+        pumpRecord.sensorBGL = statusBuffer.getShort(0x35) & 0x0000ffff; // In mg/DL. 0 means no CGM reading
         long rtc;
         long offset;
         if( ( pumpRecord.sensorBGL & 0x200 ) == 0x200 ) {
@@ -321,19 +319,18 @@ public class MedtronicCNLReader implements ContourNextLinkMessageHandler {
             pumpRecord.sensorBGL = 0;
             rtc = 0;
             offset = 0;
+            pumpRecord.setTrend(CGMRecord.TREND.NOT_SET);
         } else {
-            rtc = statusBuffer.getInt(55) & 0x00000000ffffffffL;
-            offset = statusBuffer.getInt(59);
-            pumpRecord.setTrend(Medtronic640gPumpRecord.fromMessageByte( statusBuffer.get(64)));
+            rtc = statusBuffer.getInt(0x37) & 0x00000000ffffffffL;
+            offset = statusBuffer.getInt(0x3b);
+            pumpRecord.setTrend(CGMRecord.fromMessageByte( statusBuffer.get(0x40)));
         }
         pumpRecord.sensorBGLDate = MessageUtils.decodeDateTime(rtc, offset);
-        // FIXME - HAX! Add 1 hour during AEST until we can figure out what Medtronic is doing
-        Calendar cal = Calendar.getInstance();
-        cal.setTime(pumpRecord.sensorBGLDate);
-        cal.add(Calendar.HOUR_OF_DAY, 1);
-        pumpRecord.sensorBGLDate = cal.getTime();
-        pumpRecord.recentBolusWizard = statusBuffer.get(72) != 0;
-        pumpRecord.bolusWizardBGL = statusBuffer.getShort(73); // In mg/DL
+        DexcomG4Activity.pumpStatusRecord.recentBolusWizard = statusBuffer.get(0x48) != 0;
+        DexcomG4Activity.pumpStatusRecord.bolusWizardBGL = statusBuffer.getShort(0x49); // In mg/DL
+        long rawReservoirAmount = statusBuffer.getInt(0x2b) &  0xffffffff;
+        DexcomG4Activity.pumpStatusRecord.reservoirAmount = new BigDecimal( rawReservoirAmount / 10000f ).setScale(3, BigDecimal.ROUND_HALF_UP);
+        DexcomG4Activity.pumpStatusRecord.batteryPercentage = ( statusBuffer.get(0x2a) );
     }
 
     public void endEHSMSession() throws EncryptionException, IOException, TimeoutException {
diff --git a/app/src/main/java/com/nightscout/android/medtronic/message/MessageUtils.java b/app/src/main/java/com/nightscout/android/medtronic/message/MessageUtils.java
index ec28248..666a092 100644
--- a/app/src/main/java/com/nightscout/android/medtronic/message/MessageUtils.java
+++ b/app/src/main/java/com/nightscout/android/medtronic/message/MessageUtils.java
@@ -1,7 +1,7 @@
 package com.nightscout.android.medtronic.message;
 
+import java.util.Calendar;
 import java.util.Date;
-import java.util.GregorianCalendar;
 import java.util.TimeZone;
 
 /**
@@ -55,12 +55,18 @@ public class MessageUtils {
 
     public static Date decodeDateTime( long rtc, long offset ) {
         TimeZone currentTz = java.util.Calendar.getInstance().getTimeZone();
-        GregorianCalendar gregorianCalendar = new GregorianCalendar(2000, 0, 1, 0, 0, 0);
-        gregorianCalendar.setTimeZone(currentTz);
 
-        long epochTime = gregorianCalendar.getTime().getTime();
+        // Base time is midnight 1st Jan 2000 (GMT)
+        long baseTime = 946684800;
 
-        Date pumpDate = new Date(epochTime + (( rtc + offset ) * 1000 ) );
+        // The time from the pump represents epochTime in GMT, but we treat it as if it were in our own timezone
+        // We do this, because the pump does not have a concept of timezone
+        // For example, if baseTime + rtc + offset was 1463137668, this would be
+        // Fri, 13 May 2016 21:07:48 GMT.
+        // However, the time the pump *means* is Fri, 13 May 2016 21:07:48 in our own timezone
+        long offsetFromUTC = currentTz.getOffset(Calendar.getInstance().getTimeInMillis());
+
+        Date pumpDate = new Date((( baseTime + rtc + offset ) * 1000 ) - offsetFromUTC );
         return pumpDate;
     }
 }
diff --git a/app/src/main/java/com/nightscout/android/medtronic/service/MedtronicCNLService.java b/app/src/main/java/com/nightscout/android/medtronic/service/MedtronicCNLService.java
index eb183c1..1896fe7 100644
--- a/app/src/main/java/com/nightscout/android/medtronic/service/MedtronicCNLService.java
+++ b/app/src/main/java/com/nightscout/android/medtronic/service/MedtronicCNLService.java
@@ -28,7 +28,7 @@ import com.nightscout.android.medtronic.message.EncryptionException;
 import com.nightscout.android.medtronic.message.MessageUtils;
 import com.nightscout.android.medtronic.message.UnexpectedMessageException;
 import com.nightscout.android.service.AbstractService;
-import com.nightscout.android.upload.Medtronic640gPumpRecord;
+import com.nightscout.android.upload.MedtronicNG.CGMRecord;
 import com.nightscout.android.upload.UploadHelper;
 
 import java.io.File;
@@ -104,7 +104,7 @@ public class MedtronicCNLService extends AbstractService {
         mHidDevice = UsbHidDriver.acquire(mUsbManager, USB_VID, USB_PID);
 
         // Load the initial data to the display
-        Medtronic640gPumpRecord pumpRecord = loadData();
+        CGMRecord pumpRecord = loadData();
         send(Message.obtain(null, DexcomG4Activity.DexcomG4ActivityHandler.MSG_DATA, pumpRecord));
 
         if (!isOnline()) {
@@ -139,6 +139,9 @@ public class MedtronicCNLService extends AbstractService {
                 configDbHelper.insertStickSerial( cnlReader.getStickSerial() );
                 String hmac = configDbHelper.getHmac( cnlReader.getStickSerial() );
                 String key = configDbHelper.getKey( cnlReader.getStickSerial() );
+                String deviceName = String.format( "medtronic-640g://%s", cnlReader.getStickSerial() );
+                pumpRecord.setDeviceName( deviceName );
+                DexcomG4Activity.pumpStatusRecord.setDeviceName( deviceName );
 
                 if( hmac.equals( "" ) || key.equals("") ) {
                     send(Message.obtain(null, DexcomG4Activity.DexcomG4ActivityHandler.MSG_ERROR, "Before you can use the Contour Next Link, you need to register it with the app. Select 'Register USB Stick' from the menu."));
@@ -259,7 +262,7 @@ public class MedtronicCNLService extends AbstractService {
         nm.notify(R.string.app_name, n);
     }
 
-    private void writeData(Medtronic640gPumpRecord mostRecentData) {
+    private void writeData(CGMRecord mostRecentData) {
         //Write most recent data
         try {
             Context context = getBaseContext();
@@ -272,14 +275,14 @@ public class MedtronicCNLService extends AbstractService {
         }
     }
 
-    private Medtronic640gPumpRecord loadData() {
+    private CGMRecord loadData() {
         ObjectInputStream ois = null;
         try {
             Context context = getBaseContext();
             ois = new ObjectInputStream(new FileInputStream(new File(context.getFilesDir(), "save.bin")));
             Object o = ois.readObject();
             ois.close();
-            return (Medtronic640gPumpRecord) o;
+            return (CGMRecord) o;
         } catch (Exception ex) {
             Log.w(TAG, " unable to load Medtronic640g data");
             try {
@@ -289,6 +292,6 @@ public class MedtronicCNLService extends AbstractService {
                 Log.e(TAG, " Error closing ObjectInputStream");
             }
         }
-        return new Medtronic640gPumpRecord();
+        return new CGMRecord();
     }
 }
diff --git a/app/src/main/java/com/nightscout/android/upload/DeviceRecord.java b/app/src/main/java/com/nightscout/android/upload/DeviceRecord.java
index e7b6911..10f749f 100644
--- a/app/src/main/java/com/nightscout/android/upload/DeviceRecord.java
+++ b/app/src/main/java/com/nightscout/android/upload/DeviceRecord.java
@@ -16,7 +16,7 @@ public class DeviceRecord extends Record implements Serializable{
 	public String getDeviceName(){
 		return deviceName;
 	}
-	public String setDeviceName(){
-		return deviceName;
+	public void setDeviceName( String deviceName ){
+		this.deviceName = deviceName;
 	}
 }
diff --git a/app/src/main/java/com/nightscout/android/upload/Medtronic640gPumpRecord.java b/app/src/main/java/com/nightscout/android/upload/MedtronicNG/CGMRecord.java
similarity index 74%
rename from app/src/main/java/com/nightscout/android/upload/Medtronic640gPumpRecord.java
rename to app/src/main/java/com/nightscout/android/upload/MedtronicNG/CGMRecord.java
index 0ad7c2d..a0e1113 100644
--- a/app/src/main/java/com/nightscout/android/upload/Medtronic640gPumpRecord.java
+++ b/app/src/main/java/com/nightscout/android/upload/MedtronicNG/CGMRecord.java
@@ -1,4 +1,6 @@
-package com.nightscout.android.upload;
+package com.nightscout.android.upload.MedtronicNG;
+
+import com.nightscout.android.upload.DeviceRecord;
 
 import java.io.Serializable;
 import java.util.Date;
@@ -6,7 +8,7 @@ import java.util.Date;
 /**
  * Created by lgoedhart on 27/03/2016.
  */
-public class Medtronic640gPumpRecord extends DeviceRecord implements Serializable {
+public class CGMRecord extends DeviceRecord implements Serializable {
     public enum TREND {
         NONE(0),
         DOUBLE_UP(1),
@@ -22,29 +24,17 @@ public class Medtronic640gPumpRecord extends DeviceRecord implements Serializabl
 
         private byte value;
         TREND(int trend) {
-           this.value = (byte)value;
+           this.value = (byte)trend;
         }
     }
-    public String alarm = "---"; // Not sure where this is yet
-    public String temporaryBasal = "---"; // Not sure where this is yet
-    public String batteryPercentage = "---";
-    public String batteryVoltage = "---"; // Available?
-    public String model = "---"; // Available?
+
     private TREND trend = TREND.NOT_SET;
 
-    public Date pumpDate = new Date(); // Store as a date, so we can parse to string later.
-    public float activeInsulin = 0f;
+    //public Date pumpDate = new Date(); // Store as a date, so we can parse to string later.
     public int sensorBGL = 0; // in mg/dL. 0 means no sensor reading
     public Date sensorBGLDate = new Date();
-    public boolean recentBolusWizard = false; // Whether a bolus wizard has been run recently
-    public int bolusWizardBGL = 0; // in mg/dL. 0 means no recent bolus wizard reading.
     public String direction;
 
-    public Medtronic640gPumpRecord() {
-        // TODO - Add serial number
-        this.deviceName = "medtronic-640g";
-    }
-
     public void setTrend( TREND trend ) {
         this.trend = trend;
 
diff --git a/app/src/main/java/com/nightscout/android/upload/MedtronicNG/PumpStatusRecord.java b/app/src/main/java/com/nightscout/android/upload/MedtronicNG/PumpStatusRecord.java
new file mode 100644
index 0000000..cb4a30f
--- /dev/null
+++ b/app/src/main/java/com/nightscout/android/upload/MedtronicNG/PumpStatusRecord.java
@@ -0,0 +1,24 @@
+package com.nightscout.android.upload.MedtronicNG;
+
+import com.nightscout.android.upload.DeviceRecord;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * Created by lgoedhart on 27/03/2016.
+ */
+public class PumpStatusRecord extends DeviceRecord implements Serializable {
+
+    public String alarm = "---"; // Not sure where this is yet
+    public String temporaryBasal = "---"; // Not sure where this is yet
+    public String model = "---"; // Available?
+
+    public int batteryPercentage;
+    public Date pumpDate = new Date();
+    public BigDecimal activeInsulin = new BigDecimal(0);
+    public BigDecimal reservoirAmount = new BigDecimal(0);
+    public boolean recentBolusWizard = false; // Whether a bolus wizard has been run recently
+    public int bolusWizardBGL = 0; // in mg/dL. 0 means no recent bolus wizard reading.
+}
diff --git a/app/src/main/java/com/nightscout/android/upload/UploadHelper.java b/app/src/main/java/com/nightscout/android/upload/UploadHelper.java
index eedd833..dea8d96 100644
--- a/app/src/main/java/com/nightscout/android/upload/UploadHelper.java
+++ b/app/src/main/java/com/nightscout/android/upload/UploadHelper.java
@@ -22,6 +22,7 @@ import com.nightscout.android.dexcom.DexcomG4Activity;
 import com.nightscout.android.dexcom.EGVRecord;
 import com.nightscout.android.medtronic.MedtronicConstants;
 import com.nightscout.android.medtronic.MedtronicReader;
+import com.nightscout.android.upload.MedtronicNG.CGMRecord;
 
 import org.apache.http.HttpResponse;
 import org.apache.http.client.ClientProtocolException;
@@ -671,6 +672,22 @@ public class UploadHelper extends AsyncTask<Record, Integer, Long> {
 
         JSONObject json = new JSONObject();
         json.put("uploaderBattery", DexcomG4Activity.batLevel);
+		json.put("device", DexcomG4Activity.pumpStatusRecord.getDeviceName() );
+
+		JSONObject pumpInfo = new JSONObject();
+		pumpInfo.put( "clock", DexcomG4Activity.pumpStatusRecord.pumpDate );
+		pumpInfo.put( "reservoir", DexcomG4Activity.pumpStatusRecord.reservoirAmount);
+
+		JSONObject iob = new JSONObject();
+		iob.put( "timestamp", DexcomG4Activity.pumpStatusRecord.pumpDate );
+		iob.put( "bolusiob", DexcomG4Activity.pumpStatusRecord.activeInsulin );
+
+		JSONObject battery = new JSONObject();
+		battery.put( "percent", DexcomG4Activity.pumpStatusRecord.batteryPercentage );
+
+		pumpInfo.put( "iob", iob );
+		pumpInfo.put( "battery", battery );
+		json.put( "pump", pumpInfo );
         String jsonString = json.toString();
 
         HttpPost post = new HttpPost(devicestatusURL);
@@ -684,8 +701,8 @@ public class UploadHelper extends AsyncTask<Record, Integer, Long> {
     }
     
     private void populateV1APIEntry(JSONObject json, Record oRecord) throws Exception {
-		if (oRecord instanceof Medtronic640gPumpRecord) {
-			json.put("date", ((Medtronic640gPumpRecord) oRecord).sensorBGLDate.getTime());
+		if (oRecord instanceof CGMRecord) {
+			json.put("date", ((CGMRecord) oRecord).sensorBGLDate.getTime());
 			json.put("dateString",  oRecord.displayTime);
 		} else {
 			Date date = DATE_FORMAT.parse(oRecord.displayTime);
@@ -697,8 +714,8 @@ public class UploadHelper extends AsyncTask<Record, Integer, Long> {
 			json.put("device", getSelectedDeviceName());
 			json.put("type", "mbg");
 			json.put("mbg", ((GlucometerRecord) oRecord).numGlucometerValue);
-		}else if (oRecord instanceof Medtronic640gPumpRecord){
-				Medtronic640gPumpRecord pumpRecord = (Medtronic640gPumpRecord) oRecord;
+		}else if (oRecord instanceof CGMRecord){
+				CGMRecord pumpRecord = (CGMRecord) oRecord;
 				json.put("sgv", pumpRecord.sensorBGL);
 				json.put("direction", pumpRecord.direction);
 				json.put("device", pumpRecord.getDeviceName());
-- 
GitLab