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

Commit d5ba3914 authored by nharold's avatar nharold Committed by Gerrit Code Review
Browse files

Merge changes from topics "cdma-null-island", "cdma-signal-strength"

* changes:
  Set CDMA Location to Invalid if on Null Island
  Fix Range-Checking in CellSignalStrengthCdma
  Fix CDMA Range Checks for SignalStrength
parents a60e42cc 78eb48e5
Loading
Loading
Loading
Loading
+18 −2
Original line number Diff line number Diff line
@@ -103,8 +103,12 @@ public final class CellIdentityCdma extends CellIdentity {
        mNetworkId = nid;
        mSystemId = sid;
        mBasestationId = bid;
        if (!isNullIsland(lat, lon)) {
            mLongitude = lon;
            mLatitude = lat;
        } else {
            mLongitude = mLatitude = Integer.MAX_VALUE;
        }
        mAlphaLong = alphal;
        mAlphaShort = alphas;
    }
@@ -118,6 +122,18 @@ public final class CellIdentityCdma extends CellIdentity {
        return new CellIdentityCdma(this);
    }

    /**
     * Take the latitude and longitude in 1/4 seconds and see if
     * the reported location is on Null Island.
     *
     * @return whether the reported Lat/Long are for Null Island
     *
     * @hide
     */
    private boolean isNullIsland(int lat, int lon) {
        return Math.abs(lat) <= 1 && Math.abs(lon) <= 1;
    }

    /**
     * @return Network Id 0..65535, Integer.MAX_VALUE if unknown
     */
+32 −17
Original line number Diff line number Diff line
@@ -41,14 +41,36 @@ public final class CellSignalStrengthCdma extends CellSignalStrength implements
        setDefaultValues();
    }

    /** @hide */
    /**
     * SignalStrength constructor for input from the HAL.
     *
     * Note that values received from the HAL require coersion to be compatible here. All values
     * reported through IRadio are the negative of the actual values (which results in a positive
     * input to this method.
     *
     * <p>Note that this HAL is inconsistent with UMTS-based radio techs as the value indicating
     * that a field is unreported is negative, rather than a large(r) positive number.
     * <p>Also note that to keep the public-facing methods of this class consistent with others,
     * unreported values are coerced to Integer.MAX_VALUE rather than left as -1, which is
     * a departure from SignalStrength, which is stuck with the values it currently reports.
     *
     * @param cdmaDbm negative of the CDMA signal strength value or -1 if invalid.
     * @param cdmaEcio negative of the CDMA pilot/noise ratio or -1 if invalid.
     * @param evdoDbm negative of the EvDO signal strength value or -1 if invalid.
     * @param evdoEcio negative of the EvDO pilot/noise ratio or -1 if invalid.
     * @param evdoSnr an SNR value 0..8 or -1 if invalid.
     * @hide
     */
    public CellSignalStrengthCdma(int cdmaDbm, int cdmaEcio, int evdoDbm, int evdoEcio,
            int evdoSnr) {
        mCdmaDbm = cdmaDbm;
        mCdmaEcio = cdmaEcio;
        mEvdoDbm = evdoDbm;
        mEvdoEcio = evdoEcio;
        mEvdoSnr = evdoSnr;
        // The values here were lifted from SignalStrength.validateInput()
        // FIXME: Combine all checking and setting logic between this and SignalStrength.
        mCdmaDbm = ((cdmaDbm > 0) && (cdmaDbm < 120))  ? -cdmaDbm : Integer.MAX_VALUE;
        mCdmaEcio = ((cdmaEcio > 0) && (cdmaEcio < 160)) ? -cdmaEcio : Integer.MAX_VALUE;

        mEvdoDbm = ((evdoDbm > 0) && (evdoDbm < 120)) ? -evdoDbm : Integer.MAX_VALUE;
        mEvdoEcio = ((evdoEcio > 0) && (evdoEcio < 160)) ? -evdoEcio : Integer.MAX_VALUE;
        mEvdoSnr = ((evdoSnr > 0) && (evdoSnr <= 8)) ? evdoSnr : Integer.MAX_VALUE;
    }

    /** @hide */
@@ -303,13 +325,10 @@ public final class CellSignalStrengthCdma extends CellSignalStrength implements
    @Override
    public void writeToParcel(Parcel dest, int flags) {
        if (DBG) log("writeToParcel(Parcel, int): " + toString());
        // Need to multiply CdmaDbm, CdmaEcio, EvdoDbm and EvdoEcio by -1
        // to ensure consistency when reading values written here
        // unless the value is invalid
        dest.writeInt(mCdmaDbm * (mCdmaDbm != Integer.MAX_VALUE ? -1 : 1));
        dest.writeInt(mCdmaEcio * (mCdmaEcio != Integer.MAX_VALUE ? -1 : 1));
        dest.writeInt(mEvdoDbm * (mEvdoDbm != Integer.MAX_VALUE ? -1 : 1));
        dest.writeInt(mEvdoEcio * (mEvdoEcio != Integer.MAX_VALUE ? -1 : 1));
        dest.writeInt(mCdmaDbm);
        dest.writeInt(mCdmaEcio);
        dest.writeInt(mEvdoDbm);
        dest.writeInt(mEvdoEcio);
        dest.writeInt(mEvdoSnr);
    }

@@ -322,13 +341,9 @@ public final class CellSignalStrengthCdma extends CellSignalStrength implements
        // the parcel as positive values.
        // Need to convert into negative values unless the value is invalid
        mCdmaDbm = in.readInt();
        if (mCdmaDbm != Integer.MAX_VALUE) mCdmaDbm *= -1;
        mCdmaEcio = in.readInt();
        if (mCdmaEcio != Integer.MAX_VALUE) mCdmaEcio *= -1;
        mEvdoDbm = in.readInt();
        if (mEvdoDbm != Integer.MAX_VALUE) mEvdoDbm *= -1;
        mEvdoEcio = in.readInt();
        if (mEvdoEcio != Integer.MAX_VALUE) mEvdoEcio *= -1;
        mEvdoSnr = in.readInt();
        if (DBG) log("CellSignalStrengthCdma(Parcel): " + toString());
    }
+3 −3
Original line number Diff line number Diff line
@@ -314,11 +314,11 @@ public class SignalStrength implements Parcelable {
        // BER no change;

        mCdmaDbm = mCdmaDbm > 0 ? -mCdmaDbm : -120;
        mCdmaEcio = (mCdmaEcio > 0) ? -mCdmaEcio : -160;
        mCdmaEcio = (mCdmaEcio >= 0) ? -mCdmaEcio : -160;

        mEvdoDbm = (mEvdoDbm > 0) ? -mEvdoDbm : -120;
        mEvdoEcio = (mEvdoEcio >= 0) ? -mEvdoEcio : -1;
        mEvdoSnr = ((mEvdoSnr > 0) && (mEvdoSnr <= 8)) ? mEvdoSnr : -1;
        mEvdoEcio = (mEvdoEcio >= 0) ? -mEvdoEcio : -160;
        mEvdoSnr = ((mEvdoSnr >= 0) && (mEvdoSnr <= 8)) ? mEvdoSnr : -1;

        // TS 36.214 Physical Layer Section 5.1.3, TS 36.331 RRC
        mLteSignalStrength = (mLteSignalStrength >= 0) ? mLteSignalStrength : 99;