1 /* 2 * frontend.h 3 * 4 * Copyright (C) 2000 Marcus Metzler <marcus (at) convergence.de> 5 * Ralph Metzler <ralph (at) convergence.de> 6 * Holger Waechtler <holger (at) convergence.de> 7 * Andre Draszik <ad (at) 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_NEEDS_BENDING = 0x20000000, // not supported anymore, don't use (frontend requires frequency bending) 66 FE_CAN_RECOVER = 0x40000000, // frontend can recover from a cable unplug automatically 67 FE_CAN_MUTE_TS = 0x80000000 // frontend can stop spurious TS data output 68 } fe_caps_t; 69 70 71 struct dvb_frontend_info { 72 char name[128]; 73 fe_type_t type; 74 __u32 frequency_min; 75 __u32 frequency_max; 76 __u32 frequency_stepsize; 77 __u32 frequency_tolerance; 78 __u32 symbol_rate_min; 79 __u32 symbol_rate_max; 80 __u32 symbol_rate_tolerance; /* ppm */ 81 __u32 notifier_delay; /* DEPRECATED */ 82 fe_caps_t caps; 83 }; 84 85 86 /** 87 * Check out the DiSEqC bus spec available on http://www.eutelsat.org/ for 88 * the meaning of this struct... 89 */ 90 struct dvb_diseqc_master_cmd { 91 __u8 msg [6]; /* { framing, address, command, data [3] } */ 92 __u8 msg_len; /* valid values are 3...6 */ 93 }; 94 95 96 struct dvb_diseqc_slave_reply { 97 __u8 msg [4]; /* { framing, data [3] } */ 98 __u8 msg_len; /* valid values are 0...4, 0 means no msg */ 99 int timeout; /* return from ioctl after timeout ms with */ 100 }; /* errorcode when no message was received */ 101 102 103 typedef enum fe_sec_voltage { 104 SEC_VOLTAGE_13, 105 SEC_VOLTAGE_18, 106 SEC_VOLTAGE_OFF 107 } fe_sec_voltage_t; 108 109 110 typedef enum fe_sec_tone_mode { 111 SEC_TONE_ON, 112 SEC_TONE_OFF 113 } fe_sec_tone_mode_t; 114 115 116 typedef enum fe_sec_mini_cmd { 117 SEC_MINI_A, 118 SEC_MINI_B 119 } fe_sec_mini_cmd_t; 120 121 122 typedef enum fe_status { 123 FE_HAS_SIGNAL = 0x01, /* found something above the noise level */ 124 FE_HAS_CARRIER = 0x02, /* found a DVB signal */ 125 FE_HAS_VITERBI = 0x04, /* FEC is stable */ 126 FE_HAS_SYNC = 0x08, /* found sync bytes */ 127 FE_HAS_LOCK = 0x10, /* everything's working... */ 128 FE_TIMEDOUT = 0x20, /* no lock within the last ~2 seconds */ 129 FE_REINIT = 0x40 /* frontend was reinitialized, */ 130 } fe_status_t; /* application is recommended to reset */ 131 /* DiSEqC, tone and parameters */ 132 133 typedef enum fe_spectral_inversion { 134 INVERSION_OFF, 135 INVERSION_ON, 136 INVERSION_AUTO 137 } fe_spectral_inversion_t; 138 139 140 typedef enum fe_code_rate { 141 FEC_NONE = 0, 142 FEC_1_2, 143 FEC_2_3, 144 FEC_3_4, 145 FEC_4_5, 146 FEC_5_6, 147 FEC_6_7, 148 FEC_7_8, 149 FEC_8_9, 150 FEC_AUTO 151 } fe_code_rate_t; 152 153 154 typedef enum fe_modulation { 155 QPSK, 156 QAM_16, 157 QAM_32, 158 QAM_64, 159 QAM_128, 160 QAM_256, 161 QAM_AUTO, 162 VSB_8, 163 VSB_16 164 } fe_modulation_t; 165 166 typedef enum fe_transmit_mode { 167 TRANSMISSION_MODE_2K, 168 TRANSMISSION_MODE_8K, 169 TRANSMISSION_MODE_AUTO 170 } fe_transmit_mode_t; 171 172 typedef enum fe_bandwidth { 173 BANDWIDTH_8_MHZ, 174 BANDWIDTH_7_MHZ, 175 BANDWIDTH_6_MHZ, 176 BANDWIDTH_AUTO 177 } fe_bandwidth_t; 178 179 180 typedef enum fe_guard_interval { 181 GUARD_INTERVAL_1_32, 182 GUARD_INTERVAL_1_16, 183 GUARD_INTERVAL_1_8, 184 GUARD_INTERVAL_1_4, 185 GUARD_INTERVAL_AUTO 186 } fe_guard_interval_t; 187 188 189 typedef enum fe_hierarchy { 190 HIERARCHY_NONE, 191 HIERARCHY_1, 192 HIERARCHY_2, 193 HIERARCHY_4, 194 HIERARCHY_AUTO 195 } fe_hierarchy_t; 196 197 198 struct dvb_qpsk_parameters { 199 __u32 symbol_rate; /* symbol rate in Symbols per second */ 200 fe_code_rate_t fec_inner; /* forward error correction (see above) */ 201 }; 202 203 struct dvb_qam_parameters { 204 __u32 symbol_rate; /* symbol rate in Symbols per second */ 205 fe_code_rate_t fec_inner; /* forward error correction (see above) */ 206 fe_modulation_t modulation; /* modulation type (see above) */ 207 }; 208 209 struct dvb_vsb_parameters { 210 fe_modulation_t modulation; /* modulation type (see above) */ 211 }; 212 213 struct dvb_ofdm_parameters { 214 fe_bandwidth_t bandwidth; 215 fe_code_rate_t code_rate_HP; /* high priority stream code rate */ 216 fe_code_rate_t code_rate_LP; /* low priority stream code rate */ 217 fe_modulation_t constellation; /* modulation type (see above) */ 218 fe_transmit_mode_t transmission_mode; 219 fe_guard_interval_t guard_interval; 220 fe_hierarchy_t hierarchy_information; 221 }; 222 223 224 struct dvb_frontend_parameters { 225 __u32 frequency; /* (absolute) frequency in Hz for QAM/OFDM/ATSC */ 226 /* intermediate frequency in kHz for QPSK */ 227 fe_spectral_inversion_t inversion; 228 union { 229 struct dvb_qpsk_parameters qpsk; 230 struct dvb_qam_parameters qam; 231 struct dvb_ofdm_parameters ofdm; 232 struct dvb_vsb_parameters vsb; 233 } u; 234 }; 235 236 237 struct dvb_frontend_event { 238 fe_status_t status; 239 struct dvb_frontend_parameters parameters; 240 }; 241 242 243 /** 244 * When set, this flag will disable any zigzagging or other "normal" tuning 245 * behaviour. Additionally, there will be no automatic monitoring of the lock 246 * status, and hence no frontend events will be generated. If a frontend device 247 * is closed, this flag will be automatically turned off when the device is 248 * reopened read-write. 249 */ 250 #define FE_TUNE_MODE_ONESHOT 0x01 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_SET_FRONTEND_TUNE_MODE _IO('o', 81) /* unsigned int */ 273 #define FE_GET_EVENT _IOR('o', 78, struct dvb_frontend_event) 274 275 #define FE_DISHNETWORK_SEND_LEGACY_CMD _IO('o', 80) /* unsigned int */ 276 277 #endif /*_DVBFRONTEND_H_*/ 278