Coerce Unreported BER from ASU=99 to UNAVAILABLE

Modems inconsistently use 99 or UNAVAILABLE to report
that BER measurements are unavailable; this causes the
new strict logic in SignalStrength to conclude that a
SignalStrength type has been reported when in fact it's
just the modem choosing the ASU out-of-range value
instead of the Android "unreported" value. We can't
force older modems to change, so this patch simply
coerces 99's to INT_MAX. It means that the ASU 99 will
never be returned on older HALs, which should have
no practical implication.

Bug: 123088652
Test: cts - atest SignalStrengthTest
Change-Id: I4c8610356a81e2190e475d789138b2d2c344fa36
This commit is contained in:
Nathan Harold
2019-01-25 11:12:18 -08:00
parent 38a641d29f
commit 18f18aaeb8
3 changed files with 22 additions and 2 deletions

View File

@@ -63,6 +63,10 @@ public final class CellSignalStrengthGsm extends CellSignalStrength implements P
public CellSignalStrengthGsm(android.hardware.radio.V1_0.GsmSignalStrength gsm) {
// Convert from HAL values as part of construction.
this(getRssiDbmFromAsu(gsm.signalStrength), gsm.bitErrorRate, gsm.timingAdvance);
if (mRssi == CellInfo.UNAVAILABLE) {
setDefaultValues();
}
}
/** @hide */

View File

@@ -72,6 +72,10 @@ public final class CellSignalStrengthTdscdma extends CellSignalStrength implemen
// Convert from HAL values as part of construction.
this(CellInfo.UNAVAILABLE, CellInfo.UNAVAILABLE,
tdscdma.rscp != CellInfo.UNAVAILABLE ? -tdscdma.rscp : tdscdma.rscp);
if (mRssi == CellInfo.UNAVAILABLE && mRscp == CellInfo.UNAVAILABLE) {
setDefaultValues();
}
}
/** @hide */
@@ -79,6 +83,10 @@ public final class CellSignalStrengthTdscdma extends CellSignalStrength implemen
// Convert from HAL values as part of construction.
this(getRssiDbmFromAsu(tdscdma.signalStrength),
tdscdma.bitErrorRate, getRscpDbmFromAsu(tdscdma.rscp));
if (mRssi == CellInfo.UNAVAILABLE && mRscp == CellInfo.UNAVAILABLE) {
setDefaultValues();
}
}
/** @hide */

View File

@@ -92,8 +92,12 @@ public final class CellSignalStrengthWcdma extends CellSignalStrength implements
/** @hide */
public CellSignalStrengthWcdma(android.hardware.radio.V1_0.WcdmaSignalStrength wcdma) {
// Convert from HAL values as part of construction.
this(getRssiDbmFromAsu(wcdma.signalStrength),
wcdma.bitErrorRate, CellInfo.UNAVAILABLE, CellInfo.UNAVAILABLE);
this(getRssiDbmFromAsu(wcdma.signalStrength), wcdma.bitErrorRate,
CellInfo.UNAVAILABLE, CellInfo.UNAVAILABLE);
if (mRssi == CellInfo.UNAVAILABLE && mRscp == CellInfo.UNAVAILABLE) {
setDefaultValues();
}
}
/** @hide */
@@ -103,6 +107,10 @@ public final class CellSignalStrengthWcdma extends CellSignalStrength implements
wcdma.base.bitErrorRate,
getRscpDbmFromAsu(wcdma.rscp),
getEcNoDbFromAsu(wcdma.ecno));
if (mRssi == CellInfo.UNAVAILABLE && mRscp == CellInfo.UNAVAILABLE) {
setDefaultValues();
}
}
/** @hide */