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;
55767a662ecde33c3979bf02b793d392aca0403162Wink Saville
56767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport java.io.ByteArrayInputStream;
57767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport java.io.DataInputStream;
58767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport java.io.IOException;
592a34043d5578deb8d7f93830e13c4efc91eba583Jaikumar Ganeshimport java.io.InputStream;
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.ArrayList;
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.Collections;
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@hide}
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
66767a662ecde33c3979bf02b793d392aca0403162Wink Savilleclass RILRequest {
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    static final String LOG_TAG = "RILJ";
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //***** Class Variables
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    static int sNextSerial = 0;
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    static Object sSerialMonitor = new Object();
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private static Object sPoolSync = new Object();
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private static RILRequest sPool = null;
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private static int sPoolSize = 0;
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private static final int MAX_POOL_SIZE = 4;
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //***** Instance Variables
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int mSerial;
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int mRequest;
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    Message mResult;
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    Parcel mp;
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    RILRequest mNext;
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Retrieves a new RILRequest instance from the pool.
86767a662ecde33c3979bf02b793d392aca0403162Wink Saville     *
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param request RIL_REQUEST_*
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param result sent when operation completes
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return a RILRequest instance from the pool.
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    static RILRequest obtain(int request, Message result) {
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        RILRequest rr = null;
93767a662ecde33c3979bf02b793d392aca0403162Wink Saville
949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        synchronized(sPoolSync) {
959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (sPool != null) {
969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                rr = sPool;
979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                sPool = rr.mNext;
989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                rr.mNext = null;
999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                sPoolSize--;
1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
102767a662ecde33c3979bf02b793d392aca0403162Wink Saville
1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (rr == null) {
1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            rr = new RILRequest();
1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        synchronized(sSerialMonitor) {
1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            rr.mSerial = sNextSerial++;
1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mRequest = request;
1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mResult = result;
1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp = Parcel.obtain();
1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (result != null && result.getTarget() == null) {
1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            throw new NullPointerException("Message target must not be null");
1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // first elements in any RIL Parcel
1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(request);
1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(rr.mSerial);
1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return rr;
1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns a RILRequest instance to the pool.
127767a662ecde33c3979bf02b793d392aca0403162Wink Saville     *
1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Note: This should only be called once per use.
1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void release() {
1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        synchronized (sPoolSync) {
1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (sPoolSize < MAX_POOL_SIZE) {
1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                this.mNext = sPool;
1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                sPool = this;
1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                sPoolSize++;
1363ffccab78666d8960c10a00239de6bb40f4fb1b6Johannes Carlsson                mResult = null;
1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
141767a662ecde33c3979bf02b793d392aca0403162Wink Saville    private RILRequest() {
1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    static void
145767a662ecde33c3979bf02b793d392aca0403162Wink Saville    resetSerial() {
1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        synchronized(sSerialMonitor) {
1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            sNextSerial = 0;
1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    String
152767a662ecde33c3979bf02b793d392aca0403162Wink Saville    serialString() {
1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        //Cheesy way to do %04d
1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        StringBuilder sb = new StringBuilder(8);
1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        String sn;
1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sn = Integer.toString(mSerial);
1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        //sb.append("J[");
1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sb.append('[');
1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        for (int i = 0, s = sn.length() ; i < 4 - s; i++) {
1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            sb.append('0');
1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sb.append(sn);
1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sb.append(']');
1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return sb.toString();
1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void
17103228fa8f950dfee3f679d280f98d040dea397dcjohnwang    onError(int error, Object ret) {
1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        CommandException ex;
1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        ex = CommandException.fromRilErrno(error);
1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RIL.RILJ_LOGD) Log.d(LOG_TAG, serialString() + "< "
177767a662ecde33c3979bf02b793d392aca0403162Wink Saville            + RIL.requestToString(mRequest)
1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            + " error: " + ex);
1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (mResult != null) {
18103228fa8f950dfee3f679d280f98d040dea397dcjohnwang            AsyncResult.forMessage(mResult, ret, ex);
1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mResult.sendToTarget();
1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (mp != null) {
1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.recycle();
1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp = null;
1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * RIL implementation of the CommandsInterface.
1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * FIXME public only for testing
196767a662ecde33c3979bf02b793d392aca0403162Wink Saville *
1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@hide}
1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
199767a662ecde33c3979bf02b793d392aca0403162Wink Savillepublic final class RIL extends BaseCommands implements CommandsInterface {
2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    static final String LOG_TAG = "RILJ";
2011d1a373f5c7637de545ad815ad21aa325aaa970fWink Saville    static final boolean RILJ_LOGD = true;
2021d1a373f5c7637de545ad815ad21aa325aaa970fWink Saville    static final boolean RILJ_LOGV = false; // STOP SHIP if true
2030e57e73575f27682b57b8ba615215d1bc2669b3aWink Saville
2040e57e73575f27682b57b8ba615215d1bc2669b3aWink Saville    /**
2050e57e73575f27682b57b8ba615215d1bc2669b3aWink Saville     * Wake lock timeout should be longer than the longest timeout in
2060e57e73575f27682b57b8ba615215d1bc2669b3aWink Saville     * the vendor ril.
2070e57e73575f27682b57b8ba615215d1bc2669b3aWink Saville     */
208b260fe75c18e5cb4823654e031ea5a66e0eecdbbWink Saville    private static final int DEFAULT_WAKE_LOCK_TIMEOUT = 60000;
2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //***** Instance Variables
2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    LocalSocket mSocket;
213767a662ecde33c3979bf02b793d392aca0403162Wink Saville    HandlerThread mSenderThread;
2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    RILSender mSender;
2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    Thread mReceiverThread;
2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    RILReceiver mReceiver;
2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    WakeLock mWakeLock;
2180e57e73575f27682b57b8ba615215d1bc2669b3aWink Saville    int mWakeLockTimeout;
219696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang    // The number of requests pending to be sent out, it increases before calling
220696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang    // EVENT_SEND and decreases while handling EVENT_SEND. It gets cleared while
221696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang    // WAKE_LOCK_TIMEOUT occurs.
2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int mRequestMessagesPending;
223696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang    // The number of requests sent out but waiting for response. It increases while
224696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang    // sending request and decreases while handling response. It should match
225696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang    // mRequestList.size() unless there are requests no replied while
226696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang    // WAKE_LOCK_TIMEOUT occurs.
227696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang    int mRequestMessagesWaiting;
228767a662ecde33c3979bf02b793d392aca0403162Wink Saville
2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //I'd rather this be LinkedList or something
2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ArrayList<RILRequest> mRequestsList = new ArrayList<RILRequest>();
231767a662ecde33c3979bf02b793d392aca0403162Wink Saville
2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    Object     mLastNITZTimeInfo;
2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //***** Events
2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    static final int EVENT_SEND                 = 1;
2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    static final int EVENT_WAKE_LOCK_TIMEOUT    = 2;
2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //***** Constants
2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // match with constant in ril.cpp
2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    static final int RIL_MAX_COMMAND_BYTES = (8 * 1024);
2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    static final int RESPONSE_SOLICITED = 0;
2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    static final int RESPONSE_UNSOLICITED = 1;
2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    static final String SOCKET_NAME_RIL = "rild";
2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    static final int SOCKET_OPEN_RETRY_MILLIS = 4 * 1000;
2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
250e66b5c43cb2d0aece7f4a636a2368a9c66c46cf5Wink Saville    // The number of the required config values for broadcast SMS stored in the C struct
251e66b5c43cb2d0aece7f4a636a2368a9c66c46cf5Wink Saville    // RIL_CDMA_BroadcastServiceInfo
252e66b5c43cb2d0aece7f4a636a2368a9c66c46cf5Wink Saville    private static final int CDMA_BSI_NO_OF_INTS_STRUCT = 3;
253e66b5c43cb2d0aece7f4a636a2368a9c66c46cf5Wink Saville
254e66b5c43cb2d0aece7f4a636a2368a9c66c46cf5Wink Saville    private static final int CDMA_BROADCAST_SMS_NO_OF_SERVICE_CATEGORIES = 31;
2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {
257e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        @Override
2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public void onReceive(Context context, Intent intent) {
2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                sendScreenState(true);
2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            } else if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                sendScreenState(false);
2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            } else {
2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Log.w(LOG_TAG, "RIL received unexpected Intent: " + intent.getAction());
2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    };
268767a662ecde33c3979bf02b793d392aca0403162Wink Saville
269767a662ecde33c3979bf02b793d392aca0403162Wink Saville    class RILSender extends Handler implements Runnable {
2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public RILSender(Looper looper) {
2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            super(looper);
2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
273767a662ecde33c3979bf02b793d392aca0403162Wink Saville
2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // Only allocated once
2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        byte[] dataLength = new byte[4];
2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        //***** Runnable implementation
2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public void
279767a662ecde33c3979bf02b793d392aca0403162Wink Saville        run() {
2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            //setup if needed
2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
284145ff609de3206b585819ef974fab20cdc2d9f5eJake Hamby        //***** Handler implementation
285145ff609de3206b585819ef974fab20cdc2d9f5eJake Hamby        @Override public void
286767a662ecde33c3979bf02b793d392aca0403162Wink Saville        handleMessage(Message msg) {
2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            RILRequest rr = (RILRequest)(msg.obj);
2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            RILRequest req = null;
289767a662ecde33c3979bf02b793d392aca0403162Wink Saville
2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            switch (msg.what) {
2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                case EVENT_SEND:
2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    /**
2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                     * mRequestMessagePending++ already happened for every
2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                     * EVENT_SEND, thus we must make sure
2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                     * mRequestMessagePending-- happens once and only once
2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                     */
2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    boolean alreadySubtracted = false;
2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    try {
2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        LocalSocket s;
3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        s = mSocket;
3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        if (s == null) {
30403228fa8f950dfee3f679d280f98d040dea397dcjohnwang                            rr.onError(RADIO_NOT_AVAILABLE, null);
3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            rr.release();
306696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                            if (mRequestMessagesPending > 0)
307696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                                mRequestMessagesPending--;
3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            alreadySubtracted = true;
3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            return;
3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        }
3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        synchronized (mRequestsList) {
3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            mRequestsList.add(rr);
314696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                            mRequestMessagesWaiting++;
3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        }
3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
317696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                        if (mRequestMessagesPending > 0)
318696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                            mRequestMessagesPending--;
3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        alreadySubtracted = true;
3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        byte[] data;
3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        data = rr.mp.marshall();
3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        rr.mp.recycle();
3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        rr.mp = null;
3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        if (data.length > RIL_MAX_COMMAND_BYTES) {
3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            throw new RuntimeException(
329767a662ecde33c3979bf02b793d392aca0403162Wink Saville                                    "Parcel larger than max bytes allowed! "
3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                                          + data.length);
3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        }
3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        // parcel length in big endian
3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        dataLength[0] = dataLength[1] = 0;
3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        dataLength[2] = (byte)((data.length >> 8) & 0xff);
3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        dataLength[3] = (byte)((data.length) & 0xff);
3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        //Log.v(LOG_TAG, "writing packet: " + data.length + " bytes");
3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
340767a662ecde33c3979bf02b793d392aca0403162Wink Saville                        s.getOutputStream().write(dataLength);
3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        s.getOutputStream().write(data);
3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    } catch (IOException ex) {
3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        Log.e(LOG_TAG, "IOException", ex);
3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        req = findAndRemoveRequestFromList(rr.mSerial);
3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        // make sure this request has not already been handled,
3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        // eg, if RILReceiver cleared the list.
3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        if (req != null || !alreadySubtracted) {
34803228fa8f950dfee3f679d280f98d040dea397dcjohnwang                            rr.onError(RADIO_NOT_AVAILABLE, null);
3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            rr.release();
3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        }
3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    } catch (RuntimeException exc) {
3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        Log.e(LOG_TAG, "Uncaught exception ", exc);
3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        req = findAndRemoveRequestFromList(rr.mSerial);
3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        // make sure this request has not already been handled,
3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        // eg, if RILReceiver cleared the list.
3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        if (req != null || !alreadySubtracted) {
35703228fa8f950dfee3f679d280f98d040dea397dcjohnwang                            rr.onError(GENERIC_FAILURE, null);
3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            rr.release();
3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        }
36060bb9c9a81bcd766d3e79f765ac22c7c38492409Anshul Jain                    } finally {
36160bb9c9a81bcd766d3e79f765ac22c7c38492409Anshul Jain                        // Note: We are "Done" only if there are no outstanding
36260bb9c9a81bcd766d3e79f765ac22c7c38492409Anshul Jain                        // requests or replies. Thus this code path will only release
36360bb9c9a81bcd766d3e79f765ac22c7c38492409Anshul Jain                        // the wake lock on errors.
36460bb9c9a81bcd766d3e79f765ac22c7c38492409Anshul Jain                        releaseWakeLockIfDone();
3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    }
3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
367696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                    if (!alreadySubtracted && mRequestMessagesPending > 0) {
3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        mRequestMessagesPending--;
3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    }
3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    break;
3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                case EVENT_WAKE_LOCK_TIMEOUT:
3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    // Haven't heard back from the last request.  Assume we're
3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    // not getting a response and  release the wake lock.
3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    synchronized (mWakeLock) {
3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        if (mWakeLock.isHeld()) {
37800d520b66caeef722281b76d30c0e1294070713dJohn Wang                            // The timer of WAKE_LOCK_TIMEOUT is reset with each
37900d520b66caeef722281b76d30c0e1294070713dJohn Wang                            // new send request. So when WAKE_LOCK_TIMEOUT occurs
38000d520b66caeef722281b76d30c0e1294070713dJohn Wang                            // all requests in mRequestList already waited at
38100d520b66caeef722281b76d30c0e1294070713dJohn Wang                            // least DEFAULT_WAKE_LOCK_TIMEOUT but no response.
382696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                            // Reset mRequestMessagesWaiting to enable
383696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                            // releaseWakeLockIfDone().
38400d520b66caeef722281b76d30c0e1294070713dJohn Wang                            //
385696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                            // Note: Keep mRequestList so that delayed response
386696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                            // can still be handled when response finally comes.
387696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                            if (mRequestMessagesWaiting != 0) {
388696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                                Log.d(LOG_TAG, "NOTE: mReqWaiting is NOT 0 but"
389696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                                        + mRequestMessagesWaiting + " at TIMEOUT, reset!"
390696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                                        + " There still msg waitng for response");
391696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang
392696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                                mRequestMessagesWaiting = 0;
393696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang
394696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                                if (RILJ_LOGD) {
395696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                                    synchronized (mRequestsList) {
396696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                                        int count = mRequestsList.size();
397696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                                        Log.d(LOG_TAG, "WAKE_LOCK_TIMEOUT " +
398696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                                                " mRequestList=" + count);
399696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang
400696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                                        for (int i = 0; i < count; i++) {
401696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                                            rr = mRequestsList.get(i);
402696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                                            Log.d(LOG_TAG, i + ": [" + rr.mSerial + "] "
403696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                                                    + requestToString(rr.mRequest));
404696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                                        }
405696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                                    }
406696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                                }
407696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                            }
408696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                            // mRequestMessagesPending shows how many
409696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                            // requests are waiting to be sent (and before
410696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                            // to be added in request list) since star the
411696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                            // WAKE_LOCK_TIMEOUT timer. Since WAKE_LOCK_TIMEOUT
412696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                            // is the expected time to get response, all requests
413696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                            // should already sent out (i.e.
414696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                            // mRequestMessagesPending is 0 )while TIMEOUT occurs.
41500d520b66caeef722281b76d30c0e1294070713dJohn Wang                            if (mRequestMessagesPending != 0) {
416696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                                Log.e(LOG_TAG, "ERROR: mReqPending is NOT 0 but"
417696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                                        + mRequestMessagesPending + " at TIMEOUT, reset!");
418696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                                mRequestMessagesPending = 0;
419696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang
4209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            }
4219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            mWakeLock.release();
4229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        }
4239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    }
4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    break;
4259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
4269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
4279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
4309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Reads in a single RIL message off the wire. A RIL message consists
4319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * of a 4-byte little-endian length and a subsequent series of bytes.
4329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The final message (length header omitted) is read into
4339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <code>buffer</code> and the length of the final message (less header)
4349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * is returned. A return value of -1 indicates end-of-stream.
4359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
4369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param is non-null; Stream to read from
4379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param buffer Buffer to fill in. Must be as large as maximum
4389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * message size, or an ArrayOutOfBounds exception will be thrown.
4399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Length of message less header, or -1 on end of stream.
4409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @throws IOException
4419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
4429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private static int readRilMessage(InputStream is, byte[] buffer)
443767a662ecde33c3979bf02b793d392aca0403162Wink Saville            throws IOException {
4449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int countRead;
4459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int offset;
4469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int remaining;
4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int messageLength;
4489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // First, read in the length of the message
4509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        offset = 0;
4519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        remaining = 4;
4529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        do {
4539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            countRead = is.read(buffer, offset, remaining);
4549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (countRead < 0 ) {
4569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Log.e(LOG_TAG, "Hit EOS reading message length");
4579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return -1;
4589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
4599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            offset += countRead;
4619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            remaining -= countRead;
4629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } while (remaining > 0);
4639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        messageLength = ((buffer[0] & 0xff) << 24)
4659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                | ((buffer[1] & 0xff) << 16)
4669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                | ((buffer[2] & 0xff) << 8)
4679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                | (buffer[3] & 0xff);
4689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // Then, re-use the buffer and read in the message itself
4709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        offset = 0;
4719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        remaining = messageLength;
4729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        do {
4739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            countRead = is.read(buffer, offset, remaining);
4749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (countRead < 0 ) {
4769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Log.e(LOG_TAG, "Hit EOS reading message.  messageLength=" + messageLength
4779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        + " remaining=" + remaining);
4789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return -1;
4799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
4809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            offset += countRead;
4829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            remaining -= countRead;
4839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } while (remaining > 0);
4849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return messageLength;
4869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
488767a662ecde33c3979bf02b793d392aca0403162Wink Saville    class RILReceiver implements Runnable {
4899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        byte[] buffer;
4909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
491767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILReceiver() {
4929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            buffer = new byte[RIL_MAX_COMMAND_BYTES];
4939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
4949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public void
496767a662ecde33c3979bf02b793d392aca0403162Wink Saville        run() {
4979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int retryCount = 0;
498767a662ecde33c3979bf02b793d392aca0403162Wink Saville
4999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            try {for (;;) {
5009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                LocalSocket s = null;
5019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                LocalSocketAddress l;
5029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                try {
5049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    s = new LocalSocket();
5059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    l = new LocalSocketAddress(SOCKET_NAME_RIL,
5069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            LocalSocketAddress.Namespace.RESERVED);
5079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    s.connect(l);
5089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                } catch (IOException ex){
5099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    try {
5109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        if (s != null) {
5119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            s.close();
5129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        }
5139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    } catch (IOException ex2) {
5149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        //ignore failure to close after failure to connect
5159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    }
516767a662ecde33c3979bf02b793d392aca0403162Wink Saville
5179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    // don't print an error message after the the first time
5189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    // or after the 8th time
5199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    if (retryCount == 8) {
521767a662ecde33c3979bf02b793d392aca0403162Wink Saville                        Log.e (LOG_TAG,
5229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            "Couldn't find '" + SOCKET_NAME_RIL
5239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            + "' socket after " + retryCount
5249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            + " times, continuing to retry silently");
5259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    } else if (retryCount > 0 && retryCount < 8) {
526767a662ecde33c3979bf02b793d392aca0403162Wink Saville                        Log.i (LOG_TAG,
5279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            "Couldn't find '" + SOCKET_NAME_RIL
5289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            + "' socket; retrying after timeout");
5299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    }
5309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    try {
532767a662ecde33c3979bf02b793d392aca0403162Wink Saville                        Thread.sleep(SOCKET_OPEN_RETRY_MILLIS);
5339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    } catch (InterruptedException er) {
5349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    }
5359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    retryCount++;
5379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    continue;
5389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
5399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                retryCount = 0;
5419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mSocket = s;
5439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Log.i(LOG_TAG, "Connected to '" + SOCKET_NAME_RIL + "' socket");
5449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                int length = 0;
5469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                try {
5479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    InputStream is = mSocket.getInputStream();
548767a662ecde33c3979bf02b793d392aca0403162Wink Saville
5499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    for (;;) {
5509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        Parcel p;
5519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        length = readRilMessage(is, buffer);
5539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        if (length < 0) {
5559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            // End-of-stream reached
5569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            break;
5579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        }
5589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        p = Parcel.obtain();
5609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        p.unmarshall(buffer, 0, length);
5619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        p.setDataPosition(0);
5629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        //Log.v(LOG_TAG, "Read packet: " + length + " bytes");
5649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        processResponse(p);
5669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        p.recycle();
5679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    }
5689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                } catch (java.io.IOException ex) {
5699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    Log.i(LOG_TAG, "'" + SOCKET_NAME_RIL + "' socket closed",
5709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                          ex);
5719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                } catch (Throwable tr) {
5722a34043d5578deb8d7f93830e13c4efc91eba583Jaikumar Ganesh                    Log.e(LOG_TAG, "Uncaught exception read length=" + length +
5739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        "Exception:" + tr.toString());
5749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
5759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Log.i(LOG_TAG, "Disconnected from '" + SOCKET_NAME_RIL
5779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                      + "' socket");
5789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                setRadioState (RadioState.RADIO_UNAVAILABLE);
580767a662ecde33c3979bf02b793d392aca0403162Wink Saville
5819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                try {
582767a662ecde33c3979bf02b793d392aca0403162Wink Saville                    mSocket.close();
5839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                } catch (IOException ex) {
5849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
5859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mSocket = null;
5879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                RILRequest.resetSerial();
5889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                // Clear request list on close
59000d520b66caeef722281b76d30c0e1294070713dJohn Wang                clearRequestsList(RADIO_NOT_AVAILABLE, false);
5919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }} catch (Throwable tr) {
5929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Log.e(LOG_TAG,"Uncaught exception", tr);
5939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
5941dd2ada5cf7d0c95afb4731d082473f34ee7f433Wink Saville
5951dd2ada5cf7d0c95afb4731d082473f34ee7f433Wink Saville            /* We're disconnected so we don't know the ril version */
5961dd2ada5cf7d0c95afb4731d082473f34ee7f433Wink Saville            notifyRegistrantsRilConnectionChanged(-1);
5979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
5989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
5999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
602767a662ecde33c3979bf02b793d392aca0403162Wink Saville    //***** Constructors
603767a662ecde33c3979bf02b793d392aca0403162Wink Saville
60405d69edc0ba9b016a1bd7cb89a03b24c5659bf8dWink Saville    public RIL(Context context, int preferredNetworkType, int cdmaSubscription) {
6059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        super(context);
6065e9270bfd566c32a60dfeb34435a158eb4ceb9a9Wink Saville        if (RILJ_LOGD) {
60705d69edc0ba9b016a1bd7cb89a03b24c5659bf8dWink Saville            riljLog("RIL(context, preferredNetworkType=" + preferredNetworkType +
6085e9270bfd566c32a60dfeb34435a158eb4ceb9a9Wink Saville                    " cdmaSubscription=" + cdmaSubscription + ")");
6095e9270bfd566c32a60dfeb34435a158eb4ceb9a9Wink Saville        }
610767a662ecde33c3979bf02b793d392aca0403162Wink Saville        mCdmaSubscription  = cdmaSubscription;
61105d69edc0ba9b016a1bd7cb89a03b24c5659bf8dWink Saville        mPreferredNetworkType = preferredNetworkType;
6125e9270bfd566c32a60dfeb34435a158eb4ceb9a9Wink Saville        mPhoneType = RILConstants.NO_PHONE;
6139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
615767a662ecde33c3979bf02b793d392aca0403162Wink Saville        mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, LOG_TAG);
6169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mWakeLock.setReferenceCounted(false);
6170e57e73575f27682b57b8ba615215d1bc2669b3aWink Saville        mWakeLockTimeout = SystemProperties.getInt(TelephonyProperties.PROPERTY_WAKE_LOCK_TIMEOUT,
6180e57e73575f27682b57b8ba615215d1bc2669b3aWink Saville                DEFAULT_WAKE_LOCK_TIMEOUT);
6199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mRequestMessagesPending = 0;
620696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang        mRequestMessagesWaiting = 0;
6219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mSenderThread = new HandlerThread("RILSender");
6239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mSenderThread.start();
6242a34043d5578deb8d7f93830e13c4efc91eba583Jaikumar Ganesh
6259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Looper looper = mSenderThread.getLooper();
6269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mSender = new RILSender(looper);
6272a34043d5578deb8d7f93830e13c4efc91eba583Jaikumar Ganesh
6289b2886e24301e5d4e7052ec4a6eaff273d3f516cRobert Greenwalt        ConnectivityManager cm = (ConnectivityManager)context.getSystemService(
6299b2886e24301e5d4e7052ec4a6eaff273d3f516cRobert Greenwalt                Context.CONNECTIVITY_SERVICE);
6309b2886e24301e5d4e7052ec4a6eaff273d3f516cRobert Greenwalt        if (cm.isNetworkSupported(ConnectivityManager.TYPE_MOBILE) == false) {
6310dc8618dc70a6aa23ea030eeda1ea9934b4a04c6Wink Saville            riljLog("Not starting RILReceiver: wifi-only");
6320dc8618dc70a6aa23ea030eeda1ea9934b4a04c6Wink Saville        } else {
6330dc8618dc70a6aa23ea030eeda1ea9934b4a04c6Wink Saville            riljLog("Starting RILReceiver");
6340dc8618dc70a6aa23ea030eeda1ea9934b4a04c6Wink Saville            mReceiver = new RILReceiver();
6350dc8618dc70a6aa23ea030eeda1ea9934b4a04c6Wink Saville            mReceiverThread = new Thread(mReceiver, "RILReceiver");
6360dc8618dc70a6aa23ea030eeda1ea9934b4a04c6Wink Saville            mReceiverThread.start();
6370dc8618dc70a6aa23ea030eeda1ea9934b4a04c6Wink Saville
6380dc8618dc70a6aa23ea030eeda1ea9934b4a04c6Wink Saville            IntentFilter filter = new IntentFilter();
6390dc8618dc70a6aa23ea030eeda1ea9934b4a04c6Wink Saville            filter.addAction(Intent.ACTION_SCREEN_ON);
6400dc8618dc70a6aa23ea030eeda1ea9934b4a04c6Wink Saville            filter.addAction(Intent.ACTION_SCREEN_OFF);
6410dc8618dc70a6aa23ea030eeda1ea9934b4a04c6Wink Saville            context.registerReceiver(mIntentReceiver, filter);
6420dc8618dc70a6aa23ea030eeda1ea9934b4a04c6Wink Saville        }
6439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
6449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //***** CommandsInterface implementation
6469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
647767a662ecde33c3979bf02b793d392aca0403162Wink Saville    @Override public void
648767a662ecde33c3979bf02b793d392aca0403162Wink Saville    setOnNITZTime(Handler h, int what, Object obj) {
6499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        super.setOnNITZTime(h, what, obj);
6509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // Send the last NITZ time if we have it
6529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (mLastNITZTimeInfo != null) {
6539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mNITZTimeRegistrant
6549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                .notifyRegistrant(
6559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    new AsyncResult (null, mLastNITZTimeInfo, null));
6569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mLastNITZTimeInfo = null;
6579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
6589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
6599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
660767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void
661cdadaad0e4e76a69eba144d3501cca9765cee80cJaikumar Ganesh    getIccCardStatus(Message result) {
662767a662ecde33c3979bf02b793d392aca0403162Wink Saville        //Note: This RIL request has not been renamed to ICC,
663767a662ecde33c3979bf02b793d392aca0403162Wink Saville        //       but this request is also valid for SIM and RUIM
6649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        RILRequest rr = RILRequest.obtain(RIL_REQUEST_GET_SIM_STATUS, result);
6659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
6679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
6699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
6709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6715284090631e638b916d9a453212e9dc802656a67Wink Saville    @Override public void
672767a662ecde33c3979bf02b793d392aca0403162Wink Saville    supplyIccPin(String pin, Message result) {
6735284090631e638b916d9a453212e9dc802656a67Wink Saville        supplyIccPinForApp(pin, null, result);
6745284090631e638b916d9a453212e9dc802656a67Wink Saville    }
6755284090631e638b916d9a453212e9dc802656a67Wink Saville
6765284090631e638b916d9a453212e9dc802656a67Wink Saville    @Override public void
6775284090631e638b916d9a453212e9dc802656a67Wink Saville    supplyIccPinForApp(String pin, String aid, 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_ENTER_SIM_PIN, 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
6845284090631e638b916d9a453212e9dc802656a67Wink Saville        rr.mp.writeInt(2);
6859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(pin);
6865284090631e638b916d9a453212e9dc802656a67Wink Saville        rr.mp.writeString(aid);
6879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
6899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
6909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6915284090631e638b916d9a453212e9dc802656a67Wink Saville    @Override public void
692767a662ecde33c3979bf02b793d392aca0403162Wink Saville    supplyIccPuk(String puk, String newPin, Message result) {
6935284090631e638b916d9a453212e9dc802656a67Wink Saville        supplyIccPukForApp(puk, newPin, null, result);
6945284090631e638b916d9a453212e9dc802656a67Wink Saville    }
6955284090631e638b916d9a453212e9dc802656a67Wink Saville
6965284090631e638b916d9a453212e9dc802656a67Wink Saville    @Override public void
6975284090631e638b916d9a453212e9dc802656a67Wink Saville    supplyIccPukForApp(String puk, String newPin, String aid, Message result) {
698767a662ecde33c3979bf02b793d392aca0403162Wink Saville        //Note: This RIL request has not been renamed to ICC,
699767a662ecde33c3979bf02b793d392aca0403162Wink Saville        //       but this request is also valid for SIM and RUIM
7009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        RILRequest rr = RILRequest.obtain(RIL_REQUEST_ENTER_SIM_PUK, result);
7019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
7039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7045284090631e638b916d9a453212e9dc802656a67Wink Saville        rr.mp.writeInt(3);
7059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(puk);
7069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(newPin);
7075284090631e638b916d9a453212e9dc802656a67Wink Saville        rr.mp.writeString(aid);
7089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
7109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
7119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7125284090631e638b916d9a453212e9dc802656a67Wink Saville    @Override public void
713767a662ecde33c3979bf02b793d392aca0403162Wink Saville    supplyIccPin2(String pin, Message result) {
7145284090631e638b916d9a453212e9dc802656a67Wink Saville        supplyIccPin2ForApp(pin, null, result);
7155284090631e638b916d9a453212e9dc802656a67Wink Saville    }
7165284090631e638b916d9a453212e9dc802656a67Wink Saville
7175284090631e638b916d9a453212e9dc802656a67Wink Saville    @Override public void
7185284090631e638b916d9a453212e9dc802656a67Wink Saville    supplyIccPin2ForApp(String pin, String aid, Message result) {
719767a662ecde33c3979bf02b793d392aca0403162Wink Saville        //Note: This RIL request has not been renamed to ICC,
720767a662ecde33c3979bf02b793d392aca0403162Wink Saville        //       but this request is also valid for SIM and RUIM
7219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        RILRequest rr = RILRequest.obtain(RIL_REQUEST_ENTER_SIM_PIN2, result);
7229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
7249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7255284090631e638b916d9a453212e9dc802656a67Wink Saville        rr.mp.writeInt(2);
7269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(pin);
7275284090631e638b916d9a453212e9dc802656a67Wink Saville        rr.mp.writeString(aid);
7289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
7309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
7319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7325284090631e638b916d9a453212e9dc802656a67Wink Saville    @Override public void
7335284090631e638b916d9a453212e9dc802656a67Wink Saville    supplyIccPuk2(String puk2, String newPin2, Message result) {
7345284090631e638b916d9a453212e9dc802656a67Wink Saville        supplyIccPuk2ForApp(puk2, newPin2, null, result);
7355284090631e638b916d9a453212e9dc802656a67Wink Saville    }
7365284090631e638b916d9a453212e9dc802656a67Wink Saville
7375284090631e638b916d9a453212e9dc802656a67Wink Saville    @Override public void
7385284090631e638b916d9a453212e9dc802656a67Wink Saville    supplyIccPuk2ForApp(String puk, String newPin2, String aid, Message result) {
739767a662ecde33c3979bf02b793d392aca0403162Wink Saville        //Note: This RIL request has not been renamed to ICC,
740767a662ecde33c3979bf02b793d392aca0403162Wink Saville        //       but this request is also valid for SIM and RUIM
7419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        RILRequest rr = RILRequest.obtain(RIL_REQUEST_ENTER_SIM_PUK2, result);
7429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
7449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7455284090631e638b916d9a453212e9dc802656a67Wink Saville        rr.mp.writeInt(3);
7469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(puk);
7479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(newPin2);
7485284090631e638b916d9a453212e9dc802656a67Wink Saville        rr.mp.writeString(aid);
7499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
7519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
7529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7535284090631e638b916d9a453212e9dc802656a67Wink Saville    @Override public void
754767a662ecde33c3979bf02b793d392aca0403162Wink Saville    changeIccPin(String oldPin, String newPin, Message result) {
7555284090631e638b916d9a453212e9dc802656a67Wink Saville        changeIccPinForApp(oldPin, newPin, null, result);
7565284090631e638b916d9a453212e9dc802656a67Wink Saville    }
7575284090631e638b916d9a453212e9dc802656a67Wink Saville
7585284090631e638b916d9a453212e9dc802656a67Wink Saville    @Override public void
7595284090631e638b916d9a453212e9dc802656a67Wink Saville    changeIccPinForApp(String oldPin, String newPin, String aid, Message result) {
760767a662ecde33c3979bf02b793d392aca0403162Wink Saville        //Note: This RIL request has not been renamed to ICC,
761767a662ecde33c3979bf02b793d392aca0403162Wink Saville        //       but this request is also valid for SIM and RUIM
7629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CHANGE_SIM_PIN, result);
7639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
7659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7665284090631e638b916d9a453212e9dc802656a67Wink Saville        rr.mp.writeInt(3);
7679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(oldPin);
7689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(newPin);
7695284090631e638b916d9a453212e9dc802656a67Wink Saville        rr.mp.writeString(aid);
7709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
7729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
7739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7745284090631e638b916d9a453212e9dc802656a67Wink Saville    @Override public void
775767a662ecde33c3979bf02b793d392aca0403162Wink Saville    changeIccPin2(String oldPin2, String newPin2, Message result) {
7765284090631e638b916d9a453212e9dc802656a67Wink Saville        changeIccPin2ForApp(oldPin2, newPin2, null, result);
7775284090631e638b916d9a453212e9dc802656a67Wink Saville    }
7785284090631e638b916d9a453212e9dc802656a67Wink Saville
7795284090631e638b916d9a453212e9dc802656a67Wink Saville    @Override public void
7805284090631e638b916d9a453212e9dc802656a67Wink Saville    changeIccPin2ForApp(String oldPin2, String newPin2, String aid, Message result) {
781767a662ecde33c3979bf02b793d392aca0403162Wink Saville        //Note: This RIL request has not been renamed to ICC,
782767a662ecde33c3979bf02b793d392aca0403162Wink Saville        //       but this request is also valid for SIM and RUIM
7839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CHANGE_SIM_PIN2, result);
7849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
7869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7875284090631e638b916d9a453212e9dc802656a67Wink Saville        rr.mp.writeInt(3);
7889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(oldPin2);
7899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(newPin2);
7905284090631e638b916d9a453212e9dc802656a67Wink Saville        rr.mp.writeString(aid);
7919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
7939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
7949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void
796767a662ecde33c3979bf02b793d392aca0403162Wink Saville    changeBarringPassword(String facility, String oldPwd, String newPwd, Message result) {
7979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CHANGE_BARRING_PASSWORD, result);
7989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
8009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(3);
8029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(facility);
8039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(oldPwd);
8049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(newPwd);
8059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
8079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
8089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
809767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void
810767a662ecde33c3979bf02b793d392aca0403162Wink Saville    supplyNetworkDepersonalization(String netpin, Message result) {
8119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        RILRequest rr = RILRequest.obtain(RIL_REQUEST_ENTER_NETWORK_DEPERSONALIZATION, result);
8129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
8149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(1);
8169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(netpin);
8179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
8199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
820767a662ecde33c3979bf02b793d392aca0403162Wink Saville
821767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void
822767a662ecde33c3979bf02b793d392aca0403162Wink Saville    getCurrentCalls (Message result) {
8239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        RILRequest rr = RILRequest.obtain(RIL_REQUEST_GET_CURRENT_CALLS, result);
8249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
8269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
8289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
8299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
830145ff609de3206b585819ef974fab20cdc2d9f5eJake Hamby    @Deprecated public void
831767a662ecde33c3979bf02b793d392aca0403162Wink Saville    getPDPContextList(Message result) {
832767a662ecde33c3979bf02b793d392aca0403162Wink Saville        getDataCallList(result);
833767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
834767a662ecde33c3979bf02b793d392aca0403162Wink Saville
835767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void
836767a662ecde33c3979bf02b793d392aca0403162Wink Saville    getDataCallList(Message result) {
837767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_DATA_CALL_LIST, result);
8389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
8409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
8429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
8439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
844767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void
845767a662ecde33c3979bf02b793d392aca0403162Wink Saville    dial (String address, int clirMode, Message result) {
84624440cf8a9431291bdcaa77b418e6c4715932507Naveen Kalla        dial(address, clirMode, null, result);
84724440cf8a9431291bdcaa77b418e6c4715932507Naveen Kalla    }
84824440cf8a9431291bdcaa77b418e6c4715932507Naveen Kalla
84924440cf8a9431291bdcaa77b418e6c4715932507Naveen Kalla    public void
85024440cf8a9431291bdcaa77b418e6c4715932507Naveen Kalla    dial(String address, int clirMode, UUSInfo uusInfo, Message result) {
8519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        RILRequest rr = RILRequest.obtain(RIL_REQUEST_DIAL, result);
8529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(address);
8549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(clirMode);
8550fa1b24593bbe7972bfbc5290519359db8c4ade6Naveen Kalla        rr.mp.writeInt(0); // UUS information is absent
8569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
85724440cf8a9431291bdcaa77b418e6c4715932507Naveen Kalla        if (uusInfo == null) {
85824440cf8a9431291bdcaa77b418e6c4715932507Naveen Kalla            rr.mp.writeInt(0); // UUS information is absent
85924440cf8a9431291bdcaa77b418e6c4715932507Naveen Kalla        } else {
86024440cf8a9431291bdcaa77b418e6c4715932507Naveen Kalla            rr.mp.writeInt(1); // UUS information is present
86124440cf8a9431291bdcaa77b418e6c4715932507Naveen Kalla            rr.mp.writeInt(uusInfo.getType());
86224440cf8a9431291bdcaa77b418e6c4715932507Naveen Kalla            rr.mp.writeInt(uusInfo.getDcs());
86324440cf8a9431291bdcaa77b418e6c4715932507Naveen Kalla            rr.mp.writeByteArray(uusInfo.getUserData());
86424440cf8a9431291bdcaa77b418e6c4715932507Naveen Kalla        }
86524440cf8a9431291bdcaa77b418e6c4715932507Naveen Kalla
8669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
8679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
8699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
8709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
871767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void
872767a662ecde33c3979bf02b793d392aca0403162Wink Saville    getIMSI(Message result) {
8739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        RILRequest rr = RILRequest.obtain(RIL_REQUEST_GET_IMSI, result);
8749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
87556b4965f5b429fdd01831c2652f37047c04fcf3eWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
8769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
8789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
8799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void
881767a662ecde33c3979bf02b793d392aca0403162Wink Saville    getIMEI(Message result) {
8829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        RILRequest rr = RILRequest.obtain(RIL_REQUEST_GET_IMEI, result);
8839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
8859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
8879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
8889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void
890767a662ecde33c3979bf02b793d392aca0403162Wink Saville    getIMEISV(Message result) {
8919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        RILRequest rr = RILRequest.obtain(RIL_REQUEST_GET_IMEISV, result);
8929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
8949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
8969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
8979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
899767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void
900767a662ecde33c3979bf02b793d392aca0403162Wink Saville    hangupConnection (int gsmIndex, Message result) {
9019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog("hangupConnection: gsmIndex=" + gsmIndex);
9029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        RILRequest rr = RILRequest.obtain(RIL_REQUEST_HANGUP, result);
9049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
905767a662ecde33c3979bf02b793d392aca0403162Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " " +
906767a662ecde33c3979bf02b793d392aca0403162Wink Saville                gsmIndex);
9079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(1);
9099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(gsmIndex);
9109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
9129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
9139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
914767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void
915767a662ecde33c3979bf02b793d392aca0403162Wink Saville    hangupWaitingOrBackground (Message result) {
916767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_HANGUP_WAITING_OR_BACKGROUND,
9179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                        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    public void
925767a662ecde33c3979bf02b793d392aca0403162Wink Saville    hangupForegroundResumeBackground (Message result) {
926767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
9279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                = RILRequest.obtain(
928767a662ecde33c3979bf02b793d392aca0403162Wink Saville                        RIL_REQUEST_HANGUP_FOREGROUND_RESUME_BACKGROUND,
9299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                        result);
9309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
9319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
9339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
9349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void
936767a662ecde33c3979bf02b793d392aca0403162Wink Saville    switchWaitingOrHoldingAndActive (Message result) {
937767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
9389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                = RILRequest.obtain(
939767a662ecde33c3979bf02b793d392aca0403162Wink Saville                        RIL_REQUEST_SWITCH_WAITING_OR_HOLDING_AND_ACTIVE,
9409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                        result);
9419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
9429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
9449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
9459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void
947767a662ecde33c3979bf02b793d392aca0403162Wink Saville    conference (Message result) {
948767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
9499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                = RILRequest.obtain(RIL_REQUEST_CONFERENCE, result);
9509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
9529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
9549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
9559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
957767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void setPreferredVoicePrivacy(boolean enable, Message result) {
958767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CDMA_SET_PREFERRED_VOICE_PRIVACY_MODE,
959767a662ecde33c3979bf02b793d392aca0403162Wink Saville                result);
960767a662ecde33c3979bf02b793d392aca0403162Wink Saville
961767a662ecde33c3979bf02b793d392aca0403162Wink Saville        rr.mp.writeInt(1);
962767a662ecde33c3979bf02b793d392aca0403162Wink Saville        rr.mp.writeInt(enable ? 1:0);
963767a662ecde33c3979bf02b793d392aca0403162Wink Saville
964767a662ecde33c3979bf02b793d392aca0403162Wink Saville        send(rr);
965767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
966767a662ecde33c3979bf02b793d392aca0403162Wink Saville
967767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void getPreferredVoicePrivacy(Message result) {
968767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CDMA_QUERY_PREFERRED_VOICE_PRIVACY_MODE,
969767a662ecde33c3979bf02b793d392aca0403162Wink Saville                result);
970767a662ecde33c3979bf02b793d392aca0403162Wink Saville        send(rr);
971767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
972767a662ecde33c3979bf02b793d392aca0403162Wink Saville
9739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void
974767a662ecde33c3979bf02b793d392aca0403162Wink Saville    separateConnection (int gsmIndex, Message result) {
975767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
9769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                = RILRequest.obtain(RIL_REQUEST_SEPARATE_CONNECTION, result);
9779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
9799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            + " " + gsmIndex);
9809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(1);
9829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(gsmIndex);
9839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
9859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
9869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void
988767a662ecde33c3979bf02b793d392aca0403162Wink Saville    acceptCall (Message result) {
989767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
9909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                = RILRequest.obtain(RIL_REQUEST_ANSWER, result);
9919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
9939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
9959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
9969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
997767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void
998767a662ecde33c3979bf02b793d392aca0403162Wink Saville    rejectCall (Message result) {
999767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
10009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                = RILRequest.obtain(RIL_REQUEST_UDUB, result);
10019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
10039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
10059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
10069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void
1008767a662ecde33c3979bf02b793d392aca0403162Wink Saville    explicitCallTransfer (Message result) {
10099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        RILRequest rr
10109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                = RILRequest.obtain(RIL_REQUEST_EXPLICIT_CALL_TRANSFER, result);
10119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
10139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
10159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
10169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void
1018767a662ecde33c3979bf02b793d392aca0403162Wink Saville    getLastCallFailCause (Message result) {
1019767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
10209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                = RILRequest.obtain(RIL_REQUEST_LAST_CALL_FAIL_CAUSE, result);
10219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
10239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
10259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
10269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1027767a662ecde33c3979bf02b793d392aca0403162Wink Saville    /**
1028767a662ecde33c3979bf02b793d392aca0403162Wink Saville     * @deprecated
1029767a662ecde33c3979bf02b793d392aca0403162Wink Saville     */
1030767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void
1031767a662ecde33c3979bf02b793d392aca0403162Wink Saville    getLastPdpFailCause (Message result) {
1032767a662ecde33c3979bf02b793d392aca0403162Wink Saville        getLastDataCallFailCause (result);
1033767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
1034767a662ecde33c3979bf02b793d392aca0403162Wink Saville
1035767a662ecde33c3979bf02b793d392aca0403162Wink Saville    /**
1036767a662ecde33c3979bf02b793d392aca0403162Wink Saville     * The preferred new alternative to getLastPdpFailCause
1037767a662ecde33c3979bf02b793d392aca0403162Wink Saville     */
1038767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void
1039767a662ecde33c3979bf02b793d392aca0403162Wink Saville    getLastDataCallFailCause (Message result) {
1040767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
1041767a662ecde33c3979bf02b793d392aca0403162Wink Saville                = RILRequest.obtain(RIL_REQUEST_LAST_DATA_CALL_FAIL_CAUSE, result);
10429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
10449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
10469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
10479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void
1049767a662ecde33c3979bf02b793d392aca0403162Wink Saville    setMute (boolean enableMute, Message response) {
1050767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
10519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                = RILRequest.obtain(RIL_REQUEST_SET_MUTE, response);
10529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
10549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            + " " + enableMute);
10559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(1);
10579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(enableMute ? 1 : 0);
10589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
10609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
10619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void
1063767a662ecde33c3979bf02b793d392aca0403162Wink Saville    getMute (Message response) {
1064767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
10659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                = RILRequest.obtain(RIL_REQUEST_GET_MUTE, response);
10669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
10689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
10709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
10719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void
1073767a662ecde33c3979bf02b793d392aca0403162Wink Saville    getSignalStrength (Message result) {
1074767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
10759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                = RILRequest.obtain(RIL_REQUEST_SIGNAL_STRENGTH, result);
10769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
10789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
10809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
10819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1082767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void
10835284090631e638b916d9a453212e9dc802656a67Wink Saville    getVoiceRegistrationState (Message result) {
1084767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
10855284090631e638b916d9a453212e9dc802656a67Wink Saville                = RILRequest.obtain(RIL_REQUEST_VOICE_REGISTRATION_STATE, result);
10869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
10889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
10909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
10919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1092767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void
10935284090631e638b916d9a453212e9dc802656a67Wink Saville    getDataRegistrationState (Message result) {
1094767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
10955284090631e638b916d9a453212e9dc802656a67Wink Saville                = RILRequest.obtain(RIL_REQUEST_DATA_REGISTRATION_STATE, result);
10969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
10989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
11009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
11019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1102767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void
1103767a662ecde33c3979bf02b793d392aca0403162Wink Saville    getOperator(Message result) {
1104767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
11059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                = RILRequest.obtain(RIL_REQUEST_OPERATOR, result);
11069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
11089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
11109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
11119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1112767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void
1113767a662ecde33c3979bf02b793d392aca0403162Wink Saville    sendDtmf(char c, Message result) {
1114767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
11159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                = RILRequest.obtain(RIL_REQUEST_DTMF, result);
11169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
1118767a662ecde33c3979bf02b793d392aca0403162Wink Saville
11199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(Character.toString(c));
11209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
11229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
11239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void
11259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    startDtmf(char c, Message result) {
11269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        RILRequest rr
11279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                = RILRequest.obtain(RIL_REQUEST_DTMF_START, result);
11289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
11309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(Character.toString(c));
11329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
11349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
11359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void
11379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    stopDtmf(Message result) {
11389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        RILRequest rr
11399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                = RILRequest.obtain(RIL_REQUEST_DTMF_STOP, result);
11409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
11429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
11449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
11459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1146e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    public void
1147dafa22a3ef9328c72319aeec605f6a6d20e46080jsh    sendBurstDtmf(String dtmfString, int on, int off, Message result) {
1148e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CDMA_BURST_DTMF, result);
1149e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
1150dafa22a3ef9328c72319aeec605f6a6d20e46080jsh        rr.mp.writeInt(3);
1151e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        rr.mp.writeString(dtmfString);
1152dafa22a3ef9328c72319aeec605f6a6d20e46080jsh        rr.mp.writeString(Integer.toString(on));
1153dafa22a3ef9328c72319aeec605f6a6d20e46080jsh        rr.mp.writeString(Integer.toString(off));
1154e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
1155dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
1156dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville                + " : " + dtmfString);
1157dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville
1158e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        send(rr);
1159e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    }
11609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void
1162767a662ecde33c3979bf02b793d392aca0403162Wink Saville    sendSMS (String smscPDU, String pdu, Message result) {
1163767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
11649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                = RILRequest.obtain(RIL_REQUEST_SEND_SMS, result);
11659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(2);
11679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(smscPDU);
11689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(pdu);
11699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
1171767a662ecde33c3979bf02b793d392aca0403162Wink Saville
1172767a662ecde33c3979bf02b793d392aca0403162Wink Saville        send(rr);
1173767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
1174767a662ecde33c3979bf02b793d392aca0403162Wink Saville
1175767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void
1176767a662ecde33c3979bf02b793d392aca0403162Wink Saville    sendCdmaSms(byte[] pdu, Message result) {
1177767a662ecde33c3979bf02b793d392aca0403162Wink Saville        int address_nbr_of_digits;
1178767a662ecde33c3979bf02b793d392aca0403162Wink Saville        int subaddr_nbr_of_digits;
1179767a662ecde33c3979bf02b793d392aca0403162Wink Saville        int bearerDataLength;
1180767a662ecde33c3979bf02b793d392aca0403162Wink Saville        ByteArrayInputStream bais = new ByteArrayInputStream(pdu);
1181767a662ecde33c3979bf02b793d392aca0403162Wink Saville        DataInputStream dis = new DataInputStream(bais);
1182767a662ecde33c3979bf02b793d392aca0403162Wink Saville
1183767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
1184767a662ecde33c3979bf02b793d392aca0403162Wink Saville                = RILRequest.obtain(RIL_REQUEST_CDMA_SEND_SMS, result);
1185767a662ecde33c3979bf02b793d392aca0403162Wink Saville
1186767a662ecde33c3979bf02b793d392aca0403162Wink Saville        try {
1187767a662ecde33c3979bf02b793d392aca0403162Wink Saville            rr.mp.writeInt(dis.readInt()); //teleServiceId
1188767a662ecde33c3979bf02b793d392aca0403162Wink Saville            rr.mp.writeByte((byte) dis.readInt()); //servicePresent
1189767a662ecde33c3979bf02b793d392aca0403162Wink Saville            rr.mp.writeInt(dis.readInt()); //serviceCategory
1190767a662ecde33c3979bf02b793d392aca0403162Wink Saville            rr.mp.writeInt(dis.read()); //address_digit_mode
1191767a662ecde33c3979bf02b793d392aca0403162Wink Saville            rr.mp.writeInt(dis.read()); //address_nbr_mode
1192767a662ecde33c3979bf02b793d392aca0403162Wink Saville            rr.mp.writeInt(dis.read()); //address_ton
1193767a662ecde33c3979bf02b793d392aca0403162Wink Saville            rr.mp.writeInt(dis.read()); //address_nbr_plan
1194767a662ecde33c3979bf02b793d392aca0403162Wink Saville            address_nbr_of_digits = (byte) dis.read();
1195767a662ecde33c3979bf02b793d392aca0403162Wink Saville            rr.mp.writeByte((byte) address_nbr_of_digits);
1196767a662ecde33c3979bf02b793d392aca0403162Wink Saville            for(int i=0; i < address_nbr_of_digits; i++){
1197767a662ecde33c3979bf02b793d392aca0403162Wink Saville                rr.mp.writeByte(dis.readByte()); // address_orig_bytes[i]
1198767a662ecde33c3979bf02b793d392aca0403162Wink Saville            }
1199767a662ecde33c3979bf02b793d392aca0403162Wink Saville            rr.mp.writeInt(dis.read()); //subaddressType
1200767a662ecde33c3979bf02b793d392aca0403162Wink Saville            rr.mp.writeByte((byte) dis.read()); //subaddr_odd
1201767a662ecde33c3979bf02b793d392aca0403162Wink Saville            subaddr_nbr_of_digits = (byte) dis.read();
1202767a662ecde33c3979bf02b793d392aca0403162Wink Saville            rr.mp.writeByte((byte) subaddr_nbr_of_digits);
1203767a662ecde33c3979bf02b793d392aca0403162Wink Saville            for(int i=0; i < subaddr_nbr_of_digits; i++){
1204767a662ecde33c3979bf02b793d392aca0403162Wink Saville                rr.mp.writeByte(dis.readByte()); //subaddr_orig_bytes[i]
1205767a662ecde33c3979bf02b793d392aca0403162Wink Saville            }
1206767a662ecde33c3979bf02b793d392aca0403162Wink Saville
1207767a662ecde33c3979bf02b793d392aca0403162Wink Saville            bearerDataLength = dis.read();
1208767a662ecde33c3979bf02b793d392aca0403162Wink Saville            rr.mp.writeInt(bearerDataLength);
1209767a662ecde33c3979bf02b793d392aca0403162Wink Saville            for(int i=0; i < bearerDataLength; i++){
1210767a662ecde33c3979bf02b793d392aca0403162Wink Saville                rr.mp.writeByte(dis.readByte()); //bearerData[i]
1211767a662ecde33c3979bf02b793d392aca0403162Wink Saville            }
1212767a662ecde33c3979bf02b793d392aca0403162Wink Saville        }catch (IOException ex){
1213767a662ecde33c3979bf02b793d392aca0403162Wink Saville            if (RILJ_LOGD) riljLog("sendSmsCdma: conversion from input stream to object failed: "
1214767a662ecde33c3979bf02b793d392aca0403162Wink Saville                    + ex);
1215767a662ecde33c3979bf02b793d392aca0403162Wink Saville        }
1216767a662ecde33c3979bf02b793d392aca0403162Wink Saville
1217767a662ecde33c3979bf02b793d392aca0403162Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
1218767a662ecde33c3979bf02b793d392aca0403162Wink Saville
12199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
12209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
12219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void deleteSmsOnSim(int index, Message response) {
12239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        RILRequest rr = RILRequest.obtain(RIL_REQUEST_DELETE_SMS_ON_SIM,
12249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                response);
1225767a662ecde33c3979bf02b793d392aca0403162Wink Saville
1226767a662ecde33c3979bf02b793d392aca0403162Wink Saville        rr.mp.writeInt(1);
1227767a662ecde33c3979bf02b793d392aca0403162Wink Saville        rr.mp.writeInt(index);
1228767a662ecde33c3979bf02b793d392aca0403162Wink Saville
122943a17654cf4bfe7f1ec22bd8b7b32daccdf27c09Joe Onorato        if (false) {
1230767a662ecde33c3979bf02b793d392aca0403162Wink Saville            if (RILJ_LOGD) riljLog(rr.serialString() + "> "
1231767a662ecde33c3979bf02b793d392aca0403162Wink Saville                    + requestToString(rr.mRequest)
1232767a662ecde33c3979bf02b793d392aca0403162Wink Saville                    + " " + index);
1233767a662ecde33c3979bf02b793d392aca0403162Wink Saville        }
1234767a662ecde33c3979bf02b793d392aca0403162Wink Saville
1235767a662ecde33c3979bf02b793d392aca0403162Wink Saville        send(rr);
1236767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
1237767a662ecde33c3979bf02b793d392aca0403162Wink Saville
1238767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void deleteSmsOnRuim(int index, Message response) {
1239767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CDMA_DELETE_SMS_ON_RUIM,
1240767a662ecde33c3979bf02b793d392aca0403162Wink Saville                response);
1241767a662ecde33c3979bf02b793d392aca0403162Wink Saville
12429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(1);
12439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(index);
12449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
124543a17654cf4bfe7f1ec22bd8b7b32daccdf27c09Joe Onorato        if (false) {
1246767a662ecde33c3979bf02b793d392aca0403162Wink Saville            if (RILJ_LOGD) riljLog(rr.serialString() + "> "
12479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    + requestToString(rr.mRequest)
12489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    + " " + index);
12499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
12509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
12529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
12539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void writeSmsToSim(int status, String smsc, String pdu, Message response) {
12559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        status = translateStatus(status);
1256767a662ecde33c3979bf02b793d392aca0403162Wink Saville
12579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        RILRequest rr = RILRequest.obtain(RIL_REQUEST_WRITE_SMS_TO_SIM,
12589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                response);
1259767a662ecde33c3979bf02b793d392aca0403162Wink Saville
12609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(status);
12619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(pdu);
12629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(smsc);
1263767a662ecde33c3979bf02b793d392aca0403162Wink Saville
126443a17654cf4bfe7f1ec22bd8b7b32daccdf27c09Joe Onorato        if (false) {
1265767a662ecde33c3979bf02b793d392aca0403162Wink Saville            if (RILJ_LOGD) riljLog(rr.serialString() + "> "
1266767a662ecde33c3979bf02b793d392aca0403162Wink Saville                    + requestToString(rr.mRequest)
1267767a662ecde33c3979bf02b793d392aca0403162Wink Saville                    + " " + status);
1268767a662ecde33c3979bf02b793d392aca0403162Wink Saville        }
1269767a662ecde33c3979bf02b793d392aca0403162Wink Saville
1270767a662ecde33c3979bf02b793d392aca0403162Wink Saville        send(rr);
1271767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
1272767a662ecde33c3979bf02b793d392aca0403162Wink Saville
1273767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void writeSmsToRuim(int status, String pdu, Message response) {
1274767a662ecde33c3979bf02b793d392aca0403162Wink Saville        status = translateStatus(status);
1275767a662ecde33c3979bf02b793d392aca0403162Wink Saville
1276767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CDMA_WRITE_SMS_TO_RUIM,
1277767a662ecde33c3979bf02b793d392aca0403162Wink Saville                response);
1278767a662ecde33c3979bf02b793d392aca0403162Wink Saville
1279767a662ecde33c3979bf02b793d392aca0403162Wink Saville        rr.mp.writeInt(status);
1280767a662ecde33c3979bf02b793d392aca0403162Wink Saville        rr.mp.writeString(pdu);
1281767a662ecde33c3979bf02b793d392aca0403162Wink Saville
128243a17654cf4bfe7f1ec22bd8b7b32daccdf27c09Joe Onorato        if (false) {
1283767a662ecde33c3979bf02b793d392aca0403162Wink Saville            if (RILJ_LOGD) riljLog(rr.serialString() + "> "
1284767a662ecde33c3979bf02b793d392aca0403162Wink Saville                    + requestToString(rr.mRequest)
12859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    + " " + status);
12869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
12879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
12899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
12909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
12929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  Translates EF_SMS status bits to a status value compatible with
12939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  SMS AT commands.  See TS 27.005 3.1.
12949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
12959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private int translateStatus(int status) {
12969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        switch(status & 0x7) {
1297767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case SmsManager.STATUS_ON_ICC_READ:
12989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return 1;
1299767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case SmsManager.STATUS_ON_ICC_UNREAD:
13009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return 0;
1301767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case SmsManager.STATUS_ON_ICC_SENT:
13029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return 3;
1303767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case SmsManager.STATUS_ON_ICC_UNSENT:
13049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return 2;
13059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1306767a662ecde33c3979bf02b793d392aca0403162Wink Saville
13079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // Default to READ.
13089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return 1;
13099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
13109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1311767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void
1312767a662ecde33c3979bf02b793d392aca0403162Wink Saville    setupDataCall(String radioTechnology, String profile, String apn,
13134eb40450720f6cc1ed07fa181b22677461fa96bdLorenzo Colitti            String user, String password, String authType, String protocol,
13144eb40450720f6cc1ed07fa181b22677461fa96bdLorenzo Colitti            Message result) {
1315767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
1316767a662ecde33c3979bf02b793d392aca0403162Wink Saville                = RILRequest.obtain(RIL_REQUEST_SETUP_DATA_CALL, result);
1317767a662ecde33c3979bf02b793d392aca0403162Wink Saville
1318b60c9ba33582e798e40b102ba3180d5cd1102ca3Lorenzo Colitti        rr.mp.writeInt(7);
1319767a662ecde33c3979bf02b793d392aca0403162Wink Saville
1320767a662ecde33c3979bf02b793d392aca0403162Wink Saville        rr.mp.writeString(radioTechnology);
1321767a662ecde33c3979bf02b793d392aca0403162Wink Saville        rr.mp.writeString(profile);
13229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(apn);
13239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(user);
13249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(password);
1325106d27140bdd1acf388310807d662f08cb6292c6johnwang        rr.mp.writeString(authType);
13264eb40450720f6cc1ed07fa181b22677461fa96bdLorenzo Colitti        rr.mp.writeString(protocol);
1327106d27140bdd1acf388310807d662f08cb6292c6johnwang
1328106d27140bdd1acf388310807d662f08cb6292c6johnwang        if (RILJ_LOGD) riljLog(rr.serialString() + "> "
1329106d27140bdd1acf388310807d662f08cb6292c6johnwang                + requestToString(rr.mRequest) + " " + radioTechnology + " "
1330106d27140bdd1acf388310807d662f08cb6292c6johnwang                + profile + " " + apn + " " + user + " "
13314eb40450720f6cc1ed07fa181b22677461fa96bdLorenzo Colitti                + password + " " + authType + " " + protocol);
1332767a662ecde33c3979bf02b793d392aca0403162Wink Saville
13339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
13349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
13359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void
13376ef74b1b073f04f55ef43095a336bd10d599dedfKazuhiro Ondo    deactivateDataCall(int cid, int reason, Message result) {
1338767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
1339767a662ecde33c3979bf02b793d392aca0403162Wink Saville                = RILRequest.obtain(RIL_REQUEST_DEACTIVATE_DATA_CALL, result);
13409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13416ef74b1b073f04f55ef43095a336bd10d599dedfKazuhiro Ondo        rr.mp.writeInt(2);
13429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(Integer.toString(cid));
13436ef74b1b073f04f55ef43095a336bd10d599dedfKazuhiro Ondo        rr.mp.writeString(Integer.toString(reason));
13449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1345767a662ecde33c3979bf02b793d392aca0403162Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " +
13466ef74b1b073f04f55ef43095a336bd10d599dedfKazuhiro Ondo                requestToString(rr.mRequest) + " " + cid + " " + reason);
1347767a662ecde33c3979bf02b793d392aca0403162Wink Saville
13489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
13499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
13509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void
1352767a662ecde33c3979bf02b793d392aca0403162Wink Saville    setRadioPower(boolean on, Message result) {
1353f90c26090402a517aa68cade7f452bc1ad85e654Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_RADIO_POWER, result);
13549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(1);
13569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(on ? 1 : 0);
13579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1358f90c26090402a517aa68cade7f452bc1ad85e654Wink Saville        if (RILJ_LOGD) {
1359f90c26090402a517aa68cade7f452bc1ad85e654Wink Saville            riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
1360f90c26090402a517aa68cade7f452bc1ad85e654Wink Saville                    + (on ? " on" : " off"));
1361f90c26090402a517aa68cade7f452bc1ad85e654Wink Saville        }
1362767a662ecde33c3979bf02b793d392aca0403162Wink Saville
13639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
13649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
13659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void
1367767a662ecde33c3979bf02b793d392aca0403162Wink Saville    setSuppServiceNotifications(boolean enable, Message result) {
1368767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
13699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                = RILRequest.obtain(RIL_REQUEST_SET_SUPP_SVC_NOTIFICATION, result);
13709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(1);
13729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(enable ? 1 : 0);
1373767a662ecde33c3979bf02b793d392aca0403162Wink Saville
13749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> "
1375767a662ecde33c3979bf02b793d392aca0403162Wink Saville                + requestToString(rr.mRequest));
13769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
13789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
13799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1380767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void
1381867641ece36e2fd17faaea79cf19506ab17177c6jsh    acknowledgeLastIncomingGsmSms(boolean success, int cause, Message result) {
1382767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
13839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                = RILRequest.obtain(RIL_REQUEST_SMS_ACKNOWLEDGE, result);
13849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1385867641ece36e2fd17faaea79cf19506ab17177c6jsh        rr.mp.writeInt(2);
13869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(success ? 1 : 0);
1387867641ece36e2fd17faaea79cf19506ab17177c6jsh        rr.mp.writeInt(cause);
13889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1389867641ece36e2fd17faaea79cf19506ab17177c6jsh        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
1390867641ece36e2fd17faaea79cf19506ab17177c6jsh                + " " + success + " " + cause);
1391767a662ecde33c3979bf02b793d392aca0403162Wink Saville
13929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
13939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1394767a662ecde33c3979bf02b793d392aca0403162Wink Saville
13959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void
1396867641ece36e2fd17faaea79cf19506ab17177c6jsh    acknowledgeLastIncomingCdmaSms(boolean success, int cause, Message result) {
1397767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
1398767a662ecde33c3979bf02b793d392aca0403162Wink Saville                = RILRequest.obtain(RIL_REQUEST_CDMA_SMS_ACKNOWLEDGE, result);
1399767a662ecde33c3979bf02b793d392aca0403162Wink Saville
1400767a662ecde33c3979bf02b793d392aca0403162Wink Saville        rr.mp.writeInt(success ? 0 : 1); //RIL_CDMA_SMS_ErrorClass
1401767a662ecde33c3979bf02b793d392aca0403162Wink Saville        // cause code according to X.S004-550E
1402867641ece36e2fd17faaea79cf19506ab17177c6jsh        rr.mp.writeInt(cause);
1403767a662ecde33c3979bf02b793d392aca0403162Wink Saville
1404867641ece36e2fd17faaea79cf19506ab17177c6jsh        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
1405867641ece36e2fd17faaea79cf19506ab17177c6jsh                + " " + success + " " + cause);
1406767a662ecde33c3979bf02b793d392aca0403162Wink Saville
1407767a662ecde33c3979bf02b793d392aca0403162Wink Saville        send(rr);
1408767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
1409767a662ecde33c3979bf02b793d392aca0403162Wink Saville
1410094854091b63498f952f0a6c4bcedfdfefaf1cf7Jake Hamby    public void
1411094854091b63498f952f0a6c4bcedfdfefaf1cf7Jake Hamby    acknowledgeIncomingGsmSmsWithPdu(boolean success, String ackPdu, Message result) {
1412094854091b63498f952f0a6c4bcedfdfefaf1cf7Jake Hamby        RILRequest rr
1413094854091b63498f952f0a6c4bcedfdfefaf1cf7Jake Hamby                = RILRequest.obtain(RIL_REQUEST_ACKNOWLEDGE_INCOMING_GSM_SMS_WITH_PDU, result);
1414094854091b63498f952f0a6c4bcedfdfefaf1cf7Jake Hamby
1415094854091b63498f952f0a6c4bcedfdfefaf1cf7Jake Hamby        rr.mp.writeInt(2);
1416094854091b63498f952f0a6c4bcedfdfefaf1cf7Jake Hamby        rr.mp.writeString(success ? "1" : "0");
1417094854091b63498f952f0a6c4bcedfdfefaf1cf7Jake Hamby        rr.mp.writeString(ackPdu);
1418094854091b63498f952f0a6c4bcedfdfefaf1cf7Jake Hamby
1419094854091b63498f952f0a6c4bcedfdfefaf1cf7Jake Hamby        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
1420094854091b63498f952f0a6c4bcedfdfefaf1cf7Jake Hamby                + ' ' + success + " [" + ackPdu + ']');
1421094854091b63498f952f0a6c4bcedfdfefaf1cf7Jake Hamby
1422094854091b63498f952f0a6c4bcedfdfefaf1cf7Jake Hamby        send(rr);
1423094854091b63498f952f0a6c4bcedfdfefaf1cf7Jake Hamby    }
1424767a662ecde33c3979bf02b793d392aca0403162Wink Saville
1425767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void
1426767a662ecde33c3979bf02b793d392aca0403162Wink Saville    iccIO (int command, int fileid, String path, int p1, int p2, int p3,
1427767a662ecde33c3979bf02b793d392aca0403162Wink Saville            String data, String pin2, Message result) {
1428767a662ecde33c3979bf02b793d392aca0403162Wink Saville        //Note: This RIL request has not been renamed to ICC,
1429767a662ecde33c3979bf02b793d392aca0403162Wink Saville        //       but this request is also valid for SIM and RUIM
1430767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
14319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                = RILRequest.obtain(RIL_REQUEST_SIM_IO, result);
1432767a662ecde33c3979bf02b793d392aca0403162Wink Saville
14339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(command);
14349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(fileid);
14359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(path);
14369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(p1);
14379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(p2);
14389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(p3);
14399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(data);
14409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(pin2);
14419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1442767a662ecde33c3979bf02b793d392aca0403162Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> iccIO: " + requestToString(rr.mRequest)
1443767a662ecde33c3979bf02b793d392aca0403162Wink Saville                + " 0x" + Integer.toHexString(command)
1444767a662ecde33c3979bf02b793d392aca0403162Wink Saville                + " 0x" + Integer.toHexString(fileid) + " "
1445e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                + " path: " + path + ","
14469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                + p1 + "," + p2 + "," + p3);
1447767a662ecde33c3979bf02b793d392aca0403162Wink Saville
14489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
14499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1450767a662ecde33c3979bf02b793d392aca0403162Wink Saville
14519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void
1452767a662ecde33c3979bf02b793d392aca0403162Wink Saville    getCLIR(Message result) {
1453767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
14549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                = RILRequest.obtain(RIL_REQUEST_GET_CLIR, result);
1455767a662ecde33c3979bf02b793d392aca0403162Wink Saville
14569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
1457767a662ecde33c3979bf02b793d392aca0403162Wink Saville
14589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
14599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
14609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
14619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void
1462767a662ecde33c3979bf02b793d392aca0403162Wink Saville    setCLIR(int clirMode, Message result) {
1463767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
14649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                = RILRequest.obtain(RIL_REQUEST_SET_CLIR, result);
14659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
14669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // count ints
14679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(1);
14689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
14699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(clirMode);
1470767a662ecde33c3979bf02b793d392aca0403162Wink Saville
14719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
14729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    + " " + clirMode);
1473767a662ecde33c3979bf02b793d392aca0403162Wink Saville
14749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
14759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
14769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
14779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void
1478767a662ecde33c3979bf02b793d392aca0403162Wink Saville    queryCallWaiting(int serviceClass, Message response) {
1479767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
14809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                = RILRequest.obtain(RIL_REQUEST_QUERY_CALL_WAITING, response);
14819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
14829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(1);
14839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(serviceClass);
1484767a662ecde33c3979bf02b793d392aca0403162Wink Saville
14859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
14869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    + " " + serviceClass);
14879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
14889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
14899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
14909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
14919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void
1492767a662ecde33c3979bf02b793d392aca0403162Wink Saville    setCallWaiting(boolean enable, int serviceClass, Message response) {
1493767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
14949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                = RILRequest.obtain(RIL_REQUEST_SET_CALL_WAITING, response);
1495767a662ecde33c3979bf02b793d392aca0403162Wink Saville
14969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(2);
14979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(enable ? 1 : 0);
14989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(serviceClass);
1499767a662ecde33c3979bf02b793d392aca0403162Wink Saville
15009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
15019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                + " " + enable + ", " + serviceClass);
1502767a662ecde33c3979bf02b793d392aca0403162Wink Saville
15039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
15049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
15059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
15069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void
1507767a662ecde33c3979bf02b793d392aca0403162Wink Saville    setNetworkSelectionModeAutomatic(Message response) {
1508767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
1509767a662ecde33c3979bf02b793d392aca0403162Wink Saville                = RILRequest.obtain(RIL_REQUEST_SET_NETWORK_SELECTION_AUTOMATIC,
15109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                    response);
1511767a662ecde33c3979bf02b793d392aca0403162Wink Saville
15129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
1513767a662ecde33c3979bf02b793d392aca0403162Wink Saville
15149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
15159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
15169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1517767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void
1518767a662ecde33c3979bf02b793d392aca0403162Wink Saville    setNetworkSelectionModeManual(String operatorNumeric, Message response) {
1519767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
1520767a662ecde33c3979bf02b793d392aca0403162Wink Saville                = RILRequest.obtain(RIL_REQUEST_SET_NETWORK_SELECTION_MANUAL,
15219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                    response);
1522767a662ecde33c3979bf02b793d392aca0403162Wink Saville
15239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
15249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    + " " + operatorNumeric);
15259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
15269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(operatorNumeric);
1527767a662ecde33c3979bf02b793d392aca0403162Wink Saville
15289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
15299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
15309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1531767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void
1532767a662ecde33c3979bf02b793d392aca0403162Wink Saville    getNetworkSelectionMode(Message response) {
1533767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
1534767a662ecde33c3979bf02b793d392aca0403162Wink Saville                = RILRequest.obtain(RIL_REQUEST_QUERY_NETWORK_SELECTION_MODE,
15359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                    response);
1536767a662ecde33c3979bf02b793d392aca0403162Wink Saville
15379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
1538767a662ecde33c3979bf02b793d392aca0403162Wink Saville
15399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
15409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
15419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1542767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void
1543767a662ecde33c3979bf02b793d392aca0403162Wink Saville    getAvailableNetworks(Message response) {
1544767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
1545767a662ecde33c3979bf02b793d392aca0403162Wink Saville                = RILRequest.obtain(RIL_REQUEST_QUERY_AVAILABLE_NETWORKS,
15469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                    response);
1547767a662ecde33c3979bf02b793d392aca0403162Wink Saville
15489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
1549767a662ecde33c3979bf02b793d392aca0403162Wink Saville
15509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
15519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
15529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
15539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void
1554767a662ecde33c3979bf02b793d392aca0403162Wink Saville    setCallForward(int action, int cfReason, int serviceClass,
1555767a662ecde33c3979bf02b793d392aca0403162Wink Saville                String number, int timeSeconds, Message response) {
1556767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
15579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                = RILRequest.obtain(RIL_REQUEST_SET_CALL_FORWARD, response);
15589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
15599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(action);
15609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(cfReason);
15619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(serviceClass);
15629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(PhoneNumberUtils.toaFromString(number));
15639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(number);
15649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt (timeSeconds);
1565767a662ecde33c3979bf02b793d392aca0403162Wink Saville
15669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
1567767a662ecde33c3979bf02b793d392aca0403162Wink Saville                    + " " + action + " " + cfReason + " " + serviceClass
15689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    + timeSeconds);
1569767a662ecde33c3979bf02b793d392aca0403162Wink Saville
15709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
15719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
15729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
15739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void
15749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    queryCallForwardStatus(int cfReason, int serviceClass,
1575767a662ecde33c3979bf02b793d392aca0403162Wink Saville                String number, Message response) {
1576767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
15779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            = RILRequest.obtain(RIL_REQUEST_QUERY_CALL_FORWARD_STATUS, response);
15789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
15799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(2); // 2 is for query action, not in used anyway
15809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(cfReason);
15819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(serviceClass);
15829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(PhoneNumberUtils.toaFromString(number));
15839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(number);
15849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt (0);
1585767a662ecde33c3979bf02b793d392aca0403162Wink Saville
15869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
15879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                + " " + cfReason + " " + serviceClass);
15889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
15899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
15909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
15919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
15929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void
1593767a662ecde33c3979bf02b793d392aca0403162Wink Saville    queryCLIP(Message response) {
15949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        RILRequest rr
15959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            = RILRequest.obtain(RIL_REQUEST_QUERY_CLIP, response);
15969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
15979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
15989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
15999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
16009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
16019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
16029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
16039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void
1604767a662ecde33c3979bf02b793d392aca0403162Wink Saville    getBasebandVersion (Message response) {
1605767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
16069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                = RILRequest.obtain(RIL_REQUEST_BASEBAND_VERSION, response);
1607767a662ecde33c3979bf02b793d392aca0403162Wink Saville
16089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
16099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
16109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
16119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
16129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
16134360d7c678536a451dde6f4229e6d8c427b48523Wink Saville    @Override
16149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void
16154360d7c678536a451dde6f4229e6d8c427b48523Wink Saville    queryFacilityLock(String facility, String password, int serviceClass,
16164360d7c678536a451dde6f4229e6d8c427b48523Wink Saville                            Message response) {
16174360d7c678536a451dde6f4229e6d8c427b48523Wink Saville        queryFacilityLockForApp(facility, password, serviceClass, null, response);
16184360d7c678536a451dde6f4229e6d8c427b48523Wink Saville    }
16194360d7c678536a451dde6f4229e6d8c427b48523Wink Saville
16204360d7c678536a451dde6f4229e6d8c427b48523Wink Saville    @Override
16214360d7c678536a451dde6f4229e6d8c427b48523Wink Saville    public void
16224360d7c678536a451dde6f4229e6d8c427b48523Wink Saville    queryFacilityLockForApp(String facility, String password, int serviceClass, String appId,
1623767a662ecde33c3979bf02b793d392aca0403162Wink Saville                            Message response) {
16249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        RILRequest rr = RILRequest.obtain(RIL_REQUEST_QUERY_FACILITY_LOCK, response);
16259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
16269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
16279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
16289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // count strings
16294360d7c678536a451dde6f4229e6d8c427b48523Wink Saville        rr.mp.writeInt(4);
16309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
16319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(facility);
16329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(password);
16339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
16349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(Integer.toString(serviceClass));
16354360d7c678536a451dde6f4229e6d8c427b48523Wink Saville        rr.mp.writeString(appId);
16369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
16379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
16389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
16399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
16404360d7c678536a451dde6f4229e6d8c427b48523Wink Saville    @Override
16419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void
16429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    setFacilityLock (String facility, boolean lockState, String password,
1643767a662ecde33c3979bf02b793d392aca0403162Wink Saville                        int serviceClass, Message response) {
16444360d7c678536a451dde6f4229e6d8c427b48523Wink Saville        setFacilityLockForApp(facility, lockState, password, serviceClass, null, response);
16454360d7c678536a451dde6f4229e6d8c427b48523Wink Saville    }
16464360d7c678536a451dde6f4229e6d8c427b48523Wink Saville
16474360d7c678536a451dde6f4229e6d8c427b48523Wink Saville    @Override
16484360d7c678536a451dde6f4229e6d8c427b48523Wink Saville    public void
16494360d7c678536a451dde6f4229e6d8c427b48523Wink Saville    setFacilityLockForApp(String facility, boolean lockState, String password,
16504360d7c678536a451dde6f4229e6d8c427b48523Wink Saville                        int serviceClass, String appId, Message response) {
16519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        String lockString;
16529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         RILRequest rr
16539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                = RILRequest.obtain(RIL_REQUEST_SET_FACILITY_LOCK, response);
16549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
16559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
16569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
16579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // count strings
16584360d7c678536a451dde6f4229e6d8c427b48523Wink Saville        rr.mp.writeInt(5);
16599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
16609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(facility);
16619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        lockString = (lockState)?"1":"0";
16629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(lockString);
16639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(password);
16649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(Integer.toString(serviceClass));
16654360d7c678536a451dde6f4229e6d8c427b48523Wink Saville        rr.mp.writeString(appId);
16669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
16679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
16689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
16699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1670767a662ecde33c3979bf02b793d392aca0403162Wink Saville
16719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void
1672767a662ecde33c3979bf02b793d392aca0403162Wink Saville    sendUSSD (String ussdString, Message response) {
1673767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
16749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                = RILRequest.obtain(RIL_REQUEST_SEND_USSD, response);
16759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
16769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
16779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            + " " + ussdString);
16789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
16799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(ussdString);
16809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
16819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
16829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
16839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
16849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // inherited javadoc suffices
16859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void cancelPendingUssd (Message response) {
16869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        RILRequest rr
16879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                = RILRequest.obtain(RIL_REQUEST_CANCEL_USSD, response);
16889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
16899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString()
16909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                + "> " + requestToString(rr.mRequest));
16919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
16929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
16939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
16949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
16959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1696767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void resetRadio(Message result) {
1697767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
16989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                = RILRequest.obtain(RIL_REQUEST_RESET_RADIO, result);
16999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
17019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
17039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
17049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1705767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void invokeOemRilRequestRaw(byte[] data, Message response) {
1706767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
17079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                = RILRequest.obtain(RIL_REQUEST_OEM_HOOK_RAW, response);
17089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
1710767a662ecde33c3979bf02b793d392aca0403162Wink Saville               + "[" + IccUtils.bytesToHexString(data) + "]");
17119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeByteArray(data);
17139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
17159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
17179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1718767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void invokeOemRilRequestStrings(String[] strings, Message response) {
1719767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr
17209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                = RILRequest.obtain(RIL_REQUEST_OEM_HOOK_STRINGS, response);
17219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
17239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeStringArray(strings);
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     /**
17309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Assign a specified band for RF configuration.
17319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
17329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param bandMode one of BM_*_BAND
17339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param response is callback message
17349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
17359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void setBandMode (int bandMode, Message response) {
17369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        RILRequest rr
17379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                = RILRequest.obtain(RIL_REQUEST_SET_BAND_MODE, response);
17389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(1);
17409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(bandMode);
17419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
17439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                 + " " + bandMode);
17449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
17469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     }
17479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
17499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Query the list of band mode supported by RF.
17509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
17519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param response is callback message
17529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *        ((AsyncResult)response.obj).result  is an int[] with every
17539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *        element representing one avialable BM_*_BAND
17549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
17559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void queryAvailableBandMode (Message response) {
17569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        RILRequest rr
17579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                = RILRequest.obtain(RIL_REQUEST_QUERY_AVAILABLE_BAND_MODE,
17589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                response);
17599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
17619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
17639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
17649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
17669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@inheritDoc}
17679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
17689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void sendTerminalResponse(String contents, Message response) {
17699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        RILRequest rr = RILRequest.obtain(
17709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                RILConstants.RIL_REQUEST_STK_SEND_TERMINAL_RESPONSE, response);
17719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
17739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(contents);
17759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
17769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
17779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
17799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@inheritDoc}
17809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
17819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void sendEnvelope(String contents, Message response) {
17829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        RILRequest rr = RILRequest.obtain(
17839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                RILConstants.RIL_REQUEST_STK_SEND_ENVELOPE_COMMAND, response);
17849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
17869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeString(contents);
17889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
17899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
17909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
17929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@inheritDoc}
17939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1794094854091b63498f952f0a6c4bcedfdfefaf1cf7Jake Hamby    public void sendEnvelopeWithStatus(String contents, Message response) {
1795094854091b63498f952f0a6c4bcedfdfefaf1cf7Jake Hamby        RILRequest rr = RILRequest.obtain(
1796094854091b63498f952f0a6c4bcedfdfefaf1cf7Jake Hamby                RILConstants.RIL_REQUEST_STK_SEND_ENVELOPE_WITH_STATUS, response);
1797094854091b63498f952f0a6c4bcedfdfefaf1cf7Jake Hamby
1798094854091b63498f952f0a6c4bcedfdfefaf1cf7Jake Hamby        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
1799094854091b63498f952f0a6c4bcedfdfefaf1cf7Jake Hamby                + '[' + contents + ']');
1800094854091b63498f952f0a6c4bcedfdfefaf1cf7Jake Hamby
1801094854091b63498f952f0a6c4bcedfdfefaf1cf7Jake Hamby        rr.mp.writeString(contents);
1802094854091b63498f952f0a6c4bcedfdfefaf1cf7Jake Hamby        send(rr);
1803094854091b63498f952f0a6c4bcedfdfefaf1cf7Jake Hamby    }
1804094854091b63498f952f0a6c4bcedfdfefaf1cf7Jake Hamby
1805094854091b63498f952f0a6c4bcedfdfefaf1cf7Jake Hamby    /**
1806094854091b63498f952f0a6c4bcedfdfefaf1cf7Jake Hamby     * {@inheritDoc}
1807094854091b63498f952f0a6c4bcedfdfefaf1cf7Jake Hamby     */
18089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void handleCallSetupRequestFromSim(
18099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            boolean accept, Message response) {
18109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
18119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        RILRequest rr = RILRequest.obtain(
18129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            RILConstants.RIL_REQUEST_STK_HANDLE_CALL_SETUP_REQUESTED_FROM_SIM,
18139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            response);
18149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
18159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
18169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
18179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int[] param = new int[1];
18189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        param[0] = accept ? 1 : 0;
18199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeIntArray(param);
18209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
18219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
18229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
18239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
18249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@inheritDoc}
18259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1826975d348c18f7b9d378bebf3f69e6197b261705f0Wink Saville    @Override
1827975d348c18f7b9d378bebf3f69e6197b261705f0Wink Saville    public void setCurrentPreferredNetworkType() {
1828975d348c18f7b9d378bebf3f69e6197b261705f0Wink Saville        if (RILJ_LOGD) riljLog("setCurrentPreferredNetworkType: " + mSetPreferredNetworkType);
1829975d348c18f7b9d378bebf3f69e6197b261705f0Wink Saville        setPreferredNetworkType(mSetPreferredNetworkType, null);
1830975d348c18f7b9d378bebf3f69e6197b261705f0Wink Saville    }
1831975d348c18f7b9d378bebf3f69e6197b261705f0Wink Saville    private int mSetPreferredNetworkType;
1832975d348c18f7b9d378bebf3f69e6197b261705f0Wink Saville
1833975d348c18f7b9d378bebf3f69e6197b261705f0Wink Saville    /**
1834975d348c18f7b9d378bebf3f69e6197b261705f0Wink Saville     * {@inheritDoc}
1835975d348c18f7b9d378bebf3f69e6197b261705f0Wink Saville     */
18369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void setPreferredNetworkType(int networkType , Message response) {
18379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        RILRequest rr = RILRequest.obtain(
18389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                RILConstants.RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE, response);
18399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
18409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(1);
18419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(networkType);
18429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1843975d348c18f7b9d378bebf3f69e6197b261705f0Wink Saville        mSetPreferredNetworkType = networkType;
184405d69edc0ba9b016a1bd7cb89a03b24c5659bf8dWink Saville        mPreferredNetworkType = networkType;
184505d69edc0ba9b016a1bd7cb89a03b24c5659bf8dWink Saville
18469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
18479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                + " : " + networkType);
18489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
18499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
18509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
18519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
18529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
18539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@inheritDoc}
18549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
18559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void getPreferredNetworkType(Message response) {
18569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        RILRequest rr = RILRequest.obtain(
18579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                RILConstants.RIL_REQUEST_GET_PREFERRED_NETWORK_TYPE, response);
18589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
18599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
18609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
18619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
18629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
18639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
18649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
18659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@inheritDoc}
18669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
18679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void getNeighboringCids(Message response) {
18689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        RILRequest rr = RILRequest.obtain(
18699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                RILConstants.RIL_REQUEST_GET_NEIGHBORING_CELL_IDS, response);
18709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
18719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
18729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
18739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
18749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
18759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
18769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
18779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@inheritDoc}
18789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
18799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void setLocationUpdates(boolean enable, Message response) {
18809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        RILRequest rr = RILRequest.obtain(RIL_REQUEST_SET_LOCATION_UPDATES, response);
18819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(1);
18829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(enable ? 1 : 0);
1883767a662ecde33c3979bf02b793d392aca0403162Wink Saville
18849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "> "
18859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                + requestToString(rr.mRequest) + ": " + enable);
1886767a662ecde33c3979bf02b793d392aca0403162Wink Saville
18879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
18889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
18899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1890c06ce125408696fd49c7fa9e1189ecb61804007ajsh    /**
1891c06ce125408696fd49c7fa9e1189ecb61804007ajsh     * {@inheritDoc}
1892c06ce125408696fd49c7fa9e1189ecb61804007ajsh     */
1893c06ce125408696fd49c7fa9e1189ecb61804007ajsh    public void getSmscAddress(Message result) {
1894c06ce125408696fd49c7fa9e1189ecb61804007ajsh        RILRequest rr = RILRequest.obtain(RIL_REQUEST_GET_SMSC_ADDRESS, result);
1895c06ce125408696fd49c7fa9e1189ecb61804007ajsh
1896c06ce125408696fd49c7fa9e1189ecb61804007ajsh        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
1897c06ce125408696fd49c7fa9e1189ecb61804007ajsh
1898c06ce125408696fd49c7fa9e1189ecb61804007ajsh        send(rr);
1899c06ce125408696fd49c7fa9e1189ecb61804007ajsh    }
1900c06ce125408696fd49c7fa9e1189ecb61804007ajsh
1901c06ce125408696fd49c7fa9e1189ecb61804007ajsh    /**
1902c06ce125408696fd49c7fa9e1189ecb61804007ajsh     * {@inheritDoc}
1903c06ce125408696fd49c7fa9e1189ecb61804007ajsh     */
1904c06ce125408696fd49c7fa9e1189ecb61804007ajsh    public void setSmscAddress(String address, Message result) {
1905c06ce125408696fd49c7fa9e1189ecb61804007ajsh        RILRequest rr = RILRequest.obtain(RIL_REQUEST_SET_SMSC_ADDRESS, result);
1906c06ce125408696fd49c7fa9e1189ecb61804007ajsh
1907c06ce125408696fd49c7fa9e1189ecb61804007ajsh        rr.mp.writeString(address);
1908c06ce125408696fd49c7fa9e1189ecb61804007ajsh
1909c06ce125408696fd49c7fa9e1189ecb61804007ajsh        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
1910c06ce125408696fd49c7fa9e1189ecb61804007ajsh                + " : " + address);
1911c06ce125408696fd49c7fa9e1189ecb61804007ajsh
1912c06ce125408696fd49c7fa9e1189ecb61804007ajsh        send(rr);
1913c06ce125408696fd49c7fa9e1189ecb61804007ajsh    }
1914c06ce125408696fd49c7fa9e1189ecb61804007ajsh
1915867641ece36e2fd17faaea79cf19506ab17177c6jsh    /**
1916867641ece36e2fd17faaea79cf19506ab17177c6jsh     * {@inheritDoc}
1917867641ece36e2fd17faaea79cf19506ab17177c6jsh     */
1918867641ece36e2fd17faaea79cf19506ab17177c6jsh    public void reportSmsMemoryStatus(boolean available, Message result) {
1919867641ece36e2fd17faaea79cf19506ab17177c6jsh        RILRequest rr = RILRequest.obtain(RIL_REQUEST_REPORT_SMS_MEMORY_STATUS, result);
1920867641ece36e2fd17faaea79cf19506ab17177c6jsh        rr.mp.writeInt(1);
1921867641ece36e2fd17faaea79cf19506ab17177c6jsh        rr.mp.writeInt(available ? 1 : 0);
1922867641ece36e2fd17faaea79cf19506ab17177c6jsh
1923867641ece36e2fd17faaea79cf19506ab17177c6jsh        if (RILJ_LOGD) riljLog(rr.serialString() + "> "
1924867641ece36e2fd17faaea79cf19506ab17177c6jsh                + requestToString(rr.mRequest) + ": " + available);
1925867641ece36e2fd17faaea79cf19506ab17177c6jsh
1926867641ece36e2fd17faaea79cf19506ab17177c6jsh        send(rr);
1927867641ece36e2fd17faaea79cf19506ab17177c6jsh    }
1928867641ece36e2fd17faaea79cf19506ab17177c6jsh
1929e14af0e26eb11d0a9e4620a75aadcc4b40885aa8Wink Saville    /**
1930e14af0e26eb11d0a9e4620a75aadcc4b40885aa8Wink Saville     * {@inheritDoc}
1931e14af0e26eb11d0a9e4620a75aadcc4b40885aa8Wink Saville     */
1932e14af0e26eb11d0a9e4620a75aadcc4b40885aa8Wink Saville    public void reportStkServiceIsRunning(Message result) {
1933e14af0e26eb11d0a9e4620a75aadcc4b40885aa8Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_REPORT_STK_SERVICE_IS_RUNNING, result);
1934e14af0e26eb11d0a9e4620a75aadcc4b40885aa8Wink Saville
1935e14af0e26eb11d0a9e4620a75aadcc4b40885aa8Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
1936e14af0e26eb11d0a9e4620a75aadcc4b40885aa8Wink Saville
1937e14af0e26eb11d0a9e4620a75aadcc4b40885aa8Wink Saville        send(rr);
1938e14af0e26eb11d0a9e4620a75aadcc4b40885aa8Wink Saville    }
1939e14af0e26eb11d0a9e4620a75aadcc4b40885aa8Wink Saville
1940e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang    /**
1941e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang     * {@inheritDoc}
1942e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang     */
1943e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang    public void getGsmBroadcastConfig(Message response) {
1944e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang        RILRequest rr = RILRequest.obtain(RIL_REQUEST_GSM_GET_BROADCAST_CONFIG, response);
1945e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang
1946e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
1947e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang
1948e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang        send(rr);
1949e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang    }
1950e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang
1951e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang    /**
1952e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang     * {@inheritDoc}
1953e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang     */
1954e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang    public void setGsmBroadcastConfig(SmsBroadcastConfigInfo[] config, Message response) {
1955e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang        RILRequest rr = RILRequest.obtain(RIL_REQUEST_GSM_SET_BROADCAST_CONFIG, response);
1956e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang
1957e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang        int numOfConfig = config.length;
1958e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang        rr.mp.writeInt(numOfConfig);
1959e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang
1960e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang        for(int i = 0; i < numOfConfig; i++) {
1961e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang            rr.mp.writeInt(config[i].getFromServiceId());
1962e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang            rr.mp.writeInt(config[i].getToServiceId());
1963e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang            rr.mp.writeInt(config[i].getFromCodeScheme());
1964e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang            rr.mp.writeInt(config[i].getToCodeScheme());
1965e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang            rr.mp.writeInt(config[i].isSelected() ? 1 : 0);
1966e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang        }
1967e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang
1968e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang        if (RILJ_LOGD) {
1969e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang            riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
1970f044a370d41687e0546a63b747b7c383f7f41e3eJake Hamby                    + " with " + numOfConfig + " configs : ");
1971e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang            for (int i = 0; i < numOfConfig; i++) {
1972e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang                riljLog(config[i].toString());
1973e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang            }
1974e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang        }
1975e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang
1976e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang        send(rr);
1977e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang    }
1978e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang
1979e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang    /**
1980e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang     * {@inheritDoc}
1981e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang     */
1982e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang    public void setGsmBroadcastActivation(boolean activate, Message response) {
1983e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang        RILRequest rr = RILRequest.obtain(RIL_REQUEST_GSM_BROADCAST_ACTIVATION, response);
1984e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang
1985e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang        rr.mp.writeInt(1);
1986e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang        rr.mp.writeInt(activate ? 0 : 1);
1987e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang
1988e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
1989e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang
1990e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang        send(rr);
1991e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang    }
1992e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang
19939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //***** Private Methods
19949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1995767a662ecde33c3979bf02b793d392aca0403162Wink Saville    private void sendScreenState(boolean on) {
19969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        RILRequest rr = RILRequest.obtain(RIL_REQUEST_SCREEN_STATE, null);
19979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(1);
19989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.mp.writeInt(on ? 1 : 0);
1999767a662ecde33c3979bf02b793d392aca0403162Wink Saville
2000e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString()
2001e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                + "> " + requestToString(rr.mRequest) + ": " + on);
2002767a662ecde33c3979bf02b793d392aca0403162Wink Saville
20039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        send(rr);
20049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2005767a662ecde33c3979bf02b793d392aca0403162Wink Saville
20069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    protected void
2007767a662ecde33c3979bf02b793d392aca0403162Wink Saville    onRadioAvailable() {
20089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // In case screen state was lost (due to process crash),
20099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // this ensures that the RIL knows the correct screen state.
20109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
20119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // TODO: Should query Power Manager and send the actual
20129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // screen state.  Just send true for now.
20139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sendScreenState(true);
20149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project   }
20159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
20169a8e567d2a801d36842e611c1ec7d73c71fffd8fAlex Yakavenka    private RadioState getRadioStateFromInt(int stateInt) {
20179a8e567d2a801d36842e611c1ec7d73c71fffd8fAlex Yakavenka        RadioState state;
20189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
20199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /* RIL_RadioState ril.h */
20209a8e567d2a801d36842e611c1ec7d73c71fffd8fAlex Yakavenka        switch(stateInt) {
20219a8e567d2a801d36842e611c1ec7d73c71fffd8fAlex Yakavenka            case 0: state = RadioState.RADIO_OFF; break;
20229a8e567d2a801d36842e611c1ec7d73c71fffd8fAlex Yakavenka            case 1: state = RadioState.RADIO_UNAVAILABLE; break;
20239a8e567d2a801d36842e611c1ec7d73c71fffd8fAlex Yakavenka            case 2: state = RadioState.SIM_NOT_READY; break;
20249a8e567d2a801d36842e611c1ec7d73c71fffd8fAlex Yakavenka            case 3: state = RadioState.SIM_LOCKED_OR_ABSENT; break;
20259a8e567d2a801d36842e611c1ec7d73c71fffd8fAlex Yakavenka            case 4: state = RadioState.SIM_READY; break;
20269a8e567d2a801d36842e611c1ec7d73c71fffd8fAlex Yakavenka            case 5: state = RadioState.RUIM_NOT_READY; break;
20279a8e567d2a801d36842e611c1ec7d73c71fffd8fAlex Yakavenka            case 6: state = RadioState.RUIM_READY; break;
20289a8e567d2a801d36842e611c1ec7d73c71fffd8fAlex Yakavenka            case 7: state = RadioState.RUIM_LOCKED_OR_ABSENT; break;
20299a8e567d2a801d36842e611c1ec7d73c71fffd8fAlex Yakavenka            case 8: state = RadioState.NV_NOT_READY; break;
20309a8e567d2a801d36842e611c1ec7d73c71fffd8fAlex Yakavenka            case 9: state = RadioState.NV_READY; break;
2031767a662ecde33c3979bf02b793d392aca0403162Wink Saville
2032767a662ecde33c3979bf02b793d392aca0403162Wink Saville            default:
20339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                throw new RuntimeException(
20349a8e567d2a801d36842e611c1ec7d73c71fffd8fAlex Yakavenka                            "Unrecognized RIL_RadioState: " + stateInt);
20359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
20369a8e567d2a801d36842e611c1ec7d73c71fffd8fAlex Yakavenka        return state;
20379a8e567d2a801d36842e611c1ec7d73c71fffd8fAlex Yakavenka    }
20389a8e567d2a801d36842e611c1ec7d73c71fffd8fAlex Yakavenka
20399a8e567d2a801d36842e611c1ec7d73c71fffd8fAlex Yakavenka    private void switchToRadioState(RadioState newState) {
204066958c73674673274bf08266b60ad3c1791c9179Wink Saville        setRadioState(newState);
20419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
20429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
20439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
20449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Holds a PARTIAL_WAKE_LOCK whenever
20459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * a) There is outstanding RIL request sent to RIL deamon and no replied
2046696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang     * b) There is a request pending to be sent out.
20479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2048767a662ecde33c3979bf02b793d392aca0403162Wink Saville     * There is a WAKE_LOCK_TIMEOUT to release the lock, though it shouldn't
20499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * happen often.
20509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
20519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
20529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private void
2053767a662ecde33c3979bf02b793d392aca0403162Wink Saville    acquireWakeLock() {
20549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        synchronized (mWakeLock) {
20559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mWakeLock.acquire();
20569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mRequestMessagesPending++;
20579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
20589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mSender.removeMessages(EVENT_WAKE_LOCK_TIMEOUT);
20599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Message msg = mSender.obtainMessage(EVENT_WAKE_LOCK_TIMEOUT);
20600e57e73575f27682b57b8ba615215d1bc2669b3aWink Saville            mSender.sendMessageDelayed(msg, mWakeLockTimeout);
20619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
20629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
20639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
20649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private void
2065767a662ecde33c3979bf02b793d392aca0403162Wink Saville    releaseWakeLockIfDone() {
20669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        synchronized (mWakeLock) {
20679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (mWakeLock.isHeld() &&
20689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                (mRequestMessagesPending == 0) &&
2069696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                (mRequestMessagesWaiting == 0)) {
20709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mSender.removeMessages(EVENT_WAKE_LOCK_TIMEOUT);
20719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mWakeLock.release();
20729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
20739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
20749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
20759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
20769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private void
2077767a662ecde33c3979bf02b793d392aca0403162Wink Saville    send(RILRequest rr) {
20789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Message msg;
20799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
208060bb9c9a81bcd766d3e79f765ac22c7c38492409Anshul Jain        if (mSocket == null) {
208160bb9c9a81bcd766d3e79f765ac22c7c38492409Anshul Jain            rr.onError(RADIO_NOT_AVAILABLE, null);
208260bb9c9a81bcd766d3e79f765ac22c7c38492409Anshul Jain            rr.release();
208360bb9c9a81bcd766d3e79f765ac22c7c38492409Anshul Jain            return;
208460bb9c9a81bcd766d3e79f765ac22c7c38492409Anshul Jain        }
208560bb9c9a81bcd766d3e79f765ac22c7c38492409Anshul Jain
20869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        msg = mSender.obtainMessage(EVENT_SEND, rr);
20879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
20889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        acquireWakeLock();
20899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
20909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        msg.sendToTarget();
20919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
20929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
20939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private void
2094767a662ecde33c3979bf02b793d392aca0403162Wink Saville    processResponse (Parcel p) {
20959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int type;
20969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
20979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        type = p.readInt();
20989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
20999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (type == RESPONSE_UNSOLICITED) {
21009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            processUnsolicited (p);
21019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } else if (type == RESPONSE_SOLICITED) {
21029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            processSolicited (p);
2103767a662ecde33c3979bf02b793d392aca0403162Wink Saville        }
21049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
21059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        releaseWakeLockIfDone();
21069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
21079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
210800d520b66caeef722281b76d30c0e1294070713dJohn Wang    /**
210900d520b66caeef722281b76d30c0e1294070713dJohn Wang     * Release each request in mReqeustsList then clear the list
211000d520b66caeef722281b76d30c0e1294070713dJohn Wang     * @param error is the RIL_Errno sent back
211100d520b66caeef722281b76d30c0e1294070713dJohn Wang     * @param loggable true means to print all requests in mRequestslist
211200d520b66caeef722281b76d30c0e1294070713dJohn Wang     */
211300d520b66caeef722281b76d30c0e1294070713dJohn Wang    private void clearRequestsList(int error, boolean loggable) {
211400d520b66caeef722281b76d30c0e1294070713dJohn Wang        RILRequest rr;
211500d520b66caeef722281b76d30c0e1294070713dJohn Wang        synchronized (mRequestsList) {
211600d520b66caeef722281b76d30c0e1294070713dJohn Wang            int count = mRequestsList.size();
211700d520b66caeef722281b76d30c0e1294070713dJohn Wang            if (RILJ_LOGD && loggable) {
211800d520b66caeef722281b76d30c0e1294070713dJohn Wang                Log.d(LOG_TAG, "WAKE_LOCK_TIMEOUT " +
211900d520b66caeef722281b76d30c0e1294070713dJohn Wang                        " mReqPending=" + mRequestMessagesPending +
212000d520b66caeef722281b76d30c0e1294070713dJohn Wang                        " mRequestList=" + count);
212100d520b66caeef722281b76d30c0e1294070713dJohn Wang            }
212200d520b66caeef722281b76d30c0e1294070713dJohn Wang
212300d520b66caeef722281b76d30c0e1294070713dJohn Wang            for (int i = 0; i < count ; i++) {
212400d520b66caeef722281b76d30c0e1294070713dJohn Wang                rr = mRequestsList.get(i);
212500d520b66caeef722281b76d30c0e1294070713dJohn Wang                if (RILJ_LOGD && loggable) {
212600d520b66caeef722281b76d30c0e1294070713dJohn Wang                    Log.d(LOG_TAG, i + ": [" + rr.mSerial + "] " +
212700d520b66caeef722281b76d30c0e1294070713dJohn Wang                            requestToString(rr.mRequest));
212800d520b66caeef722281b76d30c0e1294070713dJohn Wang                }
212900d520b66caeef722281b76d30c0e1294070713dJohn Wang                rr.onError(error, null);
213000d520b66caeef722281b76d30c0e1294070713dJohn Wang                rr.release();
213100d520b66caeef722281b76d30c0e1294070713dJohn Wang            }
213200d520b66caeef722281b76d30c0e1294070713dJohn Wang            mRequestsList.clear();
2133696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang            mRequestMessagesWaiting = 0;
213400d520b66caeef722281b76d30c0e1294070713dJohn Wang        }
213500d520b66caeef722281b76d30c0e1294070713dJohn Wang    }
213600d520b66caeef722281b76d30c0e1294070713dJohn Wang
2137767a662ecde33c3979bf02b793d392aca0403162Wink Saville    private RILRequest findAndRemoveRequestFromList(int serial) {
21389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        synchronized (mRequestsList) {
21399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            for (int i = 0, s = mRequestsList.size() ; i < s ; i++) {
21409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                RILRequest rr = mRequestsList.get(i);
21419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
21429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                if (rr.mSerial == serial) {
21439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    mRequestsList.remove(i);
2144696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                    if (mRequestMessagesWaiting > 0)
2145696794fc139a752e2a10fa66d73a9ae6fd085accJohn Wang                        mRequestMessagesWaiting--;
21469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    return rr;
21479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
21489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
21499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
21509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
21519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return null;
21529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
21539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
21549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private void
2155767a662ecde33c3979bf02b793d392aca0403162Wink Saville    processSolicited (Parcel p) {
21569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int serial, error;
21579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        boolean found = false;
21589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
21599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        serial = p.readInt();
21609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        error = p.readInt();
21619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
21629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        RILRequest rr;
21639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
21649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr = findAndRemoveRequestFromList(serial);
21659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
21669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (rr == null) {
2167767a662ecde33c3979bf02b793d392aca0403162Wink Saville            Log.w(LOG_TAG, "Unexpected solicited response! sn: "
21689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            + serial + " error: " + error);
21699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return;
21709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
21719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
217203228fa8f950dfee3f679d280f98d040dea397dcjohnwang        Object ret = null;
2173767a662ecde33c3979bf02b793d392aca0403162Wink Saville
217403228fa8f950dfee3f679d280f98d040dea397dcjohnwang        if (error == 0 || p.dataAvail() > 0) {
217503228fa8f950dfee3f679d280f98d040dea397dcjohnwang            // either command succeeds or command fails but with data payload
217603228fa8f950dfee3f679d280f98d040dea397dcjohnwang            try {switch (rr.mRequest) {
217703228fa8f950dfee3f679d280f98d040dea397dcjohnwang            /*
21789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project cat libs/telephony/ril_commands.h \
21799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project | egrep "^ *{RIL_" \
21809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project | sed -re 's/\{([^,]+),[^,]+,([^}]+).+/case \1: ret = \2(p); break;/'
218103228fa8f950dfee3f679d280f98d040dea397dcjohnwang             */
2182767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_GET_SIM_STATUS: ret =  responseIccCardStatus(p); break;
2183be7f0f78afde931ce6ea2d4ba61c340fac5722f6jsh            case RIL_REQUEST_ENTER_SIM_PIN: ret =  responseInts(p); break;
2184be7f0f78afde931ce6ea2d4ba61c340fac5722f6jsh            case RIL_REQUEST_ENTER_SIM_PUK: ret =  responseInts(p); break;
2185be7f0f78afde931ce6ea2d4ba61c340fac5722f6jsh            case RIL_REQUEST_ENTER_SIM_PIN2: ret =  responseInts(p); break;
2186be7f0f78afde931ce6ea2d4ba61c340fac5722f6jsh            case RIL_REQUEST_ENTER_SIM_PUK2: ret =  responseInts(p); break;
2187be7f0f78afde931ce6ea2d4ba61c340fac5722f6jsh            case RIL_REQUEST_CHANGE_SIM_PIN: ret =  responseInts(p); break;
2188be7f0f78afde931ce6ea2d4ba61c340fac5722f6jsh            case RIL_REQUEST_CHANGE_SIM_PIN2: ret =  responseInts(p); break;
2189be7f0f78afde931ce6ea2d4ba61c340fac5722f6jsh            case RIL_REQUEST_ENTER_NETWORK_DEPERSONALIZATION: ret =  responseInts(p); break;
21909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_GET_CURRENT_CALLS: ret =  responseCallList(p); break;
21919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_DIAL: ret =  responseVoid(p); break;
21929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_GET_IMSI: ret =  responseString(p); break;
21939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_HANGUP: ret =  responseVoid(p); break;
21949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_HANGUP_WAITING_OR_BACKGROUND: ret =  responseVoid(p); break;
21959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_HANGUP_FOREGROUND_RESUME_BACKGROUND: ret =  responseVoid(p); break;
21969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_SWITCH_WAITING_OR_HOLDING_AND_ACTIVE: ret =  responseVoid(p); break;
21979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_CONFERENCE: ret =  responseVoid(p); break;
21989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_UDUB: ret =  responseVoid(p); break;
21999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_LAST_CALL_FAIL_CAUSE: ret =  responseInts(p); break;
2200dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville            case RIL_REQUEST_SIGNAL_STRENGTH: ret =  responseSignalStrength(p); break;
22015284090631e638b916d9a453212e9dc802656a67Wink Saville            case RIL_REQUEST_VOICE_REGISTRATION_STATE: ret =  responseStrings(p); break;
22025284090631e638b916d9a453212e9dc802656a67Wink Saville            case RIL_REQUEST_DATA_REGISTRATION_STATE: ret =  responseStrings(p); break;
22039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_OPERATOR: ret =  responseStrings(p); break;
22049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_RADIO_POWER: ret =  responseVoid(p); break;
22059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_DTMF: ret =  responseVoid(p); break;
22069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_SEND_SMS: ret =  responseSMS(p); break;
22079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_SEND_SMS_EXPECT_MORE: ret =  responseSMS(p); break;
2208abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville            case RIL_REQUEST_SETUP_DATA_CALL: ret =  responseSetupDataCall(p); break;
2209767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_SIM_IO: ret =  responseICC_IO(p); break;
22109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_SEND_USSD: ret =  responseVoid(p); break;
22119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_CANCEL_USSD: ret =  responseVoid(p); break;
22129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_GET_CLIR: ret =  responseInts(p); break;
22139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_SET_CLIR: ret =  responseVoid(p); break;
22149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_QUERY_CALL_FORWARD_STATUS: ret =  responseCallForward(p); break;
22159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_SET_CALL_FORWARD: ret =  responseVoid(p); break;
22169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_QUERY_CALL_WAITING: ret =  responseInts(p); break;
22179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_SET_CALL_WAITING: ret =  responseVoid(p); break;
22189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_SMS_ACKNOWLEDGE: ret =  responseVoid(p); break;
22199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_GET_IMEI: ret =  responseString(p); break;
22209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_GET_IMEISV: ret =  responseString(p); break;
22219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_ANSWER: ret =  responseVoid(p); break;
2222767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_DEACTIVATE_DATA_CALL: ret =  responseVoid(p); break;
22239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_QUERY_FACILITY_LOCK: ret =  responseInts(p); break;
2224be7f0f78afde931ce6ea2d4ba61c340fac5722f6jsh            case RIL_REQUEST_SET_FACILITY_LOCK: ret =  responseInts(p); break;
22259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_CHANGE_BARRING_PASSWORD: ret =  responseVoid(p); break;
22269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_QUERY_NETWORK_SELECTION_MODE: ret =  responseInts(p); break;
22279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_SET_NETWORK_SELECTION_AUTOMATIC: ret =  responseVoid(p); break;
22289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_SET_NETWORK_SELECTION_MANUAL: ret =  responseVoid(p); break;
22293caa1bd1061df4029951e68d0a04d5e30928701fRobert Greenwalt            case RIL_REQUEST_QUERY_AVAILABLE_NETWORKS : ret =  responseOperatorInfos(p); break;
22309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_DTMF_START: ret =  responseVoid(p); break;
22319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_DTMF_STOP: ret =  responseVoid(p); break;
22329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_BASEBAND_VERSION: ret =  responseString(p); break;
22339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_SEPARATE_CONNECTION: ret =  responseVoid(p); break;
2234767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_SET_MUTE: ret =  responseVoid(p); break;
2235767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_GET_MUTE: ret =  responseInts(p); break;
2236767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_QUERY_CLIP: ret =  responseInts(p); break;
2237767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_LAST_DATA_CALL_FAIL_CAUSE: ret =  responseInts(p); break;
2238767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_DATA_CALL_LIST: ret =  responseDataCallList(p); break;
2239767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_RESET_RADIO: ret =  responseVoid(p); break;
2240767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_OEM_HOOK_RAW: ret =  responseRaw(p); break;
2241767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_OEM_HOOK_STRINGS: ret =  responseStrings(p); break;
22429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_SCREEN_STATE: ret =  responseVoid(p); break;
2243767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_SET_SUPP_SVC_NOTIFICATION: ret =  responseVoid(p); break;
2244767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_WRITE_SMS_TO_SIM: ret =  responseInts(p); break;
2245767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_DELETE_SMS_ON_SIM: ret =  responseVoid(p); break;
2246767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_SET_BAND_MODE: ret =  responseVoid(p); break;
2247767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_QUERY_AVAILABLE_BAND_MODE: ret =  responseInts(p); break;
2248767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_STK_GET_PROFILE: ret =  responseString(p); break;
2249767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_STK_SET_PROFILE: ret =  responseVoid(p); break;
2250767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_STK_SEND_ENVELOPE_COMMAND: ret =  responseString(p); break;
2251767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_STK_SEND_TERMINAL_RESPONSE: ret =  responseVoid(p); break;
2252767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_STK_HANDLE_CALL_SETUP_REQUESTED_FROM_SIM: ret =  responseInts(p); break;
2253767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_EXPLICIT_CALL_TRANSFER: ret =  responseVoid(p); break;
2254767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE: ret =  responseVoid(p); break;
225505d69edc0ba9b016a1bd7cb89a03b24c5659bf8dWink Saville            case RIL_REQUEST_GET_PREFERRED_NETWORK_TYPE: ret =  responseGetPreferredNetworkType(p); break;
22569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_GET_NEIGHBORING_CELL_IDS: ret = responseCellList(p); break;
2257767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_SET_LOCATION_UPDATES: ret =  responseVoid(p); break;
22585284090631e638b916d9a453212e9dc802656a67Wink Saville            case RIL_REQUEST_CDMA_SET_SUBSCRIPTION_SOURCE: ret =  responseVoid(p); break;
2259767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_CDMA_SET_ROAMING_PREFERENCE: ret =  responseVoid(p); break;
2260767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_CDMA_QUERY_ROAMING_PREFERENCE: ret =  responseInts(p); break;
2261767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_SET_TTY_MODE: ret =  responseVoid(p); break;
2262767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_QUERY_TTY_MODE: ret =  responseInts(p); break;
2263767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_CDMA_SET_PREFERRED_VOICE_PRIVACY_MODE: ret =  responseVoid(p); break;
2264767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_CDMA_QUERY_PREFERRED_VOICE_PRIVACY_MODE: ret =  responseInts(p); break;
2265767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_CDMA_FLASH: ret =  responseVoid(p); break;
2266767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_CDMA_BURST_DTMF: ret =  responseVoid(p); break;
2267e66b5c43cb2d0aece7f4a636a2368a9c66c46cf5Wink Saville            case RIL_REQUEST_CDMA_SEND_SMS: ret =  responseSMS(p); break;
2268767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_CDMA_SMS_ACKNOWLEDGE: ret =  responseVoid(p); break;
2269e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang            case RIL_REQUEST_GSM_GET_BROADCAST_CONFIG: ret =  responseGmsBroadcastConfig(p); break;
2270e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang            case RIL_REQUEST_GSM_SET_BROADCAST_CONFIG: ret =  responseVoid(p); break;
2271e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang            case RIL_REQUEST_GSM_BROADCAST_ACTIVATION: ret =  responseVoid(p); break;
2272e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang            case RIL_REQUEST_CDMA_GET_BROADCAST_CONFIG: ret =  responseCdmaBroadcastConfig(p); break;
2273767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_CDMA_SET_BROADCAST_CONFIG: ret =  responseVoid(p); break;
2274767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_CDMA_BROADCAST_ACTIVATION: ret =  responseVoid(p); break;
227527d074e0efbdabd40f00eca41169ea225c05fcbeNaveen Kalla            case RIL_REQUEST_CDMA_VALIDATE_AND_WRITE_AKEY: ret =  responseVoid(p); break;
2276767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_CDMA_SUBSCRIPTION: ret =  responseStrings(p); break;
2277767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_CDMA_WRITE_SMS_TO_RUIM: ret =  responseInts(p); break;
2278767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_CDMA_DELETE_SMS_ON_RUIM: ret =  responseVoid(p); break;
2279767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_DEVICE_IDENTITY: ret =  responseStrings(p); break;
2280c06ce125408696fd49c7fa9e1189ecb61804007ajsh            case RIL_REQUEST_GET_SMSC_ADDRESS: ret = responseString(p); break;
2281c06ce125408696fd49c7fa9e1189ecb61804007ajsh            case RIL_REQUEST_SET_SMSC_ADDRESS: ret = responseVoid(p); break;
2282e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville            case RIL_REQUEST_EXIT_EMERGENCY_CALLBACK_MODE: ret = responseVoid(p); break;
2283e51d57f4ab035cd9bc316cc0f93a200d326ef5f9Jaikumar Ganesh            case RIL_REQUEST_REPORT_SMS_MEMORY_STATUS: ret = responseVoid(p); break;
2284144fdfec240a56890657d2248a22bdda9f22470cWink Saville            case RIL_REQUEST_REPORT_STK_SERVICE_IS_RUNNING: ret = responseVoid(p); break;
22855284090631e638b916d9a453212e9dc802656a67Wink Saville            case RIL_REQUEST_CDMA_GET_SUBSCRIPTION_SOURCE: ret =  responseInts(p); break;
2286463f22114587344c96460179069a08d7381fbfd6Jake Hamby            case RIL_REQUEST_ISIM_AUTHENTICATION: ret =  responseString(p); break;
2287094854091b63498f952f0a6c4bcedfdfefaf1cf7Jake Hamby            case RIL_REQUEST_ACKNOWLEDGE_INCOMING_GSM_SMS_WITH_PDU: ret = responseVoid(p); break;
2288094854091b63498f952f0a6c4bcedfdfefaf1cf7Jake Hamby            case RIL_REQUEST_STK_SEND_ENVELOPE_WITH_STATUS: ret = responseICC_IO(p); break;
22899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            default:
2290767a662ecde33c3979bf02b793d392aca0403162Wink Saville                throw new RuntimeException("Unrecognized solicited response: " + rr.mRequest);
22919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            //break;
229203228fa8f950dfee3f679d280f98d040dea397dcjohnwang            }} catch (Throwable tr) {
229303228fa8f950dfee3f679d280f98d040dea397dcjohnwang                // Exceptions here usually mean invalid RIL responses
2294767a662ecde33c3979bf02b793d392aca0403162Wink Saville
229503228fa8f950dfee3f679d280f98d040dea397dcjohnwang                Log.w(LOG_TAG, rr.serialString() + "< "
229603228fa8f950dfee3f679d280f98d040dea397dcjohnwang                        + requestToString(rr.mRequest)
229703228fa8f950dfee3f679d280f98d040dea397dcjohnwang                        + " exception, possible invalid RIL response", tr);
22989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
229903228fa8f950dfee3f679d280f98d040dea397dcjohnwang                if (rr.mResult != null) {
230003228fa8f950dfee3f679d280f98d040dea397dcjohnwang                    AsyncResult.forMessage(rr.mResult, null, tr);
230103228fa8f950dfee3f679d280f98d040dea397dcjohnwang                    rr.mResult.sendToTarget();
230203228fa8f950dfee3f679d280f98d040dea397dcjohnwang                }
230303228fa8f950dfee3f679d280f98d040dea397dcjohnwang                rr.release();
230403228fa8f950dfee3f679d280f98d040dea397dcjohnwang                return;
23059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
230603228fa8f950dfee3f679d280f98d040dea397dcjohnwang        }
230703228fa8f950dfee3f679d280f98d040dea397dcjohnwang
230803228fa8f950dfee3f679d280f98d040dea397dcjohnwang        if (error != 0) {
230903228fa8f950dfee3f679d280f98d040dea397dcjohnwang            rr.onError(error, ret);
23109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            rr.release();
23119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return;
23129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
23139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
23149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (RILJ_LOGD) riljLog(rr.serialString() + "< " + requestToString(rr.mRequest)
23159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            + " " + retToString(rr.mRequest, ret));
2316767a662ecde33c3979bf02b793d392aca0403162Wink Saville
23179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (rr.mResult != null) {
23189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            AsyncResult.forMessage(rr.mResult, ret, null);
23199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            rr.mResult.sendToTarget();
23209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2321767a662ecde33c3979bf02b793d392aca0403162Wink Saville
23229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        rr.release();
23239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
23249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
23259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private String
2326767a662ecde33c3979bf02b793d392aca0403162Wink Saville    retToString(int req, Object ret) {
23279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (ret == null) return "";
23289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        switch (req) {
23299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            // Don't log these return values, for privacy's sake.
23309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_GET_IMSI:
23319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_GET_IMEI:
23329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_GET_IMEISV:
23331d1a373f5c7637de545ad815ad21aa325aaa970fWink Saville                if (!RILJ_LOGV) {
23341d1a373f5c7637de545ad815ad21aa325aaa970fWink Saville                    // If not versbose logging just return and don't display IMSI and IMEI, IMEISV
23351d1a373f5c7637de545ad815ad21aa325aaa970fWink Saville                    return "";
23361d1a373f5c7637de545ad815ad21aa325aaa970fWink Saville                }
23379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
23389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
23399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        StringBuilder sb;
23409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        String s;
23419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int length;
23429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (ret instanceof int[]){
23439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int[] intArray = (int[]) ret;
23449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            length = intArray.length;
23459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            sb = new StringBuilder("{");
23469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (length > 0) {
23479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                int i = 0;
23489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                sb.append(intArray[i++]);
23499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                while ( i < length) {
23509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    sb.append(", ").append(intArray[i++]);
23519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
23529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
23539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            sb.append("}");
23549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            s = sb.toString();
23559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } else if (ret instanceof String[]) {
23569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String[] strings = (String[]) ret;
23579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            length = strings.length;
23589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            sb = new StringBuilder("{");
23599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (length > 0) {
23609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                int i = 0;
23619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                sb.append(strings[i++]);
23629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                while ( i < length) {
23639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    sb.append(", ").append(strings[i++]);
23649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
23659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
23669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            sb.append("}");
23679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            s = sb.toString();
23689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }else if (req == RIL_REQUEST_GET_CURRENT_CALLS) {
23699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            ArrayList<DriverCall> calls = (ArrayList<DriverCall>) ret;
23709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            sb = new StringBuilder(" ");
23719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            for (DriverCall dc : calls) {
23729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                sb.append("[").append(dc).append("] ");
23739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
23749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            s = sb.toString();
23759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } else if (req == RIL_REQUEST_GET_NEIGHBORING_CELL_IDS) {
23769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            ArrayList<NeighboringCellInfo> cells;
23779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            cells = (ArrayList<NeighboringCellInfo>) ret;
23789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            sb = new StringBuilder(" ");
23799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            for (NeighboringCellInfo cell : cells) {
23809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                sb.append(cell).append(" ");
23819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
23829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            s = sb.toString();
23839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } else {
23849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            s = ret.toString();
23859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
23869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return s;
23879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
23889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
23899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private void
2390767a662ecde33c3979bf02b793d392aca0403162Wink Saville    processUnsolicited (Parcel p) {
23919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int response;
23929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Object ret;
23939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
23949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        response = p.readInt();
23959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
23969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {switch(response) {
23979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
23989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project cat libs/telephony/ril_unsol_commands.h \
23999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project | egrep "^ *{RIL_" \
24009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project | sed -re 's/\{([^,]+),[^,]+,([^}]+).+/case \1: \2(rr, p); break;/'
24019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project*/
24029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
24039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_RESPONSE_RADIO_STATE_CHANGED: ret =  responseVoid(p); break;
24049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED: ret =  responseVoid(p); break;
24055284090631e638b916d9a453212e9dc802656a67Wink Saville            case RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED: ret =  responseVoid(p); break;
24069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_RESPONSE_NEW_SMS: ret =  responseString(p); break;
24079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_RESPONSE_NEW_SMS_STATUS_REPORT: ret =  responseString(p); break;
24089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_RESPONSE_NEW_SMS_ON_SIM: ret =  responseInts(p); break;
24099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_ON_USSD: ret =  responseStrings(p); break;
24109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_NITZ_TIME_RECEIVED: ret =  responseString(p); break;
2411dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville            case RIL_UNSOL_SIGNAL_STRENGTH: ret = responseSignalStrength(p); break;
2412767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_UNSOL_DATA_CALL_LIST_CHANGED: ret = responseDataCallList(p);break;
24139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_SUPP_SVC_NOTIFICATION: ret = responseSuppServiceNotification(p); break;
24149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_STK_SESSION_END: ret = responseVoid(p); break;
24159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_STK_PROACTIVE_COMMAND: ret = responseString(p); break;
24169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_STK_EVENT_NOTIFY: ret = responseString(p); break;
24179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_STK_CALL_SETUP: ret = responseInts(p); break;
24189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_SIM_SMS_STORAGE_FULL: ret =  responseVoid(p); break;
24199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_SIM_REFRESH: ret =  responseInts(p); break;
2420e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville            case RIL_UNSOL_CALL_RING: ret =  responseCallRing(p); break;
24214df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project            case RIL_UNSOL_RESTRICTED_STATE_CHANGED: ret = responseInts(p); break;
2422767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_UNSOL_RESPONSE_SIM_STATUS_CHANGED:  ret =  responseVoid(p); break;
2423767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_UNSOL_RESPONSE_CDMA_NEW_SMS:  ret =  responseCdmaSms(p); break;
24243b9f0a33a110d01e587ffd5ec7708af68723ad4bJean-Baptiste Queru            case RIL_UNSOL_RESPONSE_NEW_BROADCAST_SMS:  ret =  responseRaw(p); break;
2425767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_UNSOL_CDMA_RUIM_SMS_STORAGE_FULL:  ret =  responseVoid(p); break;
2426e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville            case RIL_UNSOL_ENTER_EMERGENCY_CALLBACK_MODE: ret = responseVoid(p); break;
2427e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville            case RIL_UNSOL_CDMA_CALL_WAITING: ret = responseCdmaCallWaiting(p); break;
2428e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville            case RIL_UNSOL_CDMA_OTA_PROVISION_STATUS: ret = responseInts(p); break;
242922ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville            case RIL_UNSOL_CDMA_INFO_REC: ret = responseCdmaInformationRecord(p); break;
24302a34043d5578deb8d7f93830e13c4efc91eba583Jaikumar Ganesh            case RIL_UNSOL_OEM_HOOK_RAW: ret = responseRaw(p); break;
2431bbd754b8fe7563234b5c4c8d1425a7417337f2f2John Wang            case RIL_UNSOL_RINGBACK_TONE: ret = responseInts(p); break;
24321ccc41ed938ff005ae3d621292580a90601242caJohn Wang            case RIL_UNSOL_RESEND_INCALL_MUTE: ret = responseVoid(p); break;
243366958c73674673274bf08266b60ad3c1791c9179Wink Saville            case RIL_UNSOL_CDMA_SUBSCRIPTION_SOURCE_CHANGED: ret = responseInts(p); break;
24345284090631e638b916d9a453212e9dc802656a67Wink Saville            case RIL_UNSOl_CDMA_PRL_CHANGED: ret = responseInts(p); break;
24355284090631e638b916d9a453212e9dc802656a67Wink Saville            case RIL_UNSOL_EXIT_EMERGENCY_CALLBACK_MODE: ret = responseVoid(p); break;
24361dd2ada5cf7d0c95afb4731d082473f34ee7f433Wink Saville            case RIL_UNSOL_RIL_CONNECTED: ret = responseInts(p); break;
2437e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
2438767a662ecde33c3979bf02b793d392aca0403162Wink Saville            default:
2439767a662ecde33c3979bf02b793d392aca0403162Wink Saville                throw new RuntimeException("Unrecognized unsol response: " + response);
24409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            //break; (implied)
24419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }} catch (Throwable tr) {
24422a34043d5578deb8d7f93830e13c4efc91eba583Jaikumar Ganesh            Log.e(LOG_TAG, "Exception processing unsol response: " + response +
24439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                "Exception:" + tr.toString());
24449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return;
24459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
24469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
24479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        switch(response) {
24489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_RESPONSE_RADIO_STATE_CHANGED:
24499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                /* has bonus radio state int */
24509a8e567d2a801d36842e611c1ec7d73c71fffd8fAlex Yakavenka                RadioState newState = getRadioStateFromInt(p.readInt());
24519a8e567d2a801d36842e611c1ec7d73c71fffd8fAlex Yakavenka                if (RILJ_LOGD) unsljLogMore(response, newState.toString());
2452767a662ecde33c3979bf02b793d392aca0403162Wink Saville
24539a8e567d2a801d36842e611c1ec7d73c71fffd8fAlex Yakavenka                switchToRadioState(newState);
24549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            break;
24559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED:
24569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                if (RILJ_LOGD) unsljLog(response);
24579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
24589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mCallStateRegistrants
24599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    .notifyRegistrants(new AsyncResult(null, null, null));
24609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            break;
24615284090631e638b916d9a453212e9dc802656a67Wink Saville            case RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED:
24629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                if (RILJ_LOGD) unsljLog(response);
24639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
24645284090631e638b916d9a453212e9dc802656a67Wink Saville                mVoiceNetworkStateRegistrants
24659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    .notifyRegistrants(new AsyncResult(null, null, null));
24669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            break;
24679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_RESPONSE_NEW_SMS: {
24689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                if (RILJ_LOGD) unsljLog(response);
24699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
24709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                // FIXME this should move up a layer
24719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                String a[] = new String[2];
24729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
24739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                a[1] = (String)ret;
24749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
24759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                SmsMessage sms;
24769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2477767a662ecde33c3979bf02b793d392aca0403162Wink Saville                sms = SmsMessage.newFromCMT(a);
2478b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby                if (mGsmSmsRegistrant != null) {
2479b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby                    mGsmSmsRegistrant
24809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        .notifyRegistrant(new AsyncResult(null, sms, null));
24819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
24829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            break;
24839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
24849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_RESPONSE_NEW_SMS_STATUS_REPORT:
24859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                if (RILJ_LOGD) unsljLogRet(response, ret);
24869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
24879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                if (mSmsStatusRegistrant != null) {
24889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    mSmsStatusRegistrant.notifyRegistrant(
24899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            new AsyncResult(null, ret, null));
24909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
24919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            break;
24929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_RESPONSE_NEW_SMS_ON_SIM:
24939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                if (RILJ_LOGD) unsljLogRet(response, ret);
24949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
24959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                int[] smsIndex = (int[])ret;
24969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
24979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                if(smsIndex.length == 1) {
24989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    if (mSmsOnSimRegistrant != null) {
24999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        mSmsOnSimRegistrant.
25009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                notifyRegistrant(new AsyncResult(null, smsIndex, null));
25019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    }
25029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                } else {
25039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    if (RILJ_LOGD) riljLog(" NEW_SMS_ON_SIM ERROR with wrong length "
25049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            + smsIndex.length);
25059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
25069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            break;
25079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_ON_USSD:
25089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                String[] resp = (String[])ret;
2509767a662ecde33c3979bf02b793d392aca0403162Wink Saville
25109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                if (resp.length < 2) {
25119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    resp = new String[2];
25129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    resp[0] = ((String[])ret)[0];
25139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    resp[1] = null;
25149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
25159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                if (RILJ_LOGD) unsljLogMore(response, resp[0]);
25169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                if (mUSSDRegistrant != null) {
25179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    mUSSDRegistrant.notifyRegistrant(
25189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        new AsyncResult (null, resp, null));
25199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
25209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            break;
2521767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_UNSOL_NITZ_TIME_RECEIVED:
25229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                if (RILJ_LOGD) unsljLogRet(response, ret);
25239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
25249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                // has bonus long containing milliseconds since boot that the NITZ
25259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                // time was received
25269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                long nitzReceiveTime = p.readLong();
25279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
25289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Object[] result = new Object[2];
25299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
25309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                result[0] = ret;
25319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                result[1] = Long.valueOf(nitzReceiveTime);
25329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
25339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                if (mNITZTimeRegistrant != null) {
2534767a662ecde33c3979bf02b793d392aca0403162Wink Saville
25359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    mNITZTimeRegistrant
25369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        .notifyRegistrant(new AsyncResult (null, result, null));
25379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                } else {
25389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    // in case NITZ time registrant isnt registered yet
25399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    mLastNITZTimeInfo = result;
25409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
25419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            break;
2542767a662ecde33c3979bf02b793d392aca0403162Wink Saville
25439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_SIGNAL_STRENGTH:
25449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                // Note this is set to "verbose" because it happens
25459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                // frequently
25469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                if (RILJ_LOGV) unsljLogvRet(response, ret);
2547767a662ecde33c3979bf02b793d392aca0403162Wink Saville
25489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                if (mSignalStrengthRegistrant != null) {
25499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    mSignalStrengthRegistrant.notifyRegistrant(
25509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                        new AsyncResult (null, ret, null));
25519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
25529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            break;
2553767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_UNSOL_DATA_CALL_LIST_CHANGED:
25549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                if (RILJ_LOGD) unsljLogRet(response, ret);
25559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
25565284090631e638b916d9a453212e9dc802656a67Wink Saville                mDataNetworkStateRegistrants.notifyRegistrants(new AsyncResult(null, ret, null));
25579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            break;
25589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
25599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_SUPP_SVC_NOTIFICATION:
25609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                if (RILJ_LOGD) unsljLogRet(response, ret);
25619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
25629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                if (mSsnRegistrant != null) {
25639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    mSsnRegistrant.notifyRegistrant(
25649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                        new AsyncResult (null, ret, null));
25659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
25669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                break;
25679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
25689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_STK_SESSION_END:
25699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                if (RILJ_LOGD) unsljLog(response);
25709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2571a27353c1965911f69be8d02a01b15389189eab9dAlex Yakavenka                if (mCatSessionEndRegistrant != null) {
2572a27353c1965911f69be8d02a01b15389189eab9dAlex Yakavenka                    mCatSessionEndRegistrant.notifyRegistrant(
25739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                        new AsyncResult (null, ret, null));
25749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
25759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                break;
25769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
25779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_STK_PROACTIVE_COMMAND:
25789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                if (RILJ_LOGD) unsljLogRet(response, ret);
25799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2580a27353c1965911f69be8d02a01b15389189eab9dAlex Yakavenka                if (mCatProCmdRegistrant != null) {
2581a27353c1965911f69be8d02a01b15389189eab9dAlex Yakavenka                    mCatProCmdRegistrant.notifyRegistrant(
25829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                        new AsyncResult (null, ret, null));
25839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
25849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                break;
25859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
25869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_STK_EVENT_NOTIFY:
25879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                if (RILJ_LOGD) unsljLogRet(response, ret);
25889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2589a27353c1965911f69be8d02a01b15389189eab9dAlex Yakavenka                if (mCatEventRegistrant != null) {
2590a27353c1965911f69be8d02a01b15389189eab9dAlex Yakavenka                    mCatEventRegistrant.notifyRegistrant(
25919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                        new AsyncResult (null, ret, null));
25929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
25939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                break;
25949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
25959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_STK_CALL_SETUP:
25969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                if (RILJ_LOGD) unsljLogRet(response, ret);
25979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2598a27353c1965911f69be8d02a01b15389189eab9dAlex Yakavenka                if (mCatCallSetUpRegistrant != null) {
2599a27353c1965911f69be8d02a01b15389189eab9dAlex Yakavenka                    mCatCallSetUpRegistrant.notifyRegistrant(
26009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                        new AsyncResult (null, ret, null));
26019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
26029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                break;
26039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
26049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_SIM_SMS_STORAGE_FULL:
26059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                if (RILJ_LOGD) unsljLog(response);
26069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2607767a662ecde33c3979bf02b793d392aca0403162Wink Saville                if (mIccSmsFullRegistrant != null) {
2608767a662ecde33c3979bf02b793d392aca0403162Wink Saville                    mIccSmsFullRegistrant.notifyRegistrant();
26099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
26109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                break;
26119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2612767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_UNSOL_SIM_REFRESH:
26139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                if (RILJ_LOGD) unsljLogRet(response, ret);
26149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2615a142512a5009d7b4c422d23b1d7bab8d219eb50bRobert Greenwalt                if (mIccRefreshRegistrants != null) {
2616a142512a5009d7b4c422d23b1d7bab8d219eb50bRobert Greenwalt                    mIccRefreshRegistrants.notifyRegistrants(
26179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            new AsyncResult (null, ret, null));
26189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
26199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                break;
2620767a662ecde33c3979bf02b793d392aca0403162Wink Saville
2621767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_UNSOL_CALL_RING:
2622dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
26232a34043d5578deb8d7f93830e13c4efc91eba583Jaikumar Ganesh
26249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                if (mRingRegistrant != null) {
2625dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville                    mRingRegistrant.notifyRegistrant(
2626dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville                            new AsyncResult (null, ret, null));
26279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
26289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                break;
26292a34043d5578deb8d7f93830e13c4efc91eba583Jaikumar Ganesh
26304df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project            case RIL_UNSOL_RESTRICTED_STATE_CHANGED:
26314df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project                if (RILJ_LOGD) unsljLogvRet(response, ret);
26324df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project                if (mRestrictedStateRegistrant != null) {
26334df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project                    mRestrictedStateRegistrant.notifyRegistrant(
26344df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project                                        new AsyncResult (null, ret, null));
26354df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project                }
263655c6f8881fdd2c5894e6297f49a9c4e0dc81ff8dWink Saville                break;
26372a34043d5578deb8d7f93830e13c4efc91eba583Jaikumar Ganesh
2638767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_UNSOL_RESPONSE_SIM_STATUS_CHANGED:
2639e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang                if (RILJ_LOGD) unsljLog(response);
2640e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang
2641767a662ecde33c3979bf02b793d392aca0403162Wink Saville                if (mIccStatusChangedRegistrants != null) {
2642767a662ecde33c3979bf02b793d392aca0403162Wink Saville                    mIccStatusChangedRegistrants.notifyRegistrants();
2643767a662ecde33c3979bf02b793d392aca0403162Wink Saville                }
2644767a662ecde33c3979bf02b793d392aca0403162Wink Saville                break;
2645767a662ecde33c3979bf02b793d392aca0403162Wink Saville
2646767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_UNSOL_RESPONSE_CDMA_NEW_SMS:
2647e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang                if (RILJ_LOGD) unsljLog(response);
2648e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang
2649767a662ecde33c3979bf02b793d392aca0403162Wink Saville                SmsMessage sms = (SmsMessage) ret;
2650767a662ecde33c3979bf02b793d392aca0403162Wink Saville
2651b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby                if (mCdmaSmsRegistrant != null) {
2652b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby                    mCdmaSmsRegistrant
2653767a662ecde33c3979bf02b793d392aca0403162Wink Saville                        .notifyRegistrant(new AsyncResult(null, sms, null));
2654767a662ecde33c3979bf02b793d392aca0403162Wink Saville                }
2655767a662ecde33c3979bf02b793d392aca0403162Wink Saville                break;
2656767a662ecde33c3979bf02b793d392aca0403162Wink Saville
2657767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_UNSOL_RESPONSE_NEW_BROADCAST_SMS:
2658e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang                if (RILJ_LOGD) unsljLog(response);
2659e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang
2660e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang                if (mGsmBroadcastSmsRegistrant != null) {
2661e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang                    mGsmBroadcastSmsRegistrant
2662e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang                        .notifyRegistrant(new AsyncResult(null, ret, null));
2663e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang                }
2664767a662ecde33c3979bf02b793d392aca0403162Wink Saville                break;
2665767a662ecde33c3979bf02b793d392aca0403162Wink Saville
2666767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_UNSOL_CDMA_RUIM_SMS_STORAGE_FULL:
2667e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang                if (RILJ_LOGD) unsljLog(response);
2668767a662ecde33c3979bf02b793d392aca0403162Wink Saville
2669767a662ecde33c3979bf02b793d392aca0403162Wink Saville                if (mIccSmsFullRegistrant != null) {
2670767a662ecde33c3979bf02b793d392aca0403162Wink Saville                    mIccSmsFullRegistrant.notifyRegistrant();
2671767a662ecde33c3979bf02b793d392aca0403162Wink Saville                }
2672767a662ecde33c3979bf02b793d392aca0403162Wink Saville                break;
26732a34043d5578deb8d7f93830e13c4efc91eba583Jaikumar Ganesh
2674e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville            case RIL_UNSOL_ENTER_EMERGENCY_CALLBACK_MODE:
2675e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                if (RILJ_LOGD) unsljLog(response);
2676e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
2677e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                if (mEmergencyCallbackModeRegistrant != null) {
2678e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                    mEmergencyCallbackModeRegistrant.notifyRegistrant();
2679e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                }
2680e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                break;
2681e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
2682e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville            case RIL_UNSOL_CDMA_CALL_WAITING:
26833bd5b0154faa02e197cdc344b45d968aba43d726Anna Markova                if (RILJ_LOGD) unsljLogRet(response, ret);
2684e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
2685dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville                if (mCallWaitingInfoRegistrants != null) {
2686dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville                    mCallWaitingInfoRegistrants.notifyRegistrants(
2687dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville                                        new AsyncResult (null, ret, null));
2688e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                }
2689e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                break;
2690e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
2691e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville            case RIL_UNSOL_CDMA_OTA_PROVISION_STATUS:
2692dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
2693e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
2694dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville                if (mOtaProvisionRegistrants != null) {
2695dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville                    mOtaProvisionRegistrants.notifyRegistrants(
2696dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville                                        new AsyncResult (null, ret, null));
2697e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                }
2698e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                break;
2699e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
2700e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville            case RIL_UNSOL_CDMA_INFO_REC:
270122ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville                ArrayList<CdmaInformationRecords> listInfoRecs;
2702dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville
270322ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville                try {
270422ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville                    listInfoRecs = (ArrayList<CdmaInformationRecords>)ret;
270522ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville                } catch (ClassCastException e) {
270622ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville                    Log.e(LOG_TAG, "Unexpected exception casting to listInfoRecs", e);
270722ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville                    break;
2708dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville                }
270922ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville
271022ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville                for (CdmaInformationRecords rec : listInfoRecs) {
271122ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville                    if (RILJ_LOGD) unsljLogRet(response, rec);
271222ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville                    notifyRegistrantsCdmaInfoRec(rec);
2713dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville                }
2714dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville                break;
2715dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville
2716dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville            case RIL_UNSOL_OEM_HOOK_RAW:
2717dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville                if (RILJ_LOGD) unsljLogvRet(response, IccUtils.bytesToHexString((byte[])ret));
2718dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville                if (mUnsolOemHookRawRegistrant != null) {
2719dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville                    mUnsolOemHookRawRegistrant.notifyRegistrant(new AsyncResult(null, ret, null));
2720e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                }
2721e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                break;
2722bbd754b8fe7563234b5c4c8d1425a7417337f2f2John Wang
2723bbd754b8fe7563234b5c4c8d1425a7417337f2f2John Wang            case RIL_UNSOL_RINGBACK_TONE:
2724bbd754b8fe7563234b5c4c8d1425a7417337f2f2John Wang                if (RILJ_LOGD) unsljLogvRet(response, ret);
2725bbd754b8fe7563234b5c4c8d1425a7417337f2f2John Wang                if (mRingbackToneRegistrants != null) {
2726bbd754b8fe7563234b5c4c8d1425a7417337f2f2John Wang                    boolean playtone = (((int[])ret)[0] == 1);
2727bbd754b8fe7563234b5c4c8d1425a7417337f2f2John Wang                    mRingbackToneRegistrants.notifyRegistrants(
2728bbd754b8fe7563234b5c4c8d1425a7417337f2f2John Wang                                        new AsyncResult (null, playtone, null));
2729bbd754b8fe7563234b5c4c8d1425a7417337f2f2John Wang                }
27301ccc41ed938ff005ae3d621292580a90601242caJohn Wang                break;
27311ccc41ed938ff005ae3d621292580a90601242caJohn Wang
27321ccc41ed938ff005ae3d621292580a90601242caJohn Wang            case RIL_UNSOL_RESEND_INCALL_MUTE:
27331ccc41ed938ff005ae3d621292580a90601242caJohn Wang                if (RILJ_LOGD) unsljLogRet(response, ret);
27341ccc41ed938ff005ae3d621292580a90601242caJohn Wang
27351ccc41ed938ff005ae3d621292580a90601242caJohn Wang                if (mResendIncallMuteRegistrants != null) {
27361ccc41ed938ff005ae3d621292580a90601242caJohn Wang                    mResendIncallMuteRegistrants.notifyRegistrants(
27371ccc41ed938ff005ae3d621292580a90601242caJohn Wang                                        new AsyncResult (null, ret, null));
27381ccc41ed938ff005ae3d621292580a90601242caJohn Wang                }
27395284090631e638b916d9a453212e9dc802656a67Wink Saville                break;
27405284090631e638b916d9a453212e9dc802656a67Wink Saville
274166958c73674673274bf08266b60ad3c1791c9179Wink Saville            case RIL_UNSOL_CDMA_SUBSCRIPTION_SOURCE_CHANGED:
27425284090631e638b916d9a453212e9dc802656a67Wink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
27435284090631e638b916d9a453212e9dc802656a67Wink Saville
27445284090631e638b916d9a453212e9dc802656a67Wink Saville                if (mCdmaSubscriptionChangedRegistrants != null) {
27455284090631e638b916d9a453212e9dc802656a67Wink Saville                    mCdmaSubscriptionChangedRegistrants.notifyRegistrants(
27465284090631e638b916d9a453212e9dc802656a67Wink Saville                                        new AsyncResult (null, ret, null));
27475284090631e638b916d9a453212e9dc802656a67Wink Saville                }
27485284090631e638b916d9a453212e9dc802656a67Wink Saville                break;
27495284090631e638b916d9a453212e9dc802656a67Wink Saville
27505284090631e638b916d9a453212e9dc802656a67Wink Saville            case RIL_UNSOl_CDMA_PRL_CHANGED:
27515284090631e638b916d9a453212e9dc802656a67Wink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
27525284090631e638b916d9a453212e9dc802656a67Wink Saville
27535284090631e638b916d9a453212e9dc802656a67Wink Saville                if (mCdmaPrlChangedRegistrants != null) {
27545284090631e638b916d9a453212e9dc802656a67Wink Saville                    mCdmaPrlChangedRegistrants.notifyRegistrants(
27555284090631e638b916d9a453212e9dc802656a67Wink Saville                                        new AsyncResult (null, ret, null));
27565284090631e638b916d9a453212e9dc802656a67Wink Saville                }
27575284090631e638b916d9a453212e9dc802656a67Wink Saville                break;
27585284090631e638b916d9a453212e9dc802656a67Wink Saville
27595284090631e638b916d9a453212e9dc802656a67Wink Saville            case RIL_UNSOL_EXIT_EMERGENCY_CALLBACK_MODE:
27605284090631e638b916d9a453212e9dc802656a67Wink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
27615284090631e638b916d9a453212e9dc802656a67Wink Saville
27625284090631e638b916d9a453212e9dc802656a67Wink Saville                if (mExitEmergencyCallbackModeRegistrants != null) {
27635284090631e638b916d9a453212e9dc802656a67Wink Saville                    mExitEmergencyCallbackModeRegistrants.notifyRegistrants(
27645284090631e638b916d9a453212e9dc802656a67Wink Saville                                        new AsyncResult (null, null, null));
27655284090631e638b916d9a453212e9dc802656a67Wink Saville                }
27665284090631e638b916d9a453212e9dc802656a67Wink Saville                break;
27671dd2ada5cf7d0c95afb4731d082473f34ee7f433Wink Saville
27681dd2ada5cf7d0c95afb4731d082473f34ee7f433Wink Saville            case RIL_UNSOL_RIL_CONNECTED: {
27691dd2ada5cf7d0c95afb4731d082473f34ee7f433Wink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
277066958c73674673274bf08266b60ad3c1791c9179Wink Saville
277166958c73674673274bf08266b60ad3c1791c9179Wink Saville                // Initial conditions
277266958c73674673274bf08266b60ad3c1791c9179Wink Saville                setRadioPower(false, null);
277305d69edc0ba9b016a1bd7cb89a03b24c5659bf8dWink Saville                setPreferredNetworkType(mPreferredNetworkType, null);
277466958c73674673274bf08266b60ad3c1791c9179Wink Saville                setCdmaSubscriptionSource(mCdmaSubscription, null);
27751dd2ada5cf7d0c95afb4731d082473f34ee7f433Wink Saville                notifyRegistrantsRilConnectionChanged(((int[])ret)[0]);
27761dd2ada5cf7d0c95afb4731d082473f34ee7f433Wink Saville                break;
27771dd2ada5cf7d0c95afb4731d082473f34ee7f433Wink Saville            }
27781dd2ada5cf7d0c95afb4731d082473f34ee7f433Wink Saville        }
27791dd2ada5cf7d0c95afb4731d082473f34ee7f433Wink Saville    }
27801dd2ada5cf7d0c95afb4731d082473f34ee7f433Wink Saville
27811dd2ada5cf7d0c95afb4731d082473f34ee7f433Wink Saville    /**
27821dd2ada5cf7d0c95afb4731d082473f34ee7f433Wink Saville     * Notifiy all registrants that the ril has connected or disconnected.
27831dd2ada5cf7d0c95afb4731d082473f34ee7f433Wink Saville     *
27841dd2ada5cf7d0c95afb4731d082473f34ee7f433Wink Saville     * @param rilVer is the version of the ril or -1 if disconnected.
27851dd2ada5cf7d0c95afb4731d082473f34ee7f433Wink Saville     */
27861dd2ada5cf7d0c95afb4731d082473f34ee7f433Wink Saville    private void notifyRegistrantsRilConnectionChanged(int rilVer) {
27871dd2ada5cf7d0c95afb4731d082473f34ee7f433Wink Saville        mRilVersion = rilVer;
27881dd2ada5cf7d0c95afb4731d082473f34ee7f433Wink Saville        if (mRilConnectedRegistrants != null) {
27891dd2ada5cf7d0c95afb4731d082473f34ee7f433Wink Saville            mRilConnectedRegistrants.notifyRegistrants(
27901dd2ada5cf7d0c95afb4731d082473f34ee7f433Wink Saville                                new AsyncResult (null, new Integer(rilVer), null));
27919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
27929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
27939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
27949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private Object
2795767a662ecde33c3979bf02b793d392aca0403162Wink Saville    responseInts(Parcel p) {
27969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int numInts;
27979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int response[];
27989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
27999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        numInts = p.readInt();
28009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
28019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        response = new int[numInts];
28029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
28039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        for (int i = 0 ; i < numInts ; i++) {
28049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            response[i] = p.readInt();
28059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
28069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
28079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return response;
28089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
28099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
28109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
28119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private Object
2812767a662ecde33c3979bf02b793d392aca0403162Wink Saville    responseVoid(Parcel p) {
28139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return null;
28149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
28159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
28169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private Object
2817767a662ecde33c3979bf02b793d392aca0403162Wink Saville    responseCallForward(Parcel p) {
28189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int numInfos;
28199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        CallForwardInfo infos[];
28209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
28219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        numInfos = p.readInt();
28229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
28239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        infos = new CallForwardInfo[numInfos];
28249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
28259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        for (int i = 0 ; i < numInfos ; i++) {
28269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            infos[i] = new CallForwardInfo();
28279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
28289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            infos[i].status = p.readInt();
28299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            infos[i].reason = p.readInt();
28309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            infos[i].serviceClass = p.readInt();
28319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            infos[i].toa = p.readInt();
28329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            infos[i].number = p.readString();
28339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            infos[i].timeSeconds = p.readInt();
28349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
28359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
28369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return infos;
28379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
28389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
28399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private Object
2840767a662ecde33c3979bf02b793d392aca0403162Wink Saville    responseSuppServiceNotification(Parcel p) {
28419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        SuppServiceNotification notification = new SuppServiceNotification();
2842767a662ecde33c3979bf02b793d392aca0403162Wink Saville
28439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        notification.notificationType = p.readInt();
28449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        notification.code = p.readInt();
28459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        notification.index = p.readInt();
28469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        notification.type = p.readInt();
28479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        notification.number = p.readString();
2848767a662ecde33c3979bf02b793d392aca0403162Wink Saville
28499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return notification;
28509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2851767a662ecde33c3979bf02b793d392aca0403162Wink Saville
28529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private Object
2853767a662ecde33c3979bf02b793d392aca0403162Wink Saville    responseCdmaSms(Parcel p) {
2854767a662ecde33c3979bf02b793d392aca0403162Wink Saville        SmsMessage sms;
2855767a662ecde33c3979bf02b793d392aca0403162Wink Saville        sms = SmsMessage.newFromParcel(p);
2856767a662ecde33c3979bf02b793d392aca0403162Wink Saville
2857767a662ecde33c3979bf02b793d392aca0403162Wink Saville        return sms;
2858767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
2859767a662ecde33c3979bf02b793d392aca0403162Wink Saville
2860767a662ecde33c3979bf02b793d392aca0403162Wink Saville    private Object
2861767a662ecde33c3979bf02b793d392aca0403162Wink Saville    responseString(Parcel p) {
28629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        String response;
28639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
28649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        response = p.readString();
28659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
28669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return response;
28679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
28689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
28699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private Object
2870767a662ecde33c3979bf02b793d392aca0403162Wink Saville    responseStrings(Parcel p) {
28719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int num;
28729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        String response[];
28739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
28749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        response = p.readStringArray();
28759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
28769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (false) {
28779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            num = p.readInt();
28789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
28799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            response = new String[num];
28809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            for (int i = 0; i < num; i++) {
28819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                response[i] = p.readString();
28829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
28839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2884767a662ecde33c3979bf02b793d392aca0403162Wink Saville
28859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return response;
28869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
28879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
28889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private Object
2889767a662ecde33c3979bf02b793d392aca0403162Wink Saville    responseRaw(Parcel p) {
28909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int num;
28919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        byte response[];
28929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
28939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        response = p.createByteArray();
28949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
28959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return response;
28969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
28979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
28989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private Object
2899767a662ecde33c3979bf02b793d392aca0403162Wink Saville    responseSMS(Parcel p) {
29007b3f5520d32b5f149fa9d4a7c953547ba55f1708Jaikumar Ganesh        int messageRef, errorCode;
29019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        String ackPDU;
29029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
29039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        messageRef = p.readInt();
29049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        ackPDU = p.readString();
29057b3f5520d32b5f149fa9d4a7c953547ba55f1708Jaikumar Ganesh        errorCode = p.readInt();
29069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
29077b3f5520d32b5f149fa9d4a7c953547ba55f1708Jaikumar Ganesh        SmsResponse response = new SmsResponse(messageRef, ackPDU, errorCode);
29089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
29099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return response;
29109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
29119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
29129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
29139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private Object
2914094854091b63498f952f0a6c4bcedfdfefaf1cf7Jake Hamby    responseICC_IO(Parcel p) {
29159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int sw1, sw2;
29169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        byte data[] = null;
29179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Message ret;
2918767a662ecde33c3979bf02b793d392aca0403162Wink Saville
29199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sw1 = p.readInt();
29209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sw2 = p.readInt();
29219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
29229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        String s = p.readString();
29239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
29243b13b2c9d1ee6035996766d332ba8b85cc3bf3d2Wink Saville        if (RILJ_LOGV) riljLog("< iccIO: "
2925e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                + " 0x" + Integer.toHexString(sw1)
2926e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                + " 0x" + Integer.toHexString(sw2) + " "
2927e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                + s);
2928e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
2929767a662ecde33c3979bf02b793d392aca0403162Wink Saville        return new IccIoResult(sw1, sw2, s);
29309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
29319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
29329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private Object
2933767a662ecde33c3979bf02b793d392aca0403162Wink Saville    responseIccCardStatus(Parcel p) {
2934767a662ecde33c3979bf02b793d392aca0403162Wink Saville        IccCardApplication ca;
2935767a662ecde33c3979bf02b793d392aca0403162Wink Saville
2936767a662ecde33c3979bf02b793d392aca0403162Wink Saville        IccCardStatus status = new IccCardStatus();
2937cdadaad0e4e76a69eba144d3501cca9765cee80cJaikumar Ganesh        status.setCardState(p.readInt());
2938cdadaad0e4e76a69eba144d3501cca9765cee80cJaikumar Ganesh        status.setUniversalPinState(p.readInt());
2939cdadaad0e4e76a69eba144d3501cca9765cee80cJaikumar Ganesh        status.setGsmUmtsSubscriptionAppIndex(p.readInt());
2940cdadaad0e4e76a69eba144d3501cca9765cee80cJaikumar Ganesh        status.setCdmaSubscriptionAppIndex(p.readInt());
29415284090631e638b916d9a453212e9dc802656a67Wink Saville        status.setImsSubscriptionAppIndex(p.readInt());
2942cdadaad0e4e76a69eba144d3501cca9765cee80cJaikumar Ganesh        int numApplications = p.readInt();
2943767a662ecde33c3979bf02b793d392aca0403162Wink Saville
2944767a662ecde33c3979bf02b793d392aca0403162Wink Saville        // limit to maximum allowed applications
2945cdadaad0e4e76a69eba144d3501cca9765cee80cJaikumar Ganesh        if (numApplications > IccCardStatus.CARD_MAX_APPS) {
2946cdadaad0e4e76a69eba144d3501cca9765cee80cJaikumar Ganesh            numApplications = IccCardStatus.CARD_MAX_APPS;
29479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2948cdadaad0e4e76a69eba144d3501cca9765cee80cJaikumar Ganesh        status.setNumApplications(numApplications);
29499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2950cdadaad0e4e76a69eba144d3501cca9765cee80cJaikumar Ganesh        for (int i = 0 ; i < numApplications ; i++) {
2951767a662ecde33c3979bf02b793d392aca0403162Wink Saville            ca = new IccCardApplication();
2952767a662ecde33c3979bf02b793d392aca0403162Wink Saville            ca.app_type       = ca.AppTypeFromRILInt(p.readInt());
2953767a662ecde33c3979bf02b793d392aca0403162Wink Saville            ca.app_state      = ca.AppStateFromRILInt(p.readInt());
2954767a662ecde33c3979bf02b793d392aca0403162Wink Saville            ca.perso_substate = ca.PersoSubstateFromRILInt(p.readInt());
2955767a662ecde33c3979bf02b793d392aca0403162Wink Saville            ca.aid            = p.readString();
2956767a662ecde33c3979bf02b793d392aca0403162Wink Saville            ca.app_label      = p.readString();
2957767a662ecde33c3979bf02b793d392aca0403162Wink Saville            ca.pin1_replaced  = p.readInt();
2958b0b24b3df50988d23f571b83d829fecc986ec497John Wang            ca.pin1           = ca.PinStateFromRILInt(p.readInt());
2959b0b24b3df50988d23f571b83d829fecc986ec497John Wang            ca.pin2           = ca.PinStateFromRILInt(p.readInt());
2960cdadaad0e4e76a69eba144d3501cca9765cee80cJaikumar Ganesh            status.addApplication(ca);
2961767a662ecde33c3979bf02b793d392aca0403162Wink Saville        }
2962cdadaad0e4e76a69eba144d3501cca9765cee80cJaikumar Ganesh        return status;
2963767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
29649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
29659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private Object
2966767a662ecde33c3979bf02b793d392aca0403162Wink Saville    responseCallList(Parcel p) {
29679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int num;
2968767a662ecde33c3979bf02b793d392aca0403162Wink Saville        int voiceSettings;
29699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        ArrayList<DriverCall> response;
29709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        DriverCall dc;
29719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
29729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        num = p.readInt();
29739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        response = new ArrayList<DriverCall>(num);
29749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
29759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        for (int i = 0 ; i < num ; i++) {
29769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dc = new DriverCall();
2977767a662ecde33c3979bf02b793d392aca0403162Wink Saville
29789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dc.state = DriverCall.stateFromCLCC(p.readInt());
29799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dc.index = p.readInt();
29809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dc.TOA = p.readInt();
29819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dc.isMpty = (0 != p.readInt());
29829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dc.isMT = (0 != p.readInt());
29839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dc.als = p.readInt();
2984767a662ecde33c3979bf02b793d392aca0403162Wink Saville            voiceSettings = p.readInt();
2985767a662ecde33c3979bf02b793d392aca0403162Wink Saville            dc.isVoice = (0 == voiceSettings) ? false : true;
298622ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville            dc.isVoicePrivacy = (0 != p.readInt());
29879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dc.number = p.readString();
2988a14f47f975064816df3008e66055d41ddb9d7353Wink Saville            int np = p.readInt();
2989a14f47f975064816df3008e66055d41ddb9d7353Wink Saville            dc.numberPresentation = DriverCall.presentationFromCLIP(np);
2990a14f47f975064816df3008e66055d41ddb9d7353Wink Saville            dc.name = p.readString();
2991a14f47f975064816df3008e66055d41ddb9d7353Wink Saville            dc.namePresentation = p.readInt();
29920fa1b24593bbe7972bfbc5290519359db8c4ade6Naveen Kalla            int uusInfoPresent = p.readInt();
29930fa1b24593bbe7972bfbc5290519359db8c4ade6Naveen Kalla            if (uusInfoPresent == 1) {
299424440cf8a9431291bdcaa77b418e6c4715932507Naveen Kalla                dc.uusInfo = new UUSInfo();
299524440cf8a9431291bdcaa77b418e6c4715932507Naveen Kalla                dc.uusInfo.setType(p.readInt());
299624440cf8a9431291bdcaa77b418e6c4715932507Naveen Kalla                dc.uusInfo.setDcs(p.readInt());
299724440cf8a9431291bdcaa77b418e6c4715932507Naveen Kalla                byte[] userData = p.createByteArray();
299824440cf8a9431291bdcaa77b418e6c4715932507Naveen Kalla                dc.uusInfo.setUserData(userData);
29995284090631e638b916d9a453212e9dc802656a67Wink Saville                riljLogv(String.format("Incoming UUS : type=%d, dcs=%d, length=%d",
300024440cf8a9431291bdcaa77b418e6c4715932507Naveen Kalla                                dc.uusInfo.getType(), dc.uusInfo.getDcs(),
300124440cf8a9431291bdcaa77b418e6c4715932507Naveen Kalla                                dc.uusInfo.getUserData().length));
30025284090631e638b916d9a453212e9dc802656a67Wink Saville                riljLogv("Incoming UUS : data (string)="
300324440cf8a9431291bdcaa77b418e6c4715932507Naveen Kalla                        + new String(dc.uusInfo.getUserData()));
30045284090631e638b916d9a453212e9dc802656a67Wink Saville                riljLogv("Incoming UUS : data (hex): "
300524440cf8a9431291bdcaa77b418e6c4715932507Naveen Kalla                        + IccUtils.bytesToHexString(dc.uusInfo.getUserData()));
300624440cf8a9431291bdcaa77b418e6c4715932507Naveen Kalla            } else {
30075284090631e638b916d9a453212e9dc802656a67Wink Saville                riljLogv("Incoming UUS : NOT present!");
30080fa1b24593bbe7972bfbc5290519359db8c4ade6Naveen Kalla            }
3009767a662ecde33c3979bf02b793d392aca0403162Wink Saville
301022ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville            // Make sure there's a leading + on addresses with a TOA of 145
301122ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville            dc.number = PhoneNumberUtils.stringFromStringAndTOA(dc.number, dc.TOA);
30129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
30139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            response.add(dc);
3014767a662ecde33c3979bf02b793d392aca0403162Wink Saville
301522ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville            if (dc.isVoicePrivacy) {
3016767a662ecde33c3979bf02b793d392aca0403162Wink Saville                mVoicePrivacyOnRegistrants.notifyRegistrants();
30175284090631e638b916d9a453212e9dc802656a67Wink Saville                riljLog("InCall VoicePrivacy is enabled");
3018767a662ecde33c3979bf02b793d392aca0403162Wink Saville            } else {
3019767a662ecde33c3979bf02b793d392aca0403162Wink Saville                mVoicePrivacyOffRegistrants.notifyRegistrants();
30205284090631e638b916d9a453212e9dc802656a67Wink Saville                riljLog("InCall VoicePrivacy is disabled");
3021767a662ecde33c3979bf02b793d392aca0403162Wink Saville            }
30229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
30239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
30249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Collections.sort(response);
30259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
30269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return response;
30279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
30289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3029abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville    private DataCallState getDataCallState(Parcel p, int version) {
3030abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville        DataCallState dataCall = new DataCallState();
3031abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville
3032abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville        dataCall.version = version;
3033abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville        if (version < 5) {
3034abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville            dataCall.cid = p.readInt();
3035abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville            dataCall.active = p.readInt();
3036abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville            dataCall.type = p.readString();
3037abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville            String addresses = p.readString();
3038aa44b52ee07eb4937d23bb3c2464007a2eb3f50fWink Saville            if (!TextUtils.isEmpty(addresses)) {
3039abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville                dataCall.addresses = addresses.split(" ");
3040abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville            }
3041abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville        } else {
3042abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville            dataCall.status = p.readInt();
3043e0acd0842f2de9b2bf02d34c0ed90ca7a6ab30a9Kazuhiro Ondo            dataCall.suggestedRetryTime = p.readInt();
3044abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville            dataCall.cid = p.readInt();
3045abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville            dataCall.active = p.readInt();
3046abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville            dataCall.type = p.readString();
3047abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville            dataCall.ifname = p.readString();
3048aa44b52ee07eb4937d23bb3c2464007a2eb3f50fWink Saville            if ((dataCall.status == DataConnection.FailCause.NONE.getErrorCode()) &&
3049aa44b52ee07eb4937d23bb3c2464007a2eb3f50fWink Saville                    TextUtils.isEmpty(dataCall.ifname)) {
305070181e2a9f4366eb422dcfe35636e90090ebe942Wink Saville              throw new RuntimeException("getDataCallState, no ifname");
305170181e2a9f4366eb422dcfe35636e90090ebe942Wink Saville            }
3052abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville            String addresses = p.readString();
305370181e2a9f4366eb422dcfe35636e90090ebe942Wink Saville            if (!TextUtils.isEmpty(addresses)) {
3054abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville                dataCall.addresses = addresses.split(" ");
3055abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville            }
3056abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville            String dnses = p.readString();
305770181e2a9f4366eb422dcfe35636e90090ebe942Wink Saville            if (!TextUtils.isEmpty(dnses)) {
3058abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville                dataCall.dnses = dnses.split(" ");
3059abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville            }
30605284090631e638b916d9a453212e9dc802656a67Wink Saville            String gateways = p.readString();
30615284090631e638b916d9a453212e9dc802656a67Wink Saville            if (!TextUtils.isEmpty(gateways)) {
30625284090631e638b916d9a453212e9dc802656a67Wink Saville                dataCall.gateways = gateways.split(" ");
30635284090631e638b916d9a453212e9dc802656a67Wink Saville            }
3064abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville        }
3065abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville        return dataCall;
3066abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville    }
3067abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville
30689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private Object
3069767a662ecde33c3979bf02b793d392aca0403162Wink Saville    responseDataCallList(Parcel p) {
3070e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        ArrayList<DataCallState> response;
30719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3072abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville        int ver = p.readInt();
3073abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville        int num = p.readInt();
30745284090631e638b916d9a453212e9dc802656a67Wink Saville        riljLog("responseDataCallList ver=" + ver + " num=" + num);
30759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3076abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville        response = new ArrayList<DataCallState>(num);
30779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        for (int i = 0; i < num; i++) {
3078abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville            response.add(getDataCallState(p, ver));
3079abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville        }
30809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3081abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville        return response;
3082abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville    }
3083abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville
3084abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville    private Object
3085abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville    responseSetupDataCall(Parcel p) {
3086abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville        int ver = p.readInt();
3087abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville        int num = p.readInt();
30883b13b2c9d1ee6035996766d332ba8b85cc3bf3d2Wink Saville        if (RILJ_LOGV) riljLog("responseSetupDataCall ver=" + ver + " num=" + num);
30899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3090abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville        DataCallState dataCall;
3091abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville
3092abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville        if (ver < 5) {
3093abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville            dataCall = new DataCallState();
309470181e2a9f4366eb422dcfe35636e90090ebe942Wink Saville            dataCall.version = ver;
3095abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville            dataCall.cid = Integer.parseInt(p.readString());
3096abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville            dataCall.ifname = p.readString();
309770181e2a9f4366eb422dcfe35636e90090ebe942Wink Saville            if (TextUtils.isEmpty(dataCall.ifname)) {
3098abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville                throw new RuntimeException(
309970181e2a9f4366eb422dcfe35636e90090ebe942Wink Saville                        "RIL_REQUEST_SETUP_DATA_CALL response, no ifname");
3100abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville            }
3101abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville            String addresses = p.readString();
310270181e2a9f4366eb422dcfe35636e90090ebe942Wink Saville            if (!TextUtils.isEmpty(addresses)) {
310370181e2a9f4366eb422dcfe35636e90090ebe942Wink Saville              dataCall.addresses = addresses.split(" ");
310470181e2a9f4366eb422dcfe35636e90090ebe942Wink Saville            }
310570181e2a9f4366eb422dcfe35636e90090ebe942Wink Saville            if (num >= 4) {
310670181e2a9f4366eb422dcfe35636e90090ebe942Wink Saville                String dnses = p.readString();
31075284090631e638b916d9a453212e9dc802656a67Wink Saville                if (RILJ_LOGD) riljLog("responseSetupDataCall got dnses=" + dnses);
310870181e2a9f4366eb422dcfe35636e90090ebe942Wink Saville                if (!TextUtils.isEmpty(dnses)) {
310970181e2a9f4366eb422dcfe35636e90090ebe942Wink Saville                    dataCall.dnses = dnses.split(" ");
311070181e2a9f4366eb422dcfe35636e90090ebe942Wink Saville                }
3111abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville            }
31125284090631e638b916d9a453212e9dc802656a67Wink Saville            if (num >= 5) {
31135284090631e638b916d9a453212e9dc802656a67Wink Saville                String gateways = p.readString();
31145284090631e638b916d9a453212e9dc802656a67Wink Saville                if (RILJ_LOGD) riljLog("responseSetupDataCall got gateways=" + gateways);
31155284090631e638b916d9a453212e9dc802656a67Wink Saville                if (!TextUtils.isEmpty(gateways)) {
31165284090631e638b916d9a453212e9dc802656a67Wink Saville                    dataCall.gateways = gateways.split(" ");
31175284090631e638b916d9a453212e9dc802656a67Wink Saville                }
31185284090631e638b916d9a453212e9dc802656a67Wink Saville            }
3119abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville        } else {
3120abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville            if (num != 1) {
3121abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville                throw new RuntimeException(
3122abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville                        "RIL_REQUEST_SETUP_DATA_CALL response expecting 1 RIL_Data_Call_response_v5"
3123abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville                        + " got " + num);
3124abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville            }
3125abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville            dataCall = getDataCallState(p, ver);
31269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
31279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3128abea3b892b5e54c46423bfe33fdb0aa1315f6bf4Wink Saville        return dataCall;
31299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
31309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
31319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private Object
31323caa1bd1061df4029951e68d0a04d5e30928701fRobert Greenwalt    responseOperatorInfos(Parcel p) {
31339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        String strings[] = (String [])responseStrings(p);
31343caa1bd1061df4029951e68d0a04d5e30928701fRobert Greenwalt        ArrayList<OperatorInfo> ret;
31359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
31369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (strings.length % 4 != 0) {
31379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            throw new RuntimeException(
3138767a662ecde33c3979bf02b793d392aca0403162Wink Saville                "RIL_REQUEST_QUERY_AVAILABLE_NETWORKS: invalid response. Got "
31399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                + strings.length + " strings, expected multible of 4");
31409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
31419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
31423caa1bd1061df4029951e68d0a04d5e30928701fRobert Greenwalt        ret = new ArrayList<OperatorInfo>(strings.length / 4);
31439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
31449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        for (int i = 0 ; i < strings.length ; i += 4) {
31459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            ret.add (
31463caa1bd1061df4029951e68d0a04d5e30928701fRobert Greenwalt                new OperatorInfo(
31479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    strings[i+0],
31489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    strings[i+1],
31499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    strings[i+2],
31509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    strings[i+3]));
31519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
3152767a662ecde33c3979bf02b793d392aca0403162Wink Saville
31539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return ret;
31549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
31559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3156094854091b63498f952f0a6c4bcedfdfefaf1cf7Jake Hamby    private Object
3157094854091b63498f952f0a6c4bcedfdfefaf1cf7Jake Hamby    responseCellList(Parcel p) {
31589c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwang       int num, rssi;
31599c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwang       String location;
3160767a662ecde33c3979bf02b793d392aca0403162Wink Saville       ArrayList<NeighboringCellInfo> response;
3161767a662ecde33c3979bf02b793d392aca0403162Wink Saville       NeighboringCellInfo cell;
3162767a662ecde33c3979bf02b793d392aca0403162Wink Saville
3163767a662ecde33c3979bf02b793d392aca0403162Wink Saville       num = p.readInt();
31649c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwang       response = new ArrayList<NeighboringCellInfo>();
31659c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwang
31669c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwang       // Determine the radio access type
31679c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwang       String radioString = SystemProperties.get(
31689c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwang               TelephonyProperties.PROPERTY_DATA_NETWORK_TYPE, "unknown");
31699c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwang       int radioType;
31709c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwang       if (radioString.equals("GPRS")) {
31719c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwang           radioType = NETWORK_TYPE_GPRS;
31729c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwang       } else if (radioString.equals("EDGE")) {
31739c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwang           radioType = NETWORK_TYPE_EDGE;
31749c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwang       } else if (radioString.equals("UMTS")) {
31759c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwang           radioType = NETWORK_TYPE_UMTS;
31769c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwang       } else if (radioString.equals("HSDPA")) {
31779c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwang           radioType = NETWORK_TYPE_HSDPA;
31789c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwang       } else if (radioString.equals("HSUPA")) {
31799c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwang           radioType = NETWORK_TYPE_HSUPA;
31809c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwang       } else if (radioString.equals("HSPA")) {
31819c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwang           radioType = NETWORK_TYPE_HSPA;
31829c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwang       } else {
31839c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwang           radioType = NETWORK_TYPE_UNKNOWN;
3184767a662ecde33c3979bf02b793d392aca0403162Wink Saville       }
31852a34043d5578deb8d7f93830e13c4efc91eba583Jaikumar Ganesh
31869c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwang       // Interpret the location based on radio access type
31879c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwang       if (radioType != NETWORK_TYPE_UNKNOWN) {
31889c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwang           for (int i = 0 ; i < num ; i++) {
31899c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwang               rssi = p.readInt();
31909c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwang               location = p.readString();
31919c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwang               cell = new NeighboringCellInfo(rssi, location, radioType);
31929c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwang               response.add(cell);
31939c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwang           }
31949c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwang       }
31959c118c80fd0a5416051f2a49f515301f2cf3fd6fjohnwang       return response;
3196767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
3197767a662ecde33c3979bf02b793d392aca0403162Wink Saville
319805d69edc0ba9b016a1bd7cb89a03b24c5659bf8dWink Saville    private Object responseGetPreferredNetworkType(Parcel p) {
319905d69edc0ba9b016a1bd7cb89a03b24c5659bf8dWink Saville       int [] response = (int[]) responseInts(p);
320005d69edc0ba9b016a1bd7cb89a03b24c5659bf8dWink Saville
320105d69edc0ba9b016a1bd7cb89a03b24c5659bf8dWink Saville       if (response.length >= 1) {
320205d69edc0ba9b016a1bd7cb89a03b24c5659bf8dWink Saville           // Since this is the response for getPreferredNetworkType
320305d69edc0ba9b016a1bd7cb89a03b24c5659bf8dWink Saville           // we'll assume that it should be the value we want the
320405d69edc0ba9b016a1bd7cb89a03b24c5659bf8dWink Saville           // vendor ril to take if we reestablish a connection to it.
320505d69edc0ba9b016a1bd7cb89a03b24c5659bf8dWink Saville           mPreferredNetworkType = response[0];
320605d69edc0ba9b016a1bd7cb89a03b24c5659bf8dWink Saville       }
320705d69edc0ba9b016a1bd7cb89a03b24c5659bf8dWink Saville       return response;
320805d69edc0ba9b016a1bd7cb89a03b24c5659bf8dWink Saville    }
320905d69edc0ba9b016a1bd7cb89a03b24c5659bf8dWink Saville
3210e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang    private Object responseGmsBroadcastConfig(Parcel p) {
3211e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang        int num;
3212e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang        ArrayList<SmsBroadcastConfigInfo> response;
3213e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang        SmsBroadcastConfigInfo info;
3214e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang
3215e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang        num = p.readInt();
3216e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang        response = new ArrayList<SmsBroadcastConfigInfo>(num);
3217e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang
3218e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang        for (int i = 0; i < num; i++) {
3219e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang            int fromId = p.readInt();
3220e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang            int toId = p.readInt();
3221e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang            int fromScheme = p.readInt();
3222e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang            int toScheme = p.readInt();
3223e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang            boolean selected = (p.readInt() == 1);
3224e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang
3225e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang            info = new SmsBroadcastConfigInfo(fromId, toId, fromScheme,
3226e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang                    toScheme, selected);
3227e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang            response.add(info);
3228e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang        }
3229e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang        return response;
3230767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
32319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3232767a662ecde33c3979bf02b793d392aca0403162Wink Saville    private Object
3233e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang    responseCdmaBroadcastConfig(Parcel p) {
3234dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        int numServiceCategories;
3235767a662ecde33c3979bf02b793d392aca0403162Wink Saville        int response[];
32369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3237dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        numServiceCategories = p.readInt();
3238e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
3239dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        if (numServiceCategories == 0) {
32407188f946521d64ea21121939d2a4c279f33fe910Wink Saville            // TODO: The logic of providing default values should
32417188f946521d64ea21121939d2a4c279f33fe910Wink Saville            // not be done by this transport layer. And needs to
32427188f946521d64ea21121939d2a4c279f33fe910Wink Saville            // be done by the vendor ril or application logic.
3243dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville            int numInts;
3244dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville            numInts = CDMA_BROADCAST_SMS_NO_OF_SERVICE_CATEGORIES * CDMA_BSI_NO_OF_INTS_STRUCT + 1;
3245dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville            response = new int[numInts];
3246e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
324722ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville            // Faking a default record for all possible records.
324822ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville            response[0] = CDMA_BROADCAST_SMS_NO_OF_SERVICE_CATEGORIES;
3249dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville
3250dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville            // Loop over CDMA_BROADCAST_SMS_NO_OF_SERVICE_CATEGORIES set 'english' as
325122ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville            // default language and selection status to false for all.
3252dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville            for (int i = 1; i < numInts; i += CDMA_BSI_NO_OF_INTS_STRUCT ) {
3253dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville                response[i + 0] = i / CDMA_BSI_NO_OF_INTS_STRUCT;
3254dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville                response[i + 1] = 1;
3255dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville                response[i + 2] = 0;
3256dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville            }
3257dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        } else {
3258dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville            int numInts;
3259dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville            numInts = (numServiceCategories * CDMA_BSI_NO_OF_INTS_STRUCT) + 1;
3260dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville            response = new int[numInts];
3261dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville
3262dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville            response[0] = numServiceCategories;
3263dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville            for (int i = 1 ; i < numInts; i++) {
3264dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville                 response[i] = p.readInt();
3265dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville             }
3266e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        }
3267e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
3268e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        return response;
3269e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    }
3270e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
3271e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    private Object
3272dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    responseSignalStrength(Parcel p) {
32735284090631e638b916d9a453212e9dc802656a67Wink Saville        int numInts = 12;
3274dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        int response[];
3275e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
3276dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        /* TODO: Add SignalStrength class to match RIL_SignalStrength */
3277dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        response = new int[numInts];
3278dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        for (int i = 0 ; i < numInts ; i++) {
3279dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville            response[i] = p.readInt();
3280dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        }
3281e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
3282dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        return response;
3283dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    }
3284e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
328522ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville    private ArrayList<CdmaInformationRecords>
328622ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville    responseCdmaInformationRecord(Parcel p) {
328722ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville        int numberOfInfoRecs;
328822ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville        ArrayList<CdmaInformationRecords> response;
328922ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville
329022ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville        /**
329122ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville         * Loop through all of the information records unmarshalling them
329222ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville         * and converting them to Java Objects.
329322ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville         */
329422ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville        numberOfInfoRecs = p.readInt();
329522ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville        response = new ArrayList<CdmaInformationRecords>(numberOfInfoRecs);
3296dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville
3297dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        for (int i = 0; i < numberOfInfoRecs; i++) {
329822ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville            CdmaInformationRecords InfoRec = new CdmaInformationRecords(p);
329922ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville            response.add(InfoRec);
33009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
330122ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville
330222ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville        return response;
33039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
33049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3305e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    private Object
3306dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    responseCdmaCallWaiting(Parcel p) {
3307dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        CdmaCallWaitingNotification notification = new CdmaCallWaitingNotification();
3308e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
3309dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        notification.number = p.readString();
33103bd5b0154faa02e197cdc344b45d968aba43d726Anna Markova        notification.numberPresentation = notification.presentationFromCLIP(p.readInt());
3311dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        notification.name = p.readString();
3312dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        notification.namePresentation = notification.numberPresentation;
3313dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        notification.isPresent = p.readInt();
3314dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        notification.signalType = p.readInt();
3315dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        notification.alertPitch = p.readInt();
3316dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        notification.signal = p.readInt();
33175284090631e638b916d9a453212e9dc802656a67Wink Saville        notification.numberType = p.readInt();
33185284090631e638b916d9a453212e9dc802656a67Wink Saville        notification.numberPlan = p.readInt();
3319dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville
3320dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        return notification;
3321e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    }
3322e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
3323e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    private Object
3324e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    responseCallRing(Parcel p){
3325e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        char response[] = new char[4];
3326e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
3327e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        response[0] = (char) p.readInt();    // isPresent
3328e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        response[1] = (char) p.readInt();    // signalType
3329e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        response[2] = (char) p.readInt();    // alertPitch
3330e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        response[3] = (char) p.readInt();    // signal
3331e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
3332e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        return response;
3333e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    }
3334e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
333522ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville    private void
333622ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville    notifyRegistrantsCdmaInfoRec(CdmaInformationRecords infoRec) {
333722ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville        int response = RIL_UNSOL_CDMA_INFO_REC;
333822ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville        if (infoRec.record instanceof CdmaInformationRecords.CdmaDisplayInfoRec) {
333922ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville            if (mDisplayInfoRegistrants != null) {
334022ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville                if (RILJ_LOGD) unsljLogRet(response, infoRec.record);
334122ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville                mDisplayInfoRegistrants.notifyRegistrants(
334222ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville                        new AsyncResult (null, infoRec.record, null));
334322ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville            }
334422ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville        } else if (infoRec.record instanceof CdmaInformationRecords.CdmaSignalInfoRec) {
334522ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville            if (mSignalInfoRegistrants != null) {
334622ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville                if (RILJ_LOGD) unsljLogRet(response, infoRec.record);
334722ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville                mSignalInfoRegistrants.notifyRegistrants(
334822ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville                        new AsyncResult (null, infoRec.record, null));
334922ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville            }
335022ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville        } else if (infoRec.record instanceof CdmaInformationRecords.CdmaNumberInfoRec) {
335122ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville            if (mNumberInfoRegistrants != null) {
335222ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville                if (RILJ_LOGD) unsljLogRet(response, infoRec.record);
335322ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville                mNumberInfoRegistrants.notifyRegistrants(
335422ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville                        new AsyncResult (null, infoRec.record, null));
335522ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville            }
335622ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville        } else if (infoRec.record instanceof CdmaInformationRecords.CdmaRedirectingNumberInfoRec) {
335722ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville            if (mRedirNumInfoRegistrants != null) {
335822ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville                if (RILJ_LOGD) unsljLogRet(response, infoRec.record);
335922ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville                mRedirNumInfoRegistrants.notifyRegistrants(
336022ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville                        new AsyncResult (null, infoRec.record, null));
336122ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville            }
336222ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville        } else if (infoRec.record instanceof CdmaInformationRecords.CdmaLineControlInfoRec) {
336322ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville            if (mLineControlInfoRegistrants != null) {
336422ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville                if (RILJ_LOGD) unsljLogRet(response, infoRec.record);
336522ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville                mLineControlInfoRegistrants.notifyRegistrants(
336622ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville                        new AsyncResult (null, infoRec.record, null));
336722ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville            }
336822ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville        } else if (infoRec.record instanceof CdmaInformationRecords.CdmaT53ClirInfoRec) {
336922ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville            if (mT53ClirInfoRegistrants != null) {
337022ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville                if (RILJ_LOGD) unsljLogRet(response, infoRec.record);
337122ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville                mT53ClirInfoRegistrants.notifyRegistrants(
337222ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville                        new AsyncResult (null, infoRec.record, null));
337322ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville            }
337422ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville        } else if (infoRec.record instanceof CdmaInformationRecords.CdmaT53AudioControlInfoRec) {
337522ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville            if (mT53AudCntrlInfoRegistrants != null) {
337622ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville               if (RILJ_LOGD) unsljLogRet(response, infoRec.record);
337722ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville               mT53AudCntrlInfoRegistrants.notifyRegistrants(
337822ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville                       new AsyncResult (null, infoRec.record, null));
337922ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville            }
338022ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville        }
338122ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville    }
338222ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville
33839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    static String
3384767a662ecde33c3979bf02b793d392aca0403162Wink Saville    requestToString(int request) {
33859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
33869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project cat libs/telephony/ril_commands.h \
33879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project | egrep "^ *{RIL_" \
33889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project | sed -re 's/\{RIL_([^,]+),[^,]+,([^}]+).+/case RIL_\1: return "\1";/'
33899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project*/
33909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        switch(request) {
33919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_GET_SIM_STATUS: return "GET_SIM_STATUS";
33929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_ENTER_SIM_PIN: return "ENTER_SIM_PIN";
33939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_ENTER_SIM_PUK: return "ENTER_SIM_PUK";
33949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_ENTER_SIM_PIN2: return "ENTER_SIM_PIN2";
33959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_ENTER_SIM_PUK2: return "ENTER_SIM_PUK2";
33969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_CHANGE_SIM_PIN: return "CHANGE_SIM_PIN";
33979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_CHANGE_SIM_PIN2: return "CHANGE_SIM_PIN2";
33989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_ENTER_NETWORK_DEPERSONALIZATION: return "ENTER_NETWORK_DEPERSONALIZATION";
33999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_GET_CURRENT_CALLS: return "GET_CURRENT_CALLS";
34009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_DIAL: return "DIAL";
34019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_GET_IMSI: return "GET_IMSI";
34029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_HANGUP: return "HANGUP";
34039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_HANGUP_WAITING_OR_BACKGROUND: return "HANGUP_WAITING_OR_BACKGROUND";
34049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_HANGUP_FOREGROUND_RESUME_BACKGROUND: return "HANGUP_FOREGROUND_RESUME_BACKGROUND";
34059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_SWITCH_WAITING_OR_HOLDING_AND_ACTIVE: return "REQUEST_SWITCH_WAITING_OR_HOLDING_AND_ACTIVE";
34069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_CONFERENCE: return "CONFERENCE";
34079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_UDUB: return "UDUB";
34089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_LAST_CALL_FAIL_CAUSE: return "LAST_CALL_FAIL_CAUSE";
34099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_SIGNAL_STRENGTH: return "SIGNAL_STRENGTH";
34105284090631e638b916d9a453212e9dc802656a67Wink Saville            case RIL_REQUEST_VOICE_REGISTRATION_STATE: return "VOICE_REGISTRATION_STATE";
34115284090631e638b916d9a453212e9dc802656a67Wink Saville            case RIL_REQUEST_DATA_REGISTRATION_STATE: return "DATA_REGISTRATION_STATE";
34129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_OPERATOR: return "OPERATOR";
34139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_RADIO_POWER: return "RADIO_POWER";
34149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_DTMF: return "DTMF";
34159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_SEND_SMS: return "SEND_SMS";
34169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_SEND_SMS_EXPECT_MORE: return "SEND_SMS_EXPECT_MORE";
3417767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_SETUP_DATA_CALL: return "SETUP_DATA_CALL";
34189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_SIM_IO: return "SIM_IO";
34199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_SEND_USSD: return "SEND_USSD";
34209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_CANCEL_USSD: return "CANCEL_USSD";
34219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_GET_CLIR: return "GET_CLIR";
34229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_SET_CLIR: return "SET_CLIR";
34239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_QUERY_CALL_FORWARD_STATUS: return "QUERY_CALL_FORWARD_STATUS";
34249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_SET_CALL_FORWARD: return "SET_CALL_FORWARD";
34259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_QUERY_CALL_WAITING: return "QUERY_CALL_WAITING";
34269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_SET_CALL_WAITING: return "SET_CALL_WAITING";
34279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_SMS_ACKNOWLEDGE: return "SMS_ACKNOWLEDGE";
34289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_GET_IMEI: return "GET_IMEI";
34299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_GET_IMEISV: return "GET_IMEISV";
34309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_ANSWER: return "ANSWER";
3431767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_DEACTIVATE_DATA_CALL: return "DEACTIVATE_DATA_CALL";
34329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_QUERY_FACILITY_LOCK: return "QUERY_FACILITY_LOCK";
34339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_SET_FACILITY_LOCK: return "SET_FACILITY_LOCK";
34349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_CHANGE_BARRING_PASSWORD: return "CHANGE_BARRING_PASSWORD";
34359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_QUERY_NETWORK_SELECTION_MODE: return "QUERY_NETWORK_SELECTION_MODE";
34369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_SET_NETWORK_SELECTION_AUTOMATIC: return "SET_NETWORK_SELECTION_AUTOMATIC";
34379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_SET_NETWORK_SELECTION_MANUAL: return "SET_NETWORK_SELECTION_MANUAL";
34389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_QUERY_AVAILABLE_NETWORKS : return "QUERY_AVAILABLE_NETWORKS ";
34399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_DTMF_START: return "DTMF_START";
34409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_DTMF_STOP: return "DTMF_STOP";
34419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_BASEBAND_VERSION: return "BASEBAND_VERSION";
34429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_SEPARATE_CONNECTION: return "SEPARATE_CONNECTION";
34439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_SET_MUTE: return "SET_MUTE";
34449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_GET_MUTE: return "GET_MUTE";
34459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_QUERY_CLIP: return "QUERY_CLIP";
3446767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_LAST_DATA_CALL_FAIL_CAUSE: return "LAST_DATA_CALL_FAIL_CAUSE";
3447767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_DATA_CALL_LIST: return "DATA_CALL_LIST";
34489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_RESET_RADIO: return "RESET_RADIO";
34499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_OEM_HOOK_RAW: return "OEM_HOOK_RAW";
34509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_OEM_HOOK_STRINGS: return "OEM_HOOK_STRINGS";
34519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_SCREEN_STATE: return "SCREEN_STATE";
34529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_SET_SUPP_SVC_NOTIFICATION: return "SET_SUPP_SVC_NOTIFICATION";
34539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_WRITE_SMS_TO_SIM: return "WRITE_SMS_TO_SIM";
34549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_DELETE_SMS_ON_SIM: return "DELETE_SMS_ON_SIM";
34559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_SET_BAND_MODE: return "SET_BAND_MODE";
34569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_QUERY_AVAILABLE_BAND_MODE: return "QUERY_AVAILABLE_BAND_MODE";
34579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_STK_GET_PROFILE: return "REQUEST_STK_GET_PROFILE";
34589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_STK_SET_PROFILE: return "REQUEST_STK_SET_PROFILE";
34599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_STK_SEND_ENVELOPE_COMMAND: return "REQUEST_STK_SEND_ENVELOPE_COMMAND";
34609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_STK_SEND_TERMINAL_RESPONSE: return "REQUEST_STK_SEND_TERMINAL_RESPONSE";
34619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_STK_HANDLE_CALL_SETUP_REQUESTED_FROM_SIM: return "REQUEST_STK_HANDLE_CALL_SETUP_REQUESTED_FROM_SIM";
34629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_EXPLICIT_CALL_TRANSFER: return "REQUEST_EXPLICIT_CALL_TRANSFER";
34639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE: return "REQUEST_SET_PREFERRED_NETWORK_TYPE";
34649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_GET_PREFERRED_NETWORK_TYPE: return "REQUEST_GET_PREFERRED_NETWORK_TYPE";
34659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_GET_NEIGHBORING_CELL_IDS: return "REQUEST_GET_NEIGHBORING_CELL_IDS";
34669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_REQUEST_SET_LOCATION_UPDATES: return "REQUEST_SET_LOCATION_UPDATES";
34675284090631e638b916d9a453212e9dc802656a67Wink Saville            case RIL_REQUEST_CDMA_SET_SUBSCRIPTION_SOURCE: return "RIL_REQUEST_CDMA_SET_SUBSCRIPTION_SOURCE";
3468767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_CDMA_SET_ROAMING_PREFERENCE: return "RIL_REQUEST_CDMA_SET_ROAMING_PREFERENCE";
3469767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_CDMA_QUERY_ROAMING_PREFERENCE: return "RIL_REQUEST_CDMA_QUERY_ROAMING_PREFERENCE";
3470767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_SET_TTY_MODE: return "RIL_REQUEST_SET_TTY_MODE";
3471767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_QUERY_TTY_MODE: return "RIL_REQUEST_QUERY_TTY_MODE";
3472767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_CDMA_SET_PREFERRED_VOICE_PRIVACY_MODE: return "RIL_REQUEST_CDMA_SET_PREFERRED_VOICE_PRIVACY_MODE";
3473767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_CDMA_QUERY_PREFERRED_VOICE_PRIVACY_MODE: return "RIL_REQUEST_CDMA_QUERY_PREFERRED_VOICE_PRIVACY_MODE";
3474767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_CDMA_FLASH: return "RIL_REQUEST_CDMA_FLASH";
3475767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_CDMA_BURST_DTMF: return "RIL_REQUEST_CDMA_BURST_DTMF";
3476767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_CDMA_SEND_SMS: return "RIL_REQUEST_CDMA_SEND_SMS";
3477767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_CDMA_SMS_ACKNOWLEDGE: return "RIL_REQUEST_CDMA_SMS_ACKNOWLEDGE";
3478e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang            case RIL_REQUEST_GSM_GET_BROADCAST_CONFIG: return "RIL_REQUEST_GSM_GET_BROADCAST_CONFIG";
3479e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang            case RIL_REQUEST_GSM_SET_BROADCAST_CONFIG: return "RIL_REQUEST_GSM_SET_BROADCAST_CONFIG";
3480767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_CDMA_GET_BROADCAST_CONFIG: return "RIL_REQUEST_CDMA_GET_BROADCAST_CONFIG";
3481767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_CDMA_SET_BROADCAST_CONFIG: return "RIL_REQUEST_CDMA_SET_BROADCAST_CONFIG";
3482e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang            case RIL_REQUEST_GSM_BROADCAST_ACTIVATION: return "RIL_REQUEST_GSM_BROADCAST_ACTIVATION";
348327d074e0efbdabd40f00eca41169ea225c05fcbeNaveen Kalla            case RIL_REQUEST_CDMA_VALIDATE_AND_WRITE_AKEY: return "RIL_REQUEST_CDMA_VALIDATE_AND_WRITE_AKEY";
3484767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_CDMA_BROADCAST_ACTIVATION: return "RIL_REQUEST_CDMA_BROADCAST_ACTIVATION";
3485767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_CDMA_SUBSCRIPTION: return "RIL_REQUEST_CDMA_SUBSCRIPTION";
3486767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_CDMA_WRITE_SMS_TO_RUIM: return "RIL_REQUEST_CDMA_WRITE_SMS_TO_RUIM";
3487767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_CDMA_DELETE_SMS_ON_RUIM: return "RIL_REQUEST_CDMA_DELETE_SMS_ON_RUIM";
3488767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_REQUEST_DEVICE_IDENTITY: return "RIL_REQUEST_DEVICE_IDENTITY";
3489c06ce125408696fd49c7fa9e1189ecb61804007ajsh            case RIL_REQUEST_GET_SMSC_ADDRESS: return "RIL_REQUEST_GET_SMSC_ADDRESS";
3490c06ce125408696fd49c7fa9e1189ecb61804007ajsh            case RIL_REQUEST_SET_SMSC_ADDRESS: return "RIL_REQUEST_SET_SMSC_ADDRESS";
3491e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville            case RIL_REQUEST_EXIT_EMERGENCY_CALLBACK_MODE: return "REQUEST_EXIT_EMERGENCY_CALLBACK_MODE";
34929c9151eccd27e824fdb7c266bff78c10038e87fejsh            case RIL_REQUEST_REPORT_SMS_MEMORY_STATUS: return "RIL_REQUEST_REPORT_SMS_MEMORY_STATUS";
3493e14af0e26eb11d0a9e4620a75aadcc4b40885aa8Wink Saville            case RIL_REQUEST_REPORT_STK_SERVICE_IS_RUNNING: return "RIL_REQUEST_REPORT_STK_SERVICE_IS_RUNNING";
34945284090631e638b916d9a453212e9dc802656a67Wink Saville            case RIL_REQUEST_CDMA_GET_SUBSCRIPTION_SOURCE: return "RIL_REQUEST_CDMA_GET_SUBSCRIPTION_SOURCE";
3495463f22114587344c96460179069a08d7381fbfd6Jake Hamby            case RIL_REQUEST_ISIM_AUTHENTICATION: return "RIL_REQUEST_ISIM_AUTHENTICATION";
3496094854091b63498f952f0a6c4bcedfdfefaf1cf7Jake Hamby            case RIL_REQUEST_ACKNOWLEDGE_INCOMING_GSM_SMS_WITH_PDU: return "RIL_REQUEST_ACKNOWLEDGE_INCOMING_GSM_SMS_WITH_PDU";
3497094854091b63498f952f0a6c4bcedfdfefaf1cf7Jake Hamby            case RIL_REQUEST_STK_SEND_ENVELOPE_WITH_STATUS: return "RIL_REQUEST_STK_SEND_ENVELOPE_WITH_STATUS";
34989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            default: return "<unknown request>";
34999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
35009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
35019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
35029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    static String
35039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    responseToString(int request)
35049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    {
35059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
35069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project cat libs/telephony/ril_unsol_commands.h \
35079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project | egrep "^ *{RIL_" \
35089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project | sed -re 's/\{RIL_([^,]+),[^,]+,([^}]+).+/case RIL_\1: return "\1";/'
35099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project*/
35109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        switch(request) {
35119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_RESPONSE_RADIO_STATE_CHANGED: return "UNSOL_RESPONSE_RADIO_STATE_CHANGED";
35129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED: return "UNSOL_RESPONSE_CALL_STATE_CHANGED";
35135284090631e638b916d9a453212e9dc802656a67Wink Saville            case RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED: return "UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED";
35149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_RESPONSE_NEW_SMS: return "UNSOL_RESPONSE_NEW_SMS";
35159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_RESPONSE_NEW_SMS_STATUS_REPORT: return "UNSOL_RESPONSE_NEW_SMS_STATUS_REPORT";
35169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_RESPONSE_NEW_SMS_ON_SIM: return "UNSOL_RESPONSE_NEW_SMS_ON_SIM";
35179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_ON_USSD: return "UNSOL_ON_USSD";
35189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_ON_USSD_REQUEST: return "UNSOL_ON_USSD_REQUEST";
35199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_NITZ_TIME_RECEIVED: return "UNSOL_NITZ_TIME_RECEIVED";
35209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_SIGNAL_STRENGTH: return "UNSOL_SIGNAL_STRENGTH";
3521767a662ecde33c3979bf02b793d392aca0403162Wink Saville            case RIL_UNSOL_DATA_CALL_LIST_CHANGED: return "UNSOL_DATA_CALL_LIST_CHANGED";
35229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_SUPP_SVC_NOTIFICATION: return "UNSOL_SUPP_SVC_NOTIFICATION";
35239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_STK_SESSION_END: return "UNSOL_STK_SESSION_END";
35249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_STK_PROACTIVE_COMMAND: return "UNSOL_STK_PROACTIVE_COMMAND";
35259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_STK_EVENT_NOTIFY: return "UNSOL_STK_EVENT_NOTIFY";
35269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_STK_CALL_SETUP: return "UNSOL_STK_CALL_SETUP";
35279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_SIM_SMS_STORAGE_FULL: return "UNSOL_SIM_SMS_STORAGE_FULL";
35289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_SIM_REFRESH: return "UNSOL_SIM_REFRESH";
35299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RIL_UNSOL_CALL_RING: return "UNSOL_CALL_RING";
3530e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville            case RIL_UNSOL_RESPONSE_SIM_STATUS_CHANGED: return "UNSOL_RESPONSE_SIM_STATUS_CHANGED";
3531e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville            case RIL_UNSOL_RESPONSE_CDMA_NEW_SMS: return "UNSOL_RESPONSE_CDMA_NEW_SMS";
3532e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville            case RIL_UNSOL_RESPONSE_NEW_BROADCAST_SMS: return "UNSOL_RESPONSE_NEW_BROADCAST_SMS";
3533e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville            case RIL_UNSOL_CDMA_RUIM_SMS_STORAGE_FULL: return "UNSOL_CDMA_RUIM_SMS_STORAGE_FULL";
3534dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville            case RIL_UNSOL_RESTRICTED_STATE_CHANGED: return "UNSOL_RESTRICTED_STATE_CHANGED";
3535e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville            case RIL_UNSOL_ENTER_EMERGENCY_CALLBACK_MODE: return "UNSOL_ENTER_EMERGENCY_CALLBACK_MODE";
3536e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville            case RIL_UNSOL_CDMA_CALL_WAITING: return "UNSOL_CDMA_CALL_WAITING";
3537e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville            case RIL_UNSOL_CDMA_OTA_PROVISION_STATUS: return "UNSOL_CDMA_OTA_PROVISION_STATUS";
3538e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville            case RIL_UNSOL_CDMA_INFO_REC: return "UNSOL_CDMA_INFO_REC";
3539dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville            case RIL_UNSOL_OEM_HOOK_RAW: return "UNSOL_OEM_HOOK_RAW";
3540bbd754b8fe7563234b5c4c8d1425a7417337f2f2John Wang            case RIL_UNSOL_RINGBACK_TONE: return "UNSOL_RINGBACK_TONG";
35411ccc41ed938ff005ae3d621292580a90601242caJohn Wang            case RIL_UNSOL_RESEND_INCALL_MUTE: return "UNSOL_RESEND_INCALL_MUTE";
354266958c73674673274bf08266b60ad3c1791c9179Wink Saville            case RIL_UNSOL_CDMA_SUBSCRIPTION_SOURCE_CHANGED: return "CDMA_SUBSCRIPTION_SOURCE_CHANGED";
35435284090631e638b916d9a453212e9dc802656a67Wink Saville            case RIL_UNSOl_CDMA_PRL_CHANGED: return "UNSOL_CDMA_PRL_CHANGED";
35445284090631e638b916d9a453212e9dc802656a67Wink Saville            case RIL_UNSOL_EXIT_EMERGENCY_CALLBACK_MODE: return "UNSOL_EXIT_EMERGENCY_CALLBACK_MODE";
35451dd2ada5cf7d0c95afb4731d082473f34ee7f433Wink Saville            case RIL_UNSOL_RIL_CONNECTED: return "UNSOL_RIL_CONNECTED";
35469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            default: return "<unknown reponse>";
35479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
35489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
35499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
35509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private void riljLog(String msg) {
35519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Log.d(LOG_TAG, msg);
35529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
35539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
35549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private void riljLogv(String msg) {
35559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Log.v(LOG_TAG, msg);
35569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
35579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
35589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private void unsljLog(int response) {
35599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        riljLog("[UNSL]< " + responseToString(response));
35609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
35619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
35629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private void unsljLogMore(int response, String more) {
35639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        riljLog("[UNSL]< " + responseToString(response) + " " + more);
35649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
35659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
35669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private void unsljLogRet(int response, Object ret) {
35679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        riljLog("[UNSL]< " + responseToString(response) + " " + retToString(response, ret));
35689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
35699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
35709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private void unsljLogvRet(int response, Object ret) {
35719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        riljLogv("[UNSL]< " + responseToString(response) + " " + retToString(response, ret));
35729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
35739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
35742a34043d5578deb8d7f93830e13c4efc91eba583Jaikumar Ganesh
3575767a662ecde33c3979bf02b793d392aca0403162Wink Saville    // ***** Methods for CDMA support
3576767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void
3577767a662ecde33c3979bf02b793d392aca0403162Wink Saville    getDeviceIdentity(Message response) {
3578767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_DEVICE_IDENTITY, response);
3579767a662ecde33c3979bf02b793d392aca0403162Wink Saville
3580767a662ecde33c3979bf02b793d392aca0403162Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
3581767a662ecde33c3979bf02b793d392aca0403162Wink Saville
3582767a662ecde33c3979bf02b793d392aca0403162Wink Saville        send(rr);
3583767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
3584767a662ecde33c3979bf02b793d392aca0403162Wink Saville
3585767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void
3586767a662ecde33c3979bf02b793d392aca0403162Wink Saville    getCDMASubscription(Message response) {
3587767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CDMA_SUBSCRIPTION, response);
3588767a662ecde33c3979bf02b793d392aca0403162Wink Saville
3589767a662ecde33c3979bf02b793d392aca0403162Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
3590767a662ecde33c3979bf02b793d392aca0403162Wink Saville
3591767a662ecde33c3979bf02b793d392aca0403162Wink Saville        send(rr);
3592767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
3593767a662ecde33c3979bf02b793d392aca0403162Wink Saville
35945e9270bfd566c32a60dfeb34435a158eb4ceb9a9Wink Saville    @Override
35955e9270bfd566c32a60dfeb34435a158eb4ceb9a9Wink Saville    public void setPhoneType(int phoneType) { // Called by CDMAPhone and GSMPhone constructor
35965e9270bfd566c32a60dfeb34435a158eb4ceb9a9Wink Saville        if (RILJ_LOGD) riljLog("setPhoneType=" + phoneType + " old value=" + mPhoneType);
3597767a662ecde33c3979bf02b793d392aca0403162Wink Saville        mPhoneType = phoneType;
3598767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
3599767a662ecde33c3979bf02b793d392aca0403162Wink Saville
3600767a662ecde33c3979bf02b793d392aca0403162Wink Saville    /**
3601767a662ecde33c3979bf02b793d392aca0403162Wink Saville     * {@inheritDoc}
3602767a662ecde33c3979bf02b793d392aca0403162Wink Saville     */
3603767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void queryCdmaRoamingPreference(Message response) {
3604767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr = RILRequest.obtain(
3605767a662ecde33c3979bf02b793d392aca0403162Wink Saville                RILConstants.RIL_REQUEST_CDMA_QUERY_ROAMING_PREFERENCE, response);
3606767a662ecde33c3979bf02b793d392aca0403162Wink Saville
3607767a662ecde33c3979bf02b793d392aca0403162Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
3608767a662ecde33c3979bf02b793d392aca0403162Wink Saville
3609767a662ecde33c3979bf02b793d392aca0403162Wink Saville        send(rr);
3610767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
3611767a662ecde33c3979bf02b793d392aca0403162Wink Saville
3612767a662ecde33c3979bf02b793d392aca0403162Wink Saville    /**
3613767a662ecde33c3979bf02b793d392aca0403162Wink Saville     * {@inheritDoc}
3614767a662ecde33c3979bf02b793d392aca0403162Wink Saville     */
3615767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void setCdmaRoamingPreference(int cdmaRoamingType, Message response) {
3616767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr = RILRequest.obtain(
3617767a662ecde33c3979bf02b793d392aca0403162Wink Saville                RILConstants.RIL_REQUEST_CDMA_SET_ROAMING_PREFERENCE, response);
3618767a662ecde33c3979bf02b793d392aca0403162Wink Saville
3619767a662ecde33c3979bf02b793d392aca0403162Wink Saville        rr.mp.writeInt(1);
3620767a662ecde33c3979bf02b793d392aca0403162Wink Saville        rr.mp.writeInt(cdmaRoamingType);
3621767a662ecde33c3979bf02b793d392aca0403162Wink Saville
3622767a662ecde33c3979bf02b793d392aca0403162Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
3623767a662ecde33c3979bf02b793d392aca0403162Wink Saville                + " : " + cdmaRoamingType);
3624767a662ecde33c3979bf02b793d392aca0403162Wink Saville
3625767a662ecde33c3979bf02b793d392aca0403162Wink Saville        send(rr);
3626767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
3627767a662ecde33c3979bf02b793d392aca0403162Wink Saville
3628767a662ecde33c3979bf02b793d392aca0403162Wink Saville    /**
3629767a662ecde33c3979bf02b793d392aca0403162Wink Saville     * {@inheritDoc}
3630767a662ecde33c3979bf02b793d392aca0403162Wink Saville     */
36315284090631e638b916d9a453212e9dc802656a67Wink Saville    public void setCdmaSubscriptionSource(int cdmaSubscription , Message response) {
3632767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr = RILRequest.obtain(
36335284090631e638b916d9a453212e9dc802656a67Wink Saville                RILConstants.RIL_REQUEST_CDMA_SET_SUBSCRIPTION_SOURCE, response);
3634767a662ecde33c3979bf02b793d392aca0403162Wink Saville
3635767a662ecde33c3979bf02b793d392aca0403162Wink Saville        rr.mp.writeInt(1);
3636767a662ecde33c3979bf02b793d392aca0403162Wink Saville        rr.mp.writeInt(cdmaSubscription);
3637767a662ecde33c3979bf02b793d392aca0403162Wink Saville
3638767a662ecde33c3979bf02b793d392aca0403162Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
3639767a662ecde33c3979bf02b793d392aca0403162Wink Saville                + " : " + cdmaSubscription);
3640767a662ecde33c3979bf02b793d392aca0403162Wink Saville
3641767a662ecde33c3979bf02b793d392aca0403162Wink Saville        send(rr);
3642767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
3643767a662ecde33c3979bf02b793d392aca0403162Wink Saville
3644767a662ecde33c3979bf02b793d392aca0403162Wink Saville    /**
3645767a662ecde33c3979bf02b793d392aca0403162Wink Saville     * {@inheritDoc}
3646767a662ecde33c3979bf02b793d392aca0403162Wink Saville     */
3647d31fdf05659bcd87fb8b989931f540f5e739fb22Wink Saville    @Override
3648d31fdf05659bcd87fb8b989931f540f5e739fb22Wink Saville    public void getCdmaSubscriptionSource(Message response) {
36495284090631e638b916d9a453212e9dc802656a67Wink Saville        RILRequest rr = RILRequest.obtain(
36505284090631e638b916d9a453212e9dc802656a67Wink Saville                RILConstants.RIL_REQUEST_CDMA_GET_SUBSCRIPTION_SOURCE, response);
36515284090631e638b916d9a453212e9dc802656a67Wink Saville
3652d31fdf05659bcd87fb8b989931f540f5e739fb22Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
36535284090631e638b916d9a453212e9dc802656a67Wink Saville
36545284090631e638b916d9a453212e9dc802656a67Wink Saville        send(rr);
36555284090631e638b916d9a453212e9dc802656a67Wink Saville    }
36565284090631e638b916d9a453212e9dc802656a67Wink Saville
36575284090631e638b916d9a453212e9dc802656a67Wink Saville    /**
36585284090631e638b916d9a453212e9dc802656a67Wink Saville     * {@inheritDoc}
36595284090631e638b916d9a453212e9dc802656a67Wink Saville     */
3660e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    public void queryTTYMode(Message response) {
3661767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr = RILRequest.obtain(
3662767a662ecde33c3979bf02b793d392aca0403162Wink Saville                RILConstants.RIL_REQUEST_QUERY_TTY_MODE, response);
3663767a662ecde33c3979bf02b793d392aca0403162Wink Saville
36642e896830f83d3398b9dac51ac0e9ad803a5bacdbNaveen Kalla        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
36652e896830f83d3398b9dac51ac0e9ad803a5bacdbNaveen Kalla
3666767a662ecde33c3979bf02b793d392aca0403162Wink Saville        send(rr);
3667767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
3668767a662ecde33c3979bf02b793d392aca0403162Wink Saville
3669767a662ecde33c3979bf02b793d392aca0403162Wink Saville    /**
3670767a662ecde33c3979bf02b793d392aca0403162Wink Saville     * {@inheritDoc}
3671767a662ecde33c3979bf02b793d392aca0403162Wink Saville     */
3672e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    public void setTTYMode(int ttyMode, Message response) {
3673767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr = RILRequest.obtain(
3674767a662ecde33c3979bf02b793d392aca0403162Wink Saville                RILConstants.RIL_REQUEST_SET_TTY_MODE, response);
3675767a662ecde33c3979bf02b793d392aca0403162Wink Saville
3676767a662ecde33c3979bf02b793d392aca0403162Wink Saville        rr.mp.writeInt(1);
3677e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        rr.mp.writeInt(ttyMode);
3678767a662ecde33c3979bf02b793d392aca0403162Wink Saville
36792e896830f83d3398b9dac51ac0e9ad803a5bacdbNaveen Kalla        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
36802e896830f83d3398b9dac51ac0e9ad803a5bacdbNaveen Kalla                + " : " + ttyMode);
36812e896830f83d3398b9dac51ac0e9ad803a5bacdbNaveen Kalla
3682767a662ecde33c3979bf02b793d392aca0403162Wink Saville        send(rr);
3683767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
3684767a662ecde33c3979bf02b793d392aca0403162Wink Saville
3685767a662ecde33c3979bf02b793d392aca0403162Wink Saville    /**
3686767a662ecde33c3979bf02b793d392aca0403162Wink Saville     * {@inheritDoc}
3687767a662ecde33c3979bf02b793d392aca0403162Wink Saville     */
3688767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void
3689767a662ecde33c3979bf02b793d392aca0403162Wink Saville    sendCDMAFeatureCode(String FeatureCode, Message response) {
3690767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CDMA_FLASH, response);
3691767a662ecde33c3979bf02b793d392aca0403162Wink Saville
3692767a662ecde33c3979bf02b793d392aca0403162Wink Saville        rr.mp.writeString(FeatureCode);
3693767a662ecde33c3979bf02b793d392aca0403162Wink Saville
3694767a662ecde33c3979bf02b793d392aca0403162Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
3695767a662ecde33c3979bf02b793d392aca0403162Wink Saville                + " : " + FeatureCode);
3696767a662ecde33c3979bf02b793d392aca0403162Wink Saville
3697767a662ecde33c3979bf02b793d392aca0403162Wink Saville        send(rr);
3698767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
3699767a662ecde33c3979bf02b793d392aca0403162Wink Saville
3700767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void getCdmaBroadcastConfig(Message response) {
3701767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CDMA_GET_BROADCAST_CONFIG, response);
3702767a662ecde33c3979bf02b793d392aca0403162Wink Saville
3703767a662ecde33c3979bf02b793d392aca0403162Wink Saville        send(rr);
3704767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
3705767a662ecde33c3979bf02b793d392aca0403162Wink Saville
3706f315238a2b07c7e84f6ade800e504f520d262e66Wink Saville    // TODO: Change the configValuesArray to a RIL_BroadcastSMSConfig
3707767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void setCdmaBroadcastConfig(int[] configValuesArray, Message response) {
3708767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CDMA_SET_BROADCAST_CONFIG, response);
3709767a662ecde33c3979bf02b793d392aca0403162Wink Saville
3710e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        for(int i = 0; i < configValuesArray.length; i++) {
3711767a662ecde33c3979bf02b793d392aca0403162Wink Saville            rr.mp.writeInt(configValuesArray[i]);
3712767a662ecde33c3979bf02b793d392aca0403162Wink Saville        }
3713767a662ecde33c3979bf02b793d392aca0403162Wink Saville
3714e66b5c43cb2d0aece7f4a636a2368a9c66c46cf5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
3715e66b5c43cb2d0aece7f4a636a2368a9c66c46cf5Wink Saville
3716767a662ecde33c3979bf02b793d392aca0403162Wink Saville        send(rr);
3717767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
3718767a662ecde33c3979bf02b793d392aca0403162Wink Saville
3719e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang    public void setCdmaBroadcastActivation(boolean activate, Message response) {
3720767a662ecde33c3979bf02b793d392aca0403162Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CDMA_BROADCAST_ACTIVATION, response);
3721767a662ecde33c3979bf02b793d392aca0403162Wink Saville
3722767a662ecde33c3979bf02b793d392aca0403162Wink Saville        rr.mp.writeInt(1);
3723e337d651a5199551ae3d3180176f8ac7d58c9acdjohnwang        rr.mp.writeInt(activate ? 0 :1);
3724767a662ecde33c3979bf02b793d392aca0403162Wink Saville
3725e66b5c43cb2d0aece7f4a636a2368a9c66c46cf5Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
3726e66b5c43cb2d0aece7f4a636a2368a9c66c46cf5Wink Saville
3727767a662ecde33c3979bf02b793d392aca0403162Wink Saville        send(rr);
3728767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
3729e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
3730e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    /**
3731e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     * {@inheritDoc}
3732e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     */
3733e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    public void exitEmergencyCallbackMode(Message response) {
3734dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_EXIT_EMERGENCY_CALLBACK_MODE, response);
3735e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
3736e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
3737e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
3738e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        send(rr);
3739e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    }
37405284090631e638b916d9a453212e9dc802656a67Wink Saville
3741463f22114587344c96460179069a08d7381fbfd6Jake Hamby    public void requestIsimAuthentication(String nonce, Message response) {
3742463f22114587344c96460179069a08d7381fbfd6Jake Hamby        RILRequest rr = RILRequest.obtain(RIL_REQUEST_ISIM_AUTHENTICATION, response);
3743463f22114587344c96460179069a08d7381fbfd6Jake Hamby
3744463f22114587344c96460179069a08d7381fbfd6Jake Hamby        rr.mp.writeString(nonce);
3745463f22114587344c96460179069a08d7381fbfd6Jake Hamby
3746463f22114587344c96460179069a08d7381fbfd6Jake Hamby        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
3747463f22114587344c96460179069a08d7381fbfd6Jake Hamby
3748463f22114587344c96460179069a08d7381fbfd6Jake Hamby        send(rr);
3749463f22114587344c96460179069a08d7381fbfd6Jake Hamby    }
37509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
3751