Update VersionResponse
This commit is contained in:
parent
5d25e39dd1
commit
b515fbae92
2 changed files with 65 additions and 31 deletions
|
@ -7,45 +7,51 @@ import info.nightscout.androidaps.plugins.pump.omnipod.defs.MessageBlockType;
|
||||||
import info.nightscout.androidaps.plugins.pump.omnipod.defs.PodProgressStatus;
|
import info.nightscout.androidaps.plugins.pump.omnipod.defs.PodProgressStatus;
|
||||||
|
|
||||||
public class VersionResponse extends MessageBlock {
|
public class VersionResponse extends MessageBlock {
|
||||||
|
private static final int ASSIGN_ADDRESS_VERSION_RESPONSE_LENGTH = 0x15;
|
||||||
|
private static final int SETUP_POD_VERSION_RESPONSE_LENGTH = 0x1b;
|
||||||
|
|
||||||
private final PodProgressStatus podProgressStatus;
|
private final PodProgressStatus podProgressStatus;
|
||||||
private final FirmwareVersion pmVersion;
|
private final FirmwareVersion pmVersion;
|
||||||
private final FirmwareVersion piVersion;
|
private final FirmwareVersion piVersion;
|
||||||
private final int lot;
|
private final int lot;
|
||||||
private final int tid;
|
private final int tid;
|
||||||
|
private Byte gain; // Only in the assign address version response
|
||||||
|
private Byte rssi; // Only in the assign address version response
|
||||||
private final int address;
|
private final int address;
|
||||||
|
|
||||||
public VersionResponse(byte[] encodedData) {
|
public VersionResponse(byte[] data) {
|
||||||
int length = ByteUtil.convertUnsignedByteToInt(encodedData[1]) + 2;
|
int length = ByteUtil.convertUnsignedByteToInt(data[1]);
|
||||||
this.encodedData = ByteUtil.substring(encodedData, 2, length - 2);
|
this.encodedData = ByteUtil.substring(data, 2, length);
|
||||||
|
|
||||||
boolean extraByte;
|
|
||||||
byte[] truncatedData;
|
|
||||||
|
|
||||||
switch (length) {
|
switch (length) {
|
||||||
case 0x17:
|
case ASSIGN_ADDRESS_VERSION_RESPONSE_LENGTH:
|
||||||
truncatedData = ByteUtil.substring(encodedData, 2);
|
podProgressStatus = PodProgressStatus.fromByte(data[9]);
|
||||||
extraByte = true;
|
pmVersion = new FirmwareVersion(data[2], data[3], data[4]);
|
||||||
|
piVersion = new FirmwareVersion(data[5], data[6], data[7]);
|
||||||
|
lot = ByteUtil.toInt((int) data[10], (int) data[11],
|
||||||
|
(int) data[12], (int) data[13], ByteUtil.BitConversion.BIG_ENDIAN);
|
||||||
|
tid = ByteUtil.toInt((int) data[14], (int) data[15],
|
||||||
|
(int) data[16], (int) data[17], ByteUtil.BitConversion.BIG_ENDIAN);
|
||||||
|
gain = (byte) ((data[18] & 0xc0) >>> 6);
|
||||||
|
rssi = (byte) (data[18] & 0x3f);
|
||||||
|
address = ByteUtil.toInt((int) data[19], (int) data[20],
|
||||||
|
(int) data[21], (int) data[22], ByteUtil.BitConversion.BIG_ENDIAN);
|
||||||
break;
|
break;
|
||||||
case 0x1D:
|
case SETUP_POD_VERSION_RESPONSE_LENGTH:
|
||||||
truncatedData = ByteUtil.substring(encodedData, 9);
|
podProgressStatus = PodProgressStatus.fromByte(data[16]);
|
||||||
extraByte = false;
|
pmVersion = new FirmwareVersion(data[9], data[10], data[11]);
|
||||||
|
piVersion = new FirmwareVersion(data[12], data[13], data[14]);
|
||||||
|
lot = ByteUtil.toInt((int) data[17], (int) data[18],
|
||||||
|
(int) data[19], (int) data[20], ByteUtil.BitConversion.BIG_ENDIAN);
|
||||||
|
tid = ByteUtil.toInt((int) data[21], (int) data[22],
|
||||||
|
(int) data[23], (int) data[24], ByteUtil.BitConversion.BIG_ENDIAN);
|
||||||
|
|
||||||
|
address = ByteUtil.toInt((int) data[25], (int) data[26],
|
||||||
|
(int) data[27], (int) data[28], ByteUtil.BitConversion.BIG_ENDIAN);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
throw new IllegalArgumentException("Unrecognized VersionResponse message length: " + length);
|
throw new IllegalArgumentException("Unrecognized VersionResponse message length: " + length);
|
||||||
}
|
}
|
||||||
|
|
||||||
podProgressStatus = PodProgressStatus.fromByte(truncatedData[7]);
|
|
||||||
pmVersion = new FirmwareVersion(truncatedData[0], truncatedData[1], truncatedData[2]);
|
|
||||||
piVersion = new FirmwareVersion(truncatedData[3], truncatedData[4], truncatedData[5]);
|
|
||||||
lot = ByteUtil.toInt((int) truncatedData[8], (int) truncatedData[9],
|
|
||||||
(int) truncatedData[10], (int) truncatedData[11], ByteUtil.BitConversion.BIG_ENDIAN);
|
|
||||||
tid = ByteUtil.toInt((int) truncatedData[12], (int) truncatedData[13],
|
|
||||||
(int) truncatedData[14], (int) truncatedData[15], ByteUtil.BitConversion.BIG_ENDIAN);
|
|
||||||
|
|
||||||
int indexIncrement = extraByte ? 1 : 0;
|
|
||||||
|
|
||||||
address = ByteUtil.toInt((int) truncatedData[16 + indexIncrement], (int) truncatedData[17 + indexIncrement],
|
|
||||||
(int) truncatedData[18 + indexIncrement], (int) truncatedData[19 + indexIncrement], ByteUtil.BitConversion.BIG_ENDIAN);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -73,6 +79,22 @@ public class VersionResponse extends MessageBlock {
|
||||||
return tid;
|
return tid;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Byte getGain() {
|
||||||
|
return gain;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Byte getRssi() {
|
||||||
|
return rssi;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isAssignAddressVersionResponse() {
|
||||||
|
return encodedData.length == ASSIGN_ADDRESS_VERSION_RESPONSE_LENGTH;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isSetupPodVersionResponse() {
|
||||||
|
return encodedData.length == SETUP_POD_VERSION_RESPONSE_LENGTH;
|
||||||
|
}
|
||||||
|
|
||||||
public int getAddress() {
|
public int getAddress() {
|
||||||
return address;
|
return address;
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,10 +7,14 @@ import info.nightscout.androidaps.plugins.pump.omnipod.defs.PodProgressStatus;
|
||||||
|
|
||||||
import static org.junit.Assert.assertArrayEquals;
|
import static org.junit.Assert.assertArrayEquals;
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
|
import static org.junit.Assert.assertFalse;
|
||||||
|
import static org.junit.Assert.assertNotNull;
|
||||||
|
import static org.junit.Assert.assertNull;
|
||||||
|
import static org.junit.Assert.assertTrue;
|
||||||
|
|
||||||
public class VersionResponseTest {
|
public class VersionResponseTest {
|
||||||
@Test
|
@Test
|
||||||
public void testRawDataShortResponse() {
|
public void testRawDataAssignAddressVersionResponse() {
|
||||||
byte[] encodedData = ByteUtil.fromHexString("011502070002070002020000a64000097c279c1f08ced2");
|
byte[] encodedData = ByteUtil.fromHexString("011502070002070002020000a64000097c279c1f08ced2");
|
||||||
|
|
||||||
VersionResponse versionResponse = new VersionResponse(encodedData);
|
VersionResponse versionResponse = new VersionResponse(encodedData);
|
||||||
|
@ -18,7 +22,7 @@ public class VersionResponseTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testRawDataShortResponseWithLongerMessage() {
|
public void testRawDataAssignAddressVersionResponseWithLongerMessage() {
|
||||||
byte[] encodedData = ByteUtil.fromHexString("011502070002070002020000a64000097c279c1f08ced201");
|
byte[] encodedData = ByteUtil.fromHexString("011502070002070002020000a64000097c279c1f08ced201");
|
||||||
byte[] expected = ByteUtil.fromHexString("011502070002070002020000a64000097c279c1f08ced2");
|
byte[] expected = ByteUtil.fromHexString("011502070002070002020000a64000097c279c1f08ced2");
|
||||||
|
|
||||||
|
@ -27,7 +31,7 @@ public class VersionResponseTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testRawDataLongResponse() {
|
public void testRawDataSetupPodVersionResponse() {
|
||||||
byte[] encodedData = ByteUtil.fromHexString("011b13881008340a5002070002070002030000a3770003ab371f00ee87");
|
byte[] encodedData = ByteUtil.fromHexString("011b13881008340a5002070002070002030000a3770003ab371f00ee87");
|
||||||
|
|
||||||
VersionResponse versionResponse = new VersionResponse(encodedData);
|
VersionResponse versionResponse = new VersionResponse(encodedData);
|
||||||
|
@ -36,7 +40,7 @@ public class VersionResponseTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testRawDataLongResponseWithLongerMessage() {
|
public void testRawDataSetupPodVersionResponseWithLongerMessage() {
|
||||||
byte[] encodedData = ByteUtil.fromHexString("011b13881008340a5002070002070002030000a3770003ab371f00ee8701");
|
byte[] encodedData = ByteUtil.fromHexString("011b13881008340a5002070002070002030000a3770003ab371f00ee8701");
|
||||||
byte[] expected = ByteUtil.fromHexString("011b13881008340a5002070002070002030000a3770003ab371f00ee87");
|
byte[] expected = ByteUtil.fromHexString("011b13881008340a5002070002070002030000a3770003ab371f00ee87");
|
||||||
|
|
||||||
|
@ -45,25 +49,33 @@ public class VersionResponseTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testVersionResponse() {
|
public void testAssignAddressVersionResponse() {
|
||||||
VersionResponse versionResponse = new VersionResponse(ByteUtil.fromHexString("011502070002070002020000a64000097c279c1f08ced2"));
|
VersionResponse versionResponse = new VersionResponse(ByteUtil.fromHexString("011502070002070002020000a64000097c279c1f08ced2"));
|
||||||
|
|
||||||
|
assertTrue(versionResponse.isAssignAddressVersionResponse());
|
||||||
|
assertFalse(versionResponse.isSetupPodVersionResponse());
|
||||||
assertEquals(0x1f08ced2, versionResponse.getAddress());
|
assertEquals(0x1f08ced2, versionResponse.getAddress());
|
||||||
assertEquals(42560, versionResponse.getLot());
|
assertEquals(42560, versionResponse.getLot());
|
||||||
assertEquals(621607, versionResponse.getTid());
|
assertEquals(621607, versionResponse.getTid());
|
||||||
assertEquals("2.7.0", versionResponse.getPiVersion().toString());
|
assertEquals("2.7.0", versionResponse.getPiVersion().toString());
|
||||||
assertEquals("2.7.0", versionResponse.getPmVersion().toString());
|
assertEquals("2.7.0", versionResponse.getPmVersion().toString());
|
||||||
|
assertNotNull(versionResponse.getRssi());
|
||||||
|
assertNotNull(versionResponse.getGain());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testLongVersionResponse() {
|
public void testSetupPodVersionResponse() {
|
||||||
VersionResponse versionResponse = new VersionResponse(ByteUtil.fromHexString("011b13881008340a5002070002070002030000a3770003ab371f00ee87"));
|
VersionResponse versionResponse = new VersionResponse(ByteUtil.fromHexString("011b13881008340a5002070002070002030000a3770003ab371f00ee87"));
|
||||||
|
|
||||||
|
assertFalse(versionResponse.isAssignAddressVersionResponse());
|
||||||
|
assertTrue(versionResponse.isSetupPodVersionResponse());
|
||||||
assertEquals(0x1f00ee87, versionResponse.getAddress());
|
assertEquals(0x1f00ee87, versionResponse.getAddress());
|
||||||
assertEquals(41847, versionResponse.getLot());
|
assertEquals(41847, versionResponse.getLot());
|
||||||
assertEquals(240439, versionResponse.getTid());
|
assertEquals(240439, versionResponse.getTid());
|
||||||
assertEquals(PodProgressStatus.PAIRING_SUCCESS, versionResponse.getPodProgressStatus());
|
assertEquals(PodProgressStatus.PAIRING_SUCCESS, versionResponse.getPodProgressStatus());
|
||||||
assertEquals("2.7.0", versionResponse.getPiVersion().toString());
|
assertEquals("2.7.0", versionResponse.getPiVersion().toString());
|
||||||
assertEquals("2.7.0", versionResponse.getPmVersion().toString());
|
assertEquals("2.7.0", versionResponse.getPmVersion().toString());
|
||||||
|
assertNull(versionResponse.getRssi());
|
||||||
|
assertNull(versionResponse.getGain());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue