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.cdma.CdmaSmsBroadcastConfigInfo;
     20 import com.android.internal.telephony.gsm.SmsBroadcastConfigInfo;
     21 import com.android.internal.telephony.uicc.IccCardStatus;
     22 
     23 import android.os.Message;
     24 import android.os.Handler;
     25 
     26 /**
     27  * {@hide}
     28  */
     29 public 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      * Notifiy that we are testing an emergency call
   1617      */
   1618     public void testingEmergencyCall();
   1619 
   1620 
   1621     /**
   1622      * @return version of the ril.
   1623      */
   1624     int getRilVersion();
   1625 }
   1626