From da0d98305de8ffd803b2c7d07e1239db74dfdbed Mon Sep 17 00:00:00 2001 From: Mingming Cai Date: Thu, 5 Nov 2020 17:56:57 -0800 Subject: [PATCH] Add CQI and CQI Table Index to Hal 1.6 LteSignalStrength, NrSignalStrength, LteSignalStrength, NrSignalStrength, CellInfo, and NetworkScanResult are updated accordingly. Bug: 170771377 Test: make VtsHalRadioV1_6Target, aosp_cf_x86_64_phone-userdebug Change-Id: If966d5e0c6f505c64cf523c032f6e282c2d24424 --- radio/1.6/IRadio.hal | 14 ++ radio/1.6/IRadioIndication.hal | 23 ++- radio/1.6/IRadioResponse.hal | 16 +- radio/1.6/types.hal | 162 ++++++++++++++++++ .../functional/radio_hidl_hal_utils_v1_6.h | 14 ++ radio/1.6/vts/functional/radio_indication.cpp | 13 ++ radio/1.6/vts/functional/radio_response.cpp | 7 + 7 files changed, 247 insertions(+), 2 deletions(-) diff --git a/radio/1.6/IRadio.hal b/radio/1.6/IRadio.hal index 85e8cad4c9..a9114395f8 100644 --- a/radio/1.6/IRadio.hal +++ b/radio/1.6/IRadio.hal @@ -366,6 +366,20 @@ interface IRadio extends @1.5::IRadio { */ oneway getSystemSelectionChannels(int32_t serial); + /** + * Request all of the current cell information known to the radio. The radio + * must return list of all current cells, including the neighboring cells. If for a particular + * cell information isn't known then the appropriate unknown value will be returned. + * This does not cause or change the rate of unsolicited cellInfoList(). + * + * This is identitcal to getCellInfoList in V1.0, but it requests updated version of CellInfo. + * + * @param serial Serial number of request. + * + * Response callback is IRadioResponse.getCellInfoListResponse() + */ + oneway getCellInfoList_1_6(int32_t serial); + /** * Request current voice registration state. * diff --git a/radio/1.6/IRadioIndication.hal b/radio/1.6/IRadioIndication.hal index f195c0e665..bc6e397e87 100644 --- a/radio/1.6/IRadioIndication.hal +++ b/radio/1.6/IRadioIndication.hal @@ -18,8 +18,10 @@ package android.hardware.radio@1.6; import @1.0::RadioIndicationType; import @1.5::IRadioIndication; -import @1.6::SetupDataCallResult; +import @1.6::CellInfo; import @1.6::LinkCapacityEstimate; +import @1.6::NetworkScanResult; +import @1.6::SetupDataCallResult; /** * Interface declaring unsolicited radio indications. @@ -67,4 +69,23 @@ interface IRadioIndication extends @1.5::IRadioIndication { * @param lce LinkCapacityEstimate */ oneway currentLinkCapacityEstimate_1_6(RadioIndicationType type, LinkCapacityEstimate lce); + + /** + * Report all of the current cell information known to the radio. + * + * This indication is updated from IRadioIndication@1.5 to report the @1.6 version of + * CellInfo. + * + * @param type Type of radio indication + * @param records Current cell information + */ + oneway cellInfoList_1_6(RadioIndicationType type, vec records); + + /** + * Incremental network scan results. + * + * This indication is updated from IRadioIndication@1.5 to report the @1.6 version of + * CellInfo. + */ + oneway networkScanResult_1_6(RadioIndicationType type, NetworkScanResult result); }; diff --git a/radio/1.6/IRadioResponse.hal b/radio/1.6/IRadioResponse.hal index 29b8e9d86b..0f08a46366 100644 --- a/radio/1.6/IRadioResponse.hal +++ b/radio/1.6/IRadioResponse.hal @@ -17,9 +17,10 @@ package android.hardware.radio@1.6; import @1.0::SendSmsResult; -import @1.6::RadioResponseInfo; import @1.5::IRadioResponse; +import @1.6::CellInfo; import @1.6::RegStateResult; +import @1.6::RadioResponseInfo; import @1.6::SetupDataCallResult; /** @@ -329,6 +330,19 @@ interface IRadioResponse extends @1.5::IRadioResponse { */ oneway getSystemSelectionChannelsResponse(RadioResponseInfo info); + /** + * This is identical to getCellInfoListResponse_1_5 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_6(RadioResponseInfo info, vec cellInfo); + /** * @param info Response info struct containing response type, serial no. and error * @param voiceRegResponse Current Voice registration response as defined by RegStateResult diff --git a/radio/1.6/types.hal b/radio/1.6/types.hal index cfa2cde754..20dc612e82 100644 --- a/radio/1.6/types.hal +++ b/radio/1.6/types.hal @@ -16,14 +16,29 @@ package android.hardware.radio@1.6; +import @1.0::CdmaSignalStrength; +import @1.0::EvdoSignalStrength; +import @1.0::GsmSignalStrength; +import @1.0::LteSignalStrength; import @1.0::RadioError; import @1.0::RadioResponseType; import @1.0::RegState; +import @1.1::ScanStatus; +import @1.2::CellInfoCdma; +import @1.2::CellConnectionStatus; +import @1.2::TdscdmaSignalStrength; +import @1.2::WcdmaSignalStrength; import @1.4::DataCallFailCause; import @1.4::DataConnActiveStatus; +import @1.4::NrSignalStrength; import @1.4::PdpProtocolType; import @1.4::RadioTechnology; import @1.5::CellIdentity; +import @1.5::CellIdentityLte; +import @1.5::CellIdentityNr; +import @1.5::CellInfoGsm; +import @1.5::CellInfoWcdma; +import @1.5::CellInfoTdscdma; import @1.5::LinkAddress; import @1.5::RegStateResult.AccessTechnologySpecificInfo.Cdma2000RegistrationInfo; import @1.5::RegStateResult.AccessTechnologySpecificInfo.EutranRegistrationInfo; @@ -504,6 +519,153 @@ struct NrVopsInfo { EmfIndicator emfSupported; }; +struct LteSignalStrength { + @1.0::LteSignalStrength base; + + /** + * CSI channel quality indicator (CQI) table index. There are multiple CQI tables. + * The definition of CQI in each table is different. + * + * Reference: 3GPP TS 136.213 section 7.2.3. + * + * Range [1, 6], INT_MAX means invalid/unreported. + */ + uint32_t cqiTableIndex; +}; + +struct NrSignalStrength { + @1.4::NrSignalStrength base; + + /** + * CSI channel quality indicator (CQI) table index. There are multiple CQI tables. + * The definition of CQI in each table is different. + * + * Reference: 3GPP TS 138.214 section 5.2.2.1. + * + * Range [1, 3], INT_MAX means invalid/unreported. + */ + uint32_t csiCqiTableIndex; + + /** + * CSI channel quality indicator (CQI) for all subbands. + * + * If the CQI report is for the entire wideband, a single CQI index is provided. + * If the CQI report is for all subbands, one CQI index is provided for each subband, + * in ascending order of subband index. + * If CQI is not available, the CQI report is empty. + * + * Reference: 3GPP TS 138.214 section 5.2.2.1. + * + * Range [0, 15], INT_MAX means invalid/unreported. + */ + vec csiCqiReport; +}; + +/** + * Overwritten from @1.4::SignalStrength in order to update LteSignalStrength and NrSignalStrength. + */ +struct SignalStrength { + /** + * If GSM measurements are provided, this structure must contain valid measurements; otherwise + * all fields should be set to INT_MAX to mark them as invalid. + */ + GsmSignalStrength gsm; + + /** + * If CDMA measurements are provided, this structure must contain valid measurements; otherwise + * all fields should be set to INT_MAX to mark them as invalid. + */ + CdmaSignalStrength cdma; + + /** + * If EvDO measurements are provided, this structure must contain valid measurements; otherwise + * all fields should be set to INT_MAX to mark them as invalid. + */ + EvdoSignalStrength evdo; + + /** + * If LTE measurements are provided, this structure must contain valid measurements; otherwise + * all fields should be set to INT_MAX to mark them as invalid. + */ + LteSignalStrength lte; + + /** + * If TD-SCDMA measurements are provided, this structure must contain valid measurements; + * otherwise all fields should be set to INT_MAX to mark them as invalid. + */ + TdscdmaSignalStrength tdscdma; + + /** + * If WCDMA measurements are provided, this structure must contain valid measurements; otherwise + * all fields should be set to INT_MAX to mark them as invalid. + */ + WcdmaSignalStrength wcdma; + + /** + * If NR 5G measurements are provided, this structure must contain valid measurements; otherwise + * all fields should be set to INT_MAX to mark them as invalid. + */ + NrSignalStrength nr; +}; + +/** Overwritten from @1.5::CellInfoLte in order to update LteSignalStrength. */ +struct CellInfoLte { + CellIdentityLte cellIdentityLte; + LteSignalStrength signalStrengthLte; +}; + +/** Overwritten from @1.5::CellInfoNr in order to update NrSignalStrength. */ +struct CellInfoNr { + CellIdentityNr cellIdentityNr; + NrSignalStrength signalStrengthNr; +}; + +/** Overwritten from @1.5::CellInfo in order to update LteSignalStrength and NrSignalStrength. */ +struct CellInfo { + /** + * True if this cell is registered false if not registered. + */ + bool registered; + /** + * 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; +}; + +/** Overwritten from @1.5::NetworkScanResult in order to update the CellInfo to 1.6 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; +}; + /** * Overwritten from @1.5::RegStateResult to 1.6 to support NrRegistrationInfo * version. 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 2a442e7a3e..964259d26d 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 @@ -799,6 +799,11 @@ class RadioResponse_v1_6 : public ::android::hardware::radio::V1_6::IRadioRespon Return getSystemSelectionChannelsResponse( const ::android::hardware::radio::V1_6::RadioResponseInfo& info); + Return getCellInfoListResponse_1_6( + const ::android::hardware::radio::V1_6::RadioResponseInfo& info, + const ::android::hardware::hidl_vec<::android::hardware::radio::V1_6::CellInfo>& + cellInfo); + Return getVoiceRegistrationStateResponse_1_6( const ::android::hardware::radio::V1_6::RadioResponseInfo& info, const ::android::hardware::radio::V1_6::RegStateResult& regResponse); @@ -825,6 +830,15 @@ class RadioIndication_v1_6 : public ::android::hardware::radio::V1_6::IRadioIndi Return unthrottleApn(RadioIndicationType type, const ::android::hardware::hidl_string& apn); + Return networkScanResult_1_6( + RadioIndicationType type, + const ::android::hardware::radio::V1_6::NetworkScanResult& result); + + Return cellInfoList_1_6( + RadioIndicationType type, + const ::android::hardware::hidl_vec<::android::hardware::radio::V1_6::CellInfo>& + records); + /* 1.5 Api */ Return uiccApplicationsEnablementChanged(RadioIndicationType type, bool enabled); diff --git a/radio/1.6/vts/functional/radio_indication.cpp b/radio/1.6/vts/functional/radio_indication.cpp index afde291a47..4dffe639df 100644 --- a/radio/1.6/vts/functional/radio_indication.cpp +++ b/radio/1.6/vts/functional/radio_indication.cpp @@ -386,3 +386,16 @@ Return RadioIndication_v1_6::modemReset(RadioIndicationType /*type*/, const ::android::hardware::hidl_string& /*reason*/) { return Void(); } + +Return RadioIndication_v1_6::networkScanResult_1_6( + RadioIndicationType /*type*/, + const ::android::hardware::radio::V1_6::NetworkScanResult& /*result*/) { + return Void(); +} + +Return RadioIndication_v1_6::cellInfoList_1_6( + RadioIndicationType /*type*/, + const ::android::hardware::hidl_vec< + ::android::hardware::radio::V1_6::CellInfo>& /*records*/) { + return Void(); +} diff --git a/radio/1.6/vts/functional/radio_response.cpp b/radio/1.6/vts/functional/radio_response.cpp index 52d3486769..cd3b2cfe22 100644 --- a/radio/1.6/vts/functional/radio_response.cpp +++ b/radio/1.6/vts/functional/radio_response.cpp @@ -1164,6 +1164,13 @@ Return RadioResponse_v1_6::setDataThrottlingResponse( return Void(); } +Return RadioResponse_v1_6::getCellInfoListResponse_1_6( + const ::android::hardware::radio::V1_6::RadioResponseInfo& /*info*/, + const ::android::hardware::hidl_vec< + ::android::hardware::radio::V1_6::CellInfo>& /*cellInfo*/) { + return Void(); +} + Return RadioResponse_v1_6::getSystemSelectionChannelsResponse( const ::android::hardware::radio::V1_6::RadioResponseInfo& info) { rspInfo = info;