RIL.java revision cf57b29a755b0249da687201bcc726941d37d42b
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;
440825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.telephony.NeighboringCellInfo;
450825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.telephony.PhoneNumberUtils;
465b81adc82a53b3064f4baa3acfeabef31586588aUma Maheswari Ramalingamimport android.telephony.SignalStrength;
470825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.telephony.SmsManager;
480825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.telephony.SmsMessage;
490825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.text.TextUtils;
50ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Savilleimport android.telephony.Rlog;
510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
520825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.gsm.SmsBroadcastConfigInfo;
530825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.gsm.SuppServiceNotification;
54d720945f2be5ea5fe0faf67e67d9ea0e184eba67Alex Yakavenkaimport com.android.internal.telephony.uicc.IccCardApplicationStatus;
55d720945f2be5ea5fe0faf67e67d9ea0e184eba67Alex Yakavenkaimport com.android.internal.telephony.uicc.IccCardStatus;
56d720945f2be5ea5fe0faf67e67d9ea0e184eba67Alex Yakavenkaimport com.android.internal.telephony.uicc.IccIoResult;
57d720945f2be5ea5fe0faf67e67d9ea0e184eba67Alex Yakavenkaimport com.android.internal.telephony.uicc.IccRefreshResponse;
58d720945f2be5ea5fe0faf67e67d9ea0e184eba67Alex Yakavenkaimport com.android.internal.telephony.uicc.IccUtils;
590825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.cdma.CdmaCallWaitingNotification;
600825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.cdma.CdmaInformationRecords;
610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
620825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.io.ByteArrayInputStream;
630825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.io.DataInputStream;
640825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.io.FileDescriptor;
650825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.io.IOException;
660825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.io.InputStream;
670825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.io.PrintWriter;
680825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.util.ArrayList;
690825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.util.Collections;
700825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.util.concurrent.atomic.AtomicBoolean;
710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville/**
730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * {@hide}
740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */
750825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleclass RILRequest {
760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    static final String LOG_TAG = "RILJ";
770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    //***** Class Variables
790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    static int sNextSerial = 0;
800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    static Object sSerialMonitor = new Object();
810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private static Object sPoolSync = new Object();
820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private static RILRequest sPool = null;
830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private static int sPoolSize = 0;
840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private static final int MAX_POOL_SIZE = 4;
850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    //***** Instance Variables
870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    int mSerial;
880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    int mRequest;
890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    Message mResult;
900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    Parcel mp;
910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    RILRequest mNext;
920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Retrieves a new RILRequest instance from the pool.
950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @param request RIL_REQUEST_*
970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @param result sent when operation completes
980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @return a RILRequest instance from the pool.
990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
1000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    static RILRequest obtain(int request, Message result) {
1010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = null;
1020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        synchronized(sPoolSync) {
1040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (sPool != null) {
1050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                rr = sPool;
1060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                sPool = rr.mNext;
1070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                rr.mNext = null;
1080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                sPoolSize--;
1090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
1100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
1110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (rr == null) {
1130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            rr = new RILRequest();
1140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
1150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        synchronized(sSerialMonitor) {
1170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            rr.mSerial = sNextSerial++;
1180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
1190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mRequest = request;
1200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mResult = result;
1210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp = Parcel.obtain();
1220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (result != null && result.getTarget() == null) {
1240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            throw new NullPointerException("Message target must not be null");
1250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
1260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // first elements in any RIL Parcel
1280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(request);
1290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(rr.mSerial);
1300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return rr;
1320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
1350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Returns a RILRequest instance to the pool.
1360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
1370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Note: This should only be called once per use.
1380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
1390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    void release() {
1400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        synchronized (sPoolSync) {
1410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (sPoolSize < MAX_POOL_SIZE) {
1420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                this.mNext = sPool;
1430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                sPool = this;
1440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                sPoolSize++;
1450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                mResult = null;
1460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
1470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
1480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private RILRequest() {
1510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    static void
1540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    resetSerial() {
1550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        synchronized(sSerialMonitor) {
1560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            sNextSerial = 0;
1570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
1580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    String
1610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    serialString() {
1620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //Cheesy way to do %04d
1630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        StringBuilder sb = new StringBuilder(8);
1640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String sn;
1650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        sn = Integer.toString(mSerial);
1670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //sb.append("J[");
1690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        sb.append('[');
1700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        for (int i = 0, s = sn.length() ; i < 4 - s; i++) {
1710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            sb.append('0');
1720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
1730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        sb.append(sn);
1750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        sb.append(']');
1760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return sb.toString();
1770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    void
1800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    onError(int error, Object ret) {
1810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        CommandException ex;
1820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        ex = CommandException.fromRilErrno(error);
1840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
185ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville        if (RIL.RILJ_LOGD) Rlog.d(LOG_TAG, serialString() + "< "
1860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            + RIL.requestToString(mRequest)
1870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            + " error: " + ex);
1880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (mResult != null) {
1900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            AsyncResult.forMessage(mResult, ret, ex);
1910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            mResult.sendToTarget();
1920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
1930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (mp != null) {
1950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            mp.recycle();
1960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            mp = null;
1970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
1980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville}
2000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville/**
2030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * RIL implementation of the CommandsInterface.
2040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville *
2050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * {@hide}
2060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */
2070825495a331bb44df395a0cdb79fab85e68db5d5Wink Savillepublic final class RIL extends BaseCommands implements CommandsInterface {
2080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    static final String LOG_TAG = "RILJ";
2090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    static final boolean RILJ_LOGD = true;
2100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    static final boolean RILJ_LOGV = false; // STOP SHIP if true
2110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
2130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Wake lock timeout should be longer than the longest timeout in
2140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * the vendor ril.
2150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
2160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private static final int DEFAULT_WAKE_LOCK_TIMEOUT = 60000;
2170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    //***** Instance Variables
2190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    LocalSocket mSocket;
2210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    HandlerThread mSenderThread;
2220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    RILSender mSender;
2230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    Thread mReceiverThread;
2240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    RILReceiver mReceiver;
2250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    WakeLock mWakeLock;
2260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    int mWakeLockTimeout;
2270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // The number of requests pending to be sent out, it increases before calling
2280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // EVENT_SEND and decreases while handling EVENT_SEND. It gets cleared while
2290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // WAKE_LOCK_TIMEOUT occurs.
2300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    int mRequestMessagesPending;
2310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // The number of requests sent out but waiting for response. It increases while
2320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // sending request and decreases while handling response. It should match
2330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // mRequestList.size() unless there are requests no replied while
2340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // WAKE_LOCK_TIMEOUT occurs.
2350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    int mRequestMessagesWaiting;
2360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    //I'd rather this be LinkedList or something
238892e1fecf3c3736c4c04cf219d01034f71307065Robert Greenwalt    ArrayList<RILRequest> mRequestList = new ArrayList<RILRequest>();
2390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    Object     mLastNITZTimeInfo;
2410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // When we are testing emergency calls
2430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    AtomicBoolean mTestingEmergencyCall = new AtomicBoolean(false);
2440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    //***** Events
2460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    static final int EVENT_SEND                 = 1;
2480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    static final int EVENT_WAKE_LOCK_TIMEOUT    = 2;
2490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    //***** Constants
2510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // match with constant in ril.cpp
2530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    static final int RIL_MAX_COMMAND_BYTES = (8 * 1024);
2540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    static final int RESPONSE_SOLICITED = 0;
2550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    static final int RESPONSE_UNSOLICITED = 1;
2560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    static final String SOCKET_NAME_RIL = "rild";
2580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    static final int SOCKET_OPEN_RETRY_MILLIS = 4 * 1000;
2600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // The number of the required config values for broadcast SMS stored in the C struct
2620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // RIL_CDMA_BroadcastServiceInfo
2630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private static final int CDMA_BSI_NO_OF_INTS_STRUCT = 3;
2640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private static final int CDMA_BROADCAST_SMS_NO_OF_SERVICE_CATEGORIES = 31;
2660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {
2680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        @Override
2690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        public void onReceive(Context context, Intent intent) {
2700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
2710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                sendScreenState(true);
2720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            } else if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
2730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                sendScreenState(false);
2740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            } else {
275ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville                Rlog.w(LOG_TAG, "RIL received unexpected Intent: " + intent.getAction());
2760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
2770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
2780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    };
2790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    class RILSender extends Handler implements Runnable {
2810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        public RILSender(Looper looper) {
2820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            super(looper);
2830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
2840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // Only allocated once
2860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        byte[] dataLength = new byte[4];
2870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //***** Runnable implementation
2890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        public void
2900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        run() {
2910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            //setup if needed
2920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
2930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //***** Handler implementation
2960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        @Override public void
2970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        handleMessage(Message msg) {
2980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            RILRequest rr = (RILRequest)(msg.obj);
2990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            RILRequest req = null;
3000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            switch (msg.what) {
3020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                case EVENT_SEND:
3030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    /**
3040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                     * mRequestMessagePending++ already happened for every
3050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                     * EVENT_SEND, thus we must make sure
3060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                     * mRequestMessagePending-- happens once and only once
3070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                     */
3080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    boolean alreadySubtracted = false;
3090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    try {
3100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        LocalSocket s;
3110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        s = mSocket;
3130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        if (s == null) {
3150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            rr.onError(RADIO_NOT_AVAILABLE, null);
3160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            rr.release();
3170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            if (mRequestMessagesPending > 0)
3180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                mRequestMessagesPending--;
3190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            alreadySubtracted = true;
3200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            return;
3210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        }
3220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
323892e1fecf3c3736c4c04cf219d01034f71307065Robert Greenwalt                        synchronized (mRequestList) {
324892e1fecf3c3736c4c04cf219d01034f71307065Robert Greenwalt                            mRequestList.add(rr);
3250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            mRequestMessagesWaiting++;
3260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        }
3270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        if (mRequestMessagesPending > 0)
3290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            mRequestMessagesPending--;
3300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        alreadySubtracted = true;
3310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        byte[] data;
3330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        data = rr.mp.marshall();
3350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        rr.mp.recycle();
3360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        rr.mp = null;
3370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        if (data.length > RIL_MAX_COMMAND_BYTES) {
3390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            throw new RuntimeException(
3400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                    "Parcel larger than max bytes allowed! "
3410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                                          + data.length);
3420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        }
3430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        // parcel length in big endian
3450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        dataLength[0] = dataLength[1] = 0;
3460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        dataLength[2] = (byte)((data.length >> 8) & 0xff);
3470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        dataLength[3] = (byte)((data.length) & 0xff);
3480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
349ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville                        //Rlog.v(LOG_TAG, "writing packet: " + data.length + " bytes");
3500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        s.getOutputStream().write(dataLength);
3520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        s.getOutputStream().write(data);
3530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    } catch (IOException ex) {
354ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville                        Rlog.e(LOG_TAG, "IOException", ex);
3550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        req = findAndRemoveRequestFromList(rr.mSerial);
3560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        // make sure this request has not already been handled,
3570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        // eg, if RILReceiver cleared the list.
3580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        if (req != null || !alreadySubtracted) {
3590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            rr.onError(RADIO_NOT_AVAILABLE, null);
3600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            rr.release();
3610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        }
3620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    } catch (RuntimeException exc) {
363ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville                        Rlog.e(LOG_TAG, "Uncaught exception ", exc);
3640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        req = findAndRemoveRequestFromList(rr.mSerial);
3650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        // make sure this request has not already been handled,
3660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        // eg, if RILReceiver cleared the list.
3670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        if (req != null || !alreadySubtracted) {
3680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            rr.onError(GENERIC_FAILURE, null);
3690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            rr.release();
3700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        }
3710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    } finally {
3720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        // Note: We are "Done" only if there are no outstanding
3730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        // requests or replies. Thus this code path will only release
3740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        // the wake lock on errors.
3750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        releaseWakeLockIfDone();
3760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    }
3770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    if (!alreadySubtracted && mRequestMessagesPending > 0) {
3790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        mRequestMessagesPending--;
3800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    }
3810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    break;
3830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                case EVENT_WAKE_LOCK_TIMEOUT:
3850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    // Haven't heard back from the last request.  Assume we're
3860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    // not getting a response and  release the wake lock.
3870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    synchronized (mWakeLock) {
3880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        if (mWakeLock.isHeld()) {
3890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            // The timer of WAKE_LOCK_TIMEOUT is reset with each
3900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            // new send request. So when WAKE_LOCK_TIMEOUT occurs
3910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            // all requests in mRequestList already waited at
3920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            // least DEFAULT_WAKE_LOCK_TIMEOUT but no response.
3930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            // Reset mRequestMessagesWaiting to enable
3940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            // releaseWakeLockIfDone().
3950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            //
3960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            // Note: Keep mRequestList so that delayed response
3970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            // can still be handled when response finally comes.
3980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            if (mRequestMessagesWaiting != 0) {
399ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville                                Rlog.d(LOG_TAG, "NOTE: mReqWaiting is NOT 0 but"
4000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                        + mRequestMessagesWaiting + " at TIMEOUT, reset!"
4010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                        + " There still msg waitng for response");
4020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                mRequestMessagesWaiting = 0;
4040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                if (RILJ_LOGD) {
406892e1fecf3c3736c4c04cf219d01034f71307065Robert Greenwalt                                    synchronized (mRequestList) {
407892e1fecf3c3736c4c04cf219d01034f71307065Robert Greenwalt                                        int count = mRequestList.size();
408ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville                                        Rlog.d(LOG_TAG, "WAKE_LOCK_TIMEOUT " +
4090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                                " mRequestList=" + count);
4100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                        for (int i = 0; i < count; i++) {
412892e1fecf3c3736c4c04cf219d01034f71307065Robert Greenwalt                                            rr = mRequestList.get(i);
413ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville                                            Rlog.d(LOG_TAG, i + ": [" + rr.mSerial + "] "
4140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                                    + requestToString(rr.mRequest));
4150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                        }
4160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                    }
4170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                }
4180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            }
4190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            // mRequestMessagesPending shows how many
4200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            // requests are waiting to be sent (and before
4210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            // to be added in request list) since star the
4220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            // WAKE_LOCK_TIMEOUT timer. Since WAKE_LOCK_TIMEOUT
4230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            // is the expected time to get response, all requests
4240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            // should already sent out (i.e.
4250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            // mRequestMessagesPending is 0 )while TIMEOUT occurs.
4260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            if (mRequestMessagesPending != 0) {
427ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville                                Rlog.e(LOG_TAG, "ERROR: mReqPending is NOT 0 but"
4280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                        + mRequestMessagesPending + " at TIMEOUT, reset!");
4290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                mRequestMessagesPending = 0;
4300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            }
4320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            mWakeLock.release();
4330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        }
4340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    }
4350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    break;
4360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
4370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
4380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
4390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
4410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Reads in a single RIL message off the wire. A RIL message consists
4420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * of a 4-byte little-endian length and a subsequent series of bytes.
4430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * The final message (length header omitted) is read into
4440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * <code>buffer</code> and the length of the final message (less header)
4450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * is returned. A return value of -1 indicates end-of-stream.
4460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
4470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @param is non-null; Stream to read from
4480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @param buffer Buffer to fill in. Must be as large as maximum
4490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * message size, or an ArrayOutOfBounds exception will be thrown.
4500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @return Length of message less header, or -1 on end of stream.
4510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @throws IOException
4520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
4530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private static int readRilMessage(InputStream is, byte[] buffer)
4540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            throws IOException {
4550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int countRead;
4560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int offset;
4570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int remaining;
4580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int messageLength;
4590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // First, read in the length of the message
4610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        offset = 0;
4620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        remaining = 4;
4630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        do {
4640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            countRead = is.read(buffer, offset, remaining);
4650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (countRead < 0 ) {
467ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville                Rlog.e(LOG_TAG, "Hit EOS reading message length");
4680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                return -1;
4690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
4700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            offset += countRead;
4720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            remaining -= countRead;
4730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } while (remaining > 0);
4740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        messageLength = ((buffer[0] & 0xff) << 24)
4760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                | ((buffer[1] & 0xff) << 16)
4770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                | ((buffer[2] & 0xff) << 8)
4780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                | (buffer[3] & 0xff);
4790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // Then, re-use the buffer and read in the message itself
4810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        offset = 0;
4820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        remaining = messageLength;
4830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        do {
4840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            countRead = is.read(buffer, offset, remaining);
4850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (countRead < 0 ) {
487ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville                Rlog.e(LOG_TAG, "Hit EOS reading message.  messageLength=" + messageLength
4880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        + " remaining=" + remaining);
4890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                return -1;
4900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
4910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            offset += countRead;
4930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            remaining -= countRead;
4940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } while (remaining > 0);
4950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return messageLength;
4970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
4980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    class RILReceiver implements Runnable {
5000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        byte[] buffer;
5010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILReceiver() {
5030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            buffer = new byte[RIL_MAX_COMMAND_BYTES];
5040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
5050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        public void
5070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        run() {
5080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            int retryCount = 0;
5090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            try {for (;;) {
5110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                LocalSocket s = null;
5120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                LocalSocketAddress l;
5130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                try {
5150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    s = new LocalSocket();
5160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    l = new LocalSocketAddress(SOCKET_NAME_RIL,
5170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            LocalSocketAddress.Namespace.RESERVED);
5180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    s.connect(l);
5190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                } catch (IOException ex){
5200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    try {
5210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        if (s != null) {
5220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            s.close();
5230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        }
5240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    } catch (IOException ex2) {
5250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        //ignore failure to close after failure to connect
5260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    }
5270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    // don't print an error message after the the first time
5290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    // or after the 8th time
5300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    if (retryCount == 8) {
532ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville                        Rlog.e (LOG_TAG,
5330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            "Couldn't find '" + SOCKET_NAME_RIL
5340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            + "' socket after " + retryCount
5350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            + " times, continuing to retry silently");
5360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    } else if (retryCount > 0 && retryCount < 8) {
537ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville                        Rlog.i (LOG_TAG,
5380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            "Couldn't find '" + SOCKET_NAME_RIL
5390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            + "' socket; retrying after timeout");
5400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    }
5410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    try {
5430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        Thread.sleep(SOCKET_OPEN_RETRY_MILLIS);
5440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    } catch (InterruptedException er) {
5450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    }
5460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    retryCount++;
5480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    continue;
5490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
5500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                retryCount = 0;
5520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                mSocket = s;
554ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville                Rlog.i(LOG_TAG, "Connected to '" + SOCKET_NAME_RIL + "' socket");
5550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                int length = 0;
5570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                try {
5580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    InputStream is = mSocket.getInputStream();
5590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    for (;;) {
5610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        Parcel p;
5620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        length = readRilMessage(is, buffer);
5640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        if (length < 0) {
5660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            // End-of-stream reached
5670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            break;
5680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        }
5690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        p = Parcel.obtain();
5710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        p.unmarshall(buffer, 0, length);
5720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        p.setDataPosition(0);
5730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
574ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville                        //Rlog.v(LOG_TAG, "Read packet: " + length + " bytes");
5750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        processResponse(p);
5770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        p.recycle();
5780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    }
5790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                } catch (java.io.IOException ex) {
580ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville                    Rlog.i(LOG_TAG, "'" + SOCKET_NAME_RIL + "' socket closed",
5810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                          ex);
5820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                } catch (Throwable tr) {
583ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville                    Rlog.e(LOG_TAG, "Uncaught exception read length=" + length +
5840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        "Exception:" + tr.toString());
5850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
5860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
587ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville                Rlog.i(LOG_TAG, "Disconnected from '" + SOCKET_NAME_RIL
5880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                      + "' socket");
5890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                setRadioState (RadioState.RADIO_UNAVAILABLE);
5910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                try {
5930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mSocket.close();
5940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                } catch (IOException ex) {
5950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
5960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                mSocket = null;
5980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                RILRequest.resetSerial();
5990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                // Clear request list on close
601892e1fecf3c3736c4c04cf219d01034f71307065Robert Greenwalt                clearRequestList(RADIO_NOT_AVAILABLE, false);
6020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }} catch (Throwable tr) {
603ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville                Rlog.e(LOG_TAG,"Uncaught exception", tr);
6040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
6050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            /* We're disconnected so we don't know the ril version */
6070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            notifyRegistrantsRilConnectionChanged(-1);
6080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
6090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
6100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    //***** Constructors
6140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public RIL(Context context, int preferredNetworkType, int cdmaSubscription) {
6160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        super(context);
6170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) {
6180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            riljLog("RIL(context, preferredNetworkType=" + preferredNetworkType +
6190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    " cdmaSubscription=" + cdmaSubscription + ")");
6200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
6210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mCdmaSubscription  = cdmaSubscription;
6220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mPreferredNetworkType = preferredNetworkType;
6230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mPhoneType = RILConstants.NO_PHONE;
6240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
6260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, LOG_TAG);
6270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mWakeLock.setReferenceCounted(false);
6280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mWakeLockTimeout = SystemProperties.getInt(TelephonyProperties.PROPERTY_WAKE_LOCK_TIMEOUT,
6290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                DEFAULT_WAKE_LOCK_TIMEOUT);
6300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mRequestMessagesPending = 0;
6310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mRequestMessagesWaiting = 0;
6320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mSenderThread = new HandlerThread("RILSender");
6340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mSenderThread.start();
6350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        Looper looper = mSenderThread.getLooper();
6370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mSender = new RILSender(looper);
6380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        ConnectivityManager cm = (ConnectivityManager)context.getSystemService(
6400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                Context.CONNECTIVITY_SERVICE);
6410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (cm.isNetworkSupported(ConnectivityManager.TYPE_MOBILE) == false) {
6420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            riljLog("Not starting RILReceiver: wifi-only");
6430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else {
6440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            riljLog("Starting RILReceiver");
6450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            mReceiver = new RILReceiver();
6460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            mReceiverThread = new Thread(mReceiver, "RILReceiver");
6470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            mReceiverThread.start();
6480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            IntentFilter filter = new IntentFilter();
6500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            filter.addAction(Intent.ACTION_SCREEN_ON);
6510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            filter.addAction(Intent.ACTION_SCREEN_OFF);
6520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            context.registerReceiver(mIntentReceiver, filter);
6530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
6540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
6550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    //***** CommandsInterface implementation
6570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void getVoiceRadioTechnology(Message result) {
6590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_VOICE_RADIO_TECH, result);
6600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
6620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
6640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
6650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override public void
6680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    setOnNITZTime(Handler h, int what, Object obj) {
6690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        super.setOnNITZTime(h, what, obj);
6700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // Send the last NITZ time if we have it
6720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (mLastNITZTimeInfo != null) {
6730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            mNITZTimeRegistrant
6740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                .notifyRegistrant(
6750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    new AsyncResult (null, mLastNITZTimeInfo, null));
6760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            mLastNITZTimeInfo = null;
6770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
6780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
6790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
6810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    getIccCardStatus(Message result) {
6820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //Note: This RIL request has not been renamed to ICC,
6830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //       but this request is also valid for SIM and RUIM
6840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_GET_SIM_STATUS, result);
6850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
6870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
6890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
6900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override public void
6920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    supplyIccPin(String pin, Message result) {
6930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        supplyIccPinForApp(pin, null, result);
6940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
6950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override public void
6970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    supplyIccPinForApp(String pin, String aid, Message result) {
6980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //Note: This RIL request has not been renamed to ICC,
6990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //       but this request is also valid for SIM and RUIM
7000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_ENTER_SIM_PIN, result);
7010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
7030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(2);
7050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeString(pin);
7060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeString(aid);
7070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
7090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
7100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override public void
7120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    supplyIccPuk(String puk, String newPin, Message result) {
7130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        supplyIccPukForApp(puk, newPin, null, result);
7140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
7150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override public void
7170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    supplyIccPukForApp(String puk, String newPin, String aid, Message result) {
7180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //Note: This RIL request has not been renamed to ICC,
7190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //       but this request is also valid for SIM and RUIM
7200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_ENTER_SIM_PUK, result);
7210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
7230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(3);
7250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeString(puk);
7260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeString(newPin);
7270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeString(aid);
7280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
7300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
7310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override public void
7330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    supplyIccPin2(String pin, Message result) {
7340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        supplyIccPin2ForApp(pin, null, result);
7350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
7360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override public void
7380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    supplyIccPin2ForApp(String pin, String aid, Message result) {
7390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //Note: This RIL request has not been renamed to ICC,
7400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //       but this request is also valid for SIM and RUIM
7410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_ENTER_SIM_PIN2, result);
7420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
7440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(2);
7460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeString(pin);
7470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeString(aid);
7480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
7500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
7510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override public void
7530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    supplyIccPuk2(String puk2, String newPin2, Message result) {
7540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        supplyIccPuk2ForApp(puk2, newPin2, null, result);
7550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
7560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override public void
7580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    supplyIccPuk2ForApp(String puk, String newPin2, String aid, Message result) {
7590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //Note: This RIL request has not been renamed to ICC,
7600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //       but this request is also valid for SIM and RUIM
7610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_ENTER_SIM_PUK2, result);
7620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
7640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(3);
7660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeString(puk);
7670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeString(newPin2);
7680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeString(aid);
7690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
7710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
7720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override public void
7740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    changeIccPin(String oldPin, String newPin, Message result) {
7750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        changeIccPinForApp(oldPin, newPin, null, result);
7760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
7770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override public void
7790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    changeIccPinForApp(String oldPin, String newPin, String aid, Message result) {
7800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //Note: This RIL request has not been renamed to ICC,
7810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //       but this request is also valid for SIM and RUIM
7820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CHANGE_SIM_PIN, result);
7830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
7850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(3);
7870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeString(oldPin);
7880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeString(newPin);
7890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeString(aid);
7900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
7920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
7930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override public void
7950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    changeIccPin2(String oldPin2, String newPin2, Message result) {
7960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        changeIccPin2ForApp(oldPin2, newPin2, null, result);
7970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
7980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override public void
8000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    changeIccPin2ForApp(String oldPin2, String newPin2, String aid, Message result) {
8010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //Note: This RIL request has not been renamed to ICC,
8020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //       but this request is also valid for SIM and RUIM
8030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CHANGE_SIM_PIN2, result);
8040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
8060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(3);
8080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeString(oldPin2);
8090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeString(newPin2);
8100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeString(aid);
8110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
8130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
8140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
8160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    changeBarringPassword(String facility, String oldPwd, String newPwd, Message result) {
8170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CHANGE_BARRING_PASSWORD, result);
8180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
8200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(3);
8220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeString(facility);
8230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeString(oldPwd);
8240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeString(newPwd);
8250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
8270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
8280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
8300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    supplyNetworkDepersonalization(String netpin, Message result) {
8310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_ENTER_NETWORK_DEPERSONALIZATION, result);
8320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
8340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(1);
8360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeString(netpin);
8370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
8390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
8400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
8420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    getCurrentCalls (Message result) {
8430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_GET_CURRENT_CALLS, result);
8440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
8460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
8480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
8490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Deprecated public void
8510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    getPDPContextList(Message result) {
8520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        getDataCallList(result);
8530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
8540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
8560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    getDataCallList(Message result) {
8570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_DATA_CALL_LIST, result);
8580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
8600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
8620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
8630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
8650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    dial (String address, int clirMode, Message result) {
8660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        dial(address, clirMode, null, result);
8670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
8680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
8700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    dial(String address, int clirMode, UUSInfo uusInfo, Message result) {
8710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_DIAL, result);
8720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeString(address);
8740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(clirMode);
8750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(0); // UUS information is absent
8760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (uusInfo == null) {
8780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            rr.mp.writeInt(0); // UUS information is absent
8790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else {
8800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            rr.mp.writeInt(1); // UUS information is present
8810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            rr.mp.writeInt(uusInfo.getType());
8820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            rr.mp.writeInt(uusInfo.getDcs());
8830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            rr.mp.writeByteArray(uusInfo.getUserData());
8840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
8850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
8870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
8890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
8900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
8920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    getIMSI(Message result) {
8930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        getIMSIForApp(null, result);
8940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
8950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
8970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    getIMSIForApp(String aid, Message result) {
8980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_GET_IMSI, result);
8990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(1);
9010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeString(aid);
9020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() +
9040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                              "> getIMSI: " + requestToString(rr.mRequest)
9050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                              + " aid: " + aid);
9060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
9080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
9090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
9110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    getIMEI(Message result) {
9120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_GET_IMEI, result);
9130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
9150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
9170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
9180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
9200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    getIMEISV(Message result) {
9210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_GET_IMEISV, result);
9220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
9240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
9260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
9270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
9300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    hangupConnection (int gsmIndex, Message result) {
9310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog("hangupConnection: gsmIndex=" + gsmIndex);
9320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_HANGUP, result);
9340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " " +
9360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                gsmIndex);
9370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(1);
9390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(gsmIndex);
9400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
9420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
9430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
9450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    hangupWaitingOrBackground (Message result) {
9460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_HANGUP_WAITING_OR_BACKGROUND,
9470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                        result);
9480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
9500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
9520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
9530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
9550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    hangupForegroundResumeBackground (Message result) {
9560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
9570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(
9580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        RIL_REQUEST_HANGUP_FOREGROUND_RESUME_BACKGROUND,
9590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                        result);
9600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
9610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
9630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
9640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
9660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    switchWaitingOrHoldingAndActive (Message result) {
9670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
9680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(
9690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        RIL_REQUEST_SWITCH_WAITING_OR_HOLDING_AND_ACTIVE,
9700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                        result);
9710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
9720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
9740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
9750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
9770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    conference (Message result) {
9780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
9790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_CONFERENCE, result);
9800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
9820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
9840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
9850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void setPreferredVoicePrivacy(boolean enable, Message result) {
9880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CDMA_SET_PREFERRED_VOICE_PRIVACY_MODE,
9890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                result);
9900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(1);
9920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(enable ? 1:0);
9930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
9950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
9960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void getPreferredVoicePrivacy(Message result) {
9980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CDMA_QUERY_PREFERRED_VOICE_PRIVACY_MODE,
9990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                result);
10000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
10010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
10020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
10030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
10040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    separateConnection (int gsmIndex, Message result) {
10050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
10060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_SEPARATE_CONNECTION, result);
10070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
10080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
10090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            + " " + gsmIndex);
10100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
10110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(1);
10120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(gsmIndex);
10130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
10140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
10150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
10160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
10170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
10180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    acceptCall (Message result) {
10190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
10200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_ANSWER, result);
10210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
10220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
10230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
10240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
10250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
10260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
10270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
10280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    rejectCall (Message result) {
10290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
10300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_UDUB, result);
10310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
10320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
10330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
10340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
10350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
10360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
10370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
10380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    explicitCallTransfer (Message result) {
10390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
10400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_EXPLICIT_CALL_TRANSFER, result);
10410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
10420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
10430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
10440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
10450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
10460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
10470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
10480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    getLastCallFailCause (Message result) {
10490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
10500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_LAST_CALL_FAIL_CAUSE, result);
10510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
10520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
10530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
10540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
10550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
10560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
10570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
10580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @deprecated
10590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
10600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
10610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    getLastPdpFailCause (Message result) {
10620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        getLastDataCallFailCause (result);
10630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
10640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
10650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
10660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * The preferred new alternative to getLastPdpFailCause
10670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
10680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
10690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    getLastDataCallFailCause (Message result) {
10700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
10710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_LAST_DATA_CALL_FAIL_CAUSE, result);
10720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
10730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
10740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
10750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
10760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
10770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
10780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
10790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    setMute (boolean enableMute, Message response) {
10800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
10810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_SET_MUTE, response);
10820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
10830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
10840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            + " " + enableMute);
10850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
10860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(1);
10870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(enableMute ? 1 : 0);
10880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
10890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
10900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
10910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
10920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
10930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    getMute (Message response) {
10940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
10950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_GET_MUTE, response);
10960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
10970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
10980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
10990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
11000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
11010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
11030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    getSignalStrength (Message result) {
11040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
11050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_SIGNAL_STRENGTH, result);
11060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
11080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
11100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
11110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
11130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    getVoiceRegistrationState (Message result) {
11140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
11150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_VOICE_REGISTRATION_STATE, result);
11160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
11180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
11200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
11210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
11230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    getDataRegistrationState (Message result) {
11240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
11250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_DATA_REGISTRATION_STATE, result);
11260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
11280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
11300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
11310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
11330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    getOperator(Message result) {
11340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
11350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_OPERATOR, result);
11360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
11380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
11400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
11410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
11430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    sendDtmf(char c, Message result) {
11440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
11450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_DTMF, result);
11460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
11480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeString(Character.toString(c));
11500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
11520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
11530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
11550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    startDtmf(char c, Message result) {
11560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
11570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_DTMF_START, result);
11580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
11600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeString(Character.toString(c));
11620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
11640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
11650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
11670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    stopDtmf(Message result) {
11680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
11690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_DTMF_STOP, result);
11700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
11720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
11740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
11750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
11770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    sendBurstDtmf(String dtmfString, int on, int off, Message result) {
11780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CDMA_BURST_DTMF, result);
11790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(3);
11810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeString(dtmfString);
11820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeString(Integer.toString(on));
11830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeString(Integer.toString(off));
11840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
11860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + " : " + dtmfString);
11870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
11890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
11900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
11920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    sendSMS (String smscPDU, String pdu, Message result) {
11930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
11940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_SEND_SMS, result);
11950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(2);
11970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeString(smscPDU);
11980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeString(pdu);
11990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
12000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
12010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
12020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
12030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
12040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
12050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
12060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    sendCdmaSms(byte[] pdu, Message result) {
12070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int address_nbr_of_digits;
12080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int subaddr_nbr_of_digits;
12090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int bearerDataLength;
12100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        ByteArrayInputStream bais = new ByteArrayInputStream(pdu);
12110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        DataInputStream dis = new DataInputStream(bais);
12120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
12130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
12140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_CDMA_SEND_SMS, result);
12150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
12160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        try {
12170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            rr.mp.writeInt(dis.readInt()); //teleServiceId
12180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            rr.mp.writeByte((byte) dis.readInt()); //servicePresent
12190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            rr.mp.writeInt(dis.readInt()); //serviceCategory
12200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            rr.mp.writeInt(dis.read()); //address_digit_mode
12210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            rr.mp.writeInt(dis.read()); //address_nbr_mode
12220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            rr.mp.writeInt(dis.read()); //address_ton
12230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            rr.mp.writeInt(dis.read()); //address_nbr_plan
12240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            address_nbr_of_digits = (byte) dis.read();
12250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            rr.mp.writeByte((byte) address_nbr_of_digits);
12260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            for(int i=0; i < address_nbr_of_digits; i++){
12270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                rr.mp.writeByte(dis.readByte()); // address_orig_bytes[i]
12280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
12290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            rr.mp.writeInt(dis.read()); //subaddressType
12300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            rr.mp.writeByte((byte) dis.read()); //subaddr_odd
12310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            subaddr_nbr_of_digits = (byte) dis.read();
12320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            rr.mp.writeByte((byte) subaddr_nbr_of_digits);
12330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            for(int i=0; i < subaddr_nbr_of_digits; i++){
12340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                rr.mp.writeByte(dis.readByte()); //subaddr_orig_bytes[i]
12350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
12360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
12370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            bearerDataLength = dis.read();
12380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            rr.mp.writeInt(bearerDataLength);
12390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            for(int i=0; i < bearerDataLength; i++){
12400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                rr.mp.writeByte(dis.readByte()); //bearerData[i]
12410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
12420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }catch (IOException ex){
12430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (RILJ_LOGD) riljLog("sendSmsCdma: conversion from input stream to object failed: "
12440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    + ex);
12450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
12460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
12470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
12480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
12490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
12500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
12510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
12520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void deleteSmsOnSim(int index, Message response) {
12530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_DELETE_SMS_ON_SIM,
12540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                response);
12550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
12560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(1);
12570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(index);
12580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
12590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (false) {
12600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (RILJ_LOGD) riljLog(rr.serialString() + "> "
12610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    + requestToString(rr.mRequest)
12620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    + " " + index);
12630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
12640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
12650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
12660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
12670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
12680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void deleteSmsOnRuim(int index, Message response) {
12690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CDMA_DELETE_SMS_ON_RUIM,
12700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                response);
12710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
12720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(1);
12730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(index);
12740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
12750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (false) {
12760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (RILJ_LOGD) riljLog(rr.serialString() + "> "
12770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    + requestToString(rr.mRequest)
12780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    + " " + index);
12790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
12800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
12810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
12820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
12830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
12840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void writeSmsToSim(int status, String smsc, String pdu, Message response) {
12850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        status = translateStatus(status);
12860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
12870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_WRITE_SMS_TO_SIM,
12880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                response);
12890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
12900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(status);
12910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeString(pdu);
12920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeString(smsc);
12930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
12940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (false) {
12950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (RILJ_LOGD) riljLog(rr.serialString() + "> "
12960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    + requestToString(rr.mRequest)
12970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    + " " + status);
12980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
12990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
13000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
13010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
13020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
13030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void writeSmsToRuim(int status, String pdu, Message response) {
13040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        status = translateStatus(status);
13050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
13060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CDMA_WRITE_SMS_TO_RUIM,
13070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                response);
13080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
13090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(status);
13100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeString(pdu);
13110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
13120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (false) {
13130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (RILJ_LOGD) riljLog(rr.serialString() + "> "
13140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    + requestToString(rr.mRequest)
13150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    + " " + status);
13160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
13170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
13180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
13190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
13200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
13210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
13220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  Translates EF_SMS status bits to a status value compatible with
13230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  SMS AT commands.  See TS 27.005 3.1.
13240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
13250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private int translateStatus(int status) {
13260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        switch(status & 0x7) {
13270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case SmsManager.STATUS_ON_ICC_READ:
13280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                return 1;
13290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case SmsManager.STATUS_ON_ICC_UNREAD:
13300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                return 0;
13310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case SmsManager.STATUS_ON_ICC_SENT:
13320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                return 3;
13330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case SmsManager.STATUS_ON_ICC_UNSENT:
13340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                return 2;
13350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
13360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
13370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // Default to READ.
13380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return 1;
13390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
13400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
13410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
13420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    setupDataCall(String radioTechnology, String profile, String apn,
13430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            String user, String password, String authType, String protocol,
13440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            Message result) {
13450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
13460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_SETUP_DATA_CALL, result);
13470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
13480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(7);
13490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
13500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeString(radioTechnology);
13510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeString(profile);
13520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeString(apn);
13530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeString(user);
13540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeString(password);
13550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeString(authType);
13560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeString(protocol);
13570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
13580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> "
13590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + requestToString(rr.mRequest) + " " + radioTechnology + " "
13600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + profile + " " + apn + " " + user + " "
13610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + password + " " + authType + " " + protocol);
13620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
13630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
13640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
13650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
13660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
13670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    deactivateDataCall(int cid, int reason, Message result) {
13680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
13690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_DEACTIVATE_DATA_CALL, result);
13700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
13710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(2);
13720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeString(Integer.toString(cid));
13730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeString(Integer.toString(reason));
13740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
13750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " +
13760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                requestToString(rr.mRequest) + " " + cid + " " + reason);
13770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
13780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
13790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
13800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
13810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
13820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    setRadioPower(boolean on, Message result) {
13830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_RADIO_POWER, result);
13840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
13850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(1);
13860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(on ? 1 : 0);
13870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
13880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) {
13890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
13900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    + (on ? " on" : " off"));
13910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
13920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
13930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
13940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
13950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
13960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
13970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    setSuppServiceNotifications(boolean enable, Message result) {
13980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
13990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_SET_SUPP_SVC_NOTIFICATION, result);
14000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
14010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(1);
14020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(enable ? 1 : 0);
14030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
14040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> "
14050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + requestToString(rr.mRequest));
14060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
14070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
14080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
14090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
14100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
14110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    acknowledgeLastIncomingGsmSms(boolean success, int cause, Message result) {
14120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
14130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_SMS_ACKNOWLEDGE, result);
14140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
14150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(2);
14160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(success ? 1 : 0);
14170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(cause);
14180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
14190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
14200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + " " + success + " " + cause);
14210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
14220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
14230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
14240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
14250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
14260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    acknowledgeLastIncomingCdmaSms(boolean success, int cause, Message result) {
14270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
14280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_CDMA_SMS_ACKNOWLEDGE, result);
14290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
14300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(success ? 0 : 1); //RIL_CDMA_SMS_ErrorClass
14310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // cause code according to X.S004-550E
14320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(cause);
14330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
14340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
14350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + " " + success + " " + cause);
14360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
14370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
14380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
14390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
14400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
14410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    acknowledgeIncomingGsmSmsWithPdu(boolean success, String ackPdu, Message result) {
14420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
14430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_ACKNOWLEDGE_INCOMING_GSM_SMS_WITH_PDU, result);
14440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
14450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(2);
14460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeString(success ? "1" : "0");
14470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeString(ackPdu);
14480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
14490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
14500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + ' ' + success + " [" + ackPdu + ']');
14510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
14520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
14530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
14540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
14550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
14560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    iccIO (int command, int fileid, String path, int p1, int p2, int p3,
14570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            String data, String pin2, Message result) {
14580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        iccIOForApp(command, fileid, path, p1, p2, p3, data, pin2, null, result);
14590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
14600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
14610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    iccIOForApp (int command, int fileid, String path, int p1, int p2, int p3,
14620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            String data, String pin2, String aid, Message result) {
14630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //Note: This RIL request has not been renamed to ICC,
14640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //       but this request is also valid for SIM and RUIM
14650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
14660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_SIM_IO, result);
14670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
14680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(command);
14690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(fileid);
14700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeString(path);
14710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(p1);
14720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(p2);
14730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(p3);
14740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeString(data);
14750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeString(pin2);
14760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeString(aid);
14770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
14780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> iccIO: "
14790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + requestToString(rr.mRequest)
14800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + " 0x" + Integer.toHexString(command)
14810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + " 0x" + Integer.toHexString(fileid) + " "
14820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + " path: " + path + ","
14830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + p1 + "," + p2 + "," + p3
14840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + " aid: " + aid);
14850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
14860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
14870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
14880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
14890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
14900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    getCLIR(Message result) {
14910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
14920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_GET_CLIR, result);
14930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
14940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
14950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
14960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
14970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
14980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
14990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
15000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    setCLIR(int clirMode, Message result) {
15010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
15020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_SET_CLIR, result);
15030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
15040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // count ints
15050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(1);
15060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
15070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(clirMode);
15080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
15090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
15100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    + " " + clirMode);
15110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
15120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
15130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
15140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
15150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
15160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    queryCallWaiting(int serviceClass, Message response) {
15170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
15180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_QUERY_CALL_WAITING, response);
15190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
15200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(1);
15210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(serviceClass);
15220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
15230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
15240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    + " " + serviceClass);
15250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
15260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
15270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
15280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
15290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
15300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    setCallWaiting(boolean enable, int serviceClass, Message response) {
15310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
15320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_SET_CALL_WAITING, response);
15330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
15340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(2);
15350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(enable ? 1 : 0);
15360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(serviceClass);
15370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
15380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
15390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + " " + enable + ", " + serviceClass);
15400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
15410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
15420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
15430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
15440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
15450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    setNetworkSelectionModeAutomatic(Message response) {
15460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
15470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_SET_NETWORK_SELECTION_AUTOMATIC,
15480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                    response);
15490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
15500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
15510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
15520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
15530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
15540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
15550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
15560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    setNetworkSelectionModeManual(String operatorNumeric, Message response) {
15570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
15580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_SET_NETWORK_SELECTION_MANUAL,
15590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                    response);
15600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
15610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
15620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    + " " + operatorNumeric);
15630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
15640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeString(operatorNumeric);
15650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
15660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
15670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
15680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
15690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
15700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    getNetworkSelectionMode(Message response) {
15710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
15720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_QUERY_NETWORK_SELECTION_MODE,
15730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                    response);
15740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
15750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
15760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
15770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
15780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
15790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
15800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
15810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    getAvailableNetworks(Message response) {
15820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
15830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_QUERY_AVAILABLE_NETWORKS,
15840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                    response);
15850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
15860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
15870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
15880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
15890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
15900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
15910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
15920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    setCallForward(int action, int cfReason, int serviceClass,
15930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                String number, int timeSeconds, Message response) {
15940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
15950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_SET_CALL_FORWARD, response);
15960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
15970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(action);
15980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(cfReason);
15990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(serviceClass);
16000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(PhoneNumberUtils.toaFromString(number));
16010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeString(number);
16020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt (timeSeconds);
16030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
16040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
16050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    + " " + action + " " + cfReason + " " + serviceClass
16060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    + timeSeconds);
16070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
16080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
16090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
16100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
16110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
16120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    queryCallForwardStatus(int cfReason, int serviceClass,
16130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                String number, Message response) {
16140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
16150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            = RILRequest.obtain(RIL_REQUEST_QUERY_CALL_FORWARD_STATUS, response);
16160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
16170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(2); // 2 is for query action, not in used anyway
16180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(cfReason);
16190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(serviceClass);
16200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(PhoneNumberUtils.toaFromString(number));
16210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeString(number);
16220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt (0);
16230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
16240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
16250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + " " + cfReason + " " + serviceClass);
16260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
16270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
16280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
16290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
16300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
16310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    queryCLIP(Message response) {
16320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
16330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            = RILRequest.obtain(RIL_REQUEST_QUERY_CLIP, response);
16340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
16350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
16360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
16370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
16380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
16390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
16400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
16410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
16420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    getBasebandVersion (Message response) {
16430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
16440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_BASEBAND_VERSION, response);
16450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
16460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
16470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
16480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
16490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
16500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
16510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override
16520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
16530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    queryFacilityLock(String facility, String password, int serviceClass,
16540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            Message response) {
16550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        queryFacilityLockForApp(facility, password, serviceClass, null, response);
16560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
16570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
16580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override
16590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
16600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    queryFacilityLockForApp(String facility, String password, int serviceClass, String appId,
16610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            Message response) {
16620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_QUERY_FACILITY_LOCK, response);
16630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
166488e9c9700fbb6119c2564fb7173821c84b360d07Abhishek Adappa        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
166588e9c9700fbb6119c2564fb7173821c84b360d07Abhishek Adappa                                                 + " [" + facility + " " + serviceClass
166688e9c9700fbb6119c2564fb7173821c84b360d07Abhishek Adappa                                                 + " " + appId + "]");
16670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
16680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // count strings
16690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(4);
16700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
16710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeString(facility);
16720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeString(password);
16730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
16740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeString(Integer.toString(serviceClass));
16750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeString(appId);
16760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
16770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
16780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
16790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
16800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override
16810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
16820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    setFacilityLock (String facility, boolean lockState, String password,
16830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        int serviceClass, Message response) {
16840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        setFacilityLockForApp(facility, lockState, password, serviceClass, null, response);
16850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
16860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
16870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override
16880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
16890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    setFacilityLockForApp(String facility, boolean lockState, String password,
16900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        int serviceClass, String appId, Message response) {
16910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String lockString;
16920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville         RILRequest rr
16930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_SET_FACILITY_LOCK, response);
16940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
169588e9c9700fbb6119c2564fb7173821c84b360d07Abhishek Adappa        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
169688e9c9700fbb6119c2564fb7173821c84b360d07Abhishek Adappa                                                        + " [" + facility + " " + lockState
169788e9c9700fbb6119c2564fb7173821c84b360d07Abhishek Adappa                                                        + " " + serviceClass + " " + appId + "]");
16980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
16990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // count strings
17000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(5);
17010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
17020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeString(facility);
17030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        lockString = (lockState)?"1":"0";
17040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeString(lockString);
17050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeString(password);
17060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeString(Integer.toString(serviceClass));
17070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeString(appId);
17080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
17090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
17100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
17110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
17120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
17130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
17140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    sendUSSD (String ussdString, Message response) {
17150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
17160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_SEND_USSD, response);
17170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
171872000e2c06bbee97d5ce31c4f66befab8057cb71Cuihtlauac ALVARADO        if (RILJ_LOGD) {
171972000e2c06bbee97d5ce31c4f66befab8057cb71Cuihtlauac ALVARADO            String logUssdString = "*******";
172072000e2c06bbee97d5ce31c4f66befab8057cb71Cuihtlauac ALVARADO            if (RILJ_LOGV) logUssdString = ussdString;
172172000e2c06bbee97d5ce31c4f66befab8057cb71Cuihtlauac ALVARADO            riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
172272000e2c06bbee97d5ce31c4f66befab8057cb71Cuihtlauac ALVARADO                                   + " " + logUssdString);
172372000e2c06bbee97d5ce31c4f66befab8057cb71Cuihtlauac ALVARADO        }
17240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
17250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeString(ussdString);
17260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
17270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
17280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
17290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
17300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // inherited javadoc suffices
17310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void cancelPendingUssd (Message response) {
17320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
17330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_CANCEL_USSD, response);
17340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
17350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString()
17360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + "> " + requestToString(rr.mRequest));
17370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
17380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
17390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
17400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
17410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
17420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void resetRadio(Message result) {
17430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
17440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_RESET_RADIO, result);
17450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
17460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
17470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
17480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
17490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
17500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
17510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void invokeOemRilRequestRaw(byte[] data, Message response) {
17520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
17530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_OEM_HOOK_RAW, response);
17540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
17550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
17560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville               + "[" + IccUtils.bytesToHexString(data) + "]");
17570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
17580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeByteArray(data);
17590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
17600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
17610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
17620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
17630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
17640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void invokeOemRilRequestStrings(String[] strings, Message response) {
17650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
17660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_OEM_HOOK_STRINGS, response);
17670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
17680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
17690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
17700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeStringArray(strings);
17710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
17720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
17730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
17740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
17750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     /**
17760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Assign a specified band for RF configuration.
17770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
17780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @param bandMode one of BM_*_BAND
17790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @param response is callback message
17800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
17810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void setBandMode (int bandMode, Message response) {
17820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
17830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_SET_BAND_MODE, response);
17840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
17850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(1);
17860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(bandMode);
17870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
17880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
17890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                 + " " + bandMode);
17900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
17910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
17920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     }
17930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
17940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
17950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Query the list of band mode supported by RF.
17960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
17970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @param response is callback message
17980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *        ((AsyncResult)response.obj).result  is an int[] with every
17990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *        element representing one avialable BM_*_BAND
18000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
18010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void queryAvailableBandMode (Message response) {
18020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr
18030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = RILRequest.obtain(RIL_REQUEST_QUERY_AVAILABLE_BAND_MODE,
18040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                response);
18050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
18060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
18070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
18080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
18090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
18100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
18110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
18120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
18130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
18140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void sendTerminalResponse(String contents, Message response) {
18150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(
18160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                RILConstants.RIL_REQUEST_STK_SEND_TERMINAL_RESPONSE, response);
18170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
18180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
18190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
18200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeString(contents);
18210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
18220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
18230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
18240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
18250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
18260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
18270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void sendEnvelope(String contents, Message response) {
18280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(
18290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                RILConstants.RIL_REQUEST_STK_SEND_ENVELOPE_COMMAND, response);
18300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
18310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
18320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
18330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeString(contents);
18340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
18350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
18360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
18370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
18380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
18390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
18400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void sendEnvelopeWithStatus(String contents, Message response) {
18410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(
18420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                RILConstants.RIL_REQUEST_STK_SEND_ENVELOPE_WITH_STATUS, response);
18430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
18440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
18450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + '[' + contents + ']');
18460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
18470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeString(contents);
18480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
18490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
18500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
18510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
18520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
18530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
18540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void handleCallSetupRequestFromSim(
18550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            boolean accept, Message response) {
18560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
18570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(
18580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            RILConstants.RIL_REQUEST_STK_HANDLE_CALL_SETUP_REQUESTED_FROM_SIM,
18590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            response);
18600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
18610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
18620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
18630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int[] param = new int[1];
18640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        param[0] = accept ? 1 : 0;
18650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeIntArray(param);
18660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
18670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
18680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
18690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
18700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
18710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
18720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override
18730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void setCurrentPreferredNetworkType() {
18740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog("setCurrentPreferredNetworkType: " + mSetPreferredNetworkType);
18750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        setPreferredNetworkType(mSetPreferredNetworkType, null);
18760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
18770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private int mSetPreferredNetworkType;
18780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
18790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
18800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
18810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
18820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void setPreferredNetworkType(int networkType , Message response) {
18830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(
18840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                RILConstants.RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE, response);
18850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
18860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(1);
18870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(networkType);
18880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
18890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mSetPreferredNetworkType = networkType;
18900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mPreferredNetworkType = networkType;
18910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
18920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
18930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + " : " + networkType);
18940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
18950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
18960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
18970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
18980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
18990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
19000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
19010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void getPreferredNetworkType(Message response) {
19020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(
19030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                RILConstants.RIL_REQUEST_GET_PREFERRED_NETWORK_TYPE, response);
19040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
19050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
19060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
19070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
19080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
19090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
19100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
19110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
19120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
19130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void getNeighboringCids(Message response) {
19140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(
19150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                RILConstants.RIL_REQUEST_GET_NEIGHBORING_CELL_IDS, response);
19160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
19170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
19180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
19190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
19200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
19210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
19220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
19230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
19240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
19250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void setLocationUpdates(boolean enable, Message response) {
19260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_SET_LOCATION_UPDATES, response);
19270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(1);
19280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(enable ? 1 : 0);
19290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
19300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> "
19310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + requestToString(rr.mRequest) + ": " + enable);
19320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
19330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
19340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
19350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
19360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
19370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
19380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
19390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void getSmscAddress(Message result) {
19400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_GET_SMSC_ADDRESS, result);
19410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
19420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
19430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
19440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
19450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
19460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
19470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
19480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
19490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
19500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void setSmscAddress(String address, Message result) {
19510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_SET_SMSC_ADDRESS, result);
19520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
19530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeString(address);
19540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
19550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
19560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + " : " + address);
19570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
19580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
19590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
19600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
19610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
19620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
19630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
19640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void reportSmsMemoryStatus(boolean available, Message result) {
19650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_REPORT_SMS_MEMORY_STATUS, result);
19660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(1);
19670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(available ? 1 : 0);
19680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
19690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> "
19700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + requestToString(rr.mRequest) + ": " + available);
19710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
19720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
19730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
19740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
19750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
19760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
19770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
19780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void reportStkServiceIsRunning(Message result) {
19790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_REPORT_STK_SERVICE_IS_RUNNING, result);
19800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
19810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
19820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
19830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
19840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
19850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
19860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
19870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
19880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
19890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void getGsmBroadcastConfig(Message response) {
19900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_GSM_GET_BROADCAST_CONFIG, response);
19910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
19920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
19930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
19940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
19950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
19960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
19970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
19980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
19990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
20000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void setGsmBroadcastConfig(SmsBroadcastConfigInfo[] config, Message response) {
20010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_GSM_SET_BROADCAST_CONFIG, response);
20020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
20030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int numOfConfig = config.length;
20040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(numOfConfig);
20050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
20060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        for(int i = 0; i < numOfConfig; i++) {
20070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            rr.mp.writeInt(config[i].getFromServiceId());
20080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            rr.mp.writeInt(config[i].getToServiceId());
20090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            rr.mp.writeInt(config[i].getFromCodeScheme());
20100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            rr.mp.writeInt(config[i].getToCodeScheme());
20110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            rr.mp.writeInt(config[i].isSelected() ? 1 : 0);
20120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
20130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
20140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) {
20150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
20160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    + " with " + numOfConfig + " configs : ");
20170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            for (int i = 0; i < numOfConfig; i++) {
20180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                riljLog(config[i].toString());
20190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
20200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
20210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
20220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
20230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
20240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
20250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
20260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
20270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
20280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void setGsmBroadcastActivation(boolean activate, Message response) {
20290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_GSM_BROADCAST_ACTIVATION, response);
20300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
20310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(1);
20320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(activate ? 0 : 1);
20330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
20340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
20350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
20360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
20370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
20380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
20390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    //***** Private Methods
20400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
20410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private void sendScreenState(boolean on) {
20420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_SCREEN_STATE, null);
20430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(1);
20440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(on ? 1 : 0);
20450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
20460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString()
20470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + "> " + requestToString(rr.mRequest) + ": " + on);
20480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
20490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
20500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
20510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
20520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    protected void
20530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    onRadioAvailable() {
20540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // In case screen state was lost (due to process crash),
20550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // this ensures that the RIL knows the correct screen state.
20560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2057cf57b29a755b0249da687201bcc726941d37d42bBin Li        PowerManager pm = (PowerManager)mContext.getSystemService(Context.POWER_SERVICE);
2058cf57b29a755b0249da687201bcc726941d37d42bBin Li        sendScreenState(pm.isScreenOn());
20590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville   }
20600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
20610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private RadioState getRadioStateFromInt(int stateInt) {
20620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RadioState state;
20630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
20640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        /* RIL_RadioState ril.h */
20650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        switch(stateInt) {
20660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case 0: state = RadioState.RADIO_OFF; break;
20670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case 1: state = RadioState.RADIO_UNAVAILABLE; break;
20680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case 10: state = RadioState.RADIO_ON; break;
20690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
20700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            default:
20710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                throw new RuntimeException(
20720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            "Unrecognized RIL_RadioState: " + stateInt);
20730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
20740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return state;
20750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
20760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
20770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private void switchToRadioState(RadioState newState) {
20780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        setRadioState(newState);
20790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
20800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
20810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
20820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Holds a PARTIAL_WAKE_LOCK whenever
20830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * a) There is outstanding RIL request sent to RIL deamon and no replied
20840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * b) There is a request pending to be sent out.
20850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
20860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * There is a WAKE_LOCK_TIMEOUT to release the lock, though it shouldn't
20870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * happen often.
20880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
20890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
20900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private void
20910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    acquireWakeLock() {
20920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        synchronized (mWakeLock) {
20930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            mWakeLock.acquire();
20940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            mRequestMessagesPending++;
20950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
20960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            mSender.removeMessages(EVENT_WAKE_LOCK_TIMEOUT);
20970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            Message msg = mSender.obtainMessage(EVENT_WAKE_LOCK_TIMEOUT);
20980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            mSender.sendMessageDelayed(msg, mWakeLockTimeout);
20990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
21000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
21010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
21020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private void
21030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    releaseWakeLockIfDone() {
21040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        synchronized (mWakeLock) {
21050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (mWakeLock.isHeld() &&
21060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                (mRequestMessagesPending == 0) &&
21070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                (mRequestMessagesWaiting == 0)) {
21080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                mSender.removeMessages(EVENT_WAKE_LOCK_TIMEOUT);
21090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                mWakeLock.release();
21100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
21110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
21120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
21130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
21140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private void
21150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    send(RILRequest rr) {
21160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        Message msg;
21170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
21180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (mSocket == null) {
21190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            rr.onError(RADIO_NOT_AVAILABLE, null);
21200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            rr.release();
21210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            return;
21220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
21230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
21240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        msg = mSender.obtainMessage(EVENT_SEND, rr);
21250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
21260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        acquireWakeLock();
21270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
21280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        msg.sendToTarget();
21290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
21300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
21310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private void
21320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    processResponse (Parcel p) {
21330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int type;
21340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
21350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        type = p.readInt();
21360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
21370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (type == RESPONSE_UNSOLICITED) {
21380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            processUnsolicited (p);
21390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else if (type == RESPONSE_SOLICITED) {
21400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            processSolicited (p);
21410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
21420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
21430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        releaseWakeLockIfDone();
21440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
21450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
21460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
2147892e1fecf3c3736c4c04cf219d01034f71307065Robert Greenwalt     * Release each request in mRequestList then clear the list
21480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @param error is the RIL_Errno sent back
2149892e1fecf3c3736c4c04cf219d01034f71307065Robert Greenwalt     * @param loggable true means to print all requests in mRequestList
21500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
2151892e1fecf3c3736c4c04cf219d01034f71307065Robert Greenwalt    private void clearRequestList(int error, boolean loggable) {
21520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr;
2153892e1fecf3c3736c4c04cf219d01034f71307065Robert Greenwalt        synchronized (mRequestList) {
2154892e1fecf3c3736c4c04cf219d01034f71307065Robert Greenwalt            int count = mRequestList.size();
21550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (RILJ_LOGD && loggable) {
2156ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville                Rlog.d(LOG_TAG, "WAKE_LOCK_TIMEOUT " +
21570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        " mReqPending=" + mRequestMessagesPending +
21580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        " mRequestList=" + count);
21590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
21600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
21610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            for (int i = 0; i < count ; i++) {
2162892e1fecf3c3736c4c04cf219d01034f71307065Robert Greenwalt                rr = mRequestList.get(i);
21630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD && loggable) {
2164ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville                    Rlog.d(LOG_TAG, i + ": [" + rr.mSerial + "] " +
21650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            requestToString(rr.mRequest));
21660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
21670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                rr.onError(error, null);
21680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                rr.release();
21690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
2170892e1fecf3c3736c4c04cf219d01034f71307065Robert Greenwalt            mRequestList.clear();
21710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            mRequestMessagesWaiting = 0;
21720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
21730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
21740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
21750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private RILRequest findAndRemoveRequestFromList(int serial) {
2176892e1fecf3c3736c4c04cf219d01034f71307065Robert Greenwalt        synchronized (mRequestList) {
2177892e1fecf3c3736c4c04cf219d01034f71307065Robert Greenwalt            for (int i = 0, s = mRequestList.size() ; i < s ; i++) {
2178892e1fecf3c3736c4c04cf219d01034f71307065Robert Greenwalt                RILRequest rr = mRequestList.get(i);
21790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
21800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (rr.mSerial == serial) {
2181892e1fecf3c3736c4c04cf219d01034f71307065Robert Greenwalt                    mRequestList.remove(i);
21820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    if (mRequestMessagesWaiting > 0)
21830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        mRequestMessagesWaiting--;
21840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    return rr;
21850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
21860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
21870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
21880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
21890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return null;
21900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
21910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
21920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private void
21930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    processSolicited (Parcel p) {
21940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int serial, error;
21950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        boolean found = false;
21960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
21970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        serial = p.readInt();
21980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        error = p.readInt();
21990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
22000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr;
22010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
22020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr = findAndRemoveRequestFromList(serial);
22030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
22040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (rr == null) {
2205ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville            Rlog.w(LOG_TAG, "Unexpected solicited response! sn: "
22060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            + serial + " error: " + error);
22070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            return;
22080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
22090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
22100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        Object ret = null;
22110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
22120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (error == 0 || p.dataAvail() > 0) {
22130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            // either command succeeds or command fails but with data payload
22140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            try {switch (rr.mRequest) {
22150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            /*
22160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville cat libs/telephony/ril_commands.h \
22170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville | egrep "^ *{RIL_" \
22180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville | sed -re 's/\{([^,]+),[^,]+,([^}]+).+/case \1: ret = \2(p); break;/'
22190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville             */
22200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GET_SIM_STATUS: ret =  responseIccCardStatus(p); break;
22210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_ENTER_SIM_PIN: ret =  responseInts(p); break;
22220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_ENTER_SIM_PUK: ret =  responseInts(p); break;
22230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_ENTER_SIM_PIN2: ret =  responseInts(p); break;
22240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_ENTER_SIM_PUK2: ret =  responseInts(p); break;
22250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CHANGE_SIM_PIN: ret =  responseInts(p); break;
22260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CHANGE_SIM_PIN2: ret =  responseInts(p); break;
22270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_ENTER_NETWORK_DEPERSONALIZATION: ret =  responseInts(p); break;
22280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GET_CURRENT_CALLS: ret =  responseCallList(p); break;
22290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_DIAL: ret =  responseVoid(p); break;
22300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GET_IMSI: ret =  responseString(p); break;
22310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_HANGUP: ret =  responseVoid(p); break;
22320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_HANGUP_WAITING_OR_BACKGROUND: ret =  responseVoid(p); break;
22330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_HANGUP_FOREGROUND_RESUME_BACKGROUND: {
22340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mTestingEmergencyCall.getAndSet(false)) {
22350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    if (mEmergencyCallbackModeRegistrant != null) {
22360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        riljLog("testing emergency call, notify ECM Registrants");
22370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        mEmergencyCallbackModeRegistrant.notifyRegistrant();
22380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    }
22390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
22400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                ret =  responseVoid(p);
22410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
22420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
22430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SWITCH_WAITING_OR_HOLDING_AND_ACTIVE: ret =  responseVoid(p); break;
22440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CONFERENCE: ret =  responseVoid(p); break;
22450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_UDUB: ret =  responseVoid(p); break;
22460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_LAST_CALL_FAIL_CAUSE: ret =  responseInts(p); break;
22470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SIGNAL_STRENGTH: ret =  responseSignalStrength(p); break;
22480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_VOICE_REGISTRATION_STATE: ret =  responseStrings(p); break;
22490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_DATA_REGISTRATION_STATE: ret =  responseStrings(p); break;
22500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_OPERATOR: ret =  responseStrings(p); break;
22510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_RADIO_POWER: ret =  responseVoid(p); break;
22520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_DTMF: ret =  responseVoid(p); break;
22530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SEND_SMS: ret =  responseSMS(p); break;
22540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SEND_SMS_EXPECT_MORE: ret =  responseSMS(p); break;
22550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SETUP_DATA_CALL: ret =  responseSetupDataCall(p); break;
22560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SIM_IO: ret =  responseICC_IO(p); break;
22570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SEND_USSD: ret =  responseVoid(p); break;
22580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CANCEL_USSD: ret =  responseVoid(p); break;
22590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GET_CLIR: ret =  responseInts(p); break;
22600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_CLIR: ret =  responseVoid(p); break;
22610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_QUERY_CALL_FORWARD_STATUS: ret =  responseCallForward(p); break;
22620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_CALL_FORWARD: ret =  responseVoid(p); break;
22630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_QUERY_CALL_WAITING: ret =  responseInts(p); break;
22640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_CALL_WAITING: ret =  responseVoid(p); break;
22650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SMS_ACKNOWLEDGE: ret =  responseVoid(p); break;
22660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GET_IMEI: ret =  responseString(p); break;
22670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GET_IMEISV: ret =  responseString(p); break;
22680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_ANSWER: ret =  responseVoid(p); break;
22690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_DEACTIVATE_DATA_CALL: ret =  responseVoid(p); break;
22700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_QUERY_FACILITY_LOCK: ret =  responseInts(p); break;
22710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_FACILITY_LOCK: ret =  responseInts(p); break;
22720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CHANGE_BARRING_PASSWORD: ret =  responseVoid(p); break;
22730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_QUERY_NETWORK_SELECTION_MODE: ret =  responseInts(p); break;
22740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_NETWORK_SELECTION_AUTOMATIC: ret =  responseVoid(p); break;
22750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_NETWORK_SELECTION_MANUAL: ret =  responseVoid(p); break;
22760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_QUERY_AVAILABLE_NETWORKS : ret =  responseOperatorInfos(p); break;
22770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_DTMF_START: ret =  responseVoid(p); break;
22780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_DTMF_STOP: ret =  responseVoid(p); break;
22790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_BASEBAND_VERSION: ret =  responseString(p); break;
22800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SEPARATE_CONNECTION: ret =  responseVoid(p); break;
22810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_MUTE: ret =  responseVoid(p); break;
22820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GET_MUTE: ret =  responseInts(p); break;
22830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_QUERY_CLIP: ret =  responseInts(p); break;
22840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_LAST_DATA_CALL_FAIL_CAUSE: ret =  responseInts(p); break;
22850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_DATA_CALL_LIST: ret =  responseDataCallList(p); break;
22860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_RESET_RADIO: ret =  responseVoid(p); break;
22870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_OEM_HOOK_RAW: ret =  responseRaw(p); break;
22880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_OEM_HOOK_STRINGS: ret =  responseStrings(p); break;
22890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SCREEN_STATE: ret =  responseVoid(p); break;
22900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_SUPP_SVC_NOTIFICATION: ret =  responseVoid(p); break;
22910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_WRITE_SMS_TO_SIM: ret =  responseInts(p); break;
22920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_DELETE_SMS_ON_SIM: ret =  responseVoid(p); break;
22930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_BAND_MODE: ret =  responseVoid(p); break;
22940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_QUERY_AVAILABLE_BAND_MODE: ret =  responseInts(p); break;
22950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_STK_GET_PROFILE: ret =  responseString(p); break;
22960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_STK_SET_PROFILE: ret =  responseVoid(p); break;
22970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_STK_SEND_ENVELOPE_COMMAND: ret =  responseString(p); break;
22980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_STK_SEND_TERMINAL_RESPONSE: ret =  responseVoid(p); break;
22990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_STK_HANDLE_CALL_SETUP_REQUESTED_FROM_SIM: ret =  responseInts(p); break;
23000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_EXPLICIT_CALL_TRANSFER: ret =  responseVoid(p); break;
23010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE: ret =  responseVoid(p); break;
23020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GET_PREFERRED_NETWORK_TYPE: ret =  responseGetPreferredNetworkType(p); break;
23030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GET_NEIGHBORING_CELL_IDS: ret = responseCellList(p); break;
23040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_LOCATION_UPDATES: ret =  responseVoid(p); break;
23050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_SET_SUBSCRIPTION_SOURCE: ret =  responseVoid(p); break;
23060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_SET_ROAMING_PREFERENCE: ret =  responseVoid(p); break;
23070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_QUERY_ROAMING_PREFERENCE: ret =  responseInts(p); break;
23080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_TTY_MODE: ret =  responseVoid(p); break;
23090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_QUERY_TTY_MODE: ret =  responseInts(p); break;
23100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_SET_PREFERRED_VOICE_PRIVACY_MODE: ret =  responseVoid(p); break;
23110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_QUERY_PREFERRED_VOICE_PRIVACY_MODE: ret =  responseInts(p); break;
23120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_FLASH: ret =  responseVoid(p); break;
23130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_BURST_DTMF: ret =  responseVoid(p); break;
23140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_SEND_SMS: ret =  responseSMS(p); break;
23150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_SMS_ACKNOWLEDGE: ret =  responseVoid(p); break;
23160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GSM_GET_BROADCAST_CONFIG: ret =  responseGmsBroadcastConfig(p); break;
23170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GSM_SET_BROADCAST_CONFIG: ret =  responseVoid(p); break;
23180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GSM_BROADCAST_ACTIVATION: ret =  responseVoid(p); break;
23190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_GET_BROADCAST_CONFIG: ret =  responseCdmaBroadcastConfig(p); break;
23200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_SET_BROADCAST_CONFIG: ret =  responseVoid(p); break;
23210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_BROADCAST_ACTIVATION: ret =  responseVoid(p); break;
23220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_VALIDATE_AND_WRITE_AKEY: ret =  responseVoid(p); break;
23230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_SUBSCRIPTION: ret =  responseStrings(p); break;
23240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_WRITE_SMS_TO_RUIM: ret =  responseInts(p); break;
23250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_DELETE_SMS_ON_RUIM: ret =  responseVoid(p); break;
23260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_DEVICE_IDENTITY: ret =  responseStrings(p); break;
23270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GET_SMSC_ADDRESS: ret = responseString(p); break;
23280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_SMSC_ADDRESS: ret = responseVoid(p); break;
23290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_EXIT_EMERGENCY_CALLBACK_MODE: ret = responseVoid(p); break;
23300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_REPORT_SMS_MEMORY_STATUS: ret = responseVoid(p); break;
23310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_REPORT_STK_SERVICE_IS_RUNNING: ret = responseVoid(p); break;
23320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_GET_SUBSCRIPTION_SOURCE: ret =  responseInts(p); break;
23330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_ISIM_AUTHENTICATION: ret =  responseString(p); break;
23340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_ACKNOWLEDGE_INCOMING_GSM_SMS_WITH_PDU: ret = responseVoid(p); break;
23350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_STK_SEND_ENVELOPE_WITH_STATUS: ret = responseICC_IO(p); break;
23360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_VOICE_RADIO_TECH: ret = responseInts(p); break;
23370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            default:
23380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                throw new RuntimeException("Unrecognized solicited response: " + rr.mRequest);
23390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            //break;
23400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }} catch (Throwable tr) {
23410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                // Exceptions here usually mean invalid RIL responses
23420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2343ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville                Rlog.w(LOG_TAG, rr.serialString() + "< "
23440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        + requestToString(rr.mRequest)
23450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        + " exception, possible invalid RIL response", tr);
23460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
23470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (rr.mResult != null) {
23480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    AsyncResult.forMessage(rr.mResult, null, tr);
23490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    rr.mResult.sendToTarget();
23500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
23510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                rr.release();
23520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                return;
23530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
23540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
23550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2356f860a3f42f87c9c8572623aff33349168d689477Wink Saville        // Here and below fake RIL_UNSOL_RESPONSE_SIM_STATUS_CHANGED, see b/7255789.
2357f860a3f42f87c9c8572623aff33349168d689477Wink Saville        // This is needed otherwise we don't automatically transition to the main lock
2358f860a3f42f87c9c8572623aff33349168d689477Wink Saville        // screen when the pin or puk is entered incorrectly.
2359be3dc4b04cd65e576d250cf68f310d47637167ffWink Saville        switch (rr.mRequest) {
2360be3dc4b04cd65e576d250cf68f310d47637167ffWink Saville            case RIL_REQUEST_ENTER_SIM_PUK:
2361be3dc4b04cd65e576d250cf68f310d47637167ffWink Saville            case RIL_REQUEST_ENTER_SIM_PUK2:
2362be3dc4b04cd65e576d250cf68f310d47637167ffWink Saville                if (mIccStatusChangedRegistrants != null) {
2363f860a3f42f87c9c8572623aff33349168d689477Wink Saville                    if (RILJ_LOGD) {
2364f860a3f42f87c9c8572623aff33349168d689477Wink Saville                        riljLog("ON enter sim puk fakeSimStatusChanged: reg count="
2365f860a3f42f87c9c8572623aff33349168d689477Wink Saville                                + mIccStatusChangedRegistrants.size());
2366f860a3f42f87c9c8572623aff33349168d689477Wink Saville                    }
2367be3dc4b04cd65e576d250cf68f310d47637167ffWink Saville                    mIccStatusChangedRegistrants.notifyRegistrants();
2368be3dc4b04cd65e576d250cf68f310d47637167ffWink Saville                }
2369be3dc4b04cd65e576d250cf68f310d47637167ffWink Saville                break;
2370be3dc4b04cd65e576d250cf68f310d47637167ffWink Saville        }
2371be3dc4b04cd65e576d250cf68f310d47637167ffWink Saville
23720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (error != 0) {
2373f860a3f42f87c9c8572623aff33349168d689477Wink Saville            switch (rr.mRequest) {
2374f860a3f42f87c9c8572623aff33349168d689477Wink Saville                case RIL_REQUEST_ENTER_SIM_PIN:
2375f860a3f42f87c9c8572623aff33349168d689477Wink Saville                case RIL_REQUEST_ENTER_SIM_PIN2:
2376f860a3f42f87c9c8572623aff33349168d689477Wink Saville                case RIL_REQUEST_CHANGE_SIM_PIN:
2377f860a3f42f87c9c8572623aff33349168d689477Wink Saville                case RIL_REQUEST_CHANGE_SIM_PIN2:
2378f860a3f42f87c9c8572623aff33349168d689477Wink Saville                case RIL_REQUEST_SET_FACILITY_LOCK:
2379f860a3f42f87c9c8572623aff33349168d689477Wink Saville                    if (mIccStatusChangedRegistrants != null) {
2380f860a3f42f87c9c8572623aff33349168d689477Wink Saville                        if (RILJ_LOGD) {
2381f860a3f42f87c9c8572623aff33349168d689477Wink Saville                            riljLog("ON some errors fakeSimStatusChanged: reg count="
2382f860a3f42f87c9c8572623aff33349168d689477Wink Saville                                    + mIccStatusChangedRegistrants.size());
2383f860a3f42f87c9c8572623aff33349168d689477Wink Saville                        }
2384f860a3f42f87c9c8572623aff33349168d689477Wink Saville                        mIccStatusChangedRegistrants.notifyRegistrants();
2385f860a3f42f87c9c8572623aff33349168d689477Wink Saville                    }
2386f860a3f42f87c9c8572623aff33349168d689477Wink Saville                    break;
2387f860a3f42f87c9c8572623aff33349168d689477Wink Saville            }
2388f860a3f42f87c9c8572623aff33349168d689477Wink Saville
23890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            rr.onError(error, ret);
23900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            rr.release();
23910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            return;
23920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
23930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
23940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "< " + requestToString(rr.mRequest)
23950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            + " " + retToString(rr.mRequest, ret));
23960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
23970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (rr.mResult != null) {
23980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            AsyncResult.forMessage(rr.mResult, ret, null);
23990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            rr.mResult.sendToTarget();
24000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
24010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
24020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.release();
24030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
24040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
24050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private String
24060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    retToString(int req, Object ret) {
24070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (ret == null) return "";
24080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        switch (req) {
24090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            // Don't log these return values, for privacy's sake.
24100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GET_IMSI:
24110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GET_IMEI:
24120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GET_IMEISV:
24130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (!RILJ_LOGV) {
24140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    // If not versbose logging just return and don't display IMSI and IMEI, IMEISV
24150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    return "";
24160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
24170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
24180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
24190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        StringBuilder sb;
24200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String s;
24210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int length;
24220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (ret instanceof int[]){
24230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            int[] intArray = (int[]) ret;
24240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            length = intArray.length;
24250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            sb = new StringBuilder("{");
24260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (length > 0) {
24270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                int i = 0;
24280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                sb.append(intArray[i++]);
24290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                while ( i < length) {
24300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    sb.append(", ").append(intArray[i++]);
24310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
24320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
24330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            sb.append("}");
24340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            s = sb.toString();
24350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else if (ret instanceof String[]) {
24360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            String[] strings = (String[]) ret;
24370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            length = strings.length;
24380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            sb = new StringBuilder("{");
24390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (length > 0) {
24400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                int i = 0;
24410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                sb.append(strings[i++]);
24420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                while ( i < length) {
24430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    sb.append(", ").append(strings[i++]);
24440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
24450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
24460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            sb.append("}");
24470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            s = sb.toString();
24480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }else if (req == RIL_REQUEST_GET_CURRENT_CALLS) {
24490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            ArrayList<DriverCall> calls = (ArrayList<DriverCall>) ret;
24500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            sb = new StringBuilder(" ");
24510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            for (DriverCall dc : calls) {
24520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                sb.append("[").append(dc).append("] ");
24530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
24540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            s = sb.toString();
24550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else if (req == RIL_REQUEST_GET_NEIGHBORING_CELL_IDS) {
24560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            ArrayList<NeighboringCellInfo> cells;
24570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            cells = (ArrayList<NeighboringCellInfo>) ret;
24580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            sb = new StringBuilder(" ");
24590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            for (NeighboringCellInfo cell : cells) {
24600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                sb.append(cell).append(" ");
24610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
24620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            s = sb.toString();
24630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else {
24640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            s = ret.toString();
24650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
24660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return s;
24670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
24680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
24690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private void
24700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    processUnsolicited (Parcel p) {
24710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int response;
24720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        Object ret;
24730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
24740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        response = p.readInt();
24750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
24760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        try {switch(response) {
24770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville/*
24780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville cat libs/telephony/ril_unsol_commands.h \
24790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville | egrep "^ *{RIL_" \
24800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville | sed -re 's/\{([^,]+),[^,]+,([^}]+).+/case \1: \2(rr, p); break;/'
24810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville*/
24820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
24830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_RADIO_STATE_CHANGED: ret =  responseVoid(p); break;
24840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED: ret =  responseVoid(p); break;
24850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED: ret =  responseVoid(p); break;
24860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_NEW_SMS: ret =  responseString(p); break;
24870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_NEW_SMS_STATUS_REPORT: ret =  responseString(p); break;
24880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_NEW_SMS_ON_SIM: ret =  responseInts(p); break;
24890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_ON_USSD: ret =  responseStrings(p); break;
24900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_NITZ_TIME_RECEIVED: ret =  responseString(p); break;
24910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_SIGNAL_STRENGTH: ret = responseSignalStrength(p); break;
24920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_DATA_CALL_LIST_CHANGED: ret = responseDataCallList(p);break;
24930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_SUPP_SVC_NOTIFICATION: ret = responseSuppServiceNotification(p); break;
24940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_STK_SESSION_END: ret = responseVoid(p); break;
24950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_STK_PROACTIVE_COMMAND: ret = responseString(p); break;
24960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_STK_EVENT_NOTIFY: ret = responseString(p); break;
24970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_STK_CALL_SETUP: ret = responseInts(p); break;
24980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_SIM_SMS_STORAGE_FULL: ret =  responseVoid(p); break;
24990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_SIM_REFRESH: ret =  responseSimRefresh(p); break;
25000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_CALL_RING: ret =  responseCallRing(p); break;
25010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESTRICTED_STATE_CHANGED: ret = responseInts(p); break;
25020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_SIM_STATUS_CHANGED:  ret =  responseVoid(p); break;
25030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_CDMA_NEW_SMS:  ret =  responseCdmaSms(p); break;
25040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_NEW_BROADCAST_SMS:  ret =  responseRaw(p); break;
25050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_CDMA_RUIM_SMS_STORAGE_FULL:  ret =  responseVoid(p); break;
25060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_ENTER_EMERGENCY_CALLBACK_MODE: ret = responseVoid(p); break;
25070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_CDMA_CALL_WAITING: ret = responseCdmaCallWaiting(p); break;
25080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_CDMA_OTA_PROVISION_STATUS: ret = responseInts(p); break;
25090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_CDMA_INFO_REC: ret = responseCdmaInformationRecord(p); break;
25100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_OEM_HOOK_RAW: ret = responseRaw(p); break;
25110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RINGBACK_TONE: ret = responseInts(p); break;
25120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESEND_INCALL_MUTE: ret = responseVoid(p); break;
25130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_CDMA_SUBSCRIPTION_SOURCE_CHANGED: ret = responseInts(p); break;
25140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOl_CDMA_PRL_CHANGED: ret = responseInts(p); break;
25150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_EXIT_EMERGENCY_CALLBACK_MODE: ret = responseVoid(p); break;
25160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RIL_CONNECTED: ret = responseInts(p); break;
25170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_VOICE_RADIO_TECH_CHANGED: ret =  responseInts(p); break;
25180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
25190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            default:
25200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                throw new RuntimeException("Unrecognized unsol response: " + response);
25210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            //break; (implied)
25220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }} catch (Throwable tr) {
2523ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville            Rlog.e(LOG_TAG, "Exception processing unsol response: " + response +
25240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                "Exception:" + tr.toString());
25250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            return;
25260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
25270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
25280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        switch(response) {
25290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_RADIO_STATE_CHANGED:
25300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                /* has bonus radio state int */
25310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                RadioState newState = getRadioStateFromInt(p.readInt());
25320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogMore(response, newState.toString());
25330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
25340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                switchToRadioState(newState);
25350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            break;
25360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED:
25370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLog(response);
25380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
25390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                mCallStateRegistrants
25400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    .notifyRegistrants(new AsyncResult(null, null, null));
25410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            break;
25420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED:
25430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLog(response);
25440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
25450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                mVoiceNetworkStateRegistrants
25460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    .notifyRegistrants(new AsyncResult(null, null, null));
25470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            break;
25480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_NEW_SMS: {
25490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLog(response);
25500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
25510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                // FIXME this should move up a layer
25520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                String a[] = new String[2];
25530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
25540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                a[1] = (String)ret;
25550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
25560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                SmsMessage sms;
25570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
25580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                sms = SmsMessage.newFromCMT(a);
25590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mGsmSmsRegistrant != null) {
25600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mGsmSmsRegistrant
25610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        .notifyRegistrant(new AsyncResult(null, sms, null));
25620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
25630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            break;
25640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
25650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_NEW_SMS_STATUS_REPORT:
25660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
25670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
25680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mSmsStatusRegistrant != null) {
25690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mSmsStatusRegistrant.notifyRegistrant(
25700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            new AsyncResult(null, ret, null));
25710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
25720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            break;
25730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_NEW_SMS_ON_SIM:
25740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
25750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
25760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                int[] smsIndex = (int[])ret;
25770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
25780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if(smsIndex.length == 1) {
25790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    if (mSmsOnSimRegistrant != null) {
25800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        mSmsOnSimRegistrant.
25810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                notifyRegistrant(new AsyncResult(null, smsIndex, null));
25820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    }
25830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                } else {
25840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    if (RILJ_LOGD) riljLog(" NEW_SMS_ON_SIM ERROR with wrong length "
25850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            + smsIndex.length);
25860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
25870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            break;
25880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_ON_USSD:
25890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                String[] resp = (String[])ret;
25900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
25910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (resp.length < 2) {
25920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    resp = new String[2];
25930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    resp[0] = ((String[])ret)[0];
25940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    resp[1] = null;
25950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
25960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogMore(response, resp[0]);
25970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mUSSDRegistrant != null) {
25980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mUSSDRegistrant.notifyRegistrant(
25990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        new AsyncResult (null, resp, null));
26000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
26010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            break;
26020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_NITZ_TIME_RECEIVED:
26030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
26040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
26050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                // has bonus long containing milliseconds since boot that the NITZ
26060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                // time was received
26070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                long nitzReceiveTime = p.readLong();
26080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
26090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                Object[] result = new Object[2];
26100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
26110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                result[0] = ret;
26120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                result[1] = Long.valueOf(nitzReceiveTime);
26130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
26140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                boolean ignoreNitz = SystemProperties.getBoolean(
26150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        TelephonyProperties.PROPERTY_IGNORE_NITZ, false);
26160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
26170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (ignoreNitz) {
26180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    if (RILJ_LOGD) riljLog("ignoring UNSOL_NITZ_TIME_RECEIVED");
26190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                } else {
26200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    if (mNITZTimeRegistrant != null) {
26210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
26220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        mNITZTimeRegistrant
26230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            .notifyRegistrant(new AsyncResult (null, result, null));
26240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    } else {
26250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        // in case NITZ time registrant isnt registered yet
26260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        mLastNITZTimeInfo = result;
26270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    }
26280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
26290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            break;
26300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
26310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_SIGNAL_STRENGTH:
26320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                // Note this is set to "verbose" because it happens
26330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                // frequently
26340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGV) unsljLogvRet(response, ret);
26350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
26360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mSignalStrengthRegistrant != null) {
26370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mSignalStrengthRegistrant.notifyRegistrant(
26380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                        new AsyncResult (null, ret, null));
26390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
26400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            break;
26410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_DATA_CALL_LIST_CHANGED:
26420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
26430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
26440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                mDataNetworkStateRegistrants.notifyRegistrants(new AsyncResult(null, ret, null));
26450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            break;
26460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
26470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_SUPP_SVC_NOTIFICATION:
26480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
26490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
26500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mSsnRegistrant != null) {
26510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mSsnRegistrant.notifyRegistrant(
26520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                        new AsyncResult (null, ret, null));
26530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
26540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
26550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
26560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_STK_SESSION_END:
26570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLog(response);
26580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
26590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mCatSessionEndRegistrant != null) {
26600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mCatSessionEndRegistrant.notifyRegistrant(
26610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                        new AsyncResult (null, ret, null));
26620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
26630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
26640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
26650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_STK_PROACTIVE_COMMAND:
26660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
26670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
26680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mCatProCmdRegistrant != null) {
26690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mCatProCmdRegistrant.notifyRegistrant(
26700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                        new AsyncResult (null, ret, null));
26710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
26720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
26730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
26740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_STK_EVENT_NOTIFY:
26750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
26760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
26770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mCatEventRegistrant != null) {
26780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mCatEventRegistrant.notifyRegistrant(
26790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                        new AsyncResult (null, ret, null));
26800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
26810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
26820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
26830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_STK_CALL_SETUP:
26840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
26850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
26860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mCatCallSetUpRegistrant != null) {
26870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mCatCallSetUpRegistrant.notifyRegistrant(
26880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                        new AsyncResult (null, ret, null));
26890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
26900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
26910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
26920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_SIM_SMS_STORAGE_FULL:
26930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLog(response);
26940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
26950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mIccSmsFullRegistrant != null) {
26960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mIccSmsFullRegistrant.notifyRegistrant();
26970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
26980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
26990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
27000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_SIM_REFRESH:
27010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
27020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
27030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mIccRefreshRegistrants != null) {
27040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mIccRefreshRegistrants.notifyRegistrants(
27050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            new AsyncResult (null, ret, null));
27060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
27070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
27080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
27090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_CALL_RING:
27100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
27110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
27120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mRingRegistrant != null) {
27130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mRingRegistrant.notifyRegistrant(
27140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            new AsyncResult (null, ret, null));
27150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
27160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
27170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
27180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESTRICTED_STATE_CHANGED:
27190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogvRet(response, ret);
27200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mRestrictedStateRegistrant != null) {
27210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mRestrictedStateRegistrant.notifyRegistrant(
27220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                        new AsyncResult (null, ret, null));
27230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
27240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
27250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
27260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_SIM_STATUS_CHANGED:
27270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLog(response);
27280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
27290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mIccStatusChangedRegistrants != null) {
27300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mIccStatusChangedRegistrants.notifyRegistrants();
27310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
27320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
27330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
27340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_CDMA_NEW_SMS:
27350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLog(response);
27360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
27370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                SmsMessage sms = (SmsMessage) ret;
27380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
27390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mCdmaSmsRegistrant != null) {
27400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mCdmaSmsRegistrant
27410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        .notifyRegistrant(new AsyncResult(null, sms, null));
27420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
27430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
27440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
27450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_NEW_BROADCAST_SMS:
27460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLog(response);
27470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
27480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mGsmBroadcastSmsRegistrant != null) {
27490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mGsmBroadcastSmsRegistrant
27500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        .notifyRegistrant(new AsyncResult(null, ret, null));
27510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
27520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
27530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
27540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_CDMA_RUIM_SMS_STORAGE_FULL:
27550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLog(response);
27560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
27570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mIccSmsFullRegistrant != null) {
27580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mIccSmsFullRegistrant.notifyRegistrant();
27590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
27600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
27610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
27620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_ENTER_EMERGENCY_CALLBACK_MODE:
27630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLog(response);
27640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
27650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mEmergencyCallbackModeRegistrant != null) {
27660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mEmergencyCallbackModeRegistrant.notifyRegistrant();
27670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
27680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
27690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
27700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_CDMA_CALL_WAITING:
27710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
27720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
27730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mCallWaitingInfoRegistrants != null) {
27740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mCallWaitingInfoRegistrants.notifyRegistrants(
27750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                        new AsyncResult (null, ret, null));
27760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
27770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
27780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
27790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_CDMA_OTA_PROVISION_STATUS:
27800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
27810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
27820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mOtaProvisionRegistrants != null) {
27830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mOtaProvisionRegistrants.notifyRegistrants(
27840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                        new AsyncResult (null, ret, null));
27850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
27860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
27870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
27880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_CDMA_INFO_REC:
27890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                ArrayList<CdmaInformationRecords> listInfoRecs;
27900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
27910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                try {
27920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    listInfoRecs = (ArrayList<CdmaInformationRecords>)ret;
27930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                } catch (ClassCastException e) {
2794ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville                    Rlog.e(LOG_TAG, "Unexpected exception casting to listInfoRecs", e);
27950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    break;
27960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
27970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
27980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                for (CdmaInformationRecords rec : listInfoRecs) {
27990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    if (RILJ_LOGD) unsljLogRet(response, rec);
28000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    notifyRegistrantsCdmaInfoRec(rec);
28010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
28020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
28030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
28040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_OEM_HOOK_RAW:
28050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogvRet(response, IccUtils.bytesToHexString((byte[])ret));
28060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mUnsolOemHookRawRegistrant != null) {
28070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mUnsolOemHookRawRegistrant.notifyRegistrant(new AsyncResult(null, ret, null));
28080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
28090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
28100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
28110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RINGBACK_TONE:
28120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogvRet(response, ret);
28130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mRingbackToneRegistrants != null) {
28140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    boolean playtone = (((int[])ret)[0] == 1);
28150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mRingbackToneRegistrants.notifyRegistrants(
28160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                        new AsyncResult (null, playtone, null));
28170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
28180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
28190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
28200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESEND_INCALL_MUTE:
28210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
28220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
28230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mResendIncallMuteRegistrants != null) {
28240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mResendIncallMuteRegistrants.notifyRegistrants(
28250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                        new AsyncResult (null, ret, null));
28260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
28270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
28280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
28290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_VOICE_RADIO_TECH_CHANGED:
28300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
28310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
28320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mVoiceRadioTechChangedRegistrants != null) {
28330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mVoiceRadioTechChangedRegistrants.notifyRegistrants(
28340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            new AsyncResult(null, ret, null));
28350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
28360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
28370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
28380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_CDMA_SUBSCRIPTION_SOURCE_CHANGED:
28390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
28400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
28410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mCdmaSubscriptionChangedRegistrants != null) {
28420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mCdmaSubscriptionChangedRegistrants.notifyRegistrants(
28430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                        new AsyncResult (null, ret, null));
28440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
28450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
28460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
28470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOl_CDMA_PRL_CHANGED:
28480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
28490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
28500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mCdmaPrlChangedRegistrants != null) {
28510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mCdmaPrlChangedRegistrants.notifyRegistrants(
28520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                        new AsyncResult (null, ret, null));
28530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
28540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
28550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
28560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_EXIT_EMERGENCY_CALLBACK_MODE:
28570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
28580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
28590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (mExitEmergencyCallbackModeRegistrants != null) {
28600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mExitEmergencyCallbackModeRegistrants.notifyRegistrants(
28610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                        new AsyncResult (null, null, null));
28620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
28630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
28640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
28650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RIL_CONNECTED: {
28660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
28670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
28680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                // Initial conditions
28690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                setRadioPower(false, null);
28700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                setPreferredNetworkType(mPreferredNetworkType, null);
28710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                setCdmaSubscriptionSource(mCdmaSubscription, null);
28720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                notifyRegistrantsRilConnectionChanged(((int[])ret)[0]);
28730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
28740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
28750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
28760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
28770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
28780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
28790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Notifiy all registrants that the ril has connected or disconnected.
28800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
28810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @param rilVer is the version of the ril or -1 if disconnected.
28820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
28830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private void notifyRegistrantsRilConnectionChanged(int rilVer) {
28840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mRilVersion = rilVer;
28850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (mRilConnectedRegistrants != null) {
28860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            mRilConnectedRegistrants.notifyRegistrants(
28870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                new AsyncResult (null, new Integer(rilVer), null));
28880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
28890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
28900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
28910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private Object
28920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    responseInts(Parcel p) {
28930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int numInts;
28940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int response[];
28950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
28960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        numInts = p.readInt();
28970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
28980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        response = new int[numInts];
28990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
29000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        for (int i = 0 ; i < numInts ; i++) {
29010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            response[i] = p.readInt();
29020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
29030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
29040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return response;
29050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
29060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
29070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
29080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private Object
29090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    responseVoid(Parcel p) {
29100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return null;
29110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
29120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
29130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private Object
29140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    responseCallForward(Parcel p) {
29150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int numInfos;
29160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        CallForwardInfo infos[];
29170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
29180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        numInfos = p.readInt();
29190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
29200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        infos = new CallForwardInfo[numInfos];
29210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
29220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        for (int i = 0 ; i < numInfos ; i++) {
29230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            infos[i] = new CallForwardInfo();
29240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
29250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            infos[i].status = p.readInt();
29260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            infos[i].reason = p.readInt();
29270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            infos[i].serviceClass = p.readInt();
29280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            infos[i].toa = p.readInt();
29290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            infos[i].number = p.readString();
29300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            infos[i].timeSeconds = p.readInt();
29310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
29320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
29330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return infos;
29340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
29350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
29360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private Object
29370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    responseSuppServiceNotification(Parcel p) {
29380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        SuppServiceNotification notification = new SuppServiceNotification();
29390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
29400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        notification.notificationType = p.readInt();
29410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        notification.code = p.readInt();
29420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        notification.index = p.readInt();
29430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        notification.type = p.readInt();
29440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        notification.number = p.readString();
29450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
29460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return notification;
29470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
29480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
29490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private Object
29500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    responseCdmaSms(Parcel p) {
29510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        SmsMessage sms;
29520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        sms = SmsMessage.newFromParcel(p);
29530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
29540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return sms;
29550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
29560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
29570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private Object
29580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    responseString(Parcel p) {
29590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String response;
29600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
29610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        response = p.readString();
29620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
29630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return response;
29640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
29650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
29660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private Object
29670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    responseStrings(Parcel p) {
29680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int num;
29690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String response[];
29700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
29710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        response = p.readStringArray();
29720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
29730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (false) {
29740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            num = p.readInt();
29750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
29760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            response = new String[num];
29770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            for (int i = 0; i < num; i++) {
29780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                response[i] = p.readString();
29790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
29800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
29810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
29820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return response;
29830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
29840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
29850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private Object
29860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    responseRaw(Parcel p) {
29870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int num;
29880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        byte response[];
29890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
29900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        response = p.createByteArray();
29910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
29920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return response;
29930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
29940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
29950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private Object
29960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    responseSMS(Parcel p) {
29970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int messageRef, errorCode;
29980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String ackPDU;
29990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
30000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        messageRef = p.readInt();
30010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        ackPDU = p.readString();
30020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        errorCode = p.readInt();
30030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
30040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        SmsResponse response = new SmsResponse(messageRef, ackPDU, errorCode);
30050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
30060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return response;
30070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
30080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
30090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
30100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private Object
30110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    responseICC_IO(Parcel p) {
30120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int sw1, sw2;
30130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        byte data[] = null;
30140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        Message ret;
30150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
30160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        sw1 = p.readInt();
30170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        sw2 = p.readInt();
30180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
30190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String s = p.readString();
30200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
30210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGV) riljLog("< iccIO: "
30220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + " 0x" + Integer.toHexString(sw1)
30230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + " 0x" + Integer.toHexString(sw2) + " "
30240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + s);
30250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
30260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return new IccIoResult(sw1, sw2, s);
30270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
30280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
30290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private Object
30300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    responseIccCardStatus(Parcel p) {
3031e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka        IccCardApplicationStatus appStatus;
3032e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka
3033e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka        IccCardStatus cardStatus = new IccCardStatus();
3034e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka        cardStatus.setCardState(p.readInt());
3035e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka        cardStatus.setUniversalPinState(p.readInt());
3036e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka        cardStatus.mGsmUmtsSubscriptionAppIndex = p.readInt();
3037e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka        cardStatus.mCdmaSubscriptionAppIndex = p.readInt();
3038e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka        cardStatus.mImsSubscriptionAppIndex = p.readInt();
30390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int numApplications = p.readInt();
30400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
30410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // limit to maximum allowed applications
30420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (numApplications > IccCardStatus.CARD_MAX_APPS) {
30430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            numApplications = IccCardStatus.CARD_MAX_APPS;
30440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
3045e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka        cardStatus.mApplications = new IccCardApplicationStatus[numApplications];
30460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        for (int i = 0 ; i < numApplications ; i++) {
3047e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka            appStatus = new IccCardApplicationStatus();
3048e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka            appStatus.app_type       = appStatus.AppTypeFromRILInt(p.readInt());
3049e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka            appStatus.app_state      = appStatus.AppStateFromRILInt(p.readInt());
3050e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka            appStatus.perso_substate = appStatus.PersoSubstateFromRILInt(p.readInt());
3051e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka            appStatus.aid            = p.readString();
3052e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka            appStatus.app_label      = p.readString();
3053e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka            appStatus.pin1_replaced  = p.readInt();
3054e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka            appStatus.pin1           = appStatus.PinStateFromRILInt(p.readInt());
3055e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka            appStatus.pin2           = appStatus.PinStateFromRILInt(p.readInt());
3056e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka            cardStatus.mApplications[i] = appStatus;
30570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
3058e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka        return cardStatus;
30590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
30600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
30610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private Object
30620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    responseSimRefresh(Parcel p) {
30630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        IccRefreshResponse response = new IccRefreshResponse();
30640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
30650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        response.refreshResult = p.readInt();
30660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        response.efId   = p.readInt();
30670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        response.aid = p.readString();
30680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return response;
30690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
30700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
30710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private Object
30720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    responseCallList(Parcel p) {
30730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int num;
30740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int voiceSettings;
30750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        ArrayList<DriverCall> response;
30760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        DriverCall dc;
30770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
30780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        num = p.readInt();
30790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        response = new ArrayList<DriverCall>(num);
30800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
30810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGV) {
30820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            riljLog("responseCallList: num=" + num +
30830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    " mEmergencyCallbackModeRegistrant=" + mEmergencyCallbackModeRegistrant +
30840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    " mTestingEmergencyCall=" + mTestingEmergencyCall.get());
30850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
30860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        for (int i = 0 ; i < num ; i++) {
30870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dc = new DriverCall();
30880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
30890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dc.state = DriverCall.stateFromCLCC(p.readInt());
30900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dc.index = p.readInt();
30910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dc.TOA = p.readInt();
30920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dc.isMpty = (0 != p.readInt());
30930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dc.isMT = (0 != p.readInt());
30940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dc.als = p.readInt();
30950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            voiceSettings = p.readInt();
30960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dc.isVoice = (0 == voiceSettings) ? false : true;
30970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dc.isVoicePrivacy = (0 != p.readInt());
30980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dc.number = p.readString();
30990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            int np = p.readInt();
31000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dc.numberPresentation = DriverCall.presentationFromCLIP(np);
31010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dc.name = p.readString();
31020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dc.namePresentation = p.readInt();
31030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            int uusInfoPresent = p.readInt();
31040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (uusInfoPresent == 1) {
31050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                dc.uusInfo = new UUSInfo();
31060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                dc.uusInfo.setType(p.readInt());
31070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                dc.uusInfo.setDcs(p.readInt());
31080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                byte[] userData = p.createByteArray();
31090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                dc.uusInfo.setUserData(userData);
31100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                riljLogv(String.format("Incoming UUS : type=%d, dcs=%d, length=%d",
31110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                dc.uusInfo.getType(), dc.uusInfo.getDcs(),
31120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                dc.uusInfo.getUserData().length));
31130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                riljLogv("Incoming UUS : data (string)="
31140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        + new String(dc.uusInfo.getUserData()));
31150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                riljLogv("Incoming UUS : data (hex): "
31160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        + IccUtils.bytesToHexString(dc.uusInfo.getUserData()));
31170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            } else {
31180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                riljLogv("Incoming UUS : NOT present!");
31190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
31200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
31210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            // Make sure there's a leading + on addresses with a TOA of 145
31220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dc.number = PhoneNumberUtils.stringFromStringAndTOA(dc.number, dc.TOA);
31230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
31240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            response.add(dc);
31250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
31260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (dc.isVoicePrivacy) {
31270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                mVoicePrivacyOnRegistrants.notifyRegistrants();
31280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                riljLog("InCall VoicePrivacy is enabled");
31290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            } else {
31300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                mVoicePrivacyOffRegistrants.notifyRegistrants();
31310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                riljLog("InCall VoicePrivacy is disabled");
31320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
31330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
31340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
31350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        Collections.sort(response);
31360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
31370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if ((num == 0) && mTestingEmergencyCall.getAndSet(false)) {
31380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (mEmergencyCallbackModeRegistrant != null) {
31390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                riljLog("responseCallList: call ended, testing emergency call," +
31400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            " notify ECM Registrants");
31410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                mEmergencyCallbackModeRegistrant.notifyRegistrant();
31420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
31430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
31440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
31450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return response;
31460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
31470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
31480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private DataCallState getDataCallState(Parcel p, int version) {
31490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        DataCallState dataCall = new DataCallState();
31500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
31510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        dataCall.version = version;
31520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (version < 5) {
31530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dataCall.cid = p.readInt();
31540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dataCall.active = p.readInt();
31550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dataCall.type = p.readString();
31560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            String addresses = p.readString();
31570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (!TextUtils.isEmpty(addresses)) {
31580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                dataCall.addresses = addresses.split(" ");
31590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
31600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else {
31610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dataCall.status = p.readInt();
31620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dataCall.suggestedRetryTime = p.readInt();
31630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dataCall.cid = p.readInt();
31640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dataCall.active = p.readInt();
31650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dataCall.type = p.readString();
31660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dataCall.ifname = p.readString();
31670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if ((dataCall.status == DataConnection.FailCause.NONE.getErrorCode()) &&
31680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    TextUtils.isEmpty(dataCall.ifname)) {
31690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville              throw new RuntimeException("getDataCallState, no ifname");
31700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
31710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            String addresses = p.readString();
31720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (!TextUtils.isEmpty(addresses)) {
31730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                dataCall.addresses = addresses.split(" ");
31740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
31750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            String dnses = p.readString();
31760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (!TextUtils.isEmpty(dnses)) {
31770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                dataCall.dnses = dnses.split(" ");
31780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
31790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            String gateways = p.readString();
31800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (!TextUtils.isEmpty(gateways)) {
31810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                dataCall.gateways = gateways.split(" ");
31820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
31830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
31840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return dataCall;
31850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
31860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
31870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private Object
31880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    responseDataCallList(Parcel p) {
31890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        ArrayList<DataCallState> response;
31900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
31910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int ver = p.readInt();
31920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int num = p.readInt();
31930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        riljLog("responseDataCallList ver=" + ver + " num=" + num);
31940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
31950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        response = new ArrayList<DataCallState>(num);
31960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        for (int i = 0; i < num; i++) {
31970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            response.add(getDataCallState(p, ver));
31980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
31990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
32000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return response;
32010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
32020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
32030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private Object
32040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    responseSetupDataCall(Parcel p) {
32050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int ver = p.readInt();
32060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int num = p.readInt();
32070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGV) riljLog("responseSetupDataCall ver=" + ver + " num=" + num);
32080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
32090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        DataCallState dataCall;
32100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
32110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (ver < 5) {
32120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dataCall = new DataCallState();
32130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dataCall.version = ver;
32140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dataCall.cid = Integer.parseInt(p.readString());
32150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dataCall.ifname = p.readString();
32160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (TextUtils.isEmpty(dataCall.ifname)) {
32170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                throw new RuntimeException(
32180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        "RIL_REQUEST_SETUP_DATA_CALL response, no ifname");
32190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
32200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            String addresses = p.readString();
32210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (!TextUtils.isEmpty(addresses)) {
32220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville              dataCall.addresses = addresses.split(" ");
32230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
32240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (num >= 4) {
32250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                String dnses = p.readString();
32260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) riljLog("responseSetupDataCall got dnses=" + dnses);
32270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (!TextUtils.isEmpty(dnses)) {
32280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    dataCall.dnses = dnses.split(" ");
32290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
32300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
32310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (num >= 5) {
32320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                String gateways = p.readString();
32330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) riljLog("responseSetupDataCall got gateways=" + gateways);
32340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (!TextUtils.isEmpty(gateways)) {
32350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    dataCall.gateways = gateways.split(" ");
32360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
32370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
32380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else {
32390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (num != 1) {
32400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                throw new RuntimeException(
32410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        "RIL_REQUEST_SETUP_DATA_CALL response expecting 1 RIL_Data_Call_response_v5"
32420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        + " got " + num);
32430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
32440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            dataCall = getDataCallState(p, ver);
32450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
32460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
32470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return dataCall;
32480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
32490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
32500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private Object
32510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    responseOperatorInfos(Parcel p) {
32520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String strings[] = (String [])responseStrings(p);
32530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        ArrayList<OperatorInfo> ret;
32540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
32550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (strings.length % 4 != 0) {
32560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            throw new RuntimeException(
32570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                "RIL_REQUEST_QUERY_AVAILABLE_NETWORKS: invalid response. Got "
32580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + strings.length + " strings, expected multible of 4");
32590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
32600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
32610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        ret = new ArrayList<OperatorInfo>(strings.length / 4);
32620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
32630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        for (int i = 0 ; i < strings.length ; i += 4) {
32640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            ret.add (
32650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                new OperatorInfo(
32660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    strings[i+0],
32670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    strings[i+1],
32680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    strings[i+2],
32690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    strings[i+3]));
32700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
32710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
32720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return ret;
32730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
32740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
32750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private Object
32760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    responseCellList(Parcel p) {
32770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville       int num, rssi;
32780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville       String location;
32790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville       ArrayList<NeighboringCellInfo> response;
32800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville       NeighboringCellInfo cell;
32810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
32820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville       num = p.readInt();
32830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville       response = new ArrayList<NeighboringCellInfo>();
32840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
32850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville       // Determine the radio access type
32860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville       String radioString = SystemProperties.get(
32870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville               TelephonyProperties.PROPERTY_DATA_NETWORK_TYPE, "unknown");
32880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville       int radioType;
32890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville       if (radioString.equals("GPRS")) {
32900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville           radioType = NETWORK_TYPE_GPRS;
32910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville       } else if (radioString.equals("EDGE")) {
32920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville           radioType = NETWORK_TYPE_EDGE;
32930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville       } else if (radioString.equals("UMTS")) {
32940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville           radioType = NETWORK_TYPE_UMTS;
32950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville       } else if (radioString.equals("HSDPA")) {
32960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville           radioType = NETWORK_TYPE_HSDPA;
32970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville       } else if (radioString.equals("HSUPA")) {
32980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville           radioType = NETWORK_TYPE_HSUPA;
32990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville       } else if (radioString.equals("HSPA")) {
33000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville           radioType = NETWORK_TYPE_HSPA;
33010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville       } else {
33020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville           radioType = NETWORK_TYPE_UNKNOWN;
33030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville       }
33040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
33050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville       // Interpret the location based on radio access type
33060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville       if (radioType != NETWORK_TYPE_UNKNOWN) {
33070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville           for (int i = 0 ; i < num ; i++) {
33080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville               rssi = p.readInt();
33090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville               location = p.readString();
33100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville               cell = new NeighboringCellInfo(rssi, location, radioType);
33110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville               response.add(cell);
33120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville           }
33130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville       }
33140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville       return response;
33150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
33160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
33170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private Object responseGetPreferredNetworkType(Parcel p) {
33180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville       int [] response = (int[]) responseInts(p);
33190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
33200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville       if (response.length >= 1) {
33210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville           // Since this is the response for getPreferredNetworkType
33220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville           // we'll assume that it should be the value we want the
33230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville           // vendor ril to take if we reestablish a connection to it.
33240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville           mPreferredNetworkType = response[0];
33250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville       }
33260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville       return response;
33270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
33280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
33290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private Object responseGmsBroadcastConfig(Parcel p) {
33300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int num;
33310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        ArrayList<SmsBroadcastConfigInfo> response;
33320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        SmsBroadcastConfigInfo info;
33330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
33340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        num = p.readInt();
33350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        response = new ArrayList<SmsBroadcastConfigInfo>(num);
33360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
33370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        for (int i = 0; i < num; i++) {
33380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            int fromId = p.readInt();
33390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            int toId = p.readInt();
33400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            int fromScheme = p.readInt();
33410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            int toScheme = p.readInt();
33420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            boolean selected = (p.readInt() == 1);
33430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
33440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            info = new SmsBroadcastConfigInfo(fromId, toId, fromScheme,
33450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    toScheme, selected);
33460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            response.add(info);
33470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
33480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return response;
33490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
33500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
33510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private Object
33520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    responseCdmaBroadcastConfig(Parcel p) {
33530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int numServiceCategories;
33540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int response[];
33550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
33560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        numServiceCategories = p.readInt();
33570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
33580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (numServiceCategories == 0) {
33590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            // TODO: The logic of providing default values should
33600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            // not be done by this transport layer. And needs to
33610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            // be done by the vendor ril or application logic.
33620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            int numInts;
33630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            numInts = CDMA_BROADCAST_SMS_NO_OF_SERVICE_CATEGORIES * CDMA_BSI_NO_OF_INTS_STRUCT + 1;
33640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            response = new int[numInts];
33650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
33660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            // Faking a default record for all possible records.
33670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            response[0] = CDMA_BROADCAST_SMS_NO_OF_SERVICE_CATEGORIES;
33680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
33690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            // Loop over CDMA_BROADCAST_SMS_NO_OF_SERVICE_CATEGORIES set 'english' as
33700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            // default language and selection status to false for all.
33710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            for (int i = 1; i < numInts; i += CDMA_BSI_NO_OF_INTS_STRUCT ) {
33720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                response[i + 0] = i / CDMA_BSI_NO_OF_INTS_STRUCT;
33730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                response[i + 1] = 1;
33740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                response[i + 2] = 0;
33750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
33760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else {
33770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            int numInts;
33780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            numInts = (numServiceCategories * CDMA_BSI_NO_OF_INTS_STRUCT) + 1;
33790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            response = new int[numInts];
33800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
33810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            response[0] = numServiceCategories;
33820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            for (int i = 1 ; i < numInts; i++) {
33830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                 response[i] = p.readInt();
33840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville             }
33850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
33860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
33870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return response;
33880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
33890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
33900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private Object
33910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    responseSignalStrength(Parcel p) {
33925b81adc82a53b3064f4baa3acfeabef31586588aUma Maheswari Ramalingam        SignalStrength signalStrength = new SignalStrength(p);
33935b81adc82a53b3064f4baa3acfeabef31586588aUma Maheswari Ramalingam        return signalStrength;
33940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
33950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
33960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private ArrayList<CdmaInformationRecords>
33970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    responseCdmaInformationRecord(Parcel p) {
33980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int numberOfInfoRecs;
33990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        ArrayList<CdmaInformationRecords> response;
34000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
34010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        /**
34020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville         * Loop through all of the information records unmarshalling them
34030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville         * and converting them to Java Objects.
34040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville         */
34050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        numberOfInfoRecs = p.readInt();
34060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        response = new ArrayList<CdmaInformationRecords>(numberOfInfoRecs);
34070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
34080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        for (int i = 0; i < numberOfInfoRecs; i++) {
34090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            CdmaInformationRecords InfoRec = new CdmaInformationRecords(p);
34100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            response.add(InfoRec);
34110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
34120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
34130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return response;
34140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
34150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
34160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private Object
34170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    responseCdmaCallWaiting(Parcel p) {
34180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        CdmaCallWaitingNotification notification = new CdmaCallWaitingNotification();
34190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
34200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        notification.number = p.readString();
34210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        notification.numberPresentation = notification.presentationFromCLIP(p.readInt());
34220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        notification.name = p.readString();
34230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        notification.namePresentation = notification.numberPresentation;
34240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        notification.isPresent = p.readInt();
34250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        notification.signalType = p.readInt();
34260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        notification.alertPitch = p.readInt();
34270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        notification.signal = p.readInt();
34280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        notification.numberType = p.readInt();
34290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        notification.numberPlan = p.readInt();
34300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
34310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return notification;
34320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
34330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
34340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private Object
34350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    responseCallRing(Parcel p){
34360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        char response[] = new char[4];
34370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
34380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        response[0] = (char) p.readInt();    // isPresent
34390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        response[1] = (char) p.readInt();    // signalType
34400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        response[2] = (char) p.readInt();    // alertPitch
34410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        response[3] = (char) p.readInt();    // signal
34420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
34430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return response;
34440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
34450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
34460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private void
34470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    notifyRegistrantsCdmaInfoRec(CdmaInformationRecords infoRec) {
34480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int response = RIL_UNSOL_CDMA_INFO_REC;
34490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (infoRec.record instanceof CdmaInformationRecords.CdmaDisplayInfoRec) {
34500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (mDisplayInfoRegistrants != null) {
34510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogRet(response, infoRec.record);
34520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                mDisplayInfoRegistrants.notifyRegistrants(
34530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        new AsyncResult (null, infoRec.record, null));
34540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
34550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else if (infoRec.record instanceof CdmaInformationRecords.CdmaSignalInfoRec) {
34560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (mSignalInfoRegistrants != null) {
34570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogRet(response, infoRec.record);
34580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                mSignalInfoRegistrants.notifyRegistrants(
34590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        new AsyncResult (null, infoRec.record, null));
34600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
34610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else if (infoRec.record instanceof CdmaInformationRecords.CdmaNumberInfoRec) {
34620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (mNumberInfoRegistrants != null) {
34630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogRet(response, infoRec.record);
34640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                mNumberInfoRegistrants.notifyRegistrants(
34650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        new AsyncResult (null, infoRec.record, null));
34660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
34670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else if (infoRec.record instanceof CdmaInformationRecords.CdmaRedirectingNumberInfoRec) {
34680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (mRedirNumInfoRegistrants != null) {
34690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogRet(response, infoRec.record);
34700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                mRedirNumInfoRegistrants.notifyRegistrants(
34710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        new AsyncResult (null, infoRec.record, null));
34720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
34730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else if (infoRec.record instanceof CdmaInformationRecords.CdmaLineControlInfoRec) {
34740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (mLineControlInfoRegistrants != null) {
34750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogRet(response, infoRec.record);
34760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                mLineControlInfoRegistrants.notifyRegistrants(
34770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        new AsyncResult (null, infoRec.record, null));
34780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
34790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else if (infoRec.record instanceof CdmaInformationRecords.CdmaT53ClirInfoRec) {
34800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (mT53ClirInfoRegistrants != null) {
34810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (RILJ_LOGD) unsljLogRet(response, infoRec.record);
34820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                mT53ClirInfoRegistrants.notifyRegistrants(
34830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        new AsyncResult (null, infoRec.record, null));
34840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
34850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else if (infoRec.record instanceof CdmaInformationRecords.CdmaT53AudioControlInfoRec) {
34860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (mT53AudCntrlInfoRegistrants != null) {
34870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville               if (RILJ_LOGD) unsljLogRet(response, infoRec.record);
34880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville               mT53AudCntrlInfoRegistrants.notifyRegistrants(
34890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                       new AsyncResult (null, infoRec.record, null));
34900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
34910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
34920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
34930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
34940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    static String
34950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    requestToString(int request) {
34960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville/*
34970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville cat libs/telephony/ril_commands.h \
34980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville | egrep "^ *{RIL_" \
34990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville | sed -re 's/\{RIL_([^,]+),[^,]+,([^}]+).+/case RIL_\1: return "\1";/'
35000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville*/
35010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        switch(request) {
35020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GET_SIM_STATUS: return "GET_SIM_STATUS";
35030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_ENTER_SIM_PIN: return "ENTER_SIM_PIN";
35040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_ENTER_SIM_PUK: return "ENTER_SIM_PUK";
35050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_ENTER_SIM_PIN2: return "ENTER_SIM_PIN2";
35060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_ENTER_SIM_PUK2: return "ENTER_SIM_PUK2";
35070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CHANGE_SIM_PIN: return "CHANGE_SIM_PIN";
35080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CHANGE_SIM_PIN2: return "CHANGE_SIM_PIN2";
35090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_ENTER_NETWORK_DEPERSONALIZATION: return "ENTER_NETWORK_DEPERSONALIZATION";
35100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GET_CURRENT_CALLS: return "GET_CURRENT_CALLS";
35110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_DIAL: return "DIAL";
35120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GET_IMSI: return "GET_IMSI";
35130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_HANGUP: return "HANGUP";
35140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_HANGUP_WAITING_OR_BACKGROUND: return "HANGUP_WAITING_OR_BACKGROUND";
35150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_HANGUP_FOREGROUND_RESUME_BACKGROUND: return "HANGUP_FOREGROUND_RESUME_BACKGROUND";
35160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SWITCH_WAITING_OR_HOLDING_AND_ACTIVE: return "REQUEST_SWITCH_WAITING_OR_HOLDING_AND_ACTIVE";
35170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CONFERENCE: return "CONFERENCE";
35180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_UDUB: return "UDUB";
35190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_LAST_CALL_FAIL_CAUSE: return "LAST_CALL_FAIL_CAUSE";
35200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SIGNAL_STRENGTH: return "SIGNAL_STRENGTH";
35210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_VOICE_REGISTRATION_STATE: return "VOICE_REGISTRATION_STATE";
35220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_DATA_REGISTRATION_STATE: return "DATA_REGISTRATION_STATE";
35230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_OPERATOR: return "OPERATOR";
35240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_RADIO_POWER: return "RADIO_POWER";
35250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_DTMF: return "DTMF";
35260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SEND_SMS: return "SEND_SMS";
35270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SEND_SMS_EXPECT_MORE: return "SEND_SMS_EXPECT_MORE";
35280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SETUP_DATA_CALL: return "SETUP_DATA_CALL";
35290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SIM_IO: return "SIM_IO";
35300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SEND_USSD: return "SEND_USSD";
35310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CANCEL_USSD: return "CANCEL_USSD";
35320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GET_CLIR: return "GET_CLIR";
35330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_CLIR: return "SET_CLIR";
35340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_QUERY_CALL_FORWARD_STATUS: return "QUERY_CALL_FORWARD_STATUS";
35350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_CALL_FORWARD: return "SET_CALL_FORWARD";
35360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_QUERY_CALL_WAITING: return "QUERY_CALL_WAITING";
35370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_CALL_WAITING: return "SET_CALL_WAITING";
35380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SMS_ACKNOWLEDGE: return "SMS_ACKNOWLEDGE";
35390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GET_IMEI: return "GET_IMEI";
35400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GET_IMEISV: return "GET_IMEISV";
35410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_ANSWER: return "ANSWER";
35420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_DEACTIVATE_DATA_CALL: return "DEACTIVATE_DATA_CALL";
35430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_QUERY_FACILITY_LOCK: return "QUERY_FACILITY_LOCK";
35440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_FACILITY_LOCK: return "SET_FACILITY_LOCK";
35450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CHANGE_BARRING_PASSWORD: return "CHANGE_BARRING_PASSWORD";
35460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_QUERY_NETWORK_SELECTION_MODE: return "QUERY_NETWORK_SELECTION_MODE";
35470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_NETWORK_SELECTION_AUTOMATIC: return "SET_NETWORK_SELECTION_AUTOMATIC";
35480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_NETWORK_SELECTION_MANUAL: return "SET_NETWORK_SELECTION_MANUAL";
35490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_QUERY_AVAILABLE_NETWORKS : return "QUERY_AVAILABLE_NETWORKS ";
35500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_DTMF_START: return "DTMF_START";
35510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_DTMF_STOP: return "DTMF_STOP";
35520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_BASEBAND_VERSION: return "BASEBAND_VERSION";
35530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SEPARATE_CONNECTION: return "SEPARATE_CONNECTION";
35540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_MUTE: return "SET_MUTE";
35550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GET_MUTE: return "GET_MUTE";
35560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_QUERY_CLIP: return "QUERY_CLIP";
35570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_LAST_DATA_CALL_FAIL_CAUSE: return "LAST_DATA_CALL_FAIL_CAUSE";
35580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_DATA_CALL_LIST: return "DATA_CALL_LIST";
35590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_RESET_RADIO: return "RESET_RADIO";
35600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_OEM_HOOK_RAW: return "OEM_HOOK_RAW";
35610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_OEM_HOOK_STRINGS: return "OEM_HOOK_STRINGS";
35620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SCREEN_STATE: return "SCREEN_STATE";
35630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_SUPP_SVC_NOTIFICATION: return "SET_SUPP_SVC_NOTIFICATION";
35640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_WRITE_SMS_TO_SIM: return "WRITE_SMS_TO_SIM";
35650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_DELETE_SMS_ON_SIM: return "DELETE_SMS_ON_SIM";
35660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_BAND_MODE: return "SET_BAND_MODE";
35670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_QUERY_AVAILABLE_BAND_MODE: return "QUERY_AVAILABLE_BAND_MODE";
35680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_STK_GET_PROFILE: return "REQUEST_STK_GET_PROFILE";
35690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_STK_SET_PROFILE: return "REQUEST_STK_SET_PROFILE";
35700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_STK_SEND_ENVELOPE_COMMAND: return "REQUEST_STK_SEND_ENVELOPE_COMMAND";
35710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_STK_SEND_TERMINAL_RESPONSE: return "REQUEST_STK_SEND_TERMINAL_RESPONSE";
35720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_STK_HANDLE_CALL_SETUP_REQUESTED_FROM_SIM: return "REQUEST_STK_HANDLE_CALL_SETUP_REQUESTED_FROM_SIM";
35730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_EXPLICIT_CALL_TRANSFER: return "REQUEST_EXPLICIT_CALL_TRANSFER";
35740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE: return "REQUEST_SET_PREFERRED_NETWORK_TYPE";
35750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GET_PREFERRED_NETWORK_TYPE: return "REQUEST_GET_PREFERRED_NETWORK_TYPE";
35760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GET_NEIGHBORING_CELL_IDS: return "REQUEST_GET_NEIGHBORING_CELL_IDS";
35770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_LOCATION_UPDATES: return "REQUEST_SET_LOCATION_UPDATES";
35780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_SET_SUBSCRIPTION_SOURCE: return "RIL_REQUEST_CDMA_SET_SUBSCRIPTION_SOURCE";
35790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_SET_ROAMING_PREFERENCE: return "RIL_REQUEST_CDMA_SET_ROAMING_PREFERENCE";
35800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_QUERY_ROAMING_PREFERENCE: return "RIL_REQUEST_CDMA_QUERY_ROAMING_PREFERENCE";
35810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_TTY_MODE: return "RIL_REQUEST_SET_TTY_MODE";
35820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_QUERY_TTY_MODE: return "RIL_REQUEST_QUERY_TTY_MODE";
35830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_SET_PREFERRED_VOICE_PRIVACY_MODE: return "RIL_REQUEST_CDMA_SET_PREFERRED_VOICE_PRIVACY_MODE";
35840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_QUERY_PREFERRED_VOICE_PRIVACY_MODE: return "RIL_REQUEST_CDMA_QUERY_PREFERRED_VOICE_PRIVACY_MODE";
35850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_FLASH: return "RIL_REQUEST_CDMA_FLASH";
35860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_BURST_DTMF: return "RIL_REQUEST_CDMA_BURST_DTMF";
35870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_SEND_SMS: return "RIL_REQUEST_CDMA_SEND_SMS";
35880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_SMS_ACKNOWLEDGE: return "RIL_REQUEST_CDMA_SMS_ACKNOWLEDGE";
35890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GSM_GET_BROADCAST_CONFIG: return "RIL_REQUEST_GSM_GET_BROADCAST_CONFIG";
35900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GSM_SET_BROADCAST_CONFIG: return "RIL_REQUEST_GSM_SET_BROADCAST_CONFIG";
35910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_GET_BROADCAST_CONFIG: return "RIL_REQUEST_CDMA_GET_BROADCAST_CONFIG";
35920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_SET_BROADCAST_CONFIG: return "RIL_REQUEST_CDMA_SET_BROADCAST_CONFIG";
35930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GSM_BROADCAST_ACTIVATION: return "RIL_REQUEST_GSM_BROADCAST_ACTIVATION";
35940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_VALIDATE_AND_WRITE_AKEY: return "RIL_REQUEST_CDMA_VALIDATE_AND_WRITE_AKEY";
35950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_BROADCAST_ACTIVATION: return "RIL_REQUEST_CDMA_BROADCAST_ACTIVATION";
35960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_SUBSCRIPTION: return "RIL_REQUEST_CDMA_SUBSCRIPTION";
35970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_WRITE_SMS_TO_RUIM: return "RIL_REQUEST_CDMA_WRITE_SMS_TO_RUIM";
35980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_DELETE_SMS_ON_RUIM: return "RIL_REQUEST_CDMA_DELETE_SMS_ON_RUIM";
35990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_DEVICE_IDENTITY: return "RIL_REQUEST_DEVICE_IDENTITY";
36000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_GET_SMSC_ADDRESS: return "RIL_REQUEST_GET_SMSC_ADDRESS";
36010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_SET_SMSC_ADDRESS: return "RIL_REQUEST_SET_SMSC_ADDRESS";
36020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_EXIT_EMERGENCY_CALLBACK_MODE: return "REQUEST_EXIT_EMERGENCY_CALLBACK_MODE";
36030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_REPORT_SMS_MEMORY_STATUS: return "RIL_REQUEST_REPORT_SMS_MEMORY_STATUS";
36040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_REPORT_STK_SERVICE_IS_RUNNING: return "RIL_REQUEST_REPORT_STK_SERVICE_IS_RUNNING";
36050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_CDMA_GET_SUBSCRIPTION_SOURCE: return "RIL_REQUEST_CDMA_GET_SUBSCRIPTION_SOURCE";
36060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_ISIM_AUTHENTICATION: return "RIL_REQUEST_ISIM_AUTHENTICATION";
36070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_ACKNOWLEDGE_INCOMING_GSM_SMS_WITH_PDU: return "RIL_REQUEST_ACKNOWLEDGE_INCOMING_GSM_SMS_WITH_PDU";
36080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_STK_SEND_ENVELOPE_WITH_STATUS: return "RIL_REQUEST_STK_SEND_ENVELOPE_WITH_STATUS";
36090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_REQUEST_VOICE_RADIO_TECH: return "RIL_REQUEST_VOICE_RADIO_TECH";
36100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            default: return "<unknown request>";
36110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
36120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
36130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
36140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    static String
36150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    responseToString(int request)
36160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    {
36170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville/*
36180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville cat libs/telephony/ril_unsol_commands.h \
36190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville | egrep "^ *{RIL_" \
36200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville | sed -re 's/\{RIL_([^,]+),[^,]+,([^}]+).+/case RIL_\1: return "\1";/'
36210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville*/
36220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        switch(request) {
36230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_RADIO_STATE_CHANGED: return "UNSOL_RESPONSE_RADIO_STATE_CHANGED";
36240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED: return "UNSOL_RESPONSE_CALL_STATE_CHANGED";
36250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED: return "UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED";
36260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_NEW_SMS: return "UNSOL_RESPONSE_NEW_SMS";
36270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_NEW_SMS_STATUS_REPORT: return "UNSOL_RESPONSE_NEW_SMS_STATUS_REPORT";
36280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_NEW_SMS_ON_SIM: return "UNSOL_RESPONSE_NEW_SMS_ON_SIM";
36290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_ON_USSD: return "UNSOL_ON_USSD";
36300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_ON_USSD_REQUEST: return "UNSOL_ON_USSD_REQUEST";
36310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_NITZ_TIME_RECEIVED: return "UNSOL_NITZ_TIME_RECEIVED";
36320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_SIGNAL_STRENGTH: return "UNSOL_SIGNAL_STRENGTH";
36330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_DATA_CALL_LIST_CHANGED: return "UNSOL_DATA_CALL_LIST_CHANGED";
36340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_SUPP_SVC_NOTIFICATION: return "UNSOL_SUPP_SVC_NOTIFICATION";
36350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_STK_SESSION_END: return "UNSOL_STK_SESSION_END";
36360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_STK_PROACTIVE_COMMAND: return "UNSOL_STK_PROACTIVE_COMMAND";
36370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_STK_EVENT_NOTIFY: return "UNSOL_STK_EVENT_NOTIFY";
36380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_STK_CALL_SETUP: return "UNSOL_STK_CALL_SETUP";
36390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_SIM_SMS_STORAGE_FULL: return "UNSOL_SIM_SMS_STORAGE_FULL";
36400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_SIM_REFRESH: return "UNSOL_SIM_REFRESH";
36410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_CALL_RING: return "UNSOL_CALL_RING";
36420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_SIM_STATUS_CHANGED: return "UNSOL_RESPONSE_SIM_STATUS_CHANGED";
36430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_CDMA_NEW_SMS: return "UNSOL_RESPONSE_CDMA_NEW_SMS";
36440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESPONSE_NEW_BROADCAST_SMS: return "UNSOL_RESPONSE_NEW_BROADCAST_SMS";
36450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_CDMA_RUIM_SMS_STORAGE_FULL: return "UNSOL_CDMA_RUIM_SMS_STORAGE_FULL";
36460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESTRICTED_STATE_CHANGED: return "UNSOL_RESTRICTED_STATE_CHANGED";
36470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_ENTER_EMERGENCY_CALLBACK_MODE: return "UNSOL_ENTER_EMERGENCY_CALLBACK_MODE";
36480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_CDMA_CALL_WAITING: return "UNSOL_CDMA_CALL_WAITING";
36490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_CDMA_OTA_PROVISION_STATUS: return "UNSOL_CDMA_OTA_PROVISION_STATUS";
36500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_CDMA_INFO_REC: return "UNSOL_CDMA_INFO_REC";
36510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_OEM_HOOK_RAW: return "UNSOL_OEM_HOOK_RAW";
36520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RINGBACK_TONE: return "UNSOL_RINGBACK_TONG";
36530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RESEND_INCALL_MUTE: return "UNSOL_RESEND_INCALL_MUTE";
36540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_CDMA_SUBSCRIPTION_SOURCE_CHANGED: return "CDMA_SUBSCRIPTION_SOURCE_CHANGED";
36550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOl_CDMA_PRL_CHANGED: return "UNSOL_CDMA_PRL_CHANGED";
36560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_EXIT_EMERGENCY_CALLBACK_MODE: return "UNSOL_EXIT_EMERGENCY_CALLBACK_MODE";
36570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_RIL_CONNECTED: return "UNSOL_RIL_CONNECTED";
36580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case RIL_UNSOL_VOICE_RADIO_TECH_CHANGED: return "UNSOL_VOICE_RADIO_TECH_CHANGED";
36590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            default: return "<unknown reponse>";
36600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
36610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
36620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
36630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private void riljLog(String msg) {
3664ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville        Rlog.d(LOG_TAG, msg);
36650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
36660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
36670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private void riljLogv(String msg) {
3668ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville        Rlog.v(LOG_TAG, msg);
36690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
36700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
36710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private void unsljLog(int response) {
36720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        riljLog("[UNSL]< " + responseToString(response));
36730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
36740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
36750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private void unsljLogMore(int response, String more) {
36760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        riljLog("[UNSL]< " + responseToString(response) + " " + more);
36770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
36780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
36790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private void unsljLogRet(int response, Object ret) {
36800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        riljLog("[UNSL]< " + responseToString(response) + " " + retToString(response, ret));
36810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
36820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
36830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private void unsljLogvRet(int response, Object ret) {
36840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        riljLogv("[UNSL]< " + responseToString(response) + " " + retToString(response, ret));
36850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
36860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
36870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
36880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // ***** Methods for CDMA support
36890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
36900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    getDeviceIdentity(Message response) {
36910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_DEVICE_IDENTITY, response);
36920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
36930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
36940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
36950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
36960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
36970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
36980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
36990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    getCDMASubscription(Message response) {
37000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CDMA_SUBSCRIPTION, response);
37010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
37020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
37030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
37040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
37050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
37060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
37070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override
37080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void setPhoneType(int phoneType) { // Called by CDMAPhone and GSMPhone constructor
37090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog("setPhoneType=" + phoneType + " old value=" + mPhoneType);
37100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mPhoneType = phoneType;
37110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
37120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
37130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
37140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
37150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
37160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void queryCdmaRoamingPreference(Message response) {
37170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(
37180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                RILConstants.RIL_REQUEST_CDMA_QUERY_ROAMING_PREFERENCE, response);
37190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
37200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
37210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
37220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
37230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
37240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
37250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
37260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
37270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
37280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void setCdmaRoamingPreference(int cdmaRoamingType, Message response) {
37290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(
37300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                RILConstants.RIL_REQUEST_CDMA_SET_ROAMING_PREFERENCE, response);
37310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
37320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(1);
37330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(cdmaRoamingType);
37340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
37350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
37360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + " : " + cdmaRoamingType);
37370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
37380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
37390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
37400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
37410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
37420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
37430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
37440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void setCdmaSubscriptionSource(int cdmaSubscription , Message response) {
37450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(
37460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                RILConstants.RIL_REQUEST_CDMA_SET_SUBSCRIPTION_SOURCE, response);
37470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
37480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(1);
37490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(cdmaSubscription);
37500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
37510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
37520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + " : " + cdmaSubscription);
37530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
37540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
37550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
37560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
37570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
37580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
37590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
37600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override
37610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void getCdmaSubscriptionSource(Message response) {
37620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(
37630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                RILConstants.RIL_REQUEST_CDMA_GET_SUBSCRIPTION_SOURCE, response);
37640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
37650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
37660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
37670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
37680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
37690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
37700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
37710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
37720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
37730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void queryTTYMode(Message response) {
37740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(
37750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                RILConstants.RIL_REQUEST_QUERY_TTY_MODE, response);
37760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
37770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
37780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
37790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
37800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
37810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
37820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
37830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
37840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
37850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void setTTYMode(int ttyMode, Message response) {
37860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(
37870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                RILConstants.RIL_REQUEST_SET_TTY_MODE, response);
37880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
37890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(1);
37900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(ttyMode);
37910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
37920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
37930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + " : " + ttyMode);
37940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
37950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
37960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
37970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
37980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
37990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
38000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
38010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
38020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    sendCDMAFeatureCode(String FeatureCode, Message response) {
38030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CDMA_FLASH, response);
38040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
38050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeString(FeatureCode);
38060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
38070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
38080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                + " : " + FeatureCode);
38090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
38100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
38110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
38120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
38130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void getCdmaBroadcastConfig(Message response) {
38140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CDMA_GET_BROADCAST_CONFIG, response);
38150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
38160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
38170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
38180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
38190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // TODO: Change the configValuesArray to a RIL_BroadcastSMSConfig
38200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void setCdmaBroadcastConfig(int[] configValuesArray, Message response) {
38210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CDMA_SET_BROADCAST_CONFIG, response);
38220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
38230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        for(int i = 0; i < configValuesArray.length; i++) {
38240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            rr.mp.writeInt(configValuesArray[i]);
38250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
38260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
38270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
38280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
38290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
38300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
38310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
38320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void setCdmaBroadcastActivation(boolean activate, Message response) {
38330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CDMA_BROADCAST_ACTIVATION, response);
38340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
38350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(1);
38360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeInt(activate ? 0 :1);
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     */
38460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void exitEmergencyCallbackMode(Message response) {
38470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_EXIT_EMERGENCY_CALLBACK_MODE, response);
38480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
38490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
38500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
38510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
38520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
38530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
38540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void requestIsimAuthentication(String nonce, Message response) {
38550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_ISIM_AUTHENTICATION, response);
38560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
38570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rr.mp.writeString(nonce);
38580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
38590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
38600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
38610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        send(rr);
38620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
38630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
38640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /* (non-Javadoc)
38650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @see com.android.internal.telephony.BaseCommands#testingEmergencyCall()
38660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
38670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override
38680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testingEmergencyCall() {
38690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (RILJ_LOGD) riljLog("testingEmergencyCall");
38700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mTestingEmergencyCall.set(true);
38710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
38720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
38730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
387405ef3b65972826780859b9acbd1fa9580d099832Alex Yakavenka        pw.println("RIL: " + this);
38750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        pw.println(" mSocket=" + mSocket);
38760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        pw.println(" mSenderThread=" + mSenderThread);
38770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        pw.println(" mSender=" + mSender);
38780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        pw.println(" mReceiverThread=" + mReceiverThread);
38790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        pw.println(" mReceiver=" + mReceiver);
38800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        pw.println(" mWakeLock=" + mWakeLock);
38810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        pw.println(" mWakeLockTimeout=" + mWakeLockTimeout);
3882892e1fecf3c3736c4c04cf219d01034f71307065Robert Greenwalt        synchronized (mRequestList) {
38830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville          pw.println(" mRequestMessagesPending=" + mRequestMessagesPending);
38840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville          pw.println(" mRequestMessagesWaiting=" + mRequestMessagesWaiting);
3885892e1fecf3c3736c4c04cf219d01034f71307065Robert Greenwalt            int count = mRequestList.size();
38860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            pw.println(" mRequestList count=" + count);
38870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            for (int i = 0; i < count; i++) {
3888892e1fecf3c3736c4c04cf219d01034f71307065Robert Greenwalt                RILRequest rr = mRequestList.get(i);
38890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                pw.println("  [" + rr.mSerial + "] " + requestToString(rr.mRequest));
38900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
38910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
38920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        pw.println(" mLastNITZTimeInfo=" + mLastNITZTimeInfo);
38930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        pw.println(" mTestingEmergencyCall=" + mTestingEmergencyCall.get());
38940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
38950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville}
3896