diff --git a/app/src/main/java/info/nightscout/android/medtronic/MedtronicCnlReader.java b/app/src/main/java/info/nightscout/android/medtronic/MedtronicCnlReader.java index 7efd3ef64e16fd2a735bb172950a83c2be3de732..247bfe2820ec38eb062567756a9c210bf288c732 100644 --- a/app/src/main/java/info/nightscout/android/medtronic/MedtronicCnlReader.java +++ b/app/src/main/java/info/nightscout/android/medtronic/MedtronicCnlReader.java @@ -150,9 +150,11 @@ public class MedtronicCnlReader { ChannelNegotiateResponseMessage response = new ChannelNegotiateRequestMessage(mPumpSession).send(mDevice); if (response.getRadioChannel() == mPumpSession.getRadioChannel()) { + mPumpSession.setRadioRSSI(response.getRadioRSSI()); break; } else { mPumpSession.setRadioChannel((byte)0); + mPumpSession.setRadioRSSI((byte)0); } } diff --git a/app/src/main/java/info/nightscout/android/medtronic/MedtronicCnlSession.java b/app/src/main/java/info/nightscout/android/medtronic/MedtronicCnlSession.java index b5d96589c39013cbba4acf9a29c219dd9adfd65e..9c7952f3803a8a17437d51345a26be47dec1d092 100644 --- a/app/src/main/java/info/nightscout/android/medtronic/MedtronicCnlSession.java +++ b/app/src/main/java/info/nightscout/android/medtronic/MedtronicCnlSession.java @@ -20,6 +20,8 @@ public class MedtronicCnlSession { private long pumpMAC; private byte radioChannel; + private byte radioRSSI; + private int bayerSequenceNumber = 1; private int medtronicSequenceNumber = 1; @@ -80,6 +82,14 @@ public class MedtronicCnlSession { return radioChannel; } + public byte getRadioRSSI() { + return radioRSSI; + } + + public int getRadioRSSIpercentage() { + return (((int) radioRSSI & 0x00FF) * 100) / 0xA8; + } + public void incrBayerSequenceNumber() { bayerSequenceNumber++; } @@ -92,6 +102,10 @@ public class MedtronicCnlSession { this.radioChannel = radioChannel; } + public void setRadioRSSI(byte radioRSSI) { + this.radioRSSI = radioRSSI; + } + public void setHMAC(byte[] hmac) { this.HMAC = hmac; } diff --git a/app/src/main/java/info/nightscout/android/medtronic/message/ChannelNegotiateResponseMessage.java b/app/src/main/java/info/nightscout/android/medtronic/message/ChannelNegotiateResponseMessage.java index 67f8d9beba4495cc760b07748f9141a576b66ee5..54cff417066ebfb51163b38a485f447d1e55ae64 100644 --- a/app/src/main/java/info/nightscout/android/medtronic/message/ChannelNegotiateResponseMessage.java +++ b/app/src/main/java/info/nightscout/android/medtronic/message/ChannelNegotiateResponseMessage.java @@ -16,6 +16,7 @@ public class ChannelNegotiateResponseMessage extends ContourNextLinkBinaryRespon private static final String TAG = ChannelNegotiateResponseMessage.class.getSimpleName(); private byte radioChannel = 0; + private byte radioRSSI = 0; protected ChannelNegotiateResponseMessage(MedtronicCnlSession pumpSession, byte[] payload) throws EncryptionException, ChecksumException, IOException { super(payload); @@ -25,15 +26,21 @@ public class ChannelNegotiateResponseMessage extends ContourNextLinkBinaryRespon Log.d(TAG, "negotiateChannel: Check response length"); if (responseBytes.length > 46) { radioChannel = responseBytes[76]; + radioRSSI = responseBytes[59]; if (responseBytes[76] != pumpSession.getRadioChannel()) { throw new IOException(String.format(Locale.getDefault(), "Expected to get a message for channel %d. Got %d", pumpSession.getRadioChannel(), responseBytes[76])); } } else { radioChannel = ((byte) 0); + radioRSSI = ((byte) 0); } } public byte getRadioChannel() { return radioChannel; } + + public byte getRadioRSSI() { + return radioRSSI; + } } diff --git a/app/src/main/java/info/nightscout/android/medtronic/service/MedtronicCnlIntentService.java b/app/src/main/java/info/nightscout/android/medtronic/service/MedtronicCnlIntentService.java index 480955183b9ddcf01c42a5849502c959b4740f56..0db69af0e53572c86dc39eb33d6fd838eade9a05 100644 --- a/app/src/main/java/info/nightscout/android/medtronic/service/MedtronicCnlIntentService.java +++ b/app/src/main/java/info/nightscout/android/medtronic/service/MedtronicCnlIntentService.java @@ -213,7 +213,8 @@ public class MedtronicCnlIntentService extends IntentService { } else { setActivePumpMac(pumpMAC); activePump.setLastRadioChannel(radioChannel); - sendStatus(String.format(Locale.getDefault(), "Connected to Contour Next Link on channel %d.", (int) radioChannel)); + //sendStatus(String.format(Locale.getDefault(), "Connected to Contour Next Link on channel %d.", (int) radioChannel)); + sendStatus(String.format(Locale.getDefault(), "Connected on channel %d RSSI: %d%%", (int) radioChannel, cnlReader.getPumpSession().getRadioRSSIpercentage())); Log.d(TAG, String.format("Connected to Contour Next Link on channel %d.", (int) radioChannel)); cnlReader.beginEHSMSession();