[vlc-commits] DVB: add polarization / voltage tuning
Rémi Denis-Courmont
git at videolan.org
Wed Mar 23 18:51:48 CET 2011
vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Wed Mar 23 19:31:35 2011 +0200| [798372cdb0927b7626898726112e20bd6210079b] | committer: Rémi Denis-Courmont
DVB: add polarization / voltage tuning
This uses the same --dvb-polarization syntax as the BDA plugin, while
also retaining backward compstiblity with --dvb-voltage.
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=798372cdb0927b7626898726112e20bd6210079b
---
modules/access/dtv/access.c | 84 ++++++++++++++++++++++++++++++++++--------
modules/access/dtv/dtv.h | 3 +-
modules/access/dtv/linux.c | 19 ++++++++++
3 files changed, 88 insertions(+), 18 deletions(-)
diff --git a/modules/access/dtv/access.c b/modules/access/dtv/access.c
index 902ff0e..0f68c92 100644
--- a/modules/access/dtv/access.c
+++ b/modules/access/dtv/access.c
@@ -140,6 +140,15 @@ static const char *const rolloff_user[] = { N_("Automatic"),
N_("0.35 (same as DVB-S)"), N_("0.20"), N_("0.25"),
};
+#define POLARIZATION_TEXT N_("Polarization (Voltage)")
+#define POLARIZATION_LONGTEXT N_( \
+ "To select the polarization of the transponder, a different voltage " \
+ "is normally applied to the low noise block-downconverter (LNB).")
+static const char *const polarization_vlc[] = { "", "V", "H", "R", "L" };
+static const char *const polarization_user[] = { N_("Unspecified (0V)"),
+ N_("Vertical (13V)"), N_("Horizontal (18V)"),
+ N_("Circular Right Hand (13V)"), N_("Circular Left Hand (18V)") };
+
static int Open (vlc_object_t *);
static void Close (vlc_object_t *);
@@ -215,19 +224,30 @@ vlc_module_begin ()
change_integer_range (0, 9)
change_private ()
change_safe ()
-#ifdef FIXME
- set_section (N_("Satellite (DVB-S) parameters"), NULL)
- add_integer ("dvb-satno", 0, SATNO_TEXT, SATNO_LONGTEXT, true)
- change_integer_list (satno_vlc, satno_user)
+ set_section (N_("DVB-S2 parameters"), NULL)
+ add_integer ("dvb-pilot", -1, PILOT_TEXT, PILOT_TEXT, true)
+ change_integer_list (auto_off_on_vlc, auto_off_on_user)
+ change_safe ()
+ add_integer ("dvb-rolloff", -1, ROLLOFF_TEXT, ROLLOFF_TEXT, true)
+ change_integer_list (rolloff_vlc, rolloff_user)
change_safe ()
- add_integer ("dvb-voltage", 13, VOLTAGE_TEXT, VOLTAGE_LONGTEXT, true)
- change_integer_list (voltage_vlc, voltage_user)
+ set_section (N_("Satellite equipment control"), NULL)
+ add_string ("dvb-polarization", "",
+ POLARIZATION_TEXT, POLARIZATION_LONGTEXT, false)
+ change_string_list (polarization_vlc, polarization_user, NULL)
change_safe ()
+ add_integer ("dvb-voltage", 13, " ", " ", true)
+ change_integer_range (0, 18)
+ change_private ()
+ change_safe ()
+#if 0 //def __linux__
add_bool ("dvb-high-voltage", false,
HIGH_VOLTAGE_TEXT, HIGH_VOLTAGE_LONGTEXT, false)
add_integer ("dvb-tone", -1, TONE_TEXT, TONE_LONGTEXT, true)
change_integer_list (tone_vlc, auto_off_on)
change_safe ()
+#endif
+#if 0
add_integer ("dvb-lnb-lof1", 0, LNB_LOF1_TEXT, LNB_LOF1_LONGTEXT, true)
change_integer_range (0, 0x7fffffff)
change_safe ()
@@ -237,14 +257,10 @@ vlc_module_begin ()
add_integer ("dvb-lnb-slof", 0, LNB_SLOF_TEXT, LNB_SLOF_LONGTEXT, true)
change_integer_range (0, 0x7fffffff)
change_safe ()
-#endif
- set_section (N_("DVB-S2 parameters"), NULL)
- add_integer ("dvb-pilot", -1, PILOT_TEXT, PILOT_TEXT, true)
- change_integer_list (auto_off_on_vlc, auto_off_on_user)
- change_safe ()
- add_integer ("dvb-rolloff", -1, ROLLOFF_TEXT, ROLLOFF_TEXT, true)
- change_integer_list (rolloff_vlc, rolloff_user)
+ add_integer ("dvb-satno", 0, SATNO_TEXT, SATNO_LONGTEXT, true)
+ change_integer_list (satno_vlc, satno_user)
change_safe ()
+#endif
vlc_module_end ()
struct access_sys_t
@@ -562,6 +578,40 @@ const delsys_t dvbc = { .setup = dvbc_setup };
/*** DVB-S ***/
+static char var_InheritPolarization (vlc_object_t *obj)
+{
+ char pol;
+ char *polstr = var_InheritString (obj, "dvb-polarization");
+ if (polstr != NULL)
+ {
+ pol = *polstr;
+ free (polstr);
+ if (unlikely(pol >= 'a' && pol <= 'z'))
+ pol -= 'a' - 'A';
+ return pol;
+ }
+
+ /* Backward compatibility with VLC for Linux < 1.2 */
+ unsigned voltage = var_InheritInteger (obj, "dvb-voltage");
+ switch (voltage)
+ {
+ case 13: pol = 'V'; break;
+ case 18: pol = 'H'; break;
+ default: return 0;
+ }
+
+ msg_Warn (obj, "\"voltage=%u\" option is obsolete. "
+ "Use \"polarization=%c\" instead.", voltage, pol);
+ return pol;
+}
+
+static int sec_setup (vlc_object_t *obj, dvb_device_t *dev)
+{
+ char pol = var_InheritPolarization (obj);
+
+ return dvb_set_sec (dev, pol);
+}
+
static int dvbs_setup (vlc_object_t *obj, dvb_device_t *dev, unsigned freq)
{
char *fec = var_InheritCodeRate (obj);
@@ -570,8 +620,8 @@ static int dvbs_setup (vlc_object_t *obj, dvb_device_t *dev, unsigned freq)
/* FIXME: adjust frequency (offset) */
int ret = dvb_set_dvbs (dev, freq, srate, fec);
free (fec);
-
- /* TODO: setup SEC */
+ if (ret == 0)
+ ret = sec_setup (obj, dev);
return ret;
}
@@ -583,10 +633,12 @@ static int dvbs2_setup (vlc_object_t *obj, dvb_device_t *dev, unsigned freq)
int pilot = var_InheritInteger (obj, "dvb-pilot");
int rolloff = var_InheritInteger (obj, "dvb-rolloff");
- /* FIXME: adjust frequency (offset)? SEC? */
+ /* FIXME: adjust frequency (offset)? */
int ret = dvb_set_dvbs2 (dev, freq, mod, srate, fec, pilot, rolloff);
free (fec);
free (mod);
+ if (ret == 0)
+ ret = sec_setup (obj, dev);
return ret;
}
diff --git a/modules/access/dtv/dtv.h b/modules/access/dtv/dtv.h
index 7b5d49a..c8ffb09 100644
--- a/modules/access/dtv/dtv.h
+++ b/modules/access/dtv/dtv.h
@@ -49,8 +49,7 @@ int dvb_set_dvbs (dvb_device_t *, uint32_t freq, uint32_t srate,
const char *fec);
int dvb_set_dvbs2 (dvb_device_t *, uint32_t freq, const char *mod,
uint32_t srate, const char *fec, int pilot, int rolloff);
-int dvb_set_sec (dvb_device_t *, bool tone, int voltage, bool high_voltage);
-/* XXX^^ */
+int dvb_set_sec (dvb_device_t *, char pol);
/* DVB-T */
int dvb_set_dvbt (dvb_device_t *, uint32_t freq, const char *mod,
diff --git a/modules/access/dtv/linux.c b/modules/access/dtv/linux.c
index 9416938..cadf494 100644
--- a/modules/access/dtv/linux.c
+++ b/modules/access/dtv/linux.c
@@ -536,6 +536,25 @@ int dvb_set_dvbc (dvb_device_t *d, uint32_t freq, const char *modstr,
/*** DVB-S ***/
+static unsigned dvb_parse_polarization (char pol)
+{
+ static const dvb_int_map_t tab[5] = {
+ { 0, SEC_VOLTAGE_OFF },
+ { 'H', SEC_VOLTAGE_18 },
+ { 'L', SEC_VOLTAGE_18 },
+ { 'R', SEC_VOLTAGE_13 },
+ { 'V', SEC_VOLTAGE_13 },
+ };
+ return dvb_parse_int (pol, tab, 5, SEC_VOLTAGE_OFF);
+}
+
+int dvb_set_sec (dvb_device_t *d, char pol)
+{
+ unsigned voltage = dvb_parse_polarization (pol);
+
+ return dvb_set_prop (d, DTV_VOLTAGE, voltage);
+}
+
int dvb_set_dvbs (dvb_device_t *d, uint32_t freq,
uint32_t srate, const char *fecstr)
{
More information about the vlc-commits
mailing list