From afb92d4e1d2debe25076f90e59e3a9caa2af353c Mon Sep 17 00:00:00 2001 From: Pogman <subaziro@gmail.com> Date: Sat, 18 Feb 2017 15:35:34 +0000 Subject: [PATCH] RSSI status added (found as part of Negotiate Channel Response from Pump) Shows user percentage feedback of radio signal to help them diagnose reception issues. RSSI (Recieved Signal Strength Indicator) is a common name for the signal strength in a wireless network environment. It is a measure of the power level that a RF client device is receiving from an access point, for example. --- .../android/medtronic/MedtronicCnlReader.java | 2 ++ .../android/medtronic/MedtronicCnlSession.java | 14 ++++++++++++++ .../message/ChannelNegotiateResponseMessage.java | 7 +++++++ .../service/MedtronicCnlIntentService.java | 3 ++- 4 files changed, 25 insertions(+), 1 deletion(-) 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 7efd3ef..247bfe2 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 b5d9658..9c7952f 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 67f8d9b..54cff41 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 4809551..0db69af 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(); -- GitLab