home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / include / linux / dvb / frontend.h < prev    next >
Encoding:
C/C++ Source or Header  |  2009-09-09  |  9.6 KB  |  386 lines

  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_*/
  386.