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	PSI	JAVA://com.nightscout.android.dexcom.DexcomG4Activity cnlread	PSI	JAVA://com.nightscout.android.medtronic.MedtronicCNLReader" /> + <property name="SearchEverywhereHistoryKey" value="uploa	PSI	JAVA://com.nightscout.android.upload.UploadHelper g4	PSI	JAVA://com.nightscout.android.dexcom.DexcomG4Activity cnlread	PSI	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	" 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