From: Jaroslav Kysela Date: Tue, 8 Dec 2015 08:48:20 +0000 (+0100) Subject: ATSC - separate T and C networks X-Git-Tag: v4.2.1~1346 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=f02851ab9c60bdd326fdba9afee4255b7b07a06c;p=thirdparty%2Ftvheadend.git ATSC - separate T and C networks --- diff --git a/src/api/api_mpegts.c b/src/api/api_mpegts.c index 2e14c235c..2febdadfb 100644 --- a/src/api/api_mpegts.c +++ b/src/api/api_mpegts.c @@ -387,8 +387,10 @@ api_dvb_scanfile_list list = &scanfile_regions_DVBC; else if (!strcasecmp(type, "dvbs")) list = &scanfile_regions_DVBS; - else if (!strcasecmp(type, "atsc")) - list = &scanfile_regions_ATSC; + else if (!strcasecmp(type, "atsc-t")) + list = &scanfile_regions_ATSC_T; + else if (!strcasecmp(type, "atsc-c")) + list = &scanfile_regions_ATSC_C; else return -EINVAL; diff --git a/src/input/mpegts/dvb.h b/src/input/mpegts/dvb.h index a00a8ef43..f17ea7f78 100644 --- a/src/input/mpegts/dvb.h +++ b/src/input/mpegts/dvb.h @@ -378,8 +378,9 @@ typedef enum dvb_fe_type { DVB_TYPE_T = 1, /* terrestrial */ DVB_TYPE_C, /* cable */ DVB_TYPE_S, /* satellite */ - DVB_TYPE_ATSC, /* terrestrial - north america */ - DVB_TYPE_LAST = DVB_TYPE_ATSC + DVB_TYPE_ATSC_T, /* terrestrial - north america */ + DVB_TYPE_ATSC_C, /* cable - north america */ + DVB_TYPE_LAST = DVB_TYPE_ATSC_C } dvb_fe_type_t; typedef enum dvb_fe_spectral_inversion { diff --git a/src/input/mpegts/dvb_support.c b/src/input/mpegts/dvb_support.c index 7b4ba6221..73f81efad 100644 --- a/src/input/mpegts/dvb_support.c +++ b/src/input/mpegts/dvb_support.c @@ -598,22 +598,35 @@ int dvb_str2rolloff(const char *p) const static struct strtab delsystab[] = { { "NONE", DVB_SYS_NONE }, + { "DVB-C", DVB_SYS_DVBC_ANNEX_A }, { "DVBC/ANNEX_A", DVB_SYS_DVBC_ANNEX_A }, { "DVBC_ANNEX_A", DVB_SYS_DVBC_ANNEX_A }, + { "ATSC-C", DVB_SYS_DVBC_ANNEX_B }, { "DVBC/ANNEX_B", DVB_SYS_DVBC_ANNEX_B }, { "DVBC_ANNEX_B", DVB_SYS_DVBC_ANNEX_B }, + { "DVB-C/ANNEX-C",DVB_SYS_DVBC_ANNEX_C }, { "DVBC/ANNEX_C", DVB_SYS_DVBC_ANNEX_C }, { "DVBC_ANNEX_C", DVB_SYS_DVBC_ANNEX_C }, { "DVBC_ANNEX_AC",DVB_SYS_DVBC_ANNEX_A }, /* for compatibility */ + { "DVB-T", DVB_SYS_DVBT }, { "DVBT", DVB_SYS_DVBT }, + { "DVB-T2", DVB_SYS_DVBT2 }, { "DVBT2", DVB_SYS_DVBT2 }, + { "DVB-S", DVB_SYS_DVBS }, { "DVBS", DVB_SYS_DVBS }, + { "DVB-S2", DVB_SYS_DVBS2 }, { "DVBS2", DVB_SYS_DVBS2 }, + { "DVB-H", DVB_SYS_DVBH }, { "DVBH", DVB_SYS_DVBH }, + { "ISDB-T", DVB_SYS_ISDBT }, { "ISDBT", DVB_SYS_ISDBT }, + { "ISDB-S", DVB_SYS_ISDBS }, { "ISDBS", DVB_SYS_ISDBS }, + { "ISDB-C", DVB_SYS_ISDBC }, { "ISDBC", DVB_SYS_ISDBC }, + { "ATSC-T", DVB_SYS_ATSC }, { "ATSC", DVB_SYS_ATSC }, + { "ATSCM-H", DVB_SYS_ATSCMH }, { "ATSCMH", DVB_SYS_ATSCMH }, { "DTMB", DVB_SYS_DTMB }, { "DMBTH", DVB_SYS_DTMB }, /* for compatibility */ @@ -629,7 +642,6 @@ dvb_delsys2type ( dvb_fe_delivery_system_t delsys ) { switch (delsys) { case DVB_SYS_DVBC_ANNEX_A: - case DVB_SYS_DVBC_ANNEX_B: case DVB_SYS_DVBC_ANNEX_C: case DVB_SYS_ISDBC: return DVB_TYPE_C; @@ -644,7 +656,9 @@ dvb_delsys2type ( dvb_fe_delivery_system_t delsys ) return DVB_TYPE_S; case DVB_SYS_ATSC: case DVB_SYS_ATSCMH: - return DVB_TYPE_ATSC; + return DVB_TYPE_ATSC_T; + case DVB_SYS_DVBC_ANNEX_B: + return DVB_TYPE_ATSC_C; default: return DVB_TYPE_NONE; } @@ -841,10 +855,11 @@ const static struct strtab poltab[] = { dvb_str2val(pol); const static struct strtab typetab[] = { - {"DVB-T", DVB_TYPE_T}, - {"DVB-C", DVB_TYPE_C}, - {"DVB-S", DVB_TYPE_S}, - {"ATSC", DVB_TYPE_ATSC}, + {"DVB-T", DVB_TYPE_T}, + {"DVB-C", DVB_TYPE_C}, + {"DVB-S", DVB_TYPE_S}, + {"ATSC-T", DVB_TYPE_ATSC_T}, + {"ATSC-C", DVB_TYPE_ATSC_C} }; dvb_str2val(type); @@ -943,7 +958,7 @@ dvb_mux_conf_str_dvbs ( dvb_mux_conf_t *dmc, char *buf, size_t bufsize ) } static int -dvb_mux_conf_str_atsc ( dvb_mux_conf_t *dmc, char *buf, size_t bufsize ) +dvb_mux_conf_str_atsc_t ( dvb_mux_conf_t *dmc, char *buf, size_t bufsize ) { return snprintf(buf, bufsize, @@ -963,11 +978,12 @@ dvb_mux_conf_str ( dvb_mux_conf_t *dmc, char *buf, size_t bufsize ) case DVB_TYPE_T: return dvb_mux_conf_str_dvbt(dmc, buf, bufsize); case DVB_TYPE_C: + case DVB_TYPE_ATSC_C: return dvb_mux_conf_str_dvbc(dmc, buf, bufsize); case DVB_TYPE_S: return dvb_mux_conf_str_dvbs(dmc, buf, bufsize); - case DVB_TYPE_ATSC: - return dvb_mux_conf_str_atsc(dmc, buf, bufsize); + case DVB_TYPE_ATSC_T: + return dvb_mux_conf_str_atsc_t(dmc, buf, bufsize); default: return snprintf(buf, bufsize, "UNKNOWN MUX CONFIG"); diff --git a/src/input/mpegts/linuxdvb/linuxdvb_adapter.c b/src/input/mpegts/linuxdvb/linuxdvb_adapter.c index ff17bf1cd..3e12ac035 100644 --- a/src/input/mpegts/linuxdvb/linuxdvb_adapter.c +++ b/src/input/mpegts/linuxdvb/linuxdvb_adapter.c @@ -234,7 +234,7 @@ linuxdvb_get_type(int linux_type) case FE_OFDM: return DVB_TYPE_T; case FE_ATSC: - return DVB_TYPE_ATSC; + return DVB_TYPE_ATSC_T; default: return DVB_TYPE_NONE; } @@ -378,10 +378,8 @@ linuxdvb_adapter_add ( const char *path ) } /* Create frontend */ - linuxdvb_frontend_create(feconf, la, i, fe_path, dmx_path, dvr_path, type, dfi.name); #if DVB_VER_ATLEAST(5,5) memset(fetypes, 0, sizeof(fetypes)); - fetypes[type] = 1; for (j = 0; j < cmd.u.buffer.len; j++) { delsys = cmd.u.buffer.data[j]; @@ -401,6 +399,8 @@ linuxdvb_adapter_add ( const char *path ) type, dfi.name); fetypes[type] = 1; } +#else + linuxdvb_frontend_create(feconf, la, i, fe_path, dmx_path, dvr_path, type, dfi.name); #endif pthread_mutex_unlock(&global_lock); } diff --git a/src/input/mpegts/linuxdvb/linuxdvb_frontend.c b/src/input/mpegts/linuxdvb/linuxdvb_frontend.c index 2b36c6567..21c214979 100644 --- a/src/input/mpegts/linuxdvb/linuxdvb_frontend.c +++ b/src/input/mpegts/linuxdvb/linuxdvb_frontend.c @@ -279,11 +279,21 @@ const idclass_t linuxdvb_frontend_dvbc_class = } }; -const idclass_t linuxdvb_frontend_atsc_class = +const idclass_t linuxdvb_frontend_atsc_t_class = { .ic_super = &linuxdvb_frontend_class, - .ic_class = "linuxdvb_frontend_atsc", - .ic_caption = N_("Linux ATSC frontend"), + .ic_class = "linuxdvb_frontend_atsc_t", + .ic_caption = N_("Linux ATSC-T frontend"), + .ic_properties = (const property_t[]){ + {} + } +}; + +const idclass_t linuxdvb_frontend_atsc_c_class = +{ + .ic_super = &linuxdvb_frontend_class, + .ic_class = "linuxdvb_frontend_atsc_c", + .ic_caption = N_("Linux ATSC-C frontend"), .ic_properties = (const property_t[]){ {} } @@ -1453,6 +1463,7 @@ linuxdvb_frontend_tune0 #undef _OFDM break; case DVB_TYPE_C: + case DVB_TYPE_ATSC_C: p.u.qam.symbol_rate = dmc->u.dmc_fe_qam.symbol_rate; p.u.qam.fec_inner = TRU(qam.fec_inner, fec_tbl, FEC_AUTO); p.u.qam.modulation = TR(modulation, mod_tbl, QAM_AUTO); @@ -1461,7 +1472,7 @@ linuxdvb_frontend_tune0 p.u.qpsk.symbol_rate = dmc->u.dmc_fe_qpsk.symbol_rate; p.u.qpsk.fec_inner = TRU(qpsk.fec_inner, fec_tbl, FEC_AUTO); break; - case DVB_TYPE_ATSC: + case DVB_TYPE_ATSC_T: p.u.vsb.modulation = TR(modulation, mod_tbl, QAM_AUTO); break; default: @@ -1678,8 +1689,10 @@ linuxdvb_frontend_create idc = &linuxdvb_frontend_dvbc_class; else if (type == DVB_TYPE_T) idc = &linuxdvb_frontend_dvbt_class; - else if (type == DVB_TYPE_ATSC) - idc = &linuxdvb_frontend_atsc_class; + else if (type == DVB_TYPE_ATSC_T) + idc = &linuxdvb_frontend_atsc_t_class; + else if (type == DVB_TYPE_ATSC_C) + idc = &linuxdvb_frontend_atsc_c_class; else { tvherror("linuxdvb", "unknown FE type %d", type); return NULL; diff --git a/src/input/mpegts/mpegts_dvb.h b/src/input/mpegts/mpegts_dvb.h index e054552e2..ac37f328b 100644 --- a/src/input/mpegts/mpegts_dvb.h +++ b/src/input/mpegts/mpegts_dvb.h @@ -48,7 +48,8 @@ extern const idclass_t dvb_network_class; extern const idclass_t dvb_network_dvbt_class; extern const idclass_t dvb_network_dvbc_class; extern const idclass_t dvb_network_dvbs_class; -extern const idclass_t dvb_network_atsc_class; +extern const idclass_t dvb_network_atsc_t_class; +extern const idclass_t dvb_network_atsc_c_class; void dvb_network_init ( void ); void dvb_network_done ( void ); @@ -76,7 +77,8 @@ int dvb_network_get_orbital_pos(mpegts_network_t *mn); extern const idclass_t dvb_mux_dvbt_class; extern const idclass_t dvb_mux_dvbc_class; extern const idclass_t dvb_mux_dvbs_class; -extern const idclass_t dvb_mux_atsc_class; +extern const idclass_t dvb_mux_atsc_t_class; +extern const idclass_t dvb_mux_atsc_c_class; dvb_mux_t *dvb_mux_create0 (dvb_network_t *ln, uint16_t onid, uint16_t tsid, diff --git a/src/input/mpegts/mpegts_mux_dvb.c b/src/input/mpegts/mpegts_mux_dvb.c index 3b7e8c94f..c4234d11f 100644 --- a/src/input/mpegts/mpegts_mux_dvb.c +++ b/src/input/mpegts/mpegts_mux_dvb.c @@ -92,9 +92,13 @@ dvb_mux_##c##_class_##l##_enum (void *o, const char *lang)\ {\ static const int t[] = { __VA_ARGS__ };\ int i;\ - htsmsg_t *m = htsmsg_create_list();\ - for (i = 0; i < ARRAY_SIZE(t); i++)\ - htsmsg_add_str(m, NULL, tvh_gettext_lang(lang, dvb_##l##2str(t[i])));\ + htsmsg_t *m = htsmsg_create_list(), *e;\ + for (i = 0; i < ARRAY_SIZE(t); i++) {\ + e = htsmsg_create_map(); \ + htsmsg_add_str(e, "key", dvb_##l##2str(t[i]));\ + htsmsg_add_str(e, "val", tvh_gettext_lang(lang, dvb_##l##2str(t[i])));\ + htsmsg_add_msg(m, NULL, e);\ + }\ return m;\ } #define MUX_PROP_STR(_id, _name, t, l, d)\ @@ -207,7 +211,7 @@ const idclass_t dvb_mux_dvbt_class = .ic_caption = N_("Linux DVB-T multiplex"), .ic_properties = (const property_t[]){ { - MUX_PROP_STR("delsys", N_("Delivery system"), dvbt, delsys, N_("DVB-T")), + MUX_PROP_STR("delsys", N_("Delivery system"), dvbt, delsys, "DVBT"), }, { .type = PT_U32, @@ -263,12 +267,12 @@ dvb_mux_class_X(dvbc, qam, fec_inner, fec, #define dvb_mux_dvbc_class_delsys_get dvb_mux_class_delsys_get #define dvb_mux_dvbc_class_delsys_set dvb_mux_class_delsys_set + static htsmsg_t * dvb_mux_dvbc_class_delsys_enum (void *o, const char *lang) { htsmsg_t *list = htsmsg_create_list(); htsmsg_add_str(list, NULL, dvb_delsys2str(DVB_SYS_DVBC_ANNEX_A)); - htsmsg_add_str(list, NULL, dvb_delsys2str(DVB_SYS_DVBC_ANNEX_B)); htsmsg_add_str(list, NULL, dvb_delsys2str(DVB_SYS_DVBC_ANNEX_C)); return list; } @@ -280,7 +284,7 @@ const idclass_t dvb_mux_dvbc_class = .ic_caption = N_("Linux DVB-C multiplex"), .ic_properties = (const property_t[]){ { - MUX_PROP_STR("delsys", N_("Delivery system"), dvbc, delsys, N_("DVBC_ANNEX_AC")), + MUX_PROP_STR("delsys", N_("Delivery system"), dvbc, delsys, "DVB-C"), }, { .type = PT_U32, @@ -634,11 +638,11 @@ const idclass_t dvb_mux_dvbs_class = } }; -#define dvb_mux_atsc_class_delsys_get dvb_mux_class_delsys_get -#define dvb_mux_atsc_class_delsys_set dvb_mux_class_delsys_set +#define dvb_mux_atsc_t_class_delsys_get dvb_mux_class_delsys_get +#define dvb_mux_atsc_t_class_delsys_set dvb_mux_class_delsys_set static htsmsg_t * -dvb_mux_atsc_class_delsys_enum (void *o, const char *lang) +dvb_mux_atsc_t_class_delsys_enum (void *o, const char *lang) { htsmsg_t *list = htsmsg_create_list(); htsmsg_add_str(list, NULL, dvb_delsys2str(DVB_SYS_ATSC)); @@ -646,17 +650,17 @@ dvb_mux_atsc_class_delsys_enum (void *o, const char *lang) return list; } -dvb_mux_class_R(atsc, modulation, qam, +dvb_mux_class_R(atsc_t, modulation, qam, DVB_MOD_QAM_AUTO, DVB_MOD_QAM_256, DVB_MOD_VSB_8); -const idclass_t dvb_mux_atsc_class = +const idclass_t dvb_mux_atsc_t_class = { .ic_super = &dvb_mux_class, - .ic_class = "dvb_mux_atsc", - .ic_caption = N_("Linux ATSC multiplex"), + .ic_class = "dvb_mux_atsc_t", + .ic_caption = N_("Linux ATSC-T multiplex"), .ic_properties = (const property_t[]){ { - MUX_PROP_STR("delsys", N_("Delivery system"), atsc, delsys, N_("ATSC")), + MUX_PROP_STR("delsys", N_("Delivery system"), atsc_t, delsys, "ATSC-T"), }, { .type = PT_U32, @@ -667,7 +671,52 @@ const idclass_t dvb_mux_atsc_class = .set = dvb_mux_dvbt_class_frequency_set, }, { - MUX_PROP_STR("modulation", N_("Modulation"), atsc, qam, N_("AUTO")) + MUX_PROP_STR("modulation", N_("Modulation"), atsc_t, qam, N_("AUTO")) + }, + {} + } +}; + +#define dvb_mux_atsc_c_class_delsys_get dvb_mux_class_delsys_get +#define dvb_mux_atsc_c_class_delsys_set dvb_mux_class_delsys_set + +static htsmsg_t * +dvb_mux_atsc_c_class_delsys_enum (void *o, const char *lang) +{ + htsmsg_t *list = htsmsg_create_list(); + htsmsg_add_str(list, NULL, dvb_delsys2str(DVB_SYS_DVBC_ANNEX_B)); + return list; +} + +const idclass_t dvb_mux_atsc_c_class = +{ + .ic_super = &dvb_mux_class, + .ic_class = "dvb_mux_atsc_c", + .ic_caption = N_("Linux ATSC-C multiplex"), + .ic_properties = (const property_t[]){ + { + MUX_PROP_STR("delsys", N_("Delivery system"), atsc_c, delsys, "ATSC-C"), + }, + { + .type = PT_U32, + .id = "frequency", + .name = N_("Frequency (Hz)"), + .desc = N_("The frequency of the mux (in Hertz)."), + .off = offsetof(dvb_mux_t, lm_tuning.dmc_fe_freq), + .set = dvb_mux_dvbt_class_frequency_set, + }, + { + .type = PT_U32, + .id = "symbolrate", + .name = N_("Symbol rate (Sym/s)"), + .desc = N_("The symbol rate."), + .off = offsetof(dvb_mux_t, lm_tuning.u.dmc_fe_qam.symbol_rate), + }, + { + MUX_PROP_STR("constellation", N_("Constellation"), dvbc, qam, N_("AUTO")) + }, + { + MUX_PROP_STR("fec", N_("FEC"), dvbc, fec, N_("AUTO")) }, {} } @@ -775,9 +824,12 @@ dvb_mux_create0 } else if (ln->ln_type == DVB_TYPE_T) { idc = &dvb_mux_dvbt_class; delsys = DVB_SYS_DVBT; - } else if (ln->ln_type == DVB_TYPE_ATSC) { - idc = &dvb_mux_atsc_class; + } else if (ln->ln_type == DVB_TYPE_ATSC_T) { + idc = &dvb_mux_atsc_t_class; delsys = DVB_SYS_ATSC; + } else if (ln->ln_type == DVB_TYPE_ATSC_C) { + idc = &dvb_mux_atsc_c_class; + delsys = DVB_SYS_DVBC_ANNEX_B; } else { tvherror("dvb", "unknown FE type %d", ln->ln_type); return NULL; diff --git a/src/input/mpegts/mpegts_network_dvb.c b/src/input/mpegts/mpegts_network_dvb.c index ddeeca834..8c84de42d 100644 --- a/src/input/mpegts/mpegts_network_dvb.c +++ b/src/input/mpegts/mpegts_network_dvb.c @@ -133,9 +133,15 @@ dvb_network_dvbs_class_scanfile_list ( void *o, const char *lang ) return dvb_network_class_scanfile_list(o, lang, "dvbs"); } static htsmsg_t * -dvb_network_atsc_class_scanfile_list ( void *o, const char *lang ) +dvb_network_atsc_t_class_scanfile_list ( void *o, const char *lang ) { - return dvb_network_class_scanfile_list(o, lang, "atsc"); + return dvb_network_class_scanfile_list(o, lang, "atsc-t"); +} + +static htsmsg_t * +dvb_network_atsc_c_class_scanfile_list ( void *o, const char *lang ) +{ + return dvb_network_class_scanfile_list(o, lang, "atsc-c"); } static const void * @@ -271,22 +277,44 @@ const idclass_t dvb_network_dvbs_class = } }; -const idclass_t dvb_network_atsc_class = +const idclass_t dvb_network_atsc_t_class = +{ + .ic_super = &dvb_network_class, + .ic_class = "dvb_network_atsc_t", + .ic_caption = N_("ATSC-T network"), + .ic_properties = (const property_t[]) { + { + .type = PT_STR, + .id = "scanfile", + .name = N_("Pre-defined muxes"), + .desc = N_("Use a pre-defined list of ATSC-T muxes. " + "Note: these lists can sometimes be outdated and " + "may cause scanning to take longer than usual."), + .set = dvb_network_class_scanfile_set, + .get = dvb_network_class_scanfile_get, + .list = dvb_network_atsc_t_class_scanfile_list, + .opts = PO_NOSAVE, + }, + {} + } +}; + +const idclass_t dvb_network_atsc_c_class = { .ic_super = &dvb_network_class, - .ic_class = "dvb_network_atsc", - .ic_caption = N_("ATSC network"), + .ic_class = "dvb_network_atsc_c", + .ic_caption = N_("ATSC-C network"), .ic_properties = (const property_t[]) { { .type = PT_STR, .id = "scanfile", .name = N_("Pre-defined muxes"), - .desc = N_("Use a pre-defined list of ATSC muxes. " + .desc = N_("Use a pre-defined list of ATSC-C muxes. " "Note: these lists can sometimes be outdated and " "may cause scanning to take longer than usual."), .set = dvb_network_class_scanfile_set, .get = dvb_network_class_scanfile_get, - .list = dvb_network_atsc_class_scanfile_list, + .list = dvb_network_atsc_c_class_scanfile_list, .opts = PO_NOSAVE, }, {} @@ -314,12 +342,13 @@ dvb_network_check_symbol_rate( dvb_mux_t *lm, dvb_mux_conf_t *dmc, int deltar ) return dvb_network_check_bandwidth(lm->lm_tuning.u.dmc_fe_ofdm.bandwidth, dmc->u.dmc_fe_ofdm.bandwidth); case DVB_TYPE_C: + case DVB_TYPE_ATSC_C: return deltaU32(lm->lm_tuning.u.dmc_fe_qam.symbol_rate, dmc->u.dmc_fe_qam.symbol_rate) > deltar; case DVB_TYPE_S: return deltaU32(lm->lm_tuning.u.dmc_fe_qpsk.symbol_rate, dmc->u.dmc_fe_qpsk.symbol_rate) > deltar; - case DVB_TYPE_ATSC: + case DVB_TYPE_ATSC_T: return 0; default: return 0; @@ -424,8 +453,10 @@ dvb_network_mux_class return &dvb_mux_dvbc_class; if (idnode_is_instance(&mn->mn_id, &dvb_network_dvbs_class)) return &dvb_mux_dvbs_class; - if (idnode_is_instance(&mn->mn_id, &dvb_network_atsc_class)) - return &dvb_mux_atsc_class; + if (idnode_is_instance(&mn->mn_id, &dvb_network_atsc_t_class)) + return &dvb_mux_atsc_t_class; + if (idnode_is_instance(&mn->mn_id, &dvb_network_atsc_c_class)) + return &dvb_mux_atsc_c_class; return NULL; } @@ -483,7 +514,8 @@ dvb_network_create_mux save |= cls == &dvb_mux_dvbt_class && dmc->dmc_fe_type == DVB_TYPE_T; save |= cls == &dvb_mux_dvbc_class && dmc->dmc_fe_type == DVB_TYPE_C; save |= cls == &dvb_mux_dvbs_class && dmc->dmc_fe_type == DVB_TYPE_S; - save |= cls == &dvb_mux_atsc_class && dmc->dmc_fe_type == DVB_TYPE_ATSC; + save |= cls == &dvb_mux_atsc_t_class && dmc->dmc_fe_type == DVB_TYPE_ATSC_T; + save |= cls == &dvb_mux_atsc_c_class && dmc->dmc_fe_type == DVB_TYPE_ATSC_C; if (save && dmc->dmc_fe_type == DVB_TYPE_S) { satpos = dvb_network_get_orbital_pos(mn); /* do not allow to mix satellite positions */ @@ -668,7 +700,8 @@ static const idclass_t* dvb_network_classes[] = { &dvb_network_dvbt_class, &dvb_network_dvbc_class, &dvb_network_dvbs_class, - &dvb_network_atsc_class, + &dvb_network_atsc_t_class, + &dvb_network_atsc_c_class, }; void dvb_network_init ( void ) @@ -735,8 +768,10 @@ const idclass_t *dvb_network_class_by_fe_type(dvb_fe_type_t type) return &dvb_network_dvbc_class; else if (type == DVB_TYPE_S) return &dvb_network_dvbs_class; - else if (type == DVB_TYPE_ATSC) - return &dvb_network_atsc_class; + else if (type == DVB_TYPE_ATSC_T) + return &dvb_network_atsc_t_class; + else if (type == DVB_TYPE_ATSC_C) + return &dvb_network_atsc_c_class; return NULL; } @@ -749,8 +784,10 @@ dvb_fe_type_t dvb_fe_type_by_network_class(const idclass_t *idc) return DVB_TYPE_C; else if (idc == &dvb_network_dvbs_class) return DVB_TYPE_S; - else if (idc == &dvb_network_atsc_class) - return DVB_TYPE_ATSC; + else if (idc == &dvb_network_atsc_t_class) + return DVB_TYPE_ATSC_T; + else if (idc == &dvb_network_atsc_c_class) + return DVB_TYPE_ATSC_C; return DVB_TYPE_NONE; } diff --git a/src/input/mpegts/mpegts_service.c b/src/input/mpegts/mpegts_service.c index c0bb43744..0d27b2c3a 100644 --- a/src/input/mpegts/mpegts_service.c +++ b/src/input/mpegts/mpegts_service.c @@ -547,12 +547,13 @@ mpegts_service_channel_icon ( service_t *s ) (mmd->lm_tuning.u.dmc_fe_qpsk.orbital_pos == DVB_POLARISATION_HORIZONTAL ? 0x8000 : 0); break; case DVB_TYPE_C: + case DVB_TYPE_ATSC_C: hash = 0xFFFF0000; break; case DVB_TYPE_T: hash = 0xEEEE0000; break; - case DVB_TYPE_ATSC: + case DVB_TYPE_ATSC_T: hash = 0xDDDD0000; break; default: diff --git a/src/input/mpegts/satip/satip.c b/src/input/mpegts/satip/satip.c index d0afd9edc..5f830b94c 100644 --- a/src/input/mpegts/satip/satip.c +++ b/src/input/mpegts/satip/satip.c @@ -589,12 +589,12 @@ satip_device_create( satip_device_info_t *info ) } else if (strncmp(argv[i], "DVBC-", 5) == 0) { type = DVB_TYPE_C; m = atoi(argv[i] + 5); - } else if (strncmp(argv[i], "ATSC-", 5) == 0) { - type = DVB_TYPE_ATSC; + } else if (strncmp(argv[i], "ATSCT-", 5) == 0) { + type = DVB_TYPE_ATSC_T; m = atoi(argv[i] + 5); - } else if (strncmp(argv[i], "DVBCB-", 6) == 0) { + } else if (strncmp(argv[i], "ATSCC-", 6) == 0) { + type = DVB_TYPE_ATSC_C; m = atoi(argv[i] + 6); - v2 = 2; } if (type == DVB_TYPE_NONE) { tvhlog(LOG_ERR, "satip", "%s: bad tuner type [%s]", diff --git a/src/input/mpegts/satip/satip_frontend.c b/src/input/mpegts/satip/satip_frontend.c index 4c690b754..183062508 100644 --- a/src/input/mpegts/satip/satip_frontend.c +++ b/src/input/mpegts/satip/satip_frontend.c @@ -351,11 +351,21 @@ const idclass_t satip_frontend_dvbc_class = } }; -const idclass_t satip_frontend_atsc_class = +const idclass_t satip_frontend_atsc_t_class = { .ic_super = &satip_frontend_class, - .ic_class = "satip_frontend_atsc", - .ic_caption = N_("SAT>IP ATSC frontend"), + .ic_class = "satip_frontend_atsc_t", + .ic_caption = N_("SAT>IP ATSC-T frontend"), + .ic_properties = (const property_t[]){ + {} + } +}; + +const idclass_t satip_frontend_atsc_c_class = +{ + .ic_super = &satip_frontend_class, + .ic_class = "satip_frontend_atsc_c", + .ic_caption = N_("SAT>IP ATSC-C frontend"), .ic_properties = (const property_t[]){ {} } @@ -1765,8 +1775,10 @@ satip_frontend_create idc = &satip_frontend_dvbt_class; else if (type == DVB_TYPE_C) idc = &satip_frontend_dvbc_class; - else if (type == DVB_TYPE_ATSC) - idc = &satip_frontend_atsc_class; + else if (type == DVB_TYPE_ATSC_T) + idc = &satip_frontend_atsc_t_class; + else if (type == DVB_TYPE_ATSC_C) + idc = &satip_frontend_atsc_c_class; else { tvherror("satip", "unknown FE type %d", type); return NULL; diff --git a/src/input/mpegts/scanfile.c b/src/input/mpegts/scanfile.c index 701c40b3a..618c13134 100644 --- a/src/input/mpegts/scanfile.c +++ b/src/input/mpegts/scanfile.c @@ -37,7 +37,8 @@ scanfile_region_list_t scanfile_regions_DVBC; scanfile_region_list_t scanfile_regions_DVBT; scanfile_region_list_t scanfile_regions_DVBS; -scanfile_region_list_t scanfile_regions_ATSC; +scanfile_region_list_t scanfile_regions_ATSC_T; +scanfile_region_list_t scanfile_regions_ATSC_C; /* ************************************************************************** * Country codes @@ -279,10 +280,11 @@ scanfile_region_create { scanfile_region_t *reg; scanfile_region_list_t *list = NULL; - if (!strcmp(type, "dvb-s")) list = &scanfile_regions_DVBS; - else if (!strcmp(type, "dvb-t")) list = &scanfile_regions_DVBT; - else if (!strcmp(type, "dvb-c")) list = &scanfile_regions_DVBC; - else if (!strcmp(type, "atsc")) list = &scanfile_regions_ATSC; + if (!strcmp(type, "dvb-s")) list = &scanfile_regions_DVBS; + else if (!strcmp(type, "dvb-t")) list = &scanfile_regions_DVBT; + else if (!strcmp(type, "dvb-c")) list = &scanfile_regions_DVBC; + else if (!strcmp(type, "atsc-t")) list = &scanfile_regions_ATSC_T; + else if (!strcmp(type, "atsc-c")) list = &scanfile_regions_ATSC_C; if (!list) return NULL; LIST_FOREACH(reg, list, sfr_link) { @@ -300,11 +302,72 @@ scanfile_region_create return reg; } +/* + * + */ +static int +scanfile_create_network + ( scanfile_network_t **_net, const char *type, const char *name, + dvb_fe_delivery_system_t delsys ) +{ + scanfile_region_t *reg = NULL; + scanfile_network_t *net; + char buf[256], buf2[256], buf3[256], *str; + int opos; + + /* Region */ + strncpy(buf, name, sizeof(buf)); + buf[sizeof(buf)-1] = '\0'; + if (!strcmp(type, "dvb-s")) { + reg = scanfile_region_create(type, "geo", "Geo-synchronous Orbit"); + } else { + str = buf; + while (*str) { + if (*str == '-') { + *str = '\0'; + if (!strcmp(type, "atsc")) + type = delsys == DVB_SYS_ATSC ? "atsc-t" : "atsc-c"; + reg = scanfile_region_create(type, buf, tldcode2longname(buf)); + *str = '-'; + break; + } + str++; + } + } + if (!reg) + return -1; + + /* Network */ + str = buf; + while (*str) { + if (!isprint(*str)) *str = '_'; + str++; + } + *str = '\0'; + opos = INT_MAX; + if (!strcmp(type, "dvb-s") && scanfile_network_dvbs_pos(buf, &opos)) { + snprintf(buf3, sizeof(buf3), "%c%3i.%i%c:%s", opos < 0 ? '<' : '>', + abs(opos) / 10, abs(opos) % 10, + opos < 0 ? 'W' :'E', buf); + strcpy(buf, buf3); + } + snprintf(buf2, sizeof(buf2), "%s_%s", type, buf); + net = calloc(1, sizeof(scanfile_network_t)); + net->sfn_id = strdup(buf2); + net->sfn_name = strdup(buf); + net->sfn_satpos = opos; + LIST_INSERT_SORTED(®->sfr_networks, net, sfn_link, scanfile_network_cmp); + + *_net = net; + return 0; +} + /* * Process mux entry */ -static void -scanfile_load_one ( scanfile_network_t *net, const char *line ) +static int +scanfile_load_one + ( scanfile_network_t **net, const char *type, const char *name, const char *line ) { int r = 1; dvb_mux_conf_t *mux = malloc(sizeof(dvb_mux_conf_t)); @@ -328,8 +391,11 @@ scanfile_load_one ( scanfile_network_t *net, const char *line ) if (r) { free(mux); } else { - LIST_INSERT_HEAD(&net->sfn_muxes, mux, dmc_link); + if (*net == NULL && scanfile_create_network(net, type, name, mux->dmc_fe_delsys)) + return -1; + LIST_INSERT_HEAD(&(*net)->sfn_muxes, mux, dmc_link); } + return 1; } /* @@ -363,7 +429,9 @@ str_trim(char *s) #define mux_ok(r) ((r) = ((r) > 0) ? 0 : (r)) static int -scanfile_load_dvbv5 ( scanfile_network_t *net, char *line, fb_file *fp ) +scanfile_load_dvbv5 + ( scanfile_network_t **net, const char *type, const char *name, + char *line, fb_file *fp ) { int res = 1, r = 1; char buf[256]; @@ -521,11 +589,10 @@ scanfile_load_dvbv5 ( scanfile_network_t *net, char *line, fb_file *fp ) if ((mux->dmc_fe_inversion = dvb_str2inver(x)) == -1) mux_fail(r, "wrong inversion '%s'", x); if (htsmsg_get_u32(l, "SYMBOL_RATE", &mux->u.dmc_fe_qam.symbol_rate)) - mux_fail0(r, "dvb-c: undefined symbol rate"); + mux->u.dmc_fe_qam.symbol_rate = 6900000; } else if (mux->dmc_fe_delsys == DVB_SYS_ATSC) { - mux->dmc_fe_type = DVB_TYPE_ATSC; mux->dmc_fe_modulation = DVB_MOD_VSB_8; if ((x = htsmsg_get_str(l, "MODULATION"))) @@ -551,7 +618,10 @@ scanfile_load_dvbv5 ( scanfile_network_t *net, char *line, fb_file *fp ) } else { dvb_mux_conf_str(mux, buf, sizeof(buf)); tvhtrace("scanfile", "mux %s", buf); - LIST_INSERT_HEAD(&net->sfn_muxes, mux, dmc_link); + if (*net == NULL) + if (scanfile_create_network(net, type, name, mux->dmc_fe_delsys)) + return -1; + LIST_INSERT_HEAD(&(*net)->sfn_muxes, mux, dmc_link); } return res; @@ -564,85 +634,42 @@ static void scanfile_load_file ( const char *type, fb_dir *dir, const char *name ) { - int opos, load; fb_file *fp; - scanfile_region_t *reg = NULL; - scanfile_network_t *net; - char *str; - char buf[256], buf2[256], buf3[256]; + scanfile_network_t *net = NULL; + char *str, buf[256]; + int load = 0; + tvhtrace("scanfile", "load file %s", name); fp = fb_open2(dir, name, 1, 0); if (!fp) return; - /* Region */ - strncpy(buf, name, sizeof(buf)); - buf[sizeof(buf)-1] = '\0'; - if (!strcmp(type, "dvb-s")) { - reg = scanfile_region_create(type, "geo", "Geo-synchronous Orbit"); - } else { - str = buf; - while (*str) { - if (*str == '-') { - *str = '\0'; - reg = scanfile_region_create(type, buf, tldcode2longname(buf)); - *str = '-'; - break; - } - str++; - } - } - if (!reg) { - fb_close(fp); - return; - } - - /* Network */ - str = buf; - while (*str) { - if (!isprint(*str)) *str = '_'; - str++; - } - *str = '\0'; - opos = INT_MAX; - if (!strcmp(type, "dvb-s") && scanfile_network_dvbs_pos(buf, &opos)) { - snprintf(buf3, sizeof(buf3), "%c%3i.%i%c:%s", opos < 0 ? '<' : '>', - abs(opos) / 10, abs(opos) % 10, - opos < 0 ? 'W' :'E', buf); - strcpy(buf, buf3); - } - snprintf(buf2, sizeof(buf2), "%s_%s", type, buf); - net = calloc(1, sizeof(scanfile_network_t)); - net->sfn_id = strdup(buf2); - net->sfn_name = strdup(buf); - net->sfn_satpos = opos; - LIST_INSERT_SORTED(®->sfr_networks, net, sfn_link, scanfile_network_cmp); - /* Process file */ load = 1; - while (!fb_eof(fp)) { + while (!fb_eof(fp) && load >= 0) { /* Get line */ if (load) { buf[sizeof(buf)-1] = '\0'; if (!fb_gets(fp, buf, sizeof(buf) - 1)) break; + str = buf + strlen(buf) - 1; if (buf[0]) - buf[strlen(buf)-1] = '\0'; - while (buf[0] && buf[strlen(buf)-1] <= ' ') - buf[strlen(buf)-1] = '\0'; + *(str--) = '\0'; + while (buf[0] && *str <= ' ') + *(str--) = '\0'; } - load = 1; /* Process mux */ + load = 1; switch (*buf) { case 'A': case 'C': case 'T': case 'S': - scanfile_load_one(net, buf); + load = scanfile_load_one(&net, type, name, buf); break; case '[': - load = scanfile_load_dvbv5(net, buf, fp); + load = scanfile_load_dvbv5(&net, type, name, buf, fp); break; default: break; @@ -722,10 +749,11 @@ scanfile_init ( void ) #endif scanfile_load_dir(path, NULL, 0); - r += scanfile_stats("DVB-T", &scanfile_regions_DVBT); - r += scanfile_stats("DVB-S", &scanfile_regions_DVBS); - r += scanfile_stats("DVB-C", &scanfile_regions_DVBC); - r += scanfile_stats("ATSC", &scanfile_regions_ATSC); + r += scanfile_stats("DVB-T", &scanfile_regions_DVBT); + r += scanfile_stats("DVB-S", &scanfile_regions_DVBS); + r += scanfile_stats("DVB-C", &scanfile_regions_DVBC); + r += scanfile_stats("ATSC-T", &scanfile_regions_ATSC_T); + r += scanfile_stats("ATSC-C", &scanfile_regions_ATSC_C); if (!r) { tvhwarn("scanfile", "no predefined muxes found, check path '%s%s'", path[0] == '/' ? path : TVHEADEND_DATADIR "/", @@ -768,7 +796,8 @@ scanfile_done ( void ) scanfile_done_region(&scanfile_regions_DVBS); scanfile_done_region(&scanfile_regions_DVBT); scanfile_done_region(&scanfile_regions_DVBC); - scanfile_done_region(&scanfile_regions_ATSC); + scanfile_done_region(&scanfile_regions_ATSC_T); + scanfile_done_region(&scanfile_regions_ATSC_C); } /* @@ -792,8 +821,10 @@ scanfile_find ( const char *id ) l = &scanfile_regions_DVBC; else if (!strcasecmp(tok, "dvbs")) l = &scanfile_regions_DVBS; - else if (!strcasecmp(tok, "atsc")) - l = &scanfile_regions_ATSC; + else if (!strcasecmp(tok, "atsc-t")) + l = &scanfile_regions_ATSC_T; + else if (!strcasecmp(tok, "atsc-c")) + l = &scanfile_regions_ATSC_C; else goto fail; diff --git a/src/input/mpegts/scanfile.h b/src/input/mpegts/scanfile.h index 5db08469c..6a29c7918 100644 --- a/src/input/mpegts/scanfile.h +++ b/src/input/mpegts/scanfile.h @@ -38,7 +38,8 @@ typedef LIST_HEAD(,scanfile_region) scanfile_region_list_t; extern scanfile_region_list_t scanfile_regions_DVBC; extern scanfile_region_list_t scanfile_regions_DVBT; extern scanfile_region_list_t scanfile_regions_DVBS; -extern scanfile_region_list_t scanfile_regions_ATSC; +extern scanfile_region_list_t scanfile_regions_ATSC_T; +extern scanfile_region_list_t scanfile_regions_ATSC_C; void scanfile_init ( void ); void scanfile_done ( void ); diff --git a/src/input/mpegts/tvhdhomerun/tvhdhomerun.c b/src/input/mpegts/tvhdhomerun/tvhdhomerun.c index 6ff7c1cc8..5d9994a0d 100644 --- a/src/input/mpegts/tvhdhomerun/tvhdhomerun.c +++ b/src/input/mpegts/tvhdhomerun/tvhdhomerun.c @@ -284,13 +284,13 @@ static void tvhdhomerun_device_create(struct hdhomerun_discover_device_t *dInfo) const char *override_type = htsmsg_get_str(conf, "fe_override"); if ( override_type != NULL) { type = dvb_str2type(override_type); - if ( ! ( type == DVB_TYPE_C || type == DVB_TYPE_T || type == DVB_TYPE_ATSC ) ) { + if ( ! ( type == DVB_TYPE_C || type == DVB_TYPE_T || type == DVB_TYPE_ATSC_T ) ) { type = DVB_TYPE_C; } } } else { if (strstr(hd->hd_info.deviceModel, "_atsc")) - type = DVB_TYPE_ATSC; + type = DVB_TYPE_ATSC_T; } hd->hd_override_type = strdup(dvb_type2str(type)); diff --git a/src/input/mpegts/tvhdhomerun/tvhdhomerun_frontend.c b/src/input/mpegts/tvhdhomerun/tvhdhomerun_frontend.c index e34c2c523..f3aff35c0 100644 --- a/src/input/mpegts/tvhdhomerun/tvhdhomerun_frontend.c +++ b/src/input/mpegts/tvhdhomerun/tvhdhomerun_frontend.c @@ -573,11 +573,21 @@ const idclass_t tvhdhomerun_frontend_dvbc_class = } }; -const idclass_t tvhdhomerun_frontend_atsc_class = +const idclass_t tvhdhomerun_frontend_atsc_t_class = { .ic_super = &tvhdhomerun_frontend_class, - .ic_class = "tvhdhomerun_frontend_atsc", - .ic_caption = N_("HDHomeRun ATSC frontend"), + .ic_class = "tvhdhomerun_frontend_atsc_t", + .ic_caption = N_("HDHomeRun ATSC-T frontend"), + .ic_properties = (const property_t[]){ + {} + } +}; + +const idclass_t tvhdhomerun_frontend_atsc_c_class = +{ + .ic_super = &tvhdhomerun_frontend_class, + .ic_class = "tvhdhomerun_frontend_atsc_c", + .ic_caption = N_("HDHomeRun ATSC-C frontend"), .ic_properties = (const property_t[]){ {} } @@ -626,9 +636,11 @@ tvhdhomerun_frontend_create(tvhdhomerun_device_t *hd, struct hdhomerun_discover_ idc = &tvhdhomerun_frontend_dvbt_class; else if (type == DVB_TYPE_C) idc = &tvhdhomerun_frontend_dvbc_class; - else if (type == DVB_TYPE_ATSC) { - idc = &tvhdhomerun_frontend_atsc_class; - } else { + else if (type == DVB_TYPE_ATSC_T) + idc = &tvhdhomerun_frontend_atsc_t_class; + else if (type == DVB_TYPE_ATSC_C) + idc = &tvhdhomerun_frontend_atsc_c_class; + else { tvherror("stvhdhomerun", "unknown FE type %d", type); return NULL; } diff --git a/src/satip/rtsp.c b/src/satip/rtsp.c index 69ba01995..8ee51e1d0 100644 --- a/src/satip/rtsp.c +++ b/src/satip/rtsp.c @@ -134,13 +134,13 @@ rtsp_delsys(int fe, int *findex) goto result; } fe -= i; - i = satip_server_conf.satip_atsc; + i = satip_server_conf.satip_atsc_t; if (fe <= i) { res = DVB_SYS_ATSC; goto result; } fe -= i; - i = satip_server_conf.satip_dvbcb; + i = satip_server_conf.satip_atsc_c; if (fe <= i) { res = DVB_SYS_DVBC_ANNEX_B; goto result; diff --git a/src/satip/server.c b/src/satip/server.c index 78d775aa8..c816f6fe1 100644 --- a/src/satip/server.c +++ b/src/satip/server.c @@ -119,14 +119,14 @@ satip_server_http_xml(http_connection_t *hc) http_arg_list_t args; struct xml_type_xtab xtab[] = { - { "DVBS", &satip_server_conf.satip_dvbs, &dvbs }, - { "DVBS2", &satip_server_conf.satip_dvbs2, &dvbs }, - { "DVBT", &satip_server_conf.satip_dvbt, &dvbt }, - { "DVBT2", &satip_server_conf.satip_dvbt2, &dvbt }, - { "DVBC", &satip_server_conf.satip_dvbc, &dvbc }, - { "DVBC2", &satip_server_conf.satip_dvbc2, &dvbc }, - { "ATSC", &satip_server_conf.satip_atsc, &atsc }, - { "DVBCB", &satip_server_conf.satip_dvbcb, &dvbc }, + { "DVBS", &satip_server_conf.satip_dvbs, &dvbs }, + { "DVBS2", &satip_server_conf.satip_dvbs2, &dvbs }, + { "DVBT", &satip_server_conf.satip_dvbt, &dvbt }, + { "DVBT2", &satip_server_conf.satip_dvbt2, &dvbt }, + { "DVBC", &satip_server_conf.satip_dvbc, &dvbc }, + { "DVBC2", &satip_server_conf.satip_dvbc2, &dvbc }, + { "ATSCT", &satip_server_conf.satip_atsc_t, &atsc }, + { "ATSCC", &satip_server_conf.satip_atsc_c, &atsc }, {} }; @@ -145,7 +145,7 @@ satip_server_http_xml(http_connection_t *hc) srcs = mn->mn_satip_source; } else if (idnode_is_instance(&mn->mn_id, &dvb_network_dvbc_class)) dvbc++; - else if (idnode_is_instance(&mn->mn_id, &dvb_network_atsc_class)) + else if (idnode_is_instance(&mn->mn_id, &dvb_network_atsc_t_class)) atsc++; else if (idnode_is_instance(&mn->mn_id, &iptv_network_class)) { LIST_FOREACH(mm, &mn->mn_muxes, mm_network_link) @@ -527,15 +527,15 @@ static void satip_server_info(const char *prefix, int descramble, int muxcnf) http_server_ip, http_server_port, http_server_ip, satip_server_rtsp_port, descramble, muxcnf); - tvhinfo("satips", "SAT>IP Server tuners: DVB-T/T2 %d/%d, DVB-S/S2 %d/%d, DVB-C/C2 %d/%d, ATSC %d, DVB-Cable/AnnexB %d", + tvhinfo("satips", "SAT>IP Server tuners: DVB-T/T2 %d/%d, DVB-S/S2 %d/%d, DVB-C/C2 %d/%d, ATSC-T/C %d/%d", satip_server_conf.satip_dvbt, satip_server_conf.satip_dvbt2, satip_server_conf.satip_dvbs, satip_server_conf.satip_dvbs2, satip_server_conf.satip_dvbc, satip_server_conf.satip_dvbc2, - satip_server_conf.satip_atsc, - satip_server_conf.satip_dvbcb); + satip_server_conf.satip_atsc_t, + satip_server_conf.satip_atsc_c); } /* @@ -671,7 +671,7 @@ const idclass_t satip_server_class = { .type = PT_INT, .id = "satip_dvbs", .name = N_("DVB-S"), - .desc = N_("The number of DVB-S tuners to export."), + .desc = N_("The number of DVB-S (Satellite) tuners to export."), .off = offsetof(struct satip_server_conf, satip_dvbs), .group = 2, }, @@ -679,7 +679,7 @@ const idclass_t satip_server_class = { .type = PT_INT, .id = "satip_dvbs2", .name = N_("DVB-S2"), - .desc = N_("The number of DVB-S2 tuners to export."), + .desc = N_("The number of DVB-S2 (Satellite) tuners to export."), .off = offsetof(struct satip_server_conf, satip_dvbs2), .group = 2, }, @@ -687,7 +687,7 @@ const idclass_t satip_server_class = { .type = PT_INT, .id = "satip_dvbt", .name = N_("DVB-T"), - .desc = N_("The number of DVB-T tuners to export."), + .desc = N_("The number of DVB-T (Terresterial) tuners to export."), .off = offsetof(struct satip_server_conf, satip_dvbt), .group = 2, }, @@ -695,7 +695,7 @@ const idclass_t satip_server_class = { .type = PT_INT, .id = "satip_dvbt2", .name = N_("DVB-T2"), - .desc = N_("The number of DVB-T2 tuners to export."), + .desc = N_("The number of DVB-T2 (Terresterial) tuners to export."), .off = offsetof(struct satip_server_conf, satip_dvbt2), .group = 2, }, @@ -703,7 +703,7 @@ const idclass_t satip_server_class = { .type = PT_INT, .id = "satip_dvbc", .name = N_("DVB-C"), - .desc = N_("The number of DVB-C tuners to export."), + .desc = N_("The number of DVB-C (Cable) tuners to export."), .off = offsetof(struct satip_server_conf, satip_dvbc), .group = 2, }, @@ -711,24 +711,24 @@ const idclass_t satip_server_class = { .type = PT_INT, .id = "satip_dvbc2", .name = N_("DVB-C2"), - .desc = N_("The number of DVB-C2 tuners to export."), + .desc = N_("The number of DVB-C2 (Cable) tuners to export."), .off = offsetof(struct satip_server_conf, satip_dvbc2), .group = 2, }, { .type = PT_INT, - .id = "satip_atsc", - .name = N_("ATSC"), - .desc = N_("The number of ATSC tuners to export."), - .off = offsetof(struct satip_server_conf, satip_atsc), + .id = "satip_atsct", + .name = N_("ATSC-T"), + .desc = N_("The number of ATSC-T (Terresterial) tuners to export."), + .off = offsetof(struct satip_server_conf, satip_atsc_t), .group = 2, }, { .type = PT_INT, - .id = "satip_dvbc2", - .name = N_("DVB-Cable/AnnexB"), - .desc = N_("The number of DVB-Cable/AnnexB tuners to export."), - .off = offsetof(struct satip_server_conf, satip_dvbcb), + .id = "satip_atscc", + .name = N_("ATSC-C"), + .desc = N_("The number of ATSC-C (Cable/AnnexB) tuners to export."), + .off = offsetof(struct satip_server_conf, satip_atsc_c), .group = 2, }, {} diff --git a/src/satip/server.h b/src/satip/server.h index 7f4af315c..8420d584b 100644 --- a/src/satip/server.h +++ b/src/satip/server.h @@ -51,8 +51,8 @@ struct satip_server_conf { int satip_dvbt2; int satip_dvbc; int satip_dvbc2; - int satip_atsc; - int satip_dvbcb; + int satip_atsc_t; + int satip_atsc_c; char *satip_nat_ip; };