Loading current.txt +3 −4 Original line number Original line Diff line number Diff line Loading @@ -591,8 +591,7 @@ ce8dbe76eb9ee94b46ef98f725be992e760a5751073d4f4912484026541371f3 android.hardwar db47f4ceceb1f06c656f39caa70c557b0f8471ef59fd58611bea667ffca20101 android.hardware.health@2.1::types db47f4ceceb1f06c656f39caa70c557b0f8471ef59fd58611bea667ffca20101 android.hardware.health@2.1::types 34515afa2bb792d3c6d8495a5f5d907d179c8507ca5e55c10050d02ae1d516ef android.hardware.neuralnetworks@1.3::IDevice 34515afa2bb792d3c6d8495a5f5d907d179c8507ca5e55c10050d02ae1d516ef android.hardware.neuralnetworks@1.3::IDevice b74fe72cfe438f50e772e6a307657ff449d5bde83c15dd1f140ff2edbe73499c android.hardware.neuralnetworks@1.3::types b74fe72cfe438f50e772e6a307657ff449d5bde83c15dd1f140ff2edbe73499c android.hardware.neuralnetworks@1.3::types 41c602462ccd1b19cfd645994be4de4c07fc197ff58a54e84476b31908e61e21 android.hardware.radio@1.5::types d3636ff9d5fef59f59f678887209156b2608d29f676fb1e600fe33b7e57a8a61 android.hardware.radio@1.5::types a8691c71747c3f14f7a043598e856425077f755e55990507a9132ad62f8ab3f7 android.hardware.radio@1.5::IRadio c8e81d912827a5d49b2ddcdc4eb4556c5d231a899a1dca879309e04210daa4a0 android.hardware.radio@1.5::IRadio a62a93faf173b14a6175b683ebf61ffa568dc61f81e369d2dce7b1265e86cf2f android.hardware.radio@1.5::IRadioIndication a62a93faf173b14a6175b683ebf61ffa568dc61f81e369d2dce7b1265e86cf2f android.hardware.radio@1.5::IRadioIndication 15daf260aaf6781b911450bc94e1a164901f9c0fe0bda68f8434f0a903f66e05 android.hardware.radio@1.5::IRadioResponse 260ce05806d753d728f844d405e832179ed7d9b65986ec18fef3d21cf7285587 android.hardware.radio@1.5::IRadioResponse radio/1.5/IRadio.hal +28 −0 Original line number Original line Diff line number Diff line Loading @@ -17,6 +17,8 @@ package android.hardware.radio@1.5; package android.hardware.radio@1.5; import @1.4::IRadio; import @1.4::IRadio; import @1.5::AccessNetwork; import @1.5::SignalThresholdInfo; /** /** * This interface is used by telephony and telecom to talk to cellular radio. * This interface is used by telephony and telecom to talk to cellular radio. Loading @@ -27,4 +29,30 @@ import @1.4::IRadio; * setResponseFunctions must work with @1.5::IRadioResponse and @1.5::IRadioIndication. * setResponseFunctions must work with @1.5::IRadioResponse and @1.5::IRadioIndication. */ */ interface IRadio extends @1.4::IRadio { interface IRadio extends @1.4::IRadio { /** * Sets the signal strength reporting criteria. * * The resulting reporting rules are the AND of all the supplied criteria. For each RAN * The hysteresisDb and thresholds apply to only the following measured quantities: * -GERAN - RSSI * -CDMA2000 - RSSI * -UTRAN - RSCP * -EUTRAN - RSRP/RSRQ/RSSNR * -NGRAN - SSRSRP/SSRSRQ/SSSINR * * Note: Reporting criteria must be individually set for each RAN. For any unset reporting * criteria, the value is implementation-defined. * * Response callback is * IRadioResponse.setSignalStrengthReportingCriteriaResponse_1_5() * * @param serial Serial number of request. * @param signalThresholdInfo Signal threshold info including the threshold values, * hysteresisDb, and hysteresisMs. See @1.5::SignalThresholdInfo * for details. * @param accessNetwork The type of network for which to apply these thresholds. */ oneway setSignalStrengthReportingCriteria_1_5(int32_t serial, SignalThresholdInfo signalThresholdInfo, AccessNetwork accessNetwork); }; }; radio/1.5/IRadioResponse.hal +9 −0 Original line number Original line Diff line number Diff line Loading @@ -23,4 +23,13 @@ import @1.4::IRadioResponse; * Interface declaring response functions to solicited radio requests. * Interface declaring response functions to solicited radio requests. */ */ interface IRadioResponse extends @1.4::IRadioResponse { interface IRadioResponse extends @1.4::IRadioResponse { /** * @param info Response info struct containing response type, serial no. and error * * Valid errors returned: * RadioError:NONE * RadioError:INVALID_ARGUMENTS * RadioError:RADIO_NOT_AVAILABLE */ oneway setSignalStrengthReportingCriteriaResponse_1_5(RadioResponseInfo info); }; }; radio/1.5/types.hal +97 −0 Original line number Original line Diff line number Diff line Loading @@ -15,3 +15,100 @@ */ */ package android.hardware.radio@1.5; package android.hardware.radio@1.5; import @1.4::AccessNetwork; /** * Defining signal strength type. */ enum SignalMeasurementType : int32_t { /** * Received Signal Strength Indication. * Range: -113 dBm and -51 dBm * Used RAN: GERAN, CDMA2000 * Reference: 3GPP TS 27.007 section 8.5. */ RSSI = 1, /** * Received Signal Code Power. * Range: -120 dBm to -25 dBm; * Used RAN: UTRAN * Reference: 3GPP TS 25.123, section 9.1.1.1 */ RSCP = 2, /** * Reference Signal Received Power. * Range: -140 dBm to -44 dBm; * Used RAN: EUTRAN * Reference: 3GPP TS 36.133 9.1.4 */ RSRP = 3, /** * Reference Signal Received Quality * Range: -20 dB to -3 dB; * Used RAN: EUTRAN * Reference: 3GPP TS 36.133 9.1.7 */ RSRQ = 4, /** * Reference Signal Signal to Noise Ratio * Range: -20 dB to -30 dB; * Used RAN: EUTRAN * Reference: 3GPP TS 36.101 8.1.1 */ RSSNR = 5, /** * 5G SS reference signal received power. * Range: -140 dBm to -44 dBm. * Used RAN: NGRAN * Reference: 3GPP TS 38.215. */ SSRSRP = 6, /** * 5G SS reference signal received quality. * Range: -20 dB to -3 dB. * Used RAN: NGRAN * Reference: 3GPP TS 38.215. */ SSRSRQ = 7, /** * 5G SS signal-to-noise and interference ratio. * Range: -23 dB to 40 dB * Used RAN: NGRAN * Reference: 3GPP TS 38.215 section 5.1.*, 3GPP TS 38.133 section 10.1.16.1. */ SSSINR = 8, }; /** * Contains the threshold values of each signal measurement type. */ struct SignalThresholdInfo { /** Signal Measurement Type */ SignalMeasurementType signalMeasurement; /** A hysteresis time in milliseconds to prevent flapping. A value of 0 disables hysteresis */ int32_t hysteresisMs; /** * An interval in dB defining the required magnitude change between reports. * hysteresisDb must be smaller than the smallest threshold delta. * An interval value of 0 disables hysteresis. */ int32_t hysteresisDb; /** * List of threshold values. * Range and unit must reference specific @1.5::SignalMeasurementType. * The threshold values for which to apply criteria. * A vector size of 0 disables the use of thresholds for reporting. */ vec<int32_t> thresholds; }; enum AccessNetwork : @1.4::AccessNetwork { /** * Next-Generation Radio Access Network (NGRAN) */ NGRAN = 6, }; No newline at end of file radio/1.5/vts/functional/radio_hidl_hal_api.cpp +263 −0 Original line number Original line Diff line number Diff line Loading @@ -17,3 +17,266 @@ #include <radio_hidl_hal_utils_v1_5.h> #include <radio_hidl_hal_utils_v1_5.h> #define ASSERT_OK(ret) ASSERT_TRUE(ret.isOk()) #define ASSERT_OK(ret) ASSERT_TRUE(ret.isOk()) /* * Test IRadio.setSignalStrengthReportingCriteria_1_5() with invalid hysteresisDb */ TEST_F(RadioHidlTest_v1_5, setSignalStrengthReportingCriteria_1_5_invalidHysteresisDb) { serial = GetRandomSerialNumber(); ::android::hardware::radio::V1_5::SignalThresholdInfo signalThresholdInfo; signalThresholdInfo.signalMeasurement = SignalMeasurementType::RSSI; signalThresholdInfo.hysteresisMs = 5000; signalThresholdInfo.hysteresisDb = 10; // hysteresisDb too large given threshold list deltas signalThresholdInfo.thresholds = {-109, -103, -97, -89}; Return<void> res = radio_v1_5->setSignalStrengthReportingCriteria_1_5( serial, signalThresholdInfo, ::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("setSignalStrengthReportingCriteria_1_5_invalidHysteresisDb, rspInfo.error = %s\n", toString(radioRsp_v1_5->rspInfo.error).c_str()); ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error, {RadioError::INVALID_ARGUMENTS})); } /* * Test IRadio.setSignalStrengthReportingCriteria_1_5() with empty thresholds */ TEST_F(RadioHidlTest_v1_5, setSignalStrengthReportingCriteria_1_5_EmptyThresholds) { serial = GetRandomSerialNumber(); ::android::hardware::radio::V1_5::SignalThresholdInfo signalThresholdInfo; signalThresholdInfo.signalMeasurement = SignalMeasurementType::RSSI; signalThresholdInfo.hysteresisMs = 0; signalThresholdInfo.hysteresisDb = 0; Return<void> res = radio_v1_5->setSignalStrengthReportingCriteria_1_5( serial, signalThresholdInfo, ::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("setSignalStrengthReportingCriteria_1_5_EmptyParams, rspInfo.error = %s\n", toString(radioRsp_v1_5->rspInfo.error).c_str()); ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error, {RadioError::NONE})); } /* * Test IRadio.setSignalStrengthReportingCriteria_1_5() for GERAN */ TEST_F(RadioHidlTest_v1_5, setSignalStrengthReportingCriteria_1_5_Geran) { serial = GetRandomSerialNumber(); ::android::hardware::radio::V1_5::SignalThresholdInfo signalThresholdInfo; signalThresholdInfo.signalMeasurement = SignalMeasurementType::RSSI; signalThresholdInfo.hysteresisMs = 5000; signalThresholdInfo.hysteresisDb = 2; signalThresholdInfo.thresholds = {-109, -103, -97, -89}; Return<void> res = radio_v1_5->setSignalStrengthReportingCriteria_1_5( serial, signalThresholdInfo, ::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("setSignalStrengthReportingCriteria_1_5_Geran, rspInfo.error = %s\n", toString(radioRsp_v1_5->rspInfo.error).c_str()); ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error, {RadioError::NONE})); } /* * Test IRadio.setSignalStrengthReportingCriteria_1_5() for UTRAN */ TEST_F(RadioHidlTest_v1_5, setSignalStrengthReportingCriteria_1_5_Utran) { serial = GetRandomSerialNumber(); ::android::hardware::radio::V1_5::SignalThresholdInfo signalThresholdInfo; signalThresholdInfo.signalMeasurement = SignalMeasurementType::RSCP; signalThresholdInfo.hysteresisMs = 5000; signalThresholdInfo.hysteresisDb = 2; signalThresholdInfo.thresholds = {-110, -97, -73, -49, -25}; Return<void> res = radio_v1_5->setSignalStrengthReportingCriteria_1_5( serial, signalThresholdInfo, ::android::hardware::radio::V1_5::AccessNetwork::UTRAN); 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("setSignalStrengthReportingCriteria_1_5_Utran, rspInfo.error = %s\n", toString(radioRsp_v1_5->rspInfo.error).c_str()); ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error, {RadioError::NONE})); } /* * Test IRadio.setSignalStrengthReportingCriteria_1_5() for EUTRAN */ TEST_F(RadioHidlTest_v1_5, setSignalStrengthReportingCriteria_1_5_Eutran_RSRP) { serial = GetRandomSerialNumber(); ::android::hardware::radio::V1_5::SignalThresholdInfo signalThresholdInfo; signalThresholdInfo.signalMeasurement = SignalMeasurementType::RSRP; signalThresholdInfo.hysteresisMs = 5000; signalThresholdInfo.hysteresisDb = 2; signalThresholdInfo.thresholds = {-128, -108, -88, -68}; Return<void> res = radio_v1_5->setSignalStrengthReportingCriteria_1_5( serial, signalThresholdInfo, ::android::hardware::radio::V1_5::AccessNetwork::EUTRAN); 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("setSignalStrengthReportingCriteria_1_5_Eutran, rspInfo.error = %s\n", toString(radioRsp_v1_5->rspInfo.error).c_str()); ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error, {RadioError::NONE})); } /* * Test IRadio.setSignalStrengthReportingCriteria_1_5() for EUTRAN */ TEST_F(RadioHidlTest_v1_5, setSignalStrengthReportingCriteria_1_5_Eutran_RSRQ) { serial = GetRandomSerialNumber(); ::android::hardware::radio::V1_5::SignalThresholdInfo signalThresholdInfo; signalThresholdInfo.signalMeasurement = SignalMeasurementType::RSRQ; signalThresholdInfo.hysteresisMs = 5000; signalThresholdInfo.hysteresisDb = 2; signalThresholdInfo.thresholds = {-27, -20, -13, -6}; Return<void> res = radio_v1_5->setSignalStrengthReportingCriteria_1_5( serial, signalThresholdInfo, ::android::hardware::radio::V1_5::AccessNetwork::EUTRAN); 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("setSignalStrengthReportingCriteria_1_5_Eutran, rspInfo.error = %s\n", toString(radioRsp_v1_5->rspInfo.error).c_str()); ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error, {RadioError::NONE})); } /* * Test IRadio.setSignalStrengthReportingCriteria_1_5() for EUTRAN */ TEST_F(RadioHidlTest_v1_5, setSignalStrengthReportingCriteria_1_5_Eutran_RSSNR) { serial = GetRandomSerialNumber(); ::android::hardware::radio::V1_5::SignalThresholdInfo signalThresholdInfo; signalThresholdInfo.signalMeasurement = SignalMeasurementType::RSSNR; signalThresholdInfo.hysteresisMs = 5000; signalThresholdInfo.hysteresisDb = 2; signalThresholdInfo.thresholds = {-10, 0, 10, 20}; Return<void> res = radio_v1_5->setSignalStrengthReportingCriteria_1_5( serial, signalThresholdInfo, ::android::hardware::radio::V1_5::AccessNetwork::EUTRAN); 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("setSignalStrengthReportingCriteria_1_5_Eutran, rspInfo.error = %s\n", toString(radioRsp_v1_5->rspInfo.error).c_str()); ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error, {RadioError::NONE})); } /* * Test IRadio.setSignalStrengthReportingCriteria_1_5() for CDMA2000 */ TEST_F(RadioHidlTest_v1_5, setSignalStrengthReportingCriteria_1_5_Cdma2000) { serial = GetRandomSerialNumber(); ::android::hardware::radio::V1_5::SignalThresholdInfo signalThresholdInfo; signalThresholdInfo.signalMeasurement = SignalMeasurementType::RSSI; signalThresholdInfo.hysteresisMs = 5000; signalThresholdInfo.hysteresisDb = 2; signalThresholdInfo.thresholds = {-105, -90, -75, -65}; Return<void> res = radio_v1_5->setSignalStrengthReportingCriteria_1_5( serial, signalThresholdInfo, ::android::hardware::radio::V1_5::AccessNetwork::CDMA2000); 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("setSignalStrengthReportingCriteria_1_5_Cdma2000, rspInfo.error = %s\n", toString(radioRsp_v1_5->rspInfo.error).c_str()); ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error, {RadioError::NONE})); } /* * Test IRadio.setSignalStrengthReportingCriteria_1_5() for NGRAN_SSRSRP */ TEST_F(RadioHidlTest_v1_5, setSignalStrengthReportingCriteria_1_5_NGRAN_SSRSRP) { serial = GetRandomSerialNumber(); ::android::hardware::radio::V1_5::SignalThresholdInfo signalThresholdInfo; signalThresholdInfo.signalMeasurement = SignalMeasurementType::SSRSRP; signalThresholdInfo.hysteresisMs = 5000; signalThresholdInfo.hysteresisDb = 0; signalThresholdInfo.thresholds = {-105, -90, -75, -65}; Return<void> res = radio_v1_5->setSignalStrengthReportingCriteria_1_5( serial, signalThresholdInfo, ::android::hardware::radio::V1_5::AccessNetwork::NGRAN); 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("setSignalStrengthReportingCriteria_1_5_NGRAN_SSRSRP, rspInfo.error = %s\n", toString(radioRsp_v1_5->rspInfo.error).c_str()); ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error, {RadioError::NONE})); } /* * Test IRadio.setSignalStrengthReportingCriteria_1_5() for NGRAN_SSRSRQ */ TEST_F(RadioHidlTest_v1_5, setSignalStrengthReportingCriteria_1_5_NGRAN_SSRSRQ) { serial = GetRandomSerialNumber(); ::android::hardware::radio::V1_5::SignalThresholdInfo signalThresholdInfo; signalThresholdInfo.signalMeasurement = SignalMeasurementType::SSRSRQ; signalThresholdInfo.hysteresisMs = 5000; signalThresholdInfo.hysteresisDb = 0; signalThresholdInfo.thresholds = {-15, -10, -5, -4}; Return<void> res = radio_v1_5->setSignalStrengthReportingCriteria_1_5( serial, signalThresholdInfo, ::android::hardware::radio::V1_5::AccessNetwork::NGRAN); 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("setSignalStrengthReportingCriteria_1_5_NGRAN_SSRSRQ, rspInfo.error = %s\n", toString(radioRsp_v1_5->rspInfo.error).c_str()); ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error, {RadioError::NONE})); } /* * Test IRadio.setSignalStrengthReportingCriteria_1_5() for NGRAN_SSSINR */ TEST_F(RadioHidlTest_v1_5, setSignalStrengthReportingCriteria_1_5_NGRAN_SSSINR) { serial = GetRandomSerialNumber(); ::android::hardware::radio::V1_5::SignalThresholdInfo signalThresholdInfo; signalThresholdInfo.signalMeasurement = SignalMeasurementType::SSSINR; signalThresholdInfo.hysteresisMs = 5000; signalThresholdInfo.hysteresisDb = 0; signalThresholdInfo.thresholds = {-10, 3, 16, 18}; Return<void> res = radio_v1_5->setSignalStrengthReportingCriteria_1_5( serial, signalThresholdInfo, ::android::hardware::radio::V1_5::AccessNetwork::NGRAN); 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("setSignalStrengthReportingCriteria_1_5_NGRAN_SSSINR, rspInfo.error = %s\n", toString(radioRsp_v1_5->rspInfo.error).c_str()); ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error, {RadioError::NONE})); } No newline at end of file Loading
current.txt +3 −4 Original line number Original line Diff line number Diff line Loading @@ -591,8 +591,7 @@ ce8dbe76eb9ee94b46ef98f725be992e760a5751073d4f4912484026541371f3 android.hardwar db47f4ceceb1f06c656f39caa70c557b0f8471ef59fd58611bea667ffca20101 android.hardware.health@2.1::types db47f4ceceb1f06c656f39caa70c557b0f8471ef59fd58611bea667ffca20101 android.hardware.health@2.1::types 34515afa2bb792d3c6d8495a5f5d907d179c8507ca5e55c10050d02ae1d516ef android.hardware.neuralnetworks@1.3::IDevice 34515afa2bb792d3c6d8495a5f5d907d179c8507ca5e55c10050d02ae1d516ef android.hardware.neuralnetworks@1.3::IDevice b74fe72cfe438f50e772e6a307657ff449d5bde83c15dd1f140ff2edbe73499c android.hardware.neuralnetworks@1.3::types b74fe72cfe438f50e772e6a307657ff449d5bde83c15dd1f140ff2edbe73499c android.hardware.neuralnetworks@1.3::types 41c602462ccd1b19cfd645994be4de4c07fc197ff58a54e84476b31908e61e21 android.hardware.radio@1.5::types d3636ff9d5fef59f59f678887209156b2608d29f676fb1e600fe33b7e57a8a61 android.hardware.radio@1.5::types a8691c71747c3f14f7a043598e856425077f755e55990507a9132ad62f8ab3f7 android.hardware.radio@1.5::IRadio c8e81d912827a5d49b2ddcdc4eb4556c5d231a899a1dca879309e04210daa4a0 android.hardware.radio@1.5::IRadio a62a93faf173b14a6175b683ebf61ffa568dc61f81e369d2dce7b1265e86cf2f android.hardware.radio@1.5::IRadioIndication a62a93faf173b14a6175b683ebf61ffa568dc61f81e369d2dce7b1265e86cf2f android.hardware.radio@1.5::IRadioIndication 15daf260aaf6781b911450bc94e1a164901f9c0fe0bda68f8434f0a903f66e05 android.hardware.radio@1.5::IRadioResponse 260ce05806d753d728f844d405e832179ed7d9b65986ec18fef3d21cf7285587 android.hardware.radio@1.5::IRadioResponse
radio/1.5/IRadio.hal +28 −0 Original line number Original line Diff line number Diff line Loading @@ -17,6 +17,8 @@ package android.hardware.radio@1.5; package android.hardware.radio@1.5; import @1.4::IRadio; import @1.4::IRadio; import @1.5::AccessNetwork; import @1.5::SignalThresholdInfo; /** /** * This interface is used by telephony and telecom to talk to cellular radio. * This interface is used by telephony and telecom to talk to cellular radio. Loading @@ -27,4 +29,30 @@ import @1.4::IRadio; * setResponseFunctions must work with @1.5::IRadioResponse and @1.5::IRadioIndication. * setResponseFunctions must work with @1.5::IRadioResponse and @1.5::IRadioIndication. */ */ interface IRadio extends @1.4::IRadio { interface IRadio extends @1.4::IRadio { /** * Sets the signal strength reporting criteria. * * The resulting reporting rules are the AND of all the supplied criteria. For each RAN * The hysteresisDb and thresholds apply to only the following measured quantities: * -GERAN - RSSI * -CDMA2000 - RSSI * -UTRAN - RSCP * -EUTRAN - RSRP/RSRQ/RSSNR * -NGRAN - SSRSRP/SSRSRQ/SSSINR * * Note: Reporting criteria must be individually set for each RAN. For any unset reporting * criteria, the value is implementation-defined. * * Response callback is * IRadioResponse.setSignalStrengthReportingCriteriaResponse_1_5() * * @param serial Serial number of request. * @param signalThresholdInfo Signal threshold info including the threshold values, * hysteresisDb, and hysteresisMs. See @1.5::SignalThresholdInfo * for details. * @param accessNetwork The type of network for which to apply these thresholds. */ oneway setSignalStrengthReportingCriteria_1_5(int32_t serial, SignalThresholdInfo signalThresholdInfo, AccessNetwork accessNetwork); }; };
radio/1.5/IRadioResponse.hal +9 −0 Original line number Original line Diff line number Diff line Loading @@ -23,4 +23,13 @@ import @1.4::IRadioResponse; * Interface declaring response functions to solicited radio requests. * Interface declaring response functions to solicited radio requests. */ */ interface IRadioResponse extends @1.4::IRadioResponse { interface IRadioResponse extends @1.4::IRadioResponse { /** * @param info Response info struct containing response type, serial no. and error * * Valid errors returned: * RadioError:NONE * RadioError:INVALID_ARGUMENTS * RadioError:RADIO_NOT_AVAILABLE */ oneway setSignalStrengthReportingCriteriaResponse_1_5(RadioResponseInfo info); }; };
radio/1.5/types.hal +97 −0 Original line number Original line Diff line number Diff line Loading @@ -15,3 +15,100 @@ */ */ package android.hardware.radio@1.5; package android.hardware.radio@1.5; import @1.4::AccessNetwork; /** * Defining signal strength type. */ enum SignalMeasurementType : int32_t { /** * Received Signal Strength Indication. * Range: -113 dBm and -51 dBm * Used RAN: GERAN, CDMA2000 * Reference: 3GPP TS 27.007 section 8.5. */ RSSI = 1, /** * Received Signal Code Power. * Range: -120 dBm to -25 dBm; * Used RAN: UTRAN * Reference: 3GPP TS 25.123, section 9.1.1.1 */ RSCP = 2, /** * Reference Signal Received Power. * Range: -140 dBm to -44 dBm; * Used RAN: EUTRAN * Reference: 3GPP TS 36.133 9.1.4 */ RSRP = 3, /** * Reference Signal Received Quality * Range: -20 dB to -3 dB; * Used RAN: EUTRAN * Reference: 3GPP TS 36.133 9.1.7 */ RSRQ = 4, /** * Reference Signal Signal to Noise Ratio * Range: -20 dB to -30 dB; * Used RAN: EUTRAN * Reference: 3GPP TS 36.101 8.1.1 */ RSSNR = 5, /** * 5G SS reference signal received power. * Range: -140 dBm to -44 dBm. * Used RAN: NGRAN * Reference: 3GPP TS 38.215. */ SSRSRP = 6, /** * 5G SS reference signal received quality. * Range: -20 dB to -3 dB. * Used RAN: NGRAN * Reference: 3GPP TS 38.215. */ SSRSRQ = 7, /** * 5G SS signal-to-noise and interference ratio. * Range: -23 dB to 40 dB * Used RAN: NGRAN * Reference: 3GPP TS 38.215 section 5.1.*, 3GPP TS 38.133 section 10.1.16.1. */ SSSINR = 8, }; /** * Contains the threshold values of each signal measurement type. */ struct SignalThresholdInfo { /** Signal Measurement Type */ SignalMeasurementType signalMeasurement; /** A hysteresis time in milliseconds to prevent flapping. A value of 0 disables hysteresis */ int32_t hysteresisMs; /** * An interval in dB defining the required magnitude change between reports. * hysteresisDb must be smaller than the smallest threshold delta. * An interval value of 0 disables hysteresis. */ int32_t hysteresisDb; /** * List of threshold values. * Range and unit must reference specific @1.5::SignalMeasurementType. * The threshold values for which to apply criteria. * A vector size of 0 disables the use of thresholds for reporting. */ vec<int32_t> thresholds; }; enum AccessNetwork : @1.4::AccessNetwork { /** * Next-Generation Radio Access Network (NGRAN) */ NGRAN = 6, }; No newline at end of file
radio/1.5/vts/functional/radio_hidl_hal_api.cpp +263 −0 Original line number Original line Diff line number Diff line Loading @@ -17,3 +17,266 @@ #include <radio_hidl_hal_utils_v1_5.h> #include <radio_hidl_hal_utils_v1_5.h> #define ASSERT_OK(ret) ASSERT_TRUE(ret.isOk()) #define ASSERT_OK(ret) ASSERT_TRUE(ret.isOk()) /* * Test IRadio.setSignalStrengthReportingCriteria_1_5() with invalid hysteresisDb */ TEST_F(RadioHidlTest_v1_5, setSignalStrengthReportingCriteria_1_5_invalidHysteresisDb) { serial = GetRandomSerialNumber(); ::android::hardware::radio::V1_5::SignalThresholdInfo signalThresholdInfo; signalThresholdInfo.signalMeasurement = SignalMeasurementType::RSSI; signalThresholdInfo.hysteresisMs = 5000; signalThresholdInfo.hysteresisDb = 10; // hysteresisDb too large given threshold list deltas signalThresholdInfo.thresholds = {-109, -103, -97, -89}; Return<void> res = radio_v1_5->setSignalStrengthReportingCriteria_1_5( serial, signalThresholdInfo, ::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("setSignalStrengthReportingCriteria_1_5_invalidHysteresisDb, rspInfo.error = %s\n", toString(radioRsp_v1_5->rspInfo.error).c_str()); ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error, {RadioError::INVALID_ARGUMENTS})); } /* * Test IRadio.setSignalStrengthReportingCriteria_1_5() with empty thresholds */ TEST_F(RadioHidlTest_v1_5, setSignalStrengthReportingCriteria_1_5_EmptyThresholds) { serial = GetRandomSerialNumber(); ::android::hardware::radio::V1_5::SignalThresholdInfo signalThresholdInfo; signalThresholdInfo.signalMeasurement = SignalMeasurementType::RSSI; signalThresholdInfo.hysteresisMs = 0; signalThresholdInfo.hysteresisDb = 0; Return<void> res = radio_v1_5->setSignalStrengthReportingCriteria_1_5( serial, signalThresholdInfo, ::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("setSignalStrengthReportingCriteria_1_5_EmptyParams, rspInfo.error = %s\n", toString(radioRsp_v1_5->rspInfo.error).c_str()); ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error, {RadioError::NONE})); } /* * Test IRadio.setSignalStrengthReportingCriteria_1_5() for GERAN */ TEST_F(RadioHidlTest_v1_5, setSignalStrengthReportingCriteria_1_5_Geran) { serial = GetRandomSerialNumber(); ::android::hardware::radio::V1_5::SignalThresholdInfo signalThresholdInfo; signalThresholdInfo.signalMeasurement = SignalMeasurementType::RSSI; signalThresholdInfo.hysteresisMs = 5000; signalThresholdInfo.hysteresisDb = 2; signalThresholdInfo.thresholds = {-109, -103, -97, -89}; Return<void> res = radio_v1_5->setSignalStrengthReportingCriteria_1_5( serial, signalThresholdInfo, ::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("setSignalStrengthReportingCriteria_1_5_Geran, rspInfo.error = %s\n", toString(radioRsp_v1_5->rspInfo.error).c_str()); ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error, {RadioError::NONE})); } /* * Test IRadio.setSignalStrengthReportingCriteria_1_5() for UTRAN */ TEST_F(RadioHidlTest_v1_5, setSignalStrengthReportingCriteria_1_5_Utran) { serial = GetRandomSerialNumber(); ::android::hardware::radio::V1_5::SignalThresholdInfo signalThresholdInfo; signalThresholdInfo.signalMeasurement = SignalMeasurementType::RSCP; signalThresholdInfo.hysteresisMs = 5000; signalThresholdInfo.hysteresisDb = 2; signalThresholdInfo.thresholds = {-110, -97, -73, -49, -25}; Return<void> res = radio_v1_5->setSignalStrengthReportingCriteria_1_5( serial, signalThresholdInfo, ::android::hardware::radio::V1_5::AccessNetwork::UTRAN); 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("setSignalStrengthReportingCriteria_1_5_Utran, rspInfo.error = %s\n", toString(radioRsp_v1_5->rspInfo.error).c_str()); ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error, {RadioError::NONE})); } /* * Test IRadio.setSignalStrengthReportingCriteria_1_5() for EUTRAN */ TEST_F(RadioHidlTest_v1_5, setSignalStrengthReportingCriteria_1_5_Eutran_RSRP) { serial = GetRandomSerialNumber(); ::android::hardware::radio::V1_5::SignalThresholdInfo signalThresholdInfo; signalThresholdInfo.signalMeasurement = SignalMeasurementType::RSRP; signalThresholdInfo.hysteresisMs = 5000; signalThresholdInfo.hysteresisDb = 2; signalThresholdInfo.thresholds = {-128, -108, -88, -68}; Return<void> res = radio_v1_5->setSignalStrengthReportingCriteria_1_5( serial, signalThresholdInfo, ::android::hardware::radio::V1_5::AccessNetwork::EUTRAN); 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("setSignalStrengthReportingCriteria_1_5_Eutran, rspInfo.error = %s\n", toString(radioRsp_v1_5->rspInfo.error).c_str()); ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error, {RadioError::NONE})); } /* * Test IRadio.setSignalStrengthReportingCriteria_1_5() for EUTRAN */ TEST_F(RadioHidlTest_v1_5, setSignalStrengthReportingCriteria_1_5_Eutran_RSRQ) { serial = GetRandomSerialNumber(); ::android::hardware::radio::V1_5::SignalThresholdInfo signalThresholdInfo; signalThresholdInfo.signalMeasurement = SignalMeasurementType::RSRQ; signalThresholdInfo.hysteresisMs = 5000; signalThresholdInfo.hysteresisDb = 2; signalThresholdInfo.thresholds = {-27, -20, -13, -6}; Return<void> res = radio_v1_5->setSignalStrengthReportingCriteria_1_5( serial, signalThresholdInfo, ::android::hardware::radio::V1_5::AccessNetwork::EUTRAN); 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("setSignalStrengthReportingCriteria_1_5_Eutran, rspInfo.error = %s\n", toString(radioRsp_v1_5->rspInfo.error).c_str()); ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error, {RadioError::NONE})); } /* * Test IRadio.setSignalStrengthReportingCriteria_1_5() for EUTRAN */ TEST_F(RadioHidlTest_v1_5, setSignalStrengthReportingCriteria_1_5_Eutran_RSSNR) { serial = GetRandomSerialNumber(); ::android::hardware::radio::V1_5::SignalThresholdInfo signalThresholdInfo; signalThresholdInfo.signalMeasurement = SignalMeasurementType::RSSNR; signalThresholdInfo.hysteresisMs = 5000; signalThresholdInfo.hysteresisDb = 2; signalThresholdInfo.thresholds = {-10, 0, 10, 20}; Return<void> res = radio_v1_5->setSignalStrengthReportingCriteria_1_5( serial, signalThresholdInfo, ::android::hardware::radio::V1_5::AccessNetwork::EUTRAN); 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("setSignalStrengthReportingCriteria_1_5_Eutran, rspInfo.error = %s\n", toString(radioRsp_v1_5->rspInfo.error).c_str()); ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error, {RadioError::NONE})); } /* * Test IRadio.setSignalStrengthReportingCriteria_1_5() for CDMA2000 */ TEST_F(RadioHidlTest_v1_5, setSignalStrengthReportingCriteria_1_5_Cdma2000) { serial = GetRandomSerialNumber(); ::android::hardware::radio::V1_5::SignalThresholdInfo signalThresholdInfo; signalThresholdInfo.signalMeasurement = SignalMeasurementType::RSSI; signalThresholdInfo.hysteresisMs = 5000; signalThresholdInfo.hysteresisDb = 2; signalThresholdInfo.thresholds = {-105, -90, -75, -65}; Return<void> res = radio_v1_5->setSignalStrengthReportingCriteria_1_5( serial, signalThresholdInfo, ::android::hardware::radio::V1_5::AccessNetwork::CDMA2000); 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("setSignalStrengthReportingCriteria_1_5_Cdma2000, rspInfo.error = %s\n", toString(radioRsp_v1_5->rspInfo.error).c_str()); ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error, {RadioError::NONE})); } /* * Test IRadio.setSignalStrengthReportingCriteria_1_5() for NGRAN_SSRSRP */ TEST_F(RadioHidlTest_v1_5, setSignalStrengthReportingCriteria_1_5_NGRAN_SSRSRP) { serial = GetRandomSerialNumber(); ::android::hardware::radio::V1_5::SignalThresholdInfo signalThresholdInfo; signalThresholdInfo.signalMeasurement = SignalMeasurementType::SSRSRP; signalThresholdInfo.hysteresisMs = 5000; signalThresholdInfo.hysteresisDb = 0; signalThresholdInfo.thresholds = {-105, -90, -75, -65}; Return<void> res = radio_v1_5->setSignalStrengthReportingCriteria_1_5( serial, signalThresholdInfo, ::android::hardware::radio::V1_5::AccessNetwork::NGRAN); 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("setSignalStrengthReportingCriteria_1_5_NGRAN_SSRSRP, rspInfo.error = %s\n", toString(radioRsp_v1_5->rspInfo.error).c_str()); ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error, {RadioError::NONE})); } /* * Test IRadio.setSignalStrengthReportingCriteria_1_5() for NGRAN_SSRSRQ */ TEST_F(RadioHidlTest_v1_5, setSignalStrengthReportingCriteria_1_5_NGRAN_SSRSRQ) { serial = GetRandomSerialNumber(); ::android::hardware::radio::V1_5::SignalThresholdInfo signalThresholdInfo; signalThresholdInfo.signalMeasurement = SignalMeasurementType::SSRSRQ; signalThresholdInfo.hysteresisMs = 5000; signalThresholdInfo.hysteresisDb = 0; signalThresholdInfo.thresholds = {-15, -10, -5, -4}; Return<void> res = radio_v1_5->setSignalStrengthReportingCriteria_1_5( serial, signalThresholdInfo, ::android::hardware::radio::V1_5::AccessNetwork::NGRAN); 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("setSignalStrengthReportingCriteria_1_5_NGRAN_SSRSRQ, rspInfo.error = %s\n", toString(radioRsp_v1_5->rspInfo.error).c_str()); ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error, {RadioError::NONE})); } /* * Test IRadio.setSignalStrengthReportingCriteria_1_5() for NGRAN_SSSINR */ TEST_F(RadioHidlTest_v1_5, setSignalStrengthReportingCriteria_1_5_NGRAN_SSSINR) { serial = GetRandomSerialNumber(); ::android::hardware::radio::V1_5::SignalThresholdInfo signalThresholdInfo; signalThresholdInfo.signalMeasurement = SignalMeasurementType::SSSINR; signalThresholdInfo.hysteresisMs = 5000; signalThresholdInfo.hysteresisDb = 0; signalThresholdInfo.thresholds = {-10, 3, 16, 18}; Return<void> res = radio_v1_5->setSignalStrengthReportingCriteria_1_5( serial, signalThresholdInfo, ::android::hardware::radio::V1_5::AccessNetwork::NGRAN); 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("setSignalStrengthReportingCriteria_1_5_NGRAN_SSSINR, rspInfo.error = %s\n", toString(radioRsp_v1_5->rspInfo.error).c_str()); ASSERT_TRUE(CheckAnyOfErrors(radioRsp_v1_5->rspInfo.error, {RadioError::NONE})); } No newline at end of file