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="required"/>
81        <xs:attribute name="isDiseqcRxMessage" type="xs:boolean" use="required"/>
82        <xs:attribute name="inversion" type="xs:nonNegativeInteger" use="required"/>
83        <xs:attribute name="modulation" type="xs:nonNegativeInteger" use="required"/>
84        <xs:attribute name="pilot" type="xs:nonNegativeInteger" use="required"/>
85        <xs:attribute name="standard" type="xs:nonNegativeInteger" use="required"/>
86        <xs:attribute name="vcmMode" type="xs:nonNegativeInteger" use="required"/>
87        <xs:attribute name="rolloff" type="xs:nonNegativeInteger" use="required"/>
88    </xs:complexType>
89    <xs:complexType name="atscFrontendSettings">
90        <xs:attribute name="inversion" type="xs:nonNegativeInteger" use="required"/>
91        <xs:attribute name="modulation" type="xs:nonNegativeInteger" use="required"/>
92    </xs:complexType>
93    <xs:complexType name="isdbsFrontendSettings">
94        <xs:attribute name="streamId" type="xs:nonNegativeInteger" use="required"/>
95        <xs:attribute name="symbolRate" type="xs:nonNegativeInteger" use="required"/>
96        <xs:attribute name="streamIdType" type="xs:nonNegativeInteger" use="required"/>
97        <xs:attribute name="modulation" type="xs:nonNegativeInteger" use="required"/>
98        <xs:attribute name="coderate" type="xs:nonNegativeInteger" use="required"/>
99        <xs:attribute name="rolloff" type="xs:nonNegativeInteger" use="required"/>
100    </xs:complexType>
101    <xs:complexType name="isdbtFrontendSettings">
102        <xs:attribute name="serviceAreaId" type="xs:nonNegativeInteger" use="required"/>
103        <xs:attribute name="inversion" type="xs:nonNegativeInteger" use="required"/>
104        <xs:attribute name="bandwidth" type="xs:nonNegativeInteger" use="required"/>
105        <xs:attribute name="mode" type="xs:nonNegativeInteger" use="required"/>
106        <xs:attribute name="guardInterval" type="xs:nonNegativeInteger" use="required"/>
107        <xs:attribute name="partialReceptionFlag" type="xs:nonNegativeInteger" use="required"/>
108        <xs:element name="FrontendIsdbtLayerSettings" type="FrontendIsdbtLayerSettings"/>
109    </xs:complexType>
110    <xs:complexType name="FrontendIsdbtLayerSettings">
111        <xs:attribute name="modulation" type="xs:nonNegativeInteger" use="required"/>
112        <xs:attribute name="coderate" type="xs:nonNegativeInteger" use="required"/>
113        <xs:attribute name="timeInterleave" type="xs:nonNegativeInteger" use="required"/>
114        <xs:attribute name="numOfSegment" type="xs:nonNegativeInteger" use="required"/>
115    </xs:complexType>
116
117    <xs:complexType name="frontend">
118        <xs:annotation>
119            <xs:documentation>
120                Each frontend element contain the following attributes:
121                    "id": unique id of the frontend that could be used to connect to the test the
122                        "dataFlowConfiguration"
123                    "type": the frontend type. The enums are defined in the xsd.
124                    "isSoftwareFrontend": if the test environment is using hardware or software
125                        frontend. If using software, a ts input file path needs to be configured.
126                    "softwareFeInputPath": used as the source of the software frontend.
127                    "connectToCicamId": if the device supports frontend connecting to cicam, the
128                        target cicam id needs to be configured here. Supported in Tuner 1.1 or
129                        higher.
130                    "removeOutputPid": the unnecessary PID will be filtered out from frontend
131                        output. Supported in Tuner 2.0 or higher.
132                    "frequency": the frequency used to configure tune and scan.
133                    "endFrequency": the end frequency of scan. Supported in Tuner 1.1 or higher.
134
135                Each frontend element also contains at most one type-related "frontendSettings".
136                    - The settings type should match the frontend "type" attribute.
137                    - For example, when frontend type="DVBT", dvbtFrontendSettings can be
138                        configured.
139                    - This is optional and skipping the settings would pass a setting with frequency
140                        config only to the hal.
141            </xs:documentation>
142        </xs:annotation>
143        <xs:choice minOccurs="0" maxOccurs="1">
144            <!-- TODO: b/182519645 finish all the frontend settings structures. -->
145            <!--xs:element name="analog" type="analogSettings"/-->
146            <xs:element name="atscFrontendSettings" type="atscFrontendSettings"/>
147            <!--xs:element name="atsc3" type="atsc3Settings"/>
148            <xs:element name="dvbc" type="dvbcSettings"/-->
149            <xs:element name="dvbsFrontendSettings" type="dvbsFrontendSettings"/>
150            <xs:element name="dvbtFrontendSettings" type="dvbtFrontendSettings"/>
151            <xs:element name="isdbsFrontendSettings" type="isdbsFrontendSettings"/>
152            <!--xs:element name="isdbs3" type="isdbs3Settings"/-->
153            <xs:element name="isdbtFrontendSettings" type="isdbtFrontendSettings"/>
154            <!--xs:element name="dtmb" type="dtmbSettings"/-->
155        </xs:choice>
156        <xs:attribute name="id" type="frontendId" use="required"/>
157        <xs:attribute name="type" type="frontendTypeEnum" use="required"/>
158        <!-- A dvr connection is required in the data flow config section when
159            "isSoftwareFrontend" is true. -->
160        <xs:attribute name="isSoftwareFrontend" type="xs:boolean" use="required"/>
161        <xs:attribute name="frequency" type="xs:nonNegativeInteger" use="required"/>
162        <xs:attribute name="connectToCicamId" type="xs:nonNegativeInteger" use="optional"/>
163        <xs:attribute name="removeOutputPid" type="xs:nonNegativeInteger" use="optional"/>
164        <xs:attribute name="endFrequency" type="xs:nonNegativeInteger" use="optional"/>
165        <xs:attribute name="supportBlindScan" type="xs:boolean" use="optional"/>
166    </xs:complexType>
167
168    <!-- FILTER SESSION -->
169    <xs:simpleType name="filterId">
170        <!-- Filter id must be either FILTER_AUDIO_DEFAULT or FILTER_VIDEO_DEFAULT
171             or FILTER_MAINTYPE_SUBTYPE_NUM
172            <filter id="FILTER_TS_AUDIO_0"/>
173        -->
174        <xs:restriction base="xs:string">
175            <xs:pattern value="FILTER_AUDIO_DEFAULT|FILTER_VIDEO_DEFAULT|FILTER_[A-Z]+_[A-Z]+_[0-9]+"/>
176        </xs:restriction>
177    </xs:simpleType>
178    <!-- A list of filter ids that could be used in the data flow configurations to connect
179        filters under testing. -->
180    <xs:simpleType name="filterConnections">
181        <xs:list itemType="filterId" />
182    </xs:simpleType>
183    <!-- DemuxFilterRecordSettings::tsIndexMask -->
184    <xs:simpleType name="tsIndexMask">
185        <xs:restriction base="xs:integer">
186            <xs:minInclusive value="0"/>
187            <xs:maxInclusive value="8191"/>
188        </xs:restriction>
189    </xs:simpleType>
190    <!-- DemuxFilterRecordSettings::scIndexType -->
191    <xs:simpleType name="scIndexTypeEnum">
192        <xs:restriction base="xs:string">
193            <xs:enumeration value="NONE" />
194            <xs:enumeration value="SC" />
195            <xs:enumeration value="SC_HEVC"/>
196        </xs:restriction>
197    </xs:simpleType>
198    <xs:simpleType name="monitoEvents">
199        <xs:restriction base="xs:integer">
200            <xs:minInclusive value="0"/>
201            <xs:maxInclusive value="3"/>
202        </xs:restriction>
203    </xs:simpleType>
204
205    <xs:simpleType name="filterMainTypeEnum">
206        <xs:restriction base="xs:string">
207            <xs:enumeration value="TS" />
208            <xs:enumeration value="MMTP" />
209            <xs:enumeration value="IP"/>
210            <!-- TODO: b/182519645 Support TLV/ALP filter config
211            <xs:enumeration value="TLV"/>
212            <xs:enumeration value="ALP"/-->
213        </xs:restriction>
214    </xs:simpleType>
215    <xs:simpleType name="filterSubTypeEnum">
216        <xs:restriction base="xs:string">
217            <xs:enumeration value="UNDEFINED" />
218            <xs:enumeration value="SECTION" />
219            <xs:enumeration value="PES" />
220            <xs:enumeration value="TS"/>
221            <xs:enumeration value="AUDIO"/>
222            <xs:enumeration value="VIDEO"/>
223            <xs:enumeration value="PCR"/>
224            <xs:enumeration value="RECORD"/>
225            <xs:enumeration value="TEMI"/>
226            <xs:enumeration value="MMTP"/>
227            <xs:enumeration value="DOWNLOAD"/>
228            <xs:enumeration value="IP"/>
229            <xs:enumeration value="NTP"/>
230            <xs:enumeration value="IP_PAYLOAD"/>
231            <xs:enumeration value="PAYLOAD_THROUGH"/>
232        </xs:restriction>
233    </xs:simpleType>
234
235    <xs:simpleType name="ip">
236        <xs:list itemType="xs:unsignedByte"/>
237    </xs:simpleType>
238    <xs:complexType name="ipAddress">
239        <xs:attribute name="isIpV4" type="xs:boolean" use="required"/>
240        <xs:attribute name="ip" type="ip" use="required"/>
241    </xs:complexType>
242    <xs:complexType name="ipFilterConfig">
243        <xs:sequence>
244            <xs:element name="srcIpAddress" type="ipAddress" minOccurs="1" maxOccurs="1"/>
245            <xs:element name="destIpAddress" type="ipAddress" minOccurs="1" maxOccurs="1"/>
246        </xs:sequence>
247        <xs:attribute name="srcPort" type="xs:unsignedInt" use="optional"/>
248        <xs:attribute name="destPort" type="xs:unsignedInt" use="optional"/>
249        <!-- True if the ip filter data goes to the next filter directly -->
250        <xs:attribute name="dataPassthrough" type="xs:boolean" use="optional"/>
251        <xs:attribute name="ipCid" type="xs:nonNegativeInteger" use="optional"/>
252    </xs:complexType>
253
254    <xs:complexType name="avFilterSettings">
255        <xs:choice minOccurs="0" maxOccurs="1">
256            <xs:element name="audioStreamType" type="xs:unsignedByte"/>
257            <xs:element name="videoStreamType" type="xs:unsignedByte"/>
258        </xs:choice>
259        <xs:attribute name="isPassthrough" type="xs:boolean" use="required"/>
260        <xs:attribute name="isSecureMemory" type="xs:boolean" use="required"/>
261    </xs:complexType>
262    <xs:complexType name="sectionFilterSettings">
263        <xs:attribute name="isCheckCrc" type="xs:boolean" use="required"/>
264        <xs:attribute name="isRepeat" type="xs:boolean" use="required"/>
265        <xs:attribute name="isRaw" type="xs:boolean" use="required"/>
266        <xs:attribute name="bitWidthOfLengthField" type="xs:nonNegativeInteger" use="required"/>
267    </xs:complexType>
268    <xs:complexType name="recordFilterSettings">
269        <xs:attribute name="tsIndexMask" type="tsIndexMask" use="required"/>
270        <xs:attribute name="scIndexType" type="scIndexTypeEnum" use="required"/>
271    </xs:complexType>
272
273    <xs:complexType name="filter">
274        <xs:annotation>
275            <xs:documentation>
276                Each filter element contain the following attributes:
277                    "id": unique id of the filter that could be used to connect to the test the
278                        "dataFlowConfiguration"
279                    "mainType": the main filter type. The enums are defined in the xsd.
280                    "subType": the sub filter type. The enums are defined in the xsd.
281                    "bufferSize": the buffer size of the filter in hex.
282                    "pid": the pid that would be used to configure the filter.
283                    "useFMQ": if the filter uses FMQ.
284                    "timeDelayInMs": the filter's time delay hint. 0 by default.  Must not be
285                        longer than 30 seconds.
286                    "dataDelayInBytes": the filter's data delay hint. 0 by default. Configured data
287                        size must be received within 30 seconds.
288
289                Each filter element also contains at most one type-related "filterSettings".
290                    - The settings type should match the filter "subType" attribute.
291                    - For example, when filter subType is audio or video, the avFilterSettings
292                        can be configured.
293                    - This is optional and skipping the settings would pass a setting with tpid
294                        config only to the hal.
295            </xs:documentation>
296        </xs:annotation>
297        <xs:sequence>
298            <!-- Main filter type related config -->
299            <xs:choice minOccurs="0" maxOccurs="1">
300                <xs:element name="ipFilterConfig" type="ipFilterConfig"/>
301            </xs:choice>
302            <!-- Sub filter type related config -->
303            <xs:choice minOccurs="0" maxOccurs="1">
304                <!-- TODO: b/182519645 finish all the filter settings structures. -->
305                <xs:element name="sectionFilterSettings" type="sectionFilterSettings"/>
306                <xs:element name="avFilterSettings" type="avFilterSettings"/>
307                <xs:element name="recordFilterSettings" type="recordFilterSettings"/>
308                <!--xs:element name="pes" type="pesFilterSettings"/>
309                <xs:element name="download" type="downloadFilterSettings"/-->
310            </xs:choice>
311        </xs:sequence>
312        <xs:attribute name="id" type="filterId" use="required"/>
313        <xs:attribute name="mainType" type="filterMainTypeEnum" use="required"/>
314        <xs:attribute name="subType" type="filterSubTypeEnum" use="required"/>
315        <xs:attribute name="bufferSize" type="xs:nonNegativeInteger" use="required"/>
316        <xs:attribute name="pid" type="xs:nonNegativeInteger" use="optional"/>
317        <xs:attribute name="useFMQ" type="xs:boolean" use="required"/>
318        <xs:attribute name="monitorEventTypes" type="monitoEvents" use="optional"/>
319        <xs:attribute name="timeDelayInMs" type="xs:nonNegativeInteger" use="optional"/>
320        <xs:attribute name="dataDelayInBytes" type="xs:nonNegativeInteger" use="optional"/>
321    </xs:complexType>
322
323    <!-- DVR SESSION -->
324    <xs:simpleType name="dvrId">
325        <!-- Dvr id must be DVR_TYPE_NUM. <dvr id="DVR_PLAYBACK_0"/> -->
326        <xs:restriction base="xs:string">
327            <xs:pattern value="DVR_RECORD_[0-9]+|DVR_PLAYBACK_[0-9]+"/>
328        </xs:restriction>
329    </xs:simpleType>
330    <xs:simpleType name="dvrStatusMask">
331        <!-- Dvr status mask must masking the <dvrStatusEnum> -->
332        <xs:restriction base="xs:integer">
333            <xs:minInclusive value="0"/>
334            <xs:maxInclusive value="15"/>
335        </xs:restriction>
336    </xs:simpleType>
337
338    <xs:simpleType name="dvrStatusEnum">
339        <xs:restriction base="xs:string">
340            <xs:enumeration value="DATA_READY" />
341            <xs:enumeration value="LOW_WATER" />
342            <xs:enumeration value="HIGH_WATER" />
343            <xs:enumeration value="OVERFLOW" />
344        </xs:restriction>
345    </xs:simpleType>
346    <xs:simpleType name="dvrTypeEnum">
347        <xs:restriction base="xs:string">
348            <xs:enumeration value="PLAYBACK" />
349            <xs:enumeration value="RECORD" />
350        </xs:restriction>
351    </xs:simpleType>
352    <xs:simpleType name="dvrDataFormatEnum">
353        <xs:restriction base="xs:string">
354            <xs:enumeration value="TS" />
355            <xs:enumeration value="PES" />
356            <xs:enumeration value="ES" />
357            <xs:enumeration value="SHV_TLV" />
358        </xs:restriction>
359    </xs:simpleType>
360
361    <xs:complexType name="dvr">
362        <xs:annotation>
363            <xs:documentation>
364                Each dvr element contain the following attributes:
365                    "id": unique id of the dvr that could be used to connect to the test the
366                        "dataFlowConfiguration"
367                    "type": the dvr type.
368                    "bufferSize": the dvr buffer size.
369                    "statusMask": register callbacks of specific status.
370                    "lowThreshold": the dvr status low threshold.
371                    "highThreshold": the dvr status high threshold.
372                    "dataFormat": the dvr data format.
373                    "packetSize": the dvr packet size.
374                    "inputFilePath": the dvr playback input file path. Only required in playback
375                        dvr.
376            </xs:documentation>
377        </xs:annotation>
378        <xs:attribute name="id" type="dvrId" use="required"/>
379        <xs:attribute name="type" type="dvrTypeEnum" use="required"/>
380        <xs:attribute name="bufferSize" type="xs:nonNegativeInteger" use="required"/>
381        <xs:attribute name="statusMask" type="dvrStatusMask" use="required"/>
382        <xs:attribute name="lowThreshold" type="xs:nonNegativeInteger" use="required"/>
383        <xs:attribute name="highThreshold" type="xs:nonNegativeInteger" use="required"/>
384        <xs:attribute name="dataFormat" type="dvrDataFormatEnum" use="required"/>
385        <xs:attribute name="packetSize" type="xs:nonNegativeInteger" use="required"/>
386        <xs:attribute name="inputFilePath" type="xs:anyURI" use="optional"/>
387    </xs:complexType>
388
389    <!-- LNB SESSION -->
390    <xs:simpleType name="lnbId">
391        <!-- Lnb id must be LNB_NUM: <lnb id="LNB_10"/> -->
392        <xs:restriction base="xs:string">
393            <xs:pattern value="LNB_[0-9]+"/>
394        </xs:restriction>
395    </xs:simpleType>
396
397    <xs:simpleType name="lnbVoltageEnum">
398        <xs:restriction base="xs:string">
399            <xs:enumeration value="NONE" />
400            <xs:enumeration value="VOLTAGE_5V" />
401            <xs:enumeration value="VOLTAGE_11V" />
402            <xs:enumeration value="VOLTAGE_12V"/>
403            <xs:enumeration value="VOLTAGE_13V"/>
404            <xs:enumeration value="VOLTAGE_14V"/>
405            <xs:enumeration value="VOLTAGE_15V"/>
406            <xs:enumeration value="VOLTAGE_18V"/>
407            <xs:enumeration value="VOLTAGE_19V"/>
408        </xs:restriction>
409    </xs:simpleType>
410    <xs:simpleType name="lnbToneEnum">
411        <xs:restriction base="xs:string">
412            <xs:enumeration value="NONE" />
413            <xs:enumeration value="CONTINUOUS" />
414        </xs:restriction>
415    </xs:simpleType>
416    <xs:simpleType name="lnbPositionEnum">
417        <xs:restriction base="xs:string">
418            <xs:enumeration value="UNDEFINED" />
419            <xs:enumeration value="POSITION_A" />
420            <xs:enumeration value="POSITION_B" />
421        </xs:restriction>
422    </xs:simpleType>
423
424    <!-- Diseqc Messages that would be used to send to the lnb under test. -->
425    <xs:simpleType name="diseqcMsgName">
426        <xs:restriction base="xs:string">
427            <xs:pattern value="[A-Z_]+"/>
428        </xs:restriction>
429    </xs:simpleType>
430    <xs:simpleType name="diseqcMsgBody">
431        <xs:list itemType="xs:unsignedByte"/>
432    </xs:simpleType>
433    <xs:complexType name="diseqcMessage">
434        <xs:attribute name="msgName" type="diseqcMsgName"/>
435        <xs:attribute name="msgBody" type="diseqcMsgBody"/>
436    </xs:complexType>
437    <xs:simpleType name="diseqcMsgSender">
438        <xs:list itemType="diseqcMsgName"/>
439    </xs:simpleType>
440
441    <xs:complexType name="lnb">
442        <xs:annotation>
443            <xs:documentation>
444                Each lnb element contain the following attributes:
445                    "id": unique id of the lnb that could be used to connect to the test the
446                        "dataFlowConfiguration"
447                    "name": the external lnb device name.
448                    "voltage": the voltage used to config the lnb.
449                    "tone": the voltage used to config the lnb.
450                    "position": the voltage used to config the lnb.
451            </xs:documentation>
452        </xs:annotation>
453        <xs:attribute name="id" type="lnbId" use="required"/>
454        <!-- Only required on external lnb with no device id. -->
455        <xs:attribute name="name" type="xs:string" use="optional"/>
456        <xs:attribute name="voltage" type="lnbVoltageEnum" use="required"/>
457        <xs:attribute name="tone" type="lnbToneEnum" use="required"/>
458        <xs:attribute name="position" type="lnbPositionEnum" use="required"/>
459    </xs:complexType>
460
461    <!-- TIME FILTER SESSION -->
462    <xs:simpleType name="timeFilterId">
463        <!-- Time Filter id must be TIME_FILTER_NUM: <timeFilter id="TIME_FILTER_1"/> -->
464        <xs:restriction base="xs:string">
465            <xs:pattern value="TIME_FILTER_[0-9]+"/>
466        </xs:restriction>
467    </xs:simpleType>
468
469    <xs:complexType name="timeFilter">
470        <xs:annotation>
471            <xs:documentation>
472                Each timeFilter element contain the following attributes:
473                    "id": unique id of the time filter that could be used to connect to the test the
474                        "dataFlowConfiguration"
475                    "timeStamp": the time stamp used to config the time filter.
476            </xs:documentation>
477        </xs:annotation>
478        <xs:attribute name="id" type="timeFilterId" use="required"/>
479        <xs:attribute name="timeStamp" type="xs:nonNegativeInteger" use="required"/>
480    </xs:complexType>
481
482    <!-- DESCRAMBLER SESSION -->
483    <xs:simpleType name="descramblerId">
484        <!-- Descrambler id must be DESCRAMBLER_NUM: <descrambler id="DESCRAMBLER_2"/> -->
485        <xs:restriction base="xs:string">
486            <xs:pattern value="DESCRAMBLER_[0-9]+"/>
487        </xs:restriction>
488    </xs:simpleType>
489    <xs:simpleType name="sessionPrivateData">
490        <xs:list itemType="xs:unsignedByte"/>
491    </xs:simpleType>
492
493    <xs:complexType name="descrambler">
494        <xs:annotation>
495            <xs:documentation>
496                Each descrambler element contain the following attributes:
497                    "id": unique id of the descrambler that could be used to connect to the test the
498                        "dataFlowConfiguration"
499                    "casSystemId": the cas system id to connect to the descrambler.
500                    "provisionStr": the provision string to use with the cas plugin.
501                    "sesstionPrivatData": the session private data used to open the cas session.
502            </xs:documentation>
503        </xs:annotation>
504        <xs:attribute name="id" type="descramblerId" use="required"/>
505        <xs:attribute name="casSystemId" type="xs:nonNegativeInteger" use="required"/>
506        <xs:attribute name="provisionStr" type="xs:string" use="optional"/>
507        <xs:attribute name="sesstionPrivatData" type="sessionPrivateData" use="optional"/>
508    </xs:complexType>
509
510    <!-- HARDWARE CONFIGURATION SESSION -->
511    <xs:complexType name="hardwareConfiguration">
512        <xs:sequence>
513            <xs:element name="frontends" minOccurs="0" maxOccurs="1">
514                <xs:complexType>
515                    <xs:annotation>
516                        <xs:documentation xml:lang="en">
517                            This section contains configurations of all the frontends that would be
518                                used in the tests.
519                                - This section is optional and can be skipped to use the default
520                                    fe settings.
521                                - The default settings can be found in the
522                                    sample_tuner_vts_configurations.xml.
523                                - The users can also override the default frontend settings using
524                                    id="FE_DEFAULT".
525                                - The users can configure 1 or more frontend elements in the
526                                    frontends sections.
527                        </xs:documentation>
528                    </xs:annotation>
529                    <xs:sequence>
530                        <xs:element name="frontend" type="frontend" minOccurs="1" maxOccurs="unbounded"/>
531                    </xs:sequence>
532                </xs:complexType>
533            </xs:element>
534            <xs:element name="filters" minOccurs="0" maxOccurs="1">
535                <xs:complexType>
536                    <xs:annotation>
537                        <xs:documentation xml:lang="en">
538                            This section contains configurations of all the filters that would be
539                                used in the tests.
540                                - This section is optional and can be skipped to use the default
541                                    filter settings.
542                                - The default settings can be found in the
543                                    sample_tuner_vts_configurations.xml.
544                                - The users can also override the default filter settings using
545                                - id="FILTER_AUDIO_DEFAULT" or "FILTER_VIDEO_DEFAULT".
546                                - The users can configure 1 or more filter elements in the filters
547                                    sections.
548                        </xs:documentation>
549                    </xs:annotation>
550                    <xs:sequence>
551                        <xs:element name="filter" type="filter" minOccurs="1" maxOccurs="unbounded"/>
552                    </xs:sequence>
553                </xs:complexType>
554            </xs:element>
555            <xs:element name="dvrs" minOccurs="0" maxOccurs="1">
556                <xs:complexType>
557                    <xs:annotation>
558                        <xs:documentation xml:lang="en">
559                            This section contains configurations of all the dvrs that would be used
560                                in the tests.
561                                - This section is optional and can be skipped if the device does
562                                    not support dvr.
563                                - The users can configure 1 or more dvr elements in the dvrs
564                                   sections.
565                        </xs:documentation>
566                    </xs:annotation>
567                    <xs:sequence>
568                        <xs:element name="dvr" type="dvr" minOccurs="1" maxOccurs="unbounded"/>
569                    </xs:sequence>
570                </xs:complexType>
571            </xs:element>
572            <xs:element name="diseqcMessages" minOccurs="0" maxOccurs="1">
573                <xs:complexType>
574                    <xs:annotation>
575                        <xs:documentation xml:lang="en">
576                            This section contains configurations of all the diseqc messages that
577                            would be used in the lnb tests.
578                                - This section is optional and can be skipped if lnb is not suppoted
579                                - The users can configure 1 or more message elements in the
580                                    diseqcMessages sections.
581                        </xs:documentation>
582                    </xs:annotation>
583                    <xs:sequence>
584                        <xs:element name="diseqcMessage" type="diseqcMessage" minOccurs="1" maxOccurs="unbounded"/>
585                    </xs:sequence>
586                </xs:complexType>
587            </xs:element>
588            <xs:element name="lnbs" minOccurs="0" maxOccurs="1">
589                <xs:complexType>
590                    <xs:annotation>
591                        <xs:documentation xml:lang="en">
592                            This section contains configurations of all the lnbs that would be used
593                                in the tests.
594                                - This section is optional and can be skipped if lnb is not suppoted
595                                - The users can configure 1 or more lnb elements in the lnbs
596                                    sections.
597                        </xs:documentation>
598                    </xs:annotation>
599                    <xs:sequence>
600                        <xs:element name="lnb" type="lnb" minOccurs="1" maxOccurs="unbounded"/>
601                    </xs:sequence>
602                </xs:complexType>
603            </xs:element>
604            <xs:element name="timeFilters" minOccurs="0" maxOccurs="1">
605                <xs:complexType>
606                    <xs:annotation>
607                        <xs:documentation xml:lang="en">
608                            This section contains configurations of all the time filters that would
609                                be used in the tests.
610                                - This section is optional and can be skipped if time filter is
611                                    not supported.
612                                - The users can configure 1 or more time filter elements in the
613                                    time filters sections.
614                        </xs:documentation>
615                    </xs:annotation>
616                    <xs:sequence>
617                        <xs:element name="timeFilter" type="timeFilter" minOccurs="1" maxOccurs="unbounded"/>
618                    </xs:sequence>
619                </xs:complexType>
620            </xs:element>
621            <xs:element name="descramblers" minOccurs="0" maxOccurs="1">
622                <xs:complexType>
623                    <xs:annotation>
624                        <xs:documentation xml:lang="en">
625                            This section contains configurations of all the descramblers that would
626                                be used in the tests.
627                                - This section is optional and can be skipped if descrambling is not
628                                    supported.
629                                - The users can configure 1 or more descrambler elements in the
630                                    descramblers sections.
631                        </xs:documentation>
632                    </xs:annotation>
633                    <xs:sequence>
634                        <xs:element name="descrambler" type="descrambler" minOccurs="1" maxOccurs="unbounded"/>
635                    </xs:sequence>
636                </xs:complexType>
637            </xs:element>
638        </xs:sequence>
639    </xs:complexType>
640
641    <!-- DATA FLOW CONFIGURATION SESSION -->
642    <xs:complexType name="dataFlowConfiguration">
643        <xs:sequence>
644            <!-- clearLiveBroadcast is only optional when there is no physical frontend. In this
645              case, the dvrPlayback config is required. -->
646            <xs:element name="clearLiveBroadcast" minOccurs="0" maxOccurs="1">
647                <xs:complexType>
648                    <xs:attribute name="frontendConnection" type="frontendId" use="required"/>
649                    <xs:attribute name="audioFilterConnection" type="filterId" use="required"/>
650                    <xs:attribute name="videoFilterConnection" type="filterId" use="required"/>
651                    <xs:attribute name="pcrFilterConnection" type="filterId" use="optional"/>
652                    <xs:attribute name="sectionFilterConnection" type="filterId" use="optional"/>
653                    <xs:attribute name="ipFilterConnection" type="filterId" use="optional"/>
654                    <xs:element name="optionalFilters" type="filterConnections" minOccurs="0" maxOccurs="1"/>
655                    <!-- DVR is only required when the frontend is using the software input -->
656                    <xs:attribute name="dvrSoftwareFeConnection" type="dvrId" use="optional"/>
657                </xs:complexType>
658            </xs:element>
659            <!-- scan is only optional when there is no physical frontend. In this case, the
660              dvrPlayback config is required. -->
661            <xs:element name="scan" minOccurs="0" maxOccurs="1">
662                <xs:complexType>
663                    <xs:attribute name="frontendConnection" type="frontendId" use="required"/>
664                </xs:complexType>
665            </xs:element>
666            <xs:element name="descrambling" minOccurs="0" maxOccurs="1">
667                <xs:complexType>
668                    <!-- If there is a software or hardware frontend connection or not. If false,
669                      dvrSourceConnection config is required when testing dvrRecord.  -->
670                    <xs:attribute name="hasFrontendConnection" type="xs:boolean" use="required"/>
671                    <xs:attribute name="frontendConnection" type="frontendId" use="required"/>
672                    <xs:attribute name="descramblerConnection" type="descramblerId" use="required"/>
673                    <xs:attribute name="audioFilterConnection" type="filterId" use="required"/>
674                    <xs:attribute name="videoFilterConnection" type="filterId" use="required"/>
675                    <xs:element name="optionalFilters" type="filterConnections" minOccurs="0" maxOccurs="1"/>
676                    <!-- This DVR is only required when the frontend is using the software input -->
677                    <xs:attribute name="dvrSoftwareFeConnection" type="dvrId" use="optional"/>
678                    <!-- This Dvr is only required when there's no frontend(sw or hw) connection -->
679                    <xs:attribute name="dvrSourceConnection" type="dvrId" use="optional"/>
680                </xs:complexType>
681            </xs:element>
682            <xs:element name="dvrPlayback" minOccurs="0" maxOccurs="1">
683                <xs:complexType>
684                    <xs:attribute name="dvrConnection" type="dvrId" use="required"/>
685                    <xs:attribute name="audioFilterConnection" type="filterId" use="required"/>
686                    <xs:attribute name="videoFilterConnection" type="filterId" use="required"/>
687                    <xs:attribute name="sectionFilterConnection" type="filterId" use="optional"/>
688                    <xs:element name="optionalFilters" type="filterConnections" minOccurs="0" maxOccurs="1"/>
689                </xs:complexType>
690            </xs:element>
691            <xs:element name="dvrRecord" minOccurs="0" maxOccurs="1">
692                <xs:complexType>
693                    <!-- If there is a software or hardware frontend connection or not. If false,
694                      dvrSourceConnection config is required when testing dvrRecord.  -->
695                    <xs:attribute name="hasFrontendConnection" type="xs:boolean" use="required"/>
696                    <xs:attribute name="frontendConnection" type="frontendId" use="optional"/>
697                    <xs:attribute name="dvrRecordConnection" type="dvrId" use="required"/>
698                    <!-- This Dvr is only required when the frontend is using the software input -->
699                    <xs:attribute name="dvrSoftwareFeConnection" type="dvrId" use="optional"/>
700                    <!-- This Dvr is only required when there's no frontend(sw or hw) connection -->
701                    <xs:attribute name="dvrSourceConnection" type="dvrId" use="optional"/>
702                    <xs:attribute name="recordFilterConnection" type="filterId" use="required"/>
703                </xs:complexType>
704            </xs:element>
705            <xs:element name="lnbLive" minOccurs="0" maxOccurs="1">
706                <xs:complexType>
707                    <xs:attribute name="frontendConnection" type="frontendId" use="required"/>
708                    <xs:attribute name="audioFilterConnection" type="filterId" use="required"/>
709                    <xs:attribute name="videoFilterConnection" type="filterId" use="required"/>
710                    <xs:attribute name="lnbConnection" type="lnbId" use="required"/>
711                    <xs:attribute name="diseqcMsgSender" type="diseqcMsgSender" use="optional"/>
712                    <xs:element name="optionalFilters" type="filterConnections" minOccurs="0" maxOccurs="1"/>
713                </xs:complexType>
714            </xs:element>
715            <xs:element name="lnbRecord" minOccurs="0" maxOccurs="1">
716                <xs:complexType>
717                    <xs:attribute name="frontendConnection" type="frontendId" use="required"/>
718                    <xs:attribute name="recordFilterConnection" type="filterId" use="required"/>
719                    <xs:attribute name="dvrRecordConnection" type="dvrId" use="required"/>
720                    <xs:attribute name="lnbConnection" type="lnbId" use="required"/>
721                    <xs:attribute name="diseqcMsgSender" type="diseqcMsgSender" use="optional"/>
722                    <xs:element name="optionalFilters" type="filterConnections" minOccurs="0" maxOccurs="1"/>
723                </xs:complexType>
724            </xs:element>
725            <xs:element name="timeFilter" minOccurs="0" maxOccurs="1">
726                <xs:complexType>
727                    <xs:attribute name="timeFilterConnection" type="timeFilterId" use="required"/>
728                </xs:complexType>
729            </xs:element>
730            <xs:element name="lnbDescrambling" minOccurs="0" maxOccurs="1">
731                <xs:complexType>
732                    <xs:attribute name="frontendConnection" type="frontendId" use="required"/>
733                    <xs:attribute name="audioFilterConnection" type="filterId" use="required"/>
734                    <xs:attribute name="videoFilterConnection" type="filterId" use="required"/>
735                    <xs:attribute name="lnbConnection" type="lnbId" use="required"/>
736                    <xs:attribute name="descramblerConnection" type="descramblerId" use="required"/>
737                    <xs:attribute name="diseqcMsgSender" type="diseqcMsgSender" use="optional"/>
738                </xs:complexType>
739            </xs:element>
740        </xs:sequence>
741    </xs:complexType>
742
743    <!-- Full Tuner Configuration. This is the root element of the configuration xml. -->
744    <xs:element name="TunerConfiguration">
745        <xs:complexType>
746            <xs:sequence>
747                <xs:element name="hardwareConfiguration" type="hardwareConfiguration" minOccurs="1" maxOccurs="1"/>
748                <xs:element name="dataFlowConfiguration" type="dataFlowConfiguration" minOccurs="1" maxOccurs="1"/>
749            </xs:sequence>
750            <xs:attribute name="version" type="version"/>
751        </xs:complexType>
752        <xs:key name="frontendIdUniqueness">
753            <xs:selector xpath="hardwareConfiguration/frontends/frontend"/>
754            <xs:field xpath="@id"/>
755        </xs:key>
756        <xs:key name="filterIdUniqueness">
757            <xs:selector xpath="hardwareConfiguration/filters/filter"/>
758            <xs:field xpath="@id"/>
759        </xs:key>
760        <xs:key name="dvrIdUniqueness">
761            <xs:selector xpath="hardwareConfiguration/dvrs/dvr"/>
762            <xs:field xpath="@id"/>
763        </xs:key>
764        <xs:key name="lnbIdUniqueness">
765            <xs:selector xpath="hardwareConfiguration/lnbs/lnb"/>
766            <xs:field xpath="@id"/>
767        </xs:key>
768        <xs:key name="timeFilterIdUniqueness">
769            <xs:selector xpath="hardwareConfiguration/timeFilters/timeFilter"/>
770            <xs:field xpath="@id"/>
771        </xs:key>
772        <xs:key name="descramblerIdUniqueness">
773            <xs:selector xpath="hardwareConfiguration/descramblers/descrambler"/>
774            <xs:field xpath="@id"/>
775        </xs:key>
776    </xs:element>
777    <xs:complexType name="optionalFilter">
778        <xs:attribute name="filterId" type="filterId" use="required"/>
779    </xs:complexType>
780</xs:schema>
781