Merge "Improve LTE signal bar level with flexible RSRQ and RSSNR threshold"
This commit is contained in:
@@ -44448,6 +44448,8 @@ package android.telephony {
|
|||||||
field public static final String KEY_IMS_CONFERENCE_SIZE_LIMIT_INT = "ims_conference_size_limit_int";
|
field public static final String KEY_IMS_CONFERENCE_SIZE_LIMIT_INT = "ims_conference_size_limit_int";
|
||||||
field public static final String KEY_IMS_DTMF_TONE_DELAY_INT = "ims_dtmf_tone_delay_int";
|
field public static final String KEY_IMS_DTMF_TONE_DELAY_INT = "ims_dtmf_tone_delay_int";
|
||||||
field public static final String KEY_IS_IMS_CONFERENCE_SIZE_ENFORCED_BOOL = "is_ims_conference_size_enforced_bool";
|
field public static final String KEY_IS_IMS_CONFERENCE_SIZE_ENFORCED_BOOL = "is_ims_conference_size_enforced_bool";
|
||||||
|
field public static final String KEY_LTE_RSRQ_THRESHOLDS_INT_ARRAY = "lte_rsrq_thresholds_int_array";
|
||||||
|
field public static final String KEY_LTE_RSSNR_THRESHOLDS_INT_ARRAY = "lte_rssnr_thresholds_int_array";
|
||||||
field public static final String KEY_MDN_IS_ADDITIONAL_VOICEMAIL_NUMBER_BOOL = "mdn_is_additional_voicemail_number_bool";
|
field public static final String KEY_MDN_IS_ADDITIONAL_VOICEMAIL_NUMBER_BOOL = "mdn_is_additional_voicemail_number_bool";
|
||||||
field public static final String KEY_MMS_ALIAS_ENABLED_BOOL = "aliasEnabled";
|
field public static final String KEY_MMS_ALIAS_ENABLED_BOOL = "aliasEnabled";
|
||||||
field public static final String KEY_MMS_ALIAS_MAX_CHARS_INT = "aliasMaxChars";
|
field public static final String KEY_MMS_ALIAS_MAX_CHARS_INT = "aliasMaxChars";
|
||||||
|
|||||||
@@ -2317,12 +2317,40 @@ public class CarrierConfigManager {
|
|||||||
/**
|
/**
|
||||||
* Determine whether to use only RSRP for the number of LTE signal bars.
|
* Determine whether to use only RSRP for the number of LTE signal bars.
|
||||||
* @hide
|
* @hide
|
||||||
|
*
|
||||||
|
* @deprecated use {@link #KEY_PARAMETERS_USED_FOR_LTE_SIGNAL_BAR_INT}.
|
||||||
*/
|
*/
|
||||||
// FIXME: this key and related keys must not be exposed without a consistent philosophy for
|
// FIXME: this key and related keys must not be exposed without a consistent philosophy for
|
||||||
// all RATs.
|
// all RATs.
|
||||||
|
@Deprecated
|
||||||
public static final String KEY_USE_ONLY_RSRP_FOR_LTE_SIGNAL_BAR_BOOL =
|
public static final String KEY_USE_ONLY_RSRP_FOR_LTE_SIGNAL_BAR_BOOL =
|
||||||
"use_only_rsrp_for_lte_signal_bar_bool";
|
"use_only_rsrp_for_lte_signal_bar_bool";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Bit-field integer to determine whether to use Reference Signal Received Power (RSRP),
|
||||||
|
* Reference Signal Received Quality (RSRQ), or/and Reference Signal Signal to Noise Ratio
|
||||||
|
* (RSSNR) for the number of LTE signal bars and signal criteria reporting enabling.
|
||||||
|
*
|
||||||
|
* <p> If a measure is not set, signal criteria reporting from modem will not be triggered and
|
||||||
|
* not be used for calculating signal level. If multiple measures are set bit, the parameter
|
||||||
|
* whose value is smallest is used to indicate the signal level.
|
||||||
|
*
|
||||||
|
* RSRP = 1 << 0,
|
||||||
|
* RSRQ = 1 << 1,
|
||||||
|
* RSSNR = 1 << 2,
|
||||||
|
*
|
||||||
|
* The value of this key must be bitwise OR of {@link CellSignalStrengthLte#USE_RSRP},
|
||||||
|
* {@link CellSignalStrengthLte#USE_RSRQ}, {@link CellSignalStrengthLte#USE_RSSNR}.
|
||||||
|
*
|
||||||
|
* For example, if both RSRP and RSRQ are used, the value of key is 3 (1 << 0 | 1 << 1).
|
||||||
|
* If the key is invalid or not configured, a default value (RSRP | RSSNR = 1 << 0 | 1 << 2)
|
||||||
|
* will apply.
|
||||||
|
*
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
public static final String KEY_PARAMETERS_USED_FOR_LTE_SIGNAL_BAR_INT =
|
||||||
|
"parameters_used_for_lte_signal_bar_int";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* List of 4 customized 5G SS reference signal received power (SSRSRP) thresholds.
|
* List of 4 customized 5G SS reference signal received power (SSRSRP) thresholds.
|
||||||
*
|
*
|
||||||
@@ -2625,6 +2653,42 @@ public class CarrierConfigManager {
|
|||||||
public static final String KEY_LTE_RSRP_THRESHOLDS_INT_ARRAY =
|
public static final String KEY_LTE_RSRP_THRESHOLDS_INT_ARRAY =
|
||||||
"lte_rsrp_thresholds_int_array";
|
"lte_rsrp_thresholds_int_array";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A list of 4 customized LTE Reference Signal Received Quality (RSRQ) thresholds.
|
||||||
|
*
|
||||||
|
* Reference: TS 136.133 v12.6.0 section 9.1.7 - RSRQ Measurement Report Mapping.
|
||||||
|
*
|
||||||
|
* 4 threshold integers must be within the boundaries [-34 dB, 3 dB], and the levels are:
|
||||||
|
* "NONE: [-34, threshold1)"
|
||||||
|
* "POOR: [threshold1, threshold2)"
|
||||||
|
* "MODERATE: [threshold2, threshold3)"
|
||||||
|
* "GOOD: [threshold3, threshold4)"
|
||||||
|
* "EXCELLENT: [threshold4, 3]"
|
||||||
|
*
|
||||||
|
* This key is considered invalid if the format is violated. If the key is invalid or
|
||||||
|
* not configured, a default value set will apply.
|
||||||
|
*/
|
||||||
|
public static final String KEY_LTE_RSRQ_THRESHOLDS_INT_ARRAY =
|
||||||
|
"lte_rsrq_thresholds_int_array";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A list of 4 customized LTE Reference Signal Signal to Noise Ratio (RSSNR) thresholds.
|
||||||
|
*
|
||||||
|
* 4 threshold integers must be within the boundaries [-200, 300], and the levels are:
|
||||||
|
* "NONE: [-200, threshold1)"
|
||||||
|
* "POOR: [threshold1, threshold2)"
|
||||||
|
* "MODERATE: [threshold2, threshold3)"
|
||||||
|
* "GOOD: [threshold3, threshold4)"
|
||||||
|
* "EXCELLENT: [threshold4, 300]"
|
||||||
|
* Note: the unit of the values is 10*db; it is derived by multiplying 10 on the original dB
|
||||||
|
* value reported by modem.
|
||||||
|
*
|
||||||
|
* This key is considered invalid if the format is violated. If the key is invalid or
|
||||||
|
* not configured, a default value set will apply.
|
||||||
|
*/
|
||||||
|
public static final String KEY_LTE_RSSNR_THRESHOLDS_INT_ARRAY =
|
||||||
|
"lte_rssnr_thresholds_int_array";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Decides when clients try to bind to iwlan network service, which package name will
|
* Decides when clients try to bind to iwlan network service, which package name will
|
||||||
* the binding intent go to.
|
* the binding intent go to.
|
||||||
@@ -3697,6 +3761,20 @@ public class CarrierConfigManager {
|
|||||||
-108, /* SIGNAL_STRENGTH_GOOD */
|
-108, /* SIGNAL_STRENGTH_GOOD */
|
||||||
-98, /* SIGNAL_STRENGTH_GREAT */
|
-98, /* SIGNAL_STRENGTH_GREAT */
|
||||||
});
|
});
|
||||||
|
sDefaults.putIntArray(KEY_LTE_RSRQ_THRESHOLDS_INT_ARRAY,
|
||||||
|
new int[] {
|
||||||
|
-19, /* SIGNAL_STRENGTH_POOR */
|
||||||
|
-17, /* SIGNAL_STRENGTH_MODERATE */
|
||||||
|
-14, /* SIGNAL_STRENGTH_GOOD */
|
||||||
|
-12 /* SIGNAL_STRENGTH_GREAT */
|
||||||
|
});
|
||||||
|
sDefaults.putIntArray(KEY_LTE_RSSNR_THRESHOLDS_INT_ARRAY,
|
||||||
|
new int[] {
|
||||||
|
-30, /* SIGNAL_STRENGTH_POOR */
|
||||||
|
10, /* SIGNAL_STRENGTH_MODERATE */
|
||||||
|
45, /* SIGNAL_STRENGTH_GOOD */
|
||||||
|
130 /* SIGNAL_STRENGTH_GREAT */
|
||||||
|
});
|
||||||
sDefaults.putIntArray(KEY_WCDMA_RSCP_THRESHOLDS_INT_ARRAY,
|
sDefaults.putIntArray(KEY_WCDMA_RSCP_THRESHOLDS_INT_ARRAY,
|
||||||
new int[] {
|
new int[] {
|
||||||
-115, /* SIGNAL_STRENGTH_POOR */
|
-115, /* SIGNAL_STRENGTH_POOR */
|
||||||
@@ -3791,6 +3869,8 @@ public class CarrierConfigManager {
|
|||||||
new int[] {4 /* BUSY */});
|
new int[] {4 /* BUSY */});
|
||||||
sDefaults.putBoolean(KEY_PREVENT_CLIR_ACTIVATION_AND_DEACTIVATION_CODE_BOOL, false);
|
sDefaults.putBoolean(KEY_PREVENT_CLIR_ACTIVATION_AND_DEACTIVATION_CODE_BOOL, false);
|
||||||
sDefaults.putLong(KEY_DATA_SWITCH_VALIDATION_TIMEOUT_LONG, 2000);
|
sDefaults.putLong(KEY_DATA_SWITCH_VALIDATION_TIMEOUT_LONG, 2000);
|
||||||
|
sDefaults.putInt(KEY_PARAMETERS_USED_FOR_LTE_SIGNAL_BAR_INT,
|
||||||
|
CellSignalStrengthLte.USE_RSRP | CellSignalStrengthLte.USE_RSSNR);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -55,6 +55,25 @@ public final class CellSignalStrengthLte extends CellSignalStrength implements P
|
|||||||
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;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Indicates RSRP is considered for {@link #getLevel()} and reported from modem.
|
||||||
|
*
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
public static final int USE_RSRP = 1 << 0;
|
||||||
|
/**
|
||||||
|
* Indicates RSRQ is considered for {@link #getLevel()} and reported from modem.
|
||||||
|
*
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
public static final int USE_RSRQ = 1 << 1;
|
||||||
|
/**
|
||||||
|
* Indicates RSSNR is considered for {@link #getLevel()} and reported from modem.
|
||||||
|
*
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
public static final int USE_RSSNR = 1 << 2;
|
||||||
|
|
||||||
@UnsupportedAppUsage(maxTargetSdk = android.os.Build.VERSION_CODES.P)
|
@UnsupportedAppUsage(maxTargetSdk = android.os.Build.VERSION_CODES.P)
|
||||||
private int mSignalStrength; // To be removed
|
private int mSignalStrength; // To be removed
|
||||||
private int mRssi;
|
private int mRssi;
|
||||||
@@ -70,6 +89,21 @@ public final class CellSignalStrengthLte extends CellSignalStrength implements P
|
|||||||
private int mTimingAdvance;
|
private int mTimingAdvance;
|
||||||
private int mLevel;
|
private int mLevel;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Bit-field integer to determine whether to use Reference Signal Received Power (RSRP),
|
||||||
|
* Reference Signal Received Quality (RSRQ), and/or Reference Signal Signal to Noise Ratio
|
||||||
|
* (RSSNR) for the number of LTE signal bars. If multiple measures are set, the parameter
|
||||||
|
* whose signal level value is smallest is used to indicate the signal level.
|
||||||
|
*
|
||||||
|
* RSRP = 1 << 0,
|
||||||
|
* RSRQ = 1 << 1,
|
||||||
|
* RSSNR = 1 << 2,
|
||||||
|
*
|
||||||
|
* For example, if both RSRP and RSRQ are used, the value of key is 3 (1 << 0 | 1 << 1).
|
||||||
|
* If the key is invalid or not configured, a default value (RSRP = 1 << 0) will apply.
|
||||||
|
*/
|
||||||
|
private int mParametersUseForLevel;
|
||||||
|
|
||||||
/** @hide */
|
/** @hide */
|
||||||
@UnsupportedAppUsage
|
@UnsupportedAppUsage
|
||||||
public CellSignalStrengthLte() {
|
public CellSignalStrengthLte() {
|
||||||
@@ -81,7 +115,7 @@ public final class CellSignalStrengthLte extends CellSignalStrength implements P
|
|||||||
*
|
*
|
||||||
* @param rssi in dBm [-113,-51], UNKNOWN
|
* @param rssi in dBm [-113,-51], UNKNOWN
|
||||||
* @param rsrp in dBm [-140,-43], UNKNOWN
|
* @param rsrp in dBm [-140,-43], UNKNOWN
|
||||||
* @param rsrq in dB [-20,-3], UNKNOWN
|
* @param rsrq in dB [-34, 3], UNKNOWN
|
||||||
* @param rssnr in 10*dB [-200, +300], UNKNOWN
|
* @param rssnr in 10*dB [-200, +300], UNKNOWN
|
||||||
* @param cqi [0, 15], UNKNOWN
|
* @param cqi [0, 15], UNKNOWN
|
||||||
* @param timingAdvance [0, 1282], UNKNOWN
|
* @param timingAdvance [0, 1282], UNKNOWN
|
||||||
@@ -94,7 +128,7 @@ public final class CellSignalStrengthLte extends CellSignalStrength implements P
|
|||||||
mRssi = inRangeOrUnavailable(rssi, -113, -51);
|
mRssi = inRangeOrUnavailable(rssi, -113, -51);
|
||||||
mSignalStrength = mRssi;
|
mSignalStrength = mRssi;
|
||||||
mRsrp = inRangeOrUnavailable(rsrp, -140, -43);
|
mRsrp = inRangeOrUnavailable(rsrp, -140, -43);
|
||||||
mRsrq = inRangeOrUnavailable(rsrq, -20, -3);
|
mRsrq = inRangeOrUnavailable(rsrq, -34, 3);
|
||||||
mRssnr = inRangeOrUnavailable(rssnr, -200, 300);
|
mRssnr = inRangeOrUnavailable(rssnr, -200, 300);
|
||||||
mCqi = inRangeOrUnavailable(cqi, 0, 15);
|
mCqi = inRangeOrUnavailable(cqi, 0, 15);
|
||||||
mTimingAdvance = inRangeOrUnavailable(timingAdvance, 0, 1282);
|
mTimingAdvance = inRangeOrUnavailable(timingAdvance, 0, 1282);
|
||||||
@@ -125,6 +159,7 @@ public final class CellSignalStrengthLte extends CellSignalStrength implements P
|
|||||||
mCqi = s.mCqi;
|
mCqi = s.mCqi;
|
||||||
mTimingAdvance = s.mTimingAdvance;
|
mTimingAdvance = s.mTimingAdvance;
|
||||||
mLevel = s.mLevel;
|
mLevel = s.mLevel;
|
||||||
|
mParametersUseForLevel = s.mParametersUseForLevel;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @hide */
|
/** @hide */
|
||||||
@@ -144,6 +179,7 @@ public final class CellSignalStrengthLte extends CellSignalStrength implements P
|
|||||||
mCqi = CellInfo.UNAVAILABLE;
|
mCqi = CellInfo.UNAVAILABLE;
|
||||||
mTimingAdvance = CellInfo.UNAVAILABLE;
|
mTimingAdvance = CellInfo.UNAVAILABLE;
|
||||||
mLevel = SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
|
mLevel = SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
|
||||||
|
mParametersUseForLevel = USE_RSRP | USE_RSSNR;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@@ -154,102 +190,153 @@ public final class CellSignalStrengthLte extends CellSignalStrength implements P
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Lifted from Default carrier configs and max range of RSRP
|
// Lifted from Default carrier configs and max range of RSRP
|
||||||
private static final int[] sThresholds = new int[]{-115, -105, -95, -85};
|
private static final int[] sRsrpThresholds = new int[] {
|
||||||
|
-115, /* SIGNAL_STRENGTH_POOR */
|
||||||
|
-105, /* SIGNAL_STRENGTH_MODERATE */
|
||||||
|
-95, /* SIGNAL_STRENGTH_GOOD */
|
||||||
|
-85 /* SIGNAL_STRENGTH_GREAT */
|
||||||
|
};
|
||||||
|
|
||||||
|
// Lifted from Default carrier configs and max range of RSRQ
|
||||||
|
private static final int[] sRsrqThresholds = new int[] {
|
||||||
|
-19, /* SIGNAL_STRENGTH_POOR */
|
||||||
|
-17, /* SIGNAL_STRENGTH_MODERATE */
|
||||||
|
-14, /* SIGNAL_STRENGTH_GOOD */
|
||||||
|
-12 /* SIGNAL_STRENGTH_GREAT */
|
||||||
|
};
|
||||||
|
// Lifted from Default carrier configs and max range of RSSNR
|
||||||
|
private static final int[] sRssnrThresholds = new int[] {
|
||||||
|
-30, /* SIGNAL_STRENGTH_POOR */
|
||||||
|
10, /* SIGNAL_STRENGTH_MODERATE */
|
||||||
|
45, /* SIGNAL_STRENGTH_GOOD */
|
||||||
|
130 /* SIGNAL_STRENGTH_GREAT */
|
||||||
|
};
|
||||||
private static final int sRsrpBoost = 0;
|
private static final int sRsrpBoost = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if the given parameter type is considered to use for {@link #getLevel()}.
|
||||||
|
*
|
||||||
|
* Note: if multiple parameter types are considered, the smaller level for one of the
|
||||||
|
* parameters would be returned by {@link #getLevel()}
|
||||||
|
*
|
||||||
|
* @param parameterType bitwise OR of {@link #USE_RSRP}, {@link #USE_RSRQ},
|
||||||
|
* {@link #USE_RSSNR}
|
||||||
|
* @return {@code true} if the level is calculated based on the given parameter type;
|
||||||
|
* {@code false} otherwise.
|
||||||
|
*/
|
||||||
|
private boolean isLevelForParameter(int parameterType) {
|
||||||
|
return (parameterType & mParametersUseForLevel) == parameterType;
|
||||||
|
}
|
||||||
|
|
||||||
/** @hide */
|
/** @hide */
|
||||||
@Override
|
@Override
|
||||||
public void updateLevel(PersistableBundle cc, ServiceState ss) {
|
public void updateLevel(PersistableBundle cc, ServiceState ss) {
|
||||||
int[] thresholds;
|
int[] rsrpThresholds, rsrqThresholds, rssnrThresholds;
|
||||||
boolean rsrpOnly;
|
boolean rsrpOnly;
|
||||||
if (cc == null) {
|
if (cc == null) {
|
||||||
thresholds = sThresholds;
|
mParametersUseForLevel = USE_RSRP | USE_RSSNR;
|
||||||
|
rsrpThresholds = sRsrpThresholds;
|
||||||
|
rsrqThresholds = sRsrqThresholds;
|
||||||
|
rssnrThresholds = sRssnrThresholds;
|
||||||
rsrpOnly = false;
|
rsrpOnly = false;
|
||||||
} else {
|
} else {
|
||||||
|
mParametersUseForLevel = cc.getInt(
|
||||||
|
CarrierConfigManager.KEY_PARAMETERS_USED_FOR_LTE_SIGNAL_BAR_INT);
|
||||||
|
Rlog.i(LOG_TAG, "Using signal strength level: " + mParametersUseForLevel);
|
||||||
|
rsrpThresholds = cc.getIntArray(
|
||||||
|
CarrierConfigManager.KEY_LTE_RSRP_THRESHOLDS_INT_ARRAY);
|
||||||
|
if (rsrpThresholds == null) rsrpThresholds = sRsrpThresholds;
|
||||||
|
Rlog.i(LOG_TAG, "Applying LTE RSRP Thresholds: " + Arrays.toString(rsrpThresholds));
|
||||||
|
rsrqThresholds = cc.getIntArray(
|
||||||
|
CarrierConfigManager.KEY_LTE_RSRQ_THRESHOLDS_INT_ARRAY);
|
||||||
|
if (rsrqThresholds == null) rsrqThresholds = sRsrqThresholds;
|
||||||
|
Rlog.i(LOG_TAG, "Applying LTE RSRQ Thresholds: " + Arrays.toString(rsrqThresholds));
|
||||||
|
rssnrThresholds = cc.getIntArray(
|
||||||
|
CarrierConfigManager.KEY_LTE_RSSNR_THRESHOLDS_INT_ARRAY);
|
||||||
|
if (rssnrThresholds == null) rssnrThresholds = sRssnrThresholds;
|
||||||
|
Rlog.i(LOG_TAG, "Applying LTE RSSNR Thresholds: " + Arrays.toString(rssnrThresholds));
|
||||||
rsrpOnly = cc.getBoolean(
|
rsrpOnly = cc.getBoolean(
|
||||||
CarrierConfigManager.KEY_USE_ONLY_RSRP_FOR_LTE_SIGNAL_BAR_BOOL, false);
|
CarrierConfigManager.KEY_USE_ONLY_RSRP_FOR_LTE_SIGNAL_BAR_BOOL, false);
|
||||||
thresholds = cc.getIntArray(
|
|
||||||
CarrierConfigManager.KEY_LTE_RSRP_THRESHOLDS_INT_ARRAY);
|
|
||||||
if (thresholds == null) thresholds = sThresholds;
|
|
||||||
if (DBG) log("updateLevel() carrierconfig - rsrpOnly="
|
|
||||||
+ rsrpOnly + ", thresholds=" + Arrays.toString(thresholds));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int rsrpBoost = 0;
|
int rsrpBoost = 0;
|
||||||
if (ss != null) {
|
if (ss != null) {
|
||||||
rsrpBoost = ss.getLteEarfcnRsrpBoost();
|
rsrpBoost = ss.getLteEarfcnRsrpBoost();
|
||||||
}
|
}
|
||||||
|
|
||||||
int rssiIconLevel = SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
|
int rsrp = inRangeOrUnavailable(mRsrp + rsrpBoost, MIN_LTE_RSRP, MAX_LTE_RSRP);
|
||||||
int rsrpIconLevel = SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
|
|
||||||
int snrIconLevel = -1;
|
|
||||||
|
|
||||||
int rsrp = mRsrp + rsrpBoost;
|
|
||||||
|
|
||||||
if (rsrp < MIN_LTE_RSRP || rsrp > MAX_LTE_RSRP) {
|
|
||||||
rsrpIconLevel = -1;
|
|
||||||
} else {
|
|
||||||
rsrpIconLevel = thresholds.length;
|
|
||||||
while (rsrpIconLevel > 0 && rsrp < thresholds[rsrpIconLevel - 1]) rsrpIconLevel--;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (rsrpOnly) {
|
if (rsrpOnly) {
|
||||||
if (DBG) log("updateLevel() - rsrp = " + rsrpIconLevel);
|
int level = updateLevelWithMeasure(rsrp, rsrpThresholds);
|
||||||
if (rsrpIconLevel != -1) {
|
if (DBG) log("updateLevel() - rsrp = " + level);
|
||||||
mLevel = rsrpIconLevel;
|
if (level != SignalStrength.INVALID) {
|
||||||
|
mLevel = level;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
int rsrpLevel = SignalStrength.INVALID;
|
||||||
* Values are -200 dB to +300 (SNR*10dB) RS_SNR >= 13.0 dB =>4 bars 4.5
|
int rsrqLevel = SignalStrength.INVALID;
|
||||||
* dB <= RS_SNR < 13.0 dB => 3 bars 1.0 dB <= RS_SNR < 4.5 dB => 2 bars
|
int rssnrLevel = SignalStrength.INVALID;
|
||||||
* -3.0 dB <= RS_SNR < 1.0 dB 1 bar RS_SNR < -3.0 dB/No Service Antenna
|
|
||||||
* Icon Only
|
if (isLevelForParameter(USE_RSRP)) {
|
||||||
|
rsrpLevel = updateLevelWithMeasure(rsrp, rsrpThresholds);
|
||||||
|
Rlog.i(LOG_TAG, "Updated 4G LTE RSRP Level: " + rsrpLevel);
|
||||||
|
}
|
||||||
|
if (isLevelForParameter(USE_RSRQ)) {
|
||||||
|
rsrqLevel = updateLevelWithMeasure(mRsrq, rsrqThresholds);
|
||||||
|
Rlog.i(LOG_TAG, "Updated 4G LTE RSRQ Level: " + rsrqLevel);
|
||||||
|
}
|
||||||
|
if (isLevelForParameter(USE_RSSNR)) {
|
||||||
|
rssnrLevel = updateLevelWithMeasure(mRssnr, rssnrThresholds);
|
||||||
|
Rlog.i(LOG_TAG, "Updated 4G LTE RSSNR Level: " + rssnrLevel);
|
||||||
|
}
|
||||||
|
// Apply the smaller value among three levels of three measures.
|
||||||
|
mLevel = Math.min(Math.min(rsrpLevel, rsrqLevel), rssnrLevel);
|
||||||
|
|
||||||
|
if (mLevel == SignalStrength.INVALID) {
|
||||||
|
int rssiLevel;
|
||||||
|
if (mRssi > -51) {
|
||||||
|
rssiLevel = SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
|
||||||
|
} else if (mRssi >= -89) {
|
||||||
|
rssiLevel = SIGNAL_STRENGTH_GREAT;
|
||||||
|
} else if (mRssi >= -97) {
|
||||||
|
rssiLevel = SIGNAL_STRENGTH_GOOD;
|
||||||
|
} else if (mRssi >= -103) {
|
||||||
|
rssiLevel = SIGNAL_STRENGTH_MODERATE;
|
||||||
|
} else if (mRssi >= -113) {
|
||||||
|
rssiLevel = SIGNAL_STRENGTH_POOR;
|
||||||
|
} else {
|
||||||
|
rssiLevel = SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
|
||||||
|
}
|
||||||
|
if (DBG) log("getLteLevel - rssi:" + mRssi + " rssiIconLevel:" + rssiLevel);
|
||||||
|
mLevel = rssiLevel;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update level with corresponding measure and thresholds.
|
||||||
|
*
|
||||||
|
* @param measure corresponding signal measure
|
||||||
|
* @param thresholds corresponding signal thresholds
|
||||||
|
* @return level of the signal strength
|
||||||
*/
|
*/
|
||||||
if (mRssnr > 300) snrIconLevel = -1;
|
private int updateLevelWithMeasure(int measure, int[] thresholds) {
|
||||||
else if (mRssnr >= 130) snrIconLevel = SIGNAL_STRENGTH_GREAT;
|
int level;
|
||||||
else if (mRssnr >= 45) snrIconLevel = SIGNAL_STRENGTH_GOOD;
|
if (measure == CellInfo.UNAVAILABLE) {
|
||||||
else if (mRssnr >= 10) snrIconLevel = SIGNAL_STRENGTH_MODERATE;
|
level = SignalStrength.INVALID;
|
||||||
else if (mRssnr >= -30) snrIconLevel = SIGNAL_STRENGTH_POOR;
|
} else if (measure >= thresholds[3]) {
|
||||||
else if (mRssnr >= -200)
|
level = SIGNAL_STRENGTH_GREAT;
|
||||||
snrIconLevel = SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
|
} else if (measure >= thresholds[2]) {
|
||||||
|
level = SIGNAL_STRENGTH_GOOD;
|
||||||
if (DBG) log("updateLevel() - rsrp:" + mRsrp + " snr:" + mRssnr + " rsrpIconLevel:"
|
} else if (measure >= thresholds[1]) {
|
||||||
+ rsrpIconLevel + " snrIconLevel:" + snrIconLevel
|
level = SIGNAL_STRENGTH_MODERATE;
|
||||||
+ " lteRsrpBoost:" + sRsrpBoost);
|
} else if (measure >= thresholds[0]) {
|
||||||
|
level = SIGNAL_STRENGTH_POOR;
|
||||||
/* Choose a measurement type to use for notification */
|
} else {
|
||||||
if (snrIconLevel != -1 && rsrpIconLevel != -1) {
|
level = SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
|
||||||
/*
|
|
||||||
* The number of bars displayed shall be the smaller of the bars
|
|
||||||
* associated with LTE RSRP and the bars associated with the LTE
|
|
||||||
* RS_SNR
|
|
||||||
*/
|
|
||||||
mLevel = (rsrpIconLevel < snrIconLevel ? rsrpIconLevel : snrIconLevel);
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
return level;
|
||||||
if (snrIconLevel != -1) {
|
|
||||||
mLevel = snrIconLevel;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (rsrpIconLevel != -1) {
|
|
||||||
mLevel = rsrpIconLevel;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mRssi > -51) rssiIconLevel = SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
|
|
||||||
else if (mRssi >= -89) rssiIconLevel = SIGNAL_STRENGTH_GREAT;
|
|
||||||
else if (mRssi >= -97) rssiIconLevel = SIGNAL_STRENGTH_GOOD;
|
|
||||||
else if (mRssi >= -103) rssiIconLevel = SIGNAL_STRENGTH_MODERATE;
|
|
||||||
else if (mRssi >= -113) rssiIconLevel = SIGNAL_STRENGTH_POOR;
|
|
||||||
else rssiIconLevel = SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
|
|
||||||
if (DBG) log("getLteLevel - rssi:" + mRssi + " rssiIconLevel:"
|
|
||||||
+ rssiIconLevel);
|
|
||||||
mLevel = rssiIconLevel;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -386,7 +473,8 @@ public final class CellSignalStrengthLte extends CellSignalStrength implements P
|
|||||||
+ " rssnr=" + mRssnr
|
+ " rssnr=" + mRssnr
|
||||||
+ " cqi=" + mCqi
|
+ " cqi=" + mCqi
|
||||||
+ " ta=" + mTimingAdvance
|
+ " ta=" + mTimingAdvance
|
||||||
+ " level=" + mLevel;
|
+ " level=" + mLevel
|
||||||
|
+ " parametersUseForLevel=" + mParametersUseForLevel;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Implement the Parcelable interface */
|
/** Implement the Parcelable interface */
|
||||||
|
|||||||
Reference in New Issue
Block a user