From 7aba34b228318290800475e6890ed5f02f6ed925 Mon Sep 17 00:00:00 2001
From: Volker Richert <v.richert@addmore.de>
Date: Thu, 22 Dec 2016 22:18:50 +0100
Subject: [PATCH] fixing handling of waits after communicating to CNL

---
 .../medtronic/message/BeginEHSMMessage.java   | 10 +-----
 .../ContourNextLinkRequestMessage.java        | 21 ++++++------
 .../DeviceInfoRequestCommandMessage.java      | 14 +++++++-
 .../medtronic/message/EHSMMessage.java        | 33 +++++++++++++++++++
 .../medtronic/message/EndEHSMMessage.java     | 11 +------
 .../message/PumpStatusRequestMessage.java     | 16 +++++++--
 .../message/PumpTimeRequestMessage.java       | 16 +++++++--
 7 files changed, 84 insertions(+), 37 deletions(-)
 create mode 100644 app/src/main/java/info/nightscout/android/medtronic/message/EHSMMessage.java

diff --git a/app/src/main/java/info/nightscout/android/medtronic/message/BeginEHSMMessage.java b/app/src/main/java/info/nightscout/android/medtronic/message/BeginEHSMMessage.java
index 6a5bcda..3902beb 100644
--- a/app/src/main/java/info/nightscout/android/medtronic/message/BeginEHSMMessage.java
+++ b/app/src/main/java/info/nightscout/android/medtronic/message/BeginEHSMMessage.java
@@ -11,7 +11,7 @@ import info.nightscout.android.medtronic.exception.EncryptionException;
 /**
  * Created by lgoedhart on 26/03/2016.
  */
-public class BeginEHSMMessage extends MedtronicSendMessageRequestMessage<ContourNextLinkResponseMessage> {
+public class BeginEHSMMessage extends EHSMMessage {
     public BeginEHSMMessage(MedtronicCnlSession pumpSession) throws EncryptionException, ChecksumException {
         super(SendMessageType.BEGIN_EHSM_SESSION, pumpSession, buildPayload());
     }
@@ -20,12 +20,4 @@ public class BeginEHSMMessage extends MedtronicSendMessageRequestMessage<Contour
         // Not sure what the payload of a null byte means, but it's the same every time.
         return new byte[] { 0x00 };
     }
-
-    public ContourNextLinkResponseMessage send(UsbHidDriver mDevice) throws IOException, TimeoutException {
-        sendMessage(mDevice);
-
-        // The Begin EHSM Session only has an 0x81 response
-        readMessage(mDevice);
-        return null;
-    }
 }
diff --git a/app/src/main/java/info/nightscout/android/medtronic/message/ContourNextLinkRequestMessage.java b/app/src/main/java/info/nightscout/android/medtronic/message/ContourNextLinkRequestMessage.java
index 590f400..782c174 100644
--- a/app/src/main/java/info/nightscout/android/medtronic/message/ContourNextLinkRequestMessage.java
+++ b/app/src/main/java/info/nightscout/android/medtronic/message/ContourNextLinkRequestMessage.java
@@ -19,22 +19,21 @@ public abstract class ContourNextLinkRequestMessage<T> extends ContourNextLinkMe
     }
 
     public T send(UsbHidDriver mDevice) throws IOException, TimeoutException, EncryptionException, ChecksumException, UnexpectedMessageException {
-        sendMessage(mDevice);
-
-        T response = this.getResponse(readMessage(mDevice)); //new ContourNextLinkCommandResponse();
-
-        // FIXME - We need to care what the response message is - wrong MAC and all that
-        return response;
+        return send(mDevice, 0);
     }
 
     public T send(UsbHidDriver mDevice, int millis) throws UnexpectedMessageException, EncryptionException, TimeoutException, ChecksumException, IOException {
-        T response = send(mDevice);
-
-        try {
-            Thread.sleep(millis);
-        } catch (InterruptedException e) {
+        sendMessage(mDevice);
+        if (millis > 0) {
+            try {
+                Thread.sleep(millis);
+            } catch (InterruptedException e) {
+            }
         }
 
+        T response = this.getResponse(readMessage(mDevice)); //new ContourNextLinkCommandResponse();
+
+        // FIXME - We need to care what the response message is - wrong MAC and all that
         return response;
     }
 
diff --git a/app/src/main/java/info/nightscout/android/medtronic/message/DeviceInfoRequestCommandMessage.java b/app/src/main/java/info/nightscout/android/medtronic/message/DeviceInfoRequestCommandMessage.java
index 88ee523..5c2f7d6 100644
--- a/app/src/main/java/info/nightscout/android/medtronic/message/DeviceInfoRequestCommandMessage.java
+++ b/app/src/main/java/info/nightscout/android/medtronic/message/DeviceInfoRequestCommandMessage.java
@@ -18,10 +18,22 @@ public class DeviceInfoRequestCommandMessage extends ContourNextLinkRequestMessa
     }
 
     @Override
-    public DeviceInfoResponseCommandMessage send(UsbHidDriver mDevice) throws IOException, TimeoutException, EncryptionException, ChecksumException, UnexpectedMessageException {
+    public DeviceInfoResponseCommandMessage send(UsbHidDriver mDevice, int millis) throws IOException, TimeoutException, EncryptionException, ChecksumException, UnexpectedMessageException {
         sendMessage(mDevice);
 
+        if (millis > 0) {
+            try {
+                Thread.sleep(millis);
+            } catch (InterruptedException e) {
+            }
+        }
         byte[] response1 = readMessage(mDevice);
+        if (millis > 0) {
+            try {
+                Thread.sleep(millis);
+            } catch (InterruptedException e) {
+            }
+        }
         byte[] response2 = readMessage(mDevice);
 
         boolean doRetry = false;
diff --git a/app/src/main/java/info/nightscout/android/medtronic/message/EHSMMessage.java b/app/src/main/java/info/nightscout/android/medtronic/message/EHSMMessage.java
new file mode 100644
index 0000000..1242361
--- /dev/null
+++ b/app/src/main/java/info/nightscout/android/medtronic/message/EHSMMessage.java
@@ -0,0 +1,33 @@
+package info.nightscout.android.medtronic.message;
+
+import java.io.IOException;
+import java.util.concurrent.TimeoutException;
+
+import info.nightscout.android.USB.UsbHidDriver;
+import info.nightscout.android.medtronic.MedtronicCnlSession;
+import info.nightscout.android.medtronic.exception.ChecksumException;
+import info.nightscout.android.medtronic.exception.EncryptionException;
+
+/**
+ * Created by volker on 22.12.2016.
+ */
+
+public class EHSMMessage extends  MedtronicSendMessageRequestMessage<ContourNextLinkResponseMessage>{
+    protected EHSMMessage(SendMessageType sendMessageType, MedtronicCnlSession pumpSession, byte[] payload) throws EncryptionException, ChecksumException {
+        super(sendMessageType, pumpSession, payload);
+    }
+
+    @Override
+    public ContourNextLinkResponseMessage send(UsbHidDriver mDevice, int millis) throws IOException, TimeoutException {
+        sendMessage(mDevice);
+        if (millis > 0) {
+            try {
+                Thread.sleep(millis);
+            } catch (InterruptedException e) {
+            }
+        }
+        // The End EHSM Session only has an 0x81 response
+        readMessage(mDevice);
+        return null;
+    }
+}
diff --git a/app/src/main/java/info/nightscout/android/medtronic/message/EndEHSMMessage.java b/app/src/main/java/info/nightscout/android/medtronic/message/EndEHSMMessage.java
index f1a1bbd..5335d4c 100644
--- a/app/src/main/java/info/nightscout/android/medtronic/message/EndEHSMMessage.java
+++ b/app/src/main/java/info/nightscout/android/medtronic/message/EndEHSMMessage.java
@@ -12,7 +12,7 @@ import info.nightscout.android.medtronic.exception.UnexpectedMessageException;
 /**
  * Created by lgoedhart on 26/03/2016.
  */
-public class EndEHSMMessage extends MedtronicSendMessageRequestMessage<ContourNextLinkResponseMessage> {
+public class EndEHSMMessage extends EHSMMessage {
     public EndEHSMMessage(MedtronicCnlSession pumpSession) throws EncryptionException, ChecksumException {
         super(SendMessageType.END_EHSM_SESSION, pumpSession, buildPayload());
     }
@@ -22,13 +22,4 @@ public class EndEHSMMessage extends MedtronicSendMessageRequestMessage<ContourNe
         return new byte[] { 0x01 };
     }
 
-    @Override
-    public ContourNextLinkResponseMessage send(UsbHidDriver mDevice) throws IOException, TimeoutException {
-        sendMessage(mDevice);
-
-        // The End EHSM Session only has an 0x81 response
-        readMessage(mDevice);
-        return null;
-    }
-
 }
diff --git a/app/src/main/java/info/nightscout/android/medtronic/message/PumpStatusRequestMessage.java b/app/src/main/java/info/nightscout/android/medtronic/message/PumpStatusRequestMessage.java
index 7e9f26e..30067b4 100644
--- a/app/src/main/java/info/nightscout/android/medtronic/message/PumpStatusRequestMessage.java
+++ b/app/src/main/java/info/nightscout/android/medtronic/message/PumpStatusRequestMessage.java
@@ -17,12 +17,22 @@ public class PumpStatusRequestMessage extends MedtronicSendMessageRequestMessage
         super(SendMessageType.READ_PUMP_STATUS_REQUEST, pumpSession, null);
     }
 
-    public PumpStatusResponseMessage send(UsbHidDriver mDevice) throws IOException, TimeoutException, ChecksumException, EncryptionException, UnexpectedMessageException {
+    public PumpStatusResponseMessage send(UsbHidDriver mDevice, int millis) throws IOException, TimeoutException, ChecksumException, EncryptionException, UnexpectedMessageException {
         sendMessage(mDevice);
-
+        if (millis > 0) {
+            try {
+                Thread.sleep(millis);
+            } catch (InterruptedException e) {
+            }
+        }
         // Read the 0x81
         readMessage(mDevice);
-
+        if (millis > 0) {
+            try {
+                Thread.sleep(millis);
+            } catch (InterruptedException e) {
+            }
+        }
         PumpStatusResponseMessage response = this.getResponse(readMessage(mDevice));
 
         return response;
diff --git a/app/src/main/java/info/nightscout/android/medtronic/message/PumpTimeRequestMessage.java b/app/src/main/java/info/nightscout/android/medtronic/message/PumpTimeRequestMessage.java
index 72ba8be..24cbb14 100644
--- a/app/src/main/java/info/nightscout/android/medtronic/message/PumpTimeRequestMessage.java
+++ b/app/src/main/java/info/nightscout/android/medtronic/message/PumpTimeRequestMessage.java
@@ -18,12 +18,22 @@ public class PumpTimeRequestMessage extends MedtronicSendMessageRequestMessage<P
     }
 
     @Override
-    public PumpTimeResponseMessage send(UsbHidDriver mDevice) throws IOException, TimeoutException, ChecksumException, EncryptionException, UnexpectedMessageException {
+    public PumpTimeResponseMessage send(UsbHidDriver mDevice, int millis) throws IOException, TimeoutException, ChecksumException, EncryptionException, UnexpectedMessageException {
         sendMessage(mDevice);
-
+        if (millis > 0) {
+            try {
+                Thread.sleep(millis);
+            } catch (InterruptedException e) {
+            }
+        }
         // Read the 0x81
         readMessage(mDevice);
-
+        if (millis > 0) {
+            try {
+                Thread.sleep(millis);
+            } catch (InterruptedException e) {
+            }
+        }
         // Read the 0x80
         PumpTimeResponseMessage response = this.getResponse(readMessage(mDevice));
 
-- 
GitLab