From 0d93107fc3228382a892fa6ca2659e027888f27f Mon Sep 17 00:00:00 2001 From: maxwen Date: Tue, 18 Jun 2013 16:06:22 +0200 Subject: HTCTegra3RIL: Add custom RIL for correct STK handling (1/2) Change-Id: Ia12c85f43b5be0fe4e1cd3c3511490fd5cebe3af --- .../android/internal/telephony/HTCTegra3RIL.java | 94 ++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 src/java/com/android/internal/telephony/HTCTegra3RIL.java diff --git a/src/java/com/android/internal/telephony/HTCTegra3RIL.java b/src/java/com/android/internal/telephony/HTCTegra3RIL.java new file mode 100644 index 0000000..fe68c05 --- /dev/null +++ b/src/java/com/android/internal/telephony/HTCTegra3RIL.java @@ -0,0 +1,94 @@ +/* + * 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.os.Registrant; +import android.os.Handler; +import android.util.Log; + +/** + * Generic HTC Tegra3 RIL class + * + * {@hide} + */ +public class HTCTegra3RIL extends RIL implements CommandsInterface { + private static final int RIL_UNSOL_CUSTOMIZE_SIM_INFO = 1550; + private Object mCatProCmdBuffer; + public HTCTegra3RIL(Context context, int networkMode, int cdmaSubscription) { + super(context, networkMode, cdmaSubscription); + } + + @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_CUSTOMIZE_SIM_INFO: ret = responseString(p); break; + case RIL_UNSOL_STK_PROACTIVE_COMMAND: ret = responseString(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_CUSTOMIZE_SIM_INFO: + if (RILJ_LOGD) unsljLogRet(response, ret); + break; + case RIL_UNSOL_STK_PROACTIVE_COMMAND: + if (RILJ_LOGD) unsljLogRet(response, ret); + + if (mCatProCmdRegistrant != null) { + mCatProCmdRegistrant.notifyRegistrant( + new AsyncResult (null, ret, null)); + } else { + // The RIL will send a CAT proactive command before the + // registrant is registered. Buffer it to make sure it + // does not get ignored (and breaks CatService). + // see also SamsungExynos3RIL + mCatProCmdBuffer = ret; + } + break; + } + } + + @Override + public void setOnCatProactiveCmd(Handler h, int what, Object obj) { + mCatProCmdRegistrant = new Registrant (h, what, obj); + if (mCatProCmdBuffer != null) { + mCatProCmdRegistrant.notifyRegistrant( + new AsyncResult (null, mCatProCmdBuffer, null)); + mCatProCmdBuffer = null; + } + } + +} -- cgit v1.1