]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
ATSC - separate T and C networks
authorJaroslav Kysela <perex@perex.cz>
Tue, 8 Dec 2015 08:48:20 +0000 (09:48 +0100)
committerJaroslav Kysela <perex@perex.cz>
Tue, 8 Dec 2015 08:48:20 +0000 (09:48 +0100)
18 files changed:
src/api/api_mpegts.c
src/input/mpegts/dvb.h
src/input/mpegts/dvb_support.c
src/input/mpegts/linuxdvb/linuxdvb_adapter.c
src/input/mpegts/linuxdvb/linuxdvb_frontend.c
src/input/mpegts/mpegts_dvb.h
src/input/mpegts/mpegts_mux_dvb.c
src/input/mpegts/mpegts_network_dvb.c
src/input/mpegts/mpegts_service.c
src/input/mpegts/satip/satip.c
src/input/mpegts/satip/satip_frontend.c
src/input/mpegts/scanfile.c
src/input/mpegts/scanfile.h
src/input/mpegts/tvhdhomerun/tvhdhomerun.c
src/input/mpegts/tvhdhomerun/tvhdhomerun_frontend.c
src/satip/rtsp.c
src/satip/server.c
src/satip/server.h

index 2e14c235c9355a44be4e1f12e11fa37c69e5edc9..2febdadfbe5aab6b9c763a2f7673b58ad4df55da 100644 (file)
@@ -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;
   
index a00a8ef43e7bb039aabe9486b9bd62aac59dbbfc..f17ea7f78928395e3f1e5a0a631d58e0104be191 100644 (file)
@@ -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 {
index 7b4ba62218f87e36407365749b795f097267aab4..73f81efadb8708791ee05d0941dfac67466f6481 100644 (file)
@@ -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");
index ff17bf1cd61dbd5f20b41e0dce2d25de5b72ba7d..3e12ac0354e1693a5aaabc0cb860db8275d50ee7 100644 (file)
@@ -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);
   }
index 2b36c656708ed4dc73cec6a4a379133783e09ff4..21c214979738a885d23680037c37d916c48d0491 100644 (file)
@@ -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;
index e054552e21647f9f13cde6cc4ca7cce87d02fe26..ac37f328b5603927dc99f33e04aa0558025d827a 100644 (file)
@@ -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,
index 3b7e8c94fc2ea13706ba5fc611161f310efc4aca..c4234d11f49c2efd6463388053f67c9dedd47a40 100644 (file)
@@ -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;
index ddeeca834a86417017a32c61c479c790221b3fd3..8c84de42df0238bba08ac1464d9277de5f3e7a27 100644 (file)
@@ -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;
 }
index c0bb437440e5b6009d137bb4fe191c951de3b5cd..0d27b2c3acd0e6d295ca588c4b548bc1661cfa92 100644 (file)
@@ -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:
index d0afd9edc4468354632341bad31089328b213a0d..5f830b94c5f33ac781940948570aef0541b0d933 100644 (file)
@@ -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]",
index 4c690b754dc617dcd7154200b9307cf17f3dfb1a..183062508a1d2b55dbdc6b74a7edae47b2c3523e 100644 (file)
@@ -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;
index 701c40b3a6e542b480ae689d5f06fc84993b8a63..618c13134af3ae30ca7e96556f2eca2cdf20887c 100644 (file)
@@ -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(&reg->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(&reg->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;
 
index 5db08469cd767c61d2a7136fcc3ac1ffe39c45b1..6a29c7918a30e841e8cb3ea15055b05f3fb84781 100644 (file)
@@ -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 );
index 6ff7c1cc8e00e59d8cd9f0f4bbc2e1cdc9784585..5d9994a0de4d7b06e4c3f42f33ddc2127bfe7ef8 100644 (file)
@@ -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));
index e34c2c523071042cf8a6d4e96cdcc7672db09b37..f3aff35c05908ffb3d3bb3da88ca0a3b7abf934b 100644 (file)
@@ -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;
   }
index 69ba01995bacdd8041d5c104bb386807d43bc46b..8ee51e1d0036256f67b9704319e9183231f05473 100644 (file)
@@ -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;
index 78d775aa8eed262643c8c792f63d4ebbb49cf889..c816f6fe1952e4927124b3d7eb843f93efb9be1f 100644 (file)
@@ -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,
     },
     {}
index 7f4af315cad0ccf2ef2a556f0ae627e7ce16abf0..8420d584bc96f8f0343675a50092e23aac8e2887 100644 (file)
@@ -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;
 };