@@ -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 /**
0 commit comments