Loading audio/aidl/default/CapEngineConfigXmlConverter.cpp +24 −17 Original line number Diff line number Diff line Loading @@ -69,29 +69,36 @@ ConversionResult<AudioHalCapRule::CriterionRule> convertCriterionRuleToAidl( std::string criterionName = xsdcRule.getSelectionCriterion(); std::string criterionValue = xsdcRule.getValue(); if (iequals(criterionName, toString(Tag::availableInputDevices))) { rule.criterion = AudioHalCapCriterionV2::make<Tag::availableInputDevices>(); rule.criterionTypeValue = VALUE_OR_RETURN(convertDeviceTypeToAidl(gLegacyInputDevicePrefix + criterionValue)); AudioHalCapCriterionV2::AvailableDevices value; value.values.emplace_back(VALUE_OR_RETURN( convertDeviceTypeToAidl(gLegacyInputDevicePrefix + criterionValue))); rule.criterionAndValue = AudioHalCapCriterionV2::make<Tag::availableInputDevices>(value); } else if (iequals(criterionName, toString(Tag::availableOutputDevices))) { rule.criterion = AudioHalCapCriterionV2::make<Tag::availableOutputDevices>(); rule.criterionTypeValue = VALUE_OR_RETURN( convertDeviceTypeToAidl(gLegacyOutputDevicePrefix + criterionValue)); AudioHalCapCriterionV2::AvailableDevices value; value.values.emplace_back(VALUE_OR_RETURN( convertDeviceTypeToAidl(gLegacyOutputDevicePrefix + criterionValue))); rule.criterionAndValue = AudioHalCapCriterionV2::make<Tag::availableOutputDevices>(value); } else if (iequals(criterionName, toString(Tag::availableInputDevicesAddresses))) { rule.criterion = AudioHalCapCriterionV2::make<Tag::availableInputDevicesAddresses>(); rule.criterionTypeValue = AudioDeviceAddress::make<AudioDeviceAddress::Tag::id>(criterionValue); AudioHalCapCriterionV2::AvailableDevicesAddresses value; value.values.emplace_back(criterionValue); rule.criterionAndValue = AudioHalCapCriterionV2::make<Tag::availableInputDevicesAddresses>(value); } else if (iequals(criterionName, toString(Tag::availableOutputDevicesAddresses))) { rule.criterion = AudioHalCapCriterionV2::make<Tag::availableOutputDevicesAddresses>(); rule.criterionTypeValue = AudioDeviceAddress::make<AudioDeviceAddress::Tag::id>(criterionValue); AudioHalCapCriterionV2::AvailableDevicesAddresses value; value.values.emplace_back(criterionValue); rule.criterionAndValue = AudioHalCapCriterionV2::make<Tag::availableOutputDevicesAddresses>(value); } else if (iequals(criterionName, toString(Tag::telephonyMode))) { rule.criterion = AudioHalCapCriterionV2::make<Tag::telephonyMode>(); rule.criterionTypeValue = VALUE_OR_RETURN(convertTelephonyModeToAidl(criterionValue)); AudioHalCapCriterionV2::TelephonyMode value; value.values.emplace_back(VALUE_OR_RETURN(convertTelephonyModeToAidl(criterionValue))); rule.criterionAndValue = AudioHalCapCriterionV2::make<Tag::telephonyMode>(value); } else if (!fastcmp<strncmp>(criterionName.c_str(), kXsdcForceConfigForUse, strlen(kXsdcForceConfigForUse))) { rule.criterion = AudioHalCapCriterionV2::make<Tag::forceConfigForUse>( VALUE_OR_RETURN(convertForceUseCriterionToAidl(criterionName))); rule.criterionTypeValue = VALUE_OR_RETURN(convertForcedConfigToAidl(criterionValue)); AudioHalCapCriterionV2::ForceConfigForUse value; value.forceUse = VALUE_OR_RETURN(convertForceUseCriterionToAidl(criterionName)); value.values.emplace_back(VALUE_OR_RETURN(convertForcedConfigToAidl(criterionValue))); rule.criterionAndValue = AudioHalCapCriterionV2::make<Tag::forceConfigForUse>(value); } else { LOG(ERROR) << __func__ << " unrecognized criterion " << criterionName; return unexpected(BAD_VALUE); Loading audio/aidl/vts/VtsHalAudioCoreConfigTargetTest.cpp +33 −19 Original line number Diff line number Diff line Loading @@ -355,7 +355,6 @@ class AudioCoreConfig : public testing::TestWithParam<std::string> { const AudioHalCapRule& rule, const std::vector<std::optional<AudioHalCapCriterionV2>>& criteria) { const auto& compoundRule = rule.compoundRule; using TypeTag = AudioHalCapCriterionV2::Type::Tag; if (rule.nestedRules.empty() && rule.criterionRules.empty()) { EXPECT_EQ(compoundRule, AudioHalCapRule::CompoundRule::ALL); } Loading @@ -365,8 +364,8 @@ class AudioCoreConfig : public testing::TestWithParam<std::string> { ValidateAudioHalConfigurationRule(nestedRule, criteria); } for (const auto& criterionRule : rule.criterionRules) { auto selectionCriterion = criterionRule.criterion; auto criterionValue = criterionRule.criterionTypeValue; auto selectionCriterion = criterionRule.criterionAndValue; auto criterionValue = criterionRule.criterionAndValue; auto matchesWhen = criterionRule.matchingRule; auto criteriaIt = find_if(criteria.begin(), criteria.end(), [&](const auto& criterion) { return criterion.has_value() && Loading @@ -377,50 +376,65 @@ class AudioCoreConfig : public testing::TestWithParam<std::string> { AudioHalCapCriterionV2 matchingCriterion = (*criteriaIt).value(); switch (selectionCriterion.getTag()) { case AudioHalCapCriterionV2::availableInputDevices: { EXPECT_EQ(criterionValue.getTag(), TypeTag::availableDevicesType); const auto& values = criterionValue.get<AudioHalCapCriterionV2::availableInputDevices>() .values; ASSERT_FALSE(values.empty()); validateAudioHalCapRule( matchingCriterion.get<AudioHalCapCriterionV2::availableInputDevices>(), criterionValue.get<TypeTag::availableDevicesType>(), matchesWhen); values[0], matchesWhen); break; } case AudioHalCapCriterionV2::availableOutputDevices: { EXPECT_EQ(criterionValue.getTag(), TypeTag::availableDevicesType); const auto& values = criterionValue.get<AudioHalCapCriterionV2::availableOutputDevices>() .values; ASSERT_FALSE(values.empty()); validateAudioHalCapRule( matchingCriterion.get<AudioHalCapCriterionV2::availableOutputDevices>(), criterionValue.get<TypeTag::availableDevicesType>(), matchesWhen); values[0], matchesWhen); break; } case AudioHalCapCriterionV2::availableInputDevicesAddresses: { EXPECT_EQ(criterionValue.getTag(), TypeTag::availableDevicesAddressesType); const auto& values = criterionValue .get<AudioHalCapCriterionV2::availableInputDevicesAddresses>() .values; ASSERT_FALSE(values.empty()); validateAudioHalCapRule( matchingCriterion .get<AudioHalCapCriterionV2::availableInputDevicesAddresses>(), criterionValue.get<TypeTag::availableDevicesAddressesType>(), matchesWhen); values[0], matchesWhen); break; } case AudioHalCapCriterionV2::availableOutputDevicesAddresses: { EXPECT_EQ(criterionValue.getTag(), TypeTag::availableDevicesAddressesType); const auto& values = criterionValue .get<AudioHalCapCriterionV2::availableOutputDevicesAddresses>() .values; ASSERT_FALSE(values.empty()); validateAudioHalCapRule( matchingCriterion .get<AudioHalCapCriterionV2::availableOutputDevicesAddresses>(), criterionValue.get<TypeTag::availableDevicesAddressesType>(), matchesWhen); values[0], matchesWhen); break; } case AudioHalCapCriterionV2::telephonyMode: { EXPECT_EQ(criterionValue.getTag(), TypeTag::telephonyModeType); const auto& values = criterionValue.get<AudioHalCapCriterionV2::telephonyMode>().values; ASSERT_FALSE(values.empty()); validateAudioHalCapRule( matchingCriterion.get<AudioHalCapCriterionV2::telephonyMode>(), criterionValue.get<TypeTag::telephonyModeType>(), matchesWhen); values[0], matchesWhen); break; } case AudioHalCapCriterionV2::forceConfigForUse: { EXPECT_EQ(criterionValue.getTag(), TypeTag::forcedConfigType); const auto& values = criterionValue.get<AudioHalCapCriterionV2::forceConfigForUse>().values; ASSERT_FALSE(values.empty()); validateAudioHalCapRule( matchingCriterion .get<AudioHalCapCriterionV2::forceConfigForUse>(), criterionValue.get<TypeTag::forcedConfigType>(), matchesWhen); matchingCriterion.get<AudioHalCapCriterionV2::forceConfigForUse>(), values[0], matchesWhen); break; } default: Loading Loading
audio/aidl/default/CapEngineConfigXmlConverter.cpp +24 −17 Original line number Diff line number Diff line Loading @@ -69,29 +69,36 @@ ConversionResult<AudioHalCapRule::CriterionRule> convertCriterionRuleToAidl( std::string criterionName = xsdcRule.getSelectionCriterion(); std::string criterionValue = xsdcRule.getValue(); if (iequals(criterionName, toString(Tag::availableInputDevices))) { rule.criterion = AudioHalCapCriterionV2::make<Tag::availableInputDevices>(); rule.criterionTypeValue = VALUE_OR_RETURN(convertDeviceTypeToAidl(gLegacyInputDevicePrefix + criterionValue)); AudioHalCapCriterionV2::AvailableDevices value; value.values.emplace_back(VALUE_OR_RETURN( convertDeviceTypeToAidl(gLegacyInputDevicePrefix + criterionValue))); rule.criterionAndValue = AudioHalCapCriterionV2::make<Tag::availableInputDevices>(value); } else if (iequals(criterionName, toString(Tag::availableOutputDevices))) { rule.criterion = AudioHalCapCriterionV2::make<Tag::availableOutputDevices>(); rule.criterionTypeValue = VALUE_OR_RETURN( convertDeviceTypeToAidl(gLegacyOutputDevicePrefix + criterionValue)); AudioHalCapCriterionV2::AvailableDevices value; value.values.emplace_back(VALUE_OR_RETURN( convertDeviceTypeToAidl(gLegacyOutputDevicePrefix + criterionValue))); rule.criterionAndValue = AudioHalCapCriterionV2::make<Tag::availableOutputDevices>(value); } else if (iequals(criterionName, toString(Tag::availableInputDevicesAddresses))) { rule.criterion = AudioHalCapCriterionV2::make<Tag::availableInputDevicesAddresses>(); rule.criterionTypeValue = AudioDeviceAddress::make<AudioDeviceAddress::Tag::id>(criterionValue); AudioHalCapCriterionV2::AvailableDevicesAddresses value; value.values.emplace_back(criterionValue); rule.criterionAndValue = AudioHalCapCriterionV2::make<Tag::availableInputDevicesAddresses>(value); } else if (iequals(criterionName, toString(Tag::availableOutputDevicesAddresses))) { rule.criterion = AudioHalCapCriterionV2::make<Tag::availableOutputDevicesAddresses>(); rule.criterionTypeValue = AudioDeviceAddress::make<AudioDeviceAddress::Tag::id>(criterionValue); AudioHalCapCriterionV2::AvailableDevicesAddresses value; value.values.emplace_back(criterionValue); rule.criterionAndValue = AudioHalCapCriterionV2::make<Tag::availableOutputDevicesAddresses>(value); } else if (iequals(criterionName, toString(Tag::telephonyMode))) { rule.criterion = AudioHalCapCriterionV2::make<Tag::telephonyMode>(); rule.criterionTypeValue = VALUE_OR_RETURN(convertTelephonyModeToAidl(criterionValue)); AudioHalCapCriterionV2::TelephonyMode value; value.values.emplace_back(VALUE_OR_RETURN(convertTelephonyModeToAidl(criterionValue))); rule.criterionAndValue = AudioHalCapCriterionV2::make<Tag::telephonyMode>(value); } else if (!fastcmp<strncmp>(criterionName.c_str(), kXsdcForceConfigForUse, strlen(kXsdcForceConfigForUse))) { rule.criterion = AudioHalCapCriterionV2::make<Tag::forceConfigForUse>( VALUE_OR_RETURN(convertForceUseCriterionToAidl(criterionName))); rule.criterionTypeValue = VALUE_OR_RETURN(convertForcedConfigToAidl(criterionValue)); AudioHalCapCriterionV2::ForceConfigForUse value; value.forceUse = VALUE_OR_RETURN(convertForceUseCriterionToAidl(criterionName)); value.values.emplace_back(VALUE_OR_RETURN(convertForcedConfigToAidl(criterionValue))); rule.criterionAndValue = AudioHalCapCriterionV2::make<Tag::forceConfigForUse>(value); } else { LOG(ERROR) << __func__ << " unrecognized criterion " << criterionName; return unexpected(BAD_VALUE); Loading
audio/aidl/vts/VtsHalAudioCoreConfigTargetTest.cpp +33 −19 Original line number Diff line number Diff line Loading @@ -355,7 +355,6 @@ class AudioCoreConfig : public testing::TestWithParam<std::string> { const AudioHalCapRule& rule, const std::vector<std::optional<AudioHalCapCriterionV2>>& criteria) { const auto& compoundRule = rule.compoundRule; using TypeTag = AudioHalCapCriterionV2::Type::Tag; if (rule.nestedRules.empty() && rule.criterionRules.empty()) { EXPECT_EQ(compoundRule, AudioHalCapRule::CompoundRule::ALL); } Loading @@ -365,8 +364,8 @@ class AudioCoreConfig : public testing::TestWithParam<std::string> { ValidateAudioHalConfigurationRule(nestedRule, criteria); } for (const auto& criterionRule : rule.criterionRules) { auto selectionCriterion = criterionRule.criterion; auto criterionValue = criterionRule.criterionTypeValue; auto selectionCriterion = criterionRule.criterionAndValue; auto criterionValue = criterionRule.criterionAndValue; auto matchesWhen = criterionRule.matchingRule; auto criteriaIt = find_if(criteria.begin(), criteria.end(), [&](const auto& criterion) { return criterion.has_value() && Loading @@ -377,50 +376,65 @@ class AudioCoreConfig : public testing::TestWithParam<std::string> { AudioHalCapCriterionV2 matchingCriterion = (*criteriaIt).value(); switch (selectionCriterion.getTag()) { case AudioHalCapCriterionV2::availableInputDevices: { EXPECT_EQ(criterionValue.getTag(), TypeTag::availableDevicesType); const auto& values = criterionValue.get<AudioHalCapCriterionV2::availableInputDevices>() .values; ASSERT_FALSE(values.empty()); validateAudioHalCapRule( matchingCriterion.get<AudioHalCapCriterionV2::availableInputDevices>(), criterionValue.get<TypeTag::availableDevicesType>(), matchesWhen); values[0], matchesWhen); break; } case AudioHalCapCriterionV2::availableOutputDevices: { EXPECT_EQ(criterionValue.getTag(), TypeTag::availableDevicesType); const auto& values = criterionValue.get<AudioHalCapCriterionV2::availableOutputDevices>() .values; ASSERT_FALSE(values.empty()); validateAudioHalCapRule( matchingCriterion.get<AudioHalCapCriterionV2::availableOutputDevices>(), criterionValue.get<TypeTag::availableDevicesType>(), matchesWhen); values[0], matchesWhen); break; } case AudioHalCapCriterionV2::availableInputDevicesAddresses: { EXPECT_EQ(criterionValue.getTag(), TypeTag::availableDevicesAddressesType); const auto& values = criterionValue .get<AudioHalCapCriterionV2::availableInputDevicesAddresses>() .values; ASSERT_FALSE(values.empty()); validateAudioHalCapRule( matchingCriterion .get<AudioHalCapCriterionV2::availableInputDevicesAddresses>(), criterionValue.get<TypeTag::availableDevicesAddressesType>(), matchesWhen); values[0], matchesWhen); break; } case AudioHalCapCriterionV2::availableOutputDevicesAddresses: { EXPECT_EQ(criterionValue.getTag(), TypeTag::availableDevicesAddressesType); const auto& values = criterionValue .get<AudioHalCapCriterionV2::availableOutputDevicesAddresses>() .values; ASSERT_FALSE(values.empty()); validateAudioHalCapRule( matchingCriterion .get<AudioHalCapCriterionV2::availableOutputDevicesAddresses>(), criterionValue.get<TypeTag::availableDevicesAddressesType>(), matchesWhen); values[0], matchesWhen); break; } case AudioHalCapCriterionV2::telephonyMode: { EXPECT_EQ(criterionValue.getTag(), TypeTag::telephonyModeType); const auto& values = criterionValue.get<AudioHalCapCriterionV2::telephonyMode>().values; ASSERT_FALSE(values.empty()); validateAudioHalCapRule( matchingCriterion.get<AudioHalCapCriterionV2::telephonyMode>(), criterionValue.get<TypeTag::telephonyModeType>(), matchesWhen); values[0], matchesWhen); break; } case AudioHalCapCriterionV2::forceConfigForUse: { EXPECT_EQ(criterionValue.getTag(), TypeTag::forcedConfigType); const auto& values = criterionValue.get<AudioHalCapCriterionV2::forceConfigForUse>().values; ASSERT_FALSE(values.empty()); validateAudioHalCapRule( matchingCriterion .get<AudioHalCapCriterionV2::forceConfigForUse>(), criterionValue.get<TypeTag::forcedConfigType>(), matchesWhen); matchingCriterion.get<AudioHalCapCriterionV2::forceConfigForUse>(), values[0], matchesWhen); break; } default: Loading