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

Commit d60a877c authored by Sanket Padawe's avatar Sanket Padawe Committed by Amit Mahajan
Browse files

Convert RIL java side to HIDL client.

Test: Basic telephony sanity tests (voice calls, data, sms, APM).
Bug: 32020264
Change-Id: I62aac69193563250107c55ced74bc5aa4ea0b5d4
parent e41a0a98
Loading
Loading
Loading
Loading
+347 −312

File changed.

Preview size limit exceeded, changes collapsed.

+11 −11
Original line number Diff line number Diff line
@@ -16,21 +16,20 @@

package com.android.internal.telephony;

import android.hardware.radio.V1_0.IRadioIndication;
import android.hardware.radio.V1_0.RadioIndicationType;
import android.hardware.radio.V1_0.SetupDataCallResult;
import android.hardware.radio.V1_0.SuppSvcNotification;
import android.hardware.radio.V1_0.SimRefreshResult;
import android.hardware.radio.V1_0.CdmaCallWaiting;
import android.hardware.radio.V1_0.CdmaSignalInfoRecord;
import android.hardware.radio.V1_0.CdmaSmsMessage;
import android.hardware.radio.V1_0.CdmaCallWaiting;
import android.hardware.radio.V1_0.StkCcUnsolSsResult;
import android.hardware.radio.V1_0.IRadioIndication;
import android.hardware.radio.V1_0.LceDataInfo;
import android.hardware.radio.V1_0.PcoDataInfo;
import android.os.Message;
import android.hardware.radio.V1_0.SetupDataCallResult;
import android.hardware.radio.V1_0.SimRefreshResult;
import android.hardware.radio.V1_0.StkCcUnsolSsResult;
import android.hardware.radio.V1_0.SuppSvcNotification;

import static com.android.internal.telephony.RILConstants.RIL_UNSOL_RESPONSE_RADIO_STATE_CHANGED;

import java.util.ArrayList;
import static com.android.internal.telephony.RILConstants.*;

public class RadioIndication extends IRadioIndication.Stub {
    RIL mRil;
@@ -47,7 +46,8 @@ public class RadioIndication extends IRadioIndication.Stub {
    public void radioStateChanged(int indicationType, int radioState) {
        mRil.processIndication(indicationType);
        CommandsInterface.RadioState newState = getRadioStateFromInt(radioState);
        mRil.riljLog("radioStateChanged: " + newState.toString());
        mRil.unsljLogMore(RIL_UNSOL_RESPONSE_RADIO_STATE_CHANGED, "radioStateChanged: "
                + newState.toString());
        mRil.setRadioState(newState);
    }

+241 −68
Original line number Diff line number Diff line
@@ -16,29 +16,33 @@

package com.android.internal.telephony;

import android.hardware.radio.V1_0.IRadioResponse;
import android.hardware.radio.V1_0.RadioResponseInfo;
import android.hardware.radio.V1_0.RadioResponseType;
import android.hardware.radio.V1_0.CardStatus;
import android.hardware.radio.V1_0.VoiceRegStateResult;
import android.hardware.radio.V1_0.DataRegStateResult;
import android.hardware.radio.V1_0.ActivityStatsInfo;
import android.hardware.radio.V1_0.AppStatus;
import android.hardware.radio.V1_0.CardStatus;
import android.hardware.radio.V1_0.CarrierRestrictions;
import android.hardware.radio.V1_0.ActivityStatsInfo;
import android.hardware.radio.V1_0.LceDataInfo;
import android.hardware.radio.V1_0.LceStatusInfo;
import android.hardware.radio.V1_0.SendSmsResult;
import android.hardware.radio.V1_0.CdmaBroadcastSmsConfigInfo;
import android.hardware.radio.V1_0.DataRegStateResult;
import android.hardware.radio.V1_0.GsmBroadcastSmsConfigInfo;
import android.hardware.radio.V1_0.IRadioResponse;
import android.hardware.radio.V1_0.LastCallFailCauseInfo;
import android.hardware.radio.V1_0.LceDataInfo;
import android.hardware.radio.V1_0.LceStatusInfo;
import android.hardware.radio.V1_0.NeighboringCell;
import android.hardware.radio.V1_0.RadioError;
import android.hardware.radio.V1_0.RadioResponseInfo;
import android.hardware.radio.V1_0.SendSmsResult;
import android.hardware.radio.V1_0.SetupDataCallResult;
import android.hardware.radio.V1_0.VoiceRegStateResult;
import android.os.AsyncResult;
import android.os.Message;
import android.telephony.Rlog;
import com.android.internal.telephony.uicc.*;
import android.telephony.PhoneNumberUtils;

import com.android.internal.telephony.uicc.IccCardApplicationStatus;
import com.android.internal.telephony.uicc.IccCardStatus;
import com.android.internal.telephony.uicc.IccUtils;

import java.util.ArrayList;
import static com.android.internal.telephony.RILConstants.*;
import java.util.Collections;

public class RadioResponse extends IRadioResponse.Stub {
    RIL mRil;
@@ -60,47 +64,96 @@ public class RadioResponse extends IRadioResponse.Stub {
    }

    /**
     * Response function for IRadio.getIccCardStatus()
     * Acknowldege the receipt of radio request sent to the vendor. This must be sent only for
     * radio request which take long time to respond.
     * For more details, refer https://source.android.com/devices/tech/connect/ril.html
     *
     * @param serial Serial no. of the request whose acknowledgement is sent.
     */
    public void acknowledgeRequest(int serial) {
        mRil.processRequestAck(serial);
    }

    /**
     * @param responseInfo Response info struct containing response type, serial no. & error
     * @param cardStatus ICC card status as defined by CardStatus in types.hal
     */
    public void getIccCardStatusResponse(RadioResponseInfo responseInfo, CardStatus cardStatus) {
        mRil.riljLog("getIccCardStatusResponse: serial " + responseInfo.serial +
                " cardStatus.cardState " + cardStatus.cardState);
        RILRequest rr = mRil.processResponse(responseInfo);

        if (rr != null) {
            Object ret = null;
            if (responseInfo.error == 0) {
                mRil.riljLog("getIccCardStatusResponse: rr.mResult != null");
                ret = responseIccCardStatus(cardStatus);
                sendMessageResponse(rr.mResult, ret);
            }
            mRil.processResponseDone(rr, responseInfo, ret);
        } else {
            mRil.riljLog("getIccCardStatusResponse: rr == null");
        }
        responseIccCardStatus(responseInfo, cardStatus);
    }

    public void supplyIccPinForAppResponse(RadioResponseInfo responseInfo, int var2) {}
    /**
     * @param responseInfo Response info struct containing response type, serial no. & error
     * @param remainingAttempts Number of retries remaining, must be equal to -1 if unknown.
     */
    public void supplyIccPinForAppResponse(RadioResponseInfo responseInfo, int remainingAttempts) {
        responseInts(responseInfo, remainingAttempts);
    }

    public void supplyIccPukForAppResponse(RadioResponseInfo responseInfo, int var2) {}
    /**
     * @param responseInfo Response info struct containing response type, serial no. & error
     * @param remainingAttempts Number of retries remaining, must be equal to -1 if unknown.
     */
    public void supplyIccPukForAppResponse(RadioResponseInfo responseInfo, int remainingAttempts) {
        responseInts(responseInfo, remainingAttempts);
    }

    public void supplyIccPin2ForAppResponse(RadioResponseInfo responseInfo, int var2) {}
    /**
     * @param responseInfo Response info struct containing response type, serial no. & error
     * @param remainingAttempts Number of retries remaining, must be equal to -1 if unknown.
     */
    public void supplyIccPin2ForAppResponse(RadioResponseInfo responseInfo, int remainingAttempts) {
        responseInts(responseInfo, remainingAttempts);
    }

    public void supplyIccPuk2ForAppResponse(RadioResponseInfo responseInfo, int var2) {}
    /**
     * @param responseInfo Response info struct containing response type, serial no. & error
     * @param remainingAttempts Number of retries remaining, must be equal to -1 if unknown.
     */
    public void supplyIccPuk2ForAppResponse(RadioResponseInfo responseInfo, int remainingAttempts) {
        responseInts(responseInfo, remainingAttempts);
    }

    public void changeIccPinForAppResponse(RadioResponseInfo responseInfo, int var2) {}
    /**
     * @param responseInfo Response info struct containing response type, serial no. & error
     * @param remainingAttempts Number of retries remaining, must be equal to -1 if unknown.
     */
    public void changeIccPinForAppResponse(RadioResponseInfo responseInfo, int remainingAttempts) {
        responseInts(responseInfo, remainingAttempts);
    }

    public void changeIccPin2ForAppResponse(RadioResponseInfo responseInfo, int var2) {}
    /**
     * @param responseInfo Response info struct containing response type, serial no. & error
     * @param remainingAttempts Number of retries remaining, must be equal to -1 if unknown.
     */
    public void changeIccPin2ForAppResponse(RadioResponseInfo responseInfo, int remainingAttempts) {
        responseInts(responseInfo, remainingAttempts);
    }

    /**
     * @param responseInfo Response info struct containing response type, serial no. & error
     * @param retriesRemaining Number of retries remaining, must be equal to -1 if unknown.
     */
    public void supplyNetworkDepersonalizationResponse(RadioResponseInfo responseInfo,
                                                       int var2) {}
                                                       int retriesRemaining) {
        responseInts(responseInfo, retriesRemaining);
    }

    /**
     * @param responseInfo Response info struct containing response type, serial no. & error
     * @param calls Current call list
     */
    public void getCurrentCallsResponse(RadioResponseInfo responseInfo,
                                        ArrayList<android.hardware.radio.V1_0.Call> var2) {}
                                        ArrayList<android.hardware.radio.V1_0.Call> calls) {
        responseCurrentCalls(responseInfo, calls);
    }

    public void dialResponse(RadioResponseInfo responseInfo) {}
    /**
     * @param responseInfo Response info struct containing response type, serial no. & error
     */
    public void dialResponse(RadioResponseInfo responseInfo) {
        responseVoid(responseInfo);
    }

    public void getIMSIForAppResponse(RadioResponseInfo responseInfo, String var2) {}

@@ -388,12 +441,12 @@ public class RadioResponse extends IRadioResponse.Stub {
                                           boolean var2,
                                           CarrierRestrictions var3) {}

    public void acknowledgeRequest(int var1) {}

    private Object
    responseIccCardStatus(CardStatus cardStatus) {
        IccCardApplicationStatus appStatus;
    private void responseIccCardStatus(RadioResponseInfo responseInfo, CardStatus cardStatus) {
        RILRequest rr = mRil.processResponse(responseInfo);

        if (rr != null) {
            Object ret = null;
            if (responseInfo.error == RadioError.NONE) {
                IccCardStatus iccCardStatus = new IccCardStatus();
                iccCardStatus.setCardState(cardStatus.cardState);
                iccCardStatus.setUniversalPinState(cardStatus.universalPinState);
@@ -403,13 +456,15 @@ public class RadioResponse extends IRadioResponse.Stub {
                int numApplications = cardStatus.applications.size();

                // limit to maximum allowed applications
        if (numApplications > com.android.internal.telephony.uicc.IccCardStatus.CARD_MAX_APPS) {
            numApplications = com.android.internal.telephony.uicc.IccCardStatus.CARD_MAX_APPS;
                if (numApplications
                        > com.android.internal.telephony.uicc.IccCardStatus.CARD_MAX_APPS) {
                    numApplications =
                            com.android.internal.telephony.uicc.IccCardStatus.CARD_MAX_APPS;
                }
                iccCardStatus.mApplications = new IccCardApplicationStatus[numApplications];
                for (int i = 0; i < numApplications; i++) {
                    AppStatus rilAppStatus = cardStatus.applications.get(i);
            appStatus = new IccCardApplicationStatus();
                    IccCardApplicationStatus appStatus = new IccCardApplicationStatus();
                    appStatus.app_type       = appStatus.AppTypeFromRILInt(rilAppStatus.appType);
                    appStatus.app_state      = appStatus.AppStateFromRILInt(rilAppStatus.appState);
                    appStatus.perso_substate = appStatus.PersoSubstateFromRILInt(
@@ -422,6 +477,124 @@ public class RadioResponse extends IRadioResponse.Stub {
                    iccCardStatus.mApplications[i] = appStatus;
                }
                mRil.riljLog("responseIccCardStatus: from HIDL: " + iccCardStatus);
        return iccCardStatus;
                ret = iccCardStatus;
                sendMessageResponse(rr.mResult, ret);
            }
            mRil.processResponseDone(rr, responseInfo, ret);
        }
    }

    private void responseInts(RadioResponseInfo responseInfo, int ...var) {
        RILRequest rr = mRil.processResponse(responseInfo);

        if (rr != null) {
            Object ret = null;
            if (responseInfo.error == RadioError.NONE) {
                int[] response = new int[var.length];
                for (int i = 0; i < var.length; i++) {
                    response[i] = var[i];
                }
                ret = response;
                sendMessageResponse(rr.mResult, ret);
            }
            mRil.processResponseDone(rr, responseInfo, ret);
        }
    }

    private void responseCurrentCalls(RadioResponseInfo responseInfo,
                                      ArrayList<android.hardware.radio.V1_0.Call> calls) {
        RILRequest rr = mRil.processResponse(responseInfo);

        if (rr != null) {
            Object ret = null;
            if (responseInfo.error == RadioError.NONE) {
                int num;
                ArrayList<DriverCall> dcCalls;
                DriverCall dc;

                num = calls.size();
                dcCalls = new ArrayList<DriverCall>(num);

                for (int i = 0; i < num; i++) {
                    dc = new DriverCall();
                    // TODO: change name of function stateFromCLCC() in DriverCall.java to name
                    // clarifying what is CLCC
                    dc.state = DriverCall.stateFromCLCC((int) (calls.get(i).state));
                    dc.index = calls.get(i).index;
                    dc.TOA = calls.get(i).toa;
                    dc.isMpty = calls.get(i).isMpty;
                    dc.isMT = calls.get(i).isMT;
                    dc.als = calls.get(i).als;
                    dc.isVoice = calls.get(i).isVoice;
                    dc.isVoicePrivacy = calls.get(i).isVoicePrivacy;
                    dc.number = calls.get(i).number;
                    dc.numberPresentation =
                            DriverCall.presentationFromCLIP(
                                    (int) (calls.get(i).numberPresentation));
                    dc.name = calls.get(i).name;
                    dc.namePresentation =
                            DriverCall.presentationFromCLIP((int) (calls.get(i).namePresentation));
                    if (calls.get(i).uusInfo.size() == 1) {
                        dc.uusInfo = new UUSInfo();
                        dc.uusInfo.setType(calls.get(i).uusInfo.get(0).uusType);
                        dc.uusInfo.setDcs(calls.get(i).uusInfo.get(0).uusDcs);
                        if (calls.get(i).uusInfo.get(0).uusData != null) {
                            byte[] userData = calls.get(i).uusInfo.get(0).uusData.getBytes();
                            dc.uusInfo.setUserData(userData);
                        } else {
                            mRil.riljLog("responseCurrentCalls: uusInfo data is null");
                        }

                        mRil.riljLogv(String.format("Incoming UUS : type=%d, dcs=%d, length=%d",
                                dc.uusInfo.getType(), dc.uusInfo.getDcs(),
                                dc.uusInfo.getUserData().length));
                        mRil.riljLogv("Incoming UUS : data (hex): "
                                + IccUtils.bytesToHexString(dc.uusInfo.getUserData()));
                    } else {
                        mRil.riljLogv("Incoming UUS : NOT present!");
                    }

                    // Make sure there's a leading + on addresses with a TOA of 145
                    dc.number = PhoneNumberUtils.stringFromStringAndTOA(dc.number, dc.TOA);

                    dcCalls.add(dc);

                    if (dc.isVoicePrivacy) {
                        mRil.mVoicePrivacyOnRegistrants.notifyRegistrants();
                        mRil.riljLog("InCall VoicePrivacy is enabled");
                    } else {
                        mRil.mVoicePrivacyOffRegistrants.notifyRegistrants();
                        mRil.riljLog("InCall VoicePrivacy is disabled");
                    }
                }

                Collections.sort(dcCalls);

                if ((num == 0) && mRil.mTestingEmergencyCall.getAndSet(false)) {
                    if (mRil.mEmergencyCallbackModeRegistrant != null) {
                        mRil.riljLog("responseCurrentCalls: call ended, testing emergency call,"
                                + " notify ECM Registrants");
                        mRil.mEmergencyCallbackModeRegistrant.notifyRegistrant();
                    }
                }

                ret = dcCalls;
                sendMessageResponse(rr.mResult, ret);
            }
            mRil.processResponseDone(rr, responseInfo, ret);
        }
    }

    private void responseVoid(RadioResponseInfo responseInfo) {
        RILRequest rr = mRil.processResponse(responseInfo);

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

}