Merge changes from topics "pick-tdscdma", "wcdma-rscp" into pi-dev
* changes: Update SignalStrength to use ASU for TD-SDCMA Customize the WCDMA signal strength based on RSCP
This commit is contained in:
committed by
Android (Google) Code Review
commit
1a1dc60ff5
@@ -1856,6 +1856,33 @@ public class CarrierConfigManager {
|
|||||||
public static final String KEY_CARRIER_NETWORK_SERVICE_WWAN_PACKAGE_OVERRIDE_STRING
|
public static final String KEY_CARRIER_NETWORK_SERVICE_WWAN_PACKAGE_OVERRIDE_STRING
|
||||||
= "carrier_network_service_wwan_package_override_string";
|
= "carrier_network_service_wwan_package_override_string";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A list of 4 LTE RSCP thresholds above which a signal level is considered POOR,
|
||||||
|
* MODERATE, GOOD, or EXCELLENT, to be used in SignalStrength reporting.
|
||||||
|
*
|
||||||
|
* Note that the min and max thresholds are fixed at -120 and -24, as set in 3GPP TS 27.007
|
||||||
|
* section 8.69.
|
||||||
|
* <p>
|
||||||
|
* See SignalStrength#MAX_WCDMA_RSCP and SignalStrength#MIN_WDCMA_RSCP. Any signal level outside
|
||||||
|
* these boundaries is considered invalid.
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
public static final String KEY_WCDMA_RSCP_THRESHOLDS_INT_ARRAY =
|
||||||
|
"wcdma_rscp_thresholds_int_array";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The default measurement to use for signal strength reporting. If this is not specified, the
|
||||||
|
* RSSI is used.
|
||||||
|
* <p>
|
||||||
|
* e.g.) To use RSCP by default, set the value to "rscp". The signal strength level will
|
||||||
|
* then be determined by #KEY_WCDMA_RSCP_THRESHOLDS_INT_ARRAY
|
||||||
|
* <p>
|
||||||
|
* Currently this only supports the value "rscp"
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
public static final String KEY_WCDMA_DEFAULT_SIGNAL_STRENGTH_MEASUREMENT_STRING =
|
||||||
|
"wcdma_default_signal_strength_measurement_string";
|
||||||
|
|
||||||
/** The default value for every variable. */
|
/** The default value for every variable. */
|
||||||
private final static PersistableBundle sDefaults;
|
private final static PersistableBundle sDefaults;
|
||||||
|
|
||||||
@@ -2161,6 +2188,14 @@ public class CarrierConfigManager {
|
|||||||
-108, /* SIGNAL_STRENGTH_GOOD */
|
-108, /* SIGNAL_STRENGTH_GOOD */
|
||||||
-98, /* SIGNAL_STRENGTH_GREAT */
|
-98, /* SIGNAL_STRENGTH_GREAT */
|
||||||
});
|
});
|
||||||
|
sDefaults.putIntArray(KEY_WCDMA_RSCP_THRESHOLDS_INT_ARRAY,
|
||||||
|
new int[] {
|
||||||
|
-115, /* SIGNAL_STRENGTH_POOR */
|
||||||
|
-105, /* SIGNAL_STRENGTH_MODERATE */
|
||||||
|
-95, /* SIGNAL_STRENGTH_GOOD */
|
||||||
|
-85 /* SIGNAL_STRENGTH_GREAT */
|
||||||
|
});
|
||||||
|
sDefaults.putString(KEY_WCDMA_DEFAULT_SIGNAL_STRENGTH_MEASUREMENT_STRING, "");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ import android.content.res.Resources;
|
|||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Contains phone signal strength related information.
|
* Contains phone signal strength related information.
|
||||||
@@ -66,6 +67,13 @@ public class SignalStrength implements Parcelable {
|
|||||||
private static final int MAX_LTE_RSRP = -44;
|
private static final int MAX_LTE_RSRP = -44;
|
||||||
private static final int MIN_LTE_RSRP = -140;
|
private static final int MIN_LTE_RSRP = -140;
|
||||||
|
|
||||||
|
private static final int WCDMA_RSCP_THRESHOLDS_NUM = 4;
|
||||||
|
private static final int MAX_WCDMA_RSCP = -24;
|
||||||
|
private static final int MIN_WCDMA_RSCP = -120;
|
||||||
|
|
||||||
|
/* The type of signal measurement */
|
||||||
|
private static final String MEASUMENT_TYPE_RSCP = "rscp";
|
||||||
|
|
||||||
/** Parameters reported by the Radio */
|
/** Parameters reported by the Radio */
|
||||||
private int mGsmSignalStrength; // Valid values are (0-31, 99) as defined in TS 27.007 8.5
|
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 mGsmBitErrorRate; // bit error rate (0-7, 99) as defined in TS 27.007 8.5
|
||||||
@@ -79,7 +87,10 @@ public class SignalStrength implements Parcelable {
|
|||||||
private int mLteRsrq;
|
private int mLteRsrq;
|
||||||
private int mLteRssnr;
|
private int mLteRssnr;
|
||||||
private int mLteCqi;
|
private int mLteCqi;
|
||||||
private int mTdScdmaRscp;
|
private int mTdScdmaRscp; // Valid values are -24...-120dBm or INVALID if unknown
|
||||||
|
private int mWcdmaSignalStrength;
|
||||||
|
private int mWcdmaRscpAsu; // the WCDMA RSCP in ASU as reported from the HAL
|
||||||
|
private int mWcdmaRscp; // the WCDMA RSCP in dBm
|
||||||
|
|
||||||
/** Parameters from the framework */
|
/** Parameters from the framework */
|
||||||
private int mLteRsrpBoost; // offset to be reduced from the rsrp threshold while calculating
|
private int mLteRsrpBoost; // offset to be reduced from the rsrp threshold while calculating
|
||||||
@@ -92,6 +103,13 @@ public class SignalStrength implements Parcelable {
|
|||||||
// min and max are fixed at MIN_LTE_RSRP (-140) and MAX_LTE_RSRP (-44).
|
// min and max are fixed at MIN_LTE_RSRP (-140) and MAX_LTE_RSRP (-44).
|
||||||
private int mLteRsrpThresholds[] = new int[LTE_RSRP_THRESHOLDS_NUM];
|
private int mLteRsrpThresholds[] = new int[LTE_RSRP_THRESHOLDS_NUM];
|
||||||
|
|
||||||
|
// The type of default measurement for determining the display level of WCDMA signal bar.
|
||||||
|
private String mWcdmaDefaultSignalMeasurement;
|
||||||
|
|
||||||
|
// The threshold of WCDMA RSCP for determining the display level of WCDMA signal bar. Note that
|
||||||
|
// the min and max are fixed at MIN_WCDMA_RSCP (-120) and MAX_WCDMA_RSCP (-24).
|
||||||
|
private int mWcdmaRscpThresholds[] = new int[WCDMA_RSCP_THRESHOLDS_NUM];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a new SignalStrength from a intent notifier Bundle
|
* Create a new SignalStrength from a intent notifier Bundle
|
||||||
*
|
*
|
||||||
@@ -141,10 +159,14 @@ public class SignalStrength implements Parcelable {
|
|||||||
mLteRssnr = INVALID;
|
mLteRssnr = INVALID;
|
||||||
mLteCqi = INVALID;
|
mLteCqi = INVALID;
|
||||||
mTdScdmaRscp = INVALID;
|
mTdScdmaRscp = INVALID;
|
||||||
|
mWcdmaSignalStrength = 99;
|
||||||
|
mWcdmaRscp = INVALID;
|
||||||
mLteRsrpBoost = 0;
|
mLteRsrpBoost = 0;
|
||||||
mIsGsm = gsmFlag;
|
mIsGsm = gsmFlag;
|
||||||
mUseOnlyRsrpForLteLevel = false;
|
mUseOnlyRsrpForLteLevel = false;
|
||||||
|
mWcdmaDefaultSignalMeasurement = "";
|
||||||
setLteRsrpThresholds(getDefaultLteRsrpThresholds());
|
setLteRsrpThresholds(getDefaultLteRsrpThresholds());
|
||||||
|
setWcdmaRscpThresholds(getDefaultWcdmaRscpThresholds());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -157,9 +179,10 @@ public class SignalStrength implements Parcelable {
|
|||||||
int cdmaDbm, int cdmaEcio,
|
int cdmaDbm, int cdmaEcio,
|
||||||
int evdoDbm, int evdoEcio, int evdoSnr,
|
int evdoDbm, int evdoEcio, int evdoSnr,
|
||||||
int lteSignalStrength, int lteRsrp, int lteRsrq, int lteRssnr, int lteCqi,
|
int lteSignalStrength, int lteRsrp, int lteRsrq, int lteRssnr, int lteCqi,
|
||||||
int tdScdmaRscp,
|
int tdScdmaRscp, int wcdmaSignalStrength, int wcdmaRscpAsu,
|
||||||
// values Added by config
|
// values Added by config
|
||||||
int lteRsrpBoost, boolean gsmFlag, boolean lteLevelBaseOnRsrp) {
|
int lteRsrpBoost, boolean gsmFlag, boolean lteLevelBaseOnRsrp,
|
||||||
|
String wcdmaDefaultMeasurement) {
|
||||||
mGsmSignalStrength = gsmSignalStrength;
|
mGsmSignalStrength = gsmSignalStrength;
|
||||||
mGsmBitErrorRate = gsmBitErrorRate;
|
mGsmBitErrorRate = gsmBitErrorRate;
|
||||||
mCdmaDbm = cdmaDbm;
|
mCdmaDbm = cdmaDbm;
|
||||||
@@ -173,15 +196,20 @@ public class SignalStrength implements Parcelable {
|
|||||||
mLteRssnr = lteRssnr;
|
mLteRssnr = lteRssnr;
|
||||||
mLteCqi = lteCqi;
|
mLteCqi = lteCqi;
|
||||||
mTdScdmaRscp = INVALID;
|
mTdScdmaRscp = INVALID;
|
||||||
|
mWcdmaSignalStrength = wcdmaSignalStrength;
|
||||||
|
mWcdmaRscpAsu = wcdmaRscpAsu;
|
||||||
|
mWcdmaRscp = wcdmaRscpAsu - 120;
|
||||||
mLteRsrpBoost = lteRsrpBoost;
|
mLteRsrpBoost = lteRsrpBoost;
|
||||||
mIsGsm = gsmFlag;
|
mIsGsm = gsmFlag;
|
||||||
mUseOnlyRsrpForLteLevel = lteLevelBaseOnRsrp;
|
mUseOnlyRsrpForLteLevel = lteLevelBaseOnRsrp;
|
||||||
|
mWcdmaDefaultSignalMeasurement = wcdmaDefaultMeasurement;
|
||||||
setLteRsrpThresholds(getDefaultLteRsrpThresholds());
|
setLteRsrpThresholds(getDefaultLteRsrpThresholds());
|
||||||
|
setWcdmaRscpThresholds(getDefaultWcdmaRscpThresholds());
|
||||||
if (DBG) log("initialize: " + toString());
|
if (DBG) log("initialize: " + toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor for only values provided by Radio HAL
|
* Constructor for only values provided by Radio HAL V1.0
|
||||||
*
|
*
|
||||||
* @hide
|
* @hide
|
||||||
*/
|
*/
|
||||||
@@ -192,7 +220,23 @@ public class SignalStrength implements Parcelable {
|
|||||||
int tdScdmaRscp) {
|
int tdScdmaRscp) {
|
||||||
this(gsmSignalStrength, gsmBitErrorRate, cdmaDbm, cdmaEcio,
|
this(gsmSignalStrength, gsmBitErrorRate, cdmaDbm, cdmaEcio,
|
||||||
evdoDbm, evdoEcio, evdoSnr, lteSignalStrength, lteRsrp,
|
evdoDbm, evdoEcio, evdoSnr, lteSignalStrength, lteRsrp,
|
||||||
lteRsrq, lteRssnr, lteCqi, tdScdmaRscp, 0, true, false);
|
lteRsrq, lteRssnr, lteCqi, tdScdmaRscp, 99, INVALID, 0, true, false, "");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor for only values provided by Radio HAL V1.2
|
||||||
|
*
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
public SignalStrength(int gsmSignalStrength, int gsmBitErrorRate,
|
||||||
|
int cdmaDbm, int cdmaEcio,
|
||||||
|
int evdoDbm, int evdoEcio, int evdoSnr,
|
||||||
|
int lteSignalStrength, int lteRsrp, int lteRsrq, int lteRssnr, int lteCqi,
|
||||||
|
int tdScdmaRscp, int wcdmaSignalStrength, int wcdmaRscp) {
|
||||||
|
this(gsmSignalStrength, gsmBitErrorRate, cdmaDbm, cdmaEcio,
|
||||||
|
evdoDbm, evdoEcio, evdoSnr, lteSignalStrength, lteRsrp,
|
||||||
|
lteRsrq, lteRssnr, lteCqi, tdScdmaRscp, wcdmaSignalStrength, wcdmaRscp, 0, true,
|
||||||
|
false, "");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -223,10 +267,15 @@ public class SignalStrength implements Parcelable {
|
|||||||
mLteRssnr = s.mLteRssnr;
|
mLteRssnr = s.mLteRssnr;
|
||||||
mLteCqi = s.mLteCqi;
|
mLteCqi = s.mLteCqi;
|
||||||
mTdScdmaRscp = s.mTdScdmaRscp;
|
mTdScdmaRscp = s.mTdScdmaRscp;
|
||||||
|
mWcdmaSignalStrength = s.mWcdmaSignalStrength;
|
||||||
|
mWcdmaRscpAsu = s.mWcdmaRscpAsu;
|
||||||
|
mWcdmaRscp = s.mWcdmaRscp;
|
||||||
mLteRsrpBoost = s.mLteRsrpBoost;
|
mLteRsrpBoost = s.mLteRsrpBoost;
|
||||||
mIsGsm = s.mIsGsm;
|
mIsGsm = s.mIsGsm;
|
||||||
mUseOnlyRsrpForLteLevel = s.mUseOnlyRsrpForLteLevel;
|
mUseOnlyRsrpForLteLevel = s.mUseOnlyRsrpForLteLevel;
|
||||||
|
mWcdmaDefaultSignalMeasurement = s.mWcdmaDefaultSignalMeasurement;
|
||||||
setLteRsrpThresholds(s.mLteRsrpThresholds);
|
setLteRsrpThresholds(s.mLteRsrpThresholds);
|
||||||
|
setWcdmaRscpThresholds(s.mWcdmaRscpThresholds);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -250,10 +299,15 @@ public class SignalStrength implements Parcelable {
|
|||||||
mLteRssnr = in.readInt();
|
mLteRssnr = in.readInt();
|
||||||
mLteCqi = in.readInt();
|
mLteCqi = in.readInt();
|
||||||
mTdScdmaRscp = in.readInt();
|
mTdScdmaRscp = in.readInt();
|
||||||
|
mWcdmaSignalStrength = in.readInt();
|
||||||
|
mWcdmaRscpAsu = in.readInt();
|
||||||
|
mWcdmaRscp = in.readInt();
|
||||||
mLteRsrpBoost = in.readInt();
|
mLteRsrpBoost = in.readInt();
|
||||||
mIsGsm = in.readBoolean();
|
mIsGsm = in.readBoolean();
|
||||||
mUseOnlyRsrpForLteLevel = in.readBoolean();
|
mUseOnlyRsrpForLteLevel = in.readBoolean();
|
||||||
|
mWcdmaDefaultSignalMeasurement = in.readString();
|
||||||
in.readIntArray(mLteRsrpThresholds);
|
in.readIntArray(mLteRsrpThresholds);
|
||||||
|
in.readIntArray(mWcdmaRscpThresholds);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -273,10 +327,15 @@ public class SignalStrength implements Parcelable {
|
|||||||
out.writeInt(mLteRssnr);
|
out.writeInt(mLteRssnr);
|
||||||
out.writeInt(mLteCqi);
|
out.writeInt(mLteCqi);
|
||||||
out.writeInt(mTdScdmaRscp);
|
out.writeInt(mTdScdmaRscp);
|
||||||
|
out.writeInt(mWcdmaSignalStrength);
|
||||||
|
out.writeInt(mWcdmaRscpAsu);
|
||||||
|
out.writeInt(mWcdmaRscp);
|
||||||
out.writeInt(mLteRsrpBoost);
|
out.writeInt(mLteRsrpBoost);
|
||||||
out.writeBoolean(mIsGsm);
|
out.writeBoolean(mIsGsm);
|
||||||
out.writeBoolean(mUseOnlyRsrpForLteLevel);
|
out.writeBoolean(mUseOnlyRsrpForLteLevel);
|
||||||
|
out.writeString(mWcdmaDefaultSignalMeasurement);
|
||||||
out.writeIntArray(mLteRsrpThresholds);
|
out.writeIntArray(mLteRsrpThresholds);
|
||||||
|
out.writeIntArray(mWcdmaRscpThresholds);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -316,8 +375,18 @@ public class SignalStrength implements Parcelable {
|
|||||||
if (DBG) log("Signal before validate=" + this);
|
if (DBG) log("Signal before validate=" + this);
|
||||||
// TS 27.007 8.5
|
// TS 27.007 8.5
|
||||||
mGsmSignalStrength = mGsmSignalStrength >= 0 ? mGsmSignalStrength : 99;
|
mGsmSignalStrength = mGsmSignalStrength >= 0 ? mGsmSignalStrength : 99;
|
||||||
|
mWcdmaSignalStrength = (mWcdmaSignalStrength >= 0) ? mWcdmaSignalStrength : 99;
|
||||||
|
mLteSignalStrength = (mLteSignalStrength >= 0) ? mLteSignalStrength : 99;
|
||||||
// BER no change;
|
// BER no change;
|
||||||
|
|
||||||
|
// WCDMA RSCP valid values are -120 through -24 as defined in TS 27.007 8.69
|
||||||
|
// but are reported in ASU which is 0 through 96, so we do the conversion here
|
||||||
|
mWcdmaRscpAsu =
|
||||||
|
((mWcdmaRscpAsu - 120 >= MIN_WCDMA_RSCP) && (mWcdmaRscpAsu - 120 <= MAX_WCDMA_RSCP))
|
||||||
|
? mWcdmaRscpAsu : INVALID;
|
||||||
|
mWcdmaRscp = ((mWcdmaRscp >= MIN_WCDMA_RSCP) && (mWcdmaRscp <= MAX_WCDMA_RSCP))
|
||||||
|
? mWcdmaRscp : INVALID;
|
||||||
|
|
||||||
mCdmaDbm = mCdmaDbm > 0 ? -mCdmaDbm : -120;
|
mCdmaDbm = mCdmaDbm > 0 ? -mCdmaDbm : -120;
|
||||||
mCdmaEcio = (mCdmaEcio >= 0) ? -mCdmaEcio : -160;
|
mCdmaEcio = (mCdmaEcio >= 0) ? -mCdmaEcio : -160;
|
||||||
|
|
||||||
@@ -326,15 +395,14 @@ public class SignalStrength implements Parcelable {
|
|||||||
mEvdoSnr = ((mEvdoSnr >= 0) && (mEvdoSnr <= 8)) ? mEvdoSnr : -1;
|
mEvdoSnr = ((mEvdoSnr >= 0) && (mEvdoSnr <= 8)) ? mEvdoSnr : -1;
|
||||||
|
|
||||||
// TS 36.214 Physical Layer Section 5.1.3, TS 36.331 RRC
|
// TS 36.214 Physical Layer Section 5.1.3, TS 36.331 RRC
|
||||||
mLteSignalStrength = (mLteSignalStrength >= 0) ? mLteSignalStrength : 99;
|
|
||||||
mLteRsrp = ((-mLteRsrp >= MIN_LTE_RSRP) && (-mLteRsrp <= MAX_LTE_RSRP)) ? -mLteRsrp
|
mLteRsrp = ((-mLteRsrp >= MIN_LTE_RSRP) && (-mLteRsrp <= MAX_LTE_RSRP)) ? -mLteRsrp
|
||||||
: SignalStrength.INVALID;
|
: SignalStrength.INVALID;
|
||||||
mLteRsrq = ((mLteRsrq >= 3) && (mLteRsrq <= 20)) ? -mLteRsrq : SignalStrength.INVALID;
|
mLteRsrq = ((mLteRsrq >= 3) && (mLteRsrq <= 20)) ? -mLteRsrq : SignalStrength.INVALID;
|
||||||
mLteRssnr = ((mLteRssnr >= -200) && (mLteRssnr <= 300)) ? mLteRssnr
|
mLteRssnr = ((mLteRssnr >= -200) && (mLteRssnr <= 300)) ? mLteRssnr
|
||||||
: SignalStrength.INVALID;
|
: SignalStrength.INVALID;
|
||||||
|
|
||||||
mTdScdmaRscp = ((mTdScdmaRscp >= 25) && (mTdScdmaRscp <= 120))
|
mTdScdmaRscp = ((mTdScdmaRscp >= 0) && (mTdScdmaRscp <= 96))
|
||||||
? -mTdScdmaRscp : SignalStrength.INVALID;
|
? (mTdScdmaRscp - 120) : SignalStrength.INVALID;
|
||||||
// Cqi no change
|
// Cqi no change
|
||||||
if (DBG) log("Signal after validate=" + this);
|
if (DBG) log("Signal after validate=" + this);
|
||||||
}
|
}
|
||||||
@@ -371,6 +439,16 @@ public class SignalStrength implements Parcelable {
|
|||||||
mUseOnlyRsrpForLteLevel = useOnlyRsrpForLteLevel;
|
mUseOnlyRsrpForLteLevel = useOnlyRsrpForLteLevel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param defaultMeasurement sets the type of WCDMA default signal measurement
|
||||||
|
*
|
||||||
|
* Used by phone to determine default measurement type for calculation WCDMA signal level.
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
public void setWcdmaDefaultSignalMeasurement(String defaultMeasurement) {
|
||||||
|
mWcdmaDefaultSignalMeasurement = defaultMeasurement;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param lteRsrpBoost - signal strength offset
|
* @param lteRsrpBoost - signal strength offset
|
||||||
*
|
*
|
||||||
@@ -414,6 +492,23 @@ public class SignalStrength implements Parcelable {
|
|||||||
return this.mGsmBitErrorRate;
|
return this.mGsmBitErrorRate;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the threshold array for determining the display level of WCDMA signal bar.
|
||||||
|
*
|
||||||
|
* @param wcdmaRscpThresholds int array for determining the display level.
|
||||||
|
*
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
public void setWcdmaRscpThresholds(int[] wcdmaRscpThresholds) {
|
||||||
|
if ((wcdmaRscpThresholds == null)
|
||||||
|
|| (wcdmaRscpThresholds.length != WCDMA_RSCP_THRESHOLDS_NUM)) {
|
||||||
|
Log.wtf(LOG_TAG, "setWcdmaRscpThresholds - wcdmaRscpThresholds is invalid.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
System.arraycopy(wcdmaRscpThresholds, 0, mWcdmaRscpThresholds, 0,
|
||||||
|
WCDMA_RSCP_THRESHOLDS_NUM);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the CDMA RSSI value in dBm
|
* Get the CDMA RSSI value in dBm
|
||||||
*/
|
*/
|
||||||
@@ -505,6 +600,8 @@ public class SignalStrength implements Parcelable {
|
|||||||
asuLevel = getLteAsuLevel();
|
asuLevel = getLteAsuLevel();
|
||||||
} else if (mTdScdmaRscp != SignalStrength.INVALID) {
|
} else if (mTdScdmaRscp != SignalStrength.INVALID) {
|
||||||
asuLevel = getTdScdmaAsuLevel();
|
asuLevel = getTdScdmaAsuLevel();
|
||||||
|
} else if (mWcdmaRscp != SignalStrength.INVALID) {
|
||||||
|
asuLevel = getWcdmaAsuLevel();
|
||||||
} else {
|
} else {
|
||||||
asuLevel = getGsmAsuLevel();
|
asuLevel = getGsmAsuLevel();
|
||||||
}
|
}
|
||||||
@@ -538,7 +635,11 @@ public class SignalStrength implements Parcelable {
|
|||||||
dBm = getLteDbm();
|
dBm = getLteDbm();
|
||||||
if (dBm == INVALID) {
|
if (dBm == INVALID) {
|
||||||
if (getTdScdmaLevel() == SIGNAL_STRENGTH_NONE_OR_UNKNOWN) {
|
if (getTdScdmaLevel() == SIGNAL_STRENGTH_NONE_OR_UNKNOWN) {
|
||||||
dBm = getGsmDbm();
|
if (getWcdmaDbm() == INVALID) {
|
||||||
|
dBm = getGsmDbm();
|
||||||
|
} else {
|
||||||
|
dBm = getWcdmaDbm();
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
dBm = getTdScdmaDbm();
|
dBm = getTdScdmaDbm();
|
||||||
}
|
}
|
||||||
@@ -810,17 +911,21 @@ public class SignalStrength implements Parcelable {
|
|||||||
if (rsrpIconLevel != -1) return rsrpIconLevel;
|
if (rsrpIconLevel != -1) return rsrpIconLevel;
|
||||||
|
|
||||||
/* Valid values are (0-63, 99) as defined in TS 36.331 */
|
/* Valid values are (0-63, 99) as defined in TS 36.331 */
|
||||||
|
// TODO the range here is probably supposed to be (0..31, 99). It's unclear if anyone relies
|
||||||
|
// on the current incorrect range check, so this will be fixed in a future release with more
|
||||||
|
// soak time
|
||||||
if (mLteSignalStrength > 63) rssiIconLevel = SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
|
if (mLteSignalStrength > 63) rssiIconLevel = SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
|
||||||
else if (mLteSignalStrength >= 12) rssiIconLevel = SIGNAL_STRENGTH_GREAT;
|
else if (mLteSignalStrength >= 12) rssiIconLevel = SIGNAL_STRENGTH_GREAT;
|
||||||
else if (mLteSignalStrength >= 8) rssiIconLevel = SIGNAL_STRENGTH_GOOD;
|
else if (mLteSignalStrength >= 8) rssiIconLevel = SIGNAL_STRENGTH_GOOD;
|
||||||
else if (mLteSignalStrength >= 5) rssiIconLevel = SIGNAL_STRENGTH_MODERATE;
|
else if (mLteSignalStrength >= 5) rssiIconLevel = SIGNAL_STRENGTH_MODERATE;
|
||||||
else if (mLteSignalStrength >= 0) rssiIconLevel = SIGNAL_STRENGTH_POOR;
|
else if (mLteSignalStrength >= 0) rssiIconLevel = SIGNAL_STRENGTH_POOR;
|
||||||
|
|
||||||
if (DBG) log("getLTELevel - rssi:" + mLteSignalStrength + " rssiIconLevel:"
|
if (DBG) log("getLteLevel - rssi:" + mLteSignalStrength + " rssiIconLevel:"
|
||||||
+ rssiIconLevel);
|
+ rssiIconLevel);
|
||||||
return rssiIconLevel;
|
return rssiIconLevel;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the LTE signal level as an asu value between 0..97, 99 is unknown
|
* Get the LTE signal level as an asu value between 0..97, 99 is unknown
|
||||||
* Asu is calculated based on 3GPP RSRP. Refer to 3GPP 27.007 (Ver 10.3.0) Sec 8.69
|
* Asu is calculated based on 3GPP RSRP. Refer to 3GPP 27.007 (Ver 10.3.0) Sec 8.69
|
||||||
@@ -913,6 +1018,105 @@ public class SignalStrength implements Parcelable {
|
|||||||
return tdScdmaAsuLevel;
|
return tdScdmaAsuLevel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets WCDMA RSCP as a dbm value between -120 and -24, as defined in TS 27.007 8.69.
|
||||||
|
*
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
public int getWcdmaRscp() {
|
||||||
|
return mWcdmaRscp;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the WCDMA signal level as an ASU value between 0-96, 255 is unknown
|
||||||
|
*
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
public int getWcdmaAsuLevel() {
|
||||||
|
/*
|
||||||
|
* 3GPP 27.007 (Ver 10.3.0) Sec 8.69
|
||||||
|
* 0 -120 dBm or less
|
||||||
|
* 1 -119 dBm
|
||||||
|
* 2...95 -118... -25 dBm
|
||||||
|
* 96 -24 dBm or greater
|
||||||
|
* 255 not known or not detectable
|
||||||
|
*/
|
||||||
|
final int wcdmaDbm = getWcdmaDbm();
|
||||||
|
int wcdmaAsuLevel = 255;
|
||||||
|
// validateInput will always give a valid range between -120 to -24 as per ril.h. so RSCP
|
||||||
|
// outside range is already set to INVALID
|
||||||
|
if (wcdmaDbm == SignalStrength.INVALID) wcdmaAsuLevel = 255;
|
||||||
|
else wcdmaAsuLevel = wcdmaDbm + 120;
|
||||||
|
if (DBG) log("Wcdma Asu level: " + wcdmaAsuLevel);
|
||||||
|
return wcdmaAsuLevel;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets WCDMA signal strength as a dbm value between -120 and -24, as defined in TS 27.007 8.69.
|
||||||
|
*
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
public int getWcdmaDbm() {
|
||||||
|
return mWcdmaRscp;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get WCDMA as level 0..4
|
||||||
|
*
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
public int getWcdmaLevel() {
|
||||||
|
int level = SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
|
||||||
|
|
||||||
|
if (mWcdmaDefaultSignalMeasurement == null) {
|
||||||
|
Log.wtf(LOG_TAG, "getWcdmaLevel - WCDMA default signal measurement is invalid.");
|
||||||
|
return level;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (mWcdmaDefaultSignalMeasurement) {
|
||||||
|
case MEASUMENT_TYPE_RSCP:
|
||||||
|
// RSCP valid values are (-120 through -24) as defined in TS 27.007 8.69
|
||||||
|
if (mWcdmaRscp < MIN_WCDMA_RSCP || mWcdmaRscp > MAX_WCDMA_RSCP) {
|
||||||
|
if (mWcdmaRscp != INVALID) {
|
||||||
|
Log.wtf(LOG_TAG, "getWcdmaLevel - invalid WCDMA RSCP: mWcdmaRscp="
|
||||||
|
+ mWcdmaRscp);
|
||||||
|
}
|
||||||
|
} else if (mWcdmaRscp >= mWcdmaRscpThresholds[3]) {
|
||||||
|
level = SIGNAL_STRENGTH_GREAT;
|
||||||
|
} else if (mWcdmaRscp >= mWcdmaRscpThresholds[2]) {
|
||||||
|
level = SIGNAL_STRENGTH_GOOD;
|
||||||
|
} else if (mWcdmaRscp >= mWcdmaRscpThresholds[1]) {
|
||||||
|
level = SIGNAL_STRENGTH_MODERATE;
|
||||||
|
} else if (mWcdmaRscp >= mWcdmaRscpThresholds[0]) {
|
||||||
|
level = SIGNAL_STRENGTH_POOR;
|
||||||
|
}
|
||||||
|
if (DBG) log("getWcdmaLevel=" + level + " WcdmaRscp=" + mWcdmaRscp);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
// RSSI valid values are (0..31) as defined in TS 27.007 8.5
|
||||||
|
if (mWcdmaSignalStrength < 0 || mWcdmaSignalStrength > 31) {
|
||||||
|
if (mWcdmaSignalStrength != 99) {
|
||||||
|
Log.wtf(LOG_TAG, "getWcdmaLevel - invalid WCDMA RSSI: mWcdmaSignalStrength="
|
||||||
|
+ mWcdmaSignalStrength);
|
||||||
|
}
|
||||||
|
} else if (mWcdmaSignalStrength >= 18) {
|
||||||
|
level = SIGNAL_STRENGTH_GREAT;
|
||||||
|
} else if (mWcdmaSignalStrength >= 13) {
|
||||||
|
level = SIGNAL_STRENGTH_GOOD;
|
||||||
|
} else if (mWcdmaSignalStrength >= 8) {
|
||||||
|
level = SIGNAL_STRENGTH_MODERATE;
|
||||||
|
} else if (mWcdmaSignalStrength >= 3) {
|
||||||
|
level = SIGNAL_STRENGTH_POOR;
|
||||||
|
}
|
||||||
|
if (DBG) log("getWcdmaLevel=" + level + " WcdmaSignalStrength=" +
|
||||||
|
mWcdmaSignalStrength);
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
return level;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return hash code
|
* @return hash code
|
||||||
*/
|
*/
|
||||||
@@ -925,8 +1129,11 @@ public class SignalStrength implements Parcelable {
|
|||||||
+ (mEvdoDbm * primeNum) + (mEvdoEcio * primeNum) + (mEvdoSnr * primeNum)
|
+ (mEvdoDbm * primeNum) + (mEvdoEcio * primeNum) + (mEvdoSnr * primeNum)
|
||||||
+ (mLteSignalStrength * primeNum) + (mLteRsrp * primeNum)
|
+ (mLteSignalStrength * primeNum) + (mLteRsrp * primeNum)
|
||||||
+ (mLteRsrq * primeNum) + (mLteRssnr * primeNum) + (mLteCqi * primeNum)
|
+ (mLteRsrq * primeNum) + (mLteRssnr * primeNum) + (mLteCqi * primeNum)
|
||||||
+ (mLteRsrpBoost * primeNum) + (mTdScdmaRscp * primeNum) + (mIsGsm ? 1 : 0)
|
+ (mLteRsrpBoost * primeNum) + (mTdScdmaRscp * primeNum)
|
||||||
+ (mUseOnlyRsrpForLteLevel ? 1 : 0) + (Arrays.hashCode(mLteRsrpThresholds)));
|
+ (mWcdmaSignalStrength * primeNum) + (mWcdmaRscpAsu * primeNum)
|
||||||
|
+ (mWcdmaRscp * primeNum) + (mIsGsm ? 1 : 0) + (mUseOnlyRsrpForLteLevel ? 1 : 0)
|
||||||
|
+ (Objects.hashCode(mWcdmaDefaultSignalMeasurement))
|
||||||
|
+ (Arrays.hashCode(mLteRsrpThresholds)) + (Arrays.hashCode(mWcdmaRscpThresholds)));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -960,9 +1167,14 @@ public class SignalStrength implements Parcelable {
|
|||||||
&& mLteCqi == s.mLteCqi
|
&& mLteCqi == s.mLteCqi
|
||||||
&& mLteRsrpBoost == s.mLteRsrpBoost
|
&& mLteRsrpBoost == s.mLteRsrpBoost
|
||||||
&& mTdScdmaRscp == s.mTdScdmaRscp
|
&& mTdScdmaRscp == s.mTdScdmaRscp
|
||||||
|
&& mWcdmaSignalStrength == s.mWcdmaSignalStrength
|
||||||
|
&& mWcdmaRscpAsu == s.mWcdmaRscpAsu
|
||||||
|
&& mWcdmaRscp == s.mWcdmaRscp
|
||||||
&& mIsGsm == s.mIsGsm
|
&& mIsGsm == s.mIsGsm
|
||||||
&& mUseOnlyRsrpForLteLevel == s.mUseOnlyRsrpForLteLevel
|
&& mUseOnlyRsrpForLteLevel == s.mUseOnlyRsrpForLteLevel
|
||||||
&& Arrays.equals(mLteRsrpThresholds, s.mLteRsrpThresholds));
|
&& Objects.equals(mWcdmaDefaultSignalMeasurement, s.mWcdmaDefaultSignalMeasurement)
|
||||||
|
&& Arrays.equals(mLteRsrpThresholds, s.mLteRsrpThresholds)
|
||||||
|
&& Arrays.equals(mWcdmaRscpThresholds, s.mWcdmaRscpThresholds));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -985,10 +1197,15 @@ public class SignalStrength implements Parcelable {
|
|||||||
+ " " + mLteCqi
|
+ " " + mLteCqi
|
||||||
+ " " + mLteRsrpBoost
|
+ " " + mLteRsrpBoost
|
||||||
+ " " + mTdScdmaRscp
|
+ " " + mTdScdmaRscp
|
||||||
|
+ " " + mWcdmaSignalStrength
|
||||||
|
+ " " + mWcdmaRscpAsu
|
||||||
|
+ " " + mWcdmaRscp
|
||||||
+ " " + (mIsGsm ? "gsm|lte" : "cdma")
|
+ " " + (mIsGsm ? "gsm|lte" : "cdma")
|
||||||
+ " " + (mUseOnlyRsrpForLteLevel ? "use_only_rsrp_for_lte_level" :
|
+ " " + (mUseOnlyRsrpForLteLevel ? "use_only_rsrp_for_lte_level" :
|
||||||
"use_rsrp_and_rssnr_for_lte_level")
|
"use_rsrp_and_rssnr_for_lte_level")
|
||||||
+ " " + (Arrays.toString(mLteRsrpThresholds)));
|
+ " " + mWcdmaDefaultSignalMeasurement
|
||||||
|
+ " " + (Arrays.toString(mLteRsrpThresholds))
|
||||||
|
+ " " + (Arrays.toString(mWcdmaRscpThresholds)));
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Returns the signal strength related to GSM. */
|
/** Returns the signal strength related to GSM. */
|
||||||
@@ -997,7 +1214,10 @@ public class SignalStrength implements Parcelable {
|
|||||||
if (level == SIGNAL_STRENGTH_NONE_OR_UNKNOWN) {
|
if (level == SIGNAL_STRENGTH_NONE_OR_UNKNOWN) {
|
||||||
level = getTdScdmaLevel();
|
level = getTdScdmaLevel();
|
||||||
if (level == SIGNAL_STRENGTH_NONE_OR_UNKNOWN) {
|
if (level == SIGNAL_STRENGTH_NONE_OR_UNKNOWN) {
|
||||||
level = getGsmLevel();
|
level = getWcdmaLevel();
|
||||||
|
if (level == SIGNAL_STRENGTH_NONE_OR_UNKNOWN) {
|
||||||
|
level = getGsmLevel();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return level;
|
return level;
|
||||||
@@ -1042,12 +1262,20 @@ public class SignalStrength implements Parcelable {
|
|||||||
mLteCqi = m.getInt("LteCqi");
|
mLteCqi = m.getInt("LteCqi");
|
||||||
mLteRsrpBoost = m.getInt("LteRsrpBoost");
|
mLteRsrpBoost = m.getInt("LteRsrpBoost");
|
||||||
mTdScdmaRscp = m.getInt("TdScdma");
|
mTdScdmaRscp = m.getInt("TdScdma");
|
||||||
|
mWcdmaSignalStrength = m.getInt("WcdmaSignalStrength");
|
||||||
|
mWcdmaRscpAsu = m.getInt("WcdmaRscpAsu");
|
||||||
|
mWcdmaRscp = m.getInt("WcdmaRscp");
|
||||||
mIsGsm = m.getBoolean("IsGsm");
|
mIsGsm = m.getBoolean("IsGsm");
|
||||||
mUseOnlyRsrpForLteLevel = m.getBoolean("UseOnlyRsrpForLteLevel");
|
mUseOnlyRsrpForLteLevel = m.getBoolean("UseOnlyRsrpForLteLevel");
|
||||||
|
mWcdmaDefaultSignalMeasurement = m.getString("WcdmaDefaultSignalMeasurement");
|
||||||
ArrayList<Integer> lteRsrpThresholds = m.getIntegerArrayList("lteRsrpThresholds");
|
ArrayList<Integer> lteRsrpThresholds = m.getIntegerArrayList("lteRsrpThresholds");
|
||||||
for (int i = 0; i < lteRsrpThresholds.size(); i++) {
|
for (int i = 0; i < lteRsrpThresholds.size(); i++) {
|
||||||
mLteRsrpThresholds[i] = lteRsrpThresholds.get(i);
|
mLteRsrpThresholds[i] = lteRsrpThresholds.get(i);
|
||||||
}
|
}
|
||||||
|
ArrayList<Integer> wcdmaRscpThresholds = m.getIntegerArrayList("wcdmaRscpThresholds");
|
||||||
|
for (int i = 0; i < wcdmaRscpThresholds.size(); i++) {
|
||||||
|
mWcdmaRscpThresholds[i] = wcdmaRscpThresholds.get(i);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1071,13 +1299,22 @@ public class SignalStrength implements Parcelable {
|
|||||||
m.putInt("LteCqi", mLteCqi);
|
m.putInt("LteCqi", mLteCqi);
|
||||||
m.putInt("LteRsrpBoost", mLteRsrpBoost);
|
m.putInt("LteRsrpBoost", mLteRsrpBoost);
|
||||||
m.putInt("TdScdma", mTdScdmaRscp);
|
m.putInt("TdScdma", mTdScdmaRscp);
|
||||||
|
m.putInt("WcdmaSignalStrength", mWcdmaSignalStrength);
|
||||||
|
m.putInt("WcdmaRscpAsu", mWcdmaRscpAsu);
|
||||||
|
m.putInt("WcdmaRscp", mWcdmaRscp);
|
||||||
m.putBoolean("IsGsm", mIsGsm);
|
m.putBoolean("IsGsm", mIsGsm);
|
||||||
m.putBoolean("UseOnlyRsrpForLteLevel", mUseOnlyRsrpForLteLevel);
|
m.putBoolean("UseOnlyRsrpForLteLevel", mUseOnlyRsrpForLteLevel);
|
||||||
|
m.putString("WcdmaDefaultSignalMeasurement", mWcdmaDefaultSignalMeasurement);
|
||||||
ArrayList<Integer> lteRsrpThresholds = new ArrayList<Integer>();
|
ArrayList<Integer> lteRsrpThresholds = new ArrayList<Integer>();
|
||||||
for (int value : mLteRsrpThresholds) {
|
for (int value : mLteRsrpThresholds) {
|
||||||
lteRsrpThresholds.add(value);
|
lteRsrpThresholds.add(value);
|
||||||
}
|
}
|
||||||
m.putIntegerArrayList("lteRsrpThresholds", lteRsrpThresholds);
|
m.putIntegerArrayList("lteRsrpThresholds", lteRsrpThresholds);
|
||||||
|
ArrayList<Integer> wcdmaRscpThresholds = new ArrayList<Integer>();
|
||||||
|
for (int value : mWcdmaRscpThresholds) {
|
||||||
|
wcdmaRscpThresholds.add(value);
|
||||||
|
}
|
||||||
|
m.putIntegerArrayList("wcdmaRscpThresholds", wcdmaRscpThresholds);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1090,6 +1327,16 @@ public class SignalStrength implements Parcelable {
|
|||||||
CarrierConfigManager.KEY_LTE_RSRP_THRESHOLDS_INT_ARRAY);
|
CarrierConfigManager.KEY_LTE_RSRP_THRESHOLDS_INT_ARRAY);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the default threshold array for determining the display level of WCDMA signal bar.
|
||||||
|
*
|
||||||
|
* @return int array for determining the display level.
|
||||||
|
*/
|
||||||
|
private int[] getDefaultWcdmaRscpThresholds() {
|
||||||
|
return CarrierConfigManager.getDefaultConfig().getIntArray(
|
||||||
|
CarrierConfigManager.KEY_WCDMA_RSCP_THRESHOLDS_INT_ARRAY);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* log
|
* log
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user