From 8e37a60955527622c10f6731e8061e70749ae3d1 Mon Sep 17 00:00:00 2001 From: rogersb11 Date: Sat, 31 Oct 2015 06:41:20 -0400 Subject: Kang ril updates from jf Change-Id: I444bf1c0ea975efb37294bf923359048e70e9281 --- .../internal/telephony/smdk4x12QComRIL.java | 263 +++++---------------- 1 file changed, 57 insertions(+), 206 deletions(-) diff --git a/ril/telephony/java/com/android/internal/telephony/smdk4x12QComRIL.java b/ril/telephony/java/com/android/internal/telephony/smdk4x12QComRIL.java index 0e8d798..99512c5 100644 --- a/ril/telephony/java/com/android/internal/telephony/smdk4x12QComRIL.java +++ b/ril/telephony/java/com/android/internal/telephony/smdk4x12QComRIL.java @@ -67,18 +67,18 @@ public class smdk4x12QComRIL extends RIL implements CommandsInterface { public static final long SEND_SMS_TIMEOUT_IN_MS = 30000; private boolean samsungEmergency = needsOldRilFeature("samsungEMSReq"); - private Message mPendingGetSimStatus; - public smdk4x12QComRIL(Context context, int preferredNetworkType, int cdmaSubscription, Integer instanceId) { - this(context, preferredNetworkType, cdmaSubscription); + super(context, preferredNetworkType, cdmaSubscription, instanceId); + mAudioManager = (AudioManager)mContext.getSystemService(Context.AUDIO_SERVICE); + mQANElements = SystemProperties.getInt("ro.ril.telephony.mqanelements", 4); } public smdk4x12QComRIL(Context context, int networkMode, int cdmaSubscription) { super(context, networkMode, cdmaSubscription); mAudioManager = (AudioManager)mContext.getSystemService(Context.AUDIO_SERVICE); - mQANElements = SystemProperties.getInt("ro.ril.telephony.mqanelements", 6); + mQANElements = SystemProperties.getInt("ro.ril.telephony.mqanelements", 4); } @Override @@ -191,7 +191,7 @@ public class smdk4x12QComRIL extends RIL implements CommandsInterface { @Override protected Object responseSignalStrength(Parcel p) { - int numInts = 13; + int numInts = 12; int response[]; // Get raw data @@ -206,7 +206,7 @@ public class smdk4x12QComRIL extends RIL implements CommandsInterface { response[4] %= 256; response[7] &= 0xff; - return new SignalStrength(response[0], response[1], response[2], response[3], response[4], response[5], response[6], response[7], response[8], response[9], response[10], response[11], (response[12] != 0)); + return new SignalStrength(response[0], response[1], response[2], response[3], response[4], response[5], response[6], response[7], response[8], response[9], response[10], response[11], true); } @@ -357,213 +357,59 @@ public class smdk4x12QComRIL extends RIL implements CommandsInterface { processSolicited (Parcel p) { int serial, error; boolean found = false; - + int dataPosition = p.dataPosition(); // save off position within the Parcel serial = p.readInt(); error = p.readInt(); - - RILRequest rr; - + RILRequest rr = null; + /* Pre-process the reply before popping it */ + synchronized (mRequestList) { + RILRequest tr = mRequestList.get(serial); + if (tr != null && tr.mSerial == serial) { + if (error == 0 || p.dataAvail() > 0) { + try {switch (tr.mRequest) { + /* Get those we're interested in */ + case RIL_REQUEST_VOICE_REGISTRATION_STATE: + case RIL_REQUEST_DATA_REGISTRATION_STATE: + case RIL_REQUEST_OPERATOR: + rr = tr; + break; + }} catch (Throwable thr) { + // Exceptions here usually mean invalid RIL responses + if (tr.mResult != null) { + AsyncResult.forMessage(tr.mResult, null, thr); + tr.mResult.sendToTarget(); + } + return tr; + } + } + } + } + if (rr == null) { + /* Nothing we care about, go up */ + p.setDataPosition(dataPosition); + // Forward responses that we are not overriding to the super class + return super.processSolicited(p); + } rr = findAndRemoveRequestFromList(serial); - if (rr == null) { - Rlog.w(RILJ_LOG_TAG, "Unexpected solicited response! sn: " - + serial + " error: " + error); - return null; + return rr; } - Object ret = null; - if (error == 0 || p.dataAvail() > 0) { - // 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_DEPERSONALIZATION_CODE: 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: { - if (mTestingEmergencyCall.getAndSet(false)) { - if (mEmergencyCallbackModeRegistrant != null) { - riljLog("testing emergency call, notify ECM Registrants"); - mEmergencyCallbackModeRegistrant.notifyRegistrant(); - } - } - ret = responseVoid(p); - break; + switch (rr.mRequest) { + case RIL_REQUEST_VOICE_REGISTRATION_STATE: ret = responseVoiceDataRegistrationState(p, false); break; + case RIL_REQUEST_DATA_REGISTRATION_STATE: ret = responseVoiceDataRegistrationState(p, true); break; + case RIL_REQUEST_OPERATOR: ret = operatorCheck(p); break; + default: + throw new RuntimeException("Unrecognized solicited response: " + rr.mRequest); } - 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 = responseVoiceDataRegistrationState(p); break; - case RIL_REQUEST_DATA_REGISTRATION_STATE: ret = responseVoiceDataRegistrationState(p); break; - case RIL_REQUEST_OPERATOR: ret = operatorCheck(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 RIL_REQUEST_CDMA_GET_SUBSCRIPTION_SOURCE: ret = responseInts(p); break; - case RIL_REQUEST_ISIM_AUTHENTICATION: ret = responseString(p); break; - case RIL_REQUEST_ACKNOWLEDGE_INCOMING_GSM_SMS_WITH_PDU: ret = responseVoid(p); break; - case RIL_REQUEST_STK_SEND_ENVELOPE_WITH_STATUS: ret = responseICC_IO(p); break; - case RIL_REQUEST_VOICE_RADIO_TECH: ret = responseInts(p); break; - case RIL_REQUEST_GET_CELL_INFO_LIST: ret = responseCellInfoList(p); break; - case RIL_REQUEST_SET_UNSOL_CELL_INFO_LIST_RATE: ret = responseVoid(p); break; - case RIL_REQUEST_SET_INITIAL_ATTACH_APN: ret = responseVoid(p); break; - case RIL_REQUEST_IMS_REGISTRATION_STATE: ret = responseInts(p); break; - case RIL_REQUEST_IMS_SEND_SMS: ret = responseSMS(p); break; - default: - throw new RuntimeException("Unrecognized solicited response: " + rr.mRequest); //break; - }} catch (Throwable tr) { - // Exceptions here usually mean invalid RIL responses - - Rlog.w(RILJ_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(); - } - return rr; - } } - - // Here and below fake RIL_UNSOL_RESPONSE_SIM_STATUS_CHANGED, see b/7255789. - // This is needed otherwise we don't automatically transition to the main lock - // screen when the pin or puk is entered incorrectly. - switch (rr.mRequest) { - case RIL_REQUEST_ENTER_SIM_PUK: - case RIL_REQUEST_ENTER_SIM_PUK2: - if (mIccStatusChangedRegistrants != null) { - if (RILJ_LOGD) { - riljLog("ON enter sim puk fakeSimStatusChanged: reg count=" - + mIccStatusChangedRegistrants.size()); - } - mIccStatusChangedRegistrants.notifyRegistrants(); - } - break; - } - - if (error != 0) { - switch (rr.mRequest) { - case RIL_REQUEST_ENTER_SIM_PIN: - case RIL_REQUEST_ENTER_SIM_PIN2: - case RIL_REQUEST_CHANGE_SIM_PIN: - case RIL_REQUEST_CHANGE_SIM_PIN2: - case RIL_REQUEST_SET_FACILITY_LOCK: - if (mIccStatusChangedRegistrants != null) { - if (RILJ_LOGD) { - riljLog("ON some errors fakeSimStatusChanged: reg count=" - + mIccStatusChangedRegistrants.size()); - } - mIccStatusChangedRegistrants.notifyRegistrants(); - } - break; - } - - rr.onError(error, ret); - } else { - - 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(); - } + 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(); } return rr; } @@ -580,9 +426,15 @@ public class smdk4x12QComRIL extends RIL implements CommandsInterface { } private Object - responseVoiceDataRegistrationState(Parcel p) { + responseVoiceDataRegistrationState(Parcel p, boolean data) { String response[] = (String[])responseStrings(p); if (isGSM){ + if (data && + response.length > 4 && + response[0].equals("1") && + response[3].equals("102")) { + response[3] = "2"; + } return response; } if (response.length>=10){ @@ -731,7 +583,6 @@ public class smdk4x12QComRIL extends RIL implements CommandsInterface { + strings.length + " strings, expected multiple of " + mQANElements); } - Rlog.v(RILJ_LOG_TAG, "responseOperatorInfos"); ret = new ArrayList(strings.length / mQANElements); Operators init = null; if (strings.length != 0) { @@ -765,7 +616,7 @@ public class smdk4x12QComRIL extends RIL implements CommandsInterface { } static final int RIL_REQUEST_DIAL_EMERGENCY = 10016; - public void + private void dialEmergencyCall(String address, int clirMode, Message result) { RILRequest rr; Rlog.v(RILJ_LOG_TAG, "Emergency dial: " + address); -- cgit v1.2.3