243 lines
9.3 KiB
Java
243 lines
9.3 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 android.hardware.radio.RadioError;
|
|
import android.hardware.radio.RadioResponseInfo;
|
|
import android.hardware.radio.data.IRadioDataResponse;
|
|
import android.telephony.data.DataCallResponse;
|
|
import android.telephony.data.NetworkSlicingConfig;
|
|
|
|
import com.android.internal.telephony.data.KeepaliveStatus;
|
|
|
|
import java.util.ArrayList;
|
|
|
|
/**
|
|
* Interface declaring response functions to solicited radio requests for data APIs.
|
|
*/
|
|
public class DataResponse extends IRadioDataResponse.Stub {
|
|
private final RIL mRil;
|
|
|
|
public DataResponse(RIL ril) {
|
|
mRil = ril;
|
|
}
|
|
|
|
/**
|
|
* 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 id The pdu session id allocated
|
|
*/
|
|
public void allocatePduSessionIdResponse(RadioResponseInfo responseInfo, int id) {
|
|
RILRequest rr = mRil.processResponse(HAL_SERVICE_DATA, responseInfo);
|
|
if (rr != null) {
|
|
if (responseInfo.error == RadioError.NONE) {
|
|
RadioResponse.sendMessageResponse(rr.mResult, id);
|
|
}
|
|
mRil.processResponseDone(rr, responseInfo, id);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @param responseInfo Response info struct containing response type, serial no. and error
|
|
*/
|
|
public void cancelHandoverResponse(RadioResponseInfo responseInfo) {
|
|
RadioResponse.responseVoid(HAL_SERVICE_DATA, mRil, responseInfo);
|
|
}
|
|
|
|
/**
|
|
* @param responseInfo Response info struct containing response type, serial no. and error
|
|
*/
|
|
public void deactivateDataCallResponse(RadioResponseInfo responseInfo) {
|
|
RadioResponse.responseVoid(HAL_SERVICE_DATA, mRil, responseInfo);
|
|
}
|
|
|
|
/**
|
|
* @param responseInfo Response info struct containing response type, serial no. and error
|
|
* @param dataCallResultList Response to get data call list as defined by SetupDataCallResult
|
|
*/
|
|
public void getDataCallListResponse(RadioResponseInfo responseInfo,
|
|
android.hardware.radio.data.SetupDataCallResult[] dataCallResultList) {
|
|
RILRequest rr = mRil.processResponse(HAL_SERVICE_DATA, responseInfo);
|
|
|
|
if (rr != null) {
|
|
ArrayList<DataCallResponse> response =
|
|
RILUtils.convertHalDataCallResultList(dataCallResultList);
|
|
if (responseInfo.error == RadioError.NONE) {
|
|
RadioResponse.sendMessageResponse(rr.mResult, response);
|
|
}
|
|
mRil.processResponseDone(rr, responseInfo, response);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @param responseInfo Response info struct containing response type, serial no. and error
|
|
* @param slicingConfig Current slicing configuration
|
|
*/
|
|
public void getSlicingConfigResponse(RadioResponseInfo responseInfo,
|
|
android.hardware.radio.data.SlicingConfig slicingConfig) {
|
|
RILRequest rr = mRil.processResponse(HAL_SERVICE_DATA, responseInfo);
|
|
|
|
if (rr != null) {
|
|
NetworkSlicingConfig ret = RILUtils.convertHalSlicingConfig(slicingConfig);
|
|
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
|
|
*/
|
|
public void releasePduSessionIdResponse(RadioResponseInfo responseInfo) {
|
|
RadioResponse.responseVoid(HAL_SERVICE_DATA, mRil, responseInfo);
|
|
}
|
|
|
|
/**
|
|
* @param responseInfo Response info struct containing response type, serial no. and error
|
|
*/
|
|
public void setDataAllowedResponse(RadioResponseInfo responseInfo) {
|
|
RadioResponse.responseVoid(HAL_SERVICE_DATA, mRil, responseInfo);
|
|
}
|
|
|
|
/**
|
|
* @param responseInfo Response info struct containing response type, serial no. and error
|
|
*/
|
|
public void setDataProfileResponse(RadioResponseInfo responseInfo) {
|
|
RadioResponse.responseVoid(HAL_SERVICE_DATA, mRil, responseInfo);
|
|
}
|
|
|
|
/**
|
|
* @param responseInfo Response info struct containing response type, serial no. and error
|
|
*/
|
|
public void setDataThrottlingResponse(RadioResponseInfo responseInfo) {
|
|
RadioResponse.responseVoid(HAL_SERVICE_DATA, mRil, responseInfo);
|
|
}
|
|
|
|
/**
|
|
* @param responseInfo Response info struct containing response type, serial no. and error
|
|
*/
|
|
public void setInitialAttachApnResponse(RadioResponseInfo responseInfo) {
|
|
RadioResponse.responseVoid(HAL_SERVICE_DATA, mRil, responseInfo);
|
|
}
|
|
|
|
/**
|
|
* @param responseInfo Response info struct containing response type, serial no. and error
|
|
* @param setupDataCallResult Response to data call setup as defined by SetupDataCallResult
|
|
*/
|
|
public void setupDataCallResponse(RadioResponseInfo responseInfo,
|
|
android.hardware.radio.data.SetupDataCallResult setupDataCallResult) {
|
|
RILRequest rr = mRil.processResponse(HAL_SERVICE_DATA, responseInfo);
|
|
|
|
if (rr != null) {
|
|
DataCallResponse response = RILUtils.convertHalDataCallResult(setupDataCallResult);
|
|
if (responseInfo.error == RadioError.NONE) {
|
|
RadioResponse.sendMessageResponse(rr.mResult, response);
|
|
}
|
|
mRil.processResponseDone(rr, responseInfo, response);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @param responseInfo Response info struct containing response type, serial no. and error
|
|
*/
|
|
public void startHandoverResponse(RadioResponseInfo responseInfo) {
|
|
RadioResponse.responseVoid(HAL_SERVICE_DATA, mRil, responseInfo);
|
|
}
|
|
|
|
/**
|
|
* @param responseInfo Response info struct containing response type, serial no. and error
|
|
* @param keepaliveStatus status of the keepalive with a handle for the session
|
|
*/
|
|
public void startKeepaliveResponse(RadioResponseInfo responseInfo,
|
|
android.hardware.radio.data.KeepaliveStatus keepaliveStatus) {
|
|
|
|
RILRequest rr = mRil.processResponse(HAL_SERVICE_DATA, responseInfo);
|
|
if (rr == null) return;
|
|
|
|
KeepaliveStatus ret = null;
|
|
try {
|
|
switch(responseInfo.error) {
|
|
case RadioError.NONE:
|
|
int convertedStatus = RILUtils.convertHalKeepaliveStatusCode(
|
|
keepaliveStatus.code);
|
|
if (convertedStatus < 0) {
|
|
ret = new KeepaliveStatus(KeepaliveStatus.ERROR_UNSUPPORTED);
|
|
} else {
|
|
ret = new KeepaliveStatus(
|
|
keepaliveStatus.sessionHandle, convertedStatus);
|
|
}
|
|
// If responseInfo.error is NONE, response function sends the response message
|
|
// even if result is actually an error.
|
|
RadioResponse.sendMessageResponse(rr.mResult, ret);
|
|
break;
|
|
case RadioError.REQUEST_NOT_SUPPORTED:
|
|
ret = new KeepaliveStatus(KeepaliveStatus.ERROR_UNSUPPORTED);
|
|
break;
|
|
case RadioError.NO_RESOURCES:
|
|
ret = new KeepaliveStatus(KeepaliveStatus.ERROR_NO_RESOURCES);
|
|
break;
|
|
default:
|
|
ret = new KeepaliveStatus(KeepaliveStatus.ERROR_UNKNOWN);
|
|
break;
|
|
}
|
|
} finally {
|
|
// If responseInfo.error != NONE, the processResponseDone sends the response message.
|
|
mRil.processResponseDone(rr, responseInfo, ret);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @param responseInfo Response info struct containing response type, serial no. and error
|
|
*/
|
|
public void stopKeepaliveResponse(RadioResponseInfo responseInfo) {
|
|
RILRequest rr = mRil.processResponse(HAL_SERVICE_DATA, responseInfo);
|
|
if (rr == null) return;
|
|
|
|
try {
|
|
if (responseInfo.error == RadioError.NONE) {
|
|
RadioResponse.sendMessageResponse(rr.mResult, null);
|
|
} else {
|
|
//TODO: Error code translation
|
|
}
|
|
} finally {
|
|
mRil.processResponseDone(rr, responseInfo, null);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public String getInterfaceHash() {
|
|
return IRadioDataResponse.HASH;
|
|
}
|
|
|
|
@Override
|
|
public int getInterfaceVersion() {
|
|
return IRadioDataResponse.VERSION;
|
|
}
|
|
}
|