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