144 lines
5.6 KiB
Java
144 lines
5.6 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_DATA;
|
|
|
|
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_DATA_CALL_LIST_CHANGED;
|
|
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_KEEPALIVE_STATUS;
|
|
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_PCO_DATA;
|
|
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_SLICING_CONFIG_CHANGED;
|
|
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_UNTHROTTLE_APN;
|
|
|
|
import android.hardware.radio.data.IRadioDataIndication;
|
|
import android.os.AsyncResult;
|
|
import android.os.RemoteException;
|
|
import android.telephony.PcoData;
|
|
import android.telephony.data.DataCallResponse;
|
|
import android.telephony.data.DataProfile;
|
|
import android.telephony.data.NetworkSlicingConfig;
|
|
|
|
import com.android.internal.telephony.data.KeepaliveStatus;
|
|
|
|
import java.util.ArrayList;
|
|
|
|
/**
|
|
* Interface declaring unsolicited radio indications for data APIs.
|
|
*/
|
|
public class DataIndication extends IRadioDataIndication.Stub {
|
|
private final RIL mRil;
|
|
|
|
public DataIndication(RIL ril) {
|
|
mRil = ril;
|
|
}
|
|
|
|
/**
|
|
* Indicates data call contexts have changed.
|
|
* @param indicationType Type of radio indication
|
|
* @param dcList List of SetupDataCallResult identical to that returned by getDataCallList.
|
|
* It is the complete list of current data contexts including new contexts that have
|
|
* been activated.
|
|
*/
|
|
public void dataCallListChanged(int indicationType,
|
|
android.hardware.radio.data.SetupDataCallResult[] dcList) {
|
|
mRil.processIndication(HAL_SERVICE_DATA, indicationType);
|
|
|
|
if (mRil.isLogOrTrace()) mRil.unsljLogRet(RIL_UNSOL_DATA_CALL_LIST_CHANGED, dcList);
|
|
ArrayList<DataCallResponse> response = RILUtils.convertHalDataCallResultList(dcList);
|
|
mRil.mDataCallListChangedRegistrants.notifyRegistrants(
|
|
new AsyncResult(null, response, null));
|
|
}
|
|
|
|
/**
|
|
* Indicates a status update for an ongoing Keepalive session.
|
|
* @param indicationType Type of radio indication
|
|
* @param halStatus Status of the ongoing Keepalive session
|
|
*/
|
|
public void keepaliveStatus(int indicationType,
|
|
android.hardware.radio.data.KeepaliveStatus halStatus) {
|
|
mRil.processIndication(HAL_SERVICE_DATA, indicationType);
|
|
|
|
if (mRil.isLogOrTrace()) {
|
|
mRil.unsljLogRet(
|
|
RIL_UNSOL_KEEPALIVE_STATUS,
|
|
"handle=" + halStatus.sessionHandle + " code=" + halStatus.code);
|
|
}
|
|
|
|
KeepaliveStatus ks = new KeepaliveStatus(
|
|
halStatus.sessionHandle, halStatus.code);
|
|
mRil.mNattKeepaliveStatusRegistrants.notifyRegistrants(new AsyncResult(null, ks, null));
|
|
}
|
|
|
|
/**
|
|
* Indicates when there is new Carrier PCO data received for a data call.
|
|
* @param indicationType Type of radio indication
|
|
* @param pco New PcoData
|
|
*/
|
|
public void pcoData(int indicationType, android.hardware.radio.data.PcoDataInfo pco) {
|
|
mRil.processIndication(HAL_SERVICE_DATA, indicationType);
|
|
|
|
PcoData response = new PcoData(pco.cid, pco.bearerProto, pco.pcoId, pco.contents);
|
|
|
|
if (mRil.isLogOrTrace()) mRil.unsljLogRet(RIL_UNSOL_PCO_DATA, response);
|
|
|
|
mRil.mPcoDataRegistrants.notifyRegistrants(new AsyncResult(null, response, null));
|
|
}
|
|
|
|
/**
|
|
* Stop throttling calls to setupDataCall for the given APN.
|
|
* @param indicationType Type of radio indication
|
|
* @param dpi DataProfileInfo associated with the APN to unthrottle
|
|
* @throws RemoteException
|
|
*/
|
|
public void unthrottleApn(int indicationType, android.hardware.radio.data.DataProfileInfo dpi)
|
|
throws RemoteException {
|
|
mRil.processIndication(HAL_SERVICE_DATA, indicationType);
|
|
DataProfile response = RILUtils.convertToDataProfile(dpi);
|
|
|
|
if (mRil.isLogOrTrace()) mRil.unsljLogRet(RIL_UNSOL_UNTHROTTLE_APN, response);
|
|
|
|
mRil.mApnUnthrottledRegistrants.notifyRegistrants(new AsyncResult(null, response, null));
|
|
}
|
|
|
|
/**
|
|
* Current slicing configuration including URSP rules and NSSAIs
|
|
* (configured, allowed and rejected).
|
|
* @param indicationType Type of radio indication
|
|
* @param slicingConfig Current slicing configuration
|
|
*/
|
|
public void slicingConfigChanged(int indicationType,
|
|
android.hardware.radio.data.SlicingConfig slicingConfig) throws RemoteException {
|
|
mRil.processIndication(HAL_SERVICE_DATA, indicationType);
|
|
if (mRil.isLogOrTrace()) {
|
|
mRil.unsljLogRet(RIL_UNSOL_SLICING_CONFIG_CHANGED, slicingConfig);
|
|
}
|
|
NetworkSlicingConfig ret = RILUtils.convertHalSlicingConfig(slicingConfig);
|
|
mRil.mSlicingConfigChangedRegistrants.notifyRegistrants(
|
|
new AsyncResult(null, ret, null));
|
|
}
|
|
|
|
@Override
|
|
public String getInterfaceHash() {
|
|
return IRadioDataIndication.HASH;
|
|
}
|
|
|
|
@Override
|
|
public int getInterfaceVersion() {
|
|
return IRadioDataIndication.VERSION;
|
|
}
|
|
}
|