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(); +}