Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 18f18aae authored by Nathan Harold's avatar Nathan Harold
Browse files

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
parent 38a641d2
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -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 */
+8 −0
Original line number Diff line number Diff line
@@ -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 */
+10 −2
Original line number Diff line number Diff line
@@ -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 */