From 2f8f6c328b1c2cebf8c146a3d3d6b33a1297ea97 Mon Sep 17 00:00:00 2001 From: Sarah Chin Date: Tue, 11 Feb 2020 12:05:46 -0800 Subject: [PATCH] HAL changes for 1.5 setLinkCapacityReportingCriteria Add to IRadio, IRadioResponse, and VTS Test: make cf_x86_phone-userdebug && mm Bug: 149112073 Change-Id: I330d5be6bf531c93439f8f1d55718f71ec46c1c3 Merged-In: I330d5be6bf531c93439f8f1d55718f71ec46c1c3 --- current.txt | 6 +- radio/1.5/IRadio.hal | 29 ++++++ radio/1.5/IRadioResponse.hal | 11 +++ radio/1.5/types.hal | 3 +- .../1.5/vts/functional/radio_hidl_hal_api.cpp | 93 +++++++++++++++++++ .../functional/radio_hidl_hal_utils_v1_5.h | 2 + radio/1.5/vts/functional/radio_response.cpp | 7 ++ 7 files changed, 147 insertions(+), 4 deletions(-) diff --git a/current.txt b/current.txt index beacf41f04..a045deb891 100644 --- a/current.txt +++ b/current.txt @@ -637,10 +637,10 @@ a64467bae843569f0d465c5be7f0c7a5b987985b55a3ef4794dd5afc68538650 android.hardwar 619fc9839ec6e369cfa9b28e3e9412e6885720ff8f9b5750c1b6ffb905120391 android.hardware.wifi.supplicant@1.3::ISupplicantStaIfaceCallback c9273429fcf98d797d3bb07fdba6f1be95bf960f9255cde169fd1ca4db85f856 android.hardware.wifi.supplicant@1.3::ISupplicantStaNetwork 9b0a3ab6f4f74b971ed094426d8a443e29b512ff03e1ab50c07156396cdb2483 android.hardware.wifi.supplicant@1.3::types -88fb40d98b89cfaafad33b06c95e5dcd51c4470962e8fbe80ed22884407f98a1 android.hardware.radio@1.5::types -8062d0a1a03594dd8b448adcf6f08856b5720f7e33f9b785a21d3ef74a4f211d android.hardware.radio@1.5::IRadio +85af67af743b8cebb65023f196ee3df0e57b88c84d048f40439e98f845bab3d6 android.hardware.radio@1.5::types +7fefa2cc5b3b3be10b5cff5c5dc195385f491d4bf23ca65f9c6b3c30c8753a33 android.hardware.radio@1.5::IRadio e96ae1c3a9c0689002ec2318e9c587f4f607c16a75a3cd38788b77eb91072021 android.hardware.radio@1.5::IRadioIndication -7f2439b48bda2961c6d629d0415eee66d519142cf9537f05e9d285153c70ca85 android.hardware.radio@1.5::IRadioResponse +6759e59cef81b5e15137bf99a4cd14236ce0c2974dd307ada265b67e819b9060 android.hardware.radio@1.5::IRadioResponse dcc8872337f0135e81970e1d8d5fd7139160dc80e9be76f0ae05290fa7e472b8 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 2ec92e54d1..0b50436ff9 100644 --- a/radio/1.5/IRadio.hal +++ b/radio/1.5/IRadio.hal @@ -68,6 +68,35 @@ interface IRadio extends @1.4::IRadio { oneway setSignalStrengthReportingCriteria_1_5(int32_t serial, SignalThresholdInfo signalThresholdInfo, AccessNetwork accessNetwork); + /** + * Sets the link capacity reporting criteria. + * + * The resulting reporting criteria are the AND of all the supplied criteria. + * + * Note: Reporting criteria must be individually set for each RAN. If unset, reporting criteria + * for that RAN are implementation-defined. + * + * Response callback is IRadioResponse.setLinkCapacityReportingCriteriaResponse_1_5(). + * + * @param serial Serial number of request. + * @param hysteresisMs A hysteresis time in milliseconds to prevent flapping. A value of 0 + * disables hysteresis. + * @param hysteresisDlKbps An interval in kbps defining the required magnitude change between DL + * reports. hysteresisDlKbps must be smaller than the smallest threshold delta. A value of 0 + * disables hysteresis. + * @param hysteresisUlKbps An interval in kbps defining the required magnitude change between UL + * reports. hysteresisUlKbps must be smaller than the smallest threshold delta. A value of 0 + * disables hysteresis. + * @param thresholdsDownlinkKbps A vector of trigger thresholds in kbps for downlink reports. A + * vector size of 0 disables the use of DL thresholds for reporting. + * @param thresholdsUplinkKbps A vector of trigger thresholds in kbps for uplink reports. A + * vector size of 0 disables the use of UL thresholds for reporting. + * @param accessNetwork The type of network for which to apply these thresholds. + */ + oneway setLinkCapacityReportingCriteria_1_5(int32_t serial, int32_t hysteresisMs, + int32_t hysteresisDlKbps, int32_t hysteresisUlKbps, vec thresholdsDownlinkKbps, + vec thresholdsUplinkKbps, AccessNetwork accessNetwork); + /** * Enable or disable UiccApplications on the SIM. If disabled: * - Modem will not register on any network. diff --git a/radio/1.5/IRadioResponse.hal b/radio/1.5/IRadioResponse.hal index aa8b526ffa..84a455ff7d 100644 --- a/radio/1.5/IRadioResponse.hal +++ b/radio/1.5/IRadioResponse.hal @@ -39,6 +39,17 @@ interface IRadioResponse extends @1.4::IRadioResponse { */ oneway setSignalStrengthReportingCriteriaResponse_1_5(RadioResponseInfo info); + /** + * @param info Response info struct containing response type, serial no. and error + * + * Valid errors returned: + * RadioError:NONE + * RadioError:INVALID_ARGUMENTS + * RadioError:RADIO_NOT_AVAILABLE + * RadioError:INTERNAL_ERR + */ + oneway setLinkCapacityReportingCriteriaResponse_1_5(RadioResponseInfo info); + /** * @param info Response info struct containing response type, serial no. and error * diff --git a/radio/1.5/types.hal b/radio/1.5/types.hal index a0868337dd..784f7769be 100644 --- a/radio/1.5/types.hal +++ b/radio/1.5/types.hal @@ -156,7 +156,8 @@ struct SignalThresholdInfo { enum AccessNetwork : @1.4::AccessNetwork { /** - * Next-Generation Radio Access Network (NGRAN) + * Next-Generation Radio Access Network (NGRAN). + * Note NGRAN is only for standalone mode. Non-standalone mode uses AccessNetwork EUTRAN. */ NGRAN = 6, }; diff --git a/radio/1.5/vts/functional/radio_hidl_hal_api.cpp b/radio/1.5/vts/functional/radio_hidl_hal_api.cpp index 40ae75a1dd..7294b9e4bf 100644 --- a/radio/1.5/vts/functional/radio_hidl_hal_api.cpp +++ b/radio/1.5/vts/functional/radio_hidl_hal_api.cpp @@ -309,6 +309,99 @@ TEST_F(RadioHidlTest_v1_5, setSignalStrengthReportingCriteria_1_5_NGRAN_SSSINR) ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error, {RadioError::NONE})); } +/* + * Test IRadio.setLinkCapacityReportingCriteria_1_5() invalid hysteresisDlKbps + */ +TEST_F(RadioHidlTest_v1_5, setLinkCapacityReportingCriteria_1_5_invalidHysteresisDlKbps) { + serial = GetRandomSerialNumber(); + + Return res = radio_v1_5->setLinkCapacityReportingCriteria_1_5( + serial, 5000, + 5000, // hysteresisDlKbps too big for thresholds delta + 100, {1000, 5000, 10000, 20000}, {500, 1000, 5000, 10000}, + ::android::hardware::radio::V1_5::AccessNetwork::GERAN); + ASSERT_OK(res); + EXPECT_EQ(std::cv_status::no_timeout, wait()); + EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_5->rspInfo.type); + EXPECT_EQ(serial, radioRsp_v1_5->rspInfo.serial); + + ALOGI("setLinkCapacityReportingCriteria_1_5_invalidHysteresisDlKbps, rspInfo.error = %s\n", + toString(radioRsp_v1_5->rspInfo.error).c_str()); + // Allow REQUEST_NOT_SUPPORTED as setLinkCapacityReportingCriteria_1_5() may not be supported + // for GERAN + ASSERT_TRUE( + CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error, + {RadioError::INVALID_ARGUMENTS, RadioError::REQUEST_NOT_SUPPORTED})); +} + +/* + * Test IRadio.setLinkCapacityReportingCriteria_1_5() invalid hysteresisUlKbps + */ +TEST_F(RadioHidlTest_v1_5, setLinkCapacityReportingCriteria_1_5_invalidHysteresisUlKbps) { + serial = GetRandomSerialNumber(); + + Return res = radio_v1_5->setLinkCapacityReportingCriteria_1_5( + serial, 5000, 500, + 1000, // hysteresisUlKbps too big for thresholds delta + {1000, 5000, 10000, 20000}, {500, 1000, 5000, 10000}, + ::android::hardware::radio::V1_5::AccessNetwork::GERAN); + ASSERT_OK(res); + EXPECT_EQ(std::cv_status::no_timeout, wait()); + EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_5->rspInfo.type); + EXPECT_EQ(serial, radioRsp_v1_5->rspInfo.serial); + + ALOGI("setLinkCapacityReportingCriteria_1_5_invalidHysteresisUlKbps, rspInfo.error = %s\n", + toString(radioRsp_v1_5->rspInfo.error).c_str()); + // Allow REQUEST_NOT_SUPPORTED as setLinkCapacityReportingCriteria_1_5() may not be supported + // for GERAN + ASSERT_TRUE( + CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error, + {RadioError::INVALID_ARGUMENTS, RadioError::REQUEST_NOT_SUPPORTED})); +} + +/* + * Test IRadio.setLinkCapacityReportingCriteria_1_5() empty params + */ +TEST_F(RadioHidlTest_v1_5, setLinkCapacityReportingCriteria_1_5_emptyParams) { + serial = GetRandomSerialNumber(); + + Return res = radio_v1_5->setLinkCapacityReportingCriteria_1_5( + serial, 0, 0, 0, {}, {}, ::android::hardware::radio::V1_5::AccessNetwork::GERAN); + ASSERT_OK(res); + EXPECT_EQ(std::cv_status::no_timeout, wait()); + EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_5->rspInfo.type); + EXPECT_EQ(serial, radioRsp_v1_5->rspInfo.serial); + + ALOGI("setLinkCapacityReportingCriteria_1_5_emptyParams, rspInfo.error = %s\n", + toString(radioRsp_v1_5->rspInfo.error).c_str()); + // Allow REQUEST_NOT_SUPPORTED as setLinkCapacityReportingCriteria_1_5() may not be supported + // for GERAN + ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error, + {RadioError::NONE, RadioError::REQUEST_NOT_SUPPORTED})); +} + +/* + * Test IRadio.setLinkCapacityReportingCriteria_1_5() for GERAN + */ +TEST_F(RadioHidlTest_v1_5, setLinkCapacityReportingCriteria_1_5_Geran) { + serial = GetRandomSerialNumber(); + + Return res = radio_v1_5->setLinkCapacityReportingCriteria_1_5( + serial, 5000, 500, 100, {1000, 5000, 10000, 20000}, {500, 1000, 5000, 10000}, + ::android::hardware::radio::V1_5::AccessNetwork::GERAN); + ASSERT_OK(res); + EXPECT_EQ(std::cv_status::no_timeout, wait()); + EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_5->rspInfo.type); + EXPECT_EQ(serial, radioRsp_v1_5->rspInfo.serial); + + ALOGI("setLinkCapacityReportingCriteria_1_5_Geran, rspInfo.error = %s\n", + toString(radioRsp_v1_5->rspInfo.error).c_str()); + // Allow REQUEST_NOT_SUPPORTED as setLinkCapacityReportingCriteria_1_5() may not be supported + // for GERAN + ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error, + {RadioError::NONE, RadioError::REQUEST_NOT_SUPPORTED})); +} + /* * Test IRadio.enableUiccApplications() for the response returned. * For SIM ABSENT case. 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 ce7b1ab8e7..eab5d2e457 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 @@ -531,6 +531,8 @@ class RadioResponse_v1_5 : public ::android::hardware::radio::V1_5::IRadioRespon /* 1.5 Api */ Return setSignalStrengthReportingCriteriaResponse_1_5(const RadioResponseInfo& info); + Return setLinkCapacityReportingCriteriaResponse_1_5(const RadioResponseInfo& info); + Return enableUiccApplicationsResponse(const RadioResponseInfo& info); Return areUiccApplicationsEnabledResponse(const RadioResponseInfo& info, bool enabled); diff --git a/radio/1.5/vts/functional/radio_response.cpp b/radio/1.5/vts/functional/radio_response.cpp index 26401eb800..ce14af583b 100644 --- a/radio/1.5/vts/functional/radio_response.cpp +++ b/radio/1.5/vts/functional/radio_response.cpp @@ -894,6 +894,13 @@ Return RadioResponse_v1_5::setSignalStrengthReportingCriteriaResponse_1_5( return Void(); } +Return RadioResponse_v1_5::setLinkCapacityReportingCriteriaResponse_1_5( + const RadioResponseInfo& info) { + rspInfo = info; + parent_v1_5.notify(info.serial); + return Void(); +} + Return RadioResponse_v1_5::enableUiccApplicationsResponse(const RadioResponseInfo& info) { rspInfo = info; parent_v1_5.notify(info.serial);