Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-ports-kde
Path: blob/main/multimedia/dvbsnoop/files/frontend.h
16462 views
1
/*
2
* frontend.h
3
*
4
* Copyright (C) 2000 Marcus Metzler <[email protected]>
5
* Ralph Metzler <[email protected]>
6
* Holger Waechtler <[email protected]>
7
* Andre Draszik <[email protected]>
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
#ifndef LINUX_TYPES_ADDED
30
#define LINUX_TYPES_ADDED
31
#include <sys/types.h>
32
typedef uint64_t __u64;
33
typedef uint32_t __u32;
34
typedef uint16_t __u16;
35
typedef uint8_t __u8;
36
#endif
37
38
39
40
typedef enum fe_type {
41
FE_QPSK,
42
FE_QAM,
43
FE_OFDM,
44
FE_ATSC
45
} fe_type_t;
46
47
48
typedef enum fe_caps {
49
FE_IS_STUPID = 0,
50
FE_CAN_INVERSION_AUTO = 0x1,
51
FE_CAN_FEC_1_2 = 0x2,
52
FE_CAN_FEC_2_3 = 0x4,
53
FE_CAN_FEC_3_4 = 0x8,
54
FE_CAN_FEC_4_5 = 0x10,
55
FE_CAN_FEC_5_6 = 0x20,
56
FE_CAN_FEC_6_7 = 0x40,
57
FE_CAN_FEC_7_8 = 0x80,
58
FE_CAN_FEC_8_9 = 0x100,
59
FE_CAN_FEC_AUTO = 0x200,
60
FE_CAN_QPSK = 0x400,
61
FE_CAN_QAM_16 = 0x800,
62
FE_CAN_QAM_32 = 0x1000,
63
FE_CAN_QAM_64 = 0x2000,
64
FE_CAN_QAM_128 = 0x4000,
65
FE_CAN_QAM_256 = 0x8000,
66
FE_CAN_QAM_AUTO = 0x10000,
67
FE_CAN_TRANSMISSION_MODE_AUTO = 0x20000,
68
FE_CAN_BANDWIDTH_AUTO = 0x40000,
69
FE_CAN_GUARD_INTERVAL_AUTO = 0x80000,
70
FE_CAN_HIERARCHY_AUTO = 0x100000,
71
FE_CAN_8VSB = 0x200000,
72
FE_CAN_16VSB = 0x400000,
73
FE_NEEDS_BENDING = 0x20000000, // not supported anymore, don't use (frontend requires frequency bending)
74
FE_CAN_RECOVER = 0x40000000, // frontend can recover from a cable unplug automatically
75
FE_CAN_MUTE_TS = 0x80000000 // frontend can stop spurious TS data output
76
} fe_caps_t;
77
78
79
struct dvb_frontend_info {
80
char name[128];
81
fe_type_t type;
82
__u32 frequency_min;
83
__u32 frequency_max;
84
__u32 frequency_stepsize;
85
__u32 frequency_tolerance;
86
__u32 symbol_rate_min;
87
__u32 symbol_rate_max;
88
__u32 symbol_rate_tolerance; /* ppm */
89
__u32 notifier_delay; /* DEPRECATED */
90
fe_caps_t caps;
91
};
92
93
94
/**
95
* Check out the DiSEqC bus spec available on http://www.eutelsat.org/ for
96
* the meaning of this struct...
97
*/
98
struct dvb_diseqc_master_cmd {
99
__u8 msg [6]; /* { framing, address, command, data [3] } */
100
__u8 msg_len; /* valid values are 3...6 */
101
};
102
103
104
struct dvb_diseqc_slave_reply {
105
__u8 msg [4]; /* { framing, data [3] } */
106
__u8 msg_len; /* valid values are 0...4, 0 means no msg */
107
int timeout; /* return from ioctl after timeout ms with */
108
}; /* errorcode when no message was received */
109
110
111
typedef enum fe_sec_voltage {
112
SEC_VOLTAGE_13,
113
SEC_VOLTAGE_18,
114
SEC_VOLTAGE_OFF
115
} fe_sec_voltage_t;
116
117
118
typedef enum fe_sec_tone_mode {
119
SEC_TONE_ON,
120
SEC_TONE_OFF
121
} fe_sec_tone_mode_t;
122
123
124
typedef enum fe_sec_mini_cmd {
125
SEC_MINI_A,
126
SEC_MINI_B
127
} fe_sec_mini_cmd_t;
128
129
130
typedef enum fe_status {
131
FE_HAS_SIGNAL = 0x01, /* found something above the noise level */
132
FE_HAS_CARRIER = 0x02, /* found a DVB signal */
133
FE_HAS_VITERBI = 0x04, /* FEC is stable */
134
FE_HAS_SYNC = 0x08, /* found sync bytes */
135
FE_HAS_LOCK = 0x10, /* everything's working... */
136
FE_TIMEDOUT = 0x20, /* no lock within the last ~2 seconds */
137
FE_REINIT = 0x40 /* frontend was reinitialized, */
138
} fe_status_t; /* application is recommended to reset */
139
/* DiSEqC, tone and parameters */
140
141
typedef enum fe_spectral_inversion {
142
INVERSION_OFF,
143
INVERSION_ON,
144
INVERSION_AUTO
145
} fe_spectral_inversion_t;
146
147
148
typedef enum fe_code_rate {
149
FEC_NONE = 0,
150
FEC_1_2,
151
FEC_2_3,
152
FEC_3_4,
153
FEC_4_5,
154
FEC_5_6,
155
FEC_6_7,
156
FEC_7_8,
157
FEC_8_9,
158
FEC_AUTO
159
} fe_code_rate_t;
160
161
162
typedef enum fe_modulation {
163
QPSK,
164
QAM_16,
165
QAM_32,
166
QAM_64,
167
QAM_128,
168
QAM_256,
169
QAM_AUTO,
170
VSB_8,
171
VSB_16
172
} fe_modulation_t;
173
174
typedef enum fe_transmit_mode {
175
TRANSMISSION_MODE_2K,
176
TRANSMISSION_MODE_8K,
177
TRANSMISSION_MODE_AUTO
178
} fe_transmit_mode_t;
179
180
typedef enum fe_bandwidth {
181
BANDWIDTH_8_MHZ,
182
BANDWIDTH_7_MHZ,
183
BANDWIDTH_6_MHZ,
184
BANDWIDTH_AUTO
185
} fe_bandwidth_t;
186
187
188
typedef enum fe_guard_interval {
189
GUARD_INTERVAL_1_32,
190
GUARD_INTERVAL_1_16,
191
GUARD_INTERVAL_1_8,
192
GUARD_INTERVAL_1_4,
193
GUARD_INTERVAL_AUTO
194
} fe_guard_interval_t;
195
196
197
typedef enum fe_hierarchy {
198
HIERARCHY_NONE,
199
HIERARCHY_1,
200
HIERARCHY_2,
201
HIERARCHY_4,
202
HIERARCHY_AUTO
203
} fe_hierarchy_t;
204
205
206
struct dvb_qpsk_parameters {
207
__u32 symbol_rate; /* symbol rate in Symbols per second */
208
fe_code_rate_t fec_inner; /* forward error correction (see above) */
209
};
210
211
212
struct dvb_qam_parameters {
213
__u32 symbol_rate; /* symbol rate in Symbols per second */
214
fe_code_rate_t fec_inner; /* forward error correction (see above) */
215
fe_modulation_t modulation; /* modulation type (see above) */
216
};
217
218
struct dvb_vsb_parameters {
219
fe_modulation_t modulation; /* modulation type (see above) */
220
};
221
222
struct dvb_ofdm_parameters {
223
fe_bandwidth_t bandwidth;
224
fe_code_rate_t code_rate_HP; /* high priority stream code rate */
225
fe_code_rate_t code_rate_LP; /* low priority stream code rate */
226
fe_modulation_t constellation; /* modulation type (see above) */
227
fe_transmit_mode_t transmission_mode;
228
fe_guard_interval_t guard_interval;
229
fe_hierarchy_t hierarchy_information;
230
};
231
232
233
struct dvb_frontend_parameters {
234
__u32 frequency; /* (absolute) frequency in Hz for QAM/OFDM/ATSC */
235
/* intermediate frequency in kHz for QPSK */
236
fe_spectral_inversion_t inversion;
237
union {
238
struct dvb_qpsk_parameters qpsk;
239
struct dvb_qam_parameters qam;
240
struct dvb_ofdm_parameters ofdm;
241
struct dvb_vsb_parameters vsb;
242
} u;
243
};
244
245
246
struct dvb_frontend_event {
247
fe_status_t status;
248
struct dvb_frontend_parameters parameters;
249
};
250
251
252
253
#define FE_GET_INFO _IOR('o', 61, struct dvb_frontend_info)
254
255
#define FE_DISEQC_RESET_OVERLOAD _IO('o', 62)
256
#define FE_DISEQC_SEND_MASTER_CMD _IOW('o', 63, struct dvb_diseqc_master_cmd)
257
#define FE_DISEQC_RECV_SLAVE_REPLY _IOR('o', 64, struct dvb_diseqc_slave_reply)
258
#define FE_DISEQC_SEND_BURST _IO('o', 65) /* fe_sec_mini_cmd_t */
259
260
#define FE_SET_TONE _IO('o', 66) /* fe_sec_tone_mode_t */
261
#define FE_SET_VOLTAGE _IO('o', 67) /* fe_sec_voltage_t */
262
#define FE_ENABLE_HIGH_LNB_VOLTAGE _IO('o', 68) /* int */
263
264
#define FE_READ_STATUS _IOR('o', 69, fe_status_t)
265
#define FE_READ_BER _IOR('o', 70, __u32)
266
#define FE_READ_SIGNAL_STRENGTH _IOR('o', 71, __u16)
267
#define FE_READ_SNR _IOR('o', 72, __u16)
268
#define FE_READ_UNCORRECTED_BLOCKS _IOR('o', 73, __u32)
269
270
#define FE_SET_FRONTEND _IOW('o', 76, struct dvb_frontend_parameters)
271
#define FE_GET_FRONTEND _IOR('o', 77, struct dvb_frontend_parameters)
272
#define FE_GET_EVENT _IOR('o', 78, struct dvb_frontend_event)
273
274
#define FE_DISHNETWORK_SEND_LEGACY_CMD _IO('o', 80) /* unsigned int */
275
276
277
#endif /*_DVBFRONTEND_H_*/
278
279
280