Skip to content

Commit 792d83c

Browse files
Justin HoAndroid (Google) Code Review
authored andcommitted
Merge "Use LTE SNR and RSRP to set signal level bar." into ics-mr1
2 parents 34260ad + 5e39519 commit 792d83c

File tree

3 files changed

+48
-16
lines changed

3 files changed

+48
-16
lines changed

telephony/java/android/telephony/SignalStrength.java

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,9 @@ public class SignalStrength implements Parcelable {
4747
"none", "poor", "moderate", "good", "great"
4848
};
4949

50+
/** @hide */
51+
public static final int INVALID_SNR = 0x7FFFFFFF;
52+
5053
private int mGsmSignalStrength; // Valid values are (0-31, 99) as defined in TS 27.007 8.5
5154
private int mGsmBitErrorRate; // bit error rate (0-7, 99) as defined in TS 27.007 8.5
5255
private int mCdmaDbm; // This value is the RSSI value
@@ -96,7 +99,7 @@ public SignalStrength() {
9699
mLteSignalStrength = -1;
97100
mLteRsrp = -1;
98101
mLteRsrq = -1;
99-
mLteRssnr = -1;
102+
mLteRssnr = INVALID_SNR;
100103
mLteCqi = -1;
101104
isGsm = true;
102105
}
@@ -136,7 +139,8 @@ public SignalStrength(int gsmSignalStrength, int gsmBitErrorRate,
136139
int evdoDbm, int evdoEcio, int evdoSnr,
137140
boolean gsm) {
138141
this(gsmSignalStrength, gsmBitErrorRate, cdmaDbm, cdmaEcio,
139-
evdoDbm, evdoEcio, evdoSnr, -1, -1, -1, -1, -1, gsm);
142+
evdoDbm, evdoEcio, evdoSnr, -1, -1,
143+
-1, INVALID_SNR, -1, gsm);
140144
}
141145

142146
/**
@@ -292,7 +296,7 @@ public int getLevel() {
292296
if ((mLteSignalStrength == -1)
293297
&& (mLteRsrp == -1)
294298
&& (mLteRsrq == -1)
295-
&& (mLteRssnr == -1)
299+
&& (mLteRssnr == INVALID_SNR)
296300
&& (mLteCqi == -1)) {
297301
level = getGsmLevel();
298302
} else {
@@ -327,7 +331,7 @@ public int getAsuLevel() {
327331
if ((mLteSignalStrength == -1)
328332
&& (mLteRsrp == -1)
329333
&& (mLteRsrq == -1)
330-
&& (mLteRssnr == -1)
334+
&& (mLteRssnr == INVALID_SNR)
331335
&& (mLteCqi == -1)) {
332336
asuLevel = getGsmAsuLevel();
333337
} else {
@@ -363,7 +367,7 @@ public int getDbm() {
363367
if ((mLteSignalStrength == -1)
364368
&& (mLteRsrp == -1)
365369
&& (mLteRsrq == -1)
366-
&& (mLteRssnr == -1)
370+
&& (mLteRssnr == INVALID_SNR)
367371
&& (mLteCqi == -1)) {
368372
dBm = getGsmDbm();
369373
} else {
@@ -566,15 +570,31 @@ public int getLteDbm() {
566570
*/
567571
public int getLteLevel() {
568572
int levelLteRsrp = 0;
573+
int levelLteRssnr = 0;
569574

570575
if (mLteRsrp == -1) levelLteRsrp = 0;
571576
else if (mLteRsrp >= -95) levelLteRsrp = SIGNAL_STRENGTH_GREAT;
572577
else if (mLteRsrp >= -105) levelLteRsrp = SIGNAL_STRENGTH_GOOD;
573578
else if (mLteRsrp >= -115) levelLteRsrp = SIGNAL_STRENGTH_MODERATE;
574579
else levelLteRsrp = SIGNAL_STRENGTH_POOR;
575580

576-
if (DBG) log("Lte level: "+levelLteRsrp);
577-
return levelLteRsrp;
581+
if (mLteRssnr == INVALID_SNR) levelLteRssnr = 0;
582+
else if (mLteRssnr >= 45) levelLteRssnr = SIGNAL_STRENGTH_GREAT;
583+
else if (mLteRssnr >= 10) levelLteRssnr = SIGNAL_STRENGTH_GOOD;
584+
else if (mLteRssnr >= -30) levelLteRssnr = SIGNAL_STRENGTH_MODERATE;
585+
else levelLteRssnr = SIGNAL_STRENGTH_POOR;
586+
587+
int level;
588+
if (mLteRsrp == -1)
589+
level = levelLteRssnr;
590+
else if (mLteRssnr == INVALID_SNR)
591+
level = levelLteRsrp;
592+
else
593+
level = (levelLteRssnr < levelLteRsrp) ? levelLteRssnr : levelLteRsrp;
594+
595+
if (DBG) log("Lte rsrp level: "+levelLteRsrp
596+
+ " snr level: " + levelLteRssnr + " level: " + level);
597+
return level;
578598
}
579599

580600
/**

telephony/java/com/android/internal/telephony/cdma/CdmaLteServiceStateTracker.java

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,9 @@ protected void handlePollStateResultMessage(int what, AsyncResult ar) {
147147

148148
@Override
149149
protected void setSignalStrengthDefaultValues() {
150-
mSignalStrength = new SignalStrength(99, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, false);
150+
// TODO Make a constructor only has boolean gsm as parameter
151+
mSignalStrength = new SignalStrength(99, -1, -1, -1, -1, -1, -1,
152+
-1, -1, -1, SignalStrength.INVALID_SNR, -1, false);
151153
}
152154

153155
@Override
@@ -452,27 +454,35 @@ protected void onSignalStrengthResult(AsyncResult ar) {
452454
setSignalStrengthDefaultValues();
453455
} else {
454456
int[] ints = (int[])ar.result;
455-
int lteCqi = 99, lteRsrp = -1;
456-
int lteRssi = 99;
457+
458+
int lteRssi = -1;
459+
int lteRsrp = -1;
460+
int lteRsrq = -1;
461+
int lteRssnr = SignalStrength.INVALID_SNR;
462+
int lteCqi = -1;
463+
457464
int offset = 2;
458465
int cdmaDbm = (ints[offset] > 0) ? -ints[offset] : -120;
459466
int cdmaEcio = (ints[offset + 1] > 0) ? -ints[offset + 1] : -160;
460467
int evdoRssi = (ints[offset + 2] > 0) ? -ints[offset + 2] : -120;
461468
int evdoEcio = (ints[offset + 3] > 0) ? -ints[offset + 3] : -1;
462469
int evdoSnr = ((ints[offset + 4] > 0) && (ints[offset + 4] <= 8)) ? ints[offset + 4]
463470
: -1;
471+
464472
if (networkType == ServiceState.RADIO_TECHNOLOGY_LTE) {
465-
lteRssi = (ints[offset + 5] >= 0) ? ints[offset + 5] : 99;
466-
lteRsrp = (ints[offset + 6] < 0) ? ints[offset + 6] : -1;
467-
lteCqi = (ints[offset + 7] >= 0) ? ints[offset + 7] : 99;
473+
lteRssi = ints[offset+5];
474+
lteRsrp = ints[offset+6];
475+
lteRsrq = ints[offset+7];
476+
lteRssnr = ints[offset+8];
477+
lteCqi = ints[offset+9];
468478
}
469479

470480
if (networkType != ServiceState.RADIO_TECHNOLOGY_LTE) {
471481
mSignalStrength = new SignalStrength(99, -1, cdmaDbm, cdmaEcio, evdoRssi, evdoEcio,
472482
evdoSnr, false);
473483
} else {
474484
mSignalStrength = new SignalStrength(99, -1, cdmaDbm, cdmaEcio, evdoRssi, evdoEcio,
475-
evdoSnr, lteRssi, lteRsrp, -1, -1, lteCqi, true);
485+
evdoSnr, lteRssi, lteRsrp, lteRsrq, lteRssnr, lteCqi, true);
476486
}
477487
}
478488

telephony/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -671,7 +671,9 @@ protected void handlePollStateResult (int what, AsyncResult ar) {
671671
}
672672

673673
private void setSignalStrengthDefaultValues() {
674-
mSignalStrength = new SignalStrength(99, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, true);
674+
// TODO Make a constructor only has boolean gsm as parameter
675+
mSignalStrength = new SignalStrength(99, -1, -1, -1, -1, -1, -1,
676+
-1, -1, -1, SignalStrength.INVALID_SNR, -1, true);
675677
}
676678

677679
/**
@@ -1023,7 +1025,7 @@ private void onSignalStrengthResult(AsyncResult ar) {
10231025
int lteSignalStrength = -1;
10241026
int lteRsrp = -1;
10251027
int lteRsrq = -1;
1026-
int lteRssnr = -1;
1028+
int lteRssnr = SignalStrength.INVALID_SNR;
10271029
int lteCqi = -1;
10281030

10291031
if (ar.exception != null) {

0 commit comments

Comments
 (0)