diff options
3 files changed, 48 insertions, 16 deletions
diff --git a/telephony/java/android/telephony/SignalStrength.java b/telephony/java/android/telephony/SignalStrength.java index 05e198f..1a4b574 100644 --- a/telephony/java/android/telephony/SignalStrength.java +++ b/telephony/java/android/telephony/SignalStrength.java @@ -47,6 +47,9 @@ public class SignalStrength implements Parcelable { "none", "poor", "moderate", "good", "great" }; + /** @hide */ + public static final int INVALID_SNR = 0x7FFFFFFF; + private int mGsmSignalStrength; // Valid values are (0-31, 99) as defined in TS 27.007 8.5 private int mGsmBitErrorRate; // bit error rate (0-7, 99) as defined in TS 27.007 8.5 private int mCdmaDbm; // This value is the RSSI value @@ -96,7 +99,7 @@ public class SignalStrength implements Parcelable { mLteSignalStrength = -1; mLteRsrp = -1; mLteRsrq = -1; - mLteRssnr = -1; + mLteRssnr = INVALID_SNR; mLteCqi = -1; isGsm = true; } @@ -136,7 +139,8 @@ public class SignalStrength implements Parcelable { int evdoDbm, int evdoEcio, int evdoSnr, boolean gsm) { this(gsmSignalStrength, gsmBitErrorRate, cdmaDbm, cdmaEcio, - evdoDbm, evdoEcio, evdoSnr, -1, -1, -1, -1, -1, gsm); + evdoDbm, evdoEcio, evdoSnr, -1, -1, + -1, INVALID_SNR, -1, gsm); } /** @@ -292,7 +296,7 @@ public class SignalStrength implements Parcelable { if ((mLteSignalStrength == -1) && (mLteRsrp == -1) && (mLteRsrq == -1) - && (mLteRssnr == -1) + && (mLteRssnr == INVALID_SNR) && (mLteCqi == -1)) { level = getGsmLevel(); } else { @@ -327,7 +331,7 @@ public class SignalStrength implements Parcelable { if ((mLteSignalStrength == -1) && (mLteRsrp == -1) && (mLteRsrq == -1) - && (mLteRssnr == -1) + && (mLteRssnr == INVALID_SNR) && (mLteCqi == -1)) { asuLevel = getGsmAsuLevel(); } else { @@ -363,7 +367,7 @@ public class SignalStrength implements Parcelable { if ((mLteSignalStrength == -1) && (mLteRsrp == -1) && (mLteRsrq == -1) - && (mLteRssnr == -1) + && (mLteRssnr == INVALID_SNR) && (mLteCqi == -1)) { dBm = getGsmDbm(); } else { @@ -566,6 +570,7 @@ public class SignalStrength implements Parcelable { */ public int getLteLevel() { int levelLteRsrp = 0; + int levelLteRssnr = 0; if (mLteRsrp == -1) levelLteRsrp = 0; else if (mLteRsrp >= -95) levelLteRsrp = SIGNAL_STRENGTH_GREAT; @@ -573,8 +578,23 @@ public class SignalStrength implements Parcelable { else if (mLteRsrp >= -115) levelLteRsrp = SIGNAL_STRENGTH_MODERATE; else levelLteRsrp = SIGNAL_STRENGTH_POOR; - if (DBG) log("Lte level: "+levelLteRsrp); - return levelLteRsrp; + if (mLteRssnr == INVALID_SNR) levelLteRssnr = 0; + else if (mLteRssnr >= 45) levelLteRssnr = SIGNAL_STRENGTH_GREAT; + else if (mLteRssnr >= 10) levelLteRssnr = SIGNAL_STRENGTH_GOOD; + else if (mLteRssnr >= -30) levelLteRssnr = SIGNAL_STRENGTH_MODERATE; + else levelLteRssnr = SIGNAL_STRENGTH_POOR; + + int level; + if (mLteRsrp == -1) + level = levelLteRssnr; + else if (mLteRssnr == INVALID_SNR) + level = levelLteRsrp; + else + level = (levelLteRssnr < levelLteRsrp) ? levelLteRssnr : levelLteRsrp; + + if (DBG) log("Lte rsrp level: "+levelLteRsrp + + " snr level: " + levelLteRssnr + " level: " + level); + return level; } /** diff --git a/telephony/java/com/android/internal/telephony/cdma/CdmaLteServiceStateTracker.java b/telephony/java/com/android/internal/telephony/cdma/CdmaLteServiceStateTracker.java index 3486190..610cd5d 100644 --- a/telephony/java/com/android/internal/telephony/cdma/CdmaLteServiceStateTracker.java +++ b/telephony/java/com/android/internal/telephony/cdma/CdmaLteServiceStateTracker.java @@ -147,7 +147,9 @@ public class CdmaLteServiceStateTracker extends CdmaServiceStateTracker { @Override protected void setSignalStrengthDefaultValues() { - mSignalStrength = new SignalStrength(99, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, false); + // TODO Make a constructor only has boolean gsm as parameter + mSignalStrength = new SignalStrength(99, -1, -1, -1, -1, -1, -1, + -1, -1, -1, SignalStrength.INVALID_SNR, -1, false); } @Override @@ -452,8 +454,13 @@ public class CdmaLteServiceStateTracker extends CdmaServiceStateTracker { setSignalStrengthDefaultValues(); } else { int[] ints = (int[])ar.result; - int lteCqi = 99, lteRsrp = -1; - int lteRssi = 99; + + int lteRssi = -1; + int lteRsrp = -1; + int lteRsrq = -1; + int lteRssnr = SignalStrength.INVALID_SNR; + int lteCqi = -1; + int offset = 2; int cdmaDbm = (ints[offset] > 0) ? -ints[offset] : -120; int cdmaEcio = (ints[offset + 1] > 0) ? -ints[offset + 1] : -160; @@ -461,10 +468,13 @@ public class CdmaLteServiceStateTracker extends CdmaServiceStateTracker { int evdoEcio = (ints[offset + 3] > 0) ? -ints[offset + 3] : -1; int evdoSnr = ((ints[offset + 4] > 0) && (ints[offset + 4] <= 8)) ? ints[offset + 4] : -1; + if (networkType == ServiceState.RADIO_TECHNOLOGY_LTE) { - lteRssi = (ints[offset + 5] >= 0) ? ints[offset + 5] : 99; - lteRsrp = (ints[offset + 6] < 0) ? ints[offset + 6] : -1; - lteCqi = (ints[offset + 7] >= 0) ? ints[offset + 7] : 99; + lteRssi = ints[offset+5]; + lteRsrp = ints[offset+6]; + lteRsrq = ints[offset+7]; + lteRssnr = ints[offset+8]; + lteCqi = ints[offset+9]; } if (networkType != ServiceState.RADIO_TECHNOLOGY_LTE) { @@ -472,7 +482,7 @@ public class CdmaLteServiceStateTracker extends CdmaServiceStateTracker { evdoSnr, false); } else { mSignalStrength = new SignalStrength(99, -1, cdmaDbm, cdmaEcio, evdoRssi, evdoEcio, - evdoSnr, lteRssi, lteRsrp, -1, -1, lteCqi, true); + evdoSnr, lteRssi, lteRsrp, lteRsrq, lteRssnr, lteCqi, true); } } diff --git a/telephony/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java b/telephony/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java index 84127cf..6e2b262 100644 --- a/telephony/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java +++ b/telephony/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java @@ -671,7 +671,9 @@ final class GsmServiceStateTracker extends ServiceStateTracker { } private void setSignalStrengthDefaultValues() { - mSignalStrength = new SignalStrength(99, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, true); + // TODO Make a constructor only has boolean gsm as parameter + mSignalStrength = new SignalStrength(99, -1, -1, -1, -1, -1, -1, + -1, -1, -1, SignalStrength.INVALID_SNR, -1, true); } /** @@ -1023,7 +1025,7 @@ final class GsmServiceStateTracker extends ServiceStateTracker { int lteSignalStrength = -1; int lteRsrp = -1; int lteRsrq = -1; - int lteRssnr = -1; + int lteRssnr = SignalStrength.INVALID_SNR; int lteCqi = -1; if (ar.exception != null) { |