195 lines
6.4 KiB
Java
195 lines
6.4 KiB
Java
/*
|
|
* Copyright (C) 2022 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.Rlog;
|
|
|
|
/**
|
|
* A holder for IRadioIms.
|
|
* Use getAidl to get IRadioIms and call the AIDL implementations of the HAL APIs.
|
|
*/
|
|
public class RadioImsProxy extends RadioServiceProxy {
|
|
private static final String TAG = "RadioImsProxy";
|
|
private volatile android.hardware.radio.ims.IRadioIms mImsProxy = null;
|
|
|
|
/**
|
|
* Sets IRadioIms as the AIDL implementation for RadioServiceProxy.
|
|
* @param halVersion Radio HAL version.
|
|
* @param ims IRadioIms implementation.
|
|
*
|
|
* @return updated HAL version.
|
|
*/
|
|
public HalVersion setAidl(HalVersion halVersion, android.hardware.radio.ims.IRadioIms ims) {
|
|
HalVersion version = halVersion;
|
|
try {
|
|
version = RIL.getServiceHalVersion(ims.getInterfaceVersion());
|
|
} catch (RemoteException e) {
|
|
Rlog.e(TAG, "setAidl: " + e);
|
|
}
|
|
mHalVersion = version;
|
|
mImsProxy = ims;
|
|
mIsAidl = true;
|
|
|
|
Rlog.d(TAG, "AIDL initialized mHalVersion=" + mHalVersion);
|
|
return mHalVersion;
|
|
}
|
|
|
|
/**
|
|
* Gets the AIDL implementation of RadioImsProxy.
|
|
* @return IRadioIms implementation.
|
|
*/
|
|
public android.hardware.radio.ims.IRadioIms getAidl() {
|
|
return mImsProxy;
|
|
}
|
|
|
|
/**
|
|
* Resets RadioImsProxy.
|
|
*/
|
|
@Override
|
|
public void clear() {
|
|
super.clear();
|
|
mImsProxy = null;
|
|
}
|
|
|
|
/**
|
|
* Checks whether a RadioIms implementation exists.
|
|
* @return true if there is neither a HIDL nor AIDL implementation.
|
|
*/
|
|
@Override
|
|
public boolean isEmpty() {
|
|
return mRadioProxy == null && mImsProxy == null;
|
|
}
|
|
|
|
/**
|
|
* No implementation in IRadioIms.
|
|
* @throws RemoteException.
|
|
*/
|
|
@Override
|
|
public void responseAcknowledgement() throws RemoteException {
|
|
/* Currently, IRadioIms doesn't support the following response types:
|
|
* - RadioIndicationType.UNSOLICITED_ACK_EXP
|
|
* - RadioResponseType.SOLICITED_ACK_EXP */
|
|
// no-op
|
|
}
|
|
|
|
/**
|
|
* Calls IRadioIms#setSrvccCallInfo.
|
|
* @param serial Serial number of request.
|
|
* @param srvccCalls The list of call information.
|
|
* @throws RemoteException.
|
|
*/
|
|
public void setSrvccCallInfo(int serial,
|
|
android.hardware.radio.ims.SrvccCall[] srvccCalls) throws RemoteException {
|
|
if (isEmpty()) return;
|
|
if (isAidl()) {
|
|
mImsProxy.setSrvccCallInfo(serial, srvccCalls);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Calls IRadioIms#updateImsRegistrationInfo.
|
|
* @param serial Serial number of request.
|
|
* @param registrationInfo The registration state information.
|
|
* @throws RemoteException.
|
|
*/
|
|
public void updateImsRegistrationInfo(int serial,
|
|
android.hardware.radio.ims.ImsRegistration registrationInfo) throws RemoteException {
|
|
if (isEmpty()) return;
|
|
if (isAidl()) {
|
|
mImsProxy.updateImsRegistrationInfo(serial, registrationInfo);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Calls IRadioIms#startImsTraffic.
|
|
* @param serial Serial number of request.
|
|
* @param token A nonce to identify the request.
|
|
* @param trafficType IMS traffic type like registration, voice, video, SMS, emergency, and etc.
|
|
* @param accessNetworkType The type of underlying radio access network used.
|
|
* @param trafficDirection Indicates whether traffic is originated by mobile originated or
|
|
* mobile terminated use case eg. MO/MT call/SMS etc.
|
|
* @throws RemoteException.
|
|
*/
|
|
public void startImsTraffic(int serial, int token, int trafficType, int accessNetworkType,
|
|
int trafficDirection) throws RemoteException {
|
|
if (isEmpty()) return;
|
|
if (isAidl()) {
|
|
mImsProxy.startImsTraffic(serial,
|
|
token, trafficType, accessNetworkType, trafficDirection);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Calls IRadioIms#stopImsTraffic.
|
|
* @param serial Serial number of request.
|
|
* @param token The token assigned by startImsTraffic.
|
|
* @throws RemoteException.
|
|
*/
|
|
public void stopImsTraffic(int serial, int token)
|
|
throws RemoteException {
|
|
if (isEmpty()) return;
|
|
if (isAidl()) {
|
|
mImsProxy.stopImsTraffic(serial, token);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Calls IRadioIms#triggerEpsFallback.
|
|
* @param serial Serial number of request.
|
|
* @param reason Specifies the reason for EPS fallback.
|
|
* @throws RemoteException.
|
|
*/
|
|
public void triggerEpsFallback(int serial, int reason)
|
|
throws RemoteException {
|
|
if (isEmpty()) return;
|
|
if (isAidl()) {
|
|
mImsProxy.triggerEpsFallback(serial, reason);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Calls IRadioIms#sendAnbrQuery.
|
|
* @param serial Serial number of request.
|
|
* @param mediaType Media type is used to identify media stream such as audio or video.
|
|
* @param direction Direction of this packet stream (e.g. uplink or downlink).
|
|
* @param bitsPerSecond The bit rate requested by the opponent UE.
|
|
* @throws RemoteException.
|
|
*/
|
|
public void sendAnbrQuery(int serial, int mediaType, int direction, int bitsPerSecond)
|
|
throws RemoteException {
|
|
if (isEmpty()) return;
|
|
if (isAidl()) {
|
|
mImsProxy.sendAnbrQuery(serial, mediaType, direction, bitsPerSecond);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Call IRadioIms#updateImsCallStatus
|
|
* @param serial Serial number of request.
|
|
* @param imsCalls The list of call status information.
|
|
* @throws RemoteException.
|
|
*/
|
|
public void updateImsCallStatus(int serial,
|
|
android.hardware.radio.ims.ImsCall[] imsCalls) throws RemoteException {
|
|
if (isEmpty()) return;
|
|
if (isAidl()) {
|
|
mImsProxy.updateImsCallStatus(serial, imsCalls);
|
|
}
|
|
}
|
|
}
|