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

Commit cfb0d600 authored by Mingming Cai's avatar Mingming Cai
Browse files

Add response and indication for CellInfo Hal 1.6

cellInfoList_1_6
getCellInfoListResponse_1_6
networkScanResult_1_6

Test: atest RILTest, SignalStrengthTest, CellSignalStrengthNrTest
Bug: 170771377
Change-Id: Id67ed1c0f53b8807e32f3e99a9694158a624d10a
parent 6715d943
Loading
Loading
Loading
Loading
+25 −1
Original line number Diff line number Diff line
@@ -4210,7 +4210,14 @@ public class RIL extends BaseCommands implements CommandsInterface {
            }

            try {
                if (mRadioVersion.greaterOrEqual(RADIO_HAL_VERSION_1_6)) {
                    android.hardware.radio.V1_6.IRadio radioProxy16 =
                            (android.hardware.radio.V1_6.IRadio) radioProxy;
                    radioProxy16.getCellInfoList_1_6(rr.mSerial);

                } else {
                    radioProxy.getCellInfoList(rr.mSerial);
                }
            } catch (RemoteException | RuntimeException e) {
                handleRadioProxyExceptionForRR(rr, "getCellInfoList", e);
            }
@@ -7140,6 +7147,23 @@ public class RIL extends BaseCommands implements CommandsInterface {
        return response;
    }

    /**
     * Convert CellInfo defined in 1.6/types.hal to CellInfo type.
     * @param records List of CellInfo defined in 1.6/types.hal.
     * @return List of converted CellInfo object.
     */
    @VisibleForTesting
    public static ArrayList<CellInfo> convertHalCellInfoList_1_6(
            ArrayList<android.hardware.radio.V1_6.CellInfo> records) {
        ArrayList<CellInfo> response = new ArrayList<>(records.size());

        final long nanotime = SystemClock.elapsedRealtimeNanos();
        for (android.hardware.radio.V1_6.CellInfo record : records) {
            response.add(CellInfo.create(record, nanotime));
        }
        return response;
    }

    private static LinkAddress createLinkAddressFromString(String addressString) {
        return createLinkAddressFromString(addressString, 0, LinkAddress.LIFETIME_UNKNOWN,
                LinkAddress.LIFETIME_UNKNOWN);
+28 −0
Original line number Diff line number Diff line
@@ -804,6 +804,18 @@ public class RadioIndication extends IRadioIndication.Stub {
        mRil.mRilCellInfoListRegistrants.notifyRegistrants(new AsyncResult(null, response, null));
    }

    /** Get unsolicited message for cellInfoList using HAL V1_5 */
    public void cellInfoList_1_6(int indicationType,
            ArrayList<android.hardware.radio.V1_6.CellInfo> records) {
        mRil.processIndication(indicationType);

        ArrayList<CellInfo> response = RIL.convertHalCellInfoList_1_6(records);

        if (RIL.RILJ_LOGD) mRil.unsljLogRet(RIL_UNSOL_CELL_INFO_LIST, response);

        mRil.mRilCellInfoListRegistrants.notifyRegistrants(new AsyncResult(null, response, null));
    }

    /** Get unsolicited message for uicc applications enablement changes. */
    public void uiccApplicationsEnablementChanged(int indicationType, boolean enabled) {
        mRil.processIndication(indicationType);
@@ -839,6 +851,12 @@ public class RadioIndication extends IRadioIndication.Stub {
        responseNetworkScan_1_5(indicationType, result);
    }

    /** Incremental network scan results with HAL V1_6 */
    public void networkScanResult_1_6(int indicationType,
            android.hardware.radio.V1_6.NetworkScanResult result) {
        responseNetworkScan_1_6(indicationType, result);
    }

    public void imsNetworkStateChanged(int indicationType) {
        mRil.processIndication(indicationType);

@@ -1225,6 +1243,16 @@ public class RadioIndication extends IRadioIndication.Stub {
        mRil.mRilNetworkScanResultRegistrants.notifyRegistrants(new AsyncResult(null, nsr, null));
    }

    private void responseNetworkScan_1_6(int indicationType,
            android.hardware.radio.V1_6.NetworkScanResult result) {
        mRil.processIndication(indicationType);

        ArrayList<CellInfo> cellInfos = RIL.convertHalCellInfoList_1_6(result.networkInfos);
        NetworkScanResult nsr = new NetworkScanResult(result.status, result.error, cellInfos);
        if (RIL.RILJ_LOGD) mRil.unsljLogRet(RIL_UNSOL_NETWORK_SCAN_RESULT, nsr);
        mRil.mRilNetworkScanResultRegistrants.notifyRegistrants(new AsyncResult(null, nsr, null));
    }

    private void responseDataCallListChanged(int indicationType, List<?> dcList) {
        mRil.processIndication(indicationType);

+24 −0
Original line number Diff line number Diff line
@@ -1380,6 +1380,16 @@ public class RadioResponse extends IRadioResponse.Stub {
        responseCellInfoList_1_5(responseInfo, cellInfo);
    }

    /**
     * @param responseInfo Response info struct containing response type, serial no. and error.
     * @param cellInfo List of current cell information known to radio.
     */
    public void getCellInfoListResponse_1_6(
            android.hardware.radio.V1_6.RadioResponseInfo responseInfo,
            ArrayList<android.hardware.radio.V1_6.CellInfo> cellInfo) {
        responseCellInfoList_1_6(responseInfo, cellInfo);
    }

    /**
     * @param responseInfo Response info struct containing response type, serial no. and error
     */
@@ -2651,6 +2661,20 @@ public class RadioResponse extends IRadioResponse.Stub {
        }
    }

    private void responseCellInfoList_1_6(
            android.hardware.radio.V1_6.RadioResponseInfo responseInfo,
            ArrayList<android.hardware.radio.V1_6.CellInfo> cellInfo) {
        RILRequest rr = mRil.processResponse_1_6(responseInfo);

        if (rr != null) {
            ArrayList<CellInfo> ret = RIL.convertHalCellInfoList_1_6(cellInfo);
            if (responseInfo.error == RadioError.NONE) {
                sendMessageResponse(rr.mResult, ret);
            }
            mRil.processResponseDone_1_6(rr, responseInfo, ret);
        }
    }

    private void responseActivityData(RadioResponseInfo responseInfo,
            ActivityStatsInfo activityInfo) {
        RILRequest rr = mRil.processResponse(responseInfo);
+52 −33
Original line number Diff line number Diff line
@@ -18,7 +18,7 @@ package com.android.internal.telephony;

import static com.google.common.truth.Truth.assertThat;

import android.hardware.radio.V1_4.NrSignalStrength;
import android.hardware.radio.V1_6.NrSignalStrength;
import android.os.Parcel;
import android.telephony.CellInfo;
import android.telephony.CellSignalStrength;
@@ -30,6 +30,10 @@ import com.google.common.collect.Range;

import org.junit.Test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;

public class CellSignalStrengthNrTest extends AndroidTestCase {
    private static final int CSIRSRP = -123;
    private static final int CSIRSRQ = -11;
@@ -38,6 +42,8 @@ public class CellSignalStrengthNrTest extends AndroidTestCase {
    private static final int INVALID_CSIRSRP = Integer.MAX_VALUE;
    private static final int INVALID_SSRSRP = Integer.MAX_VALUE;
    private static final int CSISINR = 18;
    private static final int CSICQI_TABLE_INDEX = 1;
    private static final ArrayList<Integer> CSICQI_REPORT = new ArrayList<>(Arrays.asList(3, 2, 1));
    private static final int SSRSRP = -112;
    private static final int SSRSRQ = -13;
    private static final int SSSINR = 32;
@@ -45,13 +51,15 @@ public class CellSignalStrengthNrTest extends AndroidTestCase {
    @Test
    public void testGetMethod() {
        // GIVEN an instance of CellSignalStrengthNr
        CellSignalStrengthNr css = new CellSignalStrengthNr(
                CSIRSRP, CSIRSRQ, CSISINR, SSRSRP, SSRSRQ, SSSINR);
        CellSignalStrengthNr css = new CellSignalStrengthNr(CSIRSRP, CSIRSRQ, CSISINR,
                CSICQI_TABLE_INDEX, CSICQI_REPORT, SSRSRP, SSRSRQ, SSSINR);

        // THEN the get method should return correct value
        assertThat(css.getCsiRsrp()).isEqualTo(CSIRSRP);
        assertThat(css.getCsiRsrq()).isEqualTo(CSIRSRQ);
        assertThat(css.getCsiSinr()).isEqualTo(CSISINR);
        assertThat(css.getCsiCqiTableIndex()).isEqualTo(CSICQI_TABLE_INDEX);
        assertThat(css.getCsiCqiReport()).isEqualTo(CSICQI_REPORT);
        assertThat(css.getSsRsrp()).isEqualTo(SSRSRP);
        assertThat(css.getSsRsrq()).isEqualTo(SSRSRQ);
        assertThat(css.getSsSinr()).isEqualTo(SSSINR);
@@ -62,18 +70,22 @@ public class CellSignalStrengthNrTest extends AndroidTestCase {
    public void testGetMethodWithHal() {
        // GIVEN an instance of NrSignalStrength with some positive values
        NrSignalStrength nrSignalStrength = new NrSignalStrength();
        nrSignalStrength.csiRsrp = -CSIRSRP;
        nrSignalStrength.csiRsrq = -CSIRSRQ;
        nrSignalStrength.csiSinr = CSISINR;
        nrSignalStrength.ssRsrp = -SSRSRP;
        nrSignalStrength.ssRsrq = -SSRSRQ;
        nrSignalStrength.ssSinr = SSSINR;
        nrSignalStrength.base.csiRsrp = -CSIRSRP;
        nrSignalStrength.base.csiRsrq = -CSIRSRQ;
        nrSignalStrength.base.csiSinr = CSISINR;
        nrSignalStrength.csiCqiTableIndex = CSICQI_TABLE_INDEX;
        nrSignalStrength.csiCqiReport = CSICQI_REPORT;
        nrSignalStrength.base.ssRsrp = -SSRSRP;
        nrSignalStrength.base.ssRsrq = -SSRSRQ;
        nrSignalStrength.base.ssSinr = SSSINR;

        // THEN the get method should return the correct value
        CellSignalStrengthNr css = new CellSignalStrengthNr(nrSignalStrength);
        assertThat(css.getCsiRsrp()).isEqualTo(CSIRSRP);
        assertThat(css.getCsiRsrq()).isEqualTo(CSIRSRQ);
        assertThat(css.getCsiSinr()).isEqualTo(CSISINR);
        assertThat(css.getCsiCqiTableIndex()).isEqualTo(CSICQI_TABLE_INDEX);
        assertThat(css.getCsiCqiReport()).isEqualTo(CSICQI_REPORT);
        assertThat(css.getSsRsrp()).isEqualTo(SSRSRP);
        assertThat(css.getSsRsrq()).isEqualTo(SSRSRQ);
        assertThat(css.getSsSinr()).isEqualTo(SSSINR);
@@ -84,18 +96,22 @@ public class CellSignalStrengthNrTest extends AndroidTestCase {
    public void testUnavailableValueWithHal() {
        // GIVEN an instance of NrSignalStrength
        NrSignalStrength nrSignalStrength = new NrSignalStrength();
        nrSignalStrength.csiRsrp = CellInfo.UNAVAILABLE;
        nrSignalStrength.csiRsrq = CellInfo.UNAVAILABLE;
        nrSignalStrength.csiSinr = CellInfo.UNAVAILABLE;
        nrSignalStrength.ssRsrp = CellInfo.UNAVAILABLE;
        nrSignalStrength.ssRsrq = CellInfo.UNAVAILABLE;
        nrSignalStrength.ssSinr = CellInfo.UNAVAILABLE;
        nrSignalStrength.base.csiRsrp = CellInfo.UNAVAILABLE;
        nrSignalStrength.base.csiRsrq = CellInfo.UNAVAILABLE;
        nrSignalStrength.base.csiSinr = CellInfo.UNAVAILABLE;
        nrSignalStrength.csiCqiTableIndex = CellInfo.UNAVAILABLE;
        nrSignalStrength.csiCqiReport = new ArrayList<Integer>();
        nrSignalStrength.base.ssRsrp = CellInfo.UNAVAILABLE;
        nrSignalStrength.base.ssRsrq = CellInfo.UNAVAILABLE;
        nrSignalStrength.base.ssSinr = CellInfo.UNAVAILABLE;

        // THEN the get method should return unavailable value
        CellSignalStrengthNr css = new CellSignalStrengthNr(nrSignalStrength);
        assertThat(css.getCsiRsrp()).isEqualTo(CellInfo.UNAVAILABLE);
        assertThat(css.getCsiRsrq()).isEqualTo(CellInfo.UNAVAILABLE);
        assertThat(css.getCsiSinr()).isEqualTo(CellInfo.UNAVAILABLE);
        assertThat(css.getCsiCqiTableIndex()).isEqualTo(CellInfo.UNAVAILABLE);
        assertThat(css.getCsiCqiReport()).isEqualTo(Collections.emptyList());
        assertThat(css.getSsRsrp()).isEqualTo(CellInfo.UNAVAILABLE);
        assertThat(css.getSsRsrq()).isEqualTo(CellInfo.UNAVAILABLE);
        assertThat(css.getSsSinr()).isEqualTo(CellInfo.UNAVAILABLE);
@@ -105,10 +121,10 @@ public class CellSignalStrengthNrTest extends AndroidTestCase {
    @Test
    public void testEquals_sameParameters() {
        // GIVEN an instance of CellSignalStrengthNr and another object with the same parameters
        CellSignalStrengthNr css = new CellSignalStrengthNr(
                CSIRSRP, CSIRSRQ, CSISINR, SSRSRP, SSRSRQ, SSSINR);
        CellSignalStrengthNr anotherCss = new CellSignalStrengthNr(
                CSIRSRP, CSIRSRQ, CSISINR, SSRSRP, SSRSRQ, SSSINR);
        CellSignalStrengthNr css = new CellSignalStrengthNr(CSIRSRP, CSIRSRQ, CSISINR,
                CSICQI_TABLE_INDEX, CSICQI_REPORT, SSRSRP, SSRSRQ, SSSINR);
        CellSignalStrengthNr anotherCss = new CellSignalStrengthNr(CSIRSRP, CSIRSRQ, CSISINR,
                CSICQI_TABLE_INDEX, CSICQI_REPORT, SSRSRP, SSRSRQ, SSSINR);

        // THEN this two objects are equivalent
        assertThat(css).isEqualTo(anotherCss);
@@ -118,10 +134,11 @@ public class CellSignalStrengthNrTest extends AndroidTestCase {
    public void testEquals_differentParameters() {
        // GIVEN an instance of CellSignalStrengthNr and another object with some different
        // parameters
        CellSignalStrengthNr css = new CellSignalStrengthNr(
                CSIRSRP, CSIRSRQ, CSISINR, SSRSRP, SSRSRQ, SSSINR);
        CellSignalStrengthNr anotherCss = new CellSignalStrengthNr(
                ANOTHER_CSIRSRP, ANOTHER_CSIRSRQ, CSISINR, SSRSRP, SSRSRQ, SSSINR);
        CellSignalStrengthNr css = new CellSignalStrengthNr(CSIRSRP, CSIRSRQ, CSISINR,
                CSICQI_TABLE_INDEX, CSICQI_REPORT, SSRSRP, SSRSRQ, SSSINR);
        CellSignalStrengthNr anotherCss = new CellSignalStrengthNr(ANOTHER_CSIRSRP,
                ANOTHER_CSIRSRQ, CSISINR, CSICQI_TABLE_INDEX, CSICQI_REPORT,
                SSRSRP, SSRSRQ, SSSINR);

        // THEN this two objects are different
        assertThat(css).isNotEqualTo(anotherCss);
@@ -130,8 +147,8 @@ public class CellSignalStrengthNrTest extends AndroidTestCase {
    @Test
    public void testAusLevel_validValue() {
        // GIVEN an instance of CellSignalStrengthNr with valid csirsrp
        CellSignalStrengthNr css = new CellSignalStrengthNr(
                CSIRSRP, CSIRSRQ, CSISINR, SSRSRP, SSRSRQ, SSSINR);
        CellSignalStrengthNr css = new CellSignalStrengthNr(CSIRSRP, CSIRSRQ, CSISINR,
                CSICQI_TABLE_INDEX, CSICQI_REPORT, SSRSRP, SSRSRQ, SSSINR);

        // THEN the asu level is in range [0, 97]
        assertThat(css.getAsuLevel()).isIn(Range.range(0, BoundType.CLOSED, 97, BoundType.CLOSED));
@@ -140,8 +157,8 @@ public class CellSignalStrengthNrTest extends AndroidTestCase {
    @Test
    public void testAsuLevel_invalidValue() {
        // GIVEN an instance of CellSignalStrengthNr with invalid csirsrp
        CellSignalStrengthNr css = new CellSignalStrengthNr(
                CSIRSRP, CSIRSRQ, CSISINR, INVALID_SSRSRP, SSRSRQ, SSSINR);
        CellSignalStrengthNr css = new CellSignalStrengthNr(CSIRSRP, CSIRSRQ, CSISINR,
                CSICQI_TABLE_INDEX, CSICQI_REPORT, INVALID_SSRSRP, SSRSRQ, SSSINR);

        // THEN the asu level is unknown
        assertThat(css.getAsuLevel()).isEqualTo(CellSignalStrengthNr.UNKNOWN_ASU_LEVEL);
@@ -151,8 +168,8 @@ public class CellSignalStrengthNrTest extends AndroidTestCase {
    public void testSignalLevel_validValue() {
        for (int ssRsrp = -140; ssRsrp <= -44; ssRsrp++) {
            // GIVEN an instance of CellSignalStrengthNr with valid csirsrp
            CellSignalStrengthNr css = new CellSignalStrengthNr(
                    CSIRSRP, CSIRSRQ, CSISINR, ssRsrp, SSRSRQ, SSSINR);
            CellSignalStrengthNr css = new CellSignalStrengthNr(CSIRSRP, CSIRSRQ, CSISINR,
                    CSICQI_TABLE_INDEX, CSICQI_REPORT, INVALID_SSRSRP, SSRSRQ, SSSINR);

            // THEN the signal level is valid
            assertThat(css.getLevel()).isIn(Range.range(
@@ -164,8 +181,8 @@ public class CellSignalStrengthNrTest extends AndroidTestCase {
    @Test
    public void testSignalLevel_invalidValue() {
        // GIVEN an instance of CellSignalStrengthNr with invalid csirsrp
        CellSignalStrengthNr css = new CellSignalStrengthNr(
                CSIRSRP, CSIRSRQ, CSISINR, INVALID_SSRSRP, SSRSRQ, SSSINR);
        CellSignalStrengthNr css = new CellSignalStrengthNr(CSIRSRP, CSIRSRQ, CSISINR,
                CSICQI_TABLE_INDEX, CSICQI_REPORT, SSRSRP, SSRSRQ, SSSINR);

        // THEN the signal level is unknown
        assertThat(css.getLevel()).isEqualTo(CellSignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN);
@@ -174,8 +191,8 @@ public class CellSignalStrengthNrTest extends AndroidTestCase {
    @Test
    public void testParcel() {
        // GIVEN an instance of CellSignalStrengthNr
        CellSignalStrengthNr css = new CellSignalStrengthNr(
                CSIRSRP, CSIRSRQ, CSISINR, SSRSRP, SSRSRQ, SSSINR);
        CellSignalStrengthNr css = new CellSignalStrengthNr(CSIRSRP, CSIRSRQ, CSISINR,
                CSICQI_TABLE_INDEX, CSICQI_REPORT, SSRSRP, SSRSRQ, SSSINR);

        // WHEN write the object to parcel and create another object with that parcel
        Parcel parcel = Parcel.obtain();
@@ -188,6 +205,8 @@ public class CellSignalStrengthNrTest extends AndroidTestCase {
        assertThat(anotherCss.getCsiRsrp()).isEqualTo(CSIRSRP);
        assertThat(anotherCss.getCsiRsrq()).isEqualTo(CSIRSRQ);
        assertThat(anotherCss.getCsiSinr()).isEqualTo(CSISINR);
        assertThat(css.getCsiCqiTableIndex()).isEqualTo(CSICQI_TABLE_INDEX);
        assertThat(css.getCsiCqiReport()).isEqualTo(CSICQI_REPORT);
        assertThat(anotherCss.getSsRsrp()).isEqualTo(SSRSRP);
        assertThat(anotherCss.getSsRsrq()).isEqualTo(SSRSRQ);
        assertThat(anotherCss.getSsSinr()).isEqualTo(SSSINR);
+8 −3
Original line number Diff line number Diff line
@@ -38,6 +38,8 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/** Unit tests for {@link IpSecConfig}. */
@@ -88,13 +90,14 @@ public class SignalStrengthTest {
    public void testParcelUnparcel() throws Exception {
        assertParcelingIsLossless(new SignalStrength());

        List<Integer> NrCqiReport = new ArrayList<>(Arrays.asList(3, 2, 1));
        SignalStrength s = new SignalStrength(
                new CellSignalStrengthCdma(-93, -132, -89, -125, 5),
                new CellSignalStrengthGsm(-79, 2, 5),
                new CellSignalStrengthWcdma(-94, 4, -102, -5),
                new CellSignalStrengthTdscdma(-95, 2, -103),
                new CellSignalStrengthLte(-85, -91, -6, -10, 12, 1),
                new CellSignalStrengthNr(-91, -6, 3, -80, -7, 4));
                new CellSignalStrengthLte(-85, -91, -6, -10, 1, 12, 1),
                new CellSignalStrengthNr(-91, -6, 3, 1, NrCqiReport, -80, -7, 4));
        assertParcelingIsLossless(s);

        PersistableBundle bundle = new PersistableBundle();
@@ -125,7 +128,7 @@ public class SignalStrengthTest {

    @Test
    public void testGetCellSignalStrengths() throws Exception {
        CellSignalStrengthLte lte = new CellSignalStrengthLte(-85, -91, -6, -10, 12, 1);
        CellSignalStrengthLte lte = new CellSignalStrengthLte(-85, -91, -6, -10, 1, 12, 1);
        CellSignalStrengthGsm gsm = new CellSignalStrengthGsm(-79, 2, 5);
        CellSignalStrengthCdma cdma = new CellSignalStrengthCdma(-93, -132, -89, -125, 5);
        CellSignalStrengthWcdma wcdma = new CellSignalStrengthWcdma(-94, 4, -102, -5);
@@ -166,6 +169,7 @@ public class SignalStrengthTest {
                lteRsrp,               // rsrp
                lteRsrq,               // rsrq
                -25,                   // rssnr
                CellInfo.UNAVAILABLE,  // cqiTableIndex
                CellInfo.UNAVAILABLE,  // cqi
                CellInfo.UNAVAILABLE); // timingAdvance

@@ -198,6 +202,7 @@ public class SignalStrengthTest {
                lteRsrp,               // rsrp
                15,                    // rsrq
                lteRssnr,              // rssnr
                CellInfo.UNAVAILABLE,  // cqiTableIndex
                CellInfo.UNAVAILABLE,  // cqi
                CellInfo.UNAVAILABLE); // timingAdvance