1<?xml version="1.0" encoding="UTF-8"?>
2<!-- Copyright (C) 2021 The Android Open Source Project
3
4         Licensed under the Apache License, Version 2.0 (the "License");
5         you may not use this file except in compliance with the License.
6         You may obtain a copy of the License at
7
8                    http://www.apache.org/licenses/LICENSE-2.0
9
10         Unless required by applicable law or agreed to in writing, software
11         distributed under the License is distributed on an "AS IS" BASIS,
12         WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13         See the License for the specific language governing permissions and
14         limitations under the License.
15-->
16<xs:schema version="2.0"
17           elementFormDefault="qualified"
18           attributeFormDefault="unqualified"
19           xmlns:xs="http://www.w3.org/2001/XMLSchema">
20    <!-- List the dynamic config versions supported by tuner testing. -->
21    <xs:simpleType name="version">
22        <xs:restriction base="xs:decimal">
23            <xs:enumeration value="1.0"/>
24        </xs:restriction>
25    </xs:simpleType>
26
27    <!-- FRONTEND SESSION -->
28    <xs:simpleType name="frontendId">
29        <!-- Frontend id must be either FE_DEFAULT or FE_TYPE_NUM
30            <frontend id="FE_DVBS_0"/>
31        -->
32        <xs:restriction base="xs:string">
33            <xs:pattern value="FE_DEFAULT|FE_[A-Z]+_[0-9]+"/>
34        </xs:restriction>
35    </xs:simpleType>
36
37    <xs:simpleType name="frontendTypeEnum">
38        <xs:restriction base="xs:string">
39            <xs:enumeration value="UNDEFINED" />
40            <xs:enumeration value="ANALOG" />
41            <xs:enumeration value="ATSC" />
42            <xs:enumeration value="ATSC3"/>
43            <xs:enumeration value="DVBC"/>
44            <xs:enumeration value="DVBS"/>
45            <xs:enumeration value="DVBT"/>
46            <xs:enumeration value="ISDBS"/>
47            <xs:enumeration value="ISDBS3"/>
48            <xs:enumeration value="ISDBT"/>
49            <xs:enumeration value="DTMB"/>
50        </xs:restriction>
51    </xs:simpleType>
52    <xs:simpleType name="dvbsScanType">
53        <xs:restriction base="xs:string">
54            <xs:enumeration value="UNDEFINED" />
55            <xs:enumeration value="DIRECT" />
56            <xs:enumeration value="DISEQC" />
57            <xs:enumeration value="UNICABLE"/>
58            <xs:enumeration value="JESS"/>
59        </xs:restriction>
60    </xs:simpleType>
61
62    <xs:complexType name="dvbtFrontendSettings">
63        <xs:attribute name="bandwidth" type="xs:nonNegativeInteger" use="required"/>
64        <xs:attribute name="constellation" type="xs:nonNegativeInteger" use="required"/>
65        <xs:attribute name="guardInterval" type="xs:nonNegativeInteger" use="required"/>
66        <xs:attribute name="hierarchy" type="xs:nonNegativeInteger" use="required"/>
67        <xs:attribute name="hpCoderate" type="xs:nonNegativeInteger" use="required"/>
68        <xs:attribute name="lpCoderate" type="xs:nonNegativeInteger" use="required"/>
69        <xs:attribute name="isHighPriority" type="xs:nonNegativeInteger" use="required"/>
70        <xs:attribute name="isMiso" type="xs:nonNegativeInteger" use="required"/>
71        <xs:attribute name="plpGroupId" type="xs:nonNegativeInteger" use="required"/>
72        <xs:attribute name="plpId" type="xs:nonNegativeInteger" use="required"/>
73        <xs:attribute name="plpMode" type="xs:nonNegativeInteger" use="required"/>
74        <xs:attribute name="standard" type="xs:nonNegativeInteger" use="required"/>
75        <xs:attribute name="transmissionMode" type="xs:nonNegativeInteger" use="required"/>
76    </xs:complexType>
77    <xs:complexType name="dvbsFrontendSettings">
78        <xs:attribute name="inputStreamId" type="xs:nonNegativeInteger" use="required"/>
79        <xs:attribute name="symbolRate" type="xs:nonNegativeInteger" use="required"/>
80        <xs:attribute name="scanType" type="dvbsScanType" use="optional"/>
81        <xs:attribute name="isDiseqcRxMessage" type="xs:boolean" use="optional"/>
82    </xs:complexType>
83
84    <xs:complexType name="frontend">
85        <xs:annotation>
86            <xs:documentation>
87                Each frontend element contain the following attributes:
88                    "id": unique id of the frontend that could be used to connect to the test the
89                        "dataFlowConfiguration"
90                    "type": the frontend type. The enums are defined in the xsd.
91                    "isSoftwareFrontend": if the test environment is using hardware or software
92                        frontend. If using software, a ts input file path needs to be configured.
93                    "softwareFeInputPath": used as the source of the software frontend.
94                    "connectToCicamId": if the device supports frontend connecting to cicam, the
95                        target cicam id needs to be configured here. Supported in Tuner 1.1 or
96                        higher.
97                    "frequency": the frequency used to configure tune and scan.
98                    "endFrequency": the end frequency of scan. Supported in Tuner 1.1 or higher.
99
100                Each frontend element also contains at most one type-related "frontendSettings".
101                    - The settings type should match the frontend "type" attribute.
102                    - For example, when frontend type="DVBT", dvbtFrontendSettings can be
103                        configured.
104                    - This is optional and skipping the settings would pass a setting with frequency
105                        config only to the hal.
106            </xs:documentation>
107        </xs:annotation>
108        <xs:choice minOccurs="0" maxOccurs="1">
109            <!-- TODO: b/182519645 finish all the frontend settings structures. -->
110            <!--xs:element name="analog" type="analogSettings"/>
111            <xs:element name="atsc" type="atscSettings"/>
112            <xs:element name="atsc3" type="atsc3Settings"/>
113            <xs:element name="dvbc" type="dvbcSettings"/-->
114            <xs:element name="dvbsFrontendSettings" type="dvbsFrontendSettings"/>
115            <xs:element name="dvbtFrontendSettings" type="dvbtFrontendSettings"/>
116            <!--xs:element name="isdbs" type="isdbsSettings"/>
117            <xs:element name="isdbs3" type="isdbs3Settings"/>
118            <xs:element name="isdbt" type="isdbtSettings"/>
119            <xs:element name="dtmb" type="dtmbSettings"/-->
120        </xs:choice>
121        <xs:attribute name="id" type="frontendId" use="required"/>
122        <xs:attribute name="type" type="frontendTypeEnum" use="required"/>
123        <!-- A dvr connection is required in the data flow config section when
124            "isSoftwareFrontend" is true. -->
125        <xs:attribute name="isSoftwareFrontend" type="xs:boolean" use="required"/>
126        <xs:attribute name="frequency" type="xs:nonNegativeInteger" use="required"/>
127        <xs:attribute name="connectToCicamId" type="xs:nonNegativeInteger" use="optional"/>
128        <xs:attribute name="endFrequency" type="xs:nonNegativeInteger" use="optional"/>
129    </xs:complexType>
130
131    <!-- FILTER SESSION -->
132    <xs:simpleType name="filterId">
133        <!-- Filter id must be either FILTER_AUDIO_DEFAULT or FILTER_VIDEO_DEFAULT
134             or FILTER_MAINTYPE_SUBTYPE_NUM
135            <filter id="FILTER_TS_AUDIO_0"/>
136        -->
137        <xs:restriction base="xs:string">
138            <xs:pattern value="FILTER_AUDIO_DEFAULT|FILTER_VIDEO_DEFAULT|FILTER_[A-Z]+_[A-Z]+_[0-9]+"/>
139        </xs:restriction>
140    </xs:simpleType>
141    <!-- A list of filter ids that could be used in the data flow configurations to connect
142        filters under testing. -->
143    <xs:simpleType name="filterConnections">
144        <xs:list itemType="filterId" />
145    </xs:simpleType>
146    <!-- DemuxFilterRecordSettings::tsIndexMask -->
147    <xs:simpleType name="tsIndexMask">
148        <xs:restriction base="xs:integer">
149            <xs:minInclusive value="0"/>
150            <xs:maxInclusive value="8191"/>
151        </xs:restriction>
152    </xs:simpleType>
153    <!-- DemuxFilterRecordSettings::scIndexType -->
154    <xs:simpleType name="scIndexTypeEnum">
155        <xs:restriction base="xs:string">
156            <xs:enumeration value="NONE" />
157            <xs:enumeration value="SC" />
158            <xs:enumeration value="SC_HEVC"/>
159        </xs:restriction>
160    </xs:simpleType>
161    <xs:simpleType name="monitoEvents">
162        <xs:restriction base="xs:integer">
163            <xs:minInclusive value="0"/>
164            <xs:maxInclusive value="3"/>
165        </xs:restriction>
166    </xs:simpleType>
167
168    <xs:simpleType name="filterMainTypeEnum">
169        <xs:restriction base="xs:string">
170            <xs:enumeration value="TS" />
171            <xs:enumeration value="MMTP" />
172            <xs:enumeration value="IP"/>
173            <!-- TODO: b/182519645 Support TLV/ALP filter config
174            <xs:enumeration value="TLV"/>
175            <xs:enumeration value="ALP"/-->
176        </xs:restriction>
177    </xs:simpleType>
178    <xs:simpleType name="filterSubTypeEnum">
179        <xs:restriction base="xs:string">
180            <xs:enumeration value="UNDEFINED" />
181            <xs:enumeration value="SECTION" />
182            <xs:enumeration value="PES" />
183            <xs:enumeration value="TS"/>
184            <xs:enumeration value="AUDIO"/>
185            <xs:enumeration value="VIDEO"/>
186            <xs:enumeration value="PCR"/>
187            <xs:enumeration value="RECORD"/>
188            <xs:enumeration value="TEMI"/>
189            <xs:enumeration value="MMTP"/>
190            <xs:enumeration value="DOWNLOAD"/>
191            <xs:enumeration value="IP"/>
192            <xs:enumeration value="NTP"/>
193            <xs:enumeration value="IP_PAYLOAD"/>
194            <xs:enumeration value="PAYLOAD_THROUGH"/>
195        </xs:restriction>
196    </xs:simpleType>
197
198    <xs:simpleType name="ip">
199        <xs:list itemType="xs:unsignedByte"/>
200    </xs:simpleType>
201    <xs:complexType name="ipAddress">
202        <xs:attribute name="isIpV4" type="xs:boolean" use="required"/>
203        <xs:attribute name="ip" type="ip" use="required"/>
204    </xs:complexType>
205    <xs:complexType name="ipFilterConfig">
206        <xs:sequence>
207            <xs:element name="srcIpAddress" type="ipAddress" minOccurs="1" maxOccurs="1"/>
208            <xs:element name="destIpAddress" type="ipAddress" minOccurs="1" maxOccurs="1"/>
209        </xs:sequence>
210        <xs:attribute name="srcPort" type="xs:unsignedInt" use="optional"/>
211        <xs:attribute name="destPort" type="xs:unsignedInt" use="optional"/>
212        <!-- True if the ip filter data goes to the next filter directly -->
213        <xs:attribute name="dataPassthrough" type="xs:boolean" use="optional"/>
214        <xs:attribute name="ipCid" type="xs:nonNegativeInteger" use="optional"/>
215    </xs:complexType>
216
217    <xs:complexType name="avFilterSettings">
218        <xs:choice minOccurs="0" maxOccurs="1">
219            <xs:element name="audioStreamType" type="xs:unsignedByte"/>
220            <xs:element name="videoStreamType" type="xs:unsignedByte"/>
221        </xs:choice>
222        <xs:attribute name="isPassthrough" type="xs:boolean" use="required"/>
223    </xs:complexType>
224    <xs:complexType name="sectionFilterSettings">
225        <xs:attribute name="isCheckCrc" type="xs:boolean" use="required"/>
226        <xs:attribute name="isRepeat" type="xs:boolean" use="required"/>
227        <xs:attribute name="isRaw" type="xs:boolean" use="required"/>
228    </xs:complexType>
229    <xs:complexType name="recordFilterSettings">
230        <xs:attribute name="tsIndexMask" type="tsIndexMask" use="required"/>
231        <xs:attribute name="scIndexType" type="scIndexTypeEnum" use="required"/>
232    </xs:complexType>
233
234    <xs:complexType name="filter">
235        <xs:annotation>
236            <xs:documentation>
237                Each filter element contain the following attributes:
238                    "id": unique id of the filter that could be used to connect to the test the
239                        "dataFlowConfiguration"
240                    "mainType": the main filter type. The enums are defined in the xsd.
241                    "subType": the sub filter type. The enums are defined in the xsd.
242                    "bufferSize": the buffer size of the filter in hex.
243                    "pid": the pid that would be used to configure the filter.
244                    "useFMQ": if the filter uses FMQ.
245
246                Each filter element also contains at most one type-related "filterSettings".
247                    - The settings type should match the filter "subType" attribute.
248                    - For example, when filter subType is audio or video, the avFilterSettings
249                        can be configured.
250                    - This is optional and skipping the settings would pass a setting with tpid
251                        config only to the hal.
252            </xs:documentation>
253        </xs:annotation>
254        <xs:sequence>
255            <!-- Main filter type related config -->
256            <xs:choice minOccurs="0" maxOccurs="1">
257                <xs:element name="ipFilterConfig" type="ipFilterConfig"/>
258            </xs:choice>
259            <!-- Sub filter type related config -->
260            <xs:choice minOccurs="0" maxOccurs="1">
261                <!-- TODO: b/182519645 finish all the filter settings structures. -->
262                <xs:element name="sectionFilterSettings" type="sectionFilterSettings"/>
263                <xs:element name="avFilterSettings" type="avFilterSettings"/>
264                <xs:element name="recordFilterSettings" type="recordFilterSettings"/>
265                <!--xs:element name="pes" type="pesFilterSettings"/>
266                <xs:element name="download" type="downloadFilterSettings"/-->
267            </xs:choice>
268        </xs:sequence>
269        <xs:attribute name="id" type="filterId" use="required"/>
270        <xs:attribute name="mainType" type="filterMainTypeEnum" use="required"/>
271        <xs:attribute name="subType" type="filterSubTypeEnum" use="required"/>
272        <xs:attribute name="bufferSize" type="xs:nonNegativeInteger" use="required"/>
273        <xs:attribute name="pid" type="xs:nonNegativeInteger" use="optional"/>
274        <xs:attribute name="useFMQ" type="xs:boolean" use="required"/>
275        <xs:attribute name="monitorEventTypes" type="monitoEvents" use="optional"/>
276    </xs:complexType>
277
278    <!-- DVR SESSION -->
279    <xs:simpleType name="dvrId">
280        <!-- Dvr id must be DVR_TYPE_NUM. <dvr id="DVR_PLAYBACK_0"/> -->
281        <xs:restriction base="xs:string">
282            <xs:pattern value="DVR_RECORD_[0-9]+|DVR_PLAYBACK_[0-9]+"/>
283        </xs:restriction>
284    </xs:simpleType>
285    <xs:simpleType name="dvrStatusMask">
286        <!-- Dvr status mask must masking the <dvrStatusEnum> -->
287        <xs:restriction base="xs:integer">
288            <xs:minInclusive value="0"/>
289            <xs:maxInclusive value="15"/>
290        </xs:restriction>
291    </xs:simpleType>
292
293    <xs:simpleType name="dvrStatusEnum">
294        <xs:restriction base="xs:string">
295            <xs:enumeration value="DATA_READY" />
296            <xs:enumeration value="LOW_WATER" />
297            <xs:enumeration value="HIGH_WATER" />
298            <xs:enumeration value="OVERFLOW" />
299        </xs:restriction>
300    </xs:simpleType>
301    <xs:simpleType name="dvrTypeEnum">
302        <xs:restriction base="xs:string">
303            <xs:enumeration value="PLAYBACK" />
304            <xs:enumeration value="RECORD" />
305        </xs:restriction>
306    </xs:simpleType>
307    <xs:simpleType name="dvrDataFormatEnum">
308        <xs:restriction base="xs:string">
309            <xs:enumeration value="TS" />
310            <xs:enumeration value="PES" />
311            <xs:enumeration value="ES" />
312            <xs:enumeration value="SHV_TLV" />
313        </xs:restriction>
314    </xs:simpleType>
315
316    <xs:complexType name="dvr">
317        <xs:annotation>
318            <xs:documentation>
319                Each dvr element contain the following attributes:
320                    "id": unique id of the dvr that could be used to connect to the test the
321                        "dataFlowConfiguration"
322                    "type": the dvr type.
323                    "bufferSize": the dvr buffer size.
324                    "statusMask": register callbacks of specific status.
325                    "lowThreshold": the dvr status low threshold.
326                    "highThreshold": the dvr status high threshold.
327                    "dataFormat": the dvr data format.
328                    "packetSize": the dvr packet size.
329                    "inputFilePath": the dvr playback input file path. Only required in playback
330                        dvr.
331            </xs:documentation>
332        </xs:annotation>
333        <xs:attribute name="id" type="dvrId" use="required"/>
334        <xs:attribute name="type" type="dvrTypeEnum" use="required"/>
335        <xs:attribute name="bufferSize" type="xs:nonNegativeInteger" use="required"/>
336        <xs:attribute name="statusMask" type="dvrStatusMask" use="required"/>
337        <xs:attribute name="lowThreshold" type="xs:nonNegativeInteger" use="required"/>
338        <xs:attribute name="highThreshold" type="xs:nonNegativeInteger" use="required"/>
339        <xs:attribute name="dataFormat" type="dvrDataFormatEnum" use="required"/>
340        <xs:attribute name="packetSize" type="xs:nonNegativeInteger" use="required"/>
341        <xs:attribute name="inputFilePath" type="xs:anyURI" use="optional"/>
342    </xs:complexType>
343
344    <!-- LNB SESSION -->
345    <xs:simpleType name="lnbId">
346        <!-- Lnb id must be LNB_NUM: <lnb id="LNB_10"/> -->
347        <xs:restriction base="xs:string">
348            <xs:pattern value="LNB_[0-9]+"/>
349        </xs:restriction>
350    </xs:simpleType>
351
352    <xs:simpleType name="lnbVoltageEnum">
353        <xs:restriction base="xs:string">
354            <xs:enumeration value="NONE" />
355            <xs:enumeration value="VOLTAGE_5V" />
356            <xs:enumeration value="VOLTAGE_11V" />
357            <xs:enumeration value="VOLTAGE_12V"/>
358            <xs:enumeration value="VOLTAGE_13V"/>
359            <xs:enumeration value="VOLTAGE_14V"/>
360            <xs:enumeration value="VOLTAGE_15V"/>
361            <xs:enumeration value="VOLTAGE_18V"/>
362            <xs:enumeration value="VOLTAGE_19V"/>
363        </xs:restriction>
364    </xs:simpleType>
365    <xs:simpleType name="lnbToneEnum">
366        <xs:restriction base="xs:string">
367            <xs:enumeration value="NONE" />
368            <xs:enumeration value="CONTINUOUS" />
369        </xs:restriction>
370    </xs:simpleType>
371    <xs:simpleType name="lnbPositionEnum">
372        <xs:restriction base="xs:string">
373            <xs:enumeration value="UNDEFINED" />
374            <xs:enumeration value="POSITION_A" />
375            <xs:enumeration value="POSITION_B" />
376        </xs:restriction>
377    </xs:simpleType>
378
379    <!-- Diseqc Messages that would be used to send to the lnb under test. -->
380    <xs:simpleType name="diseqcMsgName">
381        <xs:restriction base="xs:string">
382            <xs:pattern value="[A-Z_]+"/>
383        </xs:restriction>
384    </xs:simpleType>
385    <xs:simpleType name="diseqcMsgBody">
386        <xs:list itemType="xs:unsignedByte"/>
387    </xs:simpleType>
388    <xs:complexType name="diseqcMessage">
389        <xs:attribute name="msgName" type="diseqcMsgName"/>
390        <xs:attribute name="msgBody" type="diseqcMsgBody"/>
391    </xs:complexType>
392    <xs:simpleType name="diseqcMsgSender">
393        <xs:list itemType="diseqcMsgName"/>
394    </xs:simpleType>
395
396    <xs:complexType name="lnb">
397        <xs:annotation>
398            <xs:documentation>
399                Each lnb element contain the following attributes:
400                    "id": unique id of the lnb that could be used to connect to the test the
401                        "dataFlowConfiguration"
402                    "name": the external lnb device name.
403                    "voltage": the voltage used to config the lnb.
404                    "tone": the voltage used to config the lnb.
405                    "position": the voltage used to config the lnb.
406            </xs:documentation>
407        </xs:annotation>
408        <xs:attribute name="id" type="lnbId" use="required"/>
409        <!-- Only required on external lnb with no device id. -->
410        <xs:attribute name="name" type="xs:string" use="optional"/>
411        <xs:attribute name="voltage" type="lnbVoltageEnum" use="required"/>
412        <xs:attribute name="tone" type="lnbToneEnum" use="required"/>
413        <xs:attribute name="position" type="lnbPositionEnum" use="required"/>
414    </xs:complexType>
415
416    <!-- TIME FILTER SESSION -->
417    <xs:simpleType name="timeFilterId">
418        <!-- Time Filter id must be TIME_FILTER_NUM: <timeFilter id="TIME_FILTER_1"/> -->
419        <xs:restriction base="xs:string">
420            <xs:pattern value="TIME_FILTER_[0-9]+"/>
421        </xs:restriction>
422    </xs:simpleType>
423
424    <xs:complexType name="timeFilter">
425        <xs:annotation>
426            <xs:documentation>
427                Each timeFilter element contain the following attributes:
428                    "id": unique id of the time filter that could be used to connect to the test the
429                        "dataFlowConfiguration"
430                    "timeStamp": the time stamp used to config the time filter.
431            </xs:documentation>
432        </xs:annotation>
433        <xs:attribute name="id" type="timeFilterId" use="required"/>
434        <xs:attribute name="timeStamp" type="xs:nonNegativeInteger" use="required"/>
435    </xs:complexType>
436
437    <!-- DESCRAMBLER SESSION -->
438    <xs:simpleType name="descramblerId">
439        <!-- Descrambler id must be DESCRAMBLER_NUM: <descrambler id="DESCRAMBLER_2"/> -->
440        <xs:restriction base="xs:string">
441            <xs:pattern value="DESCRAMBLER_[0-9]+"/>
442        </xs:restriction>
443    </xs:simpleType>
444    <xs:simpleType name="sessionPrivateData">
445        <xs:list itemType="xs:unsignedByte"/>
446    </xs:simpleType>
447
448    <xs:complexType name="descrambler">
449        <xs:annotation>
450            <xs:documentation>
451                Each descrambler element contain the following attributes:
452                    "id": unique id of the descrambler that could be used to connect to the test the
453                        "dataFlowConfiguration"
454                    "casSystemId": the cas system id to connect to the descrambler.
455                    "provisionStr": the provision string to use with the cas plugin.
456                    "sesstionPrivatData": the session private data used to open the cas session.
457            </xs:documentation>
458        </xs:annotation>
459        <xs:attribute name="id" type="descramblerId" use="required"/>
460        <xs:attribute name="casSystemId" type="xs:nonNegativeInteger" use="required"/>
461        <xs:attribute name="provisionStr" type="xs:string" use="optional"/>
462        <xs:attribute name="sesstionPrivatData" type="sessionPrivateData" use="optional"/>
463    </xs:complexType>
464
465    <!-- HARDWARE CONFIGURATION SESSION -->
466    <xs:complexType name="hardwareConfiguration">
467        <xs:sequence>
468            <xs:element name="frontends" minOccurs="0" maxOccurs="1">
469                <xs:complexType>
470                    <xs:annotation>
471                        <xs:documentation xml:lang="en">
472                            This section contains configurations of all the frontends that would be
473                                used in the tests.
474                                - This section is optional and can be skipped to use the default
475                                    fe settings.
476                                - The default settings can be found in the
477                                    sample_tuner_vts_configurations.xml.
478                                - The users can also override the default frontend settings using
479                                    id="FE_DEFAULT".
480                                - The users can configure 1 or more frontend elements in the
481                                    frontends sections.
482                        </xs:documentation>
483                    </xs:annotation>
484                    <xs:sequence>
485                        <xs:element name="frontend" type="frontend" minOccurs="1" maxOccurs="unbounded"/>
486                    </xs:sequence>
487                </xs:complexType>
488            </xs:element>
489            <xs:element name="filters" minOccurs="0" maxOccurs="1">
490                <xs:complexType>
491                    <xs:annotation>
492                        <xs:documentation xml:lang="en">
493                            This section contains configurations of all the filters that would be
494                                used in the tests.
495                                - This section is optional and can be skipped to use the default
496                                    filter settings.
497                                - The default settings can be found in the
498                                    sample_tuner_vts_configurations.xml.
499                                - The users can also override the default filter settings using
500                                - id="FILTER_AUDIO_DEFAULT" or "FILTER_VIDEO_DEFAULT".
501                                - The users can configure 1 or more filter elements in the filters
502                                    sections.
503                        </xs:documentation>
504                    </xs:annotation>
505                    <xs:sequence>
506                        <xs:element name="filter" type="filter" minOccurs="1" maxOccurs="unbounded"/>
507                    </xs:sequence>
508                </xs:complexType>
509            </xs:element>
510            <xs:element name="dvrs" minOccurs="0" maxOccurs="1">
511                <xs:complexType>
512                    <xs:annotation>
513                        <xs:documentation xml:lang="en">
514                            This section contains configurations of all the dvrs that would be used
515                                in the tests.
516                                - This section is optional and can be skipped if the device does
517                                    not support dvr.
518                                - The users can configure 1 or more dvr elements in the dvrs
519                                   sections.
520                        </xs:documentation>
521                    </xs:annotation>
522                    <xs:sequence>
523                        <xs:element name="dvr" type="dvr" minOccurs="1" maxOccurs="unbounded"/>
524                    </xs:sequence>
525                </xs:complexType>
526            </xs:element>
527            <xs:element name="diseqcMessages" minOccurs="0" maxOccurs="1">
528                <xs:complexType>
529                    <xs:annotation>
530                        <xs:documentation xml:lang="en">
531                            This section contains configurations of all the diseqc messages that
532                            would be used in the lnb tests.
533                                - This section is optional and can be skipped if lnb is not suppoted
534                                - The users can configure 1 or more message elements in the
535                                    diseqcMessages sections.
536                        </xs:documentation>
537                    </xs:annotation>
538                    <xs:sequence>
539                        <xs:element name="diseqcMessage" type="diseqcMessage" minOccurs="1" maxOccurs="unbounded"/>
540                    </xs:sequence>
541                </xs:complexType>
542            </xs:element>
543            <xs:element name="lnbs" minOccurs="0" maxOccurs="1">
544                <xs:complexType>
545                    <xs:annotation>
546                        <xs:documentation xml:lang="en">
547                            This section contains configurations of all the lnbs that would be used
548                                in the tests.
549                                - This section is optional and can be skipped if lnb is not suppoted
550                                - The users can configure 1 or more lnb elements in the lnbs
551                                    sections.
552                        </xs:documentation>
553                    </xs:annotation>
554                    <xs:sequence>
555                        <xs:element name="lnb" type="lnb" minOccurs="1" maxOccurs="unbounded"/>
556                    </xs:sequence>
557                </xs:complexType>
558            </xs:element>
559            <xs:element name="timeFilters" minOccurs="0" maxOccurs="1">
560                <xs:complexType>
561                    <xs:annotation>
562                        <xs:documentation xml:lang="en">
563                            This section contains configurations of all the time filters that would
564                                be used in the tests.
565                                - This section is optional and can be skipped if time filter is
566                                    not supported.
567                                - The users can configure 1 or more time filter elements in the
568                                    time filters sections.
569                        </xs:documentation>
570                    </xs:annotation>
571                    <xs:sequence>
572                        <xs:element name="timeFilter" type="timeFilter" minOccurs="1" maxOccurs="unbounded"/>
573                    </xs:sequence>
574                </xs:complexType>
575            </xs:element>
576            <xs:element name="descramblers" minOccurs="0" maxOccurs="1">
577                <xs:complexType>
578                    <xs:annotation>
579                        <xs:documentation xml:lang="en">
580                            This section contains configurations of all the descramblers that would
581                                be used in the tests.
582                                - This section is optional and can be skipped if descrambling is not
583                                    supported.
584                                - The users can configure 1 or more descrambler elements in the
585                                    descramblers sections.
586                        </xs:documentation>
587                    </xs:annotation>
588                    <xs:sequence>
589                        <xs:element name="descrambler" type="descrambler" minOccurs="1" maxOccurs="unbounded"/>
590                    </xs:sequence>
591                </xs:complexType>
592            </xs:element>
593        </xs:sequence>
594    </xs:complexType>
595
596    <!-- DATA FLOW CONFIGURATION SESSION -->
597    <xs:complexType name="dataFlowConfiguration">
598        <xs:sequence>
599            <!-- clearLiveBroadcast is only optional when there is no physical frontend. In this
600              case, the dvrPlayback config is required. -->
601            <xs:element name="clearLiveBroadcast" minOccurs="0" maxOccurs="1">
602                <xs:complexType>
603                    <xs:attribute name="frontendConnection" type="frontendId" use="required"/>
604                    <xs:attribute name="audioFilterConnection" type="filterId" use="required"/>
605                    <xs:attribute name="videoFilterConnection" type="filterId" use="required"/>
606                    <xs:attribute name="pcrFilterConnection" type="filterId" use="optional"/>
607                    <xs:attribute name="sectionFilterConnection" type="filterId" use="optional"/>
608                    <xs:attribute name="ipFilterConnection" type="filterId" use="optional"/>
609                    <!-- TODO: b/182519645 allow the users to insert extra filters -->
610                    <!-- DVR is only required when the frontend is using the software input -->
611                    <xs:attribute name="dvrSoftwareFeConnection" type="dvrId" use="optional"/>
612                </xs:complexType>
613            </xs:element>
614            <!-- scan is only optional when there is no physical frontend. In this case, the
615              dvrPlayback config is required. -->
616            <xs:element name="scan" minOccurs="0" maxOccurs="1">
617                <xs:complexType>
618                    <xs:attribute name="frontendConnection" type="frontendId" use="required"/>
619                </xs:complexType>
620            </xs:element>
621            <xs:element name="descrambling" minOccurs="0" maxOccurs="1">
622                <xs:complexType>
623                    <!-- If there is a software or hardware frontend connection or not. If false,
624                      dvrSourceConnection config is required when testing dvrRecord.  -->
625                    <xs:attribute name="hasFrontendConnection" type="xs:boolean" use="required"/>
626                    <xs:attribute name="frontendConnection" type="frontendId" use="required"/>
627                    <xs:attribute name="descramblerConnection" type="descramblerId" use="required"/>
628                    <xs:attribute name="audioFilterConnection" type="filterId" use="required"/>
629                    <xs:attribute name="videoFilterConnection" type="filterId" use="required"/>
630                    <!-- TODO: b/182519645 allow the users to insert extra filters -->
631                    <!-- This DVR is only required when the frontend is using the software input -->
632                    <xs:attribute name="dvrSoftwareFeConnection" type="dvrId" use="optional"/>
633                    <!-- This Dvr is only required when there's no frontend(sw or hw) connection -->
634                    <xs:attribute name="dvrSourceConnection" type="dvrId" use="optional"/>
635                </xs:complexType>
636            </xs:element>
637            <xs:element name="dvrPlayback" minOccurs="0" maxOccurs="1">
638                <xs:complexType>
639                    <xs:attribute name="dvrConnection" type="dvrId" use="required"/>
640                    <xs:attribute name="audioFilterConnection" type="filterId" use="required"/>
641                    <xs:attribute name="videoFilterConnection" type="filterId" use="required"/>
642                    <xs:attribute name="sectionFilterConnection" type="filterId" use="optional"/>
643                    <!-- TODO: b/182519645 allow the users to insert extra filters -->
644                </xs:complexType>
645            </xs:element>
646            <xs:element name="dvrRecord" minOccurs="0" maxOccurs="1">
647                <xs:complexType>
648                    <!-- If there is a software or hardware frontend connection or not. If false,
649                      dvrSourceConnection config is required when testing dvrRecord.  -->
650                    <xs:attribute name="hasFrontendConnection" type="xs:boolean" use="required"/>
651                    <xs:attribute name="frontendConnection" type="frontendId" use="optional"/>
652                    <xs:attribute name="dvrRecordConnection" type="dvrId" use="required"/>
653                    <!-- This Dvr is only required when the frontend is using the software input -->
654                    <xs:attribute name="dvrSoftwareFeConnection" type="dvrId" use="optional"/>
655                    <!-- This Dvr is only required when there's no frontend(sw or hw) connection -->
656                    <xs:attribute name="dvrSourceConnection" type="dvrId" use="optional"/>
657                    <xs:attribute name="recordFilterConnection" type="filterId" use="required"/>
658                </xs:complexType>
659            </xs:element>
660            <xs:element name="lnbLive" minOccurs="0" maxOccurs="1">
661                <xs:complexType>
662                    <xs:attribute name="frontendConnection" type="frontendId" use="required"/>
663                    <xs:attribute name="audioFilterConnection" type="filterId" use="required"/>
664                    <xs:attribute name="videoFilterConnection" type="filterId" use="required"/>
665                    <xs:attribute name="lnbConnection" type="lnbId" use="required"/>
666                    <xs:attribute name="diseqcMsgSender" type="diseqcMsgSender" use="optional"/>
667                    <!-- TODO: b/182519645 allow the users to insert extra filters -->
668                </xs:complexType>
669            </xs:element>
670            <xs:element name="lnbRecord" minOccurs="0" maxOccurs="1">
671                <xs:complexType>
672                    <xs:attribute name="frontendConnection" type="frontendId" use="required"/>
673                    <xs:attribute name="recordFilterConnection" type="filterId" use="required"/>
674                    <xs:attribute name="dvrRecordConnection" type="dvrId" use="required"/>
675                    <xs:attribute name="lnbConnection" type="lnbId" use="required"/>
676                    <xs:attribute name="diseqcMsgSender" type="diseqcMsgSender" use="optional"/>
677                </xs:complexType>
678            </xs:element>
679            <xs:element name="timeFilter" minOccurs="0" maxOccurs="1">
680                <xs:complexType>
681                    <xs:attribute name="timeFilterConnection" type="timeFilterId" use="required"/>
682                </xs:complexType>
683            </xs:element>
684        </xs:sequence>
685    </xs:complexType>
686
687    <!-- Full Tuner Configuration. This is the root element of the configuration xml. -->
688    <xs:element name="TunerConfiguration">
689        <xs:complexType>
690            <xs:sequence>
691                <xs:element name="hardwareConfiguration" type="hardwareConfiguration" minOccurs="1" maxOccurs="1"/>
692                <xs:element name="dataFlowConfiguration" type="dataFlowConfiguration" minOccurs="1" maxOccurs="1"/>
693            </xs:sequence>
694            <xs:attribute name="version" type="version"/>
695        </xs:complexType>
696        <xs:key name="frontendIdUniqueness">
697            <xs:selector xpath="hardwareConfiguration/frontends/frontend"/>
698            <xs:field xpath="@id"/>
699        </xs:key>
700        <xs:key name="filterIdUniqueness">
701            <xs:selector xpath="hardwareConfiguration/filters/filter"/>
702            <xs:field xpath="@id"/>
703        </xs:key>
704        <xs:key name="dvrIdUniqueness">
705            <xs:selector xpath="hardwareConfiguration/dvrs/dvr"/>
706            <xs:field xpath="@id"/>
707        </xs:key>
708        <xs:key name="lnbIdUniqueness">
709            <xs:selector xpath="hardwareConfiguration/lnbs/lnb"/>
710            <xs:field xpath="@id"/>
711        </xs:key>
712        <xs:key name="timeFilterIdUniqueness">
713            <xs:selector xpath="hardwareConfiguration/timeFilters/timeFilter"/>
714            <xs:field xpath="@id"/>
715        </xs:key>
716        <xs:key name="descramblerIdUniqueness">
717            <xs:selector xpath="hardwareConfiguration/descramblers/descrambler"/>
718            <xs:field xpath="@id"/>
719        </xs:key>
720    </xs:element>
721</xs:schema>
722