RIL.java revision 5fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20
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 static com.android.internal.telephony.RILConstants.*;
200825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport static android.telephony.TelephonyManager.NETWORK_TYPE_UNKNOWN;
210825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport static android.telephony.TelephonyManager.NETWORK_TYPE_EDGE;
220825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport static android.telephony.TelephonyManager.NETWORK_TYPE_GPRS;
230825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport static android.telephony.TelephonyManager.NETWORK_TYPE_UMTS;
240825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport static android.telephony.TelephonyManager.NETWORK_TYPE_HSDPA;
250825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport static android.telephony.TelephonyManager.NETWORK_TYPE_HSUPA;
260825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport static android.telephony.TelephonyManager.NETWORK_TYPE_HSPA;
270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
280825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.content.BroadcastReceiver;
290825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.content.Context;
300825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.content.Intent;
310825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.content.IntentFilter;
320825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.net.ConnectivityManager;
330825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.net.LocalSocket;
340825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.net.LocalSocketAddress;
350825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.AsyncResult;
360825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.Handler;
370825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.HandlerThread;
380825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.Looper;
390825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.Message;
400825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.Parcel;
410825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.PowerManager;
420825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.SystemProperties;
430825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.PowerManager.WakeLock;
445fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Savilleimport android.telephony.CellInfo;
450825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.telephony.NeighboringCellInfo;
460825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.telephony.PhoneNumberUtils;
47fa4fd4721082689c4b276f67b845e7be249cb8daWink Savilleimport android.telephony.Rlog;
485b81adc82a53b3064f4baa3acfeabef31586588aUma Maheswari Ramalingamimport android.telephony.SignalStrength;
490825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.telephony.SmsManager;
500825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.telephony.SmsMessage;
510825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.text.TextUtils;
520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
530825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.gsm.SmsBroadcastConfigInfo;
540825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.gsm.SuppServiceNotification;
55d720945f2be5ea5fe0faf67e67d9ea0e184eba67Alex Yakavenkaimport com.android.internal.telephony.uicc.IccCardApplicationStatus;
56d720945f2be5ea5fe0faf67e67d9ea0e184eba67Alex Yakavenkaimport com.android.internal.telephony.uicc.IccCardStatus;
57d720945f2be5ea5fe0faf67e67d9ea0e184eba67Alex Yakavenkaimport com.android.internal.telephony.uicc.IccIoResult;
58d720945f2be5ea5fe0faf67e67d9ea0e184eba67Alex Yakavenkaimport com.android.internal.telephony.uicc.IccRefreshResponse;
59d720945f2be5ea5fe0faf67e67d9ea0e184eba67Alex Yakavenkaimport com.android.internal.telephony.uicc.IccUtils;
600825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.cdma.CdmaCallWaitingNotification;
610825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.cdma.CdmaInformationRecords;
62a63f55cf17629426d976830429a7612387532195Rika Brooksimport com.android.internal.telephony.cdma.CdmaSmsBroadcastConfigInfo;
63ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Savilleimport com.android.internal.telephony.dataconnection.DcFailCause;
64ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Savilleimport com.android.internal.telephony.dataconnection.DataCallResponse;
650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
660825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.io.ByteArrayInputStream;
670825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.io.DataInputStream;
680825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.io.FileDescriptor;
690825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.io.IOException;
700825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.io.InputStream;
710825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.io.PrintWriter;
720825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.util.ArrayList;
730825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.util.Collections;
740825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.util.concurrent.atomic.AtomicBoolean;
750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville/**
770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * {@hide}
780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */
790825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleclass RILRequest {
80cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    static final String LOG_TAG = "RilRequest";
810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    //***** Class Variables
830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    static int sNextSerial = 0;
840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    static Object sSerialMonitor = new Object();
850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private static Object sPoolSync = new Object();
860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private static RILRequest sPool = null;
870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private static int sPoolSize = 0;
880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private static final int MAX_POOL_SIZE = 4;
890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    //***** Instance Variables
910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    int mSerial;
920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    int mRequest;
930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    Message mResult;
9422d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville    Parcel mParcel;
950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    RILRequest mNext;
960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Retrieves a new RILRequest instance from the pool.
990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
1000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @param request RIL_REQUEST_*
1010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @param result sent when operation completes
1020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @return a RILRequest instance from the pool.
1030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
1040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    static RILRequest obtain(int request, Message result) {
1050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = null;
1060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        synchronized(sPoolSync) {
1080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (sPool != null) {
1090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                rr = sPool;
1100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                sPool = rr.mNext;
1110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                rr.mNext = null;
1120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                sPoolSize--;
1130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
1140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
1150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (rr == null) {
1170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            rr = new RILRequest();
1180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
1190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        synchronized(sSerialMonitor) {
1210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            rr.mSerial = sNextSerial++;
1220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
1230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mRequest = request;
1240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mResult = result;
12522d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel = Parcel.obtain();
1260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (result != null && result.getTarget() == null) {
1280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            throw new NullPointerException("Message target must not be null");
1290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
1300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // first elements in any RIL Parcel
13222d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(request);
13322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(rr.mSerial);
1340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return rr;
1360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
1390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Returns a RILRequest instance to the pool.
1400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
1410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Note: This should only be called once per use.
1420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
1430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    void release() {
1440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        synchronized (sPoolSync) {
1450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (sPoolSize < MAX_POOL_SIZE) {
14622d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville                mNext = sPool;
1470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                sPool = this;
1480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                sPoolSize++;
1490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                mResult = null;
1500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
1510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
1520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private RILRequest() {
1550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    static void
1580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    resetSerial() {
1590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        synchronized(sSerialMonitor) {
1600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            sNextSerial = 0;
1610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
1620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    String
1650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    serialString() {
1660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //Cheesy way to do %04d
1670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        StringBuilder sb = new StringBuilder(8);
1680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String sn;
1690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        sn = Integer.toString(mSerial);
1710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //sb.append("J[");
1730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        sb.append('[');
1740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        for (int i = 0, s = sn.length() ; i < 4 - s; i++) {
1750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            sb.append('0');
1760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
1770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        sb.append(sn);
1790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        sb.append(']');
1800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return sb.toString();
1810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    void
1840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    onError(int error, Object ret) {
1850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        CommandException ex;
1860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        ex = CommandException.fromRilErrno(error);
1880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
189fa4fd4721082689c4b276f67b845e7be249cb8daWink Saville        if (RIL.RILJ_LOGD) Rlog.d(LOG_TAG, serialString() + "< "
1900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            + RIL.requestToString(mRequest)
1910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            + " error: " + ex);
1920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (mResult != null) {
1940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            AsyncResult.forMessage(mResult, ret, ex);
1950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            mResult.sendToTarget();
1960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
1970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
19822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        if (mParcel != null) {
19922d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville            mParcel.recycle();
20022d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville            mParcel = null;
2010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
2020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
2030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville}
2040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville/**
2070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * RIL implementation of the CommandsInterface.
2080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville *
2090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * {@hide}
2100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */
2110825495a331bb44df395a0cdb79fab85e68db5d5Wink Savillepublic final class RIL extends BaseCommands implements CommandsInterface {
212fa4fd4721082689c4b276f67b845e7be249cb8daWink Saville    static final String RILJ_LOG_TAG = "RILJ";
2130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    static final boolean RILJ_LOGD = true;
214cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    static final boolean RILJ_LOGV = false; // STOPSHIP if true
2150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
2170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Wake lock timeout should be longer than the longest timeout in
2180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * the vendor ril.
2190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
2200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private static final int DEFAULT_WAKE_LOCK_TIMEOUT = 60000;
2210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    //***** Instance Variables
2230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    LocalSocket mSocket;
2250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    HandlerThread mSenderThread;
2260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    RILSender mSender;
2270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    Thread mReceiverThread;
2280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    RILReceiver mReceiver;
2290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    WakeLock mWakeLock;
2300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    int mWakeLockTimeout;
2310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // The number of requests pending to be sent out, it increases before calling
2320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // EVENT_SEND and decreases while handling EVENT_SEND. It gets cleared while
2330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // WAKE_LOCK_TIMEOUT occurs.
2340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    int mRequestMessagesPending;
2350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // The number of requests sent out but waiting for response. It increases while
2360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // sending request and decreases while handling response. It should match
2370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // mRequestList.size() unless there are requests no replied while
2380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // WAKE_LOCK_TIMEOUT occurs.
2390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    int mRequestMessagesWaiting;
2400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    //I'd rather this be LinkedList or something
242892e1fecf3c3736c4c04cf219d01034f71307065Robert Greenwalt    ArrayList<RILRequest> mRequestList = new ArrayList<RILRequest>();
2430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    Object     mLastNITZTimeInfo;
2450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // When we are testing emergency calls
2470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    AtomicBoolean mTestingEmergencyCall = new AtomicBoolean(false);
2480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    //***** Events
2500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    static final int EVENT_SEND                 = 1;
2520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    static final int EVENT_WAKE_LOCK_TIMEOUT    = 2;
2530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    //***** Constants
2550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // match with constant in ril.cpp
2570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    static final int RIL_MAX_COMMAND_BYTES = (8 * 1024);
2580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    static final int RESPONSE_SOLICITED = 0;
2590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    static final int RESPONSE_UNSOLICITED = 1;
2600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    static final String SOCKET_NAME_RIL = "rild";
2620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    static final int SOCKET_OPEN_RETRY_MILLIS = 4 * 1000;
2640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // The number of the required config values for broadcast SMS stored in the C struct
2660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // RIL_CDMA_BroadcastServiceInfo
2670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private static final int CDMA_BSI_NO_OF_INTS_STRUCT = 3;
2680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private static final int CDMA_BROADCAST_SMS_NO_OF_SERVICE_CATEGORIES = 31;
2700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {
2720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        @Override
2730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        public void onReceive(Context context, Intent intent) {
2740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
2750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                sendScreenState(true);
2760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            } else if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
2770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                sendScreenState(false);
2780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            } else {
279fa4fd4721082689c4b276f67b845e7be249cb8daWink Saville                Rlog.w(RILJ_LOG_TAG, "RIL received unexpected Intent: " + intent.getAction());
2800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
2810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
2820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    };
2830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    class RILSender extends Handler implements Runnable {
2850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        public RILSender(Looper looper) {
2860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            super(looper);
2870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
2880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // Only allocated once
2900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        byte[] dataLength = new byte[4];
2910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //***** Runnable implementation
293cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville        @Override
2940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        public void
2950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        run() {
2960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            //setup if needed
2970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
2980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //***** Handler implementation
3010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        @Override public void
3020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        handleMessage(Message msg) {
3030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            RILRequest rr = (RILRequest)(msg.obj);
3040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            RILRequest req = null;
3050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            switch (msg.what) {
3070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                case EVENT_SEND:
3080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    /**
3090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                     * mRequestMessagePending++ already happened for every
3100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                     * EVENT_SEND, thus we must make sure
3110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                     * mRequestMessagePending-- happens once and only once
3120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                     */
3130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    boolean alreadySubtracted = false;
3140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    try {
3150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        LocalSocket s;
3160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        s = mSocket;
3180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        if (s == null) {
3200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            rr.onError(RADIO_NOT_AVAILABLE, null);
3210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            rr.release();
3220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            if (mRequestMessagesPending > 0)
3230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                mRequestMessagesPending--;
3240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            alreadySubtracted = true;
3250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            return;
3260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        }
3270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
328892e1fecf3c3736c4c04cf219d01034f71307065Robert Greenwalt                        synchronized (mRequestList) {
329892e1fecf3c3736c4c04cf219d01034f71307065Robert Greenwalt                            mRequestList.add(rr);
3300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            mRequestMessagesWaiting++;
3310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        }
3320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        if (mRequestMessagesPending > 0)
3340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            mRequestMessagesPending--;
3350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        alreadySubtracted = true;
3360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        byte[] data;
3380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
33922d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville                        data = rr.mParcel.marshall();
34022d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville                        rr.mParcel.recycle();
34122d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville                        rr.mParcel = null;
3420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        if (data.length > RIL_MAX_COMMAND_BYTES) {
3440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            throw new RuntimeException(
3450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                    "Parcel larger than max bytes allowed! "
3460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                                          + data.length);
3470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        }
3480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        // parcel length in big endian
3500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        dataLength[0] = dataLength[1] = 0;
3510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        dataLength[2] = (byte)((data.length >> 8) & 0xff);
3520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        dataLength[3] = (byte)((data.length) & 0xff);
3530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
354fa4fd4721082689c4b276f67b845e7be249cb8daWink Saville                        //Rlog.v(RILJ_LOG_TAG, "writing packet: " + data.length + " bytes");
3550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        s.getOutputStream().write(dataLength);
3570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        s.getOutputStream().write(data);
3580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    } catch (IOException ex) {
359fa4fd4721082689c4b276f67b845e7be249cb8daWink Saville                        Rlog.e(RILJ_LOG_TAG, "IOException", ex);
3600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        req = findAndRemoveRequestFromList(rr.mSerial);
3610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        // make sure this request has not already been handled,
3620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        // eg, if RILReceiver cleared the list.
3630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        if (req != null || !alreadySubtracted) {
3640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            rr.onError(RADIO_NOT_AVAILABLE, null);
3650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            rr.release();
3660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        }
3670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    } catch (RuntimeException exc) {
368fa4fd4721082689c4b276f67b845e7be249cb8daWink Saville                        Rlog.e(RILJ_LOG_TAG, "Uncaught exception ", exc);
3690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        req = findAndRemoveRequestFromList(rr.mSerial);
3700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        // make sure this request has not already been handled,
3710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        // eg, if RILReceiver cleared the list.
3720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        if (req != null || !alreadySubtracted) {
3730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            rr.onError(GENERIC_FAILURE, null);
3740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            rr.release();
3750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        }
3760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    } finally {
3770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        // Note: We are "Done" only if there are no outstanding
3780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        // requests or replies. Thus this code path will only release
3790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        // the wake lock on errors.
3800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        releaseWakeLockIfDone();
3810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    }
3820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    if (!alreadySubtracted && mRequestMessagesPending > 0) {
3840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        mRequestMessagesPending--;
3850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    }
3860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    break;
3880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                case EVENT_WAKE_LOCK_TIMEOUT:
3900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    // Haven't heard back from the last request.  Assume we're
3910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    // not getting a response and  release the wake lock.
3920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    synchronized (mWakeLock) {
3930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        if (mWakeLock.isHeld()) {
3940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            // The timer of WAKE_LOCK_TIMEOUT is reset with each
3950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            // new send request. So when WAKE_LOCK_TIMEOUT occurs
3960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            // all requests in mRequestList already waited at
3970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            // least DEFAULT_WAKE_LOCK_TIMEOUT but no response.
3980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            // Reset mRequestMessagesWaiting to enable
3990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            // releaseWakeLockIfDone().
4000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            //
4010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            // Note: Keep mRequestList so that delayed response
4020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            // can still be handled when response finally comes.
4030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            if (mRequestMessagesWaiting != 0) {
404fa4fd4721082689c4b276f67b845e7be249cb8daWink Saville                                Rlog.d(RILJ_LOG_TAG, "NOTE: mReqWaiting is NOT 0 but"
4050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                        + mRequestMessagesWaiting + " at TIMEOUT, reset!"
4060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                        + " There still msg waitng for response");
4070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                mRequestMessagesWaiting = 0;
4090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                if (RILJ_LOGD) {
411892e1fecf3c3736c4c04cf219d01034f71307065Robert Greenwalt                                    synchronized (mRequestList) {
412892e1fecf3c3736c4c04cf219d01034f71307065Robert Greenwalt                                        int count = mRequestList.size();
413fa4fd4721082689c4b276f67b845e7be249cb8daWink Saville                                        Rlog.d(RILJ_LOG_TAG, "WAKE_LOCK_TIMEOUT " +
4140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                                " mRequestList=" + count);
4150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                        for (int i = 0; i < count; i++) {
417892e1fecf3c3736c4c04cf219d01034f71307065Robert Greenwalt                                            rr = mRequestList.get(i);
418fa4fd4721082689c4b276f67b845e7be249cb8daWink Saville                                            Rlog.d(RILJ_LOG_TAG, i + ": [" + rr.mSerial + "] "
4190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                                    + requestToString(rr.mRequest));
4200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                        }
4210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                    }
4220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                }
4230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            }
4240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            // mRequestMessagesPending shows how many
4250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            // requests are waiting to be sent (and before
4260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            // to be added in request list) since star the
4270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            // WAKE_LOCK_TIMEOUT timer. Since WAKE_LOCK_TIMEOUT
4280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            // is the expected time to get response, all requests
4290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            // should already sent out (i.e.
4300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            // mRequestMessagesPending is 0 )while TIMEOUT occurs.
4310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            if (mRequestMessagesPending != 0) {
432fa4fd4721082689c4b276f67b845e7be249cb8daWink Saville                                Rlog.e(RILJ_LOG_TAG, "ERROR: mReqPending is NOT 0 but"
4330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                        + mRequestMessagesPending + " at TIMEOUT, reset!");
4340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                mRequestMessagesPending = 0;
4350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            }
4370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            mWakeLock.release();
4380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        }
4390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    }
4400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    break;
4410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
4420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
4430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
4440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
4460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Reads in a single RIL message off the wire. A RIL message consists
4470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * of a 4-byte little-endian length and a subsequent series of bytes.
4480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * The final message (length header omitted) is read into
4490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * <code>buffer</code> and the length of the final message (less header)
4500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * is returned. A return value of -1 indicates end-of-stream.
4510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
4520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @param is non-null; Stream to read from
4530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @param buffer Buffer to fill in. Must be as large as maximum
4540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * message size, or an ArrayOutOfBounds exception will be thrown.
4550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @return Length of message less header, or -1 on end of stream.
4560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @throws IOException
4570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
4580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private static int readRilMessage(InputStream is, byte[] buffer)
4590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            throws IOException {
4600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int countRead;
4610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int offset;
4620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int remaining;
4630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int messageLength;
4640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // First, read in the length of the message
4660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        offset = 0;
4670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        remaining = 4;
4680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        do {
4690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            countRead = is.read(buffer, offset, remaining);
4700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (countRead < 0 ) {
472fa4fd4721082689c4b276f67b845e7be249cb8daWink Saville                Rlog.e(RILJ_LOG_TAG, "Hit EOS reading message length");
4730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                return -1;
4740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
4750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            offset += countRead;
4770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            remaining -= countRead;
4780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } while (remaining > 0);
4790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        messageLength = ((buffer[0] & 0xff) << 24)
4810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                | ((buffer[1] & 0xff) << 16)
4820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                | ((buffer[2] & 0xff) << 8)
4830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                | (buffer[3] & 0xff);
4840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // Then, re-use the buffer and read in the message itself
4860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        offset = 0;
4870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        remaining = messageLength;
4880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        do {
4890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            countRead = is.read(buffer, offset, remaining);
4900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (countRead < 0 ) {
492fa4fd4721082689c4b276f67b845e7be249cb8daWink Saville                Rlog.e(RILJ_LOG_TAG, "Hit EOS reading message.  messageLength=" + messageLength
4930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        + " remaining=" + remaining);
4940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                return -1;
4950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
4960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            offset += countRead;
4980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            remaining -= countRead;
4990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } while (remaining > 0);
5000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return messageLength;
5020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
5030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    class RILReceiver implements Runnable {
5050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        byte[] buffer;
5060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILReceiver() {
5080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            buffer = new byte[RIL_MAX_COMMAND_BYTES];
5090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
5100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
511cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville        @Override
5120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        public void
5130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        run() {
5140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            int retryCount = 0;
5150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            try {for (;;) {
5170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                LocalSocket s = null;
5180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                LocalSocketAddress l;
5190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                try {
5210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    s = new LocalSocket();
5220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    l = new LocalSocketAddress(SOCKET_NAME_RIL,
5230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            LocalSocketAddress.Namespace.RESERVED);
5240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    s.connect(l);
5250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                } catch (IOException ex){
5260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    try {
5270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        if (s != null) {
5280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            s.close();
5290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        }
5300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    } catch (IOException ex2) {
5310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        //ignore failure to close after failure to connect
5320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    }
5330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    // don't print an error message after the the first time
5350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    // or after the 8th time
5360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    if (retryCount == 8) {
538fa4fd4721082689c4b276f67b845e7be249cb8daWink Saville                        Rlog.e (RILJ_LOG_TAG,
5390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            "Couldn't find '" + SOCKET_NAME_RIL
5400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            + "' socket after " + retryCount
5410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            + " times, continuing to retry silently");
5420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    } else if (retryCount > 0 && retryCount < 8) {
543fa4fd4721082689c4b276f67b845e7be249cb8daWink Saville                        Rlog.i (RILJ_LOG_TAG,
5440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            "Couldn't find '" + SOCKET_NAME_RIL
5450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            + "' socket; retrying after timeout");
5460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    }
5470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    try {
5490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        Thread.sleep(SOCKET_OPEN_RETRY_MILLIS);
5500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    } catch (InterruptedException er) {
5510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    }
5520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    retryCount++;
5540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    continue;
5550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
5560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                retryCount = 0;
5580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                mSocket = s;
560fa4fd4721082689c4b276f67b845e7be249cb8daWink Saville                Rlog.i(RILJ_LOG_TAG, "Connected to '" + SOCKET_NAME_RIL + "' socket");
5610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                int length = 0;
5630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                try {
5640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    InputStream is = mSocket.getInputStream();
5650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    for (;;) {
5670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        Parcel p;
5680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        length = readRilMessage(is, buffer);
5700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        if (length < 0) {
5720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            // End-of-stream reached
5730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            break;
5740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        }
5750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        p = Parcel.obtain();
5770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        p.unmarshall(buffer, 0, length);
5780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        p.setDataPosition(0);
5790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
580fa4fd4721082689c4b276f67b845e7be249cb8daWink Saville                        //Rlog.v(RILJ_LOG_TAG, "Read packet: " + length + " bytes");
5810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        processResponse(p);
5830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        p.recycle();
5840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    }
5850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                } catch (java.io.IOException ex) {
586fa4fd4721082689c4b276f67b845e7be249cb8daWink Saville                    Rlog.i(RILJ_LOG_TAG, "'" + SOCKET_NAME_RIL + "' socket closed",
5870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                          ex);
5880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                } catch (Throwable tr) {
589fa4fd4721082689c4b276f67b845e7be249cb8daWink Saville                    Rlog.e(RILJ_LOG_TAG, "Uncaught exception read length=" + length +
5900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        "Exception:" + tr.toString());
5910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
5920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
593fa4fd4721082689c4b276f67b845e7be249cb8daWink Saville                Rlog.i(RILJ_LOG_TAG, "Disconnected from '" + SOCKET_NAME_RIL
5940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                      + "' socket");
5950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                setRadioState (RadioState.RADIO_UNAVAILABLE);
5970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                try {
5990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mSocket.close();
6000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                } catch (IOException ex) {
6010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
6020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                mSocket = null;
6040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                RILRequest.resetSerial();
6050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                // Clear request list on close
607892e1fecf3c3736c4c04cf219d01034f71307065Robert Greenwalt                clearRequestList(RADIO_NOT_AVAILABLE, false);
6080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }} catch (Throwable tr) {
609fa4fd4721082689c4b276f67b845e7be249cb8daWink Saville                Rlog.e(RILJ_LOG_TAG,"Uncaught exception", tr);
6100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
6110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            /* We're disconnected so we don't know the ril version */
6130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            notifyRegistrantsRilConnectionChanged(-1);
6140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
6150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
6160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    //***** Constructors
6200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public RIL(Context context, int preferredNetworkType, int cdmaSubscription) {
6220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        super(context);
6230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) {
6240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            riljLog("RIL(context, preferredNetworkType=" + preferredNetworkType +
6250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    " cdmaSubscription=" + cdmaSubscription + ")");
6260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
6270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mCdmaSubscription  = cdmaSubscription;
6280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mPreferredNetworkType = preferredNetworkType;
6290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mPhoneType = RILConstants.NO_PHONE;
6300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
632fa4fd4721082689c4b276f67b845e7be249cb8daWink Saville        mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, RILJ_LOG_TAG);
6330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mWakeLock.setReferenceCounted(false);
6340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mWakeLockTimeout = SystemProperties.getInt(TelephonyProperties.PROPERTY_WAKE_LOCK_TIMEOUT,
6350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                DEFAULT_WAKE_LOCK_TIMEOUT);
6360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mRequestMessagesPending = 0;
6370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mRequestMessagesWaiting = 0;
6380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mSenderThread = new HandlerThread("RILSender");
6400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mSenderThread.start();
6410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        Looper looper = mSenderThread.getLooper();
6430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mSender = new RILSender(looper);
6440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        ConnectivityManager cm = (ConnectivityManager)context.getSystemService(
6460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                Context.CONNECTIVITY_SERVICE);
6470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (cm.isNetworkSupported(ConnectivityManager.TYPE_MOBILE) == false) {
6480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            riljLog("Not starting RILReceiver: wifi-only");
649c241cad754ecf27c96b09f1e585b8be341dfcb71Alex Yakavenka        } if (SystemProperties.getBoolean("ro.radio.noril", false)) {
650c241cad754ecf27c96b09f1e585b8be341dfcb71Alex Yakavenka            riljLog("Not starting RILReceiver: basebandless target");
6510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else {
6520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            riljLog("Starting RILReceiver");
6530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            mReceiver = new RILReceiver();
6540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            mReceiverThread = new Thread(mReceiver, "RILReceiver");
6550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            mReceiverThread.start();
6560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            IntentFilter filter = new IntentFilter();
6580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            filter.addAction(Intent.ACTION_SCREEN_ON);
6590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            filter.addAction(Intent.ACTION_SCREEN_OFF);
6600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            context.registerReceiver(mIntentReceiver, filter);
6610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
6620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
6630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    //***** CommandsInterface implementation
6650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
666cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
6670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void getVoiceRadioTechnology(Message result) {
6680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_VOICE_RADIO_TECH, result);
6690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
6710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
6730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
6740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override public void
6770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    setOnNITZTime(Handler h, int what, Object obj) {
6780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        super.setOnNITZTime(h, what, obj);
6790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // Send the last NITZ time if we have it
6810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (mLastNITZTimeInfo != null) {
6820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            mNITZTimeRegistrant
6830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                .notifyRegistrant(
6840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    new AsyncResult (null, mLastNITZTimeInfo, null));
6850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            mLastNITZTimeInfo = null;
6860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
6870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
6880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
689cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
6900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
6910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    getIccCardStatus(Message result) {
6920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //Note: This RIL request has not been renamed to ICC,
6930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //       but this request is also valid for SIM and RUIM
6940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_GET_SIM_STATUS, result);
6950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
6970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
6990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
7000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override public void
7020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    supplyIccPin(String pin, Message result) {
7030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        supplyIccPinForApp(pin, null, result);
7040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
7050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override public void
7070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    supplyIccPinForApp(String pin, String aid, Message result) {
7080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //Note: This RIL request has not been renamed to ICC,
7090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //       but this request is also valid for SIM and RUIM
7100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_ENTER_SIM_PIN, result);
7110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
7130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
71422d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(2);
71522d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(pin);
71622d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(aid);
7170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
7190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
7200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override public void
7220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    supplyIccPuk(String puk, String newPin, Message result) {
7230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        supplyIccPukForApp(puk, newPin, null, result);
7240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
7250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override public void
7270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    supplyIccPukForApp(String puk, String newPin, String aid, Message result) {
7280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //Note: This RIL request has not been renamed to ICC,
7290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //       but this request is also valid for SIM and RUIM
7300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_ENTER_SIM_PUK, result);
7310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
7330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
73422d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(3);
73522d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(puk);
73622d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(newPin);
73722d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(aid);
7380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
7400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
7410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override public void
7430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    supplyIccPin2(String pin, Message result) {
7440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        supplyIccPin2ForApp(pin, null, result);
7450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
7460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override public void
7480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    supplyIccPin2ForApp(String pin, String aid, Message result) {
7490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //Note: This RIL request has not been renamed to ICC,
7500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //       but this request is also valid for SIM and RUIM
7510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_ENTER_SIM_PIN2, result);
7520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
7540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
75522d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(2);
75622d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(pin);
75722d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(aid);
7580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
7600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
7610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override public void
7630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    supplyIccPuk2(String puk2, String newPin2, Message result) {
7640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        supplyIccPuk2ForApp(puk2, newPin2, null, result);
7650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
7660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override public void
7680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    supplyIccPuk2ForApp(String puk, String newPin2, String aid, Message result) {
7690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //Note: This RIL request has not been renamed to ICC,
7700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //       but this request is also valid for SIM and RUIM
7710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_ENTER_SIM_PUK2, result);
7720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
7740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
77522d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(3);
77622d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(puk);
77722d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(newPin2);
77822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(aid);
7790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
7810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
7820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override public void
7840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    changeIccPin(String oldPin, String newPin, Message result) {
7850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        changeIccPinForApp(oldPin, newPin, null, result);
7860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
7870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override public void
7890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    changeIccPinForApp(String oldPin, String newPin, String aid, Message result) {
7900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //Note: This RIL request has not been renamed to ICC,
7910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //       but this request is also valid for SIM and RUIM
7920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CHANGE_SIM_PIN, result);
7930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
7950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
79622d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(3);
79722d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(oldPin);
79822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(newPin);
79922d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(aid);
8000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
8020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
8030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override public void
8050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    changeIccPin2(String oldPin2, String newPin2, Message result) {
8060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        changeIccPin2ForApp(oldPin2, newPin2, null, result);
8070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
8080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override public void
8100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    changeIccPin2ForApp(String oldPin2, String newPin2, String aid, Message result) {
8110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //Note: This RIL request has not been renamed to ICC,
8120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //       but this request is also valid for SIM and RUIM
8130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CHANGE_SIM_PIN2, result);
8140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
8160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
81722d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(3);
81822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(oldPin2);
81922d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(newPin2);
82022d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(aid);
8210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
8230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
8240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
825cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
8260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
8270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    changeBarringPassword(String facility, String oldPwd, String newPwd, Message result) {
8280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CHANGE_BARRING_PASSWORD, result);
8290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
8310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
83222d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(3);
83322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(facility);
83422d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(oldPwd);
83522d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(newPwd);
8360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
8380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
8390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
840cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
8410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
8420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    supplyNetworkDepersonalization(String netpin, Message result) {
8430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_ENTER_NETWORK_DEPERSONALIZATION, result);
8440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
8460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
84722d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(1);
84822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(netpin);
8490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
8510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
8520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
853cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
8540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
8550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    getCurrentCalls (Message result) {
8560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_GET_CURRENT_CALLS, result);
8570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
8590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
8610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
8620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
863cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
8640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Deprecated public void
8650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    getPDPContextList(Message result) {
8660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        getDataCallList(result);
8670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
8680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
869cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
8700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
8710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    getDataCallList(Message result) {
8720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_DATA_CALL_LIST, result);
8730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
8750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
8770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
8780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
879cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
8800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
8810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    dial (String address, int clirMode, Message result) {
8820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        dial(address, clirMode, null, result);
8830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
8840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
885cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
8860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
8870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    dial(String address, int clirMode, UUSInfo uusInfo, Message result) {
8880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_DIAL, result);
8890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
89022d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(address);
89122d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(clirMode);
8920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (uusInfo == null) {
89422d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville            rr.mParcel.writeInt(0); // UUS information is absent
8950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else {
89622d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville            rr.mParcel.writeInt(1); // UUS information is present
89722d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville            rr.mParcel.writeInt(uusInfo.getType());
89822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville            rr.mParcel.writeInt(uusInfo.getDcs());
89922d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville            rr.mParcel.writeByteArray(uusInfo.getUserData());
9000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
9010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
9030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
9050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
9060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
907cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
9080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
9090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    getIMSI(Message result) {
9100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        getIMSIForApp(null, result);
9110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
9120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
913cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
9140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
9150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    getIMSIForApp(String aid, Message result) {
9160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_GET_IMSI, result);
9170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
91822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(1);
91922d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(aid);
9200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() +
9220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                              "> getIMSI: " + requestToString(rr.mRequest)
9230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                              + " aid: " + aid);
9240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
9260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
9270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
928cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
9290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
9300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    getIMEI(Message result) {
9310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_GET_IMEI, result);
9320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
9340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
9360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
9370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
938cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
9390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
9400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    getIMEISV(Message result) {
9410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_GET_IMEISV, result);
9420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
9440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
9460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
9470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
949cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
9500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
9510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    hangupConnection (int gsmIndex, Message result) {
9520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog("hangupConnection: gsmIndex=" + gsmIndex);
9530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_HANGUP, result);
9550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " " +
9570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                gsmIndex);
9580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
95922d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(1);
96022d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(gsmIndex);
9610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
9630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
9640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
965cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
9660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
9670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    hangupWaitingOrBackground (Message result) {
9680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_HANGUP_WAITING_OR_BACKGROUND,
9690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                        result);
9700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
9720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
9740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
9750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
976cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
9770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
9780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    hangupForegroundResumeBackground (Message result) {
9790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
9800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(
9810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        RIL_REQUEST_HANGUP_FOREGROUND_RESUME_BACKGROUND,
9820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                        result);
9830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
9840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
9860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
9870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
988cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
9890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
9900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    switchWaitingOrHoldingAndActive (Message result) {
9910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
9920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(
9930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        RIL_REQUEST_SWITCH_WAITING_OR_HOLDING_AND_ACTIVE,
9940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                        result);
9950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
9960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
9980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
9990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1000cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
10010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
10020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    conference (Message result) {
10030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
10040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_CONFERENCE, result);
10050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
10060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
10070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
10080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
10090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
10100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
10110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1012cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
10130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void setPreferredVoicePrivacy(boolean enable, Message result) {
10140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CDMA_SET_PREFERRED_VOICE_PRIVACY_MODE,
10150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                result);
10160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
101722d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(1);
101822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(enable ? 1:0);
10190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
10200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
10210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
10220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1023cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
10240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void getPreferredVoicePrivacy(Message result) {
10250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CDMA_QUERY_PREFERRED_VOICE_PRIVACY_MODE,
10260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                result);
10270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
10280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
10290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1030cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
10310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
10320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    separateConnection (int gsmIndex, Message result) {
10330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
10340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_SEPARATE_CONNECTION, result);
10350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
10360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
10370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            + " " + gsmIndex);
10380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
103922d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(1);
104022d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(gsmIndex);
10410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
10420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
10430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
10440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1045cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
10460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
10470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    acceptCall (Message result) {
10480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
10490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_ANSWER, result);
10500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
10510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
10520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
10530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
10540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
10550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1056cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
10570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
10580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    rejectCall (Message result) {
10590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
10600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_UDUB, result);
10610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
10620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
10630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
10640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
10650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
10660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1067cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
10680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
10690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    explicitCallTransfer (Message result) {
10700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
10710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_EXPLICIT_CALL_TRANSFER, result);
10720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
10730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
10740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
10750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
10760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
10770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1078cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
10790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
10800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    getLastCallFailCause (Message result) {
10810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
10820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_LAST_CALL_FAIL_CAUSE, result);
10830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
10840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
10850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
10860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
10870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
10880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
10890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
10900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @deprecated
10910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
1092cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Deprecated
1093cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
10940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
10950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    getLastPdpFailCause (Message result) {
10960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        getLastDataCallFailCause (result);
10970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
10980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
10990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
11000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * The preferred new alternative to getLastPdpFailCause
11010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
1102cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
11030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
11040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    getLastDataCallFailCause (Message result) {
11050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
11060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_LAST_DATA_CALL_FAIL_CAUSE, 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    setMute (boolean enableMute, Message response) {
11160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
11170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_SET_MUTE, response);
11180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
11200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            + " " + enableMute);
11210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
112222d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(1);
112322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(enableMute ? 1 : 0);
11240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
11260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
11270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1128cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
11290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
11300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    getMute (Message response) {
11310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
11320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_GET_MUTE, response);
11330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
11350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
11370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
11380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1139cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
11400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
11410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    getSignalStrength (Message result) {
11420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
11430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_SIGNAL_STRENGTH, result);
11440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
11460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
11480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
11490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1150cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
11510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
11520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    getVoiceRegistrationState (Message result) {
11530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
11540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_VOICE_REGISTRATION_STATE, result);
11550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
11570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
11590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
11600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1161cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
11620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
11630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    getDataRegistrationState (Message result) {
11640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
11650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_DATA_REGISTRATION_STATE, result);
11660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
11680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
11700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
11710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1172cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
11730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
11740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    getOperator(Message result) {
11750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
11760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_OPERATOR, result);
11770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
11790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
11810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
11820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1183cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
11840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
11850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    sendDtmf(char c, Message result) {
11860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
11870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_DTMF, result);
11880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
11900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
119122d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(Character.toString(c));
11920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
11940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
11950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1196cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
11970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
11980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    startDtmf(char c, Message result) {
11990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
12000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_DTMF_START, result);
12010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
12020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
12030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
120422d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(Character.toString(c));
12050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
12060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
12070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
12080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1209cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
12100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
12110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    stopDtmf(Message result) {
12120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
12130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_DTMF_STOP, result);
12140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
12150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
12160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
12170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
12180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
12190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1220cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
12210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
12220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    sendBurstDtmf(String dtmfString, int on, int off, Message result) {
12230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CDMA_BURST_DTMF, result);
12240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
122522d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(3);
122622d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(dtmfString);
122722d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(Integer.toString(on));
122822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(Integer.toString(off));
12290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
12300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
12310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + " : " + dtmfString);
12320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
12330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
12340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
12350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1236cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
12370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
12380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    sendSMS (String smscPDU, String pdu, Message result) {
12390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
12400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_SEND_SMS, result);
12410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
124222d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(2);
124322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(smscPDU);
124422d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(pdu);
12450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
12460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
12470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
12480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
12490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
12500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1251cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
12520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
12530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    sendCdmaSms(byte[] pdu, Message result) {
12540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int address_nbr_of_digits;
12550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int subaddr_nbr_of_digits;
12560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int bearerDataLength;
12570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        ByteArrayInputStream bais = new ByteArrayInputStream(pdu);
12580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        DataInputStream dis = new DataInputStream(bais);
12590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
12600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
12610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_CDMA_SEND_SMS, result);
12620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
12630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        try {
126422d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville            rr.mParcel.writeInt(dis.readInt()); //teleServiceId
126522d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville            rr.mParcel.writeByte((byte) dis.readInt()); //servicePresent
126622d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville            rr.mParcel.writeInt(dis.readInt()); //serviceCategory
126722d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville            rr.mParcel.writeInt(dis.read()); //address_digit_mode
126822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville            rr.mParcel.writeInt(dis.read()); //address_nbr_mode
126922d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville            rr.mParcel.writeInt(dis.read()); //address_ton
127022d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville            rr.mParcel.writeInt(dis.read()); //address_nbr_plan
12710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            address_nbr_of_digits = (byte) dis.read();
127222d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville            rr.mParcel.writeByte((byte) address_nbr_of_digits);
12730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            for(int i=0; i < address_nbr_of_digits; i++){
127422d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville                rr.mParcel.writeByte(dis.readByte()); // address_orig_bytes[i]
12750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
127622d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville            rr.mParcel.writeInt(dis.read()); //subaddressType
127722d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville            rr.mParcel.writeByte((byte) dis.read()); //subaddr_odd
12780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            subaddr_nbr_of_digits = (byte) dis.read();
127922d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville            rr.mParcel.writeByte((byte) subaddr_nbr_of_digits);
12800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            for(int i=0; i < subaddr_nbr_of_digits; i++){
128122d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville                rr.mParcel.writeByte(dis.readByte()); //subaddr_orig_bytes[i]
12820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
12830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
12840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            bearerDataLength = dis.read();
128522d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville            rr.mParcel.writeInt(bearerDataLength);
12860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            for(int i=0; i < bearerDataLength; i++){
128722d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville                rr.mParcel.writeByte(dis.readByte()); //bearerData[i]
12880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
12890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }catch (IOException ex){
12900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (RILJ_LOGD) riljLog("sendSmsCdma: conversion from input stream to object failed: "
12910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    + ex);
12920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
12930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
12940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
12950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
12960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
12970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
12980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1299cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
13000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void deleteSmsOnSim(int index, Message response) {
13010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_DELETE_SMS_ON_SIM,
13020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                response);
13030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
130422d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(1);
130522d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(index);
13060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1307cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville        if (RILJ_LOGV) riljLog(rr.serialString() + "> "
1308cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville                + requestToString(rr.mRequest)
1309cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville                + " " + index);
13100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
13110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
13120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
13130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1314cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
13150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void deleteSmsOnRuim(int index, Message response) {
13160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CDMA_DELETE_SMS_ON_RUIM,
13170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                response);
13180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
131922d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(1);
132022d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(index);
13210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1322cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville        if (RILJ_LOGV) riljLog(rr.serialString() + "> "
1323cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville                + requestToString(rr.mRequest)
1324cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville                + " " + index);
13250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
13260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
13270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
13280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1329cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
13300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void writeSmsToSim(int status, String smsc, String pdu, Message response) {
13310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        status = translateStatus(status);
13320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
13330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_WRITE_SMS_TO_SIM,
13340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                response);
13350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
133622d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(status);
133722d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(pdu);
133822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(smsc);
13390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1340cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville        if (RILJ_LOGV) riljLog(rr.serialString() + "> "
1341cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville                + requestToString(rr.mRequest)
1342cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville                + " " + status);
13430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
13440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
13450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
13460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1347cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
13480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void writeSmsToRuim(int status, String pdu, Message response) {
13490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        status = translateStatus(status);
13500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
13510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CDMA_WRITE_SMS_TO_RUIM,
13520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                response);
13530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
135422d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(status);
135522d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(pdu);
13560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1357cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville        if (RILJ_LOGV) riljLog(rr.serialString() + "> "
1358cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville                + requestToString(rr.mRequest)
1359cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville                + " " + status);
13600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
13610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
13620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
13630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
13640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
13650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  Translates EF_SMS status bits to a status value compatible with
13660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  SMS AT commands.  See TS 27.005 3.1.
13670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
13680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private int translateStatus(int status) {
13690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        switch(status & 0x7) {
13700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case SmsManager.STATUS_ON_ICC_READ:
13710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                return 1;
13720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case SmsManager.STATUS_ON_ICC_UNREAD:
13730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                return 0;
13740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case SmsManager.STATUS_ON_ICC_SENT:
13750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                return 3;
13760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case SmsManager.STATUS_ON_ICC_UNSENT:
13770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                return 2;
13780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
13790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
13800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // Default to READ.
13810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return 1;
13820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
13830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1384cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
13850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
13860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    setupDataCall(String radioTechnology, String profile, String apn,
13870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            String user, String password, String authType, String protocol,
13880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            Message result) {
13890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
13900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_SETUP_DATA_CALL, result);
13910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
139222d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(7);
13930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
139422d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(radioTechnology);
139522d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(profile);
139622d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(apn);
139722d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(user);
139822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(password);
139922d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(authType);
140022d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(protocol);
14010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
14020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> "
14030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + requestToString(rr.mRequest) + " " + radioTechnology + " "
14040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + profile + " " + apn + " " + user + " "
14050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + password + " " + authType + " " + protocol);
14060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
14070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
14080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
14090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1410cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
14110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
14120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    deactivateDataCall(int cid, int reason, Message result) {
14130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
14140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_DEACTIVATE_DATA_CALL, result);
14150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
141622d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(2);
141722d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(Integer.toString(cid));
141822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(Integer.toString(reason));
14190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
14200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " +
14210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                requestToString(rr.mRequest) + " " + cid + " " + reason);
14220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
14230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
14240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
14250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1426cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
14270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
14280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    setRadioPower(boolean on, Message result) {
14290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_RADIO_POWER, result);
14300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
143122d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(1);
143222d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(on ? 1 : 0);
14330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
14340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) {
14350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
14360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    + (on ? " on" : " off"));
14370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
14380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
14390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
14400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
14410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1442cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
14430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
14440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    setSuppServiceNotifications(boolean enable, Message result) {
14450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
14460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_SET_SUPP_SVC_NOTIFICATION, result);
14470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
144822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(1);
144922d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(enable ? 1 : 0);
14500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
14510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> "
14520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + requestToString(rr.mRequest));
14530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
14540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
14550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
14560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1457cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
14580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
14590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    acknowledgeLastIncomingGsmSms(boolean success, int cause, Message result) {
14600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
14610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_SMS_ACKNOWLEDGE, result);
14620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
146322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(2);
146422d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(success ? 1 : 0);
146522d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(cause);
14660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
14670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
14680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + " " + success + " " + cause);
14690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
14700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
14710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
14720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1473cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
14740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
14750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    acknowledgeLastIncomingCdmaSms(boolean success, int cause, Message result) {
14760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
14770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_CDMA_SMS_ACKNOWLEDGE, result);
14780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
147922d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(success ? 0 : 1); //RIL_CDMA_SMS_ErrorClass
14800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // cause code according to X.S004-550E
148122d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(cause);
14820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
14830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
14840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + " " + success + " " + cause);
14850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
14860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
14870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
14880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1489cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
14900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
14910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    acknowledgeIncomingGsmSmsWithPdu(boolean success, String ackPdu, Message result) {
14920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
14930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_ACKNOWLEDGE_INCOMING_GSM_SMS_WITH_PDU, result);
14940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
149522d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(2);
149622d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(success ? "1" : "0");
149722d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(ackPdu);
14980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
14990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
15000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + ' ' + success + " [" + ackPdu + ']');
15010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
15020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
15030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
15040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1505cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
15060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
15070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    iccIO (int command, int fileid, String path, int p1, int p2, int p3,
15080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            String data, String pin2, Message result) {
15090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        iccIOForApp(command, fileid, path, p1, p2, p3, data, pin2, null, result);
15100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1511cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
15120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
15130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    iccIOForApp (int command, int fileid, String path, int p1, int p2, int p3,
15140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            String data, String pin2, String aid, Message result) {
15150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //Note: This RIL request has not been renamed to ICC,
15160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //       but this request is also valid for SIM and RUIM
15170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
15180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_SIM_IO, result);
15190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
152022d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(command);
152122d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(fileid);
152222d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(path);
152322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(p1);
152422d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(p2);
152522d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(p3);
152622d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(data);
152722d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(pin2);
152822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(aid);
15290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
15300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> iccIO: "
15310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + requestToString(rr.mRequest)
15320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + " 0x" + Integer.toHexString(command)
15330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + " 0x" + Integer.toHexString(fileid) + " "
15340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + " path: " + path + ","
15350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + p1 + "," + p2 + "," + p3
15360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + " aid: " + aid);
15370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
15380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
15390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
15400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1541cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
15420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
15430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    getCLIR(Message result) {
15440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
15450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_GET_CLIR, result);
15460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
15470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
15480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
15490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
15500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
15510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1552cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
15530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
15540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    setCLIR(int clirMode, Message result) {
15550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
15560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_SET_CLIR, result);
15570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
15580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // count ints
155922d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(1);
15600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
156122d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(clirMode);
15620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
15630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
15640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    + " " + clirMode);
15650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
15660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
15670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
15680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1569cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
15700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
15710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    queryCallWaiting(int serviceClass, Message response) {
15720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
15730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_QUERY_CALL_WAITING, response);
15740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
157522d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(1);
157622d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(serviceClass);
15770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
15780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
15790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    + " " + serviceClass);
15800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
15810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
15820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
15830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1584cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
15850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
15860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    setCallWaiting(boolean enable, int serviceClass, Message response) {
15870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
15880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_SET_CALL_WAITING, response);
15890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
159022d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(2);
159122d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(enable ? 1 : 0);
159222d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(serviceClass);
15930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
15940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
15950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + " " + enable + ", " + serviceClass);
15960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
15970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
15980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
15990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1600cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
16010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
16020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    setNetworkSelectionModeAutomatic(Message response) {
16030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
16040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_SET_NETWORK_SELECTION_AUTOMATIC,
16050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                    response);
16060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
16070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
16080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
16090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
16100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
16110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1612cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
16130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
16140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    setNetworkSelectionModeManual(String operatorNumeric, Message response) {
16150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
16160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_SET_NETWORK_SELECTION_MANUAL,
16170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                    response);
16180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
16190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
16200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    + " " + operatorNumeric);
16210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
162222d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(operatorNumeric);
16230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
16240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
16250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
16260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1627cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
16280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
16290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    getNetworkSelectionMode(Message response) {
16300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
16310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_QUERY_NETWORK_SELECTION_MODE,
16320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                    response);
16330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
16340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
16350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
16360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
16370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
16380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1639cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
16400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
16410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    getAvailableNetworks(Message response) {
16420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
16430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_QUERY_AVAILABLE_NETWORKS,
16440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                    response);
16450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
16460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
16470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
16480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
16490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
16500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1651cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
16520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
16530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    setCallForward(int action, int cfReason, int serviceClass,
16540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                String number, int timeSeconds, Message response) {
16550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
16560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_SET_CALL_FORWARD, response);
16570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
165822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(action);
165922d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(cfReason);
166022d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(serviceClass);
166122d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(PhoneNumberUtils.toaFromString(number));
166222d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(number);
166322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt (timeSeconds);
16640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
16650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
16660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    + " " + action + " " + cfReason + " " + serviceClass
16670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    + timeSeconds);
16680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
16690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
16700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
16710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1672cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
16730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
16740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    queryCallForwardStatus(int cfReason, int serviceClass,
16750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                String number, Message response) {
16760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
16770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            = RILRequest.obtain(RIL_REQUEST_QUERY_CALL_FORWARD_STATUS, response);
16780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
167922d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(2); // 2 is for query action, not in used anyway
168022d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(cfReason);
168122d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(serviceClass);
168222d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(PhoneNumberUtils.toaFromString(number));
168322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(number);
168422d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt (0);
16850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
16860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
16870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + " " + cfReason + " " + serviceClass);
16880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
16890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
16900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
16910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1692cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
16930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
16940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    queryCLIP(Message response) {
16950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
16960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            = RILRequest.obtain(RIL_REQUEST_QUERY_CLIP, response);
16970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
16980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
16990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
17000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
17010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
17020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
17030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1704cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
17050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
17060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    getBasebandVersion (Message response) {
17070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
17080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_BASEBAND_VERSION, response);
17090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
17100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
17110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
17120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
17130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
17140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
17150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override
17160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
17170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    queryFacilityLock(String facility, String password, int serviceClass,
17180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            Message response) {
17190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        queryFacilityLockForApp(facility, password, serviceClass, null, response);
17200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
17210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
17220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override
17230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
17240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    queryFacilityLockForApp(String facility, String password, int serviceClass, String appId,
17250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            Message response) {
17260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_QUERY_FACILITY_LOCK, response);
17270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
172888e9c9700fbb6119c2564fb7173821c84b360d07Abhishek Adappa        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
172988e9c9700fbb6119c2564fb7173821c84b360d07Abhishek Adappa                                                 + " [" + facility + " " + serviceClass
173088e9c9700fbb6119c2564fb7173821c84b360d07Abhishek Adappa                                                 + " " + appId + "]");
17310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
17320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // count strings
173322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(4);
17340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
173522d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(facility);
173622d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(password);
17370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
173822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(Integer.toString(serviceClass));
173922d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(appId);
17400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
17410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
17420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
17430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
17440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override
17450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
17460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    setFacilityLock (String facility, boolean lockState, String password,
17470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        int serviceClass, Message response) {
17480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        setFacilityLockForApp(facility, lockState, password, serviceClass, null, response);
17490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
17500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
17510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override
17520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
17530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    setFacilityLockForApp(String facility, boolean lockState, String password,
17540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        int serviceClass, String appId, Message response) {
17550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String lockString;
17560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville         RILRequest rr
17570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_SET_FACILITY_LOCK, response);
17580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
175988e9c9700fbb6119c2564fb7173821c84b360d07Abhishek Adappa        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
176088e9c9700fbb6119c2564fb7173821c84b360d07Abhishek Adappa                                                        + " [" + facility + " " + lockState
176188e9c9700fbb6119c2564fb7173821c84b360d07Abhishek Adappa                                                        + " " + serviceClass + " " + appId + "]");
17620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
17630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // count strings
176422d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(5);
17650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
176622d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(facility);
17670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        lockString = (lockState)?"1":"0";
176822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(lockString);
176922d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(password);
177022d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(Integer.toString(serviceClass));
177122d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(appId);
17720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
17730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
17740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
17750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
17760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1777cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
17780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
17790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    sendUSSD (String ussdString, Message response) {
17800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
17810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_SEND_USSD, response);
17820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
178372000e2c06bbee97d5ce31c4f66befab8057cb71Cuihtlauac ALVARADO        if (RILJ_LOGD) {
178472000e2c06bbee97d5ce31c4f66befab8057cb71Cuihtlauac ALVARADO            String logUssdString = "*******";
178572000e2c06bbee97d5ce31c4f66befab8057cb71Cuihtlauac ALVARADO            if (RILJ_LOGV) logUssdString = ussdString;
178672000e2c06bbee97d5ce31c4f66befab8057cb71Cuihtlauac ALVARADO            riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
178772000e2c06bbee97d5ce31c4f66befab8057cb71Cuihtlauac ALVARADO                                   + " " + logUssdString);
178872000e2c06bbee97d5ce31c4f66befab8057cb71Cuihtlauac ALVARADO        }
17890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
179022d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(ussdString);
17910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
17920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
17930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
17940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
17950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // inherited javadoc suffices
1796cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
17970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void cancelPendingUssd (Message response) {
17980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
17990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_CANCEL_USSD, response);
18000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
18010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString()
18020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + "> " + requestToString(rr.mRequest));
18030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
18040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
18050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
18060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
18070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1808cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
18090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void resetRadio(Message result) {
18100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
18110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_RESET_RADIO, result);
18120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
18130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
18140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
18150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
18160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
18170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1818cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
18190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void invokeOemRilRequestRaw(byte[] data, Message response) {
18200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
18210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_OEM_HOOK_RAW, response);
18220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
18230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
18240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville               + "[" + IccUtils.bytesToHexString(data) + "]");
18250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
182622d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeByteArray(data);
18270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
18280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
18290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
18300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
18310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1832cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
18330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void invokeOemRilRequestStrings(String[] strings, Message response) {
18340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
18350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_OEM_HOOK_STRINGS, response);
18360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
18370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
18380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
183922d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeStringArray(strings);
18400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
18410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
18420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
18430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
18440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     /**
18450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Assign a specified band for RF configuration.
18460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
18470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @param bandMode one of BM_*_BAND
18480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @param response is callback message
18490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
1850cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
18510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void setBandMode (int bandMode, Message response) {
18520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
18530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_SET_BAND_MODE, response);
18540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
185522d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(1);
185622d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(bandMode);
18570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
18580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
18590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                 + " " + bandMode);
18600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
18610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
18620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     }
18630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
18640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
18650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Query the list of band mode supported by RF.
18660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
18670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @param response is callback message
18680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *        ((AsyncResult)response.obj).result  is an int[] with every
18690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *        element representing one avialable BM_*_BAND
18700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
1871cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
18720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void queryAvailableBandMode (Message response) {
18730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
18740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_QUERY_AVAILABLE_BAND_MODE,
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
18820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
18830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
18840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
1885cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
18860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void sendTerminalResponse(String contents, Message response) {
18870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(
18880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                RILConstants.RIL_REQUEST_STK_SEND_TERMINAL_RESPONSE, response);
18890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
18900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
18910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
189222d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(contents);
18930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
18940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
18950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
18960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
18970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
18980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
1899cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
19000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void sendEnvelope(String contents, Message response) {
19010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(
19020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                RILConstants.RIL_REQUEST_STK_SEND_ENVELOPE_COMMAND, response);
19030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
19040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
19050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
190622d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(contents);
19070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
19080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
19090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
19100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
19110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
19120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
1913cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
19140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void sendEnvelopeWithStatus(String contents, Message response) {
19150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(
19160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                RILConstants.RIL_REQUEST_STK_SEND_ENVELOPE_WITH_STATUS, response);
19170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
19180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
19190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + '[' + contents + ']');
19200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
192122d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(contents);
19220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
19230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
19240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
19250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
19260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
19270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
1928cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
19290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void handleCallSetupRequestFromSim(
19300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            boolean accept, Message response) {
19310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
19320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(
19330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            RILConstants.RIL_REQUEST_STK_HANDLE_CALL_SETUP_REQUESTED_FROM_SIM,
19340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            response);
19350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
19360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
19370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
19380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int[] param = new int[1];
19390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        param[0] = accept ? 1 : 0;
194022d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeIntArray(param);
19410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
19420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
19430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
19440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
19450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
19460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
19470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override
19480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void setCurrentPreferredNetworkType() {
19490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog("setCurrentPreferredNetworkType: " + mSetPreferredNetworkType);
19500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        setPreferredNetworkType(mSetPreferredNetworkType, null);
19510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
19520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private int mSetPreferredNetworkType;
19530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
19540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
19550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
19560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
1957cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
19580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void setPreferredNetworkType(int networkType , Message response) {
19590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(
19600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                RILConstants.RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE, response);
19610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
196222d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(1);
196322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(networkType);
19640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
19650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mSetPreferredNetworkType = networkType;
19660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mPreferredNetworkType = networkType;
19670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
19680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
19690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + " : " + networkType);
19700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
19710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
19720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
19730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
19740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
19750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
19760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
1977cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
19780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void getPreferredNetworkType(Message response) {
19790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(
19800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                RILConstants.RIL_REQUEST_GET_PREFERRED_NETWORK_TYPE, response);
19810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
19820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
19830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
19840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
19850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
19860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
19870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
19880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
19890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
1990cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
19910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void getNeighboringCids(Message response) {
19920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(
19930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                RILConstants.RIL_REQUEST_GET_NEIGHBORING_CELL_IDS, response);
19940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
19950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
19960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
19970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
19980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
19990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
20000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
20010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
20020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
2003cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
20040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void setLocationUpdates(boolean enable, Message response) {
20050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_SET_LOCATION_UPDATES, response);
200622d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(1);
200722d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(enable ? 1 : 0);
20080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
20090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> "
20100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + requestToString(rr.mRequest) + ": " + enable);
20110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
20120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
20130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
20140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
20150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
20160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
20170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
2018cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
20190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void getSmscAddress(Message result) {
20200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_GET_SMSC_ADDRESS, result);
20210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
20220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
20230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
20240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
20250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
20260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
20270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
20280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
20290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
2030cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
20310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void setSmscAddress(String address, Message result) {
20320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_SET_SMSC_ADDRESS, result);
20330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
203422d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(address);
20350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
20360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
20370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + " : " + address);
20380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
20390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
20400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
20410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
20420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
20430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
20440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
2045cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
20460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void reportSmsMemoryStatus(boolean available, Message result) {
20470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_REPORT_SMS_MEMORY_STATUS, result);
204822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(1);
204922d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(available ? 1 : 0);
20500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
20510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> "
20520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + requestToString(rr.mRequest) + ": " + available);
20530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
20540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
20550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
20560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
20570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
20580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
20590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
2060cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
20610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void reportStkServiceIsRunning(Message result) {
20620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_REPORT_STK_SERVICE_IS_RUNNING, result);
20630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
20640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
20650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
20660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
20670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
20680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
20690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
20700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
20710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
2072cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
20730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void getGsmBroadcastConfig(Message response) {
20740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_GSM_GET_BROADCAST_CONFIG, response);
20750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
20760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
20770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
20780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
20790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
20800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
20810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
20820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
20830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
2084cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
20850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void setGsmBroadcastConfig(SmsBroadcastConfigInfo[] config, Message response) {
20860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_GSM_SET_BROADCAST_CONFIG, response);
20870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
20880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int numOfConfig = config.length;
208922d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(numOfConfig);
20900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
20910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        for(int i = 0; i < numOfConfig; i++) {
209222d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville            rr.mParcel.writeInt(config[i].getFromServiceId());
209322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville            rr.mParcel.writeInt(config[i].getToServiceId());
209422d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville            rr.mParcel.writeInt(config[i].getFromCodeScheme());
209522d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville            rr.mParcel.writeInt(config[i].getToCodeScheme());
209622d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville            rr.mParcel.writeInt(config[i].isSelected() ? 1 : 0);
20970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
20980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
20990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) {
21000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
21010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    + " with " + numOfConfig + " configs : ");
21020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            for (int i = 0; i < numOfConfig; i++) {
21030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                riljLog(config[i].toString());
21040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
21050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
21060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
21070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
21080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
21090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
21100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
21110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
21120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
2113cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
21140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void setGsmBroadcastActivation(boolean activate, Message response) {
21150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_GSM_BROADCAST_ACTIVATION, response);
21160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
211722d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(1);
211822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(activate ? 0 : 1);
21190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
21200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
21210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
21220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
21230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
21240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
21250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    //***** Private Methods
21260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
21270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private void sendScreenState(boolean on) {
21280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_SCREEN_STATE, null);
212922d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(1);
213022d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(on ? 1 : 0);
21310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
21320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString()
21330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + "> " + requestToString(rr.mRequest) + ": " + on);
21340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
21350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
21360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
21370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2138cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
21390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    protected void
21400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    onRadioAvailable() {
21410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // In case screen state was lost (due to process crash),
21420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // this ensures that the RIL knows the correct screen state.
21430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2144cf57b29a755b0249da687201bcc726941d37d42bBin Li        PowerManager pm = (PowerManager)mContext.getSystemService(Context.POWER_SERVICE);
2145cf57b29a755b0249da687201bcc726941d37d42bBin Li        sendScreenState(pm.isScreenOn());
21460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville   }
21470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
21480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private RadioState getRadioStateFromInt(int stateInt) {
21490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RadioState state;
21500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
21510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        /* RIL_RadioState ril.h */
21520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        switch(stateInt) {
21530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case 0: state = RadioState.RADIO_OFF; break;
21540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case 1: state = RadioState.RADIO_UNAVAILABLE; break;
21550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case 10: state = RadioState.RADIO_ON; break;
21560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
21570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            default:
21580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                throw new RuntimeException(
21590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            "Unrecognized RIL_RadioState: " + stateInt);
21600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
21610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return state;
21620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
21630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
21640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private void switchToRadioState(RadioState newState) {
21650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        setRadioState(newState);
21660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
21670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
21680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
21690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Holds a PARTIAL_WAKE_LOCK whenever
21700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * a) There is outstanding RIL request sent to RIL deamon and no replied
21710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * b) There is a request pending to be sent out.
21720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
21730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * There is a WAKE_LOCK_TIMEOUT to release the lock, though it shouldn't
21740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * happen often.
21750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
21760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
21770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private void
21780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    acquireWakeLock() {
21790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        synchronized (mWakeLock) {
21800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            mWakeLock.acquire();
21810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            mRequestMessagesPending++;
21820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
21830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            mSender.removeMessages(EVENT_WAKE_LOCK_TIMEOUT);
21840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            Message msg = mSender.obtainMessage(EVENT_WAKE_LOCK_TIMEOUT);
21850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            mSender.sendMessageDelayed(msg, mWakeLockTimeout);
21860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
21870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
21880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
21890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private void
21900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    releaseWakeLockIfDone() {
21910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        synchronized (mWakeLock) {
21920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (mWakeLock.isHeld() &&
21930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                (mRequestMessagesPending == 0) &&
21940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                (mRequestMessagesWaiting == 0)) {
21950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                mSender.removeMessages(EVENT_WAKE_LOCK_TIMEOUT);
21960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                mWakeLock.release();
21970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
21980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
21990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
22000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
22010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private void
22020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    send(RILRequest rr) {
22030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        Message msg;
22040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
22050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (mSocket == null) {
22060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            rr.onError(RADIO_NOT_AVAILABLE, null);
22070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            rr.release();
22080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            return;
22090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
22100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
22110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        msg = mSender.obtainMessage(EVENT_SEND, rr);
22120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
22130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        acquireWakeLock();
22140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
22150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        msg.sendToTarget();
22160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
22170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
22180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private void
22190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    processResponse (Parcel p) {
22200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int type;
22210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
22220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        type = p.readInt();
22230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
22240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (type == RESPONSE_UNSOLICITED) {
22250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            processUnsolicited (p);
22260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else if (type == RESPONSE_SOLICITED) {
22270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            processSolicited (p);
22280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
22290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
22300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        releaseWakeLockIfDone();
22310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
22320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
22330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
2234892e1fecf3c3736c4c04cf219d01034f71307065Robert Greenwalt     * Release each request in mRequestList then clear the list
22350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @param error is the RIL_Errno sent back
2236892e1fecf3c3736c4c04cf219d01034f71307065Robert Greenwalt     * @param loggable true means to print all requests in mRequestList
22370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
2238892e1fecf3c3736c4c04cf219d01034f71307065Robert Greenwalt    private void clearRequestList(int error, boolean loggable) {
22390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr;
2240892e1fecf3c3736c4c04cf219d01034f71307065Robert Greenwalt        synchronized (mRequestList) {
2241892e1fecf3c3736c4c04cf219d01034f71307065Robert Greenwalt            int count = mRequestList.size();
22420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (RILJ_LOGD && loggable) {
2243fa4fd4721082689c4b276f67b845e7be249cb8daWink Saville                Rlog.d(RILJ_LOG_TAG, "WAKE_LOCK_TIMEOUT " +
22440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        " mReqPending=" + mRequestMessagesPending +
22450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        " mRequestList=" + count);
22460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
22470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
22480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            for (int i = 0; i < count ; i++) {
2249892e1fecf3c3736c4c04cf219d01034f71307065Robert Greenwalt                rr = mRequestList.get(i);
22500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD && loggable) {
2251fa4fd4721082689c4b276f67b845e7be249cb8daWink Saville                    Rlog.d(RILJ_LOG_TAG, i + ": [" + rr.mSerial + "] " +
22520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            requestToString(rr.mRequest));
22530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
22540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                rr.onError(error, null);
22550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                rr.release();
22560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
2257892e1fecf3c3736c4c04cf219d01034f71307065Robert Greenwalt            mRequestList.clear();
22580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            mRequestMessagesWaiting = 0;
22590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
22600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
22610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
22620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private RILRequest findAndRemoveRequestFromList(int serial) {
2263892e1fecf3c3736c4c04cf219d01034f71307065Robert Greenwalt        synchronized (mRequestList) {
2264892e1fecf3c3736c4c04cf219d01034f71307065Robert Greenwalt            for (int i = 0, s = mRequestList.size() ; i < s ; i++) {
2265892e1fecf3c3736c4c04cf219d01034f71307065Robert Greenwalt                RILRequest rr = mRequestList.get(i);
22660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
22670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (rr.mSerial == serial) {
2268892e1fecf3c3736c4c04cf219d01034f71307065Robert Greenwalt                    mRequestList.remove(i);
22690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    if (mRequestMessagesWaiting > 0)
22700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        mRequestMessagesWaiting--;
22710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    return rr;
22720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
22730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
22740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
22750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
22760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return null;
22770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
22780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
22790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private void
22800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    processSolicited (Parcel p) {
22810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int serial, error;
22820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        boolean found = false;
22830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
22840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        serial = p.readInt();
22850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        error = p.readInt();
22860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
22870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr;
22880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
22890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr = findAndRemoveRequestFromList(serial);
22900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
22910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (rr == null) {
2292fa4fd4721082689c4b276f67b845e7be249cb8daWink Saville            Rlog.w(RILJ_LOG_TAG, "Unexpected solicited response! sn: "
22930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            + serial + " error: " + error);
22940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            return;
22950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
22960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
22970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        Object ret = null;
22980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
22990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (error == 0 || p.dataAvail() > 0) {
23000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            // either command succeeds or command fails but with data payload
23010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            try {switch (rr.mRequest) {
23020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            /*
23030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville cat libs/telephony/ril_commands.h \
23040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville | egrep "^ *{RIL_" \
23050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville | sed -re 's/\{([^,]+),[^,]+,([^}]+).+/case \1: ret = \2(p); break;/'
23060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville             */
23070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GET_SIM_STATUS: ret =  responseIccCardStatus(p); break;
23080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_ENTER_SIM_PIN: ret =  responseInts(p); break;
23090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_ENTER_SIM_PUK: ret =  responseInts(p); break;
23100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_ENTER_SIM_PIN2: ret =  responseInts(p); break;
23110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_ENTER_SIM_PUK2: ret =  responseInts(p); break;
23120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CHANGE_SIM_PIN: ret =  responseInts(p); break;
23130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CHANGE_SIM_PIN2: ret =  responseInts(p); break;
23140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_ENTER_NETWORK_DEPERSONALIZATION: ret =  responseInts(p); break;
23150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GET_CURRENT_CALLS: ret =  responseCallList(p); break;
23160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_DIAL: ret =  responseVoid(p); break;
23170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GET_IMSI: ret =  responseString(p); break;
23180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_HANGUP: ret =  responseVoid(p); break;
23190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_HANGUP_WAITING_OR_BACKGROUND: ret =  responseVoid(p); break;
23200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_HANGUP_FOREGROUND_RESUME_BACKGROUND: {
23210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mTestingEmergencyCall.getAndSet(false)) {
23220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    if (mEmergencyCallbackModeRegistrant != null) {
23230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        riljLog("testing emergency call, notify ECM Registrants");
23240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        mEmergencyCallbackModeRegistrant.notifyRegistrant();
23250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    }
23260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
23270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                ret =  responseVoid(p);
23280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
23290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
23300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SWITCH_WAITING_OR_HOLDING_AND_ACTIVE: ret =  responseVoid(p); break;
23310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CONFERENCE: ret =  responseVoid(p); break;
23320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_UDUB: ret =  responseVoid(p); break;
23330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_LAST_CALL_FAIL_CAUSE: ret =  responseInts(p); break;
23340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SIGNAL_STRENGTH: ret =  responseSignalStrength(p); break;
23350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_VOICE_REGISTRATION_STATE: ret =  responseStrings(p); break;
23360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_DATA_REGISTRATION_STATE: ret =  responseStrings(p); break;
23370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_OPERATOR: ret =  responseStrings(p); break;
23380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_RADIO_POWER: ret =  responseVoid(p); break;
23390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_DTMF: ret =  responseVoid(p); break;
23400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SEND_SMS: ret =  responseSMS(p); break;
23410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SEND_SMS_EXPECT_MORE: ret =  responseSMS(p); break;
23420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SETUP_DATA_CALL: ret =  responseSetupDataCall(p); break;
23430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SIM_IO: ret =  responseICC_IO(p); break;
23440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SEND_USSD: ret =  responseVoid(p); break;
23450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CANCEL_USSD: ret =  responseVoid(p); break;
23460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GET_CLIR: ret =  responseInts(p); break;
23470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_CLIR: ret =  responseVoid(p); break;
23480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_QUERY_CALL_FORWARD_STATUS: ret =  responseCallForward(p); break;
23490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_CALL_FORWARD: ret =  responseVoid(p); break;
23500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_QUERY_CALL_WAITING: ret =  responseInts(p); break;
23510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_CALL_WAITING: ret =  responseVoid(p); break;
23520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SMS_ACKNOWLEDGE: ret =  responseVoid(p); break;
23530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GET_IMEI: ret =  responseString(p); break;
23540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GET_IMEISV: ret =  responseString(p); break;
23550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_ANSWER: ret =  responseVoid(p); break;
23560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_DEACTIVATE_DATA_CALL: ret =  responseVoid(p); break;
23570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_QUERY_FACILITY_LOCK: ret =  responseInts(p); break;
23580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_FACILITY_LOCK: ret =  responseInts(p); break;
23590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CHANGE_BARRING_PASSWORD: ret =  responseVoid(p); break;
23600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_QUERY_NETWORK_SELECTION_MODE: ret =  responseInts(p); break;
23610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_NETWORK_SELECTION_AUTOMATIC: ret =  responseVoid(p); break;
23620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_NETWORK_SELECTION_MANUAL: ret =  responseVoid(p); break;
23630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_QUERY_AVAILABLE_NETWORKS : ret =  responseOperatorInfos(p); break;
23640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_DTMF_START: ret =  responseVoid(p); break;
23650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_DTMF_STOP: ret =  responseVoid(p); break;
23660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_BASEBAND_VERSION: ret =  responseString(p); break;
23670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SEPARATE_CONNECTION: ret =  responseVoid(p); break;
23680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_MUTE: ret =  responseVoid(p); break;
23690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GET_MUTE: ret =  responseInts(p); break;
23700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_QUERY_CLIP: ret =  responseInts(p); break;
23710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_LAST_DATA_CALL_FAIL_CAUSE: ret =  responseInts(p); break;
23720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_DATA_CALL_LIST: ret =  responseDataCallList(p); break;
23730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_RESET_RADIO: ret =  responseVoid(p); break;
23740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_OEM_HOOK_RAW: ret =  responseRaw(p); break;
23750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_OEM_HOOK_STRINGS: ret =  responseStrings(p); break;
23760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SCREEN_STATE: ret =  responseVoid(p); break;
23770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_SUPP_SVC_NOTIFICATION: ret =  responseVoid(p); break;
23780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_WRITE_SMS_TO_SIM: ret =  responseInts(p); break;
23790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_DELETE_SMS_ON_SIM: ret =  responseVoid(p); break;
23800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_BAND_MODE: ret =  responseVoid(p); break;
23810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_QUERY_AVAILABLE_BAND_MODE: ret =  responseInts(p); break;
23820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_STK_GET_PROFILE: ret =  responseString(p); break;
23830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_STK_SET_PROFILE: ret =  responseVoid(p); break;
23840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_STK_SEND_ENVELOPE_COMMAND: ret =  responseString(p); break;
23850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_STK_SEND_TERMINAL_RESPONSE: ret =  responseVoid(p); break;
23860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_STK_HANDLE_CALL_SETUP_REQUESTED_FROM_SIM: ret =  responseInts(p); break;
23870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_EXPLICIT_CALL_TRANSFER: ret =  responseVoid(p); break;
23880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE: ret =  responseVoid(p); break;
23890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GET_PREFERRED_NETWORK_TYPE: ret =  responseGetPreferredNetworkType(p); break;
23900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GET_NEIGHBORING_CELL_IDS: ret = responseCellList(p); break;
23910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_LOCATION_UPDATES: ret =  responseVoid(p); break;
23920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_SET_SUBSCRIPTION_SOURCE: ret =  responseVoid(p); break;
23930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_SET_ROAMING_PREFERENCE: ret =  responseVoid(p); break;
23940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_QUERY_ROAMING_PREFERENCE: ret =  responseInts(p); break;
23950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_TTY_MODE: ret =  responseVoid(p); break;
23960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_QUERY_TTY_MODE: ret =  responseInts(p); break;
23970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_SET_PREFERRED_VOICE_PRIVACY_MODE: ret =  responseVoid(p); break;
23980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_QUERY_PREFERRED_VOICE_PRIVACY_MODE: ret =  responseInts(p); break;
23990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_FLASH: ret =  responseVoid(p); break;
24000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_BURST_DTMF: ret =  responseVoid(p); break;
24010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_SEND_SMS: ret =  responseSMS(p); break;
24020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_SMS_ACKNOWLEDGE: ret =  responseVoid(p); break;
24030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GSM_GET_BROADCAST_CONFIG: ret =  responseGmsBroadcastConfig(p); break;
24040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GSM_SET_BROADCAST_CONFIG: ret =  responseVoid(p); break;
24050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GSM_BROADCAST_ACTIVATION: ret =  responseVoid(p); break;
24060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_GET_BROADCAST_CONFIG: ret =  responseCdmaBroadcastConfig(p); break;
24070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_SET_BROADCAST_CONFIG: ret =  responseVoid(p); break;
24080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_BROADCAST_ACTIVATION: ret =  responseVoid(p); break;
24090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_VALIDATE_AND_WRITE_AKEY: ret =  responseVoid(p); break;
24100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_SUBSCRIPTION: ret =  responseStrings(p); break;
24110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_WRITE_SMS_TO_RUIM: ret =  responseInts(p); break;
24120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_DELETE_SMS_ON_RUIM: ret =  responseVoid(p); break;
24130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_DEVICE_IDENTITY: ret =  responseStrings(p); break;
24140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GET_SMSC_ADDRESS: ret = responseString(p); break;
24150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_SMSC_ADDRESS: ret = responseVoid(p); break;
24160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_EXIT_EMERGENCY_CALLBACK_MODE: ret = responseVoid(p); break;
24170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_REPORT_SMS_MEMORY_STATUS: ret = responseVoid(p); break;
24180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_REPORT_STK_SERVICE_IS_RUNNING: ret = responseVoid(p); break;
24190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_GET_SUBSCRIPTION_SOURCE: ret =  responseInts(p); break;
24200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_ISIM_AUTHENTICATION: ret =  responseString(p); break;
24210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_ACKNOWLEDGE_INCOMING_GSM_SMS_WITH_PDU: ret = responseVoid(p); break;
24220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_STK_SEND_ENVELOPE_WITH_STATUS: ret = responseICC_IO(p); break;
24230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_VOICE_RADIO_TECH: ret = responseInts(p); break;
24245fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville            case RIL_REQUEST_GET_CELL_INFO_LIST: ret = responseCellInfoList(p); break;
24255fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville            case RIL_REQUEST_SET_UNSOL_CELL_INFO_LIST_RATE: ret = responseVoid(p); break;
24260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            default:
24270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                throw new RuntimeException("Unrecognized solicited response: " + rr.mRequest);
24280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            //break;
24290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }} catch (Throwable tr) {
24300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                // Exceptions here usually mean invalid RIL responses
24310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2432fa4fd4721082689c4b276f67b845e7be249cb8daWink Saville                Rlog.w(RILJ_LOG_TAG, rr.serialString() + "< "
24330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        + requestToString(rr.mRequest)
24340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        + " exception, possible invalid RIL response", tr);
24350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
24360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (rr.mResult != null) {
24370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    AsyncResult.forMessage(rr.mResult, null, tr);
24380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    rr.mResult.sendToTarget();
24390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
24400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                rr.release();
24410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                return;
24420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
24430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
24440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2445f860a3f42f87c9c8572623aff33349168d689477Wink Saville        // Here and below fake RIL_UNSOL_RESPONSE_SIM_STATUS_CHANGED, see b/7255789.
2446f860a3f42f87c9c8572623aff33349168d689477Wink Saville        // This is needed otherwise we don't automatically transition to the main lock
2447f860a3f42f87c9c8572623aff33349168d689477Wink Saville        // screen when the pin or puk is entered incorrectly.
2448be3dc4b04cd65e576d250cf68f310d47637167ffWink Saville        switch (rr.mRequest) {
2449be3dc4b04cd65e576d250cf68f310d47637167ffWink Saville            case RIL_REQUEST_ENTER_SIM_PUK:
2450be3dc4b04cd65e576d250cf68f310d47637167ffWink Saville            case RIL_REQUEST_ENTER_SIM_PUK2:
2451be3dc4b04cd65e576d250cf68f310d47637167ffWink Saville                if (mIccStatusChangedRegistrants != null) {
2452f860a3f42f87c9c8572623aff33349168d689477Wink Saville                    if (RILJ_LOGD) {
2453f860a3f42f87c9c8572623aff33349168d689477Wink Saville                        riljLog("ON enter sim puk fakeSimStatusChanged: reg count="
2454f860a3f42f87c9c8572623aff33349168d689477Wink Saville                                + mIccStatusChangedRegistrants.size());
2455f860a3f42f87c9c8572623aff33349168d689477Wink Saville                    }
2456be3dc4b04cd65e576d250cf68f310d47637167ffWink Saville                    mIccStatusChangedRegistrants.notifyRegistrants();
2457be3dc4b04cd65e576d250cf68f310d47637167ffWink Saville                }
2458be3dc4b04cd65e576d250cf68f310d47637167ffWink Saville                break;
2459be3dc4b04cd65e576d250cf68f310d47637167ffWink Saville        }
2460be3dc4b04cd65e576d250cf68f310d47637167ffWink Saville
24610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (error != 0) {
2462f860a3f42f87c9c8572623aff33349168d689477Wink Saville            switch (rr.mRequest) {
2463f860a3f42f87c9c8572623aff33349168d689477Wink Saville                case RIL_REQUEST_ENTER_SIM_PIN:
2464f860a3f42f87c9c8572623aff33349168d689477Wink Saville                case RIL_REQUEST_ENTER_SIM_PIN2:
2465f860a3f42f87c9c8572623aff33349168d689477Wink Saville                case RIL_REQUEST_CHANGE_SIM_PIN:
2466f860a3f42f87c9c8572623aff33349168d689477Wink Saville                case RIL_REQUEST_CHANGE_SIM_PIN2:
2467f860a3f42f87c9c8572623aff33349168d689477Wink Saville                case RIL_REQUEST_SET_FACILITY_LOCK:
2468f860a3f42f87c9c8572623aff33349168d689477Wink Saville                    if (mIccStatusChangedRegistrants != null) {
2469f860a3f42f87c9c8572623aff33349168d689477Wink Saville                        if (RILJ_LOGD) {
2470f860a3f42f87c9c8572623aff33349168d689477Wink Saville                            riljLog("ON some errors fakeSimStatusChanged: reg count="
2471f860a3f42f87c9c8572623aff33349168d689477Wink Saville                                    + mIccStatusChangedRegistrants.size());
2472f860a3f42f87c9c8572623aff33349168d689477Wink Saville                        }
2473f860a3f42f87c9c8572623aff33349168d689477Wink Saville                        mIccStatusChangedRegistrants.notifyRegistrants();
2474f860a3f42f87c9c8572623aff33349168d689477Wink Saville                    }
2475f860a3f42f87c9c8572623aff33349168d689477Wink Saville                    break;
2476f860a3f42f87c9c8572623aff33349168d689477Wink Saville            }
2477f860a3f42f87c9c8572623aff33349168d689477Wink Saville
24780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            rr.onError(error, ret);
24790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            rr.release();
24800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            return;
24810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
24820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
24830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "< " + requestToString(rr.mRequest)
24840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            + " " + retToString(rr.mRequest, ret));
24850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
24860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (rr.mResult != null) {
24870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            AsyncResult.forMessage(rr.mResult, ret, null);
24880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            rr.mResult.sendToTarget();
24890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
24900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
24910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.release();
24920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
24930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
24940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private String
24950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    retToString(int req, Object ret) {
24960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (ret == null) return "";
24970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        switch (req) {
24980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            // Don't log these return values, for privacy's sake.
24990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GET_IMSI:
25000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GET_IMEI:
25010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GET_IMEISV:
25020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (!RILJ_LOGV) {
25030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    // If not versbose logging just return and don't display IMSI and IMEI, IMEISV
25040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    return "";
25050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
25060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
25070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
25080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        StringBuilder sb;
25090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String s;
25100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int length;
25110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (ret instanceof int[]){
25120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            int[] intArray = (int[]) ret;
25130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            length = intArray.length;
25140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            sb = new StringBuilder("{");
25150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (length > 0) {
25160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                int i = 0;
25170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                sb.append(intArray[i++]);
25180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                while ( i < length) {
25190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    sb.append(", ").append(intArray[i++]);
25200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
25210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
25220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            sb.append("}");
25230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            s = sb.toString();
25240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else if (ret instanceof String[]) {
25250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            String[] strings = (String[]) ret;
25260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            length = strings.length;
25270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            sb = new StringBuilder("{");
25280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (length > 0) {
25290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                int i = 0;
25300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                sb.append(strings[i++]);
25310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                while ( i < length) {
25320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    sb.append(", ").append(strings[i++]);
25330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
25340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
25350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            sb.append("}");
25360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            s = sb.toString();
25370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }else if (req == RIL_REQUEST_GET_CURRENT_CALLS) {
25380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            ArrayList<DriverCall> calls = (ArrayList<DriverCall>) ret;
25390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            sb = new StringBuilder(" ");
25400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            for (DriverCall dc : calls) {
25410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                sb.append("[").append(dc).append("] ");
25420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
25430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            s = sb.toString();
25440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else if (req == RIL_REQUEST_GET_NEIGHBORING_CELL_IDS) {
25450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            ArrayList<NeighboringCellInfo> cells;
25460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            cells = (ArrayList<NeighboringCellInfo>) ret;
25470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            sb = new StringBuilder(" ");
25480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            for (NeighboringCellInfo cell : cells) {
25490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                sb.append(cell).append(" ");
25500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
25510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            s = sb.toString();
25520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else {
25530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            s = ret.toString();
25540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
25550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return s;
25560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
25570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
25580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private void
25590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    processUnsolicited (Parcel p) {
25600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int response;
25610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        Object ret;
25620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
25630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        response = p.readInt();
25640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
25650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        try {switch(response) {
25660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville/*
25670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville cat libs/telephony/ril_unsol_commands.h \
25680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville | egrep "^ *{RIL_" \
25690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville | sed -re 's/\{([^,]+),[^,]+,([^}]+).+/case \1: \2(rr, p); break;/'
25700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville*/
25710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
25720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_RADIO_STATE_CHANGED: ret =  responseVoid(p); break;
25730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED: ret =  responseVoid(p); break;
25740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED: ret =  responseVoid(p); break;
25750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_NEW_SMS: ret =  responseString(p); break;
25760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_NEW_SMS_STATUS_REPORT: ret =  responseString(p); break;
25770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_NEW_SMS_ON_SIM: ret =  responseInts(p); break;
25780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_ON_USSD: ret =  responseStrings(p); break;
25790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_NITZ_TIME_RECEIVED: ret =  responseString(p); break;
25800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_SIGNAL_STRENGTH: ret = responseSignalStrength(p); break;
25810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_DATA_CALL_LIST_CHANGED: ret = responseDataCallList(p);break;
25820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_SUPP_SVC_NOTIFICATION: ret = responseSuppServiceNotification(p); break;
25830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_STK_SESSION_END: ret = responseVoid(p); break;
25840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_STK_PROACTIVE_COMMAND: ret = responseString(p); break;
25850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_STK_EVENT_NOTIFY: ret = responseString(p); break;
25860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_STK_CALL_SETUP: ret = responseInts(p); break;
25870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_SIM_SMS_STORAGE_FULL: ret =  responseVoid(p); break;
25880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_SIM_REFRESH: ret =  responseSimRefresh(p); break;
25890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_CALL_RING: ret =  responseCallRing(p); break;
25900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESTRICTED_STATE_CHANGED: ret = responseInts(p); break;
25910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_SIM_STATUS_CHANGED:  ret =  responseVoid(p); break;
25920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_CDMA_NEW_SMS:  ret =  responseCdmaSms(p); break;
25930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_NEW_BROADCAST_SMS:  ret =  responseRaw(p); break;
25940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_CDMA_RUIM_SMS_STORAGE_FULL:  ret =  responseVoid(p); break;
25950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_ENTER_EMERGENCY_CALLBACK_MODE: ret = responseVoid(p); break;
25960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_CDMA_CALL_WAITING: ret = responseCdmaCallWaiting(p); break;
25970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_CDMA_OTA_PROVISION_STATUS: ret = responseInts(p); break;
25980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_CDMA_INFO_REC: ret = responseCdmaInformationRecord(p); break;
25990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_OEM_HOOK_RAW: ret = responseRaw(p); break;
26000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RINGBACK_TONE: ret = responseInts(p); break;
26010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESEND_INCALL_MUTE: ret = responseVoid(p); break;
26020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_CDMA_SUBSCRIPTION_SOURCE_CHANGED: ret = responseInts(p); break;
26030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOl_CDMA_PRL_CHANGED: ret = responseInts(p); break;
26040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_EXIT_EMERGENCY_CALLBACK_MODE: ret = responseVoid(p); break;
26050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RIL_CONNECTED: ret = responseInts(p); break;
26060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_VOICE_RADIO_TECH_CHANGED: ret =  responseInts(p); break;
26075fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville            case RIL_UNSOL_CELL_INFO_LIST: ret = responseCellInfoList(p); break;
26080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
26090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            default:
26100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                throw new RuntimeException("Unrecognized unsol response: " + response);
26110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            //break; (implied)
26120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }} catch (Throwable tr) {
2613fa4fd4721082689c4b276f67b845e7be249cb8daWink Saville            Rlog.e(RILJ_LOG_TAG, "Exception processing unsol response: " + response +
26140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                "Exception:" + tr.toString());
26150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            return;
26160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
26170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
26180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        switch(response) {
26190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_RADIO_STATE_CHANGED:
26200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                /* has bonus radio state int */
26210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                RadioState newState = getRadioStateFromInt(p.readInt());
26220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogMore(response, newState.toString());
26230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
26240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                switchToRadioState(newState);
26250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            break;
26260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED:
26270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLog(response);
26280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
26290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                mCallStateRegistrants
26300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    .notifyRegistrants(new AsyncResult(null, null, null));
26310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            break;
26320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED:
26330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLog(response);
26340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
26350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                mVoiceNetworkStateRegistrants
26360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    .notifyRegistrants(new AsyncResult(null, null, null));
26370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            break;
26380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_NEW_SMS: {
26390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLog(response);
26400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
26410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                // FIXME this should move up a layer
26420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                String a[] = new String[2];
26430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
26440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                a[1] = (String)ret;
26450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
26460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                SmsMessage sms;
26470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
26480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                sms = SmsMessage.newFromCMT(a);
26490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mGsmSmsRegistrant != null) {
26500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mGsmSmsRegistrant
26510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        .notifyRegistrant(new AsyncResult(null, sms, null));
26520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
26530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            break;
26540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
26550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_NEW_SMS_STATUS_REPORT:
26560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
26570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
26580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mSmsStatusRegistrant != null) {
26590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mSmsStatusRegistrant.notifyRegistrant(
26600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            new AsyncResult(null, ret, null));
26610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
26620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            break;
26630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_NEW_SMS_ON_SIM:
26640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
26650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
26660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                int[] smsIndex = (int[])ret;
26670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
26680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if(smsIndex.length == 1) {
26690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    if (mSmsOnSimRegistrant != null) {
26700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        mSmsOnSimRegistrant.
26710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                notifyRegistrant(new AsyncResult(null, smsIndex, null));
26720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    }
26730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                } else {
26740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    if (RILJ_LOGD) riljLog(" NEW_SMS_ON_SIM ERROR with wrong length "
26750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            + smsIndex.length);
26760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
26770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            break;
26780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_ON_USSD:
26790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                String[] resp = (String[])ret;
26800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
26810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (resp.length < 2) {
26820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    resp = new String[2];
26830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    resp[0] = ((String[])ret)[0];
26840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    resp[1] = null;
26850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
26860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogMore(response, resp[0]);
26870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mUSSDRegistrant != null) {
26880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mUSSDRegistrant.notifyRegistrant(
26890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        new AsyncResult (null, resp, null));
26900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
26910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            break;
26920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_NITZ_TIME_RECEIVED:
26930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
26940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
26950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                // has bonus long containing milliseconds since boot that the NITZ
26960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                // time was received
26970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                long nitzReceiveTime = p.readLong();
26980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
26990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                Object[] result = new Object[2];
27000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
27010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                result[0] = ret;
27020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                result[1] = Long.valueOf(nitzReceiveTime);
27030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
27040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                boolean ignoreNitz = SystemProperties.getBoolean(
27050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        TelephonyProperties.PROPERTY_IGNORE_NITZ, false);
27060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
27070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (ignoreNitz) {
27080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    if (RILJ_LOGD) riljLog("ignoring UNSOL_NITZ_TIME_RECEIVED");
27090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                } else {
27100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    if (mNITZTimeRegistrant != null) {
27110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
27120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        mNITZTimeRegistrant
27130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            .notifyRegistrant(new AsyncResult (null, result, null));
27140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    } else {
27150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        // in case NITZ time registrant isnt registered yet
27160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        mLastNITZTimeInfo = result;
27170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    }
27180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
27190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            break;
27200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
27210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_SIGNAL_STRENGTH:
27220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                // Note this is set to "verbose" because it happens
27230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                // frequently
27240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGV) unsljLogvRet(response, ret);
27250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
27260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mSignalStrengthRegistrant != null) {
27270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mSignalStrengthRegistrant.notifyRegistrant(
27280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                        new AsyncResult (null, ret, null));
27290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
27300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            break;
27310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_DATA_CALL_LIST_CHANGED:
27320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
27330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
27340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                mDataNetworkStateRegistrants.notifyRegistrants(new AsyncResult(null, ret, null));
27350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            break;
27360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
27370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_SUPP_SVC_NOTIFICATION:
27380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
27390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
27400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mSsnRegistrant != null) {
27410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mSsnRegistrant.notifyRegistrant(
27420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                        new AsyncResult (null, ret, null));
27430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
27440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
27450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
27460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_STK_SESSION_END:
27470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLog(response);
27480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
27490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mCatSessionEndRegistrant != null) {
27500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mCatSessionEndRegistrant.notifyRegistrant(
27510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                        new AsyncResult (null, ret, null));
27520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
27530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
27540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
27550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_STK_PROACTIVE_COMMAND:
27560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
27570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
27580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mCatProCmdRegistrant != null) {
27590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mCatProCmdRegistrant.notifyRegistrant(
27600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                        new AsyncResult (null, ret, null));
27610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
27620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
27630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
27640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_STK_EVENT_NOTIFY:
27650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
27660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
27670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mCatEventRegistrant != null) {
27680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mCatEventRegistrant.notifyRegistrant(
27690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                        new AsyncResult (null, ret, null));
27700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
27710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
27720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
27730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_STK_CALL_SETUP:
27740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
27750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
27760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mCatCallSetUpRegistrant != null) {
27770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mCatCallSetUpRegistrant.notifyRegistrant(
27780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                        new AsyncResult (null, ret, null));
27790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
27800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
27810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
27820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_SIM_SMS_STORAGE_FULL:
27830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLog(response);
27840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
27850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mIccSmsFullRegistrant != null) {
27860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mIccSmsFullRegistrant.notifyRegistrant();
27870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
27880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
27890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
27900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_SIM_REFRESH:
27910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
27920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
27930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mIccRefreshRegistrants != null) {
27940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mIccRefreshRegistrants.notifyRegistrants(
27950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            new AsyncResult (null, ret, null));
27960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
27970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
27980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
27990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_CALL_RING:
28000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
28010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
28020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mRingRegistrant != null) {
28030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mRingRegistrant.notifyRegistrant(
28040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            new AsyncResult (null, ret, null));
28050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
28060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
28070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
28080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESTRICTED_STATE_CHANGED:
28090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogvRet(response, ret);
28100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mRestrictedStateRegistrant != null) {
28110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mRestrictedStateRegistrant.notifyRegistrant(
28120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                        new AsyncResult (null, ret, null));
28130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
28140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
28150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
28160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_SIM_STATUS_CHANGED:
28170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLog(response);
28180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
28190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mIccStatusChangedRegistrants != null) {
28200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mIccStatusChangedRegistrants.notifyRegistrants();
28210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
28220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
28230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
28240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_CDMA_NEW_SMS:
28250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLog(response);
28260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
28270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                SmsMessage sms = (SmsMessage) ret;
28280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
28290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mCdmaSmsRegistrant != null) {
28300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mCdmaSmsRegistrant
28310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        .notifyRegistrant(new AsyncResult(null, sms, null));
28320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
28330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
28340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
28350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_NEW_BROADCAST_SMS:
28360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLog(response);
28370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
28380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mGsmBroadcastSmsRegistrant != null) {
28390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mGsmBroadcastSmsRegistrant
28400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        .notifyRegistrant(new AsyncResult(null, ret, null));
28410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
28420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
28430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
28440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_CDMA_RUIM_SMS_STORAGE_FULL:
28450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLog(response);
28460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
28470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mIccSmsFullRegistrant != null) {
28480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mIccSmsFullRegistrant.notifyRegistrant();
28490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
28500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
28510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
28520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_ENTER_EMERGENCY_CALLBACK_MODE:
28530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLog(response);
28540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
28550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mEmergencyCallbackModeRegistrant != null) {
28560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mEmergencyCallbackModeRegistrant.notifyRegistrant();
28570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
28580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
28590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
28600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_CDMA_CALL_WAITING:
28610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
28620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
28630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mCallWaitingInfoRegistrants != null) {
28640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mCallWaitingInfoRegistrants.notifyRegistrants(
28650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                        new AsyncResult (null, ret, null));
28660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
28670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
28680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
28690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_CDMA_OTA_PROVISION_STATUS:
28700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
28710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
28720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mOtaProvisionRegistrants != null) {
28730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mOtaProvisionRegistrants.notifyRegistrants(
28740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                        new AsyncResult (null, ret, null));
28750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
28760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
28770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
28780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_CDMA_INFO_REC:
28790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                ArrayList<CdmaInformationRecords> listInfoRecs;
28800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
28810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                try {
28820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    listInfoRecs = (ArrayList<CdmaInformationRecords>)ret;
28830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                } catch (ClassCastException e) {
2884fa4fd4721082689c4b276f67b845e7be249cb8daWink Saville                    Rlog.e(RILJ_LOG_TAG, "Unexpected exception casting to listInfoRecs", e);
28850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    break;
28860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
28870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
28880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                for (CdmaInformationRecords rec : listInfoRecs) {
28890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    if (RILJ_LOGD) unsljLogRet(response, rec);
28900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    notifyRegistrantsCdmaInfoRec(rec);
28910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
28920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
28930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
28940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_OEM_HOOK_RAW:
28950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogvRet(response, IccUtils.bytesToHexString((byte[])ret));
28960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mUnsolOemHookRawRegistrant != null) {
28970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mUnsolOemHookRawRegistrant.notifyRegistrant(new AsyncResult(null, ret, null));
28980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
28990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
29000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
29010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RINGBACK_TONE:
29020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogvRet(response, ret);
29030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mRingbackToneRegistrants != null) {
29040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    boolean playtone = (((int[])ret)[0] == 1);
29050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mRingbackToneRegistrants.notifyRegistrants(
29060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                        new AsyncResult (null, playtone, null));
29070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
29080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
29090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
29100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESEND_INCALL_MUTE:
29110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
29120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
29130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mResendIncallMuteRegistrants != null) {
29140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mResendIncallMuteRegistrants.notifyRegistrants(
29150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                        new AsyncResult (null, ret, null));
29160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
29170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
29180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
29190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_VOICE_RADIO_TECH_CHANGED:
29200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
29210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
29220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mVoiceRadioTechChangedRegistrants != null) {
29230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mVoiceRadioTechChangedRegistrants.notifyRegistrants(
29240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            new AsyncResult(null, ret, null));
29250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
29260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
29270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
29280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_CDMA_SUBSCRIPTION_SOURCE_CHANGED:
29290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
29300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
29310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mCdmaSubscriptionChangedRegistrants != null) {
29320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mCdmaSubscriptionChangedRegistrants.notifyRegistrants(
29330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                        new AsyncResult (null, ret, null));
29340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
29350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
29360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
29370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOl_CDMA_PRL_CHANGED:
29380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
29390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
29400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mCdmaPrlChangedRegistrants != null) {
29410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mCdmaPrlChangedRegistrants.notifyRegistrants(
29420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                        new AsyncResult (null, ret, null));
29430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
29440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
29450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
29460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_EXIT_EMERGENCY_CALLBACK_MODE:
29470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
29480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
29490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mExitEmergencyCallbackModeRegistrants != null) {
29500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mExitEmergencyCallbackModeRegistrants.notifyRegistrants(
29510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                        new AsyncResult (null, null, null));
29520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
29530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
29540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
29550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RIL_CONNECTED: {
29560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
29570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
29580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                // Initial conditions
29590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                setRadioPower(false, null);
29600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                setPreferredNetworkType(mPreferredNetworkType, null);
29610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                setCdmaSubscriptionSource(mCdmaSubscription, null);
29620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                notifyRegistrantsRilConnectionChanged(((int[])ret)[0]);
29630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
29640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
29655fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville            case RIL_UNSOL_CELL_INFO_LIST: {
29665fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
29675fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville
29685fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville                if (mRilCellInfoListRegistrants != null) {
29695fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville                    mRilCellInfoListRegistrants.notifyRegistrants(
29705fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville                                        new AsyncResult (null, ret, null));
29715fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville                }
29725fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville                break;
29735fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville            }
29740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
29750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
29760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
29770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
29780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Notifiy all registrants that the ril has connected or disconnected.
29790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
29800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @param rilVer is the version of the ril or -1 if disconnected.
29810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
29820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private void notifyRegistrantsRilConnectionChanged(int rilVer) {
29830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mRilVersion = rilVer;
29840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (mRilConnectedRegistrants != null) {
29850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            mRilConnectedRegistrants.notifyRegistrants(
29860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                new AsyncResult (null, new Integer(rilVer), null));
29870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
29880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
29890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
29900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private Object
29910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    responseInts(Parcel p) {
29920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int numInts;
29930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int response[];
29940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
29950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        numInts = p.readInt();
29960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
29970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        response = new int[numInts];
29980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
29990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        for (int i = 0 ; i < numInts ; i++) {
30000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            response[i] = p.readInt();
30010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
30020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
30030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return response;
30040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
30050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
30060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
30070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private Object
30080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    responseVoid(Parcel p) {
30090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return null;
30100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
30110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
30120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private Object
30130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    responseCallForward(Parcel p) {
30140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int numInfos;
30150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        CallForwardInfo infos[];
30160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
30170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        numInfos = p.readInt();
30180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
30190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        infos = new CallForwardInfo[numInfos];
30200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
30210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        for (int i = 0 ; i < numInfos ; i++) {
30220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            infos[i] = new CallForwardInfo();
30230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
30240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            infos[i].status = p.readInt();
30250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            infos[i].reason = p.readInt();
30260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            infos[i].serviceClass = p.readInt();
30270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            infos[i].toa = p.readInt();
30280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            infos[i].number = p.readString();
30290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            infos[i].timeSeconds = p.readInt();
30300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
30310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
30320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return infos;
30330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
30340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
30350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private Object
30360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    responseSuppServiceNotification(Parcel p) {
30370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        SuppServiceNotification notification = new SuppServiceNotification();
30380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
30390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        notification.notificationType = p.readInt();
30400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        notification.code = p.readInt();
30410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        notification.index = p.readInt();
30420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        notification.type = p.readInt();
30430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        notification.number = p.readString();
30440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
30450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return notification;
30460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
30470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
30480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private Object
30490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    responseCdmaSms(Parcel p) {
30500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        SmsMessage sms;
30510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        sms = SmsMessage.newFromParcel(p);
30520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
30530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return sms;
30540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
30550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
30560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private Object
30570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    responseString(Parcel p) {
30580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String response;
30590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
30600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        response = p.readString();
30610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
30620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return response;
30630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
30640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
30650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private Object
30660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    responseStrings(Parcel p) {
30670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int num;
30680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String response[];
30690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
30700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        response = p.readStringArray();
30710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
30720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return response;
30730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
30740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
30750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private Object
30760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    responseRaw(Parcel p) {
30770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int num;
30780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        byte response[];
30790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
30800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        response = p.createByteArray();
30810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
30820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return response;
30830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
30840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
30850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private Object
30860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    responseSMS(Parcel p) {
30870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int messageRef, errorCode;
30880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String ackPDU;
30890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
30900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        messageRef = p.readInt();
30910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        ackPDU = p.readString();
30920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        errorCode = p.readInt();
30930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
30940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        SmsResponse response = new SmsResponse(messageRef, ackPDU, errorCode);
30950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
30960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return response;
30970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
30980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
30990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
31000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private Object
31010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    responseICC_IO(Parcel p) {
31020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int sw1, sw2;
31030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        byte data[] = null;
31040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        Message ret;
31050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
31060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        sw1 = p.readInt();
31070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        sw2 = p.readInt();
31080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
31090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String s = p.readString();
31100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
31110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGV) riljLog("< iccIO: "
31120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + " 0x" + Integer.toHexString(sw1)
31130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + " 0x" + Integer.toHexString(sw2) + " "
31140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + s);
31150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
31160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return new IccIoResult(sw1, sw2, s);
31170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
31180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
31190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private Object
31200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    responseIccCardStatus(Parcel p) {
3121e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka        IccCardApplicationStatus appStatus;
3122e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka
3123e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka        IccCardStatus cardStatus = new IccCardStatus();
3124e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka        cardStatus.setCardState(p.readInt());
3125e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka        cardStatus.setUniversalPinState(p.readInt());
3126e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka        cardStatus.mGsmUmtsSubscriptionAppIndex = p.readInt();
3127e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka        cardStatus.mCdmaSubscriptionAppIndex = p.readInt();
3128e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka        cardStatus.mImsSubscriptionAppIndex = p.readInt();
31290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int numApplications = p.readInt();
31300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
31310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // limit to maximum allowed applications
31320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (numApplications > IccCardStatus.CARD_MAX_APPS) {
31330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            numApplications = IccCardStatus.CARD_MAX_APPS;
31340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
3135e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka        cardStatus.mApplications = new IccCardApplicationStatus[numApplications];
31360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        for (int i = 0 ; i < numApplications ; i++) {
3137e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka            appStatus = new IccCardApplicationStatus();
3138e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka            appStatus.app_type       = appStatus.AppTypeFromRILInt(p.readInt());
3139e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka            appStatus.app_state      = appStatus.AppStateFromRILInt(p.readInt());
3140e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka            appStatus.perso_substate = appStatus.PersoSubstateFromRILInt(p.readInt());
3141e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka            appStatus.aid            = p.readString();
3142e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka            appStatus.app_label      = p.readString();
3143e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka            appStatus.pin1_replaced  = p.readInt();
3144e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka            appStatus.pin1           = appStatus.PinStateFromRILInt(p.readInt());
3145e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka            appStatus.pin2           = appStatus.PinStateFromRILInt(p.readInt());
3146e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka            cardStatus.mApplications[i] = appStatus;
31470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
3148e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka        return cardStatus;
31490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
31500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
31510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private Object
31520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    responseSimRefresh(Parcel p) {
31530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        IccRefreshResponse response = new IccRefreshResponse();
31540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
31550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        response.refreshResult = p.readInt();
31560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        response.efId   = p.readInt();
31570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        response.aid = p.readString();
31580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return response;
31590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
31600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
31610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private Object
31620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    responseCallList(Parcel p) {
31630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int num;
31640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int voiceSettings;
31650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        ArrayList<DriverCall> response;
31660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        DriverCall dc;
31670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
31680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        num = p.readInt();
31690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        response = new ArrayList<DriverCall>(num);
31700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
31710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGV) {
31720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            riljLog("responseCallList: num=" + num +
31730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    " mEmergencyCallbackModeRegistrant=" + mEmergencyCallbackModeRegistrant +
31740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    " mTestingEmergencyCall=" + mTestingEmergencyCall.get());
31750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
31760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        for (int i = 0 ; i < num ; i++) {
31770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dc = new DriverCall();
31780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
31790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dc.state = DriverCall.stateFromCLCC(p.readInt());
31800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dc.index = p.readInt();
31810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dc.TOA = p.readInt();
31820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dc.isMpty = (0 != p.readInt());
31830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dc.isMT = (0 != p.readInt());
31840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dc.als = p.readInt();
31850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            voiceSettings = p.readInt();
31860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dc.isVoice = (0 == voiceSettings) ? false : true;
31870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dc.isVoicePrivacy = (0 != p.readInt());
31880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dc.number = p.readString();
31890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            int np = p.readInt();
31900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dc.numberPresentation = DriverCall.presentationFromCLIP(np);
31910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dc.name = p.readString();
31920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dc.namePresentation = p.readInt();
31930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            int uusInfoPresent = p.readInt();
31940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (uusInfoPresent == 1) {
31950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                dc.uusInfo = new UUSInfo();
31960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                dc.uusInfo.setType(p.readInt());
31970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                dc.uusInfo.setDcs(p.readInt());
31980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                byte[] userData = p.createByteArray();
31990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                dc.uusInfo.setUserData(userData);
32000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                riljLogv(String.format("Incoming UUS : type=%d, dcs=%d, length=%d",
32010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                dc.uusInfo.getType(), dc.uusInfo.getDcs(),
32020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                dc.uusInfo.getUserData().length));
32030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                riljLogv("Incoming UUS : data (string)="
32040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        + new String(dc.uusInfo.getUserData()));
32050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                riljLogv("Incoming UUS : data (hex): "
32060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        + IccUtils.bytesToHexString(dc.uusInfo.getUserData()));
32070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            } else {
32080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                riljLogv("Incoming UUS : NOT present!");
32090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
32100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
32110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            // Make sure there's a leading + on addresses with a TOA of 145
32120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dc.number = PhoneNumberUtils.stringFromStringAndTOA(dc.number, dc.TOA);
32130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
32140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            response.add(dc);
32150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
32160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (dc.isVoicePrivacy) {
32170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                mVoicePrivacyOnRegistrants.notifyRegistrants();
32180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                riljLog("InCall VoicePrivacy is enabled");
32190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            } else {
32200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                mVoicePrivacyOffRegistrants.notifyRegistrants();
32210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                riljLog("InCall VoicePrivacy is disabled");
32220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
32230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
32240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
32250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        Collections.sort(response);
32260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
32270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if ((num == 0) && mTestingEmergencyCall.getAndSet(false)) {
32280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (mEmergencyCallbackModeRegistrant != null) {
32290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                riljLog("responseCallList: call ended, testing emergency call," +
32300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            " notify ECM Registrants");
32310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                mEmergencyCallbackModeRegistrant.notifyRegistrant();
32320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
32330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
32340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
32350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return response;
32360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
32370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3238ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville    private DataCallResponse getDataCallResponse(Parcel p, int version) {
3239ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville        DataCallResponse dataCall = new DataCallResponse();
32400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
32410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        dataCall.version = version;
32420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (version < 5) {
32430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dataCall.cid = p.readInt();
32440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dataCall.active = p.readInt();
32450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dataCall.type = p.readString();
32460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            String addresses = p.readString();
32470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (!TextUtils.isEmpty(addresses)) {
32480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                dataCall.addresses = addresses.split(" ");
32490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
32500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else {
32510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dataCall.status = p.readInt();
32520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dataCall.suggestedRetryTime = p.readInt();
32530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dataCall.cid = p.readInt();
32540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dataCall.active = p.readInt();
32550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dataCall.type = p.readString();
32560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dataCall.ifname = p.readString();
3257ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville            if ((dataCall.status == DcFailCause.NONE.getErrorCode()) &&
32580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    TextUtils.isEmpty(dataCall.ifname)) {
3259ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville              throw new RuntimeException("getDataCallResponse, no ifname");
32600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
32610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            String addresses = p.readString();
32620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (!TextUtils.isEmpty(addresses)) {
32630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                dataCall.addresses = addresses.split(" ");
32640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
32650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            String dnses = p.readString();
32660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (!TextUtils.isEmpty(dnses)) {
32670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                dataCall.dnses = dnses.split(" ");
32680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
32690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            String gateways = p.readString();
32700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (!TextUtils.isEmpty(gateways)) {
32710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                dataCall.gateways = gateways.split(" ");
32720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
32730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
32740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return dataCall;
32750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
32760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
32770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private Object
32780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    responseDataCallList(Parcel p) {
3279ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville        ArrayList<DataCallResponse> response;
32800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
32810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int ver = p.readInt();
32820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int num = p.readInt();
32830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        riljLog("responseDataCallList ver=" + ver + " num=" + num);
32840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3285ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville        response = new ArrayList<DataCallResponse>(num);
32860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        for (int i = 0; i < num; i++) {
3287ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville            response.add(getDataCallResponse(p, ver));
32880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
32890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
32900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return response;
32910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
32920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
32930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private Object
32940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    responseSetupDataCall(Parcel p) {
32950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int ver = p.readInt();
32960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int num = p.readInt();
32970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGV) riljLog("responseSetupDataCall ver=" + ver + " num=" + num);
32980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3299ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville        DataCallResponse dataCall;
33000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
33010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (ver < 5) {
3302ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville            dataCall = new DataCallResponse();
33030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dataCall.version = ver;
33040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dataCall.cid = Integer.parseInt(p.readString());
33050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dataCall.ifname = p.readString();
33060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (TextUtils.isEmpty(dataCall.ifname)) {
33070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                throw new RuntimeException(
33080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        "RIL_REQUEST_SETUP_DATA_CALL response, no ifname");
33090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
33100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            String addresses = p.readString();
33110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (!TextUtils.isEmpty(addresses)) {
33120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville              dataCall.addresses = addresses.split(" ");
33130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
33140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (num >= 4) {
33150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                String dnses = p.readString();
33160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) riljLog("responseSetupDataCall got dnses=" + dnses);
33170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (!TextUtils.isEmpty(dnses)) {
33180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    dataCall.dnses = dnses.split(" ");
33190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
33200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
33210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (num >= 5) {
33220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                String gateways = p.readString();
33230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) riljLog("responseSetupDataCall got gateways=" + gateways);
33240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (!TextUtils.isEmpty(gateways)) {
33250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    dataCall.gateways = gateways.split(" ");
33260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
33270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
33280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else {
33290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (num != 1) {
33300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                throw new RuntimeException(
33310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        "RIL_REQUEST_SETUP_DATA_CALL response expecting 1 RIL_Data_Call_response_v5"
33320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        + " got " + num);
33330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
3334ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville            dataCall = getDataCallResponse(p, ver);
33350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
33360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
33370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return dataCall;
33380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
33390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
33400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private Object
33410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    responseOperatorInfos(Parcel p) {
33420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String strings[] = (String [])responseStrings(p);
33430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        ArrayList<OperatorInfo> ret;
33440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
33450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (strings.length % 4 != 0) {
33460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            throw new RuntimeException(
33470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                "RIL_REQUEST_QUERY_AVAILABLE_NETWORKS: invalid response. Got "
33480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + strings.length + " strings, expected multible of 4");
33490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
33500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
33510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        ret = new ArrayList<OperatorInfo>(strings.length / 4);
33520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
33530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        for (int i = 0 ; i < strings.length ; i += 4) {
33540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            ret.add (
33550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                new OperatorInfo(
33560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    strings[i+0],
33570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    strings[i+1],
33580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    strings[i+2],
33590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    strings[i+3]));
33600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
33610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
33620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return ret;
33630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
33640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
33650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private Object
33660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    responseCellList(Parcel p) {
33670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville       int num, rssi;
33680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville       String location;
33690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville       ArrayList<NeighboringCellInfo> response;
33700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville       NeighboringCellInfo cell;
33710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
33720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville       num = p.readInt();
33730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville       response = new ArrayList<NeighboringCellInfo>();
33740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
33750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville       // Determine the radio access type
33760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville       String radioString = SystemProperties.get(
33770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville               TelephonyProperties.PROPERTY_DATA_NETWORK_TYPE, "unknown");
33780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville       int radioType;
33790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville       if (radioString.equals("GPRS")) {
33800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville           radioType = NETWORK_TYPE_GPRS;
33810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville       } else if (radioString.equals("EDGE")) {
33820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville           radioType = NETWORK_TYPE_EDGE;
33830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville       } else if (radioString.equals("UMTS")) {
33840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville           radioType = NETWORK_TYPE_UMTS;
33850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville       } else if (radioString.equals("HSDPA")) {
33860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville           radioType = NETWORK_TYPE_HSDPA;
33870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville       } else if (radioString.equals("HSUPA")) {
33880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville           radioType = NETWORK_TYPE_HSUPA;
33890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville       } else if (radioString.equals("HSPA")) {
33900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville           radioType = NETWORK_TYPE_HSPA;
33910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville       } else {
33920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville           radioType = NETWORK_TYPE_UNKNOWN;
33930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville       }
33940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
33950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville       // Interpret the location based on radio access type
33960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville       if (radioType != NETWORK_TYPE_UNKNOWN) {
33970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville           for (int i = 0 ; i < num ; i++) {
33980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville               rssi = p.readInt();
33990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville               location = p.readString();
34000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville               cell = new NeighboringCellInfo(rssi, location, radioType);
34010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville               response.add(cell);
34020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville           }
34030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville       }
34040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville       return response;
34050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
34060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
34070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private Object responseGetPreferredNetworkType(Parcel p) {
34080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville       int [] response = (int[]) responseInts(p);
34090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
34100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville       if (response.length >= 1) {
34110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville           // Since this is the response for getPreferredNetworkType
34120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville           // we'll assume that it should be the value we want the
34130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville           // vendor ril to take if we reestablish a connection to it.
34140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville           mPreferredNetworkType = response[0];
34150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville       }
34160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville       return response;
34170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
34180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
34190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private Object responseGmsBroadcastConfig(Parcel p) {
34200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int num;
34210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        ArrayList<SmsBroadcastConfigInfo> response;
34220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        SmsBroadcastConfigInfo info;
34230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
34240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        num = p.readInt();
34250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        response = new ArrayList<SmsBroadcastConfigInfo>(num);
34260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
34270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        for (int i = 0; i < num; i++) {
34280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            int fromId = p.readInt();
34290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            int toId = p.readInt();
34300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            int fromScheme = p.readInt();
34310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            int toScheme = p.readInt();
34320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            boolean selected = (p.readInt() == 1);
34330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
34340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            info = new SmsBroadcastConfigInfo(fromId, toId, fromScheme,
34350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    toScheme, selected);
34360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            response.add(info);
34370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
34380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return response;
34390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
34400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
34410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private Object
34420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    responseCdmaBroadcastConfig(Parcel p) {
34430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int numServiceCategories;
34440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int response[];
34450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
34460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        numServiceCategories = p.readInt();
34470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
34480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (numServiceCategories == 0) {
34490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            // TODO: The logic of providing default values should
34500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            // not be done by this transport layer. And needs to
34510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            // be done by the vendor ril or application logic.
34520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            int numInts;
34530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            numInts = CDMA_BROADCAST_SMS_NO_OF_SERVICE_CATEGORIES * CDMA_BSI_NO_OF_INTS_STRUCT + 1;
34540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            response = new int[numInts];
34550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
34560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            // Faking a default record for all possible records.
34570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            response[0] = CDMA_BROADCAST_SMS_NO_OF_SERVICE_CATEGORIES;
34580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
34590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            // Loop over CDMA_BROADCAST_SMS_NO_OF_SERVICE_CATEGORIES set 'english' as
34600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            // default language and selection status to false for all.
34610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            for (int i = 1; i < numInts; i += CDMA_BSI_NO_OF_INTS_STRUCT ) {
34620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                response[i + 0] = i / CDMA_BSI_NO_OF_INTS_STRUCT;
34630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                response[i + 1] = 1;
34640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                response[i + 2] = 0;
34650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
34660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else {
34670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            int numInts;
34680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            numInts = (numServiceCategories * CDMA_BSI_NO_OF_INTS_STRUCT) + 1;
34690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            response = new int[numInts];
34700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
34710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            response[0] = numServiceCategories;
34720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            for (int i = 1 ; i < numInts; i++) {
34730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                 response[i] = p.readInt();
34740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville             }
34750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
34760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
34770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return response;
34780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
34790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
34800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private Object
34810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    responseSignalStrength(Parcel p) {
3482e3366ce305cf679bed0270db09938567d0e4d6d2Wink Saville        // Assume this is gsm, but doesn't matter as ServiceStateTracker
3483e3366ce305cf679bed0270db09938567d0e4d6d2Wink Saville        // sets the proper value.
3484e3366ce305cf679bed0270db09938567d0e4d6d2Wink Saville        SignalStrength signalStrength = SignalStrength.makeSignalStrengthFromRilParcel(p);
34855b81adc82a53b3064f4baa3acfeabef31586588aUma Maheswari Ramalingam        return signalStrength;
34860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
34870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
34880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private ArrayList<CdmaInformationRecords>
34890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    responseCdmaInformationRecord(Parcel p) {
34900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int numberOfInfoRecs;
34910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        ArrayList<CdmaInformationRecords> response;
34920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
34930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        /**
34940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville         * Loop through all of the information records unmarshalling them
34950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville         * and converting them to Java Objects.
34960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville         */
34970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        numberOfInfoRecs = p.readInt();
34980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        response = new ArrayList<CdmaInformationRecords>(numberOfInfoRecs);
34990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
35000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        for (int i = 0; i < numberOfInfoRecs; i++) {
35010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            CdmaInformationRecords InfoRec = new CdmaInformationRecords(p);
35020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            response.add(InfoRec);
35030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
35040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
35050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return response;
35060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
35070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
35080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private Object
35090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    responseCdmaCallWaiting(Parcel p) {
35100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        CdmaCallWaitingNotification notification = new CdmaCallWaitingNotification();
35110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
35120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        notification.number = p.readString();
3513cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville        notification.numberPresentation =
3514cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville                CdmaCallWaitingNotification.presentationFromCLIP(p.readInt());
35150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        notification.name = p.readString();
35160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        notification.namePresentation = notification.numberPresentation;
35170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        notification.isPresent = p.readInt();
35180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        notification.signalType = p.readInt();
35190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        notification.alertPitch = p.readInt();
35200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        notification.signal = p.readInt();
35210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        notification.numberType = p.readInt();
35220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        notification.numberPlan = p.readInt();
35230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
35240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return notification;
35250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
35260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
35270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private Object
35280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    responseCallRing(Parcel p){
35290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        char response[] = new char[4];
35300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
35310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        response[0] = (char) p.readInt();    // isPresent
35320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        response[1] = (char) p.readInt();    // signalType
35330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        response[2] = (char) p.readInt();    // alertPitch
35340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        response[3] = (char) p.readInt();    // signal
35350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
35360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return response;
35370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
35380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
35390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private void
35400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    notifyRegistrantsCdmaInfoRec(CdmaInformationRecords infoRec) {
35410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int response = RIL_UNSOL_CDMA_INFO_REC;
35420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (infoRec.record instanceof CdmaInformationRecords.CdmaDisplayInfoRec) {
35430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (mDisplayInfoRegistrants != null) {
35440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogRet(response, infoRec.record);
35450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                mDisplayInfoRegistrants.notifyRegistrants(
35460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        new AsyncResult (null, infoRec.record, null));
35470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
35480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else if (infoRec.record instanceof CdmaInformationRecords.CdmaSignalInfoRec) {
35490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (mSignalInfoRegistrants != null) {
35500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogRet(response, infoRec.record);
35510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                mSignalInfoRegistrants.notifyRegistrants(
35520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        new AsyncResult (null, infoRec.record, null));
35530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
35540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else if (infoRec.record instanceof CdmaInformationRecords.CdmaNumberInfoRec) {
35550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (mNumberInfoRegistrants != null) {
35560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogRet(response, infoRec.record);
35570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                mNumberInfoRegistrants.notifyRegistrants(
35580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        new AsyncResult (null, infoRec.record, null));
35590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
35600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else if (infoRec.record instanceof CdmaInformationRecords.CdmaRedirectingNumberInfoRec) {
35610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (mRedirNumInfoRegistrants != null) {
35620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogRet(response, infoRec.record);
35630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                mRedirNumInfoRegistrants.notifyRegistrants(
35640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        new AsyncResult (null, infoRec.record, null));
35650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
35660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else if (infoRec.record instanceof CdmaInformationRecords.CdmaLineControlInfoRec) {
35670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (mLineControlInfoRegistrants != null) {
35680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogRet(response, infoRec.record);
35690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                mLineControlInfoRegistrants.notifyRegistrants(
35700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        new AsyncResult (null, infoRec.record, null));
35710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
35720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else if (infoRec.record instanceof CdmaInformationRecords.CdmaT53ClirInfoRec) {
35730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (mT53ClirInfoRegistrants != null) {
35740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogRet(response, infoRec.record);
35750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                mT53ClirInfoRegistrants.notifyRegistrants(
35760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        new AsyncResult (null, infoRec.record, null));
35770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
35780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else if (infoRec.record instanceof CdmaInformationRecords.CdmaT53AudioControlInfoRec) {
35790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (mT53AudCntrlInfoRegistrants != null) {
35800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville               if (RILJ_LOGD) unsljLogRet(response, infoRec.record);
35810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville               mT53AudCntrlInfoRegistrants.notifyRegistrants(
35820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                       new AsyncResult (null, infoRec.record, null));
35830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
35840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
35850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
35860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
35875fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville    private ArrayList<CellInfo> responseCellInfoList(Parcel p) {
35885fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville        int numberOfInfoRecs;
35895fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville        ArrayList<CellInfo> response;
35905fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville
35915fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville        /**
35925fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville         * Loop through all of the information records unmarshalling them
35935fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville         * and converting them to Java Objects.
35945fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville         */
35955fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville        numberOfInfoRecs = p.readInt();
35965fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville        response = new ArrayList<CellInfo>(numberOfInfoRecs);
35975fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville
35985fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville        for (int i = 0; i < numberOfInfoRecs; i++) {
35995fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville            CellInfo InfoRec = CellInfo.CREATOR.createFromParcel(p);
36005fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville            response.add(InfoRec);
36015fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville        }
36025fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville
36035fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville        return response;
36045fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville    }
36055fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville
36060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    static String
36070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    requestToString(int request) {
36080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville/*
36090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville cat libs/telephony/ril_commands.h \
36100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville | egrep "^ *{RIL_" \
36110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville | sed -re 's/\{RIL_([^,]+),[^,]+,([^}]+).+/case RIL_\1: return "\1";/'
36120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville*/
36130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        switch(request) {
36140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GET_SIM_STATUS: return "GET_SIM_STATUS";
36150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_ENTER_SIM_PIN: return "ENTER_SIM_PIN";
36160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_ENTER_SIM_PUK: return "ENTER_SIM_PUK";
36170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_ENTER_SIM_PIN2: return "ENTER_SIM_PIN2";
36180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_ENTER_SIM_PUK2: return "ENTER_SIM_PUK2";
36190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CHANGE_SIM_PIN: return "CHANGE_SIM_PIN";
36200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CHANGE_SIM_PIN2: return "CHANGE_SIM_PIN2";
36210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_ENTER_NETWORK_DEPERSONALIZATION: return "ENTER_NETWORK_DEPERSONALIZATION";
36220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GET_CURRENT_CALLS: return "GET_CURRENT_CALLS";
36230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_DIAL: return "DIAL";
36240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GET_IMSI: return "GET_IMSI";
36250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_HANGUP: return "HANGUP";
36260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_HANGUP_WAITING_OR_BACKGROUND: return "HANGUP_WAITING_OR_BACKGROUND";
36270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_HANGUP_FOREGROUND_RESUME_BACKGROUND: return "HANGUP_FOREGROUND_RESUME_BACKGROUND";
36280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SWITCH_WAITING_OR_HOLDING_AND_ACTIVE: return "REQUEST_SWITCH_WAITING_OR_HOLDING_AND_ACTIVE";
36290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CONFERENCE: return "CONFERENCE";
36300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_UDUB: return "UDUB";
36310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_LAST_CALL_FAIL_CAUSE: return "LAST_CALL_FAIL_CAUSE";
36320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SIGNAL_STRENGTH: return "SIGNAL_STRENGTH";
36330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_VOICE_REGISTRATION_STATE: return "VOICE_REGISTRATION_STATE";
36340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_DATA_REGISTRATION_STATE: return "DATA_REGISTRATION_STATE";
36350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_OPERATOR: return "OPERATOR";
36360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_RADIO_POWER: return "RADIO_POWER";
36370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_DTMF: return "DTMF";
36380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SEND_SMS: return "SEND_SMS";
36390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SEND_SMS_EXPECT_MORE: return "SEND_SMS_EXPECT_MORE";
36400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SETUP_DATA_CALL: return "SETUP_DATA_CALL";
36410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SIM_IO: return "SIM_IO";
36420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SEND_USSD: return "SEND_USSD";
36430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CANCEL_USSD: return "CANCEL_USSD";
36440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GET_CLIR: return "GET_CLIR";
36450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_CLIR: return "SET_CLIR";
36460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_QUERY_CALL_FORWARD_STATUS: return "QUERY_CALL_FORWARD_STATUS";
36470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_CALL_FORWARD: return "SET_CALL_FORWARD";
36480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_QUERY_CALL_WAITING: return "QUERY_CALL_WAITING";
36490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_CALL_WAITING: return "SET_CALL_WAITING";
36500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SMS_ACKNOWLEDGE: return "SMS_ACKNOWLEDGE";
36510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GET_IMEI: return "GET_IMEI";
36520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GET_IMEISV: return "GET_IMEISV";
36530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_ANSWER: return "ANSWER";
36540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_DEACTIVATE_DATA_CALL: return "DEACTIVATE_DATA_CALL";
36550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_QUERY_FACILITY_LOCK: return "QUERY_FACILITY_LOCK";
36560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_FACILITY_LOCK: return "SET_FACILITY_LOCK";
36570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CHANGE_BARRING_PASSWORD: return "CHANGE_BARRING_PASSWORD";
36580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_QUERY_NETWORK_SELECTION_MODE: return "QUERY_NETWORK_SELECTION_MODE";
36590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_NETWORK_SELECTION_AUTOMATIC: return "SET_NETWORK_SELECTION_AUTOMATIC";
36600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_NETWORK_SELECTION_MANUAL: return "SET_NETWORK_SELECTION_MANUAL";
36610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_QUERY_AVAILABLE_NETWORKS : return "QUERY_AVAILABLE_NETWORKS ";
36620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_DTMF_START: return "DTMF_START";
36630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_DTMF_STOP: return "DTMF_STOP";
36640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_BASEBAND_VERSION: return "BASEBAND_VERSION";
36650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SEPARATE_CONNECTION: return "SEPARATE_CONNECTION";
36660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_MUTE: return "SET_MUTE";
36670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GET_MUTE: return "GET_MUTE";
36680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_QUERY_CLIP: return "QUERY_CLIP";
36690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_LAST_DATA_CALL_FAIL_CAUSE: return "LAST_DATA_CALL_FAIL_CAUSE";
36700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_DATA_CALL_LIST: return "DATA_CALL_LIST";
36710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_RESET_RADIO: return "RESET_RADIO";
36720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_OEM_HOOK_RAW: return "OEM_HOOK_RAW";
36730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_OEM_HOOK_STRINGS: return "OEM_HOOK_STRINGS";
36740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SCREEN_STATE: return "SCREEN_STATE";
36750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_SUPP_SVC_NOTIFICATION: return "SET_SUPP_SVC_NOTIFICATION";
36760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_WRITE_SMS_TO_SIM: return "WRITE_SMS_TO_SIM";
36770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_DELETE_SMS_ON_SIM: return "DELETE_SMS_ON_SIM";
36780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_BAND_MODE: return "SET_BAND_MODE";
36790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_QUERY_AVAILABLE_BAND_MODE: return "QUERY_AVAILABLE_BAND_MODE";
36800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_STK_GET_PROFILE: return "REQUEST_STK_GET_PROFILE";
36810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_STK_SET_PROFILE: return "REQUEST_STK_SET_PROFILE";
36820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_STK_SEND_ENVELOPE_COMMAND: return "REQUEST_STK_SEND_ENVELOPE_COMMAND";
36830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_STK_SEND_TERMINAL_RESPONSE: return "REQUEST_STK_SEND_TERMINAL_RESPONSE";
36840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_STK_HANDLE_CALL_SETUP_REQUESTED_FROM_SIM: return "REQUEST_STK_HANDLE_CALL_SETUP_REQUESTED_FROM_SIM";
36850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_EXPLICIT_CALL_TRANSFER: return "REQUEST_EXPLICIT_CALL_TRANSFER";
36860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE: return "REQUEST_SET_PREFERRED_NETWORK_TYPE";
36870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GET_PREFERRED_NETWORK_TYPE: return "REQUEST_GET_PREFERRED_NETWORK_TYPE";
36880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GET_NEIGHBORING_CELL_IDS: return "REQUEST_GET_NEIGHBORING_CELL_IDS";
36890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_LOCATION_UPDATES: return "REQUEST_SET_LOCATION_UPDATES";
36900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_SET_SUBSCRIPTION_SOURCE: return "RIL_REQUEST_CDMA_SET_SUBSCRIPTION_SOURCE";
36910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_SET_ROAMING_PREFERENCE: return "RIL_REQUEST_CDMA_SET_ROAMING_PREFERENCE";
36920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_QUERY_ROAMING_PREFERENCE: return "RIL_REQUEST_CDMA_QUERY_ROAMING_PREFERENCE";
36930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_TTY_MODE: return "RIL_REQUEST_SET_TTY_MODE";
36940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_QUERY_TTY_MODE: return "RIL_REQUEST_QUERY_TTY_MODE";
36950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_SET_PREFERRED_VOICE_PRIVACY_MODE: return "RIL_REQUEST_CDMA_SET_PREFERRED_VOICE_PRIVACY_MODE";
36960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_QUERY_PREFERRED_VOICE_PRIVACY_MODE: return "RIL_REQUEST_CDMA_QUERY_PREFERRED_VOICE_PRIVACY_MODE";
36970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_FLASH: return "RIL_REQUEST_CDMA_FLASH";
36980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_BURST_DTMF: return "RIL_REQUEST_CDMA_BURST_DTMF";
36990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_SEND_SMS: return "RIL_REQUEST_CDMA_SEND_SMS";
37000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_SMS_ACKNOWLEDGE: return "RIL_REQUEST_CDMA_SMS_ACKNOWLEDGE";
37010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GSM_GET_BROADCAST_CONFIG: return "RIL_REQUEST_GSM_GET_BROADCAST_CONFIG";
37020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GSM_SET_BROADCAST_CONFIG: return "RIL_REQUEST_GSM_SET_BROADCAST_CONFIG";
37030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_GET_BROADCAST_CONFIG: return "RIL_REQUEST_CDMA_GET_BROADCAST_CONFIG";
37040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_SET_BROADCAST_CONFIG: return "RIL_REQUEST_CDMA_SET_BROADCAST_CONFIG";
37050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GSM_BROADCAST_ACTIVATION: return "RIL_REQUEST_GSM_BROADCAST_ACTIVATION";
37060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_VALIDATE_AND_WRITE_AKEY: return "RIL_REQUEST_CDMA_VALIDATE_AND_WRITE_AKEY";
37070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_BROADCAST_ACTIVATION: return "RIL_REQUEST_CDMA_BROADCAST_ACTIVATION";
37080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_SUBSCRIPTION: return "RIL_REQUEST_CDMA_SUBSCRIPTION";
37090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_WRITE_SMS_TO_RUIM: return "RIL_REQUEST_CDMA_WRITE_SMS_TO_RUIM";
37100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_DELETE_SMS_ON_RUIM: return "RIL_REQUEST_CDMA_DELETE_SMS_ON_RUIM";
37110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_DEVICE_IDENTITY: return "RIL_REQUEST_DEVICE_IDENTITY";
37120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GET_SMSC_ADDRESS: return "RIL_REQUEST_GET_SMSC_ADDRESS";
37130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_SMSC_ADDRESS: return "RIL_REQUEST_SET_SMSC_ADDRESS";
37140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_EXIT_EMERGENCY_CALLBACK_MODE: return "REQUEST_EXIT_EMERGENCY_CALLBACK_MODE";
37150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_REPORT_SMS_MEMORY_STATUS: return "RIL_REQUEST_REPORT_SMS_MEMORY_STATUS";
37160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_REPORT_STK_SERVICE_IS_RUNNING: return "RIL_REQUEST_REPORT_STK_SERVICE_IS_RUNNING";
37170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_GET_SUBSCRIPTION_SOURCE: return "RIL_REQUEST_CDMA_GET_SUBSCRIPTION_SOURCE";
37180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_ISIM_AUTHENTICATION: return "RIL_REQUEST_ISIM_AUTHENTICATION";
37190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_ACKNOWLEDGE_INCOMING_GSM_SMS_WITH_PDU: return "RIL_REQUEST_ACKNOWLEDGE_INCOMING_GSM_SMS_WITH_PDU";
37200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_STK_SEND_ENVELOPE_WITH_STATUS: return "RIL_REQUEST_STK_SEND_ENVELOPE_WITH_STATUS";
37210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_VOICE_RADIO_TECH: return "RIL_REQUEST_VOICE_RADIO_TECH";
37225fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville            case RIL_REQUEST_GET_CELL_INFO_LIST: return "RIL_REQUEST_GET_CELL_INFO_LIST";
37235fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville            case RIL_REQUEST_SET_UNSOL_CELL_INFO_LIST_RATE: return "RIL_REQUEST_SET_CELL_INFO_LIST_RATE";
37240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            default: return "<unknown request>";
37250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
37260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
37270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
37280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    static String
37290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    responseToString(int request)
37300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    {
37310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville/*
37320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville cat libs/telephony/ril_unsol_commands.h \
37330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville | egrep "^ *{RIL_" \
37340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville | sed -re 's/\{RIL_([^,]+),[^,]+,([^}]+).+/case RIL_\1: return "\1";/'
37350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville*/
37360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        switch(request) {
37370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_RADIO_STATE_CHANGED: return "UNSOL_RESPONSE_RADIO_STATE_CHANGED";
37380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED: return "UNSOL_RESPONSE_CALL_STATE_CHANGED";
37390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED: return "UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED";
37400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_NEW_SMS: return "UNSOL_RESPONSE_NEW_SMS";
37410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_NEW_SMS_STATUS_REPORT: return "UNSOL_RESPONSE_NEW_SMS_STATUS_REPORT";
37420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_NEW_SMS_ON_SIM: return "UNSOL_RESPONSE_NEW_SMS_ON_SIM";
37430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_ON_USSD: return "UNSOL_ON_USSD";
37440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_ON_USSD_REQUEST: return "UNSOL_ON_USSD_REQUEST";
37450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_NITZ_TIME_RECEIVED: return "UNSOL_NITZ_TIME_RECEIVED";
37460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_SIGNAL_STRENGTH: return "UNSOL_SIGNAL_STRENGTH";
37470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_DATA_CALL_LIST_CHANGED: return "UNSOL_DATA_CALL_LIST_CHANGED";
37480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_SUPP_SVC_NOTIFICATION: return "UNSOL_SUPP_SVC_NOTIFICATION";
37490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_STK_SESSION_END: return "UNSOL_STK_SESSION_END";
37500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_STK_PROACTIVE_COMMAND: return "UNSOL_STK_PROACTIVE_COMMAND";
37510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_STK_EVENT_NOTIFY: return "UNSOL_STK_EVENT_NOTIFY";
37520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_STK_CALL_SETUP: return "UNSOL_STK_CALL_SETUP";
37530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_SIM_SMS_STORAGE_FULL: return "UNSOL_SIM_SMS_STORAGE_FULL";
37540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_SIM_REFRESH: return "UNSOL_SIM_REFRESH";
37550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_CALL_RING: return "UNSOL_CALL_RING";
37560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_SIM_STATUS_CHANGED: return "UNSOL_RESPONSE_SIM_STATUS_CHANGED";
37570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_CDMA_NEW_SMS: return "UNSOL_RESPONSE_CDMA_NEW_SMS";
37580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_NEW_BROADCAST_SMS: return "UNSOL_RESPONSE_NEW_BROADCAST_SMS";
37590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_CDMA_RUIM_SMS_STORAGE_FULL: return "UNSOL_CDMA_RUIM_SMS_STORAGE_FULL";
37600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESTRICTED_STATE_CHANGED: return "UNSOL_RESTRICTED_STATE_CHANGED";
37610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_ENTER_EMERGENCY_CALLBACK_MODE: return "UNSOL_ENTER_EMERGENCY_CALLBACK_MODE";
37620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_CDMA_CALL_WAITING: return "UNSOL_CDMA_CALL_WAITING";
37630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_CDMA_OTA_PROVISION_STATUS: return "UNSOL_CDMA_OTA_PROVISION_STATUS";
37640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_CDMA_INFO_REC: return "UNSOL_CDMA_INFO_REC";
37650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_OEM_HOOK_RAW: return "UNSOL_OEM_HOOK_RAW";
37665e1bc7508bd2f6cbe52ce1d7cb13194a0d265406Jiju Kinattingal            case RIL_UNSOL_RINGBACK_TONE: return "UNSOL_RINGBACK_TONE";
37670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESEND_INCALL_MUTE: return "UNSOL_RESEND_INCALL_MUTE";
37680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_CDMA_SUBSCRIPTION_SOURCE_CHANGED: return "CDMA_SUBSCRIPTION_SOURCE_CHANGED";
37690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOl_CDMA_PRL_CHANGED: return "UNSOL_CDMA_PRL_CHANGED";
37700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_EXIT_EMERGENCY_CALLBACK_MODE: return "UNSOL_EXIT_EMERGENCY_CALLBACK_MODE";
37710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RIL_CONNECTED: return "UNSOL_RIL_CONNECTED";
37720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_VOICE_RADIO_TECH_CHANGED: return "UNSOL_VOICE_RADIO_TECH_CHANGED";
37735fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville            case RIL_UNSOL_CELL_INFO_LIST: return "UNSOL_CELL_INFO_LIST";
37740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            default: return "<unknown reponse>";
37750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
37760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
37770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
37780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private void riljLog(String msg) {
3779fa4fd4721082689c4b276f67b845e7be249cb8daWink Saville        Rlog.d(RILJ_LOG_TAG, msg);
37800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
37810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
37820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private void riljLogv(String msg) {
3783fa4fd4721082689c4b276f67b845e7be249cb8daWink Saville        Rlog.v(RILJ_LOG_TAG, msg);
37840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
37850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
37860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private void unsljLog(int response) {
37870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        riljLog("[UNSL]< " + responseToString(response));
37880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
37890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
37900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private void unsljLogMore(int response, String more) {
37910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        riljLog("[UNSL]< " + responseToString(response) + " " + more);
37920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
37930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
37940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private void unsljLogRet(int response, Object ret) {
37950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        riljLog("[UNSL]< " + responseToString(response) + " " + retToString(response, ret));
37960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
37970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
37980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private void unsljLogvRet(int response, Object ret) {
37990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        riljLogv("[UNSL]< " + responseToString(response) + " " + retToString(response, ret));
38000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
38010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
38020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
38030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // ***** Methods for CDMA support
3804cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
38050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
38060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    getDeviceIdentity(Message response) {
38070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_DEVICE_IDENTITY, response);
38080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
38090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
38100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
38110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
38120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
38130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3814cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
38150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
38160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    getCDMASubscription(Message response) {
38170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CDMA_SUBSCRIPTION, response);
38180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
38190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
38200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
38210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
38220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
38230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
38240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override
38250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void setPhoneType(int phoneType) { // Called by CDMAPhone and GSMPhone constructor
38260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog("setPhoneType=" + phoneType + " old value=" + mPhoneType);
38270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mPhoneType = phoneType;
38280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
38290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
38300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
38310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
38320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
3833cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
38340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void queryCdmaRoamingPreference(Message response) {
38350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(
38360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                RILConstants.RIL_REQUEST_CDMA_QUERY_ROAMING_PREFERENCE, response);
38370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
38380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
38390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
38400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
38410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
38420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
38430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
38440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
38450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
3846cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
38470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void setCdmaRoamingPreference(int cdmaRoamingType, Message response) {
38480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(
38490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                RILConstants.RIL_REQUEST_CDMA_SET_ROAMING_PREFERENCE, response);
38500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
385122d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(1);
385222d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(cdmaRoamingType);
38530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
38540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
38550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + " : " + cdmaRoamingType);
38560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
38570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
38580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
38590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
38600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
38610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
38620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
3863cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
38640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void setCdmaSubscriptionSource(int cdmaSubscription , Message response) {
38650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(
38660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                RILConstants.RIL_REQUEST_CDMA_SET_SUBSCRIPTION_SOURCE, response);
38670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
386822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(1);
386922d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(cdmaSubscription);
38700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
38710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
38720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + " : " + cdmaSubscription);
38730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
38740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
38750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
38760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
38770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
38780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
38790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
38800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override
38810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void getCdmaSubscriptionSource(Message response) {
38820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(
38830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                RILConstants.RIL_REQUEST_CDMA_GET_SUBSCRIPTION_SOURCE, response);
38840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
38850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
38860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
38870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
38880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
38890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
38900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
38910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
38920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
3893cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
38940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void queryTTYMode(Message response) {
38950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(
38960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                RILConstants.RIL_REQUEST_QUERY_TTY_MODE, response);
38970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
38980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
38990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
39000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
39010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
39020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
39030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
39040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
39050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
3906cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
39070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void setTTYMode(int ttyMode, Message response) {
39080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(
39090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                RILConstants.RIL_REQUEST_SET_TTY_MODE, response);
39100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
391122d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(1);
391222d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(ttyMode);
39130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
39140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
39150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + " : " + ttyMode);
39160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
39170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
39180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
39190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
39200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
39210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
39220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
3923cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
39240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
39250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    sendCDMAFeatureCode(String FeatureCode, Message response) {
39260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CDMA_FLASH, response);
39270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
392822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(FeatureCode);
39290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
39300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
39310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + " : " + FeatureCode);
39320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
39330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
39340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
39350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3936cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
39370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void getCdmaBroadcastConfig(Message response) {
39380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CDMA_GET_BROADCAST_CONFIG, response);
39390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
39400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
39410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
39420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3943cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
3944a63f55cf17629426d976830429a7612387532195Rika Brooks    public void setCdmaBroadcastConfig(CdmaSmsBroadcastConfigInfo[] configs, Message response) {
39450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CDMA_SET_BROADCAST_CONFIG, response);
39460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3947a63f55cf17629426d976830429a7612387532195Rika Brooks        // Convert to 1 service category per config (the way RIL takes is)
3948a63f55cf17629426d976830429a7612387532195Rika Brooks        ArrayList<CdmaSmsBroadcastConfigInfo> processedConfigs =
3949a63f55cf17629426d976830429a7612387532195Rika Brooks            new ArrayList<CdmaSmsBroadcastConfigInfo>();
3950a63f55cf17629426d976830429a7612387532195Rika Brooks        for (CdmaSmsBroadcastConfigInfo config : configs) {
3951a63f55cf17629426d976830429a7612387532195Rika Brooks            for (int i = config.getFromServiceCategory(); i <= config.getToServiceCategory(); i++) {
3952a63f55cf17629426d976830429a7612387532195Rika Brooks                processedConfigs.add(new CdmaSmsBroadcastConfigInfo(i,
3953a63f55cf17629426d976830429a7612387532195Rika Brooks                        i,
3954a63f55cf17629426d976830429a7612387532195Rika Brooks                        config.getLanguage(),
3955a63f55cf17629426d976830429a7612387532195Rika Brooks                        config.isSelected()));
3956a63f55cf17629426d976830429a7612387532195Rika Brooks            }
39570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
39580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3959a63f55cf17629426d976830429a7612387532195Rika Brooks        CdmaSmsBroadcastConfigInfo[] rilConfigs = processedConfigs.toArray(configs);
396022d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(rilConfigs.length);
3961a63f55cf17629426d976830429a7612387532195Rika Brooks        for(int i = 0; i < rilConfigs.length; i++) {
396222d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville            rr.mParcel.writeInt(rilConfigs[i].getFromServiceCategory());
396322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville            rr.mParcel.writeInt(rilConfigs[i].getLanguage());
396422d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville            rr.mParcel.writeInt(rilConfigs[i].isSelected() ? 1 : 0);
3965a63f55cf17629426d976830429a7612387532195Rika Brooks        }
3966a63f55cf17629426d976830429a7612387532195Rika Brooks
3967a63f55cf17629426d976830429a7612387532195Rika Brooks        if (RILJ_LOGD) {
3968a63f55cf17629426d976830429a7612387532195Rika Brooks            riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
3969a63f55cf17629426d976830429a7612387532195Rika Brooks                    + " with " + rilConfigs.length + " configs : ");
3970a63f55cf17629426d976830429a7612387532195Rika Brooks            for (int i = 0; i < rilConfigs.length; i++) {
3971a63f55cf17629426d976830429a7612387532195Rika Brooks                riljLog(rilConfigs[i].toString());
3972a63f55cf17629426d976830429a7612387532195Rika Brooks            }
3973a63f55cf17629426d976830429a7612387532195Rika Brooks        }
39740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
39750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
39760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
39770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3978cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
39790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void setCdmaBroadcastActivation(boolean activate, Message response) {
39800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CDMA_BROADCAST_ACTIVATION, response);
39810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
398222d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(1);
398322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeInt(activate ? 0 :1);
39840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
39850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
39860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
39870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
39880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
39890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
39900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
39910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
39920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
3993cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
39940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void exitEmergencyCallbackMode(Message response) {
39950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_EXIT_EMERGENCY_CALLBACK_MODE, response);
39960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
39970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
39980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
39990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
40000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
40010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4002cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
40030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void requestIsimAuthentication(String nonce, Message response) {
40040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_ISIM_AUTHENTICATION, response);
40050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
400622d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        rr.mParcel.writeString(nonce);
40070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
40080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
40090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
40100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
40110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
40120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
40135fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville    /**
40145fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville     * {@inheritDoc}
40155fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville     */
40165fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville    @Override
40175fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville    public void getCellInfoList(Message result) {
40185fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_GET_CELL_INFO_LIST, result);
40195fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville
40205fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
40215fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville
40225fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville        send(rr);
40235fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville    }
40245fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville
40255fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville    /**
40265fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville     * {@inheritDoc}
40275fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville     */
40285fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville    @Override
40295fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville    public void setCellInfoListRate(int rateInMillis, Message response) {
40305fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville        if (RILJ_LOGD) riljLog("setCellInfoListRate: " + rateInMillis);
40315fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_SET_UNSOL_CELL_INFO_LIST_RATE, response);
40325fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville
40335fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville        rr.mParcel.writeInt(1);
40345fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville        rr.mParcel.writeInt(rateInMillis);
40355fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville
40365fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
40375fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville
40385fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville        send(rr);
40395fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville    }
40405fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville
40410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /* (non-Javadoc)
40420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @see com.android.internal.telephony.BaseCommands#testingEmergencyCall()
40430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
40440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override
40450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testingEmergencyCall() {
40460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog("testingEmergencyCall");
40470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mTestingEmergencyCall.set(true);
40480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
40490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
40500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
405105ef3b65972826780859b9acbd1fa9580d099832Alex Yakavenka        pw.println("RIL: " + this);
40520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        pw.println(" mSocket=" + mSocket);
40530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        pw.println(" mSenderThread=" + mSenderThread);
40540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        pw.println(" mSender=" + mSender);
40550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        pw.println(" mReceiverThread=" + mReceiverThread);
40560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        pw.println(" mReceiver=" + mReceiver);
40570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        pw.println(" mWakeLock=" + mWakeLock);
40580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        pw.println(" mWakeLockTimeout=" + mWakeLockTimeout);
4059892e1fecf3c3736c4c04cf219d01034f71307065Robert Greenwalt        synchronized (mRequestList) {
40600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville          pw.println(" mRequestMessagesPending=" + mRequestMessagesPending);
40610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville          pw.println(" mRequestMessagesWaiting=" + mRequestMessagesWaiting);
4062892e1fecf3c3736c4c04cf219d01034f71307065Robert Greenwalt            int count = mRequestList.size();
40630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            pw.println(" mRequestList count=" + count);
40640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            for (int i = 0; i < count; i++) {
4065892e1fecf3c3736c4c04cf219d01034f71307065Robert Greenwalt                RILRequest rr = mRequestList.get(i);
40660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                pw.println("  [" + rr.mSerial + "] " + requestToString(rr.mRequest));
40670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
40680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
40690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        pw.println(" mLastNITZTimeInfo=" + mLastNITZTimeInfo);
40700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        pw.println(" mTestingEmergencyCall=" + mTestingEmergencyCall.get());
40710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
40720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville}
4073