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