linuxdvb: fix backwards compatibility

This commit is contained in:
Adam Sutton 2013-12-04 21:14:16 +00:00
parent e1443a4cc3
commit 7f9c4cc75e
5 changed files with 106 additions and 33 deletions

View file

@ -79,13 +79,13 @@ dvb_servicetype_lookup ( int t )
static const fe_code_rate_t fec_tab [16] = {
FEC_AUTO, FEC_1_2, FEC_2_3, FEC_3_4,
FEC_5_6, FEC_7_8, FEC_8_9,
#if DVB_API_VERSION >= 5
#if DVB_VER_ATLEAST(5,0)
FEC_3_5,
#else
FEC_NONE,
#endif
FEC_4_5,
#if DVB_API_VERSION >= 5
#if DVB_VER_ATLEAST(5,0)
FEC_9_10,
#else
FEC_NONE,
@ -125,7 +125,9 @@ dvb_desc_sat_del
}
memset(&dmc, 0, sizeof(dmc));
#if DVB_VER_ATLEAST(5,0)
dmc.dmc_fe_pilot = PILOT_AUTO;
#endif
dmc.dmc_fe_params.inversion = INVERSION_AUTO;
dmc.dmc_fe_params.frequency = frequency;
dmc.dmc_fe_orbital_pos = bcdtoint(ptr[4]) * 100 + bcdtoint(ptr[5]);
@ -135,9 +137,15 @@ dvb_desc_sat_del
dmc.dmc_fe_params.u.qpsk.symbol_rate = symrate * 100;
dmc.dmc_fe_params.u.qpsk.fec_inner = fec_tab[ptr[10] & 0x0f];
#if DVB_API_VERSION >= 5
#if DVB_VER_ATLEAST(5,0)
static int mtab[4] = {
0, QPSK, PSK_8, QAM_16
0, QPSK,
#if DVB_VER_ATLEAST(5,3)
PSK_8,
#else
0,
#endif
QAM_16
};
static int rtab[4] = {
ROLLOFF_35, ROLLOFF_25, ROLLOFF_20, ROLLOFF_AUTO
@ -147,7 +155,7 @@ dvb_desc_sat_del
dmc.dmc_fe_rolloff = rtab[(ptr[6] >> 3) & 0x3];
if (dmc.dmc_fe_delsys == SYS_DVBS &&
dmc.dmc_fe_rolloff != ROLLOFF_35) {
tvhlog(LOG_WARNING, "nit", "dvb-s rolloff error");
tvhwarn("nit", "dvb-s rolloff error");
return NULL;
}
#endif
@ -155,7 +163,7 @@ dvb_desc_sat_del
/* Debug */
const char *pol = dvb_pol2str(dmc.dmc_fe_polarisation);
tvhdebug("nit", " dvb-s%c pos %d%c freq %d %c sym %d fec %s"
#if DVB_API_VERSION >= 5
#if DVB_VER_ATLEAST(5,0)
" mod %s roff %s"
#endif
,
@ -164,9 +172,9 @@ dvb_desc_sat_del
dmc.dmc_fe_params.frequency,
pol ? pol[0] : 'X',
symrate,
dvb_fec2str(dmc.dmc_fe_params.u.qpsk.fec_inner),
#if DVB_API_VERSION >= 5
dvb_qam2str(dmc.dmc_fe_modulation),
dvb_fec2str(dmc.dmc_fe_params.u.qpsk.fec_inner)
#if DVB_VER_ATLEAST(5,0)
, dvb_qam2str(dmc.dmc_fe_modulation),
dvb_rolloff2str(dmc.dmc_fe_rolloff)
#endif
);
@ -210,7 +218,9 @@ dvb_desc_cable_del
}
memset(&dmc, 0, sizeof(dmc));
#if DVB_VER_ATLEAST(5,0)
dmc.dmc_fe_delsys = SYS_DVBC_ANNEX_AC;
#endif
dmc.dmc_fe_params.inversion = INVERSION_AUTO;
dmc.dmc_fe_params.frequency = frequency * 100;
@ -253,7 +263,7 @@ dvb_desc_terr_del
static const fe_transmit_mode_t ttab [4] = {
TRANSMISSION_MODE_2K,
TRANSMISSION_MODE_8K,
#if DVB_API_VERSION >= 5
#if DVB_VER_ATLEAST(5,1)
TRANSMISSION_MODE_4K,
#else
TRANSMISSION_MODE_AUTO,
@ -279,7 +289,9 @@ dvb_desc_terr_del
}
memset(&dmc, 0, sizeof(dmc));
#if DVB_VER_ATLEAST(5,0)
dmc.dmc_fe_delsys = SYS_DVBT;
#endif
dmc.dmc_fe_params.inversion = INVERSION_AUTO;
dmc.dmc_fe_params.frequency = frequency * 10;

View file

@ -384,7 +384,7 @@ const char *dvb_##p##2str (int p) { return val2str(p, p##tab); }\
int dvb_str2##p (const char *p) { return str2val(p, p##tab); }
const static struct strtab rollofftab[] = {
#if DVB_API_VERSION >= 5
#if DVB_VER_ATLEAST(5,0)
{ "35", ROLLOFF_35 },
{ "20", ROLLOFF_20 },
{ "25", ROLLOFF_25 },
@ -394,12 +394,11 @@ const static struct strtab rollofftab[] = {
dvb_str2val(rolloff);
const static struct strtab delsystab[] = {
#if DVB_API_VERSION >= 5
#if DVB_VER_ATLEAST(5,0)
{ "UNDEFINED", SYS_UNDEFINED },
{ "DVBC_ANNEX_AC", SYS_DVBC_ANNEX_AC },
{ "DVBC_ANNEX_B", SYS_DVBC_ANNEX_B },
{ "DVBT", SYS_DVBT },
{ "DSS", SYS_DSS },
{ "DVBS", SYS_DVBS },
{ "DVBS2", SYS_DVBS2 },
{ "DVBH", SYS_DVBH },
@ -411,6 +410,11 @@ const static struct strtab delsystab[] = {
{ "DMBTH", SYS_DMBTH },
{ "CMMB", SYS_CMMB },
{ "DAB", SYS_DAB },
#endif
#if DVB_VER_ATLEAST(5,1)
{ "DSS", SYS_DSS },
#endif
#if DVB_VER_ATLEAST(5,4)
{ "DVBT2", SYS_DVBT2 },
{ "TURBO", SYS_TURBO }
#endif
@ -428,7 +432,7 @@ const static struct strtab fectab[] = {
{ "7/8", FEC_7_8 },
{ "8/9", FEC_8_9 },
{ "AUTO", FEC_AUTO },
#if DVB_API_VERSION >= 5
#if DVB_VER_ATLEAST(5,0)
{ "3/5", FEC_3_5 },
{ "9/10", FEC_9_10 }
#endif
@ -445,11 +449,13 @@ const static struct strtab qamtab[] = {
{ "AUTO", QAM_AUTO },
{ "8VSB", VSB_8 },
{ "16VSB", VSB_16 },
#if DVB_API_VERSION >= 5
#if DVB_VER_ATLEAST(5,0)
{ "DQPSK", DQPSK },
#endif
#if DVB_VER_ATLEAST(5,1)
{ "8PSK", PSK_8 },
{ "16APSK", APSK_16 },
{ "32APSK", APSK_32 },
{ "DQPSK", DQPSK }
#endif
};
dvb_str2val(qam);
@ -459,7 +465,7 @@ const static struct strtab bwtab[] = {
{ "7MHz", BANDWIDTH_7_MHZ },
{ "6MHz", BANDWIDTH_6_MHZ },
{ "AUTO", BANDWIDTH_AUTO },
#if DVB_API_VERSION >= 5
#if DVB_VER_ATLEAST(5,3)
{ "5MHz", BANDWIDTH_5_MHZ },
{ "10MHz", BANDWIDTH_10_MHZ },
{ "1712kHz", BANDWIDTH_1_712_MHZ},
@ -471,7 +477,10 @@ const static struct strtab modetab[] = {
{ "2k", TRANSMISSION_MODE_2K },
{ "8k", TRANSMISSION_MODE_8K },
{ "AUTO", TRANSMISSION_MODE_AUTO },
#if DVB_API_VERSION >= 5
#if DVB_VER_ATLEAST(5,1)
{ "4k", TRANSMISSION_MODE_4K },
#endif
#if DVB_VER_ATLEAST(5,3)
{ "1k", TRANSMISSION_MODE_1K },
{ "2k", TRANSMISSION_MODE_16K },
{ "32k", TRANSMISSION_MODE_32K },
@ -485,7 +494,7 @@ const static struct strtab guardtab[] = {
{ "1/8", GUARD_INTERVAL_1_8 },
{ "1/4", GUARD_INTERVAL_1_4 },
{ "AUTO", GUARD_INTERVAL_AUTO },
#if DVB_API_VERSION >= 5
#if DVB_VER_ATLEAST(5,3)
{ "1/128", GUARD_INTERVAL_1_128 },
{ "19/128", GUARD_INTERVAL_19_128 },
{ "19/256", GUARD_INTERVAL_19_256},
@ -519,9 +528,11 @@ const static struct strtab typetab[] = {
dvb_str2val(type);
const static struct strtab pilottab[] = {
#if DVB_VER_ATLEAST(5,0)
{"AUTO", PILOT_AUTO},
{"ON", PILOT_ON},
{"OFF", PILOT_OFF}
#endif
};
dvb_str2val(pilot);
#undef dvb_str2val
@ -616,7 +627,7 @@ dvb_mux_conf_load_dvbs ( dvb_mux_conf_t *dmc, htsmsg_t *m )
return "Invalid polarisation";
dmc->dmc_fe_polarisation = r;
#if DVB_API_VERSION >= 5
#if DVB_VER_ATLEAST(5,0)
s = htsmsg_get_str(m, "modulation");
if(s == NULL || (r = dvb_str2qam(s)) < 0) {
r = QPSK;
@ -651,15 +662,17 @@ dvb_mux_conf_load_atsc ( dvb_mux_conf_t *dmc, htsmsg_t *m )
const char *
dvb_mux_conf_load ( fe_type_t type, dvb_mux_conf_t *dmc, htsmsg_t *m )
{
#if DVB_VER_ATLEAST(5,0)
int r;
uint32_t u32;
const char *str;
#endif
uint32_t u32;
memset(dmc, 0, sizeof(dvb_mux_conf_t));
dmc->dmc_fe_params.inversion = INVERSION_AUTO;
/* Delivery system */
#if DVB_API_VERSION >= 5
#if DVB_VER_ATLEAST(5,0)
str = htsmsg_get_str(m, "delsys");
if (!str || (r = dvb_str2delsys(str)) < 0) {
if (type == FE_OFDM) r = SYS_DVBT;
@ -670,8 +683,8 @@ dvb_mux_conf_load ( fe_type_t type, dvb_mux_conf_t *dmc, htsmsg_t *m )
return "Invalid FE type";
tvhlog(LOG_INFO, "dvb", "no delsys, using default %s", dvb_delsys2str(r));
}
#endif
dmc->dmc_fe_delsys = r;
#endif
/* Frequency */
if (htsmsg_get_u32(m, "frequency", &u32))
@ -723,7 +736,7 @@ dvb_mux_conf_save_dvbs ( dvb_mux_conf_t *dmc, htsmsg_t *m )
htsmsg_add_u32(m, "symbol_rate", qpsk->symbol_rate);
htsmsg_add_str(m, "fec", dvb_fec2str(qpsk->fec_inner));
htsmsg_add_str(m, "polarisation", dvb_pol2str(dmc->dmc_fe_polarisation));
#if DVB_API_VERSION >= 5
#if DVB_VER_ATLEAST(5,0)
htsmsg_add_str(m, "modulation", dvb_qam2str(dmc->dmc_fe_modulation));
htsmsg_add_str(m, "rolloff", dvb_rolloff2str(dmc->dmc_fe_rolloff));
#endif
@ -740,7 +753,7 @@ void
dvb_mux_conf_save ( fe_type_t type, dvb_mux_conf_t *dmc, htsmsg_t *m )
{
htsmsg_add_u32(m, "frequency", dmc->dmc_fe_params.frequency);
#if DVB_API_VERSION >= 5
#if DVB_VER_ATLEAST(5,0)
htsmsg_add_str(m, "delsys", dvb_delsys2str(dmc->dmc_fe_delsys));
#endif
if (type == FE_OFDM) dvb_mux_conf_save_dvbt(dmc, m);
@ -753,18 +766,20 @@ int
dvb_bandwidth ( fe_bandwidth_t bw )
{
switch (bw) {
#if DVB_VER_ATLEAST(5,3)
case BANDWIDTH_10_MHZ:
return 10000000;
case BANDWIDTH_5_MHZ:
return 5000000;
case BANDWIDTH_1_712_MHZ:
return 1712000;
#endif
case BANDWIDTH_8_MHZ:
return 8000000;
case BANDWIDTH_7_MHZ:
return 7000000;
case BANDWIDTH_6_MHZ:
return 6000000;
case BANDWIDTH_5_MHZ:
return 5000000;
case BANDWIDTH_1_712_MHZ:
return 1712000;
default:
return 0;
}

View file

@ -709,12 +709,16 @@ linuxdvb_frontend_tune0
/* DVB-T */
if (lfe->lfe_info.type == FE_OFDM) {
S2CMD(DTV_BANDWIDTH_HZ, dvb_bandwidth(p->u.ofdm.bandwidth));
#if DVB_VER_ATLEAST(5,1)
S2CMD(DTV_CODE_RATE_HP, p->u.ofdm.code_rate_HP);
S2CMD(DTV_CODE_RATE_LP, p->u.ofdm.code_rate_LP);
#endif
S2CMD(DTV_MODULATION, p->u.ofdm.constellation);
#if DVB_VER_ATLEAST(5,1)
S2CMD(DTV_TRANSMISSION_MODE, p->u.ofdm.transmission_mode);
S2CMD(DTV_GUARD_INTERVAL, p->u.ofdm.guard_interval);
S2CMD(DTV_HIERARCHY, p->u.ofdm.hierarchy_information);
#endif
/* DVB-C */
} else if (lfe->lfe_info.type == FE_QAM) {

View file

@ -84,17 +84,27 @@ static const void *
linuxdvb_mux_class_delsys_get (void *o)
{
static const char *s;
#if DVB_VER_ATLEAST(5,0)
linuxdvb_mux_t *lm = o;
s = dvb_delsys2str(lm->lm_tuning.dmc_fe_delsys);
#else
s = NULL;
#endif
return &s;
}
static int
linuxdvb_mux_class_delsys_set (void *o, const void *v)
{
#if DVB_VER_ATLEAST(5,0)
const char *s = v;
int delsys = dvb_str2delsys(s);
linuxdvb_mux_t *lm = o;
lm->lm_tuning.dmc_fe_delsys = dvb_str2delsys(s);
return 1;
if (delsys != lm->lm_tuning.dmc_fe_delsys) {
lm->lm_tuning.dmc_fe_delsys = dvb_str2delsys(s);
return 1;
}
#endif
return 0;
}
const idclass_t linuxdvb_mux_class =
@ -165,9 +175,13 @@ static htsmsg_t *
linuxdvb_mux_dvbt_class_delsys_enum (void *o)
{
htsmsg_t *list = htsmsg_create_list();
#if DVB_VER_ATLEAST(5,0)
htsmsg_add_str(list, NULL, dvb_delsys2str(SYS_DVBT));
#endif
#if DVB_VER_ATLEAST(5,4)
htsmsg_add_str(list, NULL, dvb_delsys2str(SYS_DVBT2));
htsmsg_add_str(list, NULL, dvb_delsys2str(SYS_TURBO));
#endif
return list;
}
@ -233,8 +247,10 @@ static htsmsg_t *
linuxdvb_mux_dvbc_class_delsys_enum (void *o)
{
htsmsg_t *list = htsmsg_create_list();
#if DVB_VER_ATLEAST(5,0)
htsmsg_add_str(list, NULL, dvb_delsys2str(SYS_DVBC_ANNEX_AC));
htsmsg_add_str(list, NULL, dvb_delsys2str(SYS_DVBC_ANNEX_B));
#endif
return list;
}
@ -309,16 +325,24 @@ static const void *
linuxdvb_mux_dvbs_class_modulation_get ( void *o )
{
static const char *s;
#if DVB_VER_ATLEAST(5,0)
linuxdvb_mux_t *lm = o;
s = dvb_qam2str(lm->lm_tuning.dmc_fe_modulation);
#endif
return &s;
}
static int
linuxdvb_mux_dvbs_class_modulation_set (void *o, const void *s)
{
#if DVB_VER_ATLEAST(5,0)
int mod = dvb_str2qam(s);
linuxdvb_mux_t *lm = o;
lm->lm_tuning.dmc_fe_modulation = dvb_str2qam(s);
return 1;
if (mod != lm->lm_tuning.dmc_fe_modulation) {
lm->lm_tuning.dmc_fe_modulation = mod;
return 1;
}
#endif
return 0;
}
static htsmsg_t *
linuxdvb_mux_dvbs_class_modulation_list ( void *o )
@ -396,8 +420,10 @@ static htsmsg_t *
linuxdvb_mux_dvbs_class_delsys_enum (void *o)
{
htsmsg_t *list = htsmsg_create_list();
#if DVB_VER_ATLEAST(5,0)
htsmsg_add_str(list, NULL, dvb_delsys2str(SYS_DVBS));
htsmsg_add_str(list, NULL, dvb_delsys2str(SYS_DVBS2));
#endif
return list;
}
@ -509,8 +535,10 @@ static htsmsg_t *
linuxdvb_mux_atsc_class_delsys_enum (void *o)
{
htsmsg_t *list = htsmsg_create_list();
#if DVB_VER_ATLEAST(5,0)
htsmsg_add_str(list, NULL, dvb_delsys2str(SYS_ATSC));
htsmsg_add_str(list, NULL, dvb_delsys2str(SYS_ATSCMH));
#endif
return list;
}
@ -629,7 +657,9 @@ linuxdvb_mux_create0
/* Defaults */
lm->lm_tuning.dmc_fe_params.inversion = INVERSION_AUTO;
#if DVB_VER_ATLEAST(5,0)
lm->lm_tuning.dmc_fe_pilot = PILOT_AUTO;
#endif
/* No config */
if (!conf) return lm;

View file

@ -116,7 +116,9 @@ scanfile_load_atsc ( dvb_mux_conf_t *mux, const char *line )
r = sscanf(line, "%u %s", &p->frequency, qam);
if (r != 2) return 1;
#if DVB_VER_ATLEAST(5,0)
mux->dmc_fe_delsys = SYS_ATSC;
#endif
if ((p->u.vsb.modulation = dvb_str2qam(qam)) == -1) return 1;
return 0;
@ -134,12 +136,16 @@ scanfile_load_dvbt ( dvb_mux_conf_t *mux, const char *line )
r = sscanf(line+1, "%u %u %u %10s %10s %10s %10s %10s %10s %10s",
&i, &i, &p->frequency, bw, fec, fec2, qam, mode, guard, hier);
if(r != 10) return 1;
#if DVB_VER_ATLEAST(5,4)
mux->dmc_fe_delsys = SYS_DVBT2;
#endif
} else {
r = sscanf(line, "%u %10s %10s %10s %10s %10s %10s %10s",
&p->frequency, bw, fec, fec2, qam, mode, guard, hier);
if(r != 8) return 1;
#if DVB_VER_ATLEAST(5,0)
mux->dmc_fe_delsys = SYS_DVBT;
#endif
}
if ((p->u.ofdm.bandwidth = dvb_str2bw(bw)) == -1) return 1;
@ -172,6 +178,7 @@ scanfile_load_dvbs ( dvb_mux_conf_t *mux, const char *line )
if ((mux->dmc_fe_polarisation = dvb_str2pol(pol)) == -1) return 1;
if ((p->u.qpsk.fec_inner = dvb_str2fec(fec)) == -1) return 1;
#if DVB_VER_ATLEAST(5,0)
if (v2) {
mux->dmc_fe_delsys = SYS_DVBS2;
if ((mux->dmc_fe_rolloff = dvb_str2rolloff(rolloff)) == -1) return 1;
@ -181,6 +188,9 @@ scanfile_load_dvbs ( dvb_mux_conf_t *mux, const char *line )
mux->dmc_fe_rolloff = ROLLOFF_35;
mux->dmc_fe_modulation = QPSK;
}
#else
if (v2) return 1;
#endif
return 0;
}
@ -196,7 +206,9 @@ scanfile_load_dvbc ( dvb_mux_conf_t *mux, const char *line )
&p->frequency, &p->u.qam.symbol_rate, fec, qam);
if(r != 4) return 1;
#if DVB_VER_ATLEAST(5,0)
mux->dmc_fe_delsys = SYS_DVBC_ANNEX_AC;
#endif
if ((p->u.qam.fec_inner = dvb_str2fec(fec)) == -1) return 1;
if ((p->u.qam.modulation = dvb_str2qam(qam)) == -1) return 1;