19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2006 The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License.
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License.
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17767a662ecde33c3979bf02b793d392aca0403162Wink Savillepackage com.android.internal.telephony;
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
192a34043d5578deb8d7f93830e13c4efc91eba583Jaikumar Ganeshimport static com.android.internal.telephony.RILConstants.*;
209c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwangimport static android.telephony.TelephonyManager.NETWORK_TYPE_UNKNOWN;
219c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwangimport static android.telephony.TelephonyManager.NETWORK_TYPE_EDGE;
229c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwangimport static android.telephony.TelephonyManager.NETWORK_TYPE_GPRS;
239c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwangimport static android.telephony.TelephonyManager.NETWORK_TYPE_UMTS;
249c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwangimport static android.telephony.TelephonyManager.NETWORK_TYPE_HSDPA;
259c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwangimport static android.telephony.TelephonyManager.NETWORK_TYPE_HSUPA;
269c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwangimport static android.telephony.TelephonyManager.NETWORK_TYPE_HSPA;
279c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwang
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.BroadcastReceiver;
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Context;
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Intent;
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.IntentFilter;
329b2886e24301e5d4e7052ec4a6eaff273d3f516cRobert Greenwaltimport android.net.ConnectivityManager;
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.net.LocalSocket;
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.net.LocalSocketAddress;
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.AsyncResult;
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Handler;
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.HandlerThread;
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Looper;
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Message;
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcel;
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.PowerManager;
429c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwangimport android.os.SystemProperties;
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.PowerManager.WakeLock;
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.telephony.NeighboringCellInfo;
452a34043d5578deb8d7f93830e13c4efc91eba583Jaikumar Ganeshimport android.telephony.PhoneNumberUtils;
46767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.telephony.SmsManager;
47767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.telephony.SmsMessage;
4870181e2a9f4366eb422dcfe35636e90090ebe942Wink Savilleimport android.text.TextUtils;
492a34043d5578deb8d7f93830e13c4efc91eba583Jaikumar Ganeshimport android.util.Log;
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
51e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwangimport com.android.internal.telephony.gsm.SmsBroadcastConfigInfo;
52767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.gsm.SuppServiceNotification;
53dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Savilleimport com.android.internal.telephony.cdma.CdmaCallWaitingNotification;
54dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Savilleimport com.android.internal.telephony.cdma.CdmaInformationRecords;
558f241458051c8bd2a68b0e8b9fe0d0f326a0a56bAlex Yakavenkaimport com.android.internal.telephony.IccRefreshResponse;
56767a662ecde33c3979bf02b793d392aca0403162Wink Saville
57767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport java.io.ByteArrayInputStream;
58767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport java.io.DataInputStream;
5930ccade7f9432b8212807b9ddc8cc69a4a8fc854Wink Savilleimport java.io.FileDescriptor;
60767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport java.io.IOException;
612a34043d5578deb8d7f93830e13c4efc91eba583Jaikumar Ganeshimport java.io.InputStream;
6230ccade7f9432b8212807b9ddc8cc69a4a8fc854Wink Savilleimport java.io.PrintWriter;
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.ArrayList;
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.Collections;
657c20c4607c4402589ce4800a0c49127876dbc6bdWink Savilleimport java.util.concurrent.atomic.AtomicBoolean;
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@hide}
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
70767a662ecde33c3979bf02b793d392aca0403162Wink Savilleclass RILRequest {
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    static final String LOG_TAG = "RILJ";
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //***** Class Variables
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    static int sNextSerial = 0;
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    static Object sSerialMonitor = new Object();
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private static Object sPoolSync = new Object();
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private static RILRequest sPool = null;
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private static int sPoolSize = 0;
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private static final int MAX_POOL_SIZE = 4;
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //***** Instance Variables
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int mSerial;
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int mRequest;
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    Message mResult;
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    Parcel mp;
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    RILRequest mNext;
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Retrieves a new RILRequest instance from the pool.
90767a662ecde33c3979bf02b793d392aca0403162Wink Saville     *
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param request RIL_REQUEST_*
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param result sent when operation completes
939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return a RILRequest instance from the pool.
949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    static RILRequest obtain(int request, Message result) {
969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        RILRequest rr = null;
97767a662ecde33c3979bf02b793d392aca0403162Wink Saville
989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        synchronized(sPoolSync) {
999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (sPool != null) {
1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                rr = sPool;
1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                sPool = rr.mNext;
1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                rr.mNext = null;
1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                sPoolSize--;
1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
106767a662ecde33c3979bf02b793d392aca0403162Wink Saville
1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (rr == null) {
1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            rr = new RILRequest();
1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        synchronized(sSerialMonitor) {
1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            rr.mSerial = sNextSerial++;
1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mRequest = request;
1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mResult = result;
1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp = Parcel.obtain();
1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (result != null && result.getTarget() == null) {
1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            throw new NullPointerException("Message target must not be null");
1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // first elements in any RIL Parcel
1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(request);
1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(rr.mSerial);
1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return rr;
1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns a RILRequest instance to the pool.
131767a662ecde33c3979bf02b793d392aca0403162Wink Saville     *
1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Note: This should only be called once per use.
1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void release() {
1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        synchronized (sPoolSync) {
1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (sPoolSize < MAX_POOL_SIZE) {
1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                this.mNext = sPool;
1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                sPool = this;
1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                sPoolSize++;
1403ffccab78666d8960c10a00239de6bb40f4fb1b6Johannes Carlsson                mResult = null;
1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
145767a662ecde33c3979bf02b793d392aca0403162Wink Saville    private RILRequest() {
1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    static void
149767a662ecde33c3979bf02b793d392aca0403162Wink Saville    resetSerial() {
1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        synchronized(sSerialMonitor) {
1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            sNextSerial = 0;
1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    String
156767a662ecde33c3979bf02b793d392aca0403162Wink Saville    serialString() {
1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        //Cheesy way to do %04d
1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        StringBuilder sb = new StringBuilder(8);
1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        String sn;
1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sn = Integer.toString(mSerial);
1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        //sb.append("J[");
1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sb.append('[');
1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        for (int i = 0, s = sn.length() ; i < 4 - s; i++) {
1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            sb.append('0');
1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sb.append(sn);
1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sb.append(']');
1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return sb.toString();
1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void
17503228fa8f950dfee3f679d280f98d040dea397dcjohnwang    onError(int error, Object ret) {
1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        CommandException ex;
1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        ex = CommandException.fromRilErrno(error);
1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RIL.RILJ_LOGD) Log.d(LOG_TAG, serialString() + "< "
181767a662ecde33c3979bf02b793d392aca0403162Wink Saville            + RIL.requestToString(mRequest)
1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            + " error: " + ex);
1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (mResult != null) {
18503228fa8f950dfee3f679d280f98d040dea397dcjohnwang            AsyncResult.forMessage(mResult, ret, ex);
1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mResult.sendToTarget();
1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (mp != null) {
1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.recycle();
1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp = null;
1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * RIL implementation of the CommandsInterface.
1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * FIXME public only for testing
200767a662ecde33c3979bf02b793d392aca0403162Wink Saville *
2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@hide}
2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
203767a662ecde33c3979bf02b793d392aca0403162Wink Savillepublic final class RIL extends BaseCommands implements CommandsInterface {
2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    static final String LOG_TAG = "RILJ";
2051d1a373f5c7637de545ad815ad21aa325aaa970fWink Saville    static final boolean RILJ_LOGD = true;
2061d1a373f5c7637de545ad815ad21aa325aaa970fWink Saville    static final boolean RILJ_LOGV = false; // STOP SHIP if true
2070e57e73575f27682b57b8ba615215d1bc2669b3aWink Saville
2080e57e73575f27682b57b8ba615215d1bc2669b3aWink Saville    /**
2090e57e73575f27682b57b8ba615215d1bc2669b3aWink Saville     * Wake lock timeout should be longer than the longest timeout in
2100e57e73575f27682b57b8ba615215d1bc2669b3aWink Saville     * the vendor ril.
2110e57e73575f27682b57b8ba615215d1bc2669b3aWink Saville     */
212b260fe75c18e5cb4823654e031ea5a66e0eecdbbWink Saville    private static final int DEFAULT_WAKE_LOCK_TIMEOUT = 60000;
2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //***** Instance Variables
2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    LocalSocket mSocket;
217767a662ecde33c3979bf02b793d392aca0403162Wink Saville    HandlerThread mSenderThread;
2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    RILSender mSender;
2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    Thread mReceiverThread;
2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    RILReceiver mReceiver;
2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    WakeLock mWakeLock;
2220e57e73575f27682b57b8ba615215d1bc2669b3aWink Saville    int mWakeLockTimeout;
223696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang    // The number of requests pending to be sent out, it increases before calling
224696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang    // EVENT_SEND and decreases while handling EVENT_SEND. It gets cleared while
225696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang    // WAKE_LOCK_TIMEOUT occurs.
2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int mRequestMessagesPending;
227696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang    // The number of requests sent out but waiting for response. It increases while
228696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang    // sending request and decreases while handling response. It should match
229696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang    // mRequestList.size() unless there are requests no replied while
230696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang    // WAKE_LOCK_TIMEOUT occurs.
231696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang    int mRequestMessagesWaiting;
232767a662ecde33c3979bf02b793d392aca0403162Wink Saville
2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //I'd rather this be LinkedList or something
2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ArrayList<RILRequest> mRequestsList = new ArrayList<RILRequest>();
235767a662ecde33c3979bf02b793d392aca0403162Wink Saville
2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    Object     mLastNITZTimeInfo;
2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2387c20c4607c4402589ce4800a0c49127876dbc6bdWink Saville    // When we are testing emergency calls
2397c20c4607c4402589ce4800a0c49127876dbc6bdWink Saville    AtomicBoolean mTestingEmergencyCall = new AtomicBoolean(false);
2407c20c4607c4402589ce4800a0c49127876dbc6bdWink Saville
2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //***** Events
2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    static final int EVENT_SEND                 = 1;
2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    static final int EVENT_WAKE_LOCK_TIMEOUT    = 2;
2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //***** Constants
2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // match with constant in ril.cpp
2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    static final int RIL_MAX_COMMAND_BYTES = (8 * 1024);
2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    static final int RESPONSE_SOLICITED = 0;
2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    static final int RESPONSE_UNSOLICITED = 1;
2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    static final String SOCKET_NAME_RIL = "rild";
2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    static final int SOCKET_OPEN_RETRY_MILLIS = 4 * 1000;
2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
257e66b5c43cb2d0aece7f4a636a2368a9c66c46cf5Wink Saville    // The number of the required config values for broadcast SMS stored in the C struct
258e66b5c43cb2d0aece7f4a636a2368a9c66c46cf5Wink Saville    // RIL_CDMA_BroadcastServiceInfo
259e66b5c43cb2d0aece7f4a636a2368a9c66c46cf5Wink Saville    private static final int CDMA_BSI_NO_OF_INTS_STRUCT = 3;
260e66b5c43cb2d0aece7f4a636a2368a9c66c46cf5Wink Saville
261e66b5c43cb2d0aece7f4a636a2368a9c66c46cf5Wink Saville    private static final int CDMA_BROADCAST_SMS_NO_OF_SERVICE_CATEGORIES = 31;
2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {
264e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        @Override
2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public void onReceive(Context context, Intent intent) {
2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                sendScreenState(true);
2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            } else if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                sendScreenState(false);
2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            } else {
2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Log.w(LOG_TAG, "RIL received unexpected Intent: " + intent.getAction());
2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    };
275767a662ecde33c3979bf02b793d392aca0403162Wink Saville
276767a662ecde33c3979bf02b793d392aca0403162Wink Saville    class RILSender extends Handler implements Runnable {
2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public RILSender(Looper looper) {
2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            super(looper);
2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
280767a662ecde33c3979bf02b793d392aca0403162Wink Saville
2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // Only allocated once
2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        byte[] dataLength = new byte[4];
2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        //***** Runnable implementation
2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public void
286767a662ecde33c3979bf02b793d392aca0403162Wink Saville        run() {
2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            //setup if needed
2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
291145ff609de3206b585819ef974fab20cdc2d9f5eJake Hamby        //***** Handler implementation
292145ff609de3206b585819ef974fab20cdc2d9f5eJake Hamby        @Override public void
293767a662ecde33c3979bf02b793d392aca0403162Wink Saville        handleMessage(Message msg) {
2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            RILRequest rr = (RILRequest)(msg.obj);
2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            RILRequest req = null;
296767a662ecde33c3979bf02b793d392aca0403162Wink Saville
2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            switch (msg.what) {
2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                case EVENT_SEND:
2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    /**
3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                     * mRequestMessagePending++ already happened for every
3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                     * EVENT_SEND, thus we must make sure
3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                     * mRequestMessagePending-- happens once and only once
3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                     */
3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    boolean alreadySubtracted = false;
3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    try {
3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        LocalSocket s;
3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        s = mSocket;
3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        if (s == null) {
31103228fa8f950dfee3f679d280f98d040dea397dcjohnwang                            rr.onError(RADIO_NOT_AVAILABLE, null);
3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            rr.release();
313696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                            if (mRequestMessagesPending > 0)
314696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                                mRequestMessagesPending--;
3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            alreadySubtracted = true;
3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            return;
3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        }
3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        synchronized (mRequestsList) {
3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            mRequestsList.add(rr);
321696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                            mRequestMessagesWaiting++;
3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        }
3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
324696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                        if (mRequestMessagesPending > 0)
325696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                            mRequestMessagesPending--;
3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        alreadySubtracted = true;
3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        byte[] data;
3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        data = rr.mp.marshall();
3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        rr.mp.recycle();
3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        rr.mp = null;
3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        if (data.length > RIL_MAX_COMMAND_BYTES) {
3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            throw new RuntimeException(
336767a662ecde33c3979bf02b793d392aca0403162Wink Saville                                    "Parcel larger than max bytes allowed! "
3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                                          + data.length);
3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        }
3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        // parcel length in big endian
3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        dataLength[0] = dataLength[1] = 0;
3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        dataLength[2] = (byte)((data.length >> 8) & 0xff);
3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        dataLength[3] = (byte)((data.length) & 0xff);
3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        //Log.v(LOG_TAG, "writing packet: " + data.length + " bytes");
3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
347767a662ecde33c3979bf02b793d392aca0403162Wink Saville                        s.getOutputStream().write(dataLength);
3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        s.getOutputStream().write(data);
3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    } catch (IOException ex) {
3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        Log.e(LOG_TAG, "IOException", ex);
3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        req = findAndRemoveRequestFromList(rr.mSerial);
3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        // make sure this request has not already been handled,
3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        // eg, if RILReceiver cleared the list.
3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        if (req != null || !alreadySubtracted) {
35503228fa8f950dfee3f679d280f98d040dea397dcjohnwang                            rr.onError(RADIO_NOT_AVAILABLE, null);
3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            rr.release();
3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        }
3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    } catch (RuntimeException exc) {
3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        Log.e(LOG_TAG, "Uncaught exception ", exc);
3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        req = findAndRemoveRequestFromList(rr.mSerial);
3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        // make sure this request has not already been handled,
3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        // eg, if RILReceiver cleared the list.
3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        if (req != null || !alreadySubtracted) {
36403228fa8f950dfee3f679d280f98d040dea397dcjohnwang                            rr.onError(GENERIC_FAILURE, null);
3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            rr.release();
3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        }
36760bb9c9a81bcd766d3e79f765ac22c7c38492409Anshul Jain                    } finally {
36860bb9c9a81bcd766d3e79f765ac22c7c38492409Anshul Jain                        // Note: We are "Done" only if there are no outstanding
36960bb9c9a81bcd766d3e79f765ac22c7c38492409Anshul Jain                        // requests or replies. Thus this code path will only release
37060bb9c9a81bcd766d3e79f765ac22c7c38492409Anshul Jain                        // the wake lock on errors.
37160bb9c9a81bcd766d3e79f765ac22c7c38492409Anshul Jain                        releaseWakeLockIfDone();
3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    }
3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
374696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                    if (!alreadySubtracted && mRequestMessagesPending > 0) {
3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        mRequestMessagesPending--;
3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    }
3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    break;
3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                case EVENT_WAKE_LOCK_TIMEOUT:
3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    // Haven't heard back from the last request.  Assume we're
3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    // not getting a response and  release the wake lock.
3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    synchronized (mWakeLock) {
3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        if (mWakeLock.isHeld()) {
38500d520b66caeef722281b76d30c0e1294070713dJohn Wang                            // The timer of WAKE_LOCK_TIMEOUT is reset with each
38600d520b66caeef722281b76d30c0e1294070713dJohn Wang                            // new send request. So when WAKE_LOCK_TIMEOUT occurs
38700d520b66caeef722281b76d30c0e1294070713dJohn Wang                            // all requests in mRequestList already waited at
38800d520b66caeef722281b76d30c0e1294070713dJohn Wang                            // least DEFAULT_WAKE_LOCK_TIMEOUT but no response.
389696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                            // Reset mRequestMessagesWaiting to enable
390696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                            // releaseWakeLockIfDone().
39100d520b66caeef722281b76d30c0e1294070713dJohn Wang                            //
392696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                            // Note: Keep mRequestList so that delayed response
393696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                            // can still be handled when response finally comes.
394696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                            if (mRequestMessagesWaiting != 0) {
395696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                                Log.d(LOG_TAG, "NOTE: mReqWaiting is NOT 0 but"
396696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                                        + mRequestMessagesWaiting + " at TIMEOUT, reset!"
397696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                                        + " There still msg waitng for response");
398696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang
399696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                                mRequestMessagesWaiting = 0;
400696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang
401696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                                if (RILJ_LOGD) {
402696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                                    synchronized (mRequestsList) {
403696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                                        int count = mRequestsList.size();
404696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                                        Log.d(LOG_TAG, "WAKE_LOCK_TIMEOUT " +
405696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                                                " mRequestList=" + count);
406696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang
407696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                                        for (int i = 0; i < count; i++) {
408696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                                            rr = mRequestsList.get(i);
409696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                                            Log.d(LOG_TAG, i + ": [" + rr.mSerial + "] "
410696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                                                    + requestToString(rr.mRequest));
411696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                                        }
412696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                                    }
413696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                                }
414696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                            }
415696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                            // mRequestMessagesPending shows how many
416696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                            // requests are waiting to be sent (and before
417696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                            // to be added in request list) since star the
418696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                            // WAKE_LOCK_TIMEOUT timer. Since WAKE_LOCK_TIMEOUT
419696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                            // is the expected time to get response, all requests
420696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                            // should already sent out (i.e.
421696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                            // mRequestMessagesPending is 0 )while TIMEOUT occurs.
42200d520b66caeef722281b76d30c0e1294070713dJohn Wang                            if (mRequestMessagesPending != 0) {
423696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                                Log.e(LOG_TAG, "ERROR: mReqPending is NOT 0 but"
424696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                                        + mRequestMessagesPending + " at TIMEOUT, reset!");
425696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                                mRequestMessagesPending = 0;
426696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang
4279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            }
4289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            mWakeLock.release();
4299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        }
4309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    }
4319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    break;
4329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
4339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
4349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
4379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Reads in a single RIL message off the wire. A RIL message consists
4389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * of a 4-byte little-endian length and a subsequent series of bytes.
4399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The final message (length header omitted) is read into
4409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <code>buffer</code> and the length of the final message (less header)
4419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * is returned. A return value of -1 indicates end-of-stream.
4429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
4439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param is non-null; Stream to read from
4449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param buffer Buffer to fill in. Must be as large as maximum
4459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * message size, or an ArrayOutOfBounds exception will be thrown.
4469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Length of message less header, or -1 on end of stream.
4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @throws IOException
4489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
4499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private static int readRilMessage(InputStream is, byte[] buffer)
450767a662ecde33c3979bf02b793d392aca0403162Wink Saville            throws IOException {
4519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int countRead;
4529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int offset;
4539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int remaining;
4549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int messageLength;
4559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // First, read in the length of the message
4579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        offset = 0;
4589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        remaining = 4;
4599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        do {
4609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            countRead = is.read(buffer, offset, remaining);
4619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (countRead < 0 ) {
4639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Log.e(LOG_TAG, "Hit EOS reading message length");
4649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return -1;
4659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
4669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            offset += countRead;
4689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            remaining -= countRead;
4699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } while (remaining > 0);
4709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        messageLength = ((buffer[0] & 0xff) << 24)
4729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                | ((buffer[1] & 0xff) << 16)
4739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                | ((buffer[2] & 0xff) << 8)
4749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                | (buffer[3] & 0xff);
4759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // Then, re-use the buffer and read in the message itself
4779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        offset = 0;
4789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        remaining = messageLength;
4799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        do {
4809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            countRead = is.read(buffer, offset, remaining);
4819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (countRead < 0 ) {
4839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Log.e(LOG_TAG, "Hit EOS reading message.  messageLength=" + messageLength
4849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        + " remaining=" + remaining);
4859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return -1;
4869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
4879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            offset += countRead;
4899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            remaining -= countRead;
4909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } while (remaining > 0);
4919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return messageLength;
4939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
495767a662ecde33c3979bf02b793d392aca0403162Wink Saville    class RILReceiver implements Runnable {
4969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        byte[] buffer;
4979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
498767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILReceiver() {
4999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            buffer = new byte[RIL_MAX_COMMAND_BYTES];
5009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
5019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public void
503767a662ecde33c3979bf02b793d392aca0403162Wink Saville        run() {
5049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int retryCount = 0;
505767a662ecde33c3979bf02b793d392aca0403162Wink Saville
5069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            try {for (;;) {
5079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                LocalSocket s = null;
5089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                LocalSocketAddress l;
5099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                try {
5119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    s = new LocalSocket();
5129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    l = new LocalSocketAddress(SOCKET_NAME_RIL,
5139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            LocalSocketAddress.Namespace.RESERVED);
5149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    s.connect(l);
5159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                } catch (IOException ex){
5169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    try {
5179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        if (s != null) {
5189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            s.close();
5199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        }
5209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    } catch (IOException ex2) {
5219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        //ignore failure to close after failure to connect
5229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    }
523767a662ecde33c3979bf02b793d392aca0403162Wink Saville
5249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    // don't print an error message after the the first time
5259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    // or after the 8th time
5269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    if (retryCount == 8) {
528767a662ecde33c3979bf02b793d392aca0403162Wink Saville                        Log.e (LOG_TAG,
5299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            "Couldn't find '" + SOCKET_NAME_RIL
5309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            + "' socket after " + retryCount
5319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            + " times, continuing to retry silently");
5329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    } else if (retryCount > 0 && retryCount < 8) {
533767a662ecde33c3979bf02b793d392aca0403162Wink Saville                        Log.i (LOG_TAG,
5349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            "Couldn't find '" + SOCKET_NAME_RIL
5359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            + "' socket; retrying after timeout");
5369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    }
5379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    try {
539767a662ecde33c3979bf02b793d392aca0403162Wink Saville                        Thread.sleep(SOCKET_OPEN_RETRY_MILLIS);
5409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    } catch (InterruptedException er) {
5419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    }
5429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    retryCount++;
5449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    continue;
5459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
5469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                retryCount = 0;
5489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mSocket = s;
5509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Log.i(LOG_TAG, "Connected to '" + SOCKET_NAME_RIL + "' socket");
5519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                int length = 0;
5539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                try {
5549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    InputStream is = mSocket.getInputStream();
555767a662ecde33c3979bf02b793d392aca0403162Wink Saville
5569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    for (;;) {
5579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        Parcel p;
5589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        length = readRilMessage(is, buffer);
5609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        if (length < 0) {
5629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            // End-of-stream reached
5639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            break;
5649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        }
5659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        p = Parcel.obtain();
5679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        p.unmarshall(buffer, 0, length);
5689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        p.setDataPosition(0);
5699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        //Log.v(LOG_TAG, "Read packet: " + length + " bytes");
5719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        processResponse(p);
5739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        p.recycle();
5749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    }
5759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                } catch (java.io.IOException ex) {
5769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    Log.i(LOG_TAG, "'" + SOCKET_NAME_RIL + "' socket closed",
5779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                          ex);
5789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                } catch (Throwable tr) {
5792a34043d5578deb8d7f93830e13c4efc91eba583Jaikumar Ganesh                    Log.e(LOG_TAG, "Uncaught exception read length=" + length +
5809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        "Exception:" + tr.toString());
5819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
5829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Log.i(LOG_TAG, "Disconnected from '" + SOCKET_NAME_RIL
5849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                      + "' socket");
5859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                setRadioState (RadioState.RADIO_UNAVAILABLE);
587767a662ecde33c3979bf02b793d392aca0403162Wink Saville
5889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                try {
589767a662ecde33c3979bf02b793d392aca0403162Wink Saville                    mSocket.close();
5909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                } catch (IOException ex) {
5919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
5929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mSocket = null;
5949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                RILRequest.resetSerial();
5959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                // Clear request list on close
59700d520b66caeef722281b76d30c0e1294070713dJohn Wang                clearRequestsList(RADIO_NOT_AVAILABLE, false);
5989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }} catch (Throwable tr) {
5999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Log.e(LOG_TAG,"Uncaught exception", tr);
6009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
6011dd2ada5cf7d0c95afb4731d082473f34ee7f433Wink Saville
6021dd2ada5cf7d0c95afb4731d082473f34ee7f433Wink Saville            /* We're disconnected so we don't know the ril version */
6031dd2ada5cf7d0c95afb4731d082473f34ee7f433Wink Saville            notifyRegistrantsRilConnectionChanged(-1);
6049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
6059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
6069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
609767a662ecde33c3979bf02b793d392aca0403162Wink Saville    //***** Constructors
610767a662ecde33c3979bf02b793d392aca0403162Wink Saville
61105d69edc0ba9b016a1bd7cb89a03b24c5659bf8dWink Saville    public RIL(Context context, int preferredNetworkType, int cdmaSubscription) {
6129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        super(context);
6135e9270bfd566c32a60dfeb34435a158eb4ceb9a9Wink Saville        if (RILJ_LOGD) {
61405d69edc0ba9b016a1bd7cb89a03b24c5659bf8dWink Saville            riljLog("RIL(context, preferredNetworkType=" + preferredNetworkType +
6155e9270bfd566c32a60dfeb34435a158eb4ceb9a9Wink Saville                    " cdmaSubscription=" + cdmaSubscription + ")");
6165e9270bfd566c32a60dfeb34435a158eb4ceb9a9Wink Saville        }
617767a662ecde33c3979bf02b793d392aca0403162Wink Saville        mCdmaSubscription  = cdmaSubscription;
61805d69edc0ba9b016a1bd7cb89a03b24c5659bf8dWink Saville        mPreferredNetworkType = preferredNetworkType;
6195e9270bfd566c32a60dfeb34435a158eb4ceb9a9Wink Saville        mPhoneType = RILConstants.NO_PHONE;
6209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
622767a662ecde33c3979bf02b793d392aca0403162Wink Saville        mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, LOG_TAG);
6239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mWakeLock.setReferenceCounted(false);
6240e57e73575f27682b57b8ba615215d1bc2669b3aWink Saville        mWakeLockTimeout = SystemProperties.getInt(TelephonyProperties.PROPERTY_WAKE_LOCK_TIMEOUT,
6250e57e73575f27682b57b8ba615215d1bc2669b3aWink Saville                DEFAULT_WAKE_LOCK_TIMEOUT);
6269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mRequestMessagesPending = 0;
627696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang        mRequestMessagesWaiting = 0;
6289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mSenderThread = new HandlerThread("RILSender");
6309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mSenderThread.start();
6312a34043d5578deb8d7f93830e13c4efc91eba583Jaikumar Ganesh
6329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Looper looper = mSenderThread.getLooper();
6339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mSender = new RILSender(looper);
6342a34043d5578deb8d7f93830e13c4efc91eba583Jaikumar Ganesh
6359b2886e24301e5d4e7052ec4a6eaff273d3f516cRobert Greenwalt        ConnectivityManager cm = (ConnectivityManager)context.getSystemService(
6369b2886e24301e5d4e7052ec4a6eaff273d3f516cRobert Greenwalt                Context.CONNECTIVITY_SERVICE);
6379b2886e24301e5d4e7052ec4a6eaff273d3f516cRobert Greenwalt        if (cm.isNetworkSupported(ConnectivityManager.TYPE_MOBILE) == false) {
6380dc8618dc70a6aa23ea030eeda1ea9934b4a04c6Wink Saville            riljLog("Not starting RILReceiver: wifi-only");
6390dc8618dc70a6aa23ea030eeda1ea9934b4a04c6Wink Saville        } else {
6400dc8618dc70a6aa23ea030eeda1ea9934b4a04c6Wink Saville            riljLog("Starting RILReceiver");
6410dc8618dc70a6aa23ea030eeda1ea9934b4a04c6Wink Saville            mReceiver = new RILReceiver();
6420dc8618dc70a6aa23ea030eeda1ea9934b4a04c6Wink Saville            mReceiverThread = new Thread(mReceiver, "RILReceiver");
6430dc8618dc70a6aa23ea030eeda1ea9934b4a04c6Wink Saville            mReceiverThread.start();
6440dc8618dc70a6aa23ea030eeda1ea9934b4a04c6Wink Saville
6450dc8618dc70a6aa23ea030eeda1ea9934b4a04c6Wink Saville            IntentFilter filter = new IntentFilter();
6460dc8618dc70a6aa23ea030eeda1ea9934b4a04c6Wink Saville            filter.addAction(Intent.ACTION_SCREEN_ON);
6470dc8618dc70a6aa23ea030eeda1ea9934b4a04c6Wink Saville            filter.addAction(Intent.ACTION_SCREEN_OFF);
6480dc8618dc70a6aa23ea030eeda1ea9934b4a04c6Wink Saville            context.registerReceiver(mIntentReceiver, filter);
6490dc8618dc70a6aa23ea030eeda1ea9934b4a04c6Wink Saville        }
6509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
6519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //***** CommandsInterface implementation
6539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
654fc2cbe9b46ab17a401dc50f8e0dbb677ed012299Naveen Kalla    public void getVoiceRadioTechnology(Message result) {
655fc2cbe9b46ab17a401dc50f8e0dbb677ed012299Naveen Kalla        RILRequest rr = RILRequest.obtain(RIL_REQUEST_VOICE_RADIO_TECH, result);
656fc2cbe9b46ab17a401dc50f8e0dbb677ed012299Naveen Kalla
657fc2cbe9b46ab17a401dc50f8e0dbb677ed012299Naveen Kalla        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
658fc2cbe9b46ab17a401dc50f8e0dbb677ed012299Naveen Kalla
659fc2cbe9b46ab17a401dc50f8e0dbb677ed012299Naveen Kalla        send(rr);
660fc2cbe9b46ab17a401dc50f8e0dbb677ed012299Naveen Kalla    }
661fc2cbe9b46ab17a401dc50f8e0dbb677ed012299Naveen Kalla
662fc2cbe9b46ab17a401dc50f8e0dbb677ed012299Naveen Kalla
663767a662ecde33c3979bf02b793d392aca0403162Wink Saville    @Override public void
664767a662ecde33c3979bf02b793d392aca0403162Wink Saville    setOnNITZTime(Handler h, int what, Object obj) {
6659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        super.setOnNITZTime(h, what, obj);
6669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // Send the last NITZ time if we have it
6689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (mLastNITZTimeInfo != null) {
6699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mNITZTimeRegistrant
6709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                .notifyRegistrant(
6719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    new AsyncResult (null, mLastNITZTimeInfo, null));
6729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mLastNITZTimeInfo = null;
6739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
6749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
6759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
676767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void
677cdadaad0e4e76a69eba144d3501cca9765cee80cJaikumar Ganesh    getIccCardStatus(Message result) {
678767a662ecde33c3979bf02b793d392aca0403162Wink Saville        //Note: This RIL request has not been renamed to ICC,
679767a662ecde33c3979bf02b793d392aca0403162Wink Saville        //       but this request is also valid for SIM and RUIM
6809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        RILRequest rr = RILRequest.obtain(RIL_REQUEST_GET_SIM_STATUS, result);
6819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
6839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
6859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
6869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6875284090631e638b916d9a453212e9dc802656a67Wink Saville    @Override public void
688767a662ecde33c3979bf02b793d392aca0403162Wink Saville    supplyIccPin(String pin, Message result) {
6895284090631e638b916d9a453212e9dc802656a67Wink Saville        supplyIccPinForApp(pin, null, result);
6905284090631e638b916d9a453212e9dc802656a67Wink Saville    }
6915284090631e638b916d9a453212e9dc802656a67Wink Saville
6925284090631e638b916d9a453212e9dc802656a67Wink Saville    @Override public void
6935284090631e638b916d9a453212e9dc802656a67Wink Saville    supplyIccPinForApp(String pin, String aid, Message result) {
694767a662ecde33c3979bf02b793d392aca0403162Wink Saville        //Note: This RIL request has not been renamed to ICC,
695767a662ecde33c3979bf02b793d392aca0403162Wink Saville        //       but this request is also valid for SIM and RUIM
6969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        RILRequest rr = RILRequest.obtain(RIL_REQUEST_ENTER_SIM_PIN, result);
6979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
6999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7005284090631e638b916d9a453212e9dc802656a67Wink Saville        rr.mp.writeInt(2);
7019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(pin);
7025284090631e638b916d9a453212e9dc802656a67Wink Saville        rr.mp.writeString(aid);
7039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
7059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
7069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7075284090631e638b916d9a453212e9dc802656a67Wink Saville    @Override public void
708767a662ecde33c3979bf02b793d392aca0403162Wink Saville    supplyIccPuk(String puk, String newPin, Message result) {
7095284090631e638b916d9a453212e9dc802656a67Wink Saville        supplyIccPukForApp(puk, newPin, null, result);
7105284090631e638b916d9a453212e9dc802656a67Wink Saville    }
7115284090631e638b916d9a453212e9dc802656a67Wink Saville
7125284090631e638b916d9a453212e9dc802656a67Wink Saville    @Override public void
7135284090631e638b916d9a453212e9dc802656a67Wink Saville    supplyIccPukForApp(String puk, String newPin, String aid, Message result) {
714767a662ecde33c3979bf02b793d392aca0403162Wink Saville        //Note: This RIL request has not been renamed to ICC,
715767a662ecde33c3979bf02b793d392aca0403162Wink Saville        //       but this request is also valid for SIM and RUIM
7169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        RILRequest rr = RILRequest.obtain(RIL_REQUEST_ENTER_SIM_PUK, result);
7179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
7199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7205284090631e638b916d9a453212e9dc802656a67Wink Saville        rr.mp.writeInt(3);
7219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(puk);
7229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(newPin);
7235284090631e638b916d9a453212e9dc802656a67Wink Saville        rr.mp.writeString(aid);
7249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
7269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
7279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7285284090631e638b916d9a453212e9dc802656a67Wink Saville    @Override public void
729767a662ecde33c3979bf02b793d392aca0403162Wink Saville    supplyIccPin2(String pin, Message result) {
7305284090631e638b916d9a453212e9dc802656a67Wink Saville        supplyIccPin2ForApp(pin, null, result);
7315284090631e638b916d9a453212e9dc802656a67Wink Saville    }
7325284090631e638b916d9a453212e9dc802656a67Wink Saville
7335284090631e638b916d9a453212e9dc802656a67Wink Saville    @Override public void
7345284090631e638b916d9a453212e9dc802656a67Wink Saville    supplyIccPin2ForApp(String pin, String aid, Message result) {
735767a662ecde33c3979bf02b793d392aca0403162Wink Saville        //Note: This RIL request has not been renamed to ICC,
736767a662ecde33c3979bf02b793d392aca0403162Wink Saville        //       but this request is also valid for SIM and RUIM
7379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        RILRequest rr = RILRequest.obtain(RIL_REQUEST_ENTER_SIM_PIN2, result);
7389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
7409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7415284090631e638b916d9a453212e9dc802656a67Wink Saville        rr.mp.writeInt(2);
7429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(pin);
7435284090631e638b916d9a453212e9dc802656a67Wink Saville        rr.mp.writeString(aid);
7449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
7469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
7479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7485284090631e638b916d9a453212e9dc802656a67Wink Saville    @Override public void
7495284090631e638b916d9a453212e9dc802656a67Wink Saville    supplyIccPuk2(String puk2, String newPin2, Message result) {
7505284090631e638b916d9a453212e9dc802656a67Wink Saville        supplyIccPuk2ForApp(puk2, newPin2, null, result);
7515284090631e638b916d9a453212e9dc802656a67Wink Saville    }
7525284090631e638b916d9a453212e9dc802656a67Wink Saville
7535284090631e638b916d9a453212e9dc802656a67Wink Saville    @Override public void
7545284090631e638b916d9a453212e9dc802656a67Wink Saville    supplyIccPuk2ForApp(String puk, String newPin2, String aid, Message result) {
755767a662ecde33c3979bf02b793d392aca0403162Wink Saville        //Note: This RIL request has not been renamed to ICC,
756767a662ecde33c3979bf02b793d392aca0403162Wink Saville        //       but this request is also valid for SIM and RUIM
7579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        RILRequest rr = RILRequest.obtain(RIL_REQUEST_ENTER_SIM_PUK2, result);
7589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
7609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7615284090631e638b916d9a453212e9dc802656a67Wink Saville        rr.mp.writeInt(3);
7629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(puk);
7639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(newPin2);
7645284090631e638b916d9a453212e9dc802656a67Wink Saville        rr.mp.writeString(aid);
7659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
7679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
7689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7695284090631e638b916d9a453212e9dc802656a67Wink Saville    @Override public void
770767a662ecde33c3979bf02b793d392aca0403162Wink Saville    changeIccPin(String oldPin, String newPin, Message result) {
7715284090631e638b916d9a453212e9dc802656a67Wink Saville        changeIccPinForApp(oldPin, newPin, null, result);
7725284090631e638b916d9a453212e9dc802656a67Wink Saville    }
7735284090631e638b916d9a453212e9dc802656a67Wink Saville
7745284090631e638b916d9a453212e9dc802656a67Wink Saville    @Override public void
7755284090631e638b916d9a453212e9dc802656a67Wink Saville    changeIccPinForApp(String oldPin, String newPin, String aid, Message result) {
776767a662ecde33c3979bf02b793d392aca0403162Wink Saville        //Note: This RIL request has not been renamed to ICC,
777767a662ecde33c3979bf02b793d392aca0403162Wink Saville        //       but this request is also valid for SIM and RUIM
7789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CHANGE_SIM_PIN, result);
7799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
7819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7825284090631e638b916d9a453212e9dc802656a67Wink Saville        rr.mp.writeInt(3);
7839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(oldPin);
7849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(newPin);
7855284090631e638b916d9a453212e9dc802656a67Wink Saville        rr.mp.writeString(aid);
7869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
7889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
7899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7905284090631e638b916d9a453212e9dc802656a67Wink Saville    @Override public void
791767a662ecde33c3979bf02b793d392aca0403162Wink Saville    changeIccPin2(String oldPin2, String newPin2, Message result) {
7925284090631e638b916d9a453212e9dc802656a67Wink Saville        changeIccPin2ForApp(oldPin2, newPin2, null, result);
7935284090631e638b916d9a453212e9dc802656a67Wink Saville    }
7945284090631e638b916d9a453212e9dc802656a67Wink Saville
7955284090631e638b916d9a453212e9dc802656a67Wink Saville    @Override public void
7965284090631e638b916d9a453212e9dc802656a67Wink Saville    changeIccPin2ForApp(String oldPin2, String newPin2, String aid, Message result) {
797767a662ecde33c3979bf02b793d392aca0403162Wink Saville        //Note: This RIL request has not been renamed to ICC,
798767a662ecde33c3979bf02b793d392aca0403162Wink Saville        //       but this request is also valid for SIM and RUIM
7999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CHANGE_SIM_PIN2, result);
8009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
8029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8035284090631e638b916d9a453212e9dc802656a67Wink Saville        rr.mp.writeInt(3);
8049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(oldPin2);
8059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(newPin2);
8065284090631e638b916d9a453212e9dc802656a67Wink Saville        rr.mp.writeString(aid);
8079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
8099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
8109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void
812767a662ecde33c3979bf02b793d392aca0403162Wink Saville    changeBarringPassword(String facility, String oldPwd, String newPwd, Message result) {
8139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CHANGE_BARRING_PASSWORD, result);
8149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
8169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(3);
8189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(facility);
8199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(oldPwd);
8209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(newPwd);
8219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
8239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
8249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
825767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void
826767a662ecde33c3979bf02b793d392aca0403162Wink Saville    supplyNetworkDepersonalization(String netpin, Message result) {
8279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        RILRequest rr = RILRequest.obtain(RIL_REQUEST_ENTER_NETWORK_DEPERSONALIZATION, result);
8289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
8309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(1);
8329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(netpin);
8339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
8359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
836767a662ecde33c3979bf02b793d392aca0403162Wink Saville
837767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void
838767a662ecde33c3979bf02b793d392aca0403162Wink Saville    getCurrentCalls (Message result) {
8399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        RILRequest rr = RILRequest.obtain(RIL_REQUEST_GET_CURRENT_CALLS, result);
8409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
8429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
8449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
8459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
846145ff609de3206b585819ef974fab20cdc2d9f5eJake Hamby    @Deprecated public void
847767a662ecde33c3979bf02b793d392aca0403162Wink Saville    getPDPContextList(Message result) {
848767a662ecde33c3979bf02b793d392aca0403162Wink Saville        getDataCallList(result);
849767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
850767a662ecde33c3979bf02b793d392aca0403162Wink Saville
851767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void
852767a662ecde33c3979bf02b793d392aca0403162Wink Saville    getDataCallList(Message result) {
853767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_DATA_CALL_LIST, result);
8549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
8569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
8589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
8599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
860767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void
861767a662ecde33c3979bf02b793d392aca0403162Wink Saville    dial (String address, int clirMode, Message result) {
86224440cf8a9431291bdcaa77b418e6c4715932507Naveen Kalla        dial(address, clirMode, null, result);
86324440cf8a9431291bdcaa77b418e6c4715932507Naveen Kalla    }
86424440cf8a9431291bdcaa77b418e6c4715932507Naveen Kalla
86524440cf8a9431291bdcaa77b418e6c4715932507Naveen Kalla    public void
86624440cf8a9431291bdcaa77b418e6c4715932507Naveen Kalla    dial(String address, int clirMode, UUSInfo uusInfo, Message result) {
8679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        RILRequest rr = RILRequest.obtain(RIL_REQUEST_DIAL, result);
8689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(address);
8709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(clirMode);
8710fa1b24593bbe7972bfbc5290519359db8c4ade6Naveen Kalla        rr.mp.writeInt(0); // UUS information is absent
8729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
87324440cf8a9431291bdcaa77b418e6c4715932507Naveen Kalla        if (uusInfo == null) {
87424440cf8a9431291bdcaa77b418e6c4715932507Naveen Kalla            rr.mp.writeInt(0); // UUS information is absent
87524440cf8a9431291bdcaa77b418e6c4715932507Naveen Kalla        } else {
87624440cf8a9431291bdcaa77b418e6c4715932507Naveen Kalla            rr.mp.writeInt(1); // UUS information is present
87724440cf8a9431291bdcaa77b418e6c4715932507Naveen Kalla            rr.mp.writeInt(uusInfo.getType());
87824440cf8a9431291bdcaa77b418e6c4715932507Naveen Kalla            rr.mp.writeInt(uusInfo.getDcs());
87924440cf8a9431291bdcaa77b418e6c4715932507Naveen Kalla            rr.mp.writeByteArray(uusInfo.getUserData());
88024440cf8a9431291bdcaa77b418e6c4715932507Naveen Kalla        }
88124440cf8a9431291bdcaa77b418e6c4715932507Naveen Kalla
8829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
8839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
8859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
8869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
887767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void
888767a662ecde33c3979bf02b793d392aca0403162Wink Saville    getIMSI(Message result) {
8892149014ed3dd99fb5f03321f96917ce72a7985deAlex Yakavenka        getIMSIForApp(null, result);
8902149014ed3dd99fb5f03321f96917ce72a7985deAlex Yakavenka    }
8912149014ed3dd99fb5f03321f96917ce72a7985deAlex Yakavenka
8922149014ed3dd99fb5f03321f96917ce72a7985deAlex Yakavenka    public void
8932149014ed3dd99fb5f03321f96917ce72a7985deAlex Yakavenka    getIMSIForApp(String aid, Message result) {
8949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        RILRequest rr = RILRequest.obtain(RIL_REQUEST_GET_IMSI, result);
8959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8962149014ed3dd99fb5f03321f96917ce72a7985deAlex Yakavenka        rr.mp.writeInt(1);
8972149014ed3dd99fb5f03321f96917ce72a7985deAlex Yakavenka        rr.mp.writeString(aid);
8982149014ed3dd99fb5f03321f96917ce72a7985deAlex Yakavenka
8992149014ed3dd99fb5f03321f96917ce72a7985deAlex Yakavenka        if (RILJ_LOGD) riljLog(rr.serialString() +
9002149014ed3dd99fb5f03321f96917ce72a7985deAlex Yakavenka                              "> getIMSI: " + requestToString(rr.mRequest)
9012149014ed3dd99fb5f03321f96917ce72a7985deAlex Yakavenka                              + " aid: " + aid);
9029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
9049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
9059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void
907767a662ecde33c3979bf02b793d392aca0403162Wink Saville    getIMEI(Message result) {
9089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        RILRequest rr = RILRequest.obtain(RIL_REQUEST_GET_IMEI, result);
9099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
9119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
9139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
9149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void
916767a662ecde33c3979bf02b793d392aca0403162Wink Saville    getIMEISV(Message result) {
9179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        RILRequest rr = RILRequest.obtain(RIL_REQUEST_GET_IMEISV, result);
9189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
9209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
9229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
9239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
925767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void
926767a662ecde33c3979bf02b793d392aca0403162Wink Saville    hangupConnection (int gsmIndex, Message result) {
9279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog("hangupConnection: gsmIndex=" + gsmIndex);
9289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        RILRequest rr = RILRequest.obtain(RIL_REQUEST_HANGUP, result);
9309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
931767a662ecde33c3979bf02b793d392aca0403162Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " " +
932767a662ecde33c3979bf02b793d392aca0403162Wink Saville                gsmIndex);
9339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(1);
9359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(gsmIndex);
9369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
9389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
9399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
940767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void
941767a662ecde33c3979bf02b793d392aca0403162Wink Saville    hangupWaitingOrBackground (Message result) {
942767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_HANGUP_WAITING_OR_BACKGROUND,
9439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                        result);
9449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
9469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
9489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
9499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void
951767a662ecde33c3979bf02b793d392aca0403162Wink Saville    hangupForegroundResumeBackground (Message result) {
952767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
9539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                = RILRequest.obtain(
954767a662ecde33c3979bf02b793d392aca0403162Wink Saville                        RIL_REQUEST_HANGUP_FOREGROUND_RESUME_BACKGROUND,
9559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                        result);
9569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
9579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
9599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
9609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void
962767a662ecde33c3979bf02b793d392aca0403162Wink Saville    switchWaitingOrHoldingAndActive (Message result) {
963767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
9649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                = RILRequest.obtain(
965767a662ecde33c3979bf02b793d392aca0403162Wink Saville                        RIL_REQUEST_SWITCH_WAITING_OR_HOLDING_AND_ACTIVE,
9669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                        result);
9679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
9689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
9709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
9719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void
973767a662ecde33c3979bf02b793d392aca0403162Wink Saville    conference (Message result) {
974767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
9759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                = RILRequest.obtain(RIL_REQUEST_CONFERENCE, result);
9769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
9789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
9809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
9819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
983767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void setPreferredVoicePrivacy(boolean enable, Message result) {
984767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CDMA_SET_PREFERRED_VOICE_PRIVACY_MODE,
985767a662ecde33c3979bf02b793d392aca0403162Wink Saville                result);
986767a662ecde33c3979bf02b793d392aca0403162Wink Saville
987767a662ecde33c3979bf02b793d392aca0403162Wink Saville        rr.mp.writeInt(1);
988767a662ecde33c3979bf02b793d392aca0403162Wink Saville        rr.mp.writeInt(enable ? 1:0);
989767a662ecde33c3979bf02b793d392aca0403162Wink Saville
990767a662ecde33c3979bf02b793d392aca0403162Wink Saville        send(rr);
991767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
992767a662ecde33c3979bf02b793d392aca0403162Wink Saville
993767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void getPreferredVoicePrivacy(Message result) {
994767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CDMA_QUERY_PREFERRED_VOICE_PRIVACY_MODE,
995767a662ecde33c3979bf02b793d392aca0403162Wink Saville                result);
996767a662ecde33c3979bf02b793d392aca0403162Wink Saville        send(rr);
997767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
998767a662ecde33c3979bf02b793d392aca0403162Wink Saville
9999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void
1000767a662ecde33c3979bf02b793d392aca0403162Wink Saville    separateConnection (int gsmIndex, Message result) {
1001767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
10029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                = RILRequest.obtain(RIL_REQUEST_SEPARATE_CONNECTION, result);
10039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
10059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            + " " + gsmIndex);
10069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(1);
10089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(gsmIndex);
10099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
10119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
10129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void
1014767a662ecde33c3979bf02b793d392aca0403162Wink Saville    acceptCall (Message result) {
1015767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
10169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                = RILRequest.obtain(RIL_REQUEST_ANSWER, result);
10179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
10199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
10219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
10229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1023767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void
1024767a662ecde33c3979bf02b793d392aca0403162Wink Saville    rejectCall (Message result) {
1025767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
10269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                = RILRequest.obtain(RIL_REQUEST_UDUB, result);
10279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
10299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
10319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
10329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void
1034767a662ecde33c3979bf02b793d392aca0403162Wink Saville    explicitCallTransfer (Message result) {
10359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        RILRequest rr
10369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                = RILRequest.obtain(RIL_REQUEST_EXPLICIT_CALL_TRANSFER, result);
10379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
10399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
10419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
10429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void
1044767a662ecde33c3979bf02b793d392aca0403162Wink Saville    getLastCallFailCause (Message result) {
1045767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
10469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                = RILRequest.obtain(RIL_REQUEST_LAST_CALL_FAIL_CAUSE, result);
10479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
10499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
10519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
10529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1053767a662ecde33c3979bf02b793d392aca0403162Wink Saville    /**
1054767a662ecde33c3979bf02b793d392aca0403162Wink Saville     * @deprecated
1055767a662ecde33c3979bf02b793d392aca0403162Wink Saville     */
1056767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void
1057767a662ecde33c3979bf02b793d392aca0403162Wink Saville    getLastPdpFailCause (Message result) {
1058767a662ecde33c3979bf02b793d392aca0403162Wink Saville        getLastDataCallFailCause (result);
1059767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
1060767a662ecde33c3979bf02b793d392aca0403162Wink Saville
1061767a662ecde33c3979bf02b793d392aca0403162Wink Saville    /**
1062767a662ecde33c3979bf02b793d392aca0403162Wink Saville     * The preferred new alternative to getLastPdpFailCause
1063767a662ecde33c3979bf02b793d392aca0403162Wink Saville     */
1064767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void
1065767a662ecde33c3979bf02b793d392aca0403162Wink Saville    getLastDataCallFailCause (Message result) {
1066767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
1067767a662ecde33c3979bf02b793d392aca0403162Wink Saville                = RILRequest.obtain(RIL_REQUEST_LAST_DATA_CALL_FAIL_CAUSE, result);
10689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
10709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
10729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
10739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void
1075767a662ecde33c3979bf02b793d392aca0403162Wink Saville    setMute (boolean enableMute, Message response) {
1076767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
10779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                = RILRequest.obtain(RIL_REQUEST_SET_MUTE, response);
10789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
10809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            + " " + enableMute);
10819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(1);
10839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(enableMute ? 1 : 0);
10849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
10869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
10879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void
1089767a662ecde33c3979bf02b793d392aca0403162Wink Saville    getMute (Message response) {
1090767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
10919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                = RILRequest.obtain(RIL_REQUEST_GET_MUTE, response);
10929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
10949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
10969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
10979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void
1099767a662ecde33c3979bf02b793d392aca0403162Wink Saville    getSignalStrength (Message result) {
1100767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
11019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                = RILRequest.obtain(RIL_REQUEST_SIGNAL_STRENGTH, result);
11029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
11049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
11069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
11079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1108767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void
11095284090631e638b916d9a453212e9dc802656a67Wink Saville    getVoiceRegistrationState (Message result) {
1110767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
11115284090631e638b916d9a453212e9dc802656a67Wink Saville                = RILRequest.obtain(RIL_REQUEST_VOICE_REGISTRATION_STATE, result);
11129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
11149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
11169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
11179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1118767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void
11195284090631e638b916d9a453212e9dc802656a67Wink Saville    getDataRegistrationState (Message result) {
1120767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
11215284090631e638b916d9a453212e9dc802656a67Wink Saville                = RILRequest.obtain(RIL_REQUEST_DATA_REGISTRATION_STATE, result);
11229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
11249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
11269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
11279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1128767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void
1129767a662ecde33c3979bf02b793d392aca0403162Wink Saville    getOperator(Message result) {
1130767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
11319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                = RILRequest.obtain(RIL_REQUEST_OPERATOR, result);
11329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
11349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
11369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
11379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1138767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void
1139767a662ecde33c3979bf02b793d392aca0403162Wink Saville    sendDtmf(char c, Message result) {
1140767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
11419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                = RILRequest.obtain(RIL_REQUEST_DTMF, result);
11429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
1144767a662ecde33c3979bf02b793d392aca0403162Wink Saville
11459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(Character.toString(c));
11469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
11489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
11499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void
11519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    startDtmf(char c, Message result) {
11529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        RILRequest rr
11539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                = RILRequest.obtain(RIL_REQUEST_DTMF_START, result);
11549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
11569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(Character.toString(c));
11589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
11609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
11619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void
11639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    stopDtmf(Message result) {
11649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        RILRequest rr
11659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                = RILRequest.obtain(RIL_REQUEST_DTMF_STOP, result);
11669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
11689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
11709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
11719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1172e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    public void
1173dafa22a3ef9328c72319aeec605f6a6d20e46080jsh    sendBurstDtmf(String dtmfString, int on, int off, Message result) {
1174e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CDMA_BURST_DTMF, result);
1175e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
1176dafa22a3ef9328c72319aeec605f6a6d20e46080jsh        rr.mp.writeInt(3);
1177e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        rr.mp.writeString(dtmfString);
1178dafa22a3ef9328c72319aeec605f6a6d20e46080jsh        rr.mp.writeString(Integer.toString(on));
1179dafa22a3ef9328c72319aeec605f6a6d20e46080jsh        rr.mp.writeString(Integer.toString(off));
1180e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
1181dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
1182dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville                + " : " + dtmfString);
1183dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville
1184e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        send(rr);
1185e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    }
11869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void
1188767a662ecde33c3979bf02b793d392aca0403162Wink Saville    sendSMS (String smscPDU, String pdu, Message result) {
1189767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
11909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                = RILRequest.obtain(RIL_REQUEST_SEND_SMS, result);
11919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(2);
11939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(smscPDU);
11949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(pdu);
11959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
1197767a662ecde33c3979bf02b793d392aca0403162Wink Saville
1198767a662ecde33c3979bf02b793d392aca0403162Wink Saville        send(rr);
1199767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
1200767a662ecde33c3979bf02b793d392aca0403162Wink Saville
1201767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void
1202767a662ecde33c3979bf02b793d392aca0403162Wink Saville    sendCdmaSms(byte[] pdu, Message result) {
1203767a662ecde33c3979bf02b793d392aca0403162Wink Saville        int address_nbr_of_digits;
1204767a662ecde33c3979bf02b793d392aca0403162Wink Saville        int subaddr_nbr_of_digits;
1205767a662ecde33c3979bf02b793d392aca0403162Wink Saville        int bearerDataLength;
1206767a662ecde33c3979bf02b793d392aca0403162Wink Saville        ByteArrayInputStream bais = new ByteArrayInputStream(pdu);
1207767a662ecde33c3979bf02b793d392aca0403162Wink Saville        DataInputStream dis = new DataInputStream(bais);
1208767a662ecde33c3979bf02b793d392aca0403162Wink Saville
1209767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
1210767a662ecde33c3979bf02b793d392aca0403162Wink Saville                = RILRequest.obtain(RIL_REQUEST_CDMA_SEND_SMS, result);
1211767a662ecde33c3979bf02b793d392aca0403162Wink Saville
1212767a662ecde33c3979bf02b793d392aca0403162Wink Saville        try {
1213767a662ecde33c3979bf02b793d392aca0403162Wink Saville            rr.mp.writeInt(dis.readInt()); //teleServiceId
1214767a662ecde33c3979bf02b793d392aca0403162Wink Saville            rr.mp.writeByte((byte) dis.readInt()); //servicePresent
1215767a662ecde33c3979bf02b793d392aca0403162Wink Saville            rr.mp.writeInt(dis.readInt()); //serviceCategory
1216767a662ecde33c3979bf02b793d392aca0403162Wink Saville            rr.mp.writeInt(dis.read()); //address_digit_mode
1217767a662ecde33c3979bf02b793d392aca0403162Wink Saville            rr.mp.writeInt(dis.read()); //address_nbr_mode
1218767a662ecde33c3979bf02b793d392aca0403162Wink Saville            rr.mp.writeInt(dis.read()); //address_ton
1219767a662ecde33c3979bf02b793d392aca0403162Wink Saville            rr.mp.writeInt(dis.read()); //address_nbr_plan
1220767a662ecde33c3979bf02b793d392aca0403162Wink Saville            address_nbr_of_digits = (byte) dis.read();
1221767a662ecde33c3979bf02b793d392aca0403162Wink Saville            rr.mp.writeByte((byte) address_nbr_of_digits);
1222767a662ecde33c3979bf02b793d392aca0403162Wink Saville            for(int i=0; i < address_nbr_of_digits; i++){
1223767a662ecde33c3979bf02b793d392aca0403162Wink Saville                rr.mp.writeByte(dis.readByte()); // address_orig_bytes[i]
1224767a662ecde33c3979bf02b793d392aca0403162Wink Saville            }
1225767a662ecde33c3979bf02b793d392aca0403162Wink Saville            rr.mp.writeInt(dis.read()); //subaddressType
1226767a662ecde33c3979bf02b793d392aca0403162Wink Saville            rr.mp.writeByte((byte) dis.read()); //subaddr_odd
1227767a662ecde33c3979bf02b793d392aca0403162Wink Saville            subaddr_nbr_of_digits = (byte) dis.read();
1228767a662ecde33c3979bf02b793d392aca0403162Wink Saville            rr.mp.writeByte((byte) subaddr_nbr_of_digits);
1229767a662ecde33c3979bf02b793d392aca0403162Wink Saville            for(int i=0; i < subaddr_nbr_of_digits; i++){
1230767a662ecde33c3979bf02b793d392aca0403162Wink Saville                rr.mp.writeByte(dis.readByte()); //subaddr_orig_bytes[i]
1231767a662ecde33c3979bf02b793d392aca0403162Wink Saville            }
1232767a662ecde33c3979bf02b793d392aca0403162Wink Saville
1233767a662ecde33c3979bf02b793d392aca0403162Wink Saville            bearerDataLength = dis.read();
1234767a662ecde33c3979bf02b793d392aca0403162Wink Saville            rr.mp.writeInt(bearerDataLength);
1235767a662ecde33c3979bf02b793d392aca0403162Wink Saville            for(int i=0; i < bearerDataLength; i++){
1236767a662ecde33c3979bf02b793d392aca0403162Wink Saville                rr.mp.writeByte(dis.readByte()); //bearerData[i]
1237767a662ecde33c3979bf02b793d392aca0403162Wink Saville            }
1238767a662ecde33c3979bf02b793d392aca0403162Wink Saville        }catch (IOException ex){
1239767a662ecde33c3979bf02b793d392aca0403162Wink Saville            if (RILJ_LOGD) riljLog("sendSmsCdma: conversion from input stream to object failed: "
1240767a662ecde33c3979bf02b793d392aca0403162Wink Saville                    + ex);
1241767a662ecde33c3979bf02b793d392aca0403162Wink Saville        }
1242767a662ecde33c3979bf02b793d392aca0403162Wink Saville
1243767a662ecde33c3979bf02b793d392aca0403162Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
1244767a662ecde33c3979bf02b793d392aca0403162Wink Saville
12459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
12469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
12479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void deleteSmsOnSim(int index, Message response) {
12499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        RILRequest rr = RILRequest.obtain(RIL_REQUEST_DELETE_SMS_ON_SIM,
12509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                response);
1251767a662ecde33c3979bf02b793d392aca0403162Wink Saville
1252767a662ecde33c3979bf02b793d392aca0403162Wink Saville        rr.mp.writeInt(1);
1253767a662ecde33c3979bf02b793d392aca0403162Wink Saville        rr.mp.writeInt(index);
1254767a662ecde33c3979bf02b793d392aca0403162Wink Saville
125543a17654cf4bfe7f1ec22bd8b7b32daccdf27c09Joe Onorato        if (false) {
1256767a662ecde33c3979bf02b793d392aca0403162Wink Saville            if (RILJ_LOGD) riljLog(rr.serialString() + "> "
1257767a662ecde33c3979bf02b793d392aca0403162Wink Saville                    + requestToString(rr.mRequest)
1258767a662ecde33c3979bf02b793d392aca0403162Wink Saville                    + " " + index);
1259767a662ecde33c3979bf02b793d392aca0403162Wink Saville        }
1260767a662ecde33c3979bf02b793d392aca0403162Wink Saville
1261767a662ecde33c3979bf02b793d392aca0403162Wink Saville        send(rr);
1262767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
1263767a662ecde33c3979bf02b793d392aca0403162Wink Saville
1264767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void deleteSmsOnRuim(int index, Message response) {
1265767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CDMA_DELETE_SMS_ON_RUIM,
1266767a662ecde33c3979bf02b793d392aca0403162Wink Saville                response);
1267767a662ecde33c3979bf02b793d392aca0403162Wink Saville
12689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(1);
12699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(index);
12709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
127143a17654cf4bfe7f1ec22bd8b7b32daccdf27c09Joe Onorato        if (false) {
1272767a662ecde33c3979bf02b793d392aca0403162Wink Saville            if (RILJ_LOGD) riljLog(rr.serialString() + "> "
12739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    + requestToString(rr.mRequest)
12749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    + " " + index);
12759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
12769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
12789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
12799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void writeSmsToSim(int status, String smsc, String pdu, Message response) {
12819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        status = translateStatus(status);
1282767a662ecde33c3979bf02b793d392aca0403162Wink Saville
12839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        RILRequest rr = RILRequest.obtain(RIL_REQUEST_WRITE_SMS_TO_SIM,
12849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                response);
1285767a662ecde33c3979bf02b793d392aca0403162Wink Saville
12869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(status);
12879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(pdu);
12889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(smsc);
1289767a662ecde33c3979bf02b793d392aca0403162Wink Saville
129043a17654cf4bfe7f1ec22bd8b7b32daccdf27c09Joe Onorato        if (false) {
1291767a662ecde33c3979bf02b793d392aca0403162Wink Saville            if (RILJ_LOGD) riljLog(rr.serialString() + "> "
1292767a662ecde33c3979bf02b793d392aca0403162Wink Saville                    + requestToString(rr.mRequest)
1293767a662ecde33c3979bf02b793d392aca0403162Wink Saville                    + " " + status);
1294767a662ecde33c3979bf02b793d392aca0403162Wink Saville        }
1295767a662ecde33c3979bf02b793d392aca0403162Wink Saville
1296767a662ecde33c3979bf02b793d392aca0403162Wink Saville        send(rr);
1297767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
1298767a662ecde33c3979bf02b793d392aca0403162Wink Saville
1299767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void writeSmsToRuim(int status, String pdu, Message response) {
1300767a662ecde33c3979bf02b793d392aca0403162Wink Saville        status = translateStatus(status);
1301767a662ecde33c3979bf02b793d392aca0403162Wink Saville
1302767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CDMA_WRITE_SMS_TO_RUIM,
1303767a662ecde33c3979bf02b793d392aca0403162Wink Saville                response);
1304767a662ecde33c3979bf02b793d392aca0403162Wink Saville
1305767a662ecde33c3979bf02b793d392aca0403162Wink Saville        rr.mp.writeInt(status);
1306767a662ecde33c3979bf02b793d392aca0403162Wink Saville        rr.mp.writeString(pdu);
1307767a662ecde33c3979bf02b793d392aca0403162Wink Saville
130843a17654cf4bfe7f1ec22bd8b7b32daccdf27c09Joe Onorato        if (false) {
1309767a662ecde33c3979bf02b793d392aca0403162Wink Saville            if (RILJ_LOGD) riljLog(rr.serialString() + "> "
1310767a662ecde33c3979bf02b793d392aca0403162Wink Saville                    + requestToString(rr.mRequest)
13119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    + " " + status);
13129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
13139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
13159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
13169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
13189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  Translates EF_SMS status bits to a status value compatible with
13199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  SMS AT commands.  See TS 27.005 3.1.
13209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
13219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private int translateStatus(int status) {
13229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        switch(status & 0x7) {
1323767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case SmsManager.STATUS_ON_ICC_READ:
13249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return 1;
1325767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case SmsManager.STATUS_ON_ICC_UNREAD:
13269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return 0;
1327767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case SmsManager.STATUS_ON_ICC_SENT:
13289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return 3;
1329767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case SmsManager.STATUS_ON_ICC_UNSENT:
13309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return 2;
13319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1332767a662ecde33c3979bf02b793d392aca0403162Wink Saville
13339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // Default to READ.
13349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return 1;
13359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
13369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1337767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void
1338767a662ecde33c3979bf02b793d392aca0403162Wink Saville    setupDataCall(String radioTechnology, String profile, String apn,
13394eb40450720f6cc1ed07fa181b22677461fa96bdLorenzo Colitti            String user, String password, String authType, String protocol,
13404eb40450720f6cc1ed07fa181b22677461fa96bdLorenzo Colitti            Message result) {
1341767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
1342767a662ecde33c3979bf02b793d392aca0403162Wink Saville                = RILRequest.obtain(RIL_REQUEST_SETUP_DATA_CALL, result);
1343767a662ecde33c3979bf02b793d392aca0403162Wink Saville
1344b60c9ba33582e798e40b102ba3180d5cd1102ca3Lorenzo Colitti        rr.mp.writeInt(7);
1345767a662ecde33c3979bf02b793d392aca0403162Wink Saville
1346767a662ecde33c3979bf02b793d392aca0403162Wink Saville        rr.mp.writeString(radioTechnology);
1347767a662ecde33c3979bf02b793d392aca0403162Wink Saville        rr.mp.writeString(profile);
13489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(apn);
13499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(user);
13509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(password);
1351106d27140bdd1acf388310807d662f08cb6292c6johnwang        rr.mp.writeString(authType);
13524eb40450720f6cc1ed07fa181b22677461fa96bdLorenzo Colitti        rr.mp.writeString(protocol);
1353106d27140bdd1acf388310807d662f08cb6292c6johnwang
1354106d27140bdd1acf388310807d662f08cb6292c6johnwang        if (RILJ_LOGD) riljLog(rr.serialString() + "> "
1355106d27140bdd1acf388310807d662f08cb6292c6johnwang                + requestToString(rr.mRequest) + " " + radioTechnology + " "
1356106d27140bdd1acf388310807d662f08cb6292c6johnwang                + profile + " " + apn + " " + user + " "
13574eb40450720f6cc1ed07fa181b22677461fa96bdLorenzo Colitti                + password + " " + authType + " " + protocol);
1358767a662ecde33c3979bf02b793d392aca0403162Wink Saville
13599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
13609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
13619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void
13636ef74b1b073f04f55ef43095a336bd10d599dedfKazuhiro Ondo    deactivateDataCall(int cid, int reason, Message result) {
1364767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
1365767a662ecde33c3979bf02b793d392aca0403162Wink Saville                = RILRequest.obtain(RIL_REQUEST_DEACTIVATE_DATA_CALL, result);
13669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13676ef74b1b073f04f55ef43095a336bd10d599dedfKazuhiro Ondo        rr.mp.writeInt(2);
13689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(Integer.toString(cid));
13696ef74b1b073f04f55ef43095a336bd10d599dedfKazuhiro Ondo        rr.mp.writeString(Integer.toString(reason));
13709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1371767a662ecde33c3979bf02b793d392aca0403162Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " +
13726ef74b1b073f04f55ef43095a336bd10d599dedfKazuhiro Ondo                requestToString(rr.mRequest) + " " + cid + " " + reason);
1373767a662ecde33c3979bf02b793d392aca0403162Wink Saville
13749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
13759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
13769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void
1378767a662ecde33c3979bf02b793d392aca0403162Wink Saville    setRadioPower(boolean on, Message result) {
1379f90c26090402a517aa68cade7f452bc1ad85e654Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_RADIO_POWER, result);
13809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(1);
13829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(on ? 1 : 0);
13839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1384f90c26090402a517aa68cade7f452bc1ad85e654Wink Saville        if (RILJ_LOGD) {
1385f90c26090402a517aa68cade7f452bc1ad85e654Wink Saville            riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
1386f90c26090402a517aa68cade7f452bc1ad85e654Wink Saville                    + (on ? " on" : " off"));
1387f90c26090402a517aa68cade7f452bc1ad85e654Wink Saville        }
1388767a662ecde33c3979bf02b793d392aca0403162Wink Saville
13899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
13909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
13919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void
1393767a662ecde33c3979bf02b793d392aca0403162Wink Saville    setSuppServiceNotifications(boolean enable, Message result) {
1394767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
13959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                = RILRequest.obtain(RIL_REQUEST_SET_SUPP_SVC_NOTIFICATION, result);
13969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(1);
13989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(enable ? 1 : 0);
1399767a662ecde33c3979bf02b793d392aca0403162Wink Saville
14009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> "
1401767a662ecde33c3979bf02b793d392aca0403162Wink Saville                + requestToString(rr.mRequest));
14029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
14039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
14049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
14059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1406767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void
1407867641ece36e2fd17faaea79cf19506ab17177c6jsh    acknowledgeLastIncomingGsmSms(boolean success, int cause, Message result) {
1408767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
14099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                = RILRequest.obtain(RIL_REQUEST_SMS_ACKNOWLEDGE, result);
14109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1411867641ece36e2fd17faaea79cf19506ab17177c6jsh        rr.mp.writeInt(2);
14129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(success ? 1 : 0);
1413867641ece36e2fd17faaea79cf19506ab17177c6jsh        rr.mp.writeInt(cause);
14149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1415867641ece36e2fd17faaea79cf19506ab17177c6jsh        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
1416867641ece36e2fd17faaea79cf19506ab17177c6jsh                + " " + success + " " + cause);
1417767a662ecde33c3979bf02b793d392aca0403162Wink Saville
14189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
14199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1420767a662ecde33c3979bf02b793d392aca0403162Wink Saville
14219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void
1422867641ece36e2fd17faaea79cf19506ab17177c6jsh    acknowledgeLastIncomingCdmaSms(boolean success, int cause, Message result) {
1423767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
1424767a662ecde33c3979bf02b793d392aca0403162Wink Saville                = RILRequest.obtain(RIL_REQUEST_CDMA_SMS_ACKNOWLEDGE, result);
1425767a662ecde33c3979bf02b793d392aca0403162Wink Saville
1426767a662ecde33c3979bf02b793d392aca0403162Wink Saville        rr.mp.writeInt(success ? 0 : 1); //RIL_CDMA_SMS_ErrorClass
1427767a662ecde33c3979bf02b793d392aca0403162Wink Saville        // cause code according to X.S004-550E
1428867641ece36e2fd17faaea79cf19506ab17177c6jsh        rr.mp.writeInt(cause);
1429767a662ecde33c3979bf02b793d392aca0403162Wink Saville
1430867641ece36e2fd17faaea79cf19506ab17177c6jsh        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
1431867641ece36e2fd17faaea79cf19506ab17177c6jsh                + " " + success + " " + cause);
1432767a662ecde33c3979bf02b793d392aca0403162Wink Saville
1433767a662ecde33c3979bf02b793d392aca0403162Wink Saville        send(rr);
1434767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
1435767a662ecde33c3979bf02b793d392aca0403162Wink Saville
1436094854091b63498f952f0a6c4bcedfdfefaf1cf7Jake Hamby    public void
1437094854091b63498f952f0a6c4bcedfdfefaf1cf7Jake Hamby    acknowledgeIncomingGsmSmsWithPdu(boolean success, String ackPdu, Message result) {
1438094854091b63498f952f0a6c4bcedfdfefaf1cf7Jake Hamby        RILRequest rr
1439094854091b63498f952f0a6c4bcedfdfefaf1cf7Jake Hamby                = RILRequest.obtain(RIL_REQUEST_ACKNOWLEDGE_INCOMING_GSM_SMS_WITH_PDU, result);
1440094854091b63498f952f0a6c4bcedfdfefaf1cf7Jake Hamby
1441094854091b63498f952f0a6c4bcedfdfefaf1cf7Jake Hamby        rr.mp.writeInt(2);
1442094854091b63498f952f0a6c4bcedfdfefaf1cf7Jake Hamby        rr.mp.writeString(success ? "1" : "0");
1443094854091b63498f952f0a6c4bcedfdfefaf1cf7Jake Hamby        rr.mp.writeString(ackPdu);
1444094854091b63498f952f0a6c4bcedfdfefaf1cf7Jake Hamby
1445094854091b63498f952f0a6c4bcedfdfefaf1cf7Jake Hamby        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
1446094854091b63498f952f0a6c4bcedfdfefaf1cf7Jake Hamby                + ' ' + success + " [" + ackPdu + ']');
1447094854091b63498f952f0a6c4bcedfdfefaf1cf7Jake Hamby
1448094854091b63498f952f0a6c4bcedfdfefaf1cf7Jake Hamby        send(rr);
1449094854091b63498f952f0a6c4bcedfdfefaf1cf7Jake Hamby    }
1450767a662ecde33c3979bf02b793d392aca0403162Wink Saville
1451767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void
1452767a662ecde33c3979bf02b793d392aca0403162Wink Saville    iccIO (int command, int fileid, String path, int p1, int p2, int p3,
1453767a662ecde33c3979bf02b793d392aca0403162Wink Saville            String data, String pin2, Message result) {
14542149014ed3dd99fb5f03321f96917ce72a7985deAlex Yakavenka        iccIOForApp(command, fileid, path, p1, p2, p3, data, pin2, null, result);
14552149014ed3dd99fb5f03321f96917ce72a7985deAlex Yakavenka    }
14562149014ed3dd99fb5f03321f96917ce72a7985deAlex Yakavenka    public void
14572149014ed3dd99fb5f03321f96917ce72a7985deAlex Yakavenka    iccIOForApp (int command, int fileid, String path, int p1, int p2, int p3,
14582149014ed3dd99fb5f03321f96917ce72a7985deAlex Yakavenka            String data, String pin2, String aid, Message result) {
1459767a662ecde33c3979bf02b793d392aca0403162Wink Saville        //Note: This RIL request has not been renamed to ICC,
1460767a662ecde33c3979bf02b793d392aca0403162Wink Saville        //       but this request is also valid for SIM and RUIM
1461767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
14629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                = RILRequest.obtain(RIL_REQUEST_SIM_IO, result);
1463767a662ecde33c3979bf02b793d392aca0403162Wink Saville
14649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(command);
14659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(fileid);
14669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(path);
14679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(p1);
14689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(p2);
14699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(p3);
14709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(data);
14719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(pin2);
14722149014ed3dd99fb5f03321f96917ce72a7985deAlex Yakavenka        rr.mp.writeString(aid);
14739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
14742149014ed3dd99fb5f03321f96917ce72a7985deAlex Yakavenka        if (RILJ_LOGD) riljLog(rr.serialString() + "> iccIO: "
14752149014ed3dd99fb5f03321f96917ce72a7985deAlex Yakavenka                + requestToString(rr.mRequest)
1476767a662ecde33c3979bf02b793d392aca0403162Wink Saville                + " 0x" + Integer.toHexString(command)
1477767a662ecde33c3979bf02b793d392aca0403162Wink Saville                + " 0x" + Integer.toHexString(fileid) + " "
1478e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                + " path: " + path + ","
14792149014ed3dd99fb5f03321f96917ce72a7985deAlex Yakavenka                + p1 + "," + p2 + "," + p3
14802149014ed3dd99fb5f03321f96917ce72a7985deAlex Yakavenka                + " aid: " + aid);
1481767a662ecde33c3979bf02b793d392aca0403162Wink Saville
14829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
14839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1484767a662ecde33c3979bf02b793d392aca0403162Wink Saville
14859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void
1486767a662ecde33c3979bf02b793d392aca0403162Wink Saville    getCLIR(Message result) {
1487767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
14889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                = RILRequest.obtain(RIL_REQUEST_GET_CLIR, result);
1489767a662ecde33c3979bf02b793d392aca0403162Wink Saville
14909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
1491767a662ecde33c3979bf02b793d392aca0403162Wink Saville
14929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
14939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
14949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
14959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void
1496767a662ecde33c3979bf02b793d392aca0403162Wink Saville    setCLIR(int clirMode, Message result) {
1497767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
14989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                = RILRequest.obtain(RIL_REQUEST_SET_CLIR, result);
14999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
15009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // count ints
15019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(1);
15029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
15039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(clirMode);
1504767a662ecde33c3979bf02b793d392aca0403162Wink Saville
15059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
15069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    + " " + clirMode);
1507767a662ecde33c3979bf02b793d392aca0403162Wink Saville
15089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
15099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
15109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
15119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void
1512767a662ecde33c3979bf02b793d392aca0403162Wink Saville    queryCallWaiting(int serviceClass, Message response) {
1513767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
15149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                = RILRequest.obtain(RIL_REQUEST_QUERY_CALL_WAITING, response);
15159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
15169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(1);
15179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(serviceClass);
1518767a662ecde33c3979bf02b793d392aca0403162Wink Saville
15199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
15209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    + " " + serviceClass);
15219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
15229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
15239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
15249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
15259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void
1526767a662ecde33c3979bf02b793d392aca0403162Wink Saville    setCallWaiting(boolean enable, int serviceClass, Message response) {
1527767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
15289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                = RILRequest.obtain(RIL_REQUEST_SET_CALL_WAITING, response);
1529767a662ecde33c3979bf02b793d392aca0403162Wink Saville
15309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(2);
15319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(enable ? 1 : 0);
15329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(serviceClass);
1533767a662ecde33c3979bf02b793d392aca0403162Wink Saville
15349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
15359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                + " " + enable + ", " + serviceClass);
1536767a662ecde33c3979bf02b793d392aca0403162Wink Saville
15379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
15389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
15399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
15409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void
1541767a662ecde33c3979bf02b793d392aca0403162Wink Saville    setNetworkSelectionModeAutomatic(Message response) {
1542767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
1543767a662ecde33c3979bf02b793d392aca0403162Wink Saville                = RILRequest.obtain(RIL_REQUEST_SET_NETWORK_SELECTION_AUTOMATIC,
15449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                    response);
1545767a662ecde33c3979bf02b793d392aca0403162Wink Saville
15469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
1547767a662ecde33c3979bf02b793d392aca0403162Wink Saville
15489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
15499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
15509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1551767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void
1552767a662ecde33c3979bf02b793d392aca0403162Wink Saville    setNetworkSelectionModeManual(String operatorNumeric, Message response) {
1553767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
1554767a662ecde33c3979bf02b793d392aca0403162Wink Saville                = RILRequest.obtain(RIL_REQUEST_SET_NETWORK_SELECTION_MANUAL,
15559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                    response);
1556767a662ecde33c3979bf02b793d392aca0403162Wink Saville
15579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
15589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    + " " + operatorNumeric);
15599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
15609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(operatorNumeric);
1561767a662ecde33c3979bf02b793d392aca0403162Wink Saville
15629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
15639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
15649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1565767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void
1566767a662ecde33c3979bf02b793d392aca0403162Wink Saville    getNetworkSelectionMode(Message response) {
1567767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
1568767a662ecde33c3979bf02b793d392aca0403162Wink Saville                = RILRequest.obtain(RIL_REQUEST_QUERY_NETWORK_SELECTION_MODE,
15699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                    response);
1570767a662ecde33c3979bf02b793d392aca0403162Wink Saville
15719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
1572767a662ecde33c3979bf02b793d392aca0403162Wink Saville
15739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
15749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
15759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1576767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void
1577767a662ecde33c3979bf02b793d392aca0403162Wink Saville    getAvailableNetworks(Message response) {
1578767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
1579767a662ecde33c3979bf02b793d392aca0403162Wink Saville                = RILRequest.obtain(RIL_REQUEST_QUERY_AVAILABLE_NETWORKS,
15809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                    response);
1581767a662ecde33c3979bf02b793d392aca0403162Wink Saville
15829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
1583767a662ecde33c3979bf02b793d392aca0403162Wink Saville
15849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
15859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
15869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
15879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void
1588767a662ecde33c3979bf02b793d392aca0403162Wink Saville    setCallForward(int action, int cfReason, int serviceClass,
1589767a662ecde33c3979bf02b793d392aca0403162Wink Saville                String number, int timeSeconds, Message response) {
1590767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
15919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                = RILRequest.obtain(RIL_REQUEST_SET_CALL_FORWARD, response);
15929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
15939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(action);
15949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(cfReason);
15959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(serviceClass);
15969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(PhoneNumberUtils.toaFromString(number));
15979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(number);
15989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt (timeSeconds);
1599767a662ecde33c3979bf02b793d392aca0403162Wink Saville
16009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
1601767a662ecde33c3979bf02b793d392aca0403162Wink Saville                    + " " + action + " " + cfReason + " " + serviceClass
16029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    + timeSeconds);
1603767a662ecde33c3979bf02b793d392aca0403162Wink Saville
16049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
16059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
16069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
16079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void
16089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    queryCallForwardStatus(int cfReason, int serviceClass,
1609767a662ecde33c3979bf02b793d392aca0403162Wink Saville                String number, Message response) {
1610767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
16119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            = RILRequest.obtain(RIL_REQUEST_QUERY_CALL_FORWARD_STATUS, response);
16129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
16139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(2); // 2 is for query action, not in used anyway
16149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(cfReason);
16159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(serviceClass);
16169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(PhoneNumberUtils.toaFromString(number));
16179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(number);
16189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt (0);
1619767a662ecde33c3979bf02b793d392aca0403162Wink Saville
16209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
16219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                + " " + cfReason + " " + serviceClass);
16229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
16239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
16249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
16259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
16269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void
1627767a662ecde33c3979bf02b793d392aca0403162Wink Saville    queryCLIP(Message response) {
16289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        RILRequest rr
16299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            = RILRequest.obtain(RIL_REQUEST_QUERY_CLIP, response);
16309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
16319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
16329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
16339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
16349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
16359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
16369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
16379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void
1638767a662ecde33c3979bf02b793d392aca0403162Wink Saville    getBasebandVersion (Message response) {
1639767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
16409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                = RILRequest.obtain(RIL_REQUEST_BASEBAND_VERSION, response);
1641767a662ecde33c3979bf02b793d392aca0403162Wink Saville
16429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
16439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
16449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
16459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
16469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
16474360d7c678536a451dde6f4229e6d8c427b48523Wink Saville    @Override
16489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void
16494360d7c678536a451dde6f4229e6d8c427b48523Wink Saville    queryFacilityLock(String facility, String password, int serviceClass,
16504360d7c678536a451dde6f4229e6d8c427b48523Wink Saville                            Message response) {
16514360d7c678536a451dde6f4229e6d8c427b48523Wink Saville        queryFacilityLockForApp(facility, password, serviceClass, null, response);
16524360d7c678536a451dde6f4229e6d8c427b48523Wink Saville    }
16534360d7c678536a451dde6f4229e6d8c427b48523Wink Saville
16544360d7c678536a451dde6f4229e6d8c427b48523Wink Saville    @Override
16554360d7c678536a451dde6f4229e6d8c427b48523Wink Saville    public void
16564360d7c678536a451dde6f4229e6d8c427b48523Wink Saville    queryFacilityLockForApp(String facility, String password, int serviceClass, String appId,
1657767a662ecde33c3979bf02b793d392aca0403162Wink Saville                            Message response) {
16589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        RILRequest rr = RILRequest.obtain(RIL_REQUEST_QUERY_FACILITY_LOCK, response);
16599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
16609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
16619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
16629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // count strings
16634360d7c678536a451dde6f4229e6d8c427b48523Wink Saville        rr.mp.writeInt(4);
16649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
16659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(facility);
16669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(password);
16679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
16689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(Integer.toString(serviceClass));
16694360d7c678536a451dde6f4229e6d8c427b48523Wink Saville        rr.mp.writeString(appId);
16709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
16719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
16729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
16739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
16744360d7c678536a451dde6f4229e6d8c427b48523Wink Saville    @Override
16759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void
16769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    setFacilityLock (String facility, boolean lockState, String password,
1677767a662ecde33c3979bf02b793d392aca0403162Wink Saville                        int serviceClass, Message response) {
16784360d7c678536a451dde6f4229e6d8c427b48523Wink Saville        setFacilityLockForApp(facility, lockState, password, serviceClass, null, response);
16794360d7c678536a451dde6f4229e6d8c427b48523Wink Saville    }
16804360d7c678536a451dde6f4229e6d8c427b48523Wink Saville
16814360d7c678536a451dde6f4229e6d8c427b48523Wink Saville    @Override
16824360d7c678536a451dde6f4229e6d8c427b48523Wink Saville    public void
16834360d7c678536a451dde6f4229e6d8c427b48523Wink Saville    setFacilityLockForApp(String facility, boolean lockState, String password,
16844360d7c678536a451dde6f4229e6d8c427b48523Wink Saville                        int serviceClass, String appId, Message response) {
16859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        String lockString;
16869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         RILRequest rr
16879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                = RILRequest.obtain(RIL_REQUEST_SET_FACILITY_LOCK, response);
16889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
16899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
16909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
16919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // count strings
16924360d7c678536a451dde6f4229e6d8c427b48523Wink Saville        rr.mp.writeInt(5);
16939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
16949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(facility);
16959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        lockString = (lockState)?"1":"0";
16969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(lockString);
16979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(password);
16989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(Integer.toString(serviceClass));
16994360d7c678536a451dde6f4229e6d8c427b48523Wink Saville        rr.mp.writeString(appId);
17009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
17029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1704767a662ecde33c3979bf02b793d392aca0403162Wink Saville
17059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void
1706767a662ecde33c3979bf02b793d392aca0403162Wink Saville    sendUSSD (String ussdString, Message response) {
1707767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
17089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                = RILRequest.obtain(RIL_REQUEST_SEND_USSD, response);
17099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
17119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            + " " + ussdString);
17129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(ussdString);
17149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
17169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
17179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // inherited javadoc suffices
17199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void cancelPendingUssd (Message response) {
17209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        RILRequest rr
17219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                = RILRequest.obtain(RIL_REQUEST_CANCEL_USSD, response);
17229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString()
17249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                + "> " + requestToString(rr.mRequest));
17259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
17279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
17289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1730767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void resetRadio(Message result) {
1731767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
17329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                = RILRequest.obtain(RIL_REQUEST_RESET_RADIO, result);
17339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
17359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
17379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
17389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1739767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void invokeOemRilRequestRaw(byte[] data, Message response) {
1740767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
17419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                = RILRequest.obtain(RIL_REQUEST_OEM_HOOK_RAW, response);
17429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
1744767a662ecde33c3979bf02b793d392aca0403162Wink Saville               + "[" + IccUtils.bytesToHexString(data) + "]");
17459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeByteArray(data);
17479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
17499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
17519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1752767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void invokeOemRilRequestStrings(String[] strings, Message response) {
1753767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
17549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                = RILRequest.obtain(RIL_REQUEST_OEM_HOOK_STRINGS, response);
17559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
17579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeStringArray(strings);
17599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
17619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
17629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     /**
17649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Assign a specified band for RF configuration.
17659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
17669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param bandMode one of BM_*_BAND
17679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param response is callback message
17689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
17699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void setBandMode (int bandMode, Message response) {
17709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        RILRequest rr
17719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                = RILRequest.obtain(RIL_REQUEST_SET_BAND_MODE, response);
17729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(1);
17749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(bandMode);
17759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
17779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                 + " " + bandMode);
17789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
17809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     }
17819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
17839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Query the list of band mode supported by RF.
17849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
17859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param response is callback message
17869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *        ((AsyncResult)response.obj).result  is an int[] with every
17879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *        element representing one avialable BM_*_BAND
17889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
17899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void queryAvailableBandMode (Message response) {
17909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        RILRequest rr
17919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                = RILRequest.obtain(RIL_REQUEST_QUERY_AVAILABLE_BAND_MODE,
17929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                response);
17939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
17959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
17979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
17989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
18009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@inheritDoc}
18019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
18029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void sendTerminalResponse(String contents, Message response) {
18039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        RILRequest rr = RILRequest.obtain(
18049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                RILConstants.RIL_REQUEST_STK_SEND_TERMINAL_RESPONSE, response);
18059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
18069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
18079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
18089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(contents);
18099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
18109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
18119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
18129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
18139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@inheritDoc}
18149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
18159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void sendEnvelope(String contents, Message response) {
18169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        RILRequest rr = RILRequest.obtain(
18179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                RILConstants.RIL_REQUEST_STK_SEND_ENVELOPE_COMMAND, response);
18189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
18199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
18209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
18219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(contents);
18229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
18239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
18249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
18259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
18269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@inheritDoc}
18279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1828094854091b63498f952f0a6c4bcedfdfefaf1cf7Jake Hamby    public void sendEnvelopeWithStatus(String contents, Message response) {
1829094854091b63498f952f0a6c4bcedfdfefaf1cf7Jake Hamby        RILRequest rr = RILRequest.obtain(
1830094854091b63498f952f0a6c4bcedfdfefaf1cf7Jake Hamby                RILConstants.RIL_REQUEST_STK_SEND_ENVELOPE_WITH_STATUS, response);
1831094854091b63498f952f0a6c4bcedfdfefaf1cf7Jake Hamby
1832094854091b63498f952f0a6c4bcedfdfefaf1cf7Jake Hamby        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
1833094854091b63498f952f0a6c4bcedfdfefaf1cf7Jake Hamby                + '[' + contents + ']');
1834094854091b63498f952f0a6c4bcedfdfefaf1cf7Jake Hamby
1835094854091b63498f952f0a6c4bcedfdfefaf1cf7Jake Hamby        rr.mp.writeString(contents);
1836094854091b63498f952f0a6c4bcedfdfefaf1cf7Jake Hamby        send(rr);
1837094854091b63498f952f0a6c4bcedfdfefaf1cf7Jake Hamby    }
1838094854091b63498f952f0a6c4bcedfdfefaf1cf7Jake Hamby
1839094854091b63498f952f0a6c4bcedfdfefaf1cf7Jake Hamby    /**
1840094854091b63498f952f0a6c4bcedfdfefaf1cf7Jake Hamby     * {@inheritDoc}
1841094854091b63498f952f0a6c4bcedfdfefaf1cf7Jake Hamby     */
18429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void handleCallSetupRequestFromSim(
18439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            boolean accept, Message response) {
18449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
18459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        RILRequest rr = RILRequest.obtain(
18469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            RILConstants.RIL_REQUEST_STK_HANDLE_CALL_SETUP_REQUESTED_FROM_SIM,
18479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            response);
18489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
18499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
18509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
18519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int[] param = new int[1];
18529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        param[0] = accept ? 1 : 0;
18539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeIntArray(param);
18549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
18559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
18569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
18579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
18589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@inheritDoc}
18599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1860975d348c18f7b9d378bebf3f69e6197b261705f0Wink Saville    @Override
1861975d348c18f7b9d378bebf3f69e6197b261705f0Wink Saville    public void setCurrentPreferredNetworkType() {
1862975d348c18f7b9d378bebf3f69e6197b261705f0Wink Saville        if (RILJ_LOGD) riljLog("setCurrentPreferredNetworkType: " + mSetPreferredNetworkType);
1863975d348c18f7b9d378bebf3f69e6197b261705f0Wink Saville        setPreferredNetworkType(mSetPreferredNetworkType, null);
1864975d348c18f7b9d378bebf3f69e6197b261705f0Wink Saville    }
1865975d348c18f7b9d378bebf3f69e6197b261705f0Wink Saville    private int mSetPreferredNetworkType;
1866975d348c18f7b9d378bebf3f69e6197b261705f0Wink Saville
1867975d348c18f7b9d378bebf3f69e6197b261705f0Wink Saville    /**
1868975d348c18f7b9d378bebf3f69e6197b261705f0Wink Saville     * {@inheritDoc}
1869975d348c18f7b9d378bebf3f69e6197b261705f0Wink Saville     */
18709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void setPreferredNetworkType(int networkType , Message response) {
18719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        RILRequest rr = RILRequest.obtain(
18729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                RILConstants.RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE, response);
18739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
18749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(1);
18759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(networkType);
18769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1877975d348c18f7b9d378bebf3f69e6197b261705f0Wink Saville        mSetPreferredNetworkType = networkType;
187805d69edc0ba9b016a1bd7cb89a03b24c5659bf8dWink Saville        mPreferredNetworkType = networkType;
187905d69edc0ba9b016a1bd7cb89a03b24c5659bf8dWink Saville
18809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
18819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                + " : " + networkType);
18829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
18839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
18849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
18859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
18869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
18879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@inheritDoc}
18889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
18899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void getPreferredNetworkType(Message response) {
18909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        RILRequest rr = RILRequest.obtain(
18919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                RILConstants.RIL_REQUEST_GET_PREFERRED_NETWORK_TYPE, response);
18929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
18939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
18949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
18959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
18969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
18979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
18989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
18999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@inheritDoc}
19009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
19019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void getNeighboringCids(Message response) {
19029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        RILRequest rr = RILRequest.obtain(
19039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                RILConstants.RIL_REQUEST_GET_NEIGHBORING_CELL_IDS, response);
19049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
19059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
19069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
19079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
19089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
19099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
19109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
19119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@inheritDoc}
19129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
19139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void setLocationUpdates(boolean enable, Message response) {
19149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        RILRequest rr = RILRequest.obtain(RIL_REQUEST_SET_LOCATION_UPDATES, response);
19159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(1);
19169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(enable ? 1 : 0);
1917767a662ecde33c3979bf02b793d392aca0403162Wink Saville
19189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> "
19199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                + requestToString(rr.mRequest) + ": " + enable);
1920767a662ecde33c3979bf02b793d392aca0403162Wink Saville
19219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
19229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
19239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1924c06ce125408696fd49c7fa9e1189ecb61804007ajsh    /**
1925c06ce125408696fd49c7fa9e1189ecb61804007ajsh     * {@inheritDoc}
1926c06ce125408696fd49c7fa9e1189ecb61804007ajsh     */
1927c06ce125408696fd49c7fa9e1189ecb61804007ajsh    public void getSmscAddress(Message result) {
1928c06ce125408696fd49c7fa9e1189ecb61804007ajsh        RILRequest rr = RILRequest.obtain(RIL_REQUEST_GET_SMSC_ADDRESS, result);
1929c06ce125408696fd49c7fa9e1189ecb61804007ajsh
1930c06ce125408696fd49c7fa9e1189ecb61804007ajsh        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
1931c06ce125408696fd49c7fa9e1189ecb61804007ajsh
1932c06ce125408696fd49c7fa9e1189ecb61804007ajsh        send(rr);
1933c06ce125408696fd49c7fa9e1189ecb61804007ajsh    }
1934c06ce125408696fd49c7fa9e1189ecb61804007ajsh
1935c06ce125408696fd49c7fa9e1189ecb61804007ajsh    /**
1936c06ce125408696fd49c7fa9e1189ecb61804007ajsh     * {@inheritDoc}
1937c06ce125408696fd49c7fa9e1189ecb61804007ajsh     */
1938c06ce125408696fd49c7fa9e1189ecb61804007ajsh    public void setSmscAddress(String address, Message result) {
1939c06ce125408696fd49c7fa9e1189ecb61804007ajsh        RILRequest rr = RILRequest.obtain(RIL_REQUEST_SET_SMSC_ADDRESS, result);
1940c06ce125408696fd49c7fa9e1189ecb61804007ajsh
1941c06ce125408696fd49c7fa9e1189ecb61804007ajsh        rr.mp.writeString(address);
1942c06ce125408696fd49c7fa9e1189ecb61804007ajsh
1943c06ce125408696fd49c7fa9e1189ecb61804007ajsh        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
1944c06ce125408696fd49c7fa9e1189ecb61804007ajsh                + " : " + address);
1945c06ce125408696fd49c7fa9e1189ecb61804007ajsh
1946c06ce125408696fd49c7fa9e1189ecb61804007ajsh        send(rr);
1947c06ce125408696fd49c7fa9e1189ecb61804007ajsh    }
1948c06ce125408696fd49c7fa9e1189ecb61804007ajsh
1949867641ece36e2fd17faaea79cf19506ab17177c6jsh    /**
1950867641ece36e2fd17faaea79cf19506ab17177c6jsh     * {@inheritDoc}
1951867641ece36e2fd17faaea79cf19506ab17177c6jsh     */
1952867641ece36e2fd17faaea79cf19506ab17177c6jsh    public void reportSmsMemoryStatus(boolean available, Message result) {
1953867641ece36e2fd17faaea79cf19506ab17177c6jsh        RILRequest rr = RILRequest.obtain(RIL_REQUEST_REPORT_SMS_MEMORY_STATUS, result);
1954867641ece36e2fd17faaea79cf19506ab17177c6jsh        rr.mp.writeInt(1);
1955867641ece36e2fd17faaea79cf19506ab17177c6jsh        rr.mp.writeInt(available ? 1 : 0);
1956867641ece36e2fd17faaea79cf19506ab17177c6jsh
1957867641ece36e2fd17faaea79cf19506ab17177c6jsh        if (RILJ_LOGD) riljLog(rr.serialString() + "> "
1958867641ece36e2fd17faaea79cf19506ab17177c6jsh                + requestToString(rr.mRequest) + ": " + available);
1959867641ece36e2fd17faaea79cf19506ab17177c6jsh
1960867641ece36e2fd17faaea79cf19506ab17177c6jsh        send(rr);
1961867641ece36e2fd17faaea79cf19506ab17177c6jsh    }
1962867641ece36e2fd17faaea79cf19506ab17177c6jsh
1963e14af0e26eb11d0a9e4620a75aadcc4b40885aa8Wink Saville    /**
1964e14af0e26eb11d0a9e4620a75aadcc4b40885aa8Wink Saville     * {@inheritDoc}
1965e14af0e26eb11d0a9e4620a75aadcc4b40885aa8Wink Saville     */
1966e14af0e26eb11d0a9e4620a75aadcc4b40885aa8Wink Saville    public void reportStkServiceIsRunning(Message result) {
1967e14af0e26eb11d0a9e4620a75aadcc4b40885aa8Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_REPORT_STK_SERVICE_IS_RUNNING, result);
1968e14af0e26eb11d0a9e4620a75aadcc4b40885aa8Wink Saville
1969e14af0e26eb11d0a9e4620a75aadcc4b40885aa8Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
1970e14af0e26eb11d0a9e4620a75aadcc4b40885aa8Wink Saville
1971e14af0e26eb11d0a9e4620a75aadcc4b40885aa8Wink Saville        send(rr);
1972e14af0e26eb11d0a9e4620a75aadcc4b40885aa8Wink Saville    }
1973e14af0e26eb11d0a9e4620a75aadcc4b40885aa8Wink Saville
1974e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang    /**
1975e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang     * {@inheritDoc}
1976e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang     */
1977e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang    public void getGsmBroadcastConfig(Message response) {
1978e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang        RILRequest rr = RILRequest.obtain(RIL_REQUEST_GSM_GET_BROADCAST_CONFIG, response);
1979e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang
1980e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
1981e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang
1982e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang        send(rr);
1983e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang    }
1984e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang
1985e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang    /**
1986e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang     * {@inheritDoc}
1987e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang     */
1988e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang    public void setGsmBroadcastConfig(SmsBroadcastConfigInfo[] config, Message response) {
1989e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang        RILRequest rr = RILRequest.obtain(RIL_REQUEST_GSM_SET_BROADCAST_CONFIG, response);
1990e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang
1991e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang        int numOfConfig = config.length;
1992e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang        rr.mp.writeInt(numOfConfig);
1993e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang
1994e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang        for(int i = 0; i < numOfConfig; i++) {
1995e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang            rr.mp.writeInt(config[i].getFromServiceId());
1996e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang            rr.mp.writeInt(config[i].getToServiceId());
1997e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang            rr.mp.writeInt(config[i].getFromCodeScheme());
1998e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang            rr.mp.writeInt(config[i].getToCodeScheme());
1999e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang            rr.mp.writeInt(config[i].isSelected() ? 1 : 0);
2000e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang        }
2001e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang
2002e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang        if (RILJ_LOGD) {
2003e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang            riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
2004f044a370d41687e0546a63b747b7c383f7f41e3eJake Hamby                    + " with " + numOfConfig + " configs : ");
2005e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang            for (int i = 0; i < numOfConfig; i++) {
2006e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang                riljLog(config[i].toString());
2007e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang            }
2008e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang        }
2009e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang
2010e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang        send(rr);
2011e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang    }
2012e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang
2013e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang    /**
2014e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang     * {@inheritDoc}
2015e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang     */
2016e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang    public void setGsmBroadcastActivation(boolean activate, Message response) {
2017e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang        RILRequest rr = RILRequest.obtain(RIL_REQUEST_GSM_BROADCAST_ACTIVATION, response);
2018e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang
2019e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang        rr.mp.writeInt(1);
2020e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang        rr.mp.writeInt(activate ? 0 : 1);
2021e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang
2022e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
2023e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang
2024e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang        send(rr);
2025e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang    }
2026e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang
20279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //***** Private Methods
20289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2029767a662ecde33c3979bf02b793d392aca0403162Wink Saville    private void sendScreenState(boolean on) {
20309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        RILRequest rr = RILRequest.obtain(RIL_REQUEST_SCREEN_STATE, null);
20319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(1);
20329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(on ? 1 : 0);
2033767a662ecde33c3979bf02b793d392aca0403162Wink Saville
2034e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString()
2035e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                + "> " + requestToString(rr.mRequest) + ": " + on);
2036767a662ecde33c3979bf02b793d392aca0403162Wink Saville
20379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
20389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2039767a662ecde33c3979bf02b793d392aca0403162Wink Saville
20409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    protected void
2041767a662ecde33c3979bf02b793d392aca0403162Wink Saville    onRadioAvailable() {
20429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // In case screen state was lost (due to process crash),
20439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // this ensures that the RIL knows the correct screen state.
20449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
20459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // TODO: Should query Power Manager and send the actual
20469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // screen state.  Just send true for now.
20479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sendScreenState(true);
20489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project   }
20499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
20509a8e567d2a801d36842e611c1ec7d73c71fffd8fAlex Yakavenka    private RadioState getRadioStateFromInt(int stateInt) {
20519a8e567d2a801d36842e611c1ec7d73c71fffd8fAlex Yakavenka        RadioState state;
20529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
20539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /* RIL_RadioState ril.h */
20549a8e567d2a801d36842e611c1ec7d73c71fffd8fAlex Yakavenka        switch(stateInt) {
20559a8e567d2a801d36842e611c1ec7d73c71fffd8fAlex Yakavenka            case 0: state = RadioState.RADIO_OFF; break;
20569a8e567d2a801d36842e611c1ec7d73c71fffd8fAlex Yakavenka            case 1: state = RadioState.RADIO_UNAVAILABLE; break;
2057fc2cbe9b46ab17a401dc50f8e0dbb677ed012299Naveen Kalla            case 10: state = RadioState.RADIO_ON; break;
2058767a662ecde33c3979bf02b793d392aca0403162Wink Saville
2059767a662ecde33c3979bf02b793d392aca0403162Wink Saville            default:
20609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                throw new RuntimeException(
20619a8e567d2a801d36842e611c1ec7d73c71fffd8fAlex Yakavenka                            "Unrecognized RIL_RadioState: " + stateInt);
20629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
20639a8e567d2a801d36842e611c1ec7d73c71fffd8fAlex Yakavenka        return state;
20649a8e567d2a801d36842e611c1ec7d73c71fffd8fAlex Yakavenka    }
20659a8e567d2a801d36842e611c1ec7d73c71fffd8fAlex Yakavenka
20669a8e567d2a801d36842e611c1ec7d73c71fffd8fAlex Yakavenka    private void switchToRadioState(RadioState newState) {
206766958c73674673274bf08266b60ad3c1791c9179Wink Saville        setRadioState(newState);
20689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
20699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
20709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
20719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Holds a PARTIAL_WAKE_LOCK whenever
20729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * a) There is outstanding RIL request sent to RIL deamon and no replied
2073696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang     * b) There is a request pending to be sent out.
20749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2075767a662ecde33c3979bf02b793d392aca0403162Wink Saville     * There is a WAKE_LOCK_TIMEOUT to release the lock, though it shouldn't
20769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * happen often.
20779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
20789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
20799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private void
2080767a662ecde33c3979bf02b793d392aca0403162Wink Saville    acquireWakeLock() {
20819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        synchronized (mWakeLock) {
20829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mWakeLock.acquire();
20839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mRequestMessagesPending++;
20849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
20859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mSender.removeMessages(EVENT_WAKE_LOCK_TIMEOUT);
20869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Message msg = mSender.obtainMessage(EVENT_WAKE_LOCK_TIMEOUT);
20870e57e73575f27682b57b8ba615215d1bc2669b3aWink Saville            mSender.sendMessageDelayed(msg, mWakeLockTimeout);
20889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
20899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
20909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
20919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private void
2092767a662ecde33c3979bf02b793d392aca0403162Wink Saville    releaseWakeLockIfDone() {
20939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        synchronized (mWakeLock) {
20949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (mWakeLock.isHeld() &&
20959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                (mRequestMessagesPending == 0) &&
2096696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                (mRequestMessagesWaiting == 0)) {
20979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mSender.removeMessages(EVENT_WAKE_LOCK_TIMEOUT);
20989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mWakeLock.release();
20999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
21009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
21019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
21029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
21039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private void
2104767a662ecde33c3979bf02b793d392aca0403162Wink Saville    send(RILRequest rr) {
21059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Message msg;
21069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
210760bb9c9a81bcd766d3e79f765ac22c7c38492409Anshul Jain        if (mSocket == null) {
210860bb9c9a81bcd766d3e79f765ac22c7c38492409Anshul Jain            rr.onError(RADIO_NOT_AVAILABLE, null);
210960bb9c9a81bcd766d3e79f765ac22c7c38492409Anshul Jain            rr.release();
211060bb9c9a81bcd766d3e79f765ac22c7c38492409Anshul Jain            return;
211160bb9c9a81bcd766d3e79f765ac22c7c38492409Anshul Jain        }
211260bb9c9a81bcd766d3e79f765ac22c7c38492409Anshul Jain
21139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        msg = mSender.obtainMessage(EVENT_SEND, rr);
21149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
21159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        acquireWakeLock();
21169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
21179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        msg.sendToTarget();
21189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
21199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
21209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private void
2121767a662ecde33c3979bf02b793d392aca0403162Wink Saville    processResponse (Parcel p) {
21229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int type;
21239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
21249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        type = p.readInt();
21259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
21269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (type == RESPONSE_UNSOLICITED) {
21279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            processUnsolicited (p);
21289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } else if (type == RESPONSE_SOLICITED) {
21299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            processSolicited (p);
2130767a662ecde33c3979bf02b793d392aca0403162Wink Saville        }
21319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
21329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        releaseWakeLockIfDone();
21339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
21349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
213500d520b66caeef722281b76d30c0e1294070713dJohn Wang    /**
213600d520b66caeef722281b76d30c0e1294070713dJohn Wang     * Release each request in mReqeustsList then clear the list
213700d520b66caeef722281b76d30c0e1294070713dJohn Wang     * @param error is the RIL_Errno sent back
213800d520b66caeef722281b76d30c0e1294070713dJohn Wang     * @param loggable true means to print all requests in mRequestslist
213900d520b66caeef722281b76d30c0e1294070713dJohn Wang     */
214000d520b66caeef722281b76d30c0e1294070713dJohn Wang    private void clearRequestsList(int error, boolean loggable) {
214100d520b66caeef722281b76d30c0e1294070713dJohn Wang        RILRequest rr;
214200d520b66caeef722281b76d30c0e1294070713dJohn Wang        synchronized (mRequestsList) {
214300d520b66caeef722281b76d30c0e1294070713dJohn Wang            int count = mRequestsList.size();
214400d520b66caeef722281b76d30c0e1294070713dJohn Wang            if (RILJ_LOGD && loggable) {
214500d520b66caeef722281b76d30c0e1294070713dJohn Wang                Log.d(LOG_TAG, "WAKE_LOCK_TIMEOUT " +
214600d520b66caeef722281b76d30c0e1294070713dJohn Wang                        " mReqPending=" + mRequestMessagesPending +
214700d520b66caeef722281b76d30c0e1294070713dJohn Wang                        " mRequestList=" + count);
214800d520b66caeef722281b76d30c0e1294070713dJohn Wang            }
214900d520b66caeef722281b76d30c0e1294070713dJohn Wang
215000d520b66caeef722281b76d30c0e1294070713dJohn Wang            for (int i = 0; i < count ; i++) {
215100d520b66caeef722281b76d30c0e1294070713dJohn Wang                rr = mRequestsList.get(i);
215200d520b66caeef722281b76d30c0e1294070713dJohn Wang                if (RILJ_LOGD && loggable) {
215300d520b66caeef722281b76d30c0e1294070713dJohn Wang                    Log.d(LOG_TAG, i + ": [" + rr.mSerial + "] " +
215400d520b66caeef722281b76d30c0e1294070713dJohn Wang                            requestToString(rr.mRequest));
215500d520b66caeef722281b76d30c0e1294070713dJohn Wang                }
215600d520b66caeef722281b76d30c0e1294070713dJohn Wang                rr.onError(error, null);
215700d520b66caeef722281b76d30c0e1294070713dJohn Wang                rr.release();
215800d520b66caeef722281b76d30c0e1294070713dJohn Wang            }
215900d520b66caeef722281b76d30c0e1294070713dJohn Wang            mRequestsList.clear();
2160696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang            mRequestMessagesWaiting = 0;
216100d520b66caeef722281b76d30c0e1294070713dJohn Wang        }
216200d520b66caeef722281b76d30c0e1294070713dJohn Wang    }
216300d520b66caeef722281b76d30c0e1294070713dJohn Wang
2164767a662ecde33c3979bf02b793d392aca0403162Wink Saville    private RILRequest findAndRemoveRequestFromList(int serial) {
21659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        synchronized (mRequestsList) {
21669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            for (int i = 0, s = mRequestsList.size() ; i < s ; i++) {
21679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                RILRequest rr = mRequestsList.get(i);
21689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
21699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                if (rr.mSerial == serial) {
21709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    mRequestsList.remove(i);
2171696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                    if (mRequestMessagesWaiting > 0)
2172696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                        mRequestMessagesWaiting--;
21739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    return rr;
21749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
21759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
21769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
21779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
21789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return null;
21799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
21809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
21819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private void
2182767a662ecde33c3979bf02b793d392aca0403162Wink Saville    processSolicited (Parcel p) {
21839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int serial, error;
21849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        boolean found = false;
21859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
21869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        serial = p.readInt();
21879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        error = p.readInt();
21889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
21899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        RILRequest rr;
21909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
21919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr = findAndRemoveRequestFromList(serial);
21929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
21939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (rr == null) {
2194767a662ecde33c3979bf02b793d392aca0403162Wink Saville            Log.w(LOG_TAG, "Unexpected solicited response! sn: "
21959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            + serial + " error: " + error);
21969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return;
21979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
21989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
219903228fa8f950dfee3f679d280f98d040dea397dcjohnwang        Object ret = null;
2200767a662ecde33c3979bf02b793d392aca0403162Wink Saville
220103228fa8f950dfee3f679d280f98d040dea397dcjohnwang        if (error == 0 || p.dataAvail() > 0) {
220203228fa8f950dfee3f679d280f98d040dea397dcjohnwang            // either command succeeds or command fails but with data payload
220303228fa8f950dfee3f679d280f98d040dea397dcjohnwang            try {switch (rr.mRequest) {
220403228fa8f950dfee3f679d280f98d040dea397dcjohnwang            /*
22059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project cat libs/telephony/ril_commands.h \
22069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project | egrep "^ *{RIL_" \
22079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project | sed -re 's/\{([^,]+),[^,]+,([^}]+).+/case \1: ret = \2(p); break;/'
220803228fa8f950dfee3f679d280f98d040dea397dcjohnwang             */
2209767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_GET_SIM_STATUS: ret =  responseIccCardStatus(p); break;
2210be7f0f78afde931ce6ea2d4ba61c340fac5722f6jsh            case RIL_REQUEST_ENTER_SIM_PIN: ret =  responseInts(p); break;
2211be7f0f78afde931ce6ea2d4ba61c340fac5722f6jsh            case RIL_REQUEST_ENTER_SIM_PUK: ret =  responseInts(p); break;
2212be7f0f78afde931ce6ea2d4ba61c340fac5722f6jsh            case RIL_REQUEST_ENTER_SIM_PIN2: ret =  responseInts(p); break;
2213be7f0f78afde931ce6ea2d4ba61c340fac5722f6jsh            case RIL_REQUEST_ENTER_SIM_PUK2: ret =  responseInts(p); break;
2214be7f0f78afde931ce6ea2d4ba61c340fac5722f6jsh            case RIL_REQUEST_CHANGE_SIM_PIN: ret =  responseInts(p); break;
2215be7f0f78afde931ce6ea2d4ba61c340fac5722f6jsh            case RIL_REQUEST_CHANGE_SIM_PIN2: ret =  responseInts(p); break;
2216be7f0f78afde931ce6ea2d4ba61c340fac5722f6jsh            case RIL_REQUEST_ENTER_NETWORK_DEPERSONALIZATION: ret =  responseInts(p); break;
22179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_GET_CURRENT_CALLS: ret =  responseCallList(p); break;
22189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_DIAL: ret =  responseVoid(p); break;
22199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_GET_IMSI: ret =  responseString(p); break;
22209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_HANGUP: ret =  responseVoid(p); break;
22219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_HANGUP_WAITING_OR_BACKGROUND: ret =  responseVoid(p); break;
22227c20c4607c4402589ce4800a0c49127876dbc6bdWink Saville            case RIL_REQUEST_HANGUP_FOREGROUND_RESUME_BACKGROUND: {
22237c20c4607c4402589ce4800a0c49127876dbc6bdWink Saville                if (mTestingEmergencyCall.getAndSet(false)) {
22247c20c4607c4402589ce4800a0c49127876dbc6bdWink Saville                    if (mEmergencyCallbackModeRegistrant != null) {
22257c20c4607c4402589ce4800a0c49127876dbc6bdWink Saville                        riljLog("testing emergency call, notify ECM Registrants");
22267c20c4607c4402589ce4800a0c49127876dbc6bdWink Saville                        mEmergencyCallbackModeRegistrant.notifyRegistrant();
22277c20c4607c4402589ce4800a0c49127876dbc6bdWink Saville                    }
22287c20c4607c4402589ce4800a0c49127876dbc6bdWink Saville                }
22297c20c4607c4402589ce4800a0c49127876dbc6bdWink Saville                ret =  responseVoid(p);
22307c20c4607c4402589ce4800a0c49127876dbc6bdWink Saville                break;
22317c20c4607c4402589ce4800a0c49127876dbc6bdWink Saville            }
22329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_SWITCH_WAITING_OR_HOLDING_AND_ACTIVE: ret =  responseVoid(p); break;
22339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_CONFERENCE: ret =  responseVoid(p); break;
22349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_UDUB: ret =  responseVoid(p); break;
22359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_LAST_CALL_FAIL_CAUSE: ret =  responseInts(p); break;
2236dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville            case RIL_REQUEST_SIGNAL_STRENGTH: ret =  responseSignalStrength(p); break;
22375284090631e638b916d9a453212e9dc802656a67Wink Saville            case RIL_REQUEST_VOICE_REGISTRATION_STATE: ret =  responseStrings(p); break;
22385284090631e638b916d9a453212e9dc802656a67Wink Saville            case RIL_REQUEST_DATA_REGISTRATION_STATE: ret =  responseStrings(p); break;
22399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_OPERATOR: ret =  responseStrings(p); break;
22409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_RADIO_POWER: ret =  responseVoid(p); break;
22419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_DTMF: ret =  responseVoid(p); break;
22429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_SEND_SMS: ret =  responseSMS(p); break;
22439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_SEND_SMS_EXPECT_MORE: ret =  responseSMS(p); break;
2244abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville            case RIL_REQUEST_SETUP_DATA_CALL: ret =  responseSetupDataCall(p); break;
2245767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_SIM_IO: ret =  responseICC_IO(p); break;
22469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_SEND_USSD: ret =  responseVoid(p); break;
22479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_CANCEL_USSD: ret =  responseVoid(p); break;
22489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_GET_CLIR: ret =  responseInts(p); break;
22499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_SET_CLIR: ret =  responseVoid(p); break;
22509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_QUERY_CALL_FORWARD_STATUS: ret =  responseCallForward(p); break;
22519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_SET_CALL_FORWARD: ret =  responseVoid(p); break;
22529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_QUERY_CALL_WAITING: ret =  responseInts(p); break;
22539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_SET_CALL_WAITING: ret =  responseVoid(p); break;
22549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_SMS_ACKNOWLEDGE: ret =  responseVoid(p); break;
22559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_GET_IMEI: ret =  responseString(p); break;
22569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_GET_IMEISV: ret =  responseString(p); break;
22579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_ANSWER: ret =  responseVoid(p); break;
2258767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_DEACTIVATE_DATA_CALL: ret =  responseVoid(p); break;
22599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_QUERY_FACILITY_LOCK: ret =  responseInts(p); break;
2260be7f0f78afde931ce6ea2d4ba61c340fac5722f6jsh            case RIL_REQUEST_SET_FACILITY_LOCK: ret =  responseInts(p); break;
22619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_CHANGE_BARRING_PASSWORD: ret =  responseVoid(p); break;
22629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_QUERY_NETWORK_SELECTION_MODE: ret =  responseInts(p); break;
22639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_SET_NETWORK_SELECTION_AUTOMATIC: ret =  responseVoid(p); break;
22649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_SET_NETWORK_SELECTION_MANUAL: ret =  responseVoid(p); break;
22653caa1bd1061df4029951e68d0a04d5e30928701fRobert Greenwalt            case RIL_REQUEST_QUERY_AVAILABLE_NETWORKS : ret =  responseOperatorInfos(p); break;
22669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_DTMF_START: ret =  responseVoid(p); break;
22679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_DTMF_STOP: ret =  responseVoid(p); break;
22689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_BASEBAND_VERSION: ret =  responseString(p); break;
22699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_SEPARATE_CONNECTION: ret =  responseVoid(p); break;
2270767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_SET_MUTE: ret =  responseVoid(p); break;
2271767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_GET_MUTE: ret =  responseInts(p); break;
2272767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_QUERY_CLIP: ret =  responseInts(p); break;
2273767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_LAST_DATA_CALL_FAIL_CAUSE: ret =  responseInts(p); break;
2274767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_DATA_CALL_LIST: ret =  responseDataCallList(p); break;
2275767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_RESET_RADIO: ret =  responseVoid(p); break;
2276767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_OEM_HOOK_RAW: ret =  responseRaw(p); break;
2277767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_OEM_HOOK_STRINGS: ret =  responseStrings(p); break;
22789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_SCREEN_STATE: ret =  responseVoid(p); break;
2279767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_SET_SUPP_SVC_NOTIFICATION: ret =  responseVoid(p); break;
2280767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_WRITE_SMS_TO_SIM: ret =  responseInts(p); break;
2281767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_DELETE_SMS_ON_SIM: ret =  responseVoid(p); break;
2282767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_SET_BAND_MODE: ret =  responseVoid(p); break;
2283767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_QUERY_AVAILABLE_BAND_MODE: ret =  responseInts(p); break;
2284767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_STK_GET_PROFILE: ret =  responseString(p); break;
2285767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_STK_SET_PROFILE: ret =  responseVoid(p); break;
2286767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_STK_SEND_ENVELOPE_COMMAND: ret =  responseString(p); break;
2287767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_STK_SEND_TERMINAL_RESPONSE: ret =  responseVoid(p); break;
2288767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_STK_HANDLE_CALL_SETUP_REQUESTED_FROM_SIM: ret =  responseInts(p); break;
2289767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_EXPLICIT_CALL_TRANSFER: ret =  responseVoid(p); break;
2290767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE: ret =  responseVoid(p); break;
229105d69edc0ba9b016a1bd7cb89a03b24c5659bf8dWink Saville            case RIL_REQUEST_GET_PREFERRED_NETWORK_TYPE: ret =  responseGetPreferredNetworkType(p); break;
22929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_GET_NEIGHBORING_CELL_IDS: ret = responseCellList(p); break;
2293767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_SET_LOCATION_UPDATES: ret =  responseVoid(p); break;
22945284090631e638b916d9a453212e9dc802656a67Wink Saville            case RIL_REQUEST_CDMA_SET_SUBSCRIPTION_SOURCE: ret =  responseVoid(p); break;
2295767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_CDMA_SET_ROAMING_PREFERENCE: ret =  responseVoid(p); break;
2296767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_CDMA_QUERY_ROAMING_PREFERENCE: ret =  responseInts(p); break;
2297767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_SET_TTY_MODE: ret =  responseVoid(p); break;
2298767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_QUERY_TTY_MODE: ret =  responseInts(p); break;
2299767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_CDMA_SET_PREFERRED_VOICE_PRIVACY_MODE: ret =  responseVoid(p); break;
2300767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_CDMA_QUERY_PREFERRED_VOICE_PRIVACY_MODE: ret =  responseInts(p); break;
2301767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_CDMA_FLASH: ret =  responseVoid(p); break;
2302767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_CDMA_BURST_DTMF: ret =  responseVoid(p); break;
2303e66b5c43cb2d0aece7f4a636a2368a9c66c46cf5Wink Saville            case RIL_REQUEST_CDMA_SEND_SMS: ret =  responseSMS(p); break;
2304767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_CDMA_SMS_ACKNOWLEDGE: ret =  responseVoid(p); break;
2305e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang            case RIL_REQUEST_GSM_GET_BROADCAST_CONFIG: ret =  responseGmsBroadcastConfig(p); break;
2306e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang            case RIL_REQUEST_GSM_SET_BROADCAST_CONFIG: ret =  responseVoid(p); break;
2307e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang            case RIL_REQUEST_GSM_BROADCAST_ACTIVATION: ret =  responseVoid(p); break;
2308e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang            case RIL_REQUEST_CDMA_GET_BROADCAST_CONFIG: ret =  responseCdmaBroadcastConfig(p); break;
2309767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_CDMA_SET_BROADCAST_CONFIG: ret =  responseVoid(p); break;
2310767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_CDMA_BROADCAST_ACTIVATION: ret =  responseVoid(p); break;
231127d074e0efbdabd40f00eca41169ea225c05fcbeNaveen Kalla            case RIL_REQUEST_CDMA_VALIDATE_AND_WRITE_AKEY: ret =  responseVoid(p); break;
2312767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_CDMA_SUBSCRIPTION: ret =  responseStrings(p); break;
2313767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_CDMA_WRITE_SMS_TO_RUIM: ret =  responseInts(p); break;
2314767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_CDMA_DELETE_SMS_ON_RUIM: ret =  responseVoid(p); break;
2315767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_DEVICE_IDENTITY: ret =  responseStrings(p); break;
2316c06ce125408696fd49c7fa9e1189ecb61804007ajsh            case RIL_REQUEST_GET_SMSC_ADDRESS: ret = responseString(p); break;
2317c06ce125408696fd49c7fa9e1189ecb61804007ajsh            case RIL_REQUEST_SET_SMSC_ADDRESS: ret = responseVoid(p); break;
2318e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville            case RIL_REQUEST_EXIT_EMERGENCY_CALLBACK_MODE: ret = responseVoid(p); break;
2319e51d57f4ab035cd9bc316cc0f93a200d326ef5f9Jaikumar Ganesh            case RIL_REQUEST_REPORT_SMS_MEMORY_STATUS: ret = responseVoid(p); break;
2320144fdfec240a56890657d2248a22bdda9f22470cWink Saville            case RIL_REQUEST_REPORT_STK_SERVICE_IS_RUNNING: ret = responseVoid(p); break;
23215284090631e638b916d9a453212e9dc802656a67Wink Saville            case RIL_REQUEST_CDMA_GET_SUBSCRIPTION_SOURCE: ret =  responseInts(p); break;
2322463f22114587344c96460179069a08d7381fbfd6Jake Hamby            case RIL_REQUEST_ISIM_AUTHENTICATION: ret =  responseString(p); break;
2323094854091b63498f952f0a6c4bcedfdfefaf1cf7Jake Hamby            case RIL_REQUEST_ACKNOWLEDGE_INCOMING_GSM_SMS_WITH_PDU: ret = responseVoid(p); break;
2324094854091b63498f952f0a6c4bcedfdfefaf1cf7Jake Hamby            case RIL_REQUEST_STK_SEND_ENVELOPE_WITH_STATUS: ret = responseICC_IO(p); break;
2325fc2cbe9b46ab17a401dc50f8e0dbb677ed012299Naveen Kalla            case RIL_REQUEST_VOICE_RADIO_TECH: ret = responseInts(p); break;
23269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            default:
2327767a662ecde33c3979bf02b793d392aca0403162Wink Saville                throw new RuntimeException("Unrecognized solicited response: " + rr.mRequest);
23289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            //break;
232903228fa8f950dfee3f679d280f98d040dea397dcjohnwang            }} catch (Throwable tr) {
233003228fa8f950dfee3f679d280f98d040dea397dcjohnwang                // Exceptions here usually mean invalid RIL responses
2331767a662ecde33c3979bf02b793d392aca0403162Wink Saville
233203228fa8f950dfee3f679d280f98d040dea397dcjohnwang                Log.w(LOG_TAG, rr.serialString() + "< "
233303228fa8f950dfee3f679d280f98d040dea397dcjohnwang                        + requestToString(rr.mRequest)
233403228fa8f950dfee3f679d280f98d040dea397dcjohnwang                        + " exception, possible invalid RIL response", tr);
23359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
233603228fa8f950dfee3f679d280f98d040dea397dcjohnwang                if (rr.mResult != null) {
233703228fa8f950dfee3f679d280f98d040dea397dcjohnwang                    AsyncResult.forMessage(rr.mResult, null, tr);
233803228fa8f950dfee3f679d280f98d040dea397dcjohnwang                    rr.mResult.sendToTarget();
233903228fa8f950dfee3f679d280f98d040dea397dcjohnwang                }
234003228fa8f950dfee3f679d280f98d040dea397dcjohnwang                rr.release();
234103228fa8f950dfee3f679d280f98d040dea397dcjohnwang                return;
23429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
234303228fa8f950dfee3f679d280f98d040dea397dcjohnwang        }
234403228fa8f950dfee3f679d280f98d040dea397dcjohnwang
234503228fa8f950dfee3f679d280f98d040dea397dcjohnwang        if (error != 0) {
234603228fa8f950dfee3f679d280f98d040dea397dcjohnwang            rr.onError(error, ret);
23479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            rr.release();
23489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return;
23499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
23509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
23519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "< " + requestToString(rr.mRequest)
23529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            + " " + retToString(rr.mRequest, ret));
2353767a662ecde33c3979bf02b793d392aca0403162Wink Saville
23549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (rr.mResult != null) {
23559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            AsyncResult.forMessage(rr.mResult, ret, null);
23569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            rr.mResult.sendToTarget();
23579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2358767a662ecde33c3979bf02b793d392aca0403162Wink Saville
23599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.release();
23609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
23619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
23629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private String
2363767a662ecde33c3979bf02b793d392aca0403162Wink Saville    retToString(int req, Object ret) {
23649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (ret == null) return "";
23659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        switch (req) {
23669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            // Don't log these return values, for privacy's sake.
23679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_GET_IMSI:
23689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_GET_IMEI:
23699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_GET_IMEISV:
23701d1a373f5c7637de545ad815ad21aa325aaa970fWink Saville                if (!RILJ_LOGV) {
23711d1a373f5c7637de545ad815ad21aa325aaa970fWink Saville                    // If not versbose logging just return and don't display IMSI and IMEI, IMEISV
23721d1a373f5c7637de545ad815ad21aa325aaa970fWink Saville                    return "";
23731d1a373f5c7637de545ad815ad21aa325aaa970fWink Saville                }
23749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
23759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
23769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        StringBuilder sb;
23779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        String s;
23789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int length;
23799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (ret instanceof int[]){
23809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int[] intArray = (int[]) ret;
23819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            length = intArray.length;
23829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            sb = new StringBuilder("{");
23839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (length > 0) {
23849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                int i = 0;
23859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                sb.append(intArray[i++]);
23869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                while ( i < length) {
23879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    sb.append(", ").append(intArray[i++]);
23889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
23899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
23909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            sb.append("}");
23919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            s = sb.toString();
23929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } else if (ret instanceof String[]) {
23939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String[] strings = (String[]) ret;
23949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            length = strings.length;
23959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            sb = new StringBuilder("{");
23969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (length > 0) {
23979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                int i = 0;
23989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                sb.append(strings[i++]);
23999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                while ( i < length) {
24009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    sb.append(", ").append(strings[i++]);
24019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
24029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
24039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            sb.append("}");
24049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            s = sb.toString();
24059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }else if (req == RIL_REQUEST_GET_CURRENT_CALLS) {
24069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            ArrayList<DriverCall> calls = (ArrayList<DriverCall>) ret;
24079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            sb = new StringBuilder(" ");
24089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            for (DriverCall dc : calls) {
24099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                sb.append("[").append(dc).append("] ");
24109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
24119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            s = sb.toString();
24129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } else if (req == RIL_REQUEST_GET_NEIGHBORING_CELL_IDS) {
24139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            ArrayList<NeighboringCellInfo> cells;
24149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            cells = (ArrayList<NeighboringCellInfo>) ret;
24159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            sb = new StringBuilder(" ");
24169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            for (NeighboringCellInfo cell : cells) {
24179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                sb.append(cell).append(" ");
24189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
24199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            s = sb.toString();
24209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } else {
24219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            s = ret.toString();
24229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
24239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return s;
24249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
24259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
24269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private void
2427767a662ecde33c3979bf02b793d392aca0403162Wink Saville    processUnsolicited (Parcel p) {
24289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int response;
24299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Object ret;
24309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
24319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        response = p.readInt();
24329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
24339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {switch(response) {
24349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
24359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project cat libs/telephony/ril_unsol_commands.h \
24369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project | egrep "^ *{RIL_" \
24379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project | sed -re 's/\{([^,]+),[^,]+,([^}]+).+/case \1: \2(rr, p); break;/'
24389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project*/
24399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
24409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_RESPONSE_RADIO_STATE_CHANGED: ret =  responseVoid(p); break;
24419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED: ret =  responseVoid(p); break;
24425284090631e638b916d9a453212e9dc802656a67Wink Saville            case RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED: ret =  responseVoid(p); break;
24439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_RESPONSE_NEW_SMS: ret =  responseString(p); break;
24449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_RESPONSE_NEW_SMS_STATUS_REPORT: ret =  responseString(p); break;
24459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_RESPONSE_NEW_SMS_ON_SIM: ret =  responseInts(p); break;
24469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_ON_USSD: ret =  responseStrings(p); break;
24479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_NITZ_TIME_RECEIVED: ret =  responseString(p); break;
2448dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville            case RIL_UNSOL_SIGNAL_STRENGTH: ret = responseSignalStrength(p); break;
2449767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_UNSOL_DATA_CALL_LIST_CHANGED: ret = responseDataCallList(p);break;
24509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_SUPP_SVC_NOTIFICATION: ret = responseSuppServiceNotification(p); break;
24519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_STK_SESSION_END: ret = responseVoid(p); break;
24529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_STK_PROACTIVE_COMMAND: ret = responseString(p); break;
24539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_STK_EVENT_NOTIFY: ret = responseString(p); break;
24549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_STK_CALL_SETUP: ret = responseInts(p); break;
24559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_SIM_SMS_STORAGE_FULL: ret =  responseVoid(p); break;
24568f241458051c8bd2a68b0e8b9fe0d0f326a0a56bAlex Yakavenka            case RIL_UNSOL_SIM_REFRESH: ret =  responseSimRefresh(p); break;
2457e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville            case RIL_UNSOL_CALL_RING: ret =  responseCallRing(p); break;
24584df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project            case RIL_UNSOL_RESTRICTED_STATE_CHANGED: ret = responseInts(p); break;
2459767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_UNSOL_RESPONSE_SIM_STATUS_CHANGED:  ret =  responseVoid(p); break;
2460767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_UNSOL_RESPONSE_CDMA_NEW_SMS:  ret =  responseCdmaSms(p); break;
24613b9f0a33a110d01e587ffd5ec7708af68723ad4bJean-Baptiste Queru            case RIL_UNSOL_RESPONSE_NEW_BROADCAST_SMS:  ret =  responseRaw(p); break;
2462767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_UNSOL_CDMA_RUIM_SMS_STORAGE_FULL:  ret =  responseVoid(p); break;
2463e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville            case RIL_UNSOL_ENTER_EMERGENCY_CALLBACK_MODE: ret = responseVoid(p); break;
2464e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville            case RIL_UNSOL_CDMA_CALL_WAITING: ret = responseCdmaCallWaiting(p); break;
2465e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville            case RIL_UNSOL_CDMA_OTA_PROVISION_STATUS: ret = responseInts(p); break;
246622ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville            case RIL_UNSOL_CDMA_INFO_REC: ret = responseCdmaInformationRecord(p); break;
24672a34043d5578deb8d7f93830e13c4efc91eba583Jaikumar Ganesh            case RIL_UNSOL_OEM_HOOK_RAW: ret = responseRaw(p); break;
2468bbd754b8fe7563234b5c4c8d1425a7417337f2f2John Wang            case RIL_UNSOL_RINGBACK_TONE: ret = responseInts(p); break;
24691ccc41ed938ff005ae3d621292580a90601242caJohn Wang            case RIL_UNSOL_RESEND_INCALL_MUTE: ret = responseVoid(p); break;
247066958c73674673274bf08266b60ad3c1791c9179Wink Saville            case RIL_UNSOL_CDMA_SUBSCRIPTION_SOURCE_CHANGED: ret = responseInts(p); break;
24715284090631e638b916d9a453212e9dc802656a67Wink Saville            case RIL_UNSOl_CDMA_PRL_CHANGED: ret = responseInts(p); break;
24725284090631e638b916d9a453212e9dc802656a67Wink Saville            case RIL_UNSOL_EXIT_EMERGENCY_CALLBACK_MODE: ret = responseVoid(p); break;
24731dd2ada5cf7d0c95afb4731d082473f34ee7f433Wink Saville            case RIL_UNSOL_RIL_CONNECTED: ret = responseInts(p); break;
2474fc2cbe9b46ab17a401dc50f8e0dbb677ed012299Naveen Kalla            case RIL_UNSOL_VOICE_RADIO_TECH_CHANGED: ret =  responseInts(p); break;
2475e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
2476767a662ecde33c3979bf02b793d392aca0403162Wink Saville            default:
2477767a662ecde33c3979bf02b793d392aca0403162Wink Saville                throw new RuntimeException("Unrecognized unsol response: " + response);
24789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            //break; (implied)
24799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }} catch (Throwable tr) {
24802a34043d5578deb8d7f93830e13c4efc91eba583Jaikumar Ganesh            Log.e(LOG_TAG, "Exception processing unsol response: " + response +
24819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                "Exception:" + tr.toString());
24829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return;
24839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
24849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
24859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        switch(response) {
24869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_RESPONSE_RADIO_STATE_CHANGED:
24879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                /* has bonus radio state int */
24889a8e567d2a801d36842e611c1ec7d73c71fffd8fAlex Yakavenka                RadioState newState = getRadioStateFromInt(p.readInt());
24899a8e567d2a801d36842e611c1ec7d73c71fffd8fAlex Yakavenka                if (RILJ_LOGD) unsljLogMore(response, newState.toString());
2490767a662ecde33c3979bf02b793d392aca0403162Wink Saville
24919a8e567d2a801d36842e611c1ec7d73c71fffd8fAlex Yakavenka                switchToRadioState(newState);
24929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            break;
24939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED:
24949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                if (RILJ_LOGD) unsljLog(response);
24959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
24969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mCallStateRegistrants
24979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    .notifyRegistrants(new AsyncResult(null, null, null));
24989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            break;
24995284090631e638b916d9a453212e9dc802656a67Wink Saville            case RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED:
25009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                if (RILJ_LOGD) unsljLog(response);
25019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
25025284090631e638b916d9a453212e9dc802656a67Wink Saville                mVoiceNetworkStateRegistrants
25039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    .notifyRegistrants(new AsyncResult(null, null, null));
25049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            break;
25059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_RESPONSE_NEW_SMS: {
25069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                if (RILJ_LOGD) unsljLog(response);
25079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
25089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                // FIXME this should move up a layer
25099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                String a[] = new String[2];
25109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
25119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                a[1] = (String)ret;
25129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
25139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                SmsMessage sms;
25149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2515767a662ecde33c3979bf02b793d392aca0403162Wink Saville                sms = SmsMessage.newFromCMT(a);
2516b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby                if (mGsmSmsRegistrant != null) {
2517b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby                    mGsmSmsRegistrant
25189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        .notifyRegistrant(new AsyncResult(null, sms, null));
25199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
25209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            break;
25219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
25229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_RESPONSE_NEW_SMS_STATUS_REPORT:
25239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                if (RILJ_LOGD) unsljLogRet(response, ret);
25249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
25259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                if (mSmsStatusRegistrant != null) {
25269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    mSmsStatusRegistrant.notifyRegistrant(
25279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            new AsyncResult(null, ret, null));
25289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
25299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            break;
25309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_RESPONSE_NEW_SMS_ON_SIM:
25319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                if (RILJ_LOGD) unsljLogRet(response, ret);
25329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
25339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                int[] smsIndex = (int[])ret;
25349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
25359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                if(smsIndex.length == 1) {
25369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    if (mSmsOnSimRegistrant != null) {
25379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        mSmsOnSimRegistrant.
25389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                notifyRegistrant(new AsyncResult(null, smsIndex, null));
25399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    }
25409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                } else {
25419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    if (RILJ_LOGD) riljLog(" NEW_SMS_ON_SIM ERROR with wrong length "
25429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            + smsIndex.length);
25439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
25449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            break;
25459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_ON_USSD:
25469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                String[] resp = (String[])ret;
2547767a662ecde33c3979bf02b793d392aca0403162Wink Saville
25489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                if (resp.length < 2) {
25499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    resp = new String[2];
25509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    resp[0] = ((String[])ret)[0];
25519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    resp[1] = null;
25529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
25539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                if (RILJ_LOGD) unsljLogMore(response, resp[0]);
25549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                if (mUSSDRegistrant != null) {
25559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    mUSSDRegistrant.notifyRegistrant(
25569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        new AsyncResult (null, resp, null));
25579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
25589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            break;
2559767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_UNSOL_NITZ_TIME_RECEIVED:
25609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                if (RILJ_LOGD) unsljLogRet(response, ret);
25619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
25629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                // has bonus long containing milliseconds since boot that the NITZ
25639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                // time was received
25649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                long nitzReceiveTime = p.readLong();
25659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
25669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Object[] result = new Object[2];
25679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
25689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                result[0] = ret;
25699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                result[1] = Long.valueOf(nitzReceiveTime);
25709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2571a27421a306c49fbe9b3823b30f7ab1cd58b28854Wink Saville                boolean ignoreNitz = SystemProperties.getBoolean(
2572a27421a306c49fbe9b3823b30f7ab1cd58b28854Wink Saville                        TelephonyProperties.PROPERTY_IGNORE_NITZ, false);
2573767a662ecde33c3979bf02b793d392aca0403162Wink Saville
2574a27421a306c49fbe9b3823b30f7ab1cd58b28854Wink Saville                if (ignoreNitz) {
2575a27421a306c49fbe9b3823b30f7ab1cd58b28854Wink Saville                    if (RILJ_LOGD) riljLog("ignoring UNSOL_NITZ_TIME_RECEIVED");
25769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                } else {
2577a27421a306c49fbe9b3823b30f7ab1cd58b28854Wink Saville                    if (mNITZTimeRegistrant != null) {
2578a27421a306c49fbe9b3823b30f7ab1cd58b28854Wink Saville
2579a27421a306c49fbe9b3823b30f7ab1cd58b28854Wink Saville                        mNITZTimeRegistrant
2580a27421a306c49fbe9b3823b30f7ab1cd58b28854Wink Saville                            .notifyRegistrant(new AsyncResult (null, result, null));
2581a27421a306c49fbe9b3823b30f7ab1cd58b28854Wink Saville                    } else {
2582a27421a306c49fbe9b3823b30f7ab1cd58b28854Wink Saville                        // in case NITZ time registrant isnt registered yet
2583a27421a306c49fbe9b3823b30f7ab1cd58b28854Wink Saville                        mLastNITZTimeInfo = result;
2584a27421a306c49fbe9b3823b30f7ab1cd58b28854Wink Saville                    }
25859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
25869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            break;
2587767a662ecde33c3979bf02b793d392aca0403162Wink Saville
25889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_SIGNAL_STRENGTH:
25899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                // Note this is set to "verbose" because it happens
25909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                // frequently
25919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                if (RILJ_LOGV) unsljLogvRet(response, ret);
2592767a662ecde33c3979bf02b793d392aca0403162Wink Saville
25939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                if (mSignalStrengthRegistrant != null) {
25949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    mSignalStrengthRegistrant.notifyRegistrant(
25959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                        new AsyncResult (null, ret, null));
25969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
25979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            break;
2598767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_UNSOL_DATA_CALL_LIST_CHANGED:
25999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                if (RILJ_LOGD) unsljLogRet(response, ret);
26009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
26015284090631e638b916d9a453212e9dc802656a67Wink Saville                mDataNetworkStateRegistrants.notifyRegistrants(new AsyncResult(null, ret, null));
26029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            break;
26039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
26049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_SUPP_SVC_NOTIFICATION:
26059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                if (RILJ_LOGD) unsljLogRet(response, ret);
26069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
26079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                if (mSsnRegistrant != null) {
26089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    mSsnRegistrant.notifyRegistrant(
26099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                        new AsyncResult (null, ret, null));
26109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
26119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                break;
26129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
26139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_STK_SESSION_END:
26149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                if (RILJ_LOGD) unsljLog(response);
26159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2616a27353c1965911f69be8d02a01b15389189eab9dAlex Yakavenka                if (mCatSessionEndRegistrant != null) {
2617a27353c1965911f69be8d02a01b15389189eab9dAlex Yakavenka                    mCatSessionEndRegistrant.notifyRegistrant(
26189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                        new AsyncResult (null, ret, null));
26199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
26209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                break;
26219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
26229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_STK_PROACTIVE_COMMAND:
26239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                if (RILJ_LOGD) unsljLogRet(response, ret);
26249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2625a27353c1965911f69be8d02a01b15389189eab9dAlex Yakavenka                if (mCatProCmdRegistrant != null) {
2626a27353c1965911f69be8d02a01b15389189eab9dAlex Yakavenka                    mCatProCmdRegistrant.notifyRegistrant(
26279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                        new AsyncResult (null, ret, null));
26289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
26299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                break;
26309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
26319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_STK_EVENT_NOTIFY:
26329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                if (RILJ_LOGD) unsljLogRet(response, ret);
26339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2634a27353c1965911f69be8d02a01b15389189eab9dAlex Yakavenka                if (mCatEventRegistrant != null) {
2635a27353c1965911f69be8d02a01b15389189eab9dAlex Yakavenka                    mCatEventRegistrant.notifyRegistrant(
26369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                        new AsyncResult (null, ret, null));
26379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
26389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                break;
26399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
26409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_STK_CALL_SETUP:
26419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                if (RILJ_LOGD) unsljLogRet(response, ret);
26429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2643a27353c1965911f69be8d02a01b15389189eab9dAlex Yakavenka                if (mCatCallSetUpRegistrant != null) {
2644a27353c1965911f69be8d02a01b15389189eab9dAlex Yakavenka                    mCatCallSetUpRegistrant.notifyRegistrant(
26459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                        new AsyncResult (null, ret, null));
26469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
26479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                break;
26489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
26499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_SIM_SMS_STORAGE_FULL:
26509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                if (RILJ_LOGD) unsljLog(response);
26519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2652767a662ecde33c3979bf02b793d392aca0403162Wink Saville                if (mIccSmsFullRegistrant != null) {
2653767a662ecde33c3979bf02b793d392aca0403162Wink Saville                    mIccSmsFullRegistrant.notifyRegistrant();
26549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
26559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                break;
26569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2657767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_UNSOL_SIM_REFRESH:
26589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                if (RILJ_LOGD) unsljLogRet(response, ret);
26599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2660a142512a5009d7b4c422d23b1d7bab8d219eb50bRobert Greenwalt                if (mIccRefreshRegistrants != null) {
2661a142512a5009d7b4c422d23b1d7bab8d219eb50bRobert Greenwalt                    mIccRefreshRegistrants.notifyRegistrants(
26629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            new AsyncResult (null, ret, null));
26639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
26649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                break;
2665767a662ecde33c3979bf02b793d392aca0403162Wink Saville
2666767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_UNSOL_CALL_RING:
2667dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
26682a34043d5578deb8d7f93830e13c4efc91eba583Jaikumar Ganesh
26699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                if (mRingRegistrant != null) {
2670dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville                    mRingRegistrant.notifyRegistrant(
2671dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville                            new AsyncResult (null, ret, null));
26729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
26739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                break;
26742a34043d5578deb8d7f93830e13c4efc91eba583Jaikumar Ganesh
26754df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project            case RIL_UNSOL_RESTRICTED_STATE_CHANGED:
26764df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project                if (RILJ_LOGD) unsljLogvRet(response, ret);
26774df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project                if (mRestrictedStateRegistrant != null) {
26784df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project                    mRestrictedStateRegistrant.notifyRegistrant(
26794df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project                                        new AsyncResult (null, ret, null));
26804df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project                }
268155c6f8881fdd2c5894e6297f49a9c4e0dc81ff8dWink Saville                break;
26822a34043d5578deb8d7f93830e13c4efc91eba583Jaikumar Ganesh
2683767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_UNSOL_RESPONSE_SIM_STATUS_CHANGED:
2684e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang                if (RILJ_LOGD) unsljLog(response);
2685e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang
2686767a662ecde33c3979bf02b793d392aca0403162Wink Saville                if (mIccStatusChangedRegistrants != null) {
2687767a662ecde33c3979bf02b793d392aca0403162Wink Saville                    mIccStatusChangedRegistrants.notifyRegistrants();
2688767a662ecde33c3979bf02b793d392aca0403162Wink Saville                }
2689767a662ecde33c3979bf02b793d392aca0403162Wink Saville                break;
2690767a662ecde33c3979bf02b793d392aca0403162Wink Saville
2691767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_UNSOL_RESPONSE_CDMA_NEW_SMS:
2692e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang                if (RILJ_LOGD) unsljLog(response);
2693e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang
2694767a662ecde33c3979bf02b793d392aca0403162Wink Saville                SmsMessage sms = (SmsMessage) ret;
2695767a662ecde33c3979bf02b793d392aca0403162Wink Saville
2696b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby                if (mCdmaSmsRegistrant != null) {
2697b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby                    mCdmaSmsRegistrant
2698767a662ecde33c3979bf02b793d392aca0403162Wink Saville                        .notifyRegistrant(new AsyncResult(null, sms, null));
2699767a662ecde33c3979bf02b793d392aca0403162Wink Saville                }
2700767a662ecde33c3979bf02b793d392aca0403162Wink Saville                break;
2701767a662ecde33c3979bf02b793d392aca0403162Wink Saville
2702767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_UNSOL_RESPONSE_NEW_BROADCAST_SMS:
2703e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang                if (RILJ_LOGD) unsljLog(response);
2704e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang
2705e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang                if (mGsmBroadcastSmsRegistrant != null) {
2706e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang                    mGsmBroadcastSmsRegistrant
2707e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang                        .notifyRegistrant(new AsyncResult(null, ret, null));
2708e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang                }
2709767a662ecde33c3979bf02b793d392aca0403162Wink Saville                break;
2710767a662ecde33c3979bf02b793d392aca0403162Wink Saville
2711767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_UNSOL_CDMA_RUIM_SMS_STORAGE_FULL:
2712e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang                if (RILJ_LOGD) unsljLog(response);
2713767a662ecde33c3979bf02b793d392aca0403162Wink Saville
2714767a662ecde33c3979bf02b793d392aca0403162Wink Saville                if (mIccSmsFullRegistrant != null) {
2715767a662ecde33c3979bf02b793d392aca0403162Wink Saville                    mIccSmsFullRegistrant.notifyRegistrant();
2716767a662ecde33c3979bf02b793d392aca0403162Wink Saville                }
2717767a662ecde33c3979bf02b793d392aca0403162Wink Saville                break;
27182a34043d5578deb8d7f93830e13c4efc91eba583Jaikumar Ganesh
2719e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville            case RIL_UNSOL_ENTER_EMERGENCY_CALLBACK_MODE:
2720e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                if (RILJ_LOGD) unsljLog(response);
2721e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
2722e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                if (mEmergencyCallbackModeRegistrant != null) {
2723e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                    mEmergencyCallbackModeRegistrant.notifyRegistrant();
2724e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                }
2725e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                break;
2726e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
2727e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville            case RIL_UNSOL_CDMA_CALL_WAITING:
27283bd5b0154faa02e197cdc344b45d968aba43d726Anna Markova                if (RILJ_LOGD) unsljLogRet(response, ret);
2729e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
2730dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville                if (mCallWaitingInfoRegistrants != null) {
2731dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville                    mCallWaitingInfoRegistrants.notifyRegistrants(
2732dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville                                        new AsyncResult (null, ret, null));
2733e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                }
2734e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                break;
2735e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
2736e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville            case RIL_UNSOL_CDMA_OTA_PROVISION_STATUS:
2737dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
2738e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
2739dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville                if (mOtaProvisionRegistrants != null) {
2740dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville                    mOtaProvisionRegistrants.notifyRegistrants(
2741dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville                                        new AsyncResult (null, ret, null));
2742e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                }
2743e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                break;
2744e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
2745e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville            case RIL_UNSOL_CDMA_INFO_REC:
274622ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville                ArrayList<CdmaInformationRecords> listInfoRecs;
2747dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville
274822ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville                try {
274922ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville                    listInfoRecs = (ArrayList<CdmaInformationRecords>)ret;
275022ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville                } catch (ClassCastException e) {
275122ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville                    Log.e(LOG_TAG, "Unexpected exception casting to listInfoRecs", e);
275222ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville                    break;
2753dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville                }
275422ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville
275522ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville                for (CdmaInformationRecords rec : listInfoRecs) {
275622ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville                    if (RILJ_LOGD) unsljLogRet(response, rec);
275722ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville                    notifyRegistrantsCdmaInfoRec(rec);
2758dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville                }
2759dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville                break;
2760dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville
2761dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville            case RIL_UNSOL_OEM_HOOK_RAW:
2762dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville                if (RILJ_LOGD) unsljLogvRet(response, IccUtils.bytesToHexString((byte[])ret));
2763dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville                if (mUnsolOemHookRawRegistrant != null) {
2764dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville                    mUnsolOemHookRawRegistrant.notifyRegistrant(new AsyncResult(null, ret, null));
2765e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                }
2766e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                break;
2767bbd754b8fe7563234b5c4c8d1425a7417337f2f2John Wang
2768bbd754b8fe7563234b5c4c8d1425a7417337f2f2John Wang            case RIL_UNSOL_RINGBACK_TONE:
2769bbd754b8fe7563234b5c4c8d1425a7417337f2f2John Wang                if (RILJ_LOGD) unsljLogvRet(response, ret);
2770bbd754b8fe7563234b5c4c8d1425a7417337f2f2John Wang                if (mRingbackToneRegistrants != null) {
2771bbd754b8fe7563234b5c4c8d1425a7417337f2f2John Wang                    boolean playtone = (((int[])ret)[0] == 1);
2772bbd754b8fe7563234b5c4c8d1425a7417337f2f2John Wang                    mRingbackToneRegistrants.notifyRegistrants(
2773bbd754b8fe7563234b5c4c8d1425a7417337f2f2John Wang                                        new AsyncResult (null, playtone, null));
2774bbd754b8fe7563234b5c4c8d1425a7417337f2f2John Wang                }
27751ccc41ed938ff005ae3d621292580a90601242caJohn Wang                break;
27761ccc41ed938ff005ae3d621292580a90601242caJohn Wang
27771ccc41ed938ff005ae3d621292580a90601242caJohn Wang            case RIL_UNSOL_RESEND_INCALL_MUTE:
27781ccc41ed938ff005ae3d621292580a90601242caJohn Wang                if (RILJ_LOGD) unsljLogRet(response, ret);
27791ccc41ed938ff005ae3d621292580a90601242caJohn Wang
27801ccc41ed938ff005ae3d621292580a90601242caJohn Wang                if (mResendIncallMuteRegistrants != null) {
27811ccc41ed938ff005ae3d621292580a90601242caJohn Wang                    mResendIncallMuteRegistrants.notifyRegistrants(
27821ccc41ed938ff005ae3d621292580a90601242caJohn Wang                                        new AsyncResult (null, ret, null));
27831ccc41ed938ff005ae3d621292580a90601242caJohn Wang                }
27845284090631e638b916d9a453212e9dc802656a67Wink Saville                break;
27855284090631e638b916d9a453212e9dc802656a67Wink Saville
2786fc2cbe9b46ab17a401dc50f8e0dbb677ed012299Naveen Kalla            case RIL_UNSOL_VOICE_RADIO_TECH_CHANGED:
2787fc2cbe9b46ab17a401dc50f8e0dbb677ed012299Naveen Kalla                if (RILJ_LOGD) unsljLogRet(response, ret);
2788fc2cbe9b46ab17a401dc50f8e0dbb677ed012299Naveen Kalla
2789fc2cbe9b46ab17a401dc50f8e0dbb677ed012299Naveen Kalla                if (mVoiceRadioTechChangedRegistrants != null) {
2790fc2cbe9b46ab17a401dc50f8e0dbb677ed012299Naveen Kalla                    mVoiceRadioTechChangedRegistrants.notifyRegistrants(
2791fc2cbe9b46ab17a401dc50f8e0dbb677ed012299Naveen Kalla                            new AsyncResult(null, ret, null));
2792fc2cbe9b46ab17a401dc50f8e0dbb677ed012299Naveen Kalla                }
2793fc2cbe9b46ab17a401dc50f8e0dbb677ed012299Naveen Kalla                break;
2794fc2cbe9b46ab17a401dc50f8e0dbb677ed012299Naveen Kalla
279566958c73674673274bf08266b60ad3c1791c9179Wink Saville            case RIL_UNSOL_CDMA_SUBSCRIPTION_SOURCE_CHANGED:
27965284090631e638b916d9a453212e9dc802656a67Wink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
27975284090631e638b916d9a453212e9dc802656a67Wink Saville
27985284090631e638b916d9a453212e9dc802656a67Wink Saville                if (mCdmaSubscriptionChangedRegistrants != null) {
27995284090631e638b916d9a453212e9dc802656a67Wink Saville                    mCdmaSubscriptionChangedRegistrants.notifyRegistrants(
28005284090631e638b916d9a453212e9dc802656a67Wink Saville                                        new AsyncResult (null, ret, null));
28015284090631e638b916d9a453212e9dc802656a67Wink Saville                }
28025284090631e638b916d9a453212e9dc802656a67Wink Saville                break;
28035284090631e638b916d9a453212e9dc802656a67Wink Saville
28045284090631e638b916d9a453212e9dc802656a67Wink Saville            case RIL_UNSOl_CDMA_PRL_CHANGED:
28055284090631e638b916d9a453212e9dc802656a67Wink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
28065284090631e638b916d9a453212e9dc802656a67Wink Saville
28075284090631e638b916d9a453212e9dc802656a67Wink Saville                if (mCdmaPrlChangedRegistrants != null) {
28085284090631e638b916d9a453212e9dc802656a67Wink Saville                    mCdmaPrlChangedRegistrants.notifyRegistrants(
28095284090631e638b916d9a453212e9dc802656a67Wink Saville                                        new AsyncResult (null, ret, null));
28105284090631e638b916d9a453212e9dc802656a67Wink Saville                }
28115284090631e638b916d9a453212e9dc802656a67Wink Saville                break;
28125284090631e638b916d9a453212e9dc802656a67Wink Saville
28135284090631e638b916d9a453212e9dc802656a67Wink Saville            case RIL_UNSOL_EXIT_EMERGENCY_CALLBACK_MODE:
28145284090631e638b916d9a453212e9dc802656a67Wink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
28155284090631e638b916d9a453212e9dc802656a67Wink Saville
28165284090631e638b916d9a453212e9dc802656a67Wink Saville                if (mExitEmergencyCallbackModeRegistrants != null) {
28175284090631e638b916d9a453212e9dc802656a67Wink Saville                    mExitEmergencyCallbackModeRegistrants.notifyRegistrants(
28185284090631e638b916d9a453212e9dc802656a67Wink Saville                                        new AsyncResult (null, null, null));
28195284090631e638b916d9a453212e9dc802656a67Wink Saville                }
28205284090631e638b916d9a453212e9dc802656a67Wink Saville                break;
28211dd2ada5cf7d0c95afb4731d082473f34ee7f433Wink Saville
28221dd2ada5cf7d0c95afb4731d082473f34ee7f433Wink Saville            case RIL_UNSOL_RIL_CONNECTED: {
28231dd2ada5cf7d0c95afb4731d082473f34ee7f433Wink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
282466958c73674673274bf08266b60ad3c1791c9179Wink Saville
282566958c73674673274bf08266b60ad3c1791c9179Wink Saville                // Initial conditions
282666958c73674673274bf08266b60ad3c1791c9179Wink Saville                setRadioPower(false, null);
282705d69edc0ba9b016a1bd7cb89a03b24c5659bf8dWink Saville                setPreferredNetworkType(mPreferredNetworkType, null);
282866958c73674673274bf08266b60ad3c1791c9179Wink Saville                setCdmaSubscriptionSource(mCdmaSubscription, null);
28291dd2ada5cf7d0c95afb4731d082473f34ee7f433Wink Saville                notifyRegistrantsRilConnectionChanged(((int[])ret)[0]);
28301dd2ada5cf7d0c95afb4731d082473f34ee7f433Wink Saville                break;
28311dd2ada5cf7d0c95afb4731d082473f34ee7f433Wink Saville            }
28321dd2ada5cf7d0c95afb4731d082473f34ee7f433Wink Saville        }
28331dd2ada5cf7d0c95afb4731d082473f34ee7f433Wink Saville    }
28341dd2ada5cf7d0c95afb4731d082473f34ee7f433Wink Saville
28351dd2ada5cf7d0c95afb4731d082473f34ee7f433Wink Saville    /**
28361dd2ada5cf7d0c95afb4731d082473f34ee7f433Wink Saville     * Notifiy all registrants that the ril has connected or disconnected.
28371dd2ada5cf7d0c95afb4731d082473f34ee7f433Wink Saville     *
28381dd2ada5cf7d0c95afb4731d082473f34ee7f433Wink Saville     * @param rilVer is the version of the ril or -1 if disconnected.
28391dd2ada5cf7d0c95afb4731d082473f34ee7f433Wink Saville     */
28401dd2ada5cf7d0c95afb4731d082473f34ee7f433Wink Saville    private void notifyRegistrantsRilConnectionChanged(int rilVer) {
28411dd2ada5cf7d0c95afb4731d082473f34ee7f433Wink Saville        mRilVersion = rilVer;
28421dd2ada5cf7d0c95afb4731d082473f34ee7f433Wink Saville        if (mRilConnectedRegistrants != null) {
28431dd2ada5cf7d0c95afb4731d082473f34ee7f433Wink Saville            mRilConnectedRegistrants.notifyRegistrants(
28441dd2ada5cf7d0c95afb4731d082473f34ee7f433Wink Saville                                new AsyncResult (null, new Integer(rilVer), null));
28459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
28469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
28479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
28489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private Object
2849767a662ecde33c3979bf02b793d392aca0403162Wink Saville    responseInts(Parcel p) {
28509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int numInts;
28519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int response[];
28529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
28539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        numInts = p.readInt();
28549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
28559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        response = new int[numInts];
28569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
28579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        for (int i = 0 ; i < numInts ; i++) {
28589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            response[i] = p.readInt();
28599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
28609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
28619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return response;
28629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
28639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
28649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
28659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private Object
2866767a662ecde33c3979bf02b793d392aca0403162Wink Saville    responseVoid(Parcel p) {
28679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return null;
28689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
28699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
28709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private Object
2871767a662ecde33c3979bf02b793d392aca0403162Wink Saville    responseCallForward(Parcel p) {
28729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int numInfos;
28739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        CallForwardInfo infos[];
28749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
28759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        numInfos = p.readInt();
28769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
28779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        infos = new CallForwardInfo[numInfos];
28789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
28799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        for (int i = 0 ; i < numInfos ; i++) {
28809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            infos[i] = new CallForwardInfo();
28819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
28829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            infos[i].status = p.readInt();
28839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            infos[i].reason = p.readInt();
28849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            infos[i].serviceClass = p.readInt();
28859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            infos[i].toa = p.readInt();
28869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            infos[i].number = p.readString();
28879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            infos[i].timeSeconds = p.readInt();
28889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
28899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
28909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return infos;
28919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
28929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
28939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private Object
2894767a662ecde33c3979bf02b793d392aca0403162Wink Saville    responseSuppServiceNotification(Parcel p) {
28959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        SuppServiceNotification notification = new SuppServiceNotification();
2896767a662ecde33c3979bf02b793d392aca0403162Wink Saville
28979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        notification.notificationType = p.readInt();
28989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        notification.code = p.readInt();
28999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        notification.index = p.readInt();
29009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        notification.type = p.readInt();
29019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        notification.number = p.readString();
2902767a662ecde33c3979bf02b793d392aca0403162Wink Saville
29039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return notification;
29049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2905767a662ecde33c3979bf02b793d392aca0403162Wink Saville
29069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private Object
2907767a662ecde33c3979bf02b793d392aca0403162Wink Saville    responseCdmaSms(Parcel p) {
2908767a662ecde33c3979bf02b793d392aca0403162Wink Saville        SmsMessage sms;
2909767a662ecde33c3979bf02b793d392aca0403162Wink Saville        sms = SmsMessage.newFromParcel(p);
2910767a662ecde33c3979bf02b793d392aca0403162Wink Saville
2911767a662ecde33c3979bf02b793d392aca0403162Wink Saville        return sms;
2912767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
2913767a662ecde33c3979bf02b793d392aca0403162Wink Saville
2914767a662ecde33c3979bf02b793d392aca0403162Wink Saville    private Object
2915767a662ecde33c3979bf02b793d392aca0403162Wink Saville    responseString(Parcel p) {
29169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        String response;
29179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
29189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        response = p.readString();
29199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
29209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return response;
29219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
29229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
29239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private Object
2924767a662ecde33c3979bf02b793d392aca0403162Wink Saville    responseStrings(Parcel p) {
29259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int num;
29269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        String response[];
29279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
29289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        response = p.readStringArray();
29299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
29309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (false) {
29319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            num = p.readInt();
29329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
29339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            response = new String[num];
29349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            for (int i = 0; i < num; i++) {
29359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                response[i] = p.readString();
29369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
29379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2938767a662ecde33c3979bf02b793d392aca0403162Wink Saville
29399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return response;
29409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
29419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
29429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private Object
2943767a662ecde33c3979bf02b793d392aca0403162Wink Saville    responseRaw(Parcel p) {
29449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int num;
29459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        byte response[];
29469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
29479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        response = p.createByteArray();
29489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
29499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return response;
29509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
29519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
29529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private Object
2953767a662ecde33c3979bf02b793d392aca0403162Wink Saville    responseSMS(Parcel p) {
29547b3f5520d32b5f149fa9d4a7c953547ba55f1708Jaikumar Ganesh        int messageRef, errorCode;
29559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        String ackPDU;
29569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
29579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        messageRef = p.readInt();
29589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        ackPDU = p.readString();
29597b3f5520d32b5f149fa9d4a7c953547ba55f1708Jaikumar Ganesh        errorCode = p.readInt();
29609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
29617b3f5520d32b5f149fa9d4a7c953547ba55f1708Jaikumar Ganesh        SmsResponse response = new SmsResponse(messageRef, ackPDU, errorCode);
29629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
29639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return response;
29649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
29659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
29669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
29679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private Object
2968094854091b63498f952f0a6c4bcedfdfefaf1cf7Jake Hamby    responseICC_IO(Parcel p) {
29699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int sw1, sw2;
29709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        byte data[] = null;
29719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Message ret;
2972767a662ecde33c3979bf02b793d392aca0403162Wink Saville
29739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sw1 = p.readInt();
29749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sw2 = p.readInt();
29759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
29769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        String s = p.readString();
29779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
29783b13b2c9d1ee6035996766d332ba8b85cc3bf3d2Wink Saville        if (RILJ_LOGV) riljLog("< iccIO: "
2979e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                + " 0x" + Integer.toHexString(sw1)
2980e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                + " 0x" + Integer.toHexString(sw2) + " "
2981e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                + s);
2982e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
2983767a662ecde33c3979bf02b793d392aca0403162Wink Saville        return new IccIoResult(sw1, sw2, s);
29849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
29859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
29869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private Object
2987767a662ecde33c3979bf02b793d392aca0403162Wink Saville    responseIccCardStatus(Parcel p) {
2988767a662ecde33c3979bf02b793d392aca0403162Wink Saville        IccCardApplication ca;
2989767a662ecde33c3979bf02b793d392aca0403162Wink Saville
2990767a662ecde33c3979bf02b793d392aca0403162Wink Saville        IccCardStatus status = new IccCardStatus();
2991cdadaad0e4e76a69eba144d3501cca9765cee80cJaikumar Ganesh        status.setCardState(p.readInt());
2992cdadaad0e4e76a69eba144d3501cca9765cee80cJaikumar Ganesh        status.setUniversalPinState(p.readInt());
2993cdadaad0e4e76a69eba144d3501cca9765cee80cJaikumar Ganesh        status.setGsmUmtsSubscriptionAppIndex(p.readInt());
2994cdadaad0e4e76a69eba144d3501cca9765cee80cJaikumar Ganesh        status.setCdmaSubscriptionAppIndex(p.readInt());
29955284090631e638b916d9a453212e9dc802656a67Wink Saville        status.setImsSubscriptionAppIndex(p.readInt());
2996cdadaad0e4e76a69eba144d3501cca9765cee80cJaikumar Ganesh        int numApplications = p.readInt();
2997767a662ecde33c3979bf02b793d392aca0403162Wink Saville
2998767a662ecde33c3979bf02b793d392aca0403162Wink Saville        // limit to maximum allowed applications
2999cdadaad0e4e76a69eba144d3501cca9765cee80cJaikumar Ganesh        if (numApplications > IccCardStatus.CARD_MAX_APPS) {
3000cdadaad0e4e76a69eba144d3501cca9765cee80cJaikumar Ganesh            numApplications = IccCardStatus.CARD_MAX_APPS;
30019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
3002cdadaad0e4e76a69eba144d3501cca9765cee80cJaikumar Ganesh        status.setNumApplications(numApplications);
30039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3004cdadaad0e4e76a69eba144d3501cca9765cee80cJaikumar Ganesh        for (int i = 0 ; i < numApplications ; i++) {
3005767a662ecde33c3979bf02b793d392aca0403162Wink Saville            ca = new IccCardApplication();
3006767a662ecde33c3979bf02b793d392aca0403162Wink Saville            ca.app_type       = ca.AppTypeFromRILInt(p.readInt());
3007767a662ecde33c3979bf02b793d392aca0403162Wink Saville            ca.app_state      = ca.AppStateFromRILInt(p.readInt());
3008767a662ecde33c3979bf02b793d392aca0403162Wink Saville            ca.perso_substate = ca.PersoSubstateFromRILInt(p.readInt());
3009767a662ecde33c3979bf02b793d392aca0403162Wink Saville            ca.aid            = p.readString();
3010767a662ecde33c3979bf02b793d392aca0403162Wink Saville            ca.app_label      = p.readString();
3011767a662ecde33c3979bf02b793d392aca0403162Wink Saville            ca.pin1_replaced  = p.readInt();
3012b0b24b3df50988d23f571b83d829fecc986ec497John Wang            ca.pin1           = ca.PinStateFromRILInt(p.readInt());
3013b0b24b3df50988d23f571b83d829fecc986ec497John Wang            ca.pin2           = ca.PinStateFromRILInt(p.readInt());
3014cdadaad0e4e76a69eba144d3501cca9765cee80cJaikumar Ganesh            status.addApplication(ca);
3015767a662ecde33c3979bf02b793d392aca0403162Wink Saville        }
3016cdadaad0e4e76a69eba144d3501cca9765cee80cJaikumar Ganesh        return status;
3017767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
30189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
30199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private Object
30208f241458051c8bd2a68b0e8b9fe0d0f326a0a56bAlex Yakavenka    responseSimRefresh(Parcel p) {
30218f241458051c8bd2a68b0e8b9fe0d0f326a0a56bAlex Yakavenka        IccRefreshResponse response = new IccRefreshResponse();
30228f241458051c8bd2a68b0e8b9fe0d0f326a0a56bAlex Yakavenka
30238f241458051c8bd2a68b0e8b9fe0d0f326a0a56bAlex Yakavenka        response.refreshResult = p.readInt();
30248f241458051c8bd2a68b0e8b9fe0d0f326a0a56bAlex Yakavenka        response.efId   = p.readInt();
30258f241458051c8bd2a68b0e8b9fe0d0f326a0a56bAlex Yakavenka        response.aid = p.readString();
30268f241458051c8bd2a68b0e8b9fe0d0f326a0a56bAlex Yakavenka        return response;
30278f241458051c8bd2a68b0e8b9fe0d0f326a0a56bAlex Yakavenka    }
30288f241458051c8bd2a68b0e8b9fe0d0f326a0a56bAlex Yakavenka
30298f241458051c8bd2a68b0e8b9fe0d0f326a0a56bAlex Yakavenka    private Object
3030767a662ecde33c3979bf02b793d392aca0403162Wink Saville    responseCallList(Parcel p) {
30319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int num;
3032767a662ecde33c3979bf02b793d392aca0403162Wink Saville        int voiceSettings;
30339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        ArrayList<DriverCall> response;
30349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        DriverCall dc;
30359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
30369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        num = p.readInt();
30379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        response = new ArrayList<DriverCall>(num);
30389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
30397c20c4607c4402589ce4800a0c49127876dbc6bdWink Saville        if (RILJ_LOGV) {
30407c20c4607c4402589ce4800a0c49127876dbc6bdWink Saville            riljLog("responseCallList: num=" + num +
30417c20c4607c4402589ce4800a0c49127876dbc6bdWink Saville                    " mEmergencyCallbackModeRegistrant=" + mEmergencyCallbackModeRegistrant +
30427c20c4607c4402589ce4800a0c49127876dbc6bdWink Saville                    " mTestingEmergencyCall=" + mTestingEmergencyCall.get());
30437c20c4607c4402589ce4800a0c49127876dbc6bdWink Saville        }
30449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        for (int i = 0 ; i < num ; i++) {
30459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dc = new DriverCall();
3046767a662ecde33c3979bf02b793d392aca0403162Wink Saville
30479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dc.state = DriverCall.stateFromCLCC(p.readInt());
30489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dc.index = p.readInt();
30499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dc.TOA = p.readInt();
30509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dc.isMpty = (0 != p.readInt());
30519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dc.isMT = (0 != p.readInt());
30529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dc.als = p.readInt();
3053767a662ecde33c3979bf02b793d392aca0403162Wink Saville            voiceSettings = p.readInt();
3054767a662ecde33c3979bf02b793d392aca0403162Wink Saville            dc.isVoice = (0 == voiceSettings) ? false : true;
305522ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville            dc.isVoicePrivacy = (0 != p.readInt());
30569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dc.number = p.readString();
3057a14f47f975064816df3008e66055d41ddb9d7353Wink Saville            int np = p.readInt();
3058a14f47f975064816df3008e66055d41ddb9d7353Wink Saville            dc.numberPresentation = DriverCall.presentationFromCLIP(np);
3059a14f47f975064816df3008e66055d41ddb9d7353Wink Saville            dc.name = p.readString();
3060a14f47f975064816df3008e66055d41ddb9d7353Wink Saville            dc.namePresentation = p.readInt();
30610fa1b24593bbe7972bfbc5290519359db8c4ade6Naveen Kalla            int uusInfoPresent = p.readInt();
30620fa1b24593bbe7972bfbc5290519359db8c4ade6Naveen Kalla            if (uusInfoPresent == 1) {
306324440cf8a9431291bdcaa77b418e6c4715932507Naveen Kalla                dc.uusInfo = new UUSInfo();
306424440cf8a9431291bdcaa77b418e6c4715932507Naveen Kalla                dc.uusInfo.setType(p.readInt());
306524440cf8a9431291bdcaa77b418e6c4715932507Naveen Kalla                dc.uusInfo.setDcs(p.readInt());
306624440cf8a9431291bdcaa77b418e6c4715932507Naveen Kalla                byte[] userData = p.createByteArray();
306724440cf8a9431291bdcaa77b418e6c4715932507Naveen Kalla                dc.uusInfo.setUserData(userData);
30685284090631e638b916d9a453212e9dc802656a67Wink Saville                riljLogv(String.format("Incoming UUS : type=%d, dcs=%d, length=%d",
306924440cf8a9431291bdcaa77b418e6c4715932507Naveen Kalla                                dc.uusInfo.getType(), dc.uusInfo.getDcs(),
307024440cf8a9431291bdcaa77b418e6c4715932507Naveen Kalla                                dc.uusInfo.getUserData().length));
30715284090631e638b916d9a453212e9dc802656a67Wink Saville                riljLogv("Incoming UUS : data (string)="
307224440cf8a9431291bdcaa77b418e6c4715932507Naveen Kalla                        + new String(dc.uusInfo.getUserData()));
30735284090631e638b916d9a453212e9dc802656a67Wink Saville                riljLogv("Incoming UUS : data (hex): "
307424440cf8a9431291bdcaa77b418e6c4715932507Naveen Kalla                        + IccUtils.bytesToHexString(dc.uusInfo.getUserData()));
307524440cf8a9431291bdcaa77b418e6c4715932507Naveen Kalla            } else {
30765284090631e638b916d9a453212e9dc802656a67Wink Saville                riljLogv("Incoming UUS : NOT present!");
30770fa1b24593bbe7972bfbc5290519359db8c4ade6Naveen Kalla            }
3078767a662ecde33c3979bf02b793d392aca0403162Wink Saville
307922ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville            // Make sure there's a leading + on addresses with a TOA of 145
308022ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville            dc.number = PhoneNumberUtils.stringFromStringAndTOA(dc.number, dc.TOA);
30819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
30829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            response.add(dc);
3083767a662ecde33c3979bf02b793d392aca0403162Wink Saville
308422ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville            if (dc.isVoicePrivacy) {
3085767a662ecde33c3979bf02b793d392aca0403162Wink Saville                mVoicePrivacyOnRegistrants.notifyRegistrants();
30865284090631e638b916d9a453212e9dc802656a67Wink Saville                riljLog("InCall VoicePrivacy is enabled");
3087767a662ecde33c3979bf02b793d392aca0403162Wink Saville            } else {
3088767a662ecde33c3979bf02b793d392aca0403162Wink Saville                mVoicePrivacyOffRegistrants.notifyRegistrants();
30895284090631e638b916d9a453212e9dc802656a67Wink Saville                riljLog("InCall VoicePrivacy is disabled");
3090767a662ecde33c3979bf02b793d392aca0403162Wink Saville            }
30919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
30929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
30939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Collections.sort(response);
30949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
30957c20c4607c4402589ce4800a0c49127876dbc6bdWink Saville        if ((num == 0) && mTestingEmergencyCall.getAndSet(false)) {
30967c20c4607c4402589ce4800a0c49127876dbc6bdWink Saville            if (mEmergencyCallbackModeRegistrant != null) {
30977c20c4607c4402589ce4800a0c49127876dbc6bdWink Saville                riljLog("responseCallList: call ended, testing emergency call," +
30987c20c4607c4402589ce4800a0c49127876dbc6bdWink Saville                            " notify ECM Registrants");
30997c20c4607c4402589ce4800a0c49127876dbc6bdWink Saville                mEmergencyCallbackModeRegistrant.notifyRegistrant();
31007c20c4607c4402589ce4800a0c49127876dbc6bdWink Saville            }
31017c20c4607c4402589ce4800a0c49127876dbc6bdWink Saville        }
31027c20c4607c4402589ce4800a0c49127876dbc6bdWink Saville
31039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return response;
31049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
31059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3106abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville    private DataCallState getDataCallState(Parcel p, int version) {
3107abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville        DataCallState dataCall = new DataCallState();
3108abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville
3109abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville        dataCall.version = version;
3110abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville        if (version < 5) {
3111abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville            dataCall.cid = p.readInt();
3112abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville            dataCall.active = p.readInt();
3113abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville            dataCall.type = p.readString();
3114abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville            String addresses = p.readString();
3115aa44b52ee07eb4937d23bb3c2464007a2eb3f50fWink Saville            if (!TextUtils.isEmpty(addresses)) {
3116abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville                dataCall.addresses = addresses.split(" ");
3117abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville            }
3118abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville        } else {
3119abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville            dataCall.status = p.readInt();
3120e0acd0842f2de9b2bf02d34c0ed90ca7a6ab30a9Kazuhiro Ondo            dataCall.suggestedRetryTime = p.readInt();
3121abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville            dataCall.cid = p.readInt();
3122abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville            dataCall.active = p.readInt();
3123abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville            dataCall.type = p.readString();
3124abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville            dataCall.ifname = p.readString();
3125aa44b52ee07eb4937d23bb3c2464007a2eb3f50fWink Saville            if ((dataCall.status == DataConnection.FailCause.NONE.getErrorCode()) &&
3126aa44b52ee07eb4937d23bb3c2464007a2eb3f50fWink Saville                    TextUtils.isEmpty(dataCall.ifname)) {
312770181e2a9f4366eb422dcfe35636e90090ebe942Wink Saville              throw new RuntimeException("getDataCallState, no ifname");
312870181e2a9f4366eb422dcfe35636e90090ebe942Wink Saville            }
3129abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville            String addresses = p.readString();
313070181e2a9f4366eb422dcfe35636e90090ebe942Wink Saville            if (!TextUtils.isEmpty(addresses)) {
3131abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville                dataCall.addresses = addresses.split(" ");
3132abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville            }
3133abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville            String dnses = p.readString();
313470181e2a9f4366eb422dcfe35636e90090ebe942Wink Saville            if (!TextUtils.isEmpty(dnses)) {
3135abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville                dataCall.dnses = dnses.split(" ");
3136abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville            }
31375284090631e638b916d9a453212e9dc802656a67Wink Saville            String gateways = p.readString();
31385284090631e638b916d9a453212e9dc802656a67Wink Saville            if (!TextUtils.isEmpty(gateways)) {
31395284090631e638b916d9a453212e9dc802656a67Wink Saville                dataCall.gateways = gateways.split(" ");
31405284090631e638b916d9a453212e9dc802656a67Wink Saville            }
3141abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville        }
3142abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville        return dataCall;
3143abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville    }
3144abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville
31459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private Object
3146767a662ecde33c3979bf02b793d392aca0403162Wink Saville    responseDataCallList(Parcel p) {
3147e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        ArrayList<DataCallState> response;
31489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3149abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville        int ver = p.readInt();
3150abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville        int num = p.readInt();
31515284090631e638b916d9a453212e9dc802656a67Wink Saville        riljLog("responseDataCallList ver=" + ver + " num=" + num);
31529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3153abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville        response = new ArrayList<DataCallState>(num);
31549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        for (int i = 0; i < num; i++) {
3155abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville            response.add(getDataCallState(p, ver));
3156abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville        }
31579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3158abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville        return response;
3159abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville    }
3160abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville
3161abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville    private Object
3162abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville    responseSetupDataCall(Parcel p) {
3163abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville        int ver = p.readInt();
3164abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville        int num = p.readInt();
31653b13b2c9d1ee6035996766d332ba8b85cc3bf3d2Wink Saville        if (RILJ_LOGV) riljLog("responseSetupDataCall ver=" + ver + " num=" + num);
31669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3167abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville        DataCallState dataCall;
3168abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville
3169abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville        if (ver < 5) {
3170abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville            dataCall = new DataCallState();
317170181e2a9f4366eb422dcfe35636e90090ebe942Wink Saville            dataCall.version = ver;
3172abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville            dataCall.cid = Integer.parseInt(p.readString());
3173abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville            dataCall.ifname = p.readString();
317470181e2a9f4366eb422dcfe35636e90090ebe942Wink Saville            if (TextUtils.isEmpty(dataCall.ifname)) {
3175abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville                throw new RuntimeException(
317670181e2a9f4366eb422dcfe35636e90090ebe942Wink Saville                        "RIL_REQUEST_SETUP_DATA_CALL response, no ifname");
3177abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville            }
3178abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville            String addresses = p.readString();
317970181e2a9f4366eb422dcfe35636e90090ebe942Wink Saville            if (!TextUtils.isEmpty(addresses)) {
318070181e2a9f4366eb422dcfe35636e90090ebe942Wink Saville              dataCall.addresses = addresses.split(" ");
318170181e2a9f4366eb422dcfe35636e90090ebe942Wink Saville            }
318270181e2a9f4366eb422dcfe35636e90090ebe942Wink Saville            if (num >= 4) {
318370181e2a9f4366eb422dcfe35636e90090ebe942Wink Saville                String dnses = p.readString();
31845284090631e638b916d9a453212e9dc802656a67Wink Saville                if (RILJ_LOGD) riljLog("responseSetupDataCall got dnses=" + dnses);
318570181e2a9f4366eb422dcfe35636e90090ebe942Wink Saville                if (!TextUtils.isEmpty(dnses)) {
318670181e2a9f4366eb422dcfe35636e90090ebe942Wink Saville                    dataCall.dnses = dnses.split(" ");
318770181e2a9f4366eb422dcfe35636e90090ebe942Wink Saville                }
3188abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville            }
31895284090631e638b916d9a453212e9dc802656a67Wink Saville            if (num >= 5) {
31905284090631e638b916d9a453212e9dc802656a67Wink Saville                String gateways = p.readString();
31915284090631e638b916d9a453212e9dc802656a67Wink Saville                if (RILJ_LOGD) riljLog("responseSetupDataCall got gateways=" + gateways);
31925284090631e638b916d9a453212e9dc802656a67Wink Saville                if (!TextUtils.isEmpty(gateways)) {
31935284090631e638b916d9a453212e9dc802656a67Wink Saville                    dataCall.gateways = gateways.split(" ");
31945284090631e638b916d9a453212e9dc802656a67Wink Saville                }
31955284090631e638b916d9a453212e9dc802656a67Wink Saville            }
3196abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville        } else {
3197abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville            if (num != 1) {
3198abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville                throw new RuntimeException(
3199abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville                        "RIL_REQUEST_SETUP_DATA_CALL response expecting 1 RIL_Data_Call_response_v5"
3200abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville                        + " got " + num);
3201abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville            }
3202abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville            dataCall = getDataCallState(p, ver);
32039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
32049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3205abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville        return dataCall;
32069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
32079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
32089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private Object
32093caa1bd1061df4029951e68d0a04d5e30928701fRobert Greenwalt    responseOperatorInfos(Parcel p) {
32109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        String strings[] = (String [])responseStrings(p);
32113caa1bd1061df4029951e68d0a04d5e30928701fRobert Greenwalt        ArrayList<OperatorInfo> ret;
32129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
32139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (strings.length % 4 != 0) {
32149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            throw new RuntimeException(
3215767a662ecde33c3979bf02b793d392aca0403162Wink Saville                "RIL_REQUEST_QUERY_AVAILABLE_NETWORKS: invalid response. Got "
32169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                + strings.length + " strings, expected multible of 4");
32179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
32189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
32193caa1bd1061df4029951e68d0a04d5e30928701fRobert Greenwalt        ret = new ArrayList<OperatorInfo>(strings.length / 4);
32209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
32219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        for (int i = 0 ; i < strings.length ; i += 4) {
32229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            ret.add (
32233caa1bd1061df4029951e68d0a04d5e30928701fRobert Greenwalt                new OperatorInfo(
32249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    strings[i+0],
32259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    strings[i+1],
32269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    strings[i+2],
32279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    strings[i+3]));
32289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
3229767a662ecde33c3979bf02b793d392aca0403162Wink Saville
32309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return ret;
32319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
32329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3233094854091b63498f952f0a6c4bcedfdfefaf1cf7Jake Hamby    private Object
3234094854091b63498f952f0a6c4bcedfdfefaf1cf7Jake Hamby    responseCellList(Parcel p) {
32359c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwang       int num, rssi;
32369c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwang       String location;
3237767a662ecde33c3979bf02b793d392aca0403162Wink Saville       ArrayList<NeighboringCellInfo> response;
3238767a662ecde33c3979bf02b793d392aca0403162Wink Saville       NeighboringCellInfo cell;
3239767a662ecde33c3979bf02b793d392aca0403162Wink Saville
3240767a662ecde33c3979bf02b793d392aca0403162Wink Saville       num = p.readInt();
32419c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwang       response = new ArrayList<NeighboringCellInfo>();
32429c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwang
32439c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwang       // Determine the radio access type
32449c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwang       String radioString = SystemProperties.get(
32459c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwang               TelephonyProperties.PROPERTY_DATA_NETWORK_TYPE, "unknown");
32469c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwang       int radioType;
32479c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwang       if (radioString.equals("GPRS")) {
32489c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwang           radioType = NETWORK_TYPE_GPRS;
32499c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwang       } else if (radioString.equals("EDGE")) {
32509c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwang           radioType = NETWORK_TYPE_EDGE;
32519c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwang       } else if (radioString.equals("UMTS")) {
32529c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwang           radioType = NETWORK_TYPE_UMTS;
32539c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwang       } else if (radioString.equals("HSDPA")) {
32549c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwang           radioType = NETWORK_TYPE_HSDPA;
32559c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwang       } else if (radioString.equals("HSUPA")) {
32569c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwang           radioType = NETWORK_TYPE_HSUPA;
32579c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwang       } else if (radioString.equals("HSPA")) {
32589c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwang           radioType = NETWORK_TYPE_HSPA;
32599c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwang       } else {
32609c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwang           radioType = NETWORK_TYPE_UNKNOWN;
3261767a662ecde33c3979bf02b793d392aca0403162Wink Saville       }
32622a34043d5578deb8d7f93830e13c4efc91eba583Jaikumar Ganesh
32639c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwang       // Interpret the location based on radio access type
32649c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwang       if (radioType != NETWORK_TYPE_UNKNOWN) {
32659c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwang           for (int i = 0 ; i < num ; i++) {
32669c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwang               rssi = p.readInt();
32679c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwang               location = p.readString();
32689c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwang               cell = new NeighboringCellInfo(rssi, location, radioType);
32699c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwang               response.add(cell);
32709c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwang           }
32719c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwang       }
32729c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwang       return response;
3273767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
3274767a662ecde33c3979bf02b793d392aca0403162Wink Saville
327505d69edc0ba9b016a1bd7cb89a03b24c5659bf8dWink Saville    private Object responseGetPreferredNetworkType(Parcel p) {
327605d69edc0ba9b016a1bd7cb89a03b24c5659bf8dWink Saville       int [] response = (int[]) responseInts(p);
327705d69edc0ba9b016a1bd7cb89a03b24c5659bf8dWink Saville
327805d69edc0ba9b016a1bd7cb89a03b24c5659bf8dWink Saville       if (response.length >= 1) {
327905d69edc0ba9b016a1bd7cb89a03b24c5659bf8dWink Saville           // Since this is the response for getPreferredNetworkType
328005d69edc0ba9b016a1bd7cb89a03b24c5659bf8dWink Saville           // we'll assume that it should be the value we want the
328105d69edc0ba9b016a1bd7cb89a03b24c5659bf8dWink Saville           // vendor ril to take if we reestablish a connection to it.
328205d69edc0ba9b016a1bd7cb89a03b24c5659bf8dWink Saville           mPreferredNetworkType = response[0];
328305d69edc0ba9b016a1bd7cb89a03b24c5659bf8dWink Saville       }
328405d69edc0ba9b016a1bd7cb89a03b24c5659bf8dWink Saville       return response;
328505d69edc0ba9b016a1bd7cb89a03b24c5659bf8dWink Saville    }
328605d69edc0ba9b016a1bd7cb89a03b24c5659bf8dWink Saville
3287e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang    private Object responseGmsBroadcastConfig(Parcel p) {
3288e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang        int num;
3289e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang        ArrayList<SmsBroadcastConfigInfo> response;
3290e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang        SmsBroadcastConfigInfo info;
3291e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang
3292e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang        num = p.readInt();
3293e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang        response = new ArrayList<SmsBroadcastConfigInfo>(num);
3294e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang
3295e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang        for (int i = 0; i < num; i++) {
3296e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang            int fromId = p.readInt();
3297e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang            int toId = p.readInt();
3298e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang            int fromScheme = p.readInt();
3299e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang            int toScheme = p.readInt();
3300e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang            boolean selected = (p.readInt() == 1);
3301e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang
3302e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang            info = new SmsBroadcastConfigInfo(fromId, toId, fromScheme,
3303e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang                    toScheme, selected);
3304e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang            response.add(info);
3305e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang        }
3306e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang        return response;
3307767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
33089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3309767a662ecde33c3979bf02b793d392aca0403162Wink Saville    private Object
3310e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang    responseCdmaBroadcastConfig(Parcel p) {
3311dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        int numServiceCategories;
3312767a662ecde33c3979bf02b793d392aca0403162Wink Saville        int response[];
33139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3314dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        numServiceCategories = p.readInt();
3315e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
3316dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        if (numServiceCategories == 0) {
33177188f946521d64ea21121939d2a4c279f33fe910Wink Saville            // TODO: The logic of providing default values should
33187188f946521d64ea21121939d2a4c279f33fe910Wink Saville            // not be done by this transport layer. And needs to
33197188f946521d64ea21121939d2a4c279f33fe910Wink Saville            // be done by the vendor ril or application logic.
3320dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville            int numInts;
3321dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville            numInts = CDMA_BROADCAST_SMS_NO_OF_SERVICE_CATEGORIES * CDMA_BSI_NO_OF_INTS_STRUCT + 1;
3322dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville            response = new int[numInts];
3323e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
332422ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville            // Faking a default record for all possible records.
332522ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville            response[0] = CDMA_BROADCAST_SMS_NO_OF_SERVICE_CATEGORIES;
3326dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville
3327dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville            // Loop over CDMA_BROADCAST_SMS_NO_OF_SERVICE_CATEGORIES set 'english' as
332822ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville            // default language and selection status to false for all.
3329dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville            for (int i = 1; i < numInts; i += CDMA_BSI_NO_OF_INTS_STRUCT ) {
3330dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville                response[i + 0] = i / CDMA_BSI_NO_OF_INTS_STRUCT;
3331dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville                response[i + 1] = 1;
3332dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville                response[i + 2] = 0;
3333dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville            }
3334dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        } else {
3335dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville            int numInts;
3336dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville            numInts = (numServiceCategories * CDMA_BSI_NO_OF_INTS_STRUCT) + 1;
3337dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville            response = new int[numInts];
3338dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville
3339dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville            response[0] = numServiceCategories;
3340dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville            for (int i = 1 ; i < numInts; i++) {
3341dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville                 response[i] = p.readInt();
3342dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville             }
3343e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        }
3344e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
3345e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        return response;
3346e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    }
3347e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
3348e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    private Object
3349dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    responseSignalStrength(Parcel p) {
33505284090631e638b916d9a453212e9dc802656a67Wink Saville        int numInts = 12;
3351dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        int response[];
3352e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
3353dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        /* TODO: Add SignalStrength class to match RIL_SignalStrength */
3354dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        response = new int[numInts];
3355dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        for (int i = 0 ; i < numInts ; i++) {
3356dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville            response[i] = p.readInt();
3357dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        }
3358e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
3359dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        return response;
3360dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    }
3361e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
336222ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville    private ArrayList<CdmaInformationRecords>
336322ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville    responseCdmaInformationRecord(Parcel p) {
336422ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville        int numberOfInfoRecs;
336522ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville        ArrayList<CdmaInformationRecords> response;
336622ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville
336722ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville        /**
336822ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville         * Loop through all of the information records unmarshalling them
336922ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville         * and converting them to Java Objects.
337022ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville         */
337122ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville        numberOfInfoRecs = p.readInt();
337222ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville        response = new ArrayList<CdmaInformationRecords>(numberOfInfoRecs);
3373dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville
3374dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        for (int i = 0; i < numberOfInfoRecs; i++) {
337522ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville            CdmaInformationRecords InfoRec = new CdmaInformationRecords(p);
337622ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville            response.add(InfoRec);
33779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
337822ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville
337922ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville        return response;
33809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
33819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3382e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    private Object
3383dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    responseCdmaCallWaiting(Parcel p) {
3384dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        CdmaCallWaitingNotification notification = new CdmaCallWaitingNotification();
3385e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
3386dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        notification.number = p.readString();
33873bd5b0154faa02e197cdc344b45d968aba43d726Anna Markova        notification.numberPresentation = notification.presentationFromCLIP(p.readInt());
3388dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        notification.name = p.readString();
3389dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        notification.namePresentation = notification.numberPresentation;
3390dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        notification.isPresent = p.readInt();
3391dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        notification.signalType = p.readInt();
3392dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        notification.alertPitch = p.readInt();
3393dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        notification.signal = p.readInt();
33945284090631e638b916d9a453212e9dc802656a67Wink Saville        notification.numberType = p.readInt();
33955284090631e638b916d9a453212e9dc802656a67Wink Saville        notification.numberPlan = p.readInt();
3396dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville
3397dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        return notification;
3398e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    }
3399e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
3400e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    private Object
3401e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    responseCallRing(Parcel p){
3402e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        char response[] = new char[4];
3403e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
3404e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        response[0] = (char) p.readInt();    // isPresent
3405e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        response[1] = (char) p.readInt();    // signalType
3406e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        response[2] = (char) p.readInt();    // alertPitch
3407e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        response[3] = (char) p.readInt();    // signal
3408e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
3409e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        return response;
3410e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    }
3411e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
341222ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville    private void
341322ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville    notifyRegistrantsCdmaInfoRec(CdmaInformationRecords infoRec) {
341422ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville        int response = RIL_UNSOL_CDMA_INFO_REC;
341522ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville        if (infoRec.record instanceof CdmaInformationRecords.CdmaDisplayInfoRec) {
341622ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville            if (mDisplayInfoRegistrants != null) {
341722ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville                if (RILJ_LOGD) unsljLogRet(response, infoRec.record);
341822ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville                mDisplayInfoRegistrants.notifyRegistrants(
341922ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville                        new AsyncResult (null, infoRec.record, null));
342022ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville            }
342122ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville        } else if (infoRec.record instanceof CdmaInformationRecords.CdmaSignalInfoRec) {
342222ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville            if (mSignalInfoRegistrants != null) {
342322ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville                if (RILJ_LOGD) unsljLogRet(response, infoRec.record);
342422ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville                mSignalInfoRegistrants.notifyRegistrants(
342522ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville                        new AsyncResult (null, infoRec.record, null));
342622ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville            }
342722ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville        } else if (infoRec.record instanceof CdmaInformationRecords.CdmaNumberInfoRec) {
342822ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville            if (mNumberInfoRegistrants != null) {
342922ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville                if (RILJ_LOGD) unsljLogRet(response, infoRec.record);
343022ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville                mNumberInfoRegistrants.notifyRegistrants(
343122ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville                        new AsyncResult (null, infoRec.record, null));
343222ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville            }
343322ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville        } else if (infoRec.record instanceof CdmaInformationRecords.CdmaRedirectingNumberInfoRec) {
343422ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville            if (mRedirNumInfoRegistrants != null) {
343522ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville                if (RILJ_LOGD) unsljLogRet(response, infoRec.record);
343622ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville                mRedirNumInfoRegistrants.notifyRegistrants(
343722ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville                        new AsyncResult (null, infoRec.record, null));
343822ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville            }
343922ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville        } else if (infoRec.record instanceof CdmaInformationRecords.CdmaLineControlInfoRec) {
344022ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville            if (mLineControlInfoRegistrants != null) {
344122ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville                if (RILJ_LOGD) unsljLogRet(response, infoRec.record);
344222ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville                mLineControlInfoRegistrants.notifyRegistrants(
344322ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville                        new AsyncResult (null, infoRec.record, null));
344422ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville            }
344522ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville        } else if (infoRec.record instanceof CdmaInformationRecords.CdmaT53ClirInfoRec) {
344622ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville            if (mT53ClirInfoRegistrants != null) {
344722ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville                if (RILJ_LOGD) unsljLogRet(response, infoRec.record);
344822ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville                mT53ClirInfoRegistrants.notifyRegistrants(
344922ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville                        new AsyncResult (null, infoRec.record, null));
345022ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville            }
345122ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville        } else if (infoRec.record instanceof CdmaInformationRecords.CdmaT53AudioControlInfoRec) {
345222ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville            if (mT53AudCntrlInfoRegistrants != null) {
345322ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville               if (RILJ_LOGD) unsljLogRet(response, infoRec.record);
345422ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville               mT53AudCntrlInfoRegistrants.notifyRegistrants(
345522ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville                       new AsyncResult (null, infoRec.record, null));
345622ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville            }
345722ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville        }
345822ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville    }
345922ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville
34609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    static String
3461767a662ecde33c3979bf02b793d392aca0403162Wink Saville    requestToString(int request) {
34629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
34639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project cat libs/telephony/ril_commands.h \
34649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project | egrep "^ *{RIL_" \
34659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project | sed -re 's/\{RIL_([^,]+),[^,]+,([^}]+).+/case RIL_\1: return "\1";/'
34669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project*/
34679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        switch(request) {
34689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_GET_SIM_STATUS: return "GET_SIM_STATUS";
34699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_ENTER_SIM_PIN: return "ENTER_SIM_PIN";
34709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_ENTER_SIM_PUK: return "ENTER_SIM_PUK";
34719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_ENTER_SIM_PIN2: return "ENTER_SIM_PIN2";
34729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_ENTER_SIM_PUK2: return "ENTER_SIM_PUK2";
34739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_CHANGE_SIM_PIN: return "CHANGE_SIM_PIN";
34749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_CHANGE_SIM_PIN2: return "CHANGE_SIM_PIN2";
34759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_ENTER_NETWORK_DEPERSONALIZATION: return "ENTER_NETWORK_DEPERSONALIZATION";
34769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_GET_CURRENT_CALLS: return "GET_CURRENT_CALLS";
34779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_DIAL: return "DIAL";
34789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_GET_IMSI: return "GET_IMSI";
34799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_HANGUP: return "HANGUP";
34809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_HANGUP_WAITING_OR_BACKGROUND: return "HANGUP_WAITING_OR_BACKGROUND";
34819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_HANGUP_FOREGROUND_RESUME_BACKGROUND: return "HANGUP_FOREGROUND_RESUME_BACKGROUND";
34829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_SWITCH_WAITING_OR_HOLDING_AND_ACTIVE: return "REQUEST_SWITCH_WAITING_OR_HOLDING_AND_ACTIVE";
34839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_CONFERENCE: return "CONFERENCE";
34849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_UDUB: return "UDUB";
34859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_LAST_CALL_FAIL_CAUSE: return "LAST_CALL_FAIL_CAUSE";
34869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_SIGNAL_STRENGTH: return "SIGNAL_STRENGTH";
34875284090631e638b916d9a453212e9dc802656a67Wink Saville            case RIL_REQUEST_VOICE_REGISTRATION_STATE: return "VOICE_REGISTRATION_STATE";
34885284090631e638b916d9a453212e9dc802656a67Wink Saville            case RIL_REQUEST_DATA_REGISTRATION_STATE: return "DATA_REGISTRATION_STATE";
34899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_OPERATOR: return "OPERATOR";
34909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_RADIO_POWER: return "RADIO_POWER";
34919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_DTMF: return "DTMF";
34929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_SEND_SMS: return "SEND_SMS";
34939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_SEND_SMS_EXPECT_MORE: return "SEND_SMS_EXPECT_MORE";
3494767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_SETUP_DATA_CALL: return "SETUP_DATA_CALL";
34959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_SIM_IO: return "SIM_IO";
34969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_SEND_USSD: return "SEND_USSD";
34979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_CANCEL_USSD: return "CANCEL_USSD";
34989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_GET_CLIR: return "GET_CLIR";
34999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_SET_CLIR: return "SET_CLIR";
35009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_QUERY_CALL_FORWARD_STATUS: return "QUERY_CALL_FORWARD_STATUS";
35019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_SET_CALL_FORWARD: return "SET_CALL_FORWARD";
35029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_QUERY_CALL_WAITING: return "QUERY_CALL_WAITING";
35039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_SET_CALL_WAITING: return "SET_CALL_WAITING";
35049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_SMS_ACKNOWLEDGE: return "SMS_ACKNOWLEDGE";
35059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_GET_IMEI: return "GET_IMEI";
35069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_GET_IMEISV: return "GET_IMEISV";
35079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_ANSWER: return "ANSWER";
3508767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_DEACTIVATE_DATA_CALL: return "DEACTIVATE_DATA_CALL";
35099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_QUERY_FACILITY_LOCK: return "QUERY_FACILITY_LOCK";
35109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_SET_FACILITY_LOCK: return "SET_FACILITY_LOCK";
35119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_CHANGE_BARRING_PASSWORD: return "CHANGE_BARRING_PASSWORD";
35129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_QUERY_NETWORK_SELECTION_MODE: return "QUERY_NETWORK_SELECTION_MODE";
35139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_SET_NETWORK_SELECTION_AUTOMATIC: return "SET_NETWORK_SELECTION_AUTOMATIC";
35149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_SET_NETWORK_SELECTION_MANUAL: return "SET_NETWORK_SELECTION_MANUAL";
35159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_QUERY_AVAILABLE_NETWORKS : return "QUERY_AVAILABLE_NETWORKS ";
35169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_DTMF_START: return "DTMF_START";
35179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_DTMF_STOP: return "DTMF_STOP";
35189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_BASEBAND_VERSION: return "BASEBAND_VERSION";
35199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_SEPARATE_CONNECTION: return "SEPARATE_CONNECTION";
35209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_SET_MUTE: return "SET_MUTE";
35219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_GET_MUTE: return "GET_MUTE";
35229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_QUERY_CLIP: return "QUERY_CLIP";
3523767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_LAST_DATA_CALL_FAIL_CAUSE: return "LAST_DATA_CALL_FAIL_CAUSE";
3524767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_DATA_CALL_LIST: return "DATA_CALL_LIST";
35259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_RESET_RADIO: return "RESET_RADIO";
35269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_OEM_HOOK_RAW: return "OEM_HOOK_RAW";
35279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_OEM_HOOK_STRINGS: return "OEM_HOOK_STRINGS";
35289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_SCREEN_STATE: return "SCREEN_STATE";
35299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_SET_SUPP_SVC_NOTIFICATION: return "SET_SUPP_SVC_NOTIFICATION";
35309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_WRITE_SMS_TO_SIM: return "WRITE_SMS_TO_SIM";
35319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_DELETE_SMS_ON_SIM: return "DELETE_SMS_ON_SIM";
35329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_SET_BAND_MODE: return "SET_BAND_MODE";
35339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_QUERY_AVAILABLE_BAND_MODE: return "QUERY_AVAILABLE_BAND_MODE";
35349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_STK_GET_PROFILE: return "REQUEST_STK_GET_PROFILE";
35359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_STK_SET_PROFILE: return "REQUEST_STK_SET_PROFILE";
35369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_STK_SEND_ENVELOPE_COMMAND: return "REQUEST_STK_SEND_ENVELOPE_COMMAND";
35379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_STK_SEND_TERMINAL_RESPONSE: return "REQUEST_STK_SEND_TERMINAL_RESPONSE";
35389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_STK_HANDLE_CALL_SETUP_REQUESTED_FROM_SIM: return "REQUEST_STK_HANDLE_CALL_SETUP_REQUESTED_FROM_SIM";
35399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_EXPLICIT_CALL_TRANSFER: return "REQUEST_EXPLICIT_CALL_TRANSFER";
35409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE: return "REQUEST_SET_PREFERRED_NETWORK_TYPE";
35419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_GET_PREFERRED_NETWORK_TYPE: return "REQUEST_GET_PREFERRED_NETWORK_TYPE";
35429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_GET_NEIGHBORING_CELL_IDS: return "REQUEST_GET_NEIGHBORING_CELL_IDS";
35439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_SET_LOCATION_UPDATES: return "REQUEST_SET_LOCATION_UPDATES";
35445284090631e638b916d9a453212e9dc802656a67Wink Saville            case RIL_REQUEST_CDMA_SET_SUBSCRIPTION_SOURCE: return "RIL_REQUEST_CDMA_SET_SUBSCRIPTION_SOURCE";
3545767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_CDMA_SET_ROAMING_PREFERENCE: return "RIL_REQUEST_CDMA_SET_ROAMING_PREFERENCE";
3546767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_CDMA_QUERY_ROAMING_PREFERENCE: return "RIL_REQUEST_CDMA_QUERY_ROAMING_PREFERENCE";
3547767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_SET_TTY_MODE: return "RIL_REQUEST_SET_TTY_MODE";
3548767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_QUERY_TTY_MODE: return "RIL_REQUEST_QUERY_TTY_MODE";
3549767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_CDMA_SET_PREFERRED_VOICE_PRIVACY_MODE: return "RIL_REQUEST_CDMA_SET_PREFERRED_VOICE_PRIVACY_MODE";
3550767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_CDMA_QUERY_PREFERRED_VOICE_PRIVACY_MODE: return "RIL_REQUEST_CDMA_QUERY_PREFERRED_VOICE_PRIVACY_MODE";
3551767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_CDMA_FLASH: return "RIL_REQUEST_CDMA_FLASH";
3552767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_CDMA_BURST_DTMF: return "RIL_REQUEST_CDMA_BURST_DTMF";
3553767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_CDMA_SEND_SMS: return "RIL_REQUEST_CDMA_SEND_SMS";
3554767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_CDMA_SMS_ACKNOWLEDGE: return "RIL_REQUEST_CDMA_SMS_ACKNOWLEDGE";
3555e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang            case RIL_REQUEST_GSM_GET_BROADCAST_CONFIG: return "RIL_REQUEST_GSM_GET_BROADCAST_CONFIG";
3556e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang            case RIL_REQUEST_GSM_SET_BROADCAST_CONFIG: return "RIL_REQUEST_GSM_SET_BROADCAST_CONFIG";
3557767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_CDMA_GET_BROADCAST_CONFIG: return "RIL_REQUEST_CDMA_GET_BROADCAST_CONFIG";
3558767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_CDMA_SET_BROADCAST_CONFIG: return "RIL_REQUEST_CDMA_SET_BROADCAST_CONFIG";
3559e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang            case RIL_REQUEST_GSM_BROADCAST_ACTIVATION: return "RIL_REQUEST_GSM_BROADCAST_ACTIVATION";
356027d074e0efbdabd40f00eca41169ea225c05fcbeNaveen Kalla            case RIL_REQUEST_CDMA_VALIDATE_AND_WRITE_AKEY: return "RIL_REQUEST_CDMA_VALIDATE_AND_WRITE_AKEY";
3561767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_CDMA_BROADCAST_ACTIVATION: return "RIL_REQUEST_CDMA_BROADCAST_ACTIVATION";
3562767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_CDMA_SUBSCRIPTION: return "RIL_REQUEST_CDMA_SUBSCRIPTION";
3563767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_CDMA_WRITE_SMS_TO_RUIM: return "RIL_REQUEST_CDMA_WRITE_SMS_TO_RUIM";
3564767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_CDMA_DELETE_SMS_ON_RUIM: return "RIL_REQUEST_CDMA_DELETE_SMS_ON_RUIM";
3565767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_DEVICE_IDENTITY: return "RIL_REQUEST_DEVICE_IDENTITY";
3566c06ce125408696fd49c7fa9e1189ecb61804007ajsh            case RIL_REQUEST_GET_SMSC_ADDRESS: return "RIL_REQUEST_GET_SMSC_ADDRESS";
3567c06ce125408696fd49c7fa9e1189ecb61804007ajsh            case RIL_REQUEST_SET_SMSC_ADDRESS: return "RIL_REQUEST_SET_SMSC_ADDRESS";
3568e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville            case RIL_REQUEST_EXIT_EMERGENCY_CALLBACK_MODE: return "REQUEST_EXIT_EMERGENCY_CALLBACK_MODE";
35699c9151eccd27e824fdb7c266bff78c10038e87fejsh            case RIL_REQUEST_REPORT_SMS_MEMORY_STATUS: return "RIL_REQUEST_REPORT_SMS_MEMORY_STATUS";
3570e14af0e26eb11d0a9e4620a75aadcc4b40885aa8Wink Saville            case RIL_REQUEST_REPORT_STK_SERVICE_IS_RUNNING: return "RIL_REQUEST_REPORT_STK_SERVICE_IS_RUNNING";
35715284090631e638b916d9a453212e9dc802656a67Wink Saville            case RIL_REQUEST_CDMA_GET_SUBSCRIPTION_SOURCE: return "RIL_REQUEST_CDMA_GET_SUBSCRIPTION_SOURCE";
3572463f22114587344c96460179069a08d7381fbfd6Jake Hamby            case RIL_REQUEST_ISIM_AUTHENTICATION: return "RIL_REQUEST_ISIM_AUTHENTICATION";
3573094854091b63498f952f0a6c4bcedfdfefaf1cf7Jake Hamby            case RIL_REQUEST_ACKNOWLEDGE_INCOMING_GSM_SMS_WITH_PDU: return "RIL_REQUEST_ACKNOWLEDGE_INCOMING_GSM_SMS_WITH_PDU";
3574094854091b63498f952f0a6c4bcedfdfefaf1cf7Jake Hamby            case RIL_REQUEST_STK_SEND_ENVELOPE_WITH_STATUS: return "RIL_REQUEST_STK_SEND_ENVELOPE_WITH_STATUS";
3575fc2cbe9b46ab17a401dc50f8e0dbb677ed012299Naveen Kalla            case RIL_REQUEST_VOICE_RADIO_TECH: return "RIL_REQUEST_VOICE_RADIO_TECH";
35769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            default: return "<unknown request>";
35779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
35789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
35799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
35809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    static String
35819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    responseToString(int request)
35829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    {
35839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
35849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project cat libs/telephony/ril_unsol_commands.h \
35859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project | egrep "^ *{RIL_" \
35869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project | sed -re 's/\{RIL_([^,]+),[^,]+,([^}]+).+/case RIL_\1: return "\1";/'
35879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project*/
35889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        switch(request) {
35899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_RESPONSE_RADIO_STATE_CHANGED: return "UNSOL_RESPONSE_RADIO_STATE_CHANGED";
35909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED: return "UNSOL_RESPONSE_CALL_STATE_CHANGED";
35915284090631e638b916d9a453212e9dc802656a67Wink Saville            case RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED: return "UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED";
35929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_RESPONSE_NEW_SMS: return "UNSOL_RESPONSE_NEW_SMS";
35939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_RESPONSE_NEW_SMS_STATUS_REPORT: return "UNSOL_RESPONSE_NEW_SMS_STATUS_REPORT";
35949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_RESPONSE_NEW_SMS_ON_SIM: return "UNSOL_RESPONSE_NEW_SMS_ON_SIM";
35959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_ON_USSD: return "UNSOL_ON_USSD";
35969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_ON_USSD_REQUEST: return "UNSOL_ON_USSD_REQUEST";
35979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_NITZ_TIME_RECEIVED: return "UNSOL_NITZ_TIME_RECEIVED";
35989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_SIGNAL_STRENGTH: return "UNSOL_SIGNAL_STRENGTH";
3599767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_UNSOL_DATA_CALL_LIST_CHANGED: return "UNSOL_DATA_CALL_LIST_CHANGED";
36009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_SUPP_SVC_NOTIFICATION: return "UNSOL_SUPP_SVC_NOTIFICATION";
36019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_STK_SESSION_END: return "UNSOL_STK_SESSION_END";
36029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_STK_PROACTIVE_COMMAND: return "UNSOL_STK_PROACTIVE_COMMAND";
36039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_STK_EVENT_NOTIFY: return "UNSOL_STK_EVENT_NOTIFY";
36049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_STK_CALL_SETUP: return "UNSOL_STK_CALL_SETUP";
36059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_SIM_SMS_STORAGE_FULL: return "UNSOL_SIM_SMS_STORAGE_FULL";
36069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_SIM_REFRESH: return "UNSOL_SIM_REFRESH";
36079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_CALL_RING: return "UNSOL_CALL_RING";
3608e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville            case RIL_UNSOL_RESPONSE_SIM_STATUS_CHANGED: return "UNSOL_RESPONSE_SIM_STATUS_CHANGED";
3609e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville            case RIL_UNSOL_RESPONSE_CDMA_NEW_SMS: return "UNSOL_RESPONSE_CDMA_NEW_SMS";
3610e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville            case RIL_UNSOL_RESPONSE_NEW_BROADCAST_SMS: return "UNSOL_RESPONSE_NEW_BROADCAST_SMS";
3611e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville            case RIL_UNSOL_CDMA_RUIM_SMS_STORAGE_FULL: return "UNSOL_CDMA_RUIM_SMS_STORAGE_FULL";
3612dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville            case RIL_UNSOL_RESTRICTED_STATE_CHANGED: return "UNSOL_RESTRICTED_STATE_CHANGED";
3613e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville            case RIL_UNSOL_ENTER_EMERGENCY_CALLBACK_MODE: return "UNSOL_ENTER_EMERGENCY_CALLBACK_MODE";
3614e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville            case RIL_UNSOL_CDMA_CALL_WAITING: return "UNSOL_CDMA_CALL_WAITING";
3615e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville            case RIL_UNSOL_CDMA_OTA_PROVISION_STATUS: return "UNSOL_CDMA_OTA_PROVISION_STATUS";
3616e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville            case RIL_UNSOL_CDMA_INFO_REC: return "UNSOL_CDMA_INFO_REC";
3617dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville            case RIL_UNSOL_OEM_HOOK_RAW: return "UNSOL_OEM_HOOK_RAW";
3618bbd754b8fe7563234b5c4c8d1425a7417337f2f2John Wang            case RIL_UNSOL_RINGBACK_TONE: return "UNSOL_RINGBACK_TONG";
36191ccc41ed938ff005ae3d621292580a90601242caJohn Wang            case RIL_UNSOL_RESEND_INCALL_MUTE: return "UNSOL_RESEND_INCALL_MUTE";
362066958c73674673274bf08266b60ad3c1791c9179Wink Saville            case RIL_UNSOL_CDMA_SUBSCRIPTION_SOURCE_CHANGED: return "CDMA_SUBSCRIPTION_SOURCE_CHANGED";
36215284090631e638b916d9a453212e9dc802656a67Wink Saville            case RIL_UNSOl_CDMA_PRL_CHANGED: return "UNSOL_CDMA_PRL_CHANGED";
36225284090631e638b916d9a453212e9dc802656a67Wink Saville            case RIL_UNSOL_EXIT_EMERGENCY_CALLBACK_MODE: return "UNSOL_EXIT_EMERGENCY_CALLBACK_MODE";
36231dd2ada5cf7d0c95afb4731d082473f34ee7f433Wink Saville            case RIL_UNSOL_RIL_CONNECTED: return "UNSOL_RIL_CONNECTED";
3624fc2cbe9b46ab17a401dc50f8e0dbb677ed012299Naveen Kalla            case RIL_UNSOL_VOICE_RADIO_TECH_CHANGED: return "UNSOL_VOICE_RADIO_TECH_CHANGED";
36259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            default: return "<unknown reponse>";
36269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
36279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
36289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
36299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private void riljLog(String msg) {
36309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Log.d(LOG_TAG, msg);
36319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
36329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
36339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private void riljLogv(String msg) {
36349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Log.v(LOG_TAG, msg);
36359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
36369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
36379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private void unsljLog(int response) {
36389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        riljLog("[UNSL]< " + responseToString(response));
36399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
36409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
36419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private void unsljLogMore(int response, String more) {
36429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        riljLog("[UNSL]< " + responseToString(response) + " " + more);
36439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
36449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
36459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private void unsljLogRet(int response, Object ret) {
36469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        riljLog("[UNSL]< " + responseToString(response) + " " + retToString(response, ret));
36479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
36489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
36499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private void unsljLogvRet(int response, Object ret) {
36509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        riljLogv("[UNSL]< " + responseToString(response) + " " + retToString(response, ret));
36519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
36529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
36532a34043d5578deb8d7f93830e13c4efc91eba583Jaikumar Ganesh
3654767a662ecde33c3979bf02b793d392aca0403162Wink Saville    // ***** Methods for CDMA support
3655767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void
3656767a662ecde33c3979bf02b793d392aca0403162Wink Saville    getDeviceIdentity(Message response) {
3657767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_DEVICE_IDENTITY, response);
3658767a662ecde33c3979bf02b793d392aca0403162Wink Saville
3659767a662ecde33c3979bf02b793d392aca0403162Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
3660767a662ecde33c3979bf02b793d392aca0403162Wink Saville
3661767a662ecde33c3979bf02b793d392aca0403162Wink Saville        send(rr);
3662767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
3663767a662ecde33c3979bf02b793d392aca0403162Wink Saville
3664767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void
3665767a662ecde33c3979bf02b793d392aca0403162Wink Saville    getCDMASubscription(Message response) {
3666767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CDMA_SUBSCRIPTION, response);
3667767a662ecde33c3979bf02b793d392aca0403162Wink Saville
3668767a662ecde33c3979bf02b793d392aca0403162Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
3669767a662ecde33c3979bf02b793d392aca0403162Wink Saville
3670767a662ecde33c3979bf02b793d392aca0403162Wink Saville        send(rr);
3671767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
3672767a662ecde33c3979bf02b793d392aca0403162Wink Saville
36735e9270bfd566c32a60dfeb34435a158eb4ceb9a9Wink Saville    @Override
36745e9270bfd566c32a60dfeb34435a158eb4ceb9a9Wink Saville    public void setPhoneType(int phoneType) { // Called by CDMAPhone and GSMPhone constructor
36755e9270bfd566c32a60dfeb34435a158eb4ceb9a9Wink Saville        if (RILJ_LOGD) riljLog("setPhoneType=" + phoneType + " old value=" + mPhoneType);
3676767a662ecde33c3979bf02b793d392aca0403162Wink Saville        mPhoneType = phoneType;
3677767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
3678767a662ecde33c3979bf02b793d392aca0403162Wink Saville
3679767a662ecde33c3979bf02b793d392aca0403162Wink Saville    /**
3680767a662ecde33c3979bf02b793d392aca0403162Wink Saville     * {@inheritDoc}
3681767a662ecde33c3979bf02b793d392aca0403162Wink Saville     */
3682767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void queryCdmaRoamingPreference(Message response) {
3683767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr = RILRequest.obtain(
3684767a662ecde33c3979bf02b793d392aca0403162Wink Saville                RILConstants.RIL_REQUEST_CDMA_QUERY_ROAMING_PREFERENCE, response);
3685767a662ecde33c3979bf02b793d392aca0403162Wink Saville
3686767a662ecde33c3979bf02b793d392aca0403162Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
3687767a662ecde33c3979bf02b793d392aca0403162Wink Saville
3688767a662ecde33c3979bf02b793d392aca0403162Wink Saville        send(rr);
3689767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
3690767a662ecde33c3979bf02b793d392aca0403162Wink Saville
3691767a662ecde33c3979bf02b793d392aca0403162Wink Saville    /**
3692767a662ecde33c3979bf02b793d392aca0403162Wink Saville     * {@inheritDoc}
3693767a662ecde33c3979bf02b793d392aca0403162Wink Saville     */
3694767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void setCdmaRoamingPreference(int cdmaRoamingType, Message response) {
3695767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr = RILRequest.obtain(
3696767a662ecde33c3979bf02b793d392aca0403162Wink Saville                RILConstants.RIL_REQUEST_CDMA_SET_ROAMING_PREFERENCE, response);
3697767a662ecde33c3979bf02b793d392aca0403162Wink Saville
3698767a662ecde33c3979bf02b793d392aca0403162Wink Saville        rr.mp.writeInt(1);
3699767a662ecde33c3979bf02b793d392aca0403162Wink Saville        rr.mp.writeInt(cdmaRoamingType);
3700767a662ecde33c3979bf02b793d392aca0403162Wink Saville
3701767a662ecde33c3979bf02b793d392aca0403162Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
3702767a662ecde33c3979bf02b793d392aca0403162Wink Saville                + " : " + cdmaRoamingType);
3703767a662ecde33c3979bf02b793d392aca0403162Wink Saville
3704767a662ecde33c3979bf02b793d392aca0403162Wink Saville        send(rr);
3705767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
3706767a662ecde33c3979bf02b793d392aca0403162Wink Saville
3707767a662ecde33c3979bf02b793d392aca0403162Wink Saville    /**
3708767a662ecde33c3979bf02b793d392aca0403162Wink Saville     * {@inheritDoc}
3709767a662ecde33c3979bf02b793d392aca0403162Wink Saville     */
37105284090631e638b916d9a453212e9dc802656a67Wink Saville    public void setCdmaSubscriptionSource(int cdmaSubscription , Message response) {
3711767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr = RILRequest.obtain(
37125284090631e638b916d9a453212e9dc802656a67Wink Saville                RILConstants.RIL_REQUEST_CDMA_SET_SUBSCRIPTION_SOURCE, response);
3713767a662ecde33c3979bf02b793d392aca0403162Wink Saville
3714767a662ecde33c3979bf02b793d392aca0403162Wink Saville        rr.mp.writeInt(1);
3715767a662ecde33c3979bf02b793d392aca0403162Wink Saville        rr.mp.writeInt(cdmaSubscription);
3716767a662ecde33c3979bf02b793d392aca0403162Wink Saville
3717767a662ecde33c3979bf02b793d392aca0403162Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
3718767a662ecde33c3979bf02b793d392aca0403162Wink Saville                + " : " + cdmaSubscription);
3719767a662ecde33c3979bf02b793d392aca0403162Wink Saville
3720767a662ecde33c3979bf02b793d392aca0403162Wink Saville        send(rr);
3721767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
3722767a662ecde33c3979bf02b793d392aca0403162Wink Saville
3723767a662ecde33c3979bf02b793d392aca0403162Wink Saville    /**
3724767a662ecde33c3979bf02b793d392aca0403162Wink Saville     * {@inheritDoc}
3725767a662ecde33c3979bf02b793d392aca0403162Wink Saville     */
3726d31fdf05659bcd87fb8b989931f540f5e739fb22Wink Saville    @Override
3727d31fdf05659bcd87fb8b989931f540f5e739fb22Wink Saville    public void getCdmaSubscriptionSource(Message response) {
37285284090631e638b916d9a453212e9dc802656a67Wink Saville        RILRequest rr = RILRequest.obtain(
37295284090631e638b916d9a453212e9dc802656a67Wink Saville                RILConstants.RIL_REQUEST_CDMA_GET_SUBSCRIPTION_SOURCE, response);
37305284090631e638b916d9a453212e9dc802656a67Wink Saville
3731d31fdf05659bcd87fb8b989931f540f5e739fb22Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
37325284090631e638b916d9a453212e9dc802656a67Wink Saville
37335284090631e638b916d9a453212e9dc802656a67Wink Saville        send(rr);
37345284090631e638b916d9a453212e9dc802656a67Wink Saville    }
37355284090631e638b916d9a453212e9dc802656a67Wink Saville
37365284090631e638b916d9a453212e9dc802656a67Wink Saville    /**
37375284090631e638b916d9a453212e9dc802656a67Wink Saville     * {@inheritDoc}
37385284090631e638b916d9a453212e9dc802656a67Wink Saville     */
3739e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    public void queryTTYMode(Message response) {
3740767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr = RILRequest.obtain(
3741767a662ecde33c3979bf02b793d392aca0403162Wink Saville                RILConstants.RIL_REQUEST_QUERY_TTY_MODE, response);
3742767a662ecde33c3979bf02b793d392aca0403162Wink Saville
37432e896830f83d3398b9dac51ac0e9ad803a5bacdbNaveen Kalla        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
37442e896830f83d3398b9dac51ac0e9ad803a5bacdbNaveen Kalla
3745767a662ecde33c3979bf02b793d392aca0403162Wink Saville        send(rr);
3746767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
3747767a662ecde33c3979bf02b793d392aca0403162Wink Saville
3748767a662ecde33c3979bf02b793d392aca0403162Wink Saville    /**
3749767a662ecde33c3979bf02b793d392aca0403162Wink Saville     * {@inheritDoc}
3750767a662ecde33c3979bf02b793d392aca0403162Wink Saville     */
3751e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    public void setTTYMode(int ttyMode, Message response) {
3752767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr = RILRequest.obtain(
3753767a662ecde33c3979bf02b793d392aca0403162Wink Saville                RILConstants.RIL_REQUEST_SET_TTY_MODE, response);
3754767a662ecde33c3979bf02b793d392aca0403162Wink Saville
3755767a662ecde33c3979bf02b793d392aca0403162Wink Saville        rr.mp.writeInt(1);
3756e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        rr.mp.writeInt(ttyMode);
3757767a662ecde33c3979bf02b793d392aca0403162Wink Saville
37582e896830f83d3398b9dac51ac0e9ad803a5bacdbNaveen Kalla        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
37592e896830f83d3398b9dac51ac0e9ad803a5bacdbNaveen Kalla                + " : " + ttyMode);
37602e896830f83d3398b9dac51ac0e9ad803a5bacdbNaveen Kalla
3761767a662ecde33c3979bf02b793d392aca0403162Wink Saville        send(rr);
3762767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
3763767a662ecde33c3979bf02b793d392aca0403162Wink Saville
3764767a662ecde33c3979bf02b793d392aca0403162Wink Saville    /**
3765767a662ecde33c3979bf02b793d392aca0403162Wink Saville     * {@inheritDoc}
3766767a662ecde33c3979bf02b793d392aca0403162Wink Saville     */
3767767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void
3768767a662ecde33c3979bf02b793d392aca0403162Wink Saville    sendCDMAFeatureCode(String FeatureCode, Message response) {
3769767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CDMA_FLASH, response);
3770767a662ecde33c3979bf02b793d392aca0403162Wink Saville
3771767a662ecde33c3979bf02b793d392aca0403162Wink Saville        rr.mp.writeString(FeatureCode);
3772767a662ecde33c3979bf02b793d392aca0403162Wink Saville
3773767a662ecde33c3979bf02b793d392aca0403162Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
3774767a662ecde33c3979bf02b793d392aca0403162Wink Saville                + " : " + FeatureCode);
3775767a662ecde33c3979bf02b793d392aca0403162Wink Saville
3776767a662ecde33c3979bf02b793d392aca0403162Wink Saville        send(rr);
3777767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
3778767a662ecde33c3979bf02b793d392aca0403162Wink Saville
3779767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void getCdmaBroadcastConfig(Message response) {
3780767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CDMA_GET_BROADCAST_CONFIG, response);
3781767a662ecde33c3979bf02b793d392aca0403162Wink Saville
3782767a662ecde33c3979bf02b793d392aca0403162Wink Saville        send(rr);
3783767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
3784767a662ecde33c3979bf02b793d392aca0403162Wink Saville
3785f315238a2b07c7e84f6ade800e504f520d262e66Wink Saville    // TODO: Change the configValuesArray to a RIL_BroadcastSMSConfig
3786767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void setCdmaBroadcastConfig(int[] configValuesArray, Message response) {
3787767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CDMA_SET_BROADCAST_CONFIG, response);
3788767a662ecde33c3979bf02b793d392aca0403162Wink Saville
3789e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        for(int i = 0; i < configValuesArray.length; i++) {
3790767a662ecde33c3979bf02b793d392aca0403162Wink Saville            rr.mp.writeInt(configValuesArray[i]);
3791767a662ecde33c3979bf02b793d392aca0403162Wink Saville        }
3792767a662ecde33c3979bf02b793d392aca0403162Wink Saville
3793e66b5c43cb2d0aece7f4a636a2368a9c66c46cf5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
3794e66b5c43cb2d0aece7f4a636a2368a9c66c46cf5Wink Saville
3795767a662ecde33c3979bf02b793d392aca0403162Wink Saville        send(rr);
3796767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
3797767a662ecde33c3979bf02b793d392aca0403162Wink Saville
3798e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang    public void setCdmaBroadcastActivation(boolean activate, Message response) {
3799767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CDMA_BROADCAST_ACTIVATION, response);
3800767a662ecde33c3979bf02b793d392aca0403162Wink Saville
3801767a662ecde33c3979bf02b793d392aca0403162Wink Saville        rr.mp.writeInt(1);
3802e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang        rr.mp.writeInt(activate ? 0 :1);
3803767a662ecde33c3979bf02b793d392aca0403162Wink Saville
3804e66b5c43cb2d0aece7f4a636a2368a9c66c46cf5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
3805e66b5c43cb2d0aece7f4a636a2368a9c66c46cf5Wink Saville
3806767a662ecde33c3979bf02b793d392aca0403162Wink Saville        send(rr);
3807767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
3808e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
3809e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    /**
3810e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     * {@inheritDoc}
3811e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     */
3812e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    public void exitEmergencyCallbackMode(Message response) {
3813dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_EXIT_EMERGENCY_CALLBACK_MODE, response);
3814e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
3815e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
3816e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
3817e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        send(rr);
3818e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    }
38195284090631e638b916d9a453212e9dc802656a67Wink Saville
3820463f22114587344c96460179069a08d7381fbfd6Jake Hamby    public void requestIsimAuthentication(String nonce, Message response) {
3821463f22114587344c96460179069a08d7381fbfd6Jake Hamby        RILRequest rr = RILRequest.obtain(RIL_REQUEST_ISIM_AUTHENTICATION, response);
3822463f22114587344c96460179069a08d7381fbfd6Jake Hamby
3823463f22114587344c96460179069a08d7381fbfd6Jake Hamby        rr.mp.writeString(nonce);
3824463f22114587344c96460179069a08d7381fbfd6Jake Hamby
3825463f22114587344c96460179069a08d7381fbfd6Jake Hamby        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
3826463f22114587344c96460179069a08d7381fbfd6Jake Hamby
3827463f22114587344c96460179069a08d7381fbfd6Jake Hamby        send(rr);
3828463f22114587344c96460179069a08d7381fbfd6Jake Hamby    }
38297c20c4607c4402589ce4800a0c49127876dbc6bdWink Saville
38307c20c4607c4402589ce4800a0c49127876dbc6bdWink Saville    /* (non-Javadoc)
38317c20c4607c4402589ce4800a0c49127876dbc6bdWink Saville     * @see com.android.internal.telephony.BaseCommands#testingEmergencyCall()
38327c20c4607c4402589ce4800a0c49127876dbc6bdWink Saville     */
38337c20c4607c4402589ce4800a0c49127876dbc6bdWink Saville    @Override
38347c20c4607c4402589ce4800a0c49127876dbc6bdWink Saville    public void testingEmergencyCall() {
38357c20c4607c4402589ce4800a0c49127876dbc6bdWink Saville        if (RILJ_LOGD) riljLog("testingEmergencyCall");
38367c20c4607c4402589ce4800a0c49127876dbc6bdWink Saville        mTestingEmergencyCall.set(true);
38377c20c4607c4402589ce4800a0c49127876dbc6bdWink Saville    }
383830ccade7f9432b8212807b9ddc8cc69a4a8fc854Wink Saville
383930ccade7f9432b8212807b9ddc8cc69a4a8fc854Wink Saville    public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
384030ccade7f9432b8212807b9ddc8cc69a4a8fc854Wink Saville        pw.println("RIL:");
384130ccade7f9432b8212807b9ddc8cc69a4a8fc854Wink Saville        pw.println(" mSocket=" + mSocket);
384230ccade7f9432b8212807b9ddc8cc69a4a8fc854Wink Saville        pw.println(" mSenderThread=" + mSenderThread);
384330ccade7f9432b8212807b9ddc8cc69a4a8fc854Wink Saville        pw.println(" mSender=" + mSender);
384430ccade7f9432b8212807b9ddc8cc69a4a8fc854Wink Saville        pw.println(" mReceiverThread=" + mReceiverThread);
384530ccade7f9432b8212807b9ddc8cc69a4a8fc854Wink Saville        pw.println(" mReceiver=" + mReceiver);
384630ccade7f9432b8212807b9ddc8cc69a4a8fc854Wink Saville        pw.println(" mWakeLock=" + mWakeLock);
384730ccade7f9432b8212807b9ddc8cc69a4a8fc854Wink Saville        pw.println(" mWakeLockTimeout=" + mWakeLockTimeout);
384830ccade7f9432b8212807b9ddc8cc69a4a8fc854Wink Saville        synchronized (mRequestsList) {
384930ccade7f9432b8212807b9ddc8cc69a4a8fc854Wink Saville          pw.println(" mRequestMessagesPending=" + mRequestMessagesPending);
385030ccade7f9432b8212807b9ddc8cc69a4a8fc854Wink Saville          pw.println(" mRequestMessagesWaiting=" + mRequestMessagesWaiting);
385130ccade7f9432b8212807b9ddc8cc69a4a8fc854Wink Saville            int count = mRequestsList.size();
385230ccade7f9432b8212807b9ddc8cc69a4a8fc854Wink Saville            pw.println(" mRequestList count=" + count);
385330ccade7f9432b8212807b9ddc8cc69a4a8fc854Wink Saville            for (int i = 0; i < count; i++) {
385430ccade7f9432b8212807b9ddc8cc69a4a8fc854Wink Saville                RILRequest rr = mRequestsList.get(i);
385530ccade7f9432b8212807b9ddc8cc69a4a8fc854Wink Saville                pw.println("  [" + rr.mSerial + "] " + requestToString(rr.mRequest));
385630ccade7f9432b8212807b9ddc8cc69a4a8fc854Wink Saville            }
385730ccade7f9432b8212807b9ddc8cc69a4a8fc854Wink Saville        }
385830ccade7f9432b8212807b9ddc8cc69a4a8fc854Wink Saville        pw.println(" mLastNITZTimeInfo=" + mLastNITZTimeInfo);
385930ccade7f9432b8212807b9ddc8cc69a4a8fc854Wink Saville        pw.println(" mTestingEmergencyCall=" + mTestingEmergencyCall.get());
386030ccade7f9432b8212807b9ddc8cc69a4a8fc854Wink Saville    }
38619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
3862