Add lnb/timeFilter dynamic configuration into Tuner 1.0 VTS
Test: atest VtsHalTvTunerV1_0TargetTest Bug: 182519645 CTS-Coverage-Bug: 184077478 Change-Id: I75d7fb53054120c6ef5ce36a0bea1e4e334183c7 Merged-In: I75d7fb53054120c6ef5ce36a0bea1e4e334183c7
This commit is contained in:
parent
1d603678ae
commit
78e3dadf53
9 changed files with 471 additions and 123 deletions
|
@ -48,10 +48,11 @@ AssertionResult LnbTests::openLnbById(uint32_t lnbId) {
|
|||
return AssertionResult(status == Result::SUCCESS);
|
||||
}
|
||||
|
||||
AssertionResult LnbTests::openLnbByName(string lnbName) {
|
||||
AssertionResult LnbTests::openLnbByName(string lnbName, uint32_t& id) {
|
||||
Result status;
|
||||
mService->openLnbByName(lnbName, [&](Result result, uint32_t /*lnbId*/, const sp<ILnb>& lnb) {
|
||||
mService->openLnbByName(lnbName, [&](Result result, uint32_t lnbId, const sp<ILnb>& lnb) {
|
||||
mLnb = lnb;
|
||||
id = lnbId;
|
||||
status = result;
|
||||
});
|
||||
|
||||
|
|
|
@ -64,7 +64,7 @@ class LnbTests {
|
|||
|
||||
AssertionResult getLnbIds(vector<uint32_t>& ids);
|
||||
AssertionResult openLnbById(uint32_t lnbId);
|
||||
AssertionResult openLnbByName(string lnbName);
|
||||
AssertionResult openLnbByName(string lnbName, uint32_t& lnbId);
|
||||
AssertionResult setLnbCallback();
|
||||
AssertionResult setVoltage(LnbVoltage voltage);
|
||||
AssertionResult setTone(LnbTone tone);
|
||||
|
|
|
@ -56,7 +56,7 @@ void TunerFilterHidlTest::configSingleFilterInDemuxTest(FilterConfig filterConf,
|
|||
}
|
||||
|
||||
void TunerFilterHidlTest::testTimeFilter(TimeFilterConfig filterConf) {
|
||||
if (!filterConf.supportTimeFilter) {
|
||||
if (!timeFilter.support) {
|
||||
return;
|
||||
}
|
||||
uint32_t demuxId;
|
||||
|
@ -64,11 +64,8 @@ void TunerFilterHidlTest::testTimeFilter(TimeFilterConfig filterConf) {
|
|||
DemuxCapabilities caps;
|
||||
|
||||
ASSERT_TRUE(mDemuxTests.openDemux(demux, demuxId));
|
||||
// TODO: add time filter hardware support checker
|
||||
ASSERT_TRUE(mDemuxTests.getDemuxCaps(caps));
|
||||
if (!caps.bTimeFilter) {
|
||||
return;
|
||||
}
|
||||
ASSERT_TRUE(caps.bTimeFilter);
|
||||
mFilterTests.setDemux(demux);
|
||||
ASSERT_TRUE(mFilterTests.openTimeFilterInDemux());
|
||||
ASSERT_TRUE(mFilterTests.setTimeStamp(filterConf.timeStamp));
|
||||
|
@ -116,14 +113,16 @@ void TunerBroadcastHidlTest::broadcastSingleFilterTest(FilterConfig filterConf,
|
|||
void TunerBroadcastHidlTest::broadcastSingleFilterTestWithLnb(FilterConfig filterConf,
|
||||
FrontendConfig frontendConf,
|
||||
LnbConfig lnbConf) {
|
||||
vector<uint32_t> ids;
|
||||
ASSERT_TRUE(mLnbTests.getLnbIds(ids));
|
||||
if (ids.size() == 0) {
|
||||
return;
|
||||
if (lnbConf.name.compare(emptyHardwareId) == 0) {
|
||||
vector<uint32_t> ids;
|
||||
ASSERT_TRUE(mLnbTests.getLnbIds(ids));
|
||||
ASSERT_TRUE(ids.size() > 0);
|
||||
ASSERT_TRUE(mLnbTests.openLnbById(ids[0]));
|
||||
mLnbId = &ids[0];
|
||||
} else {
|
||||
mLnbId = (uint32_t*)malloc(sizeof(uint32_t));
|
||||
ASSERT_TRUE(mLnbTests.openLnbByName(lnbConf.name, *mLnbId));
|
||||
}
|
||||
ASSERT_TRUE(ids.size() > 0);
|
||||
ASSERT_TRUE(mLnbTests.openLnbById(ids[0]));
|
||||
mLnbId = &ids[0];
|
||||
ASSERT_TRUE(mLnbTests.setLnbCallback());
|
||||
ASSERT_TRUE(mLnbTests.setVoltage(lnbConf.voltage));
|
||||
ASSERT_TRUE(mLnbTests.setTone(lnbConf.tone));
|
||||
|
@ -212,18 +211,23 @@ void TunerRecordHidlTest::recordSingleFilterTest(FilterConfig filterConf,
|
|||
void TunerRecordHidlTest::recordSingleFilterTestWithLnb(FilterConfig filterConf,
|
||||
FrontendConfig frontendConf,
|
||||
DvrConfig dvrConf, LnbConfig lnbConf) {
|
||||
vector<uint32_t> ids;
|
||||
ASSERT_TRUE(mLnbTests.getLnbIds(ids));
|
||||
if (ids.size() == 0) {
|
||||
return;
|
||||
if (lnbConf.name.compare(emptyHardwareId) == 0) {
|
||||
vector<uint32_t> ids;
|
||||
ASSERT_TRUE(mLnbTests.getLnbIds(ids));
|
||||
ASSERT_TRUE(ids.size() > 0);
|
||||
ASSERT_TRUE(mLnbTests.openLnbById(ids[0]));
|
||||
mLnbId = &ids[0];
|
||||
} else {
|
||||
mLnbId = (uint32_t*)malloc(sizeof(uint32_t));
|
||||
ASSERT_TRUE(mLnbTests.openLnbByName(lnbConf.name, *mLnbId));
|
||||
}
|
||||
ASSERT_TRUE(ids.size() > 0);
|
||||
ASSERT_TRUE(mLnbTests.openLnbById(ids[0]));
|
||||
mLnbId = &ids[0];
|
||||
ASSERT_TRUE(mLnbTests.setLnbCallback());
|
||||
ASSERT_TRUE(mLnbTests.setVoltage(lnbConf.voltage));
|
||||
ASSERT_TRUE(mLnbTests.setTone(lnbConf.tone));
|
||||
ASSERT_TRUE(mLnbTests.setSatellitePosition(lnbConf.position));
|
||||
for (auto msgName : lnbRecord.diseqcMsgs) {
|
||||
ASSERT_TRUE(mLnbTests.sendDiseqcMessage(diseqcMsgMap[msgName]));
|
||||
}
|
||||
recordSingleFilterTest(filterConf, frontendConf, dvrConf);
|
||||
ASSERT_TRUE(mLnbTests.closeLnb());
|
||||
mLnbId = nullptr;
|
||||
|
@ -343,37 +347,24 @@ TEST_P(TunerFrontendHidlTest, BlindScanFrontend) {
|
|||
mFrontendTests.scanTest(frontendMap[scan.frontendId], FrontendScanType::SCAN_BLIND);
|
||||
}
|
||||
|
||||
TEST_P(TunerLnbHidlTest, OpenLnbByName) {
|
||||
description("Open and configure an Lnb with name then send a diseqc msg to it.");
|
||||
// TODO: add lnb hardware support checker
|
||||
vector<uint32_t> ids;
|
||||
ASSERT_TRUE(mLnbTests.getLnbIds(ids));
|
||||
if (ids.size() == 0) {
|
||||
return;
|
||||
}
|
||||
ASSERT_TRUE(mLnbTests.openLnbByName(lnbArray[LNB_EXTERNAL].name));
|
||||
ASSERT_TRUE(mLnbTests.setLnbCallback());
|
||||
ASSERT_TRUE(mLnbTests.setVoltage(lnbArray[LNB_EXTERNAL].voltage));
|
||||
ASSERT_TRUE(mLnbTests.setTone(lnbArray[LNB_EXTERNAL].tone));
|
||||
ASSERT_TRUE(mLnbTests.setSatellitePosition(lnbArray[LNB_EXTERNAL].position));
|
||||
ASSERT_TRUE(mLnbTests.sendDiseqcMessage(diseqcMsgArray[DISEQC_POWER_ON]));
|
||||
ASSERT_TRUE(mLnbTests.closeLnb());
|
||||
}
|
||||
|
||||
TEST_P(TunerLnbHidlTest, SendDiseqcMessageToLnb) {
|
||||
description("Open and configure an Lnb with specific settings then send a diseqc msg to it.");
|
||||
vector<uint32_t> ids;
|
||||
ASSERT_TRUE(mLnbTests.getLnbIds(ids));
|
||||
if (ids.size() == 0) {
|
||||
return;
|
||||
if (lnbMap[lnbLive.lnbId].name.compare(emptyHardwareId) == 0) {
|
||||
vector<uint32_t> ids;
|
||||
ASSERT_TRUE(mLnbTests.getLnbIds(ids));
|
||||
ASSERT_TRUE(ids.size() > 0);
|
||||
ASSERT_TRUE(mLnbTests.openLnbById(ids[0]));
|
||||
} else {
|
||||
uint32_t id;
|
||||
ASSERT_TRUE(mLnbTests.openLnbByName(lnbMap[lnbLive.lnbId].name, id));
|
||||
}
|
||||
ASSERT_TRUE(ids.size() > 0);
|
||||
ASSERT_TRUE(mLnbTests.openLnbById(ids[0]));
|
||||
ASSERT_TRUE(mLnbTests.setLnbCallback());
|
||||
ASSERT_TRUE(mLnbTests.setVoltage(lnbArray[LNB0].voltage));
|
||||
ASSERT_TRUE(mLnbTests.setTone(lnbArray[LNB0].tone));
|
||||
ASSERT_TRUE(mLnbTests.setSatellitePosition(lnbArray[LNB0].position));
|
||||
ASSERT_TRUE(mLnbTests.sendDiseqcMessage(diseqcMsgArray[DISEQC_POWER_ON]));
|
||||
ASSERT_TRUE(mLnbTests.setVoltage(lnbMap[lnbLive.lnbId].voltage));
|
||||
ASSERT_TRUE(mLnbTests.setTone(lnbMap[lnbLive.lnbId].tone));
|
||||
ASSERT_TRUE(mLnbTests.setSatellitePosition(lnbMap[lnbLive.lnbId].position));
|
||||
for (auto msgName : lnbLive.diseqcMsgs) {
|
||||
ASSERT_TRUE(mLnbTests.sendDiseqcMessage(diseqcMsgMap[msgName]));
|
||||
}
|
||||
ASSERT_TRUE(mLnbTests.closeLnb());
|
||||
}
|
||||
|
||||
|
@ -469,7 +460,7 @@ TEST_P(TunerFilterHidlTest, SetFilterLinkage) {
|
|||
TEST_P(TunerFilterHidlTest, testTimeFilter) {
|
||||
description("Open a timer filter in Demux and set time stamp.");
|
||||
// TODO use paramterized tests
|
||||
testTimeFilter(timeFilterArray[TIMER0]);
|
||||
testTimeFilter(timeFilterMap[timeFilter.timeFilterId]);
|
||||
}
|
||||
|
||||
TEST_P(TunerBroadcastHidlTest, BroadcastDataFlowVideoFilterTest) {
|
||||
|
@ -501,7 +492,7 @@ TEST_P(TunerBroadcastHidlTest, LnbBroadcastDataFlowVideoFilterTest) {
|
|||
return;
|
||||
}
|
||||
broadcastSingleFilterTestWithLnb(filterMap[lnbLive.videoFilterId],
|
||||
frontendMap[lnbLive.frontendId], lnbArray[LNB0]);
|
||||
frontendMap[lnbLive.frontendId], lnbMap[lnbLive.lnbId]);
|
||||
}
|
||||
|
||||
TEST_P(TunerPlaybackHidlTest, PlaybackDataFlowWithTsSectionFilterTest) {
|
||||
|
@ -538,7 +529,7 @@ TEST_P(TunerRecordHidlTest, LnbRecordDataFlowWithTsRecordFilterTest) {
|
|||
}
|
||||
recordSingleFilterTestWithLnb(filterMap[lnbRecord.recordFilterId],
|
||||
frontendMap[lnbRecord.frontendId], dvrMap[lnbRecord.dvrRecordId],
|
||||
lnbArray[LNB0]);
|
||||
lnbMap[lnbRecord.lnbId]);
|
||||
}
|
||||
|
||||
TEST_P(TunerDescramblerHidlTest, CreateDescrambler) {
|
||||
|
|
|
@ -35,14 +35,14 @@ bool initConfiguration() {
|
|||
initFrontendConfig();
|
||||
initFilterConfig();
|
||||
initDvrConfig();
|
||||
initLnbConfig();
|
||||
initTimeFilterConfig();
|
||||
connectHardwaresToTestCases();
|
||||
if (!validateConnections()) {
|
||||
ALOGW("[vts] failed to validate connections.");
|
||||
return false;
|
||||
}
|
||||
|
||||
initLnbConfig();
|
||||
initTimeFilterConfig();
|
||||
initDescramblerConfig();
|
||||
|
||||
return true;
|
||||
|
|
|
@ -79,46 +79,17 @@ const uint32_t FMQ_SIZE_16M = 0x1000000;
|
|||
" \"track_types\": [ ] " \
|
||||
"} "
|
||||
|
||||
typedef enum {
|
||||
TIMER0,
|
||||
TIMER_MAX,
|
||||
} TimeFilter;
|
||||
|
||||
typedef enum {
|
||||
SOURCE,
|
||||
SINK,
|
||||
LINKAGE_DIR,
|
||||
} Linkage;
|
||||
|
||||
typedef enum {
|
||||
LNB0,
|
||||
LNB_EXTERNAL,
|
||||
LNB_MAX,
|
||||
} Lnb;
|
||||
|
||||
typedef enum {
|
||||
DISEQC_POWER_ON,
|
||||
DISEQC_MAX,
|
||||
} Diseqc;
|
||||
|
||||
typedef enum {
|
||||
DESC_0,
|
||||
DESC_MAX,
|
||||
} Descrambler;
|
||||
|
||||
struct TimeFilterConfig {
|
||||
bool supportTimeFilter;
|
||||
uint64_t timeStamp;
|
||||
};
|
||||
|
||||
struct LnbConfig {
|
||||
bool usingLnb;
|
||||
string name;
|
||||
LnbVoltage voltage;
|
||||
LnbTone tone;
|
||||
LnbPosition position;
|
||||
};
|
||||
|
||||
struct DescramblerConfig {
|
||||
uint32_t casSystemId;
|
||||
string provisionStr;
|
||||
|
@ -126,9 +97,6 @@ struct DescramblerConfig {
|
|||
};
|
||||
|
||||
// TODO: remove all the manual config array after the dynamic config refactoring is done.
|
||||
static LnbConfig lnbArray[LNB_MAX];
|
||||
static vector<uint8_t> diseqcMsgArray[DISEQC_MAX];
|
||||
static TimeFilterConfig timeFilterArray[TIMER_MAX];
|
||||
static DemuxFilterType filterLinkageTypes[LINKAGE_DIR][FILTER_MAIN_TYPE_BIT_COUNT];
|
||||
static DescramblerConfig descramblerArray[DESC_MAX];
|
||||
|
||||
|
@ -136,6 +104,9 @@ static DescramblerConfig descramblerArray[DESC_MAX];
|
|||
static map<string, FrontendConfig> frontendMap;
|
||||
static map<string, FilterConfig> filterMap;
|
||||
static map<string, DvrConfig> dvrMap;
|
||||
static map<string, LnbConfig> lnbMap;
|
||||
static map<string, TimeFilterConfig> timeFilterMap;
|
||||
static map<string, vector<uint8_t>> diseqcMsgMap;
|
||||
|
||||
// Hardware and test cases connections
|
||||
static LiveBroadcastHardwareConnections live;
|
||||
|
@ -145,6 +116,7 @@ static DvrRecordHardwareConnections record;
|
|||
static DescramblingHardwareConnections descrambling;
|
||||
static LnbLiveHardwareConnections lnbLive;
|
||||
static LnbRecordHardwareConnections lnbRecord;
|
||||
static TimeFilterHardwareConnections timeFilter;
|
||||
|
||||
/** Config all the frontends that would be used in the tests */
|
||||
inline void initFrontendConfig() {
|
||||
|
@ -202,6 +174,19 @@ inline void initDvrConfig() {
|
|||
TunerTestingConfigReader::readDvrConfig1_0(dvrMap);
|
||||
};
|
||||
|
||||
/** Config all the lnbs that would be used in the tests */
|
||||
inline void initLnbConfig() {
|
||||
// Read customized config
|
||||
TunerTestingConfigReader::readLnbConfig1_0(lnbMap);
|
||||
TunerTestingConfigReader::readDiseqcMessages(diseqcMsgMap);
|
||||
};
|
||||
|
||||
/** Config all the time filters that would be used in the tests */
|
||||
inline void initTimeFilterConfig() {
|
||||
// Read customized config
|
||||
TunerTestingConfigReader::readTimeFilterConfig1_0(timeFilterMap);
|
||||
};
|
||||
|
||||
/** Read the vendor configurations of which hardware to use for each test cases/data flows */
|
||||
inline void connectHardwaresToTestCases() {
|
||||
TunerTestingConfigReader::connectLiveBroadcast(live);
|
||||
|
@ -211,6 +196,7 @@ inline void connectHardwaresToTestCases() {
|
|||
TunerTestingConfigReader::connectDescrambling(descrambling);
|
||||
TunerTestingConfigReader::connectLnbLive(lnbLive);
|
||||
TunerTestingConfigReader::connectLnbRecord(lnbRecord);
|
||||
TunerTestingConfigReader::connectTimeFilter(timeFilter);
|
||||
};
|
||||
|
||||
inline bool validateConnections() {
|
||||
|
@ -233,14 +219,12 @@ inline bool validateConnections() {
|
|||
? dvrMap.find(live.dvrSoftwareFeId) != dvrMap.end()
|
||||
: true;
|
||||
dvrIsValid &= playback.support ? dvrMap.find(playback.dvrId) != dvrMap.end() : true;
|
||||
|
||||
if (record.support) {
|
||||
if (frontendMap[record.frontendId].isSoftwareFe) {
|
||||
dvrIsValid &= dvrMap.find(record.dvrSoftwareFeId) != dvrMap.end();
|
||||
}
|
||||
dvrIsValid &= dvrMap.find(record.dvrRecordId) != dvrMap.end();
|
||||
}
|
||||
|
||||
if (descrambling.support && frontendMap[descrambling.frontendId].isSoftwareFe) {
|
||||
dvrIsValid &= dvrMap.find(descrambling.dvrSoftwareFeId) != dvrMap.end();
|
||||
}
|
||||
|
@ -252,24 +236,19 @@ inline bool validateConnections() {
|
|||
|
||||
bool filterIsValid = filterMap.find(live.audioFilterId) != filterMap.end() &&
|
||||
filterMap.find(live.videoFilterId) != filterMap.end();
|
||||
|
||||
filterIsValid &= playback.support
|
||||
? (filterMap.find(playback.audioFilterId) != filterMap.end() &&
|
||||
filterMap.find(playback.videoFilterId) != filterMap.end())
|
||||
: true;
|
||||
|
||||
filterIsValid &=
|
||||
record.support ? filterMap.find(record.recordFilterId) != filterMap.end() : true;
|
||||
|
||||
filterIsValid &= descrambling.support
|
||||
? (filterMap.find(descrambling.audioFilterId) != filterMap.end() &&
|
||||
filterMap.find(descrambling.videoFilterId) != filterMap.end())
|
||||
: true;
|
||||
|
||||
filterIsValid &= lnbLive.support ? (filterMap.find(lnbLive.audioFilterId) != filterMap.end() &&
|
||||
filterMap.find(lnbLive.videoFilterId) != filterMap.end())
|
||||
: true;
|
||||
|
||||
filterIsValid &=
|
||||
lnbRecord.support ? filterMap.find(lnbRecord.recordFilterId) != filterMap.end() : true;
|
||||
|
||||
|
@ -278,34 +257,35 @@ inline bool validateConnections() {
|
|||
return false;
|
||||
}
|
||||
|
||||
bool lnbIsValid = lnbLive.support ? lnbMap.find(lnbLive.lnbId) != lnbMap.end() : true;
|
||||
lnbIsValid &= lnbRecord.support ? lnbMap.find(lnbRecord.lnbId) != lnbMap.end() : true;
|
||||
|
||||
if (!lnbIsValid) {
|
||||
ALOGW("[vts config] dynamic config lnb connection is invalid.");
|
||||
return false;
|
||||
}
|
||||
|
||||
bool diseqcMsgIsValid = true;
|
||||
if (lnbLive.support) {
|
||||
for (auto msgName : lnbLive.diseqcMsgs) {
|
||||
diseqcMsgIsValid &= diseqcMsgMap.find(msgName) != diseqcMsgMap.end();
|
||||
}
|
||||
}
|
||||
if (lnbRecord.support) {
|
||||
for (auto msgName : lnbRecord.diseqcMsgs) {
|
||||
diseqcMsgIsValid &= diseqcMsgMap.find(msgName) != diseqcMsgMap.end();
|
||||
}
|
||||
}
|
||||
|
||||
if (!diseqcMsgIsValid) {
|
||||
ALOGW("[vts config] dynamic config diseqcMsg sender is invalid.");
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// TODO: remove all the manual configs after the dynamic config refactoring is done.
|
||||
/** Configuration array for the Lnb test */
|
||||
inline void initLnbConfig() {
|
||||
lnbArray[LNB0].usingLnb = true;
|
||||
lnbArray[LNB0].voltage = LnbVoltage::VOLTAGE_12V;
|
||||
lnbArray[LNB0].tone = LnbTone::NONE;
|
||||
lnbArray[LNB0].position = LnbPosition::UNDEFINED;
|
||||
lnbArray[LNB_EXTERNAL].usingLnb = true;
|
||||
lnbArray[LNB_EXTERNAL].name = "default_lnb_external";
|
||||
lnbArray[LNB_EXTERNAL].voltage = LnbVoltage::VOLTAGE_5V;
|
||||
lnbArray[LNB_EXTERNAL].tone = LnbTone::NONE;
|
||||
lnbArray[LNB_EXTERNAL].position = LnbPosition::UNDEFINED;
|
||||
};
|
||||
|
||||
/** Diseqc messages array for the Lnb test */
|
||||
inline void initDiseqcMsg() {
|
||||
diseqcMsgArray[DISEQC_POWER_ON] = {0xE, 0x0, 0x0, 0x0, 0x0, 0x3};
|
||||
};
|
||||
|
||||
/** Configuration array for the timer filter test */
|
||||
inline void initTimeFilterConfig() {
|
||||
timeFilterArray[TIMER0].supportTimeFilter = true;
|
||||
timeFilterArray[TIMER0].timeStamp = 1;
|
||||
}
|
||||
|
||||
/** Configuration array for the descrambler test */
|
||||
inline void initDescramblerConfig() {
|
||||
descramblerArray[DESC_0].casSystemId = CLEAR_KEY_SYSTEM_ID;
|
||||
|
|
|
@ -90,6 +90,17 @@ struct DvrConfig {
|
|||
string playbackInputFile;
|
||||
};
|
||||
|
||||
struct LnbConfig {
|
||||
string name;
|
||||
LnbVoltage voltage;
|
||||
LnbTone tone;
|
||||
LnbPosition position;
|
||||
};
|
||||
|
||||
struct TimeFilterConfig {
|
||||
uint64_t timeStamp;
|
||||
};
|
||||
|
||||
struct LiveBroadcastHardwareConnections {
|
||||
string frontendId;
|
||||
string dvrSoftwareFeId;
|
||||
|
@ -137,8 +148,9 @@ struct LnbLiveHardwareConnections {
|
|||
string frontendId;
|
||||
string audioFilterId;
|
||||
string videoFilterId;
|
||||
/* list string of extra filters;
|
||||
string lnbId; */
|
||||
string lnbId;
|
||||
vector<string> diseqcMsgs;
|
||||
/* list string of extra filters; */
|
||||
};
|
||||
|
||||
struct LnbRecordHardwareConnections {
|
||||
|
@ -146,8 +158,14 @@ struct LnbRecordHardwareConnections {
|
|||
string frontendId;
|
||||
string dvrRecordId;
|
||||
string recordFilterId;
|
||||
/* list string of extra filters;
|
||||
string lnbId; */
|
||||
string lnbId;
|
||||
vector<string> diseqcMsgs;
|
||||
/* list string of extra filters; */
|
||||
};
|
||||
|
||||
struct TimeFilterHardwareConnections {
|
||||
bool support;
|
||||
string timeFilterId;
|
||||
};
|
||||
|
||||
struct TunerTestingConfigReader {
|
||||
|
@ -290,6 +308,49 @@ struct TunerTestingConfigReader {
|
|||
}
|
||||
}
|
||||
|
||||
static void readLnbConfig1_0(map<string, LnbConfig>& lnbMap) {
|
||||
auto hardwareConfig = getHardwareConfig();
|
||||
if (hardwareConfig.hasLnbs()) {
|
||||
auto lnbs = *hardwareConfig.getFirstLnbs();
|
||||
for (auto lnbConfig : lnbs.getLnb()) {
|
||||
string id = lnbConfig.getId();
|
||||
if (lnbConfig.hasName()) {
|
||||
lnbMap[id].name = lnbConfig.getName();
|
||||
} else {
|
||||
lnbMap[id].name = emptyHardwareId;
|
||||
}
|
||||
lnbMap[id].voltage = static_cast<LnbVoltage>(lnbConfig.getVoltage());
|
||||
lnbMap[id].tone = static_cast<LnbTone>(lnbConfig.getTone());
|
||||
lnbMap[id].position = static_cast<LnbPosition>(lnbConfig.getPosition());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void readDiseqcMessages(map<string, vector<uint8_t>>& diseqcMsgMap) {
|
||||
auto hardwareConfig = getHardwareConfig();
|
||||
if (hardwareConfig.hasDiseqcMessages()) {
|
||||
auto msgs = *hardwareConfig.getFirstDiseqcMessages();
|
||||
for (auto msgConfig : msgs.getDiseqcMessage()) {
|
||||
string name = msgConfig.getMsgName();
|
||||
for (uint8_t atom : msgConfig.getMsgBody()) {
|
||||
diseqcMsgMap[name].push_back(atom);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void readTimeFilterConfig1_0(map<string, TimeFilterConfig>& timeFilterMap) {
|
||||
auto hardwareConfig = getHardwareConfig();
|
||||
if (hardwareConfig.hasTimeFilters()) {
|
||||
auto timeFilters = *hardwareConfig.getFirstTimeFilters();
|
||||
for (auto timeFilterConfig : timeFilters.getTimeFilter()) {
|
||||
string id = timeFilterConfig.getId();
|
||||
timeFilterMap[id].timeStamp =
|
||||
static_cast<uint64_t>(timeFilterConfig.getTimeStamp());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void connectLiveBroadcast(LiveBroadcastHardwareConnections& live) {
|
||||
auto liveConfig = *getDataFlowConfiguration().getFirstClearLiveBroadcast();
|
||||
live.frontendId = liveConfig.getFrontendConnection();
|
||||
|
@ -377,6 +438,12 @@ struct TunerTestingConfigReader {
|
|||
lnbLive.frontendId = lnbLiveConfig.getFrontendConnection();
|
||||
lnbLive.audioFilterId = lnbLiveConfig.getAudioFilterConnection();
|
||||
lnbLive.videoFilterId = lnbLiveConfig.getVideoFilterConnection();
|
||||
lnbLive.lnbId = lnbLiveConfig.getLnbConnection();
|
||||
if (lnbLiveConfig.hasDiseqcMsgSender()) {
|
||||
for (auto msgName : lnbLiveConfig.getDiseqcMsgSender()) {
|
||||
lnbLive.diseqcMsgs.push_back(msgName);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void connectLnbRecord(LnbRecordHardwareConnections& lnbRecord) {
|
||||
|
@ -390,6 +457,23 @@ struct TunerTestingConfigReader {
|
|||
lnbRecord.frontendId = lnbRecordConfig.getFrontendConnection();
|
||||
lnbRecord.recordFilterId = lnbRecordConfig.getRecordFilterConnection();
|
||||
lnbRecord.dvrRecordId = lnbRecordConfig.getDvrRecordConnection();
|
||||
lnbRecord.lnbId = lnbRecordConfig.getLnbConnection();
|
||||
if (lnbRecordConfig.hasDiseqcMsgSender()) {
|
||||
for (auto msgName : lnbRecordConfig.getDiseqcMsgSender()) {
|
||||
lnbRecord.diseqcMsgs.push_back(msgName);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void connectTimeFilter(TimeFilterHardwareConnections& timeFilter) {
|
||||
auto dataFlow = getDataFlowConfiguration();
|
||||
if (dataFlow.hasTimeFilter()) {
|
||||
timeFilter.support = true;
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
auto timeFilterConfig = *dataFlow.getFirstTimeFilter();
|
||||
timeFilter.timeFilterId = timeFilterConfig.getTimeFilterConnection();
|
||||
}
|
||||
|
||||
private:
|
||||
|
|
|
@ -16,6 +16,7 @@ package android.media.tuner.testing.configuration.V1_0 {
|
|||
method @Nullable public android.media.tuner.testing.configuration.V1_0.DataFlowConfiguration.LnbLive getLnbLive();
|
||||
method @Nullable public android.media.tuner.testing.configuration.V1_0.DataFlowConfiguration.LnbRecord getLnbRecord();
|
||||
method @Nullable public android.media.tuner.testing.configuration.V1_0.DataFlowConfiguration.Scan getScan();
|
||||
method @Nullable public android.media.tuner.testing.configuration.V1_0.DataFlowConfiguration.TimeFilter getTimeFilter();
|
||||
method public void setClearLiveBroadcast(@Nullable android.media.tuner.testing.configuration.V1_0.DataFlowConfiguration.ClearLiveBroadcast);
|
||||
method public void setDescrambling(@Nullable android.media.tuner.testing.configuration.V1_0.DataFlowConfiguration.Descrambling);
|
||||
method public void setDvrPlayback(@Nullable android.media.tuner.testing.configuration.V1_0.DataFlowConfiguration.DvrPlayback);
|
||||
|
@ -23,6 +24,7 @@ package android.media.tuner.testing.configuration.V1_0 {
|
|||
method public void setLnbLive(@Nullable android.media.tuner.testing.configuration.V1_0.DataFlowConfiguration.LnbLive);
|
||||
method public void setLnbRecord(@Nullable android.media.tuner.testing.configuration.V1_0.DataFlowConfiguration.LnbRecord);
|
||||
method public void setScan(@Nullable android.media.tuner.testing.configuration.V1_0.DataFlowConfiguration.Scan);
|
||||
method public void setTimeFilter(@Nullable android.media.tuner.testing.configuration.V1_0.DataFlowConfiguration.TimeFilter);
|
||||
}
|
||||
|
||||
public static class DataFlowConfiguration.ClearLiveBroadcast {
|
||||
|
@ -80,20 +82,28 @@ package android.media.tuner.testing.configuration.V1_0 {
|
|||
public static class DataFlowConfiguration.LnbLive {
|
||||
ctor public DataFlowConfiguration.LnbLive();
|
||||
method @Nullable public String getAudioFilterConnection();
|
||||
method @Nullable public java.util.List<java.lang.String> getDiseqcMsgSender();
|
||||
method @Nullable public String getFrontendConnection();
|
||||
method @Nullable public String getLnbConnection();
|
||||
method @Nullable public String getVideoFilterConnection();
|
||||
method public void setAudioFilterConnection(@Nullable String);
|
||||
method public void setDiseqcMsgSender(@Nullable java.util.List<java.lang.String>);
|
||||
method public void setFrontendConnection(@Nullable String);
|
||||
method public void setLnbConnection(@Nullable String);
|
||||
method public void setVideoFilterConnection(@Nullable String);
|
||||
}
|
||||
|
||||
public static class DataFlowConfiguration.LnbRecord {
|
||||
ctor public DataFlowConfiguration.LnbRecord();
|
||||
method @Nullable public java.util.List<java.lang.String> getDiseqcMsgSender();
|
||||
method @Nullable public String getDvrRecordConnection();
|
||||
method @Nullable public String getFrontendConnection();
|
||||
method @Nullable public String getLnbConnection();
|
||||
method @Nullable public String getRecordFilterConnection();
|
||||
method public void setDiseqcMsgSender(@Nullable java.util.List<java.lang.String>);
|
||||
method public void setDvrRecordConnection(@Nullable String);
|
||||
method public void setFrontendConnection(@Nullable String);
|
||||
method public void setLnbConnection(@Nullable String);
|
||||
method public void setRecordFilterConnection(@Nullable String);
|
||||
}
|
||||
|
||||
|
@ -103,6 +113,20 @@ package android.media.tuner.testing.configuration.V1_0 {
|
|||
method public void setFrontendConnection(@Nullable String);
|
||||
}
|
||||
|
||||
public static class DataFlowConfiguration.TimeFilter {
|
||||
ctor public DataFlowConfiguration.TimeFilter();
|
||||
method @Nullable public String getTimeFilterConnection();
|
||||
method public void setTimeFilterConnection(@Nullable String);
|
||||
}
|
||||
|
||||
public class DiseqcMessage {
|
||||
ctor public DiseqcMessage();
|
||||
method @Nullable public java.util.List<java.lang.Short> getMsgBody();
|
||||
method @Nullable public String getMsgName();
|
||||
method public void setMsgBody(@Nullable java.util.List<java.lang.Short>);
|
||||
method public void setMsgName(@Nullable String);
|
||||
}
|
||||
|
||||
public class DvbsFrontendSettings {
|
||||
ctor public DvbsFrontendSettings();
|
||||
method @Nullable public java.math.BigInteger getInputStreamId();
|
||||
|
@ -245,12 +269,23 @@ package android.media.tuner.testing.configuration.V1_0 {
|
|||
|
||||
public class HardwareConfiguration {
|
||||
ctor public HardwareConfiguration();
|
||||
method @Nullable public android.media.tuner.testing.configuration.V1_0.HardwareConfiguration.DiseqcMessages getDiseqcMessages();
|
||||
method @Nullable public android.media.tuner.testing.configuration.V1_0.HardwareConfiguration.Dvrs getDvrs();
|
||||
method @Nullable public android.media.tuner.testing.configuration.V1_0.HardwareConfiguration.Filters getFilters();
|
||||
method @Nullable public android.media.tuner.testing.configuration.V1_0.HardwareConfiguration.Frontends getFrontends();
|
||||
method @Nullable public android.media.tuner.testing.configuration.V1_0.HardwareConfiguration.Lnbs getLnbs();
|
||||
method @Nullable public android.media.tuner.testing.configuration.V1_0.HardwareConfiguration.TimeFilters getTimeFilters();
|
||||
method public void setDiseqcMessages(@Nullable android.media.tuner.testing.configuration.V1_0.HardwareConfiguration.DiseqcMessages);
|
||||
method public void setDvrs(@Nullable android.media.tuner.testing.configuration.V1_0.HardwareConfiguration.Dvrs);
|
||||
method public void setFilters(@Nullable android.media.tuner.testing.configuration.V1_0.HardwareConfiguration.Filters);
|
||||
method public void setFrontends(@Nullable android.media.tuner.testing.configuration.V1_0.HardwareConfiguration.Frontends);
|
||||
method public void setLnbs(@Nullable android.media.tuner.testing.configuration.V1_0.HardwareConfiguration.Lnbs);
|
||||
method public void setTimeFilters(@Nullable android.media.tuner.testing.configuration.V1_0.HardwareConfiguration.TimeFilters);
|
||||
}
|
||||
|
||||
public static class HardwareConfiguration.DiseqcMessages {
|
||||
ctor public HardwareConfiguration.DiseqcMessages();
|
||||
method @Nullable public java.util.List<android.media.tuner.testing.configuration.V1_0.DiseqcMessage> getDiseqcMessage();
|
||||
}
|
||||
|
||||
public static class HardwareConfiguration.Dvrs {
|
||||
|
@ -268,6 +303,56 @@ package android.media.tuner.testing.configuration.V1_0 {
|
|||
method @Nullable public java.util.List<android.media.tuner.testing.configuration.V1_0.Frontend> getFrontend();
|
||||
}
|
||||
|
||||
public static class HardwareConfiguration.Lnbs {
|
||||
ctor public HardwareConfiguration.Lnbs();
|
||||
method @Nullable public java.util.List<android.media.tuner.testing.configuration.V1_0.Lnb> getLnb();
|
||||
}
|
||||
|
||||
public static class HardwareConfiguration.TimeFilters {
|
||||
ctor public HardwareConfiguration.TimeFilters();
|
||||
method @Nullable public java.util.List<android.media.tuner.testing.configuration.V1_0.TimeFilter> getTimeFilter();
|
||||
}
|
||||
|
||||
public class Lnb {
|
||||
ctor public Lnb();
|
||||
method @Nullable public String getId();
|
||||
method @Nullable public String getName();
|
||||
method @Nullable public android.media.tuner.testing.configuration.V1_0.LnbPositionEnum getPosition();
|
||||
method @Nullable public android.media.tuner.testing.configuration.V1_0.LnbToneEnum getTone();
|
||||
method @Nullable public android.media.tuner.testing.configuration.V1_0.LnbVoltageEnum getVoltage();
|
||||
method public void setId(@Nullable String);
|
||||
method public void setName(@Nullable String);
|
||||
method public void setPosition(@Nullable android.media.tuner.testing.configuration.V1_0.LnbPositionEnum);
|
||||
method public void setTone(@Nullable android.media.tuner.testing.configuration.V1_0.LnbToneEnum);
|
||||
method public void setVoltage(@Nullable android.media.tuner.testing.configuration.V1_0.LnbVoltageEnum);
|
||||
}
|
||||
|
||||
public enum LnbPositionEnum {
|
||||
method @NonNull public String getRawName();
|
||||
enum_constant public static final android.media.tuner.testing.configuration.V1_0.LnbPositionEnum POSITION_A;
|
||||
enum_constant public static final android.media.tuner.testing.configuration.V1_0.LnbPositionEnum POSITION_B;
|
||||
enum_constant public static final android.media.tuner.testing.configuration.V1_0.LnbPositionEnum UNDEFINED;
|
||||
}
|
||||
|
||||
public enum LnbToneEnum {
|
||||
method @NonNull public String getRawName();
|
||||
enum_constant public static final android.media.tuner.testing.configuration.V1_0.LnbToneEnum CONTINUOUS;
|
||||
enum_constant public static final android.media.tuner.testing.configuration.V1_0.LnbToneEnum NONE;
|
||||
}
|
||||
|
||||
public enum LnbVoltageEnum {
|
||||
method @NonNull public String getRawName();
|
||||
enum_constant public static final android.media.tuner.testing.configuration.V1_0.LnbVoltageEnum NONE;
|
||||
enum_constant public static final android.media.tuner.testing.configuration.V1_0.LnbVoltageEnum VOLTAGE_11V;
|
||||
enum_constant public static final android.media.tuner.testing.configuration.V1_0.LnbVoltageEnum VOLTAGE_12V;
|
||||
enum_constant public static final android.media.tuner.testing.configuration.V1_0.LnbVoltageEnum VOLTAGE_13V;
|
||||
enum_constant public static final android.media.tuner.testing.configuration.V1_0.LnbVoltageEnum VOLTAGE_14V;
|
||||
enum_constant public static final android.media.tuner.testing.configuration.V1_0.LnbVoltageEnum VOLTAGE_15V;
|
||||
enum_constant public static final android.media.tuner.testing.configuration.V1_0.LnbVoltageEnum VOLTAGE_18V;
|
||||
enum_constant public static final android.media.tuner.testing.configuration.V1_0.LnbVoltageEnum VOLTAGE_19V;
|
||||
enum_constant public static final android.media.tuner.testing.configuration.V1_0.LnbVoltageEnum VOLTAGE_5V;
|
||||
}
|
||||
|
||||
public class RecordFilterSettings {
|
||||
ctor public RecordFilterSettings();
|
||||
method @Nullable public android.media.tuner.testing.configuration.V1_0.ScIndexTypeEnum getScIndexType();
|
||||
|
@ -293,6 +378,14 @@ package android.media.tuner.testing.configuration.V1_0 {
|
|||
method public void setIsRepeat(@Nullable boolean);
|
||||
}
|
||||
|
||||
public class TimeFilter {
|
||||
ctor public TimeFilter();
|
||||
method @Nullable public String getId();
|
||||
method @Nullable public java.math.BigInteger getTimeStamp();
|
||||
method public void setId(@Nullable String);
|
||||
method public void setTimeStamp(@Nullable java.math.BigInteger);
|
||||
}
|
||||
|
||||
public class TunerConfiguration {
|
||||
ctor public TunerConfiguration();
|
||||
method @Nullable public android.media.tuner.testing.configuration.V1_0.DataFlowConfiguration getDataFlowConfiguration();
|
||||
|
|
|
@ -133,6 +133,41 @@
|
|||
statusMask="15" lowThreshold="4096" highThreshold="32767"
|
||||
dataFormat="ES" packetSize="188" inputFilePath="/data/local/tmp/test.es"/>
|
||||
</dvrs>
|
||||
<!-- Lnb section:
|
||||
This section contains configurations of all the lnbs that would be used in the tests.
|
||||
- This section is optional and can be skipped if LNB is not supported.
|
||||
- The users can configure 1 or more lnb elements in the lnbs sections.
|
||||
|
||||
Each lnb element contain the following attributes:
|
||||
"id": unique id of the lnb that could be used to connect to the test the
|
||||
"dataFlowConfiguration"
|
||||
"name": the external lnb device name.
|
||||
"voltage": the voltage used to config the lnb.
|
||||
"tone": the voltage used to config the lnb.
|
||||
"position": the voltage used to config the lnb.
|
||||
-->
|
||||
<diseqcMessages>
|
||||
<diseqcMessage msgName="DISEQC_POWER_ON" msgBody="14 0 0 0 0 3"/>
|
||||
</diseqcMessages>
|
||||
<lnbs>
|
||||
<lnb id="LNB_0" voltage="VOLTAGE_12V" tone="NONE" position="UNDEFINED"/>
|
||||
<lnb id="LNB_1" name="default_lnb_external" voltage="VOLTAGE_5V"
|
||||
tone="NONE" position="UNDEFINED"/>
|
||||
</lnbs>
|
||||
<!-- TimeFilter section:
|
||||
This section contains configurations of all the time filters that would be used in
|
||||
the tests.
|
||||
- This section is optional and can be skipped if Time Filter is not supported.
|
||||
- The users can configure 1 or more timeFilter elements in the timeFilters sections.
|
||||
|
||||
Each timeFilter element contain the following attributes:
|
||||
"id": unique id of the time filter that could be used to connect to the test the
|
||||
"dataFlowConfiguration"
|
||||
"timeStamp": the time stamp used to config the time filter.
|
||||
-->
|
||||
<timeFilters>
|
||||
<timeFilter id="TIME_FILTER_0" timeStamp="1"/>
|
||||
</timeFilters>
|
||||
</hardwareConfiguration>
|
||||
|
||||
<!-- Data flow configuration section connects each data flow under test to the ids of the
|
||||
|
@ -159,9 +194,14 @@
|
|||
dvrSoftwareFeConnection="DVR_PLAYBACK_0"/>
|
||||
<lnbLive frontendConnection="FE_DVBS_0"
|
||||
audioFilterConnection="FILTER_AUDIO_DEFAULT"
|
||||
videoFilterConnection="FILTER_VIDEO_DEFAULT"/>
|
||||
videoFilterConnection="FILTER_VIDEO_DEFAULT"
|
||||
lnbConnection="LNB_1"
|
||||
diseqcMsgSender="DISEQC_POWER_ON"/>
|
||||
<lnbRecord frontendConnection="FE_DVBS_0"
|
||||
recordFilterConnection="FILTER_TS_RECORD_0"
|
||||
dvrRecordConnection="DVR_RECORD_0"/>
|
||||
dvrRecordConnection="DVR_RECORD_0"
|
||||
lnbConnection="LNB_0"
|
||||
diseqcMsgSender="DISEQC_POWER_ON"/>
|
||||
<timeFilter timeFilterConnection="TIME_FILTER_0"/>
|
||||
</dataFlowConfiguration>
|
||||
</TunerConfiguration>
|
||||
|
|
|
@ -279,6 +279,99 @@
|
|||
<xs:attribute name="inputFilePath" type="xs:anyURI" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<!-- LNB SESSION -->
|
||||
<xs:simpleType name="lnbId">
|
||||
<!-- Lnb id must be LNB_NUM: <lnb id="LNB_10"/> -->
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:pattern value="LNB_[0-9]+"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:simpleType name="lnbVoltageEnum">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="NONE" />
|
||||
<xs:enumeration value="VOLTAGE_5V" />
|
||||
<xs:enumeration value="VOLTAGE_11V" />
|
||||
<xs:enumeration value="VOLTAGE_12V"/>
|
||||
<xs:enumeration value="VOLTAGE_13V"/>
|
||||
<xs:enumeration value="VOLTAGE_14V"/>
|
||||
<xs:enumeration value="VOLTAGE_15V"/>
|
||||
<xs:enumeration value="VOLTAGE_18V"/>
|
||||
<xs:enumeration value="VOLTAGE_19V"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
<xs:simpleType name="lnbToneEnum">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="NONE" />
|
||||
<xs:enumeration value="CONTINUOUS" />
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
<xs:simpleType name="lnbPositionEnum">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="UNDEFINED" />
|
||||
<xs:enumeration value="POSITION_A" />
|
||||
<xs:enumeration value="POSITION_B" />
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<!-- Diseqc Messages that would be used to send to the lnb under test. -->
|
||||
<xs:simpleType name="diseqcMsgName">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:pattern value="[A-Z_]+"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
<xs:simpleType name="diseqcMsgBody">
|
||||
<xs:list itemType="xs:unsignedByte"/>
|
||||
</xs:simpleType>
|
||||
<xs:complexType name="diseqcMessage">
|
||||
<xs:attribute name="msgName" type="diseqcMsgName"/>
|
||||
<xs:attribute name="msgBody" type="diseqcMsgBody"/>
|
||||
</xs:complexType>
|
||||
<xs:simpleType name="diseqcMsgSender">
|
||||
<xs:list itemType="diseqcMsgName"/>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:complexType name="lnb">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
Each lnb element contain the following attributes:
|
||||
"id": unique id of the lnb that could be used to connect to the test the
|
||||
"dataFlowConfiguration"
|
||||
"name": the external lnb device name.
|
||||
"voltage": the voltage used to config the lnb.
|
||||
"tone": the voltage used to config the lnb.
|
||||
"position": the voltage used to config the lnb.
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:attribute name="id" type="lnbId" use="required"/>
|
||||
<!-- Only required on external lnb with no device id. -->
|
||||
<xs:attribute name="name" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="voltage" type="lnbVoltageEnum" use="required"/>
|
||||
<xs:attribute name="tone" type="lnbToneEnum" use="required"/>
|
||||
<xs:attribute name="position" type="lnbPositionEnum" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<!-- TIME FILTER SESSION -->
|
||||
<xs:simpleType name="timeFilterId">
|
||||
<!-- Time Filter id must be TIME_FILTER_NUM: <timeFilter id="TIME_FILTER_1"/> -->
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:pattern value="TIME_FILTER_[0-9]+"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:complexType name="timeFilter">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
Each timeFilter element contain the following attributes:
|
||||
"id": unique id of the time filter that could be used to connect to the test the
|
||||
"dataFlowConfiguration"
|
||||
"timeStamp": the time stamp used to config the time filter.
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:attribute name="id" type="timeFilterId" use="required"/>
|
||||
<xs:attribute name="timeStamp" type="xs:nonNegativeInteger" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<!-- HARDWARE CONFIGURATION SESSION -->
|
||||
<xs:complexType name="hardwareConfiguration">
|
||||
<xs:sequence>
|
||||
|
@ -341,6 +434,55 @@
|
|||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element name="diseqcMessages" minOccurs="0" maxOccurs="1">
|
||||
<xs:complexType>
|
||||
<xs:annotation>
|
||||
<xs:documentation xml:lang="en">
|
||||
This section contains configurations of all the diseqc messages that
|
||||
would be used in the lnb tests.
|
||||
- This section is optional and can be skipped if lnb is not suppoted
|
||||
- The users can configure 1 or more message elements in the
|
||||
diseqcMessages sections.
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:sequence>
|
||||
<xs:element name="diseqcMessage" type="diseqcMessage" minOccurs="1" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element name="lnbs" minOccurs="0" maxOccurs="1">
|
||||
<xs:complexType>
|
||||
<xs:annotation>
|
||||
<xs:documentation xml:lang="en">
|
||||
This section contains configurations of all the lnbs that would be used
|
||||
in the tests.
|
||||
- This section is optional and can be skipped if lnb is not suppoted
|
||||
- The users can configure 1 or more lnb elements in the lnbs
|
||||
sections.
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:sequence>
|
||||
<xs:element name="lnb" type="lnb" minOccurs="1" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element name="timeFilters" minOccurs="0" maxOccurs="1">
|
||||
<xs:complexType>
|
||||
<xs:annotation>
|
||||
<xs:documentation xml:lang="en">
|
||||
This section contains configurations of all the time filters that would
|
||||
be used in the tests.
|
||||
- This section is optional and can be skipped if time filter is
|
||||
not supported.
|
||||
- The users can configure 1 or more time filter elements in the
|
||||
time filters sections.
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:sequence>
|
||||
<xs:element name="timeFilter" type="timeFilter" minOccurs="1" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
|
@ -397,6 +539,8 @@
|
|||
<xs:attribute name="frontendConnection" type="frontendId" use="required"/>
|
||||
<xs:attribute name="audioFilterConnection" type="filterId" use="required"/>
|
||||
<xs:attribute name="videoFilterConnection" type="filterId" use="required"/>
|
||||
<xs:attribute name="lnbConnection" type="lnbId" use="required"/>
|
||||
<xs:attribute name="diseqcMsgSender" type="diseqcMsgSender" use="optional"/>
|
||||
<!-- TODO: b/182519645 allow the users to insert extra filters -->
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
|
@ -405,6 +549,13 @@
|
|||
<xs:attribute name="frontendConnection" type="frontendId" use="required"/>
|
||||
<xs:attribute name="recordFilterConnection" type="filterId" use="required"/>
|
||||
<xs:attribute name="dvrRecordConnection" type="dvrId" use="required"/>
|
||||
<xs:attribute name="lnbConnection" type="lnbId" use="required"/>
|
||||
<xs:attribute name="diseqcMsgSender" type="diseqcMsgSender" use="optional"/>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element name="timeFilter" minOccurs="0" maxOccurs="1">
|
||||
<xs:complexType>
|
||||
<xs:attribute name="timeFilterConnection" type="timeFilterId" use="required"/>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
|
@ -431,5 +582,13 @@
|
|||
<xs:selector xpath="hardwareConfiguration/dvrs/dvr"/>
|
||||
<xs:field xpath="@id"/>
|
||||
</xs:key>
|
||||
<xs:key name="lnbIdUniqueness">
|
||||
<xs:selector xpath="hardwareConfiguration/lnbs/lnb"/>
|
||||
<xs:field xpath="@id"/>
|
||||
</xs:key>
|
||||
<xs:key name="timeFilterIdUniqueness">
|
||||
<xs:selector xpath="hardwareConfiguration/timeFilters/timeFilter"/>
|
||||
<xs:field xpath="@id"/>
|
||||
</xs:key>
|
||||
</xs:element>
|
||||
</xs:schema>
|
||||
|
|
Loading…
Reference in a new issue