1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26#ifndef _DVBFRONTEND_H_
27#define _DVBFRONTEND_H_
28
29#include <linux/types.h>
30
31typedef enum fe_type {
32 FE_QPSK,
33 FE_QAM,
34 FE_OFDM,
35 FE_ATSC
36} fe_type_t;
37
38
39typedef enum fe_caps {
40 FE_IS_STUPID = 0,
41 FE_CAN_INVERSION_AUTO = 0x1,
42 FE_CAN_FEC_1_2 = 0x2,
43 FE_CAN_FEC_2_3 = 0x4,
44 FE_CAN_FEC_3_4 = 0x8,
45 FE_CAN_FEC_4_5 = 0x10,
46 FE_CAN_FEC_5_6 = 0x20,
47 FE_CAN_FEC_6_7 = 0x40,
48 FE_CAN_FEC_7_8 = 0x80,
49 FE_CAN_FEC_8_9 = 0x100,
50 FE_CAN_FEC_AUTO = 0x200,
51 FE_CAN_QPSK = 0x400,
52 FE_CAN_QAM_16 = 0x800,
53 FE_CAN_QAM_32 = 0x1000,
54 FE_CAN_QAM_64 = 0x2000,
55 FE_CAN_QAM_128 = 0x4000,
56 FE_CAN_QAM_256 = 0x8000,
57 FE_CAN_QAM_AUTO = 0x10000,
58 FE_CAN_TRANSMISSION_MODE_AUTO = 0x20000,
59 FE_CAN_BANDWIDTH_AUTO = 0x40000,
60 FE_CAN_GUARD_INTERVAL_AUTO = 0x80000,
61 FE_CAN_HIERARCHY_AUTO = 0x100000,
62 FE_CAN_8VSB = 0x200000,
63 FE_CAN_16VSB = 0x400000,
64 FE_HAS_EXTENDED_CAPS = 0x800000,
65 FE_CAN_MULTISTREAM = 0x4000000,
66 FE_CAN_TURBO_FEC = 0x8000000,
67 FE_CAN_2G_MODULATION = 0x10000000,
68 FE_NEEDS_BENDING = 0x20000000,
69 FE_CAN_RECOVER = 0x40000000,
70 FE_CAN_MUTE_TS = 0x80000000
71} fe_caps_t;
72
73
74struct dvb_frontend_info {
75 char name[128];
76 fe_type_t type;
77 __u32 frequency_min;
78 __u32 frequency_max;
79 __u32 frequency_stepsize;
80 __u32 frequency_tolerance;
81 __u32 symbol_rate_min;
82 __u32 symbol_rate_max;
83 __u32 symbol_rate_tolerance;
84 __u32 notifier_delay;
85 fe_caps_t caps;
86};
87
88
89
90
91
92
93struct dvb_diseqc_master_cmd {
94 __u8 msg [6];
95 __u8 msg_len;
96};
97
98
99struct dvb_diseqc_slave_reply {
100 __u8 msg [4];
101 __u8 msg_len;
102 int timeout;
103};
104
105
106typedef enum fe_sec_voltage {
107 SEC_VOLTAGE_13,
108 SEC_VOLTAGE_18,
109 SEC_VOLTAGE_OFF
110} fe_sec_voltage_t;
111
112
113typedef enum fe_sec_tone_mode {
114 SEC_TONE_ON,
115 SEC_TONE_OFF
116} fe_sec_tone_mode_t;
117
118
119typedef enum fe_sec_mini_cmd {
120 SEC_MINI_A,
121 SEC_MINI_B
122} fe_sec_mini_cmd_t;
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137typedef enum fe_status {
138 FE_HAS_SIGNAL = 0x01,
139 FE_HAS_CARRIER = 0x02,
140 FE_HAS_VITERBI = 0x04,
141 FE_HAS_SYNC = 0x08,
142 FE_HAS_LOCK = 0x10,
143 FE_TIMEDOUT = 0x20,
144 FE_REINIT = 0x40,
145} fe_status_t;
146
147typedef enum fe_spectral_inversion {
148 INVERSION_OFF,
149 INVERSION_ON,
150 INVERSION_AUTO
151} fe_spectral_inversion_t;
152
153
154typedef enum fe_code_rate {
155 FEC_NONE = 0,
156 FEC_1_2,
157 FEC_2_3,
158 FEC_3_4,
159 FEC_4_5,
160 FEC_5_6,
161 FEC_6_7,
162 FEC_7_8,
163 FEC_8_9,
164 FEC_AUTO,
165 FEC_3_5,
166 FEC_9_10,
167 FEC_2_5,
168} fe_code_rate_t;
169
170
171typedef enum fe_modulation {
172 QPSK,
173 QAM_16,
174 QAM_32,
175 QAM_64,
176 QAM_128,
177 QAM_256,
178 QAM_AUTO,
179 VSB_8,
180 VSB_16,
181 PSK_8,
182 APSK_16,
183 APSK_32,
184 DQPSK,
185 QAM_4_NR,
186} fe_modulation_t;
187
188typedef enum fe_transmit_mode {
189 TRANSMISSION_MODE_2K,
190 TRANSMISSION_MODE_8K,
191 TRANSMISSION_MODE_AUTO,
192 TRANSMISSION_MODE_4K,
193 TRANSMISSION_MODE_1K,
194 TRANSMISSION_MODE_16K,
195 TRANSMISSION_MODE_32K,
196 TRANSMISSION_MODE_C1,
197 TRANSMISSION_MODE_C3780,
198} fe_transmit_mode_t;
199
200#if defined(__DVB_CORE__) || !defined (__KERNEL__)
201typedef enum fe_bandwidth {
202 BANDWIDTH_8_MHZ,
203 BANDWIDTH_7_MHZ,
204 BANDWIDTH_6_MHZ,
205 BANDWIDTH_AUTO,
206 BANDWIDTH_5_MHZ,
207 BANDWIDTH_10_MHZ,
208 BANDWIDTH_1_712_MHZ,
209} fe_bandwidth_t;
210#endif
211
212typedef enum fe_guard_interval {
213 GUARD_INTERVAL_1_32,
214 GUARD_INTERVAL_1_16,
215 GUARD_INTERVAL_1_8,
216 GUARD_INTERVAL_1_4,
217 GUARD_INTERVAL_AUTO,
218 GUARD_INTERVAL_1_128,
219 GUARD_INTERVAL_19_128,
220 GUARD_INTERVAL_19_256,
221 GUARD_INTERVAL_PN420,
222 GUARD_INTERVAL_PN595,
223 GUARD_INTERVAL_PN945,
224} fe_guard_interval_t;
225
226
227typedef enum fe_hierarchy {
228 HIERARCHY_NONE,
229 HIERARCHY_1,
230 HIERARCHY_2,
231 HIERARCHY_4,
232 HIERARCHY_AUTO
233} fe_hierarchy_t;
234
235enum fe_interleaving {
236 INTERLEAVING_NONE,
237 INTERLEAVING_AUTO,
238 INTERLEAVING_240,
239 INTERLEAVING_720,
240};
241
242#if defined(__DVB_CORE__) || !defined (__KERNEL__)
243struct dvb_qpsk_parameters {
244 __u32 symbol_rate;
245 fe_code_rate_t fec_inner;
246};
247
248struct dvb_qam_parameters {
249 __u32 symbol_rate;
250 fe_code_rate_t fec_inner;
251 fe_modulation_t modulation;
252};
253
254struct dvb_vsb_parameters {
255 fe_modulation_t modulation;
256};
257
258struct dvb_ofdm_parameters {
259 fe_bandwidth_t bandwidth;
260 fe_code_rate_t code_rate_HP;
261 fe_code_rate_t code_rate_LP;
262 fe_modulation_t constellation;
263 fe_transmit_mode_t transmission_mode;
264 fe_guard_interval_t guard_interval;
265 fe_hierarchy_t hierarchy_information;
266};
267
268
269struct dvb_frontend_parameters {
270 __u32 frequency;
271
272 fe_spectral_inversion_t inversion;
273 union {
274 struct dvb_qpsk_parameters qpsk;
275 struct dvb_qam_parameters qam;
276 struct dvb_ofdm_parameters ofdm;
277 struct dvb_vsb_parameters vsb;
278 } u;
279};
280
281struct dvb_frontend_event {
282 fe_status_t status;
283 struct dvb_frontend_parameters parameters;
284};
285#endif
286
287
288#define DTV_UNDEFINED 0
289#define DTV_TUNE 1
290#define DTV_CLEAR 2
291#define DTV_FREQUENCY 3
292#define DTV_MODULATION 4
293#define DTV_BANDWIDTH_HZ 5
294#define DTV_INVERSION 6
295#define DTV_DISEQC_MASTER 7
296#define DTV_SYMBOL_RATE 8
297#define DTV_INNER_FEC 9
298#define DTV_VOLTAGE 10
299#define DTV_TONE 11
300#define DTV_PILOT 12
301#define DTV_ROLLOFF 13
302#define DTV_DISEQC_SLAVE_REPLY 14
303
304
305#define DTV_FE_CAPABILITY_COUNT 15
306#define DTV_FE_CAPABILITY 16
307#define DTV_DELIVERY_SYSTEM 17
308
309
310#define DTV_ISDBT_PARTIAL_RECEPTION 18
311#define DTV_ISDBT_SOUND_BROADCASTING 19
312
313#define DTV_ISDBT_SB_SUBCHANNEL_ID 20
314#define DTV_ISDBT_SB_SEGMENT_IDX 21
315#define DTV_ISDBT_SB_SEGMENT_COUNT 22
316
317#define DTV_ISDBT_LAYERA_FEC 23
318#define DTV_ISDBT_LAYERA_MODULATION 24
319#define DTV_ISDBT_LAYERA_SEGMENT_COUNT 25
320#define DTV_ISDBT_LAYERA_TIME_INTERLEAVING 26
321
322#define DTV_ISDBT_LAYERB_FEC 27
323#define DTV_ISDBT_LAYERB_MODULATION 28
324#define DTV_ISDBT_LAYERB_SEGMENT_COUNT 29
325#define DTV_ISDBT_LAYERB_TIME_INTERLEAVING 30
326
327#define DTV_ISDBT_LAYERC_FEC 31
328#define DTV_ISDBT_LAYERC_MODULATION 32
329#define DTV_ISDBT_LAYERC_SEGMENT_COUNT 33
330#define DTV_ISDBT_LAYERC_TIME_INTERLEAVING 34
331
332#define DTV_API_VERSION 35
333
334#define DTV_CODE_RATE_HP 36
335#define DTV_CODE_RATE_LP 37
336#define DTV_GUARD_INTERVAL 38
337#define DTV_TRANSMISSION_MODE 39
338#define DTV_HIERARCHY 40
339
340#define DTV_ISDBT_LAYER_ENABLED 41
341
342#define DTV_STREAM_ID 42
343#define DTV_ISDBS_TS_ID_LEGACY DTV_STREAM_ID
344#define DTV_DVBT2_PLP_ID_LEGACY 43
345
346#define DTV_ENUM_DELSYS 44
347
348
349#define DTV_ATSCMH_FIC_VER 45
350#define DTV_ATSCMH_PARADE_ID 46
351#define DTV_ATSCMH_NOG 47
352#define DTV_ATSCMH_TNOG 48
353#define DTV_ATSCMH_SGN 49
354#define DTV_ATSCMH_PRC 50
355#define DTV_ATSCMH_RS_FRAME_MODE 51
356#define DTV_ATSCMH_RS_FRAME_ENSEMBLE 52
357#define DTV_ATSCMH_RS_CODE_MODE_PRI 53
358#define DTV_ATSCMH_RS_CODE_MODE_SEC 54
359#define DTV_ATSCMH_SCCC_BLOCK_MODE 55
360#define DTV_ATSCMH_SCCC_CODE_MODE_A 56
361#define DTV_ATSCMH_SCCC_CODE_MODE_B 57
362#define DTV_ATSCMH_SCCC_CODE_MODE_C 58
363#define DTV_ATSCMH_SCCC_CODE_MODE_D 59
364
365#define DTV_INTERLEAVING 60
366#define DTV_LNA 61
367
368
369#define DTV_STAT_SIGNAL_STRENGTH 62
370#define DTV_STAT_CNR 63
371#define DTV_STAT_PRE_ERROR_BIT_COUNT 64
372#define DTV_STAT_PRE_TOTAL_BIT_COUNT 65
373#define DTV_STAT_POST_ERROR_BIT_COUNT 66
374#define DTV_STAT_POST_TOTAL_BIT_COUNT 67
375#define DTV_STAT_ERROR_BLOCK_COUNT 68
376#define DTV_STAT_TOTAL_BLOCK_COUNT 69
377
378#define DTV_MAX_COMMAND DTV_STAT_TOTAL_BLOCK_COUNT
379
380typedef enum fe_pilot {
381 PILOT_ON,
382 PILOT_OFF,
383 PILOT_AUTO,
384} fe_pilot_t;
385
386typedef enum fe_rolloff {
387 ROLLOFF_35,
388 ROLLOFF_20,
389 ROLLOFF_25,
390 ROLLOFF_AUTO,
391} fe_rolloff_t;
392
393typedef enum fe_delivery_system {
394 SYS_UNDEFINED,
395 SYS_DVBC_ANNEX_A,
396 SYS_DVBC_ANNEX_B,
397 SYS_DVBT,
398 SYS_DSS,
399 SYS_DVBS,
400 SYS_DVBS2,
401 SYS_DVBH,
402 SYS_ISDBT,
403 SYS_ISDBS,
404 SYS_ISDBC,
405 SYS_ATSC,
406 SYS_ATSCMH,
407 SYS_DTMB,
408 SYS_CMMB,
409 SYS_DAB,
410 SYS_DVBT2,
411 SYS_TURBO,
412 SYS_DVBC_ANNEX_C,
413} fe_delivery_system_t;
414
415
416#define SYS_DVBC_ANNEX_AC SYS_DVBC_ANNEX_A
417#define SYS_DMBTH SYS_DTMB
418
419
420
421enum atscmh_sccc_block_mode {
422 ATSCMH_SCCC_BLK_SEP = 0,
423 ATSCMH_SCCC_BLK_COMB = 1,
424 ATSCMH_SCCC_BLK_RES = 2,
425};
426
427enum atscmh_sccc_code_mode {
428 ATSCMH_SCCC_CODE_HLF = 0,
429 ATSCMH_SCCC_CODE_QTR = 1,
430 ATSCMH_SCCC_CODE_RES = 2,
431};
432
433enum atscmh_rs_frame_ensemble {
434 ATSCMH_RSFRAME_ENS_PRI = 0,
435 ATSCMH_RSFRAME_ENS_SEC = 1,
436};
437
438enum atscmh_rs_frame_mode {
439 ATSCMH_RSFRAME_PRI_ONLY = 0,
440 ATSCMH_RSFRAME_PRI_SEC = 1,
441 ATSCMH_RSFRAME_RES = 2,
442};
443
444enum atscmh_rs_code_mode {
445 ATSCMH_RSCODE_211_187 = 0,
446 ATSCMH_RSCODE_223_187 = 1,
447 ATSCMH_RSCODE_235_187 = 2,
448 ATSCMH_RSCODE_RES = 3,
449};
450
451#define NO_STREAM_ID_FILTER (~0U)
452#define LNA_AUTO (~0U)
453
454struct dtv_cmds_h {
455 char *name;
456
457 __u32 cmd;
458
459
460 __u32 set:1;
461 __u32 buffer:1;
462 __u32 reserved:30;
463};
464
465
466
467
468
469
470
471
472
473
474
475
476
477enum fecap_scale_params {
478 FE_SCALE_NOT_AVAILABLE = 0,
479 FE_SCALE_DECIBEL,
480 FE_SCALE_RELATIVE,
481 FE_SCALE_COUNTER
482};
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515struct dtv_stats {
516 __u8 scale;
517 union {
518 __u64 uvalue;
519 __s64 svalue;
520 };
521} __attribute__ ((packed));
522
523
524#define MAX_DTV_STATS 4
525
526struct dtv_fe_stats {
527 __u8 len;
528 struct dtv_stats stat[MAX_DTV_STATS];
529} __attribute__ ((packed));
530
531struct dtv_property {
532 __u32 cmd;
533 __u32 reserved[3];
534 union {
535 __u32 data;
536 struct dtv_fe_stats st;
537 struct {
538 __u8 data[32];
539 __u32 len;
540 __u32 reserved1[3];
541 void *reserved2;
542 } buffer;
543 } u;
544 int result;
545} __attribute__ ((packed));
546
547
548#define DTV_IOCTL_MAX_MSGS 64
549
550struct dtv_properties {
551 __u32 num;
552 struct dtv_property *props;
553};
554
555#define FE_SET_PROPERTY _IOW('o', 82, struct dtv_properties)
556#define FE_GET_PROPERTY _IOR('o', 83, struct dtv_properties)
557
558
559
560
561
562
563
564
565
566#define FE_TUNE_MODE_ONESHOT 0x01
567
568
569#define FE_GET_INFO _IOR('o', 61, struct dvb_frontend_info)
570
571#define FE_DISEQC_RESET_OVERLOAD _IO('o', 62)
572#define FE_DISEQC_SEND_MASTER_CMD _IOW('o', 63, struct dvb_diseqc_master_cmd)
573#define FE_DISEQC_RECV_SLAVE_REPLY _IOR('o', 64, struct dvb_diseqc_slave_reply)
574#define FE_DISEQC_SEND_BURST _IO('o', 65)
575
576#define FE_SET_TONE _IO('o', 66)
577#define FE_SET_VOLTAGE _IO('o', 67)
578#define FE_ENABLE_HIGH_LNB_VOLTAGE _IO('o', 68)
579
580#define FE_READ_STATUS _IOR('o', 69, fe_status_t)
581#define FE_READ_BER _IOR('o', 70, __u32)
582#define FE_READ_SIGNAL_STRENGTH _IOR('o', 71, __u16)
583#define FE_READ_SNR _IOR('o', 72, __u16)
584#define FE_READ_UNCORRECTED_BLOCKS _IOR('o', 73, __u32)
585
586#define FE_SET_FRONTEND _IOW('o', 76, struct dvb_frontend_parameters)
587#define FE_GET_FRONTEND _IOR('o', 77, struct dvb_frontend_parameters)
588#define FE_SET_FRONTEND_TUNE_MODE _IO('o', 81)
589#define FE_GET_EVENT _IOR('o', 78, struct dvb_frontend_event)
590
591#define FE_DISHNETWORK_SEND_LEGACY_CMD _IO('o', 80)
592
593#endif
594