| /* |
| * Copyright (C) 2021 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.os.RemoteException; |
| import android.telephony.CarrierRestrictionRules; |
| import android.telephony.ImsiEncryptionInfo; |
| import android.telephony.Rlog; |
| |
| import com.android.internal.telephony.uicc.IccCardApplicationStatus.PersoSubState; |
| import com.android.internal.telephony.uicc.SimPhonebookRecord; |
| |
| /** |
| * A holder for IRadioSim. |
| * Use getAidl to get IRadioSim and call the AIDL implementations of the HAL APIs. |
| */ |
| public class RadioSimProxy extends RadioServiceProxy { |
| private static final String TAG = "RadioSimProxy"; |
| private volatile android.hardware.radio.sim.IRadioSim mSimProxy = null; |
| |
| /** |
| * Set IRadioSim as the AIDL implementation for RadioServiceProxy |
| * @param halVersion Radio HAL version |
| * @param sim IRadioSim implementation |
| * |
| * @return updated HAL version |
| */ |
| public HalVersion setAidl(HalVersion halVersion, android.hardware.radio.sim.IRadioSim sim) { |
| HalVersion version = halVersion; |
| try { |
| version = RIL.getServiceHalVersion(sim.getInterfaceVersion()); |
| } catch (RemoteException e) { |
| Rlog.e(TAG, "setAidl: " + e); |
| } |
| mHalVersion = version; |
| mSimProxy = sim; |
| mIsAidl = true; |
| |
| Rlog.d(TAG, "AIDL initialized mHalVersion=" + mHalVersion); |
| return mHalVersion; |
| } |
| |
| /** |
| * Get the AIDL implementation of RadioSimProxy |
| * @return IRadioSim implementation |
| */ |
| public android.hardware.radio.sim.IRadioSim getAidl() { |
| return mSimProxy; |
| } |
| |
| /** |
| * Reset RadioSimProxy |
| */ |
| @Override |
| public void clear() { |
| super.clear(); |
| mSimProxy = null; |
| } |
| |
| /** |
| * Check whether a RadioSim implementation exists |
| * @return true if there is neither a HIDL nor AIDL implementation |
| */ |
| @Override |
| public boolean isEmpty() { |
| return mRadioProxy == null && mSimProxy == null; |
| } |
| |
| /** |
| * Call IRadioSim#areUiccApplicationsEnabled |
| * @param serial Serial number of request |
| * @throws RemoteException |
| */ |
| public void areUiccApplicationsEnabled(int serial) throws RemoteException { |
| if (isEmpty() || mHalVersion.less(RIL.RADIO_HAL_VERSION_1_5)) return; |
| if (isAidl()) { |
| mSimProxy.areUiccApplicationsEnabled(serial); |
| } else { |
| ((android.hardware.radio.V1_5.IRadio) mRadioProxy).areUiccApplicationsEnabled(serial); |
| } |
| } |
| |
| /** |
| * Call IRadioSim#changeIccPin2ForApp |
| * @param serial Serial number of request |
| * @param oldPin2 Old PIN value |
| * @param newPin2 New PIN value |
| * @param aid Application ID |
| * @throws RemoteException |
| */ |
| public void changeIccPin2ForApp(int serial, String oldPin2, String newPin2, String aid) |
| throws RemoteException { |
| if (isEmpty()) return; |
| if (isAidl()) { |
| mSimProxy.changeIccPin2ForApp(serial, oldPin2, newPin2, aid); |
| } else { |
| mRadioProxy.changeIccPin2ForApp(serial, oldPin2, newPin2, aid); |
| } |
| } |
| |
| /** |
| * Call IRadioSim#changeIccPinForApp |
| * @param serial Serial number of request |
| * @param oldPin Old PIN value |
| * @param newPin New PIN value |
| * @param aid Application ID |
| * @throws RemoteException |
| */ |
| public void changeIccPinForApp(int serial, String oldPin, String newPin, String aid) |
| throws RemoteException { |
| if (isEmpty()) return; |
| if (isAidl()) { |
| mSimProxy.changeIccPinForApp(serial, oldPin, newPin, aid); |
| } else { |
| mRadioProxy.changeIccPinForApp(serial, oldPin, newPin, aid); |
| } |
| } |
| |
| /** |
| * Call IRadioSim#enableUiccApplications |
| * @param serial Serial number of request |
| * @param enable Whether or not to enable UiccApplications on the SIM |
| * @throws RemoteException |
| */ |
| public void enableUiccApplications(int serial, boolean enable) throws RemoteException { |
| if (isEmpty() || mHalVersion.less(RIL.RADIO_HAL_VERSION_1_5)) return; |
| if (isAidl()) { |
| mSimProxy.enableUiccApplications(serial, enable); |
| } else { |
| ((android.hardware.radio.V1_5.IRadio) mRadioProxy).enableUiccApplications( |
| serial, enable); |
| } |
| } |
| |
| /** |
| * Call IRadioSim#getAllowedCarriers |
| * @param serial Serial number of request |
| * @throws RemoteException |
| */ |
| public void getAllowedCarriers(int serial) throws RemoteException { |
| if (isEmpty()) return; |
| if (isAidl()) { |
| mSimProxy.getAllowedCarriers(serial); |
| } else { |
| mRadioProxy.getAllowedCarriers_1_4(serial); |
| } |
| } |
| |
| /** |
| * Call IRadioSim#getCdmaSubscription |
| * @param serial Serial number of request |
| * @throws RemoteException |
| */ |
| public void getCdmaSubscription(int serial) throws RemoteException { |
| if (isEmpty()) return; |
| if (isAidl()) { |
| mSimProxy.getCdmaSubscription(serial); |
| } else { |
| mRadioProxy.getCDMASubscription(serial); |
| } |
| } |
| |
| /** |
| * Call IRadioSim#getCdmaSubscriptionSource |
| * @param serial Serial number of request |
| * @throws RemoteException |
| */ |
| public void getCdmaSubscriptionSource(int serial) throws RemoteException { |
| if (isEmpty()) return; |
| if (isAidl()) { |
| mSimProxy.getCdmaSubscriptionSource(serial); |
| } else { |
| mRadioProxy.getCdmaSubscriptionSource(serial); |
| } |
| } |
| |
| /** |
| * Call IRadioSim#getFacilityLockForApp |
| * @param serial Serial number of request |
| * @param facility One of CB_FACILTY_* |
| * @param password Password or "" if not required |
| * @param serviceClass Sum of SERVICE_CLASS_* |
| * @param appId Application ID or null if none |
| * @throws RemoteException |
| */ |
| public void getFacilityLockForApp(int serial, String facility, String password, |
| int serviceClass, String appId) throws RemoteException { |
| if (isEmpty()) return; |
| if (isAidl()) { |
| mSimProxy.getFacilityLockForApp(serial, facility, password, serviceClass, appId); |
| } else { |
| mRadioProxy.getFacilityLockForApp(serial, facility, password, serviceClass, appId); |
| } |
| } |
| |
| /** |
| * Call IRadioSim#getIccCardStatus |
| * @param serial Serial number of request |
| * @throws RemoteException |
| */ |
| public void getIccCardStatus(int serial) throws RemoteException { |
| if (isEmpty()) return; |
| if (isAidl()) { |
| mSimProxy.getIccCardStatus(serial); |
| } else { |
| mRadioProxy.getIccCardStatus(serial); |
| } |
| } |
| |
| /** |
| * Call IRadioSim#getImsiForApp |
| * @param serial Serial number of request |
| * @param aid Application ID |
| * @throws RemoteException |
| */ |
| public void getImsiForApp(int serial, String aid) throws RemoteException { |
| if (isEmpty()) return; |
| if (isAidl()) { |
| mSimProxy.getImsiForApp(serial, aid); |
| } else { |
| mRadioProxy.getImsiForApp(serial, aid); |
| } |
| } |
| |
| /** |
| * Call IRadioSim#getSimPhonebookCapacity |
| * @param serial Serial number of request |
| * @throws RemoteException |
| */ |
| public void getSimPhonebookCapacity(int serial) throws RemoteException { |
| if (isEmpty() || mHalVersion.less(RIL.RADIO_HAL_VERSION_1_6)) return; |
| if (isAidl()) { |
| mSimProxy.getSimPhonebookCapacity(serial); |
| } else { |
| ((android.hardware.radio.V1_6.IRadio) mRadioProxy).getSimPhonebookCapacity(serial); |
| } |
| } |
| |
| /** |
| * Call IRadioSim#getSimPhonebookRecords |
| * @param serial Serial number of request |
| * @throws RemoteException |
| */ |
| public void getSimPhonebookRecords(int serial) throws RemoteException { |
| if (isEmpty() || mHalVersion.less(RIL.RADIO_HAL_VERSION_1_6)) return; |
| if (isAidl()) { |
| mSimProxy.getSimPhonebookRecords(serial); |
| } else { |
| ((android.hardware.radio.V1_6.IRadio) mRadioProxy).getSimPhonebookRecords(serial); |
| } |
| } |
| |
| /** |
| * Call IRadioSim#iccCloseLogicalChannelWithSessionInfo |
| * @param serial Serial number of request |
| * @param channelId Channel ID of the channel to be closed |
| * @param isEs10 Whether the logical channel is opened for performing ES10 operations. |
| * @throws RemoteException |
| */ |
| public void iccCloseLogicalChannel(int serial, |
| int channelId, boolean isEs10) throws RemoteException { |
| if (isEmpty()) return; |
| if (isAidl()) { |
| if (mHalVersion.greaterOrEqual(RIL.RADIO_HAL_VERSION_2_1)) { |
| android.hardware.radio.sim.SessionInfo info = |
| new android.hardware.radio.sim.SessionInfo(); |
| info.sessionId = channelId; |
| info.isEs10 = isEs10; |
| mSimProxy.iccCloseLogicalChannelWithSessionInfo(serial, info); |
| return; |
| } |
| mSimProxy.iccCloseLogicalChannel(serial, channelId); |
| } else { |
| mRadioProxy.iccCloseLogicalChannel(serial, channelId); |
| } |
| } |
| |
| /** |
| * Call IRadioSim#iccIoForApp |
| * @param serial Serial number of request |
| * @param command Command |
| * @param fileId File ID |
| * @param path Path |
| * @param p1 P1 value of the command |
| * @param p2 P2 value of the command |
| * @param p3 P3 value of the command |
| * @param data Data to be sent |
| * @param pin2 PIN 2 value |
| * @param aid Application ID |
| * @throws RemoteException |
| */ |
| public void iccIoForApp(int serial, int command, int fileId, String path, int p1, int p2, |
| int p3, String data, String pin2, String aid) throws RemoteException { |
| if (isEmpty()) return; |
| if (isAidl()) { |
| android.hardware.radio.sim.IccIo iccIo = new android.hardware.radio.sim.IccIo(); |
| iccIo.command = command; |
| iccIo.fileId = fileId; |
| iccIo.path = path; |
| iccIo.p1 = p1; |
| iccIo.p2 = p2; |
| iccIo.p3 = p3; |
| iccIo.data = data; |
| iccIo.pin2 = pin2; |
| iccIo.aid = aid; |
| mSimProxy.iccIoForApp(serial, iccIo); |
| } else { |
| android.hardware.radio.V1_0.IccIo iccIo = new android.hardware.radio.V1_0.IccIo(); |
| iccIo.command = command; |
| iccIo.fileId = fileId; |
| iccIo.path = path; |
| iccIo.p1 = p1; |
| iccIo.p2 = p2; |
| iccIo.p3 = p3; |
| iccIo.data = data; |
| iccIo.pin2 = pin2; |
| iccIo.aid = aid; |
| mRadioProxy.iccIOForApp(serial, iccIo); |
| } |
| } |
| |
| /** |
| * Call IRadioSim#iccOpenLogicalChannel |
| * @param serial Serial number of request |
| * @param aid Application ID |
| * @param p2 P2 value of the command |
| * @throws RemoteException |
| */ |
| public void iccOpenLogicalChannel(int serial, String aid, int p2) throws RemoteException { |
| if (isEmpty()) return; |
| if (isAidl()) { |
| mSimProxy.iccOpenLogicalChannel(serial, aid, p2); |
| } else { |
| mRadioProxy.iccOpenLogicalChannel(serial, aid, p2); |
| } |
| } |
| |
| /** |
| * Call IRadioSim#iccTransmitApduBasicChannel |
| * @param serial Serial number of request |
| * @param cla Class of the command |
| * @param instruction Instruction of the command |
| * @param p1 P1 value of the command |
| * @param p2 P2 value of the command |
| * @param p3 P3 value of the command |
| * @param data Data to be sent |
| * @throws RemoteException |
| */ |
| public void iccTransmitApduBasicChannel(int serial, int cla, int instruction, int p1, int p2, |
| int p3, String data) throws RemoteException { |
| if (isEmpty()) return; |
| if (isAidl()) { |
| mSimProxy.iccTransmitApduBasicChannel(serial, |
| RILUtils.convertToHalSimApduAidl(0, cla, instruction, p1, p2, p3, data, |
| false, mHalVersion)); |
| } else { |
| mRadioProxy.iccTransmitApduBasicChannel(serial, |
| RILUtils.convertToHalSimApdu(0, cla, instruction, p1, p2, p3, data)); |
| } |
| } |
| |
| /** |
| * Call IRadioSim#iccTransmitApduLogicalChannel |
| * @param serial Serial number of request |
| * @param channel Channel ID of the channel to use for communication |
| * @param cla Class of the command |
| * @param instruction Instruction of the command |
| * @param p1 P1 value of the command |
| * @param p2 P2 value of the command |
| * @param p3 P3 value of the command |
| * @param data Data to be sent |
| * @throws RemoteException |
| */ |
| public void iccTransmitApduLogicalChannel(int serial, int channel, int cla, int instruction, |
| int p1, int p2, int p3, String data) throws RemoteException { |
| iccTransmitApduLogicalChannel(serial, channel, cla, instruction, p1, p2, p3, data, false); |
| } |
| |
| /** |
| * Call IRadioSim#iccTransmitApduLogicalChannel |
| * @param serial Serial number of request |
| * @param channel Channel ID of the channel to use for communication |
| * @param cla Class of the command |
| * @param instruction Instruction of the command |
| * @param p1 P1 value of the command |
| * @param p2 P2 value of the command |
| * @param p3 P3 value of the command |
| * @param data Data to be sent |
| * @param isEs10Command APDU is an isEs10 command or not |
| * @throws RemoteException |
| */ |
| public void iccTransmitApduLogicalChannel(int serial, int channel, int cla, int instruction, |
| int p1, int p2, int p3, String data, boolean isEs10Command) throws RemoteException { |
| if (isEmpty()) return; |
| if (isAidl()) { |
| mSimProxy.iccTransmitApduLogicalChannel(serial, |
| RILUtils.convertToHalSimApduAidl(channel, cla, instruction, p1, p2, p3, data, |
| isEs10Command, mHalVersion)); |
| } else { |
| mRadioProxy.iccTransmitApduLogicalChannel(serial, |
| RILUtils.convertToHalSimApdu(channel, cla, instruction, p1, p2, p3, data)); |
| } |
| } |
| |
| /** |
| * Call IRadioSim#reportStkServiceIsRunning |
| * @param serial Serial number of request |
| * @throws RemoteException |
| */ |
| public void reportStkServiceIsRunning(int serial) throws RemoteException { |
| if (isEmpty()) return; |
| if (isAidl()) { |
| mSimProxy.reportStkServiceIsRunning(serial); |
| } else { |
| mRadioProxy.reportStkServiceIsRunning(serial); |
| } |
| } |
| |
| /** |
| * Call IRadioSim#requestIccSimAuthentication |
| * @param serial Serial number of request |
| * @param authContext P2 parameter that specifies the authentication context |
| * @param authData Authentication challenge data |
| * @param aid Application ID of the application/slot to send the auth command to |
| * @throws RemoteException |
| */ |
| public void requestIccSimAuthentication(int serial, int authContext, String authData, |
| String aid) throws RemoteException { |
| if (isEmpty()) return; |
| if (isAidl()) { |
| mSimProxy.requestIccSimAuthentication(serial, authContext, authData, aid); |
| } else { |
| mRadioProxy.requestIccSimAuthentication(serial, authContext, authData, aid); |
| } |
| } |
| |
| /** |
| * Call IRadioSim#responseAcknowledgement |
| * @throws RemoteException |
| */ |
| @Override |
| public void responseAcknowledgement() throws RemoteException { |
| if (isEmpty()) return; |
| if (isAidl()) { |
| mSimProxy.responseAcknowledgement(); |
| } else { |
| mRadioProxy.responseAcknowledgement(); |
| } |
| } |
| |
| /** |
| * Call IRadioSim#sendEnvelope |
| * @param serial Serial number of request |
| * @param contents String containing SAT/USAT response in hexadecimal format starting with |
| * command tag |
| * @throws RemoteException |
| */ |
| public void sendEnvelope(int serial, String contents) throws RemoteException { |
| if (isEmpty()) return; |
| if (isAidl()) { |
| mSimProxy.sendEnvelope(serial, contents); |
| } else { |
| mRadioProxy.sendEnvelope(serial, contents); |
| } |
| } |
| |
| /** |
| * Call IRadioSim#sendEnvelopeWithStatus |
| * @param serial Serial number of request |
| * @param contents String containing SAT/USAT response in hexadecimal format starting with |
| * command tag |
| * @throws RemoteException |
| */ |
| public void sendEnvelopeWithStatus(int serial, String contents) throws RemoteException { |
| if (isEmpty()) return; |
| if (isAidl()) { |
| mSimProxy.sendEnvelopeWithStatus(serial, contents); |
| } else { |
| mRadioProxy.sendEnvelopeWithStatus(serial, contents); |
| } |
| } |
| |
| /** |
| * Call IRadioSim#sendTerminalResponseToSim |
| * @param serial Serial number of request |
| * @param contents String containing SAT/USAT response in hexadecimal format starting with |
| * first byte of response data |
| * @throws RemoteException |
| */ |
| public void sendTerminalResponseToSim(int serial, String contents) throws RemoteException { |
| if (isEmpty()) return; |
| if (isAidl()) { |
| mSimProxy.sendTerminalResponseToSim(serial, contents); |
| } else { |
| mRadioProxy.sendTerminalResponseToSim(serial, contents); |
| } |
| } |
| |
| /** |
| * Call IRadioSim#setAllowedCarriers |
| * @param serial Serial number of request |
| * @param carrierRestrictionRules Allowed carriers |
| * @throws RemoteException |
| */ |
| public void setAllowedCarriers(int serial, CarrierRestrictionRules carrierRestrictionRules) |
| throws RemoteException { |
| if (isEmpty()) return; |
| if (isAidl()) { |
| // Prepare structure with allowed list, excluded list and priority |
| android.hardware.radio.sim.CarrierRestrictions carrierRestrictions = |
| new android.hardware.radio.sim.CarrierRestrictions(); |
| carrierRestrictions.allowedCarriers = RILUtils.convertToHalCarrierRestrictionListAidl( |
| carrierRestrictionRules.getAllowedCarriers()); |
| carrierRestrictions.excludedCarriers = RILUtils.convertToHalCarrierRestrictionListAidl( |
| carrierRestrictionRules.getExcludedCarriers()); |
| carrierRestrictions.allowedCarriersPrioritized = |
| (carrierRestrictionRules.getDefaultCarrierRestriction() |
| == CarrierRestrictionRules.CARRIER_RESTRICTION_DEFAULT_NOT_ALLOWED); |
| mSimProxy.setAllowedCarriers(serial, carrierRestrictions, |
| RILUtils.convertToHalSimLockMultiSimPolicyAidl( |
| carrierRestrictionRules.getMultiSimPolicy())); |
| } else { |
| // Prepare structure with allowed list, excluded list and priority |
| android.hardware.radio.V1_4.CarrierRestrictionsWithPriority carrierRestrictions = |
| new android.hardware.radio.V1_4.CarrierRestrictionsWithPriority(); |
| carrierRestrictions.allowedCarriers = RILUtils.convertToHalCarrierRestrictionList( |
| carrierRestrictionRules.getAllowedCarriers()); |
| carrierRestrictions.excludedCarriers = RILUtils.convertToHalCarrierRestrictionList( |
| carrierRestrictionRules.getExcludedCarriers()); |
| carrierRestrictions.allowedCarriersPrioritized = |
| (carrierRestrictionRules.getDefaultCarrierRestriction() |
| == CarrierRestrictionRules.CARRIER_RESTRICTION_DEFAULT_NOT_ALLOWED); |
| mRadioProxy.setAllowedCarriers_1_4(serial, carrierRestrictions, |
| RILUtils.convertToHalSimLockMultiSimPolicy( |
| carrierRestrictionRules.getMultiSimPolicy())); |
| } |
| } |
| |
| /** |
| * Call IRadioSim#setCarrierInfoForImsiEncryption |
| * @param serial Serial number of request |
| * @param imsiEncryptionInfo ImsiEncryptionInfo |
| * @throws RemoteException |
| */ |
| public void setCarrierInfoForImsiEncryption(int serial, ImsiEncryptionInfo imsiEncryptionInfo) |
| throws RemoteException { |
| if (isEmpty()) return; |
| if (isAidl()) { |
| android.hardware.radio.sim.ImsiEncryptionInfo halImsiInfo = |
| new android.hardware.radio.sim.ImsiEncryptionInfo(); |
| halImsiInfo.mnc = imsiEncryptionInfo.getMnc(); |
| halImsiInfo.mcc = imsiEncryptionInfo.getMcc(); |
| halImsiInfo.keyIdentifier = imsiEncryptionInfo.getKeyIdentifier(); |
| if (imsiEncryptionInfo.getExpirationTime() != null) { |
| halImsiInfo.expirationTime = imsiEncryptionInfo.getExpirationTime().getTime(); |
| } |
| halImsiInfo.carrierKey = imsiEncryptionInfo.getPublicKey().getEncoded(); |
| halImsiInfo.keyType = (byte) imsiEncryptionInfo.getKeyType(); |
| |
| mSimProxy.setCarrierInfoForImsiEncryption(serial, halImsiInfo); |
| } else if (mHalVersion.greaterOrEqual(RIL.RADIO_HAL_VERSION_1_6)) { |
| android.hardware.radio.V1_6.ImsiEncryptionInfo halImsiInfo = |
| new android.hardware.radio.V1_6.ImsiEncryptionInfo(); |
| halImsiInfo.base.mnc = imsiEncryptionInfo.getMnc(); |
| halImsiInfo.base.mcc = imsiEncryptionInfo.getMcc(); |
| halImsiInfo.base.keyIdentifier = imsiEncryptionInfo.getKeyIdentifier(); |
| if (imsiEncryptionInfo.getExpirationTime() != null) { |
| halImsiInfo.base.expirationTime = imsiEncryptionInfo.getExpirationTime().getTime(); |
| } |
| for (byte b : imsiEncryptionInfo.getPublicKey().getEncoded()) { |
| halImsiInfo.base.carrierKey.add(Byte.valueOf(b)); |
| } |
| halImsiInfo.keyType = (byte) imsiEncryptionInfo.getKeyType(); |
| |
| ((android.hardware.radio.V1_6.IRadio) mRadioProxy).setCarrierInfoForImsiEncryption_1_6( |
| serial, halImsiInfo); |
| } else { |
| android.hardware.radio.V1_1.ImsiEncryptionInfo halImsiInfo = |
| new android.hardware.radio.V1_1.ImsiEncryptionInfo(); |
| halImsiInfo.mnc = imsiEncryptionInfo.getMnc(); |
| halImsiInfo.mcc = imsiEncryptionInfo.getMcc(); |
| halImsiInfo.keyIdentifier = imsiEncryptionInfo.getKeyIdentifier(); |
| if (imsiEncryptionInfo.getExpirationTime() != null) { |
| halImsiInfo.expirationTime = imsiEncryptionInfo.getExpirationTime().getTime(); |
| } |
| for (byte b : imsiEncryptionInfo.getPublicKey().getEncoded()) { |
| halImsiInfo.carrierKey.add(Byte.valueOf(b)); |
| } |
| |
| mRadioProxy.setCarrierInfoForImsiEncryption(serial, halImsiInfo); |
| } |
| } |
| |
| /** |
| * Call IRadioSim#setCdmaSubscriptionSource |
| * @param serial Serial number of request |
| * @param cdmaSub One of CDMA_SUBSCRIPTION_* |
| * @throws RemoteException |
| */ |
| public void setCdmaSubscriptionSource(int serial, int cdmaSub) throws RemoteException { |
| if (isEmpty()) return; |
| if (isAidl()) { |
| mSimProxy.setCdmaSubscriptionSource(serial, cdmaSub); |
| } else { |
| mRadioProxy.setCdmaSubscriptionSource(serial, cdmaSub); |
| } |
| } |
| |
| /** |
| * Call IRadioSim#setFacilityLockForApp |
| * @param serial Serial number of request |
| * @param facility One of CB_FACILTY_* |
| * @param lockState True means lock, false means unlock |
| * @param password Password or "" if not required |
| * @param serviceClass Sum of SERVICE_CLASS_* |
| * @param appId Application ID or null if none |
| * @throws RemoteException |
| */ |
| public void setFacilityLockForApp(int serial, String facility, boolean lockState, |
| String password, int serviceClass, String appId) throws RemoteException { |
| if (isEmpty()) return; |
| if (isAidl()) { |
| mSimProxy.setFacilityLockForApp( |
| serial, facility, lockState, password, serviceClass, appId); |
| } else { |
| mRadioProxy.setFacilityLockForApp( |
| serial, facility, lockState, password, serviceClass, appId); |
| } |
| } |
| |
| /** |
| * Call IRadioSim#setSimCardPower |
| * @param serial Serial number of request |
| * @param state SIM state (power down, power up, pass through) |
| * @throws RemoteException |
| */ |
| public void setSimCardPower(int serial, int state) throws RemoteException { |
| if (isEmpty()) return; |
| if (isAidl()) { |
| mSimProxy.setSimCardPower(serial, state); |
| } else if (mHalVersion.greaterOrEqual(RIL.RADIO_HAL_VERSION_1_6)) { |
| ((android.hardware.radio.V1_6.IRadio) mRadioProxy).setSimCardPower_1_6(serial, state); |
| } else { |
| mRadioProxy.setSimCardPower_1_1(serial, state); |
| } |
| } |
| |
| /** |
| * Call IRadioSim#setUiccSubscription |
| * @param serial Serial number of request |
| * @param slotId Slot ID |
| * @param appIndex Application index in the card |
| * @param subId Subscription ID |
| * @param subStatus Activation status; 1 = activate and 0 = deactivate |
| * @throws RemoteException |
| */ |
| public void setUiccSubscription(int serial, int slotId, int appIndex, int subId, int subStatus) |
| throws RemoteException { |
| if (isEmpty()) return; |
| if (isAidl()) { |
| android.hardware.radio.sim.SelectUiccSub info = |
| new android.hardware.radio.sim.SelectUiccSub(); |
| info.slot = slotId; |
| info.appIndex = appIndex; |
| info.subType = subId; |
| info.actStatus = subStatus; |
| mSimProxy.setUiccSubscription(serial, info); |
| } else { |
| android.hardware.radio.V1_0.SelectUiccSub info = |
| new android.hardware.radio.V1_0.SelectUiccSub(); |
| info.slot = slotId; |
| info.appIndex = appIndex; |
| info.subType = subId; |
| info.actStatus = subStatus; |
| mRadioProxy.setUiccSubscription(serial, info); |
| } |
| } |
| |
| /** |
| * Call IRadioSim#supplyIccPin2ForApp |
| * @param serial Serial number of request |
| * @param pin2 PIN 2 value |
| * @param aid Application ID |
| * @throws RemoteException |
| */ |
| public void supplyIccPin2ForApp(int serial, String pin2, String aid) throws RemoteException { |
| if (isEmpty()) return; |
| if (isAidl()) { |
| mSimProxy.supplyIccPin2ForApp(serial, pin2, aid); |
| } else { |
| mRadioProxy.supplyIccPin2ForApp(serial, pin2, aid); |
| } |
| } |
| |
| /** |
| * Call IRadioSim#supplyIccPinForApp |
| * @param serial Serial number of request |
| * @param pin PIN value |
| * @param aid Application ID |
| * @throws RemoteException |
| */ |
| public void supplyIccPinForApp(int serial, String pin, String aid) throws RemoteException { |
| if (isEmpty()) return; |
| if (isAidl()) { |
| mSimProxy.supplyIccPinForApp(serial, pin, aid); |
| } else { |
| mRadioProxy.supplyIccPinForApp(serial, pin, aid); |
| } |
| } |
| |
| /** |
| * Call IRadioSim#supplyIccPuk2ForApp |
| * @param serial Serial number of request |
| * @param puk2 PUK 2 value |
| * @param pin2 PIN 2 value |
| * @param aid Application ID |
| * @throws RemoteException |
| */ |
| public void supplyIccPuk2ForApp(int serial, String puk2, String pin2, String aid) |
| throws RemoteException { |
| if (isEmpty()) return; |
| if (isAidl()) { |
| mSimProxy.supplyIccPuk2ForApp(serial, puk2, pin2, aid); |
| } else { |
| mRadioProxy.supplyIccPuk2ForApp(serial, puk2, pin2, aid); |
| } |
| } |
| |
| /** |
| * Call IRadioSim#supplyIccPukForApp |
| * @param serial Serial number of request |
| * @param puk PUK value |
| * @param pin PIN value |
| * @param aid Application ID |
| * @throws RemoteException |
| */ |
| public void supplyIccPukForApp(int serial, String puk, String pin, String aid) |
| throws RemoteException { |
| if (isEmpty()) return; |
| if (isAidl()) { |
| mSimProxy.supplyIccPukForApp(serial, puk, pin, aid); |
| } else { |
| mRadioProxy.supplyIccPukForApp(serial, puk, pin, aid); |
| } |
| } |
| |
| /** |
| * Call IRadioSim#supplySimDepersonalization |
| * @param serial Serial number of request |
| * @param persoType SIM personalization type |
| * @param controlKey Unlock code for removing SIM personalization from this device |
| * @throws RemoteException |
| */ |
| public void supplySimDepersonalization(int serial, PersoSubState persoType, String controlKey) |
| throws RemoteException { |
| if (isEmpty() || mHalVersion.less(RIL.RADIO_HAL_VERSION_1_5)) return; |
| if (isAidl()) { |
| mSimProxy.supplySimDepersonalization(serial, |
| RILUtils.convertToHalPersoTypeAidl(persoType), controlKey); |
| } else { |
| ((android.hardware.radio.V1_5.IRadio) mRadioProxy).supplySimDepersonalization(serial, |
| RILUtils.convertToHalPersoType(persoType), controlKey); |
| } |
| } |
| |
| /** |
| * Call IRadioSim#updateSimPhonebookRecords |
| * @param serial Serial number of request |
| * @param recordInfo ADN record information to be updated |
| * @throws RemoteException |
| */ |
| public void updateSimPhonebookRecords(int serial, SimPhonebookRecord recordInfo) |
| throws RemoteException { |
| if (isEmpty() || mHalVersion.less(RIL.RADIO_HAL_VERSION_1_6)) return; |
| if (isAidl()) { |
| mSimProxy.updateSimPhonebookRecords(serial, |
| RILUtils.convertToHalPhonebookRecordInfoAidl(recordInfo)); |
| } else { |
| ((android.hardware.radio.V1_6.IRadio) mRadioProxy).updateSimPhonebookRecords(serial, |
| RILUtils.convertToHalPhonebookRecordInfo(recordInfo)); |
| } |
| } |
| } |