461 lines
20 KiB
Java
461 lines
20 KiB
Java
![]() |
/*
|
||
|
* 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 static android.telephony.TelephonyManager.HAL_SERVICE_SIM;
|
||
|
|
||
|
import android.hardware.radio.RadioError;
|
||
|
import android.hardware.radio.RadioResponseInfo;
|
||
|
import android.hardware.radio.sim.IRadioSimResponse;
|
||
|
import android.telephony.CarrierRestrictionRules;
|
||
|
import android.telephony.TelephonyManager;
|
||
|
import android.text.TextUtils;
|
||
|
|
||
|
import com.android.internal.telephony.uicc.AdnCapacity;
|
||
|
import com.android.internal.telephony.uicc.IccCardStatus;
|
||
|
import com.android.internal.telephony.uicc.IccIoResult;
|
||
|
|
||
|
import java.util.ArrayList;
|
||
|
|
||
|
/**
|
||
|
* Interface declaring response functions to solicited radio requests for SIM APIs.
|
||
|
*/
|
||
|
public class SimResponse extends IRadioSimResponse.Stub {
|
||
|
private final RIL mRil;
|
||
|
|
||
|
public SimResponse(RIL ril) {
|
||
|
mRil = ril;
|
||
|
}
|
||
|
|
||
|
private void responseIccIo(RadioResponseInfo responseInfo,
|
||
|
android.hardware.radio.sim.IccIoResult result) {
|
||
|
RILRequest rr = mRil.processResponse(HAL_SERVICE_SIM, responseInfo);
|
||
|
|
||
|
if (rr != null) {
|
||
|
IccIoResult ret = new IccIoResult(result.sw1, result.sw2, result.simResponse);
|
||
|
if (responseInfo.error == RadioError.NONE) {
|
||
|
RadioResponse.sendMessageResponse(rr.mResult, ret);
|
||
|
}
|
||
|
mRil.processResponseDone(rr, responseInfo, ret);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Acknowledge the receipt of radio request sent to the vendor. This must be sent only for
|
||
|
* radio request which take long time to respond.
|
||
|
* For more details, refer https://source.android.com/devices/tech/connect/ril.html
|
||
|
* @param serial Serial no. of the request whose acknowledgement is sent.
|
||
|
*/
|
||
|
public void acknowledgeRequest(int serial) {
|
||
|
mRil.processRequestAck(serial);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param responseInfo Response info struct containing response type, serial no. and error.
|
||
|
* @param enabled whether UICC applications are enabled.
|
||
|
*/
|
||
|
public void areUiccApplicationsEnabledResponse(RadioResponseInfo responseInfo,
|
||
|
boolean enabled) {
|
||
|
RILRequest rr = mRil.processResponse(HAL_SERVICE_SIM, responseInfo);
|
||
|
|
||
|
if (rr != null) {
|
||
|
if (responseInfo.error == RadioError.NONE) {
|
||
|
RadioResponse.sendMessageResponse(rr.mResult, enabled);
|
||
|
}
|
||
|
mRil.processResponseDone(rr, responseInfo, enabled);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param responseInfo Response info struct containing response type, serial no. and error
|
||
|
* @param remainingAttempts Number of retries remaining, must be equal to -1 if unknown.
|
||
|
*/
|
||
|
public void changeIccPin2ForAppResponse(RadioResponseInfo responseInfo, int remainingAttempts) {
|
||
|
RadioResponse.responseInts(HAL_SERVICE_SIM, mRil, responseInfo, remainingAttempts);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param responseInfo Response info struct containing response type, serial no. and error
|
||
|
* @param remainingAttempts Number of retries remaining, must be equal to -1 if unknown.
|
||
|
*/
|
||
|
public void changeIccPinForAppResponse(RadioResponseInfo responseInfo, int remainingAttempts) {
|
||
|
RadioResponse.responseInts(HAL_SERVICE_SIM, mRil, responseInfo, remainingAttempts);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param responseInfo Response info struct containing response type, serial no. and error.
|
||
|
*/
|
||
|
public void enableUiccApplicationsResponse(RadioResponseInfo responseInfo) {
|
||
|
RadioResponse.responseVoid(HAL_SERVICE_SIM, mRil, responseInfo);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param responseInfo Response info struct containing response type, serial no. and error
|
||
|
* @param carrierRestrictions Carrier restriction information.
|
||
|
* @param multiSimPolicy Policy for multi-sim devices.
|
||
|
*/
|
||
|
public void getAllowedCarriersResponse(RadioResponseInfo responseInfo,
|
||
|
android.hardware.radio.sim.CarrierRestrictions carrierRestrictions,
|
||
|
int multiSimPolicy) {
|
||
|
RILRequest rr = mRil.processResponse(HAL_SERVICE_SIM, responseInfo);
|
||
|
boolean carrierLockInfoSupported = mRil.getHalVersion(HAL_SERVICE_SIM).greater(
|
||
|
RIL.RADIO_HAL_VERSION_2_2);
|
||
|
if (rr == null) {
|
||
|
return;
|
||
|
}
|
||
|
int policy = RILUtils.convertAidlSimLockMultiSimPolicy(multiSimPolicy);
|
||
|
int carrierRestrictionDefault =
|
||
|
CarrierRestrictionRules.CARRIER_RESTRICTION_DEFAULT_NOT_ALLOWED;
|
||
|
if (!carrierRestrictions.allowedCarriersPrioritized) {
|
||
|
carrierRestrictionDefault = CarrierRestrictionRules.CARRIER_RESTRICTION_DEFAULT_ALLOWED;
|
||
|
}
|
||
|
|
||
|
CarrierRestrictionRules ret = CarrierRestrictionRules.newBuilder().setAllowedCarriers(
|
||
|
RILUtils.convertHalCarrierList(
|
||
|
carrierRestrictions.allowedCarriers)).setExcludedCarriers(
|
||
|
RILUtils.convertHalCarrierList(
|
||
|
carrierRestrictions.excludedCarriers)).setDefaultCarrierRestriction(
|
||
|
carrierRestrictionDefault).setMultiSimPolicy(policy).setCarrierRestrictionStatus(
|
||
|
carrierRestrictions.status).setAllowedCarrierInfo(
|
||
|
RILUtils.convertAidlCarrierInfoList(
|
||
|
carrierRestrictions.allowedCarrierInfoList)).setExcludedCarrierInfo(
|
||
|
RILUtils.convertAidlCarrierInfoList(
|
||
|
carrierRestrictions.excludedCarrierInfoList)).setCarrierLockInfoFeature(
|
||
|
carrierLockInfoSupported).build();
|
||
|
if (responseInfo.error == RadioError.NONE) {
|
||
|
RadioResponse.sendMessageResponse(rr.mResult, ret);
|
||
|
}
|
||
|
mRil.processResponseDone(rr, responseInfo, ret);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param responseInfo Response info struct containing response type, serial no. and error
|
||
|
* @param mdn MDN if CDMA subscription is available
|
||
|
* @param hSid is a comma separated list of H_SID (Home SID) if
|
||
|
* CDMA subscription is available, in decimal format
|
||
|
* @param hNid is a comma separated list of H_NID (Home NID) if
|
||
|
* CDMA subscription is available, in decimal format
|
||
|
* @param min MIN (10 digits, MIN2+MIN1) if CDMA subscription is available
|
||
|
* @param prl PRL version if CDMA subscription is available
|
||
|
*/
|
||
|
public void getCdmaSubscriptionResponse(RadioResponseInfo responseInfo, String mdn,
|
||
|
String hSid, String hNid, String min, String prl) {
|
||
|
RadioResponse.responseStrings(
|
||
|
HAL_SERVICE_SIM, mRil, responseInfo, mdn, hSid, hNid, min, prl);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param responseInfo Response info struct containing response type, serial no. and error
|
||
|
* @param source CDMA subscription source
|
||
|
*/
|
||
|
public void getCdmaSubscriptionSourceResponse(RadioResponseInfo responseInfo, int source) {
|
||
|
RadioResponse.responseInts(HAL_SERVICE_SIM, mRil, responseInfo, source);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param responseInfo Response info struct containing response type, serial no. and error
|
||
|
* @param response 0 is the TS 27.007 service class bit vector of services for which the
|
||
|
* specified barring facility is active. "0" means "disabled for all"
|
||
|
*/
|
||
|
public void getFacilityLockForAppResponse(RadioResponseInfo responseInfo, int response) {
|
||
|
RadioResponse.responseInts(HAL_SERVICE_SIM, mRil, responseInfo, response);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param responseInfo Response info struct containing response type, serial no. and error
|
||
|
* @param cardStatus ICC card status as defined by CardStatus
|
||
|
*/
|
||
|
public void getIccCardStatusResponse(RadioResponseInfo responseInfo,
|
||
|
android.hardware.radio.sim.CardStatus cardStatus) {
|
||
|
RILRequest rr = mRil.processResponse(HAL_SERVICE_SIM, responseInfo);
|
||
|
|
||
|
if (rr != null) {
|
||
|
IccCardStatus iccCardStatus = RILUtils.convertHalCardStatus(cardStatus);
|
||
|
mRil.riljLog("responseIccCardStatus: from AIDL: " + iccCardStatus);
|
||
|
if (responseInfo.error == RadioError.NONE) {
|
||
|
RadioResponse.sendMessageResponse(rr.mResult, iccCardStatus);
|
||
|
}
|
||
|
mRil.processResponseDone(rr, responseInfo, iccCardStatus);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param responseInfo Response info struct containing response type, serial no. and error
|
||
|
* @param imsi String containing the IMSI
|
||
|
*/
|
||
|
public void getImsiForAppResponse(RadioResponseInfo responseInfo, String imsi) {
|
||
|
RadioResponse.responseString(HAL_SERVICE_SIM, mRil, responseInfo, imsi);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param responseInfo Response info struct containing response type, serial no. and error.
|
||
|
* @param pbCapacity Contains the adn, email, anr capacities in the sim card.
|
||
|
*/
|
||
|
public void getSimPhonebookCapacityResponse(RadioResponseInfo responseInfo,
|
||
|
android.hardware.radio.sim.PhonebookCapacity pbCapacity) {
|
||
|
AdnCapacity capacity = RILUtils.convertHalPhonebookCapacity(pbCapacity);
|
||
|
RILRequest rr = mRil.processResponse(HAL_SERVICE_SIM, responseInfo);
|
||
|
if (rr != null) {
|
||
|
if (responseInfo.error == RadioError.NONE) {
|
||
|
RadioResponse.sendMessageResponse(rr.mResult, capacity);
|
||
|
}
|
||
|
mRil.processResponseDone(rr, responseInfo, capacity);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param responseInfo Response info struct containing response type, serial no. and error.
|
||
|
*/
|
||
|
public void getSimPhonebookRecordsResponse(RadioResponseInfo responseInfo) {
|
||
|
RadioResponse.responseVoid(HAL_SERVICE_SIM, mRil, responseInfo);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param responseInfo Response info struct containing response type, serial no. and error
|
||
|
*/
|
||
|
public void iccCloseLogicalChannelResponse(RadioResponseInfo responseInfo) {
|
||
|
RadioResponse.responseVoid(HAL_SERVICE_SIM, mRil, responseInfo);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param responseInfo Response info struct containing response type, serial no. and error
|
||
|
*/
|
||
|
public void iccCloseLogicalChannelWithSessionInfoResponse(RadioResponseInfo responseInfo) {
|
||
|
RadioResponse.responseVoid(HAL_SERVICE_SIM, mRil, responseInfo);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param responseInfo Response info struct containing response type, serial no. and error
|
||
|
* @param iccIo ICC IO operation response as defined by IccIoResult
|
||
|
*/
|
||
|
public void iccIoForAppResponse(RadioResponseInfo responseInfo,
|
||
|
android.hardware.radio.sim.IccIoResult iccIo) {
|
||
|
responseIccIo(responseInfo, iccIo);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param responseInfo Response info struct containing response type, serial no. and error
|
||
|
* @param channelId session id of the logical channel.
|
||
|
* @param selectResponse Contains the select response for the open channel command with one
|
||
|
* byte per integer
|
||
|
*/
|
||
|
public void iccOpenLogicalChannelResponse(RadioResponseInfo responseInfo, int channelId,
|
||
|
byte[] selectResponse) {
|
||
|
ArrayList<Integer> arr = new ArrayList<>();
|
||
|
arr.add(channelId);
|
||
|
for (int i = 0; i < selectResponse.length; i++) {
|
||
|
arr.add((int) selectResponse[i]);
|
||
|
}
|
||
|
RadioResponse.responseIntArrayList(HAL_SERVICE_SIM, mRil, responseInfo, arr);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param responseInfo Response info struct containing response type, serial no. and error
|
||
|
* @param iccIo ICC IO operation response as defined by IccIoResult
|
||
|
*/
|
||
|
public void iccTransmitApduBasicChannelResponse(RadioResponseInfo responseInfo,
|
||
|
android.hardware.radio.sim.IccIoResult iccIo) {
|
||
|
responseIccIo(responseInfo, iccIo);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param responseInfo Response info struct containing response type, serial no. and error
|
||
|
* @param iccIo ICC IO operation response as defined by IccIoResult
|
||
|
*/
|
||
|
public void iccTransmitApduLogicalChannelResponse(RadioResponseInfo responseInfo,
|
||
|
android.hardware.radio.sim.IccIoResult iccIo) {
|
||
|
responseIccIo(responseInfo, iccIo);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param responseInfo Response info struct containing response type, serial no. and error
|
||
|
*/
|
||
|
public void reportStkServiceIsRunningResponse(RadioResponseInfo responseInfo) {
|
||
|
RadioResponse.responseVoid(HAL_SERVICE_SIM, mRil, responseInfo);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param responseInfo Response info struct containing response type, serial no. and error
|
||
|
* @param iccIo ICC IO operation response as defined by IccIoResult
|
||
|
*/
|
||
|
public void requestIccSimAuthenticationResponse(RadioResponseInfo responseInfo,
|
||
|
android.hardware.radio.sim.IccIoResult iccIo) {
|
||
|
RILRequest rr = mRil.processResponse(HAL_SERVICE_SIM, responseInfo);
|
||
|
|
||
|
if (rr != null) {
|
||
|
IccIoResult ret = new IccIoResult(iccIo.sw1, iccIo.sw2,
|
||
|
TextUtils.isEmpty(iccIo.simResponse) ? null : iccIo.simResponse.getBytes());
|
||
|
if (responseInfo.error == RadioError.NONE) {
|
||
|
RadioResponse.sendMessageResponse(rr.mResult, ret);
|
||
|
}
|
||
|
mRil.processResponseDone(rr, responseInfo, ret);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* This method is deprecated and should not be used.
|
||
|
*
|
||
|
* @param responseInfo Response info struct containing response type, serial no. and error
|
||
|
* @param response response string of the challenge/response algo for ISIM auth in base64 format
|
||
|
*/
|
||
|
public void requestIsimAuthenticationResponse(RadioResponseInfo responseInfo, String response) {
|
||
|
// TODO (b/199433581): remove this method
|
||
|
throw new RuntimeException("Inexplicable response received for requestIsimAuthentication");
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param responseInfo Response info struct containing response type, serial no. and error
|
||
|
* @param commandResponse SAT/USAT response in hexadecimal format
|
||
|
* string starting with first byte of response
|
||
|
*/
|
||
|
public void sendEnvelopeResponse(RadioResponseInfo responseInfo, String commandResponse) {
|
||
|
RadioResponse.responseString(HAL_SERVICE_SIM, mRil, responseInfo, commandResponse);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param responseInfo Response info struct containing response type, serial no. and error
|
||
|
* @param iccIo ICC IO operation response as defined by IccIoResult
|
||
|
*/
|
||
|
public void sendEnvelopeWithStatusResponse(RadioResponseInfo responseInfo,
|
||
|
android.hardware.radio.sim.IccIoResult iccIo) {
|
||
|
responseIccIo(responseInfo, iccIo);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param responseInfo Response info struct containing response type, serial no. and error
|
||
|
*/
|
||
|
public void sendTerminalResponseToSimResponse(RadioResponseInfo responseInfo) {
|
||
|
RadioResponse.responseVoid(HAL_SERVICE_SIM, mRil, responseInfo);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param responseInfo Response info struct containing response type, serial no. and error
|
||
|
*/
|
||
|
public void setAllowedCarriersResponse(RadioResponseInfo responseInfo) {
|
||
|
int ret = TelephonyManager.SET_CARRIER_RESTRICTION_ERROR;
|
||
|
RILRequest rr = mRil.processResponse(HAL_SERVICE_SIM, responseInfo);
|
||
|
if (rr != null) {
|
||
|
mRil.riljLog("setAllowedCarriersResponse - error = " + responseInfo.error);
|
||
|
|
||
|
if (responseInfo.error == RadioError.NONE) {
|
||
|
ret = TelephonyManager.SET_CARRIER_RESTRICTION_SUCCESS;
|
||
|
RadioResponse.sendMessageResponse(rr.mResult, ret);
|
||
|
}
|
||
|
mRil.processResponseDone(rr, responseInfo, ret);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param responseInfo Response info struct containing response type, serial no. and error
|
||
|
*/
|
||
|
public void setCarrierInfoForImsiEncryptionResponse(RadioResponseInfo responseInfo) {
|
||
|
RadioResponse.responseVoid(HAL_SERVICE_SIM, mRil, responseInfo);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param responseInfo Response info struct containing response type, serial no. and error
|
||
|
*/
|
||
|
public void setCdmaSubscriptionSourceResponse(RadioResponseInfo responseInfo) {
|
||
|
RadioResponse.responseVoid(HAL_SERVICE_SIM, mRil, responseInfo);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param responseInfo Response info struct containing response type, serial no. and error
|
||
|
* @param retry 0 is the number of retries remaining, or -1 if unknown
|
||
|
*/
|
||
|
public void setFacilityLockForAppResponse(RadioResponseInfo responseInfo, int retry) {
|
||
|
RadioResponse.responseInts(HAL_SERVICE_SIM, mRil, responseInfo, retry);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param responseInfo Response info struct containing response type, serial no. and error
|
||
|
*/
|
||
|
public void setSimCardPowerResponse(RadioResponseInfo responseInfo) {
|
||
|
RadioResponse.responseVoid(HAL_SERVICE_SIM, mRil, responseInfo);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param responseInfo Response info struct containing response type, serial no. and error
|
||
|
*/
|
||
|
public void setUiccSubscriptionResponse(RadioResponseInfo responseInfo) {
|
||
|
RadioResponse.responseVoid(HAL_SERVICE_SIM, mRil, responseInfo);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param responseInfo Response info struct containing response type, serial no. and error
|
||
|
* @param remainingAttempts Number of retries remaining, must be equal to -1 if unknown.
|
||
|
*/
|
||
|
public void supplyIccPin2ForAppResponse(RadioResponseInfo responseInfo, int remainingAttempts) {
|
||
|
RadioResponse.responseInts(HAL_SERVICE_SIM, mRil, responseInfo, remainingAttempts);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param responseInfo Response info struct containing response type, serial no. and error
|
||
|
* @param remainingAttempts Number of retries remaining, must be equal to -1 if unknown.
|
||
|
*/
|
||
|
public void supplyIccPinForAppResponse(RadioResponseInfo responseInfo, int remainingAttempts) {
|
||
|
RadioResponse.responseInts(HAL_SERVICE_SIM, mRil, responseInfo, remainingAttempts);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param responseInfo Response info struct containing response type, serial no. and error
|
||
|
* @param remainingAttempts Number of retries remaining, must be equal to -1 if unknown.
|
||
|
*/
|
||
|
public void supplyIccPuk2ForAppResponse(RadioResponseInfo responseInfo, int remainingAttempts) {
|
||
|
RadioResponse.responseInts(HAL_SERVICE_SIM, mRil, responseInfo, remainingAttempts);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param responseInfo Response info struct containing response type, serial no. and error
|
||
|
* @param remainingAttempts Number of retries remaining, must be equal to -1 if unknown.
|
||
|
*/
|
||
|
public void supplyIccPukForAppResponse(RadioResponseInfo responseInfo, int remainingAttempts) {
|
||
|
RadioResponse.responseInts(HAL_SERVICE_SIM, mRil, responseInfo, remainingAttempts);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param responseInfo Response info struct containing response type, serial no. and error
|
||
|
* @param persoType SIM Personalisation type
|
||
|
* @param remainingRetries postiive values indicates number of retries remaining,
|
||
|
* must be equal to -1 if number of retries is infinite.
|
||
|
*/
|
||
|
public void supplySimDepersonalizationResponse(RadioResponseInfo responseInfo, int persoType,
|
||
|
int remainingRetries) {
|
||
|
RadioResponse.responseInts(
|
||
|
HAL_SERVICE_SIM, mRil, responseInfo, persoType, remainingRetries);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param responseInfo Response info struct containing response type, serial no. and error.
|
||
|
* @param updatedRecordIndex The index of the updated record.
|
||
|
*/
|
||
|
public void updateSimPhonebookRecordsResponse(RadioResponseInfo responseInfo,
|
||
|
int updatedRecordIndex) {
|
||
|
RadioResponse.responseInts(HAL_SERVICE_SIM, mRil, responseInfo, updatedRecordIndex);
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public String getInterfaceHash() {
|
||
|
return IRadioSimResponse.HASH;
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public int getInterfaceVersion() {
|
||
|
return IRadioSimResponse.VERSION;
|
||
|
}
|
||
|
}
|