From e1d1b0b92c4f91ce6bf4259bae93eb7c48e3ae05 Mon Sep 17 00:00:00 2001 From: Sarah Chin Date: Wed, 20 Nov 2019 11:25:02 -0800 Subject: [PATCH] PhoneCapabilities changes for device capabilities Change PhoneCapability structure to contain static capabilities for: * the entire device * each modem/radio * each SIM slot Created SimSlotCapability and SlotType to hold information about device SIM slot capabilities (separate from SimSlotStatus). Created ModemFeatures to express modem capabilities as a bitfield of concurrently supportable modem features. PhoneCapability has fields for UE categories, bands, access networks, and modem switching linger time. It also contains a lists of logical modem UUIDs, SIM slot capabilities, and all possible concurrently supportable modem features. TelephonyManager will have an API that returns * the PhoneCapability for the device * active set of ModemFeatures Apps with CARRIER_PRIVILEGE can use these APIs to access all capabilities of a device (eg. 5G capable, DSDS capable, etc.) and use them to make decisions based on what the device can support. Test: atest FrameworksTelephonyTests Bug: 143238237 Bug: 143238191 Change-Id: I424ef176086d2308a4bf53b2c79407eabafb3178 Merged-In: I424ef176086d2308a4bf53b2c79407eabafb3178 --- current.txt | 6 +- radio/1.5/vts/functional/Android.bp | 1 + .../vts/functional/radio_hidl_hal_test.cpp | 4 +- .../functional/radio_hidl_hal_utils_v1_5.h | 2 +- radio/config/1.3/Android.bp | 3 + radio/config/1.3/IRadioConfig.hal | 10 +- radio/config/1.3/IRadioConfigResponse.hal | 13 +- radio/config/1.3/default/RadioConfig.cpp | 9 +- radio/config/1.3/default/RadioConfig.h | 3 + .../1.3/default/RadioConfigIndication.cpp | 4 - .../1.3/default/RadioConfigIndication.h | 4 - .../1.3/default/RadioConfigResponse.cpp | 12 +- .../config/1.3/default/RadioConfigResponse.h | 43 ++--- radio/config/1.3/types.hal | 178 ++++++++++++++++++ .../functional/radio_config_hidl_hal_api.cpp | 31 +++ .../functional/radio_config_hidl_hal_test.cpp | 2 +- .../functional/radio_config_hidl_hal_utils.h | 37 ++-- .../vts/functional/radio_config_response.cpp | 28 ++- 18 files changed, 315 insertions(+), 75 deletions(-) diff --git a/current.txt b/current.txt index 76b8a6dbe1..4f389f618d 100644 --- a/current.txt +++ b/current.txt @@ -639,10 +639,10 @@ c9273429fcf98d797d3bb07fdba6f1be95bf960f9255cde169fd1ca4db85f856 android.hardwar 7a0a3382cca78d13a55e856b14b7fb025987f52c2adeab5747cd584391cd3cc7 android.hardware.radio@1.5::IRadio 20d52e66fd548f89bcb98cda42749a591ce8f439a2a7148617adac0c967ad937 android.hardware.radio@1.5::IRadioIndication c7b4a0debd3bb8815a463d11194487c7eef81bca584f558d7ba74c34b18d7e3f android.hardware.radio@1.5::IRadioResponse -55f0a15642869ec98a55ea0a5ac049d3e1a6245ff7750deb6bcb7182057eee83 android.hardware.radio.config@1.3::types -b27ab0cd40b0b078cdcd024bfe1061c4c4c065f3519eeb9347fa359a3268a5ae android.hardware.radio.config@1.3::IRadioConfig +5971a891d7d8843e9fb9f44583a9a0a265ec42fd5e4e1c95c9803454d21fabf7 android.hardware.radio.config@1.3::types +a2977755bc5f1ef47f04b7f2400632efda6218e1515dba847da487145cfabc4f android.hardware.radio.config@1.3::IRadioConfig 742360c775313438b0f82256eac62fb5bbc76a6ae6f388573f3aa142fb2c1eea android.hardware.radio.config@1.3::IRadioConfigIndication -7683fed9d253956071f18b152e6be657719536f98d9b534433d5e411bcde5061 android.hardware.radio.config@1.3::IRadioConfigResponse +0006ab8e8b0910cbd3bbb08d5f17d5fac7d65a2bdad5f2334e4851db9d1e6fa8 android.hardware.radio.config@1.3::IRadioConfigResponse ## # END Radio HAL Merge Conflict Avoidance Buffer - STOPSHIP if present ## diff --git a/radio/1.5/vts/functional/Android.bp b/radio/1.5/vts/functional/Android.bp index 85c4f99db4..182985e68f 100644 --- a/radio/1.5/vts/functional/Android.bp +++ b/radio/1.5/vts/functional/Android.bp @@ -34,6 +34,7 @@ cc_test { "android.hardware.radio@1.0", "android.hardware.radio.config@1.0", "android.hardware.radio.config@1.1", + "android.hardware.radio.config@1.3", ], header_libs: ["radio.util.header@1.0"], test_suites: ["general-tests"] diff --git a/radio/1.5/vts/functional/radio_hidl_hal_test.cpp b/radio/1.5/vts/functional/radio_hidl_hal_test.cpp index a5d236d47f..c29ebf940a 100644 --- a/radio/1.5/vts/functional/radio_hidl_hal_test.cpp +++ b/radio/1.5/vts/functional/radio_hidl_hal_test.cpp @@ -47,9 +47,9 @@ void RadioHidlTest_v1_5::SetUp() { EXPECT_EQ(serial, radioRsp_v1_5->rspInfo.serial); EXPECT_EQ(RadioError::NONE, radioRsp_v1_5->rspInfo.error); - sp<::android::hardware::radio::config::V1_1::IRadioConfig> radioConfig = + sp<::android::hardware::radio::config::V1_3::IRadioConfig> radioConfig = ::testing::VtsHalHidlTargetTestBase::getService< - ::android::hardware::radio::config::V1_1::IRadioConfig>(); + ::android::hardware::radio::config::V1_3::IRadioConfig>(); /* Enforce Vts tesing with RadioConfig is existed. */ ASSERT_NE(nullptr, radioConfig.get()); 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 1c4ec9fff9..6ca6e56c85 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 @@ -22,7 +22,7 @@ #include #include -#include +#include #include #include diff --git a/radio/config/1.3/Android.bp b/radio/config/1.3/Android.bp index 88de666618..7360270310 100644 --- a/radio/config/1.3/Android.bp +++ b/radio/config/1.3/Android.bp @@ -17,6 +17,9 @@ hidl_interface { "android.hardware.radio.config@1.1", "android.hardware.radio.config@1.2", "android.hardware.radio@1.0", + "android.hardware.radio@1.1", + "android.hardware.radio@1.4", + "android.hardware.radio@1.5", "android.hidl.base@1.0", ], gen_java: true, diff --git a/radio/config/1.3/IRadioConfig.hal b/radio/config/1.3/IRadioConfig.hal index a0ce6e089d..d01f54b041 100644 --- a/radio/config/1.3/IRadioConfig.hal +++ b/radio/config/1.3/IRadioConfig.hal @@ -27,5 +27,13 @@ import @1.1::IRadioConfig; * serial to different methods), multiple responses (one for each method call) must still be served. */ interface IRadioConfig extends @1.1::IRadioConfig { - + /** + * Request current phone capability. + * + * @param serial Serial number of request. + * + * Response callback is IRadioResponse.getPhoneCapabilityResponse_1_3() which + * will return <@1.3::PhoneCapability>. + */ + oneway getPhoneCapability_1_3(int32_t serial); }; diff --git a/radio/config/1.3/IRadioConfigResponse.hal b/radio/config/1.3/IRadioConfigResponse.hal index 9c4c971f9f..e13aa1efb6 100644 --- a/radio/config/1.3/IRadioConfigResponse.hal +++ b/radio/config/1.3/IRadioConfigResponse.hal @@ -16,11 +16,22 @@ package android.hardware.radio.config@1.3; +import android.hardware.radio@1.0::RadioResponseInfo; import @1.2::IRadioConfigResponse; +import @1.3::PhoneCapability; /** * Interface declaring response functions to solicited radio config requests. */ interface IRadioConfigResponse extends @1.2::IRadioConfigResponse { - + /** + * @param info Response info struct containing response type, serial no. and error + * @param phoneCapability <@1.3::PhoneCapability> it defines modem's capability for example + * how many logical modems it has, how many data connections it supports. + * + * Valid errors returned: + * RadioError:NONE + * RadioError:RADIO_NOT_AVAILABLE + */ + oneway getPhoneCapabilityResponse_1_3(RadioResponseInfo info, PhoneCapability phoneCapability); }; diff --git a/radio/config/1.3/default/RadioConfig.cpp b/radio/config/1.3/default/RadioConfig.cpp index c28119c311..01e98f1dd6 100644 --- a/radio/config/1.3/default/RadioConfig.cpp +++ b/radio/config/1.3/default/RadioConfig.cpp @@ -24,7 +24,6 @@ namespace V1_3 { namespace implementation { using namespace ::android::hardware::radio::V1_0; -using namespace ::android::hardware::radio::config; // Methods from ::android::hardware::radio::config::V1_0::IRadioConfig follow. Return RadioConfig::setResponseFunctions( @@ -105,6 +104,14 @@ Return RadioConfig::getModemsConfig(int32_t /* serial */) { return Void(); } +// Methods from ::android::hardware::radio::config::V1_3::IRadioConfig follow. +Return RadioConfig::getPhoneCapability_1_3(int32_t /* serial */) { + V1_3::PhoneCapability phoneCapability; + RadioResponseInfo info; + mRadioConfigResponseV1_3->getPhoneCapabilityResponse_1_3(info, phoneCapability); + return Void(); +} + } // namespace implementation } // namespace V1_3 } // namespace config diff --git a/radio/config/1.3/default/RadioConfig.h b/radio/config/1.3/default/RadioConfig.h index 00585e6df2..57ff3689eb 100644 --- a/radio/config/1.3/default/RadioConfig.h +++ b/radio/config/1.3/default/RadioConfig.h @@ -62,6 +62,9 @@ struct RadioConfig : public V1_3::IRadioConfig { Return setPreferredDataModem(int32_t serial, uint8_t modemId); Return setModemsConfig(int32_t serial, const V1_1::ModemsConfig& modemsConfig); Return getModemsConfig(int32_t serial); + + // Methods from ::android::hardware::radio::config::V1_3::IRadioConfig follow. + Return getPhoneCapability_1_3(int32_t serial); }; } // namespace implementation diff --git a/radio/config/1.3/default/RadioConfigIndication.cpp b/radio/config/1.3/default/RadioConfigIndication.cpp index eb77a48ec1..608fa1c258 100644 --- a/radio/config/1.3/default/RadioConfigIndication.cpp +++ b/radio/config/1.3/default/RadioConfigIndication.cpp @@ -23,10 +23,6 @@ namespace config { namespace V1_3 { namespace implementation { -using namespace ::android::hardware::radio::V1_0; -using namespace ::android::hardware::radio::config::V1_0; -using namespace ::android::hardware::radio::config::V1_2; - // Methods from ::android::hardware::radio::config::V1_0::IRadioConfigIndication follow. Return RadioConfigIndication::simSlotsStatusChanged( RadioIndicationType /* type */, const hidl_vec& /* slotStatus */) { diff --git a/radio/config/1.3/default/RadioConfigIndication.h b/radio/config/1.3/default/RadioConfigIndication.h index 3697492375..c92446cbe2 100644 --- a/radio/config/1.3/default/RadioConfigIndication.h +++ b/radio/config/1.3/default/RadioConfigIndication.h @@ -31,10 +31,6 @@ namespace implementation { using namespace ::android::hardware::radio::V1_0; using namespace ::android::hardware::radio::config; -using ::android::sp; -using ::android::hardware::hidl_array; -using ::android::hardware::hidl_memory; -using ::android::hardware::hidl_string; using ::android::hardware::hidl_vec; using ::android::hardware::Return; using ::android::hardware::Void; diff --git a/radio/config/1.3/default/RadioConfigResponse.cpp b/radio/config/1.3/default/RadioConfigResponse.cpp index 48e81dade3..1d48a13e37 100644 --- a/radio/config/1.3/default/RadioConfigResponse.cpp +++ b/radio/config/1.3/default/RadioConfigResponse.cpp @@ -23,11 +23,6 @@ namespace config { namespace V1_3 { namespace implementation { -using namespace ::android::hardware::radio::V1_0; -using namespace ::android::hardware::radio::config::V1_0; -using namespace ::android::hardware::radio::config::V1_1; -using namespace ::android::hardware::radio::config::V1_2; - // Methods from ::android::hardware::radio::config::V1_0::IRadioConfigResponse follow. Return RadioConfigResponse::getSimSlotsStatusResponse( const RadioResponseInfo& /* info */, @@ -73,6 +68,13 @@ Return RadioConfigResponse::getSimSlotsStatusResponse_1_2( return Void(); } +// Methods from ::android::hardware::radio::config::V1_3::IRadioConfigResponse follow. +Return RadioConfigResponse::getPhoneCapabilityResponse_1_3( + const RadioResponseInfo& /* info */, const V1_3::PhoneCapability& /* phoneCapability */) { + // TODO implement + return Void(); +} + } // namespace implementation } // namespace V1_3 } // namespace config diff --git a/radio/config/1.3/default/RadioConfigResponse.h b/radio/config/1.3/default/RadioConfigResponse.h index 0f0033fa6a..dc169bb635 100644 --- a/radio/config/1.3/default/RadioConfigResponse.h +++ b/radio/config/1.3/default/RadioConfigResponse.h @@ -28,43 +28,36 @@ namespace config { namespace V1_3 { namespace implementation { -using ::android::sp; -using ::android::hardware::hidl_array; -using ::android::hardware::hidl_memory; -using ::android::hardware::hidl_string; +using namespace ::android::hardware::radio::config; + using ::android::hardware::hidl_vec; using ::android::hardware::Return; -using ::android::hardware::Void; + +using ::android::hardware::radio::V1_0::RadioResponseInfo; struct RadioConfigResponse : public IRadioConfigResponse { // Methods from ::android::hardware::radio::config::V1_0::IRadioConfigResponse follow. Return getSimSlotsStatusResponse( - const ::android::hardware::radio::V1_0::RadioResponseInfo& info, - const hidl_vec<::android::hardware::radio::config::V1_0::SimSlotStatus>& slotStatus) - override; - Return setSimSlotsMappingResponse( - const ::android::hardware::radio::V1_0::RadioResponseInfo& info) override; + const RadioResponseInfo& info, + const hidl_vec& slotStatus) override; + Return setSimSlotsMappingResponse(const RadioResponseInfo& info) override; // Methods from ::android::hardware::radio::config::V1_1::IRadioConfigResponse follow. - Return getPhoneCapabilityResponse( - const ::android::hardware::radio::V1_0::RadioResponseInfo& info, - const ::android::hardware::radio::config::V1_1::PhoneCapability& phoneCapability) - override; - Return setPreferredDataModemResponse( - const ::android::hardware::radio::V1_0::RadioResponseInfo& info) override; - Return setModemsConfigResponse( - const ::android::hardware::radio::V1_0::RadioResponseInfo& info) override; - Return getModemsConfigResponse( - const ::android::hardware::radio::V1_0::RadioResponseInfo& info, - const ::android::hardware::radio::config::V1_1::ModemsConfig& modemsConfig) override; + Return getPhoneCapabilityResponse(const RadioResponseInfo& info, + const V1_1::PhoneCapability& phoneCapability) override; + Return setPreferredDataModemResponse(const RadioResponseInfo& info) override; + Return setModemsConfigResponse(const RadioResponseInfo& info) override; + Return getModemsConfigResponse(const RadioResponseInfo& info, + const V1_1::ModemsConfig& modemsConfig) override; // Methods from ::android::hardware::radio::config::V1_2::IRadioConfigResponse follow. Return getSimSlotsStatusResponse_1_2( - const ::android::hardware::radio::V1_0::RadioResponseInfo& info, - const hidl_vec<::android::hardware::radio::config::V1_2::SimSlotStatus>& slotStatus) - override; + const RadioResponseInfo& info, + const hidl_vec& slotStatus) override; - // Methods from ::android::hidl::base::V1_0::IBase follow. + // Methods from ::android::hardware::radio::config::V1_3::IRadioConfigResponse follow. + Return getPhoneCapabilityResponse_1_3( + const RadioResponseInfo& info, const V1_3::PhoneCapability& phoneCapability) override; }; } // namespace implementation diff --git a/radio/config/1.3/types.hal b/radio/config/1.3/types.hal index 866002acad..3414534138 100644 --- a/radio/config/1.3/types.hal +++ b/radio/config/1.3/types.hal @@ -15,3 +15,181 @@ */ package android.hardware.radio.config@1.3; + +import android.hardware.radio@1.1::GeranBands; +import android.hardware.radio@1.1::UtranBands; +import android.hardware.radio@1.1::EutranBands; +import android.hardware.radio@1.4::RadioAccessFamily; +import android.hardware.radio@1.5::NgranBands; + +/** Type for the SIM slot. */ +enum SlotType : int32_t { + /** Slot type for UICC/pSIM (physical SIM). */ + UICC = 1, + /** Slot type for iUICC/iSIM (integrated SIM). */ + IUICC = 2, + /** Slot type for eUICC/eSIM (embedded SIM). */ + EUICC = 3, + /** Slot type for soft SIM (no physical SIM). */ + SOFT_SIM = 4, +}; + +/** A field in PhoneCapability that holds information about the SIM slot. */ +struct SimSlotCapability { + /** Corresponds to physicalSlotId in Radio@1.2::CardStatus. */ + uint32_t physicalSlotId; + + /** Type of slot. */ + SlotType slotType; +}; + +/** Bitmask of features that can be supported by a single modem. */ +enum ModemFeatures : int32_t { + /** 3GPP2 capability. */ + THREE_GPP2_REG = 1 << 0, + /** 3GPP capability. */ + THREE_GPP_REG = 1 << 1, + /** CDMA 2000 with EHRPD capability. */ + CDMA2000_EHRPD_REG = 1 << 2, + /** GSM capability. */ + GERAN_REG = 1 << 3, + /** UMTS capability. */ + UTRAN_REG = 1 << 4, + /** LTE capability. */ + EUTRAN_REG = 1 << 5, + /** 5G capability. */ + NGRAN_REG = 1 << 6, + /** Dual Connectivity capability. */ + EN_DC_REG = 1 << 7, + /** VoLTE capability (IMS registered). */ + PS_VOICE_REG = 1 << 8, + /** CS voice call capability. */ + CS_VOICE_SESSION = 1 << 9, + /** Internet connection capability. */ + INTERACTIVE_DATA_SESSION = 1 << 10, + /** Dedicated bearer capability. */ + DEDICATED_BEARER = 1 << 11, + /** Network scanning capability. */ + NETWORK_SCAN = 1 << 12, + /** CDMA capability for SIM associated with modem. */ + CSIM = 1 << 13, +}; + +struct ConcurrentModemFeatures { + /** + * A vector of concurrently supportable modem features across all modems. + * Each entry in the vector is a bitfield of ModemFeatures that can be used + * concurrently with the other ModemFeatures in that list. + * Each bitfield must be the full set of features for a single modem. + * + * On a Dual-SIM device, each entry will be a vector of length 2. + * The examples below depict the modemFeatures for four Dual-SIM setups: + * 1. Only one modem can PS attach (IMS registered). + * { + * (GERAN_REG | UTRAN_REG | EUTRAN_REG | PS_VOICE_REG | + * CS_VOICE_SESSION | INTERACTIVE_DATA_SESSION | DEDICATED_BEARER), + * (GERAN_REG | UTRAN_REG) + * } + * or + * { + * (GERAN_REG | UTRAN_REG | EUTRAN_REG | PS_VOICE_REG | + * INTERACTIVE_DATA_SESSION), + * (GERAN_REG | UTRAN_REG | CS_VOICE_SESSION) + * } + * 2. Both modems can PS attach (dual VoLTE). + * { + * (GERAN_REG | UTRAN_REG | EUTRAN_REG | PS_VOICE_REG | + * CS_VOICE_SESSION | INTERACTIVE_DATA_SESSION | DEDICATED_BEARER), + * (GERAN_REG | UTRAN_REG | EUTRAN_REG | PS_VOICE_REG) + * } + * 3. Both modems can maintain an Internet connection, but they share + * one RF hardware. + * { + * (GERAN_REG | UTRAN_REG | EUTRAN_REG | PS_VOICE_REG | + * CS_VOICE_SESSION | INTERACTIVE_DATA_SESSION | DEDICATED_BEARER), + * (GERAN_REG | UTRAN_REG | EUTRAN_REG | PS_VOICE_REG | + * INTERACTIVE_DATA_SESSION) + * } + * 4. Both modems can maintain an Internet connection, and they have + * their own RF hardware. + * { + * (GERAN_REG | UTRAN_REG | EUTRAN_REG | PS_VOICE_REG | + * CS_VOICE_SESSION | INTERACTIVE_DATA_SESSION | DEDICATED_BEARER), + * (GERAN_REG | UTRAN_REG | EUTRAN_REG | PS_VOICE_REG | + * INTERACTIVE_DATA_SESSION | DEDICATED_BEARER) + * } + */ + vec> modemFeatures; +}; + +/** + * Overwritten from @1.1::PhoneCapability to add new capabilities and deprecate + * maxActiveData, maxActiveInternetData, isInternetLingeringSupported, logicalModemList. + * Replaces RadioConfig@1.1::ModemInfo and should replace Radio@1.4::RadioCapabilities + * in the next major version upgrade. In the future, this should be extended instead of overwritten. + */ +struct PhoneCapability { + /** + * 3GPP UE category for UTRAN downlink direction. + * 25.306 Table 5.1a + */ + uint8_t utranUeCategoryDl; + /** + * 3GPP UE category for UTRAN uplink direction. + * 25.306 Table 5.1g + */ + uint8_t utranUeCategoryUl; + /** + * 3GPP UE category for EUTRAN downlink direction. + * 25.306 Table 4.1a + */ + uint8_t eutranUeCategoryDl; + /** + * 3GPP UE category for EUTRAN uplink direction. + * 25.306 Table 4.1a-2 + */ + uint8_t eutranUeCategoryUl; + + /** + * Length of grace period for switching between logical modems, in milliseconds. + * Used only when the number of logical modems is greater than the number of + * Internet connections the device can support, otherwise must be 0. + */ + uint64_t psDataConnectionLingerTimeMillis; + + vec geranBands; + vec utranBands; + vec eutranBands; + vec ngranBands; + + /** + * 32-bit bitmap of supported Radio@1.4::RadioAccessFamily types. + * Note that RadioAccessFamily is actually the radio access technologies, so it should be + * renamed in the next major version upgrade. + */ + bitfield supportedRats; + + /** + * List of unique logical modem UUIDs from Radio@1.4::RadioCapabilities. + * A UUID is typically "com.xxxx.lmX" where X is the logical modem ID. + * Must be equal to the number of logical modems in the device. + * Radio@1.2::RadioConst::MAX_UUID_LENGTH is the max length of each UUID. + */ + vec logicalModemUuids; + + /** + * List of SIM slot capabilities. The order of physical slot IDs must correspond to + * the order of modems in logicalModemUuids. + */ + vec simSlotCapabilities; + + /** + * A vector of all sets of concurrently supportable modem feature sets. The order of modems + * in modemFeatures must correspond to the order of modems in logicalModemUuids. + * Each entry in concurrentFeatureSupport is independent of others in the list + * and represents a set of concurrently supportable features across all modems. + * Each entry in ConcurrentModemFeatures::modemFeatures is a bitfield of + * concurrently supported ModemFeatures for one modem. + */ + vec concurrentFeatureSupport; +}; diff --git a/radio/config/1.3/vts/functional/radio_config_hidl_hal_api.cpp b/radio/config/1.3/vts/functional/radio_config_hidl_hal_api.cpp index 07e9eded5a..7f90023b89 100644 --- a/radio/config/1.3/vts/functional/radio_config_hidl_hal_api.cpp +++ b/radio/config/1.3/vts/functional/radio_config_hidl_hal_api.cpp @@ -17,3 +17,34 @@ #include #define ASSERT_OK(ret) ASSERT_TRUE(ret.isOk()) + +/* + * Test IRadioConfig.getPhoneCapability_1_3() + */ +TEST_P(RadioConfigHidlTest, getPhoneCapability_1_3) { + serial = GetRandomSerialNumber(); + Return res = radioConfig->getPhoneCapability_1_3(serial); + ASSERT_OK(res); + EXPECT_EQ(std::cv_status::no_timeout, wait()); + EXPECT_EQ(RadioResponseType::SOLICITED, radioConfigRsp->rspInfo.type); + EXPECT_EQ(serial, radioConfigRsp->rspInfo.serial); + ALOGI("getPhoneCapability_1_3, rspInfo.error = %s\n", + toString(radioConfigRsp->rspInfo.error).c_str()); + + ASSERT_TRUE(CheckAnyOfErrors( + radioConfigRsp->rspInfo.error, + {RadioError::NONE, RadioError::RADIO_NOT_AVAILABLE, RadioError::INTERNAL_ERR})); + + if (radioConfigRsp->rspInfo.error == RadioError ::NONE) { + int numModems = radioConfigRsp->phoneCap_1_3.logicalModemUuids.size(); + EXPECT_GE(numModems, 0); + // length of simSlotCapabilities should be equal to length of logicalModemUuids. + EXPECT_EQ(numModems, radioConfigRsp->phoneCap_1_3.simSlotCapabilities.size()); + // length of modemFeatures in each ConcurrentModemFeatures should be + // equal to length of logicalModemUuids. + for (V1_3::ConcurrentModemFeatures cmf : + radioConfigRsp->phoneCap_1_3.concurrentFeatureSupport) { + EXPECT_EQ(numModems, cmf.modemFeatures.size()); + } + } +} diff --git a/radio/config/1.3/vts/functional/radio_config_hidl_hal_test.cpp b/radio/config/1.3/vts/functional/radio_config_hidl_hal_test.cpp index dbb4bf44e3..cd48b25fac 100644 --- a/radio/config/1.3/vts/functional/radio_config_hidl_hal_test.cpp +++ b/radio/config/1.3/vts/functional/radio_config_hidl_hal_test.cpp @@ -17,7 +17,7 @@ #include void RadioConfigHidlTest::SetUp() { - radioConfig = ::android::hardware::radio::config::V1_3::IRadioConfig::getService(GetParam()); + radioConfig = V1_3::IRadioConfig::getService(GetParam()); ASSERT_NE(nullptr, radioConfig.get()); radioConfigRsp = new (std::nothrow) RadioConfigResponse(*this); diff --git a/radio/config/1.3/vts/functional/radio_config_hidl_hal_utils.h b/radio/config/1.3/vts/functional/radio_config_hidl_hal_utils.h index 9b78c04944..b21c7c0b84 100644 --- a/radio/config/1.3/vts/functional/radio_config_hidl_hal_utils.h +++ b/radio/config/1.3/vts/functional/radio_config_hidl_hal_utils.h @@ -28,19 +28,18 @@ #include #include #include +#include #include "vts_test_util.h" -using namespace ::android::hardware::radio::config::V1_1; -using namespace ::android::hardware::radio::config::V1_2; -using namespace ::android::hardware::radio::config::V1_3; +using namespace ::android::hardware::radio::config; using ::android::sp; -using ::android::hardware::hidl_string; using ::android::hardware::hidl_vec; using ::android::hardware::Return; using ::android::hardware::Void; +using ::android::hardware::radio::V1_0::RadioIndicationType; using ::android::hardware::radio::V1_0::RadioResponseInfo; using ::android::hardware::radio::V1_0::RadioResponseType; @@ -49,43 +48,46 @@ using ::android::hardware::radio::V1_0::RadioResponseType; class RadioConfigHidlTest; /* Callback class for radio config response */ -class RadioConfigResponse : public ::android::hardware::radio::config::V1_3::IRadioConfigResponse { +class RadioConfigResponse : public V1_3::IRadioConfigResponse { protected: RadioConfigHidlTest& parent; public: RadioResponseInfo rspInfo; - PhoneCapability phoneCap; + V1_1::PhoneCapability phoneCap_1_1; + V1_3::PhoneCapability phoneCap_1_3; RadioConfigResponse(RadioConfigHidlTest& parent); virtual ~RadioConfigResponse() = default; /* 1.0 Api */ - Return getSimSlotsStatusResponse( - const RadioResponseInfo& info, - const hidl_vec<::android::hardware::radio::config::V1_0::SimSlotStatus>& slotStatus); + Return getSimSlotsStatusResponse(const RadioResponseInfo& info, + const hidl_vec& slotStatus); Return setSimSlotsMappingResponse(const RadioResponseInfo& info); /* 1.1 Api */ Return getPhoneCapabilityResponse(const RadioResponseInfo& info, - const PhoneCapability& phoneCapability); + const V1_1::PhoneCapability& phoneCapability); Return setPreferredDataModemResponse(const RadioResponseInfo& info); Return getModemsConfigResponse(const RadioResponseInfo& info, - const ModemsConfig& mConfig); + const V1_1::ModemsConfig& mConfig); Return setModemsConfigResponse(const RadioResponseInfo& info); /* 1.2 Api */ Return getSimSlotsStatusResponse_1_2(const RadioResponseInfo& info, - const hidl_vec& slotStatus); + const hidl_vec& slotStatus); + + /* 1.3 Api */ + Return getPhoneCapabilityResponse_1_3(const RadioResponseInfo& info, + const V1_3::PhoneCapability& phoneCapability); }; /* Callback class for radio config indication */ -class RadioConfigIndication - : public ::android::hardware::radio::config::V1_3::IRadioConfigIndication { +class RadioConfigIndication : public V1_3::IRadioConfigIndication { protected: RadioConfigHidlTest& parent; @@ -94,9 +96,8 @@ class RadioConfigIndication virtual ~RadioConfigIndication() = default; /* 1.2 Api */ - Return simSlotsStatusChanged_1_2( - ::android::hardware::radio::V1_0::RadioIndicationType type, - const hidl_vec& slotStatus); + Return simSlotsStatusChanged_1_2(RadioIndicationType type, + const hidl_vec& slotStatus); }; // The main test class for Radio config HIDL. @@ -121,7 +122,7 @@ class RadioConfigHidlTest : public ::testing::TestWithParam { int serial; /* radio config service handle */ - sp<::android::hardware::radio::config::V1_3::IRadioConfig> radioConfig; + sp radioConfig; /* radio config response handle */ sp radioConfigRsp; diff --git a/radio/config/1.3/vts/functional/radio_config_response.cpp b/radio/config/1.3/vts/functional/radio_config_response.cpp index 1ca960eae9..22098d3d93 100644 --- a/radio/config/1.3/vts/functional/radio_config_response.cpp +++ b/radio/config/1.3/vts/functional/radio_config_response.cpp @@ -16,17 +16,18 @@ #include -using ::android::hardware::radio::V1_0::RadioResponseInfo; +using namespace ::android::hardware::radio::config; -// SimSlotStatus slotStatus; +using ::android::hardware::hidl_vec; + +using ::android::hardware::radio::V1_0::RadioResponseInfo; RadioConfigResponse::RadioConfigResponse(RadioConfigHidlTest& parent) : parent(parent) {} /* 1.0 Apis */ Return RadioConfigResponse::getSimSlotsStatusResponse( const RadioResponseInfo& /* info */, - const ::android::hardware::hidl_vec< - ::android::hardware::radio::config::V1_0::SimSlotStatus>& /* slotStatus */) { + const hidl_vec& /* slotStatus */) { return Void(); } @@ -36,9 +37,9 @@ Return RadioConfigResponse::setSimSlotsMappingResponse(const RadioResponse /* 1.1 Apis */ Return RadioConfigResponse::getPhoneCapabilityResponse( - const RadioResponseInfo& info, const PhoneCapability& phoneCapability) { + const RadioResponseInfo& info, const V1_1::PhoneCapability& phoneCapability) { rspInfo = info; - phoneCap = phoneCapability; + phoneCap_1_1 = phoneCapability; parent.notify(info.serial); return Void(); } @@ -49,7 +50,7 @@ Return RadioConfigResponse::setPreferredDataModemResponse( } Return RadioConfigResponse::getModemsConfigResponse(const RadioResponseInfo& /* info */, - const ModemsConfig& /* mConfig */) { + const V1_1::ModemsConfig& /* mConfig */) { return Void(); } @@ -60,6 +61,15 @@ Return RadioConfigResponse::setModemsConfigResponse(const RadioResponseInf /* 1.2 Apis */ Return RadioConfigResponse::getSimSlotsStatusResponse_1_2( const RadioResponseInfo& /* info */, - const ::android::hardware::hidl_vec& /* slotStatus */) { + const hidl_vec& /* slotStatus */) { return Void(); -} \ No newline at end of file +} + +/* 1.3 Apis */ +Return RadioConfigResponse::getPhoneCapabilityResponse_1_3( + const RadioResponseInfo& info, const V1_3::PhoneCapability& phoneCapability) { + rspInfo = info; + phoneCap_1_3 = phoneCapability; + parent.notify(info.serial); + return Void(); +}