summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorRichard Ross <toastcfh@gmail.com>2012-11-26 19:07:21 -0500
committerEthan Chen <intervigil@gmail.com>2012-12-12 13:27:22 -0800
commit6cbccb7ef071f78b031daf5d74d5cb5cf314ad30 (patch)
tree14123d0de7b2d1185bb92f9af0c31e676bf299a1 /src
parent2730d39d9f71213d44ca5eed5355a77839fe2cf7 (diff)
downloadframeworks_opt_telephony-6cbccb7ef071f78b031daf5d74d5cb5cf314ad30.zip
frameworks_opt_telephony-6cbccb7ef071f78b031daf5d74d5cb5cf314ad30.tar.gz
frameworks_opt_telephony-6cbccb7ef071f78b031daf5d74d5cb5cf314ad30.tar.bz2
RIL: add HTC radio state and RIL class
Patchset 4: restore more HTC unsol message resoponses support from patchset 2. Patchset 5: move HTC-specific messages into HTCQualcommRIL Change-Id: I619198437c421348df3c3ff5d0a24f839c5ac43f
Diffstat (limited to 'src')
-rw-r--r--src/java/com/android/internal/telephony/HTCQualcommRIL.java193
-rw-r--r--src/java/com/android/internal/telephony/RIL.java3
2 files changed, 195 insertions, 1 deletions
diff --git a/src/java/com/android/internal/telephony/HTCQualcommRIL.java b/src/java/com/android/internal/telephony/HTCQualcommRIL.java
new file mode 100644
index 0000000..7a6a67a
--- /dev/null
+++ b/src/java/com/android/internal/telephony/HTCQualcommRIL.java
@@ -0,0 +1,193 @@
+/*
+ * Copyright (C) 2012 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.HandlerThread;
+import android.os.Looper;
+import android.os.Message;
+import android.os.Parcel;
+import android.telephony.SignalStrength;
+import android.text.TextUtils;
+import android.util.Log;
+
+import com.android.internal.telephony.IccCardApplicationStatus;
+import com.android.internal.telephony.IccCardStatus;
+
+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.
+ *
+ * {@hide}
+ */
+public class HTCQualcommRIL extends RIL implements CommandsInterface {
+
+ private static final int RIL_UNSOL_ENTER_LPM = 1523;
+ private static final int RIL_UNSOL_CDMA_3G_INDICATOR = 3009;
+ private static final int RIL_UNSOL_CDMA_ENHANCE_ROAMING_INDICATOR = 3012;
+ private static final int RIL_UNSOL_RESPONSE_PHONE_MODE_CHANGE = 6002;
+ private static final int RIL_UNSOL_RESPONSE_VOICE_RADIO_TECH_CHANGED = 21004;
+ private static final int RIL_UNSOL_RESPONSE_IMS_NETWORK_STATE_CHANGED = 21005;
+ private static final int RIL_UNSOL_RESPONSE_DATA_NETWORK_STATE_CHANGED = 21007;
+
+ public HTCQualcommRIL(Context context, int networkMode, int cdmaSubscription) {
+ super(context, networkMode, cdmaSubscription);
+ }
+
+ @Override
+ protected Object
+ responseIccCardStatus(Parcel p) {
+ IccCardApplicationStatus appStatus;
+
+ // use old needsOldRilFeature method for feature. it would be redundant to make
+ // a new method just for naming sake.
+ boolean oldRil = needsOldRilFeature("icccardstatus");
+
+ IccCardStatus cardStatus = new IccCardStatus();
+ cardStatus.setCardState(p.readInt());
+ cardStatus.setUniversalPinState(p.readInt());
+ cardStatus.mGsmUmtsSubscriptionAppIndex = p.readInt();
+ cardStatus.mCdmaSubscriptionAppIndex = p.readInt();
+
+ if (!oldRil)
+ cardStatus.mImsSubscriptionAppIndex = p.readInt();
+
+ int numApplications = p.readInt();
+
+ // limit to maximum allowed applications
+ if (numApplications > IccCardStatus.CARD_MAX_APPS) {
+ numApplications = IccCardStatus.CARD_MAX_APPS;
+ }
+ cardStatus.mApplications = new IccCardApplicationStatus[numApplications];
+
+ for (int i = 0 ; i < numApplications ; i++) {
+ appStatus = new IccCardApplicationStatus();
+ appStatus.app_type = appStatus.AppTypeFromRILInt(p.readInt());
+ appStatus.app_state = appStatus.AppStateFromRILInt(p.readInt());
+ appStatus.perso_substate = appStatus.PersoSubstateFromRILInt(p.readInt());
+ if ((appStatus.app_state == IccCardApplicationStatus.AppState.APPSTATE_SUBSCRIPTION_PERSO) &&
+ ((appStatus.perso_substate == IccCardApplicationStatus.PersoSubState.PERSOSUBSTATE_READY) ||
+ (appStatus.perso_substate == IccCardApplicationStatus.PersoSubState.PERSOSUBSTATE_UNKNOWN))) {
+ // ridiculous HTC hack
+ appStatus.app_state = IccCardApplicationStatus.AppState.APPSTATE_UNKNOWN;
+ Log.d(LOG_TAG, "ca.app_state == AppState.APPSTATE_SUBSCRIPTION_PERSO");
+ Log.d(LOG_TAG, "ca.perso_substate == PersoSubState.PERSOSUBSTATE_READY");
+ }
+ appStatus.aid = p.readString();
+ appStatus.app_label = p.readString();
+ appStatus.pin1_replaced = p.readInt();
+ appStatus.pin1 = appStatus.PinStateFromRILInt(p.readInt());
+ appStatus.pin2 = appStatus.PinStateFromRILInt(p.readInt());
+ cardStatus.mApplications[i] = appStatus;
+ }
+ return cardStatus;
+ }
+
+ @Override
+ protected Object
+ responseSignalStrength(Parcel p) {
+ /* HTC signal strength format:
+ * 0: GW_SignalStrength
+ * 1: GW_SignalStrength.bitErrorRate
+ * 2: CDMA_SignalStrength.dbm
+ * 3: CDMA_SignalStrength.ecio
+ * 4: EVDO_SignalStrength.dbm
+ * 5: EVDO_SignalStrength.ecio
+ * 6: EVDO_SignalStrength.signalNoiseRatio
+ * 7: ATT_SignalStrength.dbm
+ * 8: ATT_SignalStrength.ecno
+ * 9: LTE_SignalStrength.signalStrength
+ * 10: LTE_SignalStrength.rsrp
+ * 11: LTE_SignalStrength.rsrq
+ * 12: LTE_SignalStrength.rssnr
+ * 13: LTE_SignalStrength.cqi
+ */
+
+ int gsmSignalStrength = p.readInt();
+ int gsmBitErrorRate = p.readInt();
+ int cdmaDbm = p.readInt();
+ int cdmaEcio = p.readInt();
+ int evdoDbm = p.readInt();
+ int evdoEcio = p.readInt();
+ int evdoSnr = p.readInt();
+ p.readInt(); // ATT_SignalStrength.dbm
+ p.readInt(); // ATT_SignalStrength.ecno
+ int lteSignalStrength = p.readInt();
+ int lteRsrp = p.readInt();
+ int lteRsrq = p.readInt();
+ int lteRssnr = p.readInt();
+ int lteCqi = p.readInt();
+ boolean isGsm = (mPhoneType == RILConstants.GSM_PHONE);
+
+ SignalStrength signalStrength = new SignalStrength(gsmSignalStrength,
+ gsmBitErrorRate, cdmaDbm, cdmaEcio, evdoDbm, evdoEcio, evdoSnr,
+ lteSignalStrength, lteRsrp, lteRsrq, lteRssnr, lteCqi, isGsm);
+
+ return signalStrength;
+ }
+
+ @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_ENTER_LPM: ret = responseVoid(p); break;
+ case RIL_UNSOL_CDMA_3G_INDICATOR: ret = responseInts(p); break;
+ case RIL_UNSOL_CDMA_ENHANCE_ROAMING_INDICATOR: ret = responseInts(p); break;
+ case RIL_UNSOL_RESPONSE_PHONE_MODE_CHANGE: ret = responseInts(p); break;
+ case RIL_UNSOL_RESPONSE_VOICE_RADIO_TECH_CHANGED: ret = responseVoid(p); break;
+ case RIL_UNSOL_RESPONSE_IMS_NETWORK_STATE_CHANGED: ret = responseVoid(p); break;
+ case RIL_UNSOL_RESPONSE_DATA_NETWORK_STATE_CHANGED: ret = responseVoid(p); break;
+
+ 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_ENTER_LPM:
+ case RIL_UNSOL_CDMA_3G_INDICATOR:
+ case RIL_UNSOL_CDMA_ENHANCE_ROAMING_INDICATOR:
+ case RIL_UNSOL_RESPONSE_PHONE_MODE_CHANGE:
+ case RIL_UNSOL_RESPONSE_VOICE_RADIO_TECH_CHANGED:
+ case RIL_UNSOL_RESPONSE_IMS_NETWORK_STATE_CHANGED:
+ case RIL_UNSOL_RESPONSE_DATA_NETWORK_STATE_CHANGED:
+ if (RILJ_LOGD) unsljLogRet(response, ret);
+
+ if (mExitEmergencyCallbackModeRegistrants != null) {
+ mExitEmergencyCallbackModeRegistrants.notifyRegistrants(
+ new AsyncResult (null, null, null));
+ }
+ break;
+ }
+ }
+
+}
diff --git a/src/java/com/android/internal/telephony/RIL.java b/src/java/com/android/internal/telephony/RIL.java
index 9dfd905..40bba2a 100644
--- a/src/java/com/android/internal/telephony/RIL.java
+++ b/src/java/com/android/internal/telephony/RIL.java
@@ -2114,7 +2114,8 @@ public class RIL extends BaseCommands implements CommandsInterface {
case 7:
case 8:
case 9:
- case 10: state = RadioState.RADIO_ON; break;
+ case 10:
+ case 13: state = RadioState.RADIO_ON; break;
default:
throw new RuntimeException(