Merge "Use LTE SNR and RSRP to set signal level bar." into ics-mr1

This commit is contained in:
Justin Ho
2012-01-31 14:00:55 -08:00
committed by Android (Google) Code Review
3 changed files with 48 additions and 16 deletions

View File

@ -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;
}
/**

View File

@ -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);
}
}

View File

@ -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) {