Skip to content
Snippets Groups Projects
Commit 77b2d97e authored by Volker Richert's avatar Volker Richert
Browse files

- add timeouts to command messages

- add generic typ to requests to use inheritance
parent 53733d32
No related branches found
No related tags found
No related merge requests found
Showing
with 136 additions and 90 deletions
...@@ -82,9 +82,9 @@ public class MedtronicCnlReader { ...@@ -82,9 +82,9 @@ public class MedtronicCnlReader {
doRetry = false; doRetry = false;
try { try {
new ContourNextLinkCommandMessage(ContourNextLinkCommandMessage.ASCII.NAK) new ContourNextLinkCommandMessage(ContourNextLinkCommandMessage.ASCII.NAK)
.send(mDevice).checkControlMessage(ContourNextLinkCommandMessage.ASCII.EOT); .send(mDevice, 500).checkControlMessage(ContourNextLinkCommandMessage.ASCII.EOT);
new ContourNextLinkCommandMessage(ContourNextLinkCommandMessage.ASCII.ENQ) new ContourNextLinkCommandMessage(ContourNextLinkCommandMessage.ASCII.ENQ)
.send(mDevice).checkControlMessage(ContourNextLinkCommandMessage.ASCII.ACK); .send(mDevice, 500).checkControlMessage(ContourNextLinkCommandMessage.ASCII.ACK);
} catch (UnexpectedMessageException e2) { } catch (UnexpectedMessageException e2) {
try { try {
new ContourNextLinkCommandMessage(ContourNextLinkCommandMessage.ASCII.EOT).send(mDevice); new ContourNextLinkCommandMessage(ContourNextLinkCommandMessage.ASCII.EOT).send(mDevice);
...@@ -99,21 +99,21 @@ public class MedtronicCnlReader { ...@@ -99,21 +99,21 @@ public class MedtronicCnlReader {
public void enterPassthroughMode() throws IOException, TimeoutException, UnexpectedMessageException, ChecksumException, EncryptionException { public void enterPassthroughMode() throws IOException, TimeoutException, UnexpectedMessageException, ChecksumException, EncryptionException {
Log.d(TAG, "Begin enterPasshtroughMode"); Log.d(TAG, "Begin enterPasshtroughMode");
new ContourNextLinkCommandMessage("W|") new ContourNextLinkCommandMessage("W|")
.send(mDevice).checkControlMessage(ContourNextLinkCommandMessage.ASCII.ACK); .send(mDevice, 500).checkControlMessage(ContourNextLinkCommandMessage.ASCII.ACK);
new ContourNextLinkCommandMessage("Q|") new ContourNextLinkCommandMessage("Q|")
.send(mDevice).checkControlMessage(ContourNextLinkCommandMessage.ASCII.ACK); .send(mDevice, 500).checkControlMessage(ContourNextLinkCommandMessage.ASCII.ACK);
new ContourNextLinkCommandMessage("1|") new ContourNextLinkCommandMessage("1|")
.send(mDevice).checkControlMessage(ContourNextLinkCommandMessage.ASCII.ACK); .send(mDevice, 500).checkControlMessage(ContourNextLinkCommandMessage.ASCII.ACK);
Log.d(TAG, "Finished enterPasshtroughMode"); Log.d(TAG, "Finished enterPasshtroughMode");
} }
public void openConnection() throws IOException, TimeoutException, NoSuchAlgorithmException, ChecksumException, EncryptionException { public void openConnection() throws IOException, TimeoutException, NoSuchAlgorithmException, ChecksumException, EncryptionException, UnexpectedMessageException {
Log.d(TAG, "Begin openConnection"); Log.d(TAG, "Begin openConnection");
new OpenConnectionRequestMessage(mPumpSession, mPumpSession.getHMAC()).send(mDevice); new OpenConnectionRequestMessage(mPumpSession, mPumpSession.getHMAC()).send(mDevice);
Log.d(TAG, "Finished openConnection"); Log.d(TAG, "Finished openConnection");
} }
public void requestReadInfo() throws IOException, TimeoutException, EncryptionException, ChecksumException { public void requestReadInfo() throws IOException, TimeoutException, EncryptionException, ChecksumException, UnexpectedMessageException {
Log.d(TAG, "Begin requestReadInfo"); Log.d(TAG, "Begin requestReadInfo");
ReadInfoResponseMessage response = new ReadInfoRequestMessage(mPumpSession).send(mDevice); ReadInfoResponseMessage response = new ReadInfoRequestMessage(mPumpSession).send(mDevice);
...@@ -125,7 +125,7 @@ public class MedtronicCnlReader { ...@@ -125,7 +125,7 @@ public class MedtronicCnlReader {
Log.d(TAG, String.format("Finished requestReadInfo. linkMAC = '%d', pumpMAC = '%d", linkMAC, pumpMAC)); Log.d(TAG, String.format("Finished requestReadInfo. linkMAC = '%d', pumpMAC = '%d", linkMAC, pumpMAC));
} }
public void requestLinkKey() throws IOException, TimeoutException, EncryptionException, ChecksumException { public void requestLinkKey() throws IOException, TimeoutException, EncryptionException, ChecksumException, UnexpectedMessageException {
Log.d(TAG, "Begin requestLinkKey"); Log.d(TAG, "Begin requestLinkKey");
RequestLinkKeyResponseMessage response = new RequestLinkKeyRequestMessage(mPumpSession).send(mDevice); RequestLinkKeyResponseMessage response = new RequestLinkKeyRequestMessage(mPumpSession).send(mDevice);
...@@ -169,7 +169,7 @@ public class MedtronicCnlReader { ...@@ -169,7 +169,7 @@ public class MedtronicCnlReader {
Log.d(TAG, "Finished beginEHSMSession"); Log.d(TAG, "Finished beginEHSMSession");
} }
public Date getPumpTime() throws EncryptionException, IOException, ChecksumException, TimeoutException { public Date getPumpTime() throws EncryptionException, IOException, ChecksumException, TimeoutException, UnexpectedMessageException {
Log.d(TAG, "Begin getPumpTime"); Log.d(TAG, "Begin getPumpTime");
// FIXME - throw if not in EHSM mode (add a state machine) // FIXME - throw if not in EHSM mode (add a state machine)
...@@ -191,7 +191,7 @@ public class MedtronicCnlReader { ...@@ -191,7 +191,7 @@ public class MedtronicCnlReader {
return pumpRecord; return pumpRecord;
} }
public void getBasalPatterns() throws EncryptionException, IOException, ChecksumException, TimeoutException { public void getBasalPatterns() throws EncryptionException, IOException, ChecksumException, TimeoutException, UnexpectedMessageException {
Log.d(TAG, "Begin getBasalPatterns"); Log.d(TAG, "Begin getBasalPatterns");
// FIXME - throw if not in EHSM mode (add a state machine) // FIXME - throw if not in EHSM mode (add a state machine)
...@@ -216,7 +216,7 @@ public class MedtronicCnlReader { ...@@ -216,7 +216,7 @@ public class MedtronicCnlReader {
Log.d(TAG, "Finished endEHSMSession"); Log.d(TAG, "Finished endEHSMSession");
} }
public void closeConnection() throws IOException, TimeoutException, ChecksumException, EncryptionException, NoSuchAlgorithmException { public void closeConnection() throws IOException, TimeoutException, ChecksumException, EncryptionException, NoSuchAlgorithmException, UnexpectedMessageException {
Log.d(TAG, "Begin closeConnection"); Log.d(TAG, "Begin closeConnection");
new CloseConnectionRequestMessage(mPumpSession, mPumpSession.getHMAC()).send(mDevice); new CloseConnectionRequestMessage(mPumpSession, mPumpSession.getHMAC()).send(mDevice);
Log.d(TAG, "Finished closeConnection"); Log.d(TAG, "Finished closeConnection");
...@@ -225,18 +225,18 @@ public class MedtronicCnlReader { ...@@ -225,18 +225,18 @@ public class MedtronicCnlReader {
public void endPassthroughMode() throws IOException, TimeoutException, UnexpectedMessageException, ChecksumException, EncryptionException { public void endPassthroughMode() throws IOException, TimeoutException, UnexpectedMessageException, ChecksumException, EncryptionException {
Log.d(TAG, "Begin endPassthroughMode"); Log.d(TAG, "Begin endPassthroughMode");
new ContourNextLinkCommandMessage("W|") new ContourNextLinkCommandMessage("W|")
.send(mDevice).checkControlMessage(ContourNextLinkCommandMessage.ASCII.ACK); .send(mDevice, 500).checkControlMessage(ContourNextLinkCommandMessage.ASCII.ACK);
new ContourNextLinkCommandMessage("Q|") new ContourNextLinkCommandMessage("Q|")
.send(mDevice).checkControlMessage(ContourNextLinkCommandMessage.ASCII.ACK); .send(mDevice, 500).checkControlMessage(ContourNextLinkCommandMessage.ASCII.ACK);
new ContourNextLinkCommandMessage("0|") new ContourNextLinkCommandMessage("0|")
.send(mDevice).checkControlMessage(ContourNextLinkCommandMessage.ASCII.ACK); .send(mDevice, 500).checkControlMessage(ContourNextLinkCommandMessage.ASCII.ACK);
Log.d(TAG, "Finished endPassthroughMode"); Log.d(TAG, "Finished endPassthroughMode");
} }
public void endControlMode() throws IOException, TimeoutException, UnexpectedMessageException, ChecksumException, EncryptionException { public void endControlMode() throws IOException, TimeoutException, UnexpectedMessageException, ChecksumException, EncryptionException {
Log.d(TAG, "Begin endControlMode"); Log.d(TAG, "Begin endControlMode");
new ContourNextLinkCommandMessage(ContourNextLinkCommandMessage.ASCII.EOT) new ContourNextLinkCommandMessage(ContourNextLinkCommandMessage.ASCII.EOT)
.send(mDevice).checkControlMessage(ContourNextLinkCommandMessage.ASCII.ENQ); .send(mDevice, 500).checkControlMessage(ContourNextLinkCommandMessage.ASCII.ENQ);
Log.d(TAG, "Finished endControlMode"); Log.d(TAG, "Finished endControlMode");
} }
} }
...@@ -11,7 +11,7 @@ import info.nightscout.android.medtronic.exception.EncryptionException; ...@@ -11,7 +11,7 @@ import info.nightscout.android.medtronic.exception.EncryptionException;
/** /**
* Created by lgoedhart on 26/03/2016. * Created by lgoedhart on 26/03/2016.
*/ */
public class BeginEHSMMessage extends MedtronicSendMessageRequestMessage { public class BeginEHSMMessage extends MedtronicSendMessageRequestMessage<ContourNextLinkResponseMessage> {
public BeginEHSMMessage(MedtronicCnlSession pumpSession) throws EncryptionException, ChecksumException { public BeginEHSMMessage(MedtronicCnlSession pumpSession) throws EncryptionException, ChecksumException {
super(SendMessageType.BEGIN_EHSM_SESSION, pumpSession, buildPayload()); super(SendMessageType.BEGIN_EHSM_SESSION, pumpSession, buildPayload());
} }
...@@ -21,10 +21,11 @@ public class BeginEHSMMessage extends MedtronicSendMessageRequestMessage { ...@@ -21,10 +21,11 @@ public class BeginEHSMMessage extends MedtronicSendMessageRequestMessage {
return new byte[] { 0x00 }; return new byte[] { 0x00 };
} }
public void send(UsbHidDriver mDevice) throws IOException, TimeoutException { public ContourNextLinkResponseMessage send(UsbHidDriver mDevice) throws IOException, TimeoutException {
sendMessage(mDevice); sendMessage(mDevice);
// The Begin EHSM Session only has an 0x81 response // The Begin EHSM Session only has an 0x81 response
readMessage(mDevice); readMessage(mDevice);
return null;
} }
} }
...@@ -15,13 +15,14 @@ import info.nightscout.android.medtronic.exception.EncryptionException; ...@@ -15,13 +15,14 @@ import info.nightscout.android.medtronic.exception.EncryptionException;
/** /**
* Created by lgoedhart on 26/03/2016. * Created by lgoedhart on 26/03/2016.
*/ */
public class ChannelNegotiateRequestMessage extends MedtronicRequestMessage { public class ChannelNegotiateRequestMessage extends MedtronicRequestMessage<ChannelNegotiateResponseMessage> {
private static final String TAG = ChannelNegotiateRequestMessage.class.getSimpleName(); private static final String TAG = ChannelNegotiateRequestMessage.class.getSimpleName();
public ChannelNegotiateRequestMessage(MedtronicCnlSession pumpSession) throws ChecksumException { public ChannelNegotiateRequestMessage(MedtronicCnlSession pumpSession) throws ChecksumException {
super(CommandType.SEND_MESSAGE, CommandAction.CHANNEL_NEGOTIATE, pumpSession, buildPayload(pumpSession)); super(CommandType.SEND_MESSAGE, CommandAction.CHANNEL_NEGOTIATE, pumpSession, buildPayload(pumpSession));
} }
@Override
public ChannelNegotiateResponseMessage send(UsbHidDriver mDevice) throws IOException, TimeoutException, ChecksumException, EncryptionException { public ChannelNegotiateResponseMessage send(UsbHidDriver mDevice) throws IOException, TimeoutException, ChecksumException, EncryptionException {
sendMessage(mDevice); sendMessage(mDevice);
...@@ -30,11 +31,16 @@ public class ChannelNegotiateRequestMessage extends MedtronicRequestMessage { ...@@ -30,11 +31,16 @@ public class ChannelNegotiateRequestMessage extends MedtronicRequestMessage {
readMessage(mDevice); readMessage(mDevice);
// The 0x80 message // The 0x80 message
Log.d(TAG, "negotiateChannel: Reading 0x80 message"); Log.d(TAG, "negotiateChannel: Reading 0x80 message");
ChannelNegotiateResponseMessage response = new ChannelNegotiateResponseMessage(mPumpSession, readMessage(mDevice)); ChannelNegotiateResponseMessage response = this.getResponse(readMessage(mDevice));
return response; return response;
} }
@Override
protected ChannelNegotiateResponseMessage getResponse(byte[] payload) throws ChecksumException, EncryptionException, IOException {
return new ChannelNegotiateResponseMessage(mPumpSession, payload);
}
protected static byte[] buildPayload( MedtronicCnlSession pumpSession ) { protected static byte[] buildPayload( MedtronicCnlSession pumpSession ) {
ByteBuffer payload = ByteBuffer.allocate(26); ByteBuffer payload = ByteBuffer.allocate(26);
payload.order(ByteOrder.LITTLE_ENDIAN); payload.order(ByteOrder.LITTLE_ENDIAN);
......
...@@ -12,17 +12,13 @@ import info.nightscout.android.medtronic.exception.EncryptionException; ...@@ -12,17 +12,13 @@ import info.nightscout.android.medtronic.exception.EncryptionException;
* Created by volker on 10.12.2016. * Created by volker on 10.12.2016.
*/ */
public class CloseConnectionRequestMessage extends ContourNextLinkBinaryRequestMessage { public class CloseConnectionRequestMessage extends ContourNextLinkBinaryRequestMessage<CloseConnectionResponseMessage> {
public CloseConnectionRequestMessage(MedtronicCnlSession pumpSession, byte[] payload) throws ChecksumException { public CloseConnectionRequestMessage(MedtronicCnlSession pumpSession, byte[] payload) throws ChecksumException {
super(CommandType.CLOSE_CONNECTION, pumpSession, payload); super(CommandType.CLOSE_CONNECTION, pumpSession, payload);
} }
public CloseConnectionResponseMessage send(UsbHidDriver mDevice) throws IOException, TimeoutException, EncryptionException, ChecksumException { @Override
sendMessage(mDevice); protected CloseConnectionResponseMessage getResponse(byte[] payload) throws ChecksumException, EncryptionException, IOException {
return new CloseConnectionResponseMessage(payload);
CloseConnectionResponseMessage response = new CloseConnectionResponseMessage(readMessage(mDevice));
// FIXME - We need to care what the response message is - wrong MAC and all that
return response;
} }
} }
...@@ -12,7 +12,7 @@ import info.nightscout.android.medtronic.exception.ChecksumException; ...@@ -12,7 +12,7 @@ import info.nightscout.android.medtronic.exception.ChecksumException;
/** /**
* Created by lgoedhart on 26/03/2016. * Created by lgoedhart on 26/03/2016.
*/ */
public class ContourNextLinkBinaryRequestMessage extends ContourNextLinkRequestMessage { public abstract class ContourNextLinkBinaryRequestMessage<T> extends ContourNextLinkRequestMessage<T> {
private final static int ENVELOPE_SIZE = 33; private final static int ENVELOPE_SIZE = 33;
//protected ByteBuffer mBayerEnvelope; //protected ByteBuffer mBayerEnvelope;
......
...@@ -6,11 +6,12 @@ import java.util.concurrent.TimeoutException; ...@@ -6,11 +6,12 @@ import java.util.concurrent.TimeoutException;
import info.nightscout.android.USB.UsbHidDriver; import info.nightscout.android.USB.UsbHidDriver;
import info.nightscout.android.medtronic.exception.ChecksumException; import info.nightscout.android.medtronic.exception.ChecksumException;
import info.nightscout.android.medtronic.exception.EncryptionException; import info.nightscout.android.medtronic.exception.EncryptionException;
import info.nightscout.android.medtronic.exception.UnexpectedMessageException;
/** /**
* Created by lgoedhart on 26/03/2016. * Created by lgoedhart on 26/03/2016.
*/ */
public class ContourNextLinkCommandMessage extends ContourNextLinkRequestMessage { public class ContourNextLinkCommandMessage extends ContourNextLinkRequestMessage<ContourNextLinkCommandResponse> {
public ContourNextLinkCommandMessage(ASCII command) { public ContourNextLinkCommandMessage(ASCII command) {
super(new byte[]{command.getValue()}); super(new byte[]{command.getValue()});
} }
...@@ -23,13 +24,9 @@ public class ContourNextLinkCommandMessage extends ContourNextLinkRequestMessage ...@@ -23,13 +24,9 @@ public class ContourNextLinkCommandMessage extends ContourNextLinkRequestMessage
super(command.getBytes()); super(command.getBytes());
} }
@Override
public ContourNextLinkCommandResponse send(UsbHidDriver mDevice) throws IOException, TimeoutException, EncryptionException, ChecksumException { protected ContourNextLinkCommandResponse getResponse(byte[] payload) throws ChecksumException {
sendMessage(mDevice); return new ContourNextLinkCommandResponse(payload);
ContourNextLinkCommandResponse response = new ContourNextLinkCommandResponse(readMessage(mDevice));
// FIXME - We need to care what the response message is - wrong MAC and all that
return response;
} }
} }
...@@ -8,12 +8,15 @@ import java.nio.ByteBuffer; ...@@ -8,12 +8,15 @@ import java.nio.ByteBuffer;
import java.util.concurrent.TimeoutException; import java.util.concurrent.TimeoutException;
import info.nightscout.android.USB.UsbHidDriver; import info.nightscout.android.USB.UsbHidDriver;
import info.nightscout.android.medtronic.exception.ChecksumException;
import info.nightscout.android.medtronic.exception.EncryptionException;
import info.nightscout.android.medtronic.exception.UnexpectedMessageException;
import info.nightscout.android.utils.HexDump; import info.nightscout.android.utils.HexDump;
/** /**
* Created by lgoedhart on 26/03/2016. * Created by lgoedhart on 26/03/2016.
*/ */
public class ContourNextLinkMessage { public abstract class ContourNextLinkMessage {
private static final String TAG = ContourNextLinkMessage.class.getSimpleName(); private static final String TAG = ContourNextLinkMessage.class.getSimpleName();
private static final int USB_BLOCKSIZE = 64; private static final int USB_BLOCKSIZE = 64;
......
package info.nightscout.android.medtronic.message; 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.exception.ChecksumException;
import info.nightscout.android.medtronic.exception.EncryptionException;
import info.nightscout.android.medtronic.exception.UnexpectedMessageException;
/** /**
* Created by volker on 12.12.2016. * Created by volker on 12.12.2016.
*/ */
public class ContourNextLinkRequestMessage extends ContourNextLinkMessage { public abstract class ContourNextLinkRequestMessage<T> extends ContourNextLinkMessage {
protected ContourNextLinkRequestMessage(byte[] bytes) { protected ContourNextLinkRequestMessage(byte[] bytes) {
super(bytes); super(bytes);
} }
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;
}
public T send(UsbHidDriver mDevice, int millis) throws UnexpectedMessageException, EncryptionException, TimeoutException, ChecksumException, IOException {
T response = send(mDevice);
try {
Thread.sleep(millis);
} catch (InterruptedException e) {
}
return response;
}
protected abstract <T> T getResponse(byte[] payload) throws ChecksumException, EncryptionException, IOException, UnexpectedMessageException, TimeoutException;
} }
...@@ -10,7 +10,7 @@ import info.nightscout.android.medtronic.exception.UnexpectedMessageException; ...@@ -10,7 +10,7 @@ import info.nightscout.android.medtronic.exception.UnexpectedMessageException;
/** /**
* Created by lgoedhart on 26/03/2016. * Created by lgoedhart on 26/03/2016.
*/ */
public class ContourNextLinkResponseMessage extends ContourNextLinkMessage { public abstract class ContourNextLinkResponseMessage extends ContourNextLinkMessage {
public ContourNextLinkResponseMessage(byte[] payload) throws ChecksumException { public ContourNextLinkResponseMessage(byte[] payload) throws ChecksumException {
super(payload); super(payload);
......
...@@ -12,11 +12,12 @@ import info.nightscout.android.medtronic.exception.UnexpectedMessageException; ...@@ -12,11 +12,12 @@ import info.nightscout.android.medtronic.exception.UnexpectedMessageException;
* Created by volker on 10.12.2016. * Created by volker on 10.12.2016.
*/ */
public class DeviceInfoRequestCommandMessage extends ContourNextLinkRequestMessage { public class DeviceInfoRequestCommandMessage extends ContourNextLinkRequestMessage<DeviceInfoResponseCommandMessage> {
public DeviceInfoRequestCommandMessage() { public DeviceInfoRequestCommandMessage() {
super("X".getBytes()); super("X".getBytes());
} }
@Override
public DeviceInfoResponseCommandMessage send(UsbHidDriver mDevice) throws IOException, TimeoutException, EncryptionException, ChecksumException, UnexpectedMessageException { public DeviceInfoResponseCommandMessage send(UsbHidDriver mDevice) throws IOException, TimeoutException, EncryptionException, ChecksumException, UnexpectedMessageException {
sendMessage(mDevice); sendMessage(mDevice);
...@@ -30,12 +31,12 @@ public class DeviceInfoRequestCommandMessage extends ContourNextLinkRequestMessa ...@@ -30,12 +31,12 @@ public class DeviceInfoRequestCommandMessage extends ContourNextLinkRequestMessa
try { try {
if (ASCII.EOT.equals(response1[0])) { if (ASCII.EOT.equals(response1[0])) {
// response 1 is the ASTM message // response 1 is the ASTM message
response = new DeviceInfoResponseCommandMessage(response1); response = this.getResponse(response1);
// ugly.... // ugly....
response.checkControlMessage(response2, ASCII.ENQ); response.checkControlMessage(response2, ASCII.ENQ);
} else { } else {
// response 2 is the ASTM message // response 2 is the ASTM message
response = new DeviceInfoResponseCommandMessage(response1); response = this.getResponse(response1);
// ugly, too.... // ugly, too....
response.checkControlMessage(response1, ASCII.ENQ); response.checkControlMessage(response1, ASCII.ENQ);
} }
...@@ -46,4 +47,9 @@ public class DeviceInfoRequestCommandMessage extends ContourNextLinkRequestMessa ...@@ -46,4 +47,9 @@ public class DeviceInfoRequestCommandMessage extends ContourNextLinkRequestMessa
return response; return response;
} }
@Override
protected DeviceInfoResponseCommandMessage getResponse(byte[] payload) throws ChecksumException, EncryptionException, IOException, UnexpectedMessageException, TimeoutException {
return new DeviceInfoResponseCommandMessage(payload);
}
} }
...@@ -7,11 +7,12 @@ import info.nightscout.android.USB.UsbHidDriver; ...@@ -7,11 +7,12 @@ import info.nightscout.android.USB.UsbHidDriver;
import info.nightscout.android.medtronic.MedtronicCnlSession; import info.nightscout.android.medtronic.MedtronicCnlSession;
import info.nightscout.android.medtronic.exception.ChecksumException; import info.nightscout.android.medtronic.exception.ChecksumException;
import info.nightscout.android.medtronic.exception.EncryptionException; import info.nightscout.android.medtronic.exception.EncryptionException;
import info.nightscout.android.medtronic.exception.UnexpectedMessageException;
/** /**
* Created by lgoedhart on 26/03/2016. * Created by lgoedhart on 26/03/2016.
*/ */
public class EndEHSMMessage extends MedtronicSendMessageRequestMessage { public class EndEHSMMessage extends MedtronicSendMessageRequestMessage<ContourNextLinkResponseMessage> {
public EndEHSMMessage(MedtronicCnlSession pumpSession) throws EncryptionException, ChecksumException { public EndEHSMMessage(MedtronicCnlSession pumpSession) throws EncryptionException, ChecksumException {
super(SendMessageType.END_EHSM_SESSION, pumpSession, buildPayload()); super(SendMessageType.END_EHSM_SESSION, pumpSession, buildPayload());
} }
...@@ -21,10 +22,13 @@ public class EndEHSMMessage extends MedtronicSendMessageRequestMessage { ...@@ -21,10 +22,13 @@ public class EndEHSMMessage extends MedtronicSendMessageRequestMessage {
return new byte[] { 0x01 }; return new byte[] { 0x01 };
} }
public void send(UsbHidDriver mDevice) throws IOException, TimeoutException { @Override
public ContourNextLinkResponseMessage send(UsbHidDriver mDevice) throws IOException, TimeoutException {
sendMessage(mDevice); sendMessage(mDevice);
// The End EHSM Session only has an 0x81 response // The End EHSM Session only has an 0x81 response
readMessage(mDevice); readMessage(mDevice);
return null;
} }
} }
...@@ -16,7 +16,7 @@ import info.nightscout.android.medtronic.exception.EncryptionException; ...@@ -16,7 +16,7 @@ import info.nightscout.android.medtronic.exception.EncryptionException;
/** /**
* Created by lgoedhart on 26/03/2016. * Created by lgoedhart on 26/03/2016.
*/ */
public class MedtronicRequestMessage extends ContourNextLinkBinaryRequestMessage { public abstract class MedtronicRequestMessage<T> extends ContourNextLinkBinaryRequestMessage<T> {
static int ENVELOPE_SIZE = 2; static int ENVELOPE_SIZE = 2;
static int CRC_SIZE = 2; static int CRC_SIZE = 2;
......
...@@ -3,14 +3,16 @@ package info.nightscout.android.medtronic.message; ...@@ -3,14 +3,16 @@ package info.nightscout.android.medtronic.message;
import info.nightscout.android.medtronic.MedtronicCnlSession; import info.nightscout.android.medtronic.MedtronicCnlSession;
import info.nightscout.android.medtronic.exception.ChecksumException; import info.nightscout.android.medtronic.exception.ChecksumException;
import info.nightscout.android.medtronic.exception.EncryptionException; import info.nightscout.android.medtronic.exception.EncryptionException;
import info.nightscout.android.medtronic.exception.UnexpectedMessageException;
import java.io.IOException;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
import java.nio.ByteOrder; import java.nio.ByteOrder;
/** /**
* Created by volker on 18.12.2016. * Created by volker on 18.12.2016.
*/ */
public class MedtronicSendMessageRequestMessage extends MedtronicRequestMessage { public abstract class MedtronicSendMessageRequestMessage<T> extends MedtronicRequestMessage<T> {
static int ENVELOPE_SIZE = 11; static int ENVELOPE_SIZE = 11;
static int ENCRYPTED_ENVELOPE_SIZE = 3; static int ENCRYPTED_ENVELOPE_SIZE = 3;
static int CRC_SIZE = 2; static int CRC_SIZE = 2;
...@@ -34,6 +36,11 @@ public class MedtronicSendMessageRequestMessage extends MedtronicRequestMessage ...@@ -34,6 +36,11 @@ public class MedtronicSendMessageRequestMessage extends MedtronicRequestMessage
super(CommandType.SEND_MESSAGE, CommandAction.PUMP_REQUEST, pumpSession, buildPayload(sendMessageType, pumpSession, payload)); super(CommandType.SEND_MESSAGE, CommandAction.PUMP_REQUEST, pumpSession, buildPayload(sendMessageType, pumpSession, payload));
} }
@Override
protected ContourNextLinkResponseMessage getResponse(byte[] payload) throws ChecksumException, EncryptionException, IOException, UnexpectedMessageException {
return null;
}
/** /**
* MedtronicSendMessage: * MedtronicSendMessage:
* +-----------------+------------------------------+--------------+-------------------+--------------------------------+ * +-----------------+------------------------------+--------------+-------------------+--------------------------------+
......
...@@ -12,17 +12,13 @@ import info.nightscout.android.medtronic.exception.EncryptionException; ...@@ -12,17 +12,13 @@ import info.nightscout.android.medtronic.exception.EncryptionException;
* Created by volker on 10.12.2016. * Created by volker on 10.12.2016.
*/ */
public class OpenConnectionRequestMessage extends ContourNextLinkBinaryRequestMessage { public class OpenConnectionRequestMessage extends ContourNextLinkBinaryRequestMessage<OpenConnectionResponseMessage> {
public OpenConnectionRequestMessage(MedtronicCnlSession pumpSession, byte[] payload) throws ChecksumException { public OpenConnectionRequestMessage(MedtronicCnlSession pumpSession, byte[] payload) throws ChecksumException {
super(CommandType.OPEN_CONNECTION, pumpSession, payload); super(CommandType.OPEN_CONNECTION, pumpSession, payload);
} }
public OpenConnectionResponseMessage send(UsbHidDriver mDevice) throws IOException, TimeoutException, EncryptionException, ChecksumException { @Override
sendMessage(mDevice); protected OpenConnectionResponseMessage getResponse(byte[] payload) throws ChecksumException, EncryptionException {
return new OpenConnectionResponseMessage(payload);
OpenConnectionResponseMessage response = new OpenConnectionResponseMessage(readMessage(mDevice));
// FIXME - We need to care what the response message is - wrong MAC and all that
return response;
} }
} }
...@@ -7,21 +7,18 @@ import info.nightscout.android.USB.UsbHidDriver; ...@@ -7,21 +7,18 @@ import info.nightscout.android.USB.UsbHidDriver;
import info.nightscout.android.medtronic.MedtronicCnlSession; import info.nightscout.android.medtronic.MedtronicCnlSession;
import info.nightscout.android.medtronic.exception.ChecksumException; import info.nightscout.android.medtronic.exception.ChecksumException;
import info.nightscout.android.medtronic.exception.EncryptionException; import info.nightscout.android.medtronic.exception.EncryptionException;
import info.nightscout.android.medtronic.exception.UnexpectedMessageException;
/** /**
* Created by lgoedhart on 26/03/2016. * Created by lgoedhart on 26/03/2016.
*/ */
public class PumpBasalPatternRequestMessage extends MedtronicSendMessageRequestMessage { public class PumpBasalPatternRequestMessage extends MedtronicSendMessageRequestMessage<PumpBasalPatternResponseMessage> {
public PumpBasalPatternRequestMessage(MedtronicCnlSession pumpSession) throws EncryptionException, ChecksumException { public PumpBasalPatternRequestMessage(MedtronicCnlSession pumpSession) throws EncryptionException, ChecksumException {
super(SendMessageType.READ_BASAL_PATTERN_REQUEST, pumpSession, null); super(SendMessageType.READ_BASAL_PATTERN_REQUEST, pumpSession, null);
} }
public PumpBasalPatternResponseMessage send(UsbHidDriver mDevice) throws IOException, TimeoutException, ChecksumException, EncryptionException { @Override
sendMessage(mDevice); protected PumpBasalPatternResponseMessage getResponse(byte[] payload) throws ChecksumException, EncryptionException, IOException, UnexpectedMessageException {
return new PumpBasalPatternResponseMessage(mPumpSession, payload);
// Read the 0x81
PumpBasalPatternResponseMessage response = new PumpBasalPatternResponseMessage(mPumpSession, readMessage(mDevice));
return response;
} }
} }
...@@ -12,7 +12,7 @@ import info.nightscout.android.medtronic.exception.UnexpectedMessageException; ...@@ -12,7 +12,7 @@ import info.nightscout.android.medtronic.exception.UnexpectedMessageException;
/** /**
* Created by lgoedhart on 26/03/2016. * Created by lgoedhart on 26/03/2016.
*/ */
public class PumpStatusRequestMessage extends MedtronicSendMessageRequestMessage { public class PumpStatusRequestMessage extends MedtronicSendMessageRequestMessage<PumpStatusResponseMessage> {
public PumpStatusRequestMessage(MedtronicCnlSession pumpSession) throws EncryptionException, ChecksumException { public PumpStatusRequestMessage(MedtronicCnlSession pumpSession) throws EncryptionException, ChecksumException {
super(SendMessageType.READ_PUMP_STATUS_REQUEST, pumpSession, null); super(SendMessageType.READ_PUMP_STATUS_REQUEST, pumpSession, null);
} }
...@@ -23,8 +23,13 @@ public class PumpStatusRequestMessage extends MedtronicSendMessageRequestMessage ...@@ -23,8 +23,13 @@ public class PumpStatusRequestMessage extends MedtronicSendMessageRequestMessage
// Read the 0x81 // Read the 0x81
readMessage(mDevice); readMessage(mDevice);
PumpStatusResponseMessage response = new PumpStatusResponseMessage(mPumpSession, readMessage(mDevice)); PumpStatusResponseMessage response = this.getResponse(readMessage(mDevice));
return response; return response;
} }
@Override
protected PumpStatusResponseMessage getResponse(byte[] payload) throws ChecksumException, EncryptionException, IOException, UnexpectedMessageException {
return new PumpStatusResponseMessage(mPumpSession, payload);
}
} }
...@@ -7,24 +7,31 @@ import info.nightscout.android.USB.UsbHidDriver; ...@@ -7,24 +7,31 @@ import info.nightscout.android.USB.UsbHidDriver;
import info.nightscout.android.medtronic.MedtronicCnlSession; import info.nightscout.android.medtronic.MedtronicCnlSession;
import info.nightscout.android.medtronic.exception.ChecksumException; import info.nightscout.android.medtronic.exception.ChecksumException;
import info.nightscout.android.medtronic.exception.EncryptionException; import info.nightscout.android.medtronic.exception.EncryptionException;
import info.nightscout.android.medtronic.exception.UnexpectedMessageException;
/** /**
* Created by lgoedhart on 26/03/2016. * Created by lgoedhart on 26/03/2016.
*/ */
public class PumpTimeRequestMessage extends MedtronicSendMessageRequestMessage { public class PumpTimeRequestMessage extends MedtronicSendMessageRequestMessage<PumpTimeResponseMessage> {
public PumpTimeRequestMessage(MedtronicCnlSession pumpSession) throws EncryptionException, ChecksumException { public PumpTimeRequestMessage(MedtronicCnlSession pumpSession) throws EncryptionException, ChecksumException {
super(SendMessageType.TIME_REQUEST, pumpSession, null); super(SendMessageType.TIME_REQUEST, pumpSession, null);
} }
public PumpTimeResponseMessage send(UsbHidDriver mDevice) throws IOException, TimeoutException, ChecksumException, EncryptionException { @Override
public PumpTimeResponseMessage send(UsbHidDriver mDevice) throws IOException, TimeoutException, ChecksumException, EncryptionException, UnexpectedMessageException {
sendMessage(mDevice); sendMessage(mDevice);
// Read the 0x81 // Read the 0x81
readMessage(mDevice); readMessage(mDevice);
// Read the 0x80 // Read the 0x80
PumpTimeResponseMessage response = new PumpTimeResponseMessage(mPumpSession, readMessage(mDevice)); PumpTimeResponseMessage response = this.getResponse(readMessage(mDevice));
return response; return response;
} }
@Override
protected PumpTimeResponseMessage getResponse(byte[] payload) throws ChecksumException, EncryptionException, IOException, UnexpectedMessageException {
return new PumpTimeResponseMessage(mPumpSession, payload);
}
} }
...@@ -12,7 +12,7 @@ import info.nightscout.android.medtronic.exception.UnexpectedMessageException; ...@@ -12,7 +12,7 @@ import info.nightscout.android.medtronic.exception.UnexpectedMessageException;
/** /**
* Created by lgoedhart on 26/03/2016. * Created by lgoedhart on 26/03/2016.
*/ */
public class ReadHistoryInfoRequestMessage extends MedtronicSendMessageRequestMessage { public class ReadHistoryInfoRequestMessage extends MedtronicSendMessageRequestMessage<ReadHistoryInfoResponseMessage> {
public ReadHistoryInfoRequestMessage(MedtronicCnlSession pumpSession) throws EncryptionException, ChecksumException { public ReadHistoryInfoRequestMessage(MedtronicCnlSession pumpSession) throws EncryptionException, ChecksumException {
super(SendMessageType.READ_BASAL_PATTERN_REQUEST, pumpSession, new byte[] { super(SendMessageType.READ_BASAL_PATTERN_REQUEST, pumpSession, new byte[] {
2, 2,
...@@ -30,12 +30,8 @@ public class ReadHistoryInfoRequestMessage extends MedtronicSendMessageRequestMe ...@@ -30,12 +30,8 @@ public class ReadHistoryInfoRequestMessage extends MedtronicSendMessageRequestMe
}); });
} }
public ReadHistoryInfoResponseMessage send(UsbHidDriver mDevice) throws IOException, TimeoutException, ChecksumException, EncryptionException, UnexpectedMessageException { @Override
sendMessage(mDevice); protected ReadHistoryInfoResponseMessage getResponse(byte[] payload) throws ChecksumException, EncryptionException, IOException, UnexpectedMessageException {
return new ReadHistoryInfoResponseMessage(mPumpSession, payload);
// Read the 0x81
ReadHistoryInfoResponseMessage response = new ReadHistoryInfoResponseMessage(mPumpSession, readMessage(mDevice));
return response;
} }
} }
...@@ -12,16 +12,13 @@ import info.nightscout.android.medtronic.exception.EncryptionException; ...@@ -12,16 +12,13 @@ import info.nightscout.android.medtronic.exception.EncryptionException;
* Created by volker on 10.12.2016. * Created by volker on 10.12.2016.
*/ */
public class ReadInfoRequestMessage extends ContourNextLinkBinaryRequestMessage { public class ReadInfoRequestMessage extends ContourNextLinkBinaryRequestMessage<ReadInfoResponseMessage> {
public ReadInfoRequestMessage(MedtronicCnlSession pumpSession) throws ChecksumException { public ReadInfoRequestMessage(MedtronicCnlSession pumpSession) throws ChecksumException {
super(ContourNextLinkBinaryRequestMessage.CommandType.READ_INFO, pumpSession, null); super(ContourNextLinkBinaryRequestMessage.CommandType.READ_INFO, pumpSession, null);
} }
public ReadInfoResponseMessage send(UsbHidDriver mDevice) throws IOException, TimeoutException, EncryptionException, ChecksumException { @Override
sendMessage(mDevice); protected ReadInfoResponseMessage getResponse(byte[] payload) throws ChecksumException, EncryptionException, IOException {
return new ReadInfoResponseMessage(mPumpSession, payload);
ReadInfoResponseMessage response = new ReadInfoResponseMessage(mPumpSession, readMessage(mDevice));
return response;
} }
} }
...@@ -12,16 +12,13 @@ import info.nightscout.android.medtronic.exception.EncryptionException; ...@@ -12,16 +12,13 @@ import info.nightscout.android.medtronic.exception.EncryptionException;
* Created by volker on 10.12.2016. * Created by volker on 10.12.2016.
*/ */
public class RequestLinkKeyRequestMessage extends ContourNextLinkBinaryRequestMessage { public class RequestLinkKeyRequestMessage extends ContourNextLinkBinaryRequestMessage<RequestLinkKeyResponseMessage> {
public RequestLinkKeyRequestMessage(MedtronicCnlSession pumpSession) throws ChecksumException { public RequestLinkKeyRequestMessage(MedtronicCnlSession pumpSession) throws ChecksumException {
super(CommandType.REQUEST_LINK_KEY, pumpSession, null); super(CommandType.REQUEST_LINK_KEY, pumpSession, null);
} }
public RequestLinkKeyResponseMessage send(UsbHidDriver mDevice) throws IOException, TimeoutException, EncryptionException, ChecksumException { @Override
sendMessage(mDevice); protected RequestLinkKeyResponseMessage getResponse(byte[] payload) throws ChecksumException, EncryptionException {
return new RequestLinkKeyResponseMessage(mPumpSession, payload);
RequestLinkKeyResponseMessage response = new RequestLinkKeyResponseMessage(mPumpSession, readMessage(mDevice));
return response;
} }
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment