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