From ead01a029d8c75ff19fffed10e1af6c799317a70 Mon Sep 17 00:00:00 2001 From: Nathan Harold Date: Thu, 9 Dec 2021 13:07:09 -0800 Subject: [PATCH] Add UsageSetting to IRadioNetwork Add usage setting to IRadioNetwork(Response) and the associated enum. Expose the cellular usage setting to Android to be able to query and set the modem to operate in a data-centric mode or a voice-centric mode. This facilitates "companion" subscriptions that might be data-only and allows voice-centric devices to operate in data-centric mode on networks that do not support voice service. Bug: 210023167 Test: compilation Merged-In: I61b559589a51d139374dc52599201b6412d93da5 Change-Id: I61b559589a51d139374dc52599201b6412d93da5 (cherry picked from commit 3e777942d85bf61b57703738c8696b9a5f055d4c) --- .../hardware/radio/network/IRadioNetwork.aidl | 2 + .../radio/network/IRadioNetworkResponse.aidl | 2 + .../hardware/radio/network/UsageSetting.aidl | 39 ++++++++++++++++++ .../hardware/radio/network/IRadioNetwork.aidl | 22 ++++++++++ .../radio/network/IRadioNetworkResponse.aidl | 27 +++++++++++++ .../hardware/radio/network/UsageSetting.aidl | 40 +++++++++++++++++++ 6 files changed, 132 insertions(+) create mode 100644 radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/UsageSetting.aidl create mode 100644 radio/aidl/android/hardware/radio/network/UsageSetting.aidl diff --git a/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/IRadioNetwork.aidl b/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/IRadioNetwork.aidl index 16433be238..c6187913dd 100644 --- a/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/IRadioNetwork.aidl +++ b/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/IRadioNetwork.aidl @@ -68,4 +68,6 @@ interface IRadioNetwork { oneway void startNetworkScan(in int serial, in android.hardware.radio.network.NetworkScanRequest request); oneway void stopNetworkScan(in int serial); oneway void supplyNetworkDepersonalization(in int serial, in String netPin); + oneway void setUsageSetting(in int serial, in android.hardware.radio.network.UsageSetting usageSetting); + oneway void getUsageSetting(in int serial); } diff --git a/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/IRadioNetworkResponse.aidl b/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/IRadioNetworkResponse.aidl index ff953964b7..8cf4c31149 100644 --- a/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/IRadioNetworkResponse.aidl +++ b/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/IRadioNetworkResponse.aidl @@ -67,4 +67,6 @@ interface IRadioNetworkResponse { oneway void startNetworkScanResponse(in android.hardware.radio.RadioResponseInfo info); oneway void stopNetworkScanResponse(in android.hardware.radio.RadioResponseInfo info); oneway void supplyNetworkDepersonalizationResponse(in android.hardware.radio.RadioResponseInfo info, in int remainingRetries); + oneway void setUsageSettingResponse(in android.hardware.radio.RadioResponseInfo info); + oneway void getUsageSettingResponse(in android.hardware.radio.RadioResponseInfo info, in android.hardware.radio.network.UsageSetting usageSetting); } diff --git a/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/UsageSetting.aidl b/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/UsageSetting.aidl new file mode 100644 index 0000000000..7fdf8313d3 --- /dev/null +++ b/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/UsageSetting.aidl @@ -0,0 +1,39 @@ +/* + * 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. + */ +/////////////////////////////////////////////////////////////////////////////// +// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE. // +/////////////////////////////////////////////////////////////////////////////// + +// This file is a snapshot of an AIDL file. Do not edit it manually. There are +// two cases: +// 1). this is a frozen version file - do not edit this in any case. +// 2). this is a 'current' file. If you make a backwards compatible change to +// the interface (from the latest frozen version), the build system will +// prompt you to update this file with `m -update-api`. +// +// You must not make a backward incompatible change to any AIDL file built +// with the aidl_interface module type with versions property set. The module +// type is used to build AIDL files in a way that they can be used across +// independently updatable components of the system. If a device is shipped +// with such a backward incompatible change, it has a high risk of breaking +// later when a module using the interface is updated, e.g., Mainline modules. + +package android.hardware.radio.network; +@Backing(type="int") @VintfStability +enum UsageSetting { + VOICE_CENTRIC = 1, + DATA_CENTRIC = 2, +} diff --git a/radio/aidl/android/hardware/radio/network/IRadioNetwork.aidl b/radio/aidl/android/hardware/radio/network/IRadioNetwork.aidl index 1081a75ae9..aaf432aaaa 100644 --- a/radio/aidl/android/hardware/radio/network/IRadioNetwork.aidl +++ b/radio/aidl/android/hardware/radio/network/IRadioNetwork.aidl @@ -27,6 +27,7 @@ import android.hardware.radio.network.NrDualConnectivityState; import android.hardware.radio.network.RadioAccessSpecifier; import android.hardware.radio.network.RadioBandMode; import android.hardware.radio.network.SignalThresholdInfo; +import android.hardware.radio.network.UsageSetting; /** * This interface is used by telephony and telecom to talk to cellular radio for network APIs. @@ -416,4 +417,25 @@ oneway interface IRadioNetwork { * Response function is IRadioNetworkResponse.supplyNetworkDepersonalizationResponse() */ void supplyNetworkDepersonalization(in int serial, in String netPin); + + /** + * Set the UE usage setting for data/voice centric usage. + * + *

Sets the usage setting in accordance with 3gpp 24.301 sec 4.3 and 3gpp 24.501 sec 4.3. + *

This value must be independently preserved for each SIM; (setting the value is not a + * "global" override). + * + * @param serial Serial number of request. + * @param usageSetting the usage setting for the current SIM. + */ + oneway void setUsageSetting(in int serial, in UsageSetting usageSetting); + + /** + * Get the UE usage setting for data/voice centric usage. + * + *

Gets the usage setting in accordance with 3gpp 24.301 sec 4.3 and 3gpp 24.501 sec 4.3. + * + * @param serial Serial number of request. + */ + oneway void getUsageSetting(in int serial); } diff --git a/radio/aidl/android/hardware/radio/network/IRadioNetworkResponse.aidl b/radio/aidl/android/hardware/radio/network/IRadioNetworkResponse.aidl index 429b5a8766..30f422101b 100644 --- a/radio/aidl/android/hardware/radio/network/IRadioNetworkResponse.aidl +++ b/radio/aidl/android/hardware/radio/network/IRadioNetworkResponse.aidl @@ -31,6 +31,7 @@ import android.hardware.radio.network.RadioAccessSpecifier; import android.hardware.radio.network.RadioBandMode; import android.hardware.radio.network.RegStateResult; import android.hardware.radio.network.SignalStrength; +import android.hardware.radio.network.UsageSetting; /** * Interface declaring response functions to solicited radio requests for network APIs. @@ -549,4 +550,30 @@ oneway interface IRadioNetworkResponse { * RadioError:SIM_ABSENT */ void supplyNetworkDepersonalizationResponse(in RadioResponseInfo info, in int remainingRetries); + + /** + * @param info Response info struct containing response type, serial no. and error. + * + * Valid errors returned: + * RadioError:NONE + * RadioError:RADIO_NOT_AVAILABLE + * RadioError:INVALID_STATE + * RadioError:INVALID_ARGUMENTS + * RadioError:INTERNAL_ERR + * RadioError:SIM_ABSENT + */ + oneway void setUsageSettingResponse(in RadioResponseInfo info); + + /** + * @param info Response info struct containing response type, serial no. and error. + * @param usageSetting the usage setting for the current SIM. + * + * Valid errors returned: + * RadioError:NONE + * RadioError:RADIO_NOT_AVAILABLE + * RadioError:INVALID_STATE + * RadioError:INTERNAL_ERR + * RadioError:SIM_ABSENT + */ + oneway void getUsageSettingResponse(in RadioResponseInfo info, in UsageSetting usageSetting); } diff --git a/radio/aidl/android/hardware/radio/network/UsageSetting.aidl b/radio/aidl/android/hardware/radio/network/UsageSetting.aidl new file mode 100644 index 0000000000..ba8fe93f55 --- /dev/null +++ b/radio/aidl/android/hardware/radio/network/UsageSetting.aidl @@ -0,0 +1,40 @@ +/* + * 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 android.hardware.radio.network; + +/** + * Cellular usage setting with values according to 3gpp 24.301 sec 4.3 and 3gpp 24.501 sec 4.3. + * + *

Also refer to "UE's usage setting" as defined in 3gpp 24.301 section 3.1 and 3gpp 23.221 + * Annex A. + */ +@VintfStability +@Backing(type="int") +enum UsageSetting { + /** + * UE operates in voice-centric mode. Generally speaking, in this mode of operation, the UE + * will not remain camped on a cell or attached to a network unless that cell/network provides + * voice service. + */ + VOICE_CENTRIC = 1, + + /** + * UE operates in data-centric mode. Generally speaking, in this mode of operation, the UE + * will not reselect away from a cell/network that only provides data services. + */ + DATA_CENTRIC = 2, +}