10825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville/*
20825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Copyright (C) 2006 The Android Open Source Project
30825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville *
40825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Licensed under the Apache License, Version 2.0 (the "License");
50825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * you may not use this file except in compliance with the License.
60825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * You may obtain a copy of the License at
70825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville *
80825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville *      http://www.apache.org/licenses/LICENSE-2.0
90825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville *
100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Unless required by applicable law or agreed to in writing, software
110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * distributed under the License is distributed on an "AS IS" BASIS,
120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * See the License for the specific language governing permissions and
140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * limitations under the License.
150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */
160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
170825495a331bb44df395a0cdb79fab85e68db5d5Wink Savillepackage com.android.internal.telephony;
180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
19c9c763417554f30c4fa51d3285a9a19893ecd399Amit Mahajanimport static com.android.internal.telephony.RILConstants.*;
20c9c763417554f30c4fa51d3285a9a19893ecd399Amit Mahajanimport static com.android.internal.util.Preconditions.checkNotNull;
21c9c763417554f30c4fa51d3285a9a19893ecd399Amit Mahajan
220825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.content.Context;
235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padaweimport android.hardware.radio.V1_0.Carrier;
245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padaweimport android.hardware.radio.V1_0.CarrierRestrictions;
255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padaweimport android.hardware.radio.V1_0.CdmaBroadcastSmsConfigInfo;
265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padaweimport android.hardware.radio.V1_0.CdmaSmsAck;
275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padaweimport android.hardware.radio.V1_0.CdmaSmsMessage;
285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padaweimport android.hardware.radio.V1_0.CdmaSmsWriteArgs;
2999607db1bc0f46e73f39d5379c590b8bcb4bf947Jack Yuimport android.hardware.radio.V1_0.CellInfoCdma;
3099607db1bc0f46e73f39d5379c590b8bcb4bf947Jack Yuimport android.hardware.radio.V1_0.CellInfoGsm;
3199607db1bc0f46e73f39d5379c590b8bcb4bf947Jack Yuimport android.hardware.radio.V1_0.CellInfoLte;
3299607db1bc0f46e73f39d5379c590b8bcb4bf947Jack Yuimport android.hardware.radio.V1_0.CellInfoType;
3399607db1bc0f46e73f39d5379c590b8bcb4bf947Jack Yuimport android.hardware.radio.V1_0.CellInfoWcdma;
348e9d1e601dce62cd0328701d7054e03db24727c7Jack Yuimport android.hardware.radio.V1_0.DataProfileInfo;
35d60a877c59822d2157b8af86f2c3834b04011051Sanket Padaweimport android.hardware.radio.V1_0.Dial;
365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padaweimport android.hardware.radio.V1_0.GsmBroadcastSmsConfigInfo;
375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padaweimport android.hardware.radio.V1_0.GsmSmsMessage;
3899607db1bc0f46e73f39d5379c590b8bcb4bf947Jack Yuimport android.hardware.radio.V1_0.HardwareConfigModem;
39d60a877c59822d2157b8af86f2c3834b04011051Sanket Padaweimport android.hardware.radio.V1_0.IRadio;
405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padaweimport android.hardware.radio.V1_0.IccIo;
415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padaweimport android.hardware.radio.V1_0.ImsSmsMessage;
4299607db1bc0f46e73f39d5379c590b8bcb4bf947Jack Yuimport android.hardware.radio.V1_0.LceDataInfo;
438e9d1e601dce62cd0328701d7054e03db24727c7Jack Yuimport android.hardware.radio.V1_0.MvnoType;
445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padaweimport android.hardware.radio.V1_0.NvWriteItem;
45d60a877c59822d2157b8af86f2c3834b04011051Sanket Padaweimport android.hardware.radio.V1_0.RadioError;
46d60a877c59822d2157b8af86f2c3834b04011051Sanket Padaweimport android.hardware.radio.V1_0.RadioIndicationType;
47d60a877c59822d2157b8af86f2c3834b04011051Sanket Padaweimport android.hardware.radio.V1_0.RadioResponseInfo;
48d60a877c59822d2157b8af86f2c3834b04011051Sanket Padaweimport android.hardware.radio.V1_0.RadioResponseType;
49e16769120c06f1ea7e4e22d85b39d7c33c925697Jayachandran Cimport android.hardware.radio.V1_0.ResetNvType;
505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padaweimport android.hardware.radio.V1_0.SelectUiccSub;
5199607db1bc0f46e73f39d5379c590b8bcb4bf947Jack Yuimport android.hardware.radio.V1_0.SetupDataCallResult;
525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padaweimport android.hardware.radio.V1_0.SimApdu;
535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padaweimport android.hardware.radio.V1_0.SmsWriteArgs;
54d60a877c59822d2157b8af86f2c3834b04011051Sanket Padaweimport android.hardware.radio.V1_0.UusInfo;
558e9d1e601dce62cd0328701d7054e03db24727c7Jack Yuimport android.hardware.radio.deprecated.V1_0.IOemHook;
560825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.net.ConnectivityManager;
570825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.AsyncResult;
580825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.Handler;
590012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajanimport android.os.HwBinder;
600825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.Message;
610825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.Parcel;
620825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.PowerManager;
630825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.PowerManager.WakeLock;
640012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajanimport android.os.RemoteException;
6527eef341b171f925ef43dd088cc559280fd7d2b9Prerepa Viswanadhamimport android.os.SystemClock;
66f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport android.os.SystemProperties;
671bb5864a6f2047b41da9ba6551ee4acfec4d7dd1Naveen Kallaimport android.os.WorkSource;
6840659286ac42ec77bbe7893830bd50c06f393ee8Meng Wangimport android.service.carrier.CarrierIdentifier;
695fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Savilleimport android.telephony.CellInfo;
701bb5864a6f2047b41da9ba6551ee4acfec4d7dd1Naveen Kallaimport android.telephony.ClientRequestStats;
71f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport android.telephony.ModemActivityInfo;
720825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.telephony.NeighboringCellInfo;
730825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.telephony.PhoneNumberUtils;
743ad0c75dac907e8490b78d6fd8c0278d28b96f84Robert Greenwaltimport android.telephony.RadioAccessFamily;
75fa4fd4721082689c4b276f67b845e7be249cb8daWink Savilleimport android.telephony.Rlog;
765b81adc82a53b3064f4baa3acfeabef31586588aUma Maheswari Ramalingamimport android.telephony.SignalStrength;
770825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.telephony.SmsManager;
78d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padaweimport android.telephony.TelephonyHistogram;
790825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.text.TextUtils;
807cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwaltimport android.util.SparseArray;
810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
82f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport com.android.internal.telephony.cdma.CdmaInformationRecords;
83f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport com.android.internal.telephony.cdma.CdmaSmsBroadcastConfigInfo;
84f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport com.android.internal.telephony.dataconnection.DataCallResponse;
85f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport com.android.internal.telephony.dataconnection.DataProfile;
860825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.gsm.SmsBroadcastConfigInfo;
87f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport com.android.internal.telephony.metrics.TelephonyMetrics;
889460a22f3c1ae70dde80e34557d7011be113b39aTamas Berghammerimport com.android.internal.telephony.nano.TelephonyProto.SmsSession;
89d720945f2be5ea5fe0faf67e67d9ea0e184eba67Alex Yakavenkaimport com.android.internal.telephony.uicc.IccUtils;
900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
910825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.io.ByteArrayInputStream;
920825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.io.DataInputStream;
930825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.io.FileDescriptor;
940825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.io.IOException;
950825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.io.PrintWriter;
960825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.util.ArrayList;
9727eef341b171f925ef43dd088cc559280fd7d2b9Prerepa Viswanadhamimport java.util.Arrays;
98d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padaweimport java.util.List;
99f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport java.util.Random;
1000825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.util.concurrent.atomic.AtomicBoolean;
1017cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwaltimport java.util.concurrent.atomic.AtomicInteger;
1020012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajanimport java.util.concurrent.atomic.AtomicLong;
1030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville/**
1050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * {@hide}
1060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */
10732c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold
1080825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleclass RILRequest {
109cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    static final String LOG_TAG = "RilRequest";
1100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    //***** Class Variables
1127cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt    static Random sRandom = new Random();
1137cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt    static AtomicInteger sNextSerial = new AtomicInteger(0);
1140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private static Object sPoolSync = new Object();
1150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private static RILRequest sPool = null;
1160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private static int sPoolSize = 0;
1170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private static final int MAX_POOL_SIZE = 4;
1180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    //***** Instance Variables
1200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    int mSerial;
1210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    int mRequest;
1220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    Message mResult;
1230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    RILRequest mNext;
12432c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold    int mWakeLockType;
1258e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindran    WorkSource mWorkSource;
1261b90799284785b26b0853ae367cac139ba37e18bNaveen Kalla    String mClientId;
127d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe    // time in ms when RIL request was made
128d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe    long mStartTimeMs;
1290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
1310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Retrieves a new RILRequest instance from the pool.
1320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
1330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @param request RIL_REQUEST_*
1340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @param result sent when operation completes
1350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @return a RILRequest instance from the pool.
1360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
1378e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindran    private static RILRequest obtain(int request, Message result) {
1380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = null;
1390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        synchronized(sPoolSync) {
1410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (sPool != null) {
1420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                rr = sPool;
1430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                sPool = rr.mNext;
1440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                rr.mNext = null;
1450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                sPoolSize--;
1460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
1470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
1480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (rr == null) {
1500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            rr = new RILRequest();
1510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
1520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1537cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt        rr.mSerial = sNextSerial.getAndIncrement();
1547cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt
1550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mRequest = request;
1560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mResult = result;
1570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
15832c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold        rr.mWakeLockType = RIL.INVALID_WAKELOCK;
1598e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindran        rr.mWorkSource = null;
160d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe        rr.mStartTimeMs = SystemClock.elapsedRealtime();
1610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (result != null && result.getTarget() == null) {
1620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            throw new NullPointerException("Message target must not be null");
1630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
1640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return rr;
1660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1681b90799284785b26b0853ae367cac139ba37e18bNaveen Kalla
1691b90799284785b26b0853ae367cac139ba37e18bNaveen Kalla    /**
1701b90799284785b26b0853ae367cac139ba37e18bNaveen Kalla     * Retrieves a new RILRequest instance from the pool and sets the clientId
1711b90799284785b26b0853ae367cac139ba37e18bNaveen Kalla     *
1721b90799284785b26b0853ae367cac139ba37e18bNaveen Kalla     * @param request RIL_REQUEST_*
1731b90799284785b26b0853ae367cac139ba37e18bNaveen Kalla     * @param result sent when operation completes
1748e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindran     * @param workSource WorkSource to track the client
1751b90799284785b26b0853ae367cac139ba37e18bNaveen Kalla     * @return a RILRequest instance from the pool.
1761b90799284785b26b0853ae367cac139ba37e18bNaveen Kalla     */
1778e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindran    static RILRequest obtain(int request, Message result, WorkSource workSource) {
1781b90799284785b26b0853ae367cac139ba37e18bNaveen Kalla        RILRequest rr = null;
1791b90799284785b26b0853ae367cac139ba37e18bNaveen Kalla
1801b90799284785b26b0853ae367cac139ba37e18bNaveen Kalla        rr = obtain(request, result);
1818e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindran        if(workSource != null) {
1828e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindran            rr.mWorkSource = workSource;
1838e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindran            rr.mClientId = String.valueOf(workSource.get(0)) + ":" + workSource.getName(0);
1848e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindran        } else {
1858e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindran            Rlog.e(LOG_TAG, "null workSource " + request);
1861b90799284785b26b0853ae367cac139ba37e18bNaveen Kalla        }
1871b90799284785b26b0853ae367cac139ba37e18bNaveen Kalla
1881b90799284785b26b0853ae367cac139ba37e18bNaveen Kalla        return rr;
1891b90799284785b26b0853ae367cac139ba37e18bNaveen Kalla    }
1901b90799284785b26b0853ae367cac139ba37e18bNaveen Kalla
1910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
1920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Returns a RILRequest instance to the pool.
1930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
1940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Note: This should only be called once per use.
1950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
1960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    void release() {
1970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        synchronized (sPoolSync) {
1980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (sPoolSize < MAX_POOL_SIZE) {
19922d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville                mNext = sPool;
2000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                sPool = this;
2010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                sPoolSize++;
2020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                mResult = null;
20332c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                if(mWakeLockType != RIL.INVALID_WAKELOCK) {
20432c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                    //This is OK for some wakelock types and not others
20532c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                    if(mWakeLockType == RIL.FOR_WAKELOCK) {
20632c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                        Rlog.e(LOG_TAG, "RILRequest releasing with held wake lock: "
20732c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                                + serialString());
20832c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                    }
20932c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                }
2100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
2110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
2120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
2130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private RILRequest() {
2150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
2160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    static void
2180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    resetSerial() {
2197cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt        // use a random so that on recovery we probably don't mix old requests
2207cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt        // with new.
2217cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt        sNextSerial.set(sRandom.nextInt());
2220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
2230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    String
2250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    serialString() {
2260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //Cheesy way to do %04d
2270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        StringBuilder sb = new StringBuilder(8);
2280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String sn;
2290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2307cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt        long adjustedSerial = (((long)mSerial) - Integer.MIN_VALUE)%10000;
2317cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt
2327cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt        sn = Long.toString(adjustedSerial);
2330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //sb.append("J[");
2350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        sb.append('[');
2360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        for (int i = 0, s = sn.length() ; i < 4 - s; i++) {
2370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            sb.append('0');
2380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
2390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        sb.append(sn);
2410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        sb.append(']');
2420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return sb.toString();
2430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
2440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    void
2460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    onError(int error, Object ret) {
2470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        CommandException ex;
2480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        ex = CommandException.fromRilErrno(error);
2500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
251fa4fd4721082689c4b276f67b845e7be249cb8daWink Saville        if (RIL.RILJ_LOGD) Rlog.d(LOG_TAG, serialString() + "< "
2520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            + RIL.requestToString(mRequest)
2533522c54a64f577f2b657a775dae9b4eb2d8003d5Wink Saville            + " error: " + ex + " ret=" + RIL.retToString(mRequest, ret));
2540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (mResult != null) {
2560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            AsyncResult.forMessage(mResult, ret, ex);
2570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            mResult.sendToTarget();
2580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
2590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
2600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville}
2610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville/**
2640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * RIL implementation of the CommandsInterface.
2650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville *
2660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * {@hide}
2670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */
2680825495a331bb44df395a0cdb79fab85e68db5d5Wink Savillepublic final class RIL extends BaseCommands implements CommandsInterface {
269fa4fd4721082689c4b276f67b845e7be249cb8daWink Saville    static final String RILJ_LOG_TAG = "RILJ";
270a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe    // Have a separate wakelock instance for Ack
271a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe    static final String RILJ_ACK_WAKELOCK_NAME = "RILJ_ACK_WL";
2720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    static final boolean RILJ_LOGD = true;
273cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    static final boolean RILJ_LOGV = false; // STOPSHIP if true
274d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe    static final int RIL_HISTOGRAM_BUCKET_COUNT = 5;
2750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
2770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Wake lock timeout should be longer than the longest timeout in
2780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * the vendor ril.
2790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
2803464cbb60f1bf1127fd9e10efb05925f6f911b37Sanket Padawe    private static final int DEFAULT_WAKE_LOCK_TIMEOUT_MS = 60000;
2810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
282a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe    // Wake lock default timeout associated with ack
2833464cbb60f1bf1127fd9e10efb05925f6f911b37Sanket Padawe    private static final int DEFAULT_ACK_WAKE_LOCK_TIMEOUT_MS = 200;
284a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe
28532c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold    private static final int DEFAULT_BLOCKING_MESSAGE_RESPONSE_TIMEOUT_MS = 2000;
28632c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold
287a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe    // Variables used to differentiate ack messages from request while calling clearWakeLock()
28832c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold    public static final int INVALID_WAKELOCK = -1;
28932c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold    public static final int FOR_WAKELOCK = 0;
29032c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold    public static final int FOR_ACK_WAKELOCK = 1;
2911b90799284785b26b0853ae367cac139ba37e18bNaveen Kalla    private final ClientWakelockTracker mClientWakelockTracker = new ClientWakelockTracker();
292a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe
2930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    //***** Instance Variables
2940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
295a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe    final WakeLock mWakeLock;           // Wake lock associated with request/response
296a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe    final WakeLock mAckWakeLock;        // Wake lock associated with ack sent
297a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe    final int mWakeLockTimeout;         // Timeout associated with request/response
298a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe    final int mAckWakeLockTimeout;      // Timeout associated with ack sent
2997cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt    // The number of wakelock requests currently active.  Don't release the lock
3007cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt    // until dec'd to 0
3017cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt    int mWakeLockCount;
3027cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt
303a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe    // Variables used to identify releasing of WL on wakelock timeouts
304a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe    volatile int mWlSequenceNum = 0;
305a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe    volatile int mAckWlSequenceNum = 0;
306a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe
3077cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt    SparseArray<RILRequest> mRequestList = new SparseArray<RILRequest>();
308d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe    static SparseArray<TelephonyHistogram> mRilTimeHistograms = new
309d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe            SparseArray<TelephonyHistogram>();
3100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
311d39109502855e8d81e45e21161d8bf0cfacf42e0Sanket Padawe    Object[]     mLastNITZTimeInfo;
3120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // When we are testing emergency calls
3140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    AtomicBoolean mTestingEmergencyCall = new AtomicBoolean(false);
3150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    final Integer mPhoneId;
317a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville
3188e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindran    /* default work source which will blame phone process */
3198e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindran    private WorkSource mRILDefaultWorkSource;
3205054dfa7fd9b0520d30a102ed5a2107af11590c8Pavel Zhamaitsiak
3218e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindran    /* Worksource containing all applications causing wakelock to be held */
3228e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindran    private WorkSource mActiveWakelockWorkSource;
3230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3243fe0578ea48570cd5d8c8dfd8b53b8984915330fJack Yu    /** Telephony metrics instance for logging metrics event */
325f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu    private TelephonyMetrics mMetrics = TelephonyMetrics.getInstance();
3265054dfa7fd9b0520d30a102ed5a2107af11590c8Pavel Zhamaitsiak
3270d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan    boolean mIsMobileNetworkSupported;
3280d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan    RadioResponse mRadioResponse;
3290d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan    RadioIndication mRadioIndication;
3300d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan    volatile IRadio mRadioProxy = null;
3310d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan    OemHookResponse mOemHookResponse;
3320d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan    OemHookIndication mOemHookIndication;
3330d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan    volatile IOemHook mOemHookProxy = null;
3340d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan    final AtomicLong mRadioProxyCookie = new AtomicLong(0);
3350d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan    final RadioProxyDeathRecipient mRadioProxyDeathRecipient;
3360d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan    final RilHandler mRilHandler;
3370d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan
3388e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindran    //***** Events
3390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    static final int EVENT_WAKE_LOCK_TIMEOUT    = 2;
340a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe    static final int EVENT_ACK_WAKE_LOCK_TIMEOUT    = 4;
34132c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold    static final int EVENT_BLOCKING_RESPONSE_TIMEOUT = 5;
3420012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan    static final int EVENT_RADIO_PROXY_DEAD     = 6;
3430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    //***** Constants
3450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
346606cb716e62998ea9813deeb858c45dd4ac5470eAmit Mahajan    static final String[] HIDL_SERVICE_NAME = {"slot1", "slot2", "slot3"};
3470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3480d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan    static final int IRADIO_GET_SERVICE_DELAY_MILLIS = 4 * 1000;
3490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
350d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe    public static List<TelephonyHistogram> getTelephonyRILTimingHistograms() {
351d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe        List<TelephonyHistogram> list;
352d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe        synchronized (mRilTimeHistograms) {
353d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe            list = new ArrayList<>(mRilTimeHistograms.size());
354d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe            for (int i = 0; i < mRilTimeHistograms.size(); i++) {
355d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe                TelephonyHistogram entry = new TelephonyHistogram(mRilTimeHistograms.valueAt(i));
356d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe                list.add(entry);
357d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe            }
358d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe        }
359d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe        return list;
360d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe    }
361d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe
362d71af3fb18a6bf51e6aa346849c968fad511d610Amit Mahajan    class RilHandler extends Handler {
3630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //***** Handler implementation
3640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        @Override public void
3650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        handleMessage(Message msg) {
366d71af3fb18a6bf51e6aa346849c968fad511d610Amit Mahajan            RILRequest rr;
3670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            switch (msg.what) {
3690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                case EVENT_WAKE_LOCK_TIMEOUT:
3700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    // Haven't heard back from the last request.  Assume we're
3710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    // not getting a response and  release the wake lock.
3720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3737cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt                    // The timer of WAKE_LOCK_TIMEOUT is reset with each
3747cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt                    // new send request. So when WAKE_LOCK_TIMEOUT occurs
3757cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt                    // all requests in mRequestList already waited at
3763464cbb60f1bf1127fd9e10efb05925f6f911b37Sanket Padawe                    // least DEFAULT_WAKE_LOCK_TIMEOUT_MS but no response.
3777cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt                    //
3787cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt                    // Note: Keep mRequestList so that delayed response
3797cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt                    // can still be handled when response finally comes.
3807cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt
3817cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt                    synchronized (mRequestList) {
382a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe                        if (msg.arg1 == mWlSequenceNum && clearWakeLock(FOR_WAKELOCK)) {
3837cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt                            if (RILJ_LOGD) {
3847cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt                                int count = mRequestList.size();
3856613a961473a72c218ec505e384dad6b19049aa0Robert Greenwalt                                Rlog.d(RILJ_LOG_TAG, "WAKE_LOCK_TIMEOUT " +
3867cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt                                        " mRequestList=" + count);
3877cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt                                for (int i = 0; i < count; i++) {
3887cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt                                    rr = mRequestList.valueAt(i);
3896613a961473a72c218ec505e384dad6b19049aa0Robert Greenwalt                                    Rlog.d(RILJ_LOG_TAG, i + ": [" + rr.mSerial + "] "
3907cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt                                            + requestToString(rr.mRequest));
3917cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt                                }
3920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            }
3930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        }
3940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    }
3950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    break;
396a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe
397a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe                case EVENT_ACK_WAKE_LOCK_TIMEOUT:
398a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe                    if (msg.arg1 == mAckWlSequenceNum && clearWakeLock(FOR_ACK_WAKELOCK)) {
39934dffd7066bcf421829e249f56288bc33735eaf4Sanket Padawe                        if (RILJ_LOGV) {
400a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe                            Rlog.d(RILJ_LOG_TAG, "ACK_WAKE_LOCK_TIMEOUT");
401a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe                        }
402a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe                    }
403a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe                    break;
40432c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold
40532c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                case EVENT_BLOCKING_RESPONSE_TIMEOUT:
40632c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                    int serial = msg.arg1;
40732c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                    rr = findAndRemoveRequestFromList(serial);
40832c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                    // If the request has already been processed, do nothing
40932c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                    if(rr == null) {
41032c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                        break;
41132c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                    }
41232c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold
41332c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                    //build a response if expected
41432c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                    if (rr.mResult != null) {
41532c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                        Object timeoutResponse = getResponseForTimedOutRILRequest(rr);
41632c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                        AsyncResult.forMessage( rr.mResult, timeoutResponse, null);
41732c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                        rr.mResult.sendToTarget();
4185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        mMetrics.writeOnRilTimeoutResponse(mPhoneId, rr.mSerial, rr.mRequest);
41932c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                    }
42032c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold
42132c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                    decrementWakeLock(rr);
42232c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                    rr.release();
42332c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                    break;
424d71af3fb18a6bf51e6aa346849c968fad511d610Amit Mahajan
425d71af3fb18a6bf51e6aa346849c968fad511d610Amit Mahajan                case EVENT_RADIO_PROXY_DEAD:
426d71af3fb18a6bf51e6aa346849c968fad511d610Amit Mahajan                    riljLog("handleMessage: EVENT_RADIO_PROXY_DEAD cookie = " + msg.obj +
427d71af3fb18a6bf51e6aa346849c968fad511d610Amit Mahajan                            " mRadioProxyCookie = " + mRadioProxyCookie.get());
428d71af3fb18a6bf51e6aa346849c968fad511d610Amit Mahajan                    if ((long) msg.obj == mRadioProxyCookie.get()) {
429d71af3fb18a6bf51e6aa346849c968fad511d610Amit Mahajan                        resetProxyAndRequestList();
430d71af3fb18a6bf51e6aa346849c968fad511d610Amit Mahajan
431d71af3fb18a6bf51e6aa346849c968fad511d610Amit Mahajan                        // todo: rild should be back up since message was sent with a delay. this is
432d71af3fb18a6bf51e6aa346849c968fad511d610Amit Mahajan                        // a hack.
433d71af3fb18a6bf51e6aa346849c968fad511d610Amit Mahajan                        getRadioProxy(null);
434b1438f640c98e884f47109e9c9fc4a52fb0aa4efAmit Mahajan                        getOemHookProxy(null);
435d71af3fb18a6bf51e6aa346849c968fad511d610Amit Mahajan                    }
436d71af3fb18a6bf51e6aa346849c968fad511d610Amit Mahajan                    break;
4370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
4380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
4390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
4400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
44232c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold     * In order to prevent calls to Telephony from waiting indefinitely
44332c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold     * low-latency blocking calls will eventually time out. In the event of
44432c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold     * a timeout, this function generates a response that is returned to the
44532c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold     * higher layers to unblock the call. This is in lieu of a meaningful
44632c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold     * response.
44732c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold     * @param rr The RIL Request that has timed out.
44832c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold     * @return A default object, such as the one generated by a normal response
44932c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold     * that is returned to the higher layers.
45032c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold     **/
45132c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold    private static Object getResponseForTimedOutRILRequest(RILRequest rr) {
45232c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold        if (rr == null ) return null;
45332c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold
45432c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold        Object timeoutResponse = null;
45532c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold        switch(rr.mRequest) {
45632c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold            case RIL_REQUEST_GET_ACTIVITY_INFO:
45732c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                timeoutResponse = new ModemActivityInfo(
45832c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                        0, 0, 0, new int [ModemActivityInfo.TX_POWER_LEVELS], 0, 0);
45932c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                break;
46032c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold        };
46132c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold        return timeoutResponse;
46232c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold    }
46332c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold
4640012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan    final class RadioProxyDeathRecipient implements HwBinder.DeathRecipient {
4650012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan        @Override
4660012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan        public void serviceDied(long cookie) {
4670012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan            // Deal with service going away
4680012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan            riljLog("serviceDied");
4690012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan            // todo: temp hack to send delayed message so that rild is back up by then
4700012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan            //mRilHandler.sendMessage(mRilHandler.obtainMessage(EVENT_RADIO_PROXY_DEAD, cookie));
4710012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan            mRilHandler.sendMessageDelayed(
4720012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan                    mRilHandler.obtainMessage(EVENT_RADIO_PROXY_DEAD, cookie),
4730012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan                    IRADIO_GET_SERVICE_DELAY_MILLIS);
4740012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan        }
475a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville    }
476a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville
4770012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan    private void resetProxyAndRequestList() {
4780012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan        mRadioProxy = null;
479f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan        mOemHookProxy = null;
48075a34bca6e996289e3ad200ab545aa154d2fba58Amit Mahajan
481c9c763417554f30c4fa51d3285a9a19893ecd399Amit Mahajan        // increment the cookie so that death notification can be ignored
482c9c763417554f30c4fa51d3285a9a19893ecd399Amit Mahajan        mRadioProxyCookie.incrementAndGet();
483c9c763417554f30c4fa51d3285a9a19893ecd399Amit Mahajan
48475a34bca6e996289e3ad200ab545aa154d2fba58Amit Mahajan        setRadioState(RadioState.RADIO_UNAVAILABLE);
48575a34bca6e996289e3ad200ab545aa154d2fba58Amit Mahajan
4860012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan        RILRequest.resetSerial();
4870012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan        // Clear request list on close
4880012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan        clearRequestList(RADIO_NOT_AVAILABLE, false);
489c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan
4900012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan        // todo: need to get service right away so setResponseFunctions() can be called for
4910012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan        // unsolicited indications. getService() is not a blocking call, so it doesn't help to call
4920012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan        // it here. Current hack is to call getService() on death notification after a delay.
4930012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan    }
494c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan
4955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    private IRadio getRadioProxy(Message result) {
4960ef065b1f452063d6f5ad717d8d90f059ffcd6ecAmit Mahajan        if (!mIsMobileNetworkSupported) {
497b1438f640c98e884f47109e9c9fc4a52fb0aa4efAmit Mahajan            if (RILJ_LOGV) riljLog("getRadioProxy: Not calling getService(): wifi-only");
498447f1b35d518ab3049c22956b66fa76019e0bba2fionaxu            if (result != null) {
499447f1b35d518ab3049c22956b66fa76019e0bba2fionaxu                AsyncResult.forMessage(result, null,
500447f1b35d518ab3049c22956b66fa76019e0bba2fionaxu                        CommandException.fromRilErrno(RADIO_NOT_AVAILABLE));
501447f1b35d518ab3049c22956b66fa76019e0bba2fionaxu                result.sendToTarget();
502447f1b35d518ab3049c22956b66fa76019e0bba2fionaxu            }
5030ef065b1f452063d6f5ad717d8d90f059ffcd6ecAmit Mahajan            return null;
5040ef065b1f452063d6f5ad717d8d90f059ffcd6ecAmit Mahajan        }
5050ef065b1f452063d6f5ad717d8d90f059ffcd6ecAmit Mahajan
5060012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan        if (mRadioProxy != null) {
5070012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan            return mRadioProxy;
5080012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan        }
5090d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan
510c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan        try {
511606cb716e62998ea9813deeb858c45dd4ac5470eAmit Mahajan            mRadioProxy = IRadio.getService(HIDL_SERVICE_NAME[mPhoneId == null ? 0 : mPhoneId]);
5120012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan            if (mRadioProxy != null) {
5130012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan                mRadioProxy.linkToDeath(mRadioProxyDeathRecipient,
5140012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan                        mRadioProxyCookie.incrementAndGet());
5150012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan                mRadioProxy.setResponseFunctions(mRadioResponse, mRadioIndication);
516c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan            } else {
517f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan                riljLoge("getRadioProxy: mRadioProxy == null");
518c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan            }
5190012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan        } catch (RemoteException | RuntimeException e) {
5200012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan            mRadioProxy = null;
5210d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan            riljLoge("RadioProxy getService/setResponseFunctions: " + e);
5220d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan        }
5235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe
5240d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan        if (mRadioProxy == null) {
5255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (result != null) {
5265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                AsyncResult.forMessage(result, null,
5275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        CommandException.fromRilErrno(RADIO_NOT_AVAILABLE));
5285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                result.sendToTarget();
5295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
5305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe
5315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            // if service is not up, treat it like death notification to try to get service again
5325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            mRilHandler.sendMessageDelayed(
533c9c763417554f30c4fa51d3285a9a19893ecd399Amit Mahajan                    mRilHandler.obtainMessage(EVENT_RADIO_PROXY_DEAD,
534c9c763417554f30c4fa51d3285a9a19893ecd399Amit Mahajan                            mRadioProxyCookie.incrementAndGet()),
5355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    IRADIO_GET_SERVICE_DELAY_MILLIS);
536c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan        }
5370d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan
5380012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan        return mRadioProxy;
5390012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan    }
5400012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan
541f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan    private IOemHook getOemHookProxy(Message result) {
542b1438f640c98e884f47109e9c9fc4a52fb0aa4efAmit Mahajan        if (!mIsMobileNetworkSupported) {
543b1438f640c98e884f47109e9c9fc4a52fb0aa4efAmit Mahajan            if (RILJ_LOGV) riljLog("getOemHookProxy: Not calling getService(): wifi-only");
544447f1b35d518ab3049c22956b66fa76019e0bba2fionaxu            if (result != null) {
545447f1b35d518ab3049c22956b66fa76019e0bba2fionaxu                AsyncResult.forMessage(result, null,
546447f1b35d518ab3049c22956b66fa76019e0bba2fionaxu                        CommandException.fromRilErrno(RADIO_NOT_AVAILABLE));
547447f1b35d518ab3049c22956b66fa76019e0bba2fionaxu                result.sendToTarget();
548447f1b35d518ab3049c22956b66fa76019e0bba2fionaxu            }
549b1438f640c98e884f47109e9c9fc4a52fb0aa4efAmit Mahajan            return null;
550b1438f640c98e884f47109e9c9fc4a52fb0aa4efAmit Mahajan        }
551b1438f640c98e884f47109e9c9fc4a52fb0aa4efAmit Mahajan
552f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan        if (mOemHookProxy != null) {
553f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan            return mOemHookProxy;
554f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan        }
5550d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan
556f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan        try {
557f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan            mOemHookProxy = IOemHook.getService(
558606cb716e62998ea9813deeb858c45dd4ac5470eAmit Mahajan                    HIDL_SERVICE_NAME[mPhoneId == null ? 0 : mPhoneId]);
559f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan            if (mOemHookProxy != null) {
560f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan                // not calling linkToDeath() as ril service runs in the same process and death
561f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan                // notification for that should be sufficient
562f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan                mOemHookProxy.setResponseFunctions(mOemHookResponse, mOemHookIndication);
563f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan            } else {
564f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan                riljLoge("getOemHookProxy: mOemHookProxy == null");
565f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan            }
566f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan        } catch (RemoteException | RuntimeException e) {
567f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan            mOemHookProxy = null;
5680d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan            riljLoge("OemHookProxy getService/setResponseFunctions: " + e);
5690d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan        }
570f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan
5710d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan        if (mOemHookProxy == null) {
572f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan            if (result != null) {
573f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan                AsyncResult.forMessage(result, null,
574f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan                        CommandException.fromRilErrno(RADIO_NOT_AVAILABLE));
575f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan                result.sendToTarget();
576f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan            }
577f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan
578f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan            // if service is not up, treat it like death notification to try to get service again
579f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan            mRilHandler.sendMessageDelayed(
580c9c763417554f30c4fa51d3285a9a19893ecd399Amit Mahajan                    mRilHandler.obtainMessage(EVENT_RADIO_PROXY_DEAD,
581c9c763417554f30c4fa51d3285a9a19893ecd399Amit Mahajan                            mRadioProxyCookie.incrementAndGet()),
582f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan                    IRADIO_GET_SERVICE_DELAY_MILLIS);
583f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan        }
5840d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan
585f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan        return mOemHookProxy;
586f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan    }
587f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan
5880012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan    //***** Constructors
5890012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan
5900012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan    public RIL(Context context, int preferredNetworkType, int cdmaSubscription) {
5910012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan        this(context, preferredNetworkType, cdmaSubscription, null);
592c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan    }
593c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan
594a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville    public RIL(Context context, int preferredNetworkType,
595a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville            int cdmaSubscription, Integer instanceId) {
5960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        super(context);
5970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) {
598d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe            riljLog("RIL: init preferredNetworkType=" + preferredNetworkType
599d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe                    + " cdmaSubscription=" + cdmaSubscription + ")");
6000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
6017cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt
602a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        mContext = context;
6030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mCdmaSubscription  = cdmaSubscription;
6040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mPreferredNetworkType = preferredNetworkType;
6050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mPhoneType = RILConstants.NO_PHONE;
6065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        mPhoneId = instanceId;
6070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6080ef065b1f452063d6f5ad717d8d90f059ffcd6ecAmit Mahajan        ConnectivityManager cm = (ConnectivityManager)context.getSystemService(
6090ef065b1f452063d6f5ad717d8d90f059ffcd6ecAmit Mahajan                Context.CONNECTIVITY_SERVICE);
6100ef065b1f452063d6f5ad717d8d90f059ffcd6ecAmit Mahajan        mIsMobileNetworkSupported = cm.isNetworkSupported(ConnectivityManager.TYPE_MOBILE);
6110ef065b1f452063d6f5ad717d8d90f059ffcd6ecAmit Mahajan
612c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan        mRadioResponse = new RadioResponse(this);
613c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan        mRadioIndication = new RadioIndication(this);
614f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan        mOemHookResponse = new OemHookResponse(this);
615f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan        mOemHookIndication = new OemHookIndication(this);
6160012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan        mRilHandler = new RilHandler();
6170012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan        mRadioProxyDeathRecipient = new RadioProxyDeathRecipient();
618c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan
6190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
620fa4fd4721082689c4b276f67b845e7be249cb8daWink Saville        mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, RILJ_LOG_TAG);
6210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mWakeLock.setReferenceCounted(false);
622a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe        mAckWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, RILJ_ACK_WAKELOCK_NAME);
623a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe        mAckWakeLock.setReferenceCounted(false);
6240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mWakeLockTimeout = SystemProperties.getInt(TelephonyProperties.PROPERTY_WAKE_LOCK_TIMEOUT,
6253464cbb60f1bf1127fd9e10efb05925f6f911b37Sanket Padawe                DEFAULT_WAKE_LOCK_TIMEOUT_MS);
626a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe        mAckWakeLockTimeout = SystemProperties.getInt(
6273464cbb60f1bf1127fd9e10efb05925f6f911b37Sanket Padawe                TelephonyProperties.PROPERTY_WAKE_LOCK_TIMEOUT, DEFAULT_ACK_WAKE_LOCK_TIMEOUT_MS);
6287cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt        mWakeLockCount = 0;
6298e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindran        mRILDefaultWorkSource = new WorkSource(context.getApplicationInfo().uid,
6308e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindran                context.getPackageName());
6310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
632a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        TelephonyDevController tdc = TelephonyDevController.getInstance();
633a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        tdc.registerRIL(this);
6340d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan
6350d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan        // set radio callback; needed to set RadioIndication callback (should be done after
6360d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan        // wakelock stuff is initialized above as callbacks are received on separate binder threads)
6370d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan        getRadioProxy(null);
6380d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan        getOemHookProxy(null);
6390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
6400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override public void
6420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    setOnNITZTime(Handler h, int what, Object obj) {
6430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        super.setOnNITZTime(h, what, obj);
6440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // Send the last NITZ time if we have it
6460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (mLastNITZTimeInfo != null) {
6470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            mNITZTimeRegistrant
6480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                .notifyRegistrant(
6490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    new AsyncResult (null, mLastNITZTimeInfo, null));
6500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
6510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
6520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
653c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan    private void addRequest(RILRequest rr) {
654c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan        acquireWakeLock(rr, FOR_WAKELOCK);
655c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan        synchronized (mRequestList) {
656d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe            rr.mStartTimeMs = SystemClock.elapsedRealtime();
657c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan            mRequestList.append(rr.mSerial, rr);
658c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan        }
659c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan    }
660c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan
6615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    private RILRequest obtainRequest(int request, Message result, WorkSource workSource) {
6625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        RILRequest rr = RILRequest.obtain(request, result, workSource);
6635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        addRequest(rr);
6645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        return rr;
6655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    }
6665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe
6675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    private void handleRadioProxyExceptionForRR(RILRequest rr, String caller, Exception e) {
6680d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan        riljLoge(caller + ": " + e);
6695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        resetProxyAndRequestList();
670c9c763417554f30c4fa51d3285a9a19893ecd399Amit Mahajan
671c9c763417554f30c4fa51d3285a9a19893ecd399Amit Mahajan        // service most likely died, handle exception like death notification to try to get service
672c9c763417554f30c4fa51d3285a9a19893ecd399Amit Mahajan        // again
673c9c763417554f30c4fa51d3285a9a19893ecd399Amit Mahajan        mRilHandler.sendMessageDelayed(
674c9c763417554f30c4fa51d3285a9a19893ecd399Amit Mahajan                mRilHandler.obtainMessage(EVENT_RADIO_PROXY_DEAD,
675c9c763417554f30c4fa51d3285a9a19893ecd399Amit Mahajan                        mRadioProxyCookie.incrementAndGet()),
676c9c763417554f30c4fa51d3285a9a19893ecd399Amit Mahajan                IRADIO_GET_SERVICE_DELAY_MILLIS);
6775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    }
6785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe
6795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    private String convertNullToEmptyString(String string) {
6805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        return string != null ? string : "";
6815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    }
6825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe
683cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
6840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
6850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    getIccCardStatus(Message result) {
6865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
6875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
6885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_GET_SIM_STATUS, result,
6895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
6900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
6920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
693c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan            try {
694c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan                radioProxy.getIccCardStatus(rr.mSerial);
6950012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan            } catch (RemoteException | RuntimeException e) {
6965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "getIccCardStatus", e);
697c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan            }
698c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan        }
6990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
7000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override public void
7020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    supplyIccPin(String pin, Message result) {
7030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        supplyIccPinForApp(pin, null, result);
7040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
7050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override public void
7070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    supplyIccPinForApp(String pin, String aid, Message result) {
7085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
7095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
7105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_ENTER_SIM_PIN, result,
7115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
7120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) {
714231379c494dc7274ff97037c593c7e7b88d320d6Sooraj Sasindran                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
715231379c494dc7274ff97037c593c7e7b88d320d6Sooraj Sasindran                        + " aid = " + aid);
7165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
7170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
718d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe            try {
719d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe                radioProxy.supplyIccPinForApp(rr.mSerial,
7205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        convertNullToEmptyString(pin),
7215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        convertNullToEmptyString(aid));
7220012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan            } catch (RemoteException | RuntimeException e) {
7235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "supplyIccPinForApp", e);
724d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe            }
725d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe        }
7260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
7270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    @Override
7295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void supplyIccPuk(String puk, String newPin, Message result) {
7300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        supplyIccPukForApp(puk, newPin, null, result);
7310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
7320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    @Override
7345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void supplyIccPukForApp(String puk, String newPin, String aid, Message result) {
7355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
7365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
7375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_ENTER_SIM_PUK, result,
7385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
7390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) {
741231379c494dc7274ff97037c593c7e7b88d320d6Sooraj Sasindran                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
742231379c494dc7274ff97037c593c7e7b88d320d6Sooraj Sasindran                        + " aid = " + aid);
7435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
7440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
745d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe            try {
746d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe                radioProxy.supplyIccPukForApp(rr.mSerial,
7475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        convertNullToEmptyString(puk),
7485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        convertNullToEmptyString(newPin),
7495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        convertNullToEmptyString(aid));
7500012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan            } catch (RemoteException | RuntimeException e) {
7515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "supplyIccPukForApp", e);
752d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe            }
753d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe        }
7540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
7550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override public void
7570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    supplyIccPin2(String pin, Message result) {
7580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        supplyIccPin2ForApp(pin, null, result);
7590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
7600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override public void
7620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    supplyIccPin2ForApp(String pin, String aid, Message result) {
7635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
7645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
7655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_ENTER_SIM_PIN2, result,
7665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
7670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) {
769231379c494dc7274ff97037c593c7e7b88d320d6Sooraj Sasindran                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
770231379c494dc7274ff97037c593c7e7b88d320d6Sooraj Sasindran                        + " aid = " + aid);
7715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
7720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
773d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe            try {
774d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe                radioProxy.supplyIccPin2ForApp(rr.mSerial,
7755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        convertNullToEmptyString(pin),
7765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        convertNullToEmptyString(aid));
7770012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan            } catch (RemoteException | RuntimeException e) {
7785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "supplyIccPin2ForApp", e);
779d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe            }
780d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe        }
7810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
7820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override public void
7840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    supplyIccPuk2(String puk2, String newPin2, Message result) {
7850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        supplyIccPuk2ForApp(puk2, newPin2, null, result);
7860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
7870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override public void
7890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    supplyIccPuk2ForApp(String puk, String newPin2, String aid, Message result) {
7905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
7915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
7925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_ENTER_SIM_PUK2, result,
7935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
7940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) {
796231379c494dc7274ff97037c593c7e7b88d320d6Sooraj Sasindran                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
797231379c494dc7274ff97037c593c7e7b88d320d6Sooraj Sasindran                        + " aid = " + aid);
7985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
7990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
800d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe            try {
801d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe                radioProxy.supplyIccPuk2ForApp(rr.mSerial,
8025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        convertNullToEmptyString(puk),
8035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        convertNullToEmptyString(newPin2),
8045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        convertNullToEmptyString(aid));
8050012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan            } catch (RemoteException | RuntimeException e) {
8065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "supplyIccPuk2ForApp", e);
807d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe            }
808d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe        }
8090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
8100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override public void
8120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    changeIccPin(String oldPin, String newPin, Message result) {
8130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        changeIccPinForApp(oldPin, newPin, null, result);
8140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
8150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override public void
8170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    changeIccPinForApp(String oldPin, String newPin, String aid, Message result) {
8185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
8195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
8205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_CHANGE_SIM_PIN, result,
8215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
8220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) {
8245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " oldPin = "
8255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + oldPin + " newPin = " + newPin + " aid = " + aid);
8265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
8270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
828d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe            try {
829d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe                radioProxy.changeIccPinForApp(rr.mSerial,
8305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        convertNullToEmptyString(oldPin),
8315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        convertNullToEmptyString(newPin),
8325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        convertNullToEmptyString(aid));
8330012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan            } catch (RemoteException | RuntimeException e) {
8345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "changeIccPinForApp", e);
835d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe            }
836d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe        }
8370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
8380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override public void
8400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    changeIccPin2(String oldPin2, String newPin2, Message result) {
8410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        changeIccPin2ForApp(oldPin2, newPin2, null, result);
8420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
8430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override public void
8450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    changeIccPin2ForApp(String oldPin2, String newPin2, String aid, Message result) {
8465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
8475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
8485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_CHANGE_SIM_PIN2, result,
8495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
8500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) {
8525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " oldPin = "
8535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + oldPin2 + " newPin = " + newPin2 + " aid = " + aid);
8545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
8550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
856d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe            try {
857d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe                radioProxy.changeIccPin2ForApp(rr.mSerial,
8585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        convertNullToEmptyString(oldPin2),
8595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        convertNullToEmptyString(newPin2),
8605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        convertNullToEmptyString(aid));
8610012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan            } catch (RemoteException | RuntimeException e) {
8625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "changeIccPin2ForApp", e);
863d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe            }
864d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe        }
865d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe    }
8660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
867d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe    @Override
868d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe    public void supplyNetworkDepersonalization(String netpin, Message result) {
8695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
8705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
8715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_ENTER_NETWORK_DEPERSONALIZATION, result,
8725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
873d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe
8745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) {
8755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " netpin = "
8765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + netpin);
8775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
878d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe
879d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe            try {
880d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe                radioProxy.supplyNetworkDepersonalization(rr.mSerial,
8815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        convertNullToEmptyString(netpin));
8820012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan            } catch (RemoteException | RuntimeException e) {
8835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "supplyNetworkDepersonalization", e);
884d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe            }
885d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe        }
8860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
8870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
888cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
889d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe    public void getCurrentCalls(Message result) {
8905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
8915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
8925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_GET_CURRENT_CALLS, result,
8935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
8940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) {
8965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
8975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
8980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
899d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe            try {
900d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe                radioProxy.getCurrentCalls(rr.mSerial);
9010012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan            } catch (RemoteException | RuntimeException e) {
9025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "getCurrentCalls", e);
903d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe            }
904d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe        }
905d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe    }
9060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
907d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe    @Override
908d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe    public void dial(String address, int clirMode, Message result) {
909d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe        dial(address, clirMode, null, result);
9100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
9110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
912cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
913d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe    public void dial(String address, int clirMode, UUSInfo uusInfo, Message result) {
9145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
9155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
9165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_DIAL, result,
9175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
9180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            Dial dialInfo = new Dial();
9205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            dialInfo.address = convertNullToEmptyString(address);
9215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            dialInfo.clir = clirMode;
9225fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (uusInfo != null) {
9235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                UusInfo info = new UusInfo();
9245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                info.uusType = uusInfo.getType();
9255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                info.uusDcs = uusInfo.getDcs();
9265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                info.uusData = new String(uusInfo.getUserData());
9275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                dialInfo.uusInfo.add(info);
9285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
9290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) {
9315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                // Do not log function arg for privacy
9325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
9335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
9340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
935d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe            try {
936d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe                radioProxy.dial(rr.mSerial, dialInfo);
9370012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan            } catch (RemoteException | RuntimeException e) {
9385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "dial", e);
939d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe            }
940d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe        }
9410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
9420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    @Override
9445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void getIMSI(Message result) {
9455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        getIMSIForApp(null, result);
9465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    }
9470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    @Override
9495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void getIMSIForApp(String aid, Message result) {
9505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
9515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
9525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_GET_IMSI, result,
9535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
9545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe
9555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) {
9565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog(rr.serialString()
9575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + ">  " + requestToString(rr.mRequest) + " aid = " + aid);
9585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
9595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
9605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.getImsiForApp(rr.mSerial, convertNullToEmptyString(aid));
9615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
9625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "getIMSIForApp", e);
9635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
964d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe        }
9655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    }
966d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe
9675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    @Override
9685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void hangupConnection(int gsmIndex, Message result) {
9695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
9705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
9715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_HANGUP, result,
9725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
9730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) {
9755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " gsmIndex = "
9765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + gsmIndex);
9775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
9780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
9805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.hangup(rr.mSerial, gsmIndex);
9815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
9825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "hangupConnection", e);
9835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
984d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe        }
9850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
9860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
987cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
9885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void hangupWaitingOrBackground(Message result) {
9895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
9905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
9915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_HANGUP_WAITING_OR_BACKGROUND, result,
9925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
9930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
995d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe
9965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
9975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.hangupWaitingOrBackground(rr.mSerial);
9985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
9995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "hangupWaitingOrBackground", e);
10005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
10015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
10020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
10030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1004cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
10055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void hangupForegroundResumeBackground(Message result) {
10065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
10075fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
10085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_HANGUP_FOREGROUND_RESUME_BACKGROUND, result,
10095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
10105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe
10115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
10125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe
10135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
10145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.hangupForegroundResumeBackground(rr.mSerial);
10155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
10165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "hangupForegroundResumeBackground", e);
10175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
10185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
10190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
10200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1021cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
10225fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void switchWaitingOrHoldingAndActive(Message result) {
10235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
10245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
10255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_SWITCH_WAITING_OR_HOLDING_AND_ACTIVE, result,
10265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
10270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
10285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
10290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
10305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
10315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.switchWaitingOrHoldingAndActive(rr.mSerial);
10325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
10335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "switchWaitingOrHoldingAndActive", e);
10345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
10355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
10360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
10370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1038cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
10395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void conference(Message result) {
10405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
10415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
10425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_CONFERENCE, result,
10435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
10445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe
10455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
10465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe
10475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
10485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.conference(rr.mSerial);
10495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
10505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "conference", e);
10515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
10525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
10530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
10540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1055cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
10565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void rejectCall(Message result) {
10575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
10585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
10595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_UDUB, result,
10605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
10610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
10625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
10630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
10645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
10655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.rejectCall(rr.mSerial);
10665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
10675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "rejectCall", e);
10685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
10695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
10700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
10710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1072cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
10735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void getLastCallFailCause(Message result) {
10745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
10755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
10765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_LAST_CALL_FAIL_CAUSE, result,
10775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
10780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
10795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
10800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
10815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
10825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.getLastCallFailCause(rr.mSerial);
10835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
10845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "getLastCallFailCause", e);
10855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
10865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
10870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
10880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1089cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
1090a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan    public void getSignalStrength(Message result) {
1091a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan        IRadio radioProxy = getRadioProxy(result);
1092a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan        if (radioProxy != null) {
1093a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan            RILRequest rr = obtainRequest(RIL_REQUEST_SIGNAL_STRENGTH, result,
1094a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan                    mRILDefaultWorkSource);
10950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1096a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan            if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
10970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1098a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan            try {
1099a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan                radioProxy.getSignalStrength(rr.mSerial);
1100a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan            } catch (RemoteException | RuntimeException e) {
1101a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan                handleRadioProxyExceptionForRR(rr, "getSignalStrength", e);
1102a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan            }
1103a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan        }
11040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
11050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1106cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
11075fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void getVoiceRegistrationState(Message result) {
11085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
11095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
11105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_VOICE_REGISTRATION_STATE, result,
11115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
11120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
11140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
11165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.getVoiceRegistrationState(rr.mSerial);
11175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
11185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "getVoiceRegistrationState", e);
11195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
11205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
11210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
11220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1123cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
11245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void getDataRegistrationState(Message result) {
11255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
11265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
11275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_DATA_REGISTRATION_STATE, result,
11285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
11290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
11310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
11335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.getDataRegistrationState(rr.mSerial);
11345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
11355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "getDataRegistrationState", e);
11365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
11375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
11380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
11390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1140cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
11415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void getOperator(Message result) {
11425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
11435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
11445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_OPERATOR, result,
11455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
11460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
11485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe
11495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
11505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.getOperator(rr.mSerial);
11515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
11525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "getOperator", e);
11535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
11545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
11550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
11560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1157cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
11585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void setRadioPower(boolean on, Message result) {
11595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
11605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
11615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_RADIO_POWER, result,
11625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
11630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) {
11655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
11665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + " on = " + on);
11675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
11680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
11705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.setRadioPower(rr.mSerial, on);
11715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
11725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "setRadioPower", e);
11735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
11745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
11750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
11760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1177cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
11785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void sendDtmf(char c, Message result) {
11795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
11805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
11815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_DTMF, result,
11825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
11830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) {
11855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                // Do not log function arg for privacy
11865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
11875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
11880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
11905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.sendDtmf(rr.mSerial, c + "");
11915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
11925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "sendDtmf", e);
11935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
11945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
11950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
11960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    private GsmSmsMessage constructGsmSendSmsRilRequest(String smscPdu, String pdu) {
11985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        GsmSmsMessage msg = new GsmSmsMessage();
11995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        msg.smscPdu = smscPdu == null ? "" : smscPdu;
12005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        msg.pdu = pdu == null ? "" : pdu;
12015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        return msg;
12020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
12030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1204cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
12055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void sendSMS(String smscPdu, String pdu, Message result) {
12065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
12075fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
12085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_SEND_SMS, result,
12095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
12100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
12115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            // Do not log function args for privacy
12125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
12130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
12145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            GsmSmsMessage msg = constructGsmSendSmsRilRequest(smscPdu, pdu);
12150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
12165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
12175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.sendSms(rr.mSerial, msg);
12185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                mMetrics.writeRilSendSms(mPhoneId, rr.mSerial, SmsSession.Event.Tech.SMS_GSM,
12195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        SmsSession.Event.Format.SMS_FORMAT_3GPP);
12205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
12215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "sendSMS", e);
12225fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
12235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
12240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
12250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1226cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
12275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void sendSMSExpectMore(String smscPdu, String pdu, Message result) {
12285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
12295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
12305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_SEND_SMS_EXPECT_MORE, result,
12315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
12320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
12335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            // Do not log function arg for privacy
12345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
12350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
12365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            GsmSmsMessage msg = constructGsmSendSmsRilRequest(smscPdu, pdu);
12375054dfa7fd9b0520d30a102ed5a2107af11590c8Pavel Zhamaitsiak
12385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
12395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.sendSMSExpectMore(rr.mSerial, msg);
12405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                mMetrics.writeRilSendSms(mPhoneId, rr.mSerial, SmsSession.Event.Tech.SMS_GSM,
12415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        SmsSession.Event.Format.SMS_FORMAT_3GPP);
12425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
12435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "sendSMSExpectMore", e);
12445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
12455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
12460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
12470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
12488e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu    /**
12498e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu     * Convert MVNO type string into MvnoType defined in types.hal.
12508e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu     * @param mvnoType MVNO type
12518e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu     * @return MVNO type in integer
12528e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu     */
12538e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu    private static int convertToHalMvnoType(String mvnoType) {
12548e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu        switch (mvnoType) {
12558e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu            case "imsi" : return MvnoType.IMSI;
12568e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu            case "gid" : return MvnoType.GID;
12578e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu            case "spn" : return MvnoType.SPN;
12588e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu            default: return MvnoType.NONE;
12598e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu        }
12608e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu    }
12618e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu
12628e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu    /**
12638e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu     * Convert to DataProfileInfo defined in types.hal
12648e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu     * @param dp Data profile
12658e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu     * @return A converted data profile
12668e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu     */
12678e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu    private static DataProfileInfo convertToHalDataProfile(DataProfile dp) {
12688e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu        DataProfileInfo dpi = new DataProfileInfo();
12698e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu
12708e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu        dpi.profileId = dp.profileId;
12718e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu        dpi.apn = dp.apn;
12728e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu        dpi.protocol = dp.protocol;
12738e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu        dpi.roamingProtocol = dp.roamingProtocol;
12748e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu        dpi.authType = dp.authType;
12758e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu        dpi.user = dp.user;
12768e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu        dpi.password = dp.password;
12778e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu        dpi.type = dp.type;
12788e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu        dpi.maxConnsTime = dp.maxConnsTime;
12798e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu        dpi.maxConns = dp.maxConns;
12808e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu        dpi.waitTime = dp.waitTime;
12818e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu        dpi.enabled = dp.enabled;
12828e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu        dpi.supportedApnTypesBitmap = dp.supportedApnTypesBitmap;
12838e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu        dpi.bearerBitmap = dp.bearerBitmap;
12848e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu        dpi.mtu = dp.mtu;
12858e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu        dpi.mvnoType = convertToHalMvnoType(dp.mvnoType);
12868e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu        dpi.mvnoMatchData = dp.mvnoMatchData;
12878e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu
12888e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu        return dpi;
12898e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu    }
12908e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu
12918e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu    /**
1292e16769120c06f1ea7e4e22d85b39d7c33c925697Jayachandran C     * Convert NV reset type into ResetNvType defined in types.hal.
1293e16769120c06f1ea7e4e22d85b39d7c33c925697Jayachandran C     * @param resetType NV reset type.
1294e16769120c06f1ea7e4e22d85b39d7c33c925697Jayachandran C     * @return Converted reset type in integer or -1 if param is invalid.
1295e16769120c06f1ea7e4e22d85b39d7c33c925697Jayachandran C     */
1296e16769120c06f1ea7e4e22d85b39d7c33c925697Jayachandran C    private static int convertToHalResetNvType(int resetType) {
1297e16769120c06f1ea7e4e22d85b39d7c33c925697Jayachandran C        /**
1298e16769120c06f1ea7e4e22d85b39d7c33c925697Jayachandran C         * resetType values
1299e16769120c06f1ea7e4e22d85b39d7c33c925697Jayachandran C         * 1 - reload all NV items
1300e16769120c06f1ea7e4e22d85b39d7c33c925697Jayachandran C         * 2 - erase NV reset (SCRTN)
1301e16769120c06f1ea7e4e22d85b39d7c33c925697Jayachandran C         * 3 - factory reset (RTN)
1302e16769120c06f1ea7e4e22d85b39d7c33c925697Jayachandran C         */
1303e16769120c06f1ea7e4e22d85b39d7c33c925697Jayachandran C        switch (resetType) {
1304e16769120c06f1ea7e4e22d85b39d7c33c925697Jayachandran C            case 1: return ResetNvType.RELOAD;
1305e16769120c06f1ea7e4e22d85b39d7c33c925697Jayachandran C            case 2: return ResetNvType.ERASE;
1306e16769120c06f1ea7e4e22d85b39d7c33c925697Jayachandran C            case 3: return ResetNvType.FACTORY_RESET;
1307e16769120c06f1ea7e4e22d85b39d7c33c925697Jayachandran C        }
1308e16769120c06f1ea7e4e22d85b39d7c33c925697Jayachandran C        return -1;
1309e16769120c06f1ea7e4e22d85b39d7c33c925697Jayachandran C    }
1310e16769120c06f1ea7e4e22d85b39d7c33c925697Jayachandran C
1311e16769120c06f1ea7e4e22d85b39d7c33c925697Jayachandran C    /**
13128e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu     * Convert SetupDataCallResult defined in types.hal into DataCallResponse
13138e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu     * @param dcResult setup data call result
13148e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu     * @return converted DataCallResponse object
13158e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu     */
13168e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu    static DataCallResponse convertDataCallResult(SetupDataCallResult dcResult) {
13178e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu        return new DataCallResponse(dcResult.status,
13188e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu                dcResult.suggestedRetryTime,
13198e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu                dcResult.cid,
13208e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu                dcResult.active,
13218e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu                dcResult.type,
13228e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu                dcResult.ifname,
13238e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu                dcResult.addresses,
13248e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu                dcResult.dnses,
13258e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu                dcResult.gateways,
13268e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu                dcResult.pcscf,
13278e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu                dcResult.mtu
13288e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu        );
13298e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu    }
13308e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu
1331cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
13328e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu    public void setupDataCall(int radioTechnology, DataProfile dataProfile, boolean isRoaming,
13338e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu                              boolean allowRoaming, Message result) {
13348e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu
1335a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan        IRadio radioProxy = getRadioProxy(result);
1336a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan        if (radioProxy != null) {
13378e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu
1338a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan            RILRequest rr = obtainRequest(RIL_REQUEST_SETUP_DATA_CALL, result,
1339a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan                    mRILDefaultWorkSource);
1340a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan
13418e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu            // Convert to HAL data profile
13428e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu            DataProfileInfo dpi = convertToHalDataProfile(dataProfile);
13438e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu
1344a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan            if (RILJ_LOGD) {
13458e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
13468e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu                        + ",radioTechnology=" + radioTechnology + ",isRoaming="
13478e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu                        + isRoaming + ",allowRoaming=" + allowRoaming + "," + dataProfile);
1348a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan            }
1349a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan
1350a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan            try {
13518e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu                radioProxy.setupDataCall(rr.mSerial, radioTechnology, dpi,
13528e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu                        dataProfile.modemCognitive, allowRoaming, isRoaming);
13538e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu                mMetrics.writeRilSetupDataCall(mPhoneId, rr.mSerial, radioTechnology, dpi.profileId,
13548e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu                        dpi.apn, dpi.authType, dpi.protocol);
1355a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan            } catch (RemoteException | RuntimeException e) {
1356a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan                handleRadioProxyExceptionForRR(rr, "setupDataCall", e);
1357a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan            }
13588e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu        }
13590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
13600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1361cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
13625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void iccIO(int command, int fileId, String path, int p1, int p2, int p3,
13635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                      String data, String pin2, Message result) {
13645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        iccIOForApp(command, fileId, path, p1, p2, p3, data, pin2, null, result);
13650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
13660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1367cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
13685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void iccIOForApp(int command, int fileId, String path, int p1, int p2, int p3,
13695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                 String data, String pin2, String aid, Message result) {
13705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
13715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
13725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_SIM_IO, result,
13735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
13740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
13755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) {
13765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog(rr.serialString() + "> iccIO: "
13775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + requestToString(rr.mRequest) + " command = 0x"
13785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + Integer.toHexString(command) + " fileId = 0x"
13795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + Integer.toHexString(fileId) + " path = " + path + " p1 = "
13805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + p1 + " p2 = " + p2 + " p3 = " + " data = " + data
13815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + " aid = " + aid);
13825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
13830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
13845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            IccIo iccIo = new IccIo();
13855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            iccIo.command = command;
13865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            iccIo.fileId = fileId;
13875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            iccIo.path = convertNullToEmptyString(path);
13885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            iccIo.p1 = p1;
13895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            iccIo.p2 = p2;
13905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            iccIo.p3 = p3;
13915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            iccIo.data = convertNullToEmptyString(data);
13925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            iccIo.pin2 = convertNullToEmptyString(pin2);
13935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            iccIo.aid = convertNullToEmptyString(aid);
13940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
13955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
13965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.iccIOForApp(rr.mSerial, iccIo);
13975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
13985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "iccIOForApp", e);
13995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
14005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
14010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
14020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1403cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
14045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void sendUSSD(String ussd, Message result) {
14055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
14065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
14075fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_SEND_USSD, result,
14085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
14090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
14105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) {
14115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                String logUssd = "*******";
14125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                if (RILJ_LOGV) logUssd = ussd;
14135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
14145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + " ussd = " + logUssd);
14155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
14160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
14175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
14185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.sendUssd(rr.mSerial, convertNullToEmptyString(ussd));
14195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
14205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "sendUSSD", e);
14215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
14225fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
14230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
14240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1425cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
14265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void cancelPendingUssd(Message result) {
14275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
14285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
14295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_CANCEL_USSD, result,
14305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
14310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
14325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) {
14335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog(rr.serialString()
14345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + "> " + requestToString(rr.mRequest));
14355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
14360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
14375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
14385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.cancelPendingUssd(rr.mSerial);
14395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
14405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "cancelPendingUssd", e);
14415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
14425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
14430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
14440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1445cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
14465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void getCLIR(Message result) {
14475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
14485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
14495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_GET_CLIR, result,
14505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
14510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
14525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
14530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
14545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
14555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.getClir(rr.mSerial);
14565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
14575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "getCLIR", e);
14585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
14595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
14600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
14610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1462cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
14635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void setCLIR(int clirMode, Message result) {
14645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
14655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
14665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_SET_CLIR, result, mRILDefaultWorkSource);
14670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
14685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) {
14695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
14705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + " clirMode = " + clirMode);
14715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
14720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
14735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
14745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.setClir(rr.mSerial, clirMode);
14755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
14765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "setCLIR", e);
14775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
14785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
14790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
14800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1481cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
14825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void queryCallForwardStatus(int cfReason, int serviceClass,
14835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                           String number, Message result) {
14845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
14855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
14865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_QUERY_CALL_FORWARD_STATUS, result,
14875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
14880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
14895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) {
14905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
14915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + " cfreason = " + cfReason + " serviceClass = " + serviceClass);
14925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
14930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
14945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            android.hardware.radio.V1_0.CallForwardInfo cfInfo =
14955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    new android.hardware.radio.V1_0.CallForwardInfo();
14965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            cfInfo.reason = cfReason;
14975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            cfInfo.serviceClass = serviceClass;
14985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            cfInfo.toa = PhoneNumberUtils.toaFromString(number);
14995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            cfInfo.number = convertNullToEmptyString(number);
15005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            cfInfo.timeSeconds = 0;
15015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe
15025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
15035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.getCallForwardStatus(rr.mSerial, cfInfo);
15045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
15055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "queryCallForwardStatus", e);
15065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
15075fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
15080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
15090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1510cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
15115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void setCallForward(int action, int cfReason, int serviceClass,
15125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                   String number, int timeSeconds, Message result) {
15135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
15145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
15155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_SET_CALL_FORWARD, result,
15165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
15170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
15185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) {
15195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
15205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + " action = " + action + " cfReason = " + cfReason + " serviceClass = "
15215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + serviceClass + " timeSeconds = " + timeSeconds);
15225fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
15230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
15245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            android.hardware.radio.V1_0.CallForwardInfo cfInfo =
15255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    new android.hardware.radio.V1_0.CallForwardInfo();
15265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            cfInfo.status = action;
15275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            cfInfo.reason = cfReason;
15285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            cfInfo.serviceClass = serviceClass;
15295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            cfInfo.toa = PhoneNumberUtils.toaFromString(number);
1530a5b70e4dc179942acc958d650bab1017be443e14Sooraj Sasindran            cfInfo.number = convertNullToEmptyString(number);
15318489fba4bf4086d89973231cd627ce5898f34b5cSanket Padawe            cfInfo.timeSeconds = timeSeconds;
15325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe
15335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
15345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.setCallForward(rr.mSerial, cfInfo);
15355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
15365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "setCallForward", e);
15375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe
15385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
15395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
15400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
15410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1542cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
15435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void queryCallWaiting(int serviceClass, Message result) {
15445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
15455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
15465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_QUERY_CALL_WAITING, result,
15475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
1548a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville
15495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) {
15505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
15515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + " serviceClass = " + serviceClass);
15525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
1553a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville
15545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
15555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.getCallWaiting(rr.mSerial, serviceClass);
15565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
15575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "queryCallWaiting", e);
15585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
15595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
1560a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville    }
1561a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville
1562a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville    @Override
15635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void setCallWaiting(boolean enable, int serviceClass, Message result) {
15645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
15655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
15665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_SET_CALL_WAITING, result,
15675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
15680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
15695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) {
15705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
15715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + " enable = " + enable + " serviceClass = " + serviceClass);
15725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
15730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
15745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
15755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.setCallWaiting(rr.mSerial, enable, serviceClass);
15765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
15775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "setCallWaiting", e);
15785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
15795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
15800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
15810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1582cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
15835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void acknowledgeLastIncomingGsmSms(boolean success, int cause, Message result) {
15845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
15855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
15865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_SMS_ACKNOWLEDGE, result,
15875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
15880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
15895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) {
15905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
15915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + " success = " + success + " cause = " + cause);
15925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
15930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
15945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
15955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.acknowledgeLastIncomingGsmSms(rr.mSerial, success, cause);
15965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
15975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "acknowledgeLastIncomingGsmSms", e);
15985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
15995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
16000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
16010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1602cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
16035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void acceptCall(Message result) {
16045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
16055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
16065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_ANSWER, result,
16075fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
16080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
16095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) {
16105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
16115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
16120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
16135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
16145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.acceptCall(rr.mSerial);
16155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                mMetrics.writeRilAnswer(mPhoneId, rr.mSerial);
16165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
16175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "acceptCall", e);
16185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
16195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
16200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
16210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1622cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
16235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void deactivateDataCall(int cid, int reason, Message result) {
16245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
16255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
16265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_DEACTIVATE_DATA_CALL, result,
16275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
16280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
16295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) {
16305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog(rr.serialString() + "> "
16315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + requestToString(rr.mRequest) + " cid = " + cid + " reason = " + reason);
16325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
16330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
16345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
16355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.deactivateDataCall(rr.mSerial, cid, (reason == 0) ? false : true);
16365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                mMetrics.writeRilDeactivateDataCall(mPhoneId, rr.mSerial,
16375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        cid, reason);
16385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
16395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "deactivateDataCall", e);
16405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
16415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
16420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
16430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
16445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    @Override
16455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void queryFacilityLock(String facility, String password, int serviceClass,
16465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                                  Message result) {
16475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        queryFacilityLockForApp(facility, password, serviceClass, null, result);
16481260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa    }
16491260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa
16505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    @Override
16515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void queryFacilityLockForApp(String facility, String password, int serviceClass,
16525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                                        String appId, Message result) {
16535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
16545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
16555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_QUERY_FACILITY_LOCK, result,
16565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
16570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
16585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) {
16595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
16605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + " facility = " + facility + " serviceClass = " + serviceClass
16615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + " appId = " + appId);
16625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
16635054dfa7fd9b0520d30a102ed5a2107af11590c8Pavel Zhamaitsiak
16645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
16655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.getFacilityLockForApp(rr.mSerial,
16665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        convertNullToEmptyString(facility),
16675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        convertNullToEmptyString(password),
16685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        serviceClass,
16695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        convertNullToEmptyString(appId));
16705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
16715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "getFacilityLockForApp", e);
16725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
16735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
16740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
16750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
16766ad88a8a2caf739e78c8d5f7f50fc7fa84a07ca7Chaitanya Saggurthi    @Override
16775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void setFacilityLock(String facility, boolean lockState, String password,
16785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                                int serviceClass, Message result) {
16795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        setFacilityLockForApp(facility, lockState, password, serviceClass, null, result);
16806ad88a8a2caf739e78c8d5f7f50fc7fa84a07ca7Chaitanya Saggurthi    }
16816ad88a8a2caf739e78c8d5f7f50fc7fa84a07ca7Chaitanya Saggurthi
16825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    @Override
16835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void setFacilityLockForApp(String facility, boolean lockState, String password,
16845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                                      int serviceClass, String appId, Message result) {
16855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
16865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
16875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_SET_FACILITY_LOCK, result,
16885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
16890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
16905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) {
16915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
16925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + " facility = " + facility + " lockstate = " + lockState
16935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + " serviceClass = " + serviceClass + " appId = " + appId);
16940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
16950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
16965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
16975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.setFacilityLockForApp(rr.mSerial,
16985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        convertNullToEmptyString(facility),
16995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        lockState,
17005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        convertNullToEmptyString(password),
17015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        serviceClass,
17025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        convertNullToEmptyString(appId));
17035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
17045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "setFacilityLockForApp", e);
17050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
17060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
17071260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa    }
17081260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa
17095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    @Override
17105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void changeBarringPassword(String facility, String oldPwd, String newPwd,
17115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                                      Message result) {
17125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
17135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
17145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_CHANGE_BARRING_PASSWORD, result,
17155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
17161260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa
17175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            // Do not log all function args for privacy
17185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) {
17195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
17205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + "facility = " + facility);
17215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
17225054dfa7fd9b0520d30a102ed5a2107af11590c8Pavel Zhamaitsiak
17235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
17245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.setBarringPassword(rr.mSerial,
17255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        convertNullToEmptyString(facility),
17265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        convertNullToEmptyString(oldPwd),
17275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        convertNullToEmptyString(newPwd));
17285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
17295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "changeBarringPassword", e);
17305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
17315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
17321260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa    }
17331260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa
17345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    @Override
17355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void getNetworkSelectionMode(Message result) {
17365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
17375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
17385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_QUERY_NETWORK_SELECTION_MODE, result,
17395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
17401260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa
17415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
17425054dfa7fd9b0520d30a102ed5a2107af11590c8Pavel Zhamaitsiak
17435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
17445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.getNetworkSelectionMode(rr.mSerial);
17455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
17465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "getNetworkSelectionMode", e);
17475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
17485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
17491260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa    }
17501260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa
17515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    @Override
17525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void setNetworkSelectionModeAutomatic(Message result) {
17535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
17545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
17555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_SET_NETWORK_SELECTION_AUTOMATIC, result,
17565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
17570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
17585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
17595054dfa7fd9b0520d30a102ed5a2107af11590c8Pavel Zhamaitsiak
17605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
17615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.setNetworkSelectionModeAutomatic(rr.mSerial);
17625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
17635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "setNetworkSelectionModeAutomatic", e);
17645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
17655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
17660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
17670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1768cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
17695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void setNetworkSelectionModeManual(String operatorNumeric, Message result) {
17705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
17715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
17725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_SET_NETWORK_SELECTION_MANUAL, result,
17735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
17740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
17755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) {
17765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
17775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + " operatorNumeric = " + operatorNumeric);
17785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
17790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
17805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
17815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.setNetworkSelectionModeManual(rr.mSerial,
17825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        convertNullToEmptyString(operatorNumeric));
17835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
17845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "setNetworkSelectionModeManual", e);
17855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
17865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
17870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
17880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1789cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
17905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void getAvailableNetworks(Message result) {
17915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
17925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
17935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_QUERY_AVAILABLE_NETWORKS, result,
17945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
17950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
17965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
17970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
17985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
17995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.getAvailableNetworks(rr.mSerial);
18005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
18015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "getAvailableNetworks", e);
18025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
18035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
18040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
18050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1806cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
18075fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void startDtmf(char c, Message result) {
18085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
18095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
18105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_DTMF_START, result,
18115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
18120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
18135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            // Do not log function arg for privacy
18145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
18150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
18165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
18175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.startDtmf(rr.mSerial, c + "");
18185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
18195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "startDtmf", e);
18205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
18215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
18220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
18230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1824cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
18255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void stopDtmf(Message result) {
18265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
18275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
18285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_DTMF_STOP, result,
18295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
18300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
18315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
18320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
18335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
18345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.stopDtmf(rr.mSerial);
18355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
18365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "stopDtmf", e);
18375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
18385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
18395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    }
18400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
18415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    @Override
18425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void separateConnection(int gsmIndex, Message result) {
18435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
18445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
18455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_SEPARATE_CONNECTION, result,
18465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
18470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
18485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) {
18495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
18505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + " gsmIndex = " + gsmIndex);
18515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
18520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
18535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
18545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.separateConnection(rr.mSerial, gsmIndex);
18555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
18565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "separateConnection", e);
18575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
18580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
18590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
18600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1861cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
18625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void getBasebandVersion(Message result) {
18635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
18645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
18655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_BASEBAND_VERSION, result,
18665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
18670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
18685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
18690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
18705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
18715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.getBasebandVersion(rr.mSerial);
18725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
18735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "getBasebandVersion", e);
18745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
18755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
18765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    }
18770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
18785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    @Override
18795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void setMute(boolean enableMute, Message result) {
18805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
18815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
18825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_SET_MUTE, result,
18835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
18840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
18855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) {
18865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
18875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + " enableMute = " + enableMute);
18885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
18895054dfa7fd9b0520d30a102ed5a2107af11590c8Pavel Zhamaitsiak
18905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
18915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.setMute(rr.mSerial, enableMute);
18925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
18935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "setMute", e);
18945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
18955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
18960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
18970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1898cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
18995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void getMute(Message result) {
19005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
19015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
19025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_GET_MUTE, result,
19035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
19040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
19055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
19065054dfa7fd9b0520d30a102ed5a2107af11590c8Pavel Zhamaitsiak
19075fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
19085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.getMute(rr.mSerial);
19095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
19105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "getMute", e);
19115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
19125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
19130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
19140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1915cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
19165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void queryCLIP(Message result) {
19175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
19185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
19195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_QUERY_CLIP, result,
19205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
19210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
19225fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
19230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
19245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
19255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.getClip(rr.mSerial);
19265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
19275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "queryCLIP", e);
19285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
19290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
19300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
19310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
19325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    /**
19335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe     * @deprecated
19345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe     */
1935cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
19365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    @Deprecated
19375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void getPDPContextList(Message result) {
19385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        getDataCallList(result);
193903586878fb3d870373f2fdf65afb81cc5ae97067Naveen Kalla    }
194003586878fb3d870373f2fdf65afb81cc5ae97067Naveen Kalla
194103586878fb3d870373f2fdf65afb81cc5ae97067Naveen Kalla    @Override
19425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void getDataCallList(Message result) {
1943a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan        IRadio radioProxy = getRadioProxy(result);
1944a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan        if (radioProxy != null) {
1945a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan            RILRequest rr = obtainRequest(RIL_REQUEST_DATA_CALL_LIST, result,
1946a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan                    mRILDefaultWorkSource);
19470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1948a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan            if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
19490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1950a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan            try {
1951a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan                radioProxy.getDataCallList(rr.mSerial);
1952a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan            } catch (RemoteException | RuntimeException e) {
1953a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan                handleRadioProxyExceptionForRR(rr, "getDataCallList", e);
1954a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan            }
1955a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan        }
19560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
19570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1958cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
19595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void invokeOemRilRequestRaw(byte[] data, Message response) {
1960f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan        IOemHook oemHookProxy = getOemHookProxy(response);
1961f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan        if (oemHookProxy != null) {
1962f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan            RILRequest rr = obtainRequest(RIL_REQUEST_OEM_HOOK_RAW, response,
1963f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan                    mRILDefaultWorkSource);
19640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1965f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan            if (RILJ_LOGD) {
1966f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
1967f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan                        + "[" + IccUtils.bytesToHexString(data) + "]");
1968f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan            }
19695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe
1970f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan            try {
1971f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan                oemHookProxy.sendRequestRaw(rr.mSerial, primitiveArrayToArrayList(data));
1972f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan            } catch (RemoteException | RuntimeException e) {
1973f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan                handleRadioProxyExceptionForRR(rr, "invokeOemRilRequestStrings", e);
1974f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan            }
1975f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan        }
19760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
19770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1978cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
19795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void invokeOemRilRequestStrings(String[] strings, Message result) {
1980f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan        IOemHook oemHookProxy = getOemHookProxy(result);
1981f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan        if (oemHookProxy != null) {
19825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_OEM_HOOK_STRINGS, result,
19835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
19840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
19855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            String logStr = "";
19865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            for (int i = 0; i < strings.length; i++) {
19875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                logStr = logStr + strings[i] + " ";
19885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
19895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) {
19905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " strings = "
19915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + logStr);
19925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
19930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
19945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
1995f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan                oemHookProxy.sendRequestStrings(rr.mSerial,
19965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        new ArrayList<String>(Arrays.asList(strings)));
19975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
19985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "invokeOemRilRequestStrings", e);
19995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
20005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
20010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
20020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2003cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
20045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void setSuppServiceNotifications(boolean enable, Message result) {
20055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
20065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
20075fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_SET_SUPP_SVC_NOTIFICATION, result,
20085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
20090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
20105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) {
20115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " enable = "
20125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + enable);
20135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
20140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
20155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
20165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.setSuppServiceNotifications(rr.mSerial, enable);
20175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
20185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "setSuppServiceNotifications", e);
20195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
20205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
20210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
20220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2023cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
20245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void writeSmsToSim(int status, String smsc, String pdu, Message result) {
20255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        status = translateStatus(status);
20265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
20275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
20285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_WRITE_SMS_TO_SIM, result,
20295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
20300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
20315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGV) {
20325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog(rr.serialString() + "> "
20335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + requestToString(rr.mRequest)
20345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + " " + status);
20355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
20360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
20375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            SmsWriteArgs args = new SmsWriteArgs();
20385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            args.status = status;
20395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            args.smsc = convertNullToEmptyString(smsc);
20405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            args.pdu = convertNullToEmptyString(pdu);
20410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
20425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
20435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.writeSmsToSim(rr.mSerial, args);
20445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
20455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "writeSmsToSim", e);
20465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
20475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
20480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
20490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2050cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
20515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void deleteSmsOnSim(int index, Message result) {
20525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
20535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
20545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_DELETE_SMS_ON_SIM, result,
20555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
20560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
20575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGV) {
20585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog(rr.serialString() + "> "
20595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + requestToString(rr.mRequest) + " index = " + index);
20605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
20610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
20625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
20635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.deleteSmsOnSim(rr.mSerial, index);
20645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
20655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "deleteSmsOnSim", e);
20665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
20675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
20680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
20690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2070cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
20715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void setBandMode(int bandMode, Message result) {
20725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
20735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
20745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_SET_BAND_MODE, result,
20755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
20760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
20775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) {
20785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
20795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + " bandMode = " + bandMode);
20805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
20810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
20825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
20835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.setBandMode(rr.mSerial, bandMode);
20845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
20855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "setBandMode", e);
20865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
20875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
20880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
20890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2090cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
20915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void queryAvailableBandMode(Message result) {
20925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
20935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
20945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_QUERY_AVAILABLE_BAND_MODE, result,
20955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
20960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
20975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
20980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
20995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
21005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.getAvailableBandModes(rr.mSerial);
21015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
21025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "queryAvailableBandMode", e);
21035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
21045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
21050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
21060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2107cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
21085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void sendEnvelope(String contents, Message result) {
21095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
21105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
21115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_STK_SEND_ENVELOPE_COMMAND, result,
21125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
21130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
21145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) {
21155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " contents = "
21165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + contents);
21175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
21180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
21195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
21205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.sendEnvelope(rr.mSerial, convertNullToEmptyString(contents));
21215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
21225fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "sendEnvelope", e);
21235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
21245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
21250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
21260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2127cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
21285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void sendTerminalResponse(String contents, Message result) {
21295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
21305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
21315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_STK_SEND_TERMINAL_RESPONSE, result,
21325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
21330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
21345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) {
21355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " contents = "
21365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + contents);
21375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
21380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
21395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
21405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.sendTerminalResponseToSim(rr.mSerial,
21415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        convertNullToEmptyString(contents));
21425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
21435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "sendTerminalResponse", e);
21445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
21455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
21460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
21470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2148cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
21495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void sendEnvelopeWithStatus(String contents, Message result) {
21505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
21515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
21525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_STK_SEND_ENVELOPE_WITH_STATUS, result,
21535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
21540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
21555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) {
21565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " contents = "
21575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + contents);
21585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
21590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
21605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
21615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.sendEnvelopeWithStatus(rr.mSerial, convertNullToEmptyString(contents));
21625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
21635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "sendEnvelopeWithStatus", e);
21645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
21655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
21660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
21670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2168cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
21695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void explicitCallTransfer(Message result) {
21705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
21715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
21725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_EXPLICIT_CALL_TRANSFER, result,
21735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
21740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
21755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
21760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
21775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
21785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.explicitCallTransfer(rr.mSerial);
21795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
21805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "explicitCallTransfer", e);
21815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
21825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
21830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
21840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2185cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
21865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void setPreferredNetworkType(int networkType , Message result) {
21875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
21885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
21895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE, result,
21905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
21910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
21925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) {
21935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
21945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + " networkType = " + networkType);
21955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
21965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            mPreferredNetworkType = networkType;
21975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            mMetrics.writeSetPreferredNetworkType(mPhoneId, networkType);
21980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
21995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
22005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.setPreferredNetworkType(rr.mSerial, networkType);
22015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
22025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "setPreferredNetworkType", e);
22035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
22045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
22050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
22060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2207cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
22085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void getPreferredNetworkType(Message result) {
22095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
22105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
22115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_GET_PREFERRED_NETWORK_TYPE, result,
22125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
22130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
22145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
22150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
22165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
22175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.getPreferredNetworkType(rr.mSerial);
22185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
22195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "getPreferredNetworkType", e);
22205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
22215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
22220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
22230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2224cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
22255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void getNeighboringCids(Message result, WorkSource workSource) {
22265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        workSource = getDeafultWorkSourceIfInvalid(workSource);
22275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
22285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
22295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_GET_NEIGHBORING_CELL_IDS, result,
22305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    workSource);
22310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
22325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
22330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
22345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
22355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.getNeighboringCids(rr.mSerial);
22365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
22375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "getNeighboringCids", e);
22385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
22395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
22400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
22410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
22420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override
22435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void setLocationUpdates(boolean enable, Message result) {
22445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
22455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
22465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_SET_LOCATION_UPDATES, result,
22475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
22485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe
22495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) {
22505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog(rr.serialString() + "> "
22515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + requestToString(rr.mRequest) + " enable = " + enable);
22525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
22535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe
22545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
22555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.setLocationUpdates(rr.mSerial, enable);
22565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
22575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "setLocationUpdates", e);
22585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
22595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
22600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
22610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
22620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override
22635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void setCdmaSubscriptionSource(int cdmaSubscription , Message result) {
22645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
22655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
22665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_CDMA_SET_SUBSCRIPTION_SOURCE, result,
22675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
22680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
22695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) {
22705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
22715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + " cdmaSubscription = " + cdmaSubscription);
22725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
22730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
22745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
22755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.setCdmaSubscriptionSource(rr.mSerial, cdmaSubscription);
22765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
22775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "setCdmaSubscriptionSource", e);
22785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
22795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
22805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    }
22810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
22825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    @Override
22835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void queryCdmaRoamingPreference(Message result) {
22845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
22855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
22865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_CDMA_QUERY_ROAMING_PREFERENCE, result,
22875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
22880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
22895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
22900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
22915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
22925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.getCdmaRoamingPreference(rr.mSerial);
22935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
22945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "queryCdmaRoamingPreference", e);
22955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
22965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
22970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
22980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
22990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override
23005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void setCdmaRoamingPreference(int cdmaRoamingType, Message result) {
23015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
23025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
23035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_CDMA_SET_ROAMING_PREFERENCE, result,
23045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
23055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe
23065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) {
23075fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
23085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + " cdmaRoamingType = " + cdmaRoamingType);
23095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
23105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe
23115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
23125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.setCdmaRoamingPreference(rr.mSerial, cdmaRoamingType);
23135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
23145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "setCdmaRoamingPreference", e);
23155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
23165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
23170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
23180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
23190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override
23205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void queryTTYMode(Message result) {
23215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
23225fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
23235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_QUERY_TTY_MODE, result,
23245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
23250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
23265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
23270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
23285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
23295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.getTTYMode(rr.mSerial);
23305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
23315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "queryTTYMode", e);
23325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
23335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
23345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    }
23350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
23365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    @Override
23375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void setTTYMode(int ttyMode, Message result) {
23385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
23395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
23405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_SET_TTY_MODE, result,
23415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
23420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
23435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) {
23445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
23455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + " ttyMode = " + ttyMode);
23465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
23470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
23485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
23495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.setTTYMode(rr.mSerial, ttyMode);
23505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
23515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "setTTYMode", e);
23525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
23535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
23540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
23550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2356cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
23575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void setPreferredVoicePrivacy(boolean enable, Message result) {
23585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
23595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
23605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_CDMA_SET_PREFERRED_VOICE_PRIVACY_MODE, result,
23615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
23620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
23635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) {
23645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
23655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + " enable = " + enable);
23665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
23670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
23685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
23695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.setPreferredVoicePrivacy(rr.mSerial, enable);
23705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
23715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "setPreferredVoicePrivacy", e);
23725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
23735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
23740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
23750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2376cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
23775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void getPreferredVoicePrivacy(Message result) {
23785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
23795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
23805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_CDMA_QUERY_PREFERRED_VOICE_PRIVACY_MODE,
23815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    result, mRILDefaultWorkSource);
23820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
23835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
23840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
23855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
23865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.getPreferredVoicePrivacy(rr.mSerial);
23875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
23885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "getPreferredVoicePrivacy", e);
23895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
23905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
23910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
23920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2393cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
23945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void sendCDMAFeatureCode(String featureCode, Message result) {
23955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
23965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
23975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_CDMA_FLASH, result,
23985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
23990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
24005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) {
24015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
24025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + " featureCode = " + featureCode);
24035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
24040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
24055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
24065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.sendCDMAFeatureCode(rr.mSerial, convertNullToEmptyString(featureCode));
24075fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
24085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "sendCDMAFeatureCode", e);
24095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
24105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
24110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
24120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2413cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
24145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void sendBurstDtmf(String dtmfString, int on, int off, Message result) {
24155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
24165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
24175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_CDMA_BURST_DTMF, result,
24185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
24190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
24205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) {
24215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
24225fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + " dtmfString = " + dtmfString + " on = " + on + " off = " + off);
24235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
24240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
24255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
24265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.sendBurstDtmf(rr.mSerial, convertNullToEmptyString(dtmfString), on, off);
24275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
24285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "sendBurstDtmf", e);
24295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
24305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
24315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    }
24320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
24335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    private void constructCdmaSendSmsRilRequest(CdmaSmsMessage msg, byte[] pdu) {
24345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        int addrNbrOfDigits;
24355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        int subaddrNbrOfDigits;
24365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        int bearerDataLength;
24375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        ByteArrayInputStream bais = new ByteArrayInputStream(pdu);
24385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        DataInputStream dis = new DataInputStream(bais);
24395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe
24405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        try {
24415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            msg.teleserviceId = dis.readInt(); // teleServiceId
24425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            msg.isServicePresent = (byte) dis.readInt() == 1 ? true : false; // servicePresent
24435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            msg.serviceCategory = dis.readInt(); // serviceCategory
24445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            msg.address.digitMode = dis.read();  // address digit mode
24455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            msg.address.numberMode = dis.read(); // address number mode
24465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            msg.address.numberType = dis.read(); // address number type
24475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            msg.address.numberPlan = dis.read(); // address number plan
24485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            addrNbrOfDigits = (byte) dis.read();
24495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            for (int i = 0; i < addrNbrOfDigits; i++) {
24505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                msg.address.digits.add(dis.readByte()); // address_orig_bytes[i]
24515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
24525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            msg.subAddress.subaddressType = dis.read(); //subaddressType
24535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            msg.subAddress.odd = (byte) dis.read() == 1 ? true : false; //subaddr odd
24545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            subaddrNbrOfDigits = (byte) dis.read();
24555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            for (int i = 0; i < subaddrNbrOfDigits; i++) {
24565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                msg.subAddress.digits.add(dis.readByte()); //subaddr_orig_bytes[i]
24575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
24580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
24595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            bearerDataLength = dis.read();
24605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            for (int i = 0; i < bearerDataLength; i++) {
24615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                msg.bearerData.add(dis.readByte()); //bearerData[i]
24625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
24635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        } catch (IOException ex) {
24645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) {
24655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog("sendSmsCdma: conversion from input stream to object failed: "
24665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + ex);
24675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
24685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
24690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
24700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2471cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
24725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void sendCdmaSms(byte[] pdu, Message result) {
24735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
24745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
24755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_CDMA_SEND_SMS, result,
24765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
24770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
24785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            // Do not log function arg for privacy
24795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
24800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
24815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            CdmaSmsMessage msg = new CdmaSmsMessage();
24825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            constructCdmaSendSmsRilRequest(msg, pdu);
24830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
24845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
24855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.sendCdmaSms(rr.mSerial, msg);
24865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                mMetrics.writeRilSendSms(mPhoneId, rr.mSerial, SmsSession.Event.Tech.SMS_CDMA,
24875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        SmsSession.Event.Format.SMS_FORMAT_3GPP2);
24885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
24895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "sendCdmaSms", e);
24905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
24915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
24920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
24930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2494cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
24955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void acknowledgeLastIncomingCdmaSms(boolean success, int cause, Message result) {
24965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
24975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
24985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_CDMA_SMS_ACKNOWLEDGE, result,
24995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
25000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
25015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) {
25025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
25035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + " success = " + success + " cause = " + cause);
25045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
25050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
25065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            CdmaSmsAck msg = new CdmaSmsAck();
25075fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            msg.errorClass = success ? 0 : 1;
25085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            msg.smsCauseCode = cause;
25090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
25105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
25115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.acknowledgeLastIncomingCdmaSms(rr.mSerial, msg);
25125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
25135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "acknowledgeLastIncomingCdmaSms", e);
25145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
25155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
25165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    }
25170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2518cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
25195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void getGsmBroadcastConfig(Message result) {
25205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
25215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
25225fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_GSM_GET_BROADCAST_CONFIG, result,
25235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
25240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
25255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
25260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
25275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
25285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.getGsmBroadcastConfig(rr.mSerial);
25295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
25305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "getGsmBroadcastConfig", e);
25315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
25325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
25330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
25340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2535cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
25365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void setGsmBroadcastConfig(SmsBroadcastConfigInfo[] config, Message result) {
25375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
25385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
25395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_GSM_SET_BROADCAST_CONFIG, result,
25405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
25410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
25425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) {
25435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
25445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + " with " + config.length + " configs : ");
25455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                for (int i = 0; i < config.length; i++) {
25465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    riljLog(config[i].toString());
25475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                }
25485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
25490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
25505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            ArrayList<GsmBroadcastSmsConfigInfo> configs = new ArrayList<>();
25510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
25525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            int numOfConfig = config.length;
25535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            GsmBroadcastSmsConfigInfo info;
25540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
25555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            for (int i = 0; i < numOfConfig; i++) {
25565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                info = new GsmBroadcastSmsConfigInfo();
25575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                info.fromServiceId = config[i].getFromServiceId();
25585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                info.toServiceId = config[i].getToServiceId();
25595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                info.fromCodeScheme = config[i].getFromCodeScheme();
25605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                info.toCodeScheme = config[i].getToCodeScheme();
25615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                info.selected = config[i].isSelected();
25625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                configs.add(info);
25635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
25640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
25655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
25665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.setGsmBroadcastConfig(rr.mSerial, configs);
25675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
25685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "setGsmBroadcastConfig", e);
25695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
25705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
25710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
25720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2573cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
25745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void setGsmBroadcastActivation(boolean activate, Message result) {
25755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
25765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
25775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_GSM_BROADCAST_ACTIVATION, result,
25785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
25790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
25805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) {
25815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
25825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + " activate = " + activate);
25835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
25840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
25855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
25865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.setGsmBroadcastActivation(rr.mSerial, activate);
25875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
25885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "setGsmBroadcastActivation", e);
25895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
25905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
25910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
25920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2593cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
25945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void getCdmaBroadcastConfig(Message result) {
25955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
25965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
25975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_CDMA_GET_BROADCAST_CONFIG, result,
25985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
25990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
26005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
26010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
26025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
26035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.getCdmaBroadcastConfig(rr.mSerial);
26045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
26055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "getCdmaBroadcastConfig", e);
26065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
26075fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
26080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
26090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
26100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override
26115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void setCdmaBroadcastConfig(CdmaSmsBroadcastConfigInfo[] configs, Message result) {
26125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
26135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
26145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_CDMA_SET_BROADCAST_CONFIG, result,
26155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
26160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
26175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            ArrayList<CdmaBroadcastSmsConfigInfo> halConfigs = new ArrayList<>();
26180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2619cb192e90e2692e094b8d9cef4e52c36af5777681Amit Mahajan            for (CdmaSmsBroadcastConfigInfo config: configs) {
2620cb192e90e2692e094b8d9cef4e52c36af5777681Amit Mahajan                for (int i = config.getFromServiceCategory();
2621cb192e90e2692e094b8d9cef4e52c36af5777681Amit Mahajan                        i <= config.getToServiceCategory();
2622cb192e90e2692e094b8d9cef4e52c36af5777681Amit Mahajan                        i++) {
2623cb192e90e2692e094b8d9cef4e52c36af5777681Amit Mahajan                    CdmaBroadcastSmsConfigInfo info = new CdmaBroadcastSmsConfigInfo();
2624cb192e90e2692e094b8d9cef4e52c36af5777681Amit Mahajan                    info.serviceCategory = i;
2625cb192e90e2692e094b8d9cef4e52c36af5777681Amit Mahajan                    info.language = config.getLanguage();
2626cb192e90e2692e094b8d9cef4e52c36af5777681Amit Mahajan                    info.selected = config.isSelected();
2627cb192e90e2692e094b8d9cef4e52c36af5777681Amit Mahajan                    halConfigs.add(info);
2628cb192e90e2692e094b8d9cef4e52c36af5777681Amit Mahajan                }
2629cb192e90e2692e094b8d9cef4e52c36af5777681Amit Mahajan            }
26300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2631cb192e90e2692e094b8d9cef4e52c36af5777681Amit Mahajan            if (RILJ_LOGD) {
2632cb192e90e2692e094b8d9cef4e52c36af5777681Amit Mahajan                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
2633cb192e90e2692e094b8d9cef4e52c36af5777681Amit Mahajan                        + " with " + halConfigs.size() + " configs : ");
2634cb192e90e2692e094b8d9cef4e52c36af5777681Amit Mahajan                for (CdmaBroadcastSmsConfigInfo config : halConfigs) {
2635cb192e90e2692e094b8d9cef4e52c36af5777681Amit Mahajan                    riljLog(config.toString());
2636cb192e90e2692e094b8d9cef4e52c36af5777681Amit Mahajan                }
26375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
26389746fca2d7389f0fce6d5d031d87acd87b9de723Pavel Zhamaitsiak
26395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
26405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.setCdmaBroadcastConfig(rr.mSerial, halConfigs);
26415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
26425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "setCdmaBroadcastConfig", e);
26435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
26445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
26450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
26460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2647cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
26485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void setCdmaBroadcastActivation(boolean activate, Message result) {
26495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
26505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
26515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_CDMA_BROADCAST_ACTIVATION, result,
26525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
26530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
26545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) {
26555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
26565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + " activate = " + activate);
26575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
26580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
26595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
26605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.setCdmaBroadcastActivation(rr.mSerial, activate);
26615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
26625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "setCdmaBroadcastActivation", e);
26635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
26645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
26650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
26660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2667cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
26685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void getCDMASubscription(Message result) {
26695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
26705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
26715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_CDMA_SUBSCRIPTION, result,
26725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
26730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
26745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
26750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
26765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
26775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.getCDMASubscription(rr.mSerial);
26785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
26795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "getCDMASubscription", e);
26805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
26815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
26820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
26830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2684cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
26855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void writeSmsToRuim(int status, String pdu, Message result) {
26865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        status = translateStatus(status);
26875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
26885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
26895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_CDMA_WRITE_SMS_TO_RUIM, result,
26905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
26910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
26925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGV) {
26935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog(rr.serialString() + "> "
26945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + requestToString(rr.mRequest)
26955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + " status = " + status);
26965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
26970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
26985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            CdmaSmsWriteArgs args = new CdmaSmsWriteArgs();
26995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            args.status = status;
27005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            constructCdmaSendSmsRilRequest(args.message, pdu.getBytes());
27015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe
27025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
27035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.writeSmsToRuim(rr.mSerial, args);
27045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
27055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "writeSmsToRuim", e);
27065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
27075fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
27080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
27090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2710cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
27115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void deleteSmsOnRuim(int index, Message result) {
27125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
27135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
27145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_CDMA_DELETE_SMS_ON_RUIM, result,
27155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
27160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
27175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGV) {
27185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog(rr.serialString() + "> "
27195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + requestToString(rr.mRequest)
27205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + " index = " + index);
27215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
27220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
27235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
27245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.deleteSmsOnRuim(rr.mSerial, index);
27255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
27265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "deleteSmsOnRuim", e);
27275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
27285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
27290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
27300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2731cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
27325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void getDeviceIdentity(Message result) {
27335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
27345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
27355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_DEVICE_IDENTITY, result,
27365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
27370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
27385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
27390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
27405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
27415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.getDeviceIdentity(rr.mSerial);
27425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
27435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "getDeviceIdentity", e);
27445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
27455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
27460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
27470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2748cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
27495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void exitEmergencyCallbackMode(Message result) {
27505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
27515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
27525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_EXIT_EMERGENCY_CALLBACK_MODE, result,
27535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
27540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
27555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
27560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
27575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
27585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.exitEmergencyCallbackMode(rr.mSerial);
27595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
27605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "exitEmergencyCallbackMode", e);
27615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
27625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
27630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
27640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2765cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
27665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void getSmscAddress(Message result) {
27675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
27685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
27695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_GET_SMSC_ADDRESS, result,
27705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
27710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
27725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
27730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
27745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
27755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.getSmscAddress(rr.mSerial);
27765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
27775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "getSmscAddress", e);
27785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
27795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
27800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
27810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2782cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
27835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void setSmscAddress(String address, Message result) {
27845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
27855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
27865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_SET_SMSC_ADDRESS, result,
27875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
27880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
27895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) {
27905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
27915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + " address = " + address);
27925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
27930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
27945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
27955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.setSmscAddress(rr.mSerial, convertNullToEmptyString(address));
27965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
27975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "setSmscAddress", e);
27985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
27995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
28000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
28010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2802cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
28035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void reportSmsMemoryStatus(boolean available, Message result) {
28045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
28055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
28065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_REPORT_SMS_MEMORY_STATUS, result,
28075fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
28080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
28095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) {
28105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog(rr.serialString() + "> "
28115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + requestToString(rr.mRequest) + " available = " + available);
28125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
28130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
28145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
28155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.reportSmsMemoryStatus(rr.mSerial, available);
28165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
28175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "reportSmsMemoryStatus", e);
28180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
28190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
28200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
28210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2822cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
28235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void reportStkServiceIsRunning(Message result) {
2824522fc0602d60895881b33243030dd40d5778e4a9Amit Mahajan        IRadio radioProxy = getRadioProxy(result);
2825522fc0602d60895881b33243030dd40d5778e4a9Amit Mahajan        if (radioProxy != null) {
2826522fc0602d60895881b33243030dd40d5778e4a9Amit Mahajan            RILRequest rr = obtainRequest(RIL_REQUEST_REPORT_STK_SERVICE_IS_RUNNING, result,
2827522fc0602d60895881b33243030dd40d5778e4a9Amit Mahajan                    mRILDefaultWorkSource);
28280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2829522fc0602d60895881b33243030dd40d5778e4a9Amit Mahajan            if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
28300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2831522fc0602d60895881b33243030dd40d5778e4a9Amit Mahajan            try {
2832522fc0602d60895881b33243030dd40d5778e4a9Amit Mahajan                radioProxy.reportStkServiceIsRunning(rr.mSerial);
2833522fc0602d60895881b33243030dd40d5778e4a9Amit Mahajan            } catch (RemoteException | RuntimeException e) {
2834522fc0602d60895881b33243030dd40d5778e4a9Amit Mahajan                handleRadioProxyExceptionForRR(rr, "reportStkServiceIsRunning", e);
2835522fc0602d60895881b33243030dd40d5778e4a9Amit Mahajan            }
2836522fc0602d60895881b33243030dd40d5778e4a9Amit Mahajan        }
28370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
28380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
28395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    @Override
28405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void getCdmaSubscriptionSource(Message result) {
28415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
28425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
28435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_CDMA_GET_SUBSCRIPTION_SOURCE, result,
28445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
28450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
28465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
28475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe
28485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
28495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.getCdmaSubscriptionSource(rr.mSerial);
28505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
28515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "getCdmaSubscriptionSource", e);
285280795c239d6281db5fbf0f5a23494bfa3fb938f5Jeff Brown            }
285380795c239d6281db5fbf0f5a23494bfa3fb938f5Jeff Brown        }
285480795c239d6281db5fbf0f5a23494bfa3fb938f5Jeff Brown    }
285580795c239d6281db5fbf0f5a23494bfa3fb938f5Jeff Brown
28565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    @Override
28575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void requestIsimAuthentication(String nonce, Message result) {
28585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
28595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
28605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_ISIM_AUTHENTICATION, result,
28615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
28620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
28635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) {
28645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
28655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + " nonce = " + nonce);
28665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
28670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
28685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
28695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.requestIsimAuthentication(rr.mSerial, convertNullToEmptyString(nonce));
28705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
28715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "requestIsimAuthentication", e);
28725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
28735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
28740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
28750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2876cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
28775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void acknowledgeIncomingGsmSmsWithPdu(boolean success, String ackPdu, Message result) {
28785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
28795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
28805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_ACKNOWLEDGE_INCOMING_GSM_SMS_WITH_PDU, result,
28815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
28820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
28835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) {
28845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
28855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + " success = " + success);
28865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
2887d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe
28885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
28895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.acknowledgeIncomingGsmSmsWithPdu(rr.mSerial, success,
28905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        convertNullToEmptyString(ackPdu));
28915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
28925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "acknowledgeIncomingGsmSmsWithPdu", e);
2893d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe            }
2894c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan        }
2895c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan    }
28960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
28975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    @Override
28985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void getVoiceRadioTechnology(Message result) {
28995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
29005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
29015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_VOICE_RADIO_TECH, result,
29025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
2903c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan
29045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
2905c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan
29065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
29075fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.getVoiceRadioTechnology(rr.mSerial);
29085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
29095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "getVoiceRadioTechnology", e);
2910c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan            }
2911d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe        }
29125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    }
2913c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan
29145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    @Override
29155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void getCellInfoList(Message result, WorkSource workSource) {
29165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        workSource = getDeafultWorkSourceIfInvalid(workSource);
2917a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan        IRadio radioProxy = getRadioProxy(result);
2918a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan        if (radioProxy != null) {
2919a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan            RILRequest rr = obtainRequest(RIL_REQUEST_GET_CELL_INFO_LIST, result,
2920a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan                    workSource);
2921c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan
2922a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan            if (RILJ_LOGD) {
2923a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
2924a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan            }
2925d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe
2926a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan            try {
2927a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan                radioProxy.getCellInfoList(rr.mSerial);
2928a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan            } catch (RemoteException | RuntimeException e) {
2929a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan                handleRadioProxyExceptionForRR(rr, "getCellInfoList", e);
2930a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan            }
2931a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan        }
29320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
29330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
29345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    @Override
29355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void setCellInfoListRate(int rateInMillis, Message result, WorkSource workSource) {
29365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        workSource = getDeafultWorkSourceIfInvalid(workSource);
29375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
29385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
29395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_SET_UNSOL_CELL_INFO_LIST_RATE, result,
29405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    workSource);
29415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe
2942d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe            if (RILJ_LOGD) {
29435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
29445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + " rateInMillis = " + rateInMillis);
2945d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe            }
29465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe
29475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
29485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.setCellInfoListRate(rr.mSerial, rateInMillis);
29495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
29505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "setCellInfoListRate", e);
2951c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan            }
2952c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan        }
2953c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan    }
2954c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan
29555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    void setCellInfoListRate() {
29565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        setCellInfoListRate(Integer.MAX_VALUE, null, mRILDefaultWorkSource);
29575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    }
29585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe
29595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    @Override
29608e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu    public void setInitialAttachApn(DataProfile dataProfile, boolean isRoaming, Message result) {
29618e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu
29625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
2963d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe        if (radioProxy != null) {
29645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_SET_INITIAL_ATTACH_APN, result,
29655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
29665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe
29675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) {
29688e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + dataProfile);
29695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
29705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe
2971d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe            try {
29728e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu                radioProxy.setInitialAttachApn(rr.mSerial, convertToHalDataProfile(dataProfile),
29738e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu                        dataProfile.modemCognitive, isRoaming);
29740012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan            } catch (RemoteException | RuntimeException e) {
29755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "setInitialAttachApn", e);
2976d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe            }
2977d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe        }
29788e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindran    }
29798e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindran
29805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    @Override
29815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void getImsRegistrationState(Message result) {
29825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
29835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
29845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_IMS_REGISTRATION_STATE, result,
29855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
29860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
29875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) {
29885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
2989a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe            }
29900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
29915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
29925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.getImsRegistrationState(rr.mSerial);
29935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
29945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "getImsRegistrationState", e);
29955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
29965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
29975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    }
29988e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindran
29995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    @Override
30005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void sendImsGsmSms(String smscPdu, String pdu, int retry, int messageRef,
30015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                   Message result) {
30025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
30035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
30045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_IMS_SEND_SMS, result,
30055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
30068e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindran
30075fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            // Do not log function args for privacy
30085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
300932c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold
30105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            ImsSmsMessage msg = new ImsSmsMessage();
30115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            msg.tech = RILConstants.GSM_PHONE;
30125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            msg.retry = (byte) retry == 1 ? true : false;
30135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            msg.messageRef = messageRef;
301432c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold
30155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            GsmSmsMessage gsmMsg = constructGsmSendSmsRilRequest(smscPdu, pdu);
30165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            msg.gsmMessage.add(gsmMsg);
30175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
30185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.sendImsSms(rr.mSerial, msg);
30195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                mMetrics.writeRilSendSms(mPhoneId, rr.mSerial, SmsSession.Event.Tech.SMS_IMS,
30205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        SmsSession.Event.Format.SMS_FORMAT_3GPP);
30215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
30225fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "sendImsGsmSms", e);
3023a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe            }
30240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
30250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
30260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
30275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    @Override
30285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void sendImsCdmaSms(byte[] pdu, int retry, int messageRef, Message result) {
30295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
30305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
30315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_IMS_SEND_SMS, result,
30325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
30338e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindran
30345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            // Do not log function args for privacy
30355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
30365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe
30375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            ImsSmsMessage msg = new ImsSmsMessage();
30385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            msg.tech = RILConstants.CDMA_PHONE;
30395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            msg.retry = (byte) retry == 1 ? true : false;
30405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            msg.messageRef = messageRef;
30415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe
30425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            CdmaSmsMessage cdmaMsg = new CdmaSmsMessage();
30435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            constructCdmaSendSmsRilRequest(cdmaMsg, pdu);
30445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            msg.cdmaMessage.add(cdmaMsg);
30455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe
30465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
30475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.sendImsSms(rr.mSerial, msg);
30485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                mMetrics.writeRilSendSms(mPhoneId, rr.mSerial, SmsSession.Event.Tech.SMS_IMS,
30495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        SmsSession.Event.Format.SMS_FORMAT_3GPP);
30505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
30515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "sendImsCdmaSms", e);
30520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
30530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
30540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
30550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
30565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    private SimApdu createSimApdu(int channel, int cla, int instruction, int p1, int p2, int p3,
30575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                                  String data) {
30585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        SimApdu msg = new SimApdu();
30595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        msg.sessionId = channel;
30605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        msg.cla = cla;
30615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        msg.instruction = instruction;
30625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        msg.p1 = p1;
30635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        msg.p2 = p2;
30645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        msg.p3 = p3;
30655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        msg.data = convertNullToEmptyString(data);
30665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        return msg;
30677cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt    }
30687cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt
30695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    @Override
30705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void iccTransmitApduBasicChannel(int cla, int instruction, int p1, int p2,
30715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                                            int p3, String data, Message result) {
30725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
30735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
30745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_SIM_TRANSMIT_APDU_BASIC, result,
30755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
30760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
30775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) {
30785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
30795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + " cla = " + cla + " instruction = " + instruction
30805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + " p1 = " + p1 + " p2 = " + " p3 = " + p3 + " data = " + data);
30815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
30820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
30835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            SimApdu msg = createSimApdu(0, cla, instruction, p1, p2, p3, data);
30845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
30855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.iccTransmitApduBasicChannel(rr.mSerial, msg);
30865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
30875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "iccTransmitApduBasicChannel", e);
30885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
30895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
30900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
30910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
30925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    @Override
3093c6676c9a97efb78950c8f71ca7330d0bb4b24efdAjay Nambi    public void iccOpenLogicalChannel(String aid, int p2, Message result) {
30945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
30955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
30965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_SIM_OPEN_CHANNEL, result,
30975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
30980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
30995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) {
3100c6676c9a97efb78950c8f71ca7330d0bb4b24efdAjay Nambi                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " aid = " + aid
3101c6676c9a97efb78950c8f71ca7330d0bb4b24efdAjay Nambi                        + " p2 = " + p2);
3102060a6f0ba56dde532a9b9b28d4302df86a556691Sanket Padawe            }
3103060a6f0ba56dde532a9b9b28d4302df86a556691Sanket Padawe
31045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
3105c6676c9a97efb78950c8f71ca7330d0bb4b24efdAjay Nambi                radioProxy.iccOpenLogicalChannel(rr.mSerial, convertNullToEmptyString(aid), p2);
31065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
31075fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "iccOpenLogicalChannel", e);
31087cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt            }
31090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
31100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
31110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
31125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    @Override
31135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void iccCloseLogicalChannel(int channel, Message result) {
31145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
31155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
31165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_SIM_CLOSE_CHANNEL, result,
31175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
31185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe
31195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) {
31205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " channel = "
31215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + channel);
31220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
31230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
31245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
31255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.iccCloseLogicalChannel(rr.mSerial, channel);
31265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
31275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "iccCloseLogicalChannel", e);
31280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
31290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
31300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
31310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
31325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    @Override
31335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void iccTransmitApduLogicalChannel(int channel, int cla, int instruction,
31345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                                              int p1, int p2, int p3, String data,
31355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                                              Message result) {
31365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (channel <= 0) {
31375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            throw new RuntimeException(
31385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    "Invalid channel in iccTransmitApduLogicalChannel: " + channel);
31390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
31400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
31415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
31425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
31435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_SIM_TRANSMIT_APDU_CHANNEL, result,
31445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
31450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
31465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) {
31475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " channel = "
31485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + channel + " cla = " + cla + " instruction = " + instruction
31495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + " p1 = " + p1 + " p2 = " + " p3 = " + p3 + " data = " + data);
31505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
3151d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe
31525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            SimApdu msg = createSimApdu(channel, cla, instruction, p1, p2, p3, data);
31535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe
31545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
31555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.iccTransmitApduLogicalChannel(rr.mSerial, msg);
31565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
31575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "iccTransmitApduLogicalChannel", e);
3158d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe            }
3159d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe        }
3160d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe    }
3161d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe
31625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    @Override
31635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void nvReadItem(int itemID, Message result) {
31645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
31655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
31665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_NV_READ_ITEM, result,
31675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
31680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
31695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) {
31705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
31715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + " itemId = " + itemID);
31725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
31730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
31745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
31755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.nvReadItem(rr.mSerial, itemID);
31765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
31775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "nvReadItem", e);
31785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
31790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
31805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    }
31810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
31825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    @Override
31835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void nvWriteItem(int itemId, String itemValue, Message result) {
31845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
31855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
31865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_NV_WRITE_ITEM, result,
31878e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindran                    mRILDefaultWorkSource);
31885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe
3189a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe            if (RILJ_LOGD) {
31905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
31915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + " itemId = " + itemId + " itemValue = " + itemValue);
3192a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe            }
3193060a6f0ba56dde532a9b9b28d4302df86a556691Sanket Padawe
31945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            NvWriteItem item = new NvWriteItem();
31955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            item.itemId = itemId;
31965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            item.value = convertNullToEmptyString(itemValue);
3197060a6f0ba56dde532a9b9b28d4302df86a556691Sanket Padawe
31985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
31995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.nvWriteItem(rr.mSerial, item);
32005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
32015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "nvWriteItem", e);
32025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
32035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
32045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    }
32050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
32065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    @Override
32075fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void nvWriteCdmaPrl(byte[] preferredRoamingList, Message result) {
32085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
32095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
32105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_NV_WRITE_CDMA_PRL, result,
32115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
3212d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe
32135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) {
32145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
32155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + " PreferredRoamingList = 0x"
32165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + IccUtils.bytesToHexString(preferredRoamingList));
32170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
32180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
32195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            ArrayList<Byte> arrList = new ArrayList<>();
32205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            for (int i = 0; i < preferredRoamingList.length; i++) {
32215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                arrList.add(preferredRoamingList[i]);
32225fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
32230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
32245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
32255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.nvWriteCdmaPrl(rr.mSerial, arrList);
32265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
32275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "nvWriteCdmaPrl", e);
32280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
32290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
32305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    }
32310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
32325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    @Override
32335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void nvResetConfig(int resetType, Message result) {
32345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
32355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
32365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_NV_RESET_CONFIG, result,
32375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
323803586878fb3d870373f2fdf65afb81cc5ae97067Naveen Kalla
32395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) {
32405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
32415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + " resetType = " + resetType);
3242f860a3f42f87c9c8572623aff33349168d689477Wink Saville            }
3243f860a3f42f87c9c8572623aff33349168d689477Wink Saville
32445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
3245e16769120c06f1ea7e4e22d85b39d7c33c925697Jayachandran C                radioProxy.nvResetConfig(rr.mSerial, convertToHalResetNvType(resetType));
32465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
32475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "nvResetConfig", e);
32487cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt            }
32490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
32505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    }
32515054dfa7fd9b0520d30a102ed5a2107af11590c8Pavel Zhamaitsiak
32525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    @Override
32535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void setUiccSubscription(int slotId, int appIndex, int subId,
32545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                                    int subStatus, Message result) {
32555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
32565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
32575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_SET_UICC_SUBSCRIPTION, result,
32585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
32595054dfa7fd9b0520d30a102ed5a2107af11590c8Pavel Zhamaitsiak
32605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) {
32615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
32625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + " slot = " + slotId + " appIndex = " + appIndex
32635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + " subId = " + subId + " subStatus = " + subStatus);
32645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
32650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
32665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            SelectUiccSub info = new SelectUiccSub();
32675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            info.slot = slotId;
32685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            info.appIndex = appIndex;
32695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            info.subType = subId;
32705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            info.actStatus = subStatus;
32713ad0c75dac907e8490b78d6fd8c0278d28b96f84Robert Greenwalt
32725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
32735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.setUiccSubscription(rr.mSerial, info);
32745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
32755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "setUiccSubscription", e);
32765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
32773ad0c75dac907e8490b78d6fd8c0278d28b96f84Robert Greenwalt        }
32783ad0c75dac907e8490b78d6fd8c0278d28b96f84Robert Greenwalt    }
32793ad0c75dac907e8490b78d6fd8c0278d28b96f84Robert Greenwalt
32805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    @Override
32815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void setDataAllowed(boolean allowed, Message result) {
32825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
32835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
32845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_ALLOW_DATA, result,
32855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
32860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
32875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) {
32885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
32895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + " allowed = " + allowed);
32900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
32915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe
32925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
32935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.setDataAllowed(rr.mSerial, allowed);
32945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
32955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "setDataAllowed", e);
3296a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville            }
32970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
32980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
32990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
33005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    @Override
33015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void
33025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    getHardwareConfig (Message result) {
3303a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan        IRadio radioProxy = getRadioProxy(result);
3304a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan        if (radioProxy != null) {
3305a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan            RILRequest rr = obtainRequest(RIL_REQUEST_GET_HARDWARE_CONFIG, result,
3306a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan                    mRILDefaultWorkSource);
3307e7c29ee85e324289d247d6e28a8c1a216c3658c4Amit Mahajan
3308a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan            // Do not log function args for privacy
3309a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan            if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
3310e7c29ee85e324289d247d6e28a8c1a216c3658c4Amit Mahajan
3311a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan            try {
3312a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan                radioProxy.getHardwareConfig(rr.mSerial);
3313a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan            } catch (RemoteException | RuntimeException e) {
3314a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan                handleRadioProxyExceptionForRR(rr, "getHardwareConfig", e);
3315a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan            }
3316a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan        }
331721c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan    }
33181bb5864a6f2047b41da9ba6551ee4acfec4d7dd1Naveen Kalla
33195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    @Override
33205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void requestIccSimAuthentication(int authContext, String data, String aid,
33215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                                            Message result) {
33225fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
33235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
33245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_SIM_AUTHENTICATION, result,
33255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
33260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
33275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            // Do not log function args for privacy
33285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
33295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe
33305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
33315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.requestIccSimAuthentication(rr.mSerial,
33325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        authContext,
33335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        convertNullToEmptyString(data),
33345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        convertNullToEmptyString(aid));
33355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
33365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "requestIccSimAuthentication", e);
33375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
33380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
33390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
33400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
33415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    @Override
33428e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu    public void setDataProfile(DataProfile[] dps, boolean isRoaming, Message result) {
33438e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu
33445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
33455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
33465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_SET_DATA_PROFILE, result,
33475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
33480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
33495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) {
33505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
33518e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu                        + " with data profiles : ");
33528e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu                for (DataProfile profile : dps) {
33538e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu                    riljLog(profile.toString());
33545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                }
33555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
33560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
33578e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu            ArrayList<DataProfileInfo> dpis = new ArrayList<>();
33588e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu            for (DataProfile dp : dps) {
33598e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu                dpis.add(convertToHalDataProfile(dp));
33605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
33610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
33625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
33638e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu                radioProxy.setDataProfile(rr.mSerial, dpis, isRoaming);
33645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
33655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "setDataProfile", e);
33665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
336733cfb500a7cf192adfc5ca06792fe3847073b6c1Chao Liu        }
33680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
33690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
33705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    @Override
33715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void requestShutdown(Message result) {
33725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
33735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
33745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_SHUTDOWN, result,
33755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
33760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
33775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) {
33785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
33795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
33800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
33815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
33825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.requestShutdown(rr.mSerial);
33835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
33845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "requestShutdown", e);
33855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
33860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
33870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
33880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
33895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    @Override
33905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void getRadioCapability(Message response) {
3391a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan        IRadio radioProxy = getRadioProxy(response);
3392a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan        if (radioProxy != null) {
3393a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan            RILRequest rr = obtainRequest(RIL_REQUEST_GET_RADIO_CAPABILITY, response,
3394a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan                    mRILDefaultWorkSource);
33950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3396a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan            if (RILJ_LOGD) {
3397a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
3398a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan            }
33990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3400a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan            try {
3401a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan                radioProxy.getRadioCapability(rr.mSerial);
3402a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan            } catch (RemoteException | RuntimeException e) {
3403a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan                handleRadioProxyExceptionForRR(rr, "getRadioCapability", e);
3404a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan            }
3405a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan        }
34060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
34070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
34085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    @Override
34095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void setRadioCapability(RadioCapability rc, Message response) {
3410a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan        IRadio radioProxy = getRadioProxy(response);
3411a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan        if (radioProxy != null) {
3412a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan            RILRequest rr = obtainRequest(RIL_REQUEST_SET_RADIO_CAPABILITY, response,
3413a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan                    mRILDefaultWorkSource);
34140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3415a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan            if (RILJ_LOGD) {
3416a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
3417a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan                        + " RadioCapability = " + rc.toString());
3418a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan            }
34190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3420a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan            android.hardware.radio.V1_0.RadioCapability halRc =
3421a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan                    new android.hardware.radio.V1_0.RadioCapability();
342271173a876ff48d65e013f0a92e920d90fa7a26c7Sanket Padawe
3423a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan            halRc.session = rc.getSession();
3424a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan            halRc.phase = rc.getPhase();
3425a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan            halRc.raf = rc.getRadioAccessFamily();
3426a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan            halRc.logicalModemUuid = convertNullToEmptyString(rc.getLogicalModemUuid());
3427a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan            halRc.status = rc.getStatus();
3428a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan
3429a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan            try {
3430a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan                radioProxy.setRadioCapability(rr.mSerial, halRc);
3431a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan            } catch (Exception e) {
3432a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan                handleRadioProxyExceptionForRR(rr, "setRadioCapability", e);
3433a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan            }
3434a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan        }
34350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
34360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
34375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    @Override
34385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void startLceService(int reportIntervalMs, boolean pullMode, Message result) {
34395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
34405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
34415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_START_LCE, result,
34425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
34430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
34445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) {
34455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
34465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + " reportIntervalMs = " + reportIntervalMs + " pullMode = " + pullMode);
34475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
34480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
34495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
34505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.startLceService(rr.mSerial, reportIntervalMs, pullMode);
34515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
34525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "startLceService", e);
34535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
34545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
34550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
34560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
34575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    @Override
34585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void stopLceService(Message result) {
34595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
34605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
34615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_STOP_LCE, result,
34625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
34630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
34645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) {
34655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
34665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
34670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
34685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
34695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.stopLceService(rr.mSerial);
34705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
34715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "stopLceService", e);
34725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
34735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
34740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
34750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
34765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    @Override
34775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void pullLceData(Message response) {
3478a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan        IRadio radioProxy = getRadioProxy(response);
3479a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan        if (radioProxy != null) {
3480a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan            RILRequest rr = obtainRequest(RIL_REQUEST_PULL_LCEDATA, response,
3481a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan                    mRILDefaultWorkSource);
3482a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan
3483a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan            if (RILJ_LOGD) {
3484a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
3485a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan            }
3486a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan
3487a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan            try {
3488a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan                radioProxy.pullLceData(rr.mSerial);
3489a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan            } catch (RemoteException | RuntimeException e) {
3490a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan                handleRadioProxyExceptionForRR(rr, "pullLceData", e);
3491a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan            }
34925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
34930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
34940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
34955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    @Override
34965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void getModemActivityInfo(Message result) {
34975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
34985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
34995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_GET_ACTIVITY_INFO, result,
35005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
3501cf916cfb2b4d8282def13e4553abff2ea73aca2bVinit Deshpande
35025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) {
35035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
35045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
3505cf916cfb2b4d8282def13e4553abff2ea73aca2bVinit Deshpande
35065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
35075fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.getModemActivityInfo(rr.mSerial);
3508cf916cfb2b4d8282def13e4553abff2ea73aca2bVinit Deshpande
3509d71af3fb18a6bf51e6aa346849c968fad511d610Amit Mahajan                Message msg = mRilHandler.obtainMessage(EVENT_BLOCKING_RESPONSE_TIMEOUT);
35105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                msg.obj = null;
35115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                msg.arg1 = rr.mSerial;
3512d71af3fb18a6bf51e6aa346849c968fad511d610Amit Mahajan                mRilHandler.sendMessageDelayed(msg, DEFAULT_BLOCKING_MESSAGE_RESPONSE_TIMEOUT_MS);
35135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
35145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "getModemActivityInfo", e);
35155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
35165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
3517cf916cfb2b4d8282def13e4553abff2ea73aca2bVinit Deshpande
35180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
35190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
35200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
35215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    @Override
35225fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void setAllowedCarriers(List<CarrierIdentifier> carriers, Message result) {
35233953d6e1205524261e887cea2b283d05213e61c1Sanket Padawe        checkNotNull(carriers, "Allowed carriers list cannot be null.");
35245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
35255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
35265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_SET_ALLOWED_CARRIERS, result,
35275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
35280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
35295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) {
35305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                String logStr = "";
35315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                for (int i = 0; i < carriers.size(); i++) {
35325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    logStr = logStr + carriers.get(i) + " ";
35335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                }
35345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + "carriers = "
35355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + logStr);
35360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
35375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe
35385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            boolean allAllowed;
35395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (carriers.size() == 0) {
35405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                allAllowed = true;
35415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } else {
35425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                allAllowed = false;
35430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
35445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            CarrierRestrictions carrierList = new CarrierRestrictions();
35455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe
35465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            for (CarrierIdentifier ci : carriers) { /* allowed carriers */
35475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                Carrier c = new Carrier();
35489f18938b5f973c5f6bb4409bf8941e0801c565eaAmit Mahajan                c.mcc = convertNullToEmptyString(ci.getMcc());
35499f18938b5f973c5f6bb4409bf8941e0801c565eaAmit Mahajan                c.mnc = convertNullToEmptyString(ci.getMnc());
35505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                int matchType = CarrierIdentifier.MatchType.ALL;
35515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                String matchData = null;
35525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                if (!TextUtils.isEmpty(ci.getSpn())) {
35535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    matchType = CarrierIdentifier.MatchType.SPN;
35545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    matchData = ci.getSpn();
35555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                } else if (!TextUtils.isEmpty(ci.getImsi())) {
35565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    matchType = CarrierIdentifier.MatchType.IMSI_PREFIX;
35575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    matchData = ci.getImsi();
35585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                } else if (!TextUtils.isEmpty(ci.getGid1())) {
35595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    matchType = CarrierIdentifier.MatchType.GID1;
35605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    matchData = ci.getGid1();
35615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                } else if (!TextUtils.isEmpty(ci.getGid2())) {
35625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    matchType = CarrierIdentifier.MatchType.GID2;
35635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    matchData = ci.getGid2();
35648f19c6d717bf0e00aeb33552a570a0f60af0ce3bAmit Mahajan                }
35655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                c.matchType = matchType;
35669f18938b5f973c5f6bb4409bf8941e0801c565eaAmit Mahajan                c.matchData = convertNullToEmptyString(matchData);
35675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                carrierList.allowedCarriers.add(c);
3568a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville            }
35690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
35709f18938b5f973c5f6bb4409bf8941e0801c565eaAmit Mahajan            /* TODO: add excluded carriers */
35710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
35725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
35735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.setAllowedCarriers(rr.mSerial, allAllowed, carrierList);
35745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
35755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "setAllowedCarriers", e);
35765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
35770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
35780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
35790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
35805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    @Override
35815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void getAllowedCarriers(Message result) {
35825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
35835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
35845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_GET_ALLOWED_CARRIERS, result,
35855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mRILDefaultWorkSource);
35860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
35875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) {
35885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
3589a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville            }
35905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe
35915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
35925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.getAllowedCarriers(rr.mSerial);
35935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
35945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "getAllowedCarriers", e);
35950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
35960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
35970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
35980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
35995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    @Override
3600baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu    public void sendDeviceState(int stateType, boolean state,
3601baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu                                Message result) {
3602baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu        IRadio radioProxy = getRadioProxy(result);
3603baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu        if (radioProxy != null) {
3604baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu            RILRequest rr = obtainRequest(RIL_REQUEST_SEND_DEVICE_STATE, result,
3605baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu                    mRILDefaultWorkSource);
3606baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu
3607baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu            if (RILJ_LOGD) {
3608baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " "
3609baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu                        + stateType + ":" + state);
3610baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu            }
3611baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu
3612baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu            try {
3613baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu                radioProxy.sendDeviceState(rr.mSerial, stateType, state);
3614baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu            } catch (RemoteException | RuntimeException e) {
3615baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu                handleRadioProxyExceptionForRR(rr, "sendDeviceState", e);
3616baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu            }
3617baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu        }
3618baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu    }
3619baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu
3620baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu    @Override
3621baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu    public void setUnsolResponseFilter(int filter, Message result) {
3622baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu        IRadio radioProxy = getRadioProxy(result);
3623baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu        if (radioProxy != null) {
3624baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu            RILRequest rr = obtainRequest(RIL_REQUEST_SET_UNSOLICITED_RESPONSE_FILTER, result,
3625baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu                    mRILDefaultWorkSource);
3626baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu
3627baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu            if (RILJ_LOGD) {
3628baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " " + filter);
3629baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu            }
3630baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu
3631baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu            try {
3632baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu                radioProxy.setIndicationFilter(rr.mSerial, filter);
3633baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu            } catch (RemoteException | RuntimeException e) {
3634baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu                handleRadioProxyExceptionForRR(rr, "setIndicationFilter", e);
3635baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu            }
3636baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu        }
3637baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu    }
3638baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu
3639baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu    @Override
364099607db1bc0f46e73f39d5379c590b8bcb4bf947Jack Yu    public void setSimCardPower(boolean powerUp, Message result) {
364199607db1bc0f46e73f39d5379c590b8bcb4bf947Jack Yu        IRadio radioProxy = getRadioProxy(result);
364299607db1bc0f46e73f39d5379c590b8bcb4bf947Jack Yu        if (radioProxy != null) {
364399607db1bc0f46e73f39d5379c590b8bcb4bf947Jack Yu            RILRequest rr = obtainRequest(RIL_REQUEST_SET_SIM_CARD_POWER, result,
364499607db1bc0f46e73f39d5379c590b8bcb4bf947Jack Yu                    mRILDefaultWorkSource);
364599607db1bc0f46e73f39d5379c590b8bcb4bf947Jack Yu
364699607db1bc0f46e73f39d5379c590b8bcb4bf947Jack Yu            if (RILJ_LOGD) {
3647baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " " + powerUp);
364899607db1bc0f46e73f39d5379c590b8bcb4bf947Jack Yu            }
364999607db1bc0f46e73f39d5379c590b8bcb4bf947Jack Yu
365099607db1bc0f46e73f39d5379c590b8bcb4bf947Jack Yu            try {
365199607db1bc0f46e73f39d5379c590b8bcb4bf947Jack Yu                radioProxy.setSimCardPower(rr.mSerial, powerUp);
365299607db1bc0f46e73f39d5379c590b8bcb4bf947Jack Yu            } catch (RemoteException | RuntimeException e) {
365399607db1bc0f46e73f39d5379c590b8bcb4bf947Jack Yu                handleRadioProxyExceptionForRR(rr, "setSimCardPower", e);
365499607db1bc0f46e73f39d5379c590b8bcb4bf947Jack Yu            }
365599607db1bc0f46e73f39d5379c590b8bcb4bf947Jack Yu        }
365699607db1bc0f46e73f39d5379c590b8bcb4bf947Jack Yu    }
365799607db1bc0f46e73f39d5379c590b8bcb4bf947Jack Yu
365899607db1bc0f46e73f39d5379c590b8bcb4bf947Jack Yu    @Override
36595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void getIMEI(Message result) {
3660522fc0602d60895881b33243030dd40d5778e4a9Amit Mahajan        throw new RuntimeException("getIMEI not expected to be called");
36610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
36620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
36635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    @Override
36645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void getIMEISV(Message result) {
3665522fc0602d60895881b33243030dd40d5778e4a9Amit Mahajan        throw new RuntimeException("getIMEISV not expected to be called");
36660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
36670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
36685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    /**
36695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe     * @deprecated
36705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe     */
36715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    @Deprecated
36725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    @Override
36735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void getLastPdpFailCause(Message result) {
3674522fc0602d60895881b33243030dd40d5778e4a9Amit Mahajan        throw new RuntimeException("getLastPdpFailCause not expected to be called");
36750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
36760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
36775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    /**
36785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe     * The preferred new alternative to getLastPdpFailCause
36795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe     */
36805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    @Override
36815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void getLastDataCallFailCause(Message result) {
3682522fc0602d60895881b33243030dd40d5778e4a9Amit Mahajan        throw new RuntimeException("getLastDataCallFailCause not expected to be called");
36835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    }
36845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe
36855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    /**
36865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe     *  Translates EF_SMS status bits to a status value compatible with
36875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe     *  SMS AT commands.  See TS 27.005 3.1.
36885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe     */
36895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    private int translateStatus(int status) {
36905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        switch(status & 0x7) {
36915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case SmsManager.STATUS_ON_ICC_READ:
36925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return 1;
36935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case SmsManager.STATUS_ON_ICC_UNREAD:
36945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return 0;
36955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case SmsManager.STATUS_ON_ICC_SENT:
36965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return 3;
36975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case SmsManager.STATUS_ON_ICC_UNSENT:
36985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return 2;
36990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
37005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe
37015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        // Default to READ.
37025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        return 1;
37030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
37040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
37055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    @Override
37065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void resetRadio(Message result) {
3707522fc0602d60895881b33243030dd40d5778e4a9Amit Mahajan        throw new RuntimeException("resetRadio not expected to be called");
37085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    }
37095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe
37105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    /**
37115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe     * {@inheritDoc}
37125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe     */
37135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    @Override
37145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void handleCallSetupRequestFromSim(boolean accept, Message result) {
37155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(result);
37165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
37175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            RILRequest rr = obtainRequest(RIL_REQUEST_STK_HANDLE_CALL_SETUP_REQUESTED_FROM_SIM,
37185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    result, mRILDefaultWorkSource);
37195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe
37205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) {
37215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
37220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
37230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
37245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
37255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.handleStkCallSetupRequestFromSim(rr.mSerial, accept);
37265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
37275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                handleRadioProxyExceptionForRR(rr, "getAllowedCarriers", e);
37285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
37290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
37305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    }
37310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
37325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    //***** Private Methods
37335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe
37345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    /**
37355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe     * This is a helper function to be called when a RadioIndication callback is called.
37365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe     * It takes care of acquiring wakelock and sending ack if needed.
37375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe     * @param indicationType RadioIndicationType received
37385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe     */
37395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    void processIndication(int indicationType) {
37405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (indicationType == RadioIndicationType.UNSOLICITED_ACK_EXP) {
37415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            sendAck();
37425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) riljLog("Unsol response received; Sending ack to ril.cpp");
37435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        } else {
37445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            // ack is not expected to be sent back. Nothing is required to be done here.
37455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
37465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    }
37470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
37485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    void processRequestAck(int serial) {
37495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        RILRequest rr;
37505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        synchronized (mRequestList) {
37515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            rr = mRequestList.get(serial);
37525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
37535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (rr == null) {
37545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            Rlog.w(RIL.RILJ_LOG_TAG, "processRequestAck: Unexpected solicited ack response! "
37555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    + "serial: " + serial);
37565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        } else {
37575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            decrementWakeLock(rr);
37585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RIL.RILJ_LOGD) {
37595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog(rr.serialString() + " Ack < " + RIL.requestToString(rr.mRequest));
37605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
37615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
37625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    }
37630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
37645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    /**
37655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe     * This is a helper function to be called when a RadioResponse callback is called.
37665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe     * It takes care of acks, wakelocks, and finds and returns RILRequest corresponding to the
37675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe     * response if one is found.
37685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe     * @param responseInfo RadioResponseInfo received in response callback
37695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe     * @return RILRequest corresponding to the response
37705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe     */
37715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    RILRequest processResponse(RadioResponseInfo responseInfo) {
37725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        int serial = responseInfo.serial;
37735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        int error = responseInfo.error;
37745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        int type = responseInfo.type;
37755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe
3776a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan        RILRequest rr = null;
3777a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan
3778a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan        if (type == RadioResponseType.SOLICITED_ACK) {
3779a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan            synchronized (mRequestList) {
3780a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan                rr = mRequestList.get(serial);
3781a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan            }
3782a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan            if (rr == null) {
3783a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan                Rlog.w(RILJ_LOG_TAG, "Unexpected solicited ack response! sn: " + serial);
3784a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan            } else {
3785a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan                decrementWakeLock(rr);
3786a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan                if (RILJ_LOGD) {
3787a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan                    riljLog(rr.serialString() + " Ack < " + requestToString(rr.mRequest));
3788a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan                }
3789a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan            }
3790a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan            return rr;
3791a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan        }
3792a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan
3793a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan        rr = findAndRemoveRequestFromList(serial);
37945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (rr == null) {
37955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            Rlog.e(RIL.RILJ_LOG_TAG, "processResponse: Unexpected response! serial: " + serial
37965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    + " error: " + error);
37975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            return null;
37980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
37990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
38005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        // Time logging for RIL command and storing it in TelephonyHistogram.
38015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        addToRilHistogram(rr);
38020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
38035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (type == RadioResponseType.SOLICITED_ACK_EXP) {
38045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            sendAck();
38055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RIL.RILJ_LOGD) {
38065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog("Response received for " + rr.serialString() + " "
38075fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + RIL.requestToString(rr.mRequest) + " Sending ack to ril.cpp");
38080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
38095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        } else {
38105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            // ack sent for SOLICITED_ACK_EXP above; nothing to do for SOLICITED response
38115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
38125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe
38135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        // Here and below fake RIL_UNSOL_RESPONSE_SIM_STATUS_CHANGED, see b/7255789.
38145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        // This is needed otherwise we don't automatically transition to the main lock
38155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        // screen when the pin or puk is entered incorrectly.
38165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        switch (rr.mRequest) {
38175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_ENTER_SIM_PUK:
38185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_ENTER_SIM_PUK2:
38195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                if (mIccStatusChangedRegistrants != null) {
38205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    if (RILJ_LOGD) {
38215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        riljLog("ON enter sim puk fakeSimStatusChanged: reg count="
38225fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                                + mIccStatusChangedRegistrants.size());
38235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    }
38245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    mIccStatusChangedRegistrants.notifyRegistrants();
38255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                }
38265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                break;
38275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_SHUTDOWN:
38285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                setRadioState(RadioState.RADIO_UNAVAILABLE);
38295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                break;
38305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
38315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe
38325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (error != RadioError.NONE) {
38335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            switch (rr.mRequest) {
38345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                case RIL_REQUEST_ENTER_SIM_PIN:
38355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                case RIL_REQUEST_ENTER_SIM_PIN2:
38365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                case RIL_REQUEST_CHANGE_SIM_PIN:
38375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                case RIL_REQUEST_CHANGE_SIM_PIN2:
38385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                case RIL_REQUEST_SET_FACILITY_LOCK:
38395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    if (mIccStatusChangedRegistrants != null) {
38405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        if (RILJ_LOGD) {
38415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                            riljLog("ON some errors fakeSimStatusChanged: reg count="
38425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                                    + mIccStatusChangedRegistrants.size());
38435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        }
38445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        mIccStatusChangedRegistrants.notifyRegistrants();
38455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    }
38465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    break;
38475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe
38480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
38495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        } else {
38505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            switch (rr.mRequest) {
38515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                case RIL_REQUEST_HANGUP_FOREGROUND_RESUME_BACKGROUND:
38525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                if (mTestingEmergencyCall.getAndSet(false)) {
38535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    if (mEmergencyCallbackModeRegistrant != null) {
38545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        riljLog("testing emergency call, notify ECM Registrants");
38555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        mEmergencyCallbackModeRegistrant.notifyRegistrant();
38565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    }
38575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                }
38580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
38595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
38605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        return rr;
38615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    }
38625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe
38635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    /**
38645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe     * This is a helper function to be called at the end of all RadioResponse callbacks.
38655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe     * It takes care of sending error response, logging, decrementing wakelock if needed, and
38665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe     * releases the request from memory pool.
38675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe     * @param rr RILRequest for which response callback was called
38685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe     * @param responseInfo RadioResponseInfo received in the callback
38695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe     * @param ret object to be returned to request sender
38705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe     */
38715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    void processResponseDone(RILRequest rr, RadioResponseInfo responseInfo, Object ret) {
38725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (responseInfo.error == 0) {
38735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) {
38745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog(rr.serialString() + "< " + requestToString(rr.mRequest)
38755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + " " + retToString(rr.mRequest, ret));
38760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
38775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        } else {
38785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD) {
38795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                riljLog(rr.serialString() + "< " + requestToString(rr.mRequest)
38805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + " error " + responseInfo.error);
38810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
38825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            rr.onError(responseInfo.error, ret);
38835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
38845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        mMetrics.writeOnRilSolicitedResponse(mPhoneId, rr.mSerial, responseInfo.error,
38855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                rr.mRequest, ret);
38865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (rr != null) {
38875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (responseInfo.type == RadioResponseType.SOLICITED) {
38885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                decrementWakeLock(rr);
38890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
38905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            rr.release();
38915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
38925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    }
38935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe
38945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    /**
38955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe     * Function to send ack and acquire related wakelock
38965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe     */
38975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    private void sendAck() {
38985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        // TODO: Remove rr and clean up acquireWakelock for response and ack
38995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        RILRequest rr = RILRequest.obtain(RIL_RESPONSE_ACKNOWLEDGEMENT, null,
39005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                mRILDefaultWorkSource);
39015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        acquireWakeLock(rr, RIL.FOR_ACK_WAKELOCK);
39025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        IRadio radioProxy = getRadioProxy(null);
39035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (radioProxy != null) {
39045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            try {
39055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                radioProxy.responseAcknowledgement();
39065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            } catch (RemoteException | RuntimeException e) {
3907c9c763417554f30c4fa51d3285a9a19893ecd399Amit Mahajan                handleRadioProxyExceptionForRR(rr, "sendAck", e);
39080d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan                riljLoge("sendAck: " + e);
39095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
39105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        } else {
39115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            Rlog.e(RILJ_LOG_TAG, "Error trying to send ack, radioProxy = null");
39125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
39135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        rr.release();
39145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    }
39155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe
39165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    private WorkSource getDeafultWorkSourceIfInvalid(WorkSource workSource) {
39175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (workSource == null) {
39185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            workSource = mRILDefaultWorkSource;
39195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
39205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe
39215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        return workSource;
39225fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    }
39235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe
39245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    private String getWorkSourceClientId(WorkSource workSource) {
39255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (workSource != null) {
39265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            return String.valueOf(workSource.get(0)) + ":" + workSource.getName(0);
39275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
39285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe
39295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        return null;
39305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    }
39315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe
39325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    /**
39335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe     * Holds a PARTIAL_WAKE_LOCK whenever
39345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe     * a) There is outstanding RIL request sent to RIL deamon and no replied
39355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe     * b) There is a request pending to be sent out.
39365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe     *
39375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe     * There is a WAKE_LOCK_TIMEOUT to release the lock, though it shouldn't
39385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe     * happen often.
39395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe     */
39405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe
39415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    private void acquireWakeLock(RILRequest rr, int wakeLockType) {
39425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        synchronized (rr) {
39435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (rr.mWakeLockType != INVALID_WAKELOCK) {
39445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                Rlog.d(RILJ_LOG_TAG, "Failed to aquire wakelock for " + rr.serialString());
39455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return;
39465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
39475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe
39485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            switch(wakeLockType) {
39495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                case FOR_WAKELOCK:
39505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    synchronized (mWakeLock) {
39515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        mWakeLock.acquire();
39525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        mWakeLockCount++;
39535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        mWlSequenceNum++;
39545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe
39555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        String clientId = getWorkSourceClientId(rr.mWorkSource);
39565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        if (!mClientWakelockTracker.isClientActive(clientId)) {
39575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                            if (mActiveWakelockWorkSource != null) {
39585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                                mActiveWakelockWorkSource.add(rr.mWorkSource);
39595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                            } else {
39605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                                mActiveWakelockWorkSource = rr.mWorkSource;
39615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                            }
39625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                            mWakeLock.setWorkSource(mActiveWakelockWorkSource);
39635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        }
39645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe
39655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        mClientWakelockTracker.startTracking(rr.mClientId,
39665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                                rr.mRequest, rr.mSerial, mWakeLockCount);
39675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe
3968d71af3fb18a6bf51e6aa346849c968fad511d610Amit Mahajan                        Message msg = mRilHandler.obtainMessage(EVENT_WAKE_LOCK_TIMEOUT);
39695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        msg.arg1 = mWlSequenceNum;
3970d71af3fb18a6bf51e6aa346849c968fad511d610Amit Mahajan                        mRilHandler.sendMessageDelayed(msg, mWakeLockTimeout);
39715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    }
39725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    break;
39735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                case FOR_ACK_WAKELOCK:
39745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    synchronized (mAckWakeLock) {
39755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        mAckWakeLock.acquire();
39765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        mAckWlSequenceNum++;
39775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe
3978d71af3fb18a6bf51e6aa346849c968fad511d610Amit Mahajan                        Message msg = mRilHandler.obtainMessage(EVENT_ACK_WAKE_LOCK_TIMEOUT);
39795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        msg.arg1 = mAckWlSequenceNum;
3980d71af3fb18a6bf51e6aa346849c968fad511d610Amit Mahajan                        mRilHandler.sendMessageDelayed(msg, mAckWakeLockTimeout);
39815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    }
39825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    break;
39835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                default: //WTF
39845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    Rlog.w(RILJ_LOG_TAG, "Acquiring Invalid Wakelock type " + wakeLockType);
39855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    return;
39865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
39875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            rr.mWakeLockType = wakeLockType;
39885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
39895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    }
39905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe
39915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    private void decrementWakeLock(RILRequest rr) {
39925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        synchronized (rr) {
39935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            switch(rr.mWakeLockType) {
39945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                case FOR_WAKELOCK:
39955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    synchronized (mWakeLock) {
39965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        mClientWakelockTracker.stopTracking(rr.mClientId,
39975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                                rr.mRequest, rr.mSerial,
39985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                                (mWakeLockCount > 1) ? mWakeLockCount - 1 : 0);
39995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        String clientId = getWorkSourceClientId(rr.mWorkSource);;
40005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        if (!mClientWakelockTracker.isClientActive(clientId)
40015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                                && (mActiveWakelockWorkSource != null)) {
40025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                            mActiveWakelockWorkSource.remove(rr.mWorkSource);
40035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                            if (mActiveWakelockWorkSource.size() == 0) {
40045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                                mActiveWakelockWorkSource = null;
40055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                            }
40065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                            mWakeLock.setWorkSource(mActiveWakelockWorkSource);
40075fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        }
40085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe
40095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        if (mWakeLockCount > 1) {
40105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                            mWakeLockCount--;
40115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        } else {
40125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                            mWakeLockCount = 0;
40135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                            mWakeLock.release();
40145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        }
40155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    }
40165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    break;
40175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                case FOR_ACK_WAKELOCK:
40185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    //We do not decrement the ACK wakelock
40195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    break;
40205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                case INVALID_WAKELOCK:
40215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    break;
40225fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                default:
40235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    Rlog.w(RILJ_LOG_TAG, "Decrementing Invalid Wakelock type " + rr.mWakeLockType);
40245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
40255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            rr.mWakeLockType = INVALID_WAKELOCK;
40265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
40275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    }
40285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe
40295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    private boolean clearWakeLock(int wakeLockType) {
40305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (wakeLockType == FOR_WAKELOCK) {
40315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            synchronized (mWakeLock) {
40325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                if (mWakeLockCount == 0 && !mWakeLock.isHeld()) return false;
40335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                Rlog.d(RILJ_LOG_TAG, "NOTE: mWakeLockCount is " + mWakeLockCount
40345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + "at time of clearing");
40355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                mWakeLockCount = 0;
40365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                mWakeLock.release();
40375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                mClientWakelockTracker.stopTrackingAll();
40385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                mActiveWakelockWorkSource = null;
40395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return true;
40405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
40415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        } else {
40425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            synchronized (mAckWakeLock) {
40435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                if (!mAckWakeLock.isHeld()) return false;
40445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                mAckWakeLock.release();
40455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return true;
40465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
40475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
40485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    }
40495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe
40505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    /**
40515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe     * Release each request in mRequestList then clear the list
40525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe     * @param error is the RIL_Errno sent back
40535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe     * @param loggable true means to print all requests in mRequestList
40545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe     */
40555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    private void clearRequestList(int error, boolean loggable) {
40565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        RILRequest rr;
40575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        synchronized (mRequestList) {
40585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            int count = mRequestList.size();
40595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (RILJ_LOGD && loggable) {
40605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                Rlog.d(RILJ_LOG_TAG, "clearRequestList " + " mWakeLockCount="
40615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        + mWakeLockCount + " mRequestList=" + count);
40625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
40635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe
40645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            for (int i = 0; i < count; i++) {
40655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                rr = mRequestList.valueAt(i);
40665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                if (RILJ_LOGD && loggable) {
40675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    Rlog.d(RILJ_LOG_TAG, i + ": [" + rr.mSerial + "] "
40685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                            + requestToString(rr.mRequest));
40695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                }
40705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                rr.onError(error, null);
40715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                decrementWakeLock(rr);
40725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                rr.release();
40735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
40745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            mRequestList.clear();
40755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
40765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    }
40775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe
40785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    private RILRequest findAndRemoveRequestFromList(int serial) {
40795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        RILRequest rr = null;
40805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        synchronized (mRequestList) {
40815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            rr = mRequestList.get(serial);
40825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (rr != null) {
40835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                mRequestList.remove(serial);
40845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
40855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
40865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe
40875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        return rr;
40885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    }
40895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe
40905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    private void addToRilHistogram(RILRequest rr) {
40915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        long endTime = SystemClock.elapsedRealtime();
40925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        int totalTime = (int) (endTime - rr.mStartTimeMs);
40935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe
40945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        synchronized (mRilTimeHistograms) {
40955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            TelephonyHistogram entry = mRilTimeHistograms.get(rr.mRequest);
40965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (entry == null) {
40975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                // We would have total #RIL_HISTOGRAM_BUCKET_COUNT range buckets for RIL commands
40985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                entry = new TelephonyHistogram(TelephonyHistogram.TELEPHONY_CATEGORY_RIL,
40995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        rr.mRequest, RIL_HISTOGRAM_BUCKET_COUNT);
41005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                mRilTimeHistograms.put(rr.mRequest, entry);
41015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
41025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            entry.addTimeTaken(totalTime);
41035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
41045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    }
41055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe
4106a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan    RadioCapability makeStaticRadioCapability() {
41075fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        // default to UNKNOWN so we fail fast.
41085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        int raf = RadioAccessFamily.RAF_UNKNOWN;
41095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe
41105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        String rafString = mContext.getResources().getString(
41115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                com.android.internal.R.string.config_radio_access_family);
41125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (!TextUtils.isEmpty(rafString)) {
41135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            raf = RadioAccessFamily.rafTypeFromString(rafString);
41145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
41155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        RadioCapability rc = new RadioCapability(mPhoneId.intValue(), 0, 0, raf,
41165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                "", RadioCapability.RC_STATUS_SUCCESS);
41175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (RILJ_LOGD) riljLog("Faking RIL_REQUEST_GET_RADIO_CAPABILITY response using " + raf);
41185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        return rc;
41195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    }
41205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe
41215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    static String retToString(int req, Object ret) {
41225fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (ret == null) return "";
41235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        switch (req) {
41245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            // Don't log these return values, for privacy's sake.
41255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_GET_IMSI:
41265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_GET_IMEI:
41275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_GET_IMEISV:
41285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_SIM_OPEN_CHANNEL:
41295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_SIM_TRANSMIT_APDU_CHANNEL:
41305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe
41315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                if (!RILJ_LOGV) {
41325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    // If not versbose logging just return and don't display IMSI and IMEI, IMEISV
41335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    return "";
41345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                }
41355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
41365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe
41375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        StringBuilder sb;
41385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        String s;
41395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        int length;
41405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (ret instanceof int[]) {
41415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            int[] intArray = (int[]) ret;
41425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            length = intArray.length;
41435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            sb = new StringBuilder("{");
41445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (length > 0) {
41455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                int i = 0;
41465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                sb.append(intArray[i++]);
41475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                while (i < length) {
41485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    sb.append(", ").append(intArray[i++]);
41495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                }
41505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
41515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            sb.append("}");
41525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            s = sb.toString();
41535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        } else if (ret instanceof String[]) {
41545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            String[] strings = (String[]) ret;
41555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            length = strings.length;
41565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            sb = new StringBuilder("{");
41575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (length > 0) {
41585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                int i = 0;
41595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                sb.append(strings[i++]);
41605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                while (i < length) {
41615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    sb.append(", ").append(strings[i++]);
41625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                }
41635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
41645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            sb.append("}");
41655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            s = sb.toString();
41665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        } else if (req == RIL_REQUEST_GET_CURRENT_CALLS) {
41675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            ArrayList<DriverCall> calls = (ArrayList<DriverCall>) ret;
41685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            sb = new StringBuilder("{");
41695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            for (DriverCall dc : calls) {
41705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                sb.append("[").append(dc).append("] ");
41715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
41725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            sb.append("}");
41735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            s = sb.toString();
41745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        } else if (req == RIL_REQUEST_GET_NEIGHBORING_CELL_IDS) {
41755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            ArrayList<NeighboringCellInfo> cells = (ArrayList<NeighboringCellInfo>) ret;
41765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            sb = new StringBuilder("{");
41775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            for (NeighboringCellInfo cell : cells) {
41785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                sb.append("[").append(cell).append("] ");
41795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
41805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            sb.append("}");
41815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            s = sb.toString();
41825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        } else if (req == RIL_REQUEST_QUERY_CALL_FORWARD_STATUS) {
41835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            CallForwardInfo[] cinfo = (CallForwardInfo[]) ret;
41845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            length = cinfo.length;
41855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            sb = new StringBuilder("{");
41865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            for (int i = 0; i < length; i++) {
41875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                sb.append("[").append(cinfo[i]).append("] ");
41885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
41895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            sb.append("}");
41905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            s = sb.toString();
41915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        } else if (req == RIL_REQUEST_GET_HARDWARE_CONFIG) {
41925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            ArrayList<HardwareConfig> hwcfgs = (ArrayList<HardwareConfig>) ret;
41935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            sb = new StringBuilder(" ");
41945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            for (HardwareConfig hwcfg : hwcfgs) {
41955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                sb.append("[").append(hwcfg).append("] ");
41960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
41975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            s = sb.toString();
41985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        } else {
41995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            s = ret.toString();
42000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
42015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        return s;
42020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
42030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
42045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    void writeMetricsNewSms(int tech, int format) {
42055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        mMetrics.writeRilNewSms(mPhoneId, tech, format);
42065fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville    }
42075fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville
42085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    void writeMetricsCallRing(char[] response) {
42095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        mMetrics.writeRilCallRing(mPhoneId, response);
42102b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville    }
42112b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville
42125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    void writeMetricsSrvcc(int state) {
42135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        mMetrics.writeRilSrvcc(mPhoneId, state);
421465bee39d7e417fb898c3948696d5d8a38046c449fenglu    }
421565bee39d7e417fb898c3948696d5d8a38046c449fenglu
42165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    void writeMetricsModemRestartEvent(String reason) {
42175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        mMetrics.writeModemRestartEvent(mPhoneId, reason);
421865bee39d7e417fb898c3948696d5d8a38046c449fenglu    }
421965bee39d7e417fb898c3948696d5d8a38046c449fenglu
42205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    /**
42218e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu     * Notify all registrants that the ril has connected or disconnected.
4222a56f405d3006b1d8378b5f7757a5613b75fa8fb4Adrian Salido     *
4223a56f405d3006b1d8378b5f7757a5613b75fa8fb4Adrian Salido     * @param rilVer is the version of the ril or -1 if disconnected.
42245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe     */
4225a56f405d3006b1d8378b5f7757a5613b75fa8fb4Adrian Salido    void notifyRegistrantsRilConnectionChanged(int rilVer) {
4226a56f405d3006b1d8378b5f7757a5613b75fa8fb4Adrian Salido        mRilVersion = rilVer;
42275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (mRilConnectedRegistrants != null) {
42285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            mRilConnectedRegistrants.notifyRegistrants(
4229a56f405d3006b1d8378b5f7757a5613b75fa8fb4Adrian Salido                    new AsyncResult(null, new Integer(rilVer), null));
423027eef341b171f925ef43dd088cc559280fd7d2b9Prerepa Viswanadham        }
423127eef341b171f925ef43dd088cc559280fd7d2b9Prerepa Viswanadham    }
423227eef341b171f925ef43dd088cc559280fd7d2b9Prerepa Viswanadham
42335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    void
42345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    notifyRegistrantsCdmaInfoRec(CdmaInformationRecords infoRec) {
42355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        int response = RIL_UNSOL_CDMA_INFO_REC;
42365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (infoRec.record instanceof CdmaInformationRecords.CdmaDisplayInfoRec) {
42375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (mDisplayInfoRegistrants != null) {
42385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                if (RILJ_LOGD) unsljLogRet(response, infoRec.record);
42395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                mDisplayInfoRegistrants.notifyRegistrants(
42405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        new AsyncResult(null, infoRec.record, null));
42415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
42425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        } else if (infoRec.record instanceof CdmaInformationRecords.CdmaSignalInfoRec) {
42435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (mSignalInfoRegistrants != null) {
42445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                if (RILJ_LOGD) unsljLogRet(response, infoRec.record);
42455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                mSignalInfoRegistrants.notifyRegistrants(
42465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        new AsyncResult(null, infoRec.record, null));
42475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
42485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        } else if (infoRec.record instanceof CdmaInformationRecords.CdmaNumberInfoRec) {
42495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (mNumberInfoRegistrants != null) {
42505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                if (RILJ_LOGD) unsljLogRet(response, infoRec.record);
42515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                mNumberInfoRegistrants.notifyRegistrants(
42525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        new AsyncResult(null, infoRec.record, null));
42535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
42545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        } else if (infoRec.record instanceof CdmaInformationRecords.CdmaRedirectingNumberInfoRec) {
42555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (mRedirNumInfoRegistrants != null) {
42565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                if (RILJ_LOGD) unsljLogRet(response, infoRec.record);
42575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                mRedirNumInfoRegistrants.notifyRegistrants(
42585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        new AsyncResult(null, infoRec.record, null));
42595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
42605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        } else if (infoRec.record instanceof CdmaInformationRecords.CdmaLineControlInfoRec) {
42615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (mLineControlInfoRegistrants != null) {
42625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                if (RILJ_LOGD) unsljLogRet(response, infoRec.record);
42635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                mLineControlInfoRegistrants.notifyRegistrants(
42645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        new AsyncResult(null, infoRec.record, null));
42655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
42665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        } else if (infoRec.record instanceof CdmaInformationRecords.CdmaT53ClirInfoRec) {
42675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (mT53ClirInfoRegistrants != null) {
42685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                if (RILJ_LOGD) unsljLogRet(response, infoRec.record);
42695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                mT53ClirInfoRegistrants.notifyRegistrants(
42705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        new AsyncResult(null, infoRec.record, null));
42715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            }
42725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        } else if (infoRec.record instanceof CdmaInformationRecords.CdmaT53AudioControlInfoRec) {
42735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            if (mT53AudCntrlInfoRegistrants != null) {
42745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                if (RILJ_LOGD) {
42755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                    unsljLogRet(response, infoRec.record);
42765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                }
42775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                mT53AudCntrlInfoRegistrants.notifyRegistrants(
42785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                        new AsyncResult(null, infoRec.record, null));
4279a63f55cf17629426d976830429a7612387532195Rika Brooks            }
4280a63f55cf17629426d976830429a7612387532195Rika Brooks        }
42810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
42820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
42835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    static String requestToString(int request) {
42845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        switch(request) {
42855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_GET_SIM_STATUS:
42865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "GET_SIM_STATUS";
42875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_ENTER_SIM_PIN:
42885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "ENTER_SIM_PIN";
42895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_ENTER_SIM_PUK:
42905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "ENTER_SIM_PUK";
42915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_ENTER_SIM_PIN2:
42925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "ENTER_SIM_PIN2";
42935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_ENTER_SIM_PUK2:
42945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "ENTER_SIM_PUK2";
42955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_CHANGE_SIM_PIN:
42965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "CHANGE_SIM_PIN";
42975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_CHANGE_SIM_PIN2:
42985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "CHANGE_SIM_PIN2";
42995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_ENTER_NETWORK_DEPERSONALIZATION:
43005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "ENTER_NETWORK_DEPERSONALIZATION";
43015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_GET_CURRENT_CALLS:
43025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "GET_CURRENT_CALLS";
43035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_DIAL:
43045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "DIAL";
43055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_GET_IMSI:
43065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "GET_IMSI";
43075fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_HANGUP:
43085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "HANGUP";
43095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_HANGUP_WAITING_OR_BACKGROUND:
43105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "HANGUP_WAITING_OR_BACKGROUND";
43115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_HANGUP_FOREGROUND_RESUME_BACKGROUND:
43125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "HANGUP_FOREGROUND_RESUME_BACKGROUND";
43135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_SWITCH_WAITING_OR_HOLDING_AND_ACTIVE:
43145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "REQUEST_SWITCH_WAITING_OR_HOLDING_AND_ACTIVE";
43155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_CONFERENCE:
43165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "CONFERENCE";
43175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_UDUB:
43185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "UDUB";
43195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_LAST_CALL_FAIL_CAUSE:
43205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "LAST_CALL_FAIL_CAUSE";
43215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_SIGNAL_STRENGTH:
43225fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "SIGNAL_STRENGTH";
43235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_VOICE_REGISTRATION_STATE:
43245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "VOICE_REGISTRATION_STATE";
43255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_DATA_REGISTRATION_STATE:
43265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "DATA_REGISTRATION_STATE";
43275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_OPERATOR:
43285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "OPERATOR";
43295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_RADIO_POWER:
43305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "RADIO_POWER";
43315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_DTMF:
43325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "DTMF";
43335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_SEND_SMS:
43345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "SEND_SMS";
43355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_SEND_SMS_EXPECT_MORE:
43365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "SEND_SMS_EXPECT_MORE";
43375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_SETUP_DATA_CALL:
43385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "SETUP_DATA_CALL";
43395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_SIM_IO:
43405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "SIM_IO";
43415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_SEND_USSD:
43425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "SEND_USSD";
43435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_CANCEL_USSD:
43445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "CANCEL_USSD";
43455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_GET_CLIR:
43465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "GET_CLIR";
43475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_SET_CLIR:
43485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "SET_CLIR";
43495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_QUERY_CALL_FORWARD_STATUS:
43505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "QUERY_CALL_FORWARD_STATUS";
43515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_SET_CALL_FORWARD:
43525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "SET_CALL_FORWARD";
43535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_QUERY_CALL_WAITING:
43545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "QUERY_CALL_WAITING";
43555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_SET_CALL_WAITING:
43565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "SET_CALL_WAITING";
43575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_SMS_ACKNOWLEDGE:
43585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "SMS_ACKNOWLEDGE";
43595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_GET_IMEI:
43605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "GET_IMEI";
43615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_GET_IMEISV:
43625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "GET_IMEISV";
43635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_ANSWER:
43645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "ANSWER";
43655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_DEACTIVATE_DATA_CALL:
43665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "DEACTIVATE_DATA_CALL";
43675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_QUERY_FACILITY_LOCK:
43685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "QUERY_FACILITY_LOCK";
43695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_SET_FACILITY_LOCK:
43705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "SET_FACILITY_LOCK";
43715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_CHANGE_BARRING_PASSWORD:
43725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "CHANGE_BARRING_PASSWORD";
43735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_QUERY_NETWORK_SELECTION_MODE:
43745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "QUERY_NETWORK_SELECTION_MODE";
43755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_SET_NETWORK_SELECTION_AUTOMATIC:
43765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "SET_NETWORK_SELECTION_AUTOMATIC";
43775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_SET_NETWORK_SELECTION_MANUAL:
43785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "SET_NETWORK_SELECTION_MANUAL";
43795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_QUERY_AVAILABLE_NETWORKS :
43805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "QUERY_AVAILABLE_NETWORKS ";
43815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_DTMF_START:
43825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "DTMF_START";
43835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_DTMF_STOP:
43845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "DTMF_STOP";
43855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_BASEBAND_VERSION:
43865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "BASEBAND_VERSION";
43875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_SEPARATE_CONNECTION:
43885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "SEPARATE_CONNECTION";
43895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_SET_MUTE:
43905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "SET_MUTE";
43915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_GET_MUTE:
43925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "GET_MUTE";
43935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_QUERY_CLIP:
43945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "QUERY_CLIP";
43955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_LAST_DATA_CALL_FAIL_CAUSE:
43965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "LAST_DATA_CALL_FAIL_CAUSE";
43975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_DATA_CALL_LIST:
43985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "DATA_CALL_LIST";
43995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_RESET_RADIO:
44005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "RESET_RADIO";
44015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_OEM_HOOK_RAW:
44025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "OEM_HOOK_RAW";
44035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_OEM_HOOK_STRINGS:
44045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "OEM_HOOK_STRINGS";
44055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_SCREEN_STATE:
44065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "SCREEN_STATE";
44075fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_SET_SUPP_SVC_NOTIFICATION:
44085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "SET_SUPP_SVC_NOTIFICATION";
44095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_WRITE_SMS_TO_SIM:
44105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "WRITE_SMS_TO_SIM";
44115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_DELETE_SMS_ON_SIM:
44125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "DELETE_SMS_ON_SIM";
44135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_SET_BAND_MODE:
44145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "SET_BAND_MODE";
44155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_QUERY_AVAILABLE_BAND_MODE:
44165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "QUERY_AVAILABLE_BAND_MODE";
44175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_STK_GET_PROFILE:
44185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "REQUEST_STK_GET_PROFILE";
44195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_STK_SET_PROFILE:
44205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "REQUEST_STK_SET_PROFILE";
44215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_STK_SEND_ENVELOPE_COMMAND:
44225fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "REQUEST_STK_SEND_ENVELOPE_COMMAND";
44235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_STK_SEND_TERMINAL_RESPONSE:
44245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "REQUEST_STK_SEND_TERMINAL_RESPONSE";
44255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_STK_HANDLE_CALL_SETUP_REQUESTED_FROM_SIM:
44265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "REQUEST_STK_HANDLE_CALL_SETUP_REQUESTED_FROM_SIM";
44275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_EXPLICIT_CALL_TRANSFER: return "REQUEST_EXPLICIT_CALL_TRANSFER";
44285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE:
44295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "REQUEST_SET_PREFERRED_NETWORK_TYPE";
44305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_GET_PREFERRED_NETWORK_TYPE:
44315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "REQUEST_GET_PREFERRED_NETWORK_TYPE";
44325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_GET_NEIGHBORING_CELL_IDS:
44335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "REQUEST_GET_NEIGHBORING_CELL_IDS";
44345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_SET_LOCATION_UPDATES:
44355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "REQUEST_SET_LOCATION_UPDATES";
44365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_CDMA_SET_SUBSCRIPTION_SOURCE:
44375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "RIL_REQUEST_CDMA_SET_SUBSCRIPTION_SOURCE";
44385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_CDMA_SET_ROAMING_PREFERENCE:
44395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "RIL_REQUEST_CDMA_SET_ROAMING_PREFERENCE";
44405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_CDMA_QUERY_ROAMING_PREFERENCE:
44415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "RIL_REQUEST_CDMA_QUERY_ROAMING_PREFERENCE";
44425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_SET_TTY_MODE:
44435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "RIL_REQUEST_SET_TTY_MODE";
44445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_QUERY_TTY_MODE:
44455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "RIL_REQUEST_QUERY_TTY_MODE";
44465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_CDMA_SET_PREFERRED_VOICE_PRIVACY_MODE:
44475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "RIL_REQUEST_CDMA_SET_PREFERRED_VOICE_PRIVACY_MODE";
44485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_CDMA_QUERY_PREFERRED_VOICE_PRIVACY_MODE:
44495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "RIL_REQUEST_CDMA_QUERY_PREFERRED_VOICE_PRIVACY_MODE";
44505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_CDMA_FLASH:
44515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "RIL_REQUEST_CDMA_FLASH";
44525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_CDMA_BURST_DTMF:
44535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "RIL_REQUEST_CDMA_BURST_DTMF";
44545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_CDMA_SEND_SMS:
44555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "RIL_REQUEST_CDMA_SEND_SMS";
44565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_CDMA_SMS_ACKNOWLEDGE:
44575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "RIL_REQUEST_CDMA_SMS_ACKNOWLEDGE";
44585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_GSM_GET_BROADCAST_CONFIG:
44595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "RIL_REQUEST_GSM_GET_BROADCAST_CONFIG";
44605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_GSM_SET_BROADCAST_CONFIG:
44615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "RIL_REQUEST_GSM_SET_BROADCAST_CONFIG";
44625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_CDMA_GET_BROADCAST_CONFIG:
44635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "RIL_REQUEST_CDMA_GET_BROADCAST_CONFIG";
44645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_CDMA_SET_BROADCAST_CONFIG:
44655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "RIL_REQUEST_CDMA_SET_BROADCAST_CONFIG";
44665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_GSM_BROADCAST_ACTIVATION:
44675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "RIL_REQUEST_GSM_BROADCAST_ACTIVATION";
44685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_CDMA_VALIDATE_AND_WRITE_AKEY:
44695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "RIL_REQUEST_CDMA_VALIDATE_AND_WRITE_AKEY";
44705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_CDMA_BROADCAST_ACTIVATION:
44715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "RIL_REQUEST_CDMA_BROADCAST_ACTIVATION";
44725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_CDMA_SUBSCRIPTION:
44735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "RIL_REQUEST_CDMA_SUBSCRIPTION";
44745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_CDMA_WRITE_SMS_TO_RUIM:
44755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "RIL_REQUEST_CDMA_WRITE_SMS_TO_RUIM";
44765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_CDMA_DELETE_SMS_ON_RUIM:
44775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "RIL_REQUEST_CDMA_DELETE_SMS_ON_RUIM";
44785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_DEVICE_IDENTITY:
44795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "RIL_REQUEST_DEVICE_IDENTITY";
44805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_GET_SMSC_ADDRESS:
44815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "RIL_REQUEST_GET_SMSC_ADDRESS";
44825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_SET_SMSC_ADDRESS:
44835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "RIL_REQUEST_SET_SMSC_ADDRESS";
44845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_EXIT_EMERGENCY_CALLBACK_MODE:
44855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "REQUEST_EXIT_EMERGENCY_CALLBACK_MODE";
44865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_REPORT_SMS_MEMORY_STATUS:
44875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "RIL_REQUEST_REPORT_SMS_MEMORY_STATUS";
44885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_REPORT_STK_SERVICE_IS_RUNNING:
44895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "RIL_REQUEST_REPORT_STK_SERVICE_IS_RUNNING";
44905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_CDMA_GET_SUBSCRIPTION_SOURCE:
44915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "RIL_REQUEST_CDMA_GET_SUBSCRIPTION_SOURCE";
44925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_ISIM_AUTHENTICATION:
44935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "RIL_REQUEST_ISIM_AUTHENTICATION";
44945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_ACKNOWLEDGE_INCOMING_GSM_SMS_WITH_PDU:
44955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "RIL_REQUEST_ACKNOWLEDGE_INCOMING_GSM_SMS_WITH_PDU";
44965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_STK_SEND_ENVELOPE_WITH_STATUS:
44975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "RIL_REQUEST_STK_SEND_ENVELOPE_WITH_STATUS";
44985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_VOICE_RADIO_TECH:
44995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "RIL_REQUEST_VOICE_RADIO_TECH";
45005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_GET_CELL_INFO_LIST:
45015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "RIL_REQUEST_GET_CELL_INFO_LIST";
45025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_SET_UNSOL_CELL_INFO_LIST_RATE:
45035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "RIL_REQUEST_SET_CELL_INFO_LIST_RATE";
45045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_SET_INITIAL_ATTACH_APN:
45055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "RIL_REQUEST_SET_INITIAL_ATTACH_APN";
45065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_SET_DATA_PROFILE:
45075fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "RIL_REQUEST_SET_DATA_PROFILE";
45085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_IMS_REGISTRATION_STATE:
45095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "RIL_REQUEST_IMS_REGISTRATION_STATE";
45105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_IMS_SEND_SMS:
45115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "RIL_REQUEST_IMS_SEND_SMS";
45125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_SIM_TRANSMIT_APDU_BASIC:
45135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "RIL_REQUEST_SIM_TRANSMIT_APDU_BASIC";
45145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_SIM_OPEN_CHANNEL:
45155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "RIL_REQUEST_SIM_OPEN_CHANNEL";
45165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_SIM_CLOSE_CHANNEL:
45175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "RIL_REQUEST_SIM_CLOSE_CHANNEL";
45185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_SIM_TRANSMIT_APDU_CHANNEL:
45195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "RIL_REQUEST_SIM_TRANSMIT_APDU_CHANNEL";
45205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_NV_READ_ITEM:
45215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "RIL_REQUEST_NV_READ_ITEM";
45225fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_NV_WRITE_ITEM:
45235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "RIL_REQUEST_NV_WRITE_ITEM";
45245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_NV_WRITE_CDMA_PRL:
45255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "RIL_REQUEST_NV_WRITE_CDMA_PRL";
45265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_NV_RESET_CONFIG:
45275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "RIL_REQUEST_NV_RESET_CONFIG";
45285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_SET_UICC_SUBSCRIPTION:
45295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "RIL_REQUEST_SET_UICC_SUBSCRIPTION";
45305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_ALLOW_DATA:
45315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "RIL_REQUEST_ALLOW_DATA";
45325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_GET_HARDWARE_CONFIG:
45335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "GET_HARDWARE_CONFIG";
45345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_SIM_AUTHENTICATION:
45355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "RIL_REQUEST_SIM_AUTHENTICATION";
45365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_SHUTDOWN:
45375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "RIL_REQUEST_SHUTDOWN";
45385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_SET_RADIO_CAPABILITY:
45395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "RIL_REQUEST_SET_RADIO_CAPABILITY";
45405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_GET_RADIO_CAPABILITY:
45415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "RIL_REQUEST_GET_RADIO_CAPABILITY";
45425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_START_LCE:
45435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "RIL_REQUEST_START_LCE";
45445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_STOP_LCE:
45455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "RIL_REQUEST_STOP_LCE";
45465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_PULL_LCEDATA:
45475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "RIL_REQUEST_PULL_LCEDATA";
45485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_GET_ACTIVITY_INFO:
45495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "RIL_REQUEST_GET_ACTIVITY_INFO";
45505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_SET_ALLOWED_CARRIERS:
45515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "RIL_REQUEST_SET_ALLOWED_CARRIERS";
45525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_REQUEST_GET_ALLOWED_CARRIERS:
45535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "RIL_REQUEST_GET_ALLOWED_CARRIERS";
455499607db1bc0f46e73f39d5379c590b8bcb4bf947Jack Yu            case RIL_REQUEST_SET_SIM_CARD_POWER:
455599607db1bc0f46e73f39d5379c590b8bcb4bf947Jack Yu                return "RIL_REQUEST_SET_SIM_CARD_POWER";
4556baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu            case RIL_REQUEST_SEND_DEVICE_STATE:
4557baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu                return "RIL_REQUEST_SEND_DEVICE_STATE";
4558baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu            case RIL_REQUEST_SET_UNSOLICITED_RESPONSE_FILTER:
4559baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu                return "RIL_REQUEST_SET_UNSOLICITED_RESPONSE_FILTER";
45605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_RESPONSE_ACKNOWLEDGEMENT:
45615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "RIL_RESPONSE_ACKNOWLEDGEMENT";
45625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            default: return "<unknown request>";
45635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
45645fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville    }
45655fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville
45665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    static String responseToString(int request) {
45675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        switch(request) {
45685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_UNSOL_RESPONSE_RADIO_STATE_CHANGED:
45695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "UNSOL_RESPONSE_RADIO_STATE_CHANGED";
45705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED:
45715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "UNSOL_RESPONSE_CALL_STATE_CHANGED";
45725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_UNSOL_RESPONSE_NETWORK_STATE_CHANGED:
45735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "UNSOL_RESPONSE_NETWORK_STATE_CHANGED";
45745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_UNSOL_RESPONSE_NEW_SMS:
45755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "UNSOL_RESPONSE_NEW_SMS";
45765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_UNSOL_RESPONSE_NEW_SMS_STATUS_REPORT:
45775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "UNSOL_RESPONSE_NEW_SMS_STATUS_REPORT";
45785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_UNSOL_RESPONSE_NEW_SMS_ON_SIM:
45795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "UNSOL_RESPONSE_NEW_SMS_ON_SIM";
45805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_UNSOL_ON_USSD:
45815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "UNSOL_ON_USSD";
45825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_UNSOL_ON_USSD_REQUEST:
45835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "UNSOL_ON_USSD_REQUEST";
45845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_UNSOL_NITZ_TIME_RECEIVED:
45855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "UNSOL_NITZ_TIME_RECEIVED";
45865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_UNSOL_SIGNAL_STRENGTH:
45875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "UNSOL_SIGNAL_STRENGTH";
45885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_UNSOL_DATA_CALL_LIST_CHANGED:
45895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "UNSOL_DATA_CALL_LIST_CHANGED";
45905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_UNSOL_SUPP_SVC_NOTIFICATION:
45915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "UNSOL_SUPP_SVC_NOTIFICATION";
45925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_UNSOL_STK_SESSION_END:
45935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "UNSOL_STK_SESSION_END";
45945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_UNSOL_STK_PROACTIVE_COMMAND:
45955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "UNSOL_STK_PROACTIVE_COMMAND";
45965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_UNSOL_STK_EVENT_NOTIFY:
45975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "UNSOL_STK_EVENT_NOTIFY";
45985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_UNSOL_STK_CALL_SETUP:
45995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "UNSOL_STK_CALL_SETUP";
46005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_UNSOL_SIM_SMS_STORAGE_FULL:
46015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "UNSOL_SIM_SMS_STORAGE_FULL";
46025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_UNSOL_SIM_REFRESH:
46035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "UNSOL_SIM_REFRESH";
46045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_UNSOL_CALL_RING:
46055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "UNSOL_CALL_RING";
46065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_UNSOL_RESPONSE_SIM_STATUS_CHANGED:
46075fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "UNSOL_RESPONSE_SIM_STATUS_CHANGED";
46085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_UNSOL_RESPONSE_CDMA_NEW_SMS:
46095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "UNSOL_RESPONSE_CDMA_NEW_SMS";
46105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_UNSOL_RESPONSE_NEW_BROADCAST_SMS:
46115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "UNSOL_RESPONSE_NEW_BROADCAST_SMS";
46125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_UNSOL_CDMA_RUIM_SMS_STORAGE_FULL:
46135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "UNSOL_CDMA_RUIM_SMS_STORAGE_FULL";
46145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_UNSOL_RESTRICTED_STATE_CHANGED:
46155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "UNSOL_RESTRICTED_STATE_CHANGED";
46165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_UNSOL_ENTER_EMERGENCY_CALLBACK_MODE:
46175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "UNSOL_ENTER_EMERGENCY_CALLBACK_MODE";
46185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_UNSOL_CDMA_CALL_WAITING:
46195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "UNSOL_CDMA_CALL_WAITING";
46205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_UNSOL_CDMA_OTA_PROVISION_STATUS:
46215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "UNSOL_CDMA_OTA_PROVISION_STATUS";
46225fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_UNSOL_CDMA_INFO_REC:
46235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "UNSOL_CDMA_INFO_REC";
46245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_UNSOL_OEM_HOOK_RAW:
46255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "UNSOL_OEM_HOOK_RAW";
46265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_UNSOL_RINGBACK_TONE:
46275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "UNSOL_RINGBACK_TONE";
46285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_UNSOL_RESEND_INCALL_MUTE:
46295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "UNSOL_RESEND_INCALL_MUTE";
46305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_UNSOL_CDMA_SUBSCRIPTION_SOURCE_CHANGED:
46315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "CDMA_SUBSCRIPTION_SOURCE_CHANGED";
46325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_UNSOl_CDMA_PRL_CHANGED:
46335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "UNSOL_CDMA_PRL_CHANGED";
46345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_UNSOL_EXIT_EMERGENCY_CALLBACK_MODE:
46355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "UNSOL_EXIT_EMERGENCY_CALLBACK_MODE";
46365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_UNSOL_RIL_CONNECTED:
46375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "UNSOL_RIL_CONNECTED";
46385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_UNSOL_VOICE_RADIO_TECH_CHANGED:
46395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "UNSOL_VOICE_RADIO_TECH_CHANGED";
46405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_UNSOL_CELL_INFO_LIST:
46415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "UNSOL_CELL_INFO_LIST";
46425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_UNSOL_RESPONSE_IMS_NETWORK_STATE_CHANGED:
46435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "UNSOL_RESPONSE_IMS_NETWORK_STATE_CHANGED";
46445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_UNSOL_UICC_SUBSCRIPTION_STATUS_CHANGED:
46455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "RIL_UNSOL_UICC_SUBSCRIPTION_STATUS_CHANGED";
46465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_UNSOL_SRVCC_STATE_NOTIFY:
46475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "UNSOL_SRVCC_STATE_NOTIFY";
46485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_UNSOL_HARDWARE_CONFIG_CHANGED:
46495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "RIL_UNSOL_HARDWARE_CONFIG_CHANGED";
46505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_UNSOL_RADIO_CAPABILITY:
46515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "RIL_UNSOL_RADIO_CAPABILITY";
46525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_UNSOL_ON_SS:
46535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "UNSOL_ON_SS";
46545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_UNSOL_STK_CC_ALPHA_NOTIFY:
46555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "UNSOL_STK_CC_ALPHA_NOTIFY";
46565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_UNSOL_LCEDATA_RECV:
46575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "UNSOL_LCE_INFO_RECV";
46585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_UNSOL_PCO_DATA:
46595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "UNSOL_PCO_DATA";
46605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            case RIL_UNSOL_MODEM_RESTART:
46615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "UNSOL_MODEM_RESTART";
46625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            default:
46635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                return "<unknown response>";
46645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        }
466521c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan    }
466621c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan
46675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    void riljLog(String msg) {
46685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        Rlog.d(RILJ_LOG_TAG, msg
46695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                + (mPhoneId != null ? (" [SUB" + mPhoneId + "]") : ""));
46705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    }
46715d5eea6ed231163c225144316b0d1913d48678a4Sungmin Choi
46725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    void riljLoge(String msg) {
46735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        Rlog.e(RILJ_LOG_TAG, msg
46745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                + (mPhoneId != null ? (" [SUB" + mPhoneId + "]") : ""));
46755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    }
46765d5eea6ed231163c225144316b0d1913d48678a4Sungmin Choi
46775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    void riljLoge(String msg, Exception e) {
46785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        Rlog.e(RILJ_LOG_TAG, msg
46795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                + (mPhoneId != null ? (" [SUB" + mPhoneId + "]") : ""), e);
46805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    }
46815d5eea6ed231163c225144316b0d1913d48678a4Sungmin Choi
46825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    void riljLogv(String msg) {
46835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        Rlog.v(RILJ_LOG_TAG, msg
46845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                + (mPhoneId != null ? (" [SUB" + mPhoneId + "]") : ""));
46855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    }
46865d5eea6ed231163c225144316b0d1913d48678a4Sungmin Choi
46875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    void unsljLog(int response) {
46885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        riljLog("[UNSL]< " + responseToString(response));
46895d5eea6ed231163c225144316b0d1913d48678a4Sungmin Choi    }
46905d5eea6ed231163c225144316b0d1913d48678a4Sungmin Choi
46915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    void unsljLogMore(int response, String more) {
46925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        riljLog("[UNSL]< " + responseToString(response) + " " + more);
46935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    }
46949d4ec7d45061f1da05f16cd244eb0a798e7f36bbAmit Mahajan
46955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    void unsljLogRet(int response, Object ret) {
46965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        riljLog("[UNSL]< " + responseToString(response) + " " + retToString(response, ret));
46975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    }
46989d4ec7d45061f1da05f16cd244eb0a798e7f36bbAmit Mahajan
46995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    void unsljLogvRet(int response, Object ret) {
47005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        riljLogv("[UNSL]< " + responseToString(response) + " " + retToString(response, ret));
47015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    }
47029d4ec7d45061f1da05f16cd244eb0a798e7f36bbAmit Mahajan
47035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    @Override
47045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe    public void setPhoneType(int phoneType) { // Called by GsmCdmaPhone
47055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        if (RILJ_LOGD) riljLog("setPhoneType=" + phoneType + " old value=" + mPhoneType);
47065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe        mPhoneType = phoneType;
47079d4ec7d45061f1da05f16cd244eb0a798e7f36bbAmit Mahajan    }
47089d4ec7d45061f1da05f16cd244eb0a798e7f36bbAmit Mahajan
47090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /* (non-Javadoc)
47100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @see com.android.internal.telephony.BaseCommands#testingEmergencyCall()
47110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
47120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override
47130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testingEmergencyCall() {
47140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog("testingEmergencyCall");
47150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mTestingEmergencyCall.set(true);
47160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
47170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
47180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
471905ef3b65972826780859b9acbd1fa9580d099832Alex Yakavenka        pw.println("RIL: " + this);
47200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        pw.println(" mWakeLock=" + mWakeLock);
47210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        pw.println(" mWakeLockTimeout=" + mWakeLockTimeout);
4722892e1fecf3c3736c4c04cf219d01034f71307065Robert Greenwalt        synchronized (mRequestList) {
47237cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt            synchronized (mWakeLock) {
47247cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt                pw.println(" mWakeLockCount=" + mWakeLockCount);
47257cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt            }
4726892e1fecf3c3736c4c04cf219d01034f71307065Robert Greenwalt            int count = mRequestList.size();
47270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            pw.println(" mRequestList count=" + count);
47280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            for (int i = 0; i < count; i++) {
47297cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt                RILRequest rr = mRequestList.valueAt(i);
47300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                pw.println("  [" + rr.mSerial + "] " + requestToString(rr.mRequest));
47310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
47320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
4733d39109502855e8d81e45e21161d8bf0cfacf42e0Sanket Padawe        pw.println(" mLastNITZTimeInfo=" + Arrays.toString(mLastNITZTimeInfo));
47340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        pw.println(" mTestingEmergencyCall=" + mTestingEmergencyCall.get());
47351b90799284785b26b0853ae367cac139ba37e18bNaveen Kalla        mClientWakelockTracker.dumpClientRequestTracker();
47360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
473740d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal
47388e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindran    public List<ClientRequestStats> getClientRequestStats() {
47398e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindran        return mClientWakelockTracker.getClientRequestStats();
47408e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindran    }
4741e7c29ee85e324289d247d6e28a8c1a216c3658c4Amit Mahajan
4742f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan    public static ArrayList<Byte> primitiveArrayToArrayList(byte[] arr) {
4743f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan        ArrayList<Byte> arrayList = new ArrayList<>(arr.length);
4744f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan        for (byte b : arr) {
4745f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan            arrayList.add(b);
4746f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan        }
4747f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan        return arrayList;
4748f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan    }
4749f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan
4750e7c29ee85e324289d247d6e28a8c1a216c3658c4Amit Mahajan    public static byte[] arrayListToPrimitiveArray(ArrayList<Byte> bytes) {
4751e7c29ee85e324289d247d6e28a8c1a216c3658c4Amit Mahajan        byte[] ret = new byte[bytes.size()];
4752e7c29ee85e324289d247d6e28a8c1a216c3658c4Amit Mahajan        for (int i = 0; i < ret.length; i++) {
4753e7c29ee85e324289d247d6e28a8c1a216c3658c4Amit Mahajan            ret[i] = bytes.get(i);
4754e7c29ee85e324289d247d6e28a8c1a216c3658c4Amit Mahajan        }
4755e7c29ee85e324289d247d6e28a8c1a216c3658c4Amit Mahajan        return ret;
4756e7c29ee85e324289d247d6e28a8c1a216c3658c4Amit Mahajan    }
4757e7c29ee85e324289d247d6e28a8c1a216c3658c4Amit Mahajan
475821c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan    static ArrayList<HardwareConfig> convertHalHwConfigList(
475921c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan            ArrayList<android.hardware.radio.V1_0.HardwareConfig> hwListRil,
476021c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan            RIL ril) {
476121c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan        int num;
476221c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan        ArrayList<HardwareConfig> response;
476321c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan        HardwareConfig hw;
476421c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan
476521c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan        num = hwListRil.size();
476621c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan        response = new ArrayList<HardwareConfig>(num);
476721c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan
476821c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan        if (RILJ_LOGV) {
476921c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan            ril.riljLog("convertHalHwConfigList: num=" + num);
477021c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan        }
477121c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan        for (android.hardware.radio.V1_0.HardwareConfig hwRil : hwListRil) {
477221c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan            int type = hwRil.type;
477321c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan            switch(type) {
477421c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                case HardwareConfig.DEV_HARDWARE_TYPE_MODEM: {
477521c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                    hw = new HardwareConfig(type);
477621c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                    HardwareConfigModem hwModem = hwRil.modem.get(0);
477721c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                    hw.assignModem(hwRil.uuid, hwRil.state, hwModem.rilModel, hwModem.rat,
477821c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                            hwModem.maxVoice, hwModem.maxData, hwModem.maxStandby);
477921c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                    break;
478021c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                }
478121c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                case HardwareConfig.DEV_HARDWARE_TYPE_SIM: {
478221c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                    hw = new HardwareConfig(type);
478321c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                    hw.assignSim(hwRil.uuid, hwRil.state, hwRil.sim.get(0).modemUuid);
478421c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                    break;
478521c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                }
478621c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                default: {
478721c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                    throw new RuntimeException(
478821c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                            "RIL_REQUEST_GET_HARDWARE_CONFIG invalid hardward type:" + type);
478921c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                }
479021c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan            }
479121c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan
479221c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan            response.add(hw);
479321c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan        }
479421c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan
479521c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan        return response;
479621c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan    }
479721c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan
479821c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan    static RadioCapability convertHalRadioCapability(
479921c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan            android.hardware.radio.V1_0.RadioCapability rcRil, RIL ril) {
480021c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan        int session = rcRil.session;
480121c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan        int phase = rcRil.phase;
480221c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan        int rat = rcRil.raf;
480321c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan        String logicModemUuid = rcRil.logicalModemUuid;
480421c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan        int status = rcRil.status;
480521c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan
480621c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan        ril.riljLog("convertHalRadioCapability: session=" + session +
480721c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                ", phase=" + phase +
480821c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                ", rat=" + rat +
480921c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                ", logicModemUuid=" + logicModemUuid +
481021c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                ", status=" + status);
481121c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan        RadioCapability rc = new RadioCapability(
48125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe                ril.mPhoneId, session, phase, rat, logicModemUuid, status);
481321c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan        return rc;
481421c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan    }
481521c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan
481621c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan    static ArrayList<Integer> convertHalLceData(LceDataInfo lce, RIL ril) {
481721c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan        final ArrayList<Integer> capacityResponse = new ArrayList<Integer>();
481821c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan        final int capacityDownKbps = lce.lastHopCapacityKbps;
4819152ec067149afef2e05216fe7137bd21c1584ff0Amit Mahajan        final int confidenceLevel = Byte.toUnsignedInt(lce.confidenceLevel);
482021c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan        final int lceSuspended = lce.lceSuspended ? 1 : 0;
482121c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan
482221c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan        ril.riljLog("LCE capacity information received:" +
482321c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                " capacity=" + capacityDownKbps +
482421c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                " confidence=" + confidenceLevel +
482521c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                " lceSuspended=" + lceSuspended);
482621c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan
482721c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan        capacityResponse.add(capacityDownKbps);
482821c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan        capacityResponse.add(confidenceLevel);
482921c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan        capacityResponse.add(lceSuspended);
483021c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan        return capacityResponse;
483121c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan    }
483221c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan
4833a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan    static ArrayList<CellInfo> convertHalCellInfoList(
483421c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan            ArrayList<android.hardware.radio.V1_0.CellInfo> records) {
483521c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan        ArrayList<CellInfo> response = new ArrayList<CellInfo>(records.size());
483621c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan
483721c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan        for (android.hardware.radio.V1_0.CellInfo record : records) {
483821c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan            // first convert RIL CellInfo to Parcel
483921c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan            Parcel p = Parcel.obtain();
484021c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan            p.writeInt(record.cellInfoType);
484121c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan            p.writeInt(record.registered ? 1 : 0);
484221c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan            p.writeInt(record.timeStampType);
484321c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan            p.writeLong(record.timeStamp);
484421c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan            switch (record.cellInfoType) {
484521c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                case CellInfoType.GSM: {
484621c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                    CellInfoGsm cellInfoGsm = record.gsm.get(0);
484721c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                    p.writeInt(Integer.parseInt(cellInfoGsm.cellIdentityGsm.mcc));
484821c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                    p.writeInt(Integer.parseInt(cellInfoGsm.cellIdentityGsm.mnc));
484921c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                    p.writeInt(cellInfoGsm.cellIdentityGsm.lac);
485021c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                    p.writeInt(cellInfoGsm.cellIdentityGsm.cid);
485121c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                    p.writeInt(cellInfoGsm.cellIdentityGsm.arfcn);
4852920b42160e170581c29fe50ed9b3adef1582b6bdNathan Harold                    p.writeInt(Byte.toUnsignedInt(cellInfoGsm.cellIdentityGsm.bsic));
485321c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                    p.writeInt(cellInfoGsm.signalStrengthGsm.signalStrength);
485421c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                    p.writeInt(cellInfoGsm.signalStrengthGsm.bitErrorRate);
485521c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                    p.writeInt(cellInfoGsm.signalStrengthGsm.timingAdvance);
485621c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                    break;
485721c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                }
485821c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan
485921c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                case CellInfoType.CDMA: {
486021c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                    CellInfoCdma cellInfoCdma = record.cdma.get(0);
486121c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                    p.writeInt(cellInfoCdma.cellIdentityCdma.networkId);
486221c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                    p.writeInt(cellInfoCdma.cellIdentityCdma.systemId);
4863b83528485c4fc93aa5dbaf557bb81a5bdcd0564cJack Yu                    p.writeInt(cellInfoCdma.cellIdentityCdma.baseStationId);
486421c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                    p.writeInt(cellInfoCdma.cellIdentityCdma.longitude);
486521c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                    p.writeInt(cellInfoCdma.cellIdentityCdma.latitude);
486621c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                    p.writeInt(cellInfoCdma.signalStrengthCdma.dbm);
486721c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                    p.writeInt(cellInfoCdma.signalStrengthCdma.ecio);
486821c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                    p.writeInt(cellInfoCdma.signalStrengthEvdo.dbm);
486921c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                    p.writeInt(cellInfoCdma.signalStrengthEvdo.ecio);
487021c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                    p.writeInt(cellInfoCdma.signalStrengthEvdo.signalNoiseRatio);
487121c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                    break;
487221c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                }
487321c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan
487421c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                case CellInfoType.LTE: {
487521c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                    CellInfoLte cellInfoLte = record.lte.get(0);
487621c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                    p.writeInt(Integer.parseInt(cellInfoLte.cellIdentityLte.mcc));
487721c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                    p.writeInt(Integer.parseInt(cellInfoLte.cellIdentityLte.mnc));
487821c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                    p.writeInt(cellInfoLte.cellIdentityLte.ci);
487921c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                    p.writeInt(cellInfoLte.cellIdentityLte.pci);
488021c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                    p.writeInt(cellInfoLte.cellIdentityLte.tac);
488121c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                    p.writeInt(cellInfoLte.cellIdentityLte.earfcn);
488221c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                    p.writeInt(cellInfoLte.signalStrengthLte.signalStrength);
488321c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                    p.writeInt(cellInfoLte.signalStrengthLte.rsrp);
488421c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                    p.writeInt(cellInfoLte.signalStrengthLte.rsrq);
488521c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                    p.writeInt(cellInfoLte.signalStrengthLte.rssnr);
488621c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                    p.writeInt(cellInfoLte.signalStrengthLte.cqi);
488721c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                    p.writeInt(cellInfoLte.signalStrengthLte.timingAdvance);
488821c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                    break;
488921c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                }
489021c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan
489121c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                case CellInfoType.WCDMA: {
489221c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                    CellInfoWcdma cellInfoWcdma = record.wcdma.get(0);
489321c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                    p.writeInt(Integer.parseInt(cellInfoWcdma.cellIdentityWcdma.mcc));
489421c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                    p.writeInt(Integer.parseInt(cellInfoWcdma.cellIdentityWcdma.mnc));
489521c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                    p.writeInt(cellInfoWcdma.cellIdentityWcdma.lac);
489621c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                    p.writeInt(cellInfoWcdma.cellIdentityWcdma.cid);
489721c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                    p.writeInt(cellInfoWcdma.cellIdentityWcdma.psc);
489821c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                    p.writeInt(cellInfoWcdma.cellIdentityWcdma.uarfcn);
489921c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                    p.writeInt(cellInfoWcdma.signalStrengthWcdma.signalStrength);
490021c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                    p.writeInt(cellInfoWcdma.signalStrengthWcdma.bitErrorRate);
490121c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                    break;
490221c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan                }
4903522fc0602d60895881b33243030dd40d5778e4a9Amit Mahajan
4904522fc0602d60895881b33243030dd40d5778e4a9Amit Mahajan                default:
4905522fc0602d60895881b33243030dd40d5778e4a9Amit Mahajan                    throw new RuntimeException("unexpected cellinfotype: " + record.cellInfoType);
490621c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan            }
490721c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan
49085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            p.setDataPosition(0);
490921c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan            CellInfo InfoRec = CellInfo.CREATOR.createFromParcel(p);
49105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe            p.recycle();
491121c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan            response.add(InfoRec);
491221c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan        }
491321c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan
491421c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan        return response;
491521c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan    }
4916a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan
4917a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan    static SignalStrength convertHalSignalStrength(
4918a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan            android.hardware.radio.V1_0.SignalStrength signalStrength) {
4919a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan        return new SignalStrength(signalStrength.gw.signalStrength,
4920a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan                signalStrength.gw.bitErrorRate,
4921a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan                signalStrength.cdma.dbm,
4922a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan                signalStrength.cdma.ecio,
4923a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan                signalStrength.evdo.dbm,
4924a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan                signalStrength.evdo.ecio,
4925a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan                signalStrength.evdo.signalNoiseRatio,
4926a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan                signalStrength.lte.signalStrength,
4927a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan                signalStrength.lte.rsrp,
4928a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan                signalStrength.lte.rsrq,
4929a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan                signalStrength.lte.rssnr,
4930a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan                signalStrength.lte.cqi,
4931a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan                signalStrength.tdScdma.rscp,
4932a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan                false /* gsmFlag - don't care; will be changed by SST */);
4933a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan    }
49340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville}
4935