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