linux/include/linux/dvb/frontend.h
<<
>>
Prefs
   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
  32typedef enum fe_type {
  33        FE_QPSK,
  34        FE_QAM,
  35        FE_OFDM,
  36        FE_ATSC
  37} fe_type_t;
  38
  39
  40typedef 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
  71struct 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 */
  90struct 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
  96struct 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
 103typedef enum fe_sec_voltage {
 104        SEC_VOLTAGE_13,
 105        SEC_VOLTAGE_18,
 106        SEC_VOLTAGE_OFF
 107} fe_sec_voltage_t;
 108
 109
 110typedef enum fe_sec_tone_mode {
 111        SEC_TONE_ON,
 112        SEC_TONE_OFF
 113} fe_sec_tone_mode_t;
 114
 115
 116typedef enum fe_sec_mini_cmd {
 117        SEC_MINI_A,
 118        SEC_MINI_B
 119} fe_sec_mini_cmd_t;
 120
 121
 122typedef 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
 133typedef enum fe_spectral_inversion {
 134        INVERSION_OFF,
 135        INVERSION_ON,
 136        INVERSION_AUTO
 137} fe_spectral_inversion_t;
 138
 139
 140typedef 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
 154typedef 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
 166typedef enum fe_transmit_mode {
 167        TRANSMISSION_MODE_2K,
 168        TRANSMISSION_MODE_8K,
 169        TRANSMISSION_MODE_AUTO
 170} fe_transmit_mode_t;
 171
 172typedef enum fe_bandwidth {
 173        BANDWIDTH_8_MHZ,
 174        BANDWIDTH_7_MHZ,
 175        BANDWIDTH_6_MHZ,
 176        BANDWIDTH_AUTO
 177} fe_bandwidth_t;
 178
 179
 180typedef 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
 189typedef enum fe_hierarchy {
 190        HIERARCHY_NONE,
 191        HIERARCHY_1,
 192        HIERARCHY_2,
 193        HIERARCHY_4,
 194        HIERARCHY_AUTO
 195} fe_hierarchy_t;
 196
 197
 198struct 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
 203struct 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
 209struct dvb_vsb_parameters {
 210        fe_modulation_t modulation;  /* modulation type (see above) */
 211};
 212
 213struct 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
 224struct 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
 237struct 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