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