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