Permalink
Browse files

Introduce HuaweiQualcommRIL's evil Gingerbread twin

  • Loading branch information...
1 parent 6873403 commit 97634be8c86e288dd2e9d8557be42357ef54f32a @Dazzozo committed Feb 20, 2013
Showing with 206 additions and 1 deletion.
  1. +2 −0 device_u8815.mk
  2. +203 −0 ril/telephony/java/com/android/internal/telephony/HuaweiQualcommRIL.java
  3. +1 −1 system.prop
View
@@ -4,6 +4,8 @@ $(call inherit-product, $(SRC_TARGET_DIR)/product/full_base.mk)
$(call inherit-product, device/common/gps/gps_eu_supl.mk)
+FRAMEWORKS_BASE_SUBDIRS += ../../$(LOCAL_PATH)/ril/
+
DEVICE_PACKAGE_OVERLAYS := device/huawei/u8815/overlay
PRODUCT_PACKAGES += \
@@ -0,0 +1,203 @@
+/*
+ * 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.Message;
+import android.os.Parcel;
+import android.util.Log;
+
+import com.android.internal.telephony.DataCallState;
+import com.android.internal.telephony.gsm.NetworkInfo;
+import com.android.internal.telephony.IccCardApplication;
+import com.android.internal.telephony.IccCardStatus;
+
+import java.util.ArrayList;
+
+/**
+ * Custom Qualcomm No SimReady RIL for Huawei
+ *
+ * {@hide}
+ */
+public class HuaweiQualcommRIL extends QualcommNoSimReadyRIL implements CommandsInterface {
+ protected String mAid;
+
+ public HuaweiQualcommRIL(Context context) {
+ super(context);
+ }
+
+ public HuaweiQualcommRIL(Context context, int networkMode, int cdmaSubscription) {
+ super(context, networkMode, cdmaSubscription);
+ }
+
+ @Override
+ public void
+ deactivateDataCall(int cid, Message result) {
+ RILRequest rr
+ = RILRequest.obtain(RIL_REQUEST_DEACTIVATE_DATA_CALL, result);
+
+ rr.mp.writeInt(2);
+ rr.mp.writeString(Integer.toString(cid));
+ rr.mp.writeString("0");
+
+ if (RILJ_LOGD) riljLog(rr.serialString() + "> " +
+ requestToString(rr.mRequest) + " " + cid);
+
+ send(rr);
+ }
+
+ @Override
+ public void
+ getIMSI(Message result) {
+ RILRequest rr = RILRequest.obtain(RIL_REQUEST_GET_IMSI, result);
+
+ rr.mp.writeInt(1);
+ 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
+ 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.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);
+ rr.mp.writeString(mAid);
+
+ 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
+ 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);
+
+ // count strings
+ rr.mp.writeInt(4);
+
+ rr.mp.writeString(facility);
+ rr.mp.writeString(password);
+ rr.mp.writeString(Integer.toString(serviceClass));
+ rr.mp.writeString(mAid);
+
+ 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(facility);
+ lockString = (lockState)?"1":"0";
+ rr.mp.writeString(lockString);
+ rr.mp.writeString(password);
+ rr.mp.writeString(Integer.toString(serviceClass));
+ rr.mp.writeString(mAid);
+
+ send(rr);
+ }
+
+ @Override
+ protected Object
+ responseIccCardStatus(Parcel p) {
+ IccCardApplication ca;
+
+ IccCardStatus status = new IccCardStatus();
+ status.setCardState(p.readInt());
+ status.setUniversalPinState(p.readInt());
+ status.setGsmUmtsSubscriptionAppIndex(p.readInt());
+ status.setCdmaSubscriptionAppIndex(p.readInt());
+ p.readInt(); // ImsSubscriptionAppIndex
+ 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 = p.readInt();
+ ca.pin2 = p.readInt();
+ status.addApplication(ca);
+ }
+
+ 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;
+
+ return status;
+ }
+}
View
@@ -4,7 +4,7 @@
rild.libpath=/system/lib/libril-qc-1.so
rild.libargs=-d /dev/smd0
ro.telephony.default_network=0
-ro.telephony.ril_class=HWQcomRIL
+ro.telephony.ril_class=HuaweiQualcommRIL
ril.subscription.types=NV,RUIM
DEVICE_PROVISIONED=1
debug.sf.hw=1

0 comments on commit 97634be

Please sign in to comment.