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 * Copyright (C) Manu Abraham <abraham.manu@gmail.com> 11 * 12 * This program is free software; you can redistribute it and/or 13 * modify it under the terms of the GNU Lesser General Public License 14 * as published by the Free Software Foundation; either version 2.1 15 * of the License, or (at your option) any later version. 16 * 17 * This program is distributed in the hope that it will be useful, 18 * but WITHOUT ANY WARRANTY; without even the implied warranty of 19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 20 * GNU General Public License for more details. 21 * 22 * You should have received a copy of the GNU Lesser General Public License 23 * along with this program; if not, write to the Free Software 24 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 25 * 26 */ 27 28 #ifndef _DVBFRONTEND_H_ 29 #define _DVBFRONTEND_H_ 30 31 #ifdef __FreeBSD__ 32 #define __u8 uint8_t 33 #define __u16 uint16_t 34 #define __u32 uint32_t 35 #define __u64 uint64_t 36 #define __s16 int16_t 37 #define __s32 int32_t 38 #endif 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 struct dvb_qam_parameters { 212 __u32 symbol_rate; /* symbol rate in Symbols per second */ 213 fe_code_rate_t fec_inner; /* forward error correction (see above) */ 214 fe_modulation_t modulation; /* modulation type (see above) */ 215 }; 216 217 struct dvb_vsb_parameters { 218 fe_modulation_t modulation; /* modulation type (see above) */ 219 }; 220 221 struct dvb_ofdm_parameters { 222 fe_bandwidth_t bandwidth; 223 fe_code_rate_t code_rate_HP; /* high priority stream code rate */ 224 fe_code_rate_t code_rate_LP; /* low priority stream code rate */ 225 fe_modulation_t constellation; /* modulation type (see above) */ 226 fe_transmit_mode_t transmission_mode; 227 fe_guard_interval_t guard_interval; 228 fe_hierarchy_t hierarchy_information; 229 }; 230 231 232 struct dvb_frontend_parameters { 233 __u32 frequency; /* (absolute) frequency in Hz for QAM/OFDM/ATSC */ 234 /* intermediate frequency in kHz for QPSK */ 235 fe_spectral_inversion_t inversion; 236 union { 237 struct dvb_qpsk_parameters qpsk; 238 struct dvb_qam_parameters qam; 239 struct dvb_ofdm_parameters ofdm; 240 struct dvb_vsb_parameters vsb; 241 } u; 242 }; 243 244 245 /** 246 * When set, this flag will disable any zigzagging or other "normal" tuning 247 * behaviour. Additionally, there will be no automatic monitoring of the lock 248 * status, and hence no frontend events will be generated. If a frontend device 249 * is closed, this flag will be automatically turned off when the device is 250 * reopened read-write. 251 */ 252 #define FE_TUNE_MODE_ONESHOT 0x01 253 254 255 #define FE_GET_INFO _IOR('o', 61, struct dvb_frontend_info) 256 257 #define FE_DISEQC_RESET_OVERLOAD _IO('o', 62) 258 #define FE_DISEQC_SEND_MASTER_CMD _IOW('o', 63, struct dvb_diseqc_master_cmd) 259 #define FE_DISEQC_RECV_SLAVE_REPLY _IOR('o', 64, struct dvb_diseqc_slave_reply) 260 #define FE_DISEQC_SEND_BURST _IO('o', 65) /* fe_sec_mini_cmd_t */ 261 262 #define FE_SET_TONE _IO('o', 66) /* fe_sec_tone_mode_t */ 263 #define FE_SET_VOLTAGE _IO('o', 67) /* fe_sec_voltage_t */ 264 #define FE_ENABLE_HIGH_LNB_VOLTAGE _IO('o', 68) /* int */ 265 266 #define FE_READ_STATUS _IOR('o', 69, fe_status_t) 267 #define FE_READ_BER _IOR('o', 70, __u32) 268 #define FE_READ_SIGNAL_STRENGTH _IOR('o', 71, __u16) 269 #define FE_READ_SNR _IOR('o', 72, __u16) 270 #define FE_READ_UNCORRECTED_BLOCKS _IOR('o', 73, __u32) 271 272 #define FE_SET_FRONTEND _IOW('o', 76, struct dvb_frontend_parameters) 273 #define FE_GET_FRONTEND _IOR('o', 77, struct dvb_frontend_parameters) 274 #define FE_SET_FRONTEND_TUNE_MODE _IO('o', 81) /* unsigned int */ 275 276 #define FE_DISHNETWORK_SEND_LEGACY_CMD _IO('o', 80) /* unsigned int */ 277 278 /* 279 * References: 280 * DVB-S : EN 300 421 281 * DVB-S2: EN 302 307, TR 102 376, EN 301 210 282 * DVB-C : EN 300 429 283 * DVB-T : EN 300 744 284 * DVB-H : EN 300 304 285 * ATSC : A/53A 286 */ 287 288 /* 289 * Delivery Systems 290 * needs to set/queried for multistandard frontends 291 */ 292 enum dvbfe_delsys { 293 DVBFE_DELSYS_DVBS = (1 << 0), 294 DVBFE_DELSYS_DSS = (1 << 1), 295 DVBFE_DELSYS_DVBS2 = (1 << 2), 296 DVBFE_DELSYS_DVBC = (1 << 3), 297 DVBFE_DELSYS_DVBT = (1 << 4), 298 DVBFE_DELSYS_DVBH = (1 << 5), 299 DVBFE_DELSYS_ATSC = (1 << 6), 300 DVBFE_DELSYS_DUMMY = (1 << 31) 301 }; 302 #define DVBFE_GET_DELSYS _IOR('o', 82, enum dvbfe_delsys) 303 #define DVBFE_SET_DELSYS _IOW('o', 87, enum dvbfe_delsys) 304 305 /* Modulation types */ 306 enum dvbfe_modulation { 307 DVBFE_MOD_NONE = (0 << 0), 308 DVBFE_MOD_BPSK = (1 << 0), 309 DVBFE_MOD_QPSK = (1 << 1), 310 DVBFE_MOD_OQPSK = (1 << 2), 311 DVBFE_MOD_8PSK = (1 << 3), 312 DVBFE_MOD_16APSK = (1 << 4), 313 DVBFE_MOD_32APSK = (1 << 5), 314 DVBFE_MOD_QAM4 = (1 << 6), 315 DVBFE_MOD_QAM16 = (1 << 7), 316 DVBFE_MOD_QAM32 = (1 << 8), 317 DVBFE_MOD_QAM64 = (1 << 9), 318 DVBFE_MOD_QAM128 = (1 << 10), 319 DVBFE_MOD_QAM256 = (1 << 11), 320 DVBFE_MOD_QAM512 = (1 << 12), 321 DVBFE_MOD_QAM1024 = (1 << 13), 322 DVBFE_MOD_QAMAUTO = (1 << 14), 323 DVBFE_MOD_OFDM = (1 << 15), 324 DVBFE_MOD_COFDM = (1 << 16), 325 DVBFE_MOD_VSB8 = (1 << 17), 326 DVBFE_MOD_VSB16 = (1 << 18), 327 DVBFE_MOD_AUTO = (1 << 31) 328 }; 329 330 /* 331 * Convolution Code Rate (Viterbi Inner Code Rate) 332 * DVB-S2 uses LDPC. Information on LDPC can be found at 333 * http://www.ldpc-codes.com 334 */ 335 enum dvbfe_fec { 336 DVBFE_FEC_NONE = (0 << 0), 337 DVBFE_FEC_1_4 = (1 << 0), 338 DVBFE_FEC_1_3 = (1 << 1), 339 DVBFE_FEC_2_5 = (1 << 2), 340 DVBFE_FEC_1_2 = (1 << 3), 341 DVBFE_FEC_3_5 = (1 << 4), 342 DVBFE_FEC_2_3 = (1 << 5), 343 DVBFE_FEC_3_4 = (1 << 6), 344 DVBFE_FEC_4_5 = (1 << 7), 345 DVBFE_FEC_5_6 = (1 << 8), 346 DVBFE_FEC_6_7 = (1 << 9), 347 DVBFE_FEC_7_8 = (1 << 10), 348 DVBFE_FEC_8_9 = (1 << 11), 349 DVBFE_FEC_9_10 = (1 << 12), 350 DVBFE_FEC_AUTO = (1 << 31) 351 }; 352 353 /* Frontend Inversion (I/Q Swap) */ 354 enum dvbfe_inversion { 355 DVBFE_INVERSION_OFF = 0, 356 DVBFE_INVERSION_ON = 1, 357 DVBFE_INVERSION_AUTO = 2 358 }; 359 360 /* DVB-S parameters */ 361 struct dvbs_params { 362 __u32 symbol_rate; 363 364 enum dvbfe_modulation modulation; 365 enum dvbfe_fec fec; 366 }; 367 368 /* DSS parameters */ 369 struct dss_params { 370 __u32 symbol_rate; 371 372 enum dvbfe_modulation modulation; 373 enum dvbfe_fec fec; 374 }; 375 376 /* 377 * Rolloff Rate (Nyquist Filter Rolloff) 378 * NOTE: DVB-S2 has rates of 0.20, 0.25, 0.35 379 * Values are x100 380 * Applies to DVB-S2 381 */ 382 enum dvbfe_rolloff { 383 DVBFE_ROLLOFF_35 = 0, 384 DVBFE_ROLLOFF_25 = 1, 385 DVBFE_ROLLOFF_20 = 2, 386 DVBFE_ROLLOFF_UNKNOWN = 3 387 }; 388 389 /* DVB-S2 parameters */ 390 struct dvbs2_params { 391 __u32 symbol_rate; 392 393 enum dvbfe_modulation modulation; 394 enum dvbfe_fec fec; 395 396 /* Informational fields only */ 397 enum dvbfe_rolloff rolloff; 398 399 __u8 matype_1; 400 __u8 matype_2; 401 __u8 upl_1; 402 __u8 upl_2; 403 __u8 dfl_1; 404 __u8 dfl_2; 405 __u8 sync; 406 __u8 syncd_1; 407 __u8 syncd_2; 408 409 __u8 pad[32]; 410 }; 411 412 /* DVB-C parameters */ 413 struct dvbc_params { 414 __u32 symbol_rate; 415 enum dvbfe_modulation modulation; 416 enum dvbfe_fec fec; 417 }; 418 419 /* DVB-T Channel bandwidth */ 420 enum dvbfe_bandwidth { 421 DVBFE_BANDWIDTH_8_MHZ = (1 << 0), 422 DVBFE_BANDWIDTH_7_MHZ = (1 << 1), 423 DVBFE_BANDWIDTH_6_MHZ = (1 << 2), 424 DVBFE_BANDWIDTH_5_MHZ = (1 << 3), 425 DVBFE_BANDWIDTH_AUTO = (1 << 31) 426 }; 427 428 /* DVB-T/DVB-H transmission mode */ 429 enum dvbfe_transmission_mode { 430 DVBFE_TRANSMISSION_MODE_2K = (1 << 0), 431 DVBFE_TRANSMISSION_MODE_4K = (1 << 1), 432 DVBFE_TRANSMISSION_MODE_8K = (1 << 2), 433 DVBFE_TRANSMISSION_MODE_AUTO = (1 << 31) 434 }; 435 436 /* DVB-T/DVB-H Guard interval */ 437 enum dvbfe_guard_interval { 438 DVBFE_GUARD_INTERVAL_1_32 = (1 << 1), 439 DVBFE_GUARD_INTERVAL_1_16 = (1 << 2), 440 DVBFE_GUARD_INTERVAL_1_8 = (1 << 3), 441 DVBFE_GUARD_INTERVAL_1_4 = (1 << 4), 442 DVBFE_GUARD_INTERVAL_AUTO = (1 << 31) 443 }; 444 445 /* DVB-T/DVB-H Hierarchial modulation */ 446 enum dvbfe_hierarchy { 447 DVBFE_HIERARCHY_OFF = (1 << 0), 448 DVBFE_HIERARCHY_ON = (1 << 1), 449 DVBFE_HIERARCHY_AUTO = (1 << 2) 450 }; 451 452 /* DVB-T/DVB-H Rolloff's */ 453 enum dvbfe_alpha { 454 DVBFE_ALPHA_1 = (1 << 0), 455 DVBFE_ALPHA_2 = (1 << 1), 456 DVBFE_ALPHA_4 = (1 << 2) 457 }; 458 459 /* Stream priority (Hierachial coding) */ 460 enum dvbfe_stream_priority { 461 DVBFE_STREAM_PRIORITY_HP = (0 << 0), 462 DVBFE_STREAM_PRIORITY_LP = (1 << 0) 463 }; 464 465 /* DVB-T parameters */ 466 struct dvbt_params { 467 enum dvbfe_modulation constellation; 468 enum dvbfe_bandwidth bandwidth; 469 enum dvbfe_fec code_rate_HP; 470 enum dvbfe_fec code_rate_LP; 471 enum dvbfe_transmission_mode transmission_mode; 472 enum dvbfe_guard_interval guard_interval; 473 enum dvbfe_hierarchy hierarchy; 474 enum dvbfe_alpha alpha; 475 enum dvbfe_stream_priority priority; 476 477 __u8 pad[32]; 478 }; 479 480 /* DVB-H Interleaver type */ 481 enum dvbfe_interleaver { 482 DVBFE_INTERLEAVER_NATIVE = (1 << 0), 483 DVBFE_INTERLEAVER_INDEPTH = (1 << 1), 484 DVBFE_INTERLEAVER_AUTO = (1 << 31) 485 }; 486 487 /* DVB-H MPE-FEC Indicator */ 488 enum dvbfe_mpefec { 489 DVBFE_MPEFEC_OFF = (1 << 0), 490 DVBFE_MPEFEC_ON = (1 << 1) 491 }; 492 493 /* DVB-H Timeslicing Indicator */ 494 enum dvbfe_timeslicing { 495 DVBFE_TIMESLICING_OFF = (1 << 0), 496 DVBFE_TIMESLICING_ON = (1 << 1) 497 }; 498 499 /* DVB-H parameters */ 500 struct dvbh_params { 501 enum dvbfe_modulation constellation; 502 enum dvbfe_fec code_rate_HP; 503 enum dvbfe_fec code_rate_LP; 504 enum dvbfe_transmission_mode transmission_mode; 505 enum dvbfe_guard_interval guard_interval; 506 enum dvbfe_hierarchy hierarchy; 507 enum dvbfe_alpha alpha; 508 enum dvbfe_interleaver interleaver; 509 enum dvbfe_mpefec mpefec; 510 enum dvbfe_timeslicing timeslicing; 511 enum dvbfe_stream_priority priority; 512 513 __u32 bandwidth; 514 __u8 pad[32]; 515 }; 516 517 /* ATSC parameters */ 518 struct atsc_params { 519 enum dvbfe_modulation modulation; 520 521 __u8 pad[32]; 522 }; 523 524 /* DVB Frontend Tuning Parameters */ 525 struct dvbfe_params { 526 __u32 frequency; 527 enum fe_spectral_inversion inversion; 528 enum dvbfe_delsys delivery; 529 530 __u8 pad[32]; 531 532 union { 533 struct dvbs_params dvbs; 534 struct dss_params dss; 535 struct dvbs2_params dvbs2; 536 struct dvbc_params dvbc; 537 struct dvbt_params dvbt; 538 struct dvbh_params dvbh; 539 struct atsc_params atsc; 540 541 __u8 pad[128]; 542 } delsys; 543 }; 544 #define DVBFE_SET_PARAMS _IOW('o', 83, struct dvbfe_params) 545 #define DVBFE_GET_PARAMS _IOWR('o', 84, struct dvbfe_params) 546 547 /* DVB-S capability bitfields */ 548 struct dvbfe_dvbs_info { 549 enum dvbfe_modulation modulation; 550 enum dvbfe_fec fec; 551 }; 552 553 /* DSS capability bitfields */ 554 struct dvbfe_dss_info { 555 enum dvbfe_modulation modulation; 556 enum dvbfe_fec fec; 557 }; 558 559 /* DVB-S2 capability bitfields */ 560 struct dvbfe_dvbs2_info { 561 enum dvbfe_modulation modulation; 562 enum dvbfe_fec fec; 563 564 __u8 pad[32]; 565 }; 566 567 /* DVB-C capability bitfields */ 568 struct dvbfe_dvbc_info { 569 enum dvbfe_modulation modulation; 570 }; 571 572 /* DVB-T capability bitfields */ 573 struct dvbfe_dvbt_info { 574 enum dvbfe_modulation modulation; 575 enum dvbfe_stream_priority stream_priority; 576 577 __u8 pad[32]; 578 }; 579 580 /* DVB-H capability bitfields */ 581 struct dvbfe_dvbh_info { 582 enum dvbfe_modulation modulation; 583 enum dvbfe_stream_priority stream_priority; 584 585 __u8 pad[32]; 586 }; 587 588 /* ATSC capability bitfields */ 589 struct dvbfe_atsc_info { 590 enum dvbfe_modulation modulation; 591 592 __u8 pad[32]; 593 }; 594 595 /* DVB Frontend related Information */ 596 struct dvbfe_info { 597 char name[128]; 598 599 union { 600 struct dvbfe_dvbs_info dvbs; 601 struct dvbfe_dss_info dss; 602 struct dvbfe_dvbs2_info dvbs2; 603 struct dvbfe_dvbc_info dvbc; 604 struct dvbfe_dvbt_info dvbt; 605 struct dvbfe_dvbh_info dvbh; 606 struct dvbfe_atsc_info atsc; 607 608 __u8 pad[128]; 609 } delsys; 610 611 __u32 frequency_min; 612 __u32 frequency_max; 613 __u32 frequency_step; 614 __u32 frequency_tolerance; 615 __u32 symbol_rate_min; 616 __u32 symbol_rate_max; 617 __u32 symbol_rate_tolerance; 618 619 enum fe_spectral_inversion inversion; 620 621 __u8 pad[128]; 622 }; 623 #define DVBFE_GET_INFO _IOR('o', 85, struct dvbfe_info) 624 625 enum dvbfe_status { 626 DVBFE_HAS_SIGNAL = (1 << 0), /* something above noise floor */ 627 DVBFE_HAS_CARRIER = (1 << 1), /* Signal found */ 628 DVBFE_HAS_VITERBI = (1 << 2), /* FEC is stable */ 629 DVBFE_HAS_SYNC = (1 << 3), /* SYNC found */ 630 DVBFE_HAS_LOCK = (1 << 4), /* OK .. */ 631 DVBFE_TIMEDOUT = (1 << 5), /* no lock in last ~2 s */ 632 DVBFE_STATUS_DUMMY = (1 << 31) 633 }; 634 635 /* DVB Frontend events */ 636 struct dvbfe_events { 637 enum dvbfe_status status; 638 639 __u8 pad[32]; 640 }; 641 642 struct dvb_frontend_event { 643 fe_status_t status; 644 struct dvb_frontend_parameters parameters; 645 }; 646 #define FE_GET_EVENT _IOR('o', 78, struct dvb_frontend_event) 647 648 struct dvbfe_event { 649 struct dvbfe_events fe_events; 650 struct dvbfe_params fe_params; 651 }; 652 #define DVBFE_GET_EVENT _IOR('o', 86, struct dvbfe_event) 653 654 #endif /*_DVBFRONTEND_H_*/ 655