From ecba02ae0e501d5ff98dff319cf704e1ce0d3124 Mon Sep 17 00:00:00 2001 From: Frankie Lizcano Date: Tue, 12 Jul 2022 17:56:54 +0000 Subject: [PATCH] Improve Tuner VTS: Generate LnbRecord Combos This CL allows the VTS to read a vendor's configuration file, determine if the given devices could support the LnbRecord dataflow, and generate all combinations of units (frontend, record filter, dvr, lnb) to run them on corresponding integration tests. Bug: b/182519645 Test: vts-tradefed run vts --module VtsHalTvTunerTargetTest. Manual tests with different input configuration files. Change-Id: I470d593195d3f6e81cea9758b5758ec47ad3d21c --- .../functional/VtsHalTvTunerTargetTest.cpp | 14 +++-- .../VtsHalTvTunerTestConfigurations.h | 51 ++++++++++++++++++- 2 files changed, 61 insertions(+), 4 deletions(-) diff --git a/tv/tuner/aidl/vts/functional/VtsHalTvTunerTargetTest.cpp b/tv/tuner/aidl/vts/functional/VtsHalTvTunerTargetTest.cpp index 95061b583c..a6c523f3de 100644 --- a/tv/tuner/aidl/vts/functional/VtsHalTvTunerTargetTest.cpp +++ b/tv/tuner/aidl/vts/functional/VtsHalTvTunerTargetTest.cpp @@ -908,9 +908,17 @@ TEST_P(TunerRecordAidlTest, LnbRecordDataFlowWithTsRecordFilterTest) { if (!lnbRecord.support) { return; } - recordSingleFilterTestWithLnb(filterMap[lnbRecord.recordFilterId], - frontendMap[lnbRecord.frontendId], dvrMap[lnbRecord.dvrRecordId], - lnbMap[lnbRecord.lnbId]); + vector lnbRecord_configs = generateLnbRecordConfigurations(); + if (lnbRecord_configs.empty()) { + ALOGD("No frontends that support satellites."); + return; + } + for (auto& configuration : lnbRecord_configs) { + lnbRecord = configuration; + recordSingleFilterTestWithLnb(filterMap[lnbRecord.recordFilterId], + frontendMap[lnbRecord.frontendId], + dvrMap[lnbRecord.dvrRecordId], lnbMap[lnbRecord.lnbId]); + } } TEST_P(TunerFrontendAidlTest, TuneFrontend) { diff --git a/tv/tuner/aidl/vts/functional/VtsHalTvTunerTestConfigurations.h b/tv/tuner/aidl/vts/functional/VtsHalTvTunerTestConfigurations.h index aa38e4879b..bcc8c61e0d 100644 --- a/tv/tuner/aidl/vts/functional/VtsHalTvTunerTestConfigurations.h +++ b/tv/tuner/aidl/vts/functional/VtsHalTvTunerTestConfigurations.h @@ -248,6 +248,55 @@ static inline vector generateScanConfigurations() { return scan_configs; } +/* + * index 0 - frontends + * index 1 - record filter + * index 2 - Record Dvr + * index 3 - Lnb + */ +static inline vector generateLnbRecordCombinations() { + vector combinations; + vector> deviceIds{frontendIds, recordFilterIds, recordDvrIds, lnbIds}; + + const int frontendIndex = 0; + const int recordFilterIndex = 1; + const int dvrIndex = 2; + const int lnbIndex = 3; + + auto idCombinations = generateIdCombinations(deviceIds); + // TODO : Find a better way to vary diseqcMsgs, if at all + for (auto& combo : idCombinations) { + const string feId = combo[frontendIndex]; + auto type = frontendMap[feId].type; + if (type == FrontendType::DVBS || type == FrontendType::ISDBS || + type == FrontendType::ISDBS3) { + LnbRecordHardwareConnections mLnbRecord; + mLnbRecord.frontendId = feId; + mLnbRecord.recordFilterId = combo[recordFilterIndex]; + mLnbRecord.dvrRecordId = combo[dvrIndex]; + mLnbRecord.lnbId = combo[lnbIndex]; + mLnbRecord.diseqcMsgs = diseqcMsgs; + combinations.push_back(mLnbRecord); + } + } + + return combinations; +} + +static inline vector generateLnbRecordConfigurations() { + vector lnbRecord_configs; + if (configuredLnbRecord) { + ALOGD("Using LnbRecord configuration provided."); + lnbRecord_configs = {lnbRecord}; + } else { + ALOGD("LnbRecord not provided. Generating possible combinations. Consider adding it to " + "the configuration file."); + lnbRecord_configs = generateLnbRecordCombinations(); + } + + return lnbRecord_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 @@ -425,7 +474,7 @@ inline void determineDvrRecord() { return; } if (frontendMap.empty() && playbackDvrIds.empty()) { - ALOGD("Cannot support dvr record. No frontends and no playback dvr's"); + ALOGD("Cannot support dvr record. No frontends and no playback dvr's"); return; } if (hasSwFe && !hasHwFe && playbackDvrIds.empty()) {