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

Commit db266b7a authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge changes from topic "atel_radioerror"

* changes:
  add unit test for setRadioPower_1_6
  dump last response of setRadioPower
  add more error code in CommandException
  Support IRadio 1.6 setRadioPower
parents 59698b98 e502740c
Loading
Loading
Loading
Loading
+15 −0
Original line number Diff line number Diff line
@@ -126,6 +126,11 @@ public class CommandException extends RuntimeException {
        OEM_ERROR_24,
        OEM_ERROR_25,
        REQUEST_CANCELLED,
        SIMULTANEOUS_SMS_AND_CALL_NOT_ALLOWED,
        ACCESS_BARRED,
        BLOCKED_DUE_TO_CALL,
        RF_HARDWARE_ISSUE,
        NO_RF_CALIBRATION_INFO,
    }

    @UnsupportedAppUsage
@@ -326,6 +331,16 @@ public class CommandException extends RuntimeException {
                return new CommandException(Error.OEM_ERROR_25);
            case RILConstants.REQUEST_CANCELLED:
                return new CommandException(Error.REQUEST_CANCELLED);
            case RILConstants.SIMULTANEOUS_SMS_AND_CALL_NOT_ALLOWED:
                return new CommandException(Error.SIMULTANEOUS_SMS_AND_CALL_NOT_ALLOWED);
            case RILConstants.ACCESS_BARRED:
                return new CommandException(Error.ACCESS_BARRED);
            case RILConstants.BLOCKED_DUE_TO_CALL:
                return new CommandException(Error.BLOCKED_DUE_TO_CALL);
            case RILConstants.RF_HARDWARE_ISSUE:
                return new CommandException(Error.RF_HARDWARE_ISSUE);
            case RILConstants.NO_RF_CALIBRATION_INFO:
                return new CommandException(Error.NO_RF_CALIBRATION_INFO);

            default:
                Rlog.e("GSM", "Unrecognized RIL errno " + ril_errno);
+59 −13
Original line number Diff line number Diff line
@@ -236,6 +236,8 @@ public class RIL extends BaseCommands implements CommandsInterface {

    Object[] mLastNITZTimeInfo;

    int mLastRadioPowerResult = RadioError.NONE;

    // When we are testing emergency calls using ril.test.emergencynumber, this will trigger test
    // ECbM when the call is ended.
    @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
@@ -1602,7 +1604,16 @@ public class RIL extends BaseCommands implements CommandsInterface {
                        + " preferredForEmergencyCall="  + preferredForEmergencyCall);
            }

            if (mRadioVersion.greaterOrEqual(RADIO_HAL_VERSION_1_5)) {
            if (mRadioVersion.greaterOrEqual(RADIO_HAL_VERSION_1_6)) {
                android.hardware.radio.V1_6.IRadio radioProxy16 =
                        (android.hardware.radio.V1_6.IRadio) radioProxy;
                try {
                    radioProxy16.setRadioPower_1_6(rr.mSerial, on, forEmergencyCall,
                            preferredForEmergencyCall);
                } catch (RemoteException | RuntimeException e) {
                    handleRadioProxyExceptionForRR(rr, "setRadioPower_1_6", e);
                }
            } else if (mRadioVersion.greaterOrEqual(RADIO_HAL_VERSION_1_5)) {
                android.hardware.radio.V1_5.IRadio radioProxy15 =
                        (android.hardware.radio.V1_5.IRadio) radioProxy;
                try {
@@ -5501,10 +5512,24 @@ public class RIL extends BaseCommands implements CommandsInterface {
     */
    @VisibleForTesting
    public RILRequest processResponse(RadioResponseInfo responseInfo) {
        int serial = responseInfo.serial;
        int error = responseInfo.error;
        int type = responseInfo.type;
        return processResponseInternal(responseInfo.serial, responseInfo.error, responseInfo.type);
    }

    /**
     * This is a helper function for V1_6.RadioResponseInfo to be called when a RadioResponse
     * callback is called.
     * It takes care of acks, wakelocks, and finds and returns RILRequest corresponding to the
     * response if one is found.
     * @param responseInfo RadioResponseInfo received in response callback
     * @return RILRequest corresponding to the response
     */
    @VisibleForTesting
    public RILRequest processResponse_1_6(
                    android.hardware.radio.V1_6.RadioResponseInfo responseInfo) {
        return processResponseInternal(responseInfo.serial, responseInfo.error, responseInfo.type);
    }

    private RILRequest processResponseInternal(int serial, int error, int type) {
        RILRequest rr = null;

        if (type == RadioResponseType.SOLICITED_ACK) {
@@ -5608,7 +5633,28 @@ public class RIL extends BaseCommands implements CommandsInterface {
     */
    @VisibleForTesting
    public void processResponseDone(RILRequest rr, RadioResponseInfo responseInfo, Object ret) {
        if (responseInfo.error == 0) {
        processResponseDoneInternal(rr, responseInfo.error, responseInfo.type, ret);
    }

    /**
     * This is a helper function to be called at the end of the RadioResponse callbacks using for
     * V1_6.RadioResponseInfo.
     * It takes care of sending error response, logging, decrementing wakelock if needed, and
     * releases the request from memory pool.
     * @param rr RILRequest for which response callback was called
     * @param responseInfo RadioResponseInfo received in the callback
     * @param ret object to be returned to request sender
     */
    @VisibleForTesting
    public void processResponseDone_1_6(
                    RILRequest rr, android.hardware.radio.V1_6.RadioResponseInfo responseInfo,
                    Object ret) {
        processResponseDoneInternal(rr, responseInfo.error, responseInfo.type, ret);
    }

    private void processResponseDoneInternal(
            RILRequest rr, int rilError, int responseType, Object ret) {
        if (rilError == 0) {
            if (RILJ_LOGD) {
                riljLog(rr.serialString() + "< " + requestToString(rr.mRequest)
                        + " " + retToString(rr.mRequest, ret));
@@ -5616,11 +5662,11 @@ public class RIL extends BaseCommands implements CommandsInterface {
        } else {
            if (RILJ_LOGD) {
                riljLog(rr.serialString() + "< " + requestToString(rr.mRequest)
                        + " error " + responseInfo.error);
                        + " error " + rilError);
            }
            rr.onError(responseInfo.error, ret);
            rr.onError(rilError, ret);
        }
        processResponseCleanUp(rr, responseInfo, ret);
        processResponseCleanUp(rr, rilError, responseType, ret);
    }

    /**
@@ -5638,14 +5684,13 @@ public class RIL extends BaseCommands implements CommandsInterface {
            riljLog(rr.serialString() + "< " + requestToString(rr.mRequest)
                    + " request not supported, falling back");
        }
        processResponseCleanUp(rr, responseInfo, ret);
        processResponseCleanUp(rr, responseInfo.error, responseInfo.type, ret);
    }

    private void processResponseCleanUp(RILRequest rr, RadioResponseInfo responseInfo, Object ret) {
    private void processResponseCleanUp(RILRequest rr, int rilError, int responseType, Object ret) {
        if (rr != null) {
            mMetrics.writeOnRilSolicitedResponse(mPhoneId, rr.mSerial, responseInfo.error,
                    rr.mRequest, ret);
            if (responseInfo.type == RadioResponseType.SOLICITED) {
            mMetrics.writeOnRilSolicitedResponse(mPhoneId, rr.mSerial, rilError, rr.mRequest, ret);
            if (responseType == RadioResponseType.SOLICITED) {
                decrementWakeLock(rr);
            }
            rr.release();
@@ -6563,6 +6608,7 @@ public class RIL extends BaseCommands implements CommandsInterface {
            }
        }
        pw.println(" mLastNITZTimeInfo=" + Arrays.toString(mLastNITZTimeInfo));
        pw.println(" mLastRadioPowerResult=" + mLastRadioPowerResult);
        pw.println(" mTestingEmergencyCall=" + mTestingEmergencyCall.get());
        mClientWakelockTracker.dumpClientRequestTracker(pw);
    }
+22 −0
Original line number Diff line number Diff line
@@ -480,6 +480,7 @@ public class RadioResponse extends IRadioResponse.Stub {
     */
    public void setRadioPowerResponse(RadioResponseInfo responseInfo) {
        responseVoid(responseInfo);
        mRil.mLastRadioPowerResult = responseInfo.error;
    }

    /**
@@ -2067,6 +2068,18 @@ public class RadioResponse extends IRadioResponse.Stub {
        }
    }

    private void responseVoid_1_6(android.hardware.radio.V1_6.RadioResponseInfo responseInfo) {
        RILRequest rr = mRil.processResponse_1_6(responseInfo);

        if (rr != null) {
            Object ret = null;
            if (responseInfo.error == RadioError.NONE) {
                sendMessageResponse(rr.mResult, ret);
            }
            mRil.processResponseDone_1_6(rr, responseInfo, ret);
        }
    }

    private void responseString(RadioResponseInfo responseInfo, String str) {
        RILRequest rr = mRil.processResponse(responseInfo);

@@ -2646,6 +2659,15 @@ public class RadioResponse extends IRadioResponse.Stub {
     */
    public void setRadioPowerResponse_1_5(RadioResponseInfo info) {
        responseVoid(info);
        mRil.mLastRadioPowerResult = info.error;
    }

    /**
     * @param info Response info struct containing response type, serial no. and error.
     */
    public void setRadioPowerResponse_1_6(android.hardware.radio.V1_6.RadioResponseInfo info) {
        responseVoid_1_6(info);
        mRil.mLastRadioPowerResult = info.error;
    }

    /**
+52 −1
Original line number Diff line number Diff line
@@ -112,7 +112,7 @@ import android.hardware.radio.V1_0.RadioResponseInfo;
import android.hardware.radio.V1_0.RadioResponseType;
import android.hardware.radio.V1_0.RadioTechnologyFamily;
import android.hardware.radio.V1_0.SmsWriteArgs;
import android.hardware.radio.V1_5.IRadio;
import android.hardware.radio.V1_6.IRadio;
import android.hardware.radio.deprecated.V1_0.IOemHook;
import android.net.ConnectivityManager;
import android.net.InetAddresses;
@@ -201,6 +201,7 @@ public class RILTest extends TelephonyTest {
    private HalVersion mRadioVersionV13 = new HalVersion(1, 3);
    private HalVersion mRadioVersionV14 = new HalVersion(1, 4);
    private HalVersion mRadioVersionV15 = new HalVersion(1, 5);
    private HalVersion mRadioVersionV16 = new HalVersion(1, 6);

    private RIL mRILInstance;
    private RIL mRILUnderTest;
@@ -706,6 +707,29 @@ public class RILTest extends TelephonyTest {
        verifyRILResponse(mRILUnderTest, mSerialNumberCaptor.getValue(), RIL_REQUEST_RADIO_POWER);
    }

    @FlakyTest
    @Test
    public void testSetRadioPower_1_6() throws Exception {
        boolean on = true, forEmergencyCall = false, preferredForEmergencyCall = false;

        // Use Radio HAL v1.6
        try {
            replaceInstance(RIL.class, "mRadioVersion", mRILUnderTest, mRadioVersionV16);
        } catch (Exception e) {
        }

        mRILUnderTest.setRadioPower(
                on, forEmergencyCall, preferredForEmergencyCall, obtainMessage());
        verify(mRadioProxy)
                .setRadioPower_1_6(
                        mSerialNumberCaptor.capture(),
                        eq(on),
                        eq(forEmergencyCall),
                        eq(preferredForEmergencyCall));
        verifyRILResponse_1_6(
                mRILUnderTest, mSerialNumberCaptor.getValue(), RIL_REQUEST_RADIO_POWER);
    }

    @FlakyTest
    @Test
    public void testSendDtmf() throws Exception {
@@ -1278,6 +1302,23 @@ public class RILTest extends TelephonyTest {
        assertFalse(ril.getWakeLock(RIL.FOR_WAKELOCK).isHeld());
    }

    private static void verifyRILResponse_1_6(RIL ril, int serial, int requestType) {
        android.hardware.radio.V1_6.RadioResponseInfo responseInfo =
                createFakeRadioResponseInfo_1_6(
                        serial, RadioError.NONE, RadioResponseType.SOLICITED);

        RILRequest rr = ril.processResponse_1_6(responseInfo);
        assertNotNull(rr);

        assertEquals(serial, rr.getSerial());
        assertEquals(requestType, rr.getRequest());
        assertTrue(ril.getWakeLock(RIL.FOR_WAKELOCK).isHeld());

        ril.processResponseDone_1_6(rr, responseInfo, null);
        assertEquals(0, ril.getRilRequestList().size());
        assertFalse(ril.getWakeLock(RIL.FOR_WAKELOCK).isHeld());
    }

    private static void verifyRILErrorResponse(RIL ril, int serial, int requestType, int error) {
        RadioResponseInfo responseInfo =
                createFakeRadioResponseInfo(serial, error, RadioResponseType.SOLICITED);
@@ -1323,6 +1364,16 @@ public class RILTest extends TelephonyTest {
        return respInfo;
    }

    private static android.hardware.radio.V1_6.RadioResponseInfo createFakeRadioResponseInfo_1_6(
            int serial, int error, int type) {
        android.hardware.radio.V1_6.RadioResponseInfo respInfo =
                new android.hardware.radio.V1_6.RadioResponseInfo();
        respInfo.serial = serial;
        respInfo.error = error;
        respInfo.type = type;
        return respInfo;
    }

    @Test
    public void testConvertHalCellInfoListForLTE() {
        android.hardware.radio.V1_0.CellInfoLte lte = new android.hardware.radio.V1_0.CellInfoLte();