diff --git a/current.txt b/current.txt index edfaf6588a..f106c1cc0d 100644 --- a/current.txt +++ b/current.txt @@ -635,14 +635,14 @@ c9273429fcf98d797d3bb07fdba6f1be95bf960f9255cde169fd1ca4db85f856 android.hardwar ## # BEGIN Radio HAL Merge Conflict Avoidance Buffer - STOPSHIP if present ## -275a01e456f3c988ac9736d26ceaf3e95fb7b3c333a8a7fe983de6bae39df58a android.hardware.radio@1.5::types -7a0a3382cca78d13a55e856b14b7fb025987f52c2adeab5747cd584391cd3cc7 android.hardware.radio@1.5::IRadio +bbed8ec4b3e9bb419b61d3fe53ec2d7def943378d1de8eaa02d79b17b0838136 android.hardware.radio@1.5::types +603851ca0f5360778049902fc7486d0ff60065b16e83b99f076487667aba1928 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 +afa9ba21fbf130e5cd6463b01ee34175a60220cdc8b657443e683494e6deca8d 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 -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/IRadio.hal b/radio/1.5/IRadio.hal index 22cc4e1f81..be6a727972 100644 --- a/radio/1.5/IRadio.hal +++ b/radio/1.5/IRadio.hal @@ -248,6 +248,24 @@ interface IRadio extends @1.4::IRadio { */ oneway getBarringInfo(int32_t serial); + /** + * Request current voice registration state + * + * @param serial Serial number of request. + * + * Response function is IRadioResponse.getVoiceRegistrationStateResponse_1_5() + */ + oneway getVoiceRegistrationState_1_5(int32_t serial); + + /** + * Request current data registration state + * + * @param serial Serial number of request. + * + * Response function is IRadioResponse.getDataRegistrationStateResponse_1_5() + */ + oneway getDataRegistrationState_1_5(int32_t serial); + /** * Requests that deactivates one category of the device personalization. * diff --git a/radio/1.5/IRadioResponse.hal b/radio/1.5/IRadioResponse.hal index 88f31344e9..f65c075203 100644 --- a/radio/1.5/IRadioResponse.hal +++ b/radio/1.5/IRadioResponse.hal @@ -20,9 +20,9 @@ import @1.0::RadioResponseInfo; import @1.0::SendSmsResult; import @1.4::IRadioResponse; import @1.5::BarringInfo; -import @1.5::SetupDataCallResult; -import @1.4::SetupDataCallResult; import @1.5::PersoSubstate; +import @1.5::RegStateResult; +import @1.5::SetupDataCallResult; /** * Interface declaring response functions to solicited radio requests. @@ -174,6 +174,33 @@ interface IRadioResponse extends @1.4::IRadioResponse { */ oneway getBarringInfoResponse(RadioResponseInfo info, vec barringInfos); + /** + * @param info Response info struct containing response type, serial no. and error + * @param voiceRegResponse Current Voice registration response as defined by RegStateResult + * in types.hal + * + * Valid errors returned: + * RadioError:NONE + * RadioError:RADIO_NOT_AVAILABLE + * RadioError:INTERNAL_ERR + */ + oneway getVoiceRegistrationStateResponse_1_5(RadioResponseInfo info, + RegStateResult voiceRegResponse); + + /** + * @param info Response info struct containing response type, serial no. and error + * @param dataRegResponse Current Data registration response as defined by RegStateResult in + * types.hal + * + * Valid errors returned: + * RadioError:NONE + * RadioError:RADIO_NOT_AVAILABLE + * RadioError:INTERNAL_ERR + * RadioError:NOT_PROVISIONED + */ + oneway getDataRegistrationStateResponse_1_5(RadioResponseInfo info, + RegStateResult dataRegResponse); + /** * @param info Response info struct containing response type, serial no. and error * @param persoType SIM Personalisation type diff --git a/radio/1.5/types.hal b/radio/1.5/types.hal index b056408c8e..48796be26d 100644 --- a/radio/1.5/types.hal +++ b/radio/1.5/types.hal @@ -16,7 +16,12 @@ package android.hardware.radio@1.5; +import @1.0::ApnAuthType; +import @1.0::DataProfileId; +import @1.0::DataProfileInfoType; import @1.0::PersoSubstate; +import @1.0::RadioAccessFamily; +import @1.0::RegState; import @1.1::EutranBands; import @1.1::GeranBands; import @1.1::RadioAccessNetworks; @@ -36,7 +41,10 @@ import @1.4::CellIdentityNr; import @1.4::DataCallFailCause; import @1.4::DataConnActiveStatus; import @1.4::DataProfileInfo; +import @1.4::LteVopsInfo; +import @1.4::NrIndicators; import @1.4::PdpProtocolType; +import @1.4::RadioTechnology; import android.hidl.safe_union@1.0::Monostate; @@ -229,6 +237,16 @@ enum NgranBands : int32_t { BAND_261 = 261, }; +enum UtranBands : @1.1::UtranBands { + /** TD-SCDMA bands. 3GPP TS 25.102, Table 5.2: Frequency bands */ + BAND_A = 101, + BAND_B = 102, + BAND_C = 103, + BAND_D = 104, + BAND_E = 105, + BAND_F = 106, +}; + /** * Overwritten from @1.2::NetworkScanRequest to update * RadioAccessSpecifier to 1.5 version @@ -555,6 +573,192 @@ enum IndicationFilter : @1.2::IndicationFilter { BARRING_INFO = 1 << 6, }; +/** + * Call fail causes for Circuit-switched service enumerated in 3GPP TS 24.008, 10.5.3.6 and + * 10.5.147. Additional detail is available in 3GPP TS 24.008 Annex G. + */ +enum RegistrationFailCause : int32_t { + /** 0 - None */ + NONE = 0, + /** 2 - IMSI unknown in HLR */ + IMSI_UNKNOWN_IN_HLR = 2, + /** 3 - Illegal MS */ + ILLEGAL_MS = 3, + /** 4 - Illegal ME */ + IMSI_UNKNOWN_IN_VLR = 4, + /** 5 - PLMN not allowed */ + IMEI_NOT_ACCEPTED = 5, + /** 6 - Location area not allowed */ + ILLEGAL_ME = 6, + /** 7 - Roaming not allowed */ + GPRS_SERVICES_NOT_ALLOWED = 7, + /** 8 - No Suitable Cells in this Location Area */ + GPRS_AND_NON_GPRS_SERVICES_NOT_ALLOWED = 8, + /** 9 - Network failure */ + MS_IDENTITY_CANNOT_BE_DERIVED_BY_NETWORK = 9, + /** 10 - Persistent location update reject */ + IMPLICITLY_DETACHED = 10, + /** 11 - PLMN not allowed */ + PLMN_NOT_ALLOWED = 11, + /** 12 - Location area not allowed */ + LOCATION_AREA_NOT_ALLOWED = 12, + /** 13 - Roaming not allowed in this Location Area */ + ROAMING_NOT_ALLOWED = 13, + /** 14 - GPRS Services not allowed in this PLMN */ + GPRS_SERVICES_NOT_ALLOWED_IN_PLMN = 14, + /** 15 - No Suitable Cells in this Location Area */ + NO_SUITABLE_CELLS = 15, + /** 16 - MSC temporarily not reachable */ + MSC_TEMPORARILY_NOT_REACHABLE = 15, + /** 17 - Network Failure */ + NETWORK_FAILURE = 17, + /** 20 - MAC Failure */ + MAC_FAILURE = 20, + /** 21 - Sync Failure */ + SYNC_FAILURE = 21, + /** 22 - Congestion */ + CONGESTION = 22, + /** 23 - GSM Authentication unacceptable */ + GSM_AUTHENTICATION_UNACCEPTABLE = 23, + /** 25 - Not Authorized for this CSG */ + NOT_AUTHORIZED_FOR_THIS_CSG = 25, + /** 28 SMS provided via GPRS in this routing area */ + SMS_PROVIDED_BY_GPRS_IN_ROUTING_AREA, + /** 32 - Service option not supported */ + SERVICE_OPTION_NOT_SUPPORTED = 32, + /** 33 - Requested service option not subscribed */ + SERVICE_OPTION_NOT_SUBSCRIBED = 33, + /** 34 - Service option temporarily out of order */ + SERVICE_OPTION_TEMPORARILY_OUT_OF_ORDER = 34, + /** 38 - Call cannot be identified */ + CALL_CANNOT_BE_IDENTIFIED = 38, + /** 40 No PDP context activated */ + NO_PDP_CONTEXT_ACTIVATED = 40, + /** 48-63 - Retry upon entry into a new cell */ + RETRY_UPON_ENTRY_INTO_NEW_CELL_1 = 48, + RETRY_UPON_ENTRY_INTO_NEW_CELL_2 = 49, + RETRY_UPON_ENTRY_INTO_NEW_CELL_3 = 50, + RETRY_UPON_ENTRY_INTO_NEW_CELL_4 = 51, + RETRY_UPON_ENTRY_INTO_NEW_CELL_5 = 52, + RETRY_UPON_ENTRY_INTO_NEW_CELL_6 = 53, + RETRY_UPON_ENTRY_INTO_NEW_CELL_7 = 54, + RETRY_UPON_ENTRY_INTO_NEW_CELL_8 = 55, + RETRY_UPON_ENTRY_INTO_NEW_CELL_9 = 56, + RETRY_UPON_ENTRY_INTO_NEW_CELL_10 = 57, + RETRY_UPON_ENTRY_INTO_NEW_CELL_11 = 58, + RETRY_UPON_ENTRY_INTO_NEW_CELL_12 = 59, + RETRY_UPON_ENTRY_INTO_NEW_CELL_13 = 60, + RETRY_UPON_ENTRY_INTO_NEW_CELL_14 = 61, + RETRY_UPON_ENTRY_INTO_NEW_CELL_15 = 62, + RETRY_UPON_ENTRY_INTO_NEW_CELL_16 = 63, + /** 95 - Semantically incorrect message */ + SEMANTICALLY_INCORRECT_MESSAGE = 95, + /** 96 - Invalid mandatory information */ + INVALID_MANDATORY_INFORMATION = 96, + /** 97 - Message type non-existent or not implemented */ + MESSAGE_TYPE_NON_EXISTENT_OR_NOT_IMPLEMENTED = 97, + /** 98 - Message type not compatible with protocol state */ + MESSAGE_TYPE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE = 98, + /** 99 - Information element non-existent or not implemented */ + INFORMATION_ELEMENT_NON_EXISTENT_OR_NOT_IMPLEMENTED = 99, + /** 100 - Conditional IE error */ + CONDITIONAL_IE_ERROR = 100, + /** 101 - Message not compatible with protocol state */ + MESSAGE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE = 101, + /** 111 - Protocol error, unspecified */ + PROTOCOL_ERROR_UNSPECIFIED = 111, +}; + +enum PrlIndicator : int32_t { + NOT_REGISTERED = -1, + NOT_IN_PRL = 0, + IN_PRL = 1, +}; + +struct RegStateResult { + /** + * Registration state + * + * If the RAT is indicated as a GERAN, UTRAN, or CDMA2000 technology, this value reports + * registration in the Circuit-switched domain. + * If the RAT is indicated as an EUTRAN, NGRAN, or another technology that does not support + * circuit-switched services, this value reports registration in the Packet-switched domain. + */ + RegState regState; + + /** + * Indicates the available voice radio technology, valid values as + * defined by RadioTechnology. + */ + RadioTechnology rat; + + /** + * Cause code reported by the network in case registration fails. This will be a mobility + * management cause code defined for MM, GMM, MME or equivalent as appropriate for the RAT. + */ + RegistrationFailCause reasonForDenial; + + /** CellIdentity */ + CellIdentity cellIdentity; + + /** + * The most-recent PLMN-ID upon which the UE registered (or attempted to register if a failure + * is reported in the reasonForDenial field). This PLMN shall be in standard format consisting + * of a 3 digit MCC concatenated with a 2 or 3 digit MNC. + */ + string registeredPlmn; + + /** + * Access-technology-specific registration information, such as for Cdma2000. + */ + safe_union AccessTechnologySpecificInfo { + Monostate noinit; + + struct Cdma2000RegistrationInfo { + /** + * concurrent services support indicator. if registered on a CDMA system. + * false - Concurrent services not supported, + * true - Concurrent services supported + */ + bool cssSupported; + + /** + * TSB-58 Roaming Indicator if registered on a CDMA or EVDO system or -1 if not. + * Valid values are 0-255. + */ + int32_t roamingIndicator; + + /** + * Indicates whether the current system is in the PRL if registered on a CDMA or EVDO + * system or -1 if not. 0=not in the PRL, 1=in the PRL. + */ + PrlIndicator systemIsInPrl; + + /** + * Default Roaming Indicator from the PRL if registered on a CDMA or EVDO system or -1 + * if not. + * Valid values are 0-255. + */ + int32_t defaultRoamingIndicator; + } cdmaInfo; + + struct EutranRegistrationInfo { + /** + * Network capabilities for voice over PS services. This info is valid only on LTE + * network and must be present when device is camped on LTE. vopsInfo must be empty when + * device is camped only on 2G/3G. + */ + LteVopsInfo lteVopsInfo; // LTE network capability + + /** + * The parameters of NR 5G Non-Standalone. This value is only valid on E-UTRAN, + * otherwise must be empty. + */ + NrIndicators nrIndicators; + } eutranInfo; + } accessTechnologySpecificInfo; +}; + /** * Additional personalization categories in addition to those specified in 3GPP TS 22.022 and 3GPP2 C.S0068-0. */ 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..db7cf416af 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 @@ -563,6 +563,14 @@ class RadioResponse_v1_5 : public ::android::hardware::radio::V1_5::IRadioRespon const RadioResponseInfo& info, const ::android::hardware::hidl_vec<::android::hardware::radio::V1_5::BarringInfo>& barringInfos); + + Return getVoiceRegistrationStateResponse_1_5( + const RadioResponseInfo& info, + const ::android::hardware::radio::V1_5::RegStateResult& regResponse); + + Return getDataRegistrationStateResponse_1_5( + const RadioResponseInfo& info, + const ::android::hardware::radio::V1_5::RegStateResult& regResponse); }; /* Callback class for radio indication */ diff --git a/radio/1.5/vts/functional/radio_response.cpp b/radio/1.5/vts/functional/radio_response.cpp index c56087c3c1..859db3f875 100644 --- a/radio/1.5/vts/functional/radio_response.cpp +++ b/radio/1.5/vts/functional/radio_response.cpp @@ -981,3 +981,19 @@ Return RadioResponse_v1_5::getBarringInfoResponse( parent_v1_5.notify(info.serial); return Void(); } + +Return RadioResponse_v1_5::getVoiceRegistrationStateResponse_1_5( + const RadioResponseInfo& info, + const ::android::hardware::radio::V1_5::RegStateResult& /*regResponse*/) { + rspInfo = info; + parent_v1_5.notify(info.serial); + return Void(); +} + +Return RadioResponse_v1_5::getDataRegistrationStateResponse_1_5( + const RadioResponseInfo& info, + const ::android::hardware::radio::V1_5::RegStateResult& /*regResponse*/) { + rspInfo = info; + parent_v1_5.notify(info.serial); + return Void(); +} 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(); +}