diff --git a/tv/tuner/aidl/vts/functional/VtsHalTvTunerTargetTest.cpp b/tv/tuner/aidl/vts/functional/VtsHalTvTunerTargetTest.cpp index f78e508d6e..9a17d05a15 100644 --- a/tv/tuner/aidl/vts/functional/VtsHalTvTunerTargetTest.cpp +++ b/tv/tuner/aidl/vts/functional/VtsHalTvTunerTargetTest.cpp @@ -1297,12 +1297,20 @@ TEST_P(TunerDescramblerAidlTest, ScrambledBroadcastDataFlowMediaFiltersTestWithL if (!lnbDescrambling.support) { return; } - set filterConfs; - filterConfs.insert(static_cast(filterMap[lnbDescrambling.audioFilterId])); - filterConfs.insert(static_cast(filterMap[lnbDescrambling.videoFilterId])); - scrambledBroadcastTestWithLnb(filterConfs, frontendMap[lnbDescrambling.frontendId], - descramblerMap[lnbDescrambling.descramblerId], - lnbMap[lnbDescrambling.lnbId]); + auto lnbDescrambling_configs = generateLnbDescramblingConfigurations(); + if (lnbDescrambling_configs.empty()) { + ALOGD("No frontends that support satellites."); + return; + } + for (auto& configuration : lnbDescrambling_configs) { + lnbDescrambling = configuration; + set filterConfs; + filterConfs.insert(static_cast(filterMap[lnbDescrambling.audioFilterId])); + filterConfs.insert(static_cast(filterMap[lnbDescrambling.videoFilterId])); + scrambledBroadcastTestWithLnb(filterConfs, frontendMap[lnbDescrambling.frontendId], + descramblerMap[lnbDescrambling.descramblerId], + lnbMap[lnbDescrambling.lnbId]); + } } INSTANTIATE_TEST_SUITE_P(PerInstance, TunerBroadcastAidlTest, diff --git a/tv/tuner/aidl/vts/functional/VtsHalTvTunerTestConfigurations.h b/tv/tuner/aidl/vts/functional/VtsHalTvTunerTestConfigurations.h index 2132994a38..fea5f83826 100644 --- a/tv/tuner/aidl/vts/functional/VtsHalTvTunerTestConfigurations.h +++ b/tv/tuner/aidl/vts/functional/VtsHalTvTunerTestConfigurations.h @@ -533,6 +533,54 @@ static inline vector generateLiveConfiguration return live_configs; } +static inline vector generateLnbDescramblingCombinations() { + vector combinations; + vector> deviceIds{frontendIds, audioFilterIds, lnbIds, descramblerIds}; + + const int frontendIdIndex = 0; + const int audioFilterIdIndex = 1; + const int lnbIdIndex = 2; + const int descramblerIdIndex = 3; + + auto idCombinations = generateIdCombinations(deviceIds); + // TODO : Find a better way to vary diseqcMsgs, if at all + for (auto& combo : idCombinations) { + const string feId = combo[frontendIdIndex]; + auto type = frontendMap[feId].type; + if (type == FrontendType::DVBS || type == FrontendType::ISDBS || + type == FrontendType::ISDBS3) { + LnbDescramblingHardwareConnections mLnbDescrambling; + mLnbDescrambling.support = true; + mLnbDescrambling.frontendId = feId; + mLnbDescrambling.audioFilterId = combo[audioFilterIdIndex]; + const int videoFilterIdIndex = find(audioFilterIds.begin(), audioFilterIds.end(), + mLnbDescrambling.audioFilterId) - + audioFilterIds.begin(); + mLnbDescrambling.videoFilterId = videoFilterIds[videoFilterIdIndex]; + mLnbDescrambling.lnbId = combo[lnbIdIndex]; + mLnbDescrambling.descramblerId = combo[descramblerIdIndex]; + mLnbDescrambling.diseqcMsgs = diseqcMsgs; + combinations.push_back(mLnbDescrambling); + } + } + + return combinations; +} + +static inline vector generateLnbDescramblingConfigurations() { + vector lnbDescrambling_configs; + if (configuredLnbDescrambling) { + ALOGD("Using LnbDescrambling configuration provided"); + lnbDescrambling_configs = {lnbDescrambling}; + } else { + ALOGD("LnbDescrambling not provided. Generating possible combinations. Consider adding it " + "to the configuration file."); + lnbDescrambling_configs = generateLnbDescramblingCombinations(); + } + + return lnbDescrambling_configs; +} + /** Config all the frontends that would be used in the tests */ inline void initFrontendConfig() { // The test will use the internal default fe when default fe is connected to any data flow @@ -721,6 +769,15 @@ inline void determineDvrRecord() { record.support = true; } +inline void determineLnbDescrambling() { + if (frontendIds.empty() || audioFilterIds.empty() || videoFilterIds.empty() || lnbIds.empty() || + descramblerIds.empty()) { + return; + } + ALOGD("Can support LnbDescrambling."); + lnbDescrambling.support = true; +} + /** Read the vendor configurations of which hardware to use for each test cases/data flows */ inline void connectHardwaresToTestCases() { TunerTestingConfigAidlReader1_0::connectLiveBroadcast(live); @@ -743,6 +800,7 @@ inline void determineDataFlows() { determineLive(); determineDescrambling(); determineDvrRecord(); + determineLnbDescrambling(); } inline bool validateConnections() {