]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
linuxdvb: fix dvb-s config params modulation and rolloff
authorAdam Sutton <dev@adamsutton.me.uk>
Thu, 19 Sep 2013 10:10:25 +0000 (11:10 +0100)
committerAdam Sutton <dev@adamsutton.me.uk>
Thu, 19 Sep 2013 10:35:06 +0000 (11:35 +0100)
src/input/mpegts/linuxdvb/linuxdvb_mux.c

index 01dcaf91c31088e1cb873bb70ea6b7632737f1e4..9b575643560508a4101d2ee915e0449622235448 100644 (file)
@@ -276,13 +276,7 @@ const idclass_t linuxdvb_mux_dvbc_class =
   }
 };
 
-linuxdvb_mux_class_X(dvbs, qam, modulation,            qam,
-                     QAM_AUTO, QPSK, QAM_16
-#if DVB_VER_ATLEAST(5,4)
-                     , PSK_8, APSK_16, APSK_32
-#endif
-                    );
-linuxdvb_mux_class_X(dvbs, qam, fec_inner,             fec,
+linuxdvb_mux_class_X(dvbs, qpsk, fec_inner,             fec,
                      FEC_AUTO, FEC_NONE,
                      FEC_1_2, FEC_2_3, FEC_3_4, FEC_4_5, FEC_5_6, FEC_7_8,
                      FEC_8_9
@@ -316,6 +310,66 @@ linuxdvb_mux_dvbs_class_polarity_enum (void *o)
   return list;
 }
 
+static const void *
+linuxdvb_mux_dvbs_class_modulation_get ( void *o )
+{
+  static const char *s;
+  linuxdvb_mux_t *lm = o;
+  s = dvb_qam2str(lm->lm_tuning.dmc_fe_modulation);
+  return &s;
+}
+static int
+linuxdvb_mux_dvbs_class_modulation_set (void *o, const void *s)
+{
+  linuxdvb_mux_t *lm = o;
+  lm->lm_tuning.dmc_fe_modulation = dvb_str2qam(s);
+  return 1;
+}
+static htsmsg_t *
+linuxdvb_mux_dvbs_class_modulation_list ( void *o )
+{
+  htsmsg_t *list = htsmsg_create_list();
+  htsmsg_add_str(list, NULL, dvb_qam2str(QAM_AUTO));
+  htsmsg_add_str(list, NULL, dvb_qam2str(QPSK));
+  htsmsg_add_str(list, NULL, dvb_qam2str(QAM_16));
+#if DVB_VER_ATLEAST(5,4)
+  htsmsg_add_str(list, NULL, dvb_qam2str(PSK_8));
+  htsmsg_add_str(list, NULL, dvb_qam2str(APSK_16));
+  htsmsg_add_str(list, NULL, dvb_qam2str(APSK_32));
+#endif
+  return list;
+}
+
+#if DVB_VER_ATLEAST(5,0)
+static const void *
+linuxdvb_mux_dvbs_class_rolloff_get ( void *o )
+{
+  static const char *s;
+  linuxdvb_mux_t *lm = o;
+  s = dvb_rolloff2str(lm->lm_tuning.dmc_fe_rolloff);
+  return &s;
+}
+static int
+linuxdvb_mux_dvbs_class_rolloff_set ( void *o, const void *s )
+{
+  linuxdvb_mux_t *lm = o;
+  lm->lm_tuning.dmc_fe_rolloff = dvb_str2rolloff(s);
+  return 1;
+}
+static htsmsg_t *
+linuxdvb_mux_dvbs_class_rolloff_list ( void *o )
+{
+  htsmsg_t *list = htsmsg_create_list();
+  htsmsg_add_str(list, NULL, dvb_rolloff2str(ROLLOFF_35));
+  // Note: this is a bit naff, as the below values are only relevant
+  //       to S2 muxes, but currently have no way to model that
+  htsmsg_add_str(list, NULL, dvb_rolloff2str(ROLLOFF_20));
+  htsmsg_add_str(list, NULL, dvb_rolloff2str(ROLLOFF_25));
+  htsmsg_add_str(list, NULL, dvb_rolloff2str(ROLLOFF_AUTO));
+  return list;
+}
+#endif
+
 #define linuxdvb_mux_dvbs_class_delsys_get linuxdvb_mux_class_delsys_get
 #define linuxdvb_mux_dvbs_class_delsys_set linuxdvb_mux_class_delsys_set
 static htsmsg_t *
@@ -354,11 +408,26 @@ const idclass_t linuxdvb_mux_dvbs_class =
       MUX_PROP_STR("polarisation", "Polarisation", dvbs, polarity)
     },
     {
-      MUX_PROP_STR("modulation", "Modulation", dvbs, qam)
+      .type     = PT_STR,
+      .id       = "modulation",
+      .name     = "Modulation",
+      .set      = linuxdvb_mux_dvbs_class_modulation_set,
+      .get      = linuxdvb_mux_dvbs_class_modulation_get,
+      .list     = linuxdvb_mux_dvbs_class_modulation_list,
     },
     {
       MUX_PROP_STR("fec", "FEC", dvbs, fec)
     },
+#if DVB_VER_ATLEAST(5,0)
+    {
+      .type     = PT_STR,
+      .id       = "rolloff",
+      .name     = "Rolloff",
+      .set      = linuxdvb_mux_dvbs_class_rolloff_set,
+      .get      = linuxdvb_mux_dvbs_class_rolloff_get,
+      .list     = linuxdvb_mux_dvbs_class_rolloff_list,
+    },
+#endif
     {}
   }
 };