d20f1fd75fa9d2d7e269c14f8fcede66c2ba2eb9
[cascardo/linux.git] / Documentation / DocBook / media / dvb / frontend_legacy_api.xml
1 <section id="frontend_legacy_types">
2 <title>Frontend Legacy Data Types</title>
3
4 <section id="fe-type-t">
5 <title>Frontend type</title>
6
7 <para>For historical reasons, frontend types are named by the type of modulation
8     used in transmission. The fontend types are given by fe_type_t type, defined as:</para>
9
10 <table pgwide="1" frame="none" id="fe-type">
11 <title>Frontend types</title>
12 <tgroup cols="3">
13    &cs-def;
14    <thead>
15      <row>
16        <entry>fe_type</entry>
17        <entry>Description</entry>
18        <entry><link linkend="DTV-DELIVERY-SYSTEM">DTV_DELIVERY_SYSTEM</link> equivalent type</entry>
19      </row>
20   </thead>
21   <tbody valign="top">
22   <row>
23      <entry id="FE_QPSK"><constant>FE_QPSK</constant></entry>
24      <entry>For DVB-S standard</entry>
25      <entry><constant>SYS_DVBS</constant></entry>
26   </row>
27   <row>
28      <entry id="FE_QAM"><constant>FE_QAM</constant></entry>
29      <entry>For DVB-C annex A standard</entry>
30      <entry><constant>SYS_DVBC_ANNEX_A</constant></entry>
31   </row>
32   <row>
33      <entry id="FE_OFDM"><constant>FE_OFDM</constant></entry>
34      <entry>For DVB-T standard</entry>
35      <entry><constant>SYS_DVBT</constant></entry>
36   </row>
37   <row>
38      <entry id="FE_ATSC"><constant>FE_ATSC</constant></entry>
39      <entry>For ATSC standard (terrestrial) or for DVB-C Annex B (cable) used in US.</entry>
40      <entry><constant>SYS_ATSC</constant> (terrestrial) or <constant>SYS_DVBC_ANNEX_B</constant> (cable)</entry>
41   </row>
42 </tbody></tgroup></table>
43
44 <para>Newer formats like DVB-S2, ISDB-T, ISDB-S and DVB-T2 are not described at the above, as they're
45 supported via the new <link linkend="FE_GET_PROPERTY">FE_GET_PROPERTY/FE_GET_SET_PROPERTY</link> ioctl's, using the <link linkend="DTV-DELIVERY-SYSTEM">DTV_DELIVERY_SYSTEM</link> parameter.
46 </para>
47
48 <para>In the old days, &dvb-frontend-info; used to contain
49     <constant>fe_type_t</constant> field to indicate the delivery systems,
50     filled with either FE_QPSK, FE_QAM, FE_OFDM or FE_ATSC. While this is
51     still filled to keep backward compatibility, the usage of this
52     field is deprecated, as it can report just one delivery system, but some
53     devices support multiple delivery systems. Please use
54     <link linkend="DTV-ENUM-DELSYS">DTV_ENUM_DELSYS</link> instead.
55 </para>
56 <para>On devices that support multiple delivery systems,
57     &dvb-frontend-info;::<constant>fe_type_t</constant> is filled with the
58     currently standard, as selected by the last call to
59     <link linkend="FE_GET_PROPERTY">FE_SET_PROPERTY</link>
60     using the &DTV-DELIVERY-SYSTEM; property.</para>
61 </section>
62
63 <section id="fe-bandwidth-t">
64 <title>Frontend bandwidth</title>
65
66 <table pgwide="1" frame="none" id="fe-bandwidth">
67     <title>enum fe_bandwidth</title>
68     <tgroup cols="2">
69         &cs-def;
70         <thead>
71         <row>
72             <entry>ID</entry>
73             <entry>Description</entry>
74         </row>
75         </thead>
76         <tbody valign="top">
77         <row>
78             <entry>BANDWIDTH_AUTO</entry>
79             <entry>Autodetect bandwidth (if supported)</entry>
80         </row><row>
81             <entry>BANDWIDTH_1_712_MHZ</entry>
82             <entry>1.712 MHz</entry>
83         </row><row>
84             <entry>BANDWIDTH_5_MHZ</entry>
85             <entry>5 MHz</entry>
86         </row><row>
87             <entry>BANDWIDTH_6_MHZ</entry>
88             <entry>6 MHz</entry>
89         </row><row>
90             <entry>BANDWIDTH_7_MHZ</entry>
91             <entry>7 MHz</entry>
92         </row><row>
93             <entry>BANDWIDTH_8_MHZ</entry>
94             <entry>8 MHz</entry>
95         </row><row>
96             <entry>BANDWIDTH_10_MHZ</entry>
97             <entry>10 MHz</entry>
98         </row><row>
99         </row>
100         </tbody>
101     </tgroup>
102 </table>
103
104 </section>
105
106 <section id="dvb-frontend-parameters">
107 <title>frontend parameters</title>
108 <para>The kind of parameters passed to the frontend device for tuning depend on
109 the kind of hardware you are using.</para>
110 <para>The struct <constant>dvb_frontend_parameters</constant> uses an
111 union with specific per-system parameters. However, as newer delivery systems
112 required more data, the structure size weren't enough to fit, and just
113 extending its size would break the existing applications. So, those parameters
114 were replaced by the usage of <link linkend="FE_GET_PROPERTY">
115 <constant>FE_GET_PROPERTY/FE_SET_PROPERTY</constant></link> ioctl's. The
116 new API is flexible enough to add new parameters to existing delivery systems,
117 and to add newer delivery systems.</para>
118 <para>So, newer applications should use <link linkend="FE_GET_PROPERTY">
119 <constant>FE_GET_PROPERTY/FE_SET_PROPERTY</constant></link> instead, in
120 order to be able to support the newer System Delivery like  DVB-S2, DVB-T2,
121 DVB-C2, ISDB, etc.</para>
122 <para>All kinds of parameters are combined as an union in the FrontendParameters structure:
123 <programlisting>
124 struct dvb_frontend_parameters {
125         uint32_t frequency;     /&#x22C6; (absolute) frequency in Hz for QAM/OFDM &#x22C6;/
126                                 /&#x22C6; intermediate frequency in kHz for QPSK &#x22C6;/
127         &fe-spectral-inversion-t; inversion;
128         union {
129                 struct dvb_qpsk_parameters qpsk;
130                 struct dvb_qam_parameters  qam;
131                 struct dvb_ofdm_parameters ofdm;
132                 struct dvb_vsb_parameters  vsb;
133         } u;
134 };
135 </programlisting></para>
136 <para>In the case of QPSK frontends the <constant>frequency</constant> field specifies the intermediate
137 frequency, i.e. the offset which is effectively added to the local oscillator frequency (LOF) of
138 the LNB. The intermediate frequency has to be specified in units of kHz. For QAM and
139 OFDM frontends the <constant>frequency</constant> specifies the absolute frequency and is given in Hz.
140 </para>
141
142 <section id="dvb-qpsk-parameters">
143 <title>QPSK parameters</title>
144 <para>For satellite QPSK frontends you have to use the <constant>dvb_qpsk_parameters</constant> structure:</para>
145 <programlisting>
146  struct dvb_qpsk_parameters {
147          uint32_t        symbol_rate;  /&#x22C6; symbol rate in Symbols per second &#x22C6;/
148          &fe-code-rate-t;  fec_inner;    /&#x22C6; forward error correction (see above) &#x22C6;/
149  };
150 </programlisting>
151 </section>
152
153 <section id="dvb-qam-parameters">
154 <title>QAM parameters</title>
155 <para>for cable QAM frontend you use the <constant>dvb_qam_parameters</constant> structure:</para>
156 <programlisting>
157  struct dvb_qam_parameters {
158          uint32_t         symbol_rate; /&#x22C6; symbol rate in Symbols per second &#x22C6;/
159          &fe-code-rate-t;   fec_inner;   /&#x22C6; forward error correction (see above) &#x22C6;/
160          &fe-modulation-t;  modulation;  /&#x22C6; modulation type (see above) &#x22C6;/
161  };
162 </programlisting>
163 </section>
164
165 <section id="dvb-vsb-parameters">
166 <title>VSB parameters</title>
167 <para>ATSC frontends are supported by the <constant>dvb_vsb_parameters</constant> structure:</para>
168 <programlisting>
169 struct dvb_vsb_parameters {
170         &fe-modulation-t; modulation;   /&#x22C6; modulation type (see above) &#x22C6;/
171 };
172 </programlisting>
173 </section>
174
175 <section id="dvb-ofdm-parameters">
176 <title>OFDM parameters</title>
177 <para>DVB-T frontends are supported by the <constant>dvb_ofdm_parameters</constant> structure:</para>
178 <programlisting>
179  struct dvb_ofdm_parameters {
180          &fe-bandwidth-t;      bandwidth;
181          &fe-code-rate-t;      code_rate_HP;  /&#x22C6; high priority stream code rate &#x22C6;/
182          &fe-code-rate-t;      code_rate_LP;  /&#x22C6; low priority stream code rate &#x22C6;/
183          &fe-modulation-t;     constellation; /&#x22C6; modulation type (see above) &#x22C6;/
184          &fe-transmit-mode-t;  transmission_mode;
185          &fe-guard-interval-t; guard_interval;
186          fe_hierarchy_t      hierarchy_information;
187  };
188 </programlisting>
189 </section>
190 </section>
191
192 <section id="dvb-frontend-event">
193 <title>frontend events</title>
194  <programlisting>
195  struct dvb_frontend_event {
196          fe_status_t status;
197          struct dvb_frontend_parameters parameters;
198  };
199 </programlisting>
200  </section>
201 </section>
202
203 <section id="frontend_fcalls">
204 <title>Frontend Legacy Function Calls</title>
205
206 <para>Those functions are defined at DVB version 3. The support is kept in
207     the kernel due to compatibility issues only. Their usage is strongly
208     not recommended</para>
209
210 <section id="FE_READ_BER">
211 <title>FE_READ_BER</title>
212 <para>DESCRIPTION
213 </para>
214 <informaltable><tgroup cols="1"><tbody><row><entry
215  align="char">
216 <para>This ioctl call returns the bit error rate for the signal currently
217  received/demodulated by the front-end. For this command, read-only access to
218  the device is sufficient.</para>
219 </entry>
220  </row></tbody></tgroup></informaltable>
221 <para>SYNOPSIS
222 </para>
223 <informaltable><tgroup cols="1"><tbody><row><entry
224  align="char">
225 <para>int ioctl(int fd, int request = <link linkend="FE_READ_BER">FE_READ_BER</link>,
226  uint32_t &#x22C6;ber);</para>
227 </entry>
228  </row></tbody></tgroup></informaltable>
229 <para>PARAMETERS
230 </para>
231 <informaltable><tgroup cols="2"><tbody><row><entry
232  align="char">
233 <para>int fd</para>
234 </entry><entry
235  align="char">
236 <para>File descriptor returned by a previous call to open().</para>
237 </entry>
238  </row><row><entry
239  align="char">
240 <para>int request</para>
241 </entry><entry
242  align="char">
243 <para>Equals <link linkend="FE_READ_BER">FE_READ_BER</link> for this command.</para>
244 </entry>
245  </row><row><entry
246  align="char">
247 <para>uint32_t *ber</para>
248 </entry><entry
249  align="char">
250 <para>The bit error rate is stored into *ber.</para>
251 </entry>
252  </row></tbody></tgroup></informaltable>
253
254 &return-value-dvb;
255 </section>
256
257 <section id="FE_READ_SNR">
258 <title>FE_READ_SNR</title>
259
260 <para>DESCRIPTION
261 </para>
262 <informaltable><tgroup cols="1"><tbody><row><entry
263  align="char">
264 <para>This ioctl call returns the signal-to-noise ratio for the signal currently received
265  by the front-end. For this command, read-only access to the device is sufficient.</para>
266 </entry>
267  </row></tbody></tgroup></informaltable>
268 <para>SYNOPSIS
269 </para>
270 <informaltable><tgroup cols="1"><tbody><row><entry
271  align="char">
272 <para>int ioctl(int fd, int request = <link linkend="FE_READ_SNR">FE_READ_SNR</link>, uint16_t
273  &#x22C6;snr);</para>
274 </entry>
275  </row></tbody></tgroup></informaltable>
276 <para>PARAMETERS
277 </para>
278 <informaltable><tgroup cols="2"><tbody><row><entry
279  align="char">
280 <para>int fd</para>
281 </entry><entry
282  align="char">
283 <para>File descriptor returned by a previous call to open().</para>
284 </entry>
285  </row><row><entry
286  align="char">
287 <para>int request</para>
288 </entry><entry
289  align="char">
290 <para>Equals <link linkend="FE_READ_SNR">FE_READ_SNR</link> for this command.</para>
291 </entry>
292  </row><row><entry
293  align="char">
294 <para>uint16_t *snr</para>
295 </entry><entry
296  align="char">
297 <para>The signal-to-noise ratio is stored into *snr.</para>
298 </entry>
299  </row></tbody></tgroup></informaltable>
300
301 &return-value-dvb;
302 </section>
303
304 <section id="FE_READ_SIGNAL_STRENGTH">
305 <title>FE_READ_SIGNAL_STRENGTH</title>
306 <para>DESCRIPTION
307 </para>
308 <informaltable><tgroup cols="1"><tbody><row><entry
309  align="char">
310 <para>This ioctl call returns the signal strength value for the signal currently received
311  by the front-end. For this command, read-only access to the device is sufficient.</para>
312 </entry>
313  </row></tbody></tgroup></informaltable>
314 <para>SYNOPSIS
315 </para>
316 <informaltable><tgroup cols="1"><tbody><row><entry
317  align="char">
318 <para>int ioctl( int fd, int request =
319  <link linkend="FE_READ_SIGNAL_STRENGTH">FE_READ_SIGNAL_STRENGTH</link>, uint16_t &#x22C6;strength);</para>
320 </entry>
321  </row></tbody></tgroup></informaltable>
322
323 <para>PARAMETERS
324 </para>
325 <informaltable><tgroup cols="2"><tbody><row><entry
326  align="char">
327 <para>int fd</para>
328 </entry><entry
329  align="char">
330 <para>File descriptor returned by a previous call to open().</para>
331 </entry>
332  </row><row><entry
333  align="char">
334 <para>int request</para>
335 </entry><entry
336  align="char">
337 <para>Equals <link linkend="FE_READ_SIGNAL_STRENGTH">FE_READ_SIGNAL_STRENGTH</link> for this
338  command.</para>
339 </entry>
340  </row><row><entry
341  align="char">
342 <para>uint16_t *strength</para>
343 </entry><entry
344  align="char">
345 <para>The signal strength value is stored into *strength.</para>
346 </entry>
347  </row></tbody></tgroup></informaltable>
348
349 &return-value-dvb;
350 </section>
351
352 <section id="FE_READ_UNCORRECTED_BLOCKS">
353 <title>FE_READ_UNCORRECTED_BLOCKS</title>
354 <para>DESCRIPTION
355 </para>
356 <informaltable><tgroup cols="1"><tbody><row><entry
357  align="char">
358 <para>This ioctl call returns the number of uncorrected blocks detected by the device
359  driver during its lifetime. For meaningful measurements, the increment in block
360  count during a specific time interval should be calculated. For this command,
361  read-only access to the device is sufficient.</para>
362 </entry>
363  </row><row><entry
364  align="char">
365 <para>Note that the counter will wrap to zero after its maximum count has been
366  reached.</para>
367 </entry>
368  </row></tbody></tgroup></informaltable>
369 <para>SYNOPSIS
370 </para>
371 <informaltable><tgroup cols="1"><tbody><row><entry
372  align="char">
373 <para>int ioctl( int fd, int request =
374  <link linkend="FE_READ_UNCORRECTED_BLOCKS">FE_READ_UNCORRECTED_BLOCKS</link>, uint32_t &#x22C6;ublocks);</para>
375 </entry>
376  </row></tbody></tgroup></informaltable>
377 <para>PARAMETERS
378 </para>
379 <informaltable><tgroup cols="2"><tbody><row><entry
380  align="char">
381 <para>int fd</para>
382 </entry><entry
383  align="char">
384 <para>File descriptor returned by a previous call to open().</para>
385 </entry>
386  </row><row><entry
387  align="char">
388 <para>int request</para>
389 </entry><entry
390  align="char">
391 <para>Equals <link linkend="FE_READ_UNCORRECTED_BLOCKS">FE_READ_UNCORRECTED_BLOCKS</link> for this
392  command.</para>
393 </entry>
394  </row><row><entry
395  align="char">
396 <para>uint32_t *ublocks</para>
397 </entry><entry
398  align="char">
399 <para>The total number of uncorrected blocks seen by the driver
400  so far.</para>
401 </entry>
402  </row></tbody></tgroup></informaltable>
403
404 &return-value-dvb;
405 </section>
406
407 <section id="FE_SET_FRONTEND">
408 <title>FE_SET_FRONTEND</title>
409 <para>DESCRIPTION
410 </para>
411 <informaltable><tgroup cols="1"><tbody><row><entry
412  align="char">
413 <para>This ioctl call starts a tuning operation using specified parameters. The result
414  of this call will be successful if the parameters were valid and the tuning could
415  be initiated. The result of the tuning operation in itself, however, will arrive
416  asynchronously as an event (see documentation for <link linkend="FE_GET_EVENT">FE_GET_EVENT</link> and
417  FrontendEvent.) If a new <link linkend="FE_SET_FRONTEND">FE_SET_FRONTEND</link> operation is initiated before
418  the previous one was completed, the previous operation will be aborted in favor
419  of the new one. This command requires read/write access to the device.</para>
420 </entry>
421  </row></tbody></tgroup></informaltable>
422
423 <para>SYNOPSIS
424 </para>
425 <informaltable><tgroup cols="1"><tbody><row><entry
426  align="char">
427 <para>int ioctl(int fd, int request = <link linkend="FE_SET_FRONTEND">FE_SET_FRONTEND</link>,
428  struct dvb_frontend_parameters &#x22C6;p);</para>
429 </entry>
430  </row></tbody></tgroup></informaltable>
431 <para>PARAMETERS
432 </para>
433 <informaltable><tgroup cols="2"><tbody><row><entry
434  align="char">
435 <para>int fd</para>
436 </entry><entry
437  align="char">
438 <para>File descriptor returned by a previous call to open().</para>
439 </entry>
440  </row><row><entry
441  align="char">
442 <para>int request</para>
443 </entry><entry
444  align="char">
445 <para>Equals <link linkend="FE_SET_FRONTEND">FE_SET_FRONTEND</link> for this command.</para>
446 </entry>
447  </row><row><entry
448  align="char">
449 <para>struct
450  dvb_frontend_parameters
451  *p</para>
452 </entry><entry
453  align="char">
454 <para>Points to parameters for tuning operation.</para>
455 </entry>
456  </row></tbody></tgroup></informaltable>
457
458 &return-value-dvb;
459 <informaltable><tgroup cols="2"><tbody><row><entry
460  align="char">
461 <para>EINVAL</para>
462 </entry><entry
463  align="char">
464 <para>Maximum supported symbol rate reached.</para>
465 </entry>
466 </row></tbody></tgroup></informaltable>
467 </section>
468
469 <section id="FE_GET_FRONTEND">
470 <title>FE_GET_FRONTEND</title>
471 <para>DESCRIPTION
472 </para>
473 <informaltable><tgroup cols="1"><tbody><row><entry
474  align="char">
475 <para>This ioctl call queries the currently effective frontend parameters. For this
476  command, read-only access to the device is sufficient.</para>
477 </entry>
478  </row></tbody></tgroup></informaltable>
479
480 <para>SYNOPSIS
481 </para>
482 <informaltable><tgroup cols="1"><tbody><row><entry
483  align="char">
484 <para>int ioctl(int fd, int request = <link linkend="FE_GET_FRONTEND">FE_GET_FRONTEND</link>,
485  struct dvb_frontend_parameters &#x22C6;p);</para>
486 </entry>
487  </row></tbody></tgroup></informaltable>
488
489 <para>PARAMETERS
490 </para>
491 <informaltable><tgroup cols="2"><tbody><row><entry
492  align="char">
493 <para>int fd</para>
494 </entry><entry
495  align="char">
496 <para>File descriptor returned by a previous call to open().</para>
497 </entry>
498  </row><row><entry
499  align="char">
500 <para>int request</para>
501 </entry><entry
502  align="char">
503 <para>Equals <link linkend="FE_SET_FRONTEND">FE_SET_FRONTEND</link> for this command.</para>
504 </entry>
505  </row><row><entry
506  align="char">
507 <para>struct
508  dvb_frontend_parameters
509  *p</para>
510 </entry><entry
511  align="char">
512 <para>Points to parameters for tuning operation.</para>
513 </entry>
514  </row></tbody></tgroup></informaltable>
515
516 &return-value-dvb;
517 <informaltable><tgroup cols="2"><tbody><row><entry
518  align="char">
519 <para>EINVAL</para>
520 </entry><entry
521  align="char">
522 <para>Maximum supported symbol rate reached.</para>
523 </entry>
524  </row></tbody></tgroup></informaltable>
525
526 </section>
527
528 <section id="FE_GET_EVENT">
529 <title>FE_GET_EVENT</title>
530 <para>DESCRIPTION
531 </para>
532 <informaltable><tgroup cols="1"><tbody><row><entry
533  align="char">
534 <para>This ioctl call returns a frontend event if available. If an event is not
535  available, the behavior depends on whether the device is in blocking or
536  non-blocking mode. In the latter case, the call fails immediately with errno
537  set to EWOULDBLOCK. In the former case, the call blocks until an event
538  becomes available.</para>
539 </entry>
540  </row><row><entry
541  align="char">
542 <para>The standard Linux poll() and/or select() system calls can be used with the
543  device file descriptor to watch for new events. For select(), the file descriptor
544  should be included in the exceptfds argument, and for poll(), POLLPRI should
545  be specified as the wake-up condition. Since the event queue allocated is
546  rather small (room for 8 events), the queue must be serviced regularly to avoid
547  overflow. If an overflow happens, the oldest event is discarded from the queue,
548  and an error (EOVERFLOW) occurs the next time the queue is read. After
549  reporting the error condition in this fashion, subsequent
550  <link linkend="FE_GET_EVENT">FE_GET_EVENT</link>
551  calls will return events from the queue as usual.</para>
552 </entry>
553  </row><row><entry
554  align="char">
555 <para>For the sake of implementation simplicity, this command requires read/write
556  access to the device.</para>
557 </entry>
558  </row></tbody></tgroup></informaltable>
559
560 <para>SYNOPSIS
561 </para>
562 <informaltable><tgroup cols="1"><tbody><row><entry
563  align="char">
564 <para>int ioctl(int fd, int request = QPSK_GET_EVENT,
565  struct dvb_frontend_event &#x22C6;ev);</para>
566 </entry>
567  </row></tbody></tgroup></informaltable>
568
569 <para>PARAMETERS
570 </para>
571 <informaltable><tgroup cols="2"><tbody><row><entry
572  align="char">
573 <para>int fd</para>
574 </entry><entry
575  align="char">
576 <para>File descriptor returned by a previous call to open().</para>
577 </entry>
578  </row><row><entry
579  align="char">
580 <para>int request</para>
581 </entry><entry
582  align="char">
583 <para>Equals <link linkend="FE_GET_EVENT">FE_GET_EVENT</link> for this command.</para>
584 </entry>
585  </row><row><entry
586  align="char">
587 <para>struct
588  dvb_frontend_event
589  *ev</para>
590 </entry><entry
591  align="char">
592 <para>Points to the location where the event,</para>
593 </entry>
594  </row><row><entry
595  align="char">
596 </entry><entry
597  align="char">
598 <para>if any, is to be stored.</para>
599 </entry>
600  </row></tbody></tgroup></informaltable>
601
602 &return-value-dvb;
603 <informaltable><tgroup cols="2"><tbody><row><entry
604  align="char">
605 <para>EWOULDBLOCK</para>
606 </entry><entry
607  align="char">
608 <para>There is no event pending, and the device is in
609  non-blocking mode.</para>
610 </entry>
611  </row><row><entry
612  align="char">
613 <para>EOVERFLOW</para>
614 </entry><entry
615  align="char">
616 <para>Overflow in event queue - one or more events were lost.</para>
617 </entry>
618 </row></tbody></tgroup></informaltable>
619 </section>
620
621 <section id="FE_DISHNETWORK_SEND_LEGACY_CMD">
622         <title>FE_DISHNETWORK_SEND_LEGACY_CMD</title>
623 <para>DESCRIPTION</para>
624 <informaltable><tgroup cols="1"><tbody><row>
625 <entry align="char">
626 <para>WARNING: This is a very obscure legacy command, used only at stv0299 driver. Should not be used on newer drivers.</para>
627 <para>It provides a non-standard method for selecting Diseqc voltage on the frontend, for Dish Network legacy switches.</para>
628 <para>As support for this ioctl were added in 2004, this means that such dishes were already legacy in 2004.</para>
629 </entry>
630 </row></tbody></tgroup></informaltable>
631
632 <para>SYNOPSIS</para>
633 <informaltable><tgroup cols="1"><tbody><row>
634 <entry align="char">
635 <para>int ioctl(int fd, int request =
636         <link linkend="FE_DISHNETWORK_SEND_LEGACY_CMD">FE_DISHNETWORK_SEND_LEGACY_CMD</link>, unsigned long cmd);</para>
637 </entry>
638 </row></tbody></tgroup></informaltable>
639
640 <para>PARAMETERS</para>
641 <informaltable><tgroup cols="2"><tbody><row>
642 <entry align="char">
643         <para>unsigned long cmd</para>
644 </entry>
645 <entry align="char">
646 <para>
647 sends the specified raw cmd to the dish via DISEqC.
648 </para>
649 </entry>
650  </row></tbody></tgroup></informaltable>
651
652 &return-value-dvb;
653 </section>
654
655 </section>