From fb202506bbd874eb349a253548b62c75f90bc052 Mon Sep 17 00:00:00 2001 From: Hui Wang Date: Fri, 13 Nov 2020 04:30:18 +0000 Subject: [PATCH] Add VoNR network feature support information Define data structures for VoNR network feature support information, and update RegStateResult to allow the information to be reported through the response of getVoiceRegistrationStateResponse and getDataRegistrationStateResponse. Bug: 167991878 Test: make, VTS Change-Id: I098bd1b6c86cd38be6fbc086b8ebd7b1bb2408fa --- radio/1.6/IRadio.hal | 18 +++ radio/1.6/IRadioResponse.hal | 28 ++++ radio/1.6/types.hal | 144 ++++++++++++++++++ .../functional/radio_hidl_hal_utils_v1_6.h | 8 + radio/1.6/vts/functional/radio_response.cpp | 16 ++ 5 files changed, 214 insertions(+) diff --git a/radio/1.6/IRadio.hal b/radio/1.6/IRadio.hal index 2e64008476..85e8cad4c9 100644 --- a/radio/1.6/IRadio.hal +++ b/radio/1.6/IRadio.hal @@ -365,4 +365,22 @@ interface IRadio extends @1.5::IRadio { * Response callback is IRadioResponse.getSystemSelectionChannelsResponse() */ oneway getSystemSelectionChannels(int32_t serial); + + /** + * Request current voice registration state. + * + * @param serial Serial number of request. + * + * Response function is IRadioResponse.getVoiceRegistrationStateResponse_1_6() + */ + oneway getVoiceRegistrationState_1_6(int32_t serial); + + /** + * Request current data registration state. + * + * @param serial Serial number of request. + * + * Response function is IRadioResponse.getDataRegistrationStateResponse_1_6() + */ + oneway getDataRegistrationState_1_6(int32_t serial); }; diff --git a/radio/1.6/IRadioResponse.hal b/radio/1.6/IRadioResponse.hal index 36e3ee4032..29b8e9d86b 100644 --- a/radio/1.6/IRadioResponse.hal +++ b/radio/1.6/IRadioResponse.hal @@ -19,6 +19,7 @@ package android.hardware.radio@1.6; import @1.0::SendSmsResult; import @1.6::RadioResponseInfo; import @1.5::IRadioResponse; +import @1.6::RegStateResult; import @1.6::SetupDataCallResult; /** @@ -327,4 +328,31 @@ interface IRadioResponse extends @1.5::IRadioResponse { * RadioError:INVALID_ARGUMENTS */ oneway getSystemSelectionChannelsResponse(RadioResponseInfo info); + + /** + * @param info Response info struct containing response type, serial no. and error + * @param voiceRegResponse Current Voice registration response as defined by RegStateResult + * in types.hal + * + * Valid errors returned: + * RadioError:NONE + * RadioError:RADIO_NOT_AVAILABLE + * RadioError:INTERNAL_ERR + */ + oneway getVoiceRegistrationStateResponse_1_6(RadioResponseInfo info, + RegStateResult voiceRegResponse); + + /** + * @param info Response info struct containing response type, serial no. and error + * @param dataRegResponse Current Data registration response as defined by RegStateResult in + * types.hal + * + * Valid errors returned: + * RadioError:NONE + * RadioError:RADIO_NOT_AVAILABLE + * RadioError:INTERNAL_ERR + * RadioError:NOT_PROVISIONED + */ + oneway getDataRegistrationStateResponse_1_6(RadioResponseInfo info, + RegStateResult dataRegResponse); }; diff --git a/radio/1.6/types.hal b/radio/1.6/types.hal index 556d8a322e..cfa2cde754 100644 --- a/radio/1.6/types.hal +++ b/radio/1.6/types.hal @@ -18,10 +18,17 @@ package android.hardware.radio@1.6; import @1.0::RadioError; import @1.0::RadioResponseType; +import @1.0::RegState; import @1.4::DataCallFailCause; import @1.4::DataConnActiveStatus; import @1.4::PdpProtocolType; +import @1.4::RadioTechnology; +import @1.5::CellIdentity; import @1.5::LinkAddress; +import @1.5::RegStateResult.AccessTechnologySpecificInfo.Cdma2000RegistrationInfo; +import @1.5::RegStateResult.AccessTechnologySpecificInfo.EutranRegistrationInfo; +import @1.5::RegistrationFailCause; +import @1.5::SetupDataCallResult; import android.hidl.safe_union@1.0::Monostate; @@ -417,3 +424,140 @@ enum DataThrottlingAction : int32_t { */ HOLD = 3 }; + +/** + * Defines the values for VoPS indicator of NR as per 3gpp spec 24.501 sec 9.10.3.5 + */ +enum VopsIndicator : uint8_t { + /** IMS voice over PS session not supported */ + VOPS_NOT_SUPPORTED = 0, + /** IMS voice over PS session supported over 3GPP access */ + VOPS_OVER_3GPP = 1, + /** IMS voice over PS session supported over non-3GPP access */ + VOPS_OVER_NON_3GPP = 2, +}; + +/** + * Defines the values for emergency service indicator of NR + * as per 3gpp spec 24.501 sec 9.10.3.5 + */ +enum EmcIndicator : uint8_t { + /** Emergency services not supported */ + EMC_NOT_SUPPORTED = 0, + /** Emergency services supported in NR connected to 5GCN only */ + EMC_NR_CONNECTED_TO_5GCN = 1, + /** Emergency services supported in E-UTRA connected to 5GCN only */ + EMC_EUTRA_CONNECTED_TO_5GCN = 2, + /** Emergency services supported in NR connected to 5GCN and E-UTRA connected to 5GCN */ + EMC_BOTH_NR_EUTRA_CONNECTED_TO_5GCN = 3 +}; + +/** + * Defines the values for emergency service fallback indicator of NR + * as per 3gpp spec 24.501 sec 9.10.3.5 + */ +enum EmfIndicator : uint8_t { + /** Emergency services fallback not supported */ + EMF_NOT_SUPPORTED = 0, + /** Emergency services fallback supported in NR connected to 5GCN only */ + EMF_NR_CONNECTED_TO_5GCN = 1, + /** Emergency services fallback supported in E-UTRA connected to 5GCN only */ + EMF_EUTRA_CONNECTED_TO_5GCN = 2, + /** + * Emergency services fallback supported in NR connected to 5GCN and E-UTRA + * connected to 5GCN. + */ + EMF_BOTH_NR_EUTRA_CONNECTED_TO_5GCN = 3 +}; + +/** + * Type to define the NR specific network capabilities for voice over PS including + * emergency and normal voice calls. + */ +struct NrVopsInfo { + /** + * This indicates if the camped network supports VoNR services, and what kind of services + * it supports. This information is received from NR network during NR NAS registration + * procedure through NR REGISTRATION ACCEPT. + * Refer 3GPP 24.501 EPS 5GS network feature support -> IMS VoPS + */ + VopsIndicator vopsSupported; + + /** + * This indicates if the camped network supports VoNR emergency service. This information + * is received from NR network through two sources: + * a. During NR NAS registration procedure through NR REGISTRATION ACCEPT. + * Refer 3GPP 24.501 EPS 5GS network feature support -> EMC + * b. In case the device is not registered on the network. + * Refer 3GPP 38.331 SIB1 : ims-EmergencySupport + * If device is registered on NR, then this field indicates whether the cell + * supports IMS emergency bearer services for UEs in limited service mode. + */ + EmcIndicator emcSupported; + + /** + * This indicates if the camped network supports VoNR emergency service fallback. This + * information is received from NR network during NR NAS registration procedure through + * NR REGISTRATION ACCEPT. + * Refer 3GPP 24.501 EPS 5GS network feature support -> EMF + */ + EmfIndicator emfSupported; +}; + +/** + * Overwritten from @1.5::RegStateResult to 1.6 to support NrRegistrationInfo + * version. + */ +struct RegStateResult { + /** + * Registration state + * + * If the RAT is indicated as a GERAN, UTRAN, or CDMA2000 technology, this value reports + * registration in the Circuit-switched domain. + * If the RAT is indicated as an EUTRAN, NGRAN, or another technology that does not support + * circuit-switched services, this value reports registration in the Packet-switched domain. + */ + RegState regState; + + /** + * Indicates the available voice radio technology, valid values as + * defined by RadioTechnology. + */ + RadioTechnology rat; + + /** + * Cause code reported by the network in case registration fails. This will be a mobility + * management cause code defined for MM, GMM, MME or equivalent as appropriate for the RAT. + */ + RegistrationFailCause reasonForDenial; + + /** CellIdentity */ + CellIdentity cellIdentity; + + /** + * The most-recent PLMN-ID upon which the UE registered (or attempted to register if a failure + * is reported in the reasonForDenial field). This PLMN shall be in standard format consisting + * of a 3 digit MCC concatenated with a 2 or 3 digit MNC. + */ + string registeredPlmn; + + /** + * Access-technology-specific registration information, such as for CDMA2000. + */ + safe_union AccessTechnologySpecificInfo { + Monostate noinit; + + Cdma2000RegistrationInfo cdmaInfo; + + EutranRegistrationInfo eutranInfo; + + struct NgranRegistrationInfo { + /** + * Network capabilities for voice over PS services. This info is valid only on NR + * network and must be present when the device is camped on NR. VopsInfo must be + * empty when the device is not camped on NR. + */ + NrVopsInfo nrVopsInfo; + } ngranInfo; + } accessTechnologySpecificInfo; +}; diff --git a/radio/1.6/vts/functional/radio_hidl_hal_utils_v1_6.h b/radio/1.6/vts/functional/radio_hidl_hal_utils_v1_6.h index 85be903e9e..2a442e7a3e 100644 --- a/radio/1.6/vts/functional/radio_hidl_hal_utils_v1_6.h +++ b/radio/1.6/vts/functional/radio_hidl_hal_utils_v1_6.h @@ -798,6 +798,14 @@ class RadioResponse_v1_6 : public ::android::hardware::radio::V1_6::IRadioRespon Return getSystemSelectionChannelsResponse( const ::android::hardware::radio::V1_6::RadioResponseInfo& info); + + Return getVoiceRegistrationStateResponse_1_6( + const ::android::hardware::radio::V1_6::RadioResponseInfo& info, + const ::android::hardware::radio::V1_6::RegStateResult& regResponse); + + Return getDataRegistrationStateResponse_1_6( + const ::android::hardware::radio::V1_6::RadioResponseInfo& info, + const ::android::hardware::radio::V1_6::RegStateResult& regResponse); }; /* Callback class for radio indication */ diff --git a/radio/1.6/vts/functional/radio_response.cpp b/radio/1.6/vts/functional/radio_response.cpp index 7da675ea12..52d3486769 100644 --- a/radio/1.6/vts/functional/radio_response.cpp +++ b/radio/1.6/vts/functional/radio_response.cpp @@ -1170,3 +1170,19 @@ Return RadioResponse_v1_6::getSystemSelectionChannelsResponse( parent_v1_6.notify(info.serial); return Void(); } + +Return RadioResponse_v1_6::getVoiceRegistrationStateResponse_1_6( + const ::android::hardware::radio::V1_6::RadioResponseInfo& info, + const ::android::hardware::radio::V1_6::RegStateResult& /*regResponse*/) { + rspInfo = info; + parent_v1_6.notify(info.serial); + return Void(); +} + +Return RadioResponse_v1_6::getDataRegistrationStateResponse_1_6( + const ::android::hardware::radio::V1_6::RadioResponseInfo& info, + const ::android::hardware::radio::V1_6::RegStateResult& /*regResponse*/) { + rspInfo = info; + parent_v1_6.notify(info.serial); + return Void(); +}