Loading Android.mk +2 −1 Original line number Diff line number Diff line Loading @@ -26,7 +26,8 @@ LOCAL_SRC_FILES := $(call all-java-files-under, src/java) \ $(call all-proto-files-under, proto) LOCAL_JAVA_LIBRARIES := voip-common ims-common LOCAL_STATIC_JAVA_LIBRARIES := android.hardware.radio@1.0-java-static LOCAL_STATIC_JAVA_LIBRARIES := android.hardware.radio@1.0-java-static \ android.hardware.radio.deprecated@1.0-java-static LOCAL_MODULE_TAGS := optional LOCAL_MODULE := telephony-common LOCAL_PROTOC_OPTIMIZE_TYPE := nano Loading src/java/com/android/internal/telephony/OemHookIndication.java 0 → 100644 +53 −0 Original line number Diff line number Diff line /** * Copyright (C) 2017 The Android Open Source 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 android.hardware.radio.deprecated.V1_0.IOemHookIndication; import android.os.AsyncResult; import java.util.ArrayList; import static com.android.internal.telephony.RILConstants.RIL_UNSOL_OEM_HOOK_RAW; /** * Class containing oem hook indication callbacks */ public class OemHookIndication extends IOemHookIndication.Stub { RIL mRil; public OemHookIndication(RIL ril) { mRil = ril; } /** * @param indicationType RadioIndicationType * @param data Data sent by oem */ public void oemHookRaw(int indicationType, ArrayList<Byte> data) { mRil.processIndication(indicationType); byte[] response = RIL.arrayListToPrimitiveArray(data); if (RIL.RILJ_LOGD) { mRil.unsljLogvRet(RIL_UNSOL_OEM_HOOK_RAW, com.android.internal.telephony.uicc.IccUtils.bytesToHexString(response)); } if (mRil.mUnsolOemHookRawRegistrant != null) { mRil.mUnsolOemHookRawRegistrant.notifyRegistrant(new AsyncResult(null, response, null)); } } } src/java/com/android/internal/telephony/OemHookResponse.java 0 → 100644 +59 −0 Original line number Diff line number Diff line /** * Copyright (C) 2017 The Android Open Source 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 android.hardware.radio.deprecated.V1_0.IOemHookResponse; import android.hardware.radio.V1_0.RadioError; import android.hardware.radio.V1_0.RadioResponseInfo; import java.util.ArrayList; /** * Class containing oem hook response callbacks */ public class OemHookResponse extends IOemHookResponse.Stub { RIL mRil; public OemHookResponse(RIL ril) { mRil = ril; } /** * @param responseInfo Response info struct containing response type, serial no. and error * @param data Data returned by oem */ public void sendRequestRawResponse(RadioResponseInfo responseInfo, ArrayList<Byte> data) { RILRequest rr = mRil.processResponse(responseInfo); if (rr != null) { byte[] ret = null; if (responseInfo.error == RadioError.NONE) { ret = RIL.arrayListToPrimitiveArray(data); RadioResponse.sendMessageResponse(rr.mResult, ret); } mRil.processResponseDone(rr, responseInfo, ret); } } /** * @param responseInfo Response info struct containing response type, serial no. and error * @param data Data returned by oem */ public void sendRequestStringsResponse(RadioResponseInfo responseInfo, ArrayList<String> data) { RadioResponse.responseStringArrayList(mRil, responseInfo, data); } } src/java/com/android/internal/telephony/RIL.java +79 −19 Original line number Diff line number Diff line Loading @@ -21,6 +21,12 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.hardware.display.DisplayManager; import android.hardware.radio.deprecated.V1_0.IOemHook; import android.hardware.radio.V1_0.CellInfoCdma; import android.hardware.radio.V1_0.CellInfoGsm; import android.hardware.radio.V1_0.CellInfoLte; import android.hardware.radio.V1_0.CellInfoType; import android.hardware.radio.V1_0.CellInfoWcdma; import android.hardware.radio.V1_0.Carrier; import android.hardware.radio.V1_0.CarrierRestrictions; import android.hardware.radio.V1_0.CdmaBroadcastSmsConfigInfo; Loading Loading @@ -66,11 +72,11 @@ import android.os.PowerManager.WakeLock; import android.os.RemoteException; import android.os.SystemClock; import android.os.SystemProperties; import android.os.WorkSource; import android.service.carrier.CarrierIdentifier; import android.telephony.CellInfo; import android.telephony.ModemActivityInfo; import android.os.WorkSource; import android.telephony.ClientRequestStats; import android.telephony.ModemActivityInfo; import android.telephony.NeighboringCellInfo; import android.telephony.PhoneNumberUtils; import android.telephony.RadioAccessFamily; Loading Loading @@ -374,7 +380,8 @@ public final class RIL extends BaseCommands implements CommandsInterface { static final int RESPONSE_SOLICITED_ACK_EXP = 3; static final int RESPONSE_UNSOLICITED_ACK_EXP = 4; static final String[] SOCKET_NAME_RIL = {"rild", "rild2", "rild3"}; static final String[] RIL_SERVICE_NAME = {"rild", "rild2", "rild3"}; static final String[] OEM_HOOK_SERVICE_NAME = {"oemhook", "oemhook2", "oemhook3"}; static final int SOCKET_OPEN_RETRY_MILLIS = 4 * 1000; static final int IRADIO_GET_SERVICE_DELAY_MILLIS = 3 * 1000; Loading Loading @@ -684,9 +691,9 @@ public final class RIL extends BaseCommands implements CommandsInterface { LocalSocketAddress l; if (mPhoneId == null || mPhoneId == 0 ) { rilSocket = SOCKET_NAME_RIL[0]; rilSocket = RIL_SERVICE_NAME[0]; } else { rilSocket = SOCKET_NAME_RIL[mPhoneId]; rilSocket = RIL_SERVICE_NAME[mPhoneId]; } try { Loading Loading @@ -788,6 +795,9 @@ public final class RIL extends BaseCommands implements CommandsInterface { RadioResponse mRadioResponse; RadioIndication mRadioIndication; volatile IRadio mRadioProxy = null; OemHookResponse mOemHookResponse; OemHookIndication mOemHookIndication; volatile IOemHook mOemHookProxy = null; final AtomicLong mRadioProxyCookie = new AtomicLong(0); final RadioProxyDeathRecipient mRadioProxyDeathRecipient; final RilHandler mRilHandler; Loading Loading @@ -821,6 +831,7 @@ public final class RIL extends BaseCommands implements CommandsInterface { private void resetProxyAndRequestList() { mRadioProxy = null; mOemHookProxy = null; RILRequest.resetSerial(); // Clear request list on close clearRequestList(RADIO_NOT_AVAILABLE, false); Loading @@ -840,13 +851,13 @@ public final class RIL extends BaseCommands implements CommandsInterface { return mRadioProxy; } try { mRadioProxy = IRadio.getService(SOCKET_NAME_RIL[mPhoneId == null ? 0 : mPhoneId]); mRadioProxy = IRadio.getService(RIL_SERVICE_NAME[mPhoneId == null ? 0 : mPhoneId]); if (mRadioProxy != null) { mRadioProxy.linkToDeath(mRadioProxyDeathRecipient, mRadioProxyCookie.incrementAndGet()); mRadioProxy.setResponseFunctions(mRadioResponse, mRadioIndication); } else { riljLoge("getRadioProxy: radioProxy == null"); riljLoge("getRadioProxy: mRadioProxy == null"); } } catch (RemoteException | RuntimeException e) { mRadioProxy = null; Loading @@ -867,6 +878,39 @@ public final class RIL extends BaseCommands implements CommandsInterface { return mRadioProxy; } private IOemHook getOemHookProxy(Message result) { if (mOemHookProxy != null) { return mOemHookProxy; } try { mOemHookProxy = IOemHook.getService( OEM_HOOK_SERVICE_NAME[mPhoneId == null ? 0 : mPhoneId]); if (mOemHookProxy != null) { // not calling linkToDeath() as ril service runs in the same process and death // notification for that should be sufficient mOemHookProxy.setResponseFunctions(mOemHookResponse, mOemHookIndication); } else { riljLoge("getOemHookProxy: mOemHookProxy == null"); } } catch (RemoteException | RuntimeException e) { mOemHookProxy = null; if (result != null) { AsyncResult.forMessage(result, null, CommandException.fromRilErrno(RADIO_NOT_AVAILABLE)); result.sendToTarget(); } // if service is not up, treat it like death notification to try to get service again mRilHandler.sendMessageDelayed( mRilHandler.obtainMessage(EVENT_RADIO_PROXY_DEAD, mRadioProxyCookie.get()), IRADIO_GET_SERVICE_DELAY_MILLIS); riljLoge("setResponseFunctions", e); } return mOemHookProxy; } //***** Constructors public RIL(Context context, int preferredNetworkType, int cdmaSubscription) { Loading @@ -893,10 +937,13 @@ public final class RIL extends BaseCommands implements CommandsInterface { mRadioResponse = new RadioResponse(this); mRadioIndication = new RadioIndication(this); mOemHookResponse = new OemHookResponse(this); mOemHookIndication = new OemHookIndication(this); mRilHandler = new RilHandler(); mRadioProxyDeathRecipient = new RadioProxyDeathRecipient(); // set radio callback; needed to set RadioIndication callback getRadioProxy(null); getOemHookProxy(null); PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE); mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, RILJ_LOG_TAG); Loading Loading @@ -2198,22 +2245,28 @@ public final class RIL extends BaseCommands implements CommandsInterface { @Override public void invokeOemRilRequestRaw(byte[] data, Message response) { RILRequest rr = RILRequest.obtain(RIL_REQUEST_OEM_HOOK_RAW, response, mRILDefaultWorkSource); IOemHook oemHookProxy = getOemHookProxy(response); if (oemHookProxy != null) { RILRequest rr = obtainRequest(RIL_REQUEST_OEM_HOOK_RAW, response, mRILDefaultWorkSource); if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) if (RILJ_LOGD) { riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + "[" + IccUtils.bytesToHexString(data) + "]"); } rr.mParcel.writeByteArray(data); send(rr); try { oemHookProxy.sendRequestRaw(rr.mSerial, primitiveArrayToArrayList(data)); } catch (RemoteException | RuntimeException e) { handleRadioProxyExceptionForRR(rr, "invokeOemRilRequestStrings", e); } } } @Override public void invokeOemRilRequestStrings(String[] strings, Message result) { IRadio radioProxy = getRadioProxy(result); if (radioProxy != null) { IOemHook oemHookProxy = getOemHookProxy(result); if (oemHookProxy != null) { RILRequest rr = obtainRequest(RIL_REQUEST_OEM_HOOK_STRINGS, result, mRILDefaultWorkSource); Loading @@ -2227,7 +2280,7 @@ public final class RIL extends BaseCommands implements CommandsInterface { } try { radioProxy.sendOemRadioRequestStrings(rr.mSerial, oemHookProxy.sendRequestStrings(rr.mSerial, new ArrayList<String>(Arrays.asList(strings))); } catch (RemoteException | RuntimeException e) { handleRadioProxyExceptionForRR(rr, "invokeOemRilRequestStrings", e); Loading Loading @@ -4490,7 +4543,6 @@ public final class RIL extends BaseCommands implements CommandsInterface { // separate CL. Other RIL commands below are deprecated and require framework // code to be modified to remove them completely. case RIL_REQUEST_SETUP_DATA_CALL: ret = responseSetupDataCall(p); break; case RIL_REQUEST_OEM_HOOK_RAW: ret = responseRaw(p); break; case RIL_REQUEST_SET_INITIAL_ATTACH_APN: ret = responseVoid(p); break; case RIL_REQUEST_SET_DATA_PROFILE: ret = responseVoid(p); break; default: Loading Loading @@ -5531,6 +5583,14 @@ public final class RIL extends BaseCommands implements CommandsInterface { return mClientWakelockTracker.getClientRequestStats(); } public static ArrayList<Byte> primitiveArrayToArrayList(byte[] arr) { ArrayList<Byte> arrayList = new ArrayList<>(arr.length); for (byte b : arr) { arrayList.add(b); } return arrayList; } public static byte[] arrayListToPrimitiveArray(ArrayList<Byte> bytes) { byte[] ret = new byte[bytes.size()]; for (int i = 0; i < ret.length; i++) { Loading src/java/com/android/internal/telephony/RadioIndication.java +35 −50 Original line number Diff line number Diff line Loading @@ -16,6 +16,41 @@ package com.android.internal.telephony; import android.hardware.radio.V1_0.CdmaCallWaiting; import android.hardware.radio.V1_0.CdmaInformationRecord; import android.hardware.radio.V1_0.CdmaLineControlInfoRecord; import android.hardware.radio.V1_0.CdmaNumberInfoRecord; import android.hardware.radio.V1_0.CdmaRedirectingNumberInfoRecord; import android.hardware.radio.V1_0.CdmaSignalInfoRecord; import android.hardware.radio.V1_0.CdmaSmsMessage; import android.hardware.radio.V1_0.CdmaT53AudioControlInfoRecord; import android.hardware.radio.V1_0.CfData; import android.hardware.radio.V1_0.IRadioIndication; import android.hardware.radio.V1_0.LceDataInfo; import android.hardware.radio.V1_0.PcoDataInfo; import android.hardware.radio.V1_0.SetupDataCallResult; import android.hardware.radio.V1_0.SimRefreshResult; import android.hardware.radio.V1_0.SsInfoData; import android.hardware.radio.V1_0.StkCcUnsolSsResult; import android.hardware.radio.V1_0.SuppSvcNotification; import android.os.AsyncResult; import android.os.SystemProperties; import android.telephony.CellInfo; import android.telephony.PcoData; import android.telephony.SignalStrength; import android.telephony.SmsMessage; import com.android.internal.telephony.TelephonyProto.SmsSession; import com.android.internal.telephony.cdma.CdmaCallWaitingNotification; import com.android.internal.telephony.cdma.CdmaInformationRecords; import com.android.internal.telephony.dataconnection.DataCallResponse; import com.android.internal.telephony.gsm.SsData; import com.android.internal.telephony.gsm.SuppServiceNotification; import com.android.internal.telephony.uicc.IccRefreshResponse; import com.android.internal.telephony.uicc.IccUtils; import java.util.ArrayList; import static com.android.internal.telephony.RILConstants.RIL_UNSOL_CALL_RING; import static com.android.internal.telephony.RILConstants.RIL_UNSOL_CDMA_CALL_WAITING; import static com.android.internal.telephony.RILConstants.RIL_UNSOL_CDMA_INFO_REC; Loading @@ -29,7 +64,6 @@ import static com.android.internal.telephony.RILConstants.RIL_UNSOL_EXIT_EMERGEN import static com.android.internal.telephony.RILConstants.RIL_UNSOL_HARDWARE_CONFIG_CHANGED; import static com.android.internal.telephony.RILConstants.RIL_UNSOL_LCEDATA_RECV; import static com.android.internal.telephony.RILConstants.RIL_UNSOL_NITZ_TIME_RECEIVED; import static com.android.internal.telephony.RILConstants.RIL_UNSOL_OEM_HOOK_RAW; import static com.android.internal.telephony.RILConstants.RIL_UNSOL_ON_USSD; import static com.android.internal.telephony.RILConstants.RIL_UNSOL_PCO_DATA; import static com.android.internal.telephony.RILConstants.RIL_UNSOL_RADIO_CAPABILITY; Loading Loading @@ -61,41 +95,6 @@ import static com.android.internal.telephony.RILConstants.RIL_UNSOL_UICC_SUBSCRI import static com.android.internal.telephony.RILConstants.RIL_UNSOL_VOICE_RADIO_TECH_CHANGED; import static com.android.internal.telephony.RILConstants.RIL_UNSOl_CDMA_PRL_CHANGED; import android.hardware.radio.V1_0.CdmaCallWaiting; import android.hardware.radio.V1_0.CdmaInformationRecord; import android.hardware.radio.V1_0.CdmaLineControlInfoRecord; import android.hardware.radio.V1_0.CdmaNumberInfoRecord; import android.hardware.radio.V1_0.CdmaRedirectingNumberInfoRecord; import android.hardware.radio.V1_0.CdmaSignalInfoRecord; import android.hardware.radio.V1_0.CdmaSmsMessage; import android.hardware.radio.V1_0.CdmaT53AudioControlInfoRecord; import android.hardware.radio.V1_0.CfData; import android.hardware.radio.V1_0.IRadioIndication; import android.hardware.radio.V1_0.LceDataInfo; import android.hardware.radio.V1_0.PcoDataInfo; import android.hardware.radio.V1_0.SetupDataCallResult; import android.hardware.radio.V1_0.SimRefreshResult; import android.hardware.radio.V1_0.SsInfoData; import android.hardware.radio.V1_0.StkCcUnsolSsResult; import android.hardware.radio.V1_0.SuppSvcNotification; import android.os.AsyncResult; import android.os.SystemProperties; import android.telephony.CellInfo; import android.telephony.PcoData; import android.telephony.SignalStrength; import android.telephony.SmsMessage; import com.android.internal.telephony.TelephonyProto.SmsSession; import com.android.internal.telephony.cdma.CdmaCallWaitingNotification; import com.android.internal.telephony.cdma.CdmaInformationRecords; import com.android.internal.telephony.dataconnection.DataCallResponse; import com.android.internal.telephony.gsm.SsData; import com.android.internal.telephony.gsm.SuppServiceNotification; import com.android.internal.telephony.uicc.IccRefreshResponse; import com.android.internal.telephony.uicc.IccUtils; import java.util.ArrayList; public class RadioIndication extends IRadioIndication.Stub { RIL mRil; Loading Loading @@ -539,20 +538,6 @@ public class RadioIndication extends IRadioIndication.Stub { } } public void oemHookRaw(int indicationType, ArrayList<Byte> data) { mRil.processIndication(indicationType); byte response[] = RIL.arrayListToPrimitiveArray(data); if (RIL.RILJ_LOGD) { mRil.unsljLogvRet(RIL_UNSOL_OEM_HOOK_RAW, IccUtils.bytesToHexString(response)); } if (mRil.mUnsolOemHookRawRegistrant != null) { mRil.mUnsolOemHookRawRegistrant.notifyRegistrant(new AsyncResult(null, response, null)); } } public void indicateRingbackTone(int indicationType, boolean start) { mRil.processIndication(indicationType); Loading Loading
Android.mk +2 −1 Original line number Diff line number Diff line Loading @@ -26,7 +26,8 @@ LOCAL_SRC_FILES := $(call all-java-files-under, src/java) \ $(call all-proto-files-under, proto) LOCAL_JAVA_LIBRARIES := voip-common ims-common LOCAL_STATIC_JAVA_LIBRARIES := android.hardware.radio@1.0-java-static LOCAL_STATIC_JAVA_LIBRARIES := android.hardware.radio@1.0-java-static \ android.hardware.radio.deprecated@1.0-java-static LOCAL_MODULE_TAGS := optional LOCAL_MODULE := telephony-common LOCAL_PROTOC_OPTIMIZE_TYPE := nano Loading
src/java/com/android/internal/telephony/OemHookIndication.java 0 → 100644 +53 −0 Original line number Diff line number Diff line /** * Copyright (C) 2017 The Android Open Source 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 android.hardware.radio.deprecated.V1_0.IOemHookIndication; import android.os.AsyncResult; import java.util.ArrayList; import static com.android.internal.telephony.RILConstants.RIL_UNSOL_OEM_HOOK_RAW; /** * Class containing oem hook indication callbacks */ public class OemHookIndication extends IOemHookIndication.Stub { RIL mRil; public OemHookIndication(RIL ril) { mRil = ril; } /** * @param indicationType RadioIndicationType * @param data Data sent by oem */ public void oemHookRaw(int indicationType, ArrayList<Byte> data) { mRil.processIndication(indicationType); byte[] response = RIL.arrayListToPrimitiveArray(data); if (RIL.RILJ_LOGD) { mRil.unsljLogvRet(RIL_UNSOL_OEM_HOOK_RAW, com.android.internal.telephony.uicc.IccUtils.bytesToHexString(response)); } if (mRil.mUnsolOemHookRawRegistrant != null) { mRil.mUnsolOemHookRawRegistrant.notifyRegistrant(new AsyncResult(null, response, null)); } } }
src/java/com/android/internal/telephony/OemHookResponse.java 0 → 100644 +59 −0 Original line number Diff line number Diff line /** * Copyright (C) 2017 The Android Open Source 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 android.hardware.radio.deprecated.V1_0.IOemHookResponse; import android.hardware.radio.V1_0.RadioError; import android.hardware.radio.V1_0.RadioResponseInfo; import java.util.ArrayList; /** * Class containing oem hook response callbacks */ public class OemHookResponse extends IOemHookResponse.Stub { RIL mRil; public OemHookResponse(RIL ril) { mRil = ril; } /** * @param responseInfo Response info struct containing response type, serial no. and error * @param data Data returned by oem */ public void sendRequestRawResponse(RadioResponseInfo responseInfo, ArrayList<Byte> data) { RILRequest rr = mRil.processResponse(responseInfo); if (rr != null) { byte[] ret = null; if (responseInfo.error == RadioError.NONE) { ret = RIL.arrayListToPrimitiveArray(data); RadioResponse.sendMessageResponse(rr.mResult, ret); } mRil.processResponseDone(rr, responseInfo, ret); } } /** * @param responseInfo Response info struct containing response type, serial no. and error * @param data Data returned by oem */ public void sendRequestStringsResponse(RadioResponseInfo responseInfo, ArrayList<String> data) { RadioResponse.responseStringArrayList(mRil, responseInfo, data); } }
src/java/com/android/internal/telephony/RIL.java +79 −19 Original line number Diff line number Diff line Loading @@ -21,6 +21,12 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.hardware.display.DisplayManager; import android.hardware.radio.deprecated.V1_0.IOemHook; import android.hardware.radio.V1_0.CellInfoCdma; import android.hardware.radio.V1_0.CellInfoGsm; import android.hardware.radio.V1_0.CellInfoLte; import android.hardware.radio.V1_0.CellInfoType; import android.hardware.radio.V1_0.CellInfoWcdma; import android.hardware.radio.V1_0.Carrier; import android.hardware.radio.V1_0.CarrierRestrictions; import android.hardware.radio.V1_0.CdmaBroadcastSmsConfigInfo; Loading Loading @@ -66,11 +72,11 @@ import android.os.PowerManager.WakeLock; import android.os.RemoteException; import android.os.SystemClock; import android.os.SystemProperties; import android.os.WorkSource; import android.service.carrier.CarrierIdentifier; import android.telephony.CellInfo; import android.telephony.ModemActivityInfo; import android.os.WorkSource; import android.telephony.ClientRequestStats; import android.telephony.ModemActivityInfo; import android.telephony.NeighboringCellInfo; import android.telephony.PhoneNumberUtils; import android.telephony.RadioAccessFamily; Loading Loading @@ -374,7 +380,8 @@ public final class RIL extends BaseCommands implements CommandsInterface { static final int RESPONSE_SOLICITED_ACK_EXP = 3; static final int RESPONSE_UNSOLICITED_ACK_EXP = 4; static final String[] SOCKET_NAME_RIL = {"rild", "rild2", "rild3"}; static final String[] RIL_SERVICE_NAME = {"rild", "rild2", "rild3"}; static final String[] OEM_HOOK_SERVICE_NAME = {"oemhook", "oemhook2", "oemhook3"}; static final int SOCKET_OPEN_RETRY_MILLIS = 4 * 1000; static final int IRADIO_GET_SERVICE_DELAY_MILLIS = 3 * 1000; Loading Loading @@ -684,9 +691,9 @@ public final class RIL extends BaseCommands implements CommandsInterface { LocalSocketAddress l; if (mPhoneId == null || mPhoneId == 0 ) { rilSocket = SOCKET_NAME_RIL[0]; rilSocket = RIL_SERVICE_NAME[0]; } else { rilSocket = SOCKET_NAME_RIL[mPhoneId]; rilSocket = RIL_SERVICE_NAME[mPhoneId]; } try { Loading Loading @@ -788,6 +795,9 @@ public final class RIL extends BaseCommands implements CommandsInterface { RadioResponse mRadioResponse; RadioIndication mRadioIndication; volatile IRadio mRadioProxy = null; OemHookResponse mOemHookResponse; OemHookIndication mOemHookIndication; volatile IOemHook mOemHookProxy = null; final AtomicLong mRadioProxyCookie = new AtomicLong(0); final RadioProxyDeathRecipient mRadioProxyDeathRecipient; final RilHandler mRilHandler; Loading Loading @@ -821,6 +831,7 @@ public final class RIL extends BaseCommands implements CommandsInterface { private void resetProxyAndRequestList() { mRadioProxy = null; mOemHookProxy = null; RILRequest.resetSerial(); // Clear request list on close clearRequestList(RADIO_NOT_AVAILABLE, false); Loading @@ -840,13 +851,13 @@ public final class RIL extends BaseCommands implements CommandsInterface { return mRadioProxy; } try { mRadioProxy = IRadio.getService(SOCKET_NAME_RIL[mPhoneId == null ? 0 : mPhoneId]); mRadioProxy = IRadio.getService(RIL_SERVICE_NAME[mPhoneId == null ? 0 : mPhoneId]); if (mRadioProxy != null) { mRadioProxy.linkToDeath(mRadioProxyDeathRecipient, mRadioProxyCookie.incrementAndGet()); mRadioProxy.setResponseFunctions(mRadioResponse, mRadioIndication); } else { riljLoge("getRadioProxy: radioProxy == null"); riljLoge("getRadioProxy: mRadioProxy == null"); } } catch (RemoteException | RuntimeException e) { mRadioProxy = null; Loading @@ -867,6 +878,39 @@ public final class RIL extends BaseCommands implements CommandsInterface { return mRadioProxy; } private IOemHook getOemHookProxy(Message result) { if (mOemHookProxy != null) { return mOemHookProxy; } try { mOemHookProxy = IOemHook.getService( OEM_HOOK_SERVICE_NAME[mPhoneId == null ? 0 : mPhoneId]); if (mOemHookProxy != null) { // not calling linkToDeath() as ril service runs in the same process and death // notification for that should be sufficient mOemHookProxy.setResponseFunctions(mOemHookResponse, mOemHookIndication); } else { riljLoge("getOemHookProxy: mOemHookProxy == null"); } } catch (RemoteException | RuntimeException e) { mOemHookProxy = null; if (result != null) { AsyncResult.forMessage(result, null, CommandException.fromRilErrno(RADIO_NOT_AVAILABLE)); result.sendToTarget(); } // if service is not up, treat it like death notification to try to get service again mRilHandler.sendMessageDelayed( mRilHandler.obtainMessage(EVENT_RADIO_PROXY_DEAD, mRadioProxyCookie.get()), IRADIO_GET_SERVICE_DELAY_MILLIS); riljLoge("setResponseFunctions", e); } return mOemHookProxy; } //***** Constructors public RIL(Context context, int preferredNetworkType, int cdmaSubscription) { Loading @@ -893,10 +937,13 @@ public final class RIL extends BaseCommands implements CommandsInterface { mRadioResponse = new RadioResponse(this); mRadioIndication = new RadioIndication(this); mOemHookResponse = new OemHookResponse(this); mOemHookIndication = new OemHookIndication(this); mRilHandler = new RilHandler(); mRadioProxyDeathRecipient = new RadioProxyDeathRecipient(); // set radio callback; needed to set RadioIndication callback getRadioProxy(null); getOemHookProxy(null); PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE); mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, RILJ_LOG_TAG); Loading Loading @@ -2198,22 +2245,28 @@ public final class RIL extends BaseCommands implements CommandsInterface { @Override public void invokeOemRilRequestRaw(byte[] data, Message response) { RILRequest rr = RILRequest.obtain(RIL_REQUEST_OEM_HOOK_RAW, response, mRILDefaultWorkSource); IOemHook oemHookProxy = getOemHookProxy(response); if (oemHookProxy != null) { RILRequest rr = obtainRequest(RIL_REQUEST_OEM_HOOK_RAW, response, mRILDefaultWorkSource); if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) if (RILJ_LOGD) { riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + "[" + IccUtils.bytesToHexString(data) + "]"); } rr.mParcel.writeByteArray(data); send(rr); try { oemHookProxy.sendRequestRaw(rr.mSerial, primitiveArrayToArrayList(data)); } catch (RemoteException | RuntimeException e) { handleRadioProxyExceptionForRR(rr, "invokeOemRilRequestStrings", e); } } } @Override public void invokeOemRilRequestStrings(String[] strings, Message result) { IRadio radioProxy = getRadioProxy(result); if (radioProxy != null) { IOemHook oemHookProxy = getOemHookProxy(result); if (oemHookProxy != null) { RILRequest rr = obtainRequest(RIL_REQUEST_OEM_HOOK_STRINGS, result, mRILDefaultWorkSource); Loading @@ -2227,7 +2280,7 @@ public final class RIL extends BaseCommands implements CommandsInterface { } try { radioProxy.sendOemRadioRequestStrings(rr.mSerial, oemHookProxy.sendRequestStrings(rr.mSerial, new ArrayList<String>(Arrays.asList(strings))); } catch (RemoteException | RuntimeException e) { handleRadioProxyExceptionForRR(rr, "invokeOemRilRequestStrings", e); Loading Loading @@ -4490,7 +4543,6 @@ public final class RIL extends BaseCommands implements CommandsInterface { // separate CL. Other RIL commands below are deprecated and require framework // code to be modified to remove them completely. case RIL_REQUEST_SETUP_DATA_CALL: ret = responseSetupDataCall(p); break; case RIL_REQUEST_OEM_HOOK_RAW: ret = responseRaw(p); break; case RIL_REQUEST_SET_INITIAL_ATTACH_APN: ret = responseVoid(p); break; case RIL_REQUEST_SET_DATA_PROFILE: ret = responseVoid(p); break; default: Loading Loading @@ -5531,6 +5583,14 @@ public final class RIL extends BaseCommands implements CommandsInterface { return mClientWakelockTracker.getClientRequestStats(); } public static ArrayList<Byte> primitiveArrayToArrayList(byte[] arr) { ArrayList<Byte> arrayList = new ArrayList<>(arr.length); for (byte b : arr) { arrayList.add(b); } return arrayList; } public static byte[] arrayListToPrimitiveArray(ArrayList<Byte> bytes) { byte[] ret = new byte[bytes.size()]; for (int i = 0; i < ret.length; i++) { Loading
src/java/com/android/internal/telephony/RadioIndication.java +35 −50 Original line number Diff line number Diff line Loading @@ -16,6 +16,41 @@ package com.android.internal.telephony; import android.hardware.radio.V1_0.CdmaCallWaiting; import android.hardware.radio.V1_0.CdmaInformationRecord; import android.hardware.radio.V1_0.CdmaLineControlInfoRecord; import android.hardware.radio.V1_0.CdmaNumberInfoRecord; import android.hardware.radio.V1_0.CdmaRedirectingNumberInfoRecord; import android.hardware.radio.V1_0.CdmaSignalInfoRecord; import android.hardware.radio.V1_0.CdmaSmsMessage; import android.hardware.radio.V1_0.CdmaT53AudioControlInfoRecord; import android.hardware.radio.V1_0.CfData; import android.hardware.radio.V1_0.IRadioIndication; import android.hardware.radio.V1_0.LceDataInfo; import android.hardware.radio.V1_0.PcoDataInfo; import android.hardware.radio.V1_0.SetupDataCallResult; import android.hardware.radio.V1_0.SimRefreshResult; import android.hardware.radio.V1_0.SsInfoData; import android.hardware.radio.V1_0.StkCcUnsolSsResult; import android.hardware.radio.V1_0.SuppSvcNotification; import android.os.AsyncResult; import android.os.SystemProperties; import android.telephony.CellInfo; import android.telephony.PcoData; import android.telephony.SignalStrength; import android.telephony.SmsMessage; import com.android.internal.telephony.TelephonyProto.SmsSession; import com.android.internal.telephony.cdma.CdmaCallWaitingNotification; import com.android.internal.telephony.cdma.CdmaInformationRecords; import com.android.internal.telephony.dataconnection.DataCallResponse; import com.android.internal.telephony.gsm.SsData; import com.android.internal.telephony.gsm.SuppServiceNotification; import com.android.internal.telephony.uicc.IccRefreshResponse; import com.android.internal.telephony.uicc.IccUtils; import java.util.ArrayList; import static com.android.internal.telephony.RILConstants.RIL_UNSOL_CALL_RING; import static com.android.internal.telephony.RILConstants.RIL_UNSOL_CDMA_CALL_WAITING; import static com.android.internal.telephony.RILConstants.RIL_UNSOL_CDMA_INFO_REC; Loading @@ -29,7 +64,6 @@ import static com.android.internal.telephony.RILConstants.RIL_UNSOL_EXIT_EMERGEN import static com.android.internal.telephony.RILConstants.RIL_UNSOL_HARDWARE_CONFIG_CHANGED; import static com.android.internal.telephony.RILConstants.RIL_UNSOL_LCEDATA_RECV; import static com.android.internal.telephony.RILConstants.RIL_UNSOL_NITZ_TIME_RECEIVED; import static com.android.internal.telephony.RILConstants.RIL_UNSOL_OEM_HOOK_RAW; import static com.android.internal.telephony.RILConstants.RIL_UNSOL_ON_USSD; import static com.android.internal.telephony.RILConstants.RIL_UNSOL_PCO_DATA; import static com.android.internal.telephony.RILConstants.RIL_UNSOL_RADIO_CAPABILITY; Loading Loading @@ -61,41 +95,6 @@ import static com.android.internal.telephony.RILConstants.RIL_UNSOL_UICC_SUBSCRI import static com.android.internal.telephony.RILConstants.RIL_UNSOL_VOICE_RADIO_TECH_CHANGED; import static com.android.internal.telephony.RILConstants.RIL_UNSOl_CDMA_PRL_CHANGED; import android.hardware.radio.V1_0.CdmaCallWaiting; import android.hardware.radio.V1_0.CdmaInformationRecord; import android.hardware.radio.V1_0.CdmaLineControlInfoRecord; import android.hardware.radio.V1_0.CdmaNumberInfoRecord; import android.hardware.radio.V1_0.CdmaRedirectingNumberInfoRecord; import android.hardware.radio.V1_0.CdmaSignalInfoRecord; import android.hardware.radio.V1_0.CdmaSmsMessage; import android.hardware.radio.V1_0.CdmaT53AudioControlInfoRecord; import android.hardware.radio.V1_0.CfData; import android.hardware.radio.V1_0.IRadioIndication; import android.hardware.radio.V1_0.LceDataInfo; import android.hardware.radio.V1_0.PcoDataInfo; import android.hardware.radio.V1_0.SetupDataCallResult; import android.hardware.radio.V1_0.SimRefreshResult; import android.hardware.radio.V1_0.SsInfoData; import android.hardware.radio.V1_0.StkCcUnsolSsResult; import android.hardware.radio.V1_0.SuppSvcNotification; import android.os.AsyncResult; import android.os.SystemProperties; import android.telephony.CellInfo; import android.telephony.PcoData; import android.telephony.SignalStrength; import android.telephony.SmsMessage; import com.android.internal.telephony.TelephonyProto.SmsSession; import com.android.internal.telephony.cdma.CdmaCallWaitingNotification; import com.android.internal.telephony.cdma.CdmaInformationRecords; import com.android.internal.telephony.dataconnection.DataCallResponse; import com.android.internal.telephony.gsm.SsData; import com.android.internal.telephony.gsm.SuppServiceNotification; import com.android.internal.telephony.uicc.IccRefreshResponse; import com.android.internal.telephony.uicc.IccUtils; import java.util.ArrayList; public class RadioIndication extends IRadioIndication.Stub { RIL mRil; Loading Loading @@ -539,20 +538,6 @@ public class RadioIndication extends IRadioIndication.Stub { } } public void oemHookRaw(int indicationType, ArrayList<Byte> data) { mRil.processIndication(indicationType); byte response[] = RIL.arrayListToPrimitiveArray(data); if (RIL.RILJ_LOGD) { mRil.unsljLogvRet(RIL_UNSOL_OEM_HOOK_RAW, IccUtils.bytesToHexString(response)); } if (mRil.mUnsolOemHookRawRegistrant != null) { mRil.mUnsolOemHookRawRegistrant.notifyRegistrant(new AsyncResult(null, response, null)); } } public void indicateRingbackTone(int indicationType, boolean start) { mRil.processIndication(indicationType); Loading