From caee79f17466dd7510dcb405296342cccc0cc5c8 Mon Sep 17 00:00:00 2001 From: Nathan Harold Date: Thu, 16 Jan 2020 17:00:49 -0800 Subject: [PATCH] Add Support for RPLMN to Voice and Data RegState -Define RegistrationFailCause as an enum -Combine voice and data reg state into a single struct -Define a safe-union for AN-specific registration info Bug: 73629308 Test: make && make VtsHalRadioV1_5TargetTest && make cf_x86_64_phone-userdebug Change-Id: I43df3cffd4c55f2c5df8eaf0235772e5930dced5 Merged-In: I43df3cffd4c55f2c5df8eaf0235772e5930dced5 --- current.txt | 6 +- radio/1.5/IRadio.hal | 18 ++ radio/1.5/IRadioResponse.hal | 31 ++- radio/1.5/types.hal | 194 ++++++++++++++++++ .../functional/radio_hidl_hal_utils_v1_5.h | 8 + radio/1.5/vts/functional/radio_response.cpp | 16 ++ 6 files changed, 268 insertions(+), 5 deletions(-) diff --git a/current.txt b/current.txt index 4f389f618d..f106c1cc0d 100644 --- a/current.txt +++ b/current.txt @@ -635,10 +635,10 @@ c9273429fcf98d797d3bb07fdba6f1be95bf960f9255cde169fd1ca4db85f856 android.hardwar ## # BEGIN Radio HAL Merge Conflict Avoidance Buffer - STOPSHIP if present ## -4433da27d889fb293ec95c831a65d284803949870f061f1314fd2f9f935e6319 android.hardware.radio@1.5::types -7a0a3382cca78d13a55e856b14b7fb025987f52c2adeab5747cd584391cd3cc7 android.hardware.radio@1.5::IRadio +bbed8ec4b3e9bb419b61d3fe53ec2d7def943378d1de8eaa02d79b17b0838136 android.hardware.radio@1.5::types +603851ca0f5360778049902fc7486d0ff60065b16e83b99f076487667aba1928 android.hardware.radio@1.5::IRadio 20d52e66fd548f89bcb98cda42749a591ce8f439a2a7148617adac0c967ad937 android.hardware.radio@1.5::IRadioIndication -c7b4a0debd3bb8815a463d11194487c7eef81bca584f558d7ba74c34b18d7e3f android.hardware.radio@1.5::IRadioResponse +afa9ba21fbf130e5cd6463b01ee34175a60220cdc8b657443e683494e6deca8d android.hardware.radio@1.5::IRadioResponse 5971a891d7d8843e9fb9f44583a9a0a265ec42fd5e4e1c95c9803454d21fabf7 android.hardware.radio.config@1.3::types a2977755bc5f1ef47f04b7f2400632efda6218e1515dba847da487145cfabc4f android.hardware.radio.config@1.3::IRadioConfig 742360c775313438b0f82256eac62fb5bbc76a6ae6f388573f3aa142fb2c1eea android.hardware.radio.config@1.3::IRadioConfigIndication diff --git a/radio/1.5/IRadio.hal b/radio/1.5/IRadio.hal index 22cc4e1f81..be6a727972 100644 --- a/radio/1.5/IRadio.hal +++ b/radio/1.5/IRadio.hal @@ -248,6 +248,24 @@ interface IRadio extends @1.4::IRadio { */ oneway getBarringInfo(int32_t serial); + /** + * Request current voice registration state + * + * @param serial Serial number of request. + * + * Response function is IRadioResponse.getVoiceRegistrationStateResponse_1_5() + */ + oneway getVoiceRegistrationState_1_5(int32_t serial); + + /** + * Request current data registration state + * + * @param serial Serial number of request. + * + * Response function is IRadioResponse.getDataRegistrationStateResponse_1_5() + */ + oneway getDataRegistrationState_1_5(int32_t serial); + /** * Requests that deactivates one category of the device personalization. * diff --git a/radio/1.5/IRadioResponse.hal b/radio/1.5/IRadioResponse.hal index 88f31344e9..f65c075203 100644 --- a/radio/1.5/IRadioResponse.hal +++ b/radio/1.5/IRadioResponse.hal @@ -20,9 +20,9 @@ import @1.0::RadioResponseInfo; import @1.0::SendSmsResult; import @1.4::IRadioResponse; import @1.5::BarringInfo; -import @1.5::SetupDataCallResult; -import @1.4::SetupDataCallResult; import @1.5::PersoSubstate; +import @1.5::RegStateResult; +import @1.5::SetupDataCallResult; /** * Interface declaring response functions to solicited radio requests. @@ -174,6 +174,33 @@ interface IRadioResponse extends @1.4::IRadioResponse { */ oneway getBarringInfoResponse(RadioResponseInfo info, vec barringInfos); + /** + * @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_5(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_5(RadioResponseInfo info, + RegStateResult dataRegResponse); + /** * @param info Response info struct containing response type, serial no. and error * @param persoType SIM Personalisation type diff --git a/radio/1.5/types.hal b/radio/1.5/types.hal index bd5dfbf937..48796be26d 100644 --- a/radio/1.5/types.hal +++ b/radio/1.5/types.hal @@ -16,7 +16,12 @@ package android.hardware.radio@1.5; +import @1.0::ApnAuthType; +import @1.0::DataProfileId; +import @1.0::DataProfileInfoType; import @1.0::PersoSubstate; +import @1.0::RadioAccessFamily; +import @1.0::RegState; import @1.1::EutranBands; import @1.1::GeranBands; import @1.1::RadioAccessNetworks; @@ -36,7 +41,10 @@ import @1.4::CellIdentityNr; import @1.4::DataCallFailCause; import @1.4::DataConnActiveStatus; import @1.4::DataProfileInfo; +import @1.4::LteVopsInfo; +import @1.4::NrIndicators; import @1.4::PdpProtocolType; +import @1.4::RadioTechnology; import android.hidl.safe_union@1.0::Monostate; @@ -565,6 +573,192 @@ enum IndicationFilter : @1.2::IndicationFilter { BARRING_INFO = 1 << 6, }; +/** + * Call fail causes for Circuit-switched service enumerated in 3GPP TS 24.008, 10.5.3.6 and + * 10.5.147. Additional detail is available in 3GPP TS 24.008 Annex G. + */ +enum RegistrationFailCause : int32_t { + /** 0 - None */ + NONE = 0, + /** 2 - IMSI unknown in HLR */ + IMSI_UNKNOWN_IN_HLR = 2, + /** 3 - Illegal MS */ + ILLEGAL_MS = 3, + /** 4 - Illegal ME */ + IMSI_UNKNOWN_IN_VLR = 4, + /** 5 - PLMN not allowed */ + IMEI_NOT_ACCEPTED = 5, + /** 6 - Location area not allowed */ + ILLEGAL_ME = 6, + /** 7 - Roaming not allowed */ + GPRS_SERVICES_NOT_ALLOWED = 7, + /** 8 - No Suitable Cells in this Location Area */ + GPRS_AND_NON_GPRS_SERVICES_NOT_ALLOWED = 8, + /** 9 - Network failure */ + MS_IDENTITY_CANNOT_BE_DERIVED_BY_NETWORK = 9, + /** 10 - Persistent location update reject */ + IMPLICITLY_DETACHED = 10, + /** 11 - PLMN not allowed */ + PLMN_NOT_ALLOWED = 11, + /** 12 - Location area not allowed */ + LOCATION_AREA_NOT_ALLOWED = 12, + /** 13 - Roaming not allowed in this Location Area */ + ROAMING_NOT_ALLOWED = 13, + /** 14 - GPRS Services not allowed in this PLMN */ + GPRS_SERVICES_NOT_ALLOWED_IN_PLMN = 14, + /** 15 - No Suitable Cells in this Location Area */ + NO_SUITABLE_CELLS = 15, + /** 16 - MSC temporarily not reachable */ + MSC_TEMPORARILY_NOT_REACHABLE = 15, + /** 17 - Network Failure */ + NETWORK_FAILURE = 17, + /** 20 - MAC Failure */ + MAC_FAILURE = 20, + /** 21 - Sync Failure */ + SYNC_FAILURE = 21, + /** 22 - Congestion */ + CONGESTION = 22, + /** 23 - GSM Authentication unacceptable */ + GSM_AUTHENTICATION_UNACCEPTABLE = 23, + /** 25 - Not Authorized for this CSG */ + NOT_AUTHORIZED_FOR_THIS_CSG = 25, + /** 28 SMS provided via GPRS in this routing area */ + SMS_PROVIDED_BY_GPRS_IN_ROUTING_AREA, + /** 32 - Service option not supported */ + SERVICE_OPTION_NOT_SUPPORTED = 32, + /** 33 - Requested service option not subscribed */ + SERVICE_OPTION_NOT_SUBSCRIBED = 33, + /** 34 - Service option temporarily out of order */ + SERVICE_OPTION_TEMPORARILY_OUT_OF_ORDER = 34, + /** 38 - Call cannot be identified */ + CALL_CANNOT_BE_IDENTIFIED = 38, + /** 40 No PDP context activated */ + NO_PDP_CONTEXT_ACTIVATED = 40, + /** 48-63 - Retry upon entry into a new cell */ + RETRY_UPON_ENTRY_INTO_NEW_CELL_1 = 48, + RETRY_UPON_ENTRY_INTO_NEW_CELL_2 = 49, + RETRY_UPON_ENTRY_INTO_NEW_CELL_3 = 50, + RETRY_UPON_ENTRY_INTO_NEW_CELL_4 = 51, + RETRY_UPON_ENTRY_INTO_NEW_CELL_5 = 52, + RETRY_UPON_ENTRY_INTO_NEW_CELL_6 = 53, + RETRY_UPON_ENTRY_INTO_NEW_CELL_7 = 54, + RETRY_UPON_ENTRY_INTO_NEW_CELL_8 = 55, + RETRY_UPON_ENTRY_INTO_NEW_CELL_9 = 56, + RETRY_UPON_ENTRY_INTO_NEW_CELL_10 = 57, + RETRY_UPON_ENTRY_INTO_NEW_CELL_11 = 58, + RETRY_UPON_ENTRY_INTO_NEW_CELL_12 = 59, + RETRY_UPON_ENTRY_INTO_NEW_CELL_13 = 60, + RETRY_UPON_ENTRY_INTO_NEW_CELL_14 = 61, + RETRY_UPON_ENTRY_INTO_NEW_CELL_15 = 62, + RETRY_UPON_ENTRY_INTO_NEW_CELL_16 = 63, + /** 95 - Semantically incorrect message */ + SEMANTICALLY_INCORRECT_MESSAGE = 95, + /** 96 - Invalid mandatory information */ + INVALID_MANDATORY_INFORMATION = 96, + /** 97 - Message type non-existent or not implemented */ + MESSAGE_TYPE_NON_EXISTENT_OR_NOT_IMPLEMENTED = 97, + /** 98 - Message type not compatible with protocol state */ + MESSAGE_TYPE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE = 98, + /** 99 - Information element non-existent or not implemented */ + INFORMATION_ELEMENT_NON_EXISTENT_OR_NOT_IMPLEMENTED = 99, + /** 100 - Conditional IE error */ + CONDITIONAL_IE_ERROR = 100, + /** 101 - Message not compatible with protocol state */ + MESSAGE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE = 101, + /** 111 - Protocol error, unspecified */ + PROTOCOL_ERROR_UNSPECIFIED = 111, +}; + +enum PrlIndicator : int32_t { + NOT_REGISTERED = -1, + NOT_IN_PRL = 0, + IN_PRL = 1, +}; + +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; + + struct Cdma2000RegistrationInfo { + /** + * concurrent services support indicator. if registered on a CDMA system. + * false - Concurrent services not supported, + * true - Concurrent services supported + */ + bool cssSupported; + + /** + * TSB-58 Roaming Indicator if registered on a CDMA or EVDO system or -1 if not. + * Valid values are 0-255. + */ + int32_t roamingIndicator; + + /** + * Indicates whether the current system is in the PRL if registered on a CDMA or EVDO + * system or -1 if not. 0=not in the PRL, 1=in the PRL. + */ + PrlIndicator systemIsInPrl; + + /** + * Default Roaming Indicator from the PRL if registered on a CDMA or EVDO system or -1 + * if not. + * Valid values are 0-255. + */ + int32_t defaultRoamingIndicator; + } cdmaInfo; + + struct EutranRegistrationInfo { + /** + * Network capabilities for voice over PS services. This info is valid only on LTE + * network and must be present when device is camped on LTE. vopsInfo must be empty when + * device is camped only on 2G/3G. + */ + LteVopsInfo lteVopsInfo; // LTE network capability + + /** + * The parameters of NR 5G Non-Standalone. This value is only valid on E-UTRAN, + * otherwise must be empty. + */ + NrIndicators nrIndicators; + } eutranInfo; + } accessTechnologySpecificInfo; +}; + /** * Additional personalization categories in addition to those specified in 3GPP TS 22.022 and 3GPP2 C.S0068-0. */ diff --git a/radio/1.5/vts/functional/radio_hidl_hal_utils_v1_5.h b/radio/1.5/vts/functional/radio_hidl_hal_utils_v1_5.h index 6ca6e56c85..db7cf416af 100644 --- a/radio/1.5/vts/functional/radio_hidl_hal_utils_v1_5.h +++ b/radio/1.5/vts/functional/radio_hidl_hal_utils_v1_5.h @@ -563,6 +563,14 @@ class RadioResponse_v1_5 : public ::android::hardware::radio::V1_5::IRadioRespon const RadioResponseInfo& info, const ::android::hardware::hidl_vec<::android::hardware::radio::V1_5::BarringInfo>& barringInfos); + + Return getVoiceRegistrationStateResponse_1_5( + const RadioResponseInfo& info, + const ::android::hardware::radio::V1_5::RegStateResult& regResponse); + + Return getDataRegistrationStateResponse_1_5( + const RadioResponseInfo& info, + const ::android::hardware::radio::V1_5::RegStateResult& regResponse); }; /* Callback class for radio indication */ diff --git a/radio/1.5/vts/functional/radio_response.cpp b/radio/1.5/vts/functional/radio_response.cpp index c56087c3c1..859db3f875 100644 --- a/radio/1.5/vts/functional/radio_response.cpp +++ b/radio/1.5/vts/functional/radio_response.cpp @@ -981,3 +981,19 @@ Return RadioResponse_v1_5::getBarringInfoResponse( parent_v1_5.notify(info.serial); return Void(); } + +Return RadioResponse_v1_5::getVoiceRegistrationStateResponse_1_5( + const RadioResponseInfo& info, + const ::android::hardware::radio::V1_5::RegStateResult& /*regResponse*/) { + rspInfo = info; + parent_v1_5.notify(info.serial); + return Void(); +} + +Return RadioResponse_v1_5::getDataRegistrationStateResponse_1_5( + const RadioResponseInfo& info, + const ::android::hardware::radio::V1_5::RegStateResult& /*regResponse*/) { + rspInfo = info; + parent_v1_5.notify(info.serial); + return Void(); +}