[PATCH] Re: [linux-dvb] [PATCH] Multi protocol support (stage #1)

Manu Abraham abraham.manu at gmail.com
Thu May 18 15:39:36 CEST 2006


Manu Abraham wrote:
> Hi All,
> 
> Updated the patch again


Found 5 additions/fixes. Any comments other than these ?




> 
> Thanks,
> Manu
> 
> 
> ------------------------------------------------------------------------
> 
> diff -Naurp multiproto5d.orig/linux/drivers/media/dvb/dvb-core/dvb_frontend.c multiproto5d/linux/drivers/media/dvb/dvb-core/dvb_frontend.c
> --- multiproto5d.orig/linux/drivers/media/dvb/dvb-core/dvb_frontend.c	2006-04-29 03:22:23.000000000 +0400
> +++ multiproto5d/linux/drivers/media/dvb/dvb-core/dvb_frontend.c	2006-05-14 04:10:16.000000000 +0400
> @@ -93,7 +93,11 @@ struct dvb_frontend_private {
>  
>  	/* thread/frontend values */
>  	struct dvb_device *dvbdev;
> +	/*	Legacy datatype, superseded by dvbfe_params		*/
>  	struct dvb_frontend_parameters parameters;
> +	/*	dvbfe_params supersedes, dvb_frontend_parameters	*/
> +	struct dvbfe_params	fe_params;
> +	struct dvbfe_info	fe_info;
>  	struct dvb_fe_events events;
>  	struct semaphore sem;
>  	struct list_head list_head;
> @@ -126,6 +130,58 @@ struct dvb_frontend_private {
>  
>  static void dvb_frontend_wakeup(struct dvb_frontend *fe);
>  
> +struct modcod_table {
> +	u32 dvbfe_modcod;
> +	u32 dvbfe_modulation;
> +	u32 dvbfe_fec;
> +};
> +
> +static struct modcod_table dvbs2_modcod_lookup[] = {
> +	{ DVBFE_MODCOD_DUMMY_PLFRAME,	DVBFE_MOD_UNKNOWN,	DVBFE_FEC_UNKNOWN },
> +	{ DVBFE_MODCOD_QPSK_1_4,	DVBFE_MOD_QPSK,		DVBFE_FEC_1_4	  },
> +	{ DVBFE_MODCOD_QPSK_1_3,	DVBFE_MOD_QPSK,		DVBFE_FEC_1_3	  },
> +	{ DVBFE_MODCOD_QPSK_2_5,	DVBFE_MOD_QPSK,		DVBFE_FEC_2_5	  },
> +	{ DVBFE_MODCOD_QPSK_1_2,	DVBFE_MOD_QPSK,		DVBFE_FEC_1_2	  },
> +	{ DVBFE_MODCOD_QPSK_3_5,	DVBFE_MOD_QPSK,		DVBFE_FEC_3_5	  },
> +	{ DVBFE_MODCOD_QPSK_2_3,	DVBFE_MOD_QPSK,		DVBFE_FEC_2_3	  },
> +	{ DVBFE_MODCOD_QPSK_3_4,	DVBFE_MOD_QPSK,		DVBFE_FEC_3_4	  },
> +	{ DVBFE_MODCOD_QPSK_4_5,	DVBFE_MOD_QPSK,		DVBFE_FEC_4_5	  },
> +	{ DVBFE_MODCOD_QPSK_5_6,	DVBFE_MOD_QPSK,		DVBFE_FEC_5_6	  },
> +	{ DVBFE_MODCOD_QPSK_8_9,	DVBFE_MOD_QPSK,		DVBFE_FEC_8_9	  },
> +	{ DVBFE_MODCOD_QPSK_9_10,	DVBFE_MOD_QPSK,		DVBFE_FEC_9_10	  },
> +	{ DVBFE_MODCOD_8PSK_3_5,	DVBFE_MOD_8PSK,		DVBFE_FEC_3_5	  },
> +	{ DVBFE_MODCOD_8PSK_2_3,	DVBFE_MOD_8PSK,		DVBFE_FEC_2_3	  },
> +	{ DVBFE_MODCOD_8PSK_3_4,	DVBFE_MOD_8PSK,		DVBFE_FEC_3_4	  },
> +	{ DVBFE_MODCOD_8PSK_5_6,	DVBFE_MOD_8PSK,		DVBFE_FEC_5_6	  },
> +	{ DVBFE_MODCOD_8PSK_8_9,	DVBFE_MOD_8PSK,		DVBFE_FEC_8_9	  },
> +	{ DVBFE_MODCOD_8PSK_9_10,	DVBFE_MOD_8PSK,		DVBFE_FEC_9_10	  },
> +	{ DVBFE_MODCOD_16APSK_2_3,	DVBFE_MOD_16APSK,	DVBFE_FEC_2_3	  },
> +	{ DVBFE_MODCOD_16APSK_3_4,	DVBFE_MOD_16APSK,	DVBFE_FEC_3_4	  },
> +	{ DVBFE_MODCOD_16APSK_4_5,	DVBFE_MOD_16APSK,	DVBFE_FEC_4_5	  },
> +	{ DVBFE_MODCOD_16APSK_5_6,	DVBFE_MOD_16APSK,	DVBFE_FEC_5_6	  },
> +	{ DVBFE_MODCOD_16APSK_8_9,	DVBFE_MOD_16APSK,	DVBFE_FEC_8_9	  },
> +	{ DVBFE_MODCOD_16APSK_9_10,	DVBFE_MOD_16APSK,	DVBFE_FEC_9_10	  },
> +	{ DVBFE_MODCOD_32APSK_3_4,	DVBFE_MOD_32APSK,	DVBFE_FEC_3_4	  },
> +	{ DVBFE_MODCOD_32APSK_4_5,	DVBFE_MOD_32APSK,	DVBFE_FEC_4_5	  },
> +	{ DVBFE_MODCOD_32APSK_5_6,	DVBFE_MOD_32APSK,	DVBFE_FEC_5_6	  },
> +	{ DVBFE_MODCOD_32APSK_8_9,	DVBFE_MOD_32APSK,	DVBFE_FEC_8_9	  },
> +	{ DVBFE_MODCOD_32APSK_9_10,	DVBFE_MOD_32APSK,	DVBFE_FEC_9_10	  },
> +	{ DVBFE_MODCOD_RESERVED_1,	DVBFE_MOD_UNKNOWN,	DVBFE_FEC_UNKNOWN },
> +	{ DVBFE_MODCOD_BPSK_1_3,	DVBFE_MOD_BPSK,		DVBFE_FEC_1_3	  },
> +	{ DVBFE_MODCOD_BPSK_1_4,	DVBFE_MOD_BPSK,		DVBFE_FEC_1_4	  },
> +	{ DVBFE_MODCOD_RESERVED_2,	DVBFE_MOD_UNKNOWN,	DVBFE_FEC_UNKNOWN }
> +};
> +
> +void decode_dvbs2_modcod(u32 dvbfe_modcod,
> +			 enum dvbfe_modulation *modulation,
> +			 enum dvbfe_fec *fec)
> +{
> +	BUG_ON(dvbfe_modcod >= ARRAY_SIZE(dvbs2_modcod_lookup));
> +	*modulation = dvbs2_modcod_lookup[dvbfe_modcod].dvbfe_modulation;
> +	*fec = dvbs2_modcod_lookup[dvbfe_modcod].dvbfe_fec;
> +}
> +EXPORT_SYMBOL(decode_dvbs2_modcod);
> +
>  static void dvb_frontend_add_event(struct dvb_frontend *fe, fe_status_t status)
>  {
>  	struct dvb_frontend_private *fepriv = fe->frontend_priv;
> @@ -508,7 +564,10 @@ static int dvb_frontend_thread(void *dat
>  	unsigned long timeout;
>  	char name [15];
>  	fe_status_t s;
> +	/*	Legacy datatype		*/
>  	struct dvb_frontend_parameters *params;
> +	/*	Superseded datatype	*/
> +	struct dvbfe_params *fe_params = &fepriv->fe_params;
>  
>  	dprintk("%s\n", __FUNCTION__);
>  
> @@ -558,6 +617,20 @@ static int dvb_frontend_thread(void *dat
>  			}
>  			fepriv->reinitialise = 0;
>  		}
> +		/*	These callbacks do exist for devices that do have their
> +		 *	own tuning algorithms!
> +		 *
> +		 *	If we don't have search, we don't have track either. But,
> +		 *	being paranoid, we check whether both of them exists.
> +		 *
> +		 *	In this case the demod/tuner does zigzag internally based
> +		 *	on information from the device itself rather than using a 
> +		 *	simple and blind swzigzag.
> +		 */
> +		if (fe->ops->search)
> +			fe->ops->search(fe, fe_params);
> +		if (fe->ops->track)
> +			fe->ops->track(fe, fe_params);
>  
>  		/* do an iteration of the tuning loop */
>  		if (fe->ops->tune) {
> diff -Naurp multiproto5d.orig/linux/drivers/media/dvb/dvb-core/dvb_frontend.h multiproto5d/linux/drivers/media/dvb/dvb-core/dvb_frontend.h
> --- multiproto5d.orig/linux/drivers/media/dvb/dvb-core/dvb_frontend.h	2006-04-29 03:22:23.000000000 +0400
> +++ multiproto5d/linux/drivers/media/dvb/dvb-core/dvb_frontend.h	2006-05-14 03:26:01.000000000 +0400
> @@ -61,6 +61,61 @@ struct dvb_tuner_info {
>  	u32 bandwidth_step;
>  };
>  
> +enum dvbfe_modcod {
> +	DVBFE_MODCOD_DUMMY_PLFRAME	= 0,
> +	DVBFE_MODCOD_QPSK_1_4,
> +	DVBFE_MODCOD_QPSK_1_3,
> +	DVBFE_MODCOD_QPSK_2_5,
> +	DVBFE_MODCOD_QPSK_1_2,
> +	DVBFE_MODCOD_QPSK_3_5,
> +	DVBFE_MODCOD_QPSK_2_3,
> +	DVBFE_MODCOD_QPSK_3_4,
> +	DVBFE_MODCOD_QPSK_4_5,
> +	DVBFE_MODCOD_QPSK_5_6,
> +	DVBFE_MODCOD_QPSK_8_9,
> +	DVBFE_MODCOD_QPSK_9_10,
> +	DVBFE_MODCOD_8PSK_3_5,
> +	DVBFE_MODCOD_8PSK_2_3,
> +	DVBFE_MODCOD_8PSK_3_4,
> +	DVBFE_MODCOD_8PSK_5_6,
> +	DVBFE_MODCOD_8PSK_8_9,
> +	DVBFE_MODCOD_8PSK_9_10,
> +	DVBFE_MODCOD_16APSK_2_3,
> +	DVBFE_MODCOD_16APSK_3_4,
> +	DVBFE_MODCOD_16APSK_4_5,
> +	DVBFE_MODCOD_16APSK_5_6,
> +	DVBFE_MODCOD_16APSK_8_9,
> +	DVBFE_MODCOD_16APSK_9_10,
> +	DVBFE_MODCOD_32APSK_3_4,
> +	DVBFE_MODCOD_32APSK_4_5,
> +	DVBFE_MODCOD_32APSK_5_6,
> +	DVBFE_MODCOD_32APSK_8_9,
> +	DVBFE_MODCOD_32APSK_9_10,
> +	DVBFE_MODCOD_RESERVED_1,
> +	DVBFE_MODCOD_BPSK_1_3,
> +	DVBFE_MODCOD_BPSK_1_4,
> +	DVBFE_MODCOD_RESERVED_2
> +};
> +
> +enum tuner_param {
> +	DVBFE_TUNER_FREQUENCY		= (1 <<  0),
> +	DVBFE_TUNER_TUNERSTEP		= (1 <<  1),
> +	DVBFE_TUNER_IFFREQ		= (1 <<  2),
> +	DVBFE_TUNER_BANDWIDTH		= (1 <<  3),
> +	DVBFE_TUNER_REFERENCE_CLK	= (1 <<  4),
> +	DVBFE_TUNER_IQSENSE		= (1 <<  5),
> +	DVBFE_TUNER_DUMMY		= (1 << 31)
> +};
> +
> +struct tuner_state {
> +	u32 frequency;
> +	u32 tunerstep;
> +	u32 ifreq;
> +	u32 bandwidth;
> +	u32 iqsense;
> +	s32 reference_clk;
> +};
> +
>  struct dvb_tuner_ops {
>  
>  	struct dvb_tuner_info info;
> @@ -83,8 +138,8 @@ struct dvb_tuner_ops {
>  
>  	/** These are provided seperately from set_params in order to facilitate silicon
>  	 * tuners which require sophisticated tuning loops, controlling each parameter seperately. */
> -	int (*set_frequency)(struct dvb_frontend *fe, u32 frequency);
> -	int (*set_bandwidth)(struct dvb_frontend *fe, u32 bandwidth);
> +	int (*set_state)(struct dvb_frontend *fe, enum tuner_param param, struct tuner_state *state);
> +	int (*get_state)(struct dvb_frontend *fe, enum tuner_param param, struct tuner_state *state);
>  };
>  
>  struct dvb_frontend_ops {
> @@ -125,6 +180,19 @@ struct dvb_frontend_ops {
>  	int (*dishnetwork_send_legacy_command)(struct dvb_frontend* fe, unsigned long cmd);
>  	int (*i2c_gate_ctrl)(struct dvb_frontend* fe, int enable);
>  
> +	/*	These callbacks are based on the supeseded IOCTL's	*/



One spelling mistake corrected to superseded (Thanks to Marcel)



> +	int (*set_params)(struct dvb_frontend *fe, struct dvbfe_params *fe_params);
> +	int (*get_params)(struct dvb_frontend *fe, struct dvbfe_params *fe_params);
> +	int (*get_info)(struct dvb_frontend *fe, struct dvbfe_info *fe_info);
> +	int (*get_events)(struct dvb_frontend *fe, struct dvbfe_events *fe_events);
> +	int (*get_delsys)(struct dvb_frontend *fe, enum dvbfe_delsys);
> +	
> +	/*	These callbacks are for devices that implement their own 
> +	 *	tuning algorithms, rather than a simple swzigzag
> +	 */
> +	int (*search)(struct dvb_frontend *fe, struct dvbfe_params *fe_params);
> +	int (*track)(struct dvb_frontend *fe, struct dvbfe_params *fe_params);
> +
>  	struct dvb_tuner_ops tuner_ops;
>  };
>  
> @@ -158,4 +226,8 @@ extern void dvb_frontend_reinitialise(st
>  extern void dvb_frontend_sleep_until(struct timeval *waketime, u32 add_usec);
>  extern s32 timeval_usec_diff(struct timeval lasttime, struct timeval curtime);
>  
> +extern void decode_dvbs2_modcod(u32 modcod,
> +				enum dvbfe_modulation *modulation,
> +				enum dvbfe_fec *fec);
> +
>  #endif
> diff -Naurp multiproto5d.orig/linux/include/linux/dvb/frontend.h multiproto5d/linux/include/linux/dvb/frontend.h
> --- multiproto5d.orig/linux/include/linux/dvb/frontend.h	2006-04-29 03:22:23.000000000 +0400
> +++ multiproto5d/linux/include/linux/dvb/frontend.h	2006-05-16 00:16:04.000000000 +0400
> @@ -274,4 +274,472 @@ struct dvb_frontend_event {
>  
>  #define FE_DISHNETWORK_SEND_LEGACY_CMD _IO('o', 80) /* unsigned int */
>  
> +/*
> + *	References:
> + *	DVB-S : EN 300 421
> + *	DVB-S2: EN 300 307, TR 102 376, EN 301 210
> + *	DVB-C : EN 300 429
> + *	DVB-T : EN 300 744
> + *	DVB-H :	EN 300 304
> + *	ATSC  : A/53A
> + */
> +
> +/*
> + *	Delivery Systems
> + *	needs to set/queried for multistandard frontends
> + */
> +enum dvbfe_delsys {
> +	DVBFE_DELSYS_DVBS		= (1 <<  0),
> +	DVBFE_DELSYS_DSS		= (1 <<  1),
> +	DVBFE_DELSYS_DVBS2		= (1 <<  2),
> +	DVBFE_DELSYS_DVBC		= (1 <<  3),
> +	DVBFE_DELSYS_DVBT		= (1 <<  4),
> +	DVBFE_DELSYS_DVBH		= (1 <<  5),
> +	DVBFE_DELSYS_ATSC		= (1 <<  6),
> +	DVBFE_DELSYS_DUMMY		= (1 << 31)
> +};
> +#define DVBFE_GET_DELSYS		_IOR('o', 82, enum dvbfe_delsys)
> +
> +/*
> + *	Modulation types
> + */
> +enum dvbfe_modulation {
> +	DVBFE_MOD_IGNORE		= (0 <<  0),
> +	DVBFE_MOD_UNKNOWN		= (1 <<  0),
> +	DVBFE_MOD_BPSK			= (1 <<  1),
> +	DVBFE_MOD_QPSK			= (1 <<  2),
> +	DVBFE_MOD_OQPSK			= (1 <<  3),
> +	DVBFE_MOD_8PSK			= (1 <<  4),
> +	DVBFE_MOD_16APSK		= (1 <<  5),
> +	DVBFE_MOD_32APSK		= (1 <<  6),
> +	DVBFE_MOD_QAM16			= (1 <<  7),
> +	DVBFE_MOD_QAM32			= (1 <<  8),
> +	DVBFE_MOD_QAM64			= (1 <<  9),
> +	DVBFE_MOD_QAM128		= (1 << 10),
> +	DVBFE_MOD_QAM256		= (1 << 11),
> +	DVBFE_MOD_QAM512		= (1 << 12),
> +	DVBFE_MOD_QAM1024		= (1 << 13),
> +	DVBFE_MOD_QAMAUTO		= (1 << 14),
> +	DVBFE_MOD_OFDM			= (1 << 15),
> +	DVBFE_MOD_COFDM			= (1 << 16),
> +	DVBFE_MOD_VSB8			= (1 << 17),
> +	DVBFE_MOD_VSB16			= (1 << 18),
> +	DVBFE_MOD_AUTO			= (1 << 30),
> +	DVBFE_MOD_DUMMY			= (1 << 31)
> +};
> +
> +/*
> + *	FEC (Forward Error Correction) / Puncture Rate
> + *	Reed Solomon Error Correction, an implementation
> + *	can be found at http://rscode.sourceforge.net
> + */
> +enum dvbfe_fec {
> +	DVBFE_FEC_IGNORE		= (0 <<  0),
> +	DVBFE_FEC_UNKNOWN		= (1 <<  0),
> +	DVBFE_FEC_1_4			= (1 <<  1),
> +	DVBFE_FEC_1_3			= (1 <<  2),
> +	DVBFE_FEC_2_5			= (1 <<  3),
> +	DVBFE_FEC_1_2			= (1 <<  4),
> +	DVBFE_FEC_3_5			= (1 <<  5),
> +	DVBFE_FEC_2_3			= (1 <<  6),
> +	DVBFE_FEC_3_4			= (1 <<  7),
> +	DVBFE_FEC_4_5			= (1 <<  8),
> +	DVBFE_FEC_5_6			= (1 <<  9),
> +	DVBFE_FEC_6_7			= (1 << 10),
> +	DVBFE_FEC_7_8			= (1 << 11),
> +	DVBFE_FEC_8_9			= (1 << 12),
> +	DVBFE_FEC_9_10			= (1 << 13),
> +	DVBFE_FEC_AUTO			= (1 << 30),
> +	DVBFE_FEC_DUMMY			= (1 << 31)
> +};
> +
> +/*
> + *	Frontend Inversion (I/Q Swap)
> + */
> +enum dvbfe_iqswap {
> +	DVBFE_IQSWAP_IGNORE		= (0 <<  0),
> +	DVBFE_IQSWAP_OFF		= (1 <<  1),
> +	DVBFE_IQSWAP_ON			= (1 <<  2),
> +	DVBFE_IQSWAP_AUTO		= (1 << 30),
> +	DVBFE_IQSWAP_DUMMY		= (1 << 31)
> +};
> +
> +/*
> + *	DVB-S parameters
> + */
> +struct dvbs_params {
> +	__u32				symbol_rate;
> +
> +	enum dvbfe_modulation		modulation;
> +	enum dvbfe_fec			fec;
> +};
> +
> +/*
> + *	DSS parameters
> + */
> +struct dss_params {
> +	__u32				symbol_rate;
> +
> +	enum dvbfe_modulation		modulation;
> +	enum dvbfe_fec			fec;
> +};
> +
> +/*
> + *	Optional Backwards Compatible Mode
> + *	NOTE: Applies to DVB-S2 only
> + */
> +enum dvbfe_obc_mode {
> +	DVBFE_OBC_IGNORE		= (0 <<  0),
> +	DVBFE_OBC_OFF			= (1 <<  0),
> +	DVBFE_OBC_ON			= (1 <<  1),
> +	DVBFE_OBC_DUMMY			= (1 << 31)
> +};
> +
> +/*
> + *	Input Stream Flag
> + *	NOTE: Applies to DVB-S2 only
> + */
> +enum dvbfe_sismis_flag {
> +	DVBFE_SISMIS_IGNORE		= (0 <<  0),
> +	DVBFE_SISMIS_SINGLE		= (1 <<  0),
> +	DVBFE_SISMIS_MULTIPLE		= (1 <<  1),
> +	DVBFE_SISMIS_DUMMY		= (1 << 31)
> +};
> +
> +/*
> + *	Rolloff Rate (Nyquist Filter Rolloff)
> + *	NOTE: DVB-S2 has rates of 0.20, 0.25, 0.35
> + *	Values are x100
> + */
> +enum dvbfe_rolloff {
> +	DVBFE_ROLLOFF_35		= (0 <<  0),
> +	DVBFE_ROLLOFF_25		= (1 <<  0),
> +	DVBFE_ROLLOFF_20		= (1 <<  1),
> +	DVBFE_ROLLOFF_DUMMY		= (1 << 31)
> +};
> +
> +/*
> + *	DVB-S2 parameters
> + */
> +struct dvbs2_params {
> +	__u32				symbol_rate;
> +
> +	enum dvbfe_modulation		modulation;
> +	enum dvbfe_fec			fec;
> +	enum dvbfe_obc_mode		obc_mode;
> +	enum dvbfe_rolloff		rolloff;
> +	enum dvbfe_sismis_flag		sismis;
> +	__u8				stream_id;
> +
> +	__u8				pad[32];
> +};
> +
> +
> +/*
> + *	DVB-C parameters
> + */
> +struct dvbc_params {
> +	__u32				symbol_rate;
> +	enum dvbfe_modulation		modulation;
> +	enum dvbfe_fec			fec;
> +};
> +
> +/*
> + *	DVB-T Channel bandwidth
> + */
> +enum dvbfe_bandwidth {
> +	DVBFE_BANDWIDTH_IGNORE		= (0 <<  0),
> +	DVBFE_BANDWIDTH_8_MHZ		= (1 <<  0),
> +	DVBFE_BANDWIDTH_7_MHZ		= (1 <<  1),
> +	DVBFE_BANDWIDTH_6_MHZ		= (1 <<  2),
> +	DVBFE_BANDWIDTH_5_MHZ		= (1 <<  3),
> +	DVBFE_BANDWIDTH_AUTO		= (1 << 30),
> +	DVBFE_BANDWIDTH_DUMMY		= (1 << 31)
> +};
> +
> +/*
> + *	DVB-T/DVB-H transmission mode
> + */
> +enum dvbfe_transmission_mode {
> +	DVBFE_TRANSMISSION_MODE_IGNORE	= (0 <<  0),
> +	DVBFE_TRANSMISSION_MODE_2K	= (1 <<  0),
> +	DVBFE_TRAMSMISSION_MODE_4K	= (1 <<  1),
> +	DVBFE_TRANSMISSION_MODE_8K	= (1 <<  2),
> +	DVBFE_TRANSMISSION_MODE_AUTO	= (1 << 30),
> +	DVBFE_TRANSMISSION_MODE_DUMMY	= (1 << 31)
> +};
> +
> +/*
> + *	DVB-T/DVB-H Guard interval
> + */
> +enum dvbfe_guard_interval {
> +	DVBFE_GUARD_INTERVAL_IGNORE	= (0 <<  0),
> +	DVBFE_GUARD_INTERVAL_1_32	= (1 <<  1),
> +	DVBFE_GUARD_INTERVAL_1_16	= (1 <<  2),
> +	DVBFE_GUARD_INTERVAL_1_8	= (1 <<  3),
> +	DVBFE_GUARD_INTERVAL_1_4	= (1 <<  4),
> +	DVBFE_GUARD_INTERVAL_AUTO	= (1 << 30),
> +	DVBFE_GUARD_INTERVAL_DUMMY	= (1 << 31)
> +};
> +
> +/*
> + *	DVB-T/DVB-H Hierarchial modulation
> + */
> +enum dvbfe_hierarchy {
> +	DVBFE_HIERARCHY_IGNORE		= (0 <<  0),
> +	DVBFE_HIERARCHY_OFF		= (1 <<  0),
> +	DVBFE_HIERARCHY_ON		= (1 <<  1),
> +	DVBFE_HIERARCHY_AUTO		= (1 << 30),
> +	DVBFE_HIERARCHY_DUMMY		= (1 << 31)
> +};
> +
> +/*
> + *	DVB-T/DVB-H Rolloff's
> + */
> +enum dvbfe_alpha {
> +	DVBFE_ALPHA_1			= (1 <<  0),
> +	DVBFE_ALPHA_2			= (1 <<  1),
> +	DVBFE_ALPHA_4			= (1 <<  2),
> +	DBVFE_ALPHA_DUMMY		= (1 << 31)
> +};
> +/*
> + *	Stream priority for Hierachial coding
> + */
> +enum dvbfe_stream_priority {
> +	DVBFE_STREAM_PRIORITY_HP	= (0 << 0),
> +	DVBFE_STREAM_PRIORITY_LP	= (1 << 0)

	

	DVBFE_STREAM_PRIORITY_DUMMY	= (1 << 31)

	missed out the dummy field ..



	
> +};
> +
> +/*
> + *	DVB-T parameters
> + */
> +struct dvbt_params {
> +	enum dvbfe_modulation		constellation;
> +	enum dvbfe_bandwidth		bandwidth;
> +	enum dvbfe_fec			code_rate_HP;
> +	enum dvbfe_fec			code_rate_LP;
> +	enum dvbfe_transmission_mode	transmission_mode;
> +	enum dvbfe_guard_interval	guard_interval;
> +	enum dvbfe_hierarchy		hierarchy;
> +	enum dvbfe_alpha		alpha;
> +	enum dvbfe_stream_priority	priority;
> +};
> +
> +/*
> + *	DVB-H Interleaver type
> + */
> +enum dvbfe_interleaver {
> +	DVBFE_INTERLEAVER_IGNORE	= (0 <<  0),
> +	DVBFE_INTERLEAVER_NATIVE	= (1 <<  0),
> +	DVBFE_INTERLEAVER_INDEPTH	= (1 <<  1),
> +	DVBFE_INTERLEAVER_AUTO		= (1 << 30),
> +	DVBFE_INTERLEAVER_DUMMY		= (1 << 31)
> +};
> +
> +/*
> + *	DVB-H MPE-FEC Indicator
> + */
> +enum dvbfe_mpefec {
> +	DVBFE_MPEFEC_IGNORE		= (0 <<  0),
> +	DVBFE_MPEFEC_OFF		= (1 <<  0),
> +	DVBFE_MPEFEC_ON			= (1 <<  1),
> +	DVBFE_MPEFEC_DUMMY		= (1 << 31),
> +};
> +
> +/*
> + *	DVB-H Timeslicing Indicator
> + */
> +enum dvbfe_timeslicing {
> +	DVBFE_TIMESLICING_IGNORE	= (0 <<  0),
> +	DVBFE_TIMESLICING_OFF		= (1 <<  0),
> +	DVBFE_TIMESLICING_ON		= (1 <<  1),
> +	DVBFE_TIMESLICING_DUMMY		= (1 << 31)
> +};
> +
> +/*
> + *	DVB-H parameters
> + */
> +struct dvbh_params {
> +	enum dvbfe_modulation		constellation;
> +	enum dvbfe_fec			code_rate_HP;
> +	enum dvbfe_fec			code_rate_LP;
> +	enum dvbfe_transmission_mode	transmission_mode;
> +	enum dvbfe_guard_interval	guard_interval;
> +	enum dvbfe_hierarchy		hierarchy;
> +	enum dvbfe_alpha		alpha;
> +	enum dvbfe_interleaver		interleaver;
> +	enum dvbfe_mpefec		mpefec;
> +	enum dvbfe_timeslicing		timeslicing;
> +	enum dvbfe_stream_priority	priority;
> +
> +	__u32				bandwidth;
> +};
> +
> +/*
> + *	ATSC parameters
> + */
> +struct atsc_params {
> +	enum dvbfe_modulation		modulation;
> +};
> +
> +/*
> + *	DVB Frontend Tuning Parameters
> + */
> +struct dvbfe_params {
> +	__u32				frequency;
> +	enum dvbfe_iqswap		iqswap;



	enum dvbfe_delsys		delsys;


	This is is useful when the same demod is supporting multiple delivery 
systems
	(Thanks to Andrew)


> +
> +	__u8				pad[32];
> +
> +	union {
> +		struct dvbs_params	dvbs;
> +		struct dss_params	dss;
> +		struct dvbs2_params	dvbs2;
> +		struct dvbc_params	dvbc;
> +		struct dvbt_params	dvbt;
> +		struct dvbh_params	dvbh;
> +		struct atsc_params	atsc;
> +
> +		__u8			pad[128];
> +	} delsys;
> +};
> +#define DVBFE_SET_PARAMS		_IOW('o', 83, struct dvbfe_params)
> +#define DVBFE_GET_PARAMS		_IOWR('o', 84, struct dvbfe_params)
> +
> +/*
> + *	DVB-S capability bitfields
> + */
> +struct dvbfe_dvbs_info {
> +	enum dvbfe_modulation		modulation;
> +	enum dvbfe_fec			fec;
> +
> +	__u8				pad[32];
> +};
> +
> +/*
> + *	DSS capability bitfields
> + */
> +struct dvbfe_dss_info {
> +	enum dvbfe_modulation		modulation;
> +	enum dvbfe_fec			fec;
> +
> +	__u8				pad[32];
> +};
> +
> +/*
> + *	DVB-S2 capability bitfields
> + */
> +struct dvbfe_dvbs2_info {
> +	enum dvbfe_modulation		modulation;
> +	enum dvbfe_fec			fec;
> +
> +	__u8				pad[32];
> +};
> +
> +/*
> + *	DVB-C capability bitfields
> + */
> +struct dvbfe_dvbc_info {
> +	enum dvbfe_modulation		modulation;
> +	enum dvbfe_fec			fec;
> +
> +	__u8				pad[32];
> +};
> +
> +/*
> + *	DVB-T capability bitfields
> + */
> +struct dvbfe_dvbt_info {
> +	enum dvbfe_modulation		modulation;
> +	enum dvbfe_fec			fec;
> +	enum dvbfe_transmission_mode	transmission_mode;
> +	enum dvbfe_guard_interval	guard_interval;


	enum dvbfe_bandwidth		bandwidth;
	enum dvbfe_hierarchy		hierarchy;


	missed out these 2 fields

> +
> +	__u8				pad[32];
> +};
> +
> +/*
> + *	DVB-H capability bitfields
> + */
> +struct dvbfe_dvbh_info {
> +	enum dvbfe_modulation		modulation;
> +	enum dvbfe_fec			fec;
> +	enum dvbfe_transmission_mode	transmission_mode;
> +	enum dvbfe_guard_interval	guard_interval;

	

	enum dvbfe_bandwidth		bandwidth;
	enum dvbfe_hierarchy		hierarchy;

	missed out these 2 fields


> +
> +	__u8				pad[32];
> +};
> +
> +/*
> + *	ATSC capability bitfields
> + */
> +struct dvbfe_atsc_info {
> +	enum dvbfe_modulation		modulation;
> +
> +	__u8				pad[32];
> +};
> +
> +struct dvbfe_caps {
> +	union {
> +		struct dvbfe_dvbs_info	dvbs;
> +		struct dvbfe_dss_info	dss;
> +		struct dvbfe_dvbs2_info	dvbs2;
> +		struct dvbfe_dvbc_info	dvbc;
> +		struct dvbfe_dvbt_info	dvbt;
> +		struct dvbfe_dvbh_info	dvbh;
> +		struct dvbfe_atsc_info	atsc;
> +
> +		__u8			pad[32];
> +	} delsys;
> +};
> +
> +/*
> + *	DVB Frontend related Information
> + */
> +struct dvbfe_info {
> +	char				name[128];
> +
> +	/*	For Multi Standard tuners, set "delivery"
> +	 *	to the relevant delivery system to retrieve the
> +	 *	relevant delivery system related information.
> +	 *
> +	 *	"modulation" is a bitfield of supported MODULATIONS
> +	 */
> +	enum dvbfe_delsys		delivery;
> +	struct dvbfe_caps		caps;
> +
> +	__u32				frequency_min;
> +	__u32				frequency_max;
> +	__u32				frequency_step;
> +	__u32				symbol_rate_min;
> +	__u32				symbol_rate_max;
> +	__u32				symbol_rate_tolerance;
> +
> +	enum dvbfe_iqswap		iqswap;
> +
> +	__u8				pad[32];
> +};
> +#define DVBFE_GET_INFO			_IORW('o', 85, struct dvbfe_info)
> +
> +enum dvbfe_status {
> +	DVBFE_HAS_SIGNAL		= (1 <<  0),	/*  something above noise floor	*/
> +	DVBFE_HAS_CARRIER		= (1 <<  1),	/*  Signal found		*/
> +	DVBFE_HAS_VITERBI		= (1 <<  2),	/*  FEC is stable		*/
> +	DVBFE_HAS_SYNC			= (1 <<  3),	/*  SYNC found			*/
> +	DVBFE_HAS_LOCK			= (1 <<  4),	/*  OK ..			*/
> +	DVBFE_TIMEDOUT			= (1 <<  5),	/*  no lock in last ~2 s	*/
> +	DVBFE_REINIT			= (1 <<  6),	/*  Reinitialized FE		*/




This flag (DVBFE_REINIT) was deprecated..
(Thanks to Marcel)




> +	DVBFE_DUMMY			= (1 << 31)
> +};
> +
> +/*
> + *	DVB Frontend events
> + */
> +struct dvbfe_events {
> +	enum dvbfe_status		status;
> +
> +	__u8				pad[32];
> +};
> +#define DVBFE_GET_EVENTS		_IOR('o', 86, struct dvbfe_events)
> +
>  #endif /*_DVBFRONTEND_H_*/
> 
> 
> ------------------------------------------------------------------------
> 
> #include <sys/ioctl.h>
> #include <stdlib.h>
> #include <stdio.h>
> #include <string.h>
> #include <sys/types.h>
> #include <sys/stat.h>
> #include <fcntl.h>
> #include "frontend.h"
> 
> int get_info(int fd, struct dvbfe_info *info)
> {
> 	if (ioctl(fd, DVBFE_GET_INFO, info) < 0) {
> 		fprintf(stderr, "Error getting device info\n");
> 		return -1;
> 	}
> 
> 	return 0;
> }
> 
> int get_system(int fd, enum dvbfe_delsys *delsys)
> {
> 	if (ioctl(fd, DVBFE_GET_DELSYS, delsys) < 0) {
> 		fprintf(stderr, "Error getting current delivery system\n");
> 		return -1;
> 	}
> 
> 	return 0;
> }
> 
> int set_params(int fd, struct dvbfe_params *params)
> {
> 	if (ioctl(fd, DVBFE_SET_PARAMS, params) < 0) {
> 		fprintf(stderr, "Error setting frontend parameters\n");
> 		return -1;
> 	}
> 
> 	return 0;
> }
> 
> int get_params(int fd, struct dvbfe_params *params)
> {
> 	if (ioctl(fd, DVBFE_GET_PARAMS, params) < 0) {
> 		fprintf(stderr, "Error retreiving frontend parameters\n");
> 		return -1;
> 	}
> 
> 	return 0;
> }
> 
> int main(void)
> {
> 	int fd;
> 
> 	struct dvbfe_info info;
> 	enum   dvbfe_delsys delsys;
> 	struct dvbfe_params params;
> 
> 	int system = DVBFE_DELSYS_DVBS;
> 
> 	char *fe = "/dev/dvb/adapter0/frontend0";
> 
> 	if (fd = open(fe, O_RDWR) < 0) {
> 		fprintf(stderr, "Error Opening device\n");
> 		return -1;
> 	}
> 	/*	Get all supported delivery systems	*/
> 	get_info(fd, &info);
> 	fprintf(stderr, "[%s] supported Systems: ", info.name,
> 		info.delivery & DVBFE_DELSYS_DVBS  ?  "DVB-S "  : "",
> 		info.delivery & DVBFE_DELSYS_DSS   ?  "DSS "    : "",
> 		info.delivery & DVBFE_DELSYS_DVBS2 ?  "DVB-S2 " : "",
> 		info.delivery & DVBFE_DELSYS_DVBC  ?  "DVB-C "  : "",
> 		info.delivery & DVBFE_DELSYS_DVBT  ?  "DVB-T "  : "",
> 		info.delivery & DVBFE_DELSYS_DVBH  ?  "DVB-H "  : "",
> 		info.delivery & DVBFE_DELSYS_ATSC  ?  "ATSC "   : "", "\n");
> 
> 	switch (system) {
> 	case DVBFE_DELSYS_DVBS:
> 		/*	Get DVB-S specific info			*/
> 		info.delivery = DVBFE_DELSYS_DVBS;
> 		get_info(fd, &info);
> 		fprintf(stderr, "[%s] supported Modulations: ", info.name,
> 			info.caps.delsys.dvbs.modulation & DVBFE_MOD_BPSK ? "BPSK "  : "",
> 			info.caps.delsys.dvbs.modulation & DVBFE_MOD_QPSK ? "QPSK "  : "", "\n");
> 		fprintf(stderr, "[%s] supported FEC's: ", info.name,
> 			info.caps.delsys.dvbs.fec & DVBFE_FEC_1_2 ? "FEC 1/2 " : "",
> 			info.caps.delsys.dvbs.fec & DVBFE_FEC_2_3 ? "FEC 2/3 " : "",
> 			info.caps.delsys.dvbs.fec & DVBFE_FEC_3_4 ? "FEC 3/4 " : "",
> 			info.caps.delsys.dvbs.fec & DVBFE_FEC_4_5 ? "FEC 4/5 " : "",
> 			info.caps.delsys.dvbs.fec & DVBFE_FEC_5_6 ? "FEC 5/6 " : "",
> 			info.caps.delsys.dvbs.fec & DVBFE_FEC_6_7 ? "FEC 6/7 " : "",
> 			info.caps.delsys.dvbs.fec & DVBFE_FEC_7_8 ? "FEC 7/8 " : "",
> 			info.caps.delsys.dvbs.fec & DVBFE_FEC_8_9 ? "FEC 8/9 " : "",
> 			info.caps.delsys.dvbs.fec & DVBFE_FEC_AUTO ? "FEC AUTO " : "", "\n");
> 		fprintf(stderr, "[%s] supports Freq min:%d Freq max:%d, Symbol Rate min:%d Symbol Rate max:%d Symbol rate Tolerance:%d\n",
> 			info.name, info.frequency_min, info.frequency_max, info.symbol_rate_min, info.symbol_rate_max, info.symbol_rate_tolerance);
> 
> 		/*	Get current delivery system (optional)	*/
> 		get_system(fd, &delsys);
> 		/*	Set parameters for DVB-S		*/
> 		set_params(fd, &params);
> 		/*	Get parameters for DVB-S		*/
> 		get_params(fd, &params);
> 		break;
> 	case DVBFE_DELSYS_DSS:
> 		/*	Get DSS specific info			*/
> 		info.delivery = DVBFE_DELSYS_DSS;
> 		get_info(fd, &info);
> 		fprintf(stderr, "[%s] supported Modulations: ", info.name,
> 			info.caps.delsys.dss.modulation & DVBFE_MOD_BPSK ? "BPSK "  : "",
> 			info.caps.delsys.dss.modulation & DVBFE_MOD_QPSK ? "QPSK "  : "", "\n");
> 		fprintf(stderr, "[%s] supported FEC's: ", info.name,
> 			info.caps.delsys.dss.fec & DVBFE_FEC_1_2 ? "FEC 1/2 " : "",
> 			info.caps.delsys.dss.fec & DVBFE_FEC_2_3 ? "FEC 2/3 " : "",
> 			info.caps.delsys.dss.fec & DVBFE_FEC_3_4 ? "FEC 3/4 " : "",
> 			info.caps.delsys.dss.fec & DVBFE_FEC_4_5 ? "FEC 4/5 " : "",
> 			info.caps.delsys.dss.fec & DVBFE_FEC_5_6 ? "FEC 5/6 " : "",
> 			info.caps.delsys.dss.fec & DVBFE_FEC_6_7 ? "FEC 6/7 " : "",
> 			info.caps.delsys.dss.fec & DVBFE_FEC_7_8 ? "FEC 7/8 " : "",
> 			info.caps.delsys.dss.fec & DVBFE_FEC_8_9 ? "FEC 8/9 " : "",
> 			info.caps.delsys.dss.fec & DVBFE_FEC_AUTO ? "FEC AUTO " : "", "\n");
> 		fprintf(stderr, "[%s] supports Freq min:%d Freq max:%d, Symbol Rate min:%d Symbol Rate max:%d Symbol rate Tolerance:%d\n",
> 			info.name, info.frequency_min, info.frequency_max, info.symbol_rate_min, info.symbol_rate_max, info.symbol_rate_tolerance);
> 
> 		/*	Get current delivery system (optional)	*/
> 		get_system(fd, &delsys);
> 		/*	Set parameters for DSS			*/
> 		set_params(fd, &params);
> 		/*	Get parameters for DSS			*/
> 		get_params(fd, &params);
> 		break;
> 	case DVBFE_DELSYS_DVBS2:
> 		/*	Get DVB-S2 specific info		*/
> 		info.delivery = DVBFE_DELSYS_DVBS2;
> 		get_info(fd, &info);
> 		fprintf(stderr, "[%s] supported Modulations: ", info.name,
> 			info.caps.delsys.dvbs2.modulation & DVBFE_MOD_BPSK   ? "BPSK "   : "",
> 			info.caps.delsys.dvbs2.modulation & DVBFE_MOD_QPSK   ? "QPSK "   : "",
> 			info.caps.delsys.dvbs2.modulation & DVBFE_MOD_8PSK   ? "8PSK "   : "",
> 			info.caps.delsys.dvbs2.modulation & DVBFE_MOD_16APSK ? "16APSK " : "",
> 			info.caps.delsys.dvbs2.modulation & DVBFE_MOD_32APSK ? "32APSK " : "", "\n");
> 		fprintf(stderr, "[%s] supported FEC's: ", info.name,
> 			info.caps.delsys.dvbs2.fec & DVBFE_FEC_1_4 ? "FEC 1/4 " : "",
> 			info.caps.delsys.dvbs2.fec & DVBFE_FEC_1_3 ? "FEC 1/3 " : "",
> 			info.caps.delsys.dvbs2.fec & DVBFE_FEC_2_5 ? "FEC 2/5 " : "",
> 			info.caps.delsys.dvbs2.fec & DVBFE_FEC_1_2 ? "FEC 1/2 " : "",
> 			info.caps.delsys.dvbs2.fec & DVBFE_FEC_3_5 ? "FEC 3/5 " : "",
> 			info.caps.delsys.dvbs2.fec & DVBFE_FEC_2_3 ? "FEC 2/3 " : "",
> 			info.caps.delsys.dvbs2.fec & DVBFE_FEC_3_4 ? "FEC 3/4 " : "",
> 			info.caps.delsys.dvbs2.fec & DVBFE_FEC_4_5 ? "FEC 4/5 " : "",
> 			info.caps.delsys.dvbs2.fec & DVBFE_FEC_5_6 ? "FEC 5/6 " : "",
> 			info.caps.delsys.dvbs2.fec & DVBFE_FEC_6_7 ? "FEC 6/7 " : "",
> 			info.caps.delsys.dvbs2.fec & DVBFE_FEC_7_8 ? "FEC 7/8 " : "",
> 			info.caps.delsys.dvbs2.fec & DVBFE_FEC_8_9 ? "FEC 8/9 " : "",
> 			info.caps.delsys.dvbs2.fec & DVBFE_FEC_AUTO ? "FEC AUTO " : "", "\n");
> 		fprintf(stderr, "[%s] supports Freq min:%d Freq max:%d, Symbol Rate min:%d Symbol Rate max:%d Symbol rate Tolerance:%d\n",
> 			info.name, info.frequency_min, info.frequency_max, info.symbol_rate_min, info.symbol_rate_max, info.symbol_rate_tolerance);
> 
> 		/*	Get current delivery system (optional)	*/
> 		get_system(fd, &delsys);
> 		/*	Set parameters for DVBS2		*/
> 		set_params(fd, &params);
> 		/*	Get parameters for DVBS2		*/
> 		get_params(fd, &params);
> 		break;
> 	case DVBFE_DELSYS_DVBC:
> 		/*	Get DVB-C specific info		*/
> 		info.delivery = DVBFE_DELSYS_DVBC;
> 		get_info(fd, &info);
> 		fprintf(stderr, "[%s] supported Modulation's: ", info.name,
> 			info.caps.delsys.dvbc.modulation & DVBFE_MOD_QAM16   ? "QAM16 "   : "",
> 			info.caps.delsys.dvbc.modulation & DVBFE_MOD_QAM32   ? "QAM32 "   : "",
> 			info.caps.delsys.dvbc.modulation & DVBFE_MOD_QAM64   ? "QAM64 "   : "",
> 			info.caps.delsys.dvbc.modulation & DVBFE_MOD_QAM128  ? "QAM128 "  : "",
> 			info.caps.delsys.dvbc.modulation & DVBFE_MOD_QAM256  ? "QAM256 "  : "",
> 			info.caps.delsys.dvbc.modulation & DVBFE_MOD_QAM512  ? "QAM512 "  : "",
> 			info.caps.delsys.dvbc.modulation & DVBFE_MOD_QAM1024 ? "QAM1024 " : "",
> 			info.caps.delsys.dvbc.modulation & DVBFE_MOD_QAMAUTO ? "QAMAUTO " : "", "\n");
> 		fprintf(stderr, "[%s] supports Freq min:%d Freq max:%d, Symbol Rate min:%d Symbol Rate max:%d Symbol rate Tolerance:%d\n",
> 			info.name, info.frequency_min, info.frequency_max, info.symbol_rate_min, info.symbol_rate_max, info.symbol_rate_tolerance);
> 
> 		/*	Get current delivery system (optional)	*/
> 		get_system(fd, &delsys);
> 		/*	Set parameters for DVB-C		*/
> 		set_params(fd, &params);
> 		/*	Get parameters for DVB-C		*/
> 		get_params(fd, &params);
> 		break;
> 	case DVBFE_DELSYS_DVBT:
> 		/*	Get DVB-T specific info		*/
> 		info.delivery = DVBFE_DELSYS_DVBT;
> 		get_info(fd, &info);
> 		fprintf(stderr, "[%s] supported Modulations: ", info.name,
> 			info.caps.delsys.dvbt.modulation & DVBFE_MOD_OFDM  ? "OFDM "  : "",
> 			info.caps.delsys.dvbt.modulation & DVBFE_MOD_COFDM ? "COFDM " : "", "\n");
> 		fprintf(stderr, "[%s] supported Transmission modes: ", info.name,
> 			info.caps.delsys.dvbt.transmission_mode & DVBFE_TRANSMISSION_MODE_2K ? "2k " : "",
> 			info.caps.delsys.dvbt.transmission_mode & DVBFE_TRANSMISSION_MODE_4K ? "4k " : "",
> 			info.caps.delsys.dvbt.transmission_mode & DVBFE_TRANSMISSION_MODE_8K ? "8k " : "",
> 			info.caps.delsys.dvbt.transmission_mode & DVBFE_TRANSMISSION_MODE_AUTO ? "AUTO " : "", "\n");
> 		fprintf(stderr, "[%s] supported Guard intervals: ", info.name,
> 			info.caps.delsys.dvbt.guard_interval & DVBFE_GUARD_INTERVAL_1_32 ? "1/32 " : "",
> 			info.caps.delsys.dvbt.guard_interval & DVBFE_GUARD_INTERVAL_1_16 ? "1/16 " : "",
> 			info.caps.delsys.dvbt.guard_interval & DVBFE_GUARD_INTERVAL_1_8 ? "1/8 " : "",
> 			info.caps.delsys.dvbt.guard_interval & DVBFE_GUARD_INTERVAL_1_4 ? "AUTO " : "", "\n");
> 		fprintf(stderr, "[%s] supported hierarchy: ", info.name,
> 			info.caps.delsys.dvbt.hierarchy & DVBFE_HIERARCHY_OFF ? "OFF " : "",
> 			info.caps.delsys.dvbt.hierarchy & DVBFE_HIERARCHY_ON ? "ON " : "",
> 			info.caps.delsys.dvbt.hierarchy & DVBFE_HIERARCHY_AUTO ? "AUTO " : "", "\n");
> 		fprintf(stderr, "[%s] supported bandwidths: ", info.name,
> 			info.caps.delsys.dvbt.bandwidth & DVBFE_BANDWIDTH_8_MHZ ? "8 MHZ " : "",
> 			info.caps.delsys.dvbt.bandwidth & DVBFE_BANDWIDTH_7_MHZ ? "7 MHZ " : "",
> 			info.caps.delsys.dvbt.bandwidth & DVBFE_BANDWIDTH_6_MHZ ? "6 MHZ " : "",
> 			info.caps.delsys.dvbt.bandwidth & DVBFE_BANDWIDTH_5_MHZ ? "5 MHZ " : "",
> 			info.caps.delsys.dvbt.bandwidth & DVBFE_BANDWIDTH_AUTO ? "AUTO " : "", "\n");
> 		fprintf(stderr, "[%s] supports Freq min:%d Freq max:%d, Symbol Rate min:%d Symbol Rate max:%d Symbol rate Tolerance:%d\n",
> 			info.name, info.frequency_min, info.frequency_max, info.symbol_rate_min, info.symbol_rate_max, info.symbol_rate_tolerance);
> 
> 		/*	Get current delivery system (optional)	*/
> 		get_system(fd, &delsys);
> 		/*	Set parameters for DVB-T		*/
> 		set_params(fd, &params);
> 		/*	Get parameters for DVB-T		*/
> 		get_params(fd, &params);
> 		break;
> 	case DVBFE_DELSYS_DVBH:
> 		/*	Get DVB-T specific info		*/
> 		info.delivery = DVBFE_DELSYS_DVBH;
> 		get_info(fd, &info);
> 		fprintf(stderr, "[%s] supported Modulations: ", info.name,
> 			info.caps.delsys.dvbh.modulation & DVBFE_MOD_OFDM  ? "OFDM "  : "",
> 			info.caps.delsys.dvbh.modulation & DVBFE_MOD_COFDM ? "COFDM " : "", "\n");
> 		fprintf(stderr, "[%s] supported Transmision modes: ", info.name,
> 			info.caps.delsys.dvbh.transmission_mode & DVBFE_TRANSMISSION_MODE_2K ? "2k " : "",
> 			info.caps.delsys.dvbh.transmission_mode & DVBFE_TRANSMISSION_MODE_4K ? "4k " : "",
> 			info.caps.delsys.dvbh.transmission_mode & DVBFE_TRANSMISSION_MODE_8K ? "8k " : "",
> 			info.caps.delsys.dvbh.transmission_mode & DVBFE_TRANSMISSION_MODE_AUTO ? "AUTO " : "", "\n");
> 		fprintf(stderr, "[%s] supported Guard intervals: ", info.name,
> 			info.caps.delsys.dvbh.guard_interval & DVBFE_GUARD_INTERVAL_1_32 ? "1/32 " : "",
> 			info.caps.delsys.dvbh.guard_interval & DVBFE_GUARD_INTERVAL_1_16 ? "1/16 " : "",
> 			info.caps.delsys.dvbh.guard_interval & DVBFE_GUARD_INTERVAL_1_8 ? "1/8 " : "",
> 			info.caps.delsys.dvbh.guard_interval & DVBFE_GUARD_INTERVAL_1_4 ? "AUTO " : "", "\n");
> 		fprintf(stderr, "[%s] supported hierarchy: ", info.name,
> 			info.caps.delsys.dvbh.hierarchy & DVBFE_HIERARCHY_OFF ? "OFF " : "",
> 			info.caps.delsys.dvbh.hierarchy & DVBFE_HIERARCHY_ON ? "ON " : "",
> 			info.caps.delsys.dvbh.hierarchy & DVBFE_HIERARCHY_AUTO ? "AUTO " : "", "\n");
> 		fprintf(stderr, "[%s] supported bandwidths: ", info.name,
> 			info.caps.delsys.dvbh.bandwidth & DVBFE_BANDWIDTH_8_MHZ ? "8 MHZ " : "",
> 			info.caps.delsys.dvbh.bandwidth & DVBFE_BANDWIDTH_7_MHZ ? "7 MHZ " : "",
> 			info.caps.delsys.dvbh.bandwidth & DVBFE_BANDWIDTH_6_MHZ ? "6 MHZ " : "",
> 			info.caps.delsys.dvbh.bandwidth & DVBFE_BANDWIDTH_5_MHZ ? "5 MHZ " : "",
> 			info.caps.delsys.dvbh.bandwidth & DVBFE_BANDWIDTH_AUTO ? "AUTO " : "", "\n");
> 		fprintf(stderr, "[%s] supports Freq min:%d Freq max:%d, Symbol Rate min:%d Symbol Rate max:%d Symbol rate Tolerance:%d\n",
> 			info.name, info.frequency_min, info.frequency_max, info.symbol_rate_min, info.symbol_rate_max, info.symbol_rate_tolerance);
> 
> 		/*	Get current delivery system (optional)	*/
> 		get_system(fd, &delsys);
> 		/*	Set parameters for DVB-H		*/
> 		set_params(fd, &params);
> 		/*	Get parameters for DVB-H		*/
> 		get_params(fd, &params);
> 		break;
> 	case DVBFE_DELSYS_ATSC:
> 		info.delivery = DVBFE_DELSYS_ATSC;
> 		get_info(fd, &info);
> 		fprintf(stderr, "[%s] supported Modulations: ", info.name,
> 			info.caps.delsys.atsc.modulation & DVBFE_MOD_VSB8   ? "VSB8 "   : "",
> 			info.caps.delsys.atsc.modulation & DVBFE_MOD_VSB16  ? "VSB16 "  : "",
> 			info.caps.delsys.atsc.modulation & DVBFE_MOD_QAM16  ? "QAM16 "  : "",
> 			info.caps.delsys.atsc.modulation & DVBFE_MOD_QAM32  ? "QAM32 "  : "",
> 			info.caps.delsys.atsc.modulation & DVBFE_MOD_QAM64  ? "QAM64 "  : "",
> 			info.caps.delsys.atsc.modulation & DVBFE_MOD_QAM128 ? "QAM128 " : "",
> 			info.caps.delsys.atsc.modulation & DVBFE_MOD_QAM256 ? "QAM256 " : "", "\n");
> 		fprintf(stderr, "[%s] supports Freq min:%d Freq max:%d, Symbol Rate min:%d Symbol Rate max:%d Symbol rate Tolerance:%d\n",
> 			info.name, info.frequency_min, info.frequency_max, info.symbol_rate_min, info.symbol_rate_max, info.symbol_rate_tolerance);
> 
> 		/*	Get current delivery system (optional)	*/
> 		get_system(fd, &delsys);
> 		/*	Set parameters for DVB-H		*/
> 		set_params(fd, &params);
> 		/*	Get parameters for DVB-H		*/
> 		get_params(fd, &params);
> 		break;
> 	default:
> 		break;
> 	}
> 	close(fd);
> 
> 	return 0;
> }




More information about the linux-dvb mailing list