diff options
| -rwxr-xr-x | api/current.txt | 1 | ||||
| -rw-r--r-- | telephony/java/android/telephony/CellSignalStrengthLte.java | 65 |
2 files changed, 56 insertions, 10 deletions
diff --git a/api/current.txt b/api/current.txt index ead6157b58d7..5ab3f6a05d33 100755 --- a/api/current.txt +++ b/api/current.txt @@ -42821,6 +42821,7 @@ package android.telephony { method public int getLevel(); method public int getRsrp(); method public int getRsrq(); + method public int getRssi(); method public int getRssnr(); method public int getTimingAdvance(); method public void writeToParcel(android.os.Parcel, int); diff --git a/telephony/java/android/telephony/CellSignalStrengthLte.java b/telephony/java/android/telephony/CellSignalStrengthLte.java index d6856b397a00..05c1fd53e901 100644 --- a/telephony/java/android/telephony/CellSignalStrengthLte.java +++ b/telephony/java/android/telephony/CellSignalStrengthLte.java @@ -31,8 +31,27 @@ public final class CellSignalStrengthLte extends CellSignalStrength implements P private static final String LOG_TAG = "CellSignalStrengthLte"; private static final boolean DBG = false; + /** + * Indicates the unknown or undetectable RSSI value in ASU. + * + * Reference: TS 27.007 8.5 - Signal quality +CSQ + */ + private static final int SIGNAL_STRENGTH_LTE_RSSI_ASU_UNKNOWN = 99; + /** + * Indicates the maximum valid RSSI value in ASU. + * + * Reference: TS 27.007 8.5 - Signal quality +CSQ + */ + private static final int SIGNAL_STRENGTH_LTE_RSSI_VALID_ASU_MAX_VALUE = 31; + /** + * Indicates the minimum valid RSSI value in ASU. + * + * Reference: TS 27.007 8.5 - Signal quality +CSQ + */ + private static final int SIGNAL_STRENGTH_LTE_RSSI_VALID_ASU_MIN_VALUE = 0; + @UnsupportedAppUsage - private int mSignalStrength; + private int mRssi; @UnsupportedAppUsage private int mRsrp; @UnsupportedAppUsage @@ -51,9 +70,9 @@ public final class CellSignalStrengthLte extends CellSignalStrength implements P } /** @hide */ - public CellSignalStrengthLte(int signalStrength, int rsrp, int rsrq, int rssnr, int cqi, + public CellSignalStrengthLte(int rssi, int rsrp, int rsrq, int rssnr, int cqi, int timingAdvance) { - mSignalStrength = signalStrength; + mRssi = convertRssiAsuToDBm(rssi); mRsrp = rsrp; mRsrq = rsrq; mRssnr = rssnr; @@ -68,7 +87,7 @@ public final class CellSignalStrengthLte extends CellSignalStrength implements P /** @hide */ protected void copyFrom(CellSignalStrengthLte s) { - mSignalStrength = s.mSignalStrength; + mRssi = s.mRssi; mRsrp = s.mRsrp; mRsrq = s.mRsrq; mRssnr = s.mRssnr; @@ -85,7 +104,7 @@ public final class CellSignalStrengthLte extends CellSignalStrength implements P /** @hide */ @Override public void setDefaultValues() { - mSignalStrength = CellInfo.UNAVAILABLE; + mRssi = CellInfo.UNAVAILABLE; mRsrp = CellInfo.UNAVAILABLE; mRsrq = CellInfo.UNAVAILABLE; mRssnr = CellInfo.UNAVAILABLE; @@ -142,6 +161,19 @@ public final class CellSignalStrengthLte extends CellSignalStrength implements P } /** + * Get Received Signal Strength Indication (RSSI) in dBm + * + * The value range is [-113, -51] inclusively or {@link CellInfo#UNAVAILABLE} if unavailable. + * + * Reference: TS 27.007 8.5 Signal quality +CSQ + * + * @return the RSSI if available or {@link CellInfo#UNAVAILABLE} if unavailable. + */ + public int getRssi() { + return mRssi; + } + + /** * Get reference signal signal-to-noise ratio * * @return the RSSNR if available or @@ -210,7 +242,7 @@ public final class CellSignalStrengthLte extends CellSignalStrength implements P @Override public int hashCode() { - return Objects.hash(mSignalStrength, mRsrp, mRsrq, mRssnr, mCqi, mTimingAdvance); + return Objects.hash(mRssi, mRsrp, mRsrq, mRssnr, mCqi, mTimingAdvance); } @Override @@ -227,7 +259,7 @@ public final class CellSignalStrengthLte extends CellSignalStrength implements P return false; } - return mSignalStrength == s.mSignalStrength + return mRssi == s.mRssi && mRsrp == s.mRsrp && mRsrq == s.mRsrq && mRssnr == s.mRssnr @@ -241,7 +273,7 @@ public final class CellSignalStrengthLte extends CellSignalStrength implements P @Override public String toString() { return "CellSignalStrengthLte:" - + " ss=" + mSignalStrength + + " rssi(dBm)=" + mRssi + " rsrp=" + mRsrp + " rsrq=" + mRsrq + " rssnr=" + mRssnr @@ -253,7 +285,7 @@ public final class CellSignalStrengthLte extends CellSignalStrength implements P @Override public void writeToParcel(Parcel dest, int flags) { if (DBG) log("writeToParcel(Parcel, int): " + toString()); - dest.writeInt(mSignalStrength); + dest.writeInt(mRssi); // Need to multiply rsrp and rsrq by -1 // to ensure consistency when reading values written here // unless the values are invalid @@ -269,7 +301,7 @@ public final class CellSignalStrengthLte extends CellSignalStrength implements P * where the token is already been processed. */ private CellSignalStrengthLte(Parcel in) { - mSignalStrength = in.readInt(); + mRssi = convertRssiAsuToDBm(in.readInt()); // rsrp and rsrq are written into the parcel as positive values. // Need to convert into negative values unless the values are invalid mRsrp = in.readInt(); @@ -309,4 +341,17 @@ public final class CellSignalStrengthLte extends CellSignalStrength implements P private static void log(String s) { Rlog.w(LOG_TAG, s); } + + private static int convertRssiAsuToDBm(int rssiAsu) { + if (rssiAsu != SIGNAL_STRENGTH_LTE_RSSI_ASU_UNKNOWN + && (rssiAsu < SIGNAL_STRENGTH_LTE_RSSI_VALID_ASU_MIN_VALUE + || rssiAsu > SIGNAL_STRENGTH_LTE_RSSI_VALID_ASU_MAX_VALUE)) { + Rlog.e(LOG_TAG, "convertRssiAsuToDBm: invalid RSSI in ASU=" + rssiAsu); + return CellInfo.UNAVAILABLE; + } + if (rssiAsu == SIGNAL_STRENGTH_LTE_RSSI_ASU_UNKNOWN) { + return CellInfo.UNAVAILABLE; + } + return -113 + (2 * rssiAsu); + } } |