From 8f6b67b0a668ad4cacb88d933417e350716bc17f Mon Sep 17 00:00:00 2001 From: Nathan Harold Date: Thu, 16 Jan 2020 17:00:49 -0800 Subject: [PATCH 1/2] 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 --- current.txt | 6 +- radio/1.5/IRadio.hal | 18 ++ radio/1.5/IRadioResponse.hal | 28 +++ radio/1.5/types.hal | 190 ++++++++++++++++++ .../functional/radio_hidl_hal_utils_v1_5.h | 8 + radio/1.5/vts/functional/radio_response.cpp | 16 ++ 6 files changed, 263 insertions(+), 3 deletions(-) diff --git a/current.txt b/current.txt index 58b97558f3..fb6006fdce 100644 --- a/current.txt +++ b/current.txt @@ -666,10 +666,10 @@ def77c7db95d374f11a111bfc4ed60f92451303642a43276c4e291988fcee625 android.hardwar ## # BEGIN Radio HAL Merge Conflict Avoidance Buffer - STOPSHIP if present ## -70cbe7cbeb51834f124a8b5940336dc9ec158a17487ab8b905ae9cf62f66f476 android.hardware.radio@1.5::types -996f98ffe508a2f6f1755c1511b50067f7883f7c445dea9f3e931385f020b7ab android.hardware.radio@1.5::IRadio +b3f250fe4f5f01ea3a2387eb7ae7e975699f6871e09b797d5ebfe18c2a489e98 android.hardware.radio@1.5::types +6268d208631b21d1e85bfad338642ac5ca7ac6c83b411283515a4342b5d673f7 android.hardware.radio@1.5::IRadio 20d52e66fd548f89bcb98cda42749a591ce8f439a2a7148617adac0c967ad937 android.hardware.radio@1.5::IRadioIndication -1512f6e1198e1aa0ebcbdb1694d0ed500a3e7791d6f305327866112331d82b66 android.hardware.radio@1.5::IRadioResponse +1344e7cfaa2cf259b05ea4f65a731552f0254df6604938cf8be94e04fd62a6a9 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 e41989c90c..52e579aee9 100644 --- a/radio/1.5/IRadio.hal +++ b/radio/1.5/IRadio.hal @@ -245,4 +245,22 @@ interface IRadio extends @1.4::IRadio { * Response callback is IRadioResponse.getBarringInfoResponse() */ 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); }; diff --git a/radio/1.5/IRadioResponse.hal b/radio/1.5/IRadioResponse.hal index 2ed789a7ab..3f832091e4 100644 --- a/radio/1.5/IRadioResponse.hal +++ b/radio/1.5/IRadioResponse.hal @@ -20,6 +20,7 @@ import @1.0::RadioResponseInfo; import @1.4::IRadioResponse; import @1.5::BarringInfo; import @1.5::SetupDataCallResult; +import @1.5::RegStateResult; /** * Interface declaring response functions to solicited radio requests. @@ -170,4 +171,31 @@ interface IRadioResponse extends @1.4::IRadioResponse { * RadioError:MODEM_ERR */ 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); }; diff --git a/radio/1.5/types.hal b/radio/1.5/types.hal index efd2e35203..55f2137b2e 100644 --- a/radio/1.5/types.hal +++ b/radio/1.5/types.hal @@ -20,6 +20,7 @@ import @1.0::ApnAuthType; import @1.0::DataProfileId; import @1.0::DataProfileInfoType; import @1.0::RadioAccessFamily; +import @1.0::RegState; import @1.1::EutranBands; import @1.1::GeranBands; import @1.1::RadioAccessNetworks; @@ -39,7 +40,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; @@ -635,3 +639,189 @@ enum IndicationFilter : @1.2::IndicationFilter { /** Control the unsolicited sending of barring info updates via onBarringInfo */ 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; +}; 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 c2a7d8a800..9256c3eafe 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 @@ -558,6 +558,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 644a26298c..d16833c1ca 100644 --- a/radio/1.5/vts/functional/radio_response.cpp +++ b/radio/1.5/vts/functional/radio_response.cpp @@ -969,3 +969,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(); +} From 500733c45992cfa9e4ffb23aea2b6df9f802e4ee Mon Sep 17 00:00:00 2001 From: Nathan Harold Date: Mon, 20 Jan 2020 17:04:16 -0800 Subject: [PATCH 2/2] Add Multi-PLMN and CSG support Non-functional changes: -Clarify that the MCC+MNC in the CellIdentity should be used to report the Primary PLMN only; (this PLMN is globally unique, and can be used to construct a CGI/ECGI whereas other PLMN-IDs cannot). -Add clarification for the reporting of multi-PLMN 5G networks. Functional changes: -Add a list of PLMNs for MOCN Networks. This allows cells that are shared by multiple operators to be properly reported. -Add support for Closed Subscriber Group reporting to allow identification of small-cell deployments. Bug: 135921133 Test: make VtsHalRadioV1_5Target && make aosp_cf_x86_64_phone-userdebug Change-Id: Ibb0682de8ae9c4421e79086773c977a4e76ac4f1 --- current.txt | 6 +- radio/1.5/IRadioIndication.hal | 19 ++ radio/1.5/IRadioResponse.hal | 14 ++ radio/1.5/types.hal | 190 ++++++++++++++++++ .../functional/radio_hidl_hal_utils_v1_5.h | 14 ++ radio/1.5/vts/functional/radio_indication.cpp | 13 ++ radio/1.5/vts/functional/radio_response.cpp | 7 + 7 files changed, 260 insertions(+), 3 deletions(-) diff --git a/current.txt b/current.txt index fb6006fdce..2bacc033bb 100644 --- a/current.txt +++ b/current.txt @@ -666,10 +666,10 @@ def77c7db95d374f11a111bfc4ed60f92451303642a43276c4e291988fcee625 android.hardwar ## # BEGIN Radio HAL Merge Conflict Avoidance Buffer - STOPSHIP if present ## -b3f250fe4f5f01ea3a2387eb7ae7e975699f6871e09b797d5ebfe18c2a489e98 android.hardware.radio@1.5::types +b48e25c1b90da7a011ccfd76d9e551c105783ef2b9fea4921d4fc5978b215e98 android.hardware.radio@1.5::types 6268d208631b21d1e85bfad338642ac5ca7ac6c83b411283515a4342b5d673f7 android.hardware.radio@1.5::IRadio -20d52e66fd548f89bcb98cda42749a591ce8f439a2a7148617adac0c967ad937 android.hardware.radio@1.5::IRadioIndication -1344e7cfaa2cf259b05ea4f65a731552f0254df6604938cf8be94e04fd62a6a9 android.hardware.radio@1.5::IRadioResponse +e96ae1c3a9c0689002ec2318e9c587f4f607c16a75a3cd38788b77eb91072021 android.hardware.radio@1.5::IRadioIndication +64e06cd5251bec38c402f71d05a6d52b89819a20c9099a192a694059ce4336fc 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/IRadioIndication.hal b/radio/1.5/IRadioIndication.hal index cafecbc3af..c40b473765 100644 --- a/radio/1.5/IRadioIndication.hal +++ b/radio/1.5/IRadioIndication.hal @@ -76,4 +76,23 @@ interface IRadioIndication extends @1.4::IRadioIndication { */ oneway barringInfoChanged( RadioIndicationType type, CellIdentity cellIdentity, vec barringInfos); + + /** + * Report all of the current cell information known to the radio. + * + * This indication is updated from IRadioIndication@1.4 to report the @1.5 version of + * CellInfo. + * + * @param type Type of radio indication + * @param records Current cell information + */ + oneway cellInfoList_1_5(RadioIndicationType type, vec records); + + /** + * Incremental network scan results. + * + * This indication is updated from IRadioIndication@1.4 to report the @1.5 version of + * CellInfo. + */ + oneway networkScanResult_1_5(RadioIndicationType type, NetworkScanResult result); }; diff --git a/radio/1.5/IRadioResponse.hal b/radio/1.5/IRadioResponse.hal index 3f832091e4..4bdafbdb2d 100644 --- a/radio/1.5/IRadioResponse.hal +++ b/radio/1.5/IRadioResponse.hal @@ -19,6 +19,7 @@ package android.hardware.radio@1.5; import @1.0::RadioResponseInfo; import @1.4::IRadioResponse; import @1.5::BarringInfo; +import @1.5::CellInfo; import @1.5::SetupDataCallResult; import @1.5::RegStateResult; @@ -198,4 +199,17 @@ interface IRadioResponse extends @1.4::IRadioResponse { */ oneway getDataRegistrationStateResponse_1_5(RadioResponseInfo info, RegStateResult dataRegResponse); + + /** + * This is identitcal to getCellInfoListResponse_1_4 but uses an updated version of CellInfo. + * + * @param info Response info struct containing response type, serial no. and error + * @param cellInfo List of current cell information known to radio + * + * Valid errors returned: + * RadioError:NONE + * RadioError:RADIO_NOT_AVAILABLE + * RadioError:INTERNAL_ERR + */ + oneway getCellInfoListResponse_1_5(RadioResponseInfo info, vec cellInfo); }; diff --git a/radio/1.5/types.hal b/radio/1.5/types.hal index 55f2137b2e..9c039794e2 100644 --- a/radio/1.5/types.hal +++ b/radio/1.5/types.hal @@ -19,21 +19,32 @@ package android.hardware.radio@1.5; import @1.0::ApnAuthType; import @1.0::DataProfileId; import @1.0::DataProfileInfoType; +import @1.0::CdmaSignalStrength; +import @1.0::EvdoSignalStrength; +import @1.0::GsmSignalStrength; +import @1.0::LteSignalStrength; import @1.0::RadioAccessFamily; +import @1.0::RadioError; import @1.0::RegState; +import @1.0::TimeStampType; import @1.1::EutranBands; import @1.1::GeranBands; import @1.1::RadioAccessNetworks; import @1.1::RadioAccessSpecifier; +import @1.1::ScanStatus; import @1.1::ScanType; import @1.1::UtranBands; +import @1.2::CellConnectionStatus; import @1.2::CellIdentityCdma; import @1.2::CellIdentityGsm; import @1.2::CellIdentityWcdma; import @1.2::CellIdentityTdscdma; import @1.2::CellIdentityLte; +import @1.2::CellInfoCdma; import @1.2::IndicationFilter; import @1.2::NetworkScanRequest; +import @1.2::TdscdmaSignalStrength; +import @1.2::WcdmaSignalStrength; import @1.4::AccessNetwork; import @1.4::ApnTypes; import @1.4::CellIdentityNr; @@ -42,6 +53,7 @@ import @1.4::DataConnActiveStatus; import @1.4::DataProfileInfo; import @1.4::LteVopsInfo; import @1.4::NrIndicators; +import @1.4::NrSignalStrength; import @1.4::PdpProtocolType; import @1.4::RadioTechnology; @@ -500,6 +512,166 @@ enum Domain : int32_t { PS = 1 << 1, }; +struct ClosedSubscriberGroupInfo { + /** + * Indicates whether the cell is restricted to only CSG members. A cell not broadcasting the + * CSG Indication but reporting CSG information is considered a Hybrid Cell. + * Refer to the "csg-Indication" field in 3GPP TS 36.331 section 6.2.2 + * SystemInformationBlockType1. + * Also refer to "CSG Indicator" in 3GPP TS 25.331 section 10.2.48.8.1 and TS 25.304. + */ + bool csgIndication; + + /** + * The human-readable name of the closed subscriber group operating this cell. + * Refer to "hnb-Name" in TS 36.331 section 6.2.2 SystemInformationBlockType9. + * Also refer to "HNB Name" in 3GPP TS25.331 section 10.2.48.8.23 and TS 23.003 section 4.8. + */ + string homeNodebName; + + /** + * The identity of the closed subscriber group that the cell belongs to. + * Refer to "CSG-Identity" in TS 36.336 section 6.3.4. + * Also refer to "CSG Identity" in 3GPP TS 25.331 section 10.3.2.8 and TS 23.003 section 4.7. + */ + int32_t csgIdentity; +}; + +safe_union OptionalCsgInfo { + /** + * If no CSG info is provided by the cell, then this structure shall be present. + */ + Monostate noinit; + + /** + * If CSG info is provided by the cell, this structure shall be present. + */ + ClosedSubscriberGroupInfo csgInfo; +}; + +struct CellIdentityGsm { + /** + * The fields "mcc" and "mnc" must contain the PLMN-ID of the primary PLMN of this cell. + */ + @1.2::CellIdentityGsm base; + + /** Additional PLMN-IDs beyond the primary PLMN broadcast for this cell */ + vec additionalPlmns; +}; + +struct CellIdentityWcdma { + /** + * The fields "mcc" and "mnc" must contain the PLMN-ID of the primary PLMN of this cell. + */ + @1.2::CellIdentityWcdma base; + + /** Additional PLMN-IDs beyond the primary PLMN broadcast for this cell */ + vec additionalPlmns; + + /** Information about any closed subscriber group ID for this cell */ + OptionalCsgInfo optionalCsgInfo; +}; + +struct CellIdentityTdscdma { + /** + * The fields "mcc" and "mnc" must contain the PLMN-ID of the primary PLMN of this cell. + */ + @1.2::CellIdentityTdscdma base; + + /** Additional PLMN-IDs beyond the primary PLMN broadcast for this cell */ + vec additionalPlmns; + + /** Information about any closed subscriber group ID for this cell */ + OptionalCsgInfo optionalCsgInfo; +}; + +struct CellIdentityLte { + /** + * The fields "mcc" and "mnc" must contain the PLMN-ID of the primary PLMN of this cell. + */ + @1.2::CellIdentityLte base; + + /** Additional PLMN-IDs beyond the primary PLMN broadcast for this cell */ + vec additionalPlmns; + + /** Information about any closed subscriber group ID for this cell */ + OptionalCsgInfo optionalCsgInfo; +}; + +/** + * The CellIdentity structure should be reported once for each element of the PLMN-IdentityInfoList + * broadcast in SIB1 CellAccessRelatedInfo as per 3GPP TS 38.331 Section 6.3.2. + */ +struct CellIdentityNr { + /** + * The fields "mcc" and "mnc" must contain the PLMN-ID of the primary PLMN of this cell. + */ + @1.4::CellIdentityNr base; + + /** Additional PLMN-IDs beyond the primary PLMN broadcast for this cell */ + vec additionalPlmns; +}; + +struct CellInfoGsm { + CellIdentityGsm cellIdentityGsm; + GsmSignalStrength signalStrengthGsm; +}; + +struct CellInfoWcdma { + CellIdentityWcdma cellIdentityWcdma; + WcdmaSignalStrength signalStrengthWcdma; +}; + +struct CellInfoTdscdma { + CellIdentityTdscdma cellIdentityTdscdma; + TdscdmaSignalStrength signalStrengthTdscdma; +}; + +struct CellInfoLte { + CellIdentityLte cellIdentityLte; + LteSignalStrength signalStrengthLte; +}; + +struct CellInfoNr { + CellIdentityNr cellIdentityNr; + NrSignalStrength signalStrengthNr; +}; + +struct CellInfo { + /** + * True if this cell is registered false if not registered. + */ + bool registered; + /** + * Type of time stamp represented by timeStamp. + */ + TimeStampType timeStampType; + /** + * Time in nanos as returned by ril_nano_time. + */ + uint64_t timeStamp; + /** + * Connection status for the cell. + */ + CellConnectionStatus connectionStatus; + + safe_union CellInfoRatSpecificInfo { + /** + * 3gpp CellInfo types. + */ + CellInfoGsm gsm; + CellInfoWcdma wcdma; + CellInfoTdscdma tdscdma; + CellInfoLte lte; + CellInfoNr nr; + + /** + * 3gpp2 CellInfo types; + */ + CellInfoCdma cdma; + } ratSpecificInfo; +}; + /** A union representing the CellIdentity of a single cell */ safe_union CellIdentity { Monostate noinit; @@ -825,3 +997,21 @@ struct RegStateResult { } eutranInfo; } accessTechnologySpecificInfo; }; + +/** Overwritten from @1.4::NetworkScanResult in order to update the CellInfo to 1.5 version. */ +struct NetworkScanResult { + /** + * The status of the scan. + */ + ScanStatus status; + + /** + * The error code of the incremental result. + */ + RadioError error; + + /** + * List of network information as CellInfo. + */ + vec networkInfos; +}; 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 9256c3eafe..1e806fa231 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 @@ -566,6 +566,11 @@ class RadioResponse_v1_5 : public ::android::hardware::radio::V1_5::IRadioRespon Return getDataRegistrationStateResponse_1_5( const RadioResponseInfo& info, const ::android::hardware::radio::V1_5::RegStateResult& regResponse); + + Return getCellInfoListResponse_1_5( + const RadioResponseInfo& info, + const ::android::hardware::hidl_vec<::android::hardware::radio::V1_5::CellInfo>& + cellInfo); }; /* Callback class for radio indication */ @@ -580,6 +585,15 @@ class RadioIndication_v1_5 : public ::android::hardware::radio::V1_5::IRadioIndi /* 1.5 Api */ Return uiccApplicationsEnablementChanged(RadioIndicationType type, bool enabled); + Return networkScanResult_1_5( + RadioIndicationType type, + const ::android::hardware::radio::V1_5::NetworkScanResult& result); + + Return cellInfoList_1_5( + RadioIndicationType type, + const ::android::hardware::hidl_vec<::android::hardware::radio::V1_5::CellInfo>& + records); + /* 1.4 Api */ Return currentEmergencyNumberList( RadioIndicationType type, diff --git a/radio/1.5/vts/functional/radio_indication.cpp b/radio/1.5/vts/functional/radio_indication.cpp index 1483907396..d448a226db 100644 --- a/radio/1.5/vts/functional/radio_indication.cpp +++ b/radio/1.5/vts/functional/radio_indication.cpp @@ -350,3 +350,16 @@ Return RadioIndication_v1_5::barringInfoChanged( /*barringInfos*/) { return Void(); } + +Return RadioIndication_v1_5::networkScanResult_1_5( + RadioIndicationType /*type*/, + const ::android::hardware::radio::V1_5::NetworkScanResult& /*result*/) { + return Void(); +} + +Return RadioIndication_v1_5::cellInfoList_1_5( + RadioIndicationType /*type*/, + const ::android::hardware::hidl_vec< + ::android::hardware::radio::V1_5::CellInfo>& /*records*/) { + return Void(); +} diff --git a/radio/1.5/vts/functional/radio_response.cpp b/radio/1.5/vts/functional/radio_response.cpp index d16833c1ca..01556f505c 100644 --- a/radio/1.5/vts/functional/radio_response.cpp +++ b/radio/1.5/vts/functional/radio_response.cpp @@ -985,3 +985,10 @@ Return RadioResponse_v1_5::getDataRegistrationStateResponse_1_5( parent_v1_5.notify(info.serial); return Void(); } + +Return RadioResponse_v1_5::getCellInfoListResponse_1_5( + const RadioResponseInfo& /*info*/, + const ::android::hardware::hidl_vec< + ::android::hardware::radio::V1_5::CellInfo>& /*cellInfo*/) { + return Void(); +}