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