RIL.java revision 88e9c9700fbb6119c2564fb7173821c84b360d07
1c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville/*
2c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * Copyright (C) 2006 The Android Open Source Project
3c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville *
4c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * Licensed under the Apache License, Version 2.0 (the "License");
5c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * you may not use this file except in compliance with the License.
6c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * You may obtain a copy of the License at
7c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville *
8c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville *      http://www.apache.org/licenses/LICENSE-2.0
9c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville *
10c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * Unless required by applicable law or agreed to in writing, software
11c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * distributed under the License is distributed on an "AS IS" BASIS,
12c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * See the License for the specific language governing permissions and
14c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * limitations under the License.
15c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville */
16c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
17c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savillepackage com.android.internal.telephony;
18c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
19c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport static com.android.internal.telephony.RILConstants.*;
20c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport static android.telephony.TelephonyManager.NETWORK_TYPE_UNKNOWN;
21c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport static android.telephony.TelephonyManager.NETWORK_TYPE_EDGE;
22c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport static android.telephony.TelephonyManager.NETWORK_TYPE_GPRS;
23c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport static android.telephony.TelephonyManager.NETWORK_TYPE_UMTS;
24c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport static android.telephony.TelephonyManager.NETWORK_TYPE_HSDPA;
25c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport static android.telephony.TelephonyManager.NETWORK_TYPE_HSUPA;
26c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport static android.telephony.TelephonyManager.NETWORK_TYPE_HSPA;
27c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
28c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport android.content.BroadcastReceiver;
29c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport android.content.Context;
30c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport android.content.Intent;
31c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport android.content.IntentFilter;
32c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport android.net.ConnectivityManager;
33c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport android.net.LocalSocket;
34c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport android.net.LocalSocketAddress;
35c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport android.os.AsyncResult;
36c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport android.os.Handler;
37c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport android.os.HandlerThread;
38c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport android.os.Looper;
39c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport android.os.Message;
40c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport android.os.Parcel;
41c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport android.os.PowerManager;
42c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport android.os.SystemProperties;
43c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport android.os.PowerManager.WakeLock;
44c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport android.telephony.NeighboringCellInfo;
45c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport android.telephony.PhoneNumberUtils;
465b81adc82a53b3064f4baa3acfeabef31586588aUma Maheswari Ramalingamimport android.telephony.SignalStrength;
47c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport android.telephony.SmsManager;
48c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport android.telephony.SmsMessage;
49c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport android.text.TextUtils;
50c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport android.util.Log;
51c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
52c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport com.android.internal.telephony.gsm.SmsBroadcastConfigInfo;
53c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport com.android.internal.telephony.gsm.SuppServiceNotification;
54e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenkaimport com.android.internal.telephony.IccCardApplicationStatus;
55c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport com.android.internal.telephony.cdma.CdmaCallWaitingNotification;
56c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport com.android.internal.telephony.cdma.CdmaInformationRecords;
57c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport com.android.internal.telephony.IccRefreshResponse;
58c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
59c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport java.io.ByteArrayInputStream;
60c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport java.io.DataInputStream;
61c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport java.io.FileDescriptor;
62c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport java.io.IOException;
63c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport java.io.InputStream;
64c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport java.io.PrintWriter;
65c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport java.util.ArrayList;
66c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport java.util.Collections;
67c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport java.util.concurrent.atomic.AtomicBoolean;
68c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
69c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville/**
70c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * {@hide}
71c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville */
72c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleclass RILRequest {
73c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    static final String LOG_TAG = "RILJ";
74c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
75c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    //***** Class Variables
76c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    static int sNextSerial = 0;
77c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    static Object sSerialMonitor = new Object();
78c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private static Object sPoolSync = new Object();
79c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private static RILRequest sPool = null;
80c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private static int sPoolSize = 0;
81c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private static final int MAX_POOL_SIZE = 4;
82c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
83c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    //***** Instance Variables
84c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    int mSerial;
85c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    int mRequest;
86c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    Message mResult;
87c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    Parcel mp;
88c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    RILRequest mNext;
89c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
90c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    /**
91c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     * Retrieves a new RILRequest instance from the pool.
92c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     *
93c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     * @param request RIL_REQUEST_*
94c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     * @param result sent when operation completes
95c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     * @return a RILRequest instance from the pool.
96c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     */
97c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    static RILRequest obtain(int request, Message result) {
98c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr = null;
99c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
100c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        synchronized(sPoolSync) {
101c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            if (sPool != null) {
102c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                rr = sPool;
103c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                sPool = rr.mNext;
104c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                rr.mNext = null;
105c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                sPoolSize--;
106c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            }
107c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
108c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
109c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (rr == null) {
110c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            rr = new RILRequest();
111c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
112c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
113c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        synchronized(sSerialMonitor) {
114c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            rr.mSerial = sNextSerial++;
115c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
116c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mRequest = request;
117c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mResult = result;
118c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp = Parcel.obtain();
119c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
120c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (result != null && result.getTarget() == null) {
121c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            throw new NullPointerException("Message target must not be null");
122c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
123c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
124c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        // first elements in any RIL Parcel
125c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(request);
126c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(rr.mSerial);
127c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
128c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        return rr;
129c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
130c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
131c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    /**
132c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     * Returns a RILRequest instance to the pool.
133c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     *
134c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     * Note: This should only be called once per use.
135c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     */
136c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    void release() {
137c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        synchronized (sPoolSync) {
138c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            if (sPoolSize < MAX_POOL_SIZE) {
139c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                this.mNext = sPool;
140c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                sPool = this;
141c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                sPoolSize++;
142c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                mResult = null;
143c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            }
144c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
145c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
146c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
147c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private RILRequest() {
148c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
149c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
150c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    static void
151c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    resetSerial() {
152c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        synchronized(sSerialMonitor) {
153c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            sNextSerial = 0;
154c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
155c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
156c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
157c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    String
158c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    serialString() {
159c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        //Cheesy way to do %04d
160c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        StringBuilder sb = new StringBuilder(8);
161c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        String sn;
162c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
163c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        sn = Integer.toString(mSerial);
164c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
165c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        //sb.append("J[");
166c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        sb.append('[');
167c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        for (int i = 0, s = sn.length() ; i < 4 - s; i++) {
168c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            sb.append('0');
169c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
170c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
171c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        sb.append(sn);
172c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        sb.append(']');
173c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        return sb.toString();
174c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
175c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
176c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    void
177c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    onError(int error, Object ret) {
178c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        CommandException ex;
179c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
180c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        ex = CommandException.fromRilErrno(error);
181c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
182c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RIL.RILJ_LOGD) Log.d(LOG_TAG, serialString() + "< "
183c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            + RIL.requestToString(mRequest)
184c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            + " error: " + ex);
185c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
186c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (mResult != null) {
187c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            AsyncResult.forMessage(mResult, ret, ex);
188c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            mResult.sendToTarget();
189c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
190c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
191c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (mp != null) {
192c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            mp.recycle();
193c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            mp = null;
194c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
195c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
196c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville}
197c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
198c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
199c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville/**
200c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * RIL implementation of the CommandsInterface.
201c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * FIXME public only for testing
202c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville *
203c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * {@hide}
204c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville */
205c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savillepublic final class RIL extends BaseCommands implements CommandsInterface {
206c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    static final String LOG_TAG = "RILJ";
207c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    static final boolean RILJ_LOGD = true;
208c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    static final boolean RILJ_LOGV = false; // STOP SHIP if true
209c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
210c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    /**
211c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     * Wake lock timeout should be longer than the longest timeout in
212c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     * the vendor ril.
213c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     */
214c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private static final int DEFAULT_WAKE_LOCK_TIMEOUT = 60000;
215c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
216c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    //***** Instance Variables
217c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
218c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    LocalSocket mSocket;
219c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    HandlerThread mSenderThread;
220c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    RILSender mSender;
221c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    Thread mReceiverThread;
222c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    RILReceiver mReceiver;
223c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    WakeLock mWakeLock;
224c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    int mWakeLockTimeout;
225c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    // The number of requests pending to be sent out, it increases before calling
226c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    // EVENT_SEND and decreases while handling EVENT_SEND. It gets cleared while
227c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    // WAKE_LOCK_TIMEOUT occurs.
228c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    int mRequestMessagesPending;
229c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    // The number of requests sent out but waiting for response. It increases while
230c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    // sending request and decreases while handling response. It should match
231c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    // mRequestList.size() unless there are requests no replied while
232c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    // WAKE_LOCK_TIMEOUT occurs.
233c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    int mRequestMessagesWaiting;
234c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
235c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    //I'd rather this be LinkedList or something
236c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    ArrayList<RILRequest> mRequestsList = new ArrayList<RILRequest>();
237c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
238c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    Object     mLastNITZTimeInfo;
239c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
240c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    // When we are testing emergency calls
241c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    AtomicBoolean mTestingEmergencyCall = new AtomicBoolean(false);
242c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
243c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    //***** Events
244c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
245c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    static final int EVENT_SEND                 = 1;
246c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    static final int EVENT_WAKE_LOCK_TIMEOUT    = 2;
247c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
248c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    //***** Constants
249c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
250c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    // match with constant in ril.cpp
251c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    static final int RIL_MAX_COMMAND_BYTES = (8 * 1024);
252c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    static final int RESPONSE_SOLICITED = 0;
253c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    static final int RESPONSE_UNSOLICITED = 1;
254c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
255c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    static final String SOCKET_NAME_RIL = "rild";
256c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
257c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    static final int SOCKET_OPEN_RETRY_MILLIS = 4 * 1000;
258c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
259c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    // The number of the required config values for broadcast SMS stored in the C struct
260c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    // RIL_CDMA_BroadcastServiceInfo
261c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private static final int CDMA_BSI_NO_OF_INTS_STRUCT = 3;
262c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
263c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private static final int CDMA_BROADCAST_SMS_NO_OF_SERVICE_CATEGORIES = 31;
264c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
265c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {
266c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        @Override
267c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        public void onReceive(Context context, Intent intent) {
268c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
269c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                sendScreenState(true);
270c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            } else if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
271c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                sendScreenState(false);
272c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            } else {
273c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                Log.w(LOG_TAG, "RIL received unexpected Intent: " + intent.getAction());
274c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            }
275c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
276c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    };
277c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
278c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    class RILSender extends Handler implements Runnable {
279c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        public RILSender(Looper looper) {
280c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            super(looper);
281c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
282c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
283c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        // Only allocated once
284c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        byte[] dataLength = new byte[4];
285c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
286c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        //***** Runnable implementation
287c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        public void
288c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        run() {
289c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            //setup if needed
290c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
291c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
292c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
293c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        //***** Handler implementation
294c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        @Override public void
295c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        handleMessage(Message msg) {
296c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            RILRequest rr = (RILRequest)(msg.obj);
297c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            RILRequest req = null;
298c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
299c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            switch (msg.what) {
300c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                case EVENT_SEND:
301c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    /**
302c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                     * mRequestMessagePending++ already happened for every
303c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                     * EVENT_SEND, thus we must make sure
304c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                     * mRequestMessagePending-- happens once and only once
305c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                     */
306c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    boolean alreadySubtracted = false;
307c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    try {
308c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        LocalSocket s;
309c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
310c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        s = mSocket;
311c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
312c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        if (s == null) {
313c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                            rr.onError(RADIO_NOT_AVAILABLE, null);
314c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                            rr.release();
315c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                            if (mRequestMessagesPending > 0)
316c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                                mRequestMessagesPending--;
317c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                            alreadySubtracted = true;
318c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                            return;
319c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        }
320c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
321c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        synchronized (mRequestsList) {
322c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                            mRequestsList.add(rr);
323c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                            mRequestMessagesWaiting++;
324c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        }
325c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
326c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        if (mRequestMessagesPending > 0)
327c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                            mRequestMessagesPending--;
328c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        alreadySubtracted = true;
329c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
330c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        byte[] data;
331c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
332c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        data = rr.mp.marshall();
333c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        rr.mp.recycle();
334c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        rr.mp = null;
335c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
336c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        if (data.length > RIL_MAX_COMMAND_BYTES) {
337c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                            throw new RuntimeException(
338c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                                    "Parcel larger than max bytes allowed! "
339c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                                                          + data.length);
340c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        }
341c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
342c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        // parcel length in big endian
343c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        dataLength[0] = dataLength[1] = 0;
344c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        dataLength[2] = (byte)((data.length >> 8) & 0xff);
345c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        dataLength[3] = (byte)((data.length) & 0xff);
346c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
347c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        //Log.v(LOG_TAG, "writing packet: " + data.length + " bytes");
348c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
349c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        s.getOutputStream().write(dataLength);
350c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        s.getOutputStream().write(data);
351c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    } catch (IOException ex) {
352c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        Log.e(LOG_TAG, "IOException", ex);
353c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        req = findAndRemoveRequestFromList(rr.mSerial);
354c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        // make sure this request has not already been handled,
355c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        // eg, if RILReceiver cleared the list.
356c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        if (req != null || !alreadySubtracted) {
357c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                            rr.onError(RADIO_NOT_AVAILABLE, null);
358c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                            rr.release();
359c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        }
360c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    } catch (RuntimeException exc) {
361c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        Log.e(LOG_TAG, "Uncaught exception ", exc);
362c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        req = findAndRemoveRequestFromList(rr.mSerial);
363c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        // make sure this request has not already been handled,
364c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        // eg, if RILReceiver cleared the list.
365c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        if (req != null || !alreadySubtracted) {
366c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                            rr.onError(GENERIC_FAILURE, null);
367c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                            rr.release();
368c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        }
369c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    } finally {
370c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        // Note: We are "Done" only if there are no outstanding
371c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        // requests or replies. Thus this code path will only release
372c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        // the wake lock on errors.
373c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        releaseWakeLockIfDone();
374c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    }
375c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
376c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    if (!alreadySubtracted && mRequestMessagesPending > 0) {
377c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        mRequestMessagesPending--;
378c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    }
379c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
380c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    break;
381c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
382c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                case EVENT_WAKE_LOCK_TIMEOUT:
383c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    // Haven't heard back from the last request.  Assume we're
384c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    // not getting a response and  release the wake lock.
385c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    synchronized (mWakeLock) {
386c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        if (mWakeLock.isHeld()) {
387c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                            // The timer of WAKE_LOCK_TIMEOUT is reset with each
388c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                            // new send request. So when WAKE_LOCK_TIMEOUT occurs
389c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                            // all requests in mRequestList already waited at
390c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                            // least DEFAULT_WAKE_LOCK_TIMEOUT but no response.
391c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                            // Reset mRequestMessagesWaiting to enable
392c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                            // releaseWakeLockIfDone().
393c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                            //
394c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                            // Note: Keep mRequestList so that delayed response
395c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                            // can still be handled when response finally comes.
396c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                            if (mRequestMessagesWaiting != 0) {
397c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                                Log.d(LOG_TAG, "NOTE: mReqWaiting is NOT 0 but"
398c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                                        + mRequestMessagesWaiting + " at TIMEOUT, reset!"
399c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                                        + " There still msg waitng for response");
400c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
401c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                                mRequestMessagesWaiting = 0;
402c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
403c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                                if (RILJ_LOGD) {
404c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                                    synchronized (mRequestsList) {
405c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                                        int count = mRequestsList.size();
406c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                                        Log.d(LOG_TAG, "WAKE_LOCK_TIMEOUT " +
407c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                                                " mRequestList=" + count);
408c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
409c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                                        for (int i = 0; i < count; i++) {
410c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                                            rr = mRequestsList.get(i);
411c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                                            Log.d(LOG_TAG, i + ": [" + rr.mSerial + "] "
412c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                                                    + requestToString(rr.mRequest));
413c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                                        }
414c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                                    }
415c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                                }
416c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                            }
417c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                            // mRequestMessagesPending shows how many
418c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                            // requests are waiting to be sent (and before
419c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                            // to be added in request list) since star the
420c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                            // WAKE_LOCK_TIMEOUT timer. Since WAKE_LOCK_TIMEOUT
421c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                            // is the expected time to get response, all requests
422c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                            // should already sent out (i.e.
423c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                            // mRequestMessagesPending is 0 )while TIMEOUT occurs.
424c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                            if (mRequestMessagesPending != 0) {
425c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                                Log.e(LOG_TAG, "ERROR: mReqPending is NOT 0 but"
426c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                                        + mRequestMessagesPending + " at TIMEOUT, reset!");
427c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                                mRequestMessagesPending = 0;
428c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
429c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                            }
430c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                            mWakeLock.release();
431c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        }
432c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    }
433c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    break;
434c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            }
435c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
436c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
437c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
438c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    /**
439c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     * Reads in a single RIL message off the wire. A RIL message consists
440c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     * of a 4-byte little-endian length and a subsequent series of bytes.
441c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     * The final message (length header omitted) is read into
442c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     * <code>buffer</code> and the length of the final message (less header)
443c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     * is returned. A return value of -1 indicates end-of-stream.
444c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     *
445c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     * @param is non-null; Stream to read from
446c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     * @param buffer Buffer to fill in. Must be as large as maximum
447c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     * message size, or an ArrayOutOfBounds exception will be thrown.
448c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     * @return Length of message less header, or -1 on end of stream.
449c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     * @throws IOException
450c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     */
451c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private static int readRilMessage(InputStream is, byte[] buffer)
452c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            throws IOException {
453c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        int countRead;
454c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        int offset;
455c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        int remaining;
456c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        int messageLength;
457c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
458c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        // First, read in the length of the message
459c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        offset = 0;
460c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        remaining = 4;
461c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        do {
462c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            countRead = is.read(buffer, offset, remaining);
463c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
464c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            if (countRead < 0 ) {
465c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                Log.e(LOG_TAG, "Hit EOS reading message length");
466c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                return -1;
467c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            }
468c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
469c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            offset += countRead;
470c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            remaining -= countRead;
471c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        } while (remaining > 0);
472c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
473c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        messageLength = ((buffer[0] & 0xff) << 24)
474c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                | ((buffer[1] & 0xff) << 16)
475c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                | ((buffer[2] & 0xff) << 8)
476c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                | (buffer[3] & 0xff);
477c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
478c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        // Then, re-use the buffer and read in the message itself
479c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        offset = 0;
480c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        remaining = messageLength;
481c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        do {
482c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            countRead = is.read(buffer, offset, remaining);
483c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
484c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            if (countRead < 0 ) {
485c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                Log.e(LOG_TAG, "Hit EOS reading message.  messageLength=" + messageLength
486c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        + " remaining=" + remaining);
487c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                return -1;
488c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            }
489c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
490c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            offset += countRead;
491c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            remaining -= countRead;
492c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        } while (remaining > 0);
493c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
494c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        return messageLength;
495c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
496c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
497c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    class RILReceiver implements Runnable {
498c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        byte[] buffer;
499c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
500c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILReceiver() {
501c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            buffer = new byte[RIL_MAX_COMMAND_BYTES];
502c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
503c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
504c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        public void
505c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        run() {
506c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            int retryCount = 0;
507c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
508c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            try {for (;;) {
509c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                LocalSocket s = null;
510c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                LocalSocketAddress l;
511c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
512c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                try {
513c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    s = new LocalSocket();
514c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    l = new LocalSocketAddress(SOCKET_NAME_RIL,
515c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                            LocalSocketAddress.Namespace.RESERVED);
516c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    s.connect(l);
517c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                } catch (IOException ex){
518c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    try {
519c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        if (s != null) {
520c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                            s.close();
521c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        }
522c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    } catch (IOException ex2) {
523c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        //ignore failure to close after failure to connect
524c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    }
525c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
526c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    // don't print an error message after the the first time
527c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    // or after the 8th time
528c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
529c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    if (retryCount == 8) {
530c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        Log.e (LOG_TAG,
531c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                            "Couldn't find '" + SOCKET_NAME_RIL
532c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                            + "' socket after " + retryCount
533c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                            + " times, continuing to retry silently");
534c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    } else if (retryCount > 0 && retryCount < 8) {
535c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        Log.i (LOG_TAG,
536c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                            "Couldn't find '" + SOCKET_NAME_RIL
537c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                            + "' socket; retrying after timeout");
538c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    }
539c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
540c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    try {
541c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        Thread.sleep(SOCKET_OPEN_RETRY_MILLIS);
542c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    } catch (InterruptedException er) {
543c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    }
544c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
545c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    retryCount++;
546c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    continue;
547c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                }
548c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
549c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                retryCount = 0;
550c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
551c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                mSocket = s;
552c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                Log.i(LOG_TAG, "Connected to '" + SOCKET_NAME_RIL + "' socket");
553c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
554c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                int length = 0;
555c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                try {
556c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    InputStream is = mSocket.getInputStream();
557c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
558c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    for (;;) {
559c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        Parcel p;
560c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
561c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        length = readRilMessage(is, buffer);
562c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
563c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        if (length < 0) {
564c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                            // End-of-stream reached
565c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                            break;
566c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        }
567c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
568c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        p = Parcel.obtain();
569c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        p.unmarshall(buffer, 0, length);
570c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        p.setDataPosition(0);
571c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
572c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        //Log.v(LOG_TAG, "Read packet: " + length + " bytes");
573c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
574c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        processResponse(p);
575c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        p.recycle();
576c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    }
577c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                } catch (java.io.IOException ex) {
578c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    Log.i(LOG_TAG, "'" + SOCKET_NAME_RIL + "' socket closed",
579c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                          ex);
580c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                } catch (Throwable tr) {
581c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    Log.e(LOG_TAG, "Uncaught exception read length=" + length +
582c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        "Exception:" + tr.toString());
583c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                }
584c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
585c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                Log.i(LOG_TAG, "Disconnected from '" + SOCKET_NAME_RIL
586c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                      + "' socket");
587c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
588c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                setRadioState (RadioState.RADIO_UNAVAILABLE);
589c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
590c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                try {
591c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    mSocket.close();
592c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                } catch (IOException ex) {
593c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                }
594c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
595c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                mSocket = null;
596c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                RILRequest.resetSerial();
597c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
598c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                // Clear request list on close
599c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                clearRequestsList(RADIO_NOT_AVAILABLE, false);
600c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            }} catch (Throwable tr) {
601c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                Log.e(LOG_TAG,"Uncaught exception", tr);
602c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            }
603c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
604c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            /* We're disconnected so we don't know the ril version */
605c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            notifyRegistrantsRilConnectionChanged(-1);
606c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
607c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
608c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
609c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
610c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
611c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    //***** Constructors
612c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
613c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public RIL(Context context, int preferredNetworkType, int cdmaSubscription) {
614c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        super(context);
615c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) {
616c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            riljLog("RIL(context, preferredNetworkType=" + preferredNetworkType +
617c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    " cdmaSubscription=" + cdmaSubscription + ")");
618c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
619c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        mCdmaSubscription  = cdmaSubscription;
620c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        mPreferredNetworkType = preferredNetworkType;
621c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        mPhoneType = RILConstants.NO_PHONE;
622c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
623c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
624c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, LOG_TAG);
625c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        mWakeLock.setReferenceCounted(false);
626c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        mWakeLockTimeout = SystemProperties.getInt(TelephonyProperties.PROPERTY_WAKE_LOCK_TIMEOUT,
627c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                DEFAULT_WAKE_LOCK_TIMEOUT);
628c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        mRequestMessagesPending = 0;
629c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        mRequestMessagesWaiting = 0;
630c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
631c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        mSenderThread = new HandlerThread("RILSender");
632c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        mSenderThread.start();
633c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
634c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        Looper looper = mSenderThread.getLooper();
635c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        mSender = new RILSender(looper);
636c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
637c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        ConnectivityManager cm = (ConnectivityManager)context.getSystemService(
638c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                Context.CONNECTIVITY_SERVICE);
639c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (cm.isNetworkSupported(ConnectivityManager.TYPE_MOBILE) == false) {
640c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            riljLog("Not starting RILReceiver: wifi-only");
641c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        } else {
642c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            riljLog("Starting RILReceiver");
643c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            mReceiver = new RILReceiver();
644c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            mReceiverThread = new Thread(mReceiver, "RILReceiver");
645c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            mReceiverThread.start();
646c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
647c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            IntentFilter filter = new IntentFilter();
648c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            filter.addAction(Intent.ACTION_SCREEN_ON);
649c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            filter.addAction(Intent.ACTION_SCREEN_OFF);
650c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            context.registerReceiver(mIntentReceiver, filter);
651c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
652c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
653c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
654c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    //***** CommandsInterface implementation
655c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
656c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void getVoiceRadioTechnology(Message result) {
657c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_VOICE_RADIO_TECH, result);
658c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
659c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
660c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
661c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
662c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
663c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
664c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
665c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    @Override public void
666c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    setOnNITZTime(Handler h, int what, Object obj) {
667c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        super.setOnNITZTime(h, what, obj);
668c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
669c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        // Send the last NITZ time if we have it
670c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (mLastNITZTimeInfo != null) {
671c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            mNITZTimeRegistrant
672c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                .notifyRegistrant(
673c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    new AsyncResult (null, mLastNITZTimeInfo, null));
674c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            mLastNITZTimeInfo = null;
675c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
676c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
677c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
678c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void
679c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    getIccCardStatus(Message result) {
680c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        //Note: This RIL request has not been renamed to ICC,
681c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        //       but this request is also valid for SIM and RUIM
682c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_GET_SIM_STATUS, result);
683c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
684c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
685c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
686c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
687c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
688c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
689c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    @Override public void
690c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    supplyIccPin(String pin, Message result) {
691c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        supplyIccPinForApp(pin, null, result);
692c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
693c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
694c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    @Override public void
695c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    supplyIccPinForApp(String pin, String aid, Message result) {
696c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        //Note: This RIL request has not been renamed to ICC,
697c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        //       but this request is also valid for SIM and RUIM
698c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_ENTER_SIM_PIN, result);
699c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
700c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
701c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
702c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(2);
703c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeString(pin);
704c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeString(aid);
705c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
706c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
707c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
708c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
709c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    @Override public void
710c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    supplyIccPuk(String puk, String newPin, Message result) {
711c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        supplyIccPukForApp(puk, newPin, null, result);
712c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
713c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
714c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    @Override public void
715c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    supplyIccPukForApp(String puk, String newPin, String aid, Message result) {
716c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        //Note: This RIL request has not been renamed to ICC,
717c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        //       but this request is also valid for SIM and RUIM
718c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_ENTER_SIM_PUK, result);
719c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
720c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
721c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
722c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(3);
723c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeString(puk);
724c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeString(newPin);
725c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeString(aid);
726c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
727c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
728c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
729c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
730c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    @Override public void
731c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    supplyIccPin2(String pin, Message result) {
732c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        supplyIccPin2ForApp(pin, null, result);
733c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
734c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
735c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    @Override public void
736c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    supplyIccPin2ForApp(String pin, String aid, Message result) {
737c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        //Note: This RIL request has not been renamed to ICC,
738c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        //       but this request is also valid for SIM and RUIM
739c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_ENTER_SIM_PIN2, result);
740c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
741c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
742c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
743c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(2);
744c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeString(pin);
745c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeString(aid);
746c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
747c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
748c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
749c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
750c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    @Override public void
751c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    supplyIccPuk2(String puk2, String newPin2, Message result) {
752c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        supplyIccPuk2ForApp(puk2, newPin2, null, result);
753c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
754c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
755c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    @Override public void
756c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    supplyIccPuk2ForApp(String puk, String newPin2, String aid, Message result) {
757c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        //Note: This RIL request has not been renamed to ICC,
758c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        //       but this request is also valid for SIM and RUIM
759c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_ENTER_SIM_PUK2, result);
760c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
761c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
762c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
763c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(3);
764c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeString(puk);
765c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeString(newPin2);
766c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeString(aid);
767c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
768c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
769c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
770c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
771c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    @Override public void
772c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    changeIccPin(String oldPin, String newPin, Message result) {
773c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        changeIccPinForApp(oldPin, newPin, null, result);
774c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
775c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
776c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    @Override public void
777c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    changeIccPinForApp(String oldPin, String newPin, String aid, Message result) {
778c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        //Note: This RIL request has not been renamed to ICC,
779c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        //       but this request is also valid for SIM and RUIM
780c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CHANGE_SIM_PIN, result);
781c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
782c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
783c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
784c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(3);
785c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeString(oldPin);
786c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeString(newPin);
787c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeString(aid);
788c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
789c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
790c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
791c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
792c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    @Override public void
793c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    changeIccPin2(String oldPin2, String newPin2, Message result) {
794c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        changeIccPin2ForApp(oldPin2, newPin2, null, result);
795c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
796c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
797c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    @Override public void
798c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    changeIccPin2ForApp(String oldPin2, String newPin2, String aid, Message result) {
799c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        //Note: This RIL request has not been renamed to ICC,
800c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        //       but this request is also valid for SIM and RUIM
801c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CHANGE_SIM_PIN2, result);
802c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
803c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
804c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
805c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(3);
806c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeString(oldPin2);
807c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeString(newPin2);
808c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeString(aid);
809c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
810c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
811c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
812c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
813c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void
814c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    changeBarringPassword(String facility, String oldPwd, String newPwd, Message result) {
815c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CHANGE_BARRING_PASSWORD, result);
816c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
817c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
818c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
819c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(3);
820c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeString(facility);
821c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeString(oldPwd);
822c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeString(newPwd);
823c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
824c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
825c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
826c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
827c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void
828c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    supplyNetworkDepersonalization(String netpin, Message result) {
829c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_ENTER_NETWORK_DEPERSONALIZATION, result);
830c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
831c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
832c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
833c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(1);
834c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeString(netpin);
835c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
836c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
837c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
838c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
839c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void
840c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    getCurrentCalls (Message result) {
841c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_GET_CURRENT_CALLS, result);
842c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
843c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
844c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
845c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
846c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
847c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
848c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    @Deprecated public void
849c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    getPDPContextList(Message result) {
850c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        getDataCallList(result);
851c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
852c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
853c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void
854c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    getDataCallList(Message result) {
855c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_DATA_CALL_LIST, result);
856c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
857c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
858c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
859c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
860c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
861c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
862c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void
863c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    dial (String address, int clirMode, Message result) {
864c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        dial(address, clirMode, null, result);
865c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
866c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
867c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void
868c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    dial(String address, int clirMode, UUSInfo uusInfo, Message result) {
869c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_DIAL, result);
870c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
871c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeString(address);
872c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(clirMode);
873c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(0); // UUS information is absent
874c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
875c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (uusInfo == null) {
876c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            rr.mp.writeInt(0); // UUS information is absent
877c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        } else {
878c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            rr.mp.writeInt(1); // UUS information is present
879c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            rr.mp.writeInt(uusInfo.getType());
880c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            rr.mp.writeInt(uusInfo.getDcs());
881c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            rr.mp.writeByteArray(uusInfo.getUserData());
882c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
883c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
884c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
885c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
886c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
887c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
888c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
889c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void
890c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    getIMSI(Message result) {
891c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        getIMSIForApp(null, result);
892c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
893c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
894c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void
895c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    getIMSIForApp(String aid, Message result) {
896c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_GET_IMSI, result);
897c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
898c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(1);
899c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeString(aid);
900c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
901c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() +
902c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                              "> getIMSI: " + requestToString(rr.mRequest)
903c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                              + " aid: " + aid);
904c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
905c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
906c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
907c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
908c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void
909c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    getIMEI(Message result) {
910c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_GET_IMEI, result);
911c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
912c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
913c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
914c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
915c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
916c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
917c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void
918c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    getIMEISV(Message result) {
919c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_GET_IMEISV, result);
920c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
921c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
922c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
923c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
924c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
925c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
926c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
927c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void
928c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    hangupConnection (int gsmIndex, Message result) {
929c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog("hangupConnection: gsmIndex=" + gsmIndex);
930c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
931c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_HANGUP, result);
932c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
933c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " " +
934c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                gsmIndex);
935c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
936c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(1);
937c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(gsmIndex);
938c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
939c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
940c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
941c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
942c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void
943c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    hangupWaitingOrBackground (Message result) {
944c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_HANGUP_WAITING_OR_BACKGROUND,
945c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                                        result);
946c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
947c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
948c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
949c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
950c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
951c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
952c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void
953c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    hangupForegroundResumeBackground (Message result) {
954c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr
955c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                = RILRequest.obtain(
956c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        RIL_REQUEST_HANGUP_FOREGROUND_RESUME_BACKGROUND,
957c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                                        result);
958c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
959c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
960c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
961c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
962c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
963c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void
964c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    switchWaitingOrHoldingAndActive (Message result) {
965c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr
966c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                = RILRequest.obtain(
967c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        RIL_REQUEST_SWITCH_WAITING_OR_HOLDING_AND_ACTIVE,
968c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                                        result);
969c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
970c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
971c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
972c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
973c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
974c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void
975c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    conference (Message result) {
976c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr
977c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                = RILRequest.obtain(RIL_REQUEST_CONFERENCE, result);
978c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
979c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
980c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
981c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
982c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
983c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
984c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
985c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void setPreferredVoicePrivacy(boolean enable, Message result) {
986c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CDMA_SET_PREFERRED_VOICE_PRIVACY_MODE,
987c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                result);
988c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
989c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(1);
990c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(enable ? 1:0);
991c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
992c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
993c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
994c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
995c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void getPreferredVoicePrivacy(Message result) {
996c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CDMA_QUERY_PREFERRED_VOICE_PRIVACY_MODE,
997c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                result);
998c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
999c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
1000c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1001c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void
1002c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    separateConnection (int gsmIndex, Message result) {
1003c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr
1004c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                = RILRequest.obtain(RIL_REQUEST_SEPARATE_CONNECTION, result);
1005c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1006c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
1007c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                            + " " + gsmIndex);
1008c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1009c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(1);
1010c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(gsmIndex);
1011c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1012c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
1013c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
1014c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1015c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void
1016c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    acceptCall (Message result) {
1017c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr
1018c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                = RILRequest.obtain(RIL_REQUEST_ANSWER, result);
1019c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1020c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
1021c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1022c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
1023c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
1024c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1025c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void
1026c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    rejectCall (Message result) {
1027c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr
1028c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                = RILRequest.obtain(RIL_REQUEST_UDUB, result);
1029c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1030c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
1031c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1032c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
1033c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
1034c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1035c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void
1036c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    explicitCallTransfer (Message result) {
1037c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr
1038c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                = RILRequest.obtain(RIL_REQUEST_EXPLICIT_CALL_TRANSFER, result);
1039c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1040c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
1041c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1042c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
1043c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
1044c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1045c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void
1046c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    getLastCallFailCause (Message result) {
1047c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr
1048c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                = RILRequest.obtain(RIL_REQUEST_LAST_CALL_FAIL_CAUSE, result);
1049c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1050c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
1051c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1052c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
1053c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
1054c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1055c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    /**
1056c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     * @deprecated
1057c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     */
1058c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void
1059c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    getLastPdpFailCause (Message result) {
1060c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        getLastDataCallFailCause (result);
1061c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
1062c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1063c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    /**
1064c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     * The preferred new alternative to getLastPdpFailCause
1065c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     */
1066c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void
1067c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    getLastDataCallFailCause (Message result) {
1068c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr
1069c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                = RILRequest.obtain(RIL_REQUEST_LAST_DATA_CALL_FAIL_CAUSE, result);
1070c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1071c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
1072c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1073c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
1074c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
1075c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1076c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void
1077c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    setMute (boolean enableMute, Message response) {
1078c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr
1079c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                = RILRequest.obtain(RIL_REQUEST_SET_MUTE, response);
1080c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1081c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
1082c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                            + " " + enableMute);
1083c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1084c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(1);
1085c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(enableMute ? 1 : 0);
1086c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1087c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
1088c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
1089c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1090c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void
1091c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    getMute (Message response) {
1092c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr
1093c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                = RILRequest.obtain(RIL_REQUEST_GET_MUTE, response);
1094c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1095c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
1096c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1097c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
1098c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
1099c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1100c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void
1101c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    getSignalStrength (Message result) {
1102c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr
1103c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                = RILRequest.obtain(RIL_REQUEST_SIGNAL_STRENGTH, result);
1104c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1105c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
1106c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1107c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
1108c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
1109c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1110c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void
1111c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    getVoiceRegistrationState (Message result) {
1112c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr
1113c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                = RILRequest.obtain(RIL_REQUEST_VOICE_REGISTRATION_STATE, result);
1114c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1115c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
1116c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1117c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
1118c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
1119c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1120c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void
1121c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    getDataRegistrationState (Message result) {
1122c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr
1123c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                = RILRequest.obtain(RIL_REQUEST_DATA_REGISTRATION_STATE, result);
1124c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1125c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
1126c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1127c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
1128c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
1129c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1130c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void
1131c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    getOperator(Message result) {
1132c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr
1133c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                = RILRequest.obtain(RIL_REQUEST_OPERATOR, result);
1134c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1135c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
1136c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1137c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
1138c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
1139c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1140c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void
1141c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    sendDtmf(char c, Message result) {
1142c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr
1143c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                = RILRequest.obtain(RIL_REQUEST_DTMF, result);
1144c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1145c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
1146c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1147c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeString(Character.toString(c));
1148c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1149c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
1150c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
1151c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1152c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void
1153c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    startDtmf(char c, Message result) {
1154c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr
1155c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                = RILRequest.obtain(RIL_REQUEST_DTMF_START, result);
1156c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1157c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
1158c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1159c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeString(Character.toString(c));
1160c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1161c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
1162c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
1163c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1164c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void
1165c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    stopDtmf(Message result) {
1166c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr
1167c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                = RILRequest.obtain(RIL_REQUEST_DTMF_STOP, result);
1168c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1169c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
1170c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1171c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
1172c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
1173c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1174c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void
1175c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    sendBurstDtmf(String dtmfString, int on, int off, Message result) {
1176c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CDMA_BURST_DTMF, result);
1177c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1178c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(3);
1179c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeString(dtmfString);
1180c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeString(Integer.toString(on));
1181c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeString(Integer.toString(off));
1182c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1183c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
1184c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                + " : " + dtmfString);
1185c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1186c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
1187c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
1188c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1189c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void
1190c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    sendSMS (String smscPDU, String pdu, Message result) {
1191c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr
1192c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                = RILRequest.obtain(RIL_REQUEST_SEND_SMS, result);
1193c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1194c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(2);
1195c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeString(smscPDU);
1196c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeString(pdu);
1197c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1198c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
1199c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1200c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
1201c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
1202c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1203c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void
1204c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    sendCdmaSms(byte[] pdu, Message result) {
1205c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        int address_nbr_of_digits;
1206c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        int subaddr_nbr_of_digits;
1207c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        int bearerDataLength;
1208c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        ByteArrayInputStream bais = new ByteArrayInputStream(pdu);
1209c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        DataInputStream dis = new DataInputStream(bais);
1210c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1211c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr
1212c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                = RILRequest.obtain(RIL_REQUEST_CDMA_SEND_SMS, result);
1213c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1214c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        try {
1215c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            rr.mp.writeInt(dis.readInt()); //teleServiceId
1216c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            rr.mp.writeByte((byte) dis.readInt()); //servicePresent
1217c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            rr.mp.writeInt(dis.readInt()); //serviceCategory
1218c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            rr.mp.writeInt(dis.read()); //address_digit_mode
1219c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            rr.mp.writeInt(dis.read()); //address_nbr_mode
1220c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            rr.mp.writeInt(dis.read()); //address_ton
1221c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            rr.mp.writeInt(dis.read()); //address_nbr_plan
1222c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            address_nbr_of_digits = (byte) dis.read();
1223c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            rr.mp.writeByte((byte) address_nbr_of_digits);
1224c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            for(int i=0; i < address_nbr_of_digits; i++){
1225c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                rr.mp.writeByte(dis.readByte()); // address_orig_bytes[i]
1226c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            }
1227c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            rr.mp.writeInt(dis.read()); //subaddressType
1228c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            rr.mp.writeByte((byte) dis.read()); //subaddr_odd
1229c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            subaddr_nbr_of_digits = (byte) dis.read();
1230c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            rr.mp.writeByte((byte) subaddr_nbr_of_digits);
1231c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            for(int i=0; i < subaddr_nbr_of_digits; i++){
1232c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                rr.mp.writeByte(dis.readByte()); //subaddr_orig_bytes[i]
1233c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            }
1234c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1235c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            bearerDataLength = dis.read();
1236c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            rr.mp.writeInt(bearerDataLength);
1237c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            for(int i=0; i < bearerDataLength; i++){
1238c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                rr.mp.writeByte(dis.readByte()); //bearerData[i]
1239c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            }
1240c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }catch (IOException ex){
1241c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            if (RILJ_LOGD) riljLog("sendSmsCdma: conversion from input stream to object failed: "
1242c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    + ex);
1243c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
1244c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1245c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
1246c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1247c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
1248c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
1249c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1250c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void deleteSmsOnSim(int index, Message response) {
1251c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_DELETE_SMS_ON_SIM,
1252c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                response);
1253c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1254c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(1);
1255c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(index);
1256c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1257c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (false) {
1258c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            if (RILJ_LOGD) riljLog(rr.serialString() + "> "
1259c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    + requestToString(rr.mRequest)
1260c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    + " " + index);
1261c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
1262c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1263c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
1264c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
1265c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1266c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void deleteSmsOnRuim(int index, Message response) {
1267c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CDMA_DELETE_SMS_ON_RUIM,
1268c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                response);
1269c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1270c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(1);
1271c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(index);
1272c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1273c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (false) {
1274c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            if (RILJ_LOGD) riljLog(rr.serialString() + "> "
1275c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    + requestToString(rr.mRequest)
1276c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    + " " + index);
1277c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
1278c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1279c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
1280c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
1281c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1282c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void writeSmsToSim(int status, String smsc, String pdu, Message response) {
1283c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        status = translateStatus(status);
1284c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1285c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_WRITE_SMS_TO_SIM,
1286c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                response);
1287c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1288c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(status);
1289c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeString(pdu);
1290c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeString(smsc);
1291c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1292c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (false) {
1293c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            if (RILJ_LOGD) riljLog(rr.serialString() + "> "
1294c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    + requestToString(rr.mRequest)
1295c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    + " " + status);
1296c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
1297c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1298c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
1299c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
1300c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1301c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void writeSmsToRuim(int status, String pdu, Message response) {
1302c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        status = translateStatus(status);
1303c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1304c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CDMA_WRITE_SMS_TO_RUIM,
1305c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                response);
1306c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1307c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(status);
1308c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeString(pdu);
1309c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1310c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (false) {
1311c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            if (RILJ_LOGD) riljLog(rr.serialString() + "> "
1312c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    + requestToString(rr.mRequest)
1313c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    + " " + status);
1314c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
1315c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1316c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
1317c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
1318c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1319c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    /**
1320c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     *  Translates EF_SMS status bits to a status value compatible with
1321c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     *  SMS AT commands.  See TS 27.005 3.1.
1322c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     */
1323c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private int translateStatus(int status) {
1324c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        switch(status & 0x7) {
1325c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case SmsManager.STATUS_ON_ICC_READ:
1326c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                return 1;
1327c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case SmsManager.STATUS_ON_ICC_UNREAD:
1328c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                return 0;
1329c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case SmsManager.STATUS_ON_ICC_SENT:
1330c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                return 3;
1331c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case SmsManager.STATUS_ON_ICC_UNSENT:
1332c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                return 2;
1333c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
1334c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1335c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        // Default to READ.
1336c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        return 1;
1337c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
1338c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1339c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void
1340c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    setupDataCall(String radioTechnology, String profile, String apn,
1341c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            String user, String password, String authType, String protocol,
1342c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            Message result) {
1343c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr
1344c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                = RILRequest.obtain(RIL_REQUEST_SETUP_DATA_CALL, result);
1345c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1346c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(7);
1347c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1348c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeString(radioTechnology);
1349c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeString(profile);
1350c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeString(apn);
1351c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeString(user);
1352c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeString(password);
1353c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeString(authType);
1354c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeString(protocol);
1355c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1356c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> "
1357c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                + requestToString(rr.mRequest) + " " + radioTechnology + " "
1358c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                + profile + " " + apn + " " + user + " "
1359c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                + password + " " + authType + " " + protocol);
1360c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1361c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
1362c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
1363c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1364c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void
1365c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    deactivateDataCall(int cid, int reason, Message result) {
1366c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr
1367c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                = RILRequest.obtain(RIL_REQUEST_DEACTIVATE_DATA_CALL, result);
1368c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1369c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(2);
1370c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeString(Integer.toString(cid));
1371c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeString(Integer.toString(reason));
1372c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1373c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " +
1374c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                requestToString(rr.mRequest) + " " + cid + " " + reason);
1375c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1376c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
1377c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
1378c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1379c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void
1380c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    setRadioPower(boolean on, Message result) {
1381c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_RADIO_POWER, result);
1382c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1383c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(1);
1384c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(on ? 1 : 0);
1385c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1386c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) {
1387c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
1388c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    + (on ? " on" : " off"));
1389c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
1390c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1391c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
1392c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
1393c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1394c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void
1395c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    setSuppServiceNotifications(boolean enable, Message result) {
1396c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr
1397c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                = RILRequest.obtain(RIL_REQUEST_SET_SUPP_SVC_NOTIFICATION, result);
1398c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1399c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(1);
1400c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(enable ? 1 : 0);
1401c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1402c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> "
1403c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                + requestToString(rr.mRequest));
1404c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1405c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
1406c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
1407c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1408c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void
1409c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    acknowledgeLastIncomingGsmSms(boolean success, int cause, Message result) {
1410c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr
1411c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                = RILRequest.obtain(RIL_REQUEST_SMS_ACKNOWLEDGE, result);
1412c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1413c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(2);
1414c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(success ? 1 : 0);
1415c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(cause);
1416c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1417c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
1418c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                + " " + success + " " + cause);
1419c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1420c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
1421c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
1422c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1423c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void
1424c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    acknowledgeLastIncomingCdmaSms(boolean success, int cause, Message result) {
1425c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr
1426c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                = RILRequest.obtain(RIL_REQUEST_CDMA_SMS_ACKNOWLEDGE, result);
1427c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1428c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(success ? 0 : 1); //RIL_CDMA_SMS_ErrorClass
1429c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        // cause code according to X.S004-550E
1430c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(cause);
1431c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1432c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
1433c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                + " " + success + " " + cause);
1434c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1435c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
1436c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
1437c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1438c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void
1439c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    acknowledgeIncomingGsmSmsWithPdu(boolean success, String ackPdu, Message result) {
1440c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr
1441c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                = RILRequest.obtain(RIL_REQUEST_ACKNOWLEDGE_INCOMING_GSM_SMS_WITH_PDU, result);
1442c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1443c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(2);
1444c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeString(success ? "1" : "0");
1445c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeString(ackPdu);
1446c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1447c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
1448c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                + ' ' + success + " [" + ackPdu + ']');
1449c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1450c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
1451c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
1452c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1453c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void
1454c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    iccIO (int command, int fileid, String path, int p1, int p2, int p3,
1455c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            String data, String pin2, Message result) {
1456c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        iccIOForApp(command, fileid, path, p1, p2, p3, data, pin2, null, result);
1457c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
1458c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void
1459c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    iccIOForApp (int command, int fileid, String path, int p1, int p2, int p3,
1460c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            String data, String pin2, String aid, Message result) {
1461c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        //Note: This RIL request has not been renamed to ICC,
1462c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        //       but this request is also valid for SIM and RUIM
1463c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr
1464c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                = RILRequest.obtain(RIL_REQUEST_SIM_IO, result);
1465c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1466c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(command);
1467c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(fileid);
1468c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeString(path);
1469c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(p1);
1470c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(p2);
1471c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(p3);
1472c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeString(data);
1473c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeString(pin2);
1474c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeString(aid);
1475c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1476c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> iccIO: "
1477c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                + requestToString(rr.mRequest)
1478c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                + " 0x" + Integer.toHexString(command)
1479c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                + " 0x" + Integer.toHexString(fileid) + " "
1480c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                + " path: " + path + ","
1481c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                + p1 + "," + p2 + "," + p3
1482c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                + " aid: " + aid);
1483c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1484c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
1485c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
1486c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1487c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void
1488c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    getCLIR(Message result) {
1489c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr
1490c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                = RILRequest.obtain(RIL_REQUEST_GET_CLIR, result);
1491c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1492c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
1493c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1494c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
1495c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
1496c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1497c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void
1498c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    setCLIR(int clirMode, Message result) {
1499c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr
1500c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                = RILRequest.obtain(RIL_REQUEST_SET_CLIR, result);
1501c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1502c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        // count ints
1503c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(1);
1504c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1505c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(clirMode);
1506c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1507c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
1508c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    + " " + clirMode);
1509c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1510c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
1511c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
1512c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1513c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void
1514c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    queryCallWaiting(int serviceClass, Message response) {
1515c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr
1516c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                = RILRequest.obtain(RIL_REQUEST_QUERY_CALL_WAITING, response);
1517c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1518c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(1);
1519c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(serviceClass);
1520c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1521c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
1522c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    + " " + serviceClass);
1523c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1524c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
1525c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
1526c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1527c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void
1528c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    setCallWaiting(boolean enable, int serviceClass, Message response) {
1529c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr
1530c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                = RILRequest.obtain(RIL_REQUEST_SET_CALL_WAITING, response);
1531c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1532c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(2);
1533c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(enable ? 1 : 0);
1534c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(serviceClass);
1535c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1536c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
1537c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                + " " + enable + ", " + serviceClass);
1538c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1539c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
1540c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
1541c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1542c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void
1543c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    setNetworkSelectionModeAutomatic(Message response) {
1544c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr
1545c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                = RILRequest.obtain(RIL_REQUEST_SET_NETWORK_SELECTION_AUTOMATIC,
1546c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                                    response);
1547c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1548c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
1549c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1550c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
1551c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
1552c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1553c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void
1554c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    setNetworkSelectionModeManual(String operatorNumeric, Message response) {
1555c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr
1556c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                = RILRequest.obtain(RIL_REQUEST_SET_NETWORK_SELECTION_MANUAL,
1557c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                                    response);
1558c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1559c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
1560c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    + " " + operatorNumeric);
1561c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1562c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeString(operatorNumeric);
1563c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1564c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
1565c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
1566c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1567c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void
1568c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    getNetworkSelectionMode(Message response) {
1569c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr
1570c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                = RILRequest.obtain(RIL_REQUEST_QUERY_NETWORK_SELECTION_MODE,
1571c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                                    response);
1572c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1573c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
1574c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1575c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
1576c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
1577c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1578c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void
1579c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    getAvailableNetworks(Message response) {
1580c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr
1581c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                = RILRequest.obtain(RIL_REQUEST_QUERY_AVAILABLE_NETWORKS,
1582c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                                    response);
1583c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1584c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
1585c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1586c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
1587c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
1588c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1589c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void
1590c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    setCallForward(int action, int cfReason, int serviceClass,
1591c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                String number, int timeSeconds, Message response) {
1592c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr
1593c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                = RILRequest.obtain(RIL_REQUEST_SET_CALL_FORWARD, response);
1594c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1595c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(action);
1596c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(cfReason);
1597c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(serviceClass);
1598c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(PhoneNumberUtils.toaFromString(number));
1599c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeString(number);
1600c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt (timeSeconds);
1601c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1602c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
1603c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    + " " + action + " " + cfReason + " " + serviceClass
1604c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    + timeSeconds);
1605c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1606c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
1607c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
1608c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1609c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void
1610c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    queryCallForwardStatus(int cfReason, int serviceClass,
1611c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                String number, Message response) {
1612c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr
1613c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            = RILRequest.obtain(RIL_REQUEST_QUERY_CALL_FORWARD_STATUS, response);
1614c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1615c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(2); // 2 is for query action, not in used anyway
1616c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(cfReason);
1617c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(serviceClass);
1618c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(PhoneNumberUtils.toaFromString(number));
1619c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeString(number);
1620c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt (0);
1621c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1622c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
1623c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                + " " + cfReason + " " + serviceClass);
1624c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1625c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
1626c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
1627c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1628c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void
1629c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    queryCLIP(Message response) {
1630c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr
1631c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            = RILRequest.obtain(RIL_REQUEST_QUERY_CLIP, response);
1632c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1633c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
1634c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1635c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
1636c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
1637c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1638c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1639c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void
1640c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    getBasebandVersion (Message response) {
1641c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr
1642c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                = RILRequest.obtain(RIL_REQUEST_BASEBAND_VERSION, response);
1643c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1644c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
1645c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1646c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
1647c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
1648c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1649c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    @Override
1650c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void
1651c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    queryFacilityLock(String facility, String password, int serviceClass,
1652c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                            Message response) {
1653c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        queryFacilityLockForApp(facility, password, serviceClass, null, response);
1654c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
1655c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1656c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    @Override
1657c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void
1658c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    queryFacilityLockForApp(String facility, String password, int serviceClass, String appId,
1659c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                            Message response) {
1660c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_QUERY_FACILITY_LOCK, response);
1661c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
166288e9c9700fbb6119c2564fb7173821c84b360d07Abhishek Adappa        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
166388e9c9700fbb6119c2564fb7173821c84b360d07Abhishek Adappa                                                 + " [" + facility + " " + serviceClass
166488e9c9700fbb6119c2564fb7173821c84b360d07Abhishek Adappa                                                 + " " + appId + "]");
1665c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1666c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        // count strings
1667c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(4);
1668c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1669c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeString(facility);
1670c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeString(password);
1671c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1672c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeString(Integer.toString(serviceClass));
1673c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeString(appId);
1674c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1675c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
1676c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
1677c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1678c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    @Override
1679c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void
1680c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    setFacilityLock (String facility, boolean lockState, String password,
1681c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        int serviceClass, Message response) {
1682c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        setFacilityLockForApp(facility, lockState, password, serviceClass, null, response);
1683c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
1684c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1685c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    @Override
1686c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void
1687c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    setFacilityLockForApp(String facility, boolean lockState, String password,
1688c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        int serviceClass, String appId, Message response) {
1689c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        String lockString;
1690c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville         RILRequest rr
1691c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                = RILRequest.obtain(RIL_REQUEST_SET_FACILITY_LOCK, response);
1692c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
169388e9c9700fbb6119c2564fb7173821c84b360d07Abhishek Adappa        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
169488e9c9700fbb6119c2564fb7173821c84b360d07Abhishek Adappa                                                        + " [" + facility + " " + lockState
169588e9c9700fbb6119c2564fb7173821c84b360d07Abhishek Adappa                                                        + " " + serviceClass + " " + appId + "]");
1696c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1697c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        // count strings
1698c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(5);
1699c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1700c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeString(facility);
1701c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        lockString = (lockState)?"1":"0";
1702c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeString(lockString);
1703c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeString(password);
1704c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeString(Integer.toString(serviceClass));
1705c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeString(appId);
1706c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1707c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
1708c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1709c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
1710c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1711c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void
1712c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    sendUSSD (String ussdString, Message response) {
1713c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr
1714c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                = RILRequest.obtain(RIL_REQUEST_SEND_USSD, response);
1715c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1716c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
1717c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                            + " " + ussdString);
1718c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1719c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeString(ussdString);
1720c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1721c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
1722c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
1723c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1724c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    // inherited javadoc suffices
1725c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void cancelPendingUssd (Message response) {
1726c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr
1727c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                = RILRequest.obtain(RIL_REQUEST_CANCEL_USSD, response);
1728c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1729c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString()
1730c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                + "> " + requestToString(rr.mRequest));
1731c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1732c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
1733c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
1734c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1735c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1736c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void resetRadio(Message result) {
1737c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr
1738c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                = RILRequest.obtain(RIL_REQUEST_RESET_RADIO, result);
1739c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1740c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
1741c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1742c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
1743c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
1744c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1745c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void invokeOemRilRequestRaw(byte[] data, Message response) {
1746c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr
1747c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                = RILRequest.obtain(RIL_REQUEST_OEM_HOOK_RAW, response);
1748c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1749c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
1750c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville               + "[" + IccUtils.bytesToHexString(data) + "]");
1751c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1752c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeByteArray(data);
1753c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1754c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
1755c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1756c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
1757c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1758c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void invokeOemRilRequestStrings(String[] strings, Message response) {
1759c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr
1760c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                = RILRequest.obtain(RIL_REQUEST_OEM_HOOK_STRINGS, response);
1761c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1762c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
1763c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1764c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeStringArray(strings);
1765c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1766c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
1767c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
1768c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1769c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     /**
1770c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     * Assign a specified band for RF configuration.
1771c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     *
1772c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     * @param bandMode one of BM_*_BAND
1773c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     * @param response is callback message
1774c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     */
1775c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void setBandMode (int bandMode, Message response) {
1776c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr
1777c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                = RILRequest.obtain(RIL_REQUEST_SET_BAND_MODE, response);
1778c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1779c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(1);
1780c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(bandMode);
1781c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1782c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
1783c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                 + " " + bandMode);
1784c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1785c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
1786c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     }
1787c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1788c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    /**
1789c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     * Query the list of band mode supported by RF.
1790c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     *
1791c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     * @param response is callback message
1792c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     *        ((AsyncResult)response.obj).result  is an int[] with every
1793c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     *        element representing one avialable BM_*_BAND
1794c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     */
1795c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void queryAvailableBandMode (Message response) {
1796c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr
1797c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                = RILRequest.obtain(RIL_REQUEST_QUERY_AVAILABLE_BAND_MODE,
1798c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                response);
1799c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1800c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
1801c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1802c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
1803c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
1804c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1805c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    /**
1806c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     * {@inheritDoc}
1807c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     */
1808c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void sendTerminalResponse(String contents, Message response) {
1809c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr = RILRequest.obtain(
1810c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                RILConstants.RIL_REQUEST_STK_SEND_TERMINAL_RESPONSE, response);
1811c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1812c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
1813c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1814c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeString(contents);
1815c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
1816c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
1817c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1818c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    /**
1819c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     * {@inheritDoc}
1820c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     */
1821c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void sendEnvelope(String contents, Message response) {
1822c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr = RILRequest.obtain(
1823c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                RILConstants.RIL_REQUEST_STK_SEND_ENVELOPE_COMMAND, response);
1824c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1825c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
1826c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1827c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeString(contents);
1828c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
1829c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
1830c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1831c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    /**
1832c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     * {@inheritDoc}
1833c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     */
1834c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void sendEnvelopeWithStatus(String contents, Message response) {
1835c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr = RILRequest.obtain(
1836c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                RILConstants.RIL_REQUEST_STK_SEND_ENVELOPE_WITH_STATUS, response);
1837c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1838c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
1839c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                + '[' + contents + ']');
1840c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1841c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeString(contents);
1842c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
1843c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
1844c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1845c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    /**
1846c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     * {@inheritDoc}
1847c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     */
1848c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void handleCallSetupRequestFromSim(
1849c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            boolean accept, Message response) {
1850c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1851c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr = RILRequest.obtain(
1852c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            RILConstants.RIL_REQUEST_STK_HANDLE_CALL_SETUP_REQUESTED_FROM_SIM,
1853c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            response);
1854c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1855c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
1856c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1857c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        int[] param = new int[1];
1858c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        param[0] = accept ? 1 : 0;
1859c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeIntArray(param);
1860c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
1861c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
1862c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1863c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    /**
1864c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     * {@inheritDoc}
1865c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     */
1866c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    @Override
1867c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void setCurrentPreferredNetworkType() {
1868c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog("setCurrentPreferredNetworkType: " + mSetPreferredNetworkType);
1869c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        setPreferredNetworkType(mSetPreferredNetworkType, null);
1870c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
1871c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private int mSetPreferredNetworkType;
1872c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1873c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    /**
1874c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     * {@inheritDoc}
1875c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     */
1876c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void setPreferredNetworkType(int networkType , Message response) {
1877c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr = RILRequest.obtain(
1878c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                RILConstants.RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE, response);
1879c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1880c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(1);
1881c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(networkType);
1882c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1883c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        mSetPreferredNetworkType = networkType;
1884c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        mPreferredNetworkType = networkType;
1885c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1886c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
1887c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                + " : " + networkType);
1888c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1889c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
1890c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
1891c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1892c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    /**
1893c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     * {@inheritDoc}
1894c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     */
1895c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void getPreferredNetworkType(Message response) {
1896c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr = RILRequest.obtain(
1897c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                RILConstants.RIL_REQUEST_GET_PREFERRED_NETWORK_TYPE, response);
1898c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1899c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
1900c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1901c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
1902c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
1903c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1904c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    /**
1905c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     * {@inheritDoc}
1906c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     */
1907c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void getNeighboringCids(Message response) {
1908c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr = RILRequest.obtain(
1909c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                RILConstants.RIL_REQUEST_GET_NEIGHBORING_CELL_IDS, response);
1910c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1911c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
1912c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1913c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
1914c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
1915c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1916c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    /**
1917c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     * {@inheritDoc}
1918c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     */
1919c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void setLocationUpdates(boolean enable, Message response) {
1920c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_SET_LOCATION_UPDATES, response);
1921c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(1);
1922c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(enable ? 1 : 0);
1923c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1924c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> "
1925c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                + requestToString(rr.mRequest) + ": " + enable);
1926c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1927c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
1928c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
1929c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1930c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    /**
1931c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     * {@inheritDoc}
1932c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     */
1933c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void getSmscAddress(Message result) {
1934c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_GET_SMSC_ADDRESS, result);
1935c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1936c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
1937c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1938c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
1939c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
1940c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1941c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    /**
1942c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     * {@inheritDoc}
1943c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     */
1944c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void setSmscAddress(String address, Message result) {
1945c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_SET_SMSC_ADDRESS, result);
1946c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1947c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeString(address);
1948c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1949c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
1950c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                + " : " + address);
1951c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1952c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
1953c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
1954c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1955c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    /**
1956c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     * {@inheritDoc}
1957c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     */
1958c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void reportSmsMemoryStatus(boolean available, Message result) {
1959c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_REPORT_SMS_MEMORY_STATUS, result);
1960c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(1);
1961c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(available ? 1 : 0);
1962c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1963c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> "
1964c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                + requestToString(rr.mRequest) + ": " + available);
1965c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1966c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
1967c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
1968c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1969c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    /**
1970c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     * {@inheritDoc}
1971c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     */
1972c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void reportStkServiceIsRunning(Message result) {
1973c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_REPORT_STK_SERVICE_IS_RUNNING, result);
1974c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1975c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
1976c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1977c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
1978c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
1979c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1980c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    /**
1981c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     * {@inheritDoc}
1982c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     */
1983c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void getGsmBroadcastConfig(Message response) {
1984c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_GSM_GET_BROADCAST_CONFIG, response);
1985c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1986c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
1987c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1988c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
1989c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
1990c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1991c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    /**
1992c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     * {@inheritDoc}
1993c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     */
1994c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void setGsmBroadcastConfig(SmsBroadcastConfigInfo[] config, Message response) {
1995c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_GSM_SET_BROADCAST_CONFIG, response);
1996c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1997c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        int numOfConfig = config.length;
1998c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(numOfConfig);
1999c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2000c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        for(int i = 0; i < numOfConfig; i++) {
2001c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            rr.mp.writeInt(config[i].getFromServiceId());
2002c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            rr.mp.writeInt(config[i].getToServiceId());
2003c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            rr.mp.writeInt(config[i].getFromCodeScheme());
2004c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            rr.mp.writeInt(config[i].getToCodeScheme());
2005c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            rr.mp.writeInt(config[i].isSelected() ? 1 : 0);
2006c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
2007c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2008c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) {
2009c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
2010c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    + " with " + numOfConfig + " configs : ");
2011c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            for (int i = 0; i < numOfConfig; i++) {
2012c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                riljLog(config[i].toString());
2013c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            }
2014c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
2015c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2016c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
2017c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
2018c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2019c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    /**
2020c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     * {@inheritDoc}
2021c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     */
2022c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void setGsmBroadcastActivation(boolean activate, Message response) {
2023c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_GSM_BROADCAST_ACTIVATION, response);
2024c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2025c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(1);
2026c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(activate ? 0 : 1);
2027c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2028c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
2029c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2030c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
2031c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
2032c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2033c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    //***** Private Methods
2034c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2035c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private void sendScreenState(boolean on) {
2036c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_SCREEN_STATE, null);
2037c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(1);
2038c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(on ? 1 : 0);
2039c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2040c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString()
2041c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                + "> " + requestToString(rr.mRequest) + ": " + on);
2042c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2043c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
2044c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
2045c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2046c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    protected void
2047c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    onRadioAvailable() {
2048c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        // In case screen state was lost (due to process crash),
2049c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        // this ensures that the RIL knows the correct screen state.
2050c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2051c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        // TODO: Should query Power Manager and send the actual
2052c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        // screen state.  Just send true for now.
2053c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        sendScreenState(true);
2054c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville   }
2055c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2056c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private RadioState getRadioStateFromInt(int stateInt) {
2057c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RadioState state;
2058c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2059c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        /* RIL_RadioState ril.h */
2060c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        switch(stateInt) {
2061c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case 0: state = RadioState.RADIO_OFF; break;
2062c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case 1: state = RadioState.RADIO_UNAVAILABLE; break;
2063c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case 10: state = RadioState.RADIO_ON; break;
2064c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2065c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            default:
2066c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                throw new RuntimeException(
2067c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                            "Unrecognized RIL_RadioState: " + stateInt);
2068c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
2069c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        return state;
2070c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
2071c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2072c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private void switchToRadioState(RadioState newState) {
2073c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        setRadioState(newState);
2074c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
2075c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2076c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    /**
2077c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     * Holds a PARTIAL_WAKE_LOCK whenever
2078c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     * a) There is outstanding RIL request sent to RIL deamon and no replied
2079c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     * b) There is a request pending to be sent out.
2080c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     *
2081c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     * There is a WAKE_LOCK_TIMEOUT to release the lock, though it shouldn't
2082c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     * happen often.
2083c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     */
2084c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2085c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private void
2086c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    acquireWakeLock() {
2087c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        synchronized (mWakeLock) {
2088c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            mWakeLock.acquire();
2089c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            mRequestMessagesPending++;
2090c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2091c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            mSender.removeMessages(EVENT_WAKE_LOCK_TIMEOUT);
2092c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            Message msg = mSender.obtainMessage(EVENT_WAKE_LOCK_TIMEOUT);
2093c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            mSender.sendMessageDelayed(msg, mWakeLockTimeout);
2094c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
2095c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
2096c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2097c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private void
2098c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    releaseWakeLockIfDone() {
2099c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        synchronized (mWakeLock) {
2100c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            if (mWakeLock.isHeld() &&
2101c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                (mRequestMessagesPending == 0) &&
2102c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                (mRequestMessagesWaiting == 0)) {
2103c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                mSender.removeMessages(EVENT_WAKE_LOCK_TIMEOUT);
2104c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                mWakeLock.release();
2105c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            }
2106c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
2107c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
2108c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2109c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private void
2110c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    send(RILRequest rr) {
2111c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        Message msg;
2112c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2113c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (mSocket == null) {
2114c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            rr.onError(RADIO_NOT_AVAILABLE, null);
2115c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            rr.release();
2116c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            return;
2117c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
2118c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2119c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        msg = mSender.obtainMessage(EVENT_SEND, rr);
2120c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2121c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        acquireWakeLock();
2122c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2123c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        msg.sendToTarget();
2124c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
2125c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2126c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private void
2127c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    processResponse (Parcel p) {
2128c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        int type;
2129c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2130c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        type = p.readInt();
2131c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2132c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (type == RESPONSE_UNSOLICITED) {
2133c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            processUnsolicited (p);
2134c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        } else if (type == RESPONSE_SOLICITED) {
2135c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            processSolicited (p);
2136c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
2137c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2138c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        releaseWakeLockIfDone();
2139c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
2140c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2141c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    /**
2142c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     * Release each request in mReqeustsList then clear the list
2143c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     * @param error is the RIL_Errno sent back
2144c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     * @param loggable true means to print all requests in mRequestslist
2145c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     */
2146c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private void clearRequestsList(int error, boolean loggable) {
2147c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr;
2148c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        synchronized (mRequestsList) {
2149c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            int count = mRequestsList.size();
2150c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            if (RILJ_LOGD && loggable) {
2151c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                Log.d(LOG_TAG, "WAKE_LOCK_TIMEOUT " +
2152c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        " mReqPending=" + mRequestMessagesPending +
2153c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        " mRequestList=" + count);
2154c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            }
2155c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2156c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            for (int i = 0; i < count ; i++) {
2157c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                rr = mRequestsList.get(i);
2158c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (RILJ_LOGD && loggable) {
2159c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    Log.d(LOG_TAG, i + ": [" + rr.mSerial + "] " +
2160c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                            requestToString(rr.mRequest));
2161c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                }
2162c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                rr.onError(error, null);
2163c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                rr.release();
2164c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            }
2165c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            mRequestsList.clear();
2166c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            mRequestMessagesWaiting = 0;
2167c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
2168c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
2169c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2170c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private RILRequest findAndRemoveRequestFromList(int serial) {
2171c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        synchronized (mRequestsList) {
2172c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            for (int i = 0, s = mRequestsList.size() ; i < s ; i++) {
2173c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                RILRequest rr = mRequestsList.get(i);
2174c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2175c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (rr.mSerial == serial) {
2176c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    mRequestsList.remove(i);
2177c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    if (mRequestMessagesWaiting > 0)
2178c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        mRequestMessagesWaiting--;
2179c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    return rr;
2180c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                }
2181c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            }
2182c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
2183c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2184c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        return null;
2185c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
2186c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2187c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private void
2188c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    processSolicited (Parcel p) {
2189c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        int serial, error;
2190c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        boolean found = false;
2191c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2192c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        serial = p.readInt();
2193c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        error = p.readInt();
2194c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2195c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr;
2196c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2197c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr = findAndRemoveRequestFromList(serial);
2198c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2199c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (rr == null) {
2200c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            Log.w(LOG_TAG, "Unexpected solicited response! sn: "
2201c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                            + serial + " error: " + error);
2202c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            return;
2203c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
2204c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2205c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        Object ret = null;
2206c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2207c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (error == 0 || p.dataAvail() > 0) {
2208c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            // either command succeeds or command fails but with data payload
2209c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            try {switch (rr.mRequest) {
2210c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            /*
2211c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville cat libs/telephony/ril_commands.h \
2212c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville | egrep "^ *{RIL_" \
2213c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville | sed -re 's/\{([^,]+),[^,]+,([^}]+).+/case \1: ret = \2(p); break;/'
2214c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville             */
2215c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_GET_SIM_STATUS: ret =  responseIccCardStatus(p); break;
2216c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_ENTER_SIM_PIN: ret =  responseInts(p); break;
2217c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_ENTER_SIM_PUK: ret =  responseInts(p); break;
2218c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_ENTER_SIM_PIN2: ret =  responseInts(p); break;
2219c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_ENTER_SIM_PUK2: ret =  responseInts(p); break;
2220c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_CHANGE_SIM_PIN: ret =  responseInts(p); break;
2221c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_CHANGE_SIM_PIN2: ret =  responseInts(p); break;
2222c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_ENTER_NETWORK_DEPERSONALIZATION: ret =  responseInts(p); break;
2223c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_GET_CURRENT_CALLS: ret =  responseCallList(p); break;
2224c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_DIAL: ret =  responseVoid(p); break;
2225c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_GET_IMSI: ret =  responseString(p); break;
2226c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_HANGUP: ret =  responseVoid(p); break;
2227c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_HANGUP_WAITING_OR_BACKGROUND: ret =  responseVoid(p); break;
2228c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_HANGUP_FOREGROUND_RESUME_BACKGROUND: {
2229c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (mTestingEmergencyCall.getAndSet(false)) {
2230c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    if (mEmergencyCallbackModeRegistrant != null) {
2231c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        riljLog("testing emergency call, notify ECM Registrants");
2232c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        mEmergencyCallbackModeRegistrant.notifyRegistrant();
2233c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    }
2234c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                }
2235c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                ret =  responseVoid(p);
2236c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                break;
2237c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            }
2238c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_SWITCH_WAITING_OR_HOLDING_AND_ACTIVE: ret =  responseVoid(p); break;
2239c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_CONFERENCE: ret =  responseVoid(p); break;
2240c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_UDUB: ret =  responseVoid(p); break;
2241c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_LAST_CALL_FAIL_CAUSE: ret =  responseInts(p); break;
2242c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_SIGNAL_STRENGTH: ret =  responseSignalStrength(p); break;
2243c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_VOICE_REGISTRATION_STATE: ret =  responseStrings(p); break;
2244c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_DATA_REGISTRATION_STATE: ret =  responseStrings(p); break;
2245c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_OPERATOR: ret =  responseStrings(p); break;
2246c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_RADIO_POWER: ret =  responseVoid(p); break;
2247c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_DTMF: ret =  responseVoid(p); break;
2248c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_SEND_SMS: ret =  responseSMS(p); break;
2249c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_SEND_SMS_EXPECT_MORE: ret =  responseSMS(p); break;
2250c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_SETUP_DATA_CALL: ret =  responseSetupDataCall(p); break;
2251c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_SIM_IO: ret =  responseICC_IO(p); break;
2252c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_SEND_USSD: ret =  responseVoid(p); break;
2253c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_CANCEL_USSD: ret =  responseVoid(p); break;
2254c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_GET_CLIR: ret =  responseInts(p); break;
2255c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_SET_CLIR: ret =  responseVoid(p); break;
2256c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_QUERY_CALL_FORWARD_STATUS: ret =  responseCallForward(p); break;
2257c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_SET_CALL_FORWARD: ret =  responseVoid(p); break;
2258c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_QUERY_CALL_WAITING: ret =  responseInts(p); break;
2259c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_SET_CALL_WAITING: ret =  responseVoid(p); break;
2260c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_SMS_ACKNOWLEDGE: ret =  responseVoid(p); break;
2261c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_GET_IMEI: ret =  responseString(p); break;
2262c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_GET_IMEISV: ret =  responseString(p); break;
2263c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_ANSWER: ret =  responseVoid(p); break;
2264c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_DEACTIVATE_DATA_CALL: ret =  responseVoid(p); break;
2265c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_QUERY_FACILITY_LOCK: ret =  responseInts(p); break;
2266c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_SET_FACILITY_LOCK: ret =  responseInts(p); break;
2267c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_CHANGE_BARRING_PASSWORD: ret =  responseVoid(p); break;
2268c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_QUERY_NETWORK_SELECTION_MODE: ret =  responseInts(p); break;
2269c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_SET_NETWORK_SELECTION_AUTOMATIC: ret =  responseVoid(p); break;
2270c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_SET_NETWORK_SELECTION_MANUAL: ret =  responseVoid(p); break;
2271c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_QUERY_AVAILABLE_NETWORKS : ret =  responseOperatorInfos(p); break;
2272c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_DTMF_START: ret =  responseVoid(p); break;
2273c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_DTMF_STOP: ret =  responseVoid(p); break;
2274c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_BASEBAND_VERSION: ret =  responseString(p); break;
2275c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_SEPARATE_CONNECTION: ret =  responseVoid(p); break;
2276c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_SET_MUTE: ret =  responseVoid(p); break;
2277c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_GET_MUTE: ret =  responseInts(p); break;
2278c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_QUERY_CLIP: ret =  responseInts(p); break;
2279c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_LAST_DATA_CALL_FAIL_CAUSE: ret =  responseInts(p); break;
2280c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_DATA_CALL_LIST: ret =  responseDataCallList(p); break;
2281c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_RESET_RADIO: ret =  responseVoid(p); break;
2282c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_OEM_HOOK_RAW: ret =  responseRaw(p); break;
2283c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_OEM_HOOK_STRINGS: ret =  responseStrings(p); break;
2284c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_SCREEN_STATE: ret =  responseVoid(p); break;
2285c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_SET_SUPP_SVC_NOTIFICATION: ret =  responseVoid(p); break;
2286c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_WRITE_SMS_TO_SIM: ret =  responseInts(p); break;
2287c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_DELETE_SMS_ON_SIM: ret =  responseVoid(p); break;
2288c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_SET_BAND_MODE: ret =  responseVoid(p); break;
2289c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_QUERY_AVAILABLE_BAND_MODE: ret =  responseInts(p); break;
2290c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_STK_GET_PROFILE: ret =  responseString(p); break;
2291c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_STK_SET_PROFILE: ret =  responseVoid(p); break;
2292c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_STK_SEND_ENVELOPE_COMMAND: ret =  responseString(p); break;
2293c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_STK_SEND_TERMINAL_RESPONSE: ret =  responseVoid(p); break;
2294c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_STK_HANDLE_CALL_SETUP_REQUESTED_FROM_SIM: ret =  responseInts(p); break;
2295c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_EXPLICIT_CALL_TRANSFER: ret =  responseVoid(p); break;
2296c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE: ret =  responseVoid(p); break;
2297c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_GET_PREFERRED_NETWORK_TYPE: ret =  responseGetPreferredNetworkType(p); break;
2298c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_GET_NEIGHBORING_CELL_IDS: ret = responseCellList(p); break;
2299c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_SET_LOCATION_UPDATES: ret =  responseVoid(p); break;
2300c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_CDMA_SET_SUBSCRIPTION_SOURCE: ret =  responseVoid(p); break;
2301c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_CDMA_SET_ROAMING_PREFERENCE: ret =  responseVoid(p); break;
2302c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_CDMA_QUERY_ROAMING_PREFERENCE: ret =  responseInts(p); break;
2303c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_SET_TTY_MODE: ret =  responseVoid(p); break;
2304c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_QUERY_TTY_MODE: ret =  responseInts(p); break;
2305c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_CDMA_SET_PREFERRED_VOICE_PRIVACY_MODE: ret =  responseVoid(p); break;
2306c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_CDMA_QUERY_PREFERRED_VOICE_PRIVACY_MODE: ret =  responseInts(p); break;
2307c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_CDMA_FLASH: ret =  responseVoid(p); break;
2308c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_CDMA_BURST_DTMF: ret =  responseVoid(p); break;
2309c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_CDMA_SEND_SMS: ret =  responseSMS(p); break;
2310c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_CDMA_SMS_ACKNOWLEDGE: ret =  responseVoid(p); break;
2311c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_GSM_GET_BROADCAST_CONFIG: ret =  responseGmsBroadcastConfig(p); break;
2312c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_GSM_SET_BROADCAST_CONFIG: ret =  responseVoid(p); break;
2313c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_GSM_BROADCAST_ACTIVATION: ret =  responseVoid(p); break;
2314c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_CDMA_GET_BROADCAST_CONFIG: ret =  responseCdmaBroadcastConfig(p); break;
2315c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_CDMA_SET_BROADCAST_CONFIG: ret =  responseVoid(p); break;
2316c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_CDMA_BROADCAST_ACTIVATION: ret =  responseVoid(p); break;
2317c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_CDMA_VALIDATE_AND_WRITE_AKEY: ret =  responseVoid(p); break;
2318c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_CDMA_SUBSCRIPTION: ret =  responseStrings(p); break;
2319c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_CDMA_WRITE_SMS_TO_RUIM: ret =  responseInts(p); break;
2320c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_CDMA_DELETE_SMS_ON_RUIM: ret =  responseVoid(p); break;
2321c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_DEVICE_IDENTITY: ret =  responseStrings(p); break;
2322c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_GET_SMSC_ADDRESS: ret = responseString(p); break;
2323c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_SET_SMSC_ADDRESS: ret = responseVoid(p); break;
2324c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_EXIT_EMERGENCY_CALLBACK_MODE: ret = responseVoid(p); break;
2325c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_REPORT_SMS_MEMORY_STATUS: ret = responseVoid(p); break;
2326c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_REPORT_STK_SERVICE_IS_RUNNING: ret = responseVoid(p); break;
2327c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_CDMA_GET_SUBSCRIPTION_SOURCE: ret =  responseInts(p); break;
2328c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_ISIM_AUTHENTICATION: ret =  responseString(p); break;
2329c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_ACKNOWLEDGE_INCOMING_GSM_SMS_WITH_PDU: ret = responseVoid(p); break;
2330c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_STK_SEND_ENVELOPE_WITH_STATUS: ret = responseICC_IO(p); break;
2331c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_VOICE_RADIO_TECH: ret = responseInts(p); break;
2332c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            default:
2333c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                throw new RuntimeException("Unrecognized solicited response: " + rr.mRequest);
2334c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            //break;
2335c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            }} catch (Throwable tr) {
2336c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                // Exceptions here usually mean invalid RIL responses
2337c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2338c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                Log.w(LOG_TAG, rr.serialString() + "< "
2339c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        + requestToString(rr.mRequest)
2340c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        + " exception, possible invalid RIL response", tr);
2341c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2342c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (rr.mResult != null) {
2343c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    AsyncResult.forMessage(rr.mResult, null, tr);
2344c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    rr.mResult.sendToTarget();
2345c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                }
2346c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                rr.release();
2347c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                return;
2348c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            }
2349c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
2350c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2351c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (error != 0) {
2352c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            rr.onError(error, ret);
2353c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            rr.release();
2354c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            return;
2355c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
2356c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2357c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "< " + requestToString(rr.mRequest)
2358c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            + " " + retToString(rr.mRequest, ret));
2359c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2360c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (rr.mResult != null) {
2361c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            AsyncResult.forMessage(rr.mResult, ret, null);
2362c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            rr.mResult.sendToTarget();
2363c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
2364c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2365c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.release();
2366c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
2367c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2368c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private String
2369c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    retToString(int req, Object ret) {
2370c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (ret == null) return "";
2371c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        switch (req) {
2372c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            // Don't log these return values, for privacy's sake.
2373c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_GET_IMSI:
2374c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_GET_IMEI:
2375c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_GET_IMEISV:
2376c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (!RILJ_LOGV) {
2377c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    // If not versbose logging just return and don't display IMSI and IMEI, IMEISV
2378c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    return "";
2379c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                }
2380c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
2381c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2382c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        StringBuilder sb;
2383c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        String s;
2384c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        int length;
2385c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (ret instanceof int[]){
2386c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            int[] intArray = (int[]) ret;
2387c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            length = intArray.length;
2388c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            sb = new StringBuilder("{");
2389c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            if (length > 0) {
2390c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                int i = 0;
2391c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                sb.append(intArray[i++]);
2392c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                while ( i < length) {
2393c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    sb.append(", ").append(intArray[i++]);
2394c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                }
2395c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            }
2396c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            sb.append("}");
2397c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            s = sb.toString();
2398c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        } else if (ret instanceof String[]) {
2399c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            String[] strings = (String[]) ret;
2400c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            length = strings.length;
2401c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            sb = new StringBuilder("{");
2402c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            if (length > 0) {
2403c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                int i = 0;
2404c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                sb.append(strings[i++]);
2405c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                while ( i < length) {
2406c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    sb.append(", ").append(strings[i++]);
2407c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                }
2408c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            }
2409c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            sb.append("}");
2410c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            s = sb.toString();
2411c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }else if (req == RIL_REQUEST_GET_CURRENT_CALLS) {
2412c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            ArrayList<DriverCall> calls = (ArrayList<DriverCall>) ret;
2413c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            sb = new StringBuilder(" ");
2414c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            for (DriverCall dc : calls) {
2415c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                sb.append("[").append(dc).append("] ");
2416c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            }
2417c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            s = sb.toString();
2418c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        } else if (req == RIL_REQUEST_GET_NEIGHBORING_CELL_IDS) {
2419c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            ArrayList<NeighboringCellInfo> cells;
2420c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            cells = (ArrayList<NeighboringCellInfo>) ret;
2421c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            sb = new StringBuilder(" ");
2422c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            for (NeighboringCellInfo cell : cells) {
2423c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                sb.append(cell).append(" ");
2424c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            }
2425c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            s = sb.toString();
2426c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        } else {
2427c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            s = ret.toString();
2428c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
2429c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        return s;
2430c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
2431c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2432c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private void
2433c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    processUnsolicited (Parcel p) {
2434c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        int response;
2435c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        Object ret;
2436c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2437c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        response = p.readInt();
2438c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2439c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        try {switch(response) {
2440c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville/*
2441c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville cat libs/telephony/ril_unsol_commands.h \
2442c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville | egrep "^ *{RIL_" \
2443c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville | sed -re 's/\{([^,]+),[^,]+,([^}]+).+/case \1: \2(rr, p); break;/'
2444c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville*/
2445c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2446c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_RESPONSE_RADIO_STATE_CHANGED: ret =  responseVoid(p); break;
2447c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED: ret =  responseVoid(p); break;
2448c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED: ret =  responseVoid(p); break;
2449c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_RESPONSE_NEW_SMS: ret =  responseString(p); break;
2450c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_RESPONSE_NEW_SMS_STATUS_REPORT: ret =  responseString(p); break;
2451c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_RESPONSE_NEW_SMS_ON_SIM: ret =  responseInts(p); break;
2452c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_ON_USSD: ret =  responseStrings(p); break;
2453c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_NITZ_TIME_RECEIVED: ret =  responseString(p); break;
2454c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_SIGNAL_STRENGTH: ret = responseSignalStrength(p); break;
2455c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_DATA_CALL_LIST_CHANGED: ret = responseDataCallList(p);break;
2456c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_SUPP_SVC_NOTIFICATION: ret = responseSuppServiceNotification(p); break;
2457c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_STK_SESSION_END: ret = responseVoid(p); break;
2458c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_STK_PROACTIVE_COMMAND: ret = responseString(p); break;
2459c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_STK_EVENT_NOTIFY: ret = responseString(p); break;
2460c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_STK_CALL_SETUP: ret = responseInts(p); break;
2461c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_SIM_SMS_STORAGE_FULL: ret =  responseVoid(p); break;
2462c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_SIM_REFRESH: ret =  responseSimRefresh(p); break;
2463c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_CALL_RING: ret =  responseCallRing(p); break;
2464c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_RESTRICTED_STATE_CHANGED: ret = responseInts(p); break;
2465c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_RESPONSE_SIM_STATUS_CHANGED:  ret =  responseVoid(p); break;
2466c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_RESPONSE_CDMA_NEW_SMS:  ret =  responseCdmaSms(p); break;
2467c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_RESPONSE_NEW_BROADCAST_SMS:  ret =  responseRaw(p); break;
2468c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_CDMA_RUIM_SMS_STORAGE_FULL:  ret =  responseVoid(p); break;
2469c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_ENTER_EMERGENCY_CALLBACK_MODE: ret = responseVoid(p); break;
2470c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_CDMA_CALL_WAITING: ret = responseCdmaCallWaiting(p); break;
2471c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_CDMA_OTA_PROVISION_STATUS: ret = responseInts(p); break;
2472c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_CDMA_INFO_REC: ret = responseCdmaInformationRecord(p); break;
2473c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_OEM_HOOK_RAW: ret = responseRaw(p); break;
2474c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_RINGBACK_TONE: ret = responseInts(p); break;
2475c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_RESEND_INCALL_MUTE: ret = responseVoid(p); break;
2476c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_CDMA_SUBSCRIPTION_SOURCE_CHANGED: ret = responseInts(p); break;
2477c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOl_CDMA_PRL_CHANGED: ret = responseInts(p); break;
2478c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_EXIT_EMERGENCY_CALLBACK_MODE: ret = responseVoid(p); break;
2479c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_RIL_CONNECTED: ret = responseInts(p); break;
2480c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_VOICE_RADIO_TECH_CHANGED: ret =  responseInts(p); break;
2481c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2482c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            default:
2483c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                throw new RuntimeException("Unrecognized unsol response: " + response);
2484c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            //break; (implied)
2485c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }} catch (Throwable tr) {
2486c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            Log.e(LOG_TAG, "Exception processing unsol response: " + response +
2487c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                "Exception:" + tr.toString());
2488c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            return;
2489c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
2490c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2491c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        switch(response) {
2492c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_RESPONSE_RADIO_STATE_CHANGED:
2493c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                /* has bonus radio state int */
2494c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                RadioState newState = getRadioStateFromInt(p.readInt());
2495c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (RILJ_LOGD) unsljLogMore(response, newState.toString());
2496c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2497c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                switchToRadioState(newState);
2498c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            break;
2499c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED:
2500c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (RILJ_LOGD) unsljLog(response);
2501c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2502c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                mCallStateRegistrants
2503c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    .notifyRegistrants(new AsyncResult(null, null, null));
2504c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            break;
2505c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED:
2506c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (RILJ_LOGD) unsljLog(response);
2507c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2508c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                mVoiceNetworkStateRegistrants
2509c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    .notifyRegistrants(new AsyncResult(null, null, null));
2510c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            break;
2511c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_RESPONSE_NEW_SMS: {
2512c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (RILJ_LOGD) unsljLog(response);
2513c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2514c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                // FIXME this should move up a layer
2515c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                String a[] = new String[2];
2516c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2517c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                a[1] = (String)ret;
2518c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2519c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                SmsMessage sms;
2520c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2521c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                sms = SmsMessage.newFromCMT(a);
2522c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (mGsmSmsRegistrant != null) {
2523c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    mGsmSmsRegistrant
2524c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        .notifyRegistrant(new AsyncResult(null, sms, null));
2525c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                }
2526c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            break;
2527c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            }
2528c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_RESPONSE_NEW_SMS_STATUS_REPORT:
2529c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
2530c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2531c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (mSmsStatusRegistrant != null) {
2532c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    mSmsStatusRegistrant.notifyRegistrant(
2533c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                            new AsyncResult(null, ret, null));
2534c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                }
2535c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            break;
2536c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_RESPONSE_NEW_SMS_ON_SIM:
2537c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
2538c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2539c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                int[] smsIndex = (int[])ret;
2540c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2541c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if(smsIndex.length == 1) {
2542c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    if (mSmsOnSimRegistrant != null) {
2543c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        mSmsOnSimRegistrant.
2544c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                                notifyRegistrant(new AsyncResult(null, smsIndex, null));
2545c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    }
2546c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                } else {
2547c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    if (RILJ_LOGD) riljLog(" NEW_SMS_ON_SIM ERROR with wrong length "
2548c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                            + smsIndex.length);
2549c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                }
2550c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            break;
2551c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_ON_USSD:
2552c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                String[] resp = (String[])ret;
2553c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2554c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (resp.length < 2) {
2555c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    resp = new String[2];
2556c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    resp[0] = ((String[])ret)[0];
2557c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    resp[1] = null;
2558c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                }
2559c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (RILJ_LOGD) unsljLogMore(response, resp[0]);
2560c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (mUSSDRegistrant != null) {
2561c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    mUSSDRegistrant.notifyRegistrant(
2562c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        new AsyncResult (null, resp, null));
2563c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                }
2564c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            break;
2565c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_NITZ_TIME_RECEIVED:
2566c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
2567c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2568c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                // has bonus long containing milliseconds since boot that the NITZ
2569c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                // time was received
2570c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                long nitzReceiveTime = p.readLong();
2571c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2572c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                Object[] result = new Object[2];
2573c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2574c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                result[0] = ret;
2575c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                result[1] = Long.valueOf(nitzReceiveTime);
2576c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2577c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                boolean ignoreNitz = SystemProperties.getBoolean(
2578c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        TelephonyProperties.PROPERTY_IGNORE_NITZ, false);
2579c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2580c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (ignoreNitz) {
2581c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    if (RILJ_LOGD) riljLog("ignoring UNSOL_NITZ_TIME_RECEIVED");
2582c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                } else {
2583c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    if (mNITZTimeRegistrant != null) {
2584c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2585c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        mNITZTimeRegistrant
2586c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                            .notifyRegistrant(new AsyncResult (null, result, null));
2587c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    } else {
2588c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        // in case NITZ time registrant isnt registered yet
2589c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        mLastNITZTimeInfo = result;
2590c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    }
2591c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                }
2592c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            break;
2593c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2594c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_SIGNAL_STRENGTH:
2595c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                // Note this is set to "verbose" because it happens
2596c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                // frequently
2597c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (RILJ_LOGV) unsljLogvRet(response, ret);
2598c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2599c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (mSignalStrengthRegistrant != null) {
2600c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    mSignalStrengthRegistrant.notifyRegistrant(
2601c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                                        new AsyncResult (null, ret, null));
2602c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                }
2603c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            break;
2604c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_DATA_CALL_LIST_CHANGED:
2605c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
2606c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2607c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                mDataNetworkStateRegistrants.notifyRegistrants(new AsyncResult(null, ret, null));
2608c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            break;
2609c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2610c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_SUPP_SVC_NOTIFICATION:
2611c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
2612c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2613c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (mSsnRegistrant != null) {
2614c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    mSsnRegistrant.notifyRegistrant(
2615c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                                        new AsyncResult (null, ret, null));
2616c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                }
2617c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                break;
2618c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2619c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_STK_SESSION_END:
2620c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (RILJ_LOGD) unsljLog(response);
2621c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2622c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (mCatSessionEndRegistrant != null) {
2623c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    mCatSessionEndRegistrant.notifyRegistrant(
2624c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                                        new AsyncResult (null, ret, null));
2625c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                }
2626c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                break;
2627c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2628c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_STK_PROACTIVE_COMMAND:
2629c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
2630c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2631c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (mCatProCmdRegistrant != null) {
2632c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    mCatProCmdRegistrant.notifyRegistrant(
2633c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                                        new AsyncResult (null, ret, null));
2634c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                }
2635c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                break;
2636c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2637c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_STK_EVENT_NOTIFY:
2638c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
2639c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2640c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (mCatEventRegistrant != null) {
2641c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    mCatEventRegistrant.notifyRegistrant(
2642c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                                        new AsyncResult (null, ret, null));
2643c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                }
2644c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                break;
2645c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2646c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_STK_CALL_SETUP:
2647c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
2648c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2649c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (mCatCallSetUpRegistrant != null) {
2650c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    mCatCallSetUpRegistrant.notifyRegistrant(
2651c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                                        new AsyncResult (null, ret, null));
2652c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                }
2653c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                break;
2654c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2655c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_SIM_SMS_STORAGE_FULL:
2656c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (RILJ_LOGD) unsljLog(response);
2657c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2658c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (mIccSmsFullRegistrant != null) {
2659c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    mIccSmsFullRegistrant.notifyRegistrant();
2660c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                }
2661c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                break;
2662c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2663c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_SIM_REFRESH:
2664c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
2665c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2666c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (mIccRefreshRegistrants != null) {
2667c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    mIccRefreshRegistrants.notifyRegistrants(
2668c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                            new AsyncResult (null, ret, null));
2669c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                }
2670c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                break;
2671c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2672c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_CALL_RING:
2673c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
2674c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2675c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (mRingRegistrant != null) {
2676c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    mRingRegistrant.notifyRegistrant(
2677c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                            new AsyncResult (null, ret, null));
2678c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                }
2679c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                break;
2680c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2681c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_RESTRICTED_STATE_CHANGED:
2682c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (RILJ_LOGD) unsljLogvRet(response, ret);
2683c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (mRestrictedStateRegistrant != null) {
2684c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    mRestrictedStateRegistrant.notifyRegistrant(
2685c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                                        new AsyncResult (null, ret, null));
2686c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                }
2687c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                break;
2688c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2689c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_RESPONSE_SIM_STATUS_CHANGED:
2690c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (RILJ_LOGD) unsljLog(response);
2691c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2692c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (mIccStatusChangedRegistrants != null) {
2693c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    mIccStatusChangedRegistrants.notifyRegistrants();
2694c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                }
2695c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                break;
2696c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2697c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_RESPONSE_CDMA_NEW_SMS:
2698c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (RILJ_LOGD) unsljLog(response);
2699c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2700c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                SmsMessage sms = (SmsMessage) ret;
2701c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2702c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (mCdmaSmsRegistrant != null) {
2703c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    mCdmaSmsRegistrant
2704c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        .notifyRegistrant(new AsyncResult(null, sms, null));
2705c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                }
2706c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                break;
2707c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2708c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_RESPONSE_NEW_BROADCAST_SMS:
2709c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (RILJ_LOGD) unsljLog(response);
2710c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2711c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (mGsmBroadcastSmsRegistrant != null) {
2712c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    mGsmBroadcastSmsRegistrant
2713c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        .notifyRegistrant(new AsyncResult(null, ret, null));
2714c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                }
2715c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                break;
2716c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2717c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_CDMA_RUIM_SMS_STORAGE_FULL:
2718c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (RILJ_LOGD) unsljLog(response);
2719c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2720c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (mIccSmsFullRegistrant != null) {
2721c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    mIccSmsFullRegistrant.notifyRegistrant();
2722c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                }
2723c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                break;
2724c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2725c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_ENTER_EMERGENCY_CALLBACK_MODE:
2726c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (RILJ_LOGD) unsljLog(response);
2727c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2728c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (mEmergencyCallbackModeRegistrant != null) {
2729c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    mEmergencyCallbackModeRegistrant.notifyRegistrant();
2730c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                }
2731c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                break;
2732c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2733c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_CDMA_CALL_WAITING:
2734c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
2735c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2736c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (mCallWaitingInfoRegistrants != null) {
2737c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    mCallWaitingInfoRegistrants.notifyRegistrants(
2738c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                                        new AsyncResult (null, ret, null));
2739c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                }
2740c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                break;
2741c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2742c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_CDMA_OTA_PROVISION_STATUS:
2743c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
2744c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2745c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (mOtaProvisionRegistrants != null) {
2746c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    mOtaProvisionRegistrants.notifyRegistrants(
2747c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                                        new AsyncResult (null, ret, null));
2748c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                }
2749c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                break;
2750c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2751c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_CDMA_INFO_REC:
2752c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                ArrayList<CdmaInformationRecords> listInfoRecs;
2753c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2754c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                try {
2755c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    listInfoRecs = (ArrayList<CdmaInformationRecords>)ret;
2756c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                } catch (ClassCastException e) {
2757c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    Log.e(LOG_TAG, "Unexpected exception casting to listInfoRecs", e);
2758c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    break;
2759c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                }
2760c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2761c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                for (CdmaInformationRecords rec : listInfoRecs) {
2762c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    if (RILJ_LOGD) unsljLogRet(response, rec);
2763c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    notifyRegistrantsCdmaInfoRec(rec);
2764c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                }
2765c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                break;
2766c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2767c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_OEM_HOOK_RAW:
2768c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (RILJ_LOGD) unsljLogvRet(response, IccUtils.bytesToHexString((byte[])ret));
2769c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (mUnsolOemHookRawRegistrant != null) {
2770c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    mUnsolOemHookRawRegistrant.notifyRegistrant(new AsyncResult(null, ret, null));
2771c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                }
2772c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                break;
2773c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2774c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_RINGBACK_TONE:
2775c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (RILJ_LOGD) unsljLogvRet(response, ret);
2776c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (mRingbackToneRegistrants != null) {
2777c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    boolean playtone = (((int[])ret)[0] == 1);
2778c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    mRingbackToneRegistrants.notifyRegistrants(
2779c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                                        new AsyncResult (null, playtone, null));
2780c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                }
2781c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                break;
2782c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2783c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_RESEND_INCALL_MUTE:
2784c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
2785c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2786c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (mResendIncallMuteRegistrants != null) {
2787c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    mResendIncallMuteRegistrants.notifyRegistrants(
2788c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                                        new AsyncResult (null, ret, null));
2789c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                }
2790c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                break;
2791c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2792c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_VOICE_RADIO_TECH_CHANGED:
2793c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
2794c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2795c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (mVoiceRadioTechChangedRegistrants != null) {
2796c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    mVoiceRadioTechChangedRegistrants.notifyRegistrants(
2797c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                            new AsyncResult(null, ret, null));
2798c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                }
2799c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                break;
2800c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2801c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_CDMA_SUBSCRIPTION_SOURCE_CHANGED:
2802c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
2803c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2804c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (mCdmaSubscriptionChangedRegistrants != null) {
2805c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    mCdmaSubscriptionChangedRegistrants.notifyRegistrants(
2806c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                                        new AsyncResult (null, ret, null));
2807c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                }
2808c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                break;
2809c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2810c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOl_CDMA_PRL_CHANGED:
2811c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
2812c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2813c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (mCdmaPrlChangedRegistrants != null) {
2814c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    mCdmaPrlChangedRegistrants.notifyRegistrants(
2815c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                                        new AsyncResult (null, ret, null));
2816c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                }
2817c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                break;
2818c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2819c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_EXIT_EMERGENCY_CALLBACK_MODE:
2820c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
2821c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2822c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (mExitEmergencyCallbackModeRegistrants != null) {
2823c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    mExitEmergencyCallbackModeRegistrants.notifyRegistrants(
2824c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                                        new AsyncResult (null, null, null));
2825c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                }
2826c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                break;
2827c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2828c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_RIL_CONNECTED: {
2829c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (RILJ_LOGD) unsljLogRet(response, ret);
2830c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2831c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                // Initial conditions
2832c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                setRadioPower(false, null);
2833c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                setPreferredNetworkType(mPreferredNetworkType, null);
2834c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                setCdmaSubscriptionSource(mCdmaSubscription, null);
2835c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                notifyRegistrantsRilConnectionChanged(((int[])ret)[0]);
2836c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                break;
2837c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            }
2838c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
2839c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
2840c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2841c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    /**
2842c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     * Notifiy all registrants that the ril has connected or disconnected.
2843c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     *
2844c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     * @param rilVer is the version of the ril or -1 if disconnected.
2845c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     */
2846c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private void notifyRegistrantsRilConnectionChanged(int rilVer) {
2847c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        mRilVersion = rilVer;
2848c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (mRilConnectedRegistrants != null) {
2849c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            mRilConnectedRegistrants.notifyRegistrants(
2850c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                                new AsyncResult (null, new Integer(rilVer), null));
2851c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
2852c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
2853c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2854c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private Object
2855c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    responseInts(Parcel p) {
2856c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        int numInts;
2857c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        int response[];
2858c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2859c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        numInts = p.readInt();
2860c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2861c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        response = new int[numInts];
2862c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2863c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        for (int i = 0 ; i < numInts ; i++) {
2864c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            response[i] = p.readInt();
2865c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
2866c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2867c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        return response;
2868c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
2869c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2870c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2871c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private Object
2872c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    responseVoid(Parcel p) {
2873c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        return null;
2874c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
2875c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2876c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private Object
2877c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    responseCallForward(Parcel p) {
2878c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        int numInfos;
2879c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        CallForwardInfo infos[];
2880c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2881c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        numInfos = p.readInt();
2882c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2883c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        infos = new CallForwardInfo[numInfos];
2884c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2885c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        for (int i = 0 ; i < numInfos ; i++) {
2886c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            infos[i] = new CallForwardInfo();
2887c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2888c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            infos[i].status = p.readInt();
2889c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            infos[i].reason = p.readInt();
2890c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            infos[i].serviceClass = p.readInt();
2891c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            infos[i].toa = p.readInt();
2892c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            infos[i].number = p.readString();
2893c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            infos[i].timeSeconds = p.readInt();
2894c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
2895c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2896c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        return infos;
2897c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
2898c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2899c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private Object
2900c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    responseSuppServiceNotification(Parcel p) {
2901c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        SuppServiceNotification notification = new SuppServiceNotification();
2902c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2903c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        notification.notificationType = p.readInt();
2904c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        notification.code = p.readInt();
2905c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        notification.index = p.readInt();
2906c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        notification.type = p.readInt();
2907c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        notification.number = p.readString();
2908c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2909c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        return notification;
2910c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
2911c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2912c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private Object
2913c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    responseCdmaSms(Parcel p) {
2914c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        SmsMessage sms;
2915c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        sms = SmsMessage.newFromParcel(p);
2916c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2917c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        return sms;
2918c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
2919c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2920c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private Object
2921c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    responseString(Parcel p) {
2922c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        String response;
2923c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2924c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        response = p.readString();
2925c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2926c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        return response;
2927c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
2928c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2929c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private Object
2930c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    responseStrings(Parcel p) {
2931c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        int num;
2932c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        String response[];
2933c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2934c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        response = p.readStringArray();
2935c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2936c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (false) {
2937c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            num = p.readInt();
2938c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2939c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            response = new String[num];
2940c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            for (int i = 0; i < num; i++) {
2941c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                response[i] = p.readString();
2942c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            }
2943c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
2944c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2945c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        return response;
2946c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
2947c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2948c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private Object
2949c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    responseRaw(Parcel p) {
2950c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        int num;
2951c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        byte response[];
2952c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2953c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        response = p.createByteArray();
2954c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2955c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        return response;
2956c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
2957c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2958c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private Object
2959c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    responseSMS(Parcel p) {
2960c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        int messageRef, errorCode;
2961c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        String ackPDU;
2962c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2963c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        messageRef = p.readInt();
2964c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        ackPDU = p.readString();
2965c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        errorCode = p.readInt();
2966c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2967c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        SmsResponse response = new SmsResponse(messageRef, ackPDU, errorCode);
2968c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2969c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        return response;
2970c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
2971c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2972c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2973c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private Object
2974c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    responseICC_IO(Parcel p) {
2975c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        int sw1, sw2;
2976c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        byte data[] = null;
2977c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        Message ret;
2978c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2979c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        sw1 = p.readInt();
2980c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        sw2 = p.readInt();
2981c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2982c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        String s = p.readString();
2983c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2984c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGV) riljLog("< iccIO: "
2985c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                + " 0x" + Integer.toHexString(sw1)
2986c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                + " 0x" + Integer.toHexString(sw2) + " "
2987c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                + s);
2988c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2989c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        return new IccIoResult(sw1, sw2, s);
2990c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
2991c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
2992c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private Object
2993c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    responseIccCardStatus(Parcel p) {
2994e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka        IccCardApplicationStatus appStatus;
2995e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka
2996e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka        IccCardStatus cardStatus = new IccCardStatus();
2997e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka        cardStatus.setCardState(p.readInt());
2998e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka        cardStatus.setUniversalPinState(p.readInt());
2999e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka        cardStatus.mGsmUmtsSubscriptionAppIndex = p.readInt();
3000e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka        cardStatus.mCdmaSubscriptionAppIndex = p.readInt();
3001e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka        cardStatus.mImsSubscriptionAppIndex = p.readInt();
3002c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        int numApplications = p.readInt();
3003c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3004c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        // limit to maximum allowed applications
3005c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (numApplications > IccCardStatus.CARD_MAX_APPS) {
3006c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            numApplications = IccCardStatus.CARD_MAX_APPS;
3007c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
3008e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka        cardStatus.mApplications = new IccCardApplicationStatus[numApplications];
3009c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        for (int i = 0 ; i < numApplications ; i++) {
3010e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka            appStatus = new IccCardApplicationStatus();
3011e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka            appStatus.app_type       = appStatus.AppTypeFromRILInt(p.readInt());
3012e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka            appStatus.app_state      = appStatus.AppStateFromRILInt(p.readInt());
3013e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka            appStatus.perso_substate = appStatus.PersoSubstateFromRILInt(p.readInt());
3014e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka            appStatus.aid            = p.readString();
3015e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka            appStatus.app_label      = p.readString();
3016e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka            appStatus.pin1_replaced  = p.readInt();
3017e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka            appStatus.pin1           = appStatus.PinStateFromRILInt(p.readInt());
3018e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka            appStatus.pin2           = appStatus.PinStateFromRILInt(p.readInt());
3019e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka            cardStatus.mApplications[i] = appStatus;
3020c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
3021e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka        return cardStatus;
3022c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
3023c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3024c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private Object
3025c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    responseSimRefresh(Parcel p) {
3026c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        IccRefreshResponse response = new IccRefreshResponse();
3027c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3028c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        response.refreshResult = p.readInt();
3029c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        response.efId   = p.readInt();
3030c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        response.aid = p.readString();
3031c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        return response;
3032c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
3033c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3034c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private Object
3035c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    responseCallList(Parcel p) {
3036c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        int num;
3037c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        int voiceSettings;
3038c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        ArrayList<DriverCall> response;
3039c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        DriverCall dc;
3040c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3041c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        num = p.readInt();
3042c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        response = new ArrayList<DriverCall>(num);
3043c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3044c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGV) {
3045c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            riljLog("responseCallList: num=" + num +
3046c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    " mEmergencyCallbackModeRegistrant=" + mEmergencyCallbackModeRegistrant +
3047c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    " mTestingEmergencyCall=" + mTestingEmergencyCall.get());
3048c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
3049c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        for (int i = 0 ; i < num ; i++) {
3050c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            dc = new DriverCall();
3051c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3052c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            dc.state = DriverCall.stateFromCLCC(p.readInt());
3053c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            dc.index = p.readInt();
3054c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            dc.TOA = p.readInt();
3055c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            dc.isMpty = (0 != p.readInt());
3056c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            dc.isMT = (0 != p.readInt());
3057c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            dc.als = p.readInt();
3058c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            voiceSettings = p.readInt();
3059c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            dc.isVoice = (0 == voiceSettings) ? false : true;
3060c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            dc.isVoicePrivacy = (0 != p.readInt());
3061c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            dc.number = p.readString();
3062c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            int np = p.readInt();
3063c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            dc.numberPresentation = DriverCall.presentationFromCLIP(np);
3064c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            dc.name = p.readString();
3065c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            dc.namePresentation = p.readInt();
3066c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            int uusInfoPresent = p.readInt();
3067c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            if (uusInfoPresent == 1) {
3068c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                dc.uusInfo = new UUSInfo();
3069c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                dc.uusInfo.setType(p.readInt());
3070c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                dc.uusInfo.setDcs(p.readInt());
3071c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                byte[] userData = p.createByteArray();
3072c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                dc.uusInfo.setUserData(userData);
3073c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                riljLogv(String.format("Incoming UUS : type=%d, dcs=%d, length=%d",
3074c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                                dc.uusInfo.getType(), dc.uusInfo.getDcs(),
3075c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                                dc.uusInfo.getUserData().length));
3076c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                riljLogv("Incoming UUS : data (string)="
3077c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        + new String(dc.uusInfo.getUserData()));
3078c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                riljLogv("Incoming UUS : data (hex): "
3079c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        + IccUtils.bytesToHexString(dc.uusInfo.getUserData()));
3080c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            } else {
3081c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                riljLogv("Incoming UUS : NOT present!");
3082c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            }
3083c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3084c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            // Make sure there's a leading + on addresses with a TOA of 145
3085c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            dc.number = PhoneNumberUtils.stringFromStringAndTOA(dc.number, dc.TOA);
3086c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3087c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            response.add(dc);
3088c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3089c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            if (dc.isVoicePrivacy) {
3090c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                mVoicePrivacyOnRegistrants.notifyRegistrants();
3091c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                riljLog("InCall VoicePrivacy is enabled");
3092c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            } else {
3093c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                mVoicePrivacyOffRegistrants.notifyRegistrants();
3094c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                riljLog("InCall VoicePrivacy is disabled");
3095c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            }
3096c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
3097c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3098c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        Collections.sort(response);
3099c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3100c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if ((num == 0) && mTestingEmergencyCall.getAndSet(false)) {
3101c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            if (mEmergencyCallbackModeRegistrant != null) {
3102c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                riljLog("responseCallList: call ended, testing emergency call," +
3103c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                            " notify ECM Registrants");
3104c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                mEmergencyCallbackModeRegistrant.notifyRegistrant();
3105c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            }
3106c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
3107c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3108c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        return response;
3109c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
3110c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3111c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private DataCallState getDataCallState(Parcel p, int version) {
3112c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        DataCallState dataCall = new DataCallState();
3113c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3114c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        dataCall.version = version;
3115c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (version < 5) {
3116c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            dataCall.cid = p.readInt();
3117c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            dataCall.active = p.readInt();
3118c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            dataCall.type = p.readString();
3119c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            String addresses = p.readString();
3120c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            if (!TextUtils.isEmpty(addresses)) {
3121c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                dataCall.addresses = addresses.split(" ");
3122c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            }
3123c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        } else {
3124c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            dataCall.status = p.readInt();
3125c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            dataCall.suggestedRetryTime = p.readInt();
3126c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            dataCall.cid = p.readInt();
3127c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            dataCall.active = p.readInt();
3128c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            dataCall.type = p.readString();
3129c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            dataCall.ifname = p.readString();
3130c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            if ((dataCall.status == DataConnection.FailCause.NONE.getErrorCode()) &&
3131c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    TextUtils.isEmpty(dataCall.ifname)) {
3132c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville              throw new RuntimeException("getDataCallState, no ifname");
3133c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            }
3134c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            String addresses = p.readString();
3135c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            if (!TextUtils.isEmpty(addresses)) {
3136c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                dataCall.addresses = addresses.split(" ");
3137c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            }
3138c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            String dnses = p.readString();
3139c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            if (!TextUtils.isEmpty(dnses)) {
3140c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                dataCall.dnses = dnses.split(" ");
3141c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            }
3142c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            String gateways = p.readString();
3143c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            if (!TextUtils.isEmpty(gateways)) {
3144c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                dataCall.gateways = gateways.split(" ");
3145c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            }
3146c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
3147c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        return dataCall;
3148c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
3149c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3150c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private Object
3151c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    responseDataCallList(Parcel p) {
3152c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        ArrayList<DataCallState> response;
3153c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3154c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        int ver = p.readInt();
3155c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        int num = p.readInt();
3156c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        riljLog("responseDataCallList ver=" + ver + " num=" + num);
3157c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3158c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        response = new ArrayList<DataCallState>(num);
3159c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        for (int i = 0; i < num; i++) {
3160c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            response.add(getDataCallState(p, ver));
3161c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
3162c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3163c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        return response;
3164c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
3165c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3166c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private Object
3167c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    responseSetupDataCall(Parcel p) {
3168c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        int ver = p.readInt();
3169c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        int num = p.readInt();
3170c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGV) riljLog("responseSetupDataCall ver=" + ver + " num=" + num);
3171c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3172c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        DataCallState dataCall;
3173c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3174c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (ver < 5) {
3175c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            dataCall = new DataCallState();
3176c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            dataCall.version = ver;
3177c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            dataCall.cid = Integer.parseInt(p.readString());
3178c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            dataCall.ifname = p.readString();
3179c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            if (TextUtils.isEmpty(dataCall.ifname)) {
3180c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                throw new RuntimeException(
3181c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        "RIL_REQUEST_SETUP_DATA_CALL response, no ifname");
3182c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            }
3183c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            String addresses = p.readString();
3184c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            if (!TextUtils.isEmpty(addresses)) {
3185c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville              dataCall.addresses = addresses.split(" ");
3186c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            }
3187c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            if (num >= 4) {
3188c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                String dnses = p.readString();
3189c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (RILJ_LOGD) riljLog("responseSetupDataCall got dnses=" + dnses);
3190c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (!TextUtils.isEmpty(dnses)) {
3191c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    dataCall.dnses = dnses.split(" ");
3192c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                }
3193c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            }
3194c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            if (num >= 5) {
3195c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                String gateways = p.readString();
3196c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (RILJ_LOGD) riljLog("responseSetupDataCall got gateways=" + gateways);
3197c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (!TextUtils.isEmpty(gateways)) {
3198c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    dataCall.gateways = gateways.split(" ");
3199c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                }
3200c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            }
3201c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        } else {
3202c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            if (num != 1) {
3203c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                throw new RuntimeException(
3204c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        "RIL_REQUEST_SETUP_DATA_CALL response expecting 1 RIL_Data_Call_response_v5"
3205c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        + " got " + num);
3206c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            }
3207c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            dataCall = getDataCallState(p, ver);
3208c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
3209c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3210c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        return dataCall;
3211c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
3212c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3213c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private Object
3214c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    responseOperatorInfos(Parcel p) {
3215c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        String strings[] = (String [])responseStrings(p);
3216c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        ArrayList<OperatorInfo> ret;
3217c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3218c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (strings.length % 4 != 0) {
3219c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            throw new RuntimeException(
3220c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                "RIL_REQUEST_QUERY_AVAILABLE_NETWORKS: invalid response. Got "
3221c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                + strings.length + " strings, expected multible of 4");
3222c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
3223c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3224c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        ret = new ArrayList<OperatorInfo>(strings.length / 4);
3225c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3226c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        for (int i = 0 ; i < strings.length ; i += 4) {
3227c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            ret.add (
3228c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                new OperatorInfo(
3229c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    strings[i+0],
3230c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    strings[i+1],
3231c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    strings[i+2],
3232c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    strings[i+3]));
3233c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
3234c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3235c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        return ret;
3236c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
3237c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3238c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private Object
3239c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    responseCellList(Parcel p) {
3240c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville       int num, rssi;
3241c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville       String location;
3242c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville       ArrayList<NeighboringCellInfo> response;
3243c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville       NeighboringCellInfo cell;
3244c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3245c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville       num = p.readInt();
3246c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville       response = new ArrayList<NeighboringCellInfo>();
3247c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3248c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville       // Determine the radio access type
3249c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville       String radioString = SystemProperties.get(
3250c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville               TelephonyProperties.PROPERTY_DATA_NETWORK_TYPE, "unknown");
3251c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville       int radioType;
3252c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville       if (radioString.equals("GPRS")) {
3253c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville           radioType = NETWORK_TYPE_GPRS;
3254c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville       } else if (radioString.equals("EDGE")) {
3255c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville           radioType = NETWORK_TYPE_EDGE;
3256c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville       } else if (radioString.equals("UMTS")) {
3257c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville           radioType = NETWORK_TYPE_UMTS;
3258c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville       } else if (radioString.equals("HSDPA")) {
3259c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville           radioType = NETWORK_TYPE_HSDPA;
3260c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville       } else if (radioString.equals("HSUPA")) {
3261c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville           radioType = NETWORK_TYPE_HSUPA;
3262c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville       } else if (radioString.equals("HSPA")) {
3263c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville           radioType = NETWORK_TYPE_HSPA;
3264c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville       } else {
3265c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville           radioType = NETWORK_TYPE_UNKNOWN;
3266c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville       }
3267c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3268c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville       // Interpret the location based on radio access type
3269c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville       if (radioType != NETWORK_TYPE_UNKNOWN) {
3270c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville           for (int i = 0 ; i < num ; i++) {
3271c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville               rssi = p.readInt();
3272c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville               location = p.readString();
3273c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville               cell = new NeighboringCellInfo(rssi, location, radioType);
3274c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville               response.add(cell);
3275c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville           }
3276c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville       }
3277c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville       return response;
3278c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
3279c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3280c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private Object responseGetPreferredNetworkType(Parcel p) {
3281c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville       int [] response = (int[]) responseInts(p);
3282c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3283c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville       if (response.length >= 1) {
3284c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville           // Since this is the response for getPreferredNetworkType
3285c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville           // we'll assume that it should be the value we want the
3286c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville           // vendor ril to take if we reestablish a connection to it.
3287c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville           mPreferredNetworkType = response[0];
3288c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville       }
3289c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville       return response;
3290c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
3291c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3292c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private Object responseGmsBroadcastConfig(Parcel p) {
3293c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        int num;
3294c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        ArrayList<SmsBroadcastConfigInfo> response;
3295c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        SmsBroadcastConfigInfo info;
3296c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3297c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        num = p.readInt();
3298c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        response = new ArrayList<SmsBroadcastConfigInfo>(num);
3299c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3300c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        for (int i = 0; i < num; i++) {
3301c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            int fromId = p.readInt();
3302c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            int toId = p.readInt();
3303c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            int fromScheme = p.readInt();
3304c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            int toScheme = p.readInt();
3305c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            boolean selected = (p.readInt() == 1);
3306c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3307c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            info = new SmsBroadcastConfigInfo(fromId, toId, fromScheme,
3308c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    toScheme, selected);
3309c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            response.add(info);
3310c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
3311c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        return response;
3312c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
3313c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3314c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private Object
3315c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    responseCdmaBroadcastConfig(Parcel p) {
3316c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        int numServiceCategories;
3317c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        int response[];
3318c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3319c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        numServiceCategories = p.readInt();
3320c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3321c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (numServiceCategories == 0) {
3322c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            // TODO: The logic of providing default values should
3323c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            // not be done by this transport layer. And needs to
3324c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            // be done by the vendor ril or application logic.
3325c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            int numInts;
3326c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            numInts = CDMA_BROADCAST_SMS_NO_OF_SERVICE_CATEGORIES * CDMA_BSI_NO_OF_INTS_STRUCT + 1;
3327c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            response = new int[numInts];
3328c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3329c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            // Faking a default record for all possible records.
3330c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            response[0] = CDMA_BROADCAST_SMS_NO_OF_SERVICE_CATEGORIES;
3331c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3332c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            // Loop over CDMA_BROADCAST_SMS_NO_OF_SERVICE_CATEGORIES set 'english' as
3333c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            // default language and selection status to false for all.
3334c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            for (int i = 1; i < numInts; i += CDMA_BSI_NO_OF_INTS_STRUCT ) {
3335c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                response[i + 0] = i / CDMA_BSI_NO_OF_INTS_STRUCT;
3336c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                response[i + 1] = 1;
3337c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                response[i + 2] = 0;
3338c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            }
3339c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        } else {
3340c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            int numInts;
3341c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            numInts = (numServiceCategories * CDMA_BSI_NO_OF_INTS_STRUCT) + 1;
3342c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            response = new int[numInts];
3343c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3344c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            response[0] = numServiceCategories;
3345c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            for (int i = 1 ; i < numInts; i++) {
3346c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                 response[i] = p.readInt();
3347c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville             }
3348c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
3349c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3350c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        return response;
3351c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
3352c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3353c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private Object
3354c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    responseSignalStrength(Parcel p) {
33555b81adc82a53b3064f4baa3acfeabef31586588aUma Maheswari Ramalingam        SignalStrength signalStrength = new SignalStrength(p);
33565b81adc82a53b3064f4baa3acfeabef31586588aUma Maheswari Ramalingam        return signalStrength;
3357c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
3358c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3359c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private ArrayList<CdmaInformationRecords>
3360c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    responseCdmaInformationRecord(Parcel p) {
3361c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        int numberOfInfoRecs;
3362c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        ArrayList<CdmaInformationRecords> response;
3363c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3364c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        /**
3365c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville         * Loop through all of the information records unmarshalling them
3366c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville         * and converting them to Java Objects.
3367c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville         */
3368c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        numberOfInfoRecs = p.readInt();
3369c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        response = new ArrayList<CdmaInformationRecords>(numberOfInfoRecs);
3370c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3371c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        for (int i = 0; i < numberOfInfoRecs; i++) {
3372c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            CdmaInformationRecords InfoRec = new CdmaInformationRecords(p);
3373c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            response.add(InfoRec);
3374c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
3375c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3376c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        return response;
3377c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
3378c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3379c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private Object
3380c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    responseCdmaCallWaiting(Parcel p) {
3381c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        CdmaCallWaitingNotification notification = new CdmaCallWaitingNotification();
3382c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3383c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        notification.number = p.readString();
3384c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        notification.numberPresentation = notification.presentationFromCLIP(p.readInt());
3385c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        notification.name = p.readString();
3386c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        notification.namePresentation = notification.numberPresentation;
3387c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        notification.isPresent = p.readInt();
3388c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        notification.signalType = p.readInt();
3389c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        notification.alertPitch = p.readInt();
3390c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        notification.signal = p.readInt();
3391c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        notification.numberType = p.readInt();
3392c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        notification.numberPlan = p.readInt();
3393c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3394c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        return notification;
3395c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
3396c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3397c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private Object
3398c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    responseCallRing(Parcel p){
3399c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        char response[] = new char[4];
3400c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3401c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        response[0] = (char) p.readInt();    // isPresent
3402c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        response[1] = (char) p.readInt();    // signalType
3403c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        response[2] = (char) p.readInt();    // alertPitch
3404c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        response[3] = (char) p.readInt();    // signal
3405c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3406c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        return response;
3407c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
3408c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3409c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private void
3410c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    notifyRegistrantsCdmaInfoRec(CdmaInformationRecords infoRec) {
3411c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        int response = RIL_UNSOL_CDMA_INFO_REC;
3412c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (infoRec.record instanceof CdmaInformationRecords.CdmaDisplayInfoRec) {
3413c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            if (mDisplayInfoRegistrants != null) {
3414c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (RILJ_LOGD) unsljLogRet(response, infoRec.record);
3415c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                mDisplayInfoRegistrants.notifyRegistrants(
3416c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        new AsyncResult (null, infoRec.record, null));
3417c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            }
3418c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        } else if (infoRec.record instanceof CdmaInformationRecords.CdmaSignalInfoRec) {
3419c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            if (mSignalInfoRegistrants != null) {
3420c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (RILJ_LOGD) unsljLogRet(response, infoRec.record);
3421c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                mSignalInfoRegistrants.notifyRegistrants(
3422c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        new AsyncResult (null, infoRec.record, null));
3423c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            }
3424c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        } else if (infoRec.record instanceof CdmaInformationRecords.CdmaNumberInfoRec) {
3425c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            if (mNumberInfoRegistrants != null) {
3426c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (RILJ_LOGD) unsljLogRet(response, infoRec.record);
3427c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                mNumberInfoRegistrants.notifyRegistrants(
3428c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        new AsyncResult (null, infoRec.record, null));
3429c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            }
3430c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        } else if (infoRec.record instanceof CdmaInformationRecords.CdmaRedirectingNumberInfoRec) {
3431c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            if (mRedirNumInfoRegistrants != null) {
3432c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (RILJ_LOGD) unsljLogRet(response, infoRec.record);
3433c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                mRedirNumInfoRegistrants.notifyRegistrants(
3434c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        new AsyncResult (null, infoRec.record, null));
3435c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            }
3436c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        } else if (infoRec.record instanceof CdmaInformationRecords.CdmaLineControlInfoRec) {
3437c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            if (mLineControlInfoRegistrants != null) {
3438c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (RILJ_LOGD) unsljLogRet(response, infoRec.record);
3439c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                mLineControlInfoRegistrants.notifyRegistrants(
3440c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        new AsyncResult (null, infoRec.record, null));
3441c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            }
3442c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        } else if (infoRec.record instanceof CdmaInformationRecords.CdmaT53ClirInfoRec) {
3443c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            if (mT53ClirInfoRegistrants != null) {
3444c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (RILJ_LOGD) unsljLogRet(response, infoRec.record);
3445c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                mT53ClirInfoRegistrants.notifyRegistrants(
3446c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        new AsyncResult (null, infoRec.record, null));
3447c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            }
3448c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        } else if (infoRec.record instanceof CdmaInformationRecords.CdmaT53AudioControlInfoRec) {
3449c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            if (mT53AudCntrlInfoRegistrants != null) {
3450c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville               if (RILJ_LOGD) unsljLogRet(response, infoRec.record);
3451c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville               mT53AudCntrlInfoRegistrants.notifyRegistrants(
3452c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                       new AsyncResult (null, infoRec.record, null));
3453c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            }
3454c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
3455c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
3456c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3457c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    static String
3458c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    requestToString(int request) {
3459c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville/*
3460c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville cat libs/telephony/ril_commands.h \
3461c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville | egrep "^ *{RIL_" \
3462c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville | sed -re 's/\{RIL_([^,]+),[^,]+,([^}]+).+/case RIL_\1: return "\1";/'
3463c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville*/
3464c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        switch(request) {
3465c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_GET_SIM_STATUS: return "GET_SIM_STATUS";
3466c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_ENTER_SIM_PIN: return "ENTER_SIM_PIN";
3467c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_ENTER_SIM_PUK: return "ENTER_SIM_PUK";
3468c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_ENTER_SIM_PIN2: return "ENTER_SIM_PIN2";
3469c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_ENTER_SIM_PUK2: return "ENTER_SIM_PUK2";
3470c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_CHANGE_SIM_PIN: return "CHANGE_SIM_PIN";
3471c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_CHANGE_SIM_PIN2: return "CHANGE_SIM_PIN2";
3472c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_ENTER_NETWORK_DEPERSONALIZATION: return "ENTER_NETWORK_DEPERSONALIZATION";
3473c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_GET_CURRENT_CALLS: return "GET_CURRENT_CALLS";
3474c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_DIAL: return "DIAL";
3475c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_GET_IMSI: return "GET_IMSI";
3476c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_HANGUP: return "HANGUP";
3477c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_HANGUP_WAITING_OR_BACKGROUND: return "HANGUP_WAITING_OR_BACKGROUND";
3478c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_HANGUP_FOREGROUND_RESUME_BACKGROUND: return "HANGUP_FOREGROUND_RESUME_BACKGROUND";
3479c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_SWITCH_WAITING_OR_HOLDING_AND_ACTIVE: return "REQUEST_SWITCH_WAITING_OR_HOLDING_AND_ACTIVE";
3480c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_CONFERENCE: return "CONFERENCE";
3481c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_UDUB: return "UDUB";
3482c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_LAST_CALL_FAIL_CAUSE: return "LAST_CALL_FAIL_CAUSE";
3483c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_SIGNAL_STRENGTH: return "SIGNAL_STRENGTH";
3484c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_VOICE_REGISTRATION_STATE: return "VOICE_REGISTRATION_STATE";
3485c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_DATA_REGISTRATION_STATE: return "DATA_REGISTRATION_STATE";
3486c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_OPERATOR: return "OPERATOR";
3487c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_RADIO_POWER: return "RADIO_POWER";
3488c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_DTMF: return "DTMF";
3489c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_SEND_SMS: return "SEND_SMS";
3490c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_SEND_SMS_EXPECT_MORE: return "SEND_SMS_EXPECT_MORE";
3491c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_SETUP_DATA_CALL: return "SETUP_DATA_CALL";
3492c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_SIM_IO: return "SIM_IO";
3493c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_SEND_USSD: return "SEND_USSD";
3494c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_CANCEL_USSD: return "CANCEL_USSD";
3495c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_GET_CLIR: return "GET_CLIR";
3496c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_SET_CLIR: return "SET_CLIR";
3497c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_QUERY_CALL_FORWARD_STATUS: return "QUERY_CALL_FORWARD_STATUS";
3498c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_SET_CALL_FORWARD: return "SET_CALL_FORWARD";
3499c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_QUERY_CALL_WAITING: return "QUERY_CALL_WAITING";
3500c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_SET_CALL_WAITING: return "SET_CALL_WAITING";
3501c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_SMS_ACKNOWLEDGE: return "SMS_ACKNOWLEDGE";
3502c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_GET_IMEI: return "GET_IMEI";
3503c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_GET_IMEISV: return "GET_IMEISV";
3504c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_ANSWER: return "ANSWER";
3505c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_DEACTIVATE_DATA_CALL: return "DEACTIVATE_DATA_CALL";
3506c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_QUERY_FACILITY_LOCK: return "QUERY_FACILITY_LOCK";
3507c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_SET_FACILITY_LOCK: return "SET_FACILITY_LOCK";
3508c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_CHANGE_BARRING_PASSWORD: return "CHANGE_BARRING_PASSWORD";
3509c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_QUERY_NETWORK_SELECTION_MODE: return "QUERY_NETWORK_SELECTION_MODE";
3510c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_SET_NETWORK_SELECTION_AUTOMATIC: return "SET_NETWORK_SELECTION_AUTOMATIC";
3511c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_SET_NETWORK_SELECTION_MANUAL: return "SET_NETWORK_SELECTION_MANUAL";
3512c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_QUERY_AVAILABLE_NETWORKS : return "QUERY_AVAILABLE_NETWORKS ";
3513c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_DTMF_START: return "DTMF_START";
3514c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_DTMF_STOP: return "DTMF_STOP";
3515c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_BASEBAND_VERSION: return "BASEBAND_VERSION";
3516c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_SEPARATE_CONNECTION: return "SEPARATE_CONNECTION";
3517c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_SET_MUTE: return "SET_MUTE";
3518c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_GET_MUTE: return "GET_MUTE";
3519c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_QUERY_CLIP: return "QUERY_CLIP";
3520c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_LAST_DATA_CALL_FAIL_CAUSE: return "LAST_DATA_CALL_FAIL_CAUSE";
3521c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_DATA_CALL_LIST: return "DATA_CALL_LIST";
3522c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_RESET_RADIO: return "RESET_RADIO";
3523c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_OEM_HOOK_RAW: return "OEM_HOOK_RAW";
3524c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_OEM_HOOK_STRINGS: return "OEM_HOOK_STRINGS";
3525c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_SCREEN_STATE: return "SCREEN_STATE";
3526c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_SET_SUPP_SVC_NOTIFICATION: return "SET_SUPP_SVC_NOTIFICATION";
3527c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_WRITE_SMS_TO_SIM: return "WRITE_SMS_TO_SIM";
3528c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_DELETE_SMS_ON_SIM: return "DELETE_SMS_ON_SIM";
3529c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_SET_BAND_MODE: return "SET_BAND_MODE";
3530c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_QUERY_AVAILABLE_BAND_MODE: return "QUERY_AVAILABLE_BAND_MODE";
3531c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_STK_GET_PROFILE: return "REQUEST_STK_GET_PROFILE";
3532c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_STK_SET_PROFILE: return "REQUEST_STK_SET_PROFILE";
3533c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_STK_SEND_ENVELOPE_COMMAND: return "REQUEST_STK_SEND_ENVELOPE_COMMAND";
3534c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_STK_SEND_TERMINAL_RESPONSE: return "REQUEST_STK_SEND_TERMINAL_RESPONSE";
3535c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_STK_HANDLE_CALL_SETUP_REQUESTED_FROM_SIM: return "REQUEST_STK_HANDLE_CALL_SETUP_REQUESTED_FROM_SIM";
3536c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_EXPLICIT_CALL_TRANSFER: return "REQUEST_EXPLICIT_CALL_TRANSFER";
3537c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE: return "REQUEST_SET_PREFERRED_NETWORK_TYPE";
3538c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_GET_PREFERRED_NETWORK_TYPE: return "REQUEST_GET_PREFERRED_NETWORK_TYPE";
3539c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_GET_NEIGHBORING_CELL_IDS: return "REQUEST_GET_NEIGHBORING_CELL_IDS";
3540c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_SET_LOCATION_UPDATES: return "REQUEST_SET_LOCATION_UPDATES";
3541c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_CDMA_SET_SUBSCRIPTION_SOURCE: return "RIL_REQUEST_CDMA_SET_SUBSCRIPTION_SOURCE";
3542c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_CDMA_SET_ROAMING_PREFERENCE: return "RIL_REQUEST_CDMA_SET_ROAMING_PREFERENCE";
3543c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_CDMA_QUERY_ROAMING_PREFERENCE: return "RIL_REQUEST_CDMA_QUERY_ROAMING_PREFERENCE";
3544c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_SET_TTY_MODE: return "RIL_REQUEST_SET_TTY_MODE";
3545c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_QUERY_TTY_MODE: return "RIL_REQUEST_QUERY_TTY_MODE";
3546c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_CDMA_SET_PREFERRED_VOICE_PRIVACY_MODE: return "RIL_REQUEST_CDMA_SET_PREFERRED_VOICE_PRIVACY_MODE";
3547c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_CDMA_QUERY_PREFERRED_VOICE_PRIVACY_MODE: return "RIL_REQUEST_CDMA_QUERY_PREFERRED_VOICE_PRIVACY_MODE";
3548c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_CDMA_FLASH: return "RIL_REQUEST_CDMA_FLASH";
3549c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_CDMA_BURST_DTMF: return "RIL_REQUEST_CDMA_BURST_DTMF";
3550c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_CDMA_SEND_SMS: return "RIL_REQUEST_CDMA_SEND_SMS";
3551c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_CDMA_SMS_ACKNOWLEDGE: return "RIL_REQUEST_CDMA_SMS_ACKNOWLEDGE";
3552c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_GSM_GET_BROADCAST_CONFIG: return "RIL_REQUEST_GSM_GET_BROADCAST_CONFIG";
3553c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_GSM_SET_BROADCAST_CONFIG: return "RIL_REQUEST_GSM_SET_BROADCAST_CONFIG";
3554c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_CDMA_GET_BROADCAST_CONFIG: return "RIL_REQUEST_CDMA_GET_BROADCAST_CONFIG";
3555c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_CDMA_SET_BROADCAST_CONFIG: return "RIL_REQUEST_CDMA_SET_BROADCAST_CONFIG";
3556c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_GSM_BROADCAST_ACTIVATION: return "RIL_REQUEST_GSM_BROADCAST_ACTIVATION";
3557c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_CDMA_VALIDATE_AND_WRITE_AKEY: return "RIL_REQUEST_CDMA_VALIDATE_AND_WRITE_AKEY";
3558c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_CDMA_BROADCAST_ACTIVATION: return "RIL_REQUEST_CDMA_BROADCAST_ACTIVATION";
3559c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_CDMA_SUBSCRIPTION: return "RIL_REQUEST_CDMA_SUBSCRIPTION";
3560c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_CDMA_WRITE_SMS_TO_RUIM: return "RIL_REQUEST_CDMA_WRITE_SMS_TO_RUIM";
3561c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_CDMA_DELETE_SMS_ON_RUIM: return "RIL_REQUEST_CDMA_DELETE_SMS_ON_RUIM";
3562c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_DEVICE_IDENTITY: return "RIL_REQUEST_DEVICE_IDENTITY";
3563c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_GET_SMSC_ADDRESS: return "RIL_REQUEST_GET_SMSC_ADDRESS";
3564c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_SET_SMSC_ADDRESS: return "RIL_REQUEST_SET_SMSC_ADDRESS";
3565c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_EXIT_EMERGENCY_CALLBACK_MODE: return "REQUEST_EXIT_EMERGENCY_CALLBACK_MODE";
3566c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_REPORT_SMS_MEMORY_STATUS: return "RIL_REQUEST_REPORT_SMS_MEMORY_STATUS";
3567c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_REPORT_STK_SERVICE_IS_RUNNING: return "RIL_REQUEST_REPORT_STK_SERVICE_IS_RUNNING";
3568c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_CDMA_GET_SUBSCRIPTION_SOURCE: return "RIL_REQUEST_CDMA_GET_SUBSCRIPTION_SOURCE";
3569c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_ISIM_AUTHENTICATION: return "RIL_REQUEST_ISIM_AUTHENTICATION";
3570c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_ACKNOWLEDGE_INCOMING_GSM_SMS_WITH_PDU: return "RIL_REQUEST_ACKNOWLEDGE_INCOMING_GSM_SMS_WITH_PDU";
3571c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_STK_SEND_ENVELOPE_WITH_STATUS: return "RIL_REQUEST_STK_SEND_ENVELOPE_WITH_STATUS";
3572c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_REQUEST_VOICE_RADIO_TECH: return "RIL_REQUEST_VOICE_RADIO_TECH";
3573c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            default: return "<unknown request>";
3574c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
3575c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
3576c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3577c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    static String
3578c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    responseToString(int request)
3579c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    {
3580c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville/*
3581c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville cat libs/telephony/ril_unsol_commands.h \
3582c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville | egrep "^ *{RIL_" \
3583c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville | sed -re 's/\{RIL_([^,]+),[^,]+,([^}]+).+/case RIL_\1: return "\1";/'
3584c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville*/
3585c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        switch(request) {
3586c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_RESPONSE_RADIO_STATE_CHANGED: return "UNSOL_RESPONSE_RADIO_STATE_CHANGED";
3587c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED: return "UNSOL_RESPONSE_CALL_STATE_CHANGED";
3588c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED: return "UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED";
3589c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_RESPONSE_NEW_SMS: return "UNSOL_RESPONSE_NEW_SMS";
3590c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_RESPONSE_NEW_SMS_STATUS_REPORT: return "UNSOL_RESPONSE_NEW_SMS_STATUS_REPORT";
3591c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_RESPONSE_NEW_SMS_ON_SIM: return "UNSOL_RESPONSE_NEW_SMS_ON_SIM";
3592c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_ON_USSD: return "UNSOL_ON_USSD";
3593c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_ON_USSD_REQUEST: return "UNSOL_ON_USSD_REQUEST";
3594c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_NITZ_TIME_RECEIVED: return "UNSOL_NITZ_TIME_RECEIVED";
3595c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_SIGNAL_STRENGTH: return "UNSOL_SIGNAL_STRENGTH";
3596c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_DATA_CALL_LIST_CHANGED: return "UNSOL_DATA_CALL_LIST_CHANGED";
3597c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_SUPP_SVC_NOTIFICATION: return "UNSOL_SUPP_SVC_NOTIFICATION";
3598c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_STK_SESSION_END: return "UNSOL_STK_SESSION_END";
3599c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_STK_PROACTIVE_COMMAND: return "UNSOL_STK_PROACTIVE_COMMAND";
3600c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_STK_EVENT_NOTIFY: return "UNSOL_STK_EVENT_NOTIFY";
3601c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_STK_CALL_SETUP: return "UNSOL_STK_CALL_SETUP";
3602c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_SIM_SMS_STORAGE_FULL: return "UNSOL_SIM_SMS_STORAGE_FULL";
3603c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_SIM_REFRESH: return "UNSOL_SIM_REFRESH";
3604c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_CALL_RING: return "UNSOL_CALL_RING";
3605c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_RESPONSE_SIM_STATUS_CHANGED: return "UNSOL_RESPONSE_SIM_STATUS_CHANGED";
3606c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_RESPONSE_CDMA_NEW_SMS: return "UNSOL_RESPONSE_CDMA_NEW_SMS";
3607c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_RESPONSE_NEW_BROADCAST_SMS: return "UNSOL_RESPONSE_NEW_BROADCAST_SMS";
3608c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_CDMA_RUIM_SMS_STORAGE_FULL: return "UNSOL_CDMA_RUIM_SMS_STORAGE_FULL";
3609c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_RESTRICTED_STATE_CHANGED: return "UNSOL_RESTRICTED_STATE_CHANGED";
3610c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_ENTER_EMERGENCY_CALLBACK_MODE: return "UNSOL_ENTER_EMERGENCY_CALLBACK_MODE";
3611c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_CDMA_CALL_WAITING: return "UNSOL_CDMA_CALL_WAITING";
3612c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_CDMA_OTA_PROVISION_STATUS: return "UNSOL_CDMA_OTA_PROVISION_STATUS";
3613c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_CDMA_INFO_REC: return "UNSOL_CDMA_INFO_REC";
3614c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_OEM_HOOK_RAW: return "UNSOL_OEM_HOOK_RAW";
3615c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_RINGBACK_TONE: return "UNSOL_RINGBACK_TONG";
3616c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_RESEND_INCALL_MUTE: return "UNSOL_RESEND_INCALL_MUTE";
3617c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_CDMA_SUBSCRIPTION_SOURCE_CHANGED: return "CDMA_SUBSCRIPTION_SOURCE_CHANGED";
3618c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOl_CDMA_PRL_CHANGED: return "UNSOL_CDMA_PRL_CHANGED";
3619c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_EXIT_EMERGENCY_CALLBACK_MODE: return "UNSOL_EXIT_EMERGENCY_CALLBACK_MODE";
3620c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_RIL_CONNECTED: return "UNSOL_RIL_CONNECTED";
3621c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case RIL_UNSOL_VOICE_RADIO_TECH_CHANGED: return "UNSOL_VOICE_RADIO_TECH_CHANGED";
3622c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            default: return "<unknown reponse>";
3623c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
3624c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
3625c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3626c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private void riljLog(String msg) {
3627c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        Log.d(LOG_TAG, msg);
3628c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
3629c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3630c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private void riljLogv(String msg) {
3631c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        Log.v(LOG_TAG, msg);
3632c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
3633c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3634c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private void unsljLog(int response) {
3635c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        riljLog("[UNSL]< " + responseToString(response));
3636c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
3637c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3638c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private void unsljLogMore(int response, String more) {
3639c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        riljLog("[UNSL]< " + responseToString(response) + " " + more);
3640c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
3641c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3642c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private void unsljLogRet(int response, Object ret) {
3643c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        riljLog("[UNSL]< " + responseToString(response) + " " + retToString(response, ret));
3644c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
3645c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3646c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private void unsljLogvRet(int response, Object ret) {
3647c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        riljLogv("[UNSL]< " + responseToString(response) + " " + retToString(response, ret));
3648c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
3649c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3650c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3651c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    // ***** Methods for CDMA support
3652c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void
3653c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    getDeviceIdentity(Message response) {
3654c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_DEVICE_IDENTITY, response);
3655c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3656c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
3657c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3658c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
3659c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
3660c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3661c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void
3662c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    getCDMASubscription(Message response) {
3663c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CDMA_SUBSCRIPTION, response);
3664c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3665c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
3666c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3667c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
3668c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
3669c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3670c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    @Override
3671c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void setPhoneType(int phoneType) { // Called by CDMAPhone and GSMPhone constructor
3672c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog("setPhoneType=" + phoneType + " old value=" + mPhoneType);
3673c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        mPhoneType = phoneType;
3674c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
3675c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3676c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    /**
3677c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     * {@inheritDoc}
3678c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     */
3679c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void queryCdmaRoamingPreference(Message response) {
3680c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr = RILRequest.obtain(
3681c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                RILConstants.RIL_REQUEST_CDMA_QUERY_ROAMING_PREFERENCE, response);
3682c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3683c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
3684c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3685c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
3686c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
3687c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3688c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    /**
3689c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     * {@inheritDoc}
3690c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     */
3691c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void setCdmaRoamingPreference(int cdmaRoamingType, Message response) {
3692c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr = RILRequest.obtain(
3693c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                RILConstants.RIL_REQUEST_CDMA_SET_ROAMING_PREFERENCE, response);
3694c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3695c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(1);
3696c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(cdmaRoamingType);
3697c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3698c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
3699c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                + " : " + cdmaRoamingType);
3700c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3701c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
3702c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
3703c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3704c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    /**
3705c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     * {@inheritDoc}
3706c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     */
3707c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void setCdmaSubscriptionSource(int cdmaSubscription , Message response) {
3708c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr = RILRequest.obtain(
3709c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                RILConstants.RIL_REQUEST_CDMA_SET_SUBSCRIPTION_SOURCE, response);
3710c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3711c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(1);
3712c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(cdmaSubscription);
3713c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3714c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
3715c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                + " : " + cdmaSubscription);
3716c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3717c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
3718c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
3719c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3720c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    /**
3721c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     * {@inheritDoc}
3722c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     */
3723c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    @Override
3724c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void getCdmaSubscriptionSource(Message response) {
3725c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr = RILRequest.obtain(
3726c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                RILConstants.RIL_REQUEST_CDMA_GET_SUBSCRIPTION_SOURCE, response);
3727c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3728c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
3729c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3730c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
3731c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
3732c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3733c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    /**
3734c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     * {@inheritDoc}
3735c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     */
3736c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void queryTTYMode(Message response) {
3737c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr = RILRequest.obtain(
3738c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                RILConstants.RIL_REQUEST_QUERY_TTY_MODE, response);
3739c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3740c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
3741c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3742c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
3743c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
3744c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3745c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    /**
3746c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     * {@inheritDoc}
3747c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     */
3748c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void setTTYMode(int ttyMode, Message response) {
3749c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr = RILRequest.obtain(
3750c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                RILConstants.RIL_REQUEST_SET_TTY_MODE, response);
3751c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3752c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(1);
3753c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(ttyMode);
3754c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3755c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
3756c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                + " : " + ttyMode);
3757c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3758c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
3759c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
3760c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3761c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    /**
3762c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     * {@inheritDoc}
3763c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     */
3764c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void
3765c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    sendCDMAFeatureCode(String FeatureCode, Message response) {
3766c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CDMA_FLASH, response);
3767c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3768c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeString(FeatureCode);
3769c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3770c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
3771c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                + " : " + FeatureCode);
3772c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3773c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
3774c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
3775c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3776c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void getCdmaBroadcastConfig(Message response) {
3777c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CDMA_GET_BROADCAST_CONFIG, response);
3778c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3779c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
3780c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
3781c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3782c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    // TODO: Change the configValuesArray to a RIL_BroadcastSMSConfig
3783c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void setCdmaBroadcastConfig(int[] configValuesArray, Message response) {
3784c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CDMA_SET_BROADCAST_CONFIG, response);
3785c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3786c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        for(int i = 0; i < configValuesArray.length; i++) {
3787c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            rr.mp.writeInt(configValuesArray[i]);
3788c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
3789c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3790c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
3791c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3792c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
3793c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
3794c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3795c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void setCdmaBroadcastActivation(boolean activate, Message response) {
3796c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_CDMA_BROADCAST_ACTIVATION, response);
3797c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3798c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(1);
3799c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeInt(activate ? 0 :1);
3800c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3801c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
3802c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3803c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
3804c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
3805c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3806c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    /**
3807c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     * {@inheritDoc}
3808c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     */
3809c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void exitEmergencyCallbackMode(Message response) {
3810c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_EXIT_EMERGENCY_CALLBACK_MODE, response);
3811c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3812c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
3813c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3814c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
3815c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
3816c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3817c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void requestIsimAuthentication(String nonce, Message response) {
3818c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        RILRequest rr = RILRequest.obtain(RIL_REQUEST_ISIM_AUTHENTICATION, response);
3819c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3820c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        rr.mp.writeString(nonce);
3821c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3822c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
3823c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3824c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        send(rr);
3825c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
3826c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3827c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    /* (non-Javadoc)
3828c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     * @see com.android.internal.telephony.BaseCommands#testingEmergencyCall()
3829c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     */
3830c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    @Override
3831c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void testingEmergencyCall() {
3832c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (RILJ_LOGD) riljLog("testingEmergencyCall");
3833c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        mTestingEmergencyCall.set(true);
3834c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
3835c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
3836c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
3837c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        pw.println("RIL:");
3838c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        pw.println(" mSocket=" + mSocket);
3839c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        pw.println(" mSenderThread=" + mSenderThread);
3840c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        pw.println(" mSender=" + mSender);
3841c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        pw.println(" mReceiverThread=" + mReceiverThread);
3842c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        pw.println(" mReceiver=" + mReceiver);
3843c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        pw.println(" mWakeLock=" + mWakeLock);
3844c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        pw.println(" mWakeLockTimeout=" + mWakeLockTimeout);
3845c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        synchronized (mRequestsList) {
3846c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville          pw.println(" mRequestMessagesPending=" + mRequestMessagesPending);
3847c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville          pw.println(" mRequestMessagesWaiting=" + mRequestMessagesWaiting);
3848c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            int count = mRequestsList.size();
3849c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            pw.println(" mRequestList count=" + count);
3850c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            for (int i = 0; i < count; i++) {
3851c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                RILRequest rr = mRequestsList.get(i);
3852c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                pw.println("  [" + rr.mSerial + "] " + requestToString(rr.mRequest));
3853c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            }
3854c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
3855c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        pw.println(" mLastNITZTimeInfo=" + mLastNITZTimeInfo);
3856c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        pw.println(" mTestingEmergencyCall=" + mTestingEmergencyCall.get());
3857c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
3858c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville}
3859