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
17package com.android.internal.telephony;
18
19import com.android.internal.telephony.gsm.SmsBroadcastConfigInfo;
20
21import android.os.Message;
22import android.os.Handler;
23
24/**
25 * {@hide}
26 */
27public interface CommandsInterface {
28    enum RadioState {
29        RADIO_OFF(0),         /* Radio explictly powered off (eg CFUN=0) */
30        RADIO_UNAVAILABLE(0), /* Radio unavailable (eg, resetting or not booted) */
31        SIM_NOT_READY(1),     /* Radio is on, but the SIM interface is not ready */
32        SIM_LOCKED_OR_ABSENT(1),  /* SIM PIN locked, PUK required, network
33                                     personalization, or SIM absent */
34        SIM_READY(1),         /* Radio is on and SIM interface is available */
35        RUIM_NOT_READY(2),    /* Radio is on, but the RUIM interface is not ready */
36        RUIM_READY(2),        /* Radio is on and the RUIM interface is available */
37        RUIM_LOCKED_OR_ABSENT(2), /* RUIM PIN locked, PUK required, network
38                                     personalization locked, or RUIM absent */
39        NV_NOT_READY(3),      /* Radio is on, but the NV interface is not available */
40        NV_READY(3);          /* Radio is on and the NV interface is available */
41
42        public boolean isOn() /* and available...*/ {
43            return this == SIM_NOT_READY
44                    || this == SIM_LOCKED_OR_ABSENT
45                    || this == SIM_READY
46                    || this == RUIM_NOT_READY
47                    || this == RUIM_READY
48                    || this == RUIM_LOCKED_OR_ABSENT
49                    || this == NV_NOT_READY
50                    || this == NV_READY;
51        }
52        private int stateType;
53        private RadioState (int type) {
54            stateType = type;
55        }
56
57        public int getType() {
58            return stateType;
59        }
60
61        public boolean isAvailable() {
62            return this != RADIO_UNAVAILABLE;
63        }
64
65        public boolean isSIMReady() {
66            return this == SIM_READY;
67        }
68
69        public boolean isRUIMReady() {
70            return this == RUIM_READY;
71        }
72
73        public boolean isNVReady() {
74            return this == NV_READY;
75        }
76
77        public boolean isGsm() {
78            if (BaseCommands.getLteOnCdmaModeStatic() == Phone.LTE_ON_CDMA_TRUE) {
79                return false;
80            } else {
81                return this == SIM_NOT_READY
82                        || this == SIM_LOCKED_OR_ABSENT
83                        || this == SIM_READY;
84            }
85        }
86
87        public boolean isCdma() {
88            if (BaseCommands.getLteOnCdmaModeStatic() == Phone.LTE_ON_CDMA_TRUE) {
89                return true;
90            } else {
91                return this ==  RUIM_NOT_READY
92                        || this == RUIM_READY
93                        || this == RUIM_LOCKED_OR_ABSENT
94                        || this == NV_NOT_READY
95                        || this == NV_READY;
96            }
97        }
98    }
99
100    //***** Constants
101
102    // Used as parameter to dial() and setCLIR() below
103    static final int CLIR_DEFAULT = 0;      // "use subscription default value"
104    static final int CLIR_INVOCATION = 1;   // (restrict CLI presentation)
105    static final int CLIR_SUPPRESSION = 2;  // (allow CLI presentation)
106
107
108    // Used as parameters for call forward methods below
109    static final int CF_ACTION_DISABLE          = 0;
110    static final int CF_ACTION_ENABLE           = 1;
111//  static final int CF_ACTION_UNUSED           = 2;
112    static final int CF_ACTION_REGISTRATION     = 3;
113    static final int CF_ACTION_ERASURE          = 4;
114
115    static final int CF_REASON_UNCONDITIONAL    = 0;
116    static final int CF_REASON_BUSY             = 1;
117    static final int CF_REASON_NO_REPLY         = 2;
118    static final int CF_REASON_NOT_REACHABLE    = 3;
119    static final int CF_REASON_ALL              = 4;
120    static final int CF_REASON_ALL_CONDITIONAL  = 5;
121
122    // Used for call barring methods below
123    static final String CB_FACILITY_BAOC         = "AO";
124    static final String CB_FACILITY_BAOIC        = "OI";
125    static final String CB_FACILITY_BAOICxH      = "OX";
126    static final String CB_FACILITY_BAIC         = "AI";
127    static final String CB_FACILITY_BAICr        = "IR";
128    static final String CB_FACILITY_BA_ALL       = "AB";
129    static final String CB_FACILITY_BA_MO        = "AG";
130    static final String CB_FACILITY_BA_MT        = "AC";
131    static final String CB_FACILITY_BA_SIM       = "SC";
132    static final String CB_FACILITY_BA_FD        = "FD";
133
134
135    // Used for various supp services apis
136    // See 27.007 +CCFC or +CLCK
137    static final int SERVICE_CLASS_NONE     = 0; // no user input
138    static final int SERVICE_CLASS_VOICE    = (1 << 0);
139    static final int SERVICE_CLASS_DATA     = (1 << 1); //synonym for 16+32+64+128
140    static final int SERVICE_CLASS_FAX      = (1 << 2);
141    static final int SERVICE_CLASS_SMS      = (1 << 3);
142    static final int SERVICE_CLASS_DATA_SYNC = (1 << 4);
143    static final int SERVICE_CLASS_DATA_ASYNC = (1 << 5);
144    static final int SERVICE_CLASS_PACKET   = (1 << 6);
145    static final int SERVICE_CLASS_PAD      = (1 << 7);
146    static final int SERVICE_CLASS_MAX      = (1 << 7); // Max SERVICE_CLASS value
147
148    // Numeric representation of string values returned
149    // by messages sent to setOnUSSD handler
150    static final int USSD_MODE_NOTIFY       = 0;
151    static final int USSD_MODE_REQUEST      = 1;
152
153    // SIM Refresh results, passed up from RIL.
154    static final int SIM_REFRESH_FILE_UPDATED   = 0;  // Single file updated
155    static final int SIM_REFRESH_INIT           = 1;  // SIM initialized; reload all
156    static final int SIM_REFRESH_RESET          = 2;  // SIM reset; may be locked
157
158    // GSM SMS fail cause for acknowledgeLastIncomingSMS. From TS 23.040, 9.2.3.22.
159    static final int GSM_SMS_FAIL_CAUSE_MEMORY_CAPACITY_EXCEEDED    = 0xD3;
160    static final int GSM_SMS_FAIL_CAUSE_USIM_APP_TOOLKIT_BUSY       = 0xD4;
161    static final int GSM_SMS_FAIL_CAUSE_USIM_DATA_DOWNLOAD_ERROR    = 0xD5;
162    static final int GSM_SMS_FAIL_CAUSE_UNSPECIFIED_ERROR           = 0xFF;
163
164    // CDMA SMS fail cause for acknowledgeLastIncomingCdmaSms.  From TS N.S0005, 6.5.2.125.
165    static final int CDMA_SMS_FAIL_CAUSE_INVALID_TELESERVICE_ID     = 4;
166    static final int CDMA_SMS_FAIL_CAUSE_RESOURCE_SHORTAGE          = 35;
167    static final int CDMA_SMS_FAIL_CAUSE_OTHER_TERMINAL_PROBLEM     = 39;
168    static final int CDMA_SMS_FAIL_CAUSE_ENCODING_PROBLEM           = 96;
169
170    //***** Methods
171
172    RadioState getRadioState();
173    RadioState getSimState();
174    RadioState getRuimState();
175    RadioState getNvState();
176
177    /**
178     * Fires on any RadioState transition
179     * Always fires immediately as well
180     *
181     * do not attempt to calculate transitions by storing getRadioState() values
182     * on previous invocations of this notification. Instead, use the other
183     * registration methods
184     */
185    void registerForRadioStateChanged(Handler h, int what, Object obj);
186    void unregisterForRadioStateChanged(Handler h);
187
188    /**
189     * Fires on any transition into RadioState.isOn()
190     * Fires immediately if currently in that state
191     * In general, actions should be idempotent. State may change
192     * before event is received.
193     */
194    void registerForOn(Handler h, int what, Object obj);
195    void unregisterForOn(Handler h);
196
197    /**
198     * Fires on any transition out of RadioState.isAvailable()
199     * Fires immediately if currently in that state
200     * In general, actions should be idempotent. State may change
201     * before event is received.
202     */
203    void registerForAvailable(Handler h, int what, Object obj);
204    void unregisterForAvailable(Handler h);
205
206    /**
207     * Fires on any transition into !RadioState.isAvailable()
208     * Fires immediately if currently in that state
209     * In general, actions should be idempotent. State may change
210     * before event is received.
211     */
212    void registerForNotAvailable(Handler h, int what, Object obj);
213    void unregisterForNotAvailable(Handler h);
214
215    /**
216     * Fires on any transition into RADIO_OFF or !RadioState.isAvailable()
217     * Fires immediately if currently in that state
218     * In general, actions should be idempotent. State may change
219     * before event is received.
220     */
221    void registerForOffOrNotAvailable(Handler h, int what, Object obj);
222    void unregisterForOffOrNotAvailable(Handler h);
223
224    /**
225     * Fires on any transition into SIM_READY
226     * Fires immediately if if currently in that state
227     * In general, actions should be idempotent. State may change
228     * before event is received.
229     */
230    void registerForSIMReady(Handler h, int what, Object obj);
231    void unregisterForSIMReady(Handler h);
232
233    /** Any transition into SIM_LOCKED_OR_ABSENT */
234    void registerForSIMLockedOrAbsent(Handler h, int what, Object obj);
235    void unregisterForSIMLockedOrAbsent(Handler h);
236
237    void registerForIccStatusChanged(Handler h, int what, Object obj);
238    void unregisterForIccStatusChanged(Handler h);
239
240    void registerForCallStateChanged(Handler h, int what, Object obj);
241    void unregisterForCallStateChanged(Handler h);
242    void registerForVoiceNetworkStateChanged(Handler h, int what, Object obj);
243    void unregisterForVoiceNetworkStateChanged(Handler h);
244    void registerForDataNetworkStateChanged(Handler h, int what, Object obj);
245    void unregisterForDataNetworkStateChanged(Handler h);
246
247    void registerForRadioTechnologyChanged(Handler h, int what, Object obj);
248    void unregisterForRadioTechnologyChanged(Handler h);
249    void registerForNVReady(Handler h, int what, Object obj);
250    void unregisterForNVReady(Handler h);
251    void registerForRUIMLockedOrAbsent(Handler h, int what, Object obj);
252    void unregisterForRUIMLockedOrAbsent(Handler h);
253
254    /** InCall voice privacy notifications */
255    void registerForInCallVoicePrivacyOn(Handler h, int what, Object obj);
256    void unregisterForInCallVoicePrivacyOn(Handler h);
257    void registerForInCallVoicePrivacyOff(Handler h, int what, Object obj);
258    void unregisterForInCallVoicePrivacyOff(Handler h);
259
260    /**
261     * Fires on any transition into RUIM_READY
262     * Fires immediately if if currently in that state
263     * In general, actions should be idempotent. State may change
264     * before event is received.
265     */
266    void registerForRUIMReady(Handler h, int what, Object obj);
267    void unregisterForRUIMReady(Handler h);
268
269    /**
270     * unlike the register* methods, there's only one new 3GPP format SMS handler.
271     * if you need to unregister, you should also tell the radio to stop
272     * sending SMS's to you (via AT+CNMI)
273     *
274     * AsyncResult.result is a String containing the SMS PDU
275     */
276    void setOnNewGsmSms(Handler h, int what, Object obj);
277    void unSetOnNewGsmSms(Handler h);
278
279    /**
280     * unlike the register* methods, there's only one new 3GPP2 format SMS handler.
281     * if you need to unregister, you should also tell the radio to stop
282     * sending SMS's to you (via AT+CNMI)
283     *
284     * AsyncResult.result is a String containing the SMS PDU
285     */
286    void setOnNewCdmaSms(Handler h, int what, Object obj);
287    void unSetOnNewCdmaSms(Handler h);
288
289    /**
290     * Set the handler for SMS Cell Broadcast messages.
291     *
292     * AsyncResult.result is a byte array containing the SMS-CB PDU
293     */
294    void setOnNewGsmBroadcastSms(Handler h, int what, Object obj);
295    void unSetOnNewGsmBroadcastSms(Handler h);
296
297    /**
298     * Register for NEW_SMS_ON_SIM unsolicited message
299     *
300     * AsyncResult.result is an int array containing the index of new SMS
301     */
302    void setOnSmsOnSim(Handler h, int what, Object obj);
303    void unSetOnSmsOnSim(Handler h);
304
305    /**
306     * Register for NEW_SMS_STATUS_REPORT unsolicited message
307     *
308     * AsyncResult.result is a String containing the status report PDU
309     */
310    void setOnSmsStatus(Handler h, int what, Object obj);
311    void unSetOnSmsStatus(Handler h);
312
313    /**
314     * unlike the register* methods, there's only one NITZ time handler
315     *
316     * AsyncResult.result is an Object[]
317     * ((Object[])AsyncResult.result)[0] is a String containing the NITZ time string
318     * ((Object[])AsyncResult.result)[1] is a Long containing the milliseconds since boot as
319     *                                   returned by elapsedRealtime() when this NITZ time
320     *                                   was posted.
321     *
322     * Please note that the delivery of this message may be delayed several
323     * seconds on system startup
324     */
325    void setOnNITZTime(Handler h, int what, Object obj);
326    void unSetOnNITZTime(Handler h);
327
328    /**
329     * unlike the register* methods, there's only one USSD notify handler
330     *
331     * Represents the arrival of a USSD "notify" message, which may
332     * or may not have been triggered by a previous USSD send
333     *
334     * AsyncResult.result is a String[]
335     * ((String[])(AsyncResult.result))[0] contains status code
336     *      "0"   USSD-Notify -- text in ((const char **)data)[1]
337     *      "1"   USSD-Request -- text in ((const char **)data)[1]
338     *      "2"   Session terminated by network
339     *      "3"   other local client (eg, SIM Toolkit) has responded
340     *      "4"   Operation not supported
341     *      "5"   Network timeout
342     *
343     * ((String[])(AsyncResult.result))[1] contains the USSD message
344     * The numeric representations of these are in USSD_MODE_*
345     */
346
347    void setOnUSSD(Handler h, int what, Object obj);
348    void unSetOnUSSD(Handler h);
349
350    /**
351     * unlike the register* methods, there's only one signal strength handler
352     * AsyncResult.result is an int[2]
353     * response.obj.result[0] is received signal strength (0-31, 99)
354     * response.obj.result[1] is  bit error rate (0-7, 99)
355     * as defined in TS 27.007 8.5
356     */
357
358    void setOnSignalStrengthUpdate(Handler h, int what, Object obj);
359    void unSetOnSignalStrengthUpdate(Handler h);
360
361    /**
362     * Sets the handler for SIM/RUIM SMS storage full unsolicited message.
363     * Unlike the register* methods, there's only one notification handler
364     *
365     * @param h Handler for notification message.
366     * @param what User-defined message code.
367     * @param obj User object.
368     */
369    void setOnIccSmsFull(Handler h, int what, Object obj);
370    void unSetOnIccSmsFull(Handler h);
371
372    /**
373     * Sets the handler for SIM Refresh notifications.
374     *
375     * @param h Handler for notification message.
376     * @param what User-defined message code.
377     * @param obj User object.
378     */
379    void registerForIccRefresh(Handler h, int what, Object obj);
380    void unregisterForIccRefresh(Handler h);
381
382    void setOnIccRefresh(Handler h, int what, Object obj);
383    void unsetOnIccRefresh(Handler h);
384
385    /**
386     * Sets the handler for RING notifications.
387     * Unlike the register* methods, there's only one notification handler
388     *
389     * @param h Handler for notification message.
390     * @param what User-defined message code.
391     * @param obj User object.
392     */
393    void setOnCallRing(Handler h, int what, Object obj);
394    void unSetOnCallRing(Handler h);
395
396    /**
397     * Sets the handler for RESTRICTED_STATE changed notification,
398     * eg, for Domain Specific Access Control
399     * unlike the register* methods, there's only one signal strength handler
400     *
401     * AsyncResult.result is an int[1]
402     * response.obj.result[0] is a bitmask of RIL_RESTRICTED_STATE_* values
403     */
404
405    void setOnRestrictedStateChanged(Handler h, int what, Object obj);
406    void unSetOnRestrictedStateChanged(Handler h);
407
408    /**
409     * Sets the handler for Supplementary Service Notifications.
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     */
416    void setOnSuppServiceNotification(Handler h, int what, Object obj);
417    void unSetOnSuppServiceNotification(Handler h);
418
419    /**
420     * Sets the handler for Session End 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     */
427    void setOnCatSessionEnd(Handler h, int what, Object obj);
428    void unSetOnCatSessionEnd(Handler h);
429
430    /**
431     * Sets the handler for Proactive Commands for CAT.
432     * Unlike the register* methods, there's only one notification handler
433     *
434     * @param h Handler for notification message.
435     * @param what User-defined message code.
436     * @param obj User object.
437     */
438    void setOnCatProactiveCmd(Handler h, int what, Object obj);
439    void unSetOnCatProactiveCmd(Handler h);
440
441    /**
442     * Sets the handler for Event Notifications for CAT.
443     * Unlike the register* methods, there's only one notification handler
444     *
445     * @param h Handler for notification message.
446     * @param what User-defined message code.
447     * @param obj User object.
448     */
449    void setOnCatEvent(Handler h, int what, Object obj);
450    void unSetOnCatEvent(Handler h);
451
452    /**
453     * Sets the handler for Call Set Up Notifications for CAT.
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     */
460    void setOnCatCallSetUp(Handler h, int what, Object obj);
461    void unSetOnCatCallSetUp(Handler h);
462
463    /**
464     * Enables/disbables supplementary service related notifications from
465     * the network.
466     *
467     * @param enable true to enable notifications, false to disable.
468     * @param result Message to be posted when command completes.
469     */
470    void setSuppServiceNotifications(boolean enable, Message result);
471    //void unSetSuppServiceNotifications(Handler h);
472
473    /**
474     * Sets the handler for Event Notifications for CDMA Display Info.
475     * Unlike the register* methods, there's only one notification handler
476     *
477     * @param h Handler for notification message.
478     * @param what User-defined message code.
479     * @param obj User object.
480     */
481    void registerForDisplayInfo(Handler h, int what, Object obj);
482    void unregisterForDisplayInfo(Handler h);
483
484    /**
485     * Sets the handler for Event Notifications for CallWaiting Info.
486     * Unlike the register* methods, there's only one notification handler
487     *
488     * @param h Handler for notification message.
489     * @param what User-defined message code.
490     * @param obj User object.
491     */
492    void registerForCallWaitingInfo(Handler h, int what, Object obj);
493    void unregisterForCallWaitingInfo(Handler h);
494
495    /**
496     * Sets the handler for Event Notifications for Signal Info.
497     * Unlike the register* methods, there's only one notification handler
498     *
499     * @param h Handler for notification message.
500     * @param what User-defined message code.
501     * @param obj User object.
502     */
503    void registerForSignalInfo(Handler h, int what, Object obj);
504    void unregisterForSignalInfo(Handler h);
505
506    /**
507     * Registers the handler for CDMA number information record
508     * Unlike the register* methods, there's only one notification handler
509     *
510     * @param h Handler for notification message.
511     * @param what User-defined message code.
512     * @param obj User object.
513     */
514    void registerForNumberInfo(Handler h, int what, Object obj);
515    void unregisterForNumberInfo(Handler h);
516
517    /**
518     * Registers the handler for CDMA redirected number Information record
519     * Unlike the register* methods, there's only one notification handler
520     *
521     * @param h Handler for notification message.
522     * @param what User-defined message code.
523     * @param obj User object.
524     */
525    void registerForRedirectedNumberInfo(Handler h, int what, Object obj);
526    void unregisterForRedirectedNumberInfo(Handler h);
527
528    /**
529     * Registers the handler for CDMA line control information record
530     * Unlike the register* methods, there's only one notification handler
531     *
532     * @param h Handler for notification message.
533     * @param what User-defined message code.
534     * @param obj User object.
535     */
536    void registerForLineControlInfo(Handler h, int what, Object obj);
537    void unregisterForLineControlInfo(Handler h);
538
539    /**
540     * Registers the handler for CDMA T53 CLIR information record
541     * Unlike the register* methods, there's only one notification handler
542     *
543     * @param h Handler for notification message.
544     * @param what User-defined message code.
545     * @param obj User object.
546     */
547    void registerFoT53ClirlInfo(Handler h, int what, Object obj);
548    void unregisterForT53ClirInfo(Handler h);
549
550    /**
551     * Registers the handler for CDMA T53 audio control information record
552     * Unlike the register* methods, there's only one notification handler
553     *
554     * @param h Handler for notification message.
555     * @param what User-defined message code.
556     * @param obj User object.
557     */
558    void registerForT53AudioControlInfo(Handler h, int what, Object obj);
559    void unregisterForT53AudioControlInfo(Handler h);
560
561    /**
562     * Fires on if Modem enters Emergency Callback mode
563     */
564    void setEmergencyCallbackMode(Handler h, int what, Object obj);
565
566     /**
567      * Fires on any CDMA OTA provision status change
568      */
569     void registerForCdmaOtaProvision(Handler h,int what, Object obj);
570     void unregisterForCdmaOtaProvision(Handler h);
571
572     /**
573      * Registers the handler when out-band ringback tone is needed.<p>
574      *
575      *  Messages received from this:
576      *  Message.obj will be an AsyncResult
577      *  AsyncResult.userObj = obj
578      *  AsyncResult.result = boolean. <p>
579      */
580     void registerForRingbackTone(Handler h, int what, Object obj);
581     void unregisterForRingbackTone(Handler h);
582
583     /**
584      * Registers the handler when mute/unmute need to be resent to get
585      * uplink audio during a call.<p>
586      *
587      * @param h Handler for notification message.
588      * @param what User-defined message code.
589      * @param obj User object.
590      *
591      */
592     void registerForResendIncallMute(Handler h, int what, Object obj);
593     void unregisterForResendIncallMute(Handler h);
594
595     /**
596      * Registers the handler for when Cdma subscription changed events
597      *
598      * @param h Handler for notification message.
599      * @param what User-defined message code.
600      * @param obj User object.
601      *
602      */
603     void registerForCdmaSubscriptionChanged(Handler h, int what, Object obj);
604     void unregisterForCdmaSubscriptionChanged(Handler h);
605
606     /**
607      * Registers the handler for when Cdma prl changed events
608      *
609      * @param h Handler for notification message.
610      * @param what User-defined message code.
611      * @param obj User object.
612      *
613      */
614     void registerForCdmaPrlChanged(Handler h, int what, Object obj);
615     void unregisterForCdmaPrlChanged(Handler h);
616
617     /**
618      * Registers the handler for when Cdma prl changed events
619      *
620      * @param h Handler for notification message.
621      * @param what User-defined message code.
622      * @param obj User object.
623      *
624      */
625     void registerForExitEmergencyCallbackMode(Handler h, int what, Object obj);
626     void unregisterForExitEmergencyCallbackMode(Handler h);
627
628     /**
629      * Registers the handler for RIL_UNSOL_RIL_CONNECT events.
630      *
631      * When ril connects or disconnects a message is sent to the registrant
632      * which contains an AsyncResult, ar, in msg.obj. The ar.result is an
633      * Integer which is the version of the ril or -1 if the ril disconnected.
634      *
635      * @param h Handler for notification message.
636      * @param what User-defined message code.
637      * @param obj User object.
638      */
639     void registerForRilConnected(Handler h, int what, Object obj);
640     void unregisterForRilConnected(Handler h);
641
642    /**
643     * Supply the ICC PIN to the ICC card
644     *
645     *  returned message
646     *  retMsg.obj = AsyncResult ar
647     *  ar.exception carries exception on failure
648     *  This exception is CommandException with an error of PASSWORD_INCORRECT
649     *  if the password is incorrect
650     *
651     * ar.exception and ar.result are null on success
652     */
653
654    void supplyIccPin(String pin, Message result);
655
656    /**
657     * Supply the PIN for the app with this AID on the ICC card
658     *
659     *  AID (Application ID), See ETSI 102.221 8.1 and 101.220 4
660     *
661     *  returned message
662     *  retMsg.obj = AsyncResult ar
663     *  ar.exception carries exception on failure
664     *  This exception is CommandException with an error of PASSWORD_INCORRECT
665     *  if the password is incorrect
666     *
667     * ar.exception and ar.result are null on success
668     */
669
670    void supplyIccPinForApp(String pin, String aid, Message result);
671
672    /**
673     * Supply the ICC PUK and newPin to the ICC card
674     *
675     *  returned message
676     *  retMsg.obj = AsyncResult ar
677     *  ar.exception carries exception on failure
678     *  This exception is CommandException with an error of PASSWORD_INCORRECT
679     *  if the password is incorrect
680     *
681     * ar.exception and ar.result are null on success
682     */
683
684    void supplyIccPuk(String puk, String newPin, Message result);
685
686    /**
687     * Supply the PUK, new pin for the app with this AID on the ICC card
688     *
689     *  AID (Application ID), See ETSI 102.221 8.1 and 101.220 4
690     *
691     *  returned message
692     *  retMsg.obj = AsyncResult ar
693     *  ar.exception carries exception on failure
694     *  This exception is CommandException with an error of PASSWORD_INCORRECT
695     *  if the password is incorrect
696     *
697     * ar.exception and ar.result are null on success
698     */
699
700    void supplyIccPukForApp(String puk, String newPin, String aid, Message result);
701
702    /**
703     * Supply the ICC PIN2 to the ICC card
704     * Only called following operation where ICC_PIN2 was
705     * returned as a a failure from a previous operation
706     *
707     *  returned message
708     *  retMsg.obj = AsyncResult ar
709     *  ar.exception carries exception on failure
710     *  This exception is CommandException with an error of PASSWORD_INCORRECT
711     *  if the password is incorrect
712     *
713     * ar.exception and ar.result are null on success
714     */
715
716    void supplyIccPin2(String pin2, Message result);
717
718    /**
719     * Supply the PIN2 for the app with this AID on the ICC card
720     * Only called following operation where ICC_PIN2 was
721     * returned as a a failure from a previous operation
722     *
723     *  AID (Application ID), See ETSI 102.221 8.1 and 101.220 4
724     *
725     *  returned message
726     *  retMsg.obj = AsyncResult ar
727     *  ar.exception carries exception on failure
728     *  This exception is CommandException with an error of PASSWORD_INCORRECT
729     *  if the password is incorrect
730     *
731     * ar.exception and ar.result are null on success
732     */
733
734    void supplyIccPin2ForApp(String pin2, String aid, Message result);
735
736    /**
737     * Supply the SIM PUK2 to the SIM card
738     * Only called following operation where SIM_PUK2 was
739     * returned as a a failure from a previous operation
740     *
741     *  returned message
742     *  retMsg.obj = AsyncResult ar
743     *  ar.exception carries exception on failure
744     *  This exception is CommandException with an error of PASSWORD_INCORRECT
745     *  if the password is incorrect
746     *
747     * ar.exception and ar.result are null on success
748     */
749
750    void supplyIccPuk2(String puk2, String newPin2, Message result);
751
752    /**
753     * Supply the PUK2, newPin2 for the app with this AID on the ICC card
754     * Only called following operation where SIM_PUK2 was
755     * returned as a a failure from a previous operation
756     *
757     *  AID (Application ID), See ETSI 102.221 8.1 and 101.220 4
758     *
759     *  returned message
760     *  retMsg.obj = AsyncResult ar
761     *  ar.exception carries exception on failure
762     *  This exception is CommandException with an error of PASSWORD_INCORRECT
763     *  if the password is incorrect
764     *
765     * ar.exception and ar.result are null on success
766     */
767
768    void supplyIccPuk2ForApp(String puk2, String newPin2, String aid, Message result);
769
770    void changeIccPin(String oldPin, String newPin, Message result);
771    void changeIccPinForApp(String oldPin, String newPin, String aidPtr, Message result);
772    void changeIccPin2(String oldPin2, String newPin2, Message result);
773    void changeIccPin2ForApp(String oldPin2, String newPin2, String aidPtr, Message result);
774
775    void changeBarringPassword(String facility, String oldPwd, String newPwd, Message result);
776
777    void supplyNetworkDepersonalization(String netpin, Message result);
778
779    /**
780     *  returned message
781     *  retMsg.obj = AsyncResult ar
782     *  ar.exception carries exception on failure
783     *  ar.userObject contains the orignal value of result.obj
784     *  ar.result contains a List of DriverCall
785     *      The ar.result List is sorted by DriverCall.index
786     */
787    void getCurrentCalls (Message result);
788
789    /**
790     *  returned message
791     *  retMsg.obj = AsyncResult ar
792     *  ar.exception carries exception on failure
793     *  ar.userObject contains the orignal value of result.obj
794     *  ar.result contains a List of DataCallState
795     *  @deprecated Do not use.
796     */
797    @Deprecated
798    void getPDPContextList(Message result);
799
800    /**
801     *  returned message
802     *  retMsg.obj = AsyncResult ar
803     *  ar.exception carries exception on failure
804     *  ar.userObject contains the orignal value of result.obj
805     *  ar.result contains a List of DataCallState
806     */
807    void getDataCallList(Message result);
808
809    /**
810     *  returned message
811     *  retMsg.obj = AsyncResult ar
812     *  ar.exception carries exception on failure
813     *  ar.userObject contains the orignal value of result.obj
814     *  ar.result is null on success and failure
815     *
816     * CLIR_DEFAULT     == on "use subscription default value"
817     * CLIR_SUPPRESSION == on "CLIR suppression" (allow CLI presentation)
818     * CLIR_INVOCATION  == on "CLIR invocation" (restrict CLI presentation)
819     */
820    void dial (String address, int clirMode, Message result);
821
822    /**
823     *  returned message
824     *  retMsg.obj = AsyncResult ar
825     *  ar.exception carries exception on failure
826     *  ar.userObject contains the orignal value of result.obj
827     *  ar.result is null on success and failure
828     *
829     * CLIR_DEFAULT     == on "use subscription default value"
830     * CLIR_SUPPRESSION == on "CLIR suppression" (allow CLI presentation)
831     * CLIR_INVOCATION  == on "CLIR invocation" (restrict CLI presentation)
832     */
833    void dial(String address, int clirMode, UUSInfo uusInfo, Message result);
834
835    /**
836     *  returned message
837     *  retMsg.obj = AsyncResult ar
838     *  ar.exception carries exception on failure
839     *  ar.userObject contains the orignal value of result.obj
840     *  ar.result is String containing IMSI on success
841     */
842    void getIMSI(Message result);
843
844    /**
845     *  returned message
846     *  retMsg.obj = AsyncResult ar
847     *  ar.exception carries exception on failure
848     *  ar.userObject contains the orignal value of result.obj
849     *  ar.result is String containing IMEI on success
850     */
851    void getIMEI(Message result);
852
853    /**
854     *  returned message
855     *  retMsg.obj = AsyncResult ar
856     *  ar.exception carries exception on failure
857     *  ar.userObject contains the orignal value of result.obj
858     *  ar.result is String containing IMEISV on success
859     */
860    void getIMEISV(Message result);
861
862    /**
863     * Hang up one individual connection.
864     *  returned message
865     *  retMsg.obj = AsyncResult ar
866     *  ar.exception carries exception on failure
867     *  ar.userObject contains the orignal value of result.obj
868     *  ar.result is null on success and failure
869     *
870     *  3GPP 22.030 6.5.5
871     *  "Releases a specific active call X"
872     */
873    void hangupConnection (int gsmIndex, Message result);
874
875    /**
876     * 3GPP 22.030 6.5.5
877     *  "Releases all held calls or sets User Determined User Busy (UDUB)
878     *   for a waiting call."
879     *  ar.exception carries exception on failure
880     *  ar.userObject contains the orignal value of result.obj
881     *  ar.result is null on success and failure
882     */
883    void hangupWaitingOrBackground (Message result);
884
885    /**
886     * 3GPP 22.030 6.5.5
887     * "Releases all active calls (if any exist) and accepts
888     *  the other (held or waiting) call."
889     *
890     *  ar.exception carries exception on failure
891     *  ar.userObject contains the orignal value of result.obj
892     *  ar.result is null on success and failure
893     */
894    void hangupForegroundResumeBackground (Message result);
895
896    /**
897     * 3GPP 22.030 6.5.5
898     * "Places all active calls (if any exist) on hold and accepts
899     *  the other (held or waiting) call."
900     *
901     *  ar.exception carries exception on failure
902     *  ar.userObject contains the orignal value of result.obj
903     *  ar.result is null on success and failure
904     */
905    void switchWaitingOrHoldingAndActive (Message result);
906
907    /**
908     * 3GPP 22.030 6.5.5
909     * "Adds a held call to the conversation"
910     *
911     *  ar.exception carries exception on failure
912     *  ar.userObject contains the orignal value of result.obj
913     *  ar.result is null on success and failure
914     */
915    void conference (Message result);
916
917    /**
918     * Set preferred Voice Privacy (VP).
919     *
920     * @param enable true is enhanced and false is normal VP
921     * @param result is a callback message
922     */
923    void setPreferredVoicePrivacy(boolean enable, Message result);
924
925    /**
926     * Get currently set preferred Voice Privacy (VP) mode.
927     *
928     * @param result is a callback message
929     */
930    void getPreferredVoicePrivacy(Message result);
931
932    /**
933     * 3GPP 22.030 6.5.5
934     * "Places all active calls on hold except call X with which
935     *  communication shall be supported."
936     */
937    void separateConnection (int gsmIndex, Message result);
938
939    /**
940     *
941     *  ar.exception carries exception on failure
942     *  ar.userObject contains the orignal value of result.obj
943     *  ar.result is null on success and failure
944     */
945    void acceptCall (Message result);
946
947    /**
948     *  also known as UDUB
949     *  ar.exception carries exception on failure
950     *  ar.userObject contains the orignal value of result.obj
951     *  ar.result is null on success and failure
952     */
953    void rejectCall (Message result);
954
955    /**
956     * 3GPP 22.030 6.5.5
957     * "Connects the two calls and disconnects the subscriber from both calls"
958     *
959     *  ar.exception carries exception on failure
960     *  ar.userObject contains the orignal value of result.obj
961     *  ar.result is null on success and failure
962     */
963    void explicitCallTransfer (Message result);
964
965    /**
966     * cause code returned as int[0] in Message.obj.response
967     * Returns integer cause code defined in TS 24.008
968     * Annex H or closest approximation.
969     * Most significant codes:
970     * - Any defined in 22.001 F.4 (for generating busy/congestion)
971     * - Cause 68: ACM >= ACMMax
972     */
973    void getLastCallFailCause (Message result);
974
975
976    /**
977     * Reason for last PDP context deactivate or failure to activate
978     * cause code returned as int[0] in Message.obj.response
979     * returns an integer cause code defined in TS 24.008
980     * section 6.1.3.1.3 or close approximation
981     * @deprecated Do not use.
982     */
983    @Deprecated
984    void getLastPdpFailCause (Message result);
985
986    /**
987     * The preferred new alternative to getLastPdpFailCause
988     * that is also CDMA-compatible.
989     */
990    void getLastDataCallFailCause (Message result);
991
992    void setMute (boolean enableMute, Message response);
993
994    void getMute (Message response);
995
996    /**
997     * response.obj is an AsyncResult
998     * response.obj.result is an int[2]
999     * response.obj.result[0] is received signal strength (0-31, 99)
1000     * response.obj.result[1] is  bit error rate (0-7, 99)
1001     * as defined in TS 27.007 8.5
1002     */
1003    void getSignalStrength (Message response);
1004
1005
1006    /**
1007     * response.obj.result is an int[3]
1008     * response.obj.result[0] is registration state 0-5 from TS 27.007 7.2
1009     * response.obj.result[1] is LAC if registered or -1 if not
1010     * response.obj.result[2] is CID if registered or -1 if not
1011     * valid LAC and CIDs are 0x0000 - 0xffff
1012     *
1013     * Please note that registration state 4 ("unknown") is treated
1014     * as "out of service" above
1015     */
1016    void getVoiceRegistrationState (Message response);
1017
1018    /**
1019     * response.obj.result is an int[3]
1020     * response.obj.result[0] is registration state 0-5 from TS 27.007 7.2
1021     * response.obj.result[1] is LAC if registered or -1 if not
1022     * response.obj.result[2] is CID if registered or -1 if not
1023     * valid LAC and CIDs are 0x0000 - 0xffff
1024     *
1025     * Please note that registration state 4 ("unknown") is treated
1026     * as "out of service" above
1027     */
1028    void getDataRegistrationState (Message response);
1029
1030    /**
1031     * response.obj.result is a String[3]
1032     * response.obj.result[0] is long alpha or null if unregistered
1033     * response.obj.result[1] is short alpha or null if unregistered
1034     * response.obj.result[2] is numeric or null if unregistered
1035     */
1036    void getOperator(Message response);
1037
1038    /**
1039     *  ar.exception carries exception on failure
1040     *  ar.userObject contains the orignal value of result.obj
1041     *  ar.result is null on success and failure
1042     */
1043    void sendDtmf(char c, Message result);
1044
1045
1046    /**
1047     *  ar.exception carries exception on failure
1048     *  ar.userObject contains the orignal value of result.obj
1049     *  ar.result is null on success and failure
1050     */
1051    void startDtmf(char c, Message result);
1052
1053    /**
1054     *  ar.exception carries exception on failure
1055     *  ar.userObject contains the orignal value of result.obj
1056     *  ar.result is null on success and failure
1057     */
1058    void stopDtmf(Message result);
1059
1060    /**
1061     *  ar.exception carries exception on failure
1062     *  ar.userObject contains the orignal value of result.obj
1063     *  ar.result is null on success and failure
1064     */
1065    void sendBurstDtmf(String dtmfString, int on, int off, Message result);
1066
1067    /**
1068     * smscPDU is smsc address in PDU form GSM BCD format prefixed
1069     *      by a length byte (as expected by TS 27.005) or NULL for default SMSC
1070     * pdu is SMS in PDU format as an ASCII hex string
1071     *      less the SMSC address
1072     */
1073    void sendSMS (String smscPDU, String pdu, Message response);
1074
1075    /**
1076     * @param pdu is CDMA-SMS in internal pseudo-PDU format
1077     * @param response sent when operation completes
1078     */
1079    void sendCdmaSms(byte[] pdu, Message response);
1080
1081    /**
1082     * Deletes the specified SMS record from SIM memory (EF_SMS).
1083     *
1084     * @param index index of the SMS record to delete
1085     * @param response sent when operation completes
1086     */
1087    void deleteSmsOnSim(int index, Message response);
1088
1089    /**
1090     * Deletes the specified SMS record from RUIM memory (EF_SMS in DF_CDMA).
1091     *
1092     * @param index index of the SMS record to delete
1093     * @param response sent when operation completes
1094     */
1095    void deleteSmsOnRuim(int index, Message response);
1096
1097    /**
1098     * Writes an SMS message to SIM memory (EF_SMS).
1099     *
1100     * @param status status of message on SIM.  One of:
1101     *                  SmsManger.STATUS_ON_ICC_READ
1102     *                  SmsManger.STATUS_ON_ICC_UNREAD
1103     *                  SmsManger.STATUS_ON_ICC_SENT
1104     *                  SmsManger.STATUS_ON_ICC_UNSENT
1105     * @param pdu message PDU, as hex string
1106     * @param response sent when operation completes.
1107     *                  response.obj will be an AsyncResult, and will indicate
1108     *                  any error that may have occurred (eg, out of memory).
1109     */
1110    void writeSmsToSim(int status, String smsc, String pdu, Message response);
1111
1112    void writeSmsToRuim(int status, String pdu, Message response);
1113
1114    void setRadioPower(boolean on, Message response);
1115
1116    void acknowledgeLastIncomingGsmSms(boolean success, int cause, Message response);
1117
1118    void acknowledgeLastIncomingCdmaSms(boolean success, int cause, Message response);
1119
1120    /**
1121     * Acknowledge successful or failed receipt of last incoming SMS,
1122     * including acknowledgement TPDU to send as the RP-User-Data element
1123     * of the RP-ACK or RP-ERROR PDU.
1124     *
1125     * @param success true to send RP-ACK, false to send RP-ERROR
1126     * @param ackPdu the acknowledgement TPDU in hexadecimal format
1127     * @param response sent when operation completes.
1128     */
1129    void acknowledgeIncomingGsmSmsWithPdu(boolean success, String ackPdu, Message response);
1130
1131    /**
1132     * parameters equivalent to 27.007 AT+CRSM command
1133     * response.obj will be an AsyncResult
1134     * response.obj.result will be an IccIoResult on success
1135     */
1136    void iccIO (int command, int fileid, String path, int p1, int p2, int p3,
1137            String data, String pin2, Message response);
1138
1139    /**
1140     * (AsyncResult)response.obj).result is an int[] with element [0] set to
1141     * 1 for "CLIP is provisioned", and 0 for "CLIP is not provisioned".
1142     *
1143     * @param response is callback message
1144     */
1145
1146    void queryCLIP(Message response);
1147
1148    /**
1149     * response.obj will be a an int[2]
1150     *
1151     * response.obj[0] will be TS 27.007 +CLIR parameter 'n'
1152     *  0 presentation indicator is used according to the subscription of the CLIR service
1153     *  1 CLIR invocation
1154     *  2 CLIR suppression
1155     *
1156     * response.obj[1] will be TS 27.007 +CLIR parameter 'm'
1157     *  0 CLIR not provisioned
1158     *  1 CLIR provisioned in permanent mode
1159     *  2 unknown (e.g. no network, etc.)
1160     *  3 CLIR temporary mode presentation restricted
1161     *  4 CLIR temporary mode presentation allowed
1162     */
1163
1164    void getCLIR(Message response);
1165
1166    /**
1167     * clirMode is one of the CLIR_* constants above
1168     *
1169     * response.obj is null
1170     */
1171
1172    void setCLIR(int clirMode, Message response);
1173
1174    /**
1175     * (AsyncResult)response.obj).result is an int[] with element [0] set to
1176     * 0 for disabled, 1 for enabled.
1177     *
1178     * @param serviceClass is a sum of SERVICE_CLASS_*
1179     * @param response is callback message
1180     */
1181
1182    void queryCallWaiting(int serviceClass, Message response);
1183
1184    /**
1185     * @param enable is true to enable, false to disable
1186     * @param serviceClass is a sum of SERVICE_CLASS_*
1187     * @param response is callback message
1188     */
1189
1190    void setCallWaiting(boolean enable, int serviceClass, Message response);
1191
1192    /**
1193     * @param action is one of CF_ACTION_*
1194     * @param cfReason is one of CF_REASON_*
1195     * @param serviceClass is a sum of SERVICE_CLASSS_*
1196     */
1197    void setCallForward(int action, int cfReason, int serviceClass,
1198                String number, int timeSeconds, Message response);
1199
1200    /**
1201     * cfReason is one of CF_REASON_*
1202     *
1203     * ((AsyncResult)response.obj).result will be an array of
1204     * CallForwardInfo's
1205     *
1206     * An array of length 0 means "disabled for all codes"
1207     */
1208    void queryCallForwardStatus(int cfReason, int serviceClass,
1209            String number, Message response);
1210
1211    void setNetworkSelectionModeAutomatic(Message response);
1212
1213    void setNetworkSelectionModeManual(String operatorNumeric, Message response);
1214
1215    /**
1216     * Queries whether the current network selection mode is automatic
1217     * or manual
1218     *
1219     * ((AsyncResult)response.obj).result  is an int[] with element [0] being
1220     * a 0 for automatic selection and a 1 for manual selection
1221     */
1222
1223    void getNetworkSelectionMode(Message response);
1224
1225    /**
1226     * Queries the currently available networks
1227     *
1228     * ((AsyncResult)response.obj).result  is a List of NetworkInfo objects
1229     */
1230    void getAvailableNetworks(Message response);
1231
1232    void getBasebandVersion (Message response);
1233
1234
1235    /**
1236     * (AsyncResult)response.obj).result will be an Integer representing
1237     * the sum of enabled service classes (sum of SERVICE_CLASS_*)
1238     *
1239     * @param facility one of CB_FACILTY_*
1240     * @param password password or "" if not required
1241     * @param serviceClass is a sum of SERVICE_CLASS_*
1242     * @param response is callback message
1243     */
1244
1245    void queryFacilityLock (String facility, String password, int serviceClass,
1246        Message response);
1247
1248    /**
1249     * (AsyncResult)response.obj).result will be an Integer representing
1250     * the sum of enabled service classes (sum of SERVICE_CLASS_*) for the
1251     * application with appId.
1252     *
1253     * @param facility one of CB_FACILTY_*
1254     * @param password password or "" if not required
1255     * @param serviceClass is a sum of SERVICE_CLASS_*
1256     * @param appId is application Id or null if none
1257     * @param response is callback message
1258     */
1259
1260    void queryFacilityLockForApp(String facility, String password, int serviceClass, String appId,
1261        Message response);
1262
1263    /**
1264     * @param facility one of CB_FACILTY_*
1265     * @param lockState true means lock, false means unlock
1266     * @param password password or "" if not required
1267     * @param serviceClass is a sum of SERVICE_CLASS_*
1268     * @param response is callback message
1269     */
1270    void setFacilityLock (String facility, boolean lockState, String password,
1271        int serviceClass, Message response);
1272
1273    /**
1274     * Set the facility lock for the app with this AID on the ICC card.
1275     *
1276     * @param facility one of CB_FACILTY_*
1277     * @param lockState true means lock, false means unlock
1278     * @param password password or "" if not required
1279     * @param serviceClass is a sum of SERVICE_CLASS_*
1280     * @param appId is application Id or null if none
1281     * @param response is callback message
1282     */
1283    void setFacilityLockForApp(String facility, boolean lockState, String password,
1284        int serviceClass, String appId, Message response);
1285
1286    void sendUSSD (String ussdString, Message response);
1287
1288    /**
1289     * Cancels a pending USSD session if one exists.
1290     * @param response callback message
1291     */
1292    void cancelPendingUssd (Message response);
1293
1294    void resetRadio(Message result);
1295
1296    /**
1297     * Assign a specified band for RF configuration.
1298     *
1299     * @param bandMode one of BM_*_BAND
1300     * @param response is callback message
1301     */
1302    void setBandMode (int bandMode, Message response);
1303
1304    /**
1305     * Query the list of band mode supported by RF.
1306     *
1307     * @param response is callback message
1308     *        ((AsyncResult)response.obj).result  is an int[] with every
1309     *        element representing one avialable BM_*_BAND
1310     */
1311    void queryAvailableBandMode (Message response);
1312
1313    /**
1314     * Set the current preferred network type. This will be the last
1315     * networkType that was passed to setPreferredNetworkType.
1316     */
1317    void setCurrentPreferredNetworkType();
1318
1319    /**
1320     *  Requests to set the preferred network type for searching and registering
1321     * (CS/PS domain, RAT, and operation mode)
1322     * @param networkType one of  NT_*_TYPE
1323     * @param response is callback message
1324     */
1325    void setPreferredNetworkType(int networkType , Message response);
1326
1327     /**
1328     *  Query the preferred network type setting
1329     *
1330     * @param response is callback message to report one of  NT_*_TYPE
1331     */
1332    void getPreferredNetworkType(Message response);
1333
1334    /**
1335     * Query neighboring cell ids
1336     *
1337     * @param response s callback message to cell ids
1338     */
1339    void getNeighboringCids(Message response);
1340
1341    /**
1342     * Request to enable/disable network state change notifications when
1343     * location information (lac and/or cid) has changed.
1344     *
1345     * @param enable true to enable, false to disable
1346     * @param response callback message
1347     */
1348    void setLocationUpdates(boolean enable, Message response);
1349
1350    /**
1351     * Gets the default SMSC address.
1352     *
1353     * @param result Callback message contains the SMSC address.
1354     */
1355    void getSmscAddress(Message result);
1356
1357    /**
1358     * Sets the default SMSC address.
1359     *
1360     * @param address new SMSC address
1361     * @param result Callback message is empty on completion
1362     */
1363    void setSmscAddress(String address, Message result);
1364
1365    /**
1366     * Indicates whether there is storage available for new SMS messages.
1367     * @param available true if storage is available
1368     * @param result callback message
1369     */
1370    void reportSmsMemoryStatus(boolean available, Message result);
1371
1372    /**
1373     * Indicates to the vendor ril that StkService is running
1374     * and is ready to receive RIL_UNSOL_STK_XXXX commands.
1375     *
1376     * @param result callback message
1377     */
1378    void reportStkServiceIsRunning(Message result);
1379
1380    void invokeOemRilRequestRaw(byte[] data, Message response);
1381
1382    void invokeOemRilRequestStrings(String[] strings, Message response);
1383
1384
1385    /**
1386     * Send TERMINAL RESPONSE to the SIM, after processing a proactive command
1387     * sent by the SIM.
1388     *
1389     * @param contents  String containing SAT/USAT response in hexadecimal
1390     *                  format starting with first byte of response data. See
1391     *                  TS 102 223 for details.
1392     * @param response  Callback message
1393     */
1394    public void sendTerminalResponse(String contents, Message response);
1395
1396    /**
1397     * Send ENVELOPE to the SIM, after processing a proactive command sent by
1398     * the SIM.
1399     *
1400     * @param contents  String containing SAT/USAT response in hexadecimal
1401     *                  format starting with command tag. See TS 102 223 for
1402     *                  details.
1403     * @param response  Callback message
1404     */
1405    public void sendEnvelope(String contents, Message response);
1406
1407    /**
1408     * Send ENVELOPE to the SIM, such as an SMS-PP data download envelope
1409     * for a SIM data download message. This method has one difference
1410     * from {@link #sendEnvelope}: The SW1 and SW2 status bytes from the UICC response
1411     * are returned along with the response data.
1412     *
1413     * response.obj will be an AsyncResult
1414     * response.obj.result will be an IccIoResult on success
1415     *
1416     * @param contents  String containing SAT/USAT response in hexadecimal
1417     *                  format starting with command tag. See TS 102 223 for
1418     *                  details.
1419     * @param response  Callback message
1420     */
1421    public void sendEnvelopeWithStatus(String contents, Message response);
1422
1423    /**
1424     * Accept or reject the call setup request from SIM.
1425     *
1426     * @param accept   true if the call is to be accepted, false otherwise.
1427     * @param response Callback message
1428     */
1429    public void handleCallSetupRequestFromSim(boolean accept, Message response);
1430
1431    /**
1432     * Activate or deactivate cell broadcast SMS for GSM.
1433     *
1434     * @param activate
1435     *            true = activate, false = deactivate
1436     * @param result Callback message is empty on completion
1437     */
1438    public void setGsmBroadcastActivation(boolean activate, Message result);
1439
1440    /**
1441     * Configure cell broadcast SMS for GSM.
1442     *
1443     * @param response Callback message is empty on completion
1444     */
1445    public void setGsmBroadcastConfig(SmsBroadcastConfigInfo[] config, Message response);
1446
1447    /**
1448     * Query the current configuration of cell broadcast SMS of GSM.
1449     *
1450     * @param response
1451     *        Callback message contains the configuration from the modem
1452     *        on completion
1453     */
1454    public void getGsmBroadcastConfig(Message response);
1455
1456    //***** new Methods for CDMA support
1457
1458    /**
1459     * Request the device ESN / MEID / IMEI / IMEISV.
1460     * "response" is const char **
1461     *   [0] is IMEI if GSM subscription is available
1462     *   [1] is IMEISV if GSM subscription is available
1463     *   [2] is ESN if CDMA subscription is available
1464     *   [3] is MEID if CDMA subscription is available
1465     */
1466    public void getDeviceIdentity(Message response);
1467
1468    /**
1469     * Request the device MDN / H_SID / H_NID / MIN.
1470     * "response" is const char **
1471     *   [0] is MDN if CDMA subscription is available
1472     *   [1] is a comma separated list of H_SID (Home SID) in decimal format
1473     *       if CDMA subscription is available
1474     *   [2] is a comma separated list of H_NID (Home NID) in decimal format
1475     *       if CDMA subscription is available
1476     *   [3] is MIN (10 digits, MIN2+MIN1) if CDMA subscription is available
1477     */
1478    public void getCDMASubscription(Message response);
1479
1480    /**
1481     * Send Flash Code.
1482     * "response" is is NULL
1483     *   [0] is a FLASH string
1484     */
1485    public void sendCDMAFeatureCode(String FeatureCode, Message response);
1486
1487    /** Set the Phone type created */
1488    void setPhoneType(int phoneType);
1489
1490    /**
1491     *  Query the CDMA roaming preference setting
1492     *
1493     * @param response is callback message to report one of  CDMA_RM_*
1494     */
1495    void queryCdmaRoamingPreference(Message response);
1496
1497    /**
1498     *  Requests to set the CDMA roaming preference
1499     * @param cdmaRoamingType one of  CDMA_RM_*
1500     * @param response is callback message
1501     */
1502    void setCdmaRoamingPreference(int cdmaRoamingType, Message response);
1503
1504    /**
1505     *  Requests to set the CDMA subscription mode
1506     * @param cdmaSubscriptionType one of  CDMA_SUBSCRIPTION_*
1507     * @param response is callback message
1508     */
1509    void setCdmaSubscriptionSource(int cdmaSubscriptionType, Message response);
1510
1511    /**
1512     *  Requests to get the CDMA subscription srouce
1513     * @param response is callback message
1514     */
1515    void getCdmaSubscriptionSource(Message response);
1516
1517    /**
1518     *  Set the TTY mode
1519     *
1520     * @param ttyMode one of the following:
1521     * - {@link com.android.internal.telephony.Phone#TTY_MODE_OFF}
1522     * - {@link com.android.internal.telephony.Phone#TTY_MODE_FULL}
1523     * - {@link com.android.internal.telephony.Phone#TTY_MODE_HCO}
1524     * - {@link com.android.internal.telephony.Phone#TTY_MODE_VCO}
1525     * @param response is callback message
1526     */
1527    void setTTYMode(int ttyMode, Message response);
1528
1529    /**
1530     *  Query the TTY mode
1531     * (AsyncResult)response.obj).result is an int[] with element [0] set to
1532     * tty mode:
1533     * - {@link com.android.internal.telephony.Phone#TTY_MODE_OFF}
1534     * - {@link com.android.internal.telephony.Phone#TTY_MODE_FULL}
1535     * - {@link com.android.internal.telephony.Phone#TTY_MODE_HCO}
1536     * - {@link com.android.internal.telephony.Phone#TTY_MODE_VCO}
1537     * @param response is callback message
1538     */
1539    void queryTTYMode(Message response);
1540
1541    /**
1542     * Setup a packet data connection On successful completion, the result
1543     * message will return a {@link DataCallState} object containing the connection
1544     * information.
1545     *
1546     * @param radioTechnology
1547     *            indicates whether to setup connection on radio technology CDMA
1548     *            (0) or GSM/UMTS (1)
1549     * @param profile
1550     *            Profile Number or NULL to indicate default profile
1551     * @param apn
1552     *            the APN to connect to if radio technology is GSM/UMTS.
1553     *            Otherwise null for CDMA.
1554     * @param user
1555     *            the username for APN, or NULL
1556     * @param password
1557     *            the password for APN, or NULL
1558     * @param authType
1559     *            the PAP / CHAP auth type. Values is one of SETUP_DATA_AUTH_*
1560     * @param protocol
1561     *            one of the PDP_type values in TS 27.007 section 10.1.1.
1562     *            For example, "IP", "IPV6", "IPV4V6", or "PPP".
1563     * @param result
1564     *            Callback message
1565     */
1566    public void setupDataCall(String radioTechnology, String profile,
1567            String apn, String user, String password, String authType,
1568            String protocol, Message result);
1569
1570    /**
1571     * Deactivate packet data connection
1572     *
1573     * @param cid
1574     *            The connection ID
1575     * @param reason
1576     *            Data disconnect reason.
1577     * @param result
1578     *            Callback message is empty on completion
1579     */
1580    public void deactivateDataCall(int cid, int reason, Message result);
1581
1582    /**
1583     * Activate or deactivate cell broadcast SMS for CDMA.
1584     *
1585     * @param activate
1586     *            true = activate, false = deactivate
1587     * @param result
1588     *            Callback message is empty on completion
1589     */
1590    public void setCdmaBroadcastActivation(boolean activate, Message result);
1591
1592    /**
1593     * Configure cdma cell broadcast SMS.
1594     *
1595     * @param result
1596     *            Callback message is empty on completion
1597     */
1598    // TODO: Change the configValuesArray to a RIL_BroadcastSMSConfig
1599    public void setCdmaBroadcastConfig(int[] configValuesArray, Message result);
1600
1601    /**
1602     * Query the current configuration of cdma cell broadcast SMS.
1603     *
1604     * @param result
1605     *            Callback message contains the configuration from the modem on completion
1606     */
1607    public void getCdmaBroadcastConfig(Message result);
1608
1609    /**
1610     *  Requests the radio's system selection module to exit emergency callback mode.
1611     *  This function should only be called from CDMAPHone.java.
1612     *
1613     * @param response callback message
1614     */
1615    public void exitEmergencyCallbackMode(Message response);
1616
1617    /**
1618     * Request the status of the ICC and UICC cards.
1619     *
1620     * @param result
1621     *          Callback message containing {@link IccCardStatus} structure for the card.
1622     */
1623    public void getIccCardStatus(Message result);
1624
1625    /**
1626     * Return if the current radio is LTE on CDMA. This
1627     * is a tri-state return value as for a period of time
1628     * the mode may be unknown.
1629     *
1630     * @return {@link Phone#LTE_ON_CDMA_UNKNOWN}, {@link Phone#LTE_ON_CDMA_FALSE}
1631     * or {@link Phone#LTE_ON_CDMA_TRUE}
1632     */
1633    public int getLteOnCdmaMode();
1634
1635    /**
1636     * Request the ISIM application on the UICC to perform the AKA
1637     * challenge/response algorithm for IMS authentication. The nonce string
1638     * and challenge response are Base64 encoded Strings.
1639     *
1640     * @param nonce the nonce string to pass with the ISIM authentication request
1641     * @param response a callback message with the String response in the obj field
1642     */
1643    public void requestIsimAuthentication(String nonce, Message response);
1644}
1645