|
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 <asm/types.h> |
|
30 |
|
31 |
|
32 typedef enum fe_type { |
|
33 FE_QPSK, |
|
34 FE_QAM, |
|
35 FE_OFDM, |
|
36 FE_ATSC |
|
37 } fe_type_t; |
|
38 |
|
39 |
|
40 typedef enum fe_caps { |
|
41 FE_IS_STUPID = 0, |
|
42 FE_CAN_INVERSION_AUTO = 0x1, |
|
43 FE_CAN_FEC_1_2 = 0x2, |
|
44 FE_CAN_FEC_2_3 = 0x4, |
|
45 FE_CAN_FEC_3_4 = 0x8, |
|
46 FE_CAN_FEC_4_5 = 0x10, |
|
47 FE_CAN_FEC_5_6 = 0x20, |
|
48 FE_CAN_FEC_6_7 = 0x40, |
|
49 FE_CAN_FEC_7_8 = 0x80, |
|
50 FE_CAN_FEC_8_9 = 0x100, |
|
51 FE_CAN_FEC_AUTO = 0x200, |
|
52 FE_CAN_QPSK = 0x400, |
|
53 FE_CAN_QAM_16 = 0x800, |
|
54 FE_CAN_QAM_32 = 0x1000, |
|
55 FE_CAN_QAM_64 = 0x2000, |
|
56 FE_CAN_QAM_128 = 0x4000, |
|
57 FE_CAN_QAM_256 = 0x8000, |
|
58 FE_CAN_QAM_AUTO = 0x10000, |
|
59 FE_CAN_TRANSMISSION_MODE_AUTO = 0x20000, |
|
60 FE_CAN_BANDWIDTH_AUTO = 0x40000, |
|
61 FE_CAN_GUARD_INTERVAL_AUTO = 0x80000, |
|
62 FE_CAN_HIERARCHY_AUTO = 0x100000, |
|
63 FE_CAN_8VSB = 0x200000, |
|
64 FE_CAN_16VSB = 0x400000, |
|
65 FE_HAS_EXTENDED_CAPS = 0x800000, // We need more bitspace for newer APIs, indicate this. |
|
66 FE_NEEDS_BENDING = 0x20000000, // not supported anymore, don't use (frontend requires frequency bending) |
|
67 FE_CAN_RECOVER = 0x40000000, // frontend can recover from a cable unplug automatically |
|
68 FE_CAN_MUTE_TS = 0x80000000 // frontend can stop spurious TS data output |
|
69 } fe_caps_t; |
|
70 |
|
71 |
|
72 struct dvb_frontend_info { |
|
73 char name[128]; |
|
74 fe_type_t type; |
|
75 __u32 frequency_min; |
|
76 __u32 frequency_max; |
|
77 __u32 frequency_stepsize; |
|
78 __u32 frequency_tolerance; |
|
79 __u32 symbol_rate_min; |
|
80 __u32 symbol_rate_max; |
|
81 __u32 symbol_rate_tolerance; /* ppm */ |
|
82 __u32 notifier_delay; /* DEPRECATED */ |
|
83 fe_caps_t caps; |
|
84 }; |
|
85 |
|
86 |
|
87 /** |
|
88 * Check out the DiSEqC bus spec available on http://www.eutelsat.org/ for |
|
89 * the meaning of this struct... |
|
90 */ |
|
91 struct dvb_diseqc_master_cmd { |
|
92 __u8 msg [6]; /* { framing, address, command, data [3] } */ |
|
93 __u8 msg_len; /* valid values are 3...6 */ |
|
94 }; |
|
95 |
|
96 |
|
97 struct dvb_diseqc_slave_reply { |
|
98 __u8 msg [4]; /* { framing, data [3] } */ |
|
99 __u8 msg_len; /* valid values are 0...4, 0 means no msg */ |
|
100 int timeout; /* return from ioctl after timeout ms with */ |
|
101 }; /* errorcode when no message was received */ |
|
102 |
|
103 |
|
104 typedef enum fe_sec_voltage { |
|
105 SEC_VOLTAGE_13, |
|
106 SEC_VOLTAGE_18, |
|
107 SEC_VOLTAGE_OFF |
|
108 } fe_sec_voltage_t; |
|
109 |
|
110 |
|
111 typedef enum fe_sec_tone_mode { |
|
112 SEC_TONE_ON, |
|
113 SEC_TONE_OFF |
|
114 } fe_sec_tone_mode_t; |
|
115 |
|
116 |
|
117 typedef enum fe_sec_mini_cmd { |
|
118 SEC_MINI_A, |
|
119 SEC_MINI_B |
|
120 } fe_sec_mini_cmd_t; |
|
121 |
|
122 |
|
123 typedef enum fe_status { |
|
124 FE_HAS_SIGNAL = 0x01, /* found something above the noise level */ |
|
125 FE_HAS_CARRIER = 0x02, /* found a DVB signal */ |
|
126 FE_HAS_VITERBI = 0x04, /* FEC is stable */ |
|
127 FE_HAS_SYNC = 0x08, /* found sync bytes */ |
|
128 FE_HAS_LOCK = 0x10, /* everything's working... */ |
|
129 FE_TIMEDOUT = 0x20, /* no lock within the last ~2 seconds */ |
|
130 FE_REINIT = 0x40 /* frontend was reinitialized, */ |
|
131 } fe_status_t; /* application is recommended to reset */ |
|
132 /* DiSEqC, tone and parameters */ |
|
133 |
|
134 typedef enum fe_spectral_inversion { |
|
135 INVERSION_OFF, |
|
136 INVERSION_ON, |
|
137 INVERSION_AUTO |
|
138 } fe_spectral_inversion_t; |
|
139 |
|
140 |
|
141 typedef enum fe_code_rate { |
|
142 FEC_NONE = 0, |
|
143 FEC_1_2, |
|
144 FEC_2_3, |
|
145 FEC_3_4, |
|
146 FEC_4_5, |
|
147 FEC_5_6, |
|
148 FEC_6_7, |
|
149 FEC_7_8, |
|
150 FEC_8_9, |
|
151 FEC_AUTO, |
|
152 FEC_3_5, |
|
153 FEC_9_10, |
|
154 } fe_code_rate_t; |
|
155 |
|
156 |
|
157 typedef enum fe_modulation { |
|
158 QPSK, |
|
159 QAM_16, |
|
160 QAM_32, |
|
161 QAM_64, |
|
162 QAM_128, |
|
163 QAM_256, |
|
164 QAM_AUTO, |
|
165 VSB_8, |
|
166 VSB_16, |
|
167 PSK_8, |
|
168 APSK_16, |
|
169 APSK_32, |
|
170 DQPSK, |
|
171 } fe_modulation_t; |
|
172 |
|
173 typedef enum fe_transmit_mode { |
|
174 TRANSMISSION_MODE_2K, |
|
175 TRANSMISSION_MODE_8K, |
|
176 TRANSMISSION_MODE_AUTO |
|
177 } fe_transmit_mode_t; |
|
178 |
|
179 typedef enum fe_bandwidth { |
|
180 BANDWIDTH_8_MHZ, |
|
181 BANDWIDTH_7_MHZ, |
|
182 BANDWIDTH_6_MHZ, |
|
183 BANDWIDTH_AUTO |
|
184 } fe_bandwidth_t; |
|
185 |
|
186 |
|
187 typedef enum fe_guard_interval { |
|
188 GUARD_INTERVAL_1_32, |
|
189 GUARD_INTERVAL_1_16, |
|
190 GUARD_INTERVAL_1_8, |
|
191 GUARD_INTERVAL_1_4, |
|
192 GUARD_INTERVAL_AUTO |
|
193 } fe_guard_interval_t; |
|
194 |
|
195 |
|
196 typedef enum fe_hierarchy { |
|
197 HIERARCHY_NONE, |
|
198 HIERARCHY_1, |
|
199 HIERARCHY_2, |
|
200 HIERARCHY_4, |
|
201 HIERARCHY_AUTO |
|
202 } fe_hierarchy_t; |
|
203 |
|
204 |
|
205 struct dvb_qpsk_parameters { |
|
206 __u32 symbol_rate; /* symbol rate in Symbols per second */ |
|
207 fe_code_rate_t fec_inner; /* forward error correction (see above) */ |
|
208 }; |
|
209 |
|
210 struct dvb_qam_parameters { |
|
211 __u32 symbol_rate; /* symbol rate in Symbols per second */ |
|
212 fe_code_rate_t fec_inner; /* forward error correction (see above) */ |
|
213 fe_modulation_t modulation; /* modulation type (see above) */ |
|
214 }; |
|
215 |
|
216 struct dvb_vsb_parameters { |
|
217 fe_modulation_t modulation; /* modulation type (see above) */ |
|
218 }; |
|
219 |
|
220 struct dvb_ofdm_parameters { |
|
221 fe_bandwidth_t bandwidth; |
|
222 fe_code_rate_t code_rate_HP; /* high priority stream code rate */ |
|
223 fe_code_rate_t code_rate_LP; /* low priority stream code rate */ |
|
224 fe_modulation_t constellation; /* modulation type (see above) */ |
|
225 fe_transmit_mode_t transmission_mode; |
|
226 fe_guard_interval_t guard_interval; |
|
227 fe_hierarchy_t hierarchy_information; |
|
228 }; |
|
229 |
|
230 |
|
231 struct dvb_frontend_parameters { |
|
232 __u32 frequency; /* (absolute) frequency in Hz for QAM/OFDM/ATSC */ |
|
233 /* intermediate frequency in kHz for QPSK */ |
|
234 fe_spectral_inversion_t inversion; |
|
235 union { |
|
236 struct dvb_qpsk_parameters qpsk; |
|
237 struct dvb_qam_parameters qam; |
|
238 struct dvb_ofdm_parameters ofdm; |
|
239 struct dvb_vsb_parameters vsb; |
|
240 } u; |
|
241 }; |
|
242 |
|
243 |
|
244 struct dvb_frontend_event { |
|
245 fe_status_t status; |
|
246 struct dvb_frontend_parameters parameters; |
|
247 }; |
|
248 |
|
249 /* S2API Commands */ |
|
250 #define DTV_UNDEFINED 0 |
|
251 #define DTV_TUNE 1 |
|
252 #define DTV_CLEAR 2 |
|
253 #define DTV_FREQUENCY 3 |
|
254 #define DTV_MODULATION 4 |
|
255 #define DTV_BANDWIDTH_HZ 5 |
|
256 #define DTV_INVERSION 6 |
|
257 #define DTV_DISEQC_MASTER 7 |
|
258 #define DTV_SYMBOL_RATE 8 |
|
259 #define DTV_INNER_FEC 9 |
|
260 #define DTV_VOLTAGE 10 |
|
261 #define DTV_TONE 11 |
|
262 #define DTV_PILOT 12 |
|
263 #define DTV_ROLLOFF 13 |
|
264 #define DTV_DISEQC_SLAVE_REPLY 14 |
|
265 |
|
266 /* Basic enumeration set for querying unlimited capabilities */ |
|
267 #define DTV_FE_CAPABILITY_COUNT 15 |
|
268 #define DTV_FE_CAPABILITY 16 |
|
269 #define DTV_DELIVERY_SYSTEM 17 |
|
270 |
|
271 #define DTV_API_VERSION 35 |
|
272 #define DTV_API_VERSION 35 |
|
273 #define DTV_CODE_RATE_HP 36 |
|
274 #define DTV_CODE_RATE_LP 37 |
|
275 #define DTV_GUARD_INTERVAL 38 |
|
276 #define DTV_TRANSMISSION_MODE 39 |
|
277 #define DTV_HIERARCHY 40 |
|
278 |
|
279 #define DTV_MAX_COMMAND DTV_HIERARCHY |
|
280 |
|
281 typedef enum fe_pilot { |
|
282 PILOT_ON, |
|
283 PILOT_OFF, |
|
284 PILOT_AUTO, |
|
285 } fe_pilot_t; |
|
286 |
|
287 typedef enum fe_rolloff { |
|
288 ROLLOFF_35, /* Implied value in DVB-S, default for DVB-S2 */ |
|
289 ROLLOFF_20, |
|
290 ROLLOFF_25, |
|
291 ROLLOFF_AUTO, |
|
292 } fe_rolloff_t; |
|
293 |
|
294 typedef enum fe_delivery_system { |
|
295 SYS_UNDEFINED, |
|
296 SYS_DVBC_ANNEX_AC, |
|
297 SYS_DVBC_ANNEX_B, |
|
298 SYS_DVBT, |
|
299 SYS_DSS, |
|
300 SYS_DVBS, |
|
301 SYS_DVBS2, |
|
302 SYS_DVBH, |
|
303 SYS_ISDBT, |
|
304 SYS_ISDBS, |
|
305 SYS_ISDBC, |
|
306 SYS_ATSC, |
|
307 SYS_ATSCMH, |
|
308 SYS_DMBTH, |
|
309 SYS_CMMB, |
|
310 SYS_DAB, |
|
311 } fe_delivery_system_t; |
|
312 |
|
313 struct dtv_cmds_h { |
|
314 char *name; /* A display name for debugging purposes */ |
|
315 |
|
316 __u32 cmd; /* A unique ID */ |
|
317 |
|
318 /* Flags */ |
|
319 __u32 set:1; /* Either a set or get property */ |
|
320 __u32 buffer:1; /* Does this property use the buffer? */ |
|
321 __u32 reserved:30; /* Align */ |
|
322 }; |
|
323 |
|
324 struct dtv_property { |
|
325 __u32 cmd; |
|
326 __u32 reserved[3]; |
|
327 union { |
|
328 __u32 data; |
|
329 struct { |
|
330 __u8 data[32]; |
|
331 __u32 len; |
|
332 __u32 reserved1[3]; |
|
333 void *reserved2; |
|
334 } buffer; |
|
335 } u; |
|
336 int result; |
|
337 } __attribute__ ((packed)); |
|
338 |
|
339 /* num of properties cannot exceed DTV_IOCTL_MAX_MSGS per ioctl */ |
|
340 #define DTV_IOCTL_MAX_MSGS 64 |
|
341 |
|
342 struct dtv_properties { |
|
343 __u32 num; |
|
344 struct dtv_property *props; |
|
345 }; |
|
346 |
|
347 #define FE_SET_PROPERTY _IOW('o', 82, struct dtv_properties) |
|
348 #define FE_GET_PROPERTY _IOR('o', 83, struct dtv_properties) |
|
349 |
|
350 |
|
351 /** |
|
352 * When set, this flag will disable any zigzagging or other "normal" tuning |
|
353 * behaviour. Additionally, there will be no automatic monitoring of the lock |
|
354 * status, and hence no frontend events will be generated. If a frontend device |
|
355 * is closed, this flag will be automatically turned off when the device is |
|
356 * reopened read-write. |
|
357 */ |
|
358 #define FE_TUNE_MODE_ONESHOT 0x01 |
|
359 |
|
360 |
|
361 #define FE_GET_INFO _IOR('o', 61, struct dvb_frontend_info) |
|
362 |
|
363 #define FE_DISEQC_RESET_OVERLOAD _IO('o', 62) |
|
364 #define FE_DISEQC_SEND_MASTER_CMD _IOW('o', 63, struct dvb_diseqc_master_cmd) |
|
365 #define FE_DISEQC_RECV_SLAVE_REPLY _IOR('o', 64, struct dvb_diseqc_slave_reply) |
|
366 #define FE_DISEQC_SEND_BURST _IO('o', 65) /* fe_sec_mini_cmd_t */ |
|
367 |
|
368 #define FE_SET_TONE _IO('o', 66) /* fe_sec_tone_mode_t */ |
|
369 #define FE_SET_VOLTAGE _IO('o', 67) /* fe_sec_voltage_t */ |
|
370 #define FE_ENABLE_HIGH_LNB_VOLTAGE _IO('o', 68) /* int */ |
|
371 |
|
372 #define FE_READ_STATUS _IOR('o', 69, fe_status_t) |
|
373 #define FE_READ_BER _IOR('o', 70, __u32) |
|
374 #define FE_READ_SIGNAL_STRENGTH _IOR('o', 71, __u16) |
|
375 #define FE_READ_SNR _IOR('o', 72, __u16) |
|
376 #define FE_READ_UNCORRECTED_BLOCKS _IOR('o', 73, __u32) |
|
377 |
|
378 #define FE_SET_FRONTEND _IOW('o', 76, struct dvb_frontend_parameters) |
|
379 #define FE_GET_FRONTEND _IOR('o', 77, struct dvb_frontend_parameters) |
|
380 #define FE_SET_FRONTEND_TUNE_MODE _IO('o', 81) /* unsigned int */ |
|
381 #define FE_GET_EVENT _IOR('o', 78, struct dvb_frontend_event) |
|
382 |
|
383 #define FE_DISHNETWORK_SEND_LEGACY_CMD _IO('o', 80) /* unsigned int */ |
|
384 |
|
385 #endif /*_DVBFRONTEND_H_*/ |