Path: blob/master/Documentation/DocBook/dvb/frontend.h.xml
10823 views
<programlisting>1/*2* frontend.h3*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 GmbH9*10* This program is free software; you can redistribute it and/or11* modify it under the terms of the GNU Lesser General Public License12* as published by the Free Software Foundation; either version 2.113* 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 of17* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the18* GNU General Public License for more details.19*20* You should have received a copy of the GNU Lesser General Public License21* along with this program; if not, write to the Free Software22* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.23*24*/2526#ifndef _DVBFRONTEND_H_27#define _DVBFRONTEND_H_2829#include <linux/types.h>3031typedef enum fe_type {32FE_QPSK,33FE_QAM,34FE_OFDM,35FE_ATSC36} fe_type_t;373839typedef enum fe_caps {40FE_IS_STUPID = 0,41FE_CAN_INVERSION_AUTO = 0x1,42FE_CAN_FEC_1_2 = 0x2,43FE_CAN_FEC_2_3 = 0x4,44FE_CAN_FEC_3_4 = 0x8,45FE_CAN_FEC_4_5 = 0x10,46FE_CAN_FEC_5_6 = 0x20,47FE_CAN_FEC_6_7 = 0x40,48FE_CAN_FEC_7_8 = 0x80,49FE_CAN_FEC_8_9 = 0x100,50FE_CAN_FEC_AUTO = 0x200,51FE_CAN_QPSK = 0x400,52FE_CAN_QAM_16 = 0x800,53FE_CAN_QAM_32 = 0x1000,54FE_CAN_QAM_64 = 0x2000,55FE_CAN_QAM_128 = 0x4000,56FE_CAN_QAM_256 = 0x8000,57FE_CAN_QAM_AUTO = 0x10000,58FE_CAN_TRANSMISSION_MODE_AUTO = 0x20000,59FE_CAN_BANDWIDTH_AUTO = 0x40000,60FE_CAN_GUARD_INTERVAL_AUTO = 0x80000,61FE_CAN_HIERARCHY_AUTO = 0x100000,62FE_CAN_8VSB = 0x200000,63FE_CAN_16VSB = 0x400000,64FE_HAS_EXTENDED_CAPS = 0x800000, /* We need more bitspace for newer APIs, indicate this. */65FE_CAN_TURBO_FEC = 0x8000000, /* frontend supports "turbo fec modulation" */66FE_CAN_2G_MODULATION = 0x10000000, /* frontend supports "2nd generation modulation" (DVB-S2) */67FE_NEEDS_BENDING = 0x20000000, /* not supported anymore, don't use (frontend requires frequency bending) */68FE_CAN_RECOVER = 0x40000000, /* frontend can recover from a cable unplug automatically */69FE_CAN_MUTE_TS = 0x80000000 /* frontend can stop spurious TS data output */70} fe_caps_t;717273struct dvb_frontend_info {74char name[128];75fe_type_t type;76__u32 frequency_min;77__u32 frequency_max;78__u32 frequency_stepsize;79__u32 frequency_tolerance;80__u32 symbol_rate_min;81__u32 symbol_rate_max;82__u32 symbol_rate_tolerance; /* ppm */83__u32 notifier_delay; /* DEPRECATED */84fe_caps_t caps;85};868788/**89* Check out the DiSEqC bus spec available on http://www.eutelsat.org/ for90* the meaning of this struct...91*/92struct dvb_diseqc_master_cmd {93__u8 msg [6]; /* { framing, address, command, data [3] } */94__u8 msg_len; /* valid values are 3...6 */95};969798struct dvb_diseqc_slave_reply {99__u8 msg [4]; /* { framing, data [3] } */100__u8 msg_len; /* valid values are 0...4, 0 means no msg */101int timeout; /* return from ioctl after timeout ms with */102}; /* errorcode when no message was received */103104105typedef enum fe_sec_voltage {106SEC_VOLTAGE_13,107SEC_VOLTAGE_18,108SEC_VOLTAGE_OFF109} fe_sec_voltage_t;110111112typedef enum fe_sec_tone_mode {113SEC_TONE_ON,114SEC_TONE_OFF115} fe_sec_tone_mode_t;116117118typedef enum fe_sec_mini_cmd {119SEC_MINI_A,120SEC_MINI_B121} fe_sec_mini_cmd_t;122123124typedef enum fe_status {125FE_HAS_SIGNAL = 0x01, /* found something above the noise level */126FE_HAS_CARRIER = 0x02, /* found a DVB signal */127FE_HAS_VITERBI = 0x04, /* FEC is stable */128FE_HAS_SYNC = 0x08, /* found sync bytes */129FE_HAS_LOCK = 0x10, /* everything's working... */130FE_TIMEDOUT = 0x20, /* no lock within the last ~2 seconds */131FE_REINIT = 0x40 /* frontend was reinitialized, */132} fe_status_t; /* application is recommended to reset */133/* DiSEqC, tone and parameters */134135typedef enum fe_spectral_inversion {136INVERSION_OFF,137INVERSION_ON,138INVERSION_AUTO139} fe_spectral_inversion_t;140141142typedef enum fe_code_rate {143FEC_NONE = 0,144FEC_1_2,145FEC_2_3,146FEC_3_4,147FEC_4_5,148FEC_5_6,149FEC_6_7,150FEC_7_8,151FEC_8_9,152FEC_AUTO,153FEC_3_5,154FEC_9_10,155} fe_code_rate_t;156157158typedef enum fe_modulation {159QPSK,160QAM_16,161QAM_32,162QAM_64,163QAM_128,164QAM_256,165QAM_AUTO,166VSB_8,167VSB_16,168PSK_8,169APSK_16,170APSK_32,171DQPSK,172} fe_modulation_t;173174typedef enum fe_transmit_mode {175TRANSMISSION_MODE_2K,176TRANSMISSION_MODE_8K,177TRANSMISSION_MODE_AUTO,178TRANSMISSION_MODE_4K,179TRANSMISSION_MODE_1K,180TRANSMISSION_MODE_16K,181TRANSMISSION_MODE_32K,182} fe_transmit_mode_t;183184typedef enum fe_bandwidth {185BANDWIDTH_8_MHZ,186BANDWIDTH_7_MHZ,187BANDWIDTH_6_MHZ,188BANDWIDTH_AUTO,189BANDWIDTH_5_MHZ,190BANDWIDTH_10_MHZ,191BANDWIDTH_1_712_MHZ,192} fe_bandwidth_t;193194195typedef enum fe_guard_interval {196GUARD_INTERVAL_1_32,197GUARD_INTERVAL_1_16,198GUARD_INTERVAL_1_8,199GUARD_INTERVAL_1_4,200GUARD_INTERVAL_AUTO,201GUARD_INTERVAL_1_128,202GUARD_INTERVAL_19_128,203GUARD_INTERVAL_19_256,204} fe_guard_interval_t;205206207typedef enum fe_hierarchy {208HIERARCHY_NONE,209HIERARCHY_1,210HIERARCHY_2,211HIERARCHY_4,212HIERARCHY_AUTO213} fe_hierarchy_t;214215216struct dvb_qpsk_parameters {217__u32 symbol_rate; /* symbol rate in Symbols per second */218fe_code_rate_t fec_inner; /* forward error correction (see above) */219};220221struct dvb_qam_parameters {222__u32 symbol_rate; /* symbol rate in Symbols per second */223fe_code_rate_t fec_inner; /* forward error correction (see above) */224fe_modulation_t modulation; /* modulation type (see above) */225};226227struct dvb_vsb_parameters {228fe_modulation_t modulation; /* modulation type (see above) */229};230231struct dvb_ofdm_parameters {232fe_bandwidth_t bandwidth;233fe_code_rate_t code_rate_HP; /* high priority stream code rate */234fe_code_rate_t code_rate_LP; /* low priority stream code rate */235fe_modulation_t constellation; /* modulation type (see above) */236fe_transmit_mode_t transmission_mode;237fe_guard_interval_t guard_interval;238fe_hierarchy_t hierarchy_information;239};240241242struct dvb_frontend_parameters {243__u32 frequency; /* (absolute) frequency in Hz for QAM/OFDM/ATSC */244/* intermediate frequency in kHz for QPSK */245fe_spectral_inversion_t inversion;246union {247struct dvb_qpsk_parameters qpsk;248struct dvb_qam_parameters qam;249struct dvb_ofdm_parameters ofdm;250struct dvb_vsb_parameters vsb;251} u;252};253254255struct dvb_frontend_event {256fe_status_t status;257struct dvb_frontend_parameters parameters;258};259260/* S2API Commands */261#define DTV_UNDEFINED 0262#define DTV_TUNE 1263#define DTV_CLEAR 2264#define DTV_FREQUENCY 3265#define DTV_MODULATION 4266#define DTV_BANDWIDTH_HZ 5267#define DTV_INVERSION 6268#define DTV_DISEQC_MASTER 7269#define DTV_SYMBOL_RATE 8270#define DTV_INNER_FEC 9271#define DTV_VOLTAGE 10272#define DTV_TONE 11273#define DTV_PILOT 12274#define DTV_ROLLOFF 13275#define DTV_DISEQC_SLAVE_REPLY 14276277/* Basic enumeration set for querying unlimited capabilities */278#define DTV_FE_CAPABILITY_COUNT 15279#define DTV_FE_CAPABILITY 16280#define DTV_DELIVERY_SYSTEM 17281282/* ISDB-T and ISDB-Tsb */283#define DTV_ISDBT_PARTIAL_RECEPTION 18284#define DTV_ISDBT_SOUND_BROADCASTING 19285286#define DTV_ISDBT_SB_SUBCHANNEL_ID 20287#define DTV_ISDBT_SB_SEGMENT_IDX 21288#define DTV_ISDBT_SB_SEGMENT_COUNT 22289290#define DTV_ISDBT_LAYERA_FEC 23291#define DTV_ISDBT_LAYERA_MODULATION 24292#define DTV_ISDBT_LAYERA_SEGMENT_COUNT 25293#define DTV_ISDBT_LAYERA_TIME_INTERLEAVING 26294295#define DTV_ISDBT_LAYERB_FEC 27296#define DTV_ISDBT_LAYERB_MODULATION 28297#define DTV_ISDBT_LAYERB_SEGMENT_COUNT 29298#define DTV_ISDBT_LAYERB_TIME_INTERLEAVING 30299300#define DTV_ISDBT_LAYERC_FEC 31301#define DTV_ISDBT_LAYERC_MODULATION 32302#define DTV_ISDBT_LAYERC_SEGMENT_COUNT 33303#define DTV_ISDBT_LAYERC_TIME_INTERLEAVING 34304305#define DTV_API_VERSION 35306307#define DTV_CODE_RATE_HP 36308#define DTV_CODE_RATE_LP 37309#define DTV_GUARD_INTERVAL 38310#define DTV_TRANSMISSION_MODE 39311#define DTV_HIERARCHY 40312313#define DTV_ISDBT_LAYER_ENABLED 41314315#define DTV_ISDBS_TS_ID 42316317#define DTV_DVBT2_PLP_ID 43318319#define DTV_MAX_COMMAND DTV_DVBT2_PLP_ID320321typedef enum fe_pilot {322PILOT_ON,323PILOT_OFF,324PILOT_AUTO,325} fe_pilot_t;326327typedef enum fe_rolloff {328ROLLOFF_35, /* Implied value in DVB-S, default for DVB-S2 */329ROLLOFF_20,330ROLLOFF_25,331ROLLOFF_AUTO,332} fe_rolloff_t;333334typedef enum fe_delivery_system {335SYS_UNDEFINED,336SYS_DVBC_ANNEX_AC,337SYS_DVBC_ANNEX_B,338SYS_DVBT,339SYS_DSS,340SYS_DVBS,341SYS_DVBS2,342SYS_DVBH,343SYS_ISDBT,344SYS_ISDBS,345SYS_ISDBC,346SYS_ATSC,347SYS_ATSCMH,348SYS_DMBTH,349SYS_CMMB,350SYS_DAB,351SYS_DVBT2,352} fe_delivery_system_t;353354struct dtv_cmds_h {355char *name; /* A display name for debugging purposes */356357__u32 cmd; /* A unique ID */358359/* Flags */360__u32 set:1; /* Either a set or get property */361__u32 buffer:1; /* Does this property use the buffer? */362__u32 reserved:30; /* Align */363};364365struct dtv_property {366__u32 cmd;367__u32 reserved[3];368union {369__u32 data;370struct {371__u8 data[32];372__u32 len;373__u32 reserved1[3];374void *reserved2;375} buffer;376} u;377int result;378} __attribute__ ((packed));379380/* num of properties cannot exceed DTV_IOCTL_MAX_MSGS per ioctl */381#define DTV_IOCTL_MAX_MSGS 64382383struct dtv_properties {384__u32 num;385struct dtv_property *props;386};387388#define <link linkend="FE_GET_PROPERTY">FE_SET_PROPERTY</link> _IOW('o', 82, struct dtv_properties)389#define <link linkend="FE_GET_PROPERTY">FE_GET_PROPERTY</link> _IOR('o', 83, struct dtv_properties)390391392/**393* When set, this flag will disable any zigzagging or other "normal" tuning394* behaviour. Additionally, there will be no automatic monitoring of the lock395* status, and hence no frontend events will be generated. If a frontend device396* is closed, this flag will be automatically turned off when the device is397* reopened read-write.398*/399#define FE_TUNE_MODE_ONESHOT 0x01400401402#define <link linkend="FE_GET_INFO">FE_GET_INFO</link> _IOR('o', 61, struct dvb_frontend_info)403404#define <link linkend="FE_DISEQC_RESET_OVERLOAD">FE_DISEQC_RESET_OVERLOAD</link> _IO('o', 62)405#define <link linkend="FE_DISEQC_SEND_MASTER_CMD">FE_DISEQC_SEND_MASTER_CMD</link> _IOW('o', 63, struct dvb_diseqc_master_cmd)406#define <link linkend="FE_DISEQC_RECV_SLAVE_REPLY">FE_DISEQC_RECV_SLAVE_REPLY</link> _IOR('o', 64, struct dvb_diseqc_slave_reply)407#define <link linkend="FE_DISEQC_SEND_BURST">FE_DISEQC_SEND_BURST</link> _IO('o', 65) /* fe_sec_mini_cmd_t */408409#define <link linkend="FE_SET_TONE">FE_SET_TONE</link> _IO('o', 66) /* fe_sec_tone_mode_t */410#define <link linkend="FE_SET_VOLTAGE">FE_SET_VOLTAGE</link> _IO('o', 67) /* fe_sec_voltage_t */411#define <link linkend="FE_ENABLE_HIGH_LNB_VOLTAGE">FE_ENABLE_HIGH_LNB_VOLTAGE</link> _IO('o', 68) /* int */412413#define <link linkend="FE_READ_STATUS">FE_READ_STATUS</link> _IOR('o', 69, fe_status_t)414#define <link linkend="FE_READ_BER">FE_READ_BER</link> _IOR('o', 70, __u32)415#define <link linkend="FE_READ_SIGNAL_STRENGTH">FE_READ_SIGNAL_STRENGTH</link> _IOR('o', 71, __u16)416#define <link linkend="FE_READ_SNR">FE_READ_SNR</link> _IOR('o', 72, __u16)417#define <link linkend="FE_READ_UNCORRECTED_BLOCKS">FE_READ_UNCORRECTED_BLOCKS</link> _IOR('o', 73, __u32)418419#define <link linkend="FE_SET_FRONTEND">FE_SET_FRONTEND</link> _IOW('o', 76, struct dvb_frontend_parameters)420#define <link linkend="FE_GET_FRONTEND">FE_GET_FRONTEND</link> _IOR('o', 77, struct dvb_frontend_parameters)421#define <link linkend="FE_SET_FRONTEND_TUNE_MODE">FE_SET_FRONTEND_TUNE_MODE</link> _IO('o', 81) /* unsigned int */422#define <link linkend="FE_GET_EVENT">FE_GET_EVENT</link> _IOR('o', 78, struct dvb_frontend_event)423424#define <link linkend="FE_DISHNETWORK_SEND_LEGACY_CMD">FE_DISHNETWORK_SEND_LEGACY_CMD</link> _IO('o', 80) /* unsigned int */425426#endif /*_DVBFRONTEND_H_*/427</programlisting>428429430