Skip to content

Commit 5e39519

Browse files
author
John Wang
committed
Use LTE SNR and RSRP to set signal level bar.
The LTE signal strength level is the smaller one between lte rsrp level and lte snr level if both rsrp and snr are valid. The lte snr mapping are Four bars: SNR >= 45 Three bars: 10 <= SNR < 45 Two bars: -30 <= SNR < 10 One bars: SNR < -30 No bars: No Service The invalid value of lte snr is changed to INVALID_SNR from -1, since -1 is a valid value of lte snr. bug:5640958 Change-Id: If26aaba0c7fcc0fee3db488b5adfa02922f06715
1 parent b2d37b3 commit 5e39519

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)