From 500733c45992cfa9e4ffb23aea2b6df9f802e4ee Mon Sep 17 00:00:00 2001 From: Nathan Harold Date: Mon, 20 Jan 2020 17:04:16 -0800 Subject: [PATCH] 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(); +}