/device/zte/warp2/overlay/frameworks/base/telephony/java/com/android/internal/telephony/ZTEQualcommRIL.java
https://github.com/Dm47021/Sugar-Kang-AOSP-JB · Java · 960 lines · 711 code · 139 blank · 110 comment · 86 complexity · 968bd550f1f90c2dac5f972a10493614 MD5 · raw file
- /*
- * Copyright (C) 2011 The CyanogenMod Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- package com.android.internal.telephony;
- import static com.android.internal.telephony.RILConstants.*;
- import android.content.Context;
- import android.os.AsyncResult;
- import android.os.Handler;
- import android.os.HandlerThread;
- import android.os.Looper;
- import android.os.Message;
- import android.os.Parcel;
- import android.telephony.SmsMessage;
- import android.os.SystemProperties;
- import android.text.TextUtils;
- import android.util.Log;
- import com.android.internal.telephony.RILConstants;
- import com.android.internal.telephony.gsm.SmsBroadcastConfigInfo;
- import com.android.internal.telephony.cdma.CdmaInformationRecords;
- import java.util.ArrayList;
- /**
- * Qualcomm RIL class for basebands that do not send the SIM status
- * piggybacked in RIL_UNSOL_RESPONSE_RADIO_STATE_CHANGED. Instead,
- * these radios will send radio state and we have to query for SIM
- * status separately.
- * Custom Qualcomm No SimReady RIL for ZTE
- *
- * {@hide}
- */
- public class ZTEQualcommRIL extends RIL implements CommandsInterface {
- protected HandlerThread mIccThread;
- protected IccHandler mIccHandler;
- protected String mAid;
- protected int mPinState;
- boolean RILJ_LOGV = false;
- boolean RILJ_LOGD = true;
- private final int RIL_INT_RADIO_OFF = 0;
- private final int RIL_INT_RADIO_UNAVALIABLE = 1;
- private final int RIL_INT_RADIO_ON = 2;
- private final int RIL_INT_RADIO_ON_NG = 10;
- public ZTEQualcommRIL(Context context, int networkMode, int cdmaSubscription) {
- super(context, networkMode, cdmaSubscription);
- }
- @Override
- protected void
- processSolicited (Parcel p) {
- int serial, error;
- boolean found = false;
- serial = p.readInt();
- error = p.readInt();
- RILRequest rr;
- rr = findAndRemoveRequestFromList(serial);
- if (rr == null) {
- Log.w(LOG_TAG, "Unexpected solicited response! sn: "
- + serial + " error: " + error);
- return;
- }
- Object ret = null;
- if (error == 0 || p.dataAvail() > 0) {
- /* Convert RIL_REQUEST_GET_MODEM_VERSION back */
- if (SystemProperties.get("ro.cm.device").indexOf("e73") == 0 &&
- rr.mRequest == 220) {
- rr.mRequest = RIL_REQUEST_BASEBAND_VERSION;
- }
- // either command succeeds or command fails but with data payload
- try {switch (rr.mRequest) {
- /*
- cat libs/telephony/ril_commands.h \
- | egrep "^ *{RIL_" \
- | sed -re 's/\{([^,]+),[^,]+,([^}]+).+/case \1: ret = \2(p); break;/'
- */
- case RIL_REQUEST_GET_SIM_STATUS: ret = responseIccCardStatus(p); break;
- case RIL_REQUEST_ENTER_SIM_PIN: ret = responseInts(p); break;
- case RIL_REQUEST_ENTER_SIM_PUK: ret = responseInts(p); break;
- case RIL_REQUEST_ENTER_SIM_PIN2: ret = responseInts(p); break;
- case RIL_REQUEST_ENTER_SIM_PUK2: ret = responseInts(p); break;
- case RIL_REQUEST_CHANGE_SIM_PIN: ret = responseInts(p); break;
- case RIL_REQUEST_CHANGE_SIM_PIN2: ret = responseInts(p); break;
- case RIL_REQUEST_ENTER_NETWORK_DEPERSONALIZATION: ret = responseInts(p); break;
- case RIL_REQUEST_GET_CURRENT_CALLS: ret = responseCallList(p); break;
- case RIL_REQUEST_DIAL: ret = responseVoid(p); break;
- case RIL_REQUEST_GET_IMSI: ret = responseString(p); break;
- case RIL_REQUEST_HANGUP: ret = responseVoid(p); break;
- case RIL_REQUEST_HANGUP_WAITING_OR_BACKGROUND: ret = responseVoid(p); break;
- case RIL_REQUEST_HANGUP_FOREGROUND_RESUME_BACKGROUND: ret = responseVoid(p); break;
- case RIL_REQUEST_SWITCH_WAITING_OR_HOLDING_AND_ACTIVE: ret = responseVoid(p); break;
- case RIL_REQUEST_CONFERENCE: ret = responseVoid(p); break;
- case RIL_REQUEST_UDUB: ret = responseVoid(p); break;
- case RIL_REQUEST_LAST_CALL_FAIL_CAUSE: ret = responseInts(p); break;
- case RIL_REQUEST_SIGNAL_STRENGTH: ret = responseSignalStrength(p); break;
- case RIL_REQUEST_VOICE_REGISTRATION_STATE: ret = responseStrings(p); break;
- case RIL_REQUEST_DATA_REGISTRATION_STATE: ret = responseStrings(p); break;
- case RIL_REQUEST_OPERATOR: ret = responseStrings(p); break;
- case RIL_REQUEST_RADIO_POWER: ret = responseVoid(p); break;
- case RIL_REQUEST_DTMF: ret = responseVoid(p); break;
- case RIL_REQUEST_SEND_SMS: ret = responseSMS(p); break;
- case RIL_REQUEST_SEND_SMS_EXPECT_MORE: ret = responseSMS(p); break;
- case RIL_REQUEST_SETUP_DATA_CALL: ret = responseSetupDataCall(p); break;
- case RIL_REQUEST_SIM_IO: ret = responseICC_IO(p); break;
- case RIL_REQUEST_SEND_USSD: ret = responseVoid(p); break;
- case RIL_REQUEST_CANCEL_USSD: ret = responseVoid(p); break;
- case RIL_REQUEST_GET_CLIR: ret = responseInts(p); break;
- case RIL_REQUEST_SET_CLIR: ret = responseVoid(p); break;
- case RIL_REQUEST_QUERY_CALL_FORWARD_STATUS: ret = responseCallForward(p); break;
- case RIL_REQUEST_SET_CALL_FORWARD: ret = responseVoid(p); break;
- case RIL_REQUEST_QUERY_CALL_WAITING: ret = responseInts(p); break;
- case RIL_REQUEST_SET_CALL_WAITING: ret = responseVoid(p); break;
- case RIL_REQUEST_SMS_ACKNOWLEDGE: ret = responseVoid(p); break;
- case RIL_REQUEST_GET_IMEI: ret = responseString(p); break;
- case RIL_REQUEST_GET_IMEISV: ret = responseString(p); break;
- case RIL_REQUEST_ANSWER: ret = responseVoid(p); break;
- case RIL_REQUEST_DEACTIVATE_DATA_CALL: ret = responseVoid(p); break;
- case RIL_REQUEST_QUERY_FACILITY_LOCK: ret = responseInts(p); break;
- case RIL_REQUEST_SET_FACILITY_LOCK: ret = responseInts(p); break;
- case RIL_REQUEST_CHANGE_BARRING_PASSWORD: ret = responseVoid(p); break;
- case RIL_REQUEST_QUERY_NETWORK_SELECTION_MODE: ret = responseInts(p); break;
- case RIL_REQUEST_SET_NETWORK_SELECTION_AUTOMATIC: ret = responseVoid(p); break;
- case RIL_REQUEST_SET_NETWORK_SELECTION_MANUAL: ret = responseVoid(p); break;
- case RIL_REQUEST_QUERY_AVAILABLE_NETWORKS : ret = responseOperatorInfos(p); break;
- case RIL_REQUEST_DTMF_START: ret = responseVoid(p); break;
- case RIL_REQUEST_DTMF_STOP: ret = responseVoid(p); break;
- case RIL_REQUEST_BASEBAND_VERSION: ret = responseString(p); break;
- case RIL_REQUEST_SEPARATE_CONNECTION: ret = responseVoid(p); break;
- case RIL_REQUEST_SET_MUTE: ret = responseVoid(p); break;
- case RIL_REQUEST_GET_MUTE: ret = responseInts(p); break;
- case RIL_REQUEST_QUERY_CLIP: ret = responseInts(p); break;
- case RIL_REQUEST_LAST_DATA_CALL_FAIL_CAUSE: ret = responseInts(p); break;
- case RIL_REQUEST_DATA_CALL_LIST: ret = responseDataCallList(p); break;
- case RIL_REQUEST_RESET_RADIO: ret = responseVoid(p); break;
- case RIL_REQUEST_OEM_HOOK_RAW: ret = responseRaw(p); break;
- case RIL_REQUEST_OEM_HOOK_STRINGS: ret = responseStrings(p); break;
- case RIL_REQUEST_SCREEN_STATE: ret = responseVoid(p); break;
- case RIL_REQUEST_SET_SUPP_SVC_NOTIFICATION: ret = responseVoid(p); break;
- case RIL_REQUEST_WRITE_SMS_TO_SIM: ret = responseInts(p); break;
- case RIL_REQUEST_DELETE_SMS_ON_SIM: ret = responseVoid(p); break;
- case RIL_REQUEST_SET_BAND_MODE: ret = responseVoid(p); break;
- case RIL_REQUEST_QUERY_AVAILABLE_BAND_MODE: ret = responseInts(p); break;
- case RIL_REQUEST_STK_GET_PROFILE: ret = responseString(p); break;
- case RIL_REQUEST_STK_SET_PROFILE: ret = responseVoid(p); break;
- case RIL_REQUEST_STK_SEND_ENVELOPE_COMMAND: ret = responseString(p); break;
- case RIL_REQUEST_STK_SEND_TERMINAL_RESPONSE: ret = responseVoid(p); break;
- case RIL_REQUEST_STK_HANDLE_CALL_SETUP_REQUESTED_FROM_SIM: ret = responseInts(p); break;
- case RIL_REQUEST_EXPLICIT_CALL_TRANSFER: ret = responseVoid(p); break;
- case RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE: ret = responseVoid(p); break;
- case RIL_REQUEST_GET_PREFERRED_NETWORK_TYPE: ret = responseGetPreferredNetworkType(p); break;
- case RIL_REQUEST_GET_NEIGHBORING_CELL_IDS: ret = responseCellList(p); break;
- case RIL_REQUEST_SET_LOCATION_UPDATES: ret = responseVoid(p); break;
- case RIL_REQUEST_CDMA_SET_SUBSCRIPTION_SOURCE: ret = responseVoid(p); break;
- case RIL_REQUEST_CDMA_SET_ROAMING_PREFERENCE: ret = responseVoid(p); break;
- case RIL_REQUEST_CDMA_QUERY_ROAMING_PREFERENCE: ret = responseInts(p); break;
- case RIL_REQUEST_SET_TTY_MODE: ret = responseVoid(p); break;
- case RIL_REQUEST_QUERY_TTY_MODE: ret = responseInts(p); break;
- case RIL_REQUEST_CDMA_SET_PREFERRED_VOICE_PRIVACY_MODE: ret = responseVoid(p); break;
- case RIL_REQUEST_CDMA_QUERY_PREFERRED_VOICE_PRIVACY_MODE: ret = responseInts(p); break;
- case RIL_REQUEST_CDMA_FLASH: ret = responseVoid(p); break;
- case RIL_REQUEST_CDMA_BURST_DTMF: ret = responseVoid(p); break;
- case RIL_REQUEST_CDMA_SEND_SMS: ret = responseSMS(p); break;
- case RIL_REQUEST_CDMA_SMS_ACKNOWLEDGE: ret = responseVoid(p); break;
- case RIL_REQUEST_GSM_GET_BROADCAST_CONFIG: ret = responseGmsBroadcastConfig(p); break;
- case RIL_REQUEST_GSM_SET_BROADCAST_CONFIG: ret = responseVoid(p); break;
- case RIL_REQUEST_GSM_BROADCAST_ACTIVATION: ret = responseVoid(p); break;
- case RIL_REQUEST_CDMA_GET_BROADCAST_CONFIG: ret = responseCdmaBroadcastConfig(p); break;
- case RIL_REQUEST_CDMA_SET_BROADCAST_CONFIG: ret = responseVoid(p); break;
- case RIL_REQUEST_CDMA_BROADCAST_ACTIVATION: ret = responseVoid(p); break;
- case RIL_REQUEST_CDMA_VALIDATE_AND_WRITE_AKEY: ret = responseVoid(p); break;
- case RIL_REQUEST_CDMA_SUBSCRIPTION: ret = responseStrings(p); break;
- case RIL_REQUEST_CDMA_WRITE_SMS_TO_RUIM: ret = responseInts(p); break;
- case RIL_REQUEST_CDMA_DELETE_SMS_ON_RUIM: ret = responseVoid(p); break;
- case RIL_REQUEST_DEVICE_IDENTITY: ret = responseStrings(p); break;
- case RIL_REQUEST_GET_SMSC_ADDRESS: ret = responseString(p); break;
- case RIL_REQUEST_SET_SMSC_ADDRESS: ret = responseVoid(p); break;
- case RIL_REQUEST_EXIT_EMERGENCY_CALLBACK_MODE: ret = responseVoid(p); break;
- case RIL_REQUEST_REPORT_SMS_MEMORY_STATUS: ret = responseVoid(p); break;
- case RIL_REQUEST_REPORT_STK_SERVICE_IS_RUNNING: ret = responseVoid(p); break;
- /*case 104: ret = responseInts(p); break; // RIL_REQUEST_VOICE_RADIO_TECH
- case 105: ret = responseInts(p); break; // RIL_REQUEST_CDMA_GET_SUBSCRIPTION_SOURCE
- case 106: ret = responseStrings(p); break; // RIL_REQUEST_CDMA_PRL_VERSION
- case 107: ret = responseInts(p); break; // RIL_REQUEST_IMS_REGISTRATION_STATE
- case 108: ret = responseSMS(p); break; // RIL_REQUEST_IMS_SEND_SMS*/
- case 104: ret = responseInts(p); break; // RIL_REQUEST_CDMA_GET_SUBSCRIPTION_SOURCE
- case 105: ret = responseInts(p); break; // RIL_REQUEST_VOICE_RADIO_TECH
- case 106: ret = responseInts(p); break; // RIL_REQUEST_IMS_REGISTRATION_STATE
- case 107: ret = responseSMS(p); break; // RIL_REQUEST_IMS_SEND_SMS
- case 108: ret = responseInts(p); break; // RIL_REQUEST_GET_DATA_CALL_PROFILE
- case 109: ret = responseVoid(p); break; // RIL_REQUEST_SET_UICC_SUBSCRIPTION_SOURCE
- case 110: ret = responseVoid(p); break; // RIL_REQUEST_SET_DATA_SUBSCRIPTION_SOURCE
- case 111: ret = responseInts(p); break; // RIL_REQUEST_GET_UICC_SUBSCRIPTION_SOURCE
- case 112: ret = responseInts(p); break; // RIL_REQUEST_GET_DATA_SUBSCRIPTION_SOURCE
- case 113: ret = responseVoid(p); break; // RIL_REQUEST_SET_SUBSCRIPTION_MODE
- case 114: ret = responseVoid(p); break; // RIL_REQUEST_SET_TRANSMIT_POWER
- case 115: ret = responseVoid(p); break; // RIL_REQUEST_ZTE_NETWORK_UNLOCK
- case 116: ret = responseInts(p); break; // RIL_REQUEST_ZTE_GET_PREF_ONLY
- case 117: ret = responseString(p); break; // RIL_REQUEST_ZTE_BAND_SETTING
- case 118: ret = responseInts(p); break; // RIL_REQUEST_ZTE_GET_CDMA_CURRENT_STATE
-
- default:
- throw new RuntimeException("Unrecognized solicited response: " + rr.mRequest);
- //break;
- }} catch (Throwable tr) {
- // Exceptions here usually mean invalid RIL responses
- Log.w(LOG_TAG, rr.serialString() + "< "
- + requestToString(rr.mRequest)
- + " exception, possible invalid RIL response", tr);
- if (rr.mResult != null) {
- AsyncResult.forMessage(rr.mResult, null, tr);
- rr.mResult.sendToTarget();
- }
- rr.release();
- return;
- }
- }
- if (error != 0) {
- rr.onError(error, ret);
- rr.release();
- return;
- }
- if (RILJ_LOGD) riljLog(rr.serialString() + "< " + requestToString(rr.mRequest)
- + " " + retToString(rr.mRequest, ret));
- if (rr.mResult != null) {
- AsyncResult.forMessage(rr.mResult, ret, null);
- rr.mResult.sendToTarget();
- }
- rr.release();
- }
- @Override
- protected void
- processUnsolicited (Parcel p) {
- Object ret;
- int dataPosition = p.dataPosition(); // save off position within the Parcel
- int response = p.readInt();
- switch(response) {
- case RIL_UNSOL_RESPONSE_RADIO_STATE_CHANGED: ret = responseVoid(p);
- //case 1031: ret = responseVoid(p); break;
- //case 1032: ret = responseInts(p); break;
- case 1033: ret = responseVoid(p); break;
- case 1034: ret = responseInts(p); break; // RIL_UNSOL_VOICE_RADIO_TECH_CHANGED
- case 1035: ret = responseVoid(p); break; // RIL_UNSOL_RESPONSE_IMS_NETWORK_STATE_CHANGED
- case 1036: ret = responseInts(p); break; // RIL_UNSOL_RESPONSE_TETHERED_MODE_STATE_CHANGED
- case 1037: ret = responseVoid(p); break; // RIL_UNSOL_RESPONSE_DATA_NETWORK_STATE_CHANGED
- case 1038: ret = responseString(p); break; // RIL_UNSOL_ON_SS
- case 1039: ret = responseString(p); break; // RIL_UNSOL_STK_CC_ALPHA_NOTIFY
- case 1040: ret = responseInts(p); break; // RIL_UNSOL_SUBSCRIPTION_READY
- case 1041: ret = responseInts(p); break; // RIL_UNSOL_ZTE_NETWORK_LOCK_STATE
- case 1042: ret = responseInts(p); break; // RIL_UNSOL_ZTE_MIP_STATUS
- case 1043: ret = responseInts(p); break; // RILC
-
- /*case 1034: ret = responseInts(p); break; // RIL_UNSOL_VOICE_RADIO_TECH_CHANGED
- case 1035: ret = responseVoid(p); break; // RIL_UNSOL_RESPONSE_IMS_NETWORK_STATE_CHANGED
- case 1036: ret = responseInts(p); break; // RIL_UNSOL_RESPONSE_TETHERED_MODE_STATE_CHANGED
- case 1037: ret = responseVoid(p); break; // RIL_UNSOL_RESPONSE_DATA_NETWORK_STATE_CHANGED
- case 1038: ret = responseString(p); break; // RIL_UNSOL_ON_SS
- case 1039: ret = responseString(p); break; // RIL_UNSOL_STK_CC_ALPHA_NOTIFY
- case 1040: ret = responseInts(p); break; // RIL_UNSOL_SUBSCRIPTION_READY
- case 1041: ret = responseInts(p); break; // RIL_UNSOL_ZTE_NETWORK_LOCK_STATE
- case 1042: ret = responseInts(p); break; // RIL_UNSOL_ZTE_MIP_STATUS
- case 1043: ret = responseInts(p); break; // RILC*/
-
-
-
-
- default:
- // Rewind the Parcel
- p.setDataPosition(dataPosition);
-
- // Forward responses that we are not overriding to the super class
- super.processUnsolicited(p);
- return;
- }
- switch(response) {
- case RIL_UNSOL_RESPONSE_RADIO_STATE_CHANGED:
- int state = p.readInt();
- setRadioStateFromRILInt(state);
- break;
- /*case 1034:
- if (RILJ_LOGD) unsljLogRet(response, ret);
- if (mVoiceRadioTechChangedRegistrants != null) {
- mVoiceRadioTechChangedRegistrants.notifyRegistrants(
- new AsyncResult(null, ret, null));
- }
- break;*/
- /*case 1035:
- if (RILJ_LOGD) unsljLog(response);
- mImsNetworkStateChangedRegistrants
- .notifyRegistrants(new AsyncResult(null, null, null));
- break;*/
- /*case 1036:
- if (RILJ_LOGD) unsljLogvRet(response, ret);
- if (mTetheredModeStateRegistrants != null) {
- if (ret != null) {
- mTetheredModeStateRegistrants.notifyRegistrants(
- new AsyncResult (null, ret, null));
- } else {
- Log.e(LOG_TAG, "null returned, expected non-null");
- }
- }
- break;*/
- //case 1037:
- //if (RILJ_LOGD)unsljLog(response);
- //mDataNetworkStateRegistrants.notifyRegistrants(new AsyncResult(null, null, null));
- // break;
- /*case 1039:
- if (RILJ_LOGD) unsljLogRet(response, ret);
- if (mCatCcAlphaRegistrant != null) {
- mCatCcAlphaRegistrant.notifyRegistrant(
- new AsyncResult (null, ret, null));
- }
- break;*/
- case 1043:
- if (RILJ_LOGD) unsljLogRet(response, ret);
- setRadioPower(false, null);
- setPreferredNetworkType(mPreferredNetworkType, null);
- setCdmaSubscriptionSource(mCdmaSubscription, null);
- notifyRegistrantsRilConnectionChanged(((int[])ret)[0]);
- break;
-
- //case 1031:
- //case 1032:
- case 1033:
- case 1034:
- case 1035:
- case 1036:
- case 1037:
- case 1038:
- case 1039:
- case 1040:
- case 1041:
- case 1042:
- break;
-
- }
- }
- private void notifyRegistrantsRilConnectionChanged(int rilVer) {
- mRilVersion = rilVer;
- if (mRilConnectedRegistrants != null) {
- mRilConnectedRegistrants.notifyRegistrants(
- new AsyncResult (null, new Integer(rilVer), null));
- }
- }
- private void setRadioStateFromRILInt (int stateCode) {
- CommandsInterface.RadioState radioState;
- HandlerThread handlerThread;
- Looper looper;
- IccHandler iccHandler;
- switch (stateCode) {
- case RIL_INT_RADIO_OFF:
- radioState = CommandsInterface.RadioState.RADIO_OFF;
- if (mIccHandler != null) {
- mIccThread = null;
- mIccHandler = null;
- }
- break;
- case RIL_INT_RADIO_UNAVALIABLE:
- radioState = CommandsInterface.RadioState.RADIO_UNAVAILABLE;
- break;
- case RIL_INT_RADIO_ON:
- case RIL_INT_RADIO_ON_NG:
- if (mIccHandler == null) {
- handlerThread = new HandlerThread("IccHandler");
- mIccThread = handlerThread;
- mIccThread.start();
- looper = mIccThread.getLooper();
- mIccHandler = new IccHandler(this,looper);
- mIccHandler.run();
- }
- if (mPhoneType == RILConstants.CDMA_PHONE) {
- radioState = CommandsInterface.RadioState.RUIM_NOT_READY;
- } else {
- radioState = CommandsInterface.RadioState.SIM_NOT_READY;
- }
- setRadioState(radioState);
- break;
- default:
- throw new RuntimeException("Unrecognized RIL_RadioState: " + stateCode);
- }
- setRadioState (radioState);
- }
- class IccHandler extends Handler implements Runnable {
- private static final int EVENT_RADIO_ON = 1;
- private static final int EVENT_ICC_STATUS_CHANGED = 2;
- private static final int EVENT_GET_ICC_STATUS_DONE = 3;
- private static final int EVENT_RADIO_OFF_OR_UNAVAILABLE = 4;
- private RIL mRil;
- private boolean mRadioOn = false;
- public IccHandler (RIL ril, Looper looper) {
- super (looper);
- mRil = ril;
- }
- public void handleMessage (Message paramMessage) {
- switch (paramMessage.what) {
- case EVENT_RADIO_ON:
- mRadioOn = true;
- Log.d(LOG_TAG, "Radio on -> Forcing sim status update");
- sendMessage(obtainMessage(EVENT_ICC_STATUS_CHANGED));
- break;
- case EVENT_GET_ICC_STATUS_DONE:
- AsyncResult asyncResult = (AsyncResult) paramMessage.obj;
- if (asyncResult.exception != null) {
- Log.e (LOG_TAG, "IccCardStatusDone shouldn't return exceptions!", asyncResult.exception);
- break;
- }
- IccCardStatus status = (IccCardStatus) asyncResult.result;
- if (status.getNumApplications() == 0) {
- if (!mRil.getRadioState().isOn()) {
- break;
- }
- if (mPhoneType == RILConstants.CDMA_PHONE) {
- mRil.setRadioState(CommandsInterface.RadioState.RUIM_LOCKED_OR_ABSENT);
- } else {
- mRil.setRadioState(CommandsInterface.RadioState.SIM_LOCKED_OR_ABSENT);
- }
- } else {
- int appIndex = -1;
- if (mPhoneType == RILConstants.CDMA_PHONE) {
- appIndex = status.getCdmaSubscriptionAppIndex();
- Log.d(LOG_TAG, "This is a CDMA PHONE " + appIndex);
- } else {
- appIndex = status.getGsmUmtsSubscriptionAppIndex();
- Log.d(LOG_TAG, "This is a GSM PHONE " + appIndex);
- }
- IccCardApplication application = status.getApplication(appIndex);
- IccCardApplication.AppState app_state = application.app_state;
- IccCardApplication.AppType app_type = application.app_type;
- switch (app_state) {
- case APPSTATE_PIN:
- case APPSTATE_PUK:
- switch (app_type) {
- case APPTYPE_SIM:
- case APPTYPE_USIM:
- mRil.setRadioState(CommandsInterface.RadioState.SIM_LOCKED_OR_ABSENT);
- break;
- case APPTYPE_RUIM:
- mRil.setRadioState(CommandsInterface.RadioState.RUIM_LOCKED_OR_ABSENT);
- break;
- default:
- Log.e(LOG_TAG, "Currently we don't handle SIMs of type: " + app_type);
- return;
- }
- break;
- case APPSTATE_READY:
- switch (app_type) {
- case APPTYPE_SIM:
- case APPTYPE_USIM:
- mRil.setRadioState(CommandsInterface.RadioState.SIM_READY);
- break;
- case APPTYPE_RUIM:
- mRil.setRadioState(CommandsInterface.RadioState.RUIM_READY);
- break;
- default:
- Log.e(LOG_TAG, "Currently we don't handle SIMs of type: " + app_type);
- return;
- }
- break;
- default:
- return;
- }
- }
- break;
- case EVENT_ICC_STATUS_CHANGED:
- if (mRadioOn) {
- Log.d(LOG_TAG, "Received EVENT_ICC_STATUS_CHANGED, calling getIccCardStatus");
- mRil.getIccCardStatus(obtainMessage(EVENT_GET_ICC_STATUS_DONE, paramMessage.obj));
- } else {
- Log.d(LOG_TAG, "Received EVENT_ICC_STATUS_CHANGED while radio is not ON. Ignoring");
- }
- break;
- case EVENT_RADIO_OFF_OR_UNAVAILABLE:
- mRadioOn = false;
- // disposeCards(); // to be verified;
- default:
- Log.e(LOG_TAG, " Unknown Event " + paramMessage.what);
- break;
- }
- }
- public void run () {
- mRil.registerForIccStatusChanged(this, EVENT_ICC_STATUS_CHANGED, null);
- Message msg = obtainMessage(EVENT_RADIO_ON);
- mRil.getIccCardStatus(msg);
- }
- }
- @Override
- public void
- supplyIccPin(String pin, Message result) {
- //Note: This RIL request has not been renamed to ICC,
- // but this request is also valid for SIM and RUIM
- RILRequest rr = RILRequest.obtain(RIL_REQUEST_ENTER_SIM_PIN, result);
- if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
- rr.mp.writeString(mAid);
- rr.mp.writeString(pin);
- send(rr);
- }
- @Override
- public void
- supplyIccPuk(String puk, String newPin, Message result) {
- //Note: This RIL request has not been renamed to ICC,
- // but this request is also valid for SIM and RUIM
- RILRequest rr = RILRequest.obtain(RIL_REQUEST_ENTER_SIM_PUK, result);
- if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
- rr.mp.writeString(mAid);
- rr.mp.writeString(puk);
- rr.mp.writeString(newPin);
- send(rr);
- }
- @Override
- public void
- supplyIccPin2(String pin, Message result) {
- //Note: This RIL request has not been renamed to ICC,
- // but this request is also valid for SIM and RUIM
- RILRequest rr = RILRequest.obtain(RIL_REQUEST_ENTER_SIM_PIN2, result);
- if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
- rr.mp.writeString(mAid);
- rr.mp.writeString(pin);
- send(rr);
- }
- @Override
- public void
- supplyIccPuk2(String puk, String newPin2, Message result) {
- //Note: This RIL request has not been renamed to ICC,
- // but this request is also valid for SIM and RUIM
- RILRequest rr = RILRequest.obtain(RIL_REQUEST_ENTER_SIM_PUK2, result);
- if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
- rr.mp.writeString(mAid);
- rr.mp.writeString(puk);
- rr.mp.writeString(newPin2);
- send(rr);
- }
- @Override
- public void
- changeIccPin(String oldPin, String newPin, Message result) {
- //Note: This RIL request has not been renamed to ICC,
- // but this request is also valid for SIM and RUIM
- RILRequest rr = RILRequest.obtain(RIL_REQUEST_CHANGE_SIM_PIN, result);
- if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
- rr.mp.writeString(mAid);
- rr.mp.writeString(oldPin);
- rr.mp.writeString(newPin);
- send(rr);
- }
- @Override
- public void
- changeIccPin2(String oldPin2, String newPin2, Message result) {
- //Note: This RIL request has not been renamed to ICC,
- // but this request is also valid for SIM and RUIM
- RILRequest rr = RILRequest.obtain(RIL_REQUEST_CHANGE_SIM_PIN2, result);
- if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
- rr.mp.writeString(mAid);
- rr.mp.writeString(oldPin2);
- rr.mp.writeString(newPin2);
- send(rr);
- }
- @Override
- public void
- supplyNetworkDepersonalization(String netpin, Message result) {
- RILRequest rr = RILRequest.obtain(RIL_REQUEST_ENTER_NETWORK_DEPERSONALIZATION, result);
- if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
- rr.mp.writeInt(3);
- rr.mp.writeString(netpin);
- send(rr);
- }
- @Override
- public void
- getIMSI(Message result) {
- RILRequest rr = RILRequest.obtain(RIL_REQUEST_GET_IMSI, result);
- rr.mp.writeString(mAid);
- if (RILJ_LOGD) riljLog(rr.serialString() +
- "> getIMSI:RIL_REQUEST_GET_IMSI " +
- RIL_REQUEST_GET_IMSI +
- " aid: " + mAid +
- " " + requestToString(rr.mRequest));
- send(rr);
- }
- @Override
- public void
- setupDataCall(String radioTechnology, String profile, String apn,
- String user, String password, String authType, String ipVersion,
- Message result) {
- RILRequest rr
- = RILRequest.obtain(RIL_REQUEST_SETUP_DATA_CALL, result);
- rr.mp.writeInt(7);
- rr.mp.writeString(radioTechnology);
- rr.mp.writeString(profile);
- rr.mp.writeString(apn);
- rr.mp.writeString(user);
- rr.mp.writeString(password);
- rr.mp.writeString(authType);
- rr.mp.writeString("IP"); // ipVersion
- if (RILJ_LOGD) riljLog(rr.serialString() + "> "
- + requestToString(rr.mRequest) + " " + radioTechnology + " "
- + profile + " " + apn + " " + user + " "
- + password + " " + authType + " " + ipVersion);
- send(rr);
- }
- @Override
- public void
- iccIO (int command, int fileid, String path, int p1, int p2, int p3,
- String data, String pin2, Message result) {
- //Note: This RIL request has not been renamed to ICC,
- // but this request is also valid for SIM and RUIM
- RILRequest rr
- = RILRequest.obtain(RIL_REQUEST_SIM_IO, result);
- rr.mp.writeString(mAid);
- rr.mp.writeInt(command);
- rr.mp.writeInt(fileid);
- rr.mp.writeString(path);
- rr.mp.writeInt(p1);
- rr.mp.writeInt(p2);
- rr.mp.writeInt(p3);
- rr.mp.writeString(data);
- rr.mp.writeString(pin2);
- if (RILJ_LOGD) riljLog(rr.serialString() + "> iccIO: "
- + " aid: " + mAid + " "
- + requestToString(rr.mRequest)
- + " 0x" + Integer.toHexString(command)
- + " 0x" + Integer.toHexString(fileid) + " "
- + " path: " + path + ","
- + p1 + "," + p2 + "," + p3);
- send(rr);
- }
- @Override
- public void
- setNetworkSelectionModeManual(String operatorNumeric, Message response) {
- RILRequest rr
- = RILRequest.obtain(RIL_REQUEST_SET_NETWORK_SELECTION_MANUAL,
- response);
- if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
- + " " + operatorNumeric);
- rr.mp.writeInt(2);
- rr.mp.writeString(operatorNumeric);
- rr.mp.writeString("NOCHANGE");
- send(rr);
- }
- @Override
- public void
- queryFacilityLock (String facility, String password, int serviceClass,
- Message response) {
- RILRequest rr = RILRequest.obtain(RIL_REQUEST_QUERY_FACILITY_LOCK, response);
- if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
- + " aid: " + mAid + " facility: " + facility);
- if (facility.equals("SC") &&
- SystemProperties.get("ro.cm.device").indexOf("e73") == 0) {
- int [] iccstatus = new int[1];
- iccstatus[0] = mPinState;
- AsyncResult.forMessage(response, iccstatus, null);
- response.sendToTarget();
- } else {
- // count strings
- rr.mp.writeInt(4);
- rr.mp.writeString(mAid);
- rr.mp.writeString(facility);
- rr.mp.writeString(password);
- rr.mp.writeString(Integer.toString(serviceClass));
- send(rr);
- }
- }
- @Override
- public void
- setFacilityLock (String facility, boolean lockState, String password,
- int serviceClass, Message response) {
- String lockString;
- RILRequest rr
- = RILRequest.obtain(RIL_REQUEST_SET_FACILITY_LOCK, response);
- if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)
- + " aid: " + mAid + " facility: " + facility
- + " lockstate: " + lockState);
- // count strings
- rr.mp.writeInt(5);
- rr.mp.writeString(mAid);
- rr.mp.writeString(facility);
- lockString = (lockState)?"1":"0";
- rr.mp.writeString(lockString);
- rr.mp.writeString(password);
- rr.mp.writeString(Integer.toString(serviceClass));
- send(rr);
- }
- @Override
- protected Object
- responseIccCardStatus(Parcel p) {
- IccCardApplication ca;
- IccCardStatus status = new IccCardStatus();
- status.setCardState(p.readInt());
- status.setUniversalPinState(p.readInt());
- int gsmUmtsSubscriptionAppCount = p.readInt();
- for (int i = 0; i < gsmUmtsSubscriptionAppCount; i++) {
- if (i == 0)
- status.setGsmUmtsSubscriptionAppIndex(p.readInt());
- else
- p.readInt();
- }
- int cdmaSubscriptionAppCount = p.readInt();
- for (int i = 0; i < cdmaSubscriptionAppCount; i++) {
- if (i == 0)
- status.setCdmaSubscriptionAppIndex(p.readInt());
- else
- p.readInt();
- }
- int numApplications = p.readInt();
- // limit to maximum allowed applications
- if (numApplications > IccCardStatus.CARD_MAX_APPS) {
- numApplications = IccCardStatus.CARD_MAX_APPS;
- }
- status.setNumApplications(numApplications);
- for (int i = 0 ; i < numApplications ; i++) {
- ca = new IccCardApplication();
- ca.app_type = ca.AppTypeFromRILInt(p.readInt());
- ca.app_state = ca.AppStateFromRILInt(p.readInt());
- ca.perso_substate = ca.PersoSubstateFromRILInt(p.readInt());
- ca.aid = p.readString();
- ca.app_label = p.readString();
- ca.pin1_replaced = p.readInt();
- ca.pin1 = ca.PinStateFromRILInt(p.readInt());
- ca.pin2 = ca.PinStateFromRILInt(p.readInt());
- status.addApplication(ca);
- p.readInt();
- p.readInt();
- p.readInt();
- p.readInt();
- }
- int appIndex = -1;
- if (mPhoneType == RILConstants.CDMA_PHONE) {
- appIndex = status.getCdmaSubscriptionAppIndex();
- Log.d(LOG_TAG, "This is a CDMA PHONE " + appIndex);
- } else {
- appIndex = status.getGsmUmtsSubscriptionAppIndex();
- Log.d(LOG_TAG, "This is a GSM PHONE " + appIndex);
- }
- IccCardApplication application = status.getApplication(appIndex);
- mAid = application.aid;
- mPinState = (application.pin1 == IccCardStatus.PinState.PINSTATE_DISABLED ||
- application.pin1 == IccCardStatus.PinState.PINSTATE_UNKNOWN) ? 0 : 1;
- return status;
- }
- @Override
- protected DataCallState getDataCallState(Parcel p, int version) {
- DataCallState dataCall = new DataCallState();
- boolean oldRil = needsOldRilFeature("datacall");
- if (!oldRil)
- return super.getDataCallState(p, version);
- dataCall.version = 3; // was dataCall.version = version;
- dataCall.cid = p.readInt();
- dataCall.active = p.readInt();
- dataCall.type = p.readString();
- p.readString(); // apn
- String addresses = p.readString();
- if (!TextUtils.isEmpty(addresses)) {
- dataCall.addresses = addresses.split(" ");
- }
- dataCall.ifname = "rmnet0";
- p.readInt(); // RadioTechnology
- p.readInt(); // inactiveReason
- dataCall.dnses = new String[2];
- dataCall.dnses[0] = SystemProperties.get("net."+dataCall.ifname+".dns1");
- dataCall.dnses[1] = SystemProperties.get("net."+dataCall.ifname+".dns2");
- return dataCall;
- }
- @Override
- protected Object
- responseSetupDataCall(Parcel p) {
- DataCallState dataCall;
- boolean oldRil = needsOldRilFeature("datacall");
- if (!oldRil)
- return super.responseSetupDataCall(p);
- dataCall = new DataCallState();
- dataCall.version = 3;
- dataCall.cid = 0; // Integer.parseInt(p.readString());
- p.readString();
- dataCall.ifname = p.readString();
- if (TextUtils.isEmpty(dataCall.ifname)) {
- throw new RuntimeException(
- "RIL_REQUEST_SETUP_DATA_CALL response, no ifname");
- }
- String addresses = p.readString();
- if (!TextUtils.isEmpty(addresses)) {
- dataCall.addresses = addresses.split(" ");
- }
- dataCall.dnses = new String[2];
- dataCall.dnses[0] = SystemProperties.get("net."+dataCall.ifname+".dns1");
- dataCall.dnses[1] = SystemProperties.get("net."+dataCall.ifname+".dns2");
- dataCall.active = 1;
- dataCall.status = 0;
- return dataCall;
- }
- @Override
- protected Object
- responseOperatorInfos(Parcel p) {
- String strings[] = (String [])responseStrings(p);
- ArrayList<OperatorInfo> ret;
- if (strings.length % 5 != 0) {
- throw new RuntimeException(
- "RIL_REQUEST_QUERY_AVAILABLE_NETWORKS: invalid response. Got "
- + strings.length + " strings, expected multiple of 5");
- }
- ret = new ArrayList<OperatorInfo>(strings.length / 5);
- for (int i = 0 ; i < strings.length ; i += 5) {
- ret.add (
- new OperatorInfo(
- strings[i+0],
- strings[i+1],
- strings[i+2],
- strings[i+3]));
- }
- return ret;
- }
- @Override
- public void
- getBasebandVersion (Message response) {
- if (SystemProperties.get("ro.cm.device").indexOf("e73") == 0) {
- /* This model wants a RIL_REQUEST_GET_MODEM_VERSION */
- RILRequest rr
- = RILRequest.obtain(220, response);
- if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
- send(rr);
- } else {
- super.getBasebandVersion(response);
- }
- }
- }