1 | /* |
---|
2 | * frontend.h |
---|
3 | * |
---|
4 | * Copyright (C) 2000 Marcus Metzler <marcus@convergence.de> |
---|
5 | * Ralph Metzler <ralph@convergence.de> |
---|
6 | * Holger Waechtler <holger@convergence.de> |
---|
7 | * Andre Draszik <ad@convergence.de> |
---|
8 | * for convergence integrated media GmbH |
---|
9 | * |
---|
10 | * This program is free software; you can redistribute it and/or |
---|
11 | * modify it under the terms of the GNU Lesser General Public License |
---|
12 | * as published by the Free Software Foundation; either version 2.1 |
---|
13 | * of the License, or (at your option) any later version. |
---|
14 | * |
---|
15 | * This program is distributed in the hope that it will be useful, |
---|
16 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
---|
17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
---|
18 | * GNU General Public License for more details. |
---|
19 | * |
---|
20 | * You should have received a copy of the GNU Lesser General Public License |
---|
21 | * along with this program; if not, write to the Free Software |
---|
22 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
---|
23 | * |
---|
24 | */ |
---|
25 | |
---|
26 | #ifndef _DVBFRONTEND_H_ |
---|
27 | #define _DVBFRONTEND_H_ |
---|
28 | |
---|
29 | #include <linux/types.h> |
---|
30 | |
---|
31 | typedef enum fe_type { |
---|
32 | FE_QPSK, |
---|
33 | FE_QAM, |
---|
34 | FE_OFDM, |
---|
35 | FE_ATSC |
---|
36 | } fe_type_t; |
---|
37 | |
---|
38 | |
---|
39 | typedef 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, /* We need more bitspace for newer APIs, indicate this. */ |
---|
65 | FE_CAN_MULTISTREAM = 0x4000000, /* frontend supports multistream filtering */ |
---|
66 | FE_CAN_TURBO_FEC = 0x8000000, /* frontend supports "turbo fec modulation" */ |
---|
67 | FE_CAN_2G_MODULATION = 0x10000000, /* frontend supports "2nd generation modulation" (DVB-S2) */ |
---|
68 | FE_NEEDS_BENDING = 0x20000000, /* not supported anymore, don't use (frontend requires frequency bending) */ |
---|
69 | FE_CAN_RECOVER = 0x40000000, /* frontend can recover from a cable unplug automatically */ |
---|
70 | FE_CAN_MUTE_TS = 0x80000000 /* frontend can stop spurious TS data output */ |
---|
71 | } fe_caps_t; |
---|
72 | |
---|
73 | |
---|
74 | struct dvb_frontend_info { |
---|
75 | char name[128]; |
---|
76 | fe_type_t type; /* DEPRECATED. Use DTV_ENUM_DELSYS instead */ |
---|
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; /* ppm */ |
---|
84 | __u32 notifier_delay; /* DEPRECATED */ |
---|
85 | fe_caps_t caps; |
---|
86 | }; |
---|
87 | |
---|
88 | |
---|
89 | /** |
---|
90 | * Check out the DiSEqC bus spec available on http://www.eutelsat.org/ for |
---|
91 | * the meaning of this struct... |
---|
92 | */ |
---|
93 | struct dvb_diseqc_master_cmd { |
---|
94 | __u8 msg [6]; /* { framing, address, command, data [3] } */ |
---|
95 | __u8 msg_len; /* valid values are 3...6 */ |
---|
96 | }; |
---|
97 | |
---|
98 | |
---|
99 | struct dvb_diseqc_slave_reply { |
---|
100 | __u8 msg [4]; /* { framing, data [3] } */ |
---|
101 | __u8 msg_len; /* valid values are 0...4, 0 means no msg */ |
---|
102 | int timeout; /* return from ioctl after timeout ms with */ |
---|
103 | }; /* errorcode when no message was received */ |
---|
104 | |
---|
105 | |
---|
106 | typedef enum fe_sec_voltage { |
---|
107 | SEC_VOLTAGE_13, |
---|
108 | SEC_VOLTAGE_18, |
---|
109 | SEC_VOLTAGE_OFF |
---|
110 | } fe_sec_voltage_t; |
---|
111 | |
---|
112 | |
---|
113 | typedef enum fe_sec_tone_mode { |
---|
114 | SEC_TONE_ON, |
---|
115 | SEC_TONE_OFF |
---|
116 | } fe_sec_tone_mode_t; |
---|
117 | |
---|
118 | |
---|
119 | typedef enum fe_sec_mini_cmd { |
---|
120 | SEC_MINI_A, |
---|
121 | SEC_MINI_B |
---|
122 | } fe_sec_mini_cmd_t; |
---|
123 | |
---|
124 | |
---|
125 | /** |
---|
126 | * enum fe_status - enumerates the possible frontend status |
---|
127 | * @FE_HAS_SIGNAL: found something above the noise level |
---|
128 | * @FE_HAS_CARRIER: found a DVB signal |
---|
129 | * @FE_HAS_VITERBI: FEC is stable |
---|
130 | * @FE_HAS_SYNC: found sync bytes |
---|
131 | * @FE_HAS_LOCK: everything's working |
---|
132 | * @FE_TIMEDOUT: no lock within the last ~2 seconds |
---|
133 | * @FE_REINIT: frontend was reinitialized, application is recommended |
---|
134 | * to reset DiSEqC, tone and parameters |
---|
135 | */ |
---|
136 | |
---|
137 | typedef 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 | |
---|
147 | typedef enum fe_spectral_inversion { |
---|
148 | INVERSION_OFF, |
---|
149 | INVERSION_ON, |
---|
150 | INVERSION_AUTO |
---|
151 | } fe_spectral_inversion_t; |
---|
152 | |
---|
153 | |
---|
154 | typedef 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 | |
---|
171 | typedef 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 | |
---|
188 | typedef 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__) |
---|
201 | typedef 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 | |
---|
212 | typedef 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 | |
---|
227 | typedef enum fe_hierarchy { |
---|
228 | HIERARCHY_NONE, |
---|
229 | HIERARCHY_1, |
---|
230 | HIERARCHY_2, |
---|
231 | HIERARCHY_4, |
---|
232 | HIERARCHY_AUTO |
---|
233 | } fe_hierarchy_t; |
---|
234 | |
---|
235 | enum fe_interleaving { |
---|
236 | INTERLEAVING_NONE, |
---|
237 | INTERLEAVING_AUTO, |
---|
238 | INTERLEAVING_240, |
---|
239 | INTERLEAVING_720 |
---|
240 | }; |
---|
241 | |
---|
242 | #if defined(__DVB_CORE__) || !defined (__KERNEL__) |
---|
243 | struct dvb_qpsk_parameters { |
---|
244 | __u32 symbol_rate; /* symbol rate in Symbols per second */ |
---|
245 | fe_code_rate_t fec_inner; /* forward error correction (see above) */ |
---|
246 | }; |
---|
247 | |
---|
248 | struct dvb_qam_parameters { |
---|
249 | __u32 symbol_rate; /* symbol rate in Symbols per second */ |
---|
250 | fe_code_rate_t fec_inner; /* forward error correction (see above) */ |
---|
251 | fe_modulation_t modulation; /* modulation type (see above) */ |
---|
252 | }; |
---|
253 | |
---|
254 | struct dvb_vsb_parameters { |
---|
255 | fe_modulation_t modulation; /* modulation type (see above) */ |
---|
256 | }; |
---|
257 | |
---|
258 | struct dvb_ofdm_parameters { |
---|
259 | fe_bandwidth_t bandwidth; |
---|
260 | fe_code_rate_t code_rate_HP; /* high priority stream code rate */ |
---|
261 | fe_code_rate_t code_rate_LP; /* low priority stream code rate */ |
---|
262 | fe_modulation_t constellation; /* modulation type (see above) */ |
---|
263 | fe_transmit_mode_t transmission_mode; |
---|
264 | fe_guard_interval_t guard_interval; |
---|
265 | fe_hierarchy_t hierarchy_information; |
---|
266 | }; |
---|
267 | |
---|
268 | |
---|
269 | struct dvb_frontend_parameters { |
---|
270 | __u32 frequency; /* (absolute) frequency in Hz for QAM/OFDM/ATSC */ |
---|
271 | /* intermediate frequency in kHz for QPSK */ |
---|
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 | |
---|
281 | struct dvb_frontend_event { |
---|
282 | fe_status_t status; |
---|
283 | struct dvb_frontend_parameters parameters; |
---|
284 | }; |
---|
285 | #endif |
---|
286 | |
---|
287 | /* S2API Commands */ |
---|
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 | /* Basic enumeration set for querying unlimited capabilities */ |
---|
305 | #define DTV_FE_CAPABILITY_COUNT 15 |
---|
306 | #define DTV_FE_CAPABILITY 16 |
---|
307 | #define DTV_DELIVERY_SYSTEM 17 |
---|
308 | |
---|
309 | /* ISDB-T and ISDB-Tsb */ |
---|
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 | /* ATSC-MH */ |
---|
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 | /* Quality parameters */ |
---|
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 | |
---|
380 | typedef enum fe_pilot { |
---|
381 | PILOT_ON, |
---|
382 | PILOT_OFF, |
---|
383 | PILOT_AUTO |
---|
384 | } fe_pilot_t; |
---|
385 | |
---|
386 | typedef enum fe_rolloff { |
---|
387 | ROLLOFF_35, /* Implied value in DVB-S, default for DVB-S2 */ |
---|
388 | ROLLOFF_20, |
---|
389 | ROLLOFF_25, |
---|
390 | ROLLOFF_AUTO |
---|
391 | } fe_rolloff_t; |
---|
392 | |
---|
393 | typedef 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 | /* backward compatibility */ |
---|
416 | #define SYS_DVBC_ANNEX_AC SYS_DVBC_ANNEX_A |
---|
417 | #define SYS_DMBTH SYS_DTMB /* DMB-TH is legacy name, use DTMB instead */ |
---|
418 | |
---|
419 | /* ATSC-MH */ |
---|
420 | |
---|
421 | enum atscmh_sccc_block_mode { |
---|
422 | ATSCMH_SCCC_BLK_SEP = 0, |
---|
423 | ATSCMH_SCCC_BLK_COMB = 1, |
---|
424 | ATSCMH_SCCC_BLK_RES = 2 |
---|
425 | }; |
---|
426 | |
---|
427 | enum atscmh_sccc_code_mode { |
---|
428 | ATSCMH_SCCC_CODE_HLF = 0, |
---|
429 | ATSCMH_SCCC_CODE_QTR = 1, |
---|
430 | ATSCMH_SCCC_CODE_RES = 2 |
---|
431 | }; |
---|
432 | |
---|
433 | enum atscmh_rs_frame_ensemble { |
---|
434 | ATSCMH_RSFRAME_ENS_PRI = 0, |
---|
435 | ATSCMH_RSFRAME_ENS_SEC = 1 |
---|
436 | }; |
---|
437 | |
---|
438 | enum atscmh_rs_frame_mode { |
---|
439 | ATSCMH_RSFRAME_PRI_ONLY = 0, |
---|
440 | ATSCMH_RSFRAME_PRI_SEC = 1, |
---|
441 | ATSCMH_RSFRAME_RES = 2 |
---|
442 | }; |
---|
443 | |
---|
444 | enum 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 | |
---|
454 | struct dtv_cmds_h { |
---|
455 | char *name; /* A display name for debugging purposes */ |
---|
456 | |
---|
457 | __u32 cmd; /* A unique ID */ |
---|
458 | |
---|
459 | /* Flags */ |
---|
460 | __u32 set:1; /* Either a set or get property */ |
---|
461 | __u32 buffer:1; /* Does this property use the buffer? */ |
---|
462 | __u32 reserved:30; /* Align */ |
---|
463 | }; |
---|
464 | |
---|
465 | /** |
---|
466 | * Scale types for the quality parameters. |
---|
467 | * @FE_SCALE_NOT_AVAILABLE: That QoS measure is not available. That |
---|
468 | * could indicate a temporary or a permanent |
---|
469 | * condition. |
---|
470 | * @FE_SCALE_DECIBEL: The scale is measured in 0.0001 dB steps, typically |
---|
471 | * used on signal measures. |
---|
472 | * @FE_SCALE_RELATIVE: The scale is a relative percentual measure, |
---|
473 | * ranging from 0 (0%) to 0xffff (100%). |
---|
474 | * @FE_SCALE_COUNTER: The scale counts the occurrence of an event, like |
---|
475 | * bit error, block error, lapsed time. |
---|
476 | */ |
---|
477 | enum 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 | * struct dtv_stats - Used for reading a DTV status property |
---|
486 | * |
---|
487 | * @value: value of the measure. Should range from 0 to 0xffff; |
---|
488 | * @scale: Filled with enum fecap_scale_params - the scale |
---|
489 | * in usage for that parameter |
---|
490 | * |
---|
491 | * For most delivery systems, this will return a single value for each |
---|
492 | * parameter. |
---|
493 | * It should be noticed, however, that new OFDM delivery systems like |
---|
494 | * ISDB can use different modulation types for each group of carriers. |
---|
495 | * On such standards, up to 8 groups of statistics can be provided, one |
---|
496 | * for each carrier group (called "layer" on ISDB). |
---|
497 | * In order to be consistent with other delivery systems, the first |
---|
498 | * value refers to the entire set of carriers ("global"). |
---|
499 | * dtv_status:scale should use the value FE_SCALE_NOT_AVAILABLE when |
---|
500 | * the value for the entire group of carriers or from one specific layer |
---|
501 | * is not provided by the hardware. |
---|
502 | * st.len should be filled with the latest filled status + 1. |
---|
503 | * |
---|
504 | * In other words, for ISDB, those values should be filled like: |
---|
505 | * u.st.stat.svalue[0] = global statistics; |
---|
506 | * u.st.stat.scale[0] = FE_SCALE_DECIBELS; |
---|
507 | * u.st.stat.value[1] = layer A statistics; |
---|
508 | * u.st.stat.scale[1] = FE_SCALE_NOT_AVAILABLE (if not available); |
---|
509 | * u.st.stat.svalue[2] = layer B statistics; |
---|
510 | * u.st.stat.scale[2] = FE_SCALE_DECIBELS; |
---|
511 | * u.st.stat.svalue[3] = layer C statistics; |
---|
512 | * u.st.stat.scale[3] = FE_SCALE_DECIBELS; |
---|
513 | * u.st.len = 4; |
---|
514 | */ |
---|
515 | struct dtv_stats { |
---|
516 | __u8 scale; /* enum fecap_scale_params type */ |
---|
517 | union { |
---|
518 | __u64 uvalue; /* for counters and relative scales */ |
---|
519 | __s64 svalue; /* for 0.0001 dB measures */ |
---|
520 | }; |
---|
521 | } __attribute__ ((packed)); |
---|
522 | |
---|
523 | |
---|
524 | #define MAX_DTV_STATS 4 |
---|
525 | |
---|
526 | struct dtv_fe_stats { |
---|
527 | __u8 len; |
---|
528 | struct dtv_stats stat[MAX_DTV_STATS]; |
---|
529 | } __attribute__ ((packed)); |
---|
530 | |
---|
531 | struct 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 | /* num of properties cannot exceed DTV_IOCTL_MAX_MSGS per ioctl */ |
---|
548 | #define DTV_IOCTL_MAX_MSGS 64 |
---|
549 | |
---|
550 | struct 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 | * When set, this flag will disable any zigzagging or other "normal" tuning |
---|
561 | * behaviour. Additionally, there will be no automatic monitoring of the lock |
---|
562 | * status, and hence no frontend events will be generated. If a frontend device |
---|
563 | * is closed, this flag will be automatically turned off when the device is |
---|
564 | * reopened read-write. |
---|
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) /* fe_sec_mini_cmd_t */ |
---|
575 | |
---|
576 | #define FE_SET_TONE _IO('o', 66) /* fe_sec_tone_mode_t */ |
---|
577 | #define FE_SET_VOLTAGE _IO('o', 67) /* fe_sec_voltage_t */ |
---|
578 | #define FE_ENABLE_HIGH_LNB_VOLTAGE _IO('o', 68) /* int */ |
---|
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) /* unsigned int */ |
---|
589 | #define FE_GET_EVENT _IOR('o', 78, struct dvb_frontend_event) |
---|
590 | |
---|
591 | #define FE_DISHNETWORK_SEND_LEGACY_CMD _IO('o', 80) /* unsigned int */ |
---|
592 | |
---|
593 | #endif /*_DVBFRONTEND_H_*/ |
---|