1 /*
2  * Copyright (C) 2006 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.internal.telephony;
18 
19 import android.net.KeepalivePacketData;
20 import android.net.LinkProperties;
21 import android.os.Handler;
22 import android.os.Message;
23 import android.os.WorkSource;
24 import android.service.carrier.CarrierIdentifier;
25 import android.telephony.ClientRequestStats;
26 import android.telephony.ImsiEncryptionInfo;
27 import android.telephony.NetworkScanRequest;
28 import android.telephony.data.DataProfile;
29 
30 import com.android.internal.telephony.cdma.CdmaSmsBroadcastConfigInfo;
31 import com.android.internal.telephony.gsm.SmsBroadcastConfigInfo;
32 import com.android.internal.telephony.uicc.IccCardStatus;
33 
34 import java.util.List;
35 
36 /**
37  * {@hide}
38  */
39 public interface CommandsInterface {
40     enum RadioState {
41         RADIO_OFF,         /* Radio explicitly powered off (eg CFUN=0) */
42         RADIO_UNAVAILABLE, /* Radio unavailable (eg, resetting or not booted) */
43         RADIO_ON;          /* Radio is on */
44 
isOn()45         public boolean isOn() /* and available...*/ {
46             return this == RADIO_ON;
47         }
48 
isAvailable()49         public boolean isAvailable() {
50             return this != RADIO_UNAVAILABLE;
51         }
52     }
53 
54     //***** Constants
55 
56     // Used as parameter to dial() and setCLIR() below
57     static final int CLIR_DEFAULT = 0;      // "use subscription default value"
58     static final int CLIR_INVOCATION = 1;   // (restrict CLI presentation)
59     static final int CLIR_SUPPRESSION = 2;  // (allow CLI presentation)
60 
61 
62     // Used as parameters for call forward methods below
63     static final int CF_ACTION_DISABLE          = 0;
64     static final int CF_ACTION_ENABLE           = 1;
65 //  static final int CF_ACTION_UNUSED           = 2;
66     static final int CF_ACTION_REGISTRATION     = 3;
67     static final int CF_ACTION_ERASURE          = 4;
68 
69     static final int CF_REASON_UNCONDITIONAL    = 0;
70     static final int CF_REASON_BUSY             = 1;
71     static final int CF_REASON_NO_REPLY         = 2;
72     static final int CF_REASON_NOT_REACHABLE    = 3;
73     static final int CF_REASON_ALL              = 4;
74     static final int CF_REASON_ALL_CONDITIONAL  = 5;
75 
76     // Used for call barring methods below
77     static final String CB_FACILITY_BAOC         = "AO";
78     static final String CB_FACILITY_BAOIC        = "OI";
79     static final String CB_FACILITY_BAOICxH      = "OX";
80     static final String CB_FACILITY_BAIC         = "AI";
81     static final String CB_FACILITY_BAICr        = "IR";
82     static final String CB_FACILITY_BA_ALL       = "AB";
83     static final String CB_FACILITY_BA_MO        = "AG";
84     static final String CB_FACILITY_BA_MT        = "AC";
85     static final String CB_FACILITY_BA_SIM       = "SC";
86     static final String CB_FACILITY_BA_FD        = "FD";
87 
88 
89     // Used for various supp services apis
90     // See 27.007 +CCFC or +CLCK
91     static final int SERVICE_CLASS_NONE     = 0; // no user input
92     static final int SERVICE_CLASS_VOICE    = (1 << 0);
93     static final int SERVICE_CLASS_DATA     = (1 << 1); //synonym for 16+32+64+128
94     static final int SERVICE_CLASS_FAX      = (1 << 2);
95     static final int SERVICE_CLASS_SMS      = (1 << 3);
96     static final int SERVICE_CLASS_DATA_SYNC = (1 << 4);
97     static final int SERVICE_CLASS_DATA_ASYNC = (1 << 5);
98     static final int SERVICE_CLASS_PACKET   = (1 << 6);
99     static final int SERVICE_CLASS_PAD      = (1 << 7);
100     static final int SERVICE_CLASS_MAX      = (1 << 7); // Max SERVICE_CLASS value
101 
102     // Numeric representation of string values returned
103     // by messages sent to setOnUSSD handler
104     static final int USSD_MODE_NOTIFY        = 0;
105     static final int USSD_MODE_REQUEST       = 1;
106     static final int USSD_MODE_NW_RELEASE    = 2;
107     static final int USSD_MODE_LOCAL_CLIENT  = 3;
108     static final int USSD_MODE_NOT_SUPPORTED = 4;
109     static final int USSD_MODE_NW_TIMEOUT    = 5;
110 
111     // GSM SMS fail cause for acknowledgeLastIncomingSMS. From TS 23.040, 9.2.3.22.
112     static final int GSM_SMS_FAIL_CAUSE_MEMORY_CAPACITY_EXCEEDED    = 0xD3;
113     static final int GSM_SMS_FAIL_CAUSE_USIM_APP_TOOLKIT_BUSY       = 0xD4;
114     static final int GSM_SMS_FAIL_CAUSE_USIM_DATA_DOWNLOAD_ERROR    = 0xD5;
115     static final int GSM_SMS_FAIL_CAUSE_UNSPECIFIED_ERROR           = 0xFF;
116 
117     // CDMA SMS fail cause for acknowledgeLastIncomingCdmaSms.  From TS N.S0005, 6.5.2.125.
118     static final int CDMA_SMS_FAIL_CAUSE_INVALID_TELESERVICE_ID     = 4;
119     static final int CDMA_SMS_FAIL_CAUSE_RESOURCE_SHORTAGE          = 35;
120     static final int CDMA_SMS_FAIL_CAUSE_OTHER_TERMINAL_PROBLEM     = 39;
121     static final int CDMA_SMS_FAIL_CAUSE_ENCODING_PROBLEM           = 96;
122 
123     //***** Methods
getRadioState()124     RadioState getRadioState();
125 
126     /**
127      * response.obj.result is an int[2]
128      *
129      * response.obj.result[0] is IMS registration state
130      *                        0 - Not registered
131      *                        1 - Registered
132      * response.obj.result[1] is of type RILConstants.GSM_PHONE or
133      *                                    RILConstants.CDMA_PHONE
134      */
getImsRegistrationState(Message result)135     void getImsRegistrationState(Message result);
136 
137     /**
138      * Fires on any RadioState transition
139      * Always fires immediately as well
140      *
141      * do not attempt to calculate transitions by storing getRadioState() values
142      * on previous invocations of this notification. Instead, use the other
143      * registration methods
144      */
registerForRadioStateChanged(Handler h, int what, Object obj)145     void registerForRadioStateChanged(Handler h, int what, Object obj);
unregisterForRadioStateChanged(Handler h)146     void unregisterForRadioStateChanged(Handler h);
147 
registerForVoiceRadioTechChanged(Handler h, int what, Object obj)148     void registerForVoiceRadioTechChanged(Handler h, int what, Object obj);
unregisterForVoiceRadioTechChanged(Handler h)149     void unregisterForVoiceRadioTechChanged(Handler h);
registerForImsNetworkStateChanged(Handler h, int what, Object obj)150     void registerForImsNetworkStateChanged(Handler h, int what, Object obj);
unregisterForImsNetworkStateChanged(Handler h)151     void unregisterForImsNetworkStateChanged(Handler h);
152 
153     /**
154      * Fires on any transition into RadioState.isOn()
155      * Fires immediately if currently in that state
156      * In general, actions should be idempotent. State may change
157      * before event is received.
158      */
registerForOn(Handler h, int what, Object obj)159     void registerForOn(Handler h, int what, Object obj);
unregisterForOn(Handler h)160     void unregisterForOn(Handler h);
161 
162     /**
163      * Fires on any transition out of RadioState.isAvailable()
164      * Fires immediately if currently in that state
165      * In general, actions should be idempotent. State may change
166      * before event is received.
167      */
registerForAvailable(Handler h, int what, Object obj)168     void registerForAvailable(Handler h, int what, Object obj);
unregisterForAvailable(Handler h)169     void unregisterForAvailable(Handler h);
170 
171     /**
172      * Fires on any transition into !RadioState.isAvailable()
173      * Fires immediately if currently in that state
174      * In general, actions should be idempotent. State may change
175      * before event is received.
176      */
registerForNotAvailable(Handler h, int what, Object obj)177     void registerForNotAvailable(Handler h, int what, Object obj);
unregisterForNotAvailable(Handler h)178     void unregisterForNotAvailable(Handler h);
179 
180     /**
181      * Fires on any transition into RADIO_OFF or !RadioState.isAvailable()
182      * Fires immediately if currently in that state
183      * In general, actions should be idempotent. State may change
184      * before event is received.
185      */
registerForOffOrNotAvailable(Handler h, int what, Object obj)186     void registerForOffOrNotAvailable(Handler h, int what, Object obj);
unregisterForOffOrNotAvailable(Handler h)187     void unregisterForOffOrNotAvailable(Handler h);
188 
189     /**
190      * Fires on any change in ICC status
191      */
registerForIccStatusChanged(Handler h, int what, Object obj)192     void registerForIccStatusChanged(Handler h, int what, Object obj);
unregisterForIccStatusChanged(Handler h)193     void unregisterForIccStatusChanged(Handler h);
194     /** Register for ICC slot status changed event */
registerForIccSlotStatusChanged(Handler h, int what, Object obj)195     void registerForIccSlotStatusChanged(Handler h, int what, Object obj);
196     /** Unregister for ICC slot status changed event */
unregisterForIccSlotStatusChanged(Handler h)197     void unregisterForIccSlotStatusChanged(Handler h);
198 
registerForCallStateChanged(Handler h, int what, Object obj)199     void registerForCallStateChanged(Handler h, int what, Object obj);
unregisterForCallStateChanged(Handler h)200     void unregisterForCallStateChanged(Handler h);
201     /** Register for network state changed event */
registerForNetworkStateChanged(Handler h, int what, Object obj)202     void registerForNetworkStateChanged(Handler h, int what, Object obj);
203     /** Unregister from network state changed event */
unregisterForNetworkStateChanged(Handler h)204     void unregisterForNetworkStateChanged(Handler h);
205     /** Register for data call list changed event */
registerForDataCallListChanged(Handler h, int what, Object obj)206     void registerForDataCallListChanged(Handler h, int what, Object obj);
207     /** Unregister from data call list changed event */
unregisterForDataCallListChanged(Handler h)208     void unregisterForDataCallListChanged(Handler h);
209 
210     /** InCall voice privacy notifications */
registerForInCallVoicePrivacyOn(Handler h, int what, Object obj)211     void registerForInCallVoicePrivacyOn(Handler h, int what, Object obj);
unregisterForInCallVoicePrivacyOn(Handler h)212     void unregisterForInCallVoicePrivacyOn(Handler h);
registerForInCallVoicePrivacyOff(Handler h, int what, Object obj)213     void registerForInCallVoicePrivacyOff(Handler h, int what, Object obj);
unregisterForInCallVoicePrivacyOff(Handler h)214     void unregisterForInCallVoicePrivacyOff(Handler h);
215 
216     /** Single Radio Voice Call State progress notifications */
registerForSrvccStateChanged(Handler h, int what, Object obj)217     void registerForSrvccStateChanged(Handler h, int what, Object obj);
unregisterForSrvccStateChanged(Handler h)218     void unregisterForSrvccStateChanged(Handler h);
219 
220     /**
221      * Handlers for subscription status change indications.
222      *
223      * @param h Handler for subscription status change messages.
224      * @param what User-defined message code.
225      * @param obj User object.
226      */
registerForSubscriptionStatusChanged(Handler h, int what, Object obj)227     void registerForSubscriptionStatusChanged(Handler h, int what, Object obj);
unregisterForSubscriptionStatusChanged(Handler h)228     void unregisterForSubscriptionStatusChanged(Handler h);
229 
230     /**
231      * fires on any change in hardware configuration.
232      */
registerForHardwareConfigChanged(Handler h, int what, Object obj)233     void registerForHardwareConfigChanged(Handler h, int what, Object obj);
unregisterForHardwareConfigChanged(Handler h)234     void unregisterForHardwareConfigChanged(Handler h);
235 
236     /**
237      * unlike the register* methods, there's only one new 3GPP format SMS handler.
238      * if you need to unregister, you should also tell the radio to stop
239      * sending SMS's to you (via AT+CNMI)
240      *
241      * AsyncResult.result is a String containing the SMS PDU
242      */
setOnNewGsmSms(Handler h, int what, Object obj)243     void setOnNewGsmSms(Handler h, int what, Object obj);
unSetOnNewGsmSms(Handler h)244     void unSetOnNewGsmSms(Handler h);
245 
246     /**
247      * unlike the register* methods, there's only one new 3GPP2 format SMS handler.
248      * if you need to unregister, you should also tell the radio to stop
249      * sending SMS's to you (via AT+CNMI)
250      *
251      * AsyncResult.result is a String containing the SMS PDU
252      */
setOnNewCdmaSms(Handler h, int what, Object obj)253     void setOnNewCdmaSms(Handler h, int what, Object obj);
unSetOnNewCdmaSms(Handler h)254     void unSetOnNewCdmaSms(Handler h);
255 
256     /**
257      * Set the handler for SMS Cell Broadcast messages.
258      *
259      * AsyncResult.result is a byte array containing the SMS-CB PDU
260      */
setOnNewGsmBroadcastSms(Handler h, int what, Object obj)261     void setOnNewGsmBroadcastSms(Handler h, int what, Object obj);
unSetOnNewGsmBroadcastSms(Handler h)262     void unSetOnNewGsmBroadcastSms(Handler h);
263 
264     /**
265      * Register for NEW_SMS_ON_SIM unsolicited message
266      *
267      * AsyncResult.result is an int array containing the index of new SMS
268      */
setOnSmsOnSim(Handler h, int what, Object obj)269     void setOnSmsOnSim(Handler h, int what, Object obj);
unSetOnSmsOnSim(Handler h)270     void unSetOnSmsOnSim(Handler h);
271 
272     /**
273      * Register for NEW_SMS_STATUS_REPORT unsolicited message
274      *
275      * AsyncResult.result is a String containing the status report PDU
276      */
setOnSmsStatus(Handler h, int what, Object obj)277     void setOnSmsStatus(Handler h, int what, Object obj);
unSetOnSmsStatus(Handler h)278     void unSetOnSmsStatus(Handler h);
279 
280     /**
281      * unlike the register* methods, there's only one NITZ time handler
282      *
283      * AsyncResult.result is an Object[]
284      * ((Object[])AsyncResult.result)[0] is a String containing the NITZ time string
285      * ((Object[])AsyncResult.result)[1] is a Long containing the milliseconds since boot as
286      *                                   returned by elapsedRealtime() when this NITZ time
287      *                                   was posted.
288      *
289      * Please note that the delivery of this message may be delayed several
290      * seconds on system startup
291      */
setOnNITZTime(Handler h, int what, Object obj)292     void setOnNITZTime(Handler h, int what, Object obj);
unSetOnNITZTime(Handler h)293     void unSetOnNITZTime(Handler h);
294 
295     /**
296      * unlike the register* methods, there's only one USSD notify handler
297      *
298      * Represents the arrival of a USSD "notify" message, which may
299      * or may not have been triggered by a previous USSD send
300      *
301      * AsyncResult.result is a String[]
302      * ((String[])(AsyncResult.result))[0] contains status code
303      *      "0"   USSD-Notify -- text in ((const char **)data)[1]
304      *      "1"   USSD-Request -- text in ((const char **)data)[1]
305      *      "2"   Session terminated by network
306      *      "3"   other local client (eg, SIM Toolkit) has responded
307      *      "4"   Operation not supported
308      *      "5"   Network timeout
309      *
310      * ((String[])(AsyncResult.result))[1] contains the USSD message
311      * The numeric representations of these are in USSD_MODE_*
312      */
313 
setOnUSSD(Handler h, int what, Object obj)314     void setOnUSSD(Handler h, int what, Object obj);
unSetOnUSSD(Handler h)315     void unSetOnUSSD(Handler h);
316 
317     /**
318      * unlike the register* methods, there's only one signal strength handler
319      * AsyncResult.result is an int[2]
320      * response.obj.result[0] is received signal strength (0-31, 99)
321      * response.obj.result[1] is  bit error rate (0-7, 99)
322      * as defined in TS 27.007 8.5
323      */
324 
setOnSignalStrengthUpdate(Handler h, int what, Object obj)325     void setOnSignalStrengthUpdate(Handler h, int what, Object obj);
unSetOnSignalStrengthUpdate(Handler h)326     void unSetOnSignalStrengthUpdate(Handler h);
327 
328     /**
329      * Sets the handler for SIM/RUIM SMS storage full unsolicited message.
330      * Unlike the register* methods, there's only one notification handler
331      *
332      * @param h Handler for notification message.
333      * @param what User-defined message code.
334      * @param obj User object.
335      */
setOnIccSmsFull(Handler h, int what, Object obj)336     void setOnIccSmsFull(Handler h, int what, Object obj);
unSetOnIccSmsFull(Handler h)337     void unSetOnIccSmsFull(Handler h);
338 
339     /**
340      * Sets the handler for SIM Refresh notifications.
341      *
342      * @param h Handler for notification message.
343      * @param what User-defined message code.
344      * @param obj User object.
345      */
registerForIccRefresh(Handler h, int what, Object obj)346     void registerForIccRefresh(Handler h, int what, Object obj);
unregisterForIccRefresh(Handler h)347     void unregisterForIccRefresh(Handler h);
348 
setOnIccRefresh(Handler h, int what, Object obj)349     void setOnIccRefresh(Handler h, int what, Object obj);
unsetOnIccRefresh(Handler h)350     void unsetOnIccRefresh(Handler h);
351 
352     /**
353      * Sets the handler for RING notifications.
354      * Unlike the register* methods, there's only one notification handler
355      *
356      * @param h Handler for notification message.
357      * @param what User-defined message code.
358      * @param obj User object.
359      */
setOnCallRing(Handler h, int what, Object obj)360     void setOnCallRing(Handler h, int what, Object obj);
unSetOnCallRing(Handler h)361     void unSetOnCallRing(Handler h);
362 
363     /**
364      * Sets the handler for RESTRICTED_STATE changed notification,
365      * eg, for Domain Specific Access Control
366      * unlike the register* methods, there's only one signal strength handler
367      *
368      * AsyncResult.result is an int[1]
369      * response.obj.result[0] is a bitmask of RIL_RESTRICTED_STATE_* values
370      */
371 
setOnRestrictedStateChanged(Handler h, int what, Object obj)372     void setOnRestrictedStateChanged(Handler h, int what, Object obj);
unSetOnRestrictedStateChanged(Handler h)373     void unSetOnRestrictedStateChanged(Handler h);
374 
375     /**
376      * Sets the handler for Supplementary Service Notifications.
377      * Unlike the register* methods, there's only one notification handler
378      *
379      * @param h Handler for notification message.
380      * @param what User-defined message code.
381      * @param obj User object.
382      */
setOnSuppServiceNotification(Handler h, int what, Object obj)383     void setOnSuppServiceNotification(Handler h, int what, Object obj);
unSetOnSuppServiceNotification(Handler h)384     void unSetOnSuppServiceNotification(Handler h);
385 
386     /**
387      * Sets the handler for Session End Notifications for CAT.
388      * Unlike the register* methods, there's only one notification handler
389      *
390      * @param h Handler for notification message.
391      * @param what User-defined message code.
392      * @param obj User object.
393      */
setOnCatSessionEnd(Handler h, int what, Object obj)394     void setOnCatSessionEnd(Handler h, int what, Object obj);
unSetOnCatSessionEnd(Handler h)395     void unSetOnCatSessionEnd(Handler h);
396 
397     /**
398      * Sets the handler for Proactive Commands for CAT.
399      * Unlike the register* methods, there's only one notification handler
400      *
401      * @param h Handler for notification message.
402      * @param what User-defined message code.
403      * @param obj User object.
404      */
setOnCatProactiveCmd(Handler h, int what, Object obj)405     void setOnCatProactiveCmd(Handler h, int what, Object obj);
unSetOnCatProactiveCmd(Handler h)406     void unSetOnCatProactiveCmd(Handler h);
407 
408     /**
409      * Sets the handler for Event Notifications for CAT.
410      * Unlike the register* methods, there's only one notification handler
411      *
412      * @param h Handler for notification message.
413      * @param what User-defined message code.
414      * @param obj User object.
415      */
setOnCatEvent(Handler h, int what, Object obj)416     void setOnCatEvent(Handler h, int what, Object obj);
unSetOnCatEvent(Handler h)417     void unSetOnCatEvent(Handler h);
418 
419     /**
420      * Sets the handler for Call Set Up Notifications for CAT.
421      * Unlike the register* methods, there's only one notification handler
422      *
423      * @param h Handler for notification message.
424      * @param what User-defined message code.
425      * @param obj User object.
426      */
setOnCatCallSetUp(Handler h, int what, Object obj)427     void setOnCatCallSetUp(Handler h, int what, Object obj);
unSetOnCatCallSetUp(Handler h)428     void unSetOnCatCallSetUp(Handler h);
429 
430     /**
431      * Enables/disbables supplementary service related notifications from
432      * the network.
433      *
434      * @param enable true to enable notifications, false to disable.
435      * @param result Message to be posted when command completes.
436      */
setSuppServiceNotifications(boolean enable, Message result)437     void setSuppServiceNotifications(boolean enable, Message result);
438     //void unSetSuppServiceNotifications(Handler h);
439 
440     /**
441      * Sets the handler for Alpha Notification during STK Call Control.
442      * Unlike the register* methods, there's only one notification handler
443      *
444      * @param h Handler for notification message.
445      * @param what User-defined message code.
446      * @param obj User object.
447      */
setOnCatCcAlphaNotify(Handler h, int what, Object obj)448     void setOnCatCcAlphaNotify(Handler h, int what, Object obj);
unSetOnCatCcAlphaNotify(Handler h)449     void unSetOnCatCcAlphaNotify(Handler h);
450 
451     /**
452      * Sets the handler for notifying Suplementary Services (SS)
453      * Data during STK Call Control.
454      * Unlike the register* methods, there's only one notification handler
455      *
456      * @param h Handler for notification message.
457      * @param what User-defined message code.
458      * @param obj User object.
459      */
setOnSs(Handler h, int what, Object obj)460     void setOnSs(Handler h, int what, Object obj);
unSetOnSs(Handler h)461     void unSetOnSs(Handler h);
462 
463     /**
464      * Sets the handler for Event Notifications for CDMA Display Info.
465      * Unlike the register* methods, there's only one notification handler
466      *
467      * @param h Handler for notification message.
468      * @param what User-defined message code.
469      * @param obj User object.
470      */
registerForDisplayInfo(Handler h, int what, Object obj)471     void registerForDisplayInfo(Handler h, int what, Object obj);
unregisterForDisplayInfo(Handler h)472     void unregisterForDisplayInfo(Handler h);
473 
474     /**
475      * Sets the handler for Event Notifications for CallWaiting Info.
476      * Unlike the register* methods, there's only one notification handler
477      *
478      * @param h Handler for notification message.
479      * @param what User-defined message code.
480      * @param obj User object.
481      */
registerForCallWaitingInfo(Handler h, int what, Object obj)482     void registerForCallWaitingInfo(Handler h, int what, Object obj);
unregisterForCallWaitingInfo(Handler h)483     void unregisterForCallWaitingInfo(Handler h);
484 
485     /**
486      * Sets the handler for Event Notifications for Signal Info.
487      * Unlike the register* methods, there's only one notification handler
488      *
489      * @param h Handler for notification message.
490      * @param what User-defined message code.
491      * @param obj User object.
492      */
registerForSignalInfo(Handler h, int what, Object obj)493     void registerForSignalInfo(Handler h, int what, Object obj);
unregisterForSignalInfo(Handler h)494     void unregisterForSignalInfo(Handler h);
495 
496     /**
497      * Registers the handler for CDMA number information record
498      * Unlike the register* methods, there's only one notification handler
499      *
500      * @param h Handler for notification message.
501      * @param what User-defined message code.
502      * @param obj User object.
503      */
registerForNumberInfo(Handler h, int what, Object obj)504     void registerForNumberInfo(Handler h, int what, Object obj);
unregisterForNumberInfo(Handler h)505     void unregisterForNumberInfo(Handler h);
506 
507     /**
508      * Registers the handler for CDMA redirected number Information record
509      * Unlike the register* methods, there's only one notification handler
510      *
511      * @param h Handler for notification message.
512      * @param what User-defined message code.
513      * @param obj User object.
514      */
registerForRedirectedNumberInfo(Handler h, int what, Object obj)515     void registerForRedirectedNumberInfo(Handler h, int what, Object obj);
unregisterForRedirectedNumberInfo(Handler h)516     void unregisterForRedirectedNumberInfo(Handler h);
517 
518     /**
519      * Registers the handler for CDMA line control information record
520      * Unlike the register* methods, there's only one notification handler
521      *
522      * @param h Handler for notification message.
523      * @param what User-defined message code.
524      * @param obj User object.
525      */
registerForLineControlInfo(Handler h, int what, Object obj)526     void registerForLineControlInfo(Handler h, int what, Object obj);
unregisterForLineControlInfo(Handler h)527     void unregisterForLineControlInfo(Handler h);
528 
529     /**
530      * Registers the handler for CDMA T53 CLIR information record
531      * Unlike the register* methods, there's only one notification handler
532      *
533      * @param h Handler for notification message.
534      * @param what User-defined message code.
535      * @param obj User object.
536      */
registerFoT53ClirlInfo(Handler h, int what, Object obj)537     void registerFoT53ClirlInfo(Handler h, int what, Object obj);
unregisterForT53ClirInfo(Handler h)538     void unregisterForT53ClirInfo(Handler h);
539 
540     /**
541      * Registers the handler for CDMA T53 audio control information record
542      * Unlike the register* methods, there's only one notification handler
543      *
544      * @param h Handler for notification message.
545      * @param what User-defined message code.
546      * @param obj User object.
547      */
registerForT53AudioControlInfo(Handler h, int what, Object obj)548     void registerForT53AudioControlInfo(Handler h, int what, Object obj);
unregisterForT53AudioControlInfo(Handler h)549     void unregisterForT53AudioControlInfo(Handler h);
550 
551     /**
552      * Fires on if Modem enters Emergency Callback mode
553      */
setEmergencyCallbackMode(Handler h, int what, Object obj)554     void setEmergencyCallbackMode(Handler h, int what, Object obj);
555 
556      /**
557       * Fires on any CDMA OTA provision status change
558       */
registerForCdmaOtaProvision(Handler h,int what, Object obj)559      void registerForCdmaOtaProvision(Handler h,int what, Object obj);
unregisterForCdmaOtaProvision(Handler h)560      void unregisterForCdmaOtaProvision(Handler h);
561 
562      /**
563       * Registers the handler when out-band ringback tone is needed.<p>
564       *
565       *  Messages received from this:
566       *  Message.obj will be an AsyncResult
567       *  AsyncResult.userObj = obj
568       *  AsyncResult.result = boolean. <p>
569       */
registerForRingbackTone(Handler h, int what, Object obj)570      void registerForRingbackTone(Handler h, int what, Object obj);
unregisterForRingbackTone(Handler h)571      void unregisterForRingbackTone(Handler h);
572 
573      /**
574       * Registers the handler when mute/unmute need to be resent to get
575       * uplink audio during a call.<p>
576       *
577       * @param h Handler for notification message.
578       * @param what User-defined message code.
579       * @param obj User object.
580       *
581       */
registerForResendIncallMute(Handler h, int what, Object obj)582      void registerForResendIncallMute(Handler h, int what, Object obj);
unregisterForResendIncallMute(Handler h)583      void unregisterForResendIncallMute(Handler h);
584 
585      /**
586       * Registers the handler for when Cdma subscription changed events
587       *
588       * @param h Handler for notification message.
589       * @param what User-defined message code.
590       * @param obj User object.
591       *
592       */
registerForCdmaSubscriptionChanged(Handler h, int what, Object obj)593      void registerForCdmaSubscriptionChanged(Handler h, int what, Object obj);
unregisterForCdmaSubscriptionChanged(Handler h)594      void unregisterForCdmaSubscriptionChanged(Handler h);
595 
596      /**
597       * Registers the handler for when Cdma prl changed events
598       *
599       * @param h Handler for notification message.
600       * @param what User-defined message code.
601       * @param obj User object.
602       *
603       */
registerForCdmaPrlChanged(Handler h, int what, Object obj)604      void registerForCdmaPrlChanged(Handler h, int what, Object obj);
unregisterForCdmaPrlChanged(Handler h)605      void unregisterForCdmaPrlChanged(Handler h);
606 
607      /**
608       * Registers the handler for when Cdma prl changed events
609       *
610       * @param h Handler for notification message.
611       * @param what User-defined message code.
612       * @param obj User object.
613       *
614       */
registerForExitEmergencyCallbackMode(Handler h, int what, Object obj)615      void registerForExitEmergencyCallbackMode(Handler h, int what, Object obj);
unregisterForExitEmergencyCallbackMode(Handler h)616      void unregisterForExitEmergencyCallbackMode(Handler h);
617 
618      /**
619       * Registers the handler for RIL_UNSOL_RIL_CONNECT events.
620       *
621       * When ril connects or disconnects a message is sent to the registrant
622       * which contains an AsyncResult, ar, in msg.obj. The ar.result is an
623       * Integer which is the version of the ril or -1 if the ril disconnected.
624       *
625       * @param h Handler for notification message.
626       * @param what User-defined message code.
627       * @param obj User object.
628       */
registerForRilConnected(Handler h, int what, Object obj)629      void registerForRilConnected(Handler h, int what, Object obj);
unregisterForRilConnected(Handler h)630      void unregisterForRilConnected(Handler h);
631 
632     /**
633      * Supply the ICC PIN to the ICC card
634      *
635      *  returned message
636      *  retMsg.obj = AsyncResult ar
637      *  ar.exception carries exception on failure
638      *  This exception is CommandException with an error of PASSWORD_INCORRECT
639      *  if the password is incorrect
640      *
641      *  ar.result is an optional array of integers where the first entry
642      *  is the number of attempts remaining before the ICC will be PUK locked.
643      *
644      * ar.exception and ar.result are null on success
645      */
646 
supplyIccPin(String pin, Message result)647     void supplyIccPin(String pin, Message result);
648 
649     /**
650      * Supply the PIN for the app with this AID on the ICC card
651      *
652      *  AID (Application ID), See ETSI 102.221 8.1 and 101.220 4
653      *
654      *  returned message
655      *  retMsg.obj = AsyncResult ar
656      *  ar.exception carries exception on failure
657      *  This exception is CommandException with an error of PASSWORD_INCORRECT
658      *  if the password is incorrect
659      *
660      *  ar.result is an optional array of integers where the first entry
661      *  is the number of attempts remaining before the ICC will be PUK locked.
662      *
663      * ar.exception and ar.result are null on success
664      */
665 
supplyIccPinForApp(String pin, String aid, Message result)666     void supplyIccPinForApp(String pin, String aid, Message result);
667 
668     /**
669      * Supply the ICC PUK and newPin to the ICC card
670      *
671      *  returned message
672      *  retMsg.obj = AsyncResult ar
673      *  ar.exception carries exception on failure
674      *  This exception is CommandException with an error of PASSWORD_INCORRECT
675      *  if the password is incorrect
676      *
677      *  ar.result is an optional array of integers where the first entry
678      *  is the number of attempts remaining before the ICC is permanently disabled.
679      *
680      * ar.exception and ar.result are null on success
681      */
682 
supplyIccPuk(String puk, String newPin, Message result)683     void supplyIccPuk(String puk, String newPin, Message result);
684 
685     /**
686      * Supply the PUK, new pin for the app with this AID on the ICC card
687      *
688      *  AID (Application ID), See ETSI 102.221 8.1 and 101.220 4
689      *
690      *  retMsg.obj = AsyncResult ar
691      *  ar.exception carries exception on failure
692      *  This exception is CommandException with an error of PASSWORD_INCORRECT
693      *  if the password is incorrect
694      *
695      *  ar.result is an optional array of integers where the first entry
696      *  is the number of attempts remaining before the ICC is permanently disabled.
697      *
698      * ar.exception and ar.result are null on success
699      */
700 
supplyIccPukForApp(String puk, String newPin, String aid, Message result)701     void supplyIccPukForApp(String puk, String newPin, String aid, Message result);
702 
703     /**
704      * Supply the ICC PIN2 to the ICC card
705      * Only called following operation where ICC_PIN2 was
706      * returned as a a failure from a previous operation
707      *
708      *  returned message
709      *  retMsg.obj = AsyncResult ar
710      *  ar.exception carries exception on failure
711      *  This exception is CommandException with an error of PASSWORD_INCORRECT
712      *  if the password is incorrect
713      *
714      *  ar.result is an optional array of integers where the first entry
715      *  is the number of attempts remaining before the ICC will be PUK locked.
716      *
717      * ar.exception and ar.result are null on success
718      */
719 
supplyIccPin2(String pin2, Message result)720     void supplyIccPin2(String pin2, Message result);
721 
722     /**
723      * Supply the PIN2 for the app with this AID on the ICC card
724      * Only called following operation where ICC_PIN2 was
725      * returned as a a failure from a previous operation
726      *
727      *  AID (Application ID), See ETSI 102.221 8.1 and 101.220 4
728      *
729      *  returned message
730      *  retMsg.obj = AsyncResult ar
731      *  ar.exception carries exception on failure
732      *  This exception is CommandException with an error of PASSWORD_INCORRECT
733      *  if the password is incorrect
734      *
735      *  ar.result is an optional array of integers where the first entry
736      *  is the number of attempts remaining before the ICC will be PUK locked.
737      *
738      * ar.exception and ar.result are null on success
739      */
740 
supplyIccPin2ForApp(String pin2, String aid, Message result)741     void supplyIccPin2ForApp(String pin2, String aid, Message result);
742 
743     /**
744      * Supply the SIM PUK2 to the SIM card
745      * Only called following operation where SIM_PUK2 was
746      * returned as a a failure from a previous operation
747      *
748      *  returned message
749      *  retMsg.obj = AsyncResult ar
750      *  ar.exception carries exception on failure
751      *  This exception is CommandException with an error of PASSWORD_INCORRECT
752      *  if the password is incorrect
753      *
754      *  ar.result is an optional array of integers where the first entry
755      *  is the number of attempts remaining before the ICC is permanently disabled.
756      *
757      * ar.exception and ar.result are null on success
758      */
759 
supplyIccPuk2(String puk2, String newPin2, Message result)760     void supplyIccPuk2(String puk2, String newPin2, Message result);
761 
762     /**
763      * Supply the PUK2, newPin2 for the app with this AID on the ICC card
764      * Only called following operation where SIM_PUK2 was
765      * returned as a a failure from a previous operation
766      *
767      *  AID (Application ID), See ETSI 102.221 8.1 and 101.220 4
768      *
769      *  returned message
770      *  retMsg.obj = AsyncResult ar
771      *  ar.exception carries exception on failure
772      *  This exception is CommandException with an error of PASSWORD_INCORRECT
773      *  if the password is incorrect
774      *
775      *  ar.result is an optional array of integers where the first entry
776      *  is the number of attempts remaining before the ICC is permanently disabled.
777      *
778      * ar.exception and ar.result are null on success
779      */
780 
supplyIccPuk2ForApp(String puk2, String newPin2, String aid, Message result)781     void supplyIccPuk2ForApp(String puk2, String newPin2, String aid, Message result);
782 
783     // TODO: Add java doc and indicate that msg.arg1 contains the number of attempts remaining.
changeIccPin(String oldPin, String newPin, Message result)784     void changeIccPin(String oldPin, String newPin, Message result);
changeIccPinForApp(String oldPin, String newPin, String aidPtr, Message result)785     void changeIccPinForApp(String oldPin, String newPin, String aidPtr, Message result);
changeIccPin2(String oldPin2, String newPin2, Message result)786     void changeIccPin2(String oldPin2, String newPin2, Message result);
changeIccPin2ForApp(String oldPin2, String newPin2, String aidPtr, Message result)787     void changeIccPin2ForApp(String oldPin2, String newPin2, String aidPtr, Message result);
788 
changeBarringPassword(String facility, String oldPwd, String newPwd, Message result)789     void changeBarringPassword(String facility, String oldPwd, String newPwd, Message result);
790 
supplyNetworkDepersonalization(String netpin, Message result)791     void supplyNetworkDepersonalization(String netpin, Message result);
792 
793     /**
794      *  returned message
795      *  retMsg.obj = AsyncResult ar
796      *  ar.exception carries exception on failure
797      *  ar.userObject contains the orignal value of result.obj
798      *  ar.result contains a List of DriverCall
799      *      The ar.result List is sorted by DriverCall.index
800      */
getCurrentCalls(Message result)801     void getCurrentCalls (Message result);
802 
803     /**
804      *  returned message
805      *  retMsg.obj = AsyncResult ar
806      *  ar.exception carries exception on failure
807      *  ar.userObject contains the orignal value of result.obj
808      *  ar.result contains a List of DataCallResponse
809      *  @deprecated Do not use.
810      */
811     @Deprecated
getPDPContextList(Message result)812     void getPDPContextList(Message result);
813 
814     /**
815      *  returned message
816      *  retMsg.obj = AsyncResult ar
817      *  ar.exception carries exception on failure
818      *  ar.userObject contains the orignal value of result.obj
819      *  ar.result contains a List of DataCallResponse
820      */
getDataCallList(Message result)821     void getDataCallList(Message result);
822 
823     /**
824      *  returned message
825      *  retMsg.obj = AsyncResult ar
826      *  ar.exception carries exception on failure
827      *  ar.userObject contains the orignal value of result.obj
828      *  ar.result is null on success and failure
829      *
830      * CLIR_DEFAULT     == on "use subscription default value"
831      * CLIR_SUPPRESSION == on "CLIR suppression" (allow CLI presentation)
832      * CLIR_INVOCATION  == on "CLIR invocation" (restrict CLI presentation)
833      */
dial(String address, int clirMode, Message result)834     void dial (String address, int clirMode, Message result);
835 
836     /**
837      *  returned message
838      *  retMsg.obj = AsyncResult ar
839      *  ar.exception carries exception on failure
840      *  ar.userObject contains the orignal value of result.obj
841      *  ar.result is null on success and failure
842      *
843      * CLIR_DEFAULT     == on "use subscription default value"
844      * CLIR_SUPPRESSION == on "CLIR suppression" (allow CLI presentation)
845      * CLIR_INVOCATION  == on "CLIR invocation" (restrict CLI presentation)
846      */
dial(String address, int clirMode, UUSInfo uusInfo, Message result)847     void dial(String address, int clirMode, UUSInfo uusInfo, Message result);
848 
849     /**
850      *  returned message
851      *  retMsg.obj = AsyncResult ar
852      *  ar.exception carries exception on failure
853      *  ar.userObject contains the orignal value of result.obj
854      *  ar.result is String containing IMSI on success
855      */
getIMSI(Message result)856     void getIMSI(Message result);
857 
858     /**
859      *  returned message
860      *  retMsg.obj = AsyncResult ar
861      *  ar.exception carries exception on failure
862      *  ar.userObject contains the orignal value of result.obj
863      *  ar.result is String containing IMSI on success
864      */
getIMSIForApp(String aid, Message result)865     void getIMSIForApp(String aid, Message result);
866 
867     /**
868      *  returned message
869      *  retMsg.obj = AsyncResult ar
870      *  ar.exception carries exception on failure
871      *  ar.userObject contains the orignal value of result.obj
872      *  ar.result is String containing IMEI on success
873      */
getIMEI(Message result)874     void getIMEI(Message result);
875 
876     /**
877      *  returned message
878      *  retMsg.obj = AsyncResult ar
879      *  ar.exception carries exception on failure
880      *  ar.userObject contains the orignal value of result.obj
881      *  ar.result is String containing IMEISV on success
882      */
getIMEISV(Message result)883     void getIMEISV(Message result);
884 
885     /**
886      * Hang up one individual connection.
887      *  returned message
888      *  retMsg.obj = AsyncResult ar
889      *  ar.exception carries exception on failure
890      *  ar.userObject contains the orignal value of result.obj
891      *  ar.result is null on success and failure
892      *
893      *  3GPP 22.030 6.5.5
894      *  "Releases a specific active call X"
895      */
hangupConnection(int gsmIndex, Message result)896     void hangupConnection (int gsmIndex, Message result);
897 
898     /**
899      * 3GPP 22.030 6.5.5
900      *  "Releases all held calls or sets User Determined User Busy (UDUB)
901      *   for a waiting call."
902      *  ar.exception carries exception on failure
903      *  ar.userObject contains the orignal value of result.obj
904      *  ar.result is null on success and failure
905      */
hangupWaitingOrBackground(Message result)906     void hangupWaitingOrBackground (Message result);
907 
908     /**
909      * 3GPP 22.030 6.5.5
910      * "Releases all active calls (if any exist) and accepts
911      *  the other (held or waiting) call."
912      *
913      *  ar.exception carries exception on failure
914      *  ar.userObject contains the orignal value of result.obj
915      *  ar.result is null on success and failure
916      */
hangupForegroundResumeBackground(Message result)917     void hangupForegroundResumeBackground (Message result);
918 
919     /**
920      * 3GPP 22.030 6.5.5
921      * "Places all active calls (if any exist) on hold and accepts
922      *  the other (held or waiting) call."
923      *
924      *  ar.exception carries exception on failure
925      *  ar.userObject contains the orignal value of result.obj
926      *  ar.result is null on success and failure
927      */
switchWaitingOrHoldingAndActive(Message result)928     void switchWaitingOrHoldingAndActive (Message result);
929 
930     /**
931      * 3GPP 22.030 6.5.5
932      * "Adds a held call to the conversation"
933      *
934      *  ar.exception carries exception on failure
935      *  ar.userObject contains the orignal value of result.obj
936      *  ar.result is null on success and failure
937      */
conference(Message result)938     void conference (Message result);
939 
940     /**
941      * Set preferred Voice Privacy (VP).
942      *
943      * @param enable true is enhanced and false is normal VP
944      * @param result is a callback message
945      */
setPreferredVoicePrivacy(boolean enable, Message result)946     void setPreferredVoicePrivacy(boolean enable, Message result);
947 
948     /**
949      * Get currently set preferred Voice Privacy (VP) mode.
950      *
951      * @param result is a callback message
952      */
getPreferredVoicePrivacy(Message result)953     void getPreferredVoicePrivacy(Message result);
954 
955     /**
956      * 3GPP 22.030 6.5.5
957      * "Places all active calls on hold except call X with which
958      *  communication shall be supported."
959      */
separateConnection(int gsmIndex, Message result)960     void separateConnection (int gsmIndex, Message result);
961 
962     /**
963      *
964      *  ar.exception carries exception on failure
965      *  ar.userObject contains the orignal value of result.obj
966      *  ar.result is null on success and failure
967      */
acceptCall(Message result)968     void acceptCall (Message result);
969 
970     /**
971      *  also known as UDUB
972      *  ar.exception carries exception on failure
973      *  ar.userObject contains the orignal value of result.obj
974      *  ar.result is null on success and failure
975      */
rejectCall(Message result)976     void rejectCall (Message result);
977 
978     /**
979      * 3GPP 22.030 6.5.5
980      * "Connects the two calls and disconnects the subscriber from both calls"
981      *
982      *  ar.exception carries exception on failure
983      *  ar.userObject contains the orignal value of result.obj
984      *  ar.result is null on success and failure
985      */
explicitCallTransfer(Message result)986     void explicitCallTransfer (Message result);
987 
988     /**
989      * cause code returned as int[0] in Message.obj.response
990      * Returns integer cause code defined in TS 24.008
991      * Annex H or closest approximation.
992      * Most significant codes:
993      * - Any defined in 22.001 F.4 (for generating busy/congestion)
994      * - Cause 68: ACM >= ACMMax
995      */
getLastCallFailCause(Message result)996     void getLastCallFailCause (Message result);
997 
998 
999     /**
1000      * Reason for last PDP context deactivate or failure to activate
1001      * cause code returned as int[0] in Message.obj.response
1002      * returns an integer cause code defined in TS 24.008
1003      * section 6.1.3.1.3 or close approximation
1004      * @deprecated Do not use.
1005      */
1006     @Deprecated
getLastPdpFailCause(Message result)1007     void getLastPdpFailCause (Message result);
1008 
1009     /**
1010      * The preferred new alternative to getLastPdpFailCause
1011      * that is also CDMA-compatible.
1012      */
getLastDataCallFailCause(Message result)1013     void getLastDataCallFailCause (Message result);
1014 
setMute(boolean enableMute, Message response)1015     void setMute (boolean enableMute, Message response);
1016 
getMute(Message response)1017     void getMute (Message response);
1018 
1019     /**
1020      * response.obj is an AsyncResult
1021      * response.obj.result is an int[2]
1022      * response.obj.result[0] is received signal strength (0-31, 99)
1023      * response.obj.result[1] is  bit error rate (0-7, 99)
1024      * as defined in TS 27.007 8.5
1025      */
getSignalStrength(Message response)1026     void getSignalStrength (Message response);
1027 
1028 
1029     /**
1030      * response.obj.result is an int[3]
1031      * response.obj.result[0] is registration state 0-5 from TS 27.007 7.2
1032      * response.obj.result[1] is LAC if registered or -1 if not
1033      * response.obj.result[2] is CID if registered or -1 if not
1034      * valid LAC and CIDs are 0x0000 - 0xffff
1035      *
1036      * Please note that registration state 4 ("unknown") is treated
1037      * as "out of service" above
1038      */
getVoiceRegistrationState(Message response)1039     void getVoiceRegistrationState (Message response);
1040 
1041     /**
1042      * response.obj.result is an int[3]
1043      * response.obj.result[0] is registration state 0-5 from TS 27.007 7.2
1044      * response.obj.result[1] is LAC if registered or -1 if not
1045      * response.obj.result[2] is CID if registered or -1 if not
1046      * valid LAC and CIDs are 0x0000 - 0xffff
1047      *
1048      * Please note that registration state 4 ("unknown") is treated
1049      * as "out of service" above
1050      */
getDataRegistrationState(Message response)1051     void getDataRegistrationState (Message response);
1052 
1053     /**
1054      * response.obj.result is a String[3]
1055      * response.obj.result[0] is long alpha or null if unregistered
1056      * response.obj.result[1] is short alpha or null if unregistered
1057      * response.obj.result[2] is numeric or null if unregistered
1058      */
getOperator(Message response)1059     void getOperator(Message response);
1060 
1061     /**
1062      *  ar.exception carries exception on failure
1063      *  ar.userObject contains the orignal value of result.obj
1064      *  ar.result is null on success and failure
1065      */
sendDtmf(char c, Message result)1066     void sendDtmf(char c, Message result);
1067 
1068 
1069     /**
1070      *  ar.exception carries exception on failure
1071      *  ar.userObject contains the orignal value of result.obj
1072      *  ar.result is null on success and failure
1073      */
startDtmf(char c, Message result)1074     void startDtmf(char c, Message result);
1075 
1076     /**
1077      *  ar.exception carries exception on failure
1078      *  ar.userObject contains the orignal value of result.obj
1079      *  ar.result is null on success and failure
1080      */
stopDtmf(Message result)1081     void stopDtmf(Message result);
1082 
1083     /**
1084      *  ar.exception carries exception on failure
1085      *  ar.userObject contains the orignal value of result.obj
1086      *  ar.result is null on success and failure
1087      */
sendBurstDtmf(String dtmfString, int on, int off, Message result)1088     void sendBurstDtmf(String dtmfString, int on, int off, Message result);
1089 
1090     /**
1091      * smscPDU is smsc address in PDU form GSM BCD format prefixed
1092      *      by a length byte (as expected by TS 27.005) or NULL for default SMSC
1093      * pdu is SMS in PDU format as an ASCII hex string
1094      *      less the SMSC address
1095      */
sendSMS(String smscPDU, String pdu, Message response)1096     void sendSMS (String smscPDU, String pdu, Message response);
1097 
1098     /**
1099      * Send an SMS message, Identical to sendSMS,
1100      * except that more messages are expected to be sent soon
1101      * smscPDU is smsc address in PDU form GSM BCD format prefixed
1102      *      by a length byte (as expected by TS 27.005) or NULL for default SMSC
1103      * pdu is SMS in PDU format as an ASCII hex string
1104      *      less the SMSC address
1105      */
sendSMSExpectMore(String smscPDU, String pdu, Message response)1106     void sendSMSExpectMore (String smscPDU, String pdu, Message response);
1107 
1108     /**
1109      * @param pdu is CDMA-SMS in internal pseudo-PDU format
1110      * @param response sent when operation completes
1111      */
sendCdmaSms(byte[] pdu, Message response)1112     void sendCdmaSms(byte[] pdu, Message response);
1113 
1114     /**
1115      * send SMS over IMS with 3GPP/GSM SMS format
1116      * @param smscPDU is smsc address in PDU form GSM BCD format prefixed
1117      *      by a length byte (as expected by TS 27.005) or NULL for default SMSC
1118      * @param pdu is SMS in PDU format as an ASCII hex string
1119      *      less the SMSC address
1120      * @param retry indicates if this is a retry; 0 == not retry, nonzero = retry
1121      * @param messageRef valid field if retry is set to nonzero.
1122      *        Contains messageRef from RIL_SMS_Response corresponding to failed MO SMS
1123      * @param response sent when operation completes
1124      */
sendImsGsmSms(String smscPDU, String pdu, int retry, int messageRef, Message response)1125     void sendImsGsmSms (String smscPDU, String pdu, int retry, int messageRef,
1126             Message response);
1127 
1128     /**
1129      * send SMS over IMS with 3GPP2/CDMA SMS format
1130      * @param pdu is CDMA-SMS in internal pseudo-PDU format
1131      * @param response sent when operation completes
1132      * @param retry indicates if this is a retry; 0 == not retry, nonzero = retry
1133      * @param messageRef valid field if retry is set to nonzero.
1134      *        Contains messageRef from RIL_SMS_Response corresponding to failed MO SMS
1135      * @param response sent when operation completes
1136      */
sendImsCdmaSms(byte[] pdu, int retry, int messageRef, Message response)1137     void sendImsCdmaSms(byte[] pdu, int retry, int messageRef, Message response);
1138 
1139     /**
1140      * Deletes the specified SMS record from SIM memory (EF_SMS).
1141      *
1142      * @param index index of the SMS record to delete
1143      * @param response sent when operation completes
1144      */
deleteSmsOnSim(int index, Message response)1145     void deleteSmsOnSim(int index, Message response);
1146 
1147     /**
1148      * Deletes the specified SMS record from RUIM memory (EF_SMS in DF_CDMA).
1149      *
1150      * @param index index of the SMS record to delete
1151      * @param response sent when operation completes
1152      */
deleteSmsOnRuim(int index, Message response)1153     void deleteSmsOnRuim(int index, Message response);
1154 
1155     /**
1156      * Writes an SMS message to SIM memory (EF_SMS).
1157      *
1158      * @param status status of message on SIM.  One of:
1159      *                  SmsManger.STATUS_ON_ICC_READ
1160      *                  SmsManger.STATUS_ON_ICC_UNREAD
1161      *                  SmsManger.STATUS_ON_ICC_SENT
1162      *                  SmsManger.STATUS_ON_ICC_UNSENT
1163      * @param pdu message PDU, as hex string
1164      * @param response sent when operation completes.
1165      *                  response.obj will be an AsyncResult, and will indicate
1166      *                  any error that may have occurred (eg, out of memory).
1167      */
writeSmsToSim(int status, String smsc, String pdu, Message response)1168     void writeSmsToSim(int status, String smsc, String pdu, Message response);
1169 
writeSmsToRuim(int status, String pdu, Message response)1170     void writeSmsToRuim(int status, String pdu, Message response);
1171 
setRadioPower(boolean on, Message response)1172     void setRadioPower(boolean on, Message response);
1173 
acknowledgeLastIncomingGsmSms(boolean success, int cause, Message response)1174     void acknowledgeLastIncomingGsmSms(boolean success, int cause, Message response);
1175 
acknowledgeLastIncomingCdmaSms(boolean success, int cause, Message response)1176     void acknowledgeLastIncomingCdmaSms(boolean success, int cause, Message response);
1177 
1178     /**
1179      * Acknowledge successful or failed receipt of last incoming SMS,
1180      * including acknowledgement TPDU to send as the RP-User-Data element
1181      * of the RP-ACK or RP-ERROR PDU.
1182      *
1183      * @param success true to send RP-ACK, false to send RP-ERROR
1184      * @param ackPdu the acknowledgement TPDU in hexadecimal format
1185      * @param response sent when operation completes.
1186      */
acknowledgeIncomingGsmSmsWithPdu(boolean success, String ackPdu, Message response)1187     void acknowledgeIncomingGsmSmsWithPdu(boolean success, String ackPdu, Message response);
1188 
1189     /**
1190      * parameters equivalent to 27.007 AT+CRSM command
1191      * response.obj will be an AsyncResult
1192      * response.obj.result will be an IccIoResult on success
1193      */
iccIO(int command, int fileid, String path, int p1, int p2, int p3, String data, String pin2, Message response)1194     void iccIO (int command, int fileid, String path, int p1, int p2, int p3,
1195             String data, String pin2, Message response);
1196 
1197     /**
1198      * parameters equivalent to 27.007 AT+CRSM command
1199      * response.obj will be an AsyncResult
1200      * response.obj.userObj will be a IccIoResult on success
1201      */
iccIOForApp(int command, int fileid, String path, int p1, int p2, int p3, String data, String pin2, String aid, Message response)1202     void iccIOForApp (int command, int fileid, String path, int p1, int p2, int p3,
1203             String data, String pin2, String aid, Message response);
1204 
1205     /**
1206      * (AsyncResult)response.obj).result is an int[] with element [0] set to
1207      * 1 for "CLIP is provisioned", and 0 for "CLIP is not provisioned".
1208      *
1209      * @param response is callback message
1210      */
1211 
queryCLIP(Message response)1212     void queryCLIP(Message response);
1213 
1214     /**
1215      * response.obj will be a an int[2]
1216      *
1217      * response.obj[0] will be TS 27.007 +CLIR parameter 'n'
1218      *  0 presentation indicator is used according to the subscription of the CLIR service
1219      *  1 CLIR invocation
1220      *  2 CLIR suppression
1221      *
1222      * response.obj[1] will be TS 27.007 +CLIR parameter 'm'
1223      *  0 CLIR not provisioned
1224      *  1 CLIR provisioned in permanent mode
1225      *  2 unknown (e.g. no network, etc.)
1226      *  3 CLIR temporary mode presentation restricted
1227      *  4 CLIR temporary mode presentation allowed
1228      */
1229 
getCLIR(Message response)1230     void getCLIR(Message response);
1231 
1232     /**
1233      * clirMode is one of the CLIR_* constants above
1234      *
1235      * response.obj is null
1236      */
1237 
setCLIR(int clirMode, Message response)1238     void setCLIR(int clirMode, Message response);
1239 
1240     /**
1241      * (AsyncResult)response.obj).result is an int[] with element [0] set to
1242      * 0 for disabled, 1 for enabled.
1243      *
1244      * @param serviceClass is a sum of SERVICE_CLASS_*
1245      * @param response is callback message
1246      */
1247 
queryCallWaiting(int serviceClass, Message response)1248     void queryCallWaiting(int serviceClass, Message response);
1249 
1250     /**
1251      * @param enable is true to enable, false to disable
1252      * @param serviceClass is a sum of SERVICE_CLASS_*
1253      * @param response is callback message
1254      */
1255 
setCallWaiting(boolean enable, int serviceClass, Message response)1256     void setCallWaiting(boolean enable, int serviceClass, Message response);
1257 
1258     /**
1259      * @param action is one of CF_ACTION_*
1260      * @param cfReason is one of CF_REASON_*
1261      * @param serviceClass is a sum of SERVICE_CLASSS_*
1262      */
setCallForward(int action, int cfReason, int serviceClass, String number, int timeSeconds, Message response)1263     void setCallForward(int action, int cfReason, int serviceClass,
1264                 String number, int timeSeconds, Message response);
1265 
1266     /**
1267      * cfReason is one of CF_REASON_*
1268      *
1269      * ((AsyncResult)response.obj).result will be an array of
1270      * CallForwardInfo's
1271      *
1272      * An array of length 0 means "disabled for all codes"
1273      */
queryCallForwardStatus(int cfReason, int serviceClass, String number, Message response)1274     void queryCallForwardStatus(int cfReason, int serviceClass,
1275             String number, Message response);
1276 
setNetworkSelectionModeAutomatic(Message response)1277     void setNetworkSelectionModeAutomatic(Message response);
1278 
setNetworkSelectionModeManual(String operatorNumeric, Message response)1279     void setNetworkSelectionModeManual(String operatorNumeric, Message response);
1280 
1281     /**
1282      * Queries whether the current network selection mode is automatic
1283      * or manual
1284      *
1285      * ((AsyncResult)response.obj).result  is an int[] with element [0] being
1286      * a 0 for automatic selection and a 1 for manual selection
1287      */
1288 
getNetworkSelectionMode(Message response)1289     void getNetworkSelectionMode(Message response);
1290 
1291     /**
1292      * Queries the currently available networks
1293      *
1294      * ((AsyncResult)response.obj).result is a List of NetworkInfo objects
1295      */
getAvailableNetworks(Message response)1296     void getAvailableNetworks(Message response);
1297 
1298     /**
1299      * Starts a radio network scan
1300      *
1301      * ((AsyncResult)response.obj).result is a NetworkScanResult object
1302      */
startNetworkScan(NetworkScanRequest nsr, Message response)1303     void startNetworkScan(NetworkScanRequest nsr, Message response);
1304 
1305     /**
1306      * Stops the ongoing network scan
1307      *
1308      * ((AsyncResult)response.obj).result is a NetworkScanResult object
1309      *
1310      */
stopNetworkScan(Message response)1311     void stopNetworkScan(Message response);
1312 
1313     /**
1314      * Gets the baseband version
1315      */
getBasebandVersion(Message response)1316     void getBasebandVersion(Message response);
1317 
1318     /**
1319      * (AsyncResult)response.obj).result will be an Integer representing
1320      * the sum of enabled service classes (sum of SERVICE_CLASS_*)
1321      *
1322      * @param facility one of CB_FACILTY_*
1323      * @param password password or "" if not required
1324      * @param serviceClass is a sum of SERVICE_CLASS_*
1325      * @param response is callback message
1326      */
1327 
queryFacilityLock(String facility, String password, int serviceClass, Message response)1328     void queryFacilityLock (String facility, String password, int serviceClass,
1329         Message response);
1330 
1331     /**
1332      * (AsyncResult)response.obj).result will be an Integer representing
1333      * the sum of enabled service classes (sum of SERVICE_CLASS_*) for the
1334      * application with appId.
1335      *
1336      * @param facility one of CB_FACILTY_*
1337      * @param password password or "" if not required
1338      * @param serviceClass is a sum of SERVICE_CLASS_*
1339      * @param appId is application Id or null if none
1340      * @param response is callback message
1341      */
1342 
queryFacilityLockForApp(String facility, String password, int serviceClass, String appId, Message response)1343     void queryFacilityLockForApp(String facility, String password, int serviceClass, String appId,
1344         Message response);
1345 
1346     /**
1347      * @param facility one of CB_FACILTY_*
1348      * @param lockState true means lock, false means unlock
1349      * @param password password or "" if not required
1350      * @param serviceClass is a sum of SERVICE_CLASS_*
1351      * @param response is callback message
1352      */
setFacilityLock(String facility, boolean lockState, String password, int serviceClass, Message response)1353     void setFacilityLock (String facility, boolean lockState, String password,
1354         int serviceClass, Message response);
1355 
1356     /**
1357      * Set the facility lock for the app with this AID on the ICC card.
1358      *
1359      * @param facility one of CB_FACILTY_*
1360      * @param lockState true means lock, false means unlock
1361      * @param password password or "" if not required
1362      * @param serviceClass is a sum of SERVICE_CLASS_*
1363      * @param appId is application Id or null if none
1364      * @param response is callback message
1365      */
setFacilityLockForApp(String facility, boolean lockState, String password, int serviceClass, String appId, Message response)1366     void setFacilityLockForApp(String facility, boolean lockState, String password,
1367         int serviceClass, String appId, Message response);
1368 
sendUSSD(String ussdString, Message response)1369     void sendUSSD (String ussdString, Message response);
1370 
1371     /**
1372      * Cancels a pending USSD session if one exists.
1373      * @param response callback message
1374      */
cancelPendingUssd(Message response)1375     void cancelPendingUssd (Message response);
1376 
resetRadio(Message result)1377     void resetRadio(Message result);
1378 
1379     /**
1380      * Assign a specified band for RF configuration.
1381      *
1382      * @param bandMode one of BM_*_BAND
1383      * @param response is callback message
1384      */
setBandMode(int bandMode, Message response)1385     void setBandMode (int bandMode, Message response);
1386 
1387     /**
1388      * Query the list of band mode supported by RF.
1389      *
1390      * @param response is callback message
1391      *        ((AsyncResult)response.obj).result  is an int[] where int[0] is
1392      *        the size of the array and the rest of each element representing
1393      *        one available BM_*_BAND
1394      */
queryAvailableBandMode(Message response)1395     void queryAvailableBandMode (Message response);
1396 
1397     /**
1398      *  Requests to set the preferred network type for searching and registering
1399      * (CS/PS domain, RAT, and operation mode)
1400      * @param networkType one of  NT_*_TYPE
1401      * @param response is callback message
1402      */
setPreferredNetworkType(int networkType , Message response)1403     void setPreferredNetworkType(int networkType , Message response);
1404 
1405      /**
1406      *  Query the preferred network type setting
1407      *
1408      * @param response is callback message to report one of  NT_*_TYPE
1409      */
getPreferredNetworkType(Message response)1410     void getPreferredNetworkType(Message response);
1411 
1412     /**
1413      * Query neighboring cell ids
1414      *
1415      * @param response s callback message to cell ids
1416      * @param workSource calling WorkSource
1417      */
getNeighboringCids(Message response, WorkSource workSource)1418     default void getNeighboringCids(Message response, WorkSource workSource){}
1419 
1420     /**
1421      * Request to enable/disable network state change notifications when
1422      * location information (lac and/or cid) has changed.
1423      *
1424      * @param enable true to enable, false to disable
1425      * @param response callback message
1426      */
setLocationUpdates(boolean enable, Message response)1427     void setLocationUpdates(boolean enable, Message response);
1428 
1429     /**
1430      * Gets the default SMSC address.
1431      *
1432      * @param result Callback message contains the SMSC address.
1433      */
getSmscAddress(Message result)1434     void getSmscAddress(Message result);
1435 
1436     /**
1437      * Sets the default SMSC address.
1438      *
1439      * @param address new SMSC address
1440      * @param result Callback message is empty on completion
1441      */
setSmscAddress(String address, Message result)1442     void setSmscAddress(String address, Message result);
1443 
1444     /**
1445      * Indicates whether there is storage available for new SMS messages.
1446      * @param available true if storage is available
1447      * @param result callback message
1448      */
reportSmsMemoryStatus(boolean available, Message result)1449     void reportSmsMemoryStatus(boolean available, Message result);
1450 
1451     /**
1452      * Indicates to the vendor ril that StkService is running
1453      * and is ready to receive RIL_UNSOL_STK_XXXX commands.
1454      *
1455      * @param result callback message
1456      */
reportStkServiceIsRunning(Message result)1457     void reportStkServiceIsRunning(Message result);
1458 
invokeOemRilRequestRaw(byte[] data, Message response)1459     void invokeOemRilRequestRaw(byte[] data, Message response);
1460 
1461     /**
1462      * Sends carrier specific information to the vendor ril that can be used to
1463      * encrypt the IMSI and IMPI.
1464      *
1465      * @param publicKey the public key of the carrier used to encrypt IMSI/IMPI.
1466      * @param keyIdentifier the key identifier is optional information that is carrier
1467      *        specific.
1468      * @param response callback message
1469      */
setCarrierInfoForImsiEncryption(ImsiEncryptionInfo imsiEncryptionInfo, Message response)1470     void setCarrierInfoForImsiEncryption(ImsiEncryptionInfo imsiEncryptionInfo,
1471                                          Message response);
1472 
invokeOemRilRequestStrings(String[] strings, Message response)1473     void invokeOemRilRequestStrings(String[] strings, Message response);
1474 
1475     /**
1476      * Fires when RIL_UNSOL_OEM_HOOK_RAW is received from the RIL.
1477      */
setOnUnsolOemHookRaw(Handler h, int what, Object obj)1478     void setOnUnsolOemHookRaw(Handler h, int what, Object obj);
unSetOnUnsolOemHookRaw(Handler h)1479     void unSetOnUnsolOemHookRaw(Handler h);
1480 
1481     /**
1482      * Send TERMINAL RESPONSE to the SIM, after processing a proactive command
1483      * sent by the SIM.
1484      *
1485      * @param contents  String containing SAT/USAT response in hexadecimal
1486      *                  format starting with first byte of response data. See
1487      *                  TS 102 223 for details.
1488      * @param response  Callback message
1489      */
sendTerminalResponse(String contents, Message response)1490     public void sendTerminalResponse(String contents, Message response);
1491 
1492     /**
1493      * Send ENVELOPE to the SIM, after processing a proactive command sent by
1494      * the SIM.
1495      *
1496      * @param contents  String containing SAT/USAT response in hexadecimal
1497      *                  format starting with command tag. See TS 102 223 for
1498      *                  details.
1499      * @param response  Callback message
1500      */
sendEnvelope(String contents, Message response)1501     public void sendEnvelope(String contents, Message response);
1502 
1503     /**
1504      * Send ENVELOPE to the SIM, such as an SMS-PP data download envelope
1505      * for a SIM data download message. This method has one difference
1506      * from {@link #sendEnvelope}: The SW1 and SW2 status bytes from the UICC response
1507      * are returned along with the response data.
1508      *
1509      * response.obj will be an AsyncResult
1510      * response.obj.result will be an IccIoResult on success
1511      *
1512      * @param contents  String containing SAT/USAT response in hexadecimal
1513      *                  format starting with command tag. See TS 102 223 for
1514      *                  details.
1515      * @param response  Callback message
1516      */
sendEnvelopeWithStatus(String contents, Message response)1517     public void sendEnvelopeWithStatus(String contents, Message response);
1518 
1519     /**
1520      * Accept or reject the call setup request from SIM.
1521      *
1522      * @param accept   true if the call is to be accepted, false otherwise.
1523      * @param response Callback message
1524      */
handleCallSetupRequestFromSim(boolean accept, Message response)1525     public void handleCallSetupRequestFromSim(boolean accept, Message response);
1526 
1527     /**
1528      * Activate or deactivate cell broadcast SMS for GSM.
1529      *
1530      * @param activate
1531      *            true = activate, false = deactivate
1532      * @param result Callback message is empty on completion
1533      */
setGsmBroadcastActivation(boolean activate, Message result)1534     public void setGsmBroadcastActivation(boolean activate, Message result);
1535 
1536     /**
1537      * Configure cell broadcast SMS for GSM.
1538      *
1539      * @param response Callback message is empty on completion
1540      */
setGsmBroadcastConfig(SmsBroadcastConfigInfo[] config, Message response)1541     public void setGsmBroadcastConfig(SmsBroadcastConfigInfo[] config, Message response);
1542 
1543     /**
1544      * Query the current configuration of cell broadcast SMS of GSM.
1545      *
1546      * @param response
1547      *        Callback message contains the configuration from the modem
1548      *        on completion
1549      */
getGsmBroadcastConfig(Message response)1550     public void getGsmBroadcastConfig(Message response);
1551 
1552     //***** new Methods for CDMA support
1553 
1554     /**
1555      * Request the device ESN / MEID / IMEI / IMEISV.
1556      * "response" is const char **
1557      *   [0] is IMEI if GSM subscription is available
1558      *   [1] is IMEISV if GSM subscription is available
1559      *   [2] is ESN if CDMA subscription is available
1560      *   [3] is MEID if CDMA subscription is available
1561      */
getDeviceIdentity(Message response)1562     public void getDeviceIdentity(Message response);
1563 
1564     /**
1565      * Request the device MDN / H_SID / H_NID / MIN.
1566      * "response" is const char **
1567      *   [0] is MDN if CDMA subscription is available
1568      *   [1] is a comma separated list of H_SID (Home SID) in decimal format
1569      *       if CDMA subscription is available
1570      *   [2] is a comma separated list of H_NID (Home NID) in decimal format
1571      *       if CDMA subscription is available
1572      *   [3] is MIN (10 digits, MIN2+MIN1) if CDMA subscription is available
1573      */
getCDMASubscription(Message response)1574     public void getCDMASubscription(Message response);
1575 
1576     /**
1577      * Send Flash Code.
1578      * "response" is is NULL
1579      *   [0] is a FLASH string
1580      */
sendCDMAFeatureCode(String FeatureCode, Message response)1581     public void sendCDMAFeatureCode(String FeatureCode, Message response);
1582 
1583     /** Set the Phone type created */
setPhoneType(int phoneType)1584     void setPhoneType(int phoneType);
1585 
1586     /**
1587      *  Query the CDMA roaming preference setting
1588      *
1589      * @param response is callback message to report one of  CDMA_RM_*
1590      */
queryCdmaRoamingPreference(Message response)1591     void queryCdmaRoamingPreference(Message response);
1592 
1593     /**
1594      *  Requests to set the CDMA roaming preference
1595      * @param cdmaRoamingType one of  CDMA_RM_*
1596      * @param response is callback message
1597      */
setCdmaRoamingPreference(int cdmaRoamingType, Message response)1598     void setCdmaRoamingPreference(int cdmaRoamingType, Message response);
1599 
1600     /**
1601      *  Requests to set the CDMA subscription mode
1602      * @param cdmaSubscriptionType one of  CDMA_SUBSCRIPTION_*
1603      * @param response is callback message
1604      */
setCdmaSubscriptionSource(int cdmaSubscriptionType, Message response)1605     void setCdmaSubscriptionSource(int cdmaSubscriptionType, Message response);
1606 
1607     /**
1608      *  Requests to get the CDMA subscription srouce
1609      * @param response is callback message
1610      */
getCdmaSubscriptionSource(Message response)1611     void getCdmaSubscriptionSource(Message response);
1612 
1613     /**
1614      *  Set the TTY mode
1615      *
1616      * @param ttyMode one of the following:
1617      * - {@link com.android.internal.telephony.Phone#TTY_MODE_OFF}
1618      * - {@link com.android.internal.telephony.Phone#TTY_MODE_FULL}
1619      * - {@link com.android.internal.telephony.Phone#TTY_MODE_HCO}
1620      * - {@link com.android.internal.telephony.Phone#TTY_MODE_VCO}
1621      * @param response is callback message
1622      */
setTTYMode(int ttyMode, Message response)1623     void setTTYMode(int ttyMode, Message response);
1624 
1625     /**
1626      *  Query the TTY mode
1627      * (AsyncResult)response.obj).result is an int[] with element [0] set to
1628      * tty mode:
1629      * - {@link com.android.internal.telephony.Phone#TTY_MODE_OFF}
1630      * - {@link com.android.internal.telephony.Phone#TTY_MODE_FULL}
1631      * - {@link com.android.internal.telephony.Phone#TTY_MODE_HCO}
1632      * - {@link com.android.internal.telephony.Phone#TTY_MODE_VCO}
1633      * @param response is callback message
1634      */
queryTTYMode(Message response)1635     void queryTTYMode(Message response);
1636 
1637     /**
1638      * Setup a packet data connection On successful completion, the result
1639      * message will return a SetupDataResult object containing the connection information.
1640      *
1641      * @param accessNetworkType
1642      *            Access network to use. Values is one of AccessNetworkConstants.AccessNetworkType.
1643      * @param dataProfile
1644      *            Data profile for data call setup
1645      * @param isRoaming
1646      *            Device is roaming or not
1647      * @param allowRoaming
1648      *            Flag indicating data roaming is enabled or not
1649      * @param reason
1650      *            The reason for data setup
1651      * @param linkProperties
1652      *            If the reason is for handover, this indicates the link properties of the existing
1653      *            data connection
1654      * @param result
1655      *            Callback message
1656      */
setupDataCall(int accessNetworkType, DataProfile dataProfile, boolean isRoaming, boolean allowRoaming, int reason, LinkProperties linkProperties, Message result)1657     void setupDataCall(int accessNetworkType, DataProfile dataProfile, boolean isRoaming,
1658                        boolean allowRoaming, int reason, LinkProperties linkProperties,
1659                        Message result);
1660 
1661     /**
1662      * Deactivate packet data connection
1663      *
1664      * @param cid
1665      *            The connection ID
1666      * @param reason
1667      *            Data disconnect reason.
1668      * @param result
1669      *            Callback message is empty on completion
1670      */
deactivateDataCall(int cid, int reason, Message result)1671     public void deactivateDataCall(int cid, int reason, Message result);
1672 
1673     /**
1674      * Activate or deactivate cell broadcast SMS for CDMA.
1675      *
1676      * @param activate
1677      *            true = activate, false = deactivate
1678      * @param result
1679      *            Callback message is empty on completion
1680      */
setCdmaBroadcastActivation(boolean activate, Message result)1681     public void setCdmaBroadcastActivation(boolean activate, Message result);
1682 
1683     /**
1684      * Configure cdma cell broadcast SMS.
1685      *
1686      * @param response
1687      *            Callback message is empty on completion
1688      */
setCdmaBroadcastConfig(CdmaSmsBroadcastConfigInfo[] configs, Message response)1689     public void setCdmaBroadcastConfig(CdmaSmsBroadcastConfigInfo[] configs, Message response);
1690 
1691     /**
1692      * Query the current configuration of cdma cell broadcast SMS.
1693      *
1694      * @param result
1695      *            Callback message contains the configuration from the modem on completion
1696      */
getCdmaBroadcastConfig(Message result)1697     public void getCdmaBroadcastConfig(Message result);
1698 
1699     /**
1700      *  Requests the radio's system selection module to exit emergency callback mode.
1701      *  This function should only be called from for CDMA.
1702      *
1703      * @param response callback message
1704      */
exitEmergencyCallbackMode(Message response)1705     public void exitEmergencyCallbackMode(Message response);
1706 
1707     /**
1708      * Request the status of the ICC and UICC cards.
1709      *
1710      * @param result
1711      *          Callback message containing {@link IccCardStatus} structure for the card.
1712      */
getIccCardStatus(Message result)1713     public void getIccCardStatus(Message result);
1714 
1715     /**
1716      * Request the status of all the physical UICC slots.
1717      *
1718      * @param result Callback message containing a {@link java.util.ArrayList} of
1719      * {@link com.android.internal.telephony.uicc.IccSlotStatus} instances for all the slots.
1720      */
getIccSlotsStatus(Message result)1721     void getIccSlotsStatus(Message result);
1722 
1723     /**
1724      * Set the mapping from logical slots to physical slots.
1725      *
1726      * @param physicalSlots Mapping from logical slots to physical slots.
1727      * @param result Callback message is empty on completion.
1728      */
setLogicalToPhysicalSlotMapping(int[] physicalSlots, Message result)1729     void setLogicalToPhysicalSlotMapping(int[] physicalSlots, Message result);
1730 
1731     /**
1732      * Return if the current radio is LTE on CDMA. This
1733      * is a tri-state return value as for a period of time
1734      * the mode may be unknown.
1735      *
1736      * @return {@link PhoneConstants#LTE_ON_CDMA_UNKNOWN}, {@link PhoneConstants#LTE_ON_CDMA_FALSE}
1737      * or {@link PhoneConstants#LTE_ON_CDMA_TRUE}
1738      */
getLteOnCdmaMode()1739     public int getLteOnCdmaMode();
1740 
1741     /**
1742      * Request the SIM application on the UICC to perform authentication
1743      * challenge/response algorithm. The data string and challenge response are
1744      * Base64 encoded Strings.
1745      * Can support EAP-SIM, EAP-AKA with results encoded per 3GPP TS 31.102.
1746      *
1747      * @param authContext is the P2 parameter that specifies the authentication context per 3GPP TS
1748      *                    31.102 (Section 7.1.2)
1749      * @param data authentication challenge data
1750      * @param aid used to determine which application/slot to send the auth command to. See ETSI
1751      *            102.221 8.1 and 101.220 4
1752      * @param response a callback message with the String response in the obj field
1753      */
requestIccSimAuthentication(int authContext, String data, String aid, Message response)1754     public void requestIccSimAuthentication(int authContext, String data, String aid, Message response);
1755 
1756     /**
1757      * Get the current Voice Radio Technology.
1758      *
1759      * AsyncResult.result is an int array with the first value
1760      * being one of the ServiceState.RIL_RADIO_TECHNOLOGY_xxx values.
1761      *
1762      * @param result is sent back to handler and result.obj is a AsyncResult
1763      */
getVoiceRadioTechnology(Message result)1764     void getVoiceRadioTechnology(Message result);
1765 
1766     /**
1767      * Return the current set of CellInfo records
1768      *
1769      * AsyncResult.result is a of Collection<CellInfo>
1770      *
1771      * @param result is sent back to handler and result.obj is a AsyncResult
1772      * @param workSource calling WorkSource
1773      */
getCellInfoList(Message result, WorkSource workSource)1774     default void getCellInfoList(Message result, WorkSource workSource) {}
1775 
1776     /**
1777      * Sets the minimum time in milli-seconds between when RIL_UNSOL_CELL_INFO_LIST
1778      * should be invoked.
1779      *
1780      * The default, 0, means invoke RIL_UNSOL_CELL_INFO_LIST when any of the reported
1781      * information changes. Setting the value to INT_MAX(0x7fffffff) means never issue
1782      * A RIL_UNSOL_CELL_INFO_LIST.
1783      *
1784      *
1785 
1786      * @param rateInMillis is sent back to handler and result.obj is a AsyncResult
1787      * @param response.obj is AsyncResult ar when sent to associated handler
1788      *                        ar.exception carries exception on failure or null on success
1789      *                        otherwise the error.
1790      * @param workSource calling WorkSource
1791      */
setCellInfoListRate(int rateInMillis, Message response, WorkSource workSource)1792     default void setCellInfoListRate(int rateInMillis, Message response, WorkSource workSource){}
1793 
1794     /**
1795      * Fires when RIL_UNSOL_CELL_INFO_LIST is received from the RIL.
1796      */
registerForCellInfoList(Handler h, int what, Object obj)1797     void registerForCellInfoList(Handler h, int what, Object obj);
unregisterForCellInfoList(Handler h)1798     void unregisterForCellInfoList(Handler h);
1799 
1800     /**
1801      * Fires when a new {@link android.telephony.PhysicalChannelConfig} list is received from the
1802      * RIL.
1803      */
registerForPhysicalChannelConfiguration(Handler h, int what, Object obj)1804     void registerForPhysicalChannelConfiguration(Handler h, int what, Object obj);
1805 
1806     /**
1807      * Unregisters the handler for {@link android.telephony.PhysicalChannelConfig} updates.
1808      */
unregisterForPhysicalChannelConfiguration(Handler h)1809     void unregisterForPhysicalChannelConfiguration(Handler h);
1810 
1811     /**
1812      * Set Initial Attach Apn
1813      *
1814      * @param dataProfile
1815      *            data profile for initial APN attach
1816      * @param isRoaming
1817      *            indicating the device is roaming or not
1818      * @param result
1819      *            callback message contains the information of SUCCESS/FAILURE
1820      */
setInitialAttachApn(DataProfile dataProfile, boolean isRoaming, Message result)1821     void setInitialAttachApn(DataProfile dataProfile, boolean isRoaming, Message result);
1822 
1823     /**
1824      * Set data profiles in modem
1825      *
1826      * @param dps
1827      *            Array of the data profiles set to modem
1828      * @param isRoaming
1829      *            Indicating if the device is roaming or not
1830      * @param result
1831      *            callback message contains the information of SUCCESS/FAILURE
1832      */
setDataProfile(DataProfile[] dps, boolean isRoaming, Message result)1833     void setDataProfile(DataProfile[] dps, boolean isRoaming, Message result);
1834 
1835     /**
1836      * Notifiy that we are testing an emergency call
1837      */
testingEmergencyCall()1838     public void testingEmergencyCall();
1839 
1840     /**
1841      * Open a logical channel to the SIM.
1842      *
1843      * Input parameters equivalent to TS 27.007 AT+CCHO command.
1844      *
1845      * @param AID Application id. See ETSI 102.221 and 101.220.
1846      * @param p2 P2 parameter (described in ISO 7816-4).
1847      * @param response Callback message. response.obj will be an int [1] with
1848      *            element [0] set to the id of the logical channel.
1849      */
iccOpenLogicalChannel(String AID, int p2, Message response)1850     public void iccOpenLogicalChannel(String AID, int p2, Message response);
1851 
1852     /**
1853      * Close a previously opened logical channel to the SIM.
1854      *
1855      * Input parameters equivalent to TS 27.007 AT+CCHC command.
1856      *
1857      * @param channel Channel id. Id of the channel to be closed.
1858      * @param response Callback message.
1859      */
iccCloseLogicalChannel(int channel, Message response)1860     public void iccCloseLogicalChannel(int channel, Message response);
1861 
1862     /**
1863      * Exchange APDUs with the SIM on a logical channel.
1864      *
1865      * Input parameters equivalent to TS 27.007 AT+CGLA command.
1866      *
1867      * @param channel Channel id of the channel to use for communication. Has to
1868      *            be greater than zero.
1869      * @param cla Class of the APDU command.
1870      * @param instruction Instruction of the APDU command.
1871      * @param p1 P1 value of the APDU command.
1872      * @param p2 P2 value of the APDU command.
1873      * @param p3 P3 value of the APDU command. If p3 is negative a 4 byte APDU
1874      *            is sent to the SIM.
1875      * @param data Data to be sent with the APDU.
1876      * @param response Callback message. response.obj.userObj will be
1877      *            an IccIoResult on success.
1878      */
iccTransmitApduLogicalChannel(int channel, int cla, int instruction, int p1, int p2, int p3, String data, Message response)1879     public void iccTransmitApduLogicalChannel(int channel, int cla, int instruction,
1880             int p1, int p2, int p3, String data, Message response);
1881 
1882     /**
1883      * Exchange APDUs with the SIM on a basic channel.
1884      *
1885      * Input parameters equivalent to TS 27.007 AT+CSIM command.
1886      *
1887      * @param cla Class of the APDU command.
1888      * @param instruction Instruction of the APDU command.
1889      * @param p1 P1 value of the APDU command.
1890      * @param p2 P2 value of the APDU command.
1891      * @param p3 P3 value of the APDU command. If p3 is negative a 4 byte APDU
1892      *            is sent to the SIM.
1893      * @param data Data to be sent with the APDU.
1894      * @param response Callback message. response.obj.userObj will be
1895      *            an IccIoResult on success.
1896      */
iccTransmitApduBasicChannel(int cla, int instruction, int p1, int p2, int p3, String data, Message response)1897     public void iccTransmitApduBasicChannel(int cla, int instruction, int p1, int p2,
1898             int p3, String data, Message response);
1899 
1900     /**
1901      * Read one of the NV items defined in {@link RadioNVItems} / {@code ril_nv_items.h}.
1902      * Used for device configuration by some CDMA operators.
1903      *
1904      * @param itemID the ID of the item to read
1905      * @param response callback message with the String response in the obj field
1906      */
nvReadItem(int itemID, Message response)1907     void nvReadItem(int itemID, Message response);
1908 
1909     /**
1910      * Write one of the NV items defined in {@link RadioNVItems} / {@code ril_nv_items.h}.
1911      * Used for device configuration by some CDMA operators.
1912      *
1913      * @param itemID the ID of the item to read
1914      * @param itemValue the value to write, as a String
1915      * @param response Callback message.
1916      */
nvWriteItem(int itemID, String itemValue, Message response)1917     void nvWriteItem(int itemID, String itemValue, Message response);
1918 
1919     /**
1920      * Update the CDMA Preferred Roaming List (PRL) in the radio NV storage.
1921      * Used for device configuration by some CDMA operators.
1922      *
1923      * @param preferredRoamingList byte array containing the new PRL
1924      * @param response Callback message.
1925      */
nvWriteCdmaPrl(byte[] preferredRoamingList, Message response)1926     void nvWriteCdmaPrl(byte[] preferredRoamingList, Message response);
1927 
1928     /**
1929      * Perform the specified type of NV config reset. The radio will be taken offline
1930      * and the device must be rebooted after erasing the NV. Used for device
1931      * configuration by some CDMA operators.
1932      *
1933      * @param resetType reset type: 1: reload NV reset, 2: erase NV reset, 3: factory NV reset
1934      * @param response Callback message.
1935      */
nvResetConfig(int resetType, Message response)1936     void nvResetConfig(int resetType, Message response);
1937 
1938     /**
1939      *  returned message
1940      *  retMsg.obj = AsyncResult ar
1941      *  ar.exception carries exception on failure
1942      *  ar.userObject contains the orignal value of result.obj
1943      *  ar.result contains a List of HardwareConfig
1944      */
getHardwareConfig(Message result)1945     void getHardwareConfig (Message result);
1946 
1947     /**
1948      * @return version of the ril.
1949      */
getRilVersion()1950     int getRilVersion();
1951 
1952    /**
1953      * Sets user selected subscription at Modem.
1954      *
1955      * @param slotId
1956      *          Slot.
1957      * @param appIndex
1958      *          Application index in the card.
1959      * @param subId
1960      *          Indicates subscription 0 or subscription 1.
1961      * @param subStatus
1962      *          Activation status, 1 = activate and 0 = deactivate.
1963      * @param result
1964      *          Callback message contains the information of SUCCESS/FAILURE.
1965      */
1966     // FIXME Update the doc and consider modifying the request to make more generic.
setUiccSubscription(int slotId, int appIndex, int subId, int subStatus, Message result)1967     public void setUiccSubscription(int slotId, int appIndex, int subId, int subStatus,
1968             Message result);
1969 
1970     /**
1971      * Tells the modem if data is allowed or not.
1972      *
1973      * @param allowed
1974      *          true = allowed, false = not alowed
1975      * @param result
1976      *          Callback message contains the information of SUCCESS/FAILURE.
1977      */
1978     // FIXME We may need to pass AID and slotid also
setDataAllowed(boolean allowed, Message result)1979     public void setDataAllowed(boolean allowed, Message result);
1980 
1981     /**
1982      * Inform RIL that the device is shutting down
1983      *
1984      * @param result Callback message contains the information of SUCCESS/FAILURE
1985      */
requestShutdown(Message result)1986     public void requestShutdown(Message result);
1987 
1988     /**
1989      *  Set phone radio type and access technology.
1990      *
1991      *  @param rc the phone radio capability defined in
1992      *         RadioCapability. It's a input object used to transfer parameter to logic modem
1993      *
1994      *  @param result Callback message.
1995      */
setRadioCapability(RadioCapability rc, Message result)1996     public void setRadioCapability(RadioCapability rc, Message result);
1997 
1998     /**
1999      *  Get phone radio capability
2000      *
2001      *  @param result Callback message.
2002      */
getRadioCapability(Message result)2003     public void getRadioCapability(Message result);
2004 
2005     /**
2006      * Registers the handler when phone radio capability is changed.
2007      *
2008      * @param h Handler for notification message.
2009      * @param what User-defined message code.
2010      * @param obj User object.
2011      */
registerForRadioCapabilityChanged(Handler h, int what, Object obj)2012     public void registerForRadioCapabilityChanged(Handler h, int what, Object obj);
2013 
2014     /**
2015      * Unregister for notifications when phone radio capability is changed.
2016      *
2017      * @param h Handler to be removed from the registrant list.
2018      */
unregisterForRadioCapabilityChanged(Handler h)2019     public void unregisterForRadioCapabilityChanged(Handler h);
2020 
2021     /**
2022      * Start LCE (Link Capacity Estimation) service with a desired reporting interval.
2023      *
2024      * @param reportIntervalMs
2025      *        LCE info reporting interval (ms).
2026      *
2027      * @param result Callback message contains the current LCE status.
2028      * {byte status, int actualIntervalMs}
2029      */
startLceService(int reportIntervalMs, boolean pullMode, Message result)2030     public void startLceService(int reportIntervalMs, boolean pullMode, Message result);
2031 
2032     /**
2033      * Stop LCE service.
2034      *
2035      * @param result Callback message contains the current LCE status:
2036      * {byte status, int actualIntervalMs}
2037      *
2038      */
stopLceService(Message result)2039     public void stopLceService(Message result);
2040 
2041     /**
2042      * Pull LCE service for capacity data.
2043      *
2044      * @param result Callback message contains the capacity info:
2045      * {int capacityKbps, byte confidenceLevel, byte lceSuspendedTemporarily}
2046      */
pullLceData(Message result)2047     public void pullLceData(Message result);
2048 
2049     /**
2050      * Register a LCE info listener.
2051      *
2052      * @param h Handler for notification message.
2053      * @param what User-defined message code.
2054      * @param obj User object.
2055      */
registerForLceInfo(Handler h, int what, Object obj)2056     void registerForLceInfo(Handler h, int what, Object obj);
2057 
2058     /**
2059      * Unregister the LCE Info listener.
2060      *
2061      * @param h handle to be removed.
2062      */
unregisterForLceInfo(Handler h)2063     void unregisterForLceInfo(Handler h);
2064 
2065     /**
2066      *
2067      * Get modem activity info and stats
2068      *
2069      * @param result Callback message contains the modem activity information
2070      */
getModemActivityInfo(Message result)2071     public void getModemActivityInfo(Message result);
2072 
2073     /**
2074      * Set allowed carriers
2075      *
2076      * @param carriers Allowed carriers
2077      * @param result Callback message contains the number of carriers set successfully
2078      */
setAllowedCarriers(List<CarrierIdentifier> carriers, Message result)2079     public void setAllowedCarriers(List<CarrierIdentifier> carriers, Message result);
2080 
2081     /**
2082      * Get allowed carriers
2083      *
2084      * @param result Callback message contains the allowed carriers
2085      */
getAllowedCarriers(Message result)2086     public void getAllowedCarriers(Message result);
2087 
2088     /**
2089      * Register for unsolicited PCO data.  This information is carrier-specific,
2090      * opaque binary blobs destined for carrier apps for interpretation.
2091      *
2092      * @param h Handler for notification message.
2093      * @param what User-defined message code.
2094      * @param obj User object.
2095      */
registerForPcoData(Handler h, int what, Object obj)2096     public void registerForPcoData(Handler h, int what, Object obj);
2097 
2098     /**
2099      * Unregister for PCO data.
2100      *
2101      * @param h handler to be removed
2102      */
unregisterForPcoData(Handler h)2103     public void unregisterForPcoData(Handler h);
2104 
2105     /**
2106      * Register for modem reset indication.
2107      *
2108      * @param h  Handler for the notification message
2109      * @param what User-defined message code
2110      * @param obj User object
2111      */
registerForModemReset(Handler h, int what, Object obj)2112     void registerForModemReset(Handler h, int what, Object obj);
2113 
2114     /**
2115      * Unregister for modem reset
2116      *
2117      * @param h handler to be removed
2118      */
unregisterForModemReset(Handler h)2119     void unregisterForModemReset(Handler h);
2120 
2121     /**
2122      * Send the updated device state
2123      *
2124      * @param stateType Device state type
2125      * @param state True if enabled, otherwise disabled
2126      * @param result callback message contains the information of SUCCESS/FAILURE
2127      */
sendDeviceState(int stateType, boolean state, Message result)2128     void sendDeviceState(int stateType, boolean state, Message result);
2129 
2130     /**
2131      * Send the device state to the modem
2132      *
2133      * @param filter unsolicited response filter. See DeviceStateMonitor.UnsolicitedResponseFilter
2134      * @param result callback message contains the information of SUCCESS/FAILURE
2135      */
setUnsolResponseFilter(int filter, Message result)2136     void setUnsolResponseFilter(int filter, Message result);
2137 
2138     /**
2139      * Send the signal strength reporting criteria to the modem.
2140      *
2141      * @param hysteresisMs A hysteresis time in milliseconds. A value of 0 disables hysteresis.
2142      * @param hysteresisDb An interval in dB defining the required magnitude change between reports.
2143      *     A value of 0 disables hysteresis.
2144      * @param thresholdsDbm An array of trigger thresholds in dBm. A size of 0 disables thresholds.
2145      * @param ran RadioAccessNetwork for which to apply criteria.
2146      * @param result callback message contains the information of SUCCESS/FAILURE
2147      */
setSignalStrengthReportingCriteria(int hysteresisMs, int hysteresisDb, int[] thresholdsDbm, int ran, Message result)2148     void setSignalStrengthReportingCriteria(int hysteresisMs, int hysteresisDb, int[] thresholdsDbm,
2149             int ran, Message result);
2150 
2151     /**
2152      * Send the link capacity reporting criteria to the modem
2153      *
2154      * @param hysteresisMs A hysteresis time in milliseconds. A value of 0 disables hysteresis.
2155      * @param hysteresisDlKbps An interval in kbps defining the required magnitude change between DL
2156      *     reports. A value of 0 disables hysteresis.
2157      * @param hysteresisUlKbps An interval in kbps defining the required magnitude change between UL
2158      *     reports. A value of 0 disables hysteresis.
2159      * @param thresholdsDlKbps An array of trigger thresholds in kbps for downlink reports. A size
2160      *     of 0 disables thresholds.
2161      * @param thresholdsUlKbps An array of trigger thresholds in kbps for uplink reports. A size
2162      *     of 0 disables thresholds.
2163      * @param ran RadioAccessNetwork for which to apply criteria.
2164      * @param result callback message contains the information of SUCCESS/FAILURE
2165      */
setLinkCapacityReportingCriteria(int hysteresisMs, int hysteresisDlKbps, int hysteresisUlKbps, int[] thresholdsDlKbps, int[] thresholdsUlKbps, int ran, Message result)2166     void setLinkCapacityReportingCriteria(int hysteresisMs, int hysteresisDlKbps,
2167             int hysteresisUlKbps, int[] thresholdsDlKbps, int[] thresholdsUlKbps, int ran,
2168             Message result);
2169 
2170     /**
2171      * Set SIM card power up or down
2172      *
2173      * @param state  State of SIM (power down, power up, pass through)
2174      * - {@link android.telephony.TelephonyManager#CARD_POWER_DOWN}
2175      * - {@link android.telephony.TelephonyManager#CARD_POWER_UP}
2176      * - {@link android.telephony.TelephonyManager#CARD_POWER_UP_PASS_THROUGH}
2177      * @param result callback message contains the information of SUCCESS/FAILURE
2178      */
setSimCardPower(int state, Message result)2179     void setSimCardPower(int state, Message result);
2180 
2181     /**
2182      * Register for unsolicited Carrier Public Key.
2183      *
2184      * @param h Handler for notification message.
2185      * @param what User-defined message code.
2186      * @param obj User object.
2187      */
registerForCarrierInfoForImsiEncryption(Handler h, int what, Object obj)2188     void registerForCarrierInfoForImsiEncryption(Handler h, int what, Object obj);
2189 
2190     /**
2191      * DeRegister for unsolicited Carrier Public Key.
2192      *
2193      * @param h Handler for notification message.
2194      */
unregisterForCarrierInfoForImsiEncryption(Handler h)2195     void unregisterForCarrierInfoForImsiEncryption(Handler h);
2196 
2197     /**
2198      * Register for unsolicited Network Scan result.
2199      *
2200      * @param h Handler for notification message.
2201      * @param what User-defined message code.
2202      * @param obj User object.
2203      */
registerForNetworkScanResult(Handler h, int what, Object obj)2204     void registerForNetworkScanResult(Handler h, int what, Object obj);
2205 
2206     /**
2207      * DeRegister for unsolicited Network Scan result.
2208      *
2209      * @param h Handler for notification message.
2210      */
unregisterForNetworkScanResult(Handler h)2211     void unregisterForNetworkScanResult(Handler h);
2212 
2213     /**
2214      * Register for unsolicited NATT Keepalive Status Indications
2215      *
2216      * @param h Handler for notification message.
2217      * @param what User-defined message code.
2218      * @param obj User object.
2219      */
registerForNattKeepaliveStatus(Handler h, int what, Object obj)2220     void registerForNattKeepaliveStatus(Handler h, int what, Object obj);
2221 
2222     /**
2223      * Deregister for unsolicited NATT Keepalive Status Indications.
2224      *
2225      * @param h Handler for notification message.
2226      */
unregisterForNattKeepaliveStatus(Handler h)2227     void unregisterForNattKeepaliveStatus(Handler h);
2228 
2229     /**
2230      * Start sending NATT Keepalive packets on a specified data connection
2231      *
2232      * @param contextId cid that identifies the data connection for this keepalive
2233      * @param packetData the keepalive packet data description
2234      * @param intervalMillis a time interval in ms between keepalive packet transmissions
2235      * @param result a Message to return to the requester
2236      */
startNattKeepalive( int contextId, KeepalivePacketData packetData, int intervalMillis, Message result)2237     void startNattKeepalive(
2238             int contextId, KeepalivePacketData packetData, int intervalMillis, Message result);
2239 
2240     /**
2241      * Stop sending NATT Keepalive packets on a specified data connection
2242      *
2243      * @param sessionHandle the keepalive session handle (from the modem) to stop
2244      * @param result a Message to return to the requester
2245      */
stopNattKeepalive(int sessionHandle, Message result)2246     void stopNattKeepalive(int sessionHandle, Message result);
2247 
getClientRequestStats()2248     default public List<ClientRequestStats> getClientRequestStats() {
2249         return null;
2250     }
2251 }
2252