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
190825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.content.BroadcastReceiver;
200825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.content.Context;
210825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.content.Intent;
220825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.content.IntentFilter;
2380795c239d6281db5fbf0f5a23494bfa3fb938f5Jeff Brownimport android.hardware.display.DisplayManager;
240825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.net.ConnectivityManager;
250825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.net.LocalSocket;
260825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.net.LocalSocketAddress;
270825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.AsyncResult;
28f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport android.os.BatteryManager;
290825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.Handler;
300825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.HandlerThread;
310825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.Looper;
320825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.Message;
330825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.Parcel;
340825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.PowerManager;
350825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.PowerManager.WakeLock;
3627eef341b171f925ef43dd088cc559280fd7d2b9Prerepa Viswanadhamimport android.os.SystemClock;
37f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport android.os.SystemProperties;
3840659286ac42ec77bbe7893830bd50c06f393ee8Meng Wangimport android.service.carrier.CarrierIdentifier;
395fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Savilleimport android.telephony.CellInfo;
40f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport android.telephony.ModemActivityInfo;
410825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.telephony.NeighboringCellInfo;
424b4d80db8a8d447d3c1110831c2a821a2bd2a186Robert Greenwaltimport android.telephony.PcoData;
430825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.telephony.PhoneNumberUtils;
443ad0c75dac907e8490b78d6fd8c0278d28b96f84Robert Greenwaltimport android.telephony.RadioAccessFamily;
45fa4fd4721082689c4b276f67b845e7be249cb8daWink Savilleimport android.telephony.Rlog;
465b81adc82a53b3064f4baa3acfeabef31586588aUma Maheswari Ramalingamimport android.telephony.SignalStrength;
470825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.telephony.SmsManager;
480825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.telephony.SmsMessage;
496bc4098827f3070a44b5e51508b455d7c7be9c07Wink Savilleimport android.telephony.SubscriptionManager;
50d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padaweimport android.telephony.TelephonyHistogram;
51f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport android.telephony.TelephonyManager;
520825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.text.TextUtils;
537cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwaltimport android.util.SparseArray;
5480795c239d6281db5fbf0f5a23494bfa3fb938f5Jeff Brownimport android.view.Display;
550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
56f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport com.android.internal.telephony.TelephonyProto.SmsSession;
57f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport com.android.internal.telephony.TelephonyProto.TelephonySettings;
58f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport com.android.internal.telephony.cdma.CdmaCallWaitingNotification;
59f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport com.android.internal.telephony.cdma.CdmaInformationRecords;
60f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport com.android.internal.telephony.cdma.CdmaSmsBroadcastConfigInfo;
61f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport com.android.internal.telephony.dataconnection.DataCallResponse;
62f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport com.android.internal.telephony.dataconnection.DataProfile;
63f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport com.android.internal.telephony.dataconnection.DcFailCause;
640825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.gsm.SmsBroadcastConfigInfo;
6509b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahujaimport com.android.internal.telephony.gsm.SsData;
660825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.gsm.SuppServiceNotification;
67f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport com.android.internal.telephony.metrics.TelephonyMetrics;
68d720945f2be5ea5fe0faf67e67d9ea0e184eba67Alex Yakavenkaimport com.android.internal.telephony.uicc.IccCardApplicationStatus;
69d720945f2be5ea5fe0faf67e67d9ea0e184eba67Alex Yakavenkaimport com.android.internal.telephony.uicc.IccCardStatus;
70d720945f2be5ea5fe0faf67e67d9ea0e184eba67Alex Yakavenkaimport com.android.internal.telephony.uicc.IccIoResult;
71d720945f2be5ea5fe0faf67e67d9ea0e184eba67Alex Yakavenkaimport com.android.internal.telephony.uicc.IccRefreshResponse;
72d720945f2be5ea5fe0faf67e67d9ea0e184eba67Alex Yakavenkaimport com.android.internal.telephony.uicc.IccUtils;
730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
740825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.io.ByteArrayInputStream;
750825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.io.DataInputStream;
760825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.io.FileDescriptor;
770825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.io.IOException;
780825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.io.InputStream;
790825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.io.PrintWriter;
800825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.util.ArrayList;
8127eef341b171f925ef43dd088cc559280fd7d2b9Prerepa Viswanadhamimport java.util.Arrays;
820825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.util.Collections;
83d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padaweimport java.util.List;
84f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport java.util.Random;
850825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.util.concurrent.atomic.AtomicBoolean;
867cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwaltimport java.util.concurrent.atomic.AtomicInteger;
87f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu
88f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport static android.telephony.TelephonyManager.NETWORK_TYPE_UNKNOWN;
89f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport static com.android.internal.telephony.RILConstants.*;
900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville/**
920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * {@hide}
930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */
9432c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold
950825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleclass RILRequest {
96cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    static final String LOG_TAG = "RilRequest";
970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    //***** Class Variables
997cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt    static Random sRandom = new Random();
1007cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt    static AtomicInteger sNextSerial = new AtomicInteger(0);
1010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private static Object sPoolSync = new Object();
1020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private static RILRequest sPool = null;
1030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private static int sPoolSize = 0;
1040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private static final int MAX_POOL_SIZE = 4;
105a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville    private Context mContext;
1060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    //***** Instance Variables
1080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    int mSerial;
1090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    int mRequest;
1100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    Message mResult;
11122d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville    Parcel mParcel;
1120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    RILRequest mNext;
11332c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold    int mWakeLockType;
114d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe    // time in ms when RIL request was made
115d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe    long mStartTimeMs;
1160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
1180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Retrieves a new RILRequest instance from the pool.
1190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
1200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @param request RIL_REQUEST_*
1210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @param result sent when operation completes
1220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @return a RILRequest instance from the pool.
1230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
1240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    static RILRequest obtain(int request, Message result) {
1250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = null;
1260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        synchronized(sPoolSync) {
1280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (sPool != null) {
1290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                rr = sPool;
1300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                sPool = rr.mNext;
1310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                rr.mNext = null;
1320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                sPoolSize--;
1330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
1340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
1350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (rr == null) {
1370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            rr = new RILRequest();
1380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
1390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1407cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt        rr.mSerial = sNextSerial.getAndIncrement();
1417cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt
1420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mRequest = request;
1430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mResult = result;
14422d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel = Parcel.obtain();
1450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
14632c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold        rr.mWakeLockType = RIL.INVALID_WAKELOCK;
147d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe        rr.mStartTimeMs = SystemClock.elapsedRealtime();
1480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (result != null && result.getTarget() == null) {
1490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            throw new NullPointerException("Message target must not be null");
1500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
1510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // first elements in any RIL Parcel
15322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(request);
15422d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(rr.mSerial);
1550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return rr;
1570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
1600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Returns a RILRequest instance to the pool.
1610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
1620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Note: This should only be called once per use.
1630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
1640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    void release() {
1650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        synchronized (sPoolSync) {
1660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (sPoolSize < MAX_POOL_SIZE) {
16722d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville                mNext = sPool;
1680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                sPool = this;
1690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                sPoolSize++;
1700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                mResult = null;
17132c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                if(mWakeLockType != RIL.INVALID_WAKELOCK) {
17232c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                    //This is OK for some wakelock types and not others
17332c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                    if(mWakeLockType == RIL.FOR_WAKELOCK) {
17432c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                        Rlog.e(LOG_TAG, "RILRequest releasing with held wake lock: "
17532c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                                + serialString());
17632c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                    }
17732c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                }
1780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
1790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
1800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private RILRequest() {
1830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    static void
1860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    resetSerial() {
1877cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt        // use a random so that on recovery we probably don't mix old requests
1887cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt        // with new.
1897cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt        sNextSerial.set(sRandom.nextInt());
1900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    String
1930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    serialString() {
1940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //Cheesy way to do %04d
1950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        StringBuilder sb = new StringBuilder(8);
1960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String sn;
1970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1987cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt        long adjustedSerial = (((long)mSerial) - Integer.MIN_VALUE)%10000;
1997cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt
2007cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt        sn = Long.toString(adjustedSerial);
2010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //sb.append("J[");
2030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        sb.append('[');
2040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        for (int i = 0, s = sn.length() ; i < 4 - s; i++) {
2050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            sb.append('0');
2060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
2070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        sb.append(sn);
2090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        sb.append(']');
2100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return sb.toString();
2110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
2120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    void
2140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    onError(int error, Object ret) {
2150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        CommandException ex;
2160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        ex = CommandException.fromRilErrno(error);
2180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
219fa4fd4721082689c4b276f67b845e7be249cb8daWink Saville        if (RIL.RILJ_LOGD) Rlog.d(LOG_TAG, serialString() + "< "
2200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            + RIL.requestToString(mRequest)
2213522c54a64f577f2b657a775dae9b4eb2d8003d5Wink Saville            + " error: " + ex + " ret=" + RIL.retToString(mRequest, ret));
2220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (mResult != null) {
2240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            AsyncResult.forMessage(mResult, ret, ex);
2250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            mResult.sendToTarget();
2260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
2270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
22822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        if (mParcel != null) {
22922d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville            mParcel.recycle();
23022d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville            mParcel = null;
2310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
2320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
2330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville}
2340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville/**
2370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * RIL implementation of the CommandsInterface.
2380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville *
2390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * {@hide}
2400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */
2410825495a331bb44df395a0cdb79fab85e68db5d5Wink Savillepublic final class RIL extends BaseCommands implements CommandsInterface {
242fa4fd4721082689c4b276f67b845e7be249cb8daWink Saville    static final String RILJ_LOG_TAG = "RILJ";
243a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe    // Have a separate wakelock instance for Ack
244a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe    static final String RILJ_ACK_WAKELOCK_NAME = "RILJ_ACK_WL";
2450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    static final boolean RILJ_LOGD = true;
246cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    static final boolean RILJ_LOGV = false; // STOPSHIP if true
247e694c1d4e5fd58c5ee2eebcc057bd0586022bcd7Yao Chen    static final int RADIO_SCREEN_UNSET = -1;
248e694c1d4e5fd58c5ee2eebcc057bd0586022bcd7Yao Chen    static final int RADIO_SCREEN_OFF = 0;
249e694c1d4e5fd58c5ee2eebcc057bd0586022bcd7Yao Chen    static final int RADIO_SCREEN_ON = 1;
250d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe    static final int RIL_HISTOGRAM_BUCKET_COUNT = 5;
2510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
2530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Wake lock timeout should be longer than the longest timeout in
2540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * the vendor ril.
2550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
2563464cbb60f1bf1127fd9e10efb05925f6f911b37Sanket Padawe    private static final int DEFAULT_WAKE_LOCK_TIMEOUT_MS = 60000;
2570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
258a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe    // Wake lock default timeout associated with ack
2593464cbb60f1bf1127fd9e10efb05925f6f911b37Sanket Padawe    private static final int DEFAULT_ACK_WAKE_LOCK_TIMEOUT_MS = 200;
260a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe
26132c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold    private static final int DEFAULT_BLOCKING_MESSAGE_RESPONSE_TIMEOUT_MS = 2000;
26232c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold
263a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe    // Variables used to differentiate ack messages from request while calling clearWakeLock()
26432c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold    public static final int INVALID_WAKELOCK = -1;
26532c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold    public static final int FOR_WAKELOCK = 0;
26632c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold    public static final int FOR_ACK_WAKELOCK = 1;
267a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe
2680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    //***** Instance Variables
2690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    LocalSocket mSocket;
2710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    HandlerThread mSenderThread;
2720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    RILSender mSender;
2730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    Thread mReceiverThread;
2740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    RILReceiver mReceiver;
27580795c239d6281db5fbf0f5a23494bfa3fb938f5Jeff Brown    Display mDefaultDisplay;
27680795c239d6281db5fbf0f5a23494bfa3fb938f5Jeff Brown    int mDefaultDisplayState = Display.STATE_UNKNOWN;
277e694c1d4e5fd58c5ee2eebcc057bd0586022bcd7Yao Chen    int mRadioScreenState = RADIO_SCREEN_UNSET;
278e694c1d4e5fd58c5ee2eebcc057bd0586022bcd7Yao Chen    boolean mIsDevicePlugged = false;
279a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe    final WakeLock mWakeLock;           // Wake lock associated with request/response
280a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe    final WakeLock mAckWakeLock;        // Wake lock associated with ack sent
281a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe    final int mWakeLockTimeout;         // Timeout associated with request/response
282a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe    final int mAckWakeLockTimeout;      // Timeout associated with ack sent
2837cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt    // The number of wakelock requests currently active.  Don't release the lock
2847cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt    // until dec'd to 0
2857cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt    int mWakeLockCount;
2867cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt
287a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe    // Variables used to identify releasing of WL on wakelock timeouts
288a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe    volatile int mWlSequenceNum = 0;
289a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe    volatile int mAckWlSequenceNum = 0;
290a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe
2917cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt    SparseArray<RILRequest> mRequestList = new SparseArray<RILRequest>();
292d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe    static SparseArray<TelephonyHistogram> mRilTimeHistograms = new
293d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe            SparseArray<TelephonyHistogram>();
2940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
295d39109502855e8d81e45e21161d8bf0cfacf42e0Sanket Padawe    Object[]     mLastNITZTimeInfo;
2960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // When we are testing emergency calls
2980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    AtomicBoolean mTestingEmergencyCall = new AtomicBoolean(false);
2990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
300a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville    private Integer mInstanceId;
301a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville
302f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu    private TelephonyMetrics mMetrics = TelephonyMetrics.getInstance();
3035054dfa7fd9b0520d30a102ed5a2107af11590c8Pavel Zhamaitsiak
3040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    //***** Events
3050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    static final int EVENT_SEND                 = 1;
3070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    static final int EVENT_WAKE_LOCK_TIMEOUT    = 2;
308060a6f0ba56dde532a9b9b28d4302df86a556691Sanket Padawe    static final int EVENT_SEND_ACK             = 3;
309a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe    static final int EVENT_ACK_WAKE_LOCK_TIMEOUT    = 4;
31032c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold    static final int EVENT_BLOCKING_RESPONSE_TIMEOUT = 5;
3110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    //***** Constants
3130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // match with constant in ril.cpp
3150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    static final int RIL_MAX_COMMAND_BYTES = (8 * 1024);
3160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    static final int RESPONSE_SOLICITED = 0;
3170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    static final int RESPONSE_UNSOLICITED = 1;
318060a6f0ba56dde532a9b9b28d4302df86a556691Sanket Padawe    static final int RESPONSE_SOLICITED_ACK = 2;
319060a6f0ba56dde532a9b9b28d4302df86a556691Sanket Padawe    static final int RESPONSE_SOLICITED_ACK_EXP = 3;
320a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe    static final int RESPONSE_UNSOLICITED_ACK_EXP = 4;
3210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
322a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville    static final String[] SOCKET_NAME_RIL = {"rild", "rild2", "rild3"};
3230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    static final int SOCKET_OPEN_RETRY_MILLIS = 4 * 1000;
3250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // The number of the required config values for broadcast SMS stored in the C struct
3270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // RIL_CDMA_BroadcastServiceInfo
3280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private static final int CDMA_BSI_NO_OF_INTS_STRUCT = 3;
3290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private static final int CDMA_BROADCAST_SMS_NO_OF_SERVICE_CATEGORIES = 31;
3310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
33280795c239d6281db5fbf0f5a23494bfa3fb938f5Jeff Brown    private final DisplayManager.DisplayListener mDisplayListener =
33380795c239d6281db5fbf0f5a23494bfa3fb938f5Jeff Brown            new DisplayManager.DisplayListener() {
3340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        @Override
33580795c239d6281db5fbf0f5a23494bfa3fb938f5Jeff Brown        public void onDisplayAdded(int displayId) { }
33680795c239d6281db5fbf0f5a23494bfa3fb938f5Jeff Brown
33780795c239d6281db5fbf0f5a23494bfa3fb938f5Jeff Brown        @Override
33880795c239d6281db5fbf0f5a23494bfa3fb938f5Jeff Brown        public void onDisplayRemoved(int displayId) { }
33980795c239d6281db5fbf0f5a23494bfa3fb938f5Jeff Brown
34080795c239d6281db5fbf0f5a23494bfa3fb938f5Jeff Brown        @Override
34180795c239d6281db5fbf0f5a23494bfa3fb938f5Jeff Brown        public void onDisplayChanged(int displayId) {
34280795c239d6281db5fbf0f5a23494bfa3fb938f5Jeff Brown            if (displayId == Display.DEFAULT_DISPLAY) {
343e694c1d4e5fd58c5ee2eebcc057bd0586022bcd7Yao Chen                final int oldState = mDefaultDisplayState;
344e694c1d4e5fd58c5ee2eebcc057bd0586022bcd7Yao Chen                mDefaultDisplayState = mDefaultDisplay.getState();
345e694c1d4e5fd58c5ee2eebcc057bd0586022bcd7Yao Chen                if (mDefaultDisplayState != oldState) {
346e694c1d4e5fd58c5ee2eebcc057bd0586022bcd7Yao Chen                    updateScreenState();
347e694c1d4e5fd58c5ee2eebcc057bd0586022bcd7Yao Chen                }
348e694c1d4e5fd58c5ee2eebcc057bd0586022bcd7Yao Chen            }
349e694c1d4e5fd58c5ee2eebcc057bd0586022bcd7Yao Chen        }
350e694c1d4e5fd58c5ee2eebcc057bd0586022bcd7Yao Chen    };
351e694c1d4e5fd58c5ee2eebcc057bd0586022bcd7Yao Chen
352e694c1d4e5fd58c5ee2eebcc057bd0586022bcd7Yao Chen    private final BroadcastReceiver mBatteryStateListener = new BroadcastReceiver() {
353e694c1d4e5fd58c5ee2eebcc057bd0586022bcd7Yao Chen        @Override
354e694c1d4e5fd58c5ee2eebcc057bd0586022bcd7Yao Chen        public void onReceive(Context context, Intent intent) {
355e694c1d4e5fd58c5ee2eebcc057bd0586022bcd7Yao Chen            boolean oldState = mIsDevicePlugged;
356e694c1d4e5fd58c5ee2eebcc057bd0586022bcd7Yao Chen            // 0 means it's on battery
357e694c1d4e5fd58c5ee2eebcc057bd0586022bcd7Yao Chen            mIsDevicePlugged = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0) != 0;
358e694c1d4e5fd58c5ee2eebcc057bd0586022bcd7Yao Chen            if (mIsDevicePlugged != oldState) {
35980795c239d6281db5fbf0f5a23494bfa3fb938f5Jeff Brown                updateScreenState();
3600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
3610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
3620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    };
3630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
364d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe    public static List<TelephonyHistogram> getTelephonyRILTimingHistograms() {
365d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe        List<TelephonyHistogram> list;
366d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe        synchronized (mRilTimeHistograms) {
367d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe            list = new ArrayList<>(mRilTimeHistograms.size());
368d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe            for (int i = 0; i < mRilTimeHistograms.size(); i++) {
369d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe                TelephonyHistogram entry = new TelephonyHistogram(mRilTimeHistograms.valueAt(i));
370d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe                list.add(entry);
371d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe            }
372d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe        }
373d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe        return list;
374d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe    }
375d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe
3760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    class RILSender extends Handler implements Runnable {
3770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        public RILSender(Looper looper) {
3780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            super(looper);
3790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
3800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // Only allocated once
3820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        byte[] dataLength = new byte[4];
3830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //***** Runnable implementation
385cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville        @Override
3860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        public void
3870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        run() {
3880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            //setup if needed
3890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
3900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //***** Handler implementation
3930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        @Override public void
3940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        handleMessage(Message msg) {
3950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            RILRequest rr = (RILRequest)(msg.obj);
3960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            RILRequest req = null;
3970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            switch (msg.what) {
3990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                case EVENT_SEND:
400060a6f0ba56dde532a9b9b28d4302df86a556691Sanket Padawe                case EVENT_SEND_ACK:
4010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    try {
4020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        LocalSocket s;
4030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        s = mSocket;
4050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        if (s == null) {
4070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            rr.onError(RADIO_NOT_AVAILABLE, null);
40832c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                            decrementWakeLock(rr);
4090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            rr.release();
4100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            return;
4110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        }
4120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
413060a6f0ba56dde532a9b9b28d4302df86a556691Sanket Padawe                        // Acks should not be stored in list before sending
414060a6f0ba56dde532a9b9b28d4302df86a556691Sanket Padawe                        if (msg.what != EVENT_SEND_ACK) {
415060a6f0ba56dde532a9b9b28d4302df86a556691Sanket Padawe                            synchronized (mRequestList) {
416d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe                                rr.mStartTimeMs = SystemClock.elapsedRealtime();
417060a6f0ba56dde532a9b9b28d4302df86a556691Sanket Padawe                                mRequestList.append(rr.mSerial, rr);
418060a6f0ba56dde532a9b9b28d4302df86a556691Sanket Padawe                            }
4190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        }
4200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        byte[] data;
4220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
42322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville                        data = rr.mParcel.marshall();
42422d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville                        rr.mParcel.recycle();
42522d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville                        rr.mParcel = null;
4260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        if (data.length > RIL_MAX_COMMAND_BYTES) {
4280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            throw new RuntimeException(
4290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                    "Parcel larger than max bytes allowed! "
4300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                                          + data.length);
4310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        }
4320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        // parcel length in big endian
4340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        dataLength[0] = dataLength[1] = 0;
4350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        dataLength[2] = (byte)((data.length >> 8) & 0xff);
4360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        dataLength[3] = (byte)((data.length) & 0xff);
4370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
438fa4fd4721082689c4b276f67b845e7be249cb8daWink Saville                        //Rlog.v(RILJ_LOG_TAG, "writing packet: " + data.length + " bytes");
4390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        s.getOutputStream().write(dataLength);
4410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        s.getOutputStream().write(data);
442d0fdd8bd6ab1261ad474a3e7cddcc99090613931Sanket Padawe                        if (msg.what == EVENT_SEND_ACK) {
443d0fdd8bd6ab1261ad474a3e7cddcc99090613931Sanket Padawe                            rr.release();
444d0fdd8bd6ab1261ad474a3e7cddcc99090613931Sanket Padawe                            return;
445d0fdd8bd6ab1261ad474a3e7cddcc99090613931Sanket Padawe                        }
4460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    } catch (IOException ex) {
447fa4fd4721082689c4b276f67b845e7be249cb8daWink Saville                        Rlog.e(RILJ_LOG_TAG, "IOException", ex);
4480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        req = findAndRemoveRequestFromList(rr.mSerial);
4490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        // make sure this request has not already been handled,
4500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        // eg, if RILReceiver cleared the list.
4517cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt                        if (req != null) {
4520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            rr.onError(RADIO_NOT_AVAILABLE, null);
45332c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                            decrementWakeLock(rr);
4540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            rr.release();
455d0fdd8bd6ab1261ad474a3e7cddcc99090613931Sanket Padawe                            return;
4560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        }
4570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    } catch (RuntimeException exc) {
458fa4fd4721082689c4b276f67b845e7be249cb8daWink Saville                        Rlog.e(RILJ_LOG_TAG, "Uncaught exception ", exc);
4590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        req = findAndRemoveRequestFromList(rr.mSerial);
4600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        // make sure this request has not already been handled,
4610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        // eg, if RILReceiver cleared the list.
4627cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt                        if (req != null) {
4630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            rr.onError(GENERIC_FAILURE, null);
46432c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                            decrementWakeLock(rr);
4650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            rr.release();
466d0fdd8bd6ab1261ad474a3e7cddcc99090613931Sanket Padawe                            return;
4670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        }
4680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    }
4690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    break;
4710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                case EVENT_WAKE_LOCK_TIMEOUT:
4730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    // Haven't heard back from the last request.  Assume we're
4740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    // not getting a response and  release the wake lock.
4750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4767cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt                    // The timer of WAKE_LOCK_TIMEOUT is reset with each
4777cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt                    // new send request. So when WAKE_LOCK_TIMEOUT occurs
4787cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt                    // all requests in mRequestList already waited at
4793464cbb60f1bf1127fd9e10efb05925f6f911b37Sanket Padawe                    // least DEFAULT_WAKE_LOCK_TIMEOUT_MS but no response.
4807cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt                    //
4817cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt                    // Note: Keep mRequestList so that delayed response
4827cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt                    // can still be handled when response finally comes.
4837cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt
4847cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt                    synchronized (mRequestList) {
485a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe                        if (msg.arg1 == mWlSequenceNum && clearWakeLock(FOR_WAKELOCK)) {
4867cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt                            if (RILJ_LOGD) {
4877cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt                                int count = mRequestList.size();
4886613a961473a72c218ec505e384dad6b19049aa0Robert Greenwalt                                Rlog.d(RILJ_LOG_TAG, "WAKE_LOCK_TIMEOUT " +
4897cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt                                        " mRequestList=" + count);
4907cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt                                for (int i = 0; i < count; i++) {
4917cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt                                    rr = mRequestList.valueAt(i);
4926613a961473a72c218ec505e384dad6b19049aa0Robert Greenwalt                                    Rlog.d(RILJ_LOG_TAG, i + ": [" + rr.mSerial + "] "
4937cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt                                            + requestToString(rr.mRequest));
4947cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt                                }
4950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            }
4960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        }
4970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    }
4980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    break;
499a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe
500a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe                case EVENT_ACK_WAKE_LOCK_TIMEOUT:
501a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe                    if (msg.arg1 == mAckWlSequenceNum && clearWakeLock(FOR_ACK_WAKELOCK)) {
50234dffd7066bcf421829e249f56288bc33735eaf4Sanket Padawe                        if (RILJ_LOGV) {
503a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe                            Rlog.d(RILJ_LOG_TAG, "ACK_WAKE_LOCK_TIMEOUT");
504a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe                        }
505a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe                    }
506a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe                    break;
50732c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold
50832c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                case EVENT_BLOCKING_RESPONSE_TIMEOUT:
50932c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                    int serial = msg.arg1;
51032c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                    rr = findAndRemoveRequestFromList(serial);
51132c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                    // If the request has already been processed, do nothing
51232c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                    if(rr == null) {
51332c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                        break;
51432c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                    }
51532c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold
51632c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                    //build a response if expected
51732c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                    if (rr.mResult != null) {
51832c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                        Object timeoutResponse = getResponseForTimedOutRILRequest(rr);
51932c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                        AsyncResult.forMessage( rr.mResult, timeoutResponse, null);
52032c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                        rr.mResult.sendToTarget();
521f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu                        mMetrics.writeOnRilTimeoutResponse(mInstanceId, rr.mSerial, rr.mRequest);
52232c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                    }
52332c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold
52432c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                    decrementWakeLock(rr);
52532c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                    rr.release();
52632c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                    break;
5270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
5280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
5290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
5300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
53232c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold     * In order to prevent calls to Telephony from waiting indefinitely
53332c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold     * low-latency blocking calls will eventually time out. In the event of
53432c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold     * a timeout, this function generates a response that is returned to the
53532c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold     * higher layers to unblock the call. This is in lieu of a meaningful
53632c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold     * response.
53732c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold     * @param rr The RIL Request that has timed out.
53832c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold     * @return A default object, such as the one generated by a normal response
53932c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold     * that is returned to the higher layers.
54032c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold     **/
54132c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold    private static Object getResponseForTimedOutRILRequest(RILRequest rr) {
54232c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold        if (rr == null ) return null;
54332c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold
54432c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold        Object timeoutResponse = null;
54532c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold        switch(rr.mRequest) {
54632c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold            case RIL_REQUEST_GET_ACTIVITY_INFO:
54732c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                timeoutResponse = new ModemActivityInfo(
54832c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                        0, 0, 0, new int [ModemActivityInfo.TX_POWER_LEVELS], 0, 0);
54932c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                break;
55032c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold        };
55132c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold        return timeoutResponse;
55232c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold    }
55332c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold
55432c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold    /**
5550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Reads in a single RIL message off the wire. A RIL message consists
5560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * of a 4-byte little-endian length and a subsequent series of bytes.
5570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * The final message (length header omitted) is read into
5580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * <code>buffer</code> and the length of the final message (less header)
5590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * is returned. A return value of -1 indicates end-of-stream.
5600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
5610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @param is non-null; Stream to read from
5620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @param buffer Buffer to fill in. Must be as large as maximum
5630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * message size, or an ArrayOutOfBounds exception will be thrown.
5640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @return Length of message less header, or -1 on end of stream.
5650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @throws IOException
5660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
5670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private static int readRilMessage(InputStream is, byte[] buffer)
5680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            throws IOException {
5690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int countRead;
5700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int offset;
5710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int remaining;
5720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int messageLength;
5730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // First, read in the length of the message
5750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        offset = 0;
5760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        remaining = 4;
5770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        do {
5780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            countRead = is.read(buffer, offset, remaining);
5790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (countRead < 0 ) {
581fa4fd4721082689c4b276f67b845e7be249cb8daWink Saville                Rlog.e(RILJ_LOG_TAG, "Hit EOS reading message length");
5820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                return -1;
5830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
5840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            offset += countRead;
5860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            remaining -= countRead;
5870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } while (remaining > 0);
5880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        messageLength = ((buffer[0] & 0xff) << 24)
5900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                | ((buffer[1] & 0xff) << 16)
5910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                | ((buffer[2] & 0xff) << 8)
5920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                | (buffer[3] & 0xff);
5930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // Then, re-use the buffer and read in the message itself
5950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        offset = 0;
5960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        remaining = messageLength;
5970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        do {
5980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            countRead = is.read(buffer, offset, remaining);
5990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (countRead < 0 ) {
601fa4fd4721082689c4b276f67b845e7be249cb8daWink Saville                Rlog.e(RILJ_LOG_TAG, "Hit EOS reading message.  messageLength=" + messageLength
6020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        + " remaining=" + remaining);
6030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                return -1;
6040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
6050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            offset += countRead;
6070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            remaining -= countRead;
6080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } while (remaining > 0);
6090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return messageLength;
6110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
6120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    class RILReceiver implements Runnable {
6140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        byte[] buffer;
6150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILReceiver() {
6170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            buffer = new byte[RIL_MAX_COMMAND_BYTES];
6180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
6190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
620cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville        @Override
6210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        public void
6220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        run() {
6230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            int retryCount = 0;
624a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville            String rilSocket = "rild";
6250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            try {for (;;) {
6270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                LocalSocket s = null;
6280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                LocalSocketAddress l;
6290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
630a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                if (mInstanceId == null || mInstanceId == 0 ) {
631a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                    rilSocket = SOCKET_NAME_RIL[0];
632a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                } else {
633a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                    rilSocket = SOCKET_NAME_RIL[mInstanceId];
634a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                }
635a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville
6360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                try {
6370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    s = new LocalSocket();
638a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                    l = new LocalSocketAddress(rilSocket,
6390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            LocalSocketAddress.Namespace.RESERVED);
6400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    s.connect(l);
6410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                } catch (IOException ex){
6420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    try {
6430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        if (s != null) {
6440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            s.close();
6450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        }
6460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    } catch (IOException ex2) {
6470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        //ignore failure to close after failure to connect
6480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    }
6490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    // don't print an error message after the the first time
6510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    // or after the 8th time
6520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    if (retryCount == 8) {
654fa4fd4721082689c4b276f67b845e7be249cb8daWink Saville                        Rlog.e (RILJ_LOG_TAG,
655a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                            "Couldn't find '" + rilSocket
6560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            + "' socket after " + retryCount
6570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            + " times, continuing to retry silently");
6586bc4098827f3070a44b5e51508b455d7c7be9c07Wink Saville                    } else if (retryCount >= 0 && retryCount < 8) {
659fa4fd4721082689c4b276f67b845e7be249cb8daWink Saville                        Rlog.i (RILJ_LOG_TAG,
660a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                            "Couldn't find '" + rilSocket
6610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            + "' socket; retrying after timeout");
6620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    }
6630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    try {
6650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        Thread.sleep(SOCKET_OPEN_RETRY_MILLIS);
6660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    } catch (InterruptedException er) {
6670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    }
6680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    retryCount++;
6700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    continue;
6710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
6720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                retryCount = 0;
6740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                mSocket = s;
6766bc4098827f3070a44b5e51508b455d7c7be9c07Wink Saville                Rlog.i(RILJ_LOG_TAG, "(" + mInstanceId + ") Connected to '"
6776bc4098827f3070a44b5e51508b455d7c7be9c07Wink Saville                        + rilSocket + "' socket");
6780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                int length = 0;
6800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                try {
6810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    InputStream is = mSocket.getInputStream();
6820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    for (;;) {
6840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        Parcel p;
6850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        length = readRilMessage(is, buffer);
6870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        if (length < 0) {
6890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            // End-of-stream reached
6900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            break;
6910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        }
6920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        p = Parcel.obtain();
6940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        p.unmarshall(buffer, 0, length);
6950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        p.setDataPosition(0);
6960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
697fa4fd4721082689c4b276f67b845e7be249cb8daWink Saville                        //Rlog.v(RILJ_LOG_TAG, "Read packet: " + length + " bytes");
6980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        processResponse(p);
7000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        p.recycle();
7010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    }
7020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                } catch (java.io.IOException ex) {
703a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                    Rlog.i(RILJ_LOG_TAG, "'" + rilSocket + "' socket closed",
7040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                          ex);
7050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                } catch (Throwable tr) {
706fa4fd4721082689c4b276f67b845e7be249cb8daWink Saville                    Rlog.e(RILJ_LOG_TAG, "Uncaught exception read length=" + length +
7070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        "Exception:" + tr.toString());
7080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
7090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7106bc4098827f3070a44b5e51508b455d7c7be9c07Wink Saville                Rlog.i(RILJ_LOG_TAG, "(" + mInstanceId + ") Disconnected from '" + rilSocket
7110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                      + "' socket");
7120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                setRadioState (RadioState.RADIO_UNAVAILABLE);
7140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                try {
7160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mSocket.close();
7170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                } catch (IOException ex) {
7180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
7190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                mSocket = null;
7210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                RILRequest.resetSerial();
7220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                // Clear request list on close
724892e1fecf3c3736c4c04cf219d01034f71307065Robert Greenwalt                clearRequestList(RADIO_NOT_AVAILABLE, false);
7250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }} catch (Throwable tr) {
726fa4fd4721082689c4b276f67b845e7be249cb8daWink Saville                Rlog.e(RILJ_LOG_TAG,"Uncaught exception", tr);
7270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
7280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            /* We're disconnected so we don't know the ril version */
7300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            notifyRegistrantsRilConnectionChanged(-1);
7310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
7320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
7330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    //***** Constructors
7370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public RIL(Context context, int preferredNetworkType, int cdmaSubscription) {
739a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        this(context, preferredNetworkType, cdmaSubscription, null);
740a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville    }
741a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville
742a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville    public RIL(Context context, int preferredNetworkType,
743a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville            int cdmaSubscription, Integer instanceId) {
7440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        super(context);
7450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) {
7460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            riljLog("RIL(context, preferredNetworkType=" + preferredNetworkType +
7470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    " cdmaSubscription=" + cdmaSubscription + ")");
7480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
7497cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt
750a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        mContext = context;
7510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mCdmaSubscription  = cdmaSubscription;
7520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mPreferredNetworkType = preferredNetworkType;
7530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mPhoneType = RILConstants.NO_PHONE;
754a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        mInstanceId = instanceId;
7550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
757fa4fd4721082689c4b276f67b845e7be249cb8daWink Saville        mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, RILJ_LOG_TAG);
7580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mWakeLock.setReferenceCounted(false);
759a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe        mAckWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, RILJ_ACK_WAKELOCK_NAME);
760a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe        mAckWakeLock.setReferenceCounted(false);
7610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mWakeLockTimeout = SystemProperties.getInt(TelephonyProperties.PROPERTY_WAKE_LOCK_TIMEOUT,
7623464cbb60f1bf1127fd9e10efb05925f6f911b37Sanket Padawe                DEFAULT_WAKE_LOCK_TIMEOUT_MS);
763a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe        mAckWakeLockTimeout = SystemProperties.getInt(
7643464cbb60f1bf1127fd9e10efb05925f6f911b37Sanket Padawe                TelephonyProperties.PROPERTY_WAKE_LOCK_TIMEOUT, DEFAULT_ACK_WAKE_LOCK_TIMEOUT_MS);
7657cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt        mWakeLockCount = 0;
7660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7676bc4098827f3070a44b5e51508b455d7c7be9c07Wink Saville        mSenderThread = new HandlerThread("RILSender" + mInstanceId);
7680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mSenderThread.start();
7690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        Looper looper = mSenderThread.getLooper();
7710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mSender = new RILSender(looper);
7720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        ConnectivityManager cm = (ConnectivityManager)context.getSystemService(
7740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                Context.CONNECTIVITY_SERVICE);
7750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (cm.isNetworkSupported(ConnectivityManager.TYPE_MOBILE) == false) {
7760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            riljLog("Not starting RILReceiver: wifi-only");
7770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else {
7786bc4098827f3070a44b5e51508b455d7c7be9c07Wink Saville            riljLog("Starting RILReceiver" + mInstanceId);
7790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            mReceiver = new RILReceiver();
7806bc4098827f3070a44b5e51508b455d7c7be9c07Wink Saville            mReceiverThread = new Thread(mReceiver, "RILReceiver" + mInstanceId);
7810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            mReceiverThread.start();
7820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
78380795c239d6281db5fbf0f5a23494bfa3fb938f5Jeff Brown            DisplayManager dm = (DisplayManager)context.getSystemService(
78480795c239d6281db5fbf0f5a23494bfa3fb938f5Jeff Brown                    Context.DISPLAY_SERVICE);
78580795c239d6281db5fbf0f5a23494bfa3fb938f5Jeff Brown            mDefaultDisplay = dm.getDisplay(Display.DEFAULT_DISPLAY);
78680795c239d6281db5fbf0f5a23494bfa3fb938f5Jeff Brown            dm.registerDisplayListener(mDisplayListener, null);
787bdbd98133976d44126008a745eda8c0309bce6f5Sungmin Choi            mDefaultDisplayState = mDefaultDisplay.getState();
788e694c1d4e5fd58c5ee2eebcc057bd0586022bcd7Yao Chen
789e694c1d4e5fd58c5ee2eebcc057bd0586022bcd7Yao Chen            IntentFilter filter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
790e694c1d4e5fd58c5ee2eebcc057bd0586022bcd7Yao Chen            Intent batteryStatus = context.registerReceiver(mBatteryStateListener, filter);
791e694c1d4e5fd58c5ee2eebcc057bd0586022bcd7Yao Chen            if (batteryStatus != null) {
792e694c1d4e5fd58c5ee2eebcc057bd0586022bcd7Yao Chen                // 0 means it's on battery
793e694c1d4e5fd58c5ee2eebcc057bd0586022bcd7Yao Chen                mIsDevicePlugged = batteryStatus.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0) != 0;
794e694c1d4e5fd58c5ee2eebcc057bd0586022bcd7Yao Chen            }
7950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
796a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville
797a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        TelephonyDevController tdc = TelephonyDevController.getInstance();
798a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        tdc.registerRIL(this);
7990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
8000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    //***** CommandsInterface implementation
8020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
803cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
8040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void getVoiceRadioTechnology(Message result) {
8050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_VOICE_RADIO_TECH, result);
8060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
8080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
8100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
8110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8131260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa    public void getImsRegistrationState(Message result) {
8141260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa        RILRequest rr = RILRequest.obtain(RIL_REQUEST_IMS_REGISTRATION_STATE, result);
8151260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa
8161260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa        if (RILJ_LOGD) {
8171260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa            riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
8181260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa        }
8191260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa        send(rr);
8201260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa    }
8211260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa
8220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override public void
8230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    setOnNITZTime(Handler h, int what, Object obj) {
8240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        super.setOnNITZTime(h, what, obj);
8250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // Send the last NITZ time if we have it
8270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (mLastNITZTimeInfo != null) {
8280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            mNITZTimeRegistrant
8290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                .notifyRegistrant(
8300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    new AsyncResult (null, mLastNITZTimeInfo, null));
8310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
8320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
8330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
834cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
8350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
8360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    getIccCardStatus(Message result) {
8370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //Note: This RIL request has not been renamed to ICC,
8380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //       but this request is also valid for SIM and RUIM
8390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_GET_SIM_STATUS, result);
8400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
8420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
8440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
8450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
846a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville    public void setUiccSubscription(int slotId, int appIndex, int subId,
847a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville            int subStatus, Message result) {
848a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        //Note: This RIL request is also valid for SIM and RUIM (ICC card)
849a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_SET_UICC_SUBSCRIPTION, result);
850a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville
851a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
852a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                + " slot: " + slotId + " appIndex: " + appIndex
853a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                + " subId: " + subId + " subStatus: " + subStatus);
854a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville
855a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        rr.mParcel.writeInt(slotId);
856a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        rr.mParcel.writeInt(appIndex);
857a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        rr.mParcel.writeInt(subId);
858a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        rr.mParcel.writeInt(subStatus);
859a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville
860a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        send(rr);
861a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville    }
862a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville
863a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville    // FIXME This API should take an AID and slot ID
864a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville    public void setDataAllowed(boolean allowed, Message result) {
865a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_ALLOW_DATA, result);
866a5ea9112a448ee8a51df1a2317457ae560a191f2Robert Greenwalt        if (RILJ_LOGD) {
867a5ea9112a448ee8a51df1a2317457ae560a191f2Robert Greenwalt            riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) +
868a5ea9112a448ee8a51df1a2317457ae560a191f2Robert Greenwalt                    " allowed: " + allowed);
869a5ea9112a448ee8a51df1a2317457ae560a191f2Robert Greenwalt        }
870a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville
871a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        rr.mParcel.writeInt(1);
872a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        rr.mParcel.writeInt(allowed ? 1 : 0);
873a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        send(rr);
874a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville    }
875a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville
8760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override public void
8770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    supplyIccPin(String pin, Message result) {
8780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        supplyIccPinForApp(pin, null, result);
8790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
8800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override public void
8820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    supplyIccPinForApp(String pin, String aid, Message result) {
8830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //Note: This RIL request has not been renamed to ICC,
8840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //       but this request is also valid for SIM and RUIM
8850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_ENTER_SIM_PIN, result);
8860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
8880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
88922d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(2);
89022d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(pin);
89122d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(aid);
8920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
8940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
8950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override public void
8970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    supplyIccPuk(String puk, String newPin, Message result) {
8980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        supplyIccPukForApp(puk, newPin, null, result);
8990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
9000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override public void
9020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    supplyIccPukForApp(String puk, String newPin, String aid, Message result) {
9030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //Note: This RIL request has not been renamed to ICC,
9040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //       but this request is also valid for SIM and RUIM
9050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_ENTER_SIM_PUK, result);
9060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
9080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
90922d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(3);
91022d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(puk);
91122d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(newPin);
91222d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(aid);
9130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
9150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
9160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override public void
9180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    supplyIccPin2(String pin, Message result) {
9190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        supplyIccPin2ForApp(pin, null, result);
9200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
9210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override public void
9230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    supplyIccPin2ForApp(String pin, String aid, Message result) {
9240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //Note: This RIL request has not been renamed to ICC,
9250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //       but this request is also valid for SIM and RUIM
9260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_ENTER_SIM_PIN2, result);
9270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
9290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
93022d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(2);
93122d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(pin);
93222d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(aid);
9330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
9350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
9360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override public void
9380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    supplyIccPuk2(String puk2, String newPin2, Message result) {
9390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        supplyIccPuk2ForApp(puk2, newPin2, null, result);
9400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
9410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override public void
9430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    supplyIccPuk2ForApp(String puk, String newPin2, String aid, Message result) {
9440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //Note: This RIL request has not been renamed to ICC,
9450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //       but this request is also valid for SIM and RUIM
9460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_ENTER_SIM_PUK2, result);
9470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
9490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
95022d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(3);
95122d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(puk);
95222d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(newPin2);
95322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(aid);
9540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
9560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
9570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override public void
9590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    changeIccPin(String oldPin, String newPin, Message result) {
9600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        changeIccPinForApp(oldPin, newPin, null, result);
9610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
9620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override public void
9640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    changeIccPinForApp(String oldPin, String newPin, String aid, Message result) {
9650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //Note: This RIL request has not been renamed to ICC,
9660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //       but this request is also valid for SIM and RUIM
9670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CHANGE_SIM_PIN, result);
9680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
9700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
97122d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(3);
97222d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(oldPin);
97322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(newPin);
97422d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(aid);
9750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
9770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
9780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override public void
9800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    changeIccPin2(String oldPin2, String newPin2, Message result) {
9810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        changeIccPin2ForApp(oldPin2, newPin2, null, result);
9820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
9830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override public void
9850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    changeIccPin2ForApp(String oldPin2, String newPin2, String aid, Message result) {
9860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //Note: This RIL request has not been renamed to ICC,
9870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //       but this request is also valid for SIM and RUIM
9880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CHANGE_SIM_PIN2, result);
9890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
9910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
99222d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(3);
99322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(oldPin2);
99422d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(newPin2);
99522d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(aid);
9960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
9980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
9990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1000cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
10010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
10020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    changeBarringPassword(String facility, String oldPwd, String newPwd, Message result) {
10030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CHANGE_BARRING_PASSWORD, result);
10040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
10050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
10060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
100722d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(3);
100822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(facility);
100922d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(oldPwd);
101022d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(newPwd);
10110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
10120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
10130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
10140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1015cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
10160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
10170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    supplyNetworkDepersonalization(String netpin, Message result) {
10180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_ENTER_NETWORK_DEPERSONALIZATION, result);
10190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
10200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
10210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
102222d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(1);
102322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(netpin);
10240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
10250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
10260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
10270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1028cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
10290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
10300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    getCurrentCalls (Message result) {
10310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_GET_CURRENT_CALLS, result);
10320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
10330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
10340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
10350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
10360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
10370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1038cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
10390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Deprecated public void
10400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    getPDPContextList(Message result) {
10410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        getDataCallList(result);
10420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
10430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1044cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
10450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
10460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    getDataCallList(Message result) {
10470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_DATA_CALL_LIST, result);
10480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
10490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
10500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
10510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
10520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
10530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1054cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
10550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
10560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    dial (String address, int clirMode, Message result) {
10570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        dial(address, clirMode, null, result);
10580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
10590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1060cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
10610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
10620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    dial(String address, int clirMode, UUSInfo uusInfo, Message result) {
10630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_DIAL, result);
10640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
106522d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(address);
106622d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(clirMode);
10670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
10680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (uusInfo == null) {
106922d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville            rr.mParcel.writeInt(0); // UUS information is absent
10700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else {
107122d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville            rr.mParcel.writeInt(1); // UUS information is present
107222d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville            rr.mParcel.writeInt(uusInfo.getType());
107322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville            rr.mParcel.writeInt(uusInfo.getDcs());
107422d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville            rr.mParcel.writeByteArray(uusInfo.getUserData());
10750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
10760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
10770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
10780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
10790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
10800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
10810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1082cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
10830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
10840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    getIMSI(Message result) {
10850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        getIMSIForApp(null, result);
10860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
10870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1088cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
10890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
10900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    getIMSIForApp(String aid, Message result) {
10910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_GET_IMSI, result);
10920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
109322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(1);
109422d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(aid);
10950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
10960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() +
10970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                              "> getIMSI: " + requestToString(rr.mRequest)
10980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                              + " aid: " + aid);
10990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
11010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
11020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1103cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
11040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
11050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    getIMEI(Message result) {
11060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_GET_IMEI, result);
11070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
11090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
11110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
11120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1113cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
11140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
11150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    getIMEISV(Message result) {
11160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_GET_IMEISV, result);
11170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
11190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
11210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
11220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1124cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
11250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
11260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    hangupConnection (int gsmIndex, Message result) {
11270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog("hangupConnection: gsmIndex=" + gsmIndex);
11280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_HANGUP, result);
11300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " " +
11320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                gsmIndex);
11330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
113422d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(1);
113522d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(gsmIndex);
11360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
11380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
11390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1140cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
11410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
11420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    hangupWaitingOrBackground (Message result) {
11430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_HANGUP_WAITING_OR_BACKGROUND,
11440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                        result);
11450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
11470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
11490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
11500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1151cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
11520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
11530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    hangupForegroundResumeBackground (Message result) {
11540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
11550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(
11560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        RIL_REQUEST_HANGUP_FOREGROUND_RESUME_BACKGROUND,
11570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                        result);
11580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
11590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
11610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
11620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1163cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
11640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
11650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    switchWaitingOrHoldingAndActive (Message result) {
11660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
11670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(
11680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        RIL_REQUEST_SWITCH_WAITING_OR_HOLDING_AND_ACTIVE,
11690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                        result);
11700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
11710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
11730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
11740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1175cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
11760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
11770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    conference (Message result) {
11780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
11790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_CONFERENCE, result);
11800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
11820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
11840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
11850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1187cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
11880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void setPreferredVoicePrivacy(boolean enable, Message result) {
11890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CDMA_SET_PREFERRED_VOICE_PRIVACY_MODE,
11900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                result);
11910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
119222d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(1);
119322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(enable ? 1:0);
11940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
11960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
11970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1198cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
11990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void getPreferredVoicePrivacy(Message result) {
12000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CDMA_QUERY_PREFERRED_VOICE_PRIVACY_MODE,
12010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                result);
12020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
12030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
12040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1205cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
12060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
12070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    separateConnection (int gsmIndex, Message result) {
12080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
12090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_SEPARATE_CONNECTION, result);
12100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
12110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
12120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            + " " + gsmIndex);
12130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
121422d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(1);
121522d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(gsmIndex);
12160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
12170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
12180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
12190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1220cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
12210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
12220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    acceptCall (Message result) {
12230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
12240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_ANSWER, result);
12250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
12260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
12270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1228f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu        mMetrics.writeRilAnswer(mInstanceId, rr.mSerial);
12295054dfa7fd9b0520d30a102ed5a2107af11590c8Pavel Zhamaitsiak
12300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
12310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
12320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1233cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
12340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
12350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    rejectCall (Message result) {
12360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
12370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_UDUB, result);
12380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
12390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
12400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
12410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
12420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
12430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1244cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
12450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
12460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    explicitCallTransfer (Message result) {
12470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
12480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_EXPLICIT_CALL_TRANSFER, result);
12490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
12500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
12510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
12520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
12530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
12540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1255cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
12560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
12570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    getLastCallFailCause (Message result) {
12580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
12590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_LAST_CALL_FAIL_CAUSE, result);
12600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
12610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
12620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
12630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
12640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
12650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
12660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
12670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @deprecated
12680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
1269cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Deprecated
1270cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
12710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
12720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    getLastPdpFailCause (Message result) {
12730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        getLastDataCallFailCause (result);
12740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
12750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
12760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
12770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * The preferred new alternative to getLastPdpFailCause
12780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
1279cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
12800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
12810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    getLastDataCallFailCause (Message result) {
12820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
12830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_LAST_DATA_CALL_FAIL_CAUSE, result);
12840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
12850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
12860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
12870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
12880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
12890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1290cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
12910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
12920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    setMute (boolean enableMute, Message response) {
12930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
12940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_SET_MUTE, response);
12950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
12960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
12970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            + " " + enableMute);
12980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
129922d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(1);
130022d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(enableMute ? 1 : 0);
13010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
13020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
13030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
13040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1305cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
13060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
13070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    getMute (Message response) {
13080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
13090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_GET_MUTE, response);
13100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
13110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
13120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
13130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
13140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
13150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1316cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
13170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
13180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    getSignalStrength (Message result) {
13190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
13200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_SIGNAL_STRENGTH, result);
13210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
13220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
13230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
13240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
13250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
13260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1327cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
13280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
13290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    getVoiceRegistrationState (Message result) {
13300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
13310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_VOICE_REGISTRATION_STATE, result);
13320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
13330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
13340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
13350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
13360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
13370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1338cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
13390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
13400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    getDataRegistrationState (Message result) {
13410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
13420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_DATA_REGISTRATION_STATE, result);
13430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
13440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
13450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
13460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
13470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
13480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1349cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
13500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
13510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    getOperator(Message result) {
13520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
13530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_OPERATOR, result);
13540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
13550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
13560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
13570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
13580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
13590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1360cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
13610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
1362a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville    getHardwareConfig (Message result) {
1363a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_GET_HARDWARE_CONFIG, result);
1364a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville
1365a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
1366a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville
1367a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        send(rr);
1368a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville    }
1369a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville
1370a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville    @Override
1371a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville    public void
13720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    sendDtmf(char c, Message result) {
13730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
13740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_DTMF, result);
13750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
13760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
13770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
137822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(Character.toString(c));
13790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
13800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
13810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
13820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1383cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
13840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
13850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    startDtmf(char c, Message result) {
13860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
13870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_DTMF_START, result);
13880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
13890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
13900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
139122d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(Character.toString(c));
13920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
13930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
13940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
13950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1396cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
13970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
13980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    stopDtmf(Message result) {
13990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
14000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_DTMF_STOP, result);
14010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
14020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
14030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
14040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
14050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
14060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1407cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
14080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
14090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    sendBurstDtmf(String dtmfString, int on, int off, Message result) {
14100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CDMA_BURST_DTMF, result);
14110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
141222d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(3);
141322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(dtmfString);
141422d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(Integer.toString(on));
141522d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(Integer.toString(off));
14160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
14170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
14180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + " : " + dtmfString);
14190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
14200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
14210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
14220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
14231260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa    private void
14241260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa    constructGsmSendSmsRilRequest (RILRequest rr, String smscPDU, String pdu) {
14251260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa        rr.mParcel.writeInt(2);
14261260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa        rr.mParcel.writeString(smscPDU);
14271260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa        rr.mParcel.writeString(pdu);
14281260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa    }
14291260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa
14300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
14310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    sendSMS (String smscPDU, String pdu, Message result) {
14320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
14330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_SEND_SMS, result);
14340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
14351260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa        constructGsmSendSmsRilRequest(rr, smscPDU, pdu);
14360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
14370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
14380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1439f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu        mMetrics.writeRilSendSms(mInstanceId, rr.mSerial, SmsSession.Event.Tech.SMS_GSM,
1440f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu                SmsSession.Event.Format.SMS_FORMAT_3GPP);
14415054dfa7fd9b0520d30a102ed5a2107af11590c8Pavel Zhamaitsiak
14420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
14430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
14440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
14456ad88a8a2caf739e78c8d5f7f50fc7fa84a07ca7Chaitanya Saggurthi    @Override
14466ad88a8a2caf739e78c8d5f7f50fc7fa84a07ca7Chaitanya Saggurthi    public void
14476ad88a8a2caf739e78c8d5f7f50fc7fa84a07ca7Chaitanya Saggurthi    sendSMSExpectMore (String smscPDU, String pdu, Message result) {
14486ad88a8a2caf739e78c8d5f7f50fc7fa84a07ca7Chaitanya Saggurthi        RILRequest rr
14496ad88a8a2caf739e78c8d5f7f50fc7fa84a07ca7Chaitanya Saggurthi                = RILRequest.obtain(RIL_REQUEST_SEND_SMS_EXPECT_MORE, result);
14506ad88a8a2caf739e78c8d5f7f50fc7fa84a07ca7Chaitanya Saggurthi
14516ad88a8a2caf739e78c8d5f7f50fc7fa84a07ca7Chaitanya Saggurthi        constructGsmSendSmsRilRequest(rr, smscPDU, pdu);
14526ad88a8a2caf739e78c8d5f7f50fc7fa84a07ca7Chaitanya Saggurthi
14536ad88a8a2caf739e78c8d5f7f50fc7fa84a07ca7Chaitanya Saggurthi        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
14546ad88a8a2caf739e78c8d5f7f50fc7fa84a07ca7Chaitanya Saggurthi
1455f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu        mMetrics.writeRilSendSms(mInstanceId, rr.mSerial, SmsSession.Event.Tech.SMS_GSM,
1456f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu                SmsSession.Event.Format.SMS_FORMAT_3GPP);
14575054dfa7fd9b0520d30a102ed5a2107af11590c8Pavel Zhamaitsiak
14586ad88a8a2caf739e78c8d5f7f50fc7fa84a07ca7Chaitanya Saggurthi        send(rr);
14596ad88a8a2caf739e78c8d5f7f50fc7fa84a07ca7Chaitanya Saggurthi    }
14606ad88a8a2caf739e78c8d5f7f50fc7fa84a07ca7Chaitanya Saggurthi
14611260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa    private void
14621260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa    constructCdmaSendSmsRilRequest(RILRequest rr, byte[] pdu) {
14630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int address_nbr_of_digits;
14640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int subaddr_nbr_of_digits;
14650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int bearerDataLength;
14660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        ByteArrayInputStream bais = new ByteArrayInputStream(pdu);
14670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        DataInputStream dis = new DataInputStream(bais);
14680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
14690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        try {
147022d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville            rr.mParcel.writeInt(dis.readInt()); //teleServiceId
147122d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville            rr.mParcel.writeByte((byte) dis.readInt()); //servicePresent
147222d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville            rr.mParcel.writeInt(dis.readInt()); //serviceCategory
147322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville            rr.mParcel.writeInt(dis.read()); //address_digit_mode
147422d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville            rr.mParcel.writeInt(dis.read()); //address_nbr_mode
147522d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville            rr.mParcel.writeInt(dis.read()); //address_ton
147622d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville            rr.mParcel.writeInt(dis.read()); //address_nbr_plan
14770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            address_nbr_of_digits = (byte) dis.read();
147822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville            rr.mParcel.writeByte((byte) address_nbr_of_digits);
14790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            for(int i=0; i < address_nbr_of_digits; i++){
148022d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville                rr.mParcel.writeByte(dis.readByte()); // address_orig_bytes[i]
14810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
148222d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville            rr.mParcel.writeInt(dis.read()); //subaddressType
148322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville            rr.mParcel.writeByte((byte) dis.read()); //subaddr_odd
14840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            subaddr_nbr_of_digits = (byte) dis.read();
148522d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville            rr.mParcel.writeByte((byte) subaddr_nbr_of_digits);
14860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            for(int i=0; i < subaddr_nbr_of_digits; i++){
148722d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville                rr.mParcel.writeByte(dis.readByte()); //subaddr_orig_bytes[i]
14880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
14890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
14900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            bearerDataLength = dis.read();
149122d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville            rr.mParcel.writeInt(bearerDataLength);
14920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            for(int i=0; i < bearerDataLength; i++){
149322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville                rr.mParcel.writeByte(dis.readByte()); //bearerData[i]
14940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
14950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }catch (IOException ex){
14960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (RILJ_LOGD) riljLog("sendSmsCdma: conversion from input stream to object failed: "
14970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    + ex);
14980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
14991260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa    }
15001260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa
15011260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa    public void
15021260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa    sendCdmaSms(byte[] pdu, Message result) {
15031260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa        RILRequest rr
15041260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa                = RILRequest.obtain(RIL_REQUEST_CDMA_SEND_SMS, result);
15051260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa
15061260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa        constructCdmaSendSmsRilRequest(rr, pdu);
15071260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa
15081260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
15091260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa
1510f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu        mMetrics.writeRilSendSms(mInstanceId, rr.mSerial, SmsSession.Event.Tech.SMS_CDMA,
1511f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu                SmsSession.Event.Format.SMS_FORMAT_3GPP2);
15125054dfa7fd9b0520d30a102ed5a2107af11590c8Pavel Zhamaitsiak
15131260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa        send(rr);
15141260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa    }
15151260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa
15161260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa    public void
15171260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa    sendImsGsmSms (String smscPDU, String pdu, int retry, int messageRef,
15181260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa            Message result) {
15191260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa        RILRequest rr = RILRequest.obtain(RIL_REQUEST_IMS_SEND_SMS, result);
15201260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa
1521ace9a749c5a2a5e07527f728b7331423d16c36cdSukanya Rajkhowa        rr.mParcel.writeInt(RILConstants.GSM_PHONE);
15221260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa        rr.mParcel.writeByte((byte)retry);
15231260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa        rr.mParcel.writeInt(messageRef);
15241260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa
15251260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa        constructGsmSendSmsRilRequest(rr, smscPDU, pdu);
15261260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa
15271260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
15281260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa
1529f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu        mMetrics.writeRilSendSms(mInstanceId, rr.mSerial, SmsSession.Event.Tech.SMS_IMS,
1530f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu                SmsSession.Event.Format.SMS_FORMAT_3GPP);
15315054dfa7fd9b0520d30a102ed5a2107af11590c8Pavel Zhamaitsiak
15321260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa        send(rr);
15331260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa    }
15341260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa
15351260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa    public void
15361260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa    sendImsCdmaSms(byte[] pdu, int retry, int messageRef, Message result) {
15371260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa        RILRequest rr = RILRequest.obtain(RIL_REQUEST_IMS_SEND_SMS, result);
15381260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa
1539ace9a749c5a2a5e07527f728b7331423d16c36cdSukanya Rajkhowa        rr.mParcel.writeInt(RILConstants.CDMA_PHONE);
15401260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa        rr.mParcel.writeByte((byte)retry);
15411260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa        rr.mParcel.writeInt(messageRef);
15421260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa
15431260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa        constructCdmaSendSmsRilRequest(rr, pdu);
15440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
15450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
15460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1547f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu        mMetrics.writeRilSendSms(mInstanceId, rr.mSerial, SmsSession.Event.Tech.SMS_IMS,
1548f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu                SmsSession.Event.Format.SMS_FORMAT_3GPP2);
15495054dfa7fd9b0520d30a102ed5a2107af11590c8Pavel Zhamaitsiak
15500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
15510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
15520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1553cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
15540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void deleteSmsOnSim(int index, Message response) {
15550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_DELETE_SMS_ON_SIM,
15560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                response);
15570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
155822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(1);
155922d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(index);
15600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1561cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville        if (RILJ_LOGV) riljLog(rr.serialString() + "> "
1562cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville                + requestToString(rr.mRequest)
1563cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville                + " " + index);
15640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
15650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
15660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
15670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1568cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
15690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void deleteSmsOnRuim(int index, Message response) {
15700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CDMA_DELETE_SMS_ON_RUIM,
15710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                response);
15720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
157322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(1);
157422d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(index);
15750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1576cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville        if (RILJ_LOGV) riljLog(rr.serialString() + "> "
1577cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville                + requestToString(rr.mRequest)
1578cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville                + " " + index);
15790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
15800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
15810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
15820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1583cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
15840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void writeSmsToSim(int status, String smsc, String pdu, Message response) {
15850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        status = translateStatus(status);
15860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
15870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_WRITE_SMS_TO_SIM,
15880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                response);
15890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
159022d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(status);
159122d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(pdu);
159222d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(smsc);
15930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1594cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville        if (RILJ_LOGV) riljLog(rr.serialString() + "> "
1595cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville                + requestToString(rr.mRequest)
1596cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville                + " " + status);
15970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
15980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
15990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
16000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1601cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
16020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void writeSmsToRuim(int status, String pdu, Message response) {
16030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        status = translateStatus(status);
16040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
16050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CDMA_WRITE_SMS_TO_RUIM,
16060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                response);
16070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
160822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(status);
160922d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(pdu);
16100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1611cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville        if (RILJ_LOGV) riljLog(rr.serialString() + "> "
1612cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville                + requestToString(rr.mRequest)
1613cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville                + " " + status);
16140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
16150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
16160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
16170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
16180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
16190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  Translates EF_SMS status bits to a status value compatible with
16200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  SMS AT commands.  See TS 27.005 3.1.
16210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
16220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private int translateStatus(int status) {
16230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        switch(status & 0x7) {
16240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case SmsManager.STATUS_ON_ICC_READ:
16250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                return 1;
16260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case SmsManager.STATUS_ON_ICC_UNREAD:
16270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                return 0;
16280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case SmsManager.STATUS_ON_ICC_SENT:
16290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                return 3;
16300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case SmsManager.STATUS_ON_ICC_UNSENT:
16310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                return 2;
16320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
16330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
16340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // Default to READ.
16350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return 1;
16360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
16370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1638cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
16390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
16405d5ec64fcd293928776aebe5c92278afb5bc019dPavel Zhamaitsiak    setupDataCall(int radioTechnology, int profile, String apn,
16415d5ec64fcd293928776aebe5c92278afb5bc019dPavel Zhamaitsiak            String user, String password, int authType, String protocol,
16420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            Message result) {
16430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
16440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_SETUP_DATA_CALL, result);
16450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
164622d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(7);
16470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
16485d5ec64fcd293928776aebe5c92278afb5bc019dPavel Zhamaitsiak        rr.mParcel.writeString(Integer.toString(radioTechnology + 2));
16495d5ec64fcd293928776aebe5c92278afb5bc019dPavel Zhamaitsiak        rr.mParcel.writeString(Integer.toString(profile));
165022d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(apn);
165122d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(user);
165222d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(password);
16535d5ec64fcd293928776aebe5c92278afb5bc019dPavel Zhamaitsiak        rr.mParcel.writeString(Integer.toString(authType));
165422d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(protocol);
16550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
16560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> "
16570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + requestToString(rr.mRequest) + " " + radioTechnology + " "
16580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + profile + " " + apn + " " + user + " "
16590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + password + " " + authType + " " + protocol);
16600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1661f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu        mMetrics.writeRilSetupDataCall(mInstanceId, rr.mSerial,
1662f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu                radioTechnology, profile, apn, authType, protocol);
16635054dfa7fd9b0520d30a102ed5a2107af11590c8Pavel Zhamaitsiak
16640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
16650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
16660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1667cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
16680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
16690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    deactivateDataCall(int cid, int reason, Message result) {
16700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
16710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_DEACTIVATE_DATA_CALL, result);
16720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
167322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(2);
167422d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(Integer.toString(cid));
167522d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(Integer.toString(reason));
16760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
16770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " +
16780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                requestToString(rr.mRequest) + " " + cid + " " + reason);
16790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1680f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu        mMetrics.writeRilDeactivateDataCall(mInstanceId, rr.mSerial,
1681f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu                cid, reason);
16825054dfa7fd9b0520d30a102ed5a2107af11590c8Pavel Zhamaitsiak
16830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
16840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
16850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1686cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
16870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
16880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    setRadioPower(boolean on, Message result) {
16890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_RADIO_POWER, result);
16900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
169122d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(1);
169222d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(on ? 1 : 0);
16930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
16940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) {
16950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
16960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    + (on ? " on" : " off"));
16970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
16980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
16990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
17000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
17010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1702cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
170303586878fb3d870373f2fdf65afb81cc5ae97067Naveen Kalla    public void requestShutdown(Message result) {
170403586878fb3d870373f2fdf65afb81cc5ae97067Naveen Kalla        RILRequest rr = RILRequest.obtain(RIL_REQUEST_SHUTDOWN, result);
170503586878fb3d870373f2fdf65afb81cc5ae97067Naveen Kalla
170603586878fb3d870373f2fdf65afb81cc5ae97067Naveen Kalla        if (RILJ_LOGD)
170703586878fb3d870373f2fdf65afb81cc5ae97067Naveen Kalla            riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
170803586878fb3d870373f2fdf65afb81cc5ae97067Naveen Kalla
170903586878fb3d870373f2fdf65afb81cc5ae97067Naveen Kalla        send(rr);
171003586878fb3d870373f2fdf65afb81cc5ae97067Naveen Kalla    }
171103586878fb3d870373f2fdf65afb81cc5ae97067Naveen Kalla
171203586878fb3d870373f2fdf65afb81cc5ae97067Naveen Kalla    @Override
17130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
17140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    setSuppServiceNotifications(boolean enable, Message result) {
17150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
17160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_SET_SUPP_SVC_NOTIFICATION, result);
17170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
171822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(1);
171922d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(enable ? 1 : 0);
17200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
17210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> "
17220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + requestToString(rr.mRequest));
17230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
17240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
17250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
17260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1727cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
17280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
17290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    acknowledgeLastIncomingGsmSms(boolean success, int cause, Message result) {
17300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
17310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_SMS_ACKNOWLEDGE, result);
17320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
173322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(2);
173422d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(success ? 1 : 0);
173522d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(cause);
17360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
17370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
17380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + " " + success + " " + cause);
17390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
17400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
17410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
17420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1743cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
17440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
17450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    acknowledgeLastIncomingCdmaSms(boolean success, int cause, Message result) {
17460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
17470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_CDMA_SMS_ACKNOWLEDGE, result);
17480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
174922d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(success ? 0 : 1); //RIL_CDMA_SMS_ErrorClass
17500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // cause code according to X.S004-550E
175122d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(cause);
17520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
17530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
17540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + " " + success + " " + cause);
17550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
17560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
17570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
17580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1759cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
17600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
17610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    acknowledgeIncomingGsmSmsWithPdu(boolean success, String ackPdu, Message result) {
17620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
17630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_ACKNOWLEDGE_INCOMING_GSM_SMS_WITH_PDU, result);
17640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
176522d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(2);
176622d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(success ? "1" : "0");
176722d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(ackPdu);
17680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
17690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
17700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + ' ' + success + " [" + ackPdu + ']');
17710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
17720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
17730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
17740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1775cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
17760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
17770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    iccIO (int command, int fileid, String path, int p1, int p2, int p3,
17780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            String data, String pin2, Message result) {
17790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        iccIOForApp(command, fileid, path, p1, p2, p3, data, pin2, null, result);
17800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1781cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
17820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
17830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    iccIOForApp (int command, int fileid, String path, int p1, int p2, int p3,
17840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            String data, String pin2, String aid, Message result) {
17850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //Note: This RIL request has not been renamed to ICC,
17860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //       but this request is also valid for SIM and RUIM
17870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
17880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_SIM_IO, result);
17890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
179022d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(command);
179122d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(fileid);
179222d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(path);
179322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(p1);
179422d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(p2);
179522d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(p3);
179622d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(data);
179722d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(pin2);
179822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(aid);
17990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
18000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> iccIO: "
18010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + requestToString(rr.mRequest)
18020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + " 0x" + Integer.toHexString(command)
18030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + " 0x" + Integer.toHexString(fileid) + " "
18040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + " path: " + path + ","
18050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + p1 + "," + p2 + "," + p3
18060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + " aid: " + aid);
18070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
18080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
18090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
18100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1811cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
18120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
18130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    getCLIR(Message result) {
18140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
18150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_GET_CLIR, result);
18160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
18170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
18180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
18190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
18200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
18210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1822cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
18230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
18240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    setCLIR(int clirMode, Message result) {
18250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
18260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_SET_CLIR, result);
18270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
18280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // count ints
182922d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(1);
18300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
183122d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(clirMode);
18320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
18330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
18340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    + " " + clirMode);
18350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
18360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
18370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
18380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1839cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
18400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
18410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    queryCallWaiting(int serviceClass, Message response) {
18420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
18430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_QUERY_CALL_WAITING, response);
18440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
184522d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(1);
184622d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(serviceClass);
18470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
18480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
18490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    + " " + serviceClass);
18500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
18510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
18520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
18530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1854cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
18550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
18560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    setCallWaiting(boolean enable, int serviceClass, Message response) {
18570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
18580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_SET_CALL_WAITING, response);
18590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
186022d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(2);
186122d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(enable ? 1 : 0);
186222d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(serviceClass);
18630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
18640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
18650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + " " + enable + ", " + serviceClass);
18660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
18670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
18680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
18690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1870cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
18710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
18720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    setNetworkSelectionModeAutomatic(Message response) {
18730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
18740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_SET_NETWORK_SELECTION_AUTOMATIC,
18750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                    response);
18760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
18770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
18780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
18790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
18800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
18810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1882cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
18830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
18840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    setNetworkSelectionModeManual(String operatorNumeric, Message response) {
18850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
18860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_SET_NETWORK_SELECTION_MANUAL,
18870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                    response);
18880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
18890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
18900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    + " " + operatorNumeric);
18910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
189222d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(operatorNumeric);
18930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
18940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
18950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
18960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1897cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
18980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
18990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    getNetworkSelectionMode(Message response) {
19000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
19010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_QUERY_NETWORK_SELECTION_MODE,
19020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                    response);
19030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
19040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
19050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
19060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
19070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
19080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1909cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
19100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
19110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    getAvailableNetworks(Message response) {
19120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
19130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_QUERY_AVAILABLE_NETWORKS,
19140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                    response);
19150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
19160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
19170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
19180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
19190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
19200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1921cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
19220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
19230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    setCallForward(int action, int cfReason, int serviceClass,
19240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                String number, int timeSeconds, Message response) {
19250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
19260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_SET_CALL_FORWARD, response);
19270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
192822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(action);
192922d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(cfReason);
193022d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(serviceClass);
193122d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(PhoneNumberUtils.toaFromString(number));
193222d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(number);
193322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt (timeSeconds);
19340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
19350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
19360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    + " " + action + " " + cfReason + " " + serviceClass
19370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    + timeSeconds);
19380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
19390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
19400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
19410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1942cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
19430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
19440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    queryCallForwardStatus(int cfReason, int serviceClass,
19450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                String number, Message response) {
19460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
19470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            = RILRequest.obtain(RIL_REQUEST_QUERY_CALL_FORWARD_STATUS, response);
19480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
194922d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(2); // 2 is for query action, not in used anyway
195022d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(cfReason);
195122d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(serviceClass);
195222d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(PhoneNumberUtils.toaFromString(number));
195322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(number);
195422d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt (0);
19550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
19560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
19570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + " " + cfReason + " " + serviceClass);
19580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
19590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
19600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
19610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1962cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
19630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
19640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    queryCLIP(Message response) {
19650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
19660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            = RILRequest.obtain(RIL_REQUEST_QUERY_CLIP, response);
19670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
19680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
19690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
19700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
19710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
19720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
19730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1974cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
19750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
19760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    getBasebandVersion (Message response) {
19770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
19780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_BASEBAND_VERSION, response);
19790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
19800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
19810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
19820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
19830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
19840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
19850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override
19860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
19870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    queryFacilityLock(String facility, String password, int serviceClass,
19880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            Message response) {
19890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        queryFacilityLockForApp(facility, password, serviceClass, null, response);
19900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
19910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
19920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override
19930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
19940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    queryFacilityLockForApp(String facility, String password, int serviceClass, String appId,
19950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            Message response) {
19960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_QUERY_FACILITY_LOCK, response);
19970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
199888e9c9700fbb6119c2564fb7173821c84b360d07Abhishek Adappa        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
199988e9c9700fbb6119c2564fb7173821c84b360d07Abhishek Adappa                                                 + " [" + facility + " " + serviceClass
200088e9c9700fbb6119c2564fb7173821c84b360d07Abhishek Adappa                                                 + " " + appId + "]");
20010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
20020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // count strings
200322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(4);
20040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
200522d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(facility);
200622d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(password);
20070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
200822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(Integer.toString(serviceClass));
200922d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(appId);
20100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
20110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
20120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
20130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
20140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override
20150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
20160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    setFacilityLock (String facility, boolean lockState, String password,
20170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        int serviceClass, Message response) {
20180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        setFacilityLockForApp(facility, lockState, password, serviceClass, null, response);
20190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
20200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
20210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override
20220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
20230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    setFacilityLockForApp(String facility, boolean lockState, String password,
20240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        int serviceClass, String appId, Message response) {
20250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String lockString;
20260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville         RILRequest rr
20270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_SET_FACILITY_LOCK, response);
20280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
202988e9c9700fbb6119c2564fb7173821c84b360d07Abhishek Adappa        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
203088e9c9700fbb6119c2564fb7173821c84b360d07Abhishek Adappa                                                        + " [" + facility + " " + lockState
203188e9c9700fbb6119c2564fb7173821c84b360d07Abhishek Adappa                                                        + " " + serviceClass + " " + appId + "]");
20320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
20330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // count strings
203422d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(5);
20350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
203622d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(facility);
20370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        lockString = (lockState)?"1":"0";
203822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(lockString);
203922d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(password);
204022d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(Integer.toString(serviceClass));
204122d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(appId);
20420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
20430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
20440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
20450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
20460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2047cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
20480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
20490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    sendUSSD (String ussdString, Message response) {
20500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
20510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_SEND_USSD, response);
20520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
205372000e2c06bbee97d5ce31c4f66befab8057cb71Cuihtlauac ALVARADO        if (RILJ_LOGD) {
205472000e2c06bbee97d5ce31c4f66befab8057cb71Cuihtlauac ALVARADO            String logUssdString = "*******";
205572000e2c06bbee97d5ce31c4f66befab8057cb71Cuihtlauac ALVARADO            if (RILJ_LOGV) logUssdString = ussdString;
205672000e2c06bbee97d5ce31c4f66befab8057cb71Cuihtlauac ALVARADO            riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
205772000e2c06bbee97d5ce31c4f66befab8057cb71Cuihtlauac ALVARADO                                   + " " + logUssdString);
205872000e2c06bbee97d5ce31c4f66befab8057cb71Cuihtlauac ALVARADO        }
20590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
206022d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(ussdString);
20610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
20620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
20630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
20640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
20650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // inherited javadoc suffices
2066cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
20670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void cancelPendingUssd (Message response) {
20680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
20690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_CANCEL_USSD, response);
20700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
20710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString()
20720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + "> " + requestToString(rr.mRequest));
20730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
20740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
20750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
20760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
20770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2078cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
20790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void resetRadio(Message result) {
20800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
20810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_RESET_RADIO, result);
20820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
20830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
20840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
20850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
20860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
20870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2088cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
20890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void invokeOemRilRequestRaw(byte[] data, Message response) {
20900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
20910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_OEM_HOOK_RAW, response);
20920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
20930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
20940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville               + "[" + IccUtils.bytesToHexString(data) + "]");
20950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
209622d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeByteArray(data);
20970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
20980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
20990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
21000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
21010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2102cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
21030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void invokeOemRilRequestStrings(String[] strings, Message response) {
21040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
21050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_OEM_HOOK_STRINGS, response);
21060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
21070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
21080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
210922d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeStringArray(strings);
21100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
21110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
21120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
21130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
21140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     /**
21150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Assign a specified band for RF configuration.
21160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
21170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @param bandMode one of BM_*_BAND
21180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @param response is callback message
21190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
2120cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
21210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void setBandMode (int bandMode, Message response) {
21220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
21230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_SET_BAND_MODE, response);
21240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
212522d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(1);
212622d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(bandMode);
21270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
21280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
21290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                 + " " + bandMode);
21300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
21310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
21320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     }
21330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
21340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
21350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Query the list of band mode supported by RF.
21360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
21370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @param response is callback message
21388a3cf2d80c0cdee7360404dd0ac08ca6f9a7e246Derek Tan     *        ((AsyncResult)response.obj).result  is an int[] where int[0] is
21398a3cf2d80c0cdee7360404dd0ac08ca6f9a7e246Derek Tan     *        the size of the array and the rest of each element representing
21408a3cf2d80c0cdee7360404dd0ac08ca6f9a7e246Derek Tan     *        one available BM_*_BAND
21410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
2142cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
21430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void queryAvailableBandMode (Message response) {
21440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
21450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_QUERY_AVAILABLE_BAND_MODE,
21460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                response);
21470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
21480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
21490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
21500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
21510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
21520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
21530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
21540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
21550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
2156cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
21570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void sendTerminalResponse(String contents, Message response) {
21580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(
21590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                RILConstants.RIL_REQUEST_STK_SEND_TERMINAL_RESPONSE, response);
21600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
21610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
21620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
216322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(contents);
21640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
21650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
21660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
21670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
21680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
21690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
2170cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
21710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void sendEnvelope(String contents, Message response) {
21720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(
21730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                RILConstants.RIL_REQUEST_STK_SEND_ENVELOPE_COMMAND, response);
21740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
21750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
21760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
217722d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(contents);
21780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
21790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
21800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
21810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
21820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
21830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
2184cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
21850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void sendEnvelopeWithStatus(String contents, Message response) {
21860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(
21870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                RILConstants.RIL_REQUEST_STK_SEND_ENVELOPE_WITH_STATUS, response);
21880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
21890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
21900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + '[' + contents + ']');
21910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
219222d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(contents);
21930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
21940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
21950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
21960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
21970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
21980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
2199cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
22000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void handleCallSetupRequestFromSim(
22010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            boolean accept, Message response) {
22020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
22030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(
22040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            RILConstants.RIL_REQUEST_STK_HANDLE_CALL_SETUP_REQUESTED_FROM_SIM,
22050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            response);
22060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
22070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
22080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
22090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int[] param = new int[1];
22100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        param[0] = accept ? 1 : 0;
221122d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeIntArray(param);
22120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
22130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
22140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
22150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
22160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
22170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
22180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override
22190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void setPreferredNetworkType(int networkType , Message response) {
22200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(
22210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                RILConstants.RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE, response);
22220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
222322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(1);
222422d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(networkType);
22250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
22260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mPreferredNetworkType = networkType;
22270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
22280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
22290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + " : " + networkType);
22300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2231f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu        mMetrics.writeSetPreferredNetworkType(mInstanceId, networkType);
22329746fca2d7389f0fce6d5d031d87acd87b9de723Pavel Zhamaitsiak
22330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
22340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
22350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
22360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
22370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
22380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
2239cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
22400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void getPreferredNetworkType(Message response) {
22410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(
22420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                RILConstants.RIL_REQUEST_GET_PREFERRED_NETWORK_TYPE, response);
22430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
22440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
22450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
22460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
22470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
22480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
22490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
22500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
22510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
2252cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
22530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void getNeighboringCids(Message response) {
22540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(
22550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                RILConstants.RIL_REQUEST_GET_NEIGHBORING_CELL_IDS, response);
22560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
22570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
22580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
22590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
22600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
22610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
22620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
22630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
22640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
2265cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
22660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void setLocationUpdates(boolean enable, Message response) {
22670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_SET_LOCATION_UPDATES, response);
226822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(1);
226922d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(enable ? 1 : 0);
22700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
22710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> "
22720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + requestToString(rr.mRequest) + ": " + enable);
22730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
22740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
22750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
22760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
22770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
22780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
22790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
2280cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
22810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void getSmscAddress(Message result) {
22820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_GET_SMSC_ADDRESS, result);
22830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
22840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
22850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
22860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
22870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
22880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
22890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
22900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
22910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
2292cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
22930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void setSmscAddress(String address, Message result) {
22940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_SET_SMSC_ADDRESS, result);
22950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
229622d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(address);
22970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
22980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
22990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + " : " + address);
23000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
23010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
23020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
23030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
23040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
23050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
23060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
2307cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
23080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void reportSmsMemoryStatus(boolean available, Message result) {
23090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_REPORT_SMS_MEMORY_STATUS, result);
231022d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(1);
231122d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(available ? 1 : 0);
23120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
23130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> "
23140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + requestToString(rr.mRequest) + ": " + available);
23150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
23160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
23170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
23180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
23190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
23200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
23210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
2322cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
23230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void reportStkServiceIsRunning(Message result) {
23240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_REPORT_STK_SERVICE_IS_RUNNING, result);
23250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
23260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
23270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
23280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
23290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
23300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
23310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
23320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
23330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
2334cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
23350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void getGsmBroadcastConfig(Message response) {
23360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_GSM_GET_BROADCAST_CONFIG, response);
23370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
23380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
23390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
23400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
23410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
23420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
23430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
23440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
23450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
2346cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
23470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void setGsmBroadcastConfig(SmsBroadcastConfigInfo[] config, Message response) {
23480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_GSM_SET_BROADCAST_CONFIG, response);
23490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
23500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int numOfConfig = config.length;
235122d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(numOfConfig);
23520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
23530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        for(int i = 0; i < numOfConfig; i++) {
235422d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville            rr.mParcel.writeInt(config[i].getFromServiceId());
235522d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville            rr.mParcel.writeInt(config[i].getToServiceId());
235622d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville            rr.mParcel.writeInt(config[i].getFromCodeScheme());
235722d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville            rr.mParcel.writeInt(config[i].getToCodeScheme());
235822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville            rr.mParcel.writeInt(config[i].isSelected() ? 1 : 0);
23590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
23600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
23610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) {
23620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
23630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    + " with " + numOfConfig + " configs : ");
23640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            for (int i = 0; i < numOfConfig; i++) {
23650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                riljLog(config[i].toString());
23660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
23670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
23680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
23690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
23700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
23710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
23720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
23730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
23740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
2375cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
23760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void setGsmBroadcastActivation(boolean activate, Message response) {
23770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_GSM_BROADCAST_ACTIVATION, response);
23780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
237922d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(1);
238022d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(activate ? 0 : 1);
23810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
23820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
23830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
23840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
23850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
23860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
23870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    //***** Private Methods
23880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
238980795c239d6281db5fbf0f5a23494bfa3fb938f5Jeff Brown    // TODO(jeffbrown): Delete me.
239080795c239d6281db5fbf0f5a23494bfa3fb938f5Jeff Brown    // The RIL should *not* be listening for screen state changes since they are
239180795c239d6281db5fbf0f5a23494bfa3fb938f5Jeff Brown    // becoming increasingly ambiguous on our devices.  The RIL_REQUEST_SCREEN_STATE
239280795c239d6281db5fbf0f5a23494bfa3fb938f5Jeff Brown    // message should be deleted and replaced with more precise messages to control
239380795c239d6281db5fbf0f5a23494bfa3fb938f5Jeff Brown    // behavior such as signal strength reporting or power managements based on
239480795c239d6281db5fbf0f5a23494bfa3fb938f5Jeff Brown    // more robust signals.
2395e694c1d4e5fd58c5ee2eebcc057bd0586022bcd7Yao Chen    /**
2396e694c1d4e5fd58c5ee2eebcc057bd0586022bcd7Yao Chen     * Update the screen state. Send screen state ON if the default display is ON or the device
2397e694c1d4e5fd58c5ee2eebcc057bd0586022bcd7Yao Chen     * is plugged.
2398e694c1d4e5fd58c5ee2eebcc057bd0586022bcd7Yao Chen     */
239980795c239d6281db5fbf0f5a23494bfa3fb938f5Jeff Brown    private void updateScreenState() {
2400e694c1d4e5fd58c5ee2eebcc057bd0586022bcd7Yao Chen        final int oldState = mRadioScreenState;
2401e694c1d4e5fd58c5ee2eebcc057bd0586022bcd7Yao Chen        mRadioScreenState = (mDefaultDisplayState == Display.STATE_ON || mIsDevicePlugged)
2402e694c1d4e5fd58c5ee2eebcc057bd0586022bcd7Yao Chen                ? RADIO_SCREEN_ON : RADIO_SCREEN_OFF;
2403e694c1d4e5fd58c5ee2eebcc057bd0586022bcd7Yao Chen        if (mRadioScreenState != oldState) {
2404e694c1d4e5fd58c5ee2eebcc057bd0586022bcd7Yao Chen            if (RILJ_LOGV) {
2405e694c1d4e5fd58c5ee2eebcc057bd0586022bcd7Yao Chen                riljLog("defaultDisplayState: " + mDefaultDisplayState
2406e694c1d4e5fd58c5ee2eebcc057bd0586022bcd7Yao Chen                        + ", isDevicePlugged: " + mIsDevicePlugged);
240780795c239d6281db5fbf0f5a23494bfa3fb938f5Jeff Brown            }
2408e694c1d4e5fd58c5ee2eebcc057bd0586022bcd7Yao Chen            sendScreenState(mRadioScreenState == RADIO_SCREEN_ON);
240980795c239d6281db5fbf0f5a23494bfa3fb938f5Jeff Brown        }
241080795c239d6281db5fbf0f5a23494bfa3fb938f5Jeff Brown    }
241180795c239d6281db5fbf0f5a23494bfa3fb938f5Jeff Brown
24120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private void sendScreenState(boolean on) {
24130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_SCREEN_STATE, null);
241422d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(1);
241522d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(on ? 1 : 0);
24160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
24170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString()
24180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + "> " + requestToString(rr.mRequest) + ": " + on);
24190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
24200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
24210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
24220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2423cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
24240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    protected void
24250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    onRadioAvailable() {
24260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // In case screen state was lost (due to process crash),
24270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // this ensures that the RIL knows the correct screen state.
2428b9597d030e970e13e1c399301e671542b52db3b5Mohamad Ayyash        updateScreenState();
24290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville   }
24300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
24310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private RadioState getRadioStateFromInt(int stateInt) {
24320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RadioState state;
24330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
24340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        /* RIL_RadioState ril.h */
24350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        switch(stateInt) {
24360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case 0: state = RadioState.RADIO_OFF; break;
24370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case 1: state = RadioState.RADIO_UNAVAILABLE; break;
24380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case 10: state = RadioState.RADIO_ON; break;
24390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
24400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            default:
24410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                throw new RuntimeException(
24420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            "Unrecognized RIL_RadioState: " + stateInt);
24430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
24440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return state;
24450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
24460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
24470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private void switchToRadioState(RadioState newState) {
24480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        setRadioState(newState);
24490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
24500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
24510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
24520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Holds a PARTIAL_WAKE_LOCK whenever
24530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * a) There is outstanding RIL request sent to RIL deamon and no replied
24540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * b) There is a request pending to be sent out.
24550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
24560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * There is a WAKE_LOCK_TIMEOUT to release the lock, though it shouldn't
24570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * happen often.
24580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
24590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
24600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private void
246132c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold    acquireWakeLock(RILRequest rr, int wakeLockType) {
246232c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold        synchronized(rr) {
246332c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold            if(rr.mWakeLockType != INVALID_WAKELOCK) {
246432c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                Rlog.d(RILJ_LOG_TAG, "Failed to aquire wakelock for " + rr.serialString());
246532c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                return;
2466a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe            }
24670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
246832c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold            switch(wakeLockType) {
246932c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                case FOR_WAKELOCK:
247032c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                    synchronized (mWakeLock) {
247132c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                        mWakeLock.acquire();
247232c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                        mWakeLockCount++;
247332c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                        mWlSequenceNum++;
247432c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold
247532c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                        Message msg = mSender.obtainMessage(EVENT_WAKE_LOCK_TIMEOUT);
247632c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                        msg.arg1 = mWlSequenceNum;
247732c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                        mSender.sendMessageDelayed(msg, mWakeLockTimeout);
247832c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                    }
247932c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                    break;
248032c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                case FOR_ACK_WAKELOCK:
248132c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                    synchronized (mAckWakeLock) {
248232c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                        mAckWakeLock.acquire();
248332c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                        mAckWlSequenceNum++;
248432c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold
248532c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                        Message msg = mSender.obtainMessage(EVENT_ACK_WAKE_LOCK_TIMEOUT);
248632c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                        msg.arg1 = mAckWlSequenceNum;
248732c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                        mSender.sendMessageDelayed(msg, mAckWakeLockTimeout);
248832c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                    }
248932c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                    break;
249032c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                default: //WTF
249132c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                    Rlog.w(RILJ_LOG_TAG, "Acquiring Invalid Wakelock type " + wakeLockType);
249232c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                    return;
2493a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe            }
249432c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold            rr.mWakeLockType = wakeLockType;
24950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
24960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
24970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
24980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private void
249932c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold    decrementWakeLock(RILRequest rr) {
250032c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold        synchronized(rr) {
250132c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold            switch(rr.mWakeLockType) {
250232c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                case FOR_WAKELOCK:
250332c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                    synchronized (mWakeLock) {
250432c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                        if (mWakeLockCount > 1) {
250532c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                            mWakeLockCount--;
250632c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                        } else {
250732c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                            mWakeLockCount = 0;
250832c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                            mWakeLock.release();
250932c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                        }
251032c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                    }
251132c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                    break;
251232c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                case FOR_ACK_WAKELOCK:
251332c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                    //We do not decrement the ACK wakelock
251432c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                    break;
251532c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                case INVALID_WAKELOCK:
251632c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                    break;
251732c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                default:
251832c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                    Rlog.w(RILJ_LOG_TAG, "Decrementing Invalid Wakelock type " + rr.mWakeLockType);
25190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
252032c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold            rr.mWakeLockType = INVALID_WAKELOCK;
25210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
25220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
25230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
25247cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt    private boolean
252532c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold    clearWakeLock(int wakeLockType) {
252632c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold        if (wakeLockType == FOR_WAKELOCK) {
2527a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe            synchronized (mWakeLock) {
2528a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe                if (mWakeLockCount == 0 && mWakeLock.isHeld() == false) return false;
2529a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe                Rlog.d(RILJ_LOG_TAG, "NOTE: mWakeLockCount is " + mWakeLockCount
2530a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe                        + "at time of clearing");
2531a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe                mWakeLockCount = 0;
2532a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe                mWakeLock.release();
2533a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe                return true;
2534a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe            }
2535a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe        } else {
2536a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe            synchronized (mAckWakeLock) {
2537a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe                if (mAckWakeLock.isHeld() == false) return false;
2538a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe                mAckWakeLock.release();
2539a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe                return true;
2540a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe            }
25417cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt        }
25427cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt    }
25437cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt
25440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private void
25450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    send(RILRequest rr) {
25460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        Message msg;
25470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
25480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (mSocket == null) {
25490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            rr.onError(RADIO_NOT_AVAILABLE, null);
25500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            rr.release();
25510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            return;
25520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
25530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
25540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        msg = mSender.obtainMessage(EVENT_SEND, rr);
255532c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold        acquireWakeLock(rr, FOR_WAKELOCK);
25560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        msg.sendToTarget();
25570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
25580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
25590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private void
25600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    processResponse (Parcel p) {
25610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int type;
25620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
25630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        type = p.readInt();
25640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2565a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe        if (type == RESPONSE_UNSOLICITED || type == RESPONSE_UNSOLICITED_ACK_EXP) {
2566a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe            processUnsolicited (p, type);
2567060a6f0ba56dde532a9b9b28d4302df86a556691Sanket Padawe        } else if (type == RESPONSE_SOLICITED || type == RESPONSE_SOLICITED_ACK_EXP) {
2568060a6f0ba56dde532a9b9b28d4302df86a556691Sanket Padawe            RILRequest rr = processSolicited (p, type);
25697cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt            if (rr != null) {
25702af618a3becdcbbd49a1339d68e0ef8f35890a27Sanket Padawe                if (type == RESPONSE_SOLICITED) {
257132c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                    decrementWakeLock(rr);
25722af618a3becdcbbd49a1339d68e0ef8f35890a27Sanket Padawe                }
257332c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                rr.release();
2574d0fdd8bd6ab1261ad474a3e7cddcc99090613931Sanket Padawe                return;
2575060a6f0ba56dde532a9b9b28d4302df86a556691Sanket Padawe            }
2576060a6f0ba56dde532a9b9b28d4302df86a556691Sanket Padawe        } else if (type == RESPONSE_SOLICITED_ACK) {
2577060a6f0ba56dde532a9b9b28d4302df86a556691Sanket Padawe            int serial;
2578060a6f0ba56dde532a9b9b28d4302df86a556691Sanket Padawe            serial = p.readInt();
2579060a6f0ba56dde532a9b9b28d4302df86a556691Sanket Padawe
2580060a6f0ba56dde532a9b9b28d4302df86a556691Sanket Padawe            RILRequest rr;
2581060a6f0ba56dde532a9b9b28d4302df86a556691Sanket Padawe            synchronized (mRequestList) {
2582060a6f0ba56dde532a9b9b28d4302df86a556691Sanket Padawe                rr = mRequestList.get(serial);
2583060a6f0ba56dde532a9b9b28d4302df86a556691Sanket Padawe            }
2584060a6f0ba56dde532a9b9b28d4302df86a556691Sanket Padawe            if (rr == null) {
2585060a6f0ba56dde532a9b9b28d4302df86a556691Sanket Padawe                Rlog.w(RILJ_LOG_TAG, "Unexpected solicited ack response! sn: " + serial);
2586060a6f0ba56dde532a9b9b28d4302df86a556691Sanket Padawe            } else {
258732c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                decrementWakeLock(rr);
2588a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe                if (RILJ_LOGD) {
2589a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe                    riljLog(rr.serialString() + " Ack < " + requestToString(rr.mRequest));
2590a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe                }
25917cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt            }
25920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
25930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
25940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
25950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
2596892e1fecf3c3736c4c04cf219d01034f71307065Robert Greenwalt     * Release each request in mRequestList then clear the list
25970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @param error is the RIL_Errno sent back
2598892e1fecf3c3736c4c04cf219d01034f71307065Robert Greenwalt     * @param loggable true means to print all requests in mRequestList
25990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
2600892e1fecf3c3736c4c04cf219d01034f71307065Robert Greenwalt    private void clearRequestList(int error, boolean loggable) {
26010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr;
2602892e1fecf3c3736c4c04cf219d01034f71307065Robert Greenwalt        synchronized (mRequestList) {
2603892e1fecf3c3736c4c04cf219d01034f71307065Robert Greenwalt            int count = mRequestList.size();
26040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (RILJ_LOGD && loggable) {
26056613a961473a72c218ec505e384dad6b19049aa0Robert Greenwalt                Rlog.d(RILJ_LOG_TAG, "clearRequestList " +
26067cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt                        " mWakeLockCount=" + mWakeLockCount +
26070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        " mRequestList=" + count);
26080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
26090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
26100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            for (int i = 0; i < count ; i++) {
26117cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt                rr = mRequestList.valueAt(i);
26120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD && loggable) {
2613fa4fd4721082689c4b276f67b845e7be249cb8daWink Saville                    Rlog.d(RILJ_LOG_TAG, i + ": [" + rr.mSerial + "] " +
26140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            requestToString(rr.mRequest));
26150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
26160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                rr.onError(error, null);
261732c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold                decrementWakeLock(rr);
26180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                rr.release();
26190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
2620892e1fecf3c3736c4c04cf219d01034f71307065Robert Greenwalt            mRequestList.clear();
26210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
26220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
26230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
26240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private RILRequest findAndRemoveRequestFromList(int serial) {
26257cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt        RILRequest rr = null;
2626892e1fecf3c3736c4c04cf219d01034f71307065Robert Greenwalt        synchronized (mRequestList) {
26277cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt            rr = mRequestList.get(serial);
26287cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt            if (rr != null) {
26297cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt                mRequestList.remove(serial);
26300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
26310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
26320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
26337cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt        return rr;
26340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
26350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2636d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe    private void addToRilHistogram(RILRequest rr) {
2637d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe        long endTime = SystemClock.elapsedRealtime();
2638d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe        int totalTime = (int)(endTime - rr.mStartTimeMs);
2639d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe
2640d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe        synchronized(mRilTimeHistograms) {
2641d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe            TelephonyHistogram entry = mRilTimeHistograms.get(rr.mRequest);
2642d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe            if (entry == null) {
2643d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe                // We would have total #RIL_HISTOGRAM_BUCKET_COUNT range buckets for RIL commands
2644d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe                entry = new TelephonyHistogram(TelephonyHistogram.TELEPHONY_CATEGORY_RIL,
2645d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe                        rr.mRequest, RIL_HISTOGRAM_BUCKET_COUNT);
2646d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe                mRilTimeHistograms.put(rr.mRequest, entry);
2647d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe            }
2648d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe            entry.addTimeTaken(totalTime);
2649d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe        }
2650d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe    }
2651d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe
26527cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt    private RILRequest
2653060a6f0ba56dde532a9b9b28d4302df86a556691Sanket Padawe    processSolicited (Parcel p, int type) {
26540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int serial, error;
26550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        boolean found = false;
26560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
26570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        serial = p.readInt();
26580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        error = p.readInt();
26590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
26600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr;
26610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
26620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr = findAndRemoveRequestFromList(serial);
26630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
26640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (rr == null) {
2665fa4fd4721082689c4b276f67b845e7be249cb8daWink Saville            Rlog.w(RILJ_LOG_TAG, "Unexpected solicited response! sn: "
26660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            + serial + " error: " + error);
26677cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt            return null;
26680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
26690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2670d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe        // Time logging for RIL command and storing it in TelephonyHistogram.
2671d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe        addToRilHistogram(rr);
2672d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe
2673060a6f0ba56dde532a9b9b28d4302df86a556691Sanket Padawe        if (getRilVersion() >= 13 && type == RESPONSE_SOLICITED_ACK_EXP) {
2674060a6f0ba56dde532a9b9b28d4302df86a556691Sanket Padawe            Message msg;
2675060a6f0ba56dde532a9b9b28d4302df86a556691Sanket Padawe            RILRequest response = RILRequest.obtain(RIL_RESPONSE_ACKNOWLEDGEMENT, null);
2676060a6f0ba56dde532a9b9b28d4302df86a556691Sanket Padawe            msg = mSender.obtainMessage(EVENT_SEND_ACK, response);
267732c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold            acquireWakeLock(rr, FOR_ACK_WAKELOCK);
2678060a6f0ba56dde532a9b9b28d4302df86a556691Sanket Padawe            msg.sendToTarget();
2679a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe            if (RILJ_LOGD) {
2680a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe                riljLog("Response received for " + rr.serialString() + " " +
2681a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe                        requestToString(rr.mRequest) + " Sending ack to ril.cpp");
2682a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe            }
2683060a6f0ba56dde532a9b9b28d4302df86a556691Sanket Padawe        }
2684060a6f0ba56dde532a9b9b28d4302df86a556691Sanket Padawe
2685060a6f0ba56dde532a9b9b28d4302df86a556691Sanket Padawe
26860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        Object ret = null;
26870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
26880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (error == 0 || p.dataAvail() > 0) {
26890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            // either command succeeds or command fails but with data payload
26900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            try {switch (rr.mRequest) {
26910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            /*
26920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville cat libs/telephony/ril_commands.h \
26930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville | egrep "^ *{RIL_" \
26940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville | sed -re 's/\{([^,]+),[^,]+,([^}]+).+/case \1: ret = \2(p); break;/'
26950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville             */
26960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GET_SIM_STATUS: ret =  responseIccCardStatus(p); break;
26970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_ENTER_SIM_PIN: ret =  responseInts(p); break;
26980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_ENTER_SIM_PUK: ret =  responseInts(p); break;
26990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_ENTER_SIM_PIN2: ret =  responseInts(p); break;
27000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_ENTER_SIM_PUK2: ret =  responseInts(p); break;
27010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CHANGE_SIM_PIN: ret =  responseInts(p); break;
27020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CHANGE_SIM_PIN2: ret =  responseInts(p); break;
27030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_ENTER_NETWORK_DEPERSONALIZATION: ret =  responseInts(p); break;
27040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GET_CURRENT_CALLS: ret =  responseCallList(p); break;
27050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_DIAL: ret =  responseVoid(p); break;
27060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GET_IMSI: ret =  responseString(p); break;
27070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_HANGUP: ret =  responseVoid(p); break;
27080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_HANGUP_WAITING_OR_BACKGROUND: ret =  responseVoid(p); break;
27090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_HANGUP_FOREGROUND_RESUME_BACKGROUND: {
27100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mTestingEmergencyCall.getAndSet(false)) {
27110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    if (mEmergencyCallbackModeRegistrant != null) {
27120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        riljLog("testing emergency call, notify ECM Registrants");
27130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        mEmergencyCallbackModeRegistrant.notifyRegistrant();
27140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    }
27150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
27160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                ret =  responseVoid(p);
27170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
27180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
27190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SWITCH_WAITING_OR_HOLDING_AND_ACTIVE: ret =  responseVoid(p); break;
27200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CONFERENCE: ret =  responseVoid(p); break;
27210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_UDUB: ret =  responseVoid(p); break;
272233cfb500a7cf192adfc5ca06792fe3847073b6c1Chao Liu            case RIL_REQUEST_LAST_CALL_FAIL_CAUSE: ret =  responseFailCause(p); break;
27230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SIGNAL_STRENGTH: ret =  responseSignalStrength(p); break;
27240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_VOICE_REGISTRATION_STATE: ret =  responseStrings(p); break;
27250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_DATA_REGISTRATION_STATE: ret =  responseStrings(p); break;
27260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_OPERATOR: ret =  responseStrings(p); break;
27270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_RADIO_POWER: ret =  responseVoid(p); break;
27280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_DTMF: ret =  responseVoid(p); break;
27290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SEND_SMS: ret =  responseSMS(p); break;
27300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SEND_SMS_EXPECT_MORE: ret =  responseSMS(p); break;
27310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SETUP_DATA_CALL: ret =  responseSetupDataCall(p); break;
27320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SIM_IO: ret =  responseICC_IO(p); break;
27330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SEND_USSD: ret =  responseVoid(p); break;
27340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CANCEL_USSD: ret =  responseVoid(p); break;
27350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GET_CLIR: ret =  responseInts(p); break;
27360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_CLIR: ret =  responseVoid(p); break;
27370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_QUERY_CALL_FORWARD_STATUS: ret =  responseCallForward(p); break;
27380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_CALL_FORWARD: ret =  responseVoid(p); break;
27390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_QUERY_CALL_WAITING: ret =  responseInts(p); break;
27400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_CALL_WAITING: ret =  responseVoid(p); break;
27410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SMS_ACKNOWLEDGE: ret =  responseVoid(p); break;
27420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GET_IMEI: ret =  responseString(p); break;
27430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GET_IMEISV: ret =  responseString(p); break;
27440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_ANSWER: ret =  responseVoid(p); break;
27450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_DEACTIVATE_DATA_CALL: ret =  responseVoid(p); break;
27460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_QUERY_FACILITY_LOCK: ret =  responseInts(p); break;
27470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_FACILITY_LOCK: ret =  responseInts(p); break;
27480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CHANGE_BARRING_PASSWORD: ret =  responseVoid(p); break;
27490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_QUERY_NETWORK_SELECTION_MODE: ret =  responseInts(p); break;
27500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_NETWORK_SELECTION_AUTOMATIC: ret =  responseVoid(p); break;
27510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_NETWORK_SELECTION_MANUAL: ret =  responseVoid(p); break;
27520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_QUERY_AVAILABLE_NETWORKS : ret =  responseOperatorInfos(p); break;
27530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_DTMF_START: ret =  responseVoid(p); break;
27540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_DTMF_STOP: ret =  responseVoid(p); break;
27550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_BASEBAND_VERSION: ret =  responseString(p); break;
27560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SEPARATE_CONNECTION: ret =  responseVoid(p); break;
27570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_MUTE: ret =  responseVoid(p); break;
27580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GET_MUTE: ret =  responseInts(p); break;
27590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_QUERY_CLIP: ret =  responseInts(p); break;
27600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_LAST_DATA_CALL_FAIL_CAUSE: ret =  responseInts(p); break;
27610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_DATA_CALL_LIST: ret =  responseDataCallList(p); break;
27620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_RESET_RADIO: ret =  responseVoid(p); break;
27630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_OEM_HOOK_RAW: ret =  responseRaw(p); break;
27640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_OEM_HOOK_STRINGS: ret =  responseStrings(p); break;
27650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SCREEN_STATE: ret =  responseVoid(p); break;
27660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_SUPP_SVC_NOTIFICATION: ret =  responseVoid(p); break;
27670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_WRITE_SMS_TO_SIM: ret =  responseInts(p); break;
27680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_DELETE_SMS_ON_SIM: ret =  responseVoid(p); break;
27690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_BAND_MODE: ret =  responseVoid(p); break;
27700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_QUERY_AVAILABLE_BAND_MODE: ret =  responseInts(p); break;
27710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_STK_GET_PROFILE: ret =  responseString(p); break;
27720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_STK_SET_PROFILE: ret =  responseVoid(p); break;
27730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_STK_SEND_ENVELOPE_COMMAND: ret =  responseString(p); break;
27740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_STK_SEND_TERMINAL_RESPONSE: ret =  responseVoid(p); break;
27750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_STK_HANDLE_CALL_SETUP_REQUESTED_FROM_SIM: ret =  responseInts(p); break;
27760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_EXPLICIT_CALL_TRANSFER: ret =  responseVoid(p); break;
27770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE: ret =  responseVoid(p); break;
27780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GET_PREFERRED_NETWORK_TYPE: ret =  responseGetPreferredNetworkType(p); break;
27790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GET_NEIGHBORING_CELL_IDS: ret = responseCellList(p); break;
27800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_LOCATION_UPDATES: ret =  responseVoid(p); break;
27810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_SET_SUBSCRIPTION_SOURCE: ret =  responseVoid(p); break;
27820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_SET_ROAMING_PREFERENCE: ret =  responseVoid(p); break;
27830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_QUERY_ROAMING_PREFERENCE: ret =  responseInts(p); break;
27840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_TTY_MODE: ret =  responseVoid(p); break;
27850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_QUERY_TTY_MODE: ret =  responseInts(p); break;
27860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_SET_PREFERRED_VOICE_PRIVACY_MODE: ret =  responseVoid(p); break;
27870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_QUERY_PREFERRED_VOICE_PRIVACY_MODE: ret =  responseInts(p); break;
27880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_FLASH: ret =  responseVoid(p); break;
27890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_BURST_DTMF: ret =  responseVoid(p); break;
27900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_SEND_SMS: ret =  responseSMS(p); break;
27910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_SMS_ACKNOWLEDGE: ret =  responseVoid(p); break;
27920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GSM_GET_BROADCAST_CONFIG: ret =  responseGmsBroadcastConfig(p); break;
27930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GSM_SET_BROADCAST_CONFIG: ret =  responseVoid(p); break;
27940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GSM_BROADCAST_ACTIVATION: ret =  responseVoid(p); break;
27950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_GET_BROADCAST_CONFIG: ret =  responseCdmaBroadcastConfig(p); break;
27960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_SET_BROADCAST_CONFIG: ret =  responseVoid(p); break;
27970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_BROADCAST_ACTIVATION: ret =  responseVoid(p); break;
27980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_VALIDATE_AND_WRITE_AKEY: ret =  responseVoid(p); break;
27990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_SUBSCRIPTION: ret =  responseStrings(p); break;
28000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_WRITE_SMS_TO_RUIM: ret =  responseInts(p); break;
28010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_DELETE_SMS_ON_RUIM: ret =  responseVoid(p); break;
28020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_DEVICE_IDENTITY: ret =  responseStrings(p); break;
28030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GET_SMSC_ADDRESS: ret = responseString(p); break;
28040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_SMSC_ADDRESS: ret = responseVoid(p); break;
28050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_EXIT_EMERGENCY_CALLBACK_MODE: ret = responseVoid(p); break;
28060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_REPORT_SMS_MEMORY_STATUS: ret = responseVoid(p); break;
28070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_REPORT_STK_SERVICE_IS_RUNNING: ret = responseVoid(p); break;
28080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_GET_SUBSCRIPTION_SOURCE: ret =  responseInts(p); break;
28090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_ISIM_AUTHENTICATION: ret =  responseString(p); break;
28100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_ACKNOWLEDGE_INCOMING_GSM_SMS_WITH_PDU: ret = responseVoid(p); break;
28110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_STK_SEND_ENVELOPE_WITH_STATUS: ret = responseICC_IO(p); break;
28120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_VOICE_RADIO_TECH: ret = responseInts(p); break;
28135fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville            case RIL_REQUEST_GET_CELL_INFO_LIST: ret = responseCellInfoList(p); break;
28145fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville            case RIL_REQUEST_SET_UNSOL_CELL_INFO_LIST_RATE: ret = responseVoid(p); break;
28155d5eea6ed231163c225144316b0d1913d48678a4Sungmin Choi            case RIL_REQUEST_SET_INITIAL_ATTACH_APN: ret = responseVoid(p); break;
28169d4ec7d45061f1da05f16cd244eb0a798e7f36bbAmit Mahajan            case RIL_REQUEST_SET_DATA_PROFILE: ret = responseVoid(p); break;
28171260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa            case RIL_REQUEST_IMS_REGISTRATION_STATE: ret = responseInts(p); break;
28181260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa            case RIL_REQUEST_IMS_SEND_SMS: ret =  responseSMS(p); break;
281940d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal            case RIL_REQUEST_SIM_TRANSMIT_APDU_BASIC: ret =  responseICC_IO(p); break;
282040d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal            case RIL_REQUEST_SIM_OPEN_CHANNEL: ret  = responseInts(p); break;
282140d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal            case RIL_REQUEST_SIM_CLOSE_CHANNEL: ret  = responseVoid(p); break;
282240d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal            case RIL_REQUEST_SIM_TRANSMIT_APDU_CHANNEL: ret = responseICC_IO(p); break;
2823f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby            case RIL_REQUEST_NV_READ_ITEM: ret = responseString(p); break;
2824f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby            case RIL_REQUEST_NV_WRITE_ITEM: ret = responseVoid(p); break;
2825f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby            case RIL_REQUEST_NV_WRITE_CDMA_PRL: ret = responseVoid(p); break;
2826f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby            case RIL_REQUEST_NV_RESET_CONFIG: ret = responseVoid(p); break;
2827a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville            case RIL_REQUEST_SET_UICC_SUBSCRIPTION: ret = responseVoid(p); break;
2828a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville            case RIL_REQUEST_ALLOW_DATA: ret = responseVoid(p); break;
2829a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville            case RIL_REQUEST_GET_HARDWARE_CONFIG: ret = responseHardwareConfig(p); break;
2830cf916cfb2b4d8282def13e4553abff2ea73aca2bVinit Deshpande            case RIL_REQUEST_SIM_AUTHENTICATION: ret =  responseICC_IOBase64(p); break;
283103586878fb3d870373f2fdf65afb81cc5ae97067Naveen Kalla            case RIL_REQUEST_SHUTDOWN: ret = responseVoid(p); break;
2832fc93067f7ab07b39b4eb1cb4fb3ea4e0f769f023Legler Wu            case RIL_REQUEST_GET_RADIO_CAPABILITY: ret =  responseRadioCapability(p); break;
2833fc93067f7ab07b39b4eb1cb4fb3ea4e0f769f023Legler Wu            case RIL_REQUEST_SET_RADIO_CAPABILITY: ret =  responseRadioCapability(p); break;
283465bee39d7e417fb898c3948696d5d8a38046c449fenglu            case RIL_REQUEST_START_LCE: ret = responseLceStatus(p); break;
283565bee39d7e417fb898c3948696d5d8a38046c449fenglu            case RIL_REQUEST_STOP_LCE: ret = responseLceStatus(p); break;
283665bee39d7e417fb898c3948696d5d8a38046c449fenglu            case RIL_REQUEST_PULL_LCEDATA: ret = responseLceData(p); break;
283727eef341b171f925ef43dd088cc559280fd7d2b9Prerepa Viswanadham            case RIL_REQUEST_GET_ACTIVITY_INFO: ret = responseActivityData(p); break;
283840659286ac42ec77bbe7893830bd50c06f393ee8Meng Wang            case RIL_REQUEST_SET_ALLOWED_CARRIERS: ret = responseInts(p); break;
283940659286ac42ec77bbe7893830bd50c06f393ee8Meng Wang            case RIL_REQUEST_GET_ALLOWED_CARRIERS: ret = responseCarrierIdentifiers(p); break;
28400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            default:
28410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                throw new RuntimeException("Unrecognized solicited response: " + rr.mRequest);
28420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            //break;
28430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }} catch (Throwable tr) {
28440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                // Exceptions here usually mean invalid RIL responses
28450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2846fa4fd4721082689c4b276f67b845e7be249cb8daWink Saville                Rlog.w(RILJ_LOG_TAG, rr.serialString() + "< "
28470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        + requestToString(rr.mRequest)
28480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        + " exception, possible invalid RIL response", tr);
28490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
28500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (rr.mResult != null) {
28510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    AsyncResult.forMessage(rr.mResult, null, tr);
28520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    rr.mResult.sendToTarget();
28530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
28547cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt                return rr;
28550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
28560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
28570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
285803586878fb3d870373f2fdf65afb81cc5ae97067Naveen Kalla        if (rr.mRequest == RIL_REQUEST_SHUTDOWN) {
285903586878fb3d870373f2fdf65afb81cc5ae97067Naveen Kalla            // Set RADIO_STATE to RADIO_UNAVAILABLE to continue shutdown process
286003586878fb3d870373f2fdf65afb81cc5ae97067Naveen Kalla            // regardless of error code to continue shutdown procedure.
286103586878fb3d870373f2fdf65afb81cc5ae97067Naveen Kalla            riljLog("Response to RIL_REQUEST_SHUTDOWN received. Error is " +
286203586878fb3d870373f2fdf65afb81cc5ae97067Naveen Kalla                    error + " Setting Radio State to Unavailable regardless of error.");
286303586878fb3d870373f2fdf65afb81cc5ae97067Naveen Kalla            setRadioState(RadioState.RADIO_UNAVAILABLE);
286403586878fb3d870373f2fdf65afb81cc5ae97067Naveen Kalla        }
286503586878fb3d870373f2fdf65afb81cc5ae97067Naveen Kalla
2866f860a3f42f87c9c8572623aff33349168d689477Wink Saville        // Here and below fake RIL_UNSOL_RESPONSE_SIM_STATUS_CHANGED, see b/7255789.
2867f860a3f42f87c9c8572623aff33349168d689477Wink Saville        // This is needed otherwise we don't automatically transition to the main lock
2868f860a3f42f87c9c8572623aff33349168d689477Wink Saville        // screen when the pin or puk is entered incorrectly.
2869be3dc4b04cd65e576d250cf68f310d47637167ffWink Saville        switch (rr.mRequest) {
2870be3dc4b04cd65e576d250cf68f310d47637167ffWink Saville            case RIL_REQUEST_ENTER_SIM_PUK:
2871be3dc4b04cd65e576d250cf68f310d47637167ffWink Saville            case RIL_REQUEST_ENTER_SIM_PUK2:
2872be3dc4b04cd65e576d250cf68f310d47637167ffWink Saville                if (mIccStatusChangedRegistrants != null) {
2873f860a3f42f87c9c8572623aff33349168d689477Wink Saville                    if (RILJ_LOGD) {
2874f860a3f42f87c9c8572623aff33349168d689477Wink Saville                        riljLog("ON enter sim puk fakeSimStatusChanged: reg count="
2875f860a3f42f87c9c8572623aff33349168d689477Wink Saville                                + mIccStatusChangedRegistrants.size());
2876f860a3f42f87c9c8572623aff33349168d689477Wink Saville                    }
2877be3dc4b04cd65e576d250cf68f310d47637167ffWink Saville                    mIccStatusChangedRegistrants.notifyRegistrants();
2878be3dc4b04cd65e576d250cf68f310d47637167ffWink Saville                }
2879be3dc4b04cd65e576d250cf68f310d47637167ffWink Saville                break;
2880be3dc4b04cd65e576d250cf68f310d47637167ffWink Saville        }
2881be3dc4b04cd65e576d250cf68f310d47637167ffWink Saville
28820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (error != 0) {
2883f860a3f42f87c9c8572623aff33349168d689477Wink Saville            switch (rr.mRequest) {
2884f860a3f42f87c9c8572623aff33349168d689477Wink Saville                case RIL_REQUEST_ENTER_SIM_PIN:
2885f860a3f42f87c9c8572623aff33349168d689477Wink Saville                case RIL_REQUEST_ENTER_SIM_PIN2:
2886f860a3f42f87c9c8572623aff33349168d689477Wink Saville                case RIL_REQUEST_CHANGE_SIM_PIN:
2887f860a3f42f87c9c8572623aff33349168d689477Wink Saville                case RIL_REQUEST_CHANGE_SIM_PIN2:
2888f860a3f42f87c9c8572623aff33349168d689477Wink Saville                case RIL_REQUEST_SET_FACILITY_LOCK:
2889f860a3f42f87c9c8572623aff33349168d689477Wink Saville                    if (mIccStatusChangedRegistrants != null) {
2890f860a3f42f87c9c8572623aff33349168d689477Wink Saville                        if (RILJ_LOGD) {
2891f860a3f42f87c9c8572623aff33349168d689477Wink Saville                            riljLog("ON some errors fakeSimStatusChanged: reg count="
2892f860a3f42f87c9c8572623aff33349168d689477Wink Saville                                    + mIccStatusChangedRegistrants.size());
2893f860a3f42f87c9c8572623aff33349168d689477Wink Saville                        }
2894f860a3f42f87c9c8572623aff33349168d689477Wink Saville                        mIccStatusChangedRegistrants.notifyRegistrants();
2895f860a3f42f87c9c8572623aff33349168d689477Wink Saville                    }
2896f860a3f42f87c9c8572623aff33349168d689477Wink Saville                    break;
28973ad0c75dac907e8490b78d6fd8c0278d28b96f84Robert Greenwalt                case RIL_REQUEST_GET_RADIO_CAPABILITY: {
28983ad0c75dac907e8490b78d6fd8c0278d28b96f84Robert Greenwalt                    // Ideally RIL's would support this or at least give NOT_SUPPORTED
28993ad0c75dac907e8490b78d6fd8c0278d28b96f84Robert Greenwalt                    // but the hammerhead RIL reports GENERIC :(
29003ad0c75dac907e8490b78d6fd8c0278d28b96f84Robert Greenwalt                    // TODO - remove GENERIC_FAILURE catching: b/21079604
29013ad0c75dac907e8490b78d6fd8c0278d28b96f84Robert Greenwalt                    if (REQUEST_NOT_SUPPORTED == error ||
29023ad0c75dac907e8490b78d6fd8c0278d28b96f84Robert Greenwalt                            GENERIC_FAILURE == error) {
29033ad0c75dac907e8490b78d6fd8c0278d28b96f84Robert Greenwalt                        // we should construct the RAF bitmask the radio
29043ad0c75dac907e8490b78d6fd8c0278d28b96f84Robert Greenwalt                        // supports based on preferred network bitmasks
29053ad0c75dac907e8490b78d6fd8c0278d28b96f84Robert Greenwalt                        ret = makeStaticRadioCapability();
29063ad0c75dac907e8490b78d6fd8c0278d28b96f84Robert Greenwalt                        error = 0;
29073ad0c75dac907e8490b78d6fd8c0278d28b96f84Robert Greenwalt                    }
29083ad0c75dac907e8490b78d6fd8c0278d28b96f84Robert Greenwalt                    break;
29093ad0c75dac907e8490b78d6fd8c0278d28b96f84Robert Greenwalt                }
291027eef341b171f925ef43dd088cc559280fd7d2b9Prerepa Viswanadham                case RIL_REQUEST_GET_ACTIVITY_INFO:
291127eef341b171f925ef43dd088cc559280fd7d2b9Prerepa Viswanadham                    ret = new ModemActivityInfo(0, 0, 0,
291227eef341b171f925ef43dd088cc559280fd7d2b9Prerepa Viswanadham                            new int [ModemActivityInfo.TX_POWER_LEVELS], 0, 0);
291327eef341b171f925ef43dd088cc559280fd7d2b9Prerepa Viswanadham                    error = 0;
291427eef341b171f925ef43dd088cc559280fd7d2b9Prerepa Viswanadham                    break;
2915f860a3f42f87c9c8572623aff33349168d689477Wink Saville            }
2916f860a3f42f87c9c8572623aff33349168d689477Wink Saville
29173ad0c75dac907e8490b78d6fd8c0278d28b96f84Robert Greenwalt            if (error != 0) rr.onError(error, ret);
29183ad0c75dac907e8490b78d6fd8c0278d28b96f84Robert Greenwalt        }
29193ad0c75dac907e8490b78d6fd8c0278d28b96f84Robert Greenwalt        if (error == 0) {
29200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
29217cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt            if (RILJ_LOGD) riljLog(rr.serialString() + "< " + requestToString(rr.mRequest)
29227cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt                    + " " + retToString(rr.mRequest, ret));
29230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
29247cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt            if (rr.mResult != null) {
29257cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt                AsyncResult.forMessage(rr.mResult, ret, null);
29267cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt                rr.mResult.sendToTarget();
29277cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt            }
29280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
29295054dfa7fd9b0520d30a102ed5a2107af11590c8Pavel Zhamaitsiak
2930f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu        mMetrics.writeOnRilSolicitedResponse(mInstanceId, rr.mSerial, error,
2931f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu                rr.mRequest, ret);
29325054dfa7fd9b0520d30a102ed5a2107af11590c8Pavel Zhamaitsiak
29337cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt        return rr;
29340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
29350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
29363ad0c75dac907e8490b78d6fd8c0278d28b96f84Robert Greenwalt    private RadioCapability makeStaticRadioCapability() {
29373ad0c75dac907e8490b78d6fd8c0278d28b96f84Robert Greenwalt        // default to UNKNOWN so we fail fast.
29383ad0c75dac907e8490b78d6fd8c0278d28b96f84Robert Greenwalt        int raf = RadioAccessFamily.RAF_UNKNOWN;
29393ad0c75dac907e8490b78d6fd8c0278d28b96f84Robert Greenwalt
29403ad0c75dac907e8490b78d6fd8c0278d28b96f84Robert Greenwalt        String rafString = mContext.getResources().getString(
29413ad0c75dac907e8490b78d6fd8c0278d28b96f84Robert Greenwalt                com.android.internal.R.string.config_radio_access_family);
29423ad0c75dac907e8490b78d6fd8c0278d28b96f84Robert Greenwalt        if (TextUtils.isEmpty(rafString) == false) {
29433ad0c75dac907e8490b78d6fd8c0278d28b96f84Robert Greenwalt            raf = RadioAccessFamily.rafTypeFromString(rafString);
29443ad0c75dac907e8490b78d6fd8c0278d28b96f84Robert Greenwalt        }
29453ad0c75dac907e8490b78d6fd8c0278d28b96f84Robert Greenwalt        RadioCapability rc = new RadioCapability(mInstanceId.intValue(), 0, 0, raf,
29463ad0c75dac907e8490b78d6fd8c0278d28b96f84Robert Greenwalt                "", RadioCapability.RC_STATUS_SUCCESS);
29473ad0c75dac907e8490b78d6fd8c0278d28b96f84Robert Greenwalt        if (RILJ_LOGD) riljLog("Faking RIL_REQUEST_GET_RADIO_CAPABILITY response using " + raf);
29483ad0c75dac907e8490b78d6fd8c0278d28b96f84Robert Greenwalt        return rc;
29493ad0c75dac907e8490b78d6fd8c0278d28b96f84Robert Greenwalt    }
29503ad0c75dac907e8490b78d6fd8c0278d28b96f84Robert Greenwalt
29513522c54a64f577f2b657a775dae9b4eb2d8003d5Wink Saville    static String
29520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    retToString(int req, Object ret) {
29530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (ret == null) return "";
29540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        switch (req) {
29550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            // Don't log these return values, for privacy's sake.
29560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GET_IMSI:
29570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GET_IMEI:
29580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GET_IMEISV:
29597b960c8adc35113c6eb3fad6cdfe32c2169d380bAmit Mahajan            case RIL_REQUEST_SIM_OPEN_CHANNEL:
29607b960c8adc35113c6eb3fad6cdfe32c2169d380bAmit Mahajan            case RIL_REQUEST_SIM_TRANSMIT_APDU_CHANNEL:
29617b960c8adc35113c6eb3fad6cdfe32c2169d380bAmit Mahajan
29620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (!RILJ_LOGV) {
29630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    // If not versbose logging just return and don't display IMSI and IMEI, IMEISV
29640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    return "";
29650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
29660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
29670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
29680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        StringBuilder sb;
29690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String s;
29700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int length;
29710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (ret instanceof int[]){
29720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            int[] intArray = (int[]) ret;
29730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            length = intArray.length;
29740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            sb = new StringBuilder("{");
29750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (length > 0) {
29760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                int i = 0;
29770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                sb.append(intArray[i++]);
29780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                while ( i < length) {
29790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    sb.append(", ").append(intArray[i++]);
29800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
29810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
29820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            sb.append("}");
29830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            s = sb.toString();
29840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else if (ret instanceof String[]) {
29850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            String[] strings = (String[]) ret;
29860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            length = strings.length;
29870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            sb = new StringBuilder("{");
29880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (length > 0) {
29890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                int i = 0;
29900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                sb.append(strings[i++]);
29910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                while ( i < length) {
29920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    sb.append(", ").append(strings[i++]);
29930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
29940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
29950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            sb.append("}");
29960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            s = sb.toString();
29970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }else if (req == RIL_REQUEST_GET_CURRENT_CALLS) {
29980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            ArrayList<DriverCall> calls = (ArrayList<DriverCall>) ret;
2999e20154713e46216e5033af2339490321dc9ca1bfGao Rong            sb = new StringBuilder("{");
30000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            for (DriverCall dc : calls) {
30010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                sb.append("[").append(dc).append("] ");
30020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
3003e20154713e46216e5033af2339490321dc9ca1bfGao Rong            sb.append("}");
30040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            s = sb.toString();
30050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else if (req == RIL_REQUEST_GET_NEIGHBORING_CELL_IDS) {
3006e20154713e46216e5033af2339490321dc9ca1bfGao Rong            ArrayList<NeighboringCellInfo> cells = (ArrayList<NeighboringCellInfo>) ret;
3007e20154713e46216e5033af2339490321dc9ca1bfGao Rong            sb = new StringBuilder("{");
30080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            for (NeighboringCellInfo cell : cells) {
3009e20154713e46216e5033af2339490321dc9ca1bfGao Rong                sb.append("[").append(cell).append("] ");
30100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
3011e20154713e46216e5033af2339490321dc9ca1bfGao Rong            sb.append("}");
3012e20154713e46216e5033af2339490321dc9ca1bfGao Rong            s = sb.toString();
3013e20154713e46216e5033af2339490321dc9ca1bfGao Rong        } else if (req == RIL_REQUEST_QUERY_CALL_FORWARD_STATUS) {
3014e20154713e46216e5033af2339490321dc9ca1bfGao Rong            CallForwardInfo[] cinfo = (CallForwardInfo[]) ret;
3015e20154713e46216e5033af2339490321dc9ca1bfGao Rong            length = cinfo.length;
3016e20154713e46216e5033af2339490321dc9ca1bfGao Rong            sb = new StringBuilder("{");
3017e20154713e46216e5033af2339490321dc9ca1bfGao Rong            for(int i = 0; i < length; i++) {
3018e20154713e46216e5033af2339490321dc9ca1bfGao Rong                sb.append("[").append(cinfo[i]).append("] ");
30190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
3020e20154713e46216e5033af2339490321dc9ca1bfGao Rong            sb.append("}");
30210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            s = sb.toString();
3022a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        } else if (req == RIL_REQUEST_GET_HARDWARE_CONFIG) {
3023a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville            ArrayList<HardwareConfig> hwcfgs = (ArrayList<HardwareConfig>) ret;
3024a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville            sb = new StringBuilder(" ");
3025a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville            for (HardwareConfig hwcfg : hwcfgs) {
3026a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                sb.append("[").append(hwcfg).append("] ");
3027a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville            }
3028a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville            s = sb.toString();
30290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else {
30300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            s = ret.toString();
30310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
30320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return s;
30330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
30340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
30350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private void
3036a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe    processUnsolicited (Parcel p, int type) {
30370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int response;
30380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        Object ret;
30390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
30400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        response = p.readInt();
30410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3042060a6f0ba56dde532a9b9b28d4302df86a556691Sanket Padawe        // Follow new symantics of sending an Ack starting from RIL version 13
3043a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe        if (getRilVersion() >= 13 && type == RESPONSE_UNSOLICITED_ACK_EXP) {
3044060a6f0ba56dde532a9b9b28d4302df86a556691Sanket Padawe            Message msg;
3045060a6f0ba56dde532a9b9b28d4302df86a556691Sanket Padawe            RILRequest rr = RILRequest.obtain(RIL_RESPONSE_ACKNOWLEDGEMENT, null);
3046060a6f0ba56dde532a9b9b28d4302df86a556691Sanket Padawe            msg = mSender.obtainMessage(EVENT_SEND_ACK, rr);
304732c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold            acquireWakeLock(rr, FOR_ACK_WAKELOCK);
3048060a6f0ba56dde532a9b9b28d4302df86a556691Sanket Padawe            msg.sendToTarget();
3049a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe            if (RILJ_LOGD) {
3050a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe                riljLog("Unsol response received for " + responseToString(response) +
3051a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe                        " Sending ack to ril.cpp");
3052a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe            }
3053060a6f0ba56dde532a9b9b28d4302df86a556691Sanket Padawe        }
3054060a6f0ba56dde532a9b9b28d4302df86a556691Sanket Padawe
30550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        try {switch(response) {
30560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville/*
30570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville cat libs/telephony/ril_unsol_commands.h \
30580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville | egrep "^ *{RIL_" \
30590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville | sed -re 's/\{([^,]+),[^,]+,([^}]+).+/case \1: \2(rr, p); break;/'
30600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville*/
30610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
30620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_RADIO_STATE_CHANGED: ret =  responseVoid(p); break;
30630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED: ret =  responseVoid(p); break;
30640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED: ret =  responseVoid(p); break;
30650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_NEW_SMS: ret =  responseString(p); break;
30660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_NEW_SMS_STATUS_REPORT: ret =  responseString(p); break;
30670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_NEW_SMS_ON_SIM: ret =  responseInts(p); break;
30680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_ON_USSD: ret =  responseStrings(p); break;
30690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_NITZ_TIME_RECEIVED: ret =  responseString(p); break;
30700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_SIGNAL_STRENGTH: ret = responseSignalStrength(p); break;
30710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_DATA_CALL_LIST_CHANGED: ret = responseDataCallList(p);break;
30720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_SUPP_SVC_NOTIFICATION: ret = responseSuppServiceNotification(p); break;
30730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_STK_SESSION_END: ret = responseVoid(p); break;
30740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_STK_PROACTIVE_COMMAND: ret = responseString(p); break;
30750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_STK_EVENT_NOTIFY: ret = responseString(p); break;
30760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_STK_CALL_SETUP: ret = responseInts(p); break;
30770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_SIM_SMS_STORAGE_FULL: ret =  responseVoid(p); break;
30780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_SIM_REFRESH: ret =  responseSimRefresh(p); break;
30790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_CALL_RING: ret =  responseCallRing(p); break;
30800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESTRICTED_STATE_CHANGED: ret = responseInts(p); break;
30810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_SIM_STATUS_CHANGED:  ret =  responseVoid(p); break;
30820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_CDMA_NEW_SMS:  ret =  responseCdmaSms(p); break;
30830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_NEW_BROADCAST_SMS:  ret =  responseRaw(p); break;
30840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_CDMA_RUIM_SMS_STORAGE_FULL:  ret =  responseVoid(p); break;
30850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_ENTER_EMERGENCY_CALLBACK_MODE: ret = responseVoid(p); break;
30860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_CDMA_CALL_WAITING: ret = responseCdmaCallWaiting(p); break;
30870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_CDMA_OTA_PROVISION_STATUS: ret = responseInts(p); break;
30880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_CDMA_INFO_REC: ret = responseCdmaInformationRecord(p); break;
30890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_OEM_HOOK_RAW: ret = responseRaw(p); break;
30900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RINGBACK_TONE: ret = responseInts(p); break;
30910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESEND_INCALL_MUTE: ret = responseVoid(p); break;
30920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_CDMA_SUBSCRIPTION_SOURCE_CHANGED: ret = responseInts(p); break;
30930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOl_CDMA_PRL_CHANGED: ret = responseInts(p); break;
30940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_EXIT_EMERGENCY_CALLBACK_MODE: ret = responseVoid(p); break;
30950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RIL_CONNECTED: ret = responseInts(p); break;
30960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_VOICE_RADIO_TECH_CHANGED: ret =  responseInts(p); break;
30975fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville            case RIL_UNSOL_CELL_INFO_LIST: ret = responseCellInfoList(p); break;
30981260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa            case RIL_UNSOL_RESPONSE_IMS_NETWORK_STATE_CHANGED: ret =  responseVoid(p); break;
3099a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville            case RIL_UNSOL_UICC_SUBSCRIPTION_STATUS_CHANGED: ret =  responseInts(p); break;
3100a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville            case RIL_UNSOL_SRVCC_STATE_NOTIFY: ret = responseInts(p); break;
3101a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville            case RIL_UNSOL_HARDWARE_CONFIG_CHANGED: ret = responseHardwareConfig(p); break;
31022b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville            case RIL_UNSOL_RADIO_CAPABILITY:
31032b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville                    ret = responseRadioCapability(p); break;
310409b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja            case RIL_UNSOL_ON_SS: ret =  responseSsData(p); break;
310509b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja            case RIL_UNSOL_STK_CC_ALPHA_NOTIFY: ret =  responseString(p); break;
310665bee39d7e417fb898c3948696d5d8a38046c449fenglu            case RIL_UNSOL_LCEDATA_RECV: ret = responseLceData(p); break;
31074b4d80db8a8d447d3c1110831c2a821a2bd2a186Robert Greenwalt            case RIL_UNSOL_PCO_DATA: ret = responsePcoData(p); break;
310809b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja
31090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            default:
31100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                throw new RuntimeException("Unrecognized unsol response: " + response);
31110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            //break; (implied)
31120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }} catch (Throwable tr) {
3113fa4fd4721082689c4b276f67b845e7be249cb8daWink Saville            Rlog.e(RILJ_LOG_TAG, "Exception processing unsol response: " + response +
31140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                "Exception:" + tr.toString());
31150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            return;
31160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
31170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
31180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        switch(response) {
31190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_RADIO_STATE_CHANGED:
31200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                /* has bonus radio state int */
31210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                RadioState newState = getRadioStateFromInt(p.readInt());
31220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogMore(response, newState.toString());
31230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
31240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                switchToRadioState(newState);
31250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            break;
31261260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa            case RIL_UNSOL_RESPONSE_IMS_NETWORK_STATE_CHANGED:
31271260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa                if (RILJ_LOGD) unsljLog(response);
31281260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa
31291260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa                mImsNetworkStateChangedRegistrants
31301260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa                    .notifyRegistrants(new AsyncResult(null, null, null));
31311260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa            break;
31320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED:
31330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLog(response);
31340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
31350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                mCallStateRegistrants
31360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    .notifyRegistrants(new AsyncResult(null, null, null));
31370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            break;
31380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED:
31390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLog(response);
31400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
31410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                mVoiceNetworkStateRegistrants
31420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    .notifyRegistrants(new AsyncResult(null, null, null));
31430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            break;
31440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_NEW_SMS: {
31450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLog(response);
31460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3147f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu                mMetrics.writeRilNewSms(mInstanceId, SmsSession.Event.Tech.SMS_GSM,
3148f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu                        SmsSession.Event.Format.SMS_FORMAT_3GPP);
31495054dfa7fd9b0520d30a102ed5a2107af11590c8Pavel Zhamaitsiak
31500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                // FIXME this should move up a layer
31510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                String a[] = new String[2];
31520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
31530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                a[1] = (String)ret;
31540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
31550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                SmsMessage sms;
31560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
31570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                sms = SmsMessage.newFromCMT(a);
31580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mGsmSmsRegistrant != null) {
31590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mGsmSmsRegistrant
31600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        .notifyRegistrant(new AsyncResult(null, sms, null));
31610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
31620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            break;
31630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
31640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_NEW_SMS_STATUS_REPORT:
31650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
31660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
31670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mSmsStatusRegistrant != null) {
31680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mSmsStatusRegistrant.notifyRegistrant(
31690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            new AsyncResult(null, ret, null));
31700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
31710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            break;
31720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_NEW_SMS_ON_SIM:
31730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
31740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
31750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                int[] smsIndex = (int[])ret;
31760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
31770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if(smsIndex.length == 1) {
31780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    if (mSmsOnSimRegistrant != null) {
31790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        mSmsOnSimRegistrant.
31800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                notifyRegistrant(new AsyncResult(null, smsIndex, null));
31810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    }
31820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                } else {
31830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    if (RILJ_LOGD) riljLog(" NEW_SMS_ON_SIM ERROR with wrong length "
31840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            + smsIndex.length);
31850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
31860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            break;
31870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_ON_USSD:
31880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                String[] resp = (String[])ret;
31890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
31900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (resp.length < 2) {
31910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    resp = new String[2];
31920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    resp[0] = ((String[])ret)[0];
31930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    resp[1] = null;
31940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
31950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogMore(response, resp[0]);
31960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mUSSDRegistrant != null) {
31970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mUSSDRegistrant.notifyRegistrant(
31980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        new AsyncResult (null, resp, null));
31990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
32000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            break;
32010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_NITZ_TIME_RECEIVED:
32020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
32030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
32040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                // has bonus long containing milliseconds since boot that the NITZ
32050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                // time was received
32060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                long nitzReceiveTime = p.readLong();
32070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
32080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                Object[] result = new Object[2];
32090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
32100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                result[0] = ret;
32110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                result[1] = Long.valueOf(nitzReceiveTime);
32120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
32130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                boolean ignoreNitz = SystemProperties.getBoolean(
32140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        TelephonyProperties.PROPERTY_IGNORE_NITZ, false);
32150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
32160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (ignoreNitz) {
32170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    if (RILJ_LOGD) riljLog("ignoring UNSOL_NITZ_TIME_RECEIVED");
32180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                } else {
32190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    if (mNITZTimeRegistrant != null) {
32200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
32210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        mNITZTimeRegistrant
32220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            .notifyRegistrant(new AsyncResult (null, result, null));
32230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    }
3224952f6df569fd0dffdb0600c20ff383a02e64a038Amit Mahajan                    // in case NITZ time registrant isn't registered yet, or a new registrant
3225952f6df569fd0dffdb0600c20ff383a02e64a038Amit Mahajan                    // registers later
3226952f6df569fd0dffdb0600c20ff383a02e64a038Amit Mahajan                    mLastNITZTimeInfo = result;
32270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
32280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            break;
32290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
32300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_SIGNAL_STRENGTH:
32310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                // Note this is set to "verbose" because it happens
32320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                // frequently
32330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGV) unsljLogvRet(response, ret);
32340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
32350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mSignalStrengthRegistrant != null) {
32360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mSignalStrengthRegistrant.notifyRegistrant(
32370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                        new AsyncResult (null, ret, null));
32380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
32390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            break;
32400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_DATA_CALL_LIST_CHANGED:
32410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
32420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
32430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                mDataNetworkStateRegistrants.notifyRegistrants(new AsyncResult(null, ret, null));
32440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            break;
32450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
32460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_SUPP_SVC_NOTIFICATION:
32470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
32480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
32490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mSsnRegistrant != null) {
32500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mSsnRegistrant.notifyRegistrant(
32510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                        new AsyncResult (null, ret, null));
32520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
32530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
32540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
32550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_STK_SESSION_END:
32560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLog(response);
32570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
32580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mCatSessionEndRegistrant != null) {
32590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mCatSessionEndRegistrant.notifyRegistrant(
32600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                        new AsyncResult (null, ret, null));
32610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
32620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
32630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
32640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_STK_PROACTIVE_COMMAND:
32657b960c8adc35113c6eb3fad6cdfe32c2169d380bAmit Mahajan                if (RILJ_LOGD) unsljLog(response);
32660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
32670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mCatProCmdRegistrant != null) {
32680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mCatProCmdRegistrant.notifyRegistrant(
32690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                        new AsyncResult (null, ret, null));
32700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
32710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
32720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
32730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_STK_EVENT_NOTIFY:
32747b960c8adc35113c6eb3fad6cdfe32c2169d380bAmit Mahajan                if (RILJ_LOGD) unsljLog(response);
32750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
32760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mCatEventRegistrant != null) {
32770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mCatEventRegistrant.notifyRegistrant(
32780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                        new AsyncResult (null, ret, null));
32790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
32800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
32810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
32820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_STK_CALL_SETUP:
32830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
32840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
32850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mCatCallSetUpRegistrant != null) {
32860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mCatCallSetUpRegistrant.notifyRegistrant(
32870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                        new AsyncResult (null, ret, null));
32880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
32890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
32900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
32910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_SIM_SMS_STORAGE_FULL:
32920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLog(response);
32930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
32940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mIccSmsFullRegistrant != null) {
32950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mIccSmsFullRegistrant.notifyRegistrant();
32960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
32970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
32980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
32990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_SIM_REFRESH:
33000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
33010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
33020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mIccRefreshRegistrants != null) {
33030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mIccRefreshRegistrants.notifyRegistrants(
33040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            new AsyncResult (null, ret, null));
33050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
33060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
33070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
33080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_CALL_RING:
33090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
33100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
33110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mRingRegistrant != null) {
33120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mRingRegistrant.notifyRegistrant(
33130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            new AsyncResult (null, ret, null));
33140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
33150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
33160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
33170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESTRICTED_STATE_CHANGED:
33180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogvRet(response, ret);
33190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mRestrictedStateRegistrant != null) {
33200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mRestrictedStateRegistrant.notifyRegistrant(
33210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                        new AsyncResult (null, ret, null));
33220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
33230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
33240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
33250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_SIM_STATUS_CHANGED:
33260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLog(response);
33270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
33280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mIccStatusChangedRegistrants != null) {
33290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mIccStatusChangedRegistrants.notifyRegistrants();
33300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
33310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
33320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
33330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_CDMA_NEW_SMS:
33340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLog(response);
33350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3336f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu                mMetrics.writeRilNewSms(mInstanceId, SmsSession.Event.Tech.SMS_CDMA,
3337f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu                        SmsSession.Event.Format.SMS_FORMAT_3GPP2);
33385054dfa7fd9b0520d30a102ed5a2107af11590c8Pavel Zhamaitsiak
33390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                SmsMessage sms = (SmsMessage) ret;
33400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
33410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mCdmaSmsRegistrant != null) {
33420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mCdmaSmsRegistrant
33430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        .notifyRegistrant(new AsyncResult(null, sms, null));
33440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
33450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
33460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
33470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_NEW_BROADCAST_SMS:
334822f63e1953ccb581cb89585e4ab77eda185c1897xinhe                if (RILJ_LOGD) unsljLogvRet(response, IccUtils.bytesToHexString((byte[])ret));
33490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
33500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mGsmBroadcastSmsRegistrant != null) {
33510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mGsmBroadcastSmsRegistrant
33520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        .notifyRegistrant(new AsyncResult(null, ret, null));
33530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
33540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
33550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
33560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_CDMA_RUIM_SMS_STORAGE_FULL:
33570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLog(response);
33580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
33590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mIccSmsFullRegistrant != null) {
33600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mIccSmsFullRegistrant.notifyRegistrant();
33610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
33620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
33630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
33640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_ENTER_EMERGENCY_CALLBACK_MODE:
33650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLog(response);
33660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
33670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mEmergencyCallbackModeRegistrant != null) {
33680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mEmergencyCallbackModeRegistrant.notifyRegistrant();
33690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
33700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
33710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
33720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_CDMA_CALL_WAITING:
33730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
33740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
33750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mCallWaitingInfoRegistrants != null) {
33760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mCallWaitingInfoRegistrants.notifyRegistrants(
33770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                        new AsyncResult (null, ret, null));
33780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
33790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
33800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
33810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_CDMA_OTA_PROVISION_STATUS:
33820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
33830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
33840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mOtaProvisionRegistrants != null) {
33850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mOtaProvisionRegistrants.notifyRegistrants(
33860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                        new AsyncResult (null, ret, null));
33870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
33880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
33890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
33900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_CDMA_INFO_REC:
33910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                ArrayList<CdmaInformationRecords> listInfoRecs;
33920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
33930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                try {
33940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    listInfoRecs = (ArrayList<CdmaInformationRecords>)ret;
33950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                } catch (ClassCastException e) {
3396fa4fd4721082689c4b276f67b845e7be249cb8daWink Saville                    Rlog.e(RILJ_LOG_TAG, "Unexpected exception casting to listInfoRecs", e);
33970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    break;
33980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
33990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
34000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                for (CdmaInformationRecords rec : listInfoRecs) {
34010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    if (RILJ_LOGD) unsljLogRet(response, rec);
34020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    notifyRegistrantsCdmaInfoRec(rec);
34030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
34040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
34050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
34060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_OEM_HOOK_RAW:
34070e42864afb21261d6bd2e9b4aa97f6d01d039a25Yashdev Singh                if (RILJ_LOGD) unsljLogvRet(response, IccUtils.bytesToHexString((byte[]) ret));
34080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mUnsolOemHookRawRegistrant != null) {
34090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mUnsolOemHookRawRegistrant.notifyRegistrant(new AsyncResult(null, ret, null));
34100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
34110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
34120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
34130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RINGBACK_TONE:
34140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogvRet(response, ret);
34150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mRingbackToneRegistrants != null) {
34160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    boolean playtone = (((int[])ret)[0] == 1);
34170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mRingbackToneRegistrants.notifyRegistrants(
34180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                        new AsyncResult (null, playtone, null));
34190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
34200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
34210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
34220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESEND_INCALL_MUTE:
34230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
34240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
34250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mResendIncallMuteRegistrants != null) {
34260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mResendIncallMuteRegistrants.notifyRegistrants(
34270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                        new AsyncResult (null, ret, null));
34280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
34290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
34300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
34310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_VOICE_RADIO_TECH_CHANGED:
34320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
34330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
34340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mVoiceRadioTechChangedRegistrants != null) {
34350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mVoiceRadioTechChangedRegistrants.notifyRegistrants(
34360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            new AsyncResult(null, ret, null));
34370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
34380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
34390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
34400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_CDMA_SUBSCRIPTION_SOURCE_CHANGED:
34410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
34420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
34430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mCdmaSubscriptionChangedRegistrants != null) {
34440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mCdmaSubscriptionChangedRegistrants.notifyRegistrants(
34450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                        new AsyncResult (null, ret, null));
34460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
34470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
34480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
34490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOl_CDMA_PRL_CHANGED:
34500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
34510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
34520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mCdmaPrlChangedRegistrants != null) {
34530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mCdmaPrlChangedRegistrants.notifyRegistrants(
34540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                        new AsyncResult (null, ret, null));
34550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
34560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
34570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
34580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_EXIT_EMERGENCY_CALLBACK_MODE:
34590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
34600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
34610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mExitEmergencyCallbackModeRegistrants != null) {
34620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mExitEmergencyCallbackModeRegistrants.notifyRegistrants(
34630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                        new AsyncResult (null, null, null));
34640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
34650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
34660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
34670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RIL_CONNECTED: {
34680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
34690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
34700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                // Initial conditions
34710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                setRadioPower(false, null);
34720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                setCdmaSubscriptionSource(mCdmaSubscription, null);
3473121c056d398b68e2bd2d35e6f5c2730fa7fb81c9Wink Saville                setCellInfoListRate(Integer.MAX_VALUE, null);
34740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                notifyRegistrantsRilConnectionChanged(((int[])ret)[0]);
34750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
34760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
34775fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville            case RIL_UNSOL_CELL_INFO_LIST: {
34785fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
34795fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville
34805fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville                if (mRilCellInfoListRegistrants != null) {
34815fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville                    mRilCellInfoListRegistrants.notifyRegistrants(
34825fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville                                        new AsyncResult (null, ret, null));
34835fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville                }
34845fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville                break;
34855fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville            }
3486a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville            case RIL_UNSOL_UICC_SUBSCRIPTION_STATUS_CHANGED: {
3487a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
3488a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville
3489a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                if (mSubscriptionStatusRegistrants != null) {
3490a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                    mSubscriptionStatusRegistrants.notifyRegistrants(
3491a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                                        new AsyncResult (null, ret, null));
3492a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                }
3493a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                break;
3494a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville            }
3495a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville            case RIL_UNSOL_SRVCC_STATE_NOTIFY: {
3496a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
3497a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville
3498f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu                mMetrics.writeRilSrvcc(mInstanceId, ((int[])ret)[0]);
34995054dfa7fd9b0520d30a102ed5a2107af11590c8Pavel Zhamaitsiak
3500a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                if (mSrvccStateRegistrants != null) {
3501a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                    mSrvccStateRegistrants
3502a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                            .notifyRegistrants(new AsyncResult(null, ret, null));
3503a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                }
3504a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                break;
3505a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville            }
3506a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville            case RIL_UNSOL_HARDWARE_CONFIG_CHANGED:
3507a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
3508a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville
3509a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                if (mHardwareConfigChangeRegistrants != null) {
3510a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                    mHardwareConfigChangeRegistrants.notifyRegistrants(
3511a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                                             new AsyncResult (null, ret, null));
3512a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                }
3513a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                break;
35142b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville            case RIL_UNSOL_RADIO_CAPABILITY:
35152b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
35162b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville
35172b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville                if (mPhoneRadioCapabilityChangedRegistrants != null) {
35182b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville                    mPhoneRadioCapabilityChangedRegistrants.notifyRegistrants(
35192b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville                            new AsyncResult(null, ret, null));
352009b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja                 }
352109b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja                 break;
352209b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja            case RIL_UNSOL_ON_SS:
352309b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja                if (RILJ_LOGD) unsljLogRet(response, ret);
352409b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja
352509b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja                if (mSsRegistrant != null) {
352609b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja                    mSsRegistrant.notifyRegistrant(
352709b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja                                        new AsyncResult (null, ret, null));
352809b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja                }
352909b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja                break;
353009b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja            case RIL_UNSOL_STK_CC_ALPHA_NOTIFY:
353109b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja                if (RILJ_LOGD) unsljLogRet(response, ret);
353209b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja
353309b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja                if (mCatCcAlphaRegistrant != null) {
353409b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja                    mCatCcAlphaRegistrant.notifyRegistrant(
353509b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja                                        new AsyncResult (null, ret, null));
35362b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville                }
35372b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville                break;
353865bee39d7e417fb898c3948696d5d8a38046c449fenglu            case RIL_UNSOL_LCEDATA_RECV:
353965bee39d7e417fb898c3948696d5d8a38046c449fenglu                if (RILJ_LOGD) unsljLogRet(response, ret);
354065bee39d7e417fb898c3948696d5d8a38046c449fenglu
354165bee39d7e417fb898c3948696d5d8a38046c449fenglu                if (mLceInfoRegistrant != null) {
354265bee39d7e417fb898c3948696d5d8a38046c449fenglu                    mLceInfoRegistrant.notifyRegistrant(new AsyncResult(null, ret, null));
354365bee39d7e417fb898c3948696d5d8a38046c449fenglu                }
354465bee39d7e417fb898c3948696d5d8a38046c449fenglu                break;
35454b4d80db8a8d447d3c1110831c2a821a2bd2a186Robert Greenwalt            case RIL_UNSOL_PCO_DATA:
35464b4d80db8a8d447d3c1110831c2a821a2bd2a186Robert Greenwalt                if (RILJ_LOGD) unsljLogRet(response, ret);
35474b4d80db8a8d447d3c1110831c2a821a2bd2a186Robert Greenwalt
35484b4d80db8a8d447d3c1110831c2a821a2bd2a186Robert Greenwalt                mPcoDataRegistrants.notifyRegistrants(new AsyncResult(null, ret, null));
35494b4d80db8a8d447d3c1110831c2a821a2bd2a186Robert Greenwalt                break;
35500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
35510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
35520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
35530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
35540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Notifiy all registrants that the ril has connected or disconnected.
35550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
35560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @param rilVer is the version of the ril or -1 if disconnected.
35570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
35580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private void notifyRegistrantsRilConnectionChanged(int rilVer) {
35590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mRilVersion = rilVer;
35600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (mRilConnectedRegistrants != null) {
35610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            mRilConnectedRegistrants.notifyRegistrants(
35620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                new AsyncResult (null, new Integer(rilVer), null));
35630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
35640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
35650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
35660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private Object
35670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    responseInts(Parcel p) {
35680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int numInts;
35690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int response[];
35700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
35710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        numInts = p.readInt();
35720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
35730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        response = new int[numInts];
35740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
35750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        for (int i = 0 ; i < numInts ; i++) {
35760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            response[i] = p.readInt();
35770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
35780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
35790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return response;
35800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
35810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
358233cfb500a7cf192adfc5ca06792fe3847073b6c1Chao Liu    private Object
358333cfb500a7cf192adfc5ca06792fe3847073b6c1Chao Liu    responseFailCause(Parcel p) {
358433cfb500a7cf192adfc5ca06792fe3847073b6c1Chao Liu        LastCallFailCause failCause = new LastCallFailCause();
358533cfb500a7cf192adfc5ca06792fe3847073b6c1Chao Liu        failCause.causeCode = p.readInt();
358633cfb500a7cf192adfc5ca06792fe3847073b6c1Chao Liu        if (p.dataAvail() > 0) {
358733cfb500a7cf192adfc5ca06792fe3847073b6c1Chao Liu          failCause.vendorCause = p.readString();
358833cfb500a7cf192adfc5ca06792fe3847073b6c1Chao Liu        }
358933cfb500a7cf192adfc5ca06792fe3847073b6c1Chao Liu        return failCause;
359033cfb500a7cf192adfc5ca06792fe3847073b6c1Chao Liu    }
35910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
35920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private Object
35930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    responseVoid(Parcel p) {
35940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return null;
35950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
35960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
35970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private Object
35980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    responseCallForward(Parcel p) {
35990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int numInfos;
36000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        CallForwardInfo infos[];
36010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
36020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        numInfos = p.readInt();
36030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
36040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        infos = new CallForwardInfo[numInfos];
36050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
36060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        for (int i = 0 ; i < numInfos ; i++) {
36070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            infos[i] = new CallForwardInfo();
36080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
36090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            infos[i].status = p.readInt();
36100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            infos[i].reason = p.readInt();
36110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            infos[i].serviceClass = p.readInt();
36120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            infos[i].toa = p.readInt();
36130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            infos[i].number = p.readString();
36140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            infos[i].timeSeconds = p.readInt();
36150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
36160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
36170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return infos;
36180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
36190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
36200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private Object
36210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    responseSuppServiceNotification(Parcel p) {
36220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        SuppServiceNotification notification = new SuppServiceNotification();
36230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
36240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        notification.notificationType = p.readInt();
36250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        notification.code = p.readInt();
36260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        notification.index = p.readInt();
36270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        notification.type = p.readInt();
36280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        notification.number = p.readString();
36290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
36300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return notification;
36310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
36320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
36330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private Object
36340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    responseCdmaSms(Parcel p) {
36350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        SmsMessage sms;
36360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        sms = SmsMessage.newFromParcel(p);
36370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
36380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return sms;
36390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
36400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
36410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private Object
36420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    responseString(Parcel p) {
36430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String response;
36440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
36450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        response = p.readString();
36460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
36470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return response;
36480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
36490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
36500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private Object
36510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    responseStrings(Parcel p) {
36520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int num;
36530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String response[];
36540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
36550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        response = p.readStringArray();
36560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
36570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return response;
36580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
36590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
36600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private Object
36610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    responseRaw(Parcel p) {
36620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int num;
36630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        byte response[];
36640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
36650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        response = p.createByteArray();
36660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
36670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return response;
36680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
36690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
36700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private Object
36710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    responseSMS(Parcel p) {
36720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int messageRef, errorCode;
36730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String ackPDU;
36740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
36750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        messageRef = p.readInt();
36760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        ackPDU = p.readString();
36770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        errorCode = p.readInt();
36780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
36790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        SmsResponse response = new SmsResponse(messageRef, ackPDU, errorCode);
36800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
36810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return response;
36820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
36830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
36840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
36850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private Object
36860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    responseICC_IO(Parcel p) {
36870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int sw1, sw2;
36880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        Message ret;
36890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
36900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        sw1 = p.readInt();
36910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        sw2 = p.readInt();
36920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
36930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String s = p.readString();
36940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
36950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGV) riljLog("< iccIO: "
36960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + " 0x" + Integer.toHexString(sw1)
36970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + " 0x" + Integer.toHexString(sw2) + " "
36980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + s);
36990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
37000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return new IccIoResult(sw1, sw2, s);
37010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
37020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
37030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private Object
3704cf916cfb2b4d8282def13e4553abff2ea73aca2bVinit Deshpande    responseICC_IOBase64(Parcel p) {
3705cf916cfb2b4d8282def13e4553abff2ea73aca2bVinit Deshpande        int sw1, sw2;
3706cf916cfb2b4d8282def13e4553abff2ea73aca2bVinit Deshpande        Message ret;
3707cf916cfb2b4d8282def13e4553abff2ea73aca2bVinit Deshpande
3708cf916cfb2b4d8282def13e4553abff2ea73aca2bVinit Deshpande        sw1 = p.readInt();
3709cf916cfb2b4d8282def13e4553abff2ea73aca2bVinit Deshpande        sw2 = p.readInt();
3710cf916cfb2b4d8282def13e4553abff2ea73aca2bVinit Deshpande
3711cf916cfb2b4d8282def13e4553abff2ea73aca2bVinit Deshpande        String s = p.readString();
3712cf916cfb2b4d8282def13e4553abff2ea73aca2bVinit Deshpande
3713cf916cfb2b4d8282def13e4553abff2ea73aca2bVinit Deshpande        if (RILJ_LOGV) riljLog("< iccIO: "
3714cf916cfb2b4d8282def13e4553abff2ea73aca2bVinit Deshpande                + " 0x" + Integer.toHexString(sw1)
3715cf916cfb2b4d8282def13e4553abff2ea73aca2bVinit Deshpande                + " 0x" + Integer.toHexString(sw2) + " "
3716cf916cfb2b4d8282def13e4553abff2ea73aca2bVinit Deshpande                + s);
3717cf916cfb2b4d8282def13e4553abff2ea73aca2bVinit Deshpande
371810ac1062bbbab073205855fef38f6a1afb241002Nathan Harold        return new IccIoResult(sw1, sw2, (s != null)
371910ac1062bbbab073205855fef38f6a1afb241002Nathan Harold                ? android.util.Base64.decode(s, android.util.Base64.DEFAULT) : (byte[]) null);
3720cf916cfb2b4d8282def13e4553abff2ea73aca2bVinit Deshpande    }
3721cf916cfb2b4d8282def13e4553abff2ea73aca2bVinit Deshpande
3722cf916cfb2b4d8282def13e4553abff2ea73aca2bVinit Deshpande    private Object
37230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    responseIccCardStatus(Parcel p) {
3724e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka        IccCardApplicationStatus appStatus;
3725e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka
3726e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka        IccCardStatus cardStatus = new IccCardStatus();
3727e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka        cardStatus.setCardState(p.readInt());
3728e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka        cardStatus.setUniversalPinState(p.readInt());
3729e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka        cardStatus.mGsmUmtsSubscriptionAppIndex = p.readInt();
3730e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka        cardStatus.mCdmaSubscriptionAppIndex = p.readInt();
3731e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka        cardStatus.mImsSubscriptionAppIndex = p.readInt();
37320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int numApplications = p.readInt();
37330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
37340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // limit to maximum allowed applications
37350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (numApplications > IccCardStatus.CARD_MAX_APPS) {
37360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            numApplications = IccCardStatus.CARD_MAX_APPS;
37370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
3738e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka        cardStatus.mApplications = new IccCardApplicationStatus[numApplications];
37390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        for (int i = 0 ; i < numApplications ; i++) {
3740e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka            appStatus = new IccCardApplicationStatus();
3741e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka            appStatus.app_type       = appStatus.AppTypeFromRILInt(p.readInt());
3742e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka            appStatus.app_state      = appStatus.AppStateFromRILInt(p.readInt());
3743e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka            appStatus.perso_substate = appStatus.PersoSubstateFromRILInt(p.readInt());
3744e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka            appStatus.aid            = p.readString();
3745e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka            appStatus.app_label      = p.readString();
3746e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka            appStatus.pin1_replaced  = p.readInt();
3747e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka            appStatus.pin1           = appStatus.PinStateFromRILInt(p.readInt());
3748e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka            appStatus.pin2           = appStatus.PinStateFromRILInt(p.readInt());
3749e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka            cardStatus.mApplications[i] = appStatus;
37500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
3751e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka        return cardStatus;
37520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
37530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
37540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private Object
37550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    responseSimRefresh(Parcel p) {
37560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        IccRefreshResponse response = new IccRefreshResponse();
37570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
37580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        response.refreshResult = p.readInt();
37590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        response.efId   = p.readInt();
37600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        response.aid = p.readString();
37610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return response;
37620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
37630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
37640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private Object
37650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    responseCallList(Parcel p) {
37660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int num;
37670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int voiceSettings;
37680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        ArrayList<DriverCall> response;
37690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        DriverCall dc;
37700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
37710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        num = p.readInt();
37720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        response = new ArrayList<DriverCall>(num);
37730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
37740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGV) {
37750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            riljLog("responseCallList: num=" + num +
37760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    " mEmergencyCallbackModeRegistrant=" + mEmergencyCallbackModeRegistrant +
37770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    " mTestingEmergencyCall=" + mTestingEmergencyCall.get());
37780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
37790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        for (int i = 0 ; i < num ; i++) {
37800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dc = new DriverCall();
37810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
37820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dc.state = DriverCall.stateFromCLCC(p.readInt());
37830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dc.index = p.readInt();
37840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dc.TOA = p.readInt();
37850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dc.isMpty = (0 != p.readInt());
37860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dc.isMT = (0 != p.readInt());
37870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dc.als = p.readInt();
37880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            voiceSettings = p.readInt();
37890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dc.isVoice = (0 == voiceSettings) ? false : true;
37900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dc.isVoicePrivacy = (0 != p.readInt());
37910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dc.number = p.readString();
37920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            int np = p.readInt();
37930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dc.numberPresentation = DriverCall.presentationFromCLIP(np);
37940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dc.name = p.readString();
3795004f70095ae49451757f89dfafce2b26294a5f32nfjb            // according to ril.h, namePresentation should be handled as numberPresentation;
3796004f70095ae49451757f89dfafce2b26294a5f32nfjb            dc.namePresentation = DriverCall.presentationFromCLIP(p.readInt());
37970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            int uusInfoPresent = p.readInt();
37980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (uusInfoPresent == 1) {
37990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                dc.uusInfo = new UUSInfo();
38000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                dc.uusInfo.setType(p.readInt());
38010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                dc.uusInfo.setDcs(p.readInt());
38020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                byte[] userData = p.createByteArray();
38030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                dc.uusInfo.setUserData(userData);
38040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                riljLogv(String.format("Incoming UUS : type=%d, dcs=%d, length=%d",
38050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                dc.uusInfo.getType(), dc.uusInfo.getDcs(),
38060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                dc.uusInfo.getUserData().length));
38070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                riljLogv("Incoming UUS : data (string)="
38080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        + new String(dc.uusInfo.getUserData()));
38090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                riljLogv("Incoming UUS : data (hex): "
38100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        + IccUtils.bytesToHexString(dc.uusInfo.getUserData()));
38110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            } else {
38120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                riljLogv("Incoming UUS : NOT present!");
38130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
38140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
38150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            // Make sure there's a leading + on addresses with a TOA of 145
38160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dc.number = PhoneNumberUtils.stringFromStringAndTOA(dc.number, dc.TOA);
38170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
38180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            response.add(dc);
38190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
38200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (dc.isVoicePrivacy) {
38210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                mVoicePrivacyOnRegistrants.notifyRegistrants();
38220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                riljLog("InCall VoicePrivacy is enabled");
38230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            } else {
38240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                mVoicePrivacyOffRegistrants.notifyRegistrants();
38250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                riljLog("InCall VoicePrivacy is disabled");
38260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
38270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
38280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
38290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        Collections.sort(response);
38300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
38310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if ((num == 0) && mTestingEmergencyCall.getAndSet(false)) {
38320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (mEmergencyCallbackModeRegistrant != null) {
38330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                riljLog("responseCallList: call ended, testing emergency call," +
38340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            " notify ECM Registrants");
38350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                mEmergencyCallbackModeRegistrant.notifyRegistrant();
38360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
38370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
38380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
38390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return response;
38400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
38410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3842ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville    private DataCallResponse getDataCallResponse(Parcel p, int version) {
3843ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville        DataCallResponse dataCall = new DataCallResponse();
38440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
38450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        dataCall.version = version;
38460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (version < 5) {
38470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dataCall.cid = p.readInt();
38480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dataCall.active = p.readInt();
38490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dataCall.type = p.readString();
38500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            String addresses = p.readString();
38510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (!TextUtils.isEmpty(addresses)) {
38520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                dataCall.addresses = addresses.split(" ");
38530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
38540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else {
38550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dataCall.status = p.readInt();
38560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dataCall.suggestedRetryTime = p.readInt();
38570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dataCall.cid = p.readInt();
38580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dataCall.active = p.readInt();
38590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dataCall.type = p.readString();
38600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dataCall.ifname = p.readString();
3861ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville            if ((dataCall.status == DcFailCause.NONE.getErrorCode()) &&
38620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    TextUtils.isEmpty(dataCall.ifname)) {
3863ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville              throw new RuntimeException("getDataCallResponse, no ifname");
38640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
38650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            String addresses = p.readString();
38660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (!TextUtils.isEmpty(addresses)) {
38670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                dataCall.addresses = addresses.split(" ");
38680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
38690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            String dnses = p.readString();
38700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (!TextUtils.isEmpty(dnses)) {
38710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                dataCall.dnses = dnses.split(" ");
38720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
38730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            String gateways = p.readString();
38740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (!TextUtils.isEmpty(gateways)) {
38750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                dataCall.gateways = gateways.split(" ");
38760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
38778f19c6d717bf0e00aeb33552a570a0f60af0ce3bAmit Mahajan            if (version >= 10) {
38788f19c6d717bf0e00aeb33552a570a0f60af0ce3bAmit Mahajan                String pcscf = p.readString();
38798f19c6d717bf0e00aeb33552a570a0f60af0ce3bAmit Mahajan                if (!TextUtils.isEmpty(pcscf)) {
38808f19c6d717bf0e00aeb33552a570a0f60af0ce3bAmit Mahajan                    dataCall.pcscf = pcscf.split(" ");
38818f19c6d717bf0e00aeb33552a570a0f60af0ce3bAmit Mahajan                }
3882a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville            }
3883e9701717e43cc5aacbcf624f77a53be92350662cw            if (version >= 11) {
3884e9701717e43cc5aacbcf624f77a53be92350662cw                dataCall.mtu = p.readInt();
3885e9701717e43cc5aacbcf624f77a53be92350662cw            }
38860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
38870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return dataCall;
38880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
38890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
38900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private Object
38910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    responseDataCallList(Parcel p) {
3892ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville        ArrayList<DataCallResponse> response;
38930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
38940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int ver = p.readInt();
38950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int num = p.readInt();
38960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        riljLog("responseDataCallList ver=" + ver + " num=" + num);
38970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3898ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville        response = new ArrayList<DataCallResponse>(num);
38990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        for (int i = 0; i < num; i++) {
3900ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville            response.add(getDataCallResponse(p, ver));
39010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
39020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
39035054dfa7fd9b0520d30a102ed5a2107af11590c8Pavel Zhamaitsiak
39040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return response;
39050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
39060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
39070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private Object
39080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    responseSetupDataCall(Parcel p) {
39090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int ver = p.readInt();
39100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int num = p.readInt();
39110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGV) riljLog("responseSetupDataCall ver=" + ver + " num=" + num);
39120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3913ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville        DataCallResponse dataCall;
39140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
39150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (ver < 5) {
3916ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville            dataCall = new DataCallResponse();
39170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dataCall.version = ver;
39180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dataCall.cid = Integer.parseInt(p.readString());
39190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dataCall.ifname = p.readString();
39200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (TextUtils.isEmpty(dataCall.ifname)) {
39210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                throw new RuntimeException(
39220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        "RIL_REQUEST_SETUP_DATA_CALL response, no ifname");
39230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
39240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            String addresses = p.readString();
39250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (!TextUtils.isEmpty(addresses)) {
39260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville              dataCall.addresses = addresses.split(" ");
39270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
39280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (num >= 4) {
39290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                String dnses = p.readString();
39300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) riljLog("responseSetupDataCall got dnses=" + dnses);
39310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (!TextUtils.isEmpty(dnses)) {
39320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    dataCall.dnses = dnses.split(" ");
39330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
39340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
39350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (num >= 5) {
39360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                String gateways = p.readString();
39370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) riljLog("responseSetupDataCall got gateways=" + gateways);
39380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (!TextUtils.isEmpty(gateways)) {
39390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    dataCall.gateways = gateways.split(" ");
39400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
39410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
3942a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville            if (num >= 6) {
3943a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                String pcscf = p.readString();
3944a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                if (RILJ_LOGD) riljLog("responseSetupDataCall got pcscf=" + pcscf);
3945a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                if (!TextUtils.isEmpty(pcscf)) {
3946a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                    dataCall.pcscf = pcscf.split(" ");
3947a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                }
3948a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville            }
39490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else {
39500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (num != 1) {
39510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                throw new RuntimeException(
39520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        "RIL_REQUEST_SETUP_DATA_CALL response expecting 1 RIL_Data_Call_response_v5"
39530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        + " got " + num);
39540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
3955ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville            dataCall = getDataCallResponse(p, ver);
39560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
39570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
39580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return dataCall;
39590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
39600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
39610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private Object
39620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    responseOperatorInfos(Parcel p) {
39630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String strings[] = (String [])responseStrings(p);
39640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        ArrayList<OperatorInfo> ret;
39650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
39660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (strings.length % 4 != 0) {
39670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            throw new RuntimeException(
39680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                "RIL_REQUEST_QUERY_AVAILABLE_NETWORKS: invalid response. Got "
39690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + strings.length + " strings, expected multible of 4");
39700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
39710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
39720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        ret = new ArrayList<OperatorInfo>(strings.length / 4);
39730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
39740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        for (int i = 0 ; i < strings.length ; i += 4) {
39750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            ret.add (
39760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                new OperatorInfo(
39774084e10843c7e643c13773b36be85fe59ea49992Sanket Padawe                    strings[i+0],
39780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    strings[i+1],
39790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    strings[i+2],
39800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    strings[i+3]));
39810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
39820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
39830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return ret;
39840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
39850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
39860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private Object
39870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    responseCellList(Parcel p) {
39880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville       int num, rssi;
39890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville       String location;
39900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville       ArrayList<NeighboringCellInfo> response;
39910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville       NeighboringCellInfo cell;
39920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
39930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville       num = p.readInt();
39940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville       response = new ArrayList<NeighboringCellInfo>();
39950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
39960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville       // Determine the radio access type
3997e70617d81dcd42350a737b11c25532e1d43df4ffLegler Wu       int[] subId = SubscriptionManager.getSubId(mInstanceId);
3998e70617d81dcd42350a737b11c25532e1d43df4ffLegler Wu       int radioType =
3999e70617d81dcd42350a737b11c25532e1d43df4ffLegler Wu               ((TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE)).
4000e70617d81dcd42350a737b11c25532e1d43df4ffLegler Wu               getDataNetworkType(subId[0]);
40010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
40020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville       // Interpret the location based on radio access type
40030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville       if (radioType != NETWORK_TYPE_UNKNOWN) {
40040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville           for (int i = 0 ; i < num ; i++) {
40050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville               rssi = p.readInt();
40060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville               location = p.readString();
40070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville               cell = new NeighboringCellInfo(rssi, location, radioType);
40080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville               response.add(cell);
40090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville           }
40100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville       }
40110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville       return response;
40120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
40130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
40140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private Object responseGetPreferredNetworkType(Parcel p) {
40150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville       int [] response = (int[]) responseInts(p);
40160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
40170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville       if (response.length >= 1) {
40180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville           // Since this is the response for getPreferredNetworkType
40190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville           // we'll assume that it should be the value we want the
40200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville           // vendor ril to take if we reestablish a connection to it.
40210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville           mPreferredNetworkType = response[0];
40220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville       }
40230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville       return response;
40240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
40250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
40260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private Object responseGmsBroadcastConfig(Parcel p) {
40270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int num;
40280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        ArrayList<SmsBroadcastConfigInfo> response;
40290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        SmsBroadcastConfigInfo info;
40300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
40310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        num = p.readInt();
40320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        response = new ArrayList<SmsBroadcastConfigInfo>(num);
40330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
40340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        for (int i = 0; i < num; i++) {
40350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            int fromId = p.readInt();
40360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            int toId = p.readInt();
40370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            int fromScheme = p.readInt();
40380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            int toScheme = p.readInt();
40390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            boolean selected = (p.readInt() == 1);
40400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
40410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            info = new SmsBroadcastConfigInfo(fromId, toId, fromScheme,
40420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    toScheme, selected);
40430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            response.add(info);
40440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
40450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return response;
40460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
40470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
40480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private Object
40490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    responseCdmaBroadcastConfig(Parcel p) {
40500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int numServiceCategories;
40510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int response[];
40520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
40530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        numServiceCategories = p.readInt();
40540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
40550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (numServiceCategories == 0) {
40560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            // TODO: The logic of providing default values should
40570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            // not be done by this transport layer. And needs to
40580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            // be done by the vendor ril or application logic.
40590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            int numInts;
40600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            numInts = CDMA_BROADCAST_SMS_NO_OF_SERVICE_CATEGORIES * CDMA_BSI_NO_OF_INTS_STRUCT + 1;
40610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            response = new int[numInts];
40620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
40630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            // Faking a default record for all possible records.
40640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            response[0] = CDMA_BROADCAST_SMS_NO_OF_SERVICE_CATEGORIES;
40650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
40660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            // Loop over CDMA_BROADCAST_SMS_NO_OF_SERVICE_CATEGORIES set 'english' as
40670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            // default language and selection status to false for all.
40680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            for (int i = 1; i < numInts; i += CDMA_BSI_NO_OF_INTS_STRUCT ) {
40690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                response[i + 0] = i / CDMA_BSI_NO_OF_INTS_STRUCT;
40700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                response[i + 1] = 1;
40710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                response[i + 2] = 0;
40720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
40730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else {
40740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            int numInts;
40750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            numInts = (numServiceCategories * CDMA_BSI_NO_OF_INTS_STRUCT) + 1;
40760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            response = new int[numInts];
40770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
40780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            response[0] = numServiceCategories;
40790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            for (int i = 1 ; i < numInts; i++) {
40800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                 response[i] = p.readInt();
40810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville             }
40820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
40830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
40840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return response;
40850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
40860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
40870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private Object
40880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    responseSignalStrength(Parcel p) {
4089e3366ce305cf679bed0270db09938567d0e4d6d2Wink Saville        // Assume this is gsm, but doesn't matter as ServiceStateTracker
4090e3366ce305cf679bed0270db09938567d0e4d6d2Wink Saville        // sets the proper value.
4091e3366ce305cf679bed0270db09938567d0e4d6d2Wink Saville        SignalStrength signalStrength = SignalStrength.makeSignalStrengthFromRilParcel(p);
40925b81adc82a53b3064f4baa3acfeabef31586588aUma Maheswari Ramalingam        return signalStrength;
40930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
40940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
40950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private ArrayList<CdmaInformationRecords>
40960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    responseCdmaInformationRecord(Parcel p) {
40970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int numberOfInfoRecs;
40980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        ArrayList<CdmaInformationRecords> response;
40990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
41000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        /**
41010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville         * Loop through all of the information records unmarshalling them
41020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville         * and converting them to Java Objects.
41030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville         */
41040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        numberOfInfoRecs = p.readInt();
41050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        response = new ArrayList<CdmaInformationRecords>(numberOfInfoRecs);
41060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
41070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        for (int i = 0; i < numberOfInfoRecs; i++) {
41080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            CdmaInformationRecords InfoRec = new CdmaInformationRecords(p);
41090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            response.add(InfoRec);
41100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
41110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
41120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return response;
41130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
41140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
41150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private Object
41160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    responseCdmaCallWaiting(Parcel p) {
41170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        CdmaCallWaitingNotification notification = new CdmaCallWaitingNotification();
41180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
41190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        notification.number = p.readString();
4120cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville        notification.numberPresentation =
4121cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville                CdmaCallWaitingNotification.presentationFromCLIP(p.readInt());
41220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        notification.name = p.readString();
41230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        notification.namePresentation = notification.numberPresentation;
41240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        notification.isPresent = p.readInt();
41250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        notification.signalType = p.readInt();
41260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        notification.alertPitch = p.readInt();
41270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        notification.signal = p.readInt();
41280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        notification.numberType = p.readInt();
41290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        notification.numberPlan = p.readInt();
41300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
41310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return notification;
41320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
41330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
41340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private Object
41350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    responseCallRing(Parcel p){
41360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        char response[] = new char[4];
41370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
41380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        response[0] = (char) p.readInt();    // isPresent
41390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        response[1] = (char) p.readInt();    // signalType
41400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        response[2] = (char) p.readInt();    // alertPitch
41410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        response[3] = (char) p.readInt();    // signal
41420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4143f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu        mMetrics.writeRilCallRing(mInstanceId, response);
41445054dfa7fd9b0520d30a102ed5a2107af11590c8Pavel Zhamaitsiak
41450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return response;
41460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
41470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
41480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private void
41490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    notifyRegistrantsCdmaInfoRec(CdmaInformationRecords infoRec) {
41500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int response = RIL_UNSOL_CDMA_INFO_REC;
41510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (infoRec.record instanceof CdmaInformationRecords.CdmaDisplayInfoRec) {
41520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (mDisplayInfoRegistrants != null) {
41530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogRet(response, infoRec.record);
41540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                mDisplayInfoRegistrants.notifyRegistrants(
41550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        new AsyncResult (null, infoRec.record, null));
41560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
41570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else if (infoRec.record instanceof CdmaInformationRecords.CdmaSignalInfoRec) {
41580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (mSignalInfoRegistrants != null) {
41590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogRet(response, infoRec.record);
41600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                mSignalInfoRegistrants.notifyRegistrants(
41610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        new AsyncResult (null, infoRec.record, null));
41620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
41630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else if (infoRec.record instanceof CdmaInformationRecords.CdmaNumberInfoRec) {
41640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (mNumberInfoRegistrants != null) {
41650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogRet(response, infoRec.record);
41660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                mNumberInfoRegistrants.notifyRegistrants(
41670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        new AsyncResult (null, infoRec.record, null));
41680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
41690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else if (infoRec.record instanceof CdmaInformationRecords.CdmaRedirectingNumberInfoRec) {
41700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (mRedirNumInfoRegistrants != null) {
41710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogRet(response, infoRec.record);
41720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                mRedirNumInfoRegistrants.notifyRegistrants(
41730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        new AsyncResult (null, infoRec.record, null));
41740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
41750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else if (infoRec.record instanceof CdmaInformationRecords.CdmaLineControlInfoRec) {
41760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (mLineControlInfoRegistrants != null) {
41770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogRet(response, infoRec.record);
41780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                mLineControlInfoRegistrants.notifyRegistrants(
41790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        new AsyncResult (null, infoRec.record, null));
41800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
41810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else if (infoRec.record instanceof CdmaInformationRecords.CdmaT53ClirInfoRec) {
41820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (mT53ClirInfoRegistrants != null) {
41830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogRet(response, infoRec.record);
41840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                mT53ClirInfoRegistrants.notifyRegistrants(
41850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        new AsyncResult (null, infoRec.record, null));
41860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
41870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else if (infoRec.record instanceof CdmaInformationRecords.CdmaT53AudioControlInfoRec) {
41880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (mT53AudCntrlInfoRegistrants != null) {
41890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville               if (RILJ_LOGD) unsljLogRet(response, infoRec.record);
41900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville               mT53AudCntrlInfoRegistrants.notifyRegistrants(
41910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                       new AsyncResult (null, infoRec.record, null));
41920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
41930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
41940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
41950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
41965fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville    private ArrayList<CellInfo> responseCellInfoList(Parcel p) {
41975fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville        int numberOfInfoRecs;
41985fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville        ArrayList<CellInfo> response;
41995fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville
42005fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville        /**
42015fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville         * Loop through all of the information records unmarshalling them
42025fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville         * and converting them to Java Objects.
42035fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville         */
42045fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville        numberOfInfoRecs = p.readInt();
42055fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville        response = new ArrayList<CellInfo>(numberOfInfoRecs);
42065fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville
42075fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville        for (int i = 0; i < numberOfInfoRecs; i++) {
42085fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville            CellInfo InfoRec = CellInfo.CREATOR.createFromParcel(p);
42095fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville            response.add(InfoRec);
42105fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville        }
42115fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville
42125fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville        return response;
42135fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville    }
42145fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville
4215a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville   private Object
4216a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville   responseHardwareConfig(Parcel p) {
4217a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville      int num;
4218a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville      ArrayList<HardwareConfig> response;
4219a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville      HardwareConfig hw;
4220a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville
4221a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville      num = p.readInt();
4222a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville      response = new ArrayList<HardwareConfig>(num);
4223a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville
4224a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville      if (RILJ_LOGV) {
4225a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville         riljLog("responseHardwareConfig: num=" + num);
4226a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville      }
4227a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville      for (int i = 0 ; i < num ; i++) {
4228a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville         int type = p.readInt();
4229a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville         switch(type) {
4230a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville            case HardwareConfig.DEV_HARDWARE_TYPE_MODEM: {
4231a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville               hw = new HardwareConfig(type);
4232a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville               hw.assignModem(p.readString(), p.readInt(), p.readInt(),
4233a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                  p.readInt(), p.readInt(), p.readInt(), p.readInt());
4234a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville               break;
4235a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville            }
4236a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville            case HardwareConfig.DEV_HARDWARE_TYPE_SIM: {
4237a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville               hw = new HardwareConfig(type);
4238a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville               hw.assignSim(p.readString(), p.readInt(), p.readString());
4239a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville               break;
4240a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville            }
4241a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville            default: {
4242a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville               throw new RuntimeException(
4243a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                  "RIL_REQUEST_GET_HARDWARE_CONFIG invalid hardward type:" + type);
4244a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville            }
4245a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville         }
4246a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville
4247a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville         response.add(hw);
4248a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville      }
4249a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville
4250a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville      return response;
4251a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville   }
4252a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville
42532b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville    private Object
42542b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville    responseRadioCapability(Parcel p) {
42552b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville        int version = p.readInt();
42562b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville        int session = p.readInt();
42572b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville        int phase = p.readInt();
42582b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville        int rat = p.readInt();
42592b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville        String logicModemUuid = p.readString();
42602b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville        int status = p.readInt();
42612b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville
42622b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville        riljLog("responseRadioCapability: version= " + version +
42632b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville                ", session=" + session +
42642b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville                ", phase=" + phase +
42652b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville                ", rat=" + rat +
42662b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville                ", logicModemUuid=" + logicModemUuid +
42672b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville                ", status=" + status);
42682b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville        RadioCapability rc = new RadioCapability(
42692b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville                mInstanceId.intValue(), session, phase, rat, logicModemUuid, status);
42702b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville        return rc;
42712b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville    }
42722b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville
427365bee39d7e417fb898c3948696d5d8a38046c449fenglu    private Object responseLceData(Parcel p) {
427465bee39d7e417fb898c3948696d5d8a38046c449fenglu        final ArrayList<Integer> capacityResponse = new ArrayList<Integer>();
4275186c297bf39700f4e6b9781a8cbdbe6b23db3768fenglu        final int capacityDownKbps = p.readInt();
427665bee39d7e417fb898c3948696d5d8a38046c449fenglu        final int confidenceLevel = p.readByte();
427765bee39d7e417fb898c3948696d5d8a38046c449fenglu        final int lceSuspended = p.readByte();
427865bee39d7e417fb898c3948696d5d8a38046c449fenglu
427965bee39d7e417fb898c3948696d5d8a38046c449fenglu        riljLog("LCE capacity information received:" +
4280186c297bf39700f4e6b9781a8cbdbe6b23db3768fenglu                " capacity=" + capacityDownKbps +
428165bee39d7e417fb898c3948696d5d8a38046c449fenglu                " confidence=" + confidenceLevel +
428265bee39d7e417fb898c3948696d5d8a38046c449fenglu                " lceSuspended=" + lceSuspended);
428365bee39d7e417fb898c3948696d5d8a38046c449fenglu
4284186c297bf39700f4e6b9781a8cbdbe6b23db3768fenglu        capacityResponse.add(capacityDownKbps);
428565bee39d7e417fb898c3948696d5d8a38046c449fenglu        capacityResponse.add(confidenceLevel);
428665bee39d7e417fb898c3948696d5d8a38046c449fenglu        capacityResponse.add(lceSuspended);
428765bee39d7e417fb898c3948696d5d8a38046c449fenglu        return capacityResponse;
428865bee39d7e417fb898c3948696d5d8a38046c449fenglu    }
428965bee39d7e417fb898c3948696d5d8a38046c449fenglu
429065bee39d7e417fb898c3948696d5d8a38046c449fenglu    private Object responseLceStatus(Parcel p) {
429165bee39d7e417fb898c3948696d5d8a38046c449fenglu        final ArrayList<Integer> statusResponse = new ArrayList<Integer>();
429265bee39d7e417fb898c3948696d5d8a38046c449fenglu        final int lceStatus = (int)p.readByte();
429365bee39d7e417fb898c3948696d5d8a38046c449fenglu        final int actualInterval = p.readInt();
429465bee39d7e417fb898c3948696d5d8a38046c449fenglu
429565bee39d7e417fb898c3948696d5d8a38046c449fenglu        riljLog("LCE status information received:" +
429665bee39d7e417fb898c3948696d5d8a38046c449fenglu                " lceStatus=" + lceStatus +
429765bee39d7e417fb898c3948696d5d8a38046c449fenglu                " actualInterval=" + actualInterval);
429865bee39d7e417fb898c3948696d5d8a38046c449fenglu        statusResponse.add(lceStatus);
429965bee39d7e417fb898c3948696d5d8a38046c449fenglu        statusResponse.add(actualInterval);
430065bee39d7e417fb898c3948696d5d8a38046c449fenglu        return statusResponse;
430165bee39d7e417fb898c3948696d5d8a38046c449fenglu    }
430265bee39d7e417fb898c3948696d5d8a38046c449fenglu
430327eef341b171f925ef43dd088cc559280fd7d2b9Prerepa Viswanadham    private Object responseActivityData(Parcel p) {
430427eef341b171f925ef43dd088cc559280fd7d2b9Prerepa Viswanadham        final int sleepModeTimeMs = p.readInt();
430527eef341b171f925ef43dd088cc559280fd7d2b9Prerepa Viswanadham        final int idleModeTimeMs = p.readInt();
430627eef341b171f925ef43dd088cc559280fd7d2b9Prerepa Viswanadham        int [] txModeTimeMs = new int[ModemActivityInfo.TX_POWER_LEVELS];
430727eef341b171f925ef43dd088cc559280fd7d2b9Prerepa Viswanadham        for (int i = 0; i < ModemActivityInfo.TX_POWER_LEVELS; i++) {
430827eef341b171f925ef43dd088cc559280fd7d2b9Prerepa Viswanadham            txModeTimeMs[i] = p.readInt();
430927eef341b171f925ef43dd088cc559280fd7d2b9Prerepa Viswanadham        }
431027eef341b171f925ef43dd088cc559280fd7d2b9Prerepa Viswanadham        final int rxModeTimeMs = p.readInt();
431127eef341b171f925ef43dd088cc559280fd7d2b9Prerepa Viswanadham
431227eef341b171f925ef43dd088cc559280fd7d2b9Prerepa Viswanadham        riljLog("Modem activity info received:" +
431327eef341b171f925ef43dd088cc559280fd7d2b9Prerepa Viswanadham                " sleepModeTimeMs=" + sleepModeTimeMs +
431427eef341b171f925ef43dd088cc559280fd7d2b9Prerepa Viswanadham                " idleModeTimeMs=" + idleModeTimeMs +
431527eef341b171f925ef43dd088cc559280fd7d2b9Prerepa Viswanadham                " txModeTimeMs[]=" + Arrays.toString(txModeTimeMs) +
431627eef341b171f925ef43dd088cc559280fd7d2b9Prerepa Viswanadham                " rxModeTimeMs=" + rxModeTimeMs);
431727eef341b171f925ef43dd088cc559280fd7d2b9Prerepa Viswanadham
431827eef341b171f925ef43dd088cc559280fd7d2b9Prerepa Viswanadham        return new ModemActivityInfo(SystemClock.elapsedRealtime(), sleepModeTimeMs,
431927eef341b171f925ef43dd088cc559280fd7d2b9Prerepa Viswanadham                        idleModeTimeMs, txModeTimeMs, rxModeTimeMs, 0);
432027eef341b171f925ef43dd088cc559280fd7d2b9Prerepa Viswanadham    }
432127eef341b171f925ef43dd088cc559280fd7d2b9Prerepa Viswanadham
432240659286ac42ec77bbe7893830bd50c06f393ee8Meng Wang    private Object responseCarrierIdentifiers(Parcel p) {
432340659286ac42ec77bbe7893830bd50c06f393ee8Meng Wang        List<CarrierIdentifier> retVal = new ArrayList<CarrierIdentifier>();
432440659286ac42ec77bbe7893830bd50c06f393ee8Meng Wang        int len_allowed_carriers = p.readInt();
432540659286ac42ec77bbe7893830bd50c06f393ee8Meng Wang        int len_excluded_carriers = p.readInt();
432640659286ac42ec77bbe7893830bd50c06f393ee8Meng Wang        for (int i = 0; i < len_allowed_carriers; i++) {
432740659286ac42ec77bbe7893830bd50c06f393ee8Meng Wang            String mcc = p.readString();
432840659286ac42ec77bbe7893830bd50c06f393ee8Meng Wang            String mnc = p.readString();
432940659286ac42ec77bbe7893830bd50c06f393ee8Meng Wang            String spn = null, imsi = null, gid1 = null, gid2 = null;
433040659286ac42ec77bbe7893830bd50c06f393ee8Meng Wang            int matchType = p.readInt();
433140659286ac42ec77bbe7893830bd50c06f393ee8Meng Wang            String matchData = p.readString();
433240659286ac42ec77bbe7893830bd50c06f393ee8Meng Wang            if (matchType == CarrierIdentifier.MatchType.SPN) {
433340659286ac42ec77bbe7893830bd50c06f393ee8Meng Wang                spn = matchData;
433440659286ac42ec77bbe7893830bd50c06f393ee8Meng Wang            } else if (matchType == CarrierIdentifier.MatchType.IMSI_PREFIX) {
433540659286ac42ec77bbe7893830bd50c06f393ee8Meng Wang                imsi = matchData;
433640659286ac42ec77bbe7893830bd50c06f393ee8Meng Wang            } else if (matchType == CarrierIdentifier.MatchType.GID1) {
433740659286ac42ec77bbe7893830bd50c06f393ee8Meng Wang                gid1 = matchData;
433840659286ac42ec77bbe7893830bd50c06f393ee8Meng Wang            } else if (matchType == CarrierIdentifier.MatchType.GID2) {
433940659286ac42ec77bbe7893830bd50c06f393ee8Meng Wang                gid2 = matchData;
434040659286ac42ec77bbe7893830bd50c06f393ee8Meng Wang            }
434140659286ac42ec77bbe7893830bd50c06f393ee8Meng Wang            retVal.add(new CarrierIdentifier(mcc, mnc, spn, imsi, gid1, gid2));
434240659286ac42ec77bbe7893830bd50c06f393ee8Meng Wang        }
434340659286ac42ec77bbe7893830bd50c06f393ee8Meng Wang        /* TODO: Handle excluded carriers */
434440659286ac42ec77bbe7893830bd50c06f393ee8Meng Wang        return retVal;
434540659286ac42ec77bbe7893830bd50c06f393ee8Meng Wang    }
434640659286ac42ec77bbe7893830bd50c06f393ee8Meng Wang
43474b4d80db8a8d447d3c1110831c2a821a2bd2a186Robert Greenwalt    private Object responsePcoData(Parcel p) {
43484b4d80db8a8d447d3c1110831c2a821a2bd2a186Robert Greenwalt        return new PcoData(p);
43494b4d80db8a8d447d3c1110831c2a821a2bd2a186Robert Greenwalt    }
43504b4d80db8a8d447d3c1110831c2a821a2bd2a186Robert Greenwalt
43514b4d80db8a8d447d3c1110831c2a821a2bd2a186Robert Greenwalt
43520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    static String
43530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    requestToString(int request) {
43540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville/*
43550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville cat libs/telephony/ril_commands.h \
43560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville | egrep "^ *{RIL_" \
43570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville | sed -re 's/\{RIL_([^,]+),[^,]+,([^}]+).+/case RIL_\1: return "\1";/'
43580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville*/
43590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        switch(request) {
43600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GET_SIM_STATUS: return "GET_SIM_STATUS";
43610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_ENTER_SIM_PIN: return "ENTER_SIM_PIN";
43620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_ENTER_SIM_PUK: return "ENTER_SIM_PUK";
43630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_ENTER_SIM_PIN2: return "ENTER_SIM_PIN2";
43640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_ENTER_SIM_PUK2: return "ENTER_SIM_PUK2";
43650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CHANGE_SIM_PIN: return "CHANGE_SIM_PIN";
43660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CHANGE_SIM_PIN2: return "CHANGE_SIM_PIN2";
43670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_ENTER_NETWORK_DEPERSONALIZATION: return "ENTER_NETWORK_DEPERSONALIZATION";
43680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GET_CURRENT_CALLS: return "GET_CURRENT_CALLS";
43690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_DIAL: return "DIAL";
43700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GET_IMSI: return "GET_IMSI";
43710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_HANGUP: return "HANGUP";
43720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_HANGUP_WAITING_OR_BACKGROUND: return "HANGUP_WAITING_OR_BACKGROUND";
43730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_HANGUP_FOREGROUND_RESUME_BACKGROUND: return "HANGUP_FOREGROUND_RESUME_BACKGROUND";
43740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SWITCH_WAITING_OR_HOLDING_AND_ACTIVE: return "REQUEST_SWITCH_WAITING_OR_HOLDING_AND_ACTIVE";
43750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CONFERENCE: return "CONFERENCE";
43760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_UDUB: return "UDUB";
43770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_LAST_CALL_FAIL_CAUSE: return "LAST_CALL_FAIL_CAUSE";
43780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SIGNAL_STRENGTH: return "SIGNAL_STRENGTH";
43790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_VOICE_REGISTRATION_STATE: return "VOICE_REGISTRATION_STATE";
43800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_DATA_REGISTRATION_STATE: return "DATA_REGISTRATION_STATE";
43810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_OPERATOR: return "OPERATOR";
43820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_RADIO_POWER: return "RADIO_POWER";
43830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_DTMF: return "DTMF";
43840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SEND_SMS: return "SEND_SMS";
43850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SEND_SMS_EXPECT_MORE: return "SEND_SMS_EXPECT_MORE";
43860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SETUP_DATA_CALL: return "SETUP_DATA_CALL";
43870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SIM_IO: return "SIM_IO";
43880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SEND_USSD: return "SEND_USSD";
43890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CANCEL_USSD: return "CANCEL_USSD";
43900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GET_CLIR: return "GET_CLIR";
43910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_CLIR: return "SET_CLIR";
43920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_QUERY_CALL_FORWARD_STATUS: return "QUERY_CALL_FORWARD_STATUS";
43930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_CALL_FORWARD: return "SET_CALL_FORWARD";
43940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_QUERY_CALL_WAITING: return "QUERY_CALL_WAITING";
43950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_CALL_WAITING: return "SET_CALL_WAITING";
43960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SMS_ACKNOWLEDGE: return "SMS_ACKNOWLEDGE";
43970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GET_IMEI: return "GET_IMEI";
43980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GET_IMEISV: return "GET_IMEISV";
43990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_ANSWER: return "ANSWER";
44000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_DEACTIVATE_DATA_CALL: return "DEACTIVATE_DATA_CALL";
44010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_QUERY_FACILITY_LOCK: return "QUERY_FACILITY_LOCK";
44020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_FACILITY_LOCK: return "SET_FACILITY_LOCK";
44030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CHANGE_BARRING_PASSWORD: return "CHANGE_BARRING_PASSWORD";
44040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_QUERY_NETWORK_SELECTION_MODE: return "QUERY_NETWORK_SELECTION_MODE";
44050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_NETWORK_SELECTION_AUTOMATIC: return "SET_NETWORK_SELECTION_AUTOMATIC";
44060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_NETWORK_SELECTION_MANUAL: return "SET_NETWORK_SELECTION_MANUAL";
44070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_QUERY_AVAILABLE_NETWORKS : return "QUERY_AVAILABLE_NETWORKS ";
44080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_DTMF_START: return "DTMF_START";
44090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_DTMF_STOP: return "DTMF_STOP";
44100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_BASEBAND_VERSION: return "BASEBAND_VERSION";
44110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SEPARATE_CONNECTION: return "SEPARATE_CONNECTION";
44120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_MUTE: return "SET_MUTE";
44130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GET_MUTE: return "GET_MUTE";
44140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_QUERY_CLIP: return "QUERY_CLIP";
44150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_LAST_DATA_CALL_FAIL_CAUSE: return "LAST_DATA_CALL_FAIL_CAUSE";
44160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_DATA_CALL_LIST: return "DATA_CALL_LIST";
44170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_RESET_RADIO: return "RESET_RADIO";
44180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_OEM_HOOK_RAW: return "OEM_HOOK_RAW";
44190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_OEM_HOOK_STRINGS: return "OEM_HOOK_STRINGS";
44200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SCREEN_STATE: return "SCREEN_STATE";
44210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_SUPP_SVC_NOTIFICATION: return "SET_SUPP_SVC_NOTIFICATION";
44220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_WRITE_SMS_TO_SIM: return "WRITE_SMS_TO_SIM";
44230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_DELETE_SMS_ON_SIM: return "DELETE_SMS_ON_SIM";
44240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_BAND_MODE: return "SET_BAND_MODE";
44250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_QUERY_AVAILABLE_BAND_MODE: return "QUERY_AVAILABLE_BAND_MODE";
44260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_STK_GET_PROFILE: return "REQUEST_STK_GET_PROFILE";
44270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_STK_SET_PROFILE: return "REQUEST_STK_SET_PROFILE";
44280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_STK_SEND_ENVELOPE_COMMAND: return "REQUEST_STK_SEND_ENVELOPE_COMMAND";
44290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_STK_SEND_TERMINAL_RESPONSE: return "REQUEST_STK_SEND_TERMINAL_RESPONSE";
44300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_STK_HANDLE_CALL_SETUP_REQUESTED_FROM_SIM: return "REQUEST_STK_HANDLE_CALL_SETUP_REQUESTED_FROM_SIM";
44310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_EXPLICIT_CALL_TRANSFER: return "REQUEST_EXPLICIT_CALL_TRANSFER";
44320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE: return "REQUEST_SET_PREFERRED_NETWORK_TYPE";
44330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GET_PREFERRED_NETWORK_TYPE: return "REQUEST_GET_PREFERRED_NETWORK_TYPE";
44340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GET_NEIGHBORING_CELL_IDS: return "REQUEST_GET_NEIGHBORING_CELL_IDS";
44350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_LOCATION_UPDATES: return "REQUEST_SET_LOCATION_UPDATES";
44360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_SET_SUBSCRIPTION_SOURCE: return "RIL_REQUEST_CDMA_SET_SUBSCRIPTION_SOURCE";
44370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_SET_ROAMING_PREFERENCE: return "RIL_REQUEST_CDMA_SET_ROAMING_PREFERENCE";
44380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_QUERY_ROAMING_PREFERENCE: return "RIL_REQUEST_CDMA_QUERY_ROAMING_PREFERENCE";
44390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_TTY_MODE: return "RIL_REQUEST_SET_TTY_MODE";
44400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_QUERY_TTY_MODE: return "RIL_REQUEST_QUERY_TTY_MODE";
44410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_SET_PREFERRED_VOICE_PRIVACY_MODE: return "RIL_REQUEST_CDMA_SET_PREFERRED_VOICE_PRIVACY_MODE";
44420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_QUERY_PREFERRED_VOICE_PRIVACY_MODE: return "RIL_REQUEST_CDMA_QUERY_PREFERRED_VOICE_PRIVACY_MODE";
44430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_FLASH: return "RIL_REQUEST_CDMA_FLASH";
44440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_BURST_DTMF: return "RIL_REQUEST_CDMA_BURST_DTMF";
44450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_SEND_SMS: return "RIL_REQUEST_CDMA_SEND_SMS";
44460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_SMS_ACKNOWLEDGE: return "RIL_REQUEST_CDMA_SMS_ACKNOWLEDGE";
44470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GSM_GET_BROADCAST_CONFIG: return "RIL_REQUEST_GSM_GET_BROADCAST_CONFIG";
44480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GSM_SET_BROADCAST_CONFIG: return "RIL_REQUEST_GSM_SET_BROADCAST_CONFIG";
44490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_GET_BROADCAST_CONFIG: return "RIL_REQUEST_CDMA_GET_BROADCAST_CONFIG";
44500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_SET_BROADCAST_CONFIG: return "RIL_REQUEST_CDMA_SET_BROADCAST_CONFIG";
44510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GSM_BROADCAST_ACTIVATION: return "RIL_REQUEST_GSM_BROADCAST_ACTIVATION";
44520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_VALIDATE_AND_WRITE_AKEY: return "RIL_REQUEST_CDMA_VALIDATE_AND_WRITE_AKEY";
44530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_BROADCAST_ACTIVATION: return "RIL_REQUEST_CDMA_BROADCAST_ACTIVATION";
44540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_SUBSCRIPTION: return "RIL_REQUEST_CDMA_SUBSCRIPTION";
44550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_WRITE_SMS_TO_RUIM: return "RIL_REQUEST_CDMA_WRITE_SMS_TO_RUIM";
44560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_DELETE_SMS_ON_RUIM: return "RIL_REQUEST_CDMA_DELETE_SMS_ON_RUIM";
44570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_DEVICE_IDENTITY: return "RIL_REQUEST_DEVICE_IDENTITY";
44580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GET_SMSC_ADDRESS: return "RIL_REQUEST_GET_SMSC_ADDRESS";
44590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_SMSC_ADDRESS: return "RIL_REQUEST_SET_SMSC_ADDRESS";
44600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_EXIT_EMERGENCY_CALLBACK_MODE: return "REQUEST_EXIT_EMERGENCY_CALLBACK_MODE";
44610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_REPORT_SMS_MEMORY_STATUS: return "RIL_REQUEST_REPORT_SMS_MEMORY_STATUS";
44620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_REPORT_STK_SERVICE_IS_RUNNING: return "RIL_REQUEST_REPORT_STK_SERVICE_IS_RUNNING";
44630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_GET_SUBSCRIPTION_SOURCE: return "RIL_REQUEST_CDMA_GET_SUBSCRIPTION_SOURCE";
44640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_ISIM_AUTHENTICATION: return "RIL_REQUEST_ISIM_AUTHENTICATION";
44650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_ACKNOWLEDGE_INCOMING_GSM_SMS_WITH_PDU: return "RIL_REQUEST_ACKNOWLEDGE_INCOMING_GSM_SMS_WITH_PDU";
44660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_STK_SEND_ENVELOPE_WITH_STATUS: return "RIL_REQUEST_STK_SEND_ENVELOPE_WITH_STATUS";
44670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_VOICE_RADIO_TECH: return "RIL_REQUEST_VOICE_RADIO_TECH";
44685fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville            case RIL_REQUEST_GET_CELL_INFO_LIST: return "RIL_REQUEST_GET_CELL_INFO_LIST";
44695fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville            case RIL_REQUEST_SET_UNSOL_CELL_INFO_LIST_RATE: return "RIL_REQUEST_SET_CELL_INFO_LIST_RATE";
44705d5eea6ed231163c225144316b0d1913d48678a4Sungmin Choi            case RIL_REQUEST_SET_INITIAL_ATTACH_APN: return "RIL_REQUEST_SET_INITIAL_ATTACH_APN";
44719d4ec7d45061f1da05f16cd244eb0a798e7f36bbAmit Mahajan            case RIL_REQUEST_SET_DATA_PROFILE: return "RIL_REQUEST_SET_DATA_PROFILE";
44721260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa            case RIL_REQUEST_IMS_REGISTRATION_STATE: return "RIL_REQUEST_IMS_REGISTRATION_STATE";
44731260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa            case RIL_REQUEST_IMS_SEND_SMS: return "RIL_REQUEST_IMS_SEND_SMS";
447440d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal            case RIL_REQUEST_SIM_TRANSMIT_APDU_BASIC: return "RIL_REQUEST_SIM_TRANSMIT_APDU_BASIC";
447540d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal            case RIL_REQUEST_SIM_OPEN_CHANNEL: return "RIL_REQUEST_SIM_OPEN_CHANNEL";
447640d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal            case RIL_REQUEST_SIM_CLOSE_CHANNEL: return "RIL_REQUEST_SIM_CLOSE_CHANNEL";
447740d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal            case RIL_REQUEST_SIM_TRANSMIT_APDU_CHANNEL: return "RIL_REQUEST_SIM_TRANSMIT_APDU_CHANNEL";
4478f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby            case RIL_REQUEST_NV_READ_ITEM: return "RIL_REQUEST_NV_READ_ITEM";
4479f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby            case RIL_REQUEST_NV_WRITE_ITEM: return "RIL_REQUEST_NV_WRITE_ITEM";
4480f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby            case RIL_REQUEST_NV_WRITE_CDMA_PRL: return "RIL_REQUEST_NV_WRITE_CDMA_PRL";
4481f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby            case RIL_REQUEST_NV_RESET_CONFIG: return "RIL_REQUEST_NV_RESET_CONFIG";
4482a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville            case RIL_REQUEST_SET_UICC_SUBSCRIPTION: return "RIL_REQUEST_SET_UICC_SUBSCRIPTION";
4483a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville            case RIL_REQUEST_ALLOW_DATA: return "RIL_REQUEST_ALLOW_DATA";
4484a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville            case RIL_REQUEST_GET_HARDWARE_CONFIG: return "GET_HARDWARE_CONFIG";
44852fbca951019df69146cf472adadc05c5c2ef4a32Amit Mahajan            case RIL_REQUEST_SIM_AUTHENTICATION: return "RIL_REQUEST_SIM_AUTHENTICATION";
448603586878fb3d870373f2fdf65afb81cc5ae97067Naveen Kalla            case RIL_REQUEST_SHUTDOWN: return "RIL_REQUEST_SHUTDOWN";
44872b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville            case RIL_REQUEST_SET_RADIO_CAPABILITY:
44882b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville                    return "RIL_REQUEST_SET_RADIO_CAPABILITY";
44892b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville            case RIL_REQUEST_GET_RADIO_CAPABILITY:
44902b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville                    return "RIL_REQUEST_GET_RADIO_CAPABILITY";
449165bee39d7e417fb898c3948696d5d8a38046c449fenglu            case RIL_REQUEST_START_LCE: return "RIL_REQUEST_START_LCE";
449265bee39d7e417fb898c3948696d5d8a38046c449fenglu            case RIL_REQUEST_STOP_LCE: return "RIL_REQUEST_STOP_LCE";
449365bee39d7e417fb898c3948696d5d8a38046c449fenglu            case RIL_REQUEST_PULL_LCEDATA: return "RIL_REQUEST_PULL_LCEDATA";
449427eef341b171f925ef43dd088cc559280fd7d2b9Prerepa Viswanadham            case RIL_REQUEST_GET_ACTIVITY_INFO: return "RIL_REQUEST_GET_ACTIVITY_INFO";
449540659286ac42ec77bbe7893830bd50c06f393ee8Meng Wang            case RIL_REQUEST_SET_ALLOWED_CARRIERS: return "RIL_REQUEST_SET_ALLOWED_CARRIERS";
449640659286ac42ec77bbe7893830bd50c06f393ee8Meng Wang            case RIL_REQUEST_GET_ALLOWED_CARRIERS: return "RIL_REQUEST_GET_ALLOWED_CARRIERS";
4497060a6f0ba56dde532a9b9b28d4302df86a556691Sanket Padawe            case RIL_RESPONSE_ACKNOWLEDGEMENT: return "RIL_RESPONSE_ACKNOWLEDGEMENT";
44980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            default: return "<unknown request>";
44990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
45000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
45010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
45020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    static String
45030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    responseToString(int request)
45040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    {
45050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville/*
45060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville cat libs/telephony/ril_unsol_commands.h \
45070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville | egrep "^ *{RIL_" \
45080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville | sed -re 's/\{RIL_([^,]+),[^,]+,([^}]+).+/case RIL_\1: return "\1";/'
45090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville*/
45100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        switch(request) {
45110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_RADIO_STATE_CHANGED: return "UNSOL_RESPONSE_RADIO_STATE_CHANGED";
45120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED: return "UNSOL_RESPONSE_CALL_STATE_CHANGED";
45130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED: return "UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED";
45140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_NEW_SMS: return "UNSOL_RESPONSE_NEW_SMS";
45150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_NEW_SMS_STATUS_REPORT: return "UNSOL_RESPONSE_NEW_SMS_STATUS_REPORT";
45160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_NEW_SMS_ON_SIM: return "UNSOL_RESPONSE_NEW_SMS_ON_SIM";
45170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_ON_USSD: return "UNSOL_ON_USSD";
45180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_ON_USSD_REQUEST: return "UNSOL_ON_USSD_REQUEST";
45190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_NITZ_TIME_RECEIVED: return "UNSOL_NITZ_TIME_RECEIVED";
45200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_SIGNAL_STRENGTH: return "UNSOL_SIGNAL_STRENGTH";
45210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_DATA_CALL_LIST_CHANGED: return "UNSOL_DATA_CALL_LIST_CHANGED";
45220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_SUPP_SVC_NOTIFICATION: return "UNSOL_SUPP_SVC_NOTIFICATION";
45230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_STK_SESSION_END: return "UNSOL_STK_SESSION_END";
45240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_STK_PROACTIVE_COMMAND: return "UNSOL_STK_PROACTIVE_COMMAND";
45250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_STK_EVENT_NOTIFY: return "UNSOL_STK_EVENT_NOTIFY";
45260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_STK_CALL_SETUP: return "UNSOL_STK_CALL_SETUP";
45270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_SIM_SMS_STORAGE_FULL: return "UNSOL_SIM_SMS_STORAGE_FULL";
45280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_SIM_REFRESH: return "UNSOL_SIM_REFRESH";
45290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_CALL_RING: return "UNSOL_CALL_RING";
45300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_SIM_STATUS_CHANGED: return "UNSOL_RESPONSE_SIM_STATUS_CHANGED";
45310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_CDMA_NEW_SMS: return "UNSOL_RESPONSE_CDMA_NEW_SMS";
45320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_NEW_BROADCAST_SMS: return "UNSOL_RESPONSE_NEW_BROADCAST_SMS";
45330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_CDMA_RUIM_SMS_STORAGE_FULL: return "UNSOL_CDMA_RUIM_SMS_STORAGE_FULL";
45340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESTRICTED_STATE_CHANGED: return "UNSOL_RESTRICTED_STATE_CHANGED";
45350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_ENTER_EMERGENCY_CALLBACK_MODE: return "UNSOL_ENTER_EMERGENCY_CALLBACK_MODE";
45360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_CDMA_CALL_WAITING: return "UNSOL_CDMA_CALL_WAITING";
45370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_CDMA_OTA_PROVISION_STATUS: return "UNSOL_CDMA_OTA_PROVISION_STATUS";
45380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_CDMA_INFO_REC: return "UNSOL_CDMA_INFO_REC";
45390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_OEM_HOOK_RAW: return "UNSOL_OEM_HOOK_RAW";
45405e1bc7508bd2f6cbe52ce1d7cb13194a0d265406Jiju Kinattingal            case RIL_UNSOL_RINGBACK_TONE: return "UNSOL_RINGBACK_TONE";
45410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESEND_INCALL_MUTE: return "UNSOL_RESEND_INCALL_MUTE";
45420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_CDMA_SUBSCRIPTION_SOURCE_CHANGED: return "CDMA_SUBSCRIPTION_SOURCE_CHANGED";
45430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOl_CDMA_PRL_CHANGED: return "UNSOL_CDMA_PRL_CHANGED";
45440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_EXIT_EMERGENCY_CALLBACK_MODE: return "UNSOL_EXIT_EMERGENCY_CALLBACK_MODE";
45450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RIL_CONNECTED: return "UNSOL_RIL_CONNECTED";
45460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_VOICE_RADIO_TECH_CHANGED: return "UNSOL_VOICE_RADIO_TECH_CHANGED";
45475fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville            case RIL_UNSOL_CELL_INFO_LIST: return "UNSOL_CELL_INFO_LIST";
45481260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa            case RIL_UNSOL_RESPONSE_IMS_NETWORK_STATE_CHANGED:
45491260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa                return "UNSOL_RESPONSE_IMS_NETWORK_STATE_CHANGED";
4550a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville            case RIL_UNSOL_UICC_SUBSCRIPTION_STATUS_CHANGED:
4551a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                    return "RIL_UNSOL_UICC_SUBSCRIPTION_STATUS_CHANGED";
4552a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville            case RIL_UNSOL_SRVCC_STATE_NOTIFY:
4553a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                    return "UNSOL_SRVCC_STATE_NOTIFY";
4554a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville            case RIL_UNSOL_HARDWARE_CONFIG_CHANGED: return "RIL_UNSOL_HARDWARE_CONFIG_CHANGED";
45552b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville            case RIL_UNSOL_RADIO_CAPABILITY:
45562b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville                    return "RIL_UNSOL_RADIO_CAPABILITY";
455709b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja            case RIL_UNSOL_ON_SS: return "UNSOL_ON_SS";
455809b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja            case RIL_UNSOL_STK_CC_ALPHA_NOTIFY: return "UNSOL_STK_CC_ALPHA_NOTIFY";
455965bee39d7e417fb898c3948696d5d8a38046c449fenglu            case RIL_UNSOL_LCEDATA_RECV: return "UNSOL_LCE_INFO_RECV";
45604b4d80db8a8d447d3c1110831c2a821a2bd2a186Robert Greenwalt            case RIL_UNSOL_PCO_DATA: return "UNSOL_PCO_DATA";
45611260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa            default: return "<unknown response>";
45620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
45630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
45640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
45650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private void riljLog(String msg) {
4566a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        Rlog.d(RILJ_LOG_TAG, msg
4567a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                + (mInstanceId != null ? (" [SUB" + mInstanceId + "]") : ""));
45680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
45690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
45700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private void riljLogv(String msg) {
4571a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        Rlog.v(RILJ_LOG_TAG, msg
4572a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville                + (mInstanceId != null ? (" [SUB" + mInstanceId + "]") : ""));
45730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
45740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
45750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private void unsljLog(int response) {
45760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        riljLog("[UNSL]< " + responseToString(response));
45770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
45780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
45790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private void unsljLogMore(int response, String more) {
45800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        riljLog("[UNSL]< " + responseToString(response) + " " + more);
45810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
45820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
45830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private void unsljLogRet(int response, Object ret) {
45840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        riljLog("[UNSL]< " + responseToString(response) + " " + retToString(response, ret));
45850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
45860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
45870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private void unsljLogvRet(int response, Object ret) {
45880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        riljLogv("[UNSL]< " + responseToString(response) + " " + retToString(response, ret));
45890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
45900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
459109b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja    private Object
459209b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja    responseSsData(Parcel p) {
459309b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja        int num;
459409b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja        SsData ssData = new SsData();
459509b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja
459609b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja        ssData.serviceType = ssData.ServiceTypeFromRILInt(p.readInt());
459709b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja        ssData.requestType = ssData.RequestTypeFromRILInt(p.readInt());
459809b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja        ssData.teleserviceType = ssData.TeleserviceTypeFromRILInt(p.readInt());
459909b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja        ssData.serviceClass = p.readInt(); // This is service class sent in the SS request.
460009b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja        ssData.result = p.readInt(); // This is the result of the SS request.
460109b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja        num = p.readInt();
460209b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja
460309b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja        if (ssData.serviceType.isTypeCF() &&
460409b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja            ssData.requestType.isTypeInterrogation()) {
460509b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja            ssData.cfInfo = new CallForwardInfo[num];
460609b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja
460709b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja            for (int i = 0; i < num; i++) {
460809b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja                ssData.cfInfo[i] = new CallForwardInfo();
460909b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja
461009b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja                ssData.cfInfo[i].status = p.readInt();
461109b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja                ssData.cfInfo[i].reason = p.readInt();
461209b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja                ssData.cfInfo[i].serviceClass = p.readInt();
461309b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja                ssData.cfInfo[i].toa = p.readInt();
461409b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja                ssData.cfInfo[i].number = p.readString();
461509b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja                ssData.cfInfo[i].timeSeconds = p.readInt();
461609b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja
461709b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja                riljLog("[SS Data] CF Info " + i + " : " +  ssData.cfInfo[i]);
461809b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja            }
461909b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja        } else {
462009b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja            ssData.ssInfo = new int[num];
462109b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja            for (int i = 0; i < num; i++) {
462209b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja                ssData.ssInfo[i] = p.readInt();
462309b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja                riljLog("[SS Data] SS Info " + i + " : " +  ssData.ssInfo[i]);
462409b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja            }
462509b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja        }
462609b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja
462709b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja        return ssData;
462809b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja    }
462909b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja
46300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
46310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // ***** Methods for CDMA support
4632cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
46330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
46340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    getDeviceIdentity(Message response) {
46350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_DEVICE_IDENTITY, response);
46360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
46370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
46380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
46390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
46400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
46410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4642cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
46430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
46440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    getCDMASubscription(Message response) {
46450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CDMA_SUBSCRIPTION, response);
46460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
46470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
46480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
46490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
46500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
46510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
46520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override
46531a87ab3d7170d618f048c4f5af8c7504a587aaa5Jack Yu    public void setPhoneType(int phoneType) { // Called by GsmCdmaPhone
46540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog("setPhoneType=" + phoneType + " old value=" + mPhoneType);
46550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mPhoneType = phoneType;
46560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
46570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
46580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
46590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
46600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
4661cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
46620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void queryCdmaRoamingPreference(Message response) {
46630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(
46640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                RILConstants.RIL_REQUEST_CDMA_QUERY_ROAMING_PREFERENCE, response);
46650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
46660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
46670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
46680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
46690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
46700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
46710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
46720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
46730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
4674cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
46750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void setCdmaRoamingPreference(int cdmaRoamingType, Message response) {
46760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(
46770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                RILConstants.RIL_REQUEST_CDMA_SET_ROAMING_PREFERENCE, response);
46780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
467922d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(1);
468022d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(cdmaRoamingType);
46810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
46820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
46830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + " : " + cdmaRoamingType);
46840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
46850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
46860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
46870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
46880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
46890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
46900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
4691cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
46920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void setCdmaSubscriptionSource(int cdmaSubscription , Message response) {
46930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(
46940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                RILConstants.RIL_REQUEST_CDMA_SET_SUBSCRIPTION_SOURCE, response);
46950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
469622d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(1);
469722d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(cdmaSubscription);
46980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
46990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
47000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + " : " + cdmaSubscription);
47010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
47020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
47030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
47040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
47050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
47060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
47070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
47080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override
47090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void getCdmaSubscriptionSource(Message response) {
47100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(
47110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                RILConstants.RIL_REQUEST_CDMA_GET_SUBSCRIPTION_SOURCE, response);
47120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
47130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
47140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
47150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
47160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
47170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
47180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
47190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
47200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
4721cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
47220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void queryTTYMode(Message response) {
47230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(
47240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                RILConstants.RIL_REQUEST_QUERY_TTY_MODE, response);
47250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
47260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
47270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
47280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
47290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
47300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
47310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
47320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
47330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
4734cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
47350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void setTTYMode(int ttyMode, Message response) {
47360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(
47370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                RILConstants.RIL_REQUEST_SET_TTY_MODE, response);
47380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
473922d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(1);
474022d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(ttyMode);
47410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
47420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
47430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + " : " + ttyMode);
47440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
47450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
47460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
47470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
47480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
47490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
47500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
4751cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
47520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
47530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    sendCDMAFeatureCode(String FeatureCode, Message response) {
47540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CDMA_FLASH, response);
47550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
475622d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(FeatureCode);
47570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
47580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
47590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + " : " + FeatureCode);
47600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
47610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
47620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
47630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4764cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
47650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void getCdmaBroadcastConfig(Message response) {
47660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CDMA_GET_BROADCAST_CONFIG, response);
47670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
47680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
47690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
47700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4771cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
4772a63f55cf17629426d976830429a7612387532195Rika Brooks    public void setCdmaBroadcastConfig(CdmaSmsBroadcastConfigInfo[] configs, Message response) {
47730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CDMA_SET_BROADCAST_CONFIG, response);
47740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4775a63f55cf17629426d976830429a7612387532195Rika Brooks        // Convert to 1 service category per config (the way RIL takes is)
4776a63f55cf17629426d976830429a7612387532195Rika Brooks        ArrayList<CdmaSmsBroadcastConfigInfo> processedConfigs =
4777a63f55cf17629426d976830429a7612387532195Rika Brooks            new ArrayList<CdmaSmsBroadcastConfigInfo>();
4778a63f55cf17629426d976830429a7612387532195Rika Brooks        for (CdmaSmsBroadcastConfigInfo config : configs) {
4779a63f55cf17629426d976830429a7612387532195Rika Brooks            for (int i = config.getFromServiceCategory(); i <= config.getToServiceCategory(); i++) {
4780a63f55cf17629426d976830429a7612387532195Rika Brooks                processedConfigs.add(new CdmaSmsBroadcastConfigInfo(i,
4781a63f55cf17629426d976830429a7612387532195Rika Brooks                        i,
4782a63f55cf17629426d976830429a7612387532195Rika Brooks                        config.getLanguage(),
4783a63f55cf17629426d976830429a7612387532195Rika Brooks                        config.isSelected()));
4784a63f55cf17629426d976830429a7612387532195Rika Brooks            }
47850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
47860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4787a63f55cf17629426d976830429a7612387532195Rika Brooks        CdmaSmsBroadcastConfigInfo[] rilConfigs = processedConfigs.toArray(configs);
478822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(rilConfigs.length);
4789a63f55cf17629426d976830429a7612387532195Rika Brooks        for(int i = 0; i < rilConfigs.length; i++) {
479022d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville            rr.mParcel.writeInt(rilConfigs[i].getFromServiceCategory());
479122d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville            rr.mParcel.writeInt(rilConfigs[i].getLanguage());
479222d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville            rr.mParcel.writeInt(rilConfigs[i].isSelected() ? 1 : 0);
4793a63f55cf17629426d976830429a7612387532195Rika Brooks        }
4794a63f55cf17629426d976830429a7612387532195Rika Brooks
4795a63f55cf17629426d976830429a7612387532195Rika Brooks        if (RILJ_LOGD) {
4796a63f55cf17629426d976830429a7612387532195Rika Brooks            riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
4797a63f55cf17629426d976830429a7612387532195Rika Brooks                    + " with " + rilConfigs.length + " configs : ");
4798a63f55cf17629426d976830429a7612387532195Rika Brooks            for (int i = 0; i < rilConfigs.length; i++) {
4799a63f55cf17629426d976830429a7612387532195Rika Brooks                riljLog(rilConfigs[i].toString());
4800a63f55cf17629426d976830429a7612387532195Rika Brooks            }
4801a63f55cf17629426d976830429a7612387532195Rika Brooks        }
48020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
48030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
48040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
48050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4806cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
48070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void setCdmaBroadcastActivation(boolean activate, Message response) {
48080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CDMA_BROADCAST_ACTIVATION, response);
48090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
481022d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(1);
481122d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(activate ? 0 :1);
48120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
48130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
48140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
48150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
48160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
48170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
48180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
48190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
48200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
4821cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
48220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void exitEmergencyCallbackMode(Message response) {
48230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_EXIT_EMERGENCY_CALLBACK_MODE, response);
48240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
48250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
48260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
48270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
48280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
48290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4830cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
48310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void requestIsimAuthentication(String nonce, Message response) {
48320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_ISIM_AUTHENTICATION, response);
48330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
483422d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(nonce);
48350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
48360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
48370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
48380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
48390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
48400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4841a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville    @Override
4842ce083ae9d277bea9fbc1c143766adf1013f4a50eAmit Mahajan    public void requestIccSimAuthentication(int authContext, String data, String aid,
4843ce083ae9d277bea9fbc1c143766adf1013f4a50eAmit Mahajan                                            Message response) {
48442fbca951019df69146cf472adadc05c5c2ef4a32Amit Mahajan        RILRequest rr = RILRequest.obtain(RIL_REQUEST_SIM_AUTHENTICATION, response);
4845a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville
4846ce083ae9d277bea9fbc1c143766adf1013f4a50eAmit Mahajan        rr.mParcel.writeInt(authContext);
4847a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        rr.mParcel.writeString(data);
4848ce083ae9d277bea9fbc1c143766adf1013f4a50eAmit Mahajan        rr.mParcel.writeString(aid);
4849a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville
4850a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
4851a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville
4852a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        send(rr);
4853a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville    }
4854a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville
48555fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville    /**
48565fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville     * {@inheritDoc}
48575fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville     */
48585fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville    @Override
48595fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville    public void getCellInfoList(Message result) {
48605fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_GET_CELL_INFO_LIST, result);
48615fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville
48625fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
48635fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville
48645fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville        send(rr);
48655fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville    }
48665fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville
48675fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville    /**
48685fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville     * {@inheritDoc}
48695fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville     */
48705fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville    @Override
48715fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville    public void setCellInfoListRate(int rateInMillis, Message response) {
48725fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville        if (RILJ_LOGD) riljLog("setCellInfoListRate: " + rateInMillis);
48735fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_SET_UNSOL_CELL_INFO_LIST_RATE, response);
48745fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville
48755fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville        rr.mParcel.writeInt(1);
48765fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville        rr.mParcel.writeInt(rateInMillis);
48775fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville
48785fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
48795fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville
48805fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville        send(rr);
48815fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville    }
48825fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville
48835d5eea6ed231163c225144316b0d1913d48678a4Sungmin Choi    public void setInitialAttachApn(String apn, String protocol, int authType, String username,
48845d5eea6ed231163c225144316b0d1913d48678a4Sungmin Choi            String password, Message result) {
48854d3af373fc074bdde5e6ceb521b5e7e19bbbd8aeSanket Padawe        RILRequest rr = RILRequest.obtain(RIL_REQUEST_SET_INITIAL_ATTACH_APN, result);
48865d5eea6ed231163c225144316b0d1913d48678a4Sungmin Choi
48875d5eea6ed231163c225144316b0d1913d48678a4Sungmin Choi        if (RILJ_LOGD) riljLog("Set RIL_REQUEST_SET_INITIAL_ATTACH_APN");
48885d5eea6ed231163c225144316b0d1913d48678a4Sungmin Choi
48895d5eea6ed231163c225144316b0d1913d48678a4Sungmin Choi        rr.mParcel.writeString(apn);
48905d5eea6ed231163c225144316b0d1913d48678a4Sungmin Choi        rr.mParcel.writeString(protocol);
48915d5eea6ed231163c225144316b0d1913d48678a4Sungmin Choi        rr.mParcel.writeInt(authType);
48925d5eea6ed231163c225144316b0d1913d48678a4Sungmin Choi        rr.mParcel.writeString(username);
48935d5eea6ed231163c225144316b0d1913d48678a4Sungmin Choi        rr.mParcel.writeString(password);
48945d5eea6ed231163c225144316b0d1913d48678a4Sungmin Choi
48955d5eea6ed231163c225144316b0d1913d48678a4Sungmin Choi        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
48965d5eea6ed231163c225144316b0d1913d48678a4Sungmin Choi                + ", apn:" + apn + ", protocol:" + protocol + ", authType:" + authType
48975d5eea6ed231163c225144316b0d1913d48678a4Sungmin Choi                + ", username:" + username + ", password:" + password);
48985d5eea6ed231163c225144316b0d1913d48678a4Sungmin Choi
48995d5eea6ed231163c225144316b0d1913d48678a4Sungmin Choi        send(rr);
49005d5eea6ed231163c225144316b0d1913d48678a4Sungmin Choi    }
49015d5eea6ed231163c225144316b0d1913d48678a4Sungmin Choi
49029d4ec7d45061f1da05f16cd244eb0a798e7f36bbAmit Mahajan    public void setDataProfile(DataProfile[] dps, Message result) {
49039d4ec7d45061f1da05f16cd244eb0a798e7f36bbAmit Mahajan        if (RILJ_LOGD) riljLog("Set RIL_REQUEST_SET_DATA_PROFILE");
49049d4ec7d45061f1da05f16cd244eb0a798e7f36bbAmit Mahajan
49059d4ec7d45061f1da05f16cd244eb0a798e7f36bbAmit Mahajan        RILRequest rr = RILRequest.obtain(RIL_REQUEST_SET_DATA_PROFILE, null);
49069d4ec7d45061f1da05f16cd244eb0a798e7f36bbAmit Mahajan        DataProfile.toParcel(rr.mParcel, dps);
49079d4ec7d45061f1da05f16cd244eb0a798e7f36bbAmit Mahajan
49089d4ec7d45061f1da05f16cd244eb0a798e7f36bbAmit Mahajan        if (RILJ_LOGD) {
49099d4ec7d45061f1da05f16cd244eb0a798e7f36bbAmit Mahajan            riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
49109d4ec7d45061f1da05f16cd244eb0a798e7f36bbAmit Mahajan                    + " with " + dps + " Data Profiles : ");
49119d4ec7d45061f1da05f16cd244eb0a798e7f36bbAmit Mahajan            for (int i = 0; i < dps.length; i++) {
49129d4ec7d45061f1da05f16cd244eb0a798e7f36bbAmit Mahajan                riljLog(dps[i].toString());
49139d4ec7d45061f1da05f16cd244eb0a798e7f36bbAmit Mahajan            }
49149d4ec7d45061f1da05f16cd244eb0a798e7f36bbAmit Mahajan        }
49159d4ec7d45061f1da05f16cd244eb0a798e7f36bbAmit Mahajan
49169d4ec7d45061f1da05f16cd244eb0a798e7f36bbAmit Mahajan        send(rr);
49179d4ec7d45061f1da05f16cd244eb0a798e7f36bbAmit Mahajan    }
49189d4ec7d45061f1da05f16cd244eb0a798e7f36bbAmit Mahajan
49190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /* (non-Javadoc)
49200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @see com.android.internal.telephony.BaseCommands#testingEmergencyCall()
49210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
49220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override
49230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testingEmergencyCall() {
49240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog("testingEmergencyCall");
49250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mTestingEmergencyCall.set(true);
49260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
49270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
49280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
492905ef3b65972826780859b9acbd1fa9580d099832Alex Yakavenka        pw.println("RIL: " + this);
49300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        pw.println(" mSocket=" + mSocket);
49310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        pw.println(" mSenderThread=" + mSenderThread);
49320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        pw.println(" mSender=" + mSender);
49330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        pw.println(" mReceiverThread=" + mReceiverThread);
49340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        pw.println(" mReceiver=" + mReceiver);
49350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        pw.println(" mWakeLock=" + mWakeLock);
49360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        pw.println(" mWakeLockTimeout=" + mWakeLockTimeout);
4937892e1fecf3c3736c4c04cf219d01034f71307065Robert Greenwalt        synchronized (mRequestList) {
49387cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt            synchronized (mWakeLock) {
49397cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt                pw.println(" mWakeLockCount=" + mWakeLockCount);
49407cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt            }
4941892e1fecf3c3736c4c04cf219d01034f71307065Robert Greenwalt            int count = mRequestList.size();
49420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            pw.println(" mRequestList count=" + count);
49430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            for (int i = 0; i < count; i++) {
49447cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt                RILRequest rr = mRequestList.valueAt(i);
49450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                pw.println("  [" + rr.mSerial + "] " + requestToString(rr.mRequest));
49460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
49470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
4948d39109502855e8d81e45e21161d8bf0cfacf42e0Sanket Padawe        pw.println(" mLastNITZTimeInfo=" + Arrays.toString(mLastNITZTimeInfo));
49490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        pw.println(" mTestingEmergencyCall=" + mTestingEmergencyCall.get());
49500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
495140d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal
495240d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal    /**
495340d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal     * {@inheritDoc}
495440d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal     */
495540d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal    @Override
495640d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal    public void iccOpenLogicalChannel(String AID, Message response) {
495740d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal        RILRequest rr = RILRequest.obtain(RIL_REQUEST_SIM_OPEN_CHANNEL, response);
495840d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal        rr.mParcel.writeString(AID);
495940d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal
496040d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal        if (RILJ_LOGD)
496140d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal            riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
496240d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal
496340d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal        send(rr);
496440d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal    }
496540d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal
496640d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal    /**
496740d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal     * {@inheritDoc}
496840d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal     */
496940d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal    @Override
497040d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal    public void iccCloseLogicalChannel(int channel, Message response) {
497140d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal        RILRequest rr = RILRequest.obtain(RIL_REQUEST_SIM_CLOSE_CHANNEL, response);
497240d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal        rr.mParcel.writeInt(1);
497340d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal        rr.mParcel.writeInt(channel);
497440d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal
497540d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal        if (RILJ_LOGD)
497640d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal            riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
497740d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal
497840d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal        send(rr);
497940d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal    }
498040d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal
498140d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal    /**
498240d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal     * {@inheritDoc}
498340d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal     */
498440d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal    @Override
498540d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal    public void iccTransmitApduLogicalChannel(int channel, int cla, int instruction,
498640d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal            int p1, int p2, int p3, String data, Message response) {
498740d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal        if (channel <= 0) {
498840d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal            throw new RuntimeException(
498940d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal                "Invalid channel in iccTransmitApduLogicalChannel: " + channel);
499040d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal        }
499140d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal
4992c6685a68c55405300c798c087d95a882de54b900Shishir Agrawal        iccTransmitApduHelper(RIL_REQUEST_SIM_TRANSMIT_APDU_CHANNEL, channel, cla,
4993c6685a68c55405300c798c087d95a882de54b900Shishir Agrawal                instruction, p1, p2, p3, data, response);
499440d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal    }
499540d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal
499640d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal    /**
499740d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal     * {@inheritDoc}
499840d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal     */
499940d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal    @Override
500040d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal    public void iccTransmitApduBasicChannel(int cla, int instruction, int p1, int p2,
500140d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal            int p3, String data, Message response) {
5002c6685a68c55405300c798c087d95a882de54b900Shishir Agrawal        iccTransmitApduHelper(RIL_REQUEST_SIM_TRANSMIT_APDU_BASIC, 0, cla, instruction,
5003c6685a68c55405300c798c087d95a882de54b900Shishir Agrawal                p1, p2, p3, data, response);
500440d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal    }
500540d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal
500640d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal    /*
500740d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal     * Helper function for the iccTransmitApdu* commands above.
500840d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal     */
5009c6685a68c55405300c798c087d95a882de54b900Shishir Agrawal    private void iccTransmitApduHelper(int rilCommand, int channel, int cla,
5010c6685a68c55405300c798c087d95a882de54b900Shishir Agrawal            int instruction, int p1, int p2, int p3, String data, Message response) {
5011c6685a68c55405300c798c087d95a882de54b900Shishir Agrawal        RILRequest rr = RILRequest.obtain(rilCommand, response);
501240d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal        rr.mParcel.writeInt(channel);
501340d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal        rr.mParcel.writeInt(cla);
501440d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal        rr.mParcel.writeInt(instruction);
501540d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal        rr.mParcel.writeInt(p1);
501640d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal        rr.mParcel.writeInt(p2);
501740d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal        rr.mParcel.writeInt(p3);
501840d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal        rr.mParcel.writeString(data);
501940d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal
502040d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal        if (RILJ_LOGD)
502140d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal            riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
502240d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal
502340d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal        send(rr);
502440d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal    }
5025f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby
5026f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby    @Override
5027f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby    public void nvReadItem(int itemID, Message response) {
5028f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby        RILRequest rr = RILRequest.obtain(RIL_REQUEST_NV_READ_ITEM, response);
5029f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby
5030f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby        rr.mParcel.writeInt(itemID);
5031f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby
5032f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
5033f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby                + ' ' + itemID);
5034f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby
5035f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby        send(rr);
5036f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby    }
5037f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby
5038f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby    @Override
5039f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby    public void nvWriteItem(int itemID, String itemValue, Message response) {
5040f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby        RILRequest rr = RILRequest.obtain(RIL_REQUEST_NV_WRITE_ITEM, response);
5041f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby
5042f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby        rr.mParcel.writeInt(itemID);
5043f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby        rr.mParcel.writeString(itemValue);
5044f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby
5045f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
5046f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby                + ' ' + itemID + ": " + itemValue);
5047f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby
5048f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby        send(rr);
5049f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby    }
5050f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby
5051f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby    @Override
5052f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby    public void nvWriteCdmaPrl(byte[] preferredRoamingList, Message response) {
5053f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby        RILRequest rr = RILRequest.obtain(RIL_REQUEST_NV_WRITE_CDMA_PRL, response);
5054f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby
5055f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby        rr.mParcel.writeByteArray(preferredRoamingList);
5056f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby
5057f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
5058f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby                + " (" + preferredRoamingList.length + " bytes)");
5059f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby
5060f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby        send(rr);
5061f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby    }
5062f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby
5063f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby    @Override
5064f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby    public void nvResetConfig(int resetType, Message response) {
5065f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby        RILRequest rr = RILRequest.obtain(RIL_REQUEST_NV_RESET_CONFIG, response);
5066f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby
50679e2cb6350e698eaefe393cd652e0d0e264682d6eJake Hamby        rr.mParcel.writeInt(1);
5068f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby        rr.mParcel.writeInt(resetType);
5069f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby
5070f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
5071f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby                + ' ' + resetType);
5072f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby
5073f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby        send(rr);
5074f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby    }
50752b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville
50762b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville    @Override
50772b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville    public void setRadioCapability(RadioCapability rc, Message response) {
50782b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville        RILRequest rr = RILRequest.obtain(
50792b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville                RIL_REQUEST_SET_RADIO_CAPABILITY, response);
50802b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville
50812b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville        rr.mParcel.writeInt(rc.getVersion());
50822b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville        rr.mParcel.writeInt(rc.getSession());
50832b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville        rr.mParcel.writeInt(rc.getPhase());
50842b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville        rr.mParcel.writeInt(rc.getRadioAccessFamily());
50852b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville        rr.mParcel.writeString(rc.getLogicalModemUuid());
50862b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville        rr.mParcel.writeInt(rc.getStatus());
50872b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville
50882b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville        if (RILJ_LOGD) {
50892b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville            riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
50902b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville                    + " " + rc.toString());
50912b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville        }
50922b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville
50932b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville        send(rr);
50942b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville    }
50952b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville
50962b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville    @Override
50972b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville    public void getRadioCapability(Message response) {
50982b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville        RILRequest rr = RILRequest.obtain(
50992b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville                RIL_REQUEST_GET_RADIO_CAPABILITY, response);
51002b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville
51012b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
51022b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville
51032b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville        send(rr);
51042b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville    }
510565bee39d7e417fb898c3948696d5d8a38046c449fenglu
510665bee39d7e417fb898c3948696d5d8a38046c449fenglu    @Override
510765bee39d7e417fb898c3948696d5d8a38046c449fenglu    public void startLceService(int reportIntervalMs, boolean pullMode, Message response) {
510865bee39d7e417fb898c3948696d5d8a38046c449fenglu        RILRequest rr = RILRequest.obtain(RIL_REQUEST_START_LCE, response);
510965bee39d7e417fb898c3948696d5d8a38046c449fenglu        /** solicited command argument: reportIntervalMs, pullMode. */
511065bee39d7e417fb898c3948696d5d8a38046c449fenglu        rr.mParcel.writeInt(2);
511165bee39d7e417fb898c3948696d5d8a38046c449fenglu        rr.mParcel.writeInt(reportIntervalMs);
511265bee39d7e417fb898c3948696d5d8a38046c449fenglu        rr.mParcel.writeInt(pullMode ? 1: 0);  // PULL mode: 1; PUSH mode: 0;
511365bee39d7e417fb898c3948696d5d8a38046c449fenglu
511465bee39d7e417fb898c3948696d5d8a38046c449fenglu        if (RILJ_LOGD) {
511565bee39d7e417fb898c3948696d5d8a38046c449fenglu            riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
511665bee39d7e417fb898c3948696d5d8a38046c449fenglu        }
511765bee39d7e417fb898c3948696d5d8a38046c449fenglu
511865bee39d7e417fb898c3948696d5d8a38046c449fenglu        send(rr);
511965bee39d7e417fb898c3948696d5d8a38046c449fenglu    }
512065bee39d7e417fb898c3948696d5d8a38046c449fenglu
512165bee39d7e417fb898c3948696d5d8a38046c449fenglu    @Override
512265bee39d7e417fb898c3948696d5d8a38046c449fenglu    public void stopLceService(Message response) {
512365bee39d7e417fb898c3948696d5d8a38046c449fenglu        RILRequest rr = RILRequest.obtain(RIL_REQUEST_STOP_LCE, response);
512465bee39d7e417fb898c3948696d5d8a38046c449fenglu        if (RILJ_LOGD) {
512565bee39d7e417fb898c3948696d5d8a38046c449fenglu            riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
512665bee39d7e417fb898c3948696d5d8a38046c449fenglu        }
512765bee39d7e417fb898c3948696d5d8a38046c449fenglu        send(rr);
512865bee39d7e417fb898c3948696d5d8a38046c449fenglu    }
512965bee39d7e417fb898c3948696d5d8a38046c449fenglu
513065bee39d7e417fb898c3948696d5d8a38046c449fenglu    @Override
513165bee39d7e417fb898c3948696d5d8a38046c449fenglu    public void pullLceData(Message response) {
513265bee39d7e417fb898c3948696d5d8a38046c449fenglu        RILRequest rr = RILRequest.obtain(RIL_REQUEST_PULL_LCEDATA, response);
513365bee39d7e417fb898c3948696d5d8a38046c449fenglu        if (RILJ_LOGD) {
513465bee39d7e417fb898c3948696d5d8a38046c449fenglu            riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
513565bee39d7e417fb898c3948696d5d8a38046c449fenglu        }
513665bee39d7e417fb898c3948696d5d8a38046c449fenglu        send(rr);
513765bee39d7e417fb898c3948696d5d8a38046c449fenglu    }
513827eef341b171f925ef43dd088cc559280fd7d2b9Prerepa Viswanadham
513927eef341b171f925ef43dd088cc559280fd7d2b9Prerepa Viswanadham    /**
514027eef341b171f925ef43dd088cc559280fd7d2b9Prerepa Viswanadham    * @hide
514127eef341b171f925ef43dd088cc559280fd7d2b9Prerepa Viswanadham    */
514227eef341b171f925ef43dd088cc559280fd7d2b9Prerepa Viswanadham    public void getModemActivityInfo(Message response) {
514327eef341b171f925ef43dd088cc559280fd7d2b9Prerepa Viswanadham        RILRequest rr = RILRequest.obtain(RIL_REQUEST_GET_ACTIVITY_INFO, response);
514427eef341b171f925ef43dd088cc559280fd7d2b9Prerepa Viswanadham        if (RILJ_LOGD) {
514527eef341b171f925ef43dd088cc559280fd7d2b9Prerepa Viswanadham            riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
514627eef341b171f925ef43dd088cc559280fd7d2b9Prerepa Viswanadham        }
514727eef341b171f925ef43dd088cc559280fd7d2b9Prerepa Viswanadham        send(rr);
514832c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold
514932c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold        Message msg = mSender.obtainMessage(EVENT_BLOCKING_RESPONSE_TIMEOUT);
515032c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold        msg.obj = null;
515132c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold        msg.arg1 = rr.mSerial;
515232c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold        mSender.sendMessageDelayed(msg, DEFAULT_BLOCKING_MESSAGE_RESPONSE_TIMEOUT_MS);
515327eef341b171f925ef43dd088cc559280fd7d2b9Prerepa Viswanadham    }
515440659286ac42ec77bbe7893830bd50c06f393ee8Meng Wang
515540659286ac42ec77bbe7893830bd50c06f393ee8Meng Wang    @Override
515640659286ac42ec77bbe7893830bd50c06f393ee8Meng Wang    public void setAllowedCarriers(List<CarrierIdentifier> carriers, Message response) {
515740659286ac42ec77bbe7893830bd50c06f393ee8Meng Wang        RILRequest rr = RILRequest.obtain(RIL_REQUEST_SET_ALLOWED_CARRIERS, response);
515840659286ac42ec77bbe7893830bd50c06f393ee8Meng Wang        rr.mParcel.writeInt(carriers.size()); /* len_allowed_carriers */
515940659286ac42ec77bbe7893830bd50c06f393ee8Meng Wang        rr.mParcel.writeInt(0); /* len_excluded_carriers */ /* TODO: add excluded carriers */
516040659286ac42ec77bbe7893830bd50c06f393ee8Meng Wang        for (CarrierIdentifier ci : carriers) { /* allowed carriers */
516140659286ac42ec77bbe7893830bd50c06f393ee8Meng Wang            rr.mParcel.writeString(ci.getMcc());
516240659286ac42ec77bbe7893830bd50c06f393ee8Meng Wang            rr.mParcel.writeString(ci.getMnc());
516340659286ac42ec77bbe7893830bd50c06f393ee8Meng Wang            int matchType = CarrierIdentifier.MatchType.ALL;
516440659286ac42ec77bbe7893830bd50c06f393ee8Meng Wang            String matchData = null;
516540659286ac42ec77bbe7893830bd50c06f393ee8Meng Wang            if (!TextUtils.isEmpty(ci.getSpn())) {
516640659286ac42ec77bbe7893830bd50c06f393ee8Meng Wang                matchType = CarrierIdentifier.MatchType.SPN;
516740659286ac42ec77bbe7893830bd50c06f393ee8Meng Wang                matchData = ci.getSpn();
516840659286ac42ec77bbe7893830bd50c06f393ee8Meng Wang            } else if (!TextUtils.isEmpty(ci.getImsi())) {
516940659286ac42ec77bbe7893830bd50c06f393ee8Meng Wang                matchType = CarrierIdentifier.MatchType.IMSI_PREFIX;
517040659286ac42ec77bbe7893830bd50c06f393ee8Meng Wang                matchData = ci.getImsi();
517140659286ac42ec77bbe7893830bd50c06f393ee8Meng Wang            } else if (!TextUtils.isEmpty(ci.getGid1())) {
517240659286ac42ec77bbe7893830bd50c06f393ee8Meng Wang                matchType = CarrierIdentifier.MatchType.GID1;
517340659286ac42ec77bbe7893830bd50c06f393ee8Meng Wang                matchData = ci.getGid1();
517440659286ac42ec77bbe7893830bd50c06f393ee8Meng Wang            } else if (!TextUtils.isEmpty(ci.getGid2())) {
517540659286ac42ec77bbe7893830bd50c06f393ee8Meng Wang                matchType = CarrierIdentifier.MatchType.GID2;
517640659286ac42ec77bbe7893830bd50c06f393ee8Meng Wang                matchData = ci.getGid2();
517740659286ac42ec77bbe7893830bd50c06f393ee8Meng Wang            }
517840659286ac42ec77bbe7893830bd50c06f393ee8Meng Wang            rr.mParcel.writeInt(matchType);
517940659286ac42ec77bbe7893830bd50c06f393ee8Meng Wang            rr.mParcel.writeString(matchData);
518040659286ac42ec77bbe7893830bd50c06f393ee8Meng Wang        }
518140659286ac42ec77bbe7893830bd50c06f393ee8Meng Wang        /* TODO: add excluded carriers */
518240659286ac42ec77bbe7893830bd50c06f393ee8Meng Wang
518340659286ac42ec77bbe7893830bd50c06f393ee8Meng Wang        if (RILJ_LOGD) {
518440659286ac42ec77bbe7893830bd50c06f393ee8Meng Wang            riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
518540659286ac42ec77bbe7893830bd50c06f393ee8Meng Wang        }
518640659286ac42ec77bbe7893830bd50c06f393ee8Meng Wang        send(rr);
518740659286ac42ec77bbe7893830bd50c06f393ee8Meng Wang    }
518840659286ac42ec77bbe7893830bd50c06f393ee8Meng Wang
518940659286ac42ec77bbe7893830bd50c06f393ee8Meng Wang    @Override
519040659286ac42ec77bbe7893830bd50c06f393ee8Meng Wang    public void getAllowedCarriers(Message response) {
519140659286ac42ec77bbe7893830bd50c06f393ee8Meng Wang        RILRequest rr = RILRequest.obtain(RIL_REQUEST_GET_ALLOWED_CARRIERS, response);
519240659286ac42ec77bbe7893830bd50c06f393ee8Meng Wang        if (RILJ_LOGD) {
519340659286ac42ec77bbe7893830bd50c06f393ee8Meng Wang            riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
519440659286ac42ec77bbe7893830bd50c06f393ee8Meng Wang        }
519540659286ac42ec77bbe7893830bd50c06f393ee8Meng Wang        send(rr);
519640659286ac42ec77bbe7893830bd50c06f393ee8Meng Wang    }
51970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville}
5198