[PATCH 2/2] refactored for user properties

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



---
 lib/include/dvb-fe.h                        |    4 +-
 lib/include/dvb-file.h                      |   13 +-
 lib/include/dvb-v5-std.h                    |   70 ++
 lib/include/libsat.h                        |    8 +-
 lib/libdvbv5/Makefile.am                    |    4 +-
 lib/libdvbv5/descriptors.c                  |    1 +
 lib/libdvbv5/dvb-fe.c                       |    2 +-
 lib/libdvbv5/dvb-file.c                     |   93 ++-
 lib/libdvbv5/dvb-legacy-channel-format.c    |    2 +
 lib/libdvbv5/{dvb-v5-std.h => dvb-v5-std.c} |   27 +-
 lib/libdvbv5/dvb-v5.c                       |  230 +++++++
 lib/libdvbv5/dvb-v5.h                       |  245 +-------
 lib/libdvbv5/dvb-zap-format.c               |    1 +
 lib/libdvbv5/dvb_frontend.h                 |  436 +++++++++++++
 lib/libdvbv5/gen_dvb_structs.pl             |  899 ++++++++++++++-------------
 lib/libdvbv5/libsat.c                       |    7 +-
 utils/dvb/dvbv5-scan.c                      |    5 +-
 17 files changed, 1331 insertions(+), 716 deletions(-)
 create mode 100644 lib/include/dvb-v5-std.h
 rename lib/libdvbv5/{dvb-v5-std.h => dvb-v5-std.c} (88%)
 create mode 100644 lib/libdvbv5/dvb-v5.c
 create mode 100644 lib/libdvbv5/dvb_frontend.h

diff --git a/lib/include/dvb-fe.h b/lib/include/dvb-fe.h
index fbb5ff0..28350d9 100644
--- a/lib/include/dvb-fe.h
+++ b/lib/include/dvb-fe.h
@@ -81,7 +81,7 @@ struct dvb_v5_fe_parms {
 	unsigned			freq_bpf;
 
 	/* Satellite specific stuff, used internally */
-	enum dvbsat_polarization        pol;
+	//enum dvb_sat_polarization       pol;
 	int				high_band;
 	unsigned			diseqc_wait;
 	unsigned			freq_offset;
@@ -164,7 +164,7 @@ int dvb_fe_diseqc_reply(struct dvb_v5_fe_parms *parms, unsigned *len, char *buf,
 
 extern const unsigned fe_bandwidth_name[8];
 extern const char *dvb_v5_name[46];
-extern const void *dvbv5_attr_names[];
+extern const void *dvb_v5_attr_names[];
 extern const char *delivery_system_name[20];
 
 #endif
diff --git a/lib/include/dvb-file.h b/lib/include/dvb-file.h
index b86d4bf..7a605b3 100644
--- a/lib/include/dvb-file.h
+++ b/lib/include/dvb-file.h
@@ -35,7 +35,7 @@ struct dvb_entry {
 
 	char *location;
 
-	enum dvbsat_polarization pol;
+//	enum dvbsat_polarization pol;
 	int sat_number;
 	unsigned freq_bpf;
 	unsigned diseqc_wait;
@@ -78,17 +78,6 @@ enum file_formats {
 
 #define PTABLE(a) .table = a, .size=ARRAY_SIZE(a)
 
-/* FAKE DTV codes, for internal usage */
-#define DTV_POLARIZATION        (DTV_MAX_COMMAND + 200)
-#define DTV_VIDEO_PID           (DTV_MAX_COMMAND + 201)
-#define DTV_AUDIO_PID           (DTV_MAX_COMMAND + 202)
-#define DTV_SERVICE_ID          (DTV_MAX_COMMAND + 203)
-#define DTV_CH_NAME             (DTV_MAX_COMMAND + 204)
-#define DTV_VCHANNEL            (DTV_MAX_COMMAND + 205)
-#define DTV_SAT_NUMBER          (DTV_MAX_COMMAND + 206)
-#define DTV_DISEQC_WAIT         (DTV_MAX_COMMAND + 207)
-#define DTV_DISEQC_LNB          (DTV_MAX_COMMAND + 208)
-#define DTV_FREQ_BPF            (DTV_MAX_COMMAND + 209)
 
 struct dvb_descriptors;
 
diff --git a/lib/include/dvb-v5-std.h b/lib/include/dvb-v5-std.h
new file mode 100644
index 0000000..1145734
--- /dev/null
+++ b/lib/include/dvb-v5-std.h
@@ -0,0 +1,70 @@
+/*
+ * Copyright (c) 2011-2012 - Mauro Carvalho Chehab <mchehab@xxxxxxxxxx>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation version 2
+ * of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ * Or, point your browser to http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ *
+ * Per-delivery system properties, according with the specs:
+ * 	http://linuxtv.org/downloads/v4l-dvb-apis/FE_GET_SET_PROPERTY.html
+ */
+#ifndef _DVB_V5_STD_H
+#define _DVB_V5_STD_H
+
+#include <stddef.h>
+#include "dvb-frontend.h"
+
+extern const unsigned int sys_dvbt_props[];
+extern const unsigned int sys_dvbt2_props[];
+extern const unsigned int sys_isdbt_props[];
+extern const unsigned int sys_atsc_props[];
+extern const unsigned int sys_dvbc_annex_ac_props[];
+extern const unsigned int sys_dvbc_annex_b_props[];
+extern const unsigned int sys_dvbs_props[];
+extern const unsigned int sys_dvbs2_props[];
+extern const unsigned int sys_turbo_props[];
+extern const unsigned int sys_isdbs_props[];
+extern const unsigned int *dvb_v5_delivery_system[];
+extern const void *dvb_v5_attr_names[];
+
+/* User DTV codes, for internal usage */
+
+#define DTV_USER_COMMAND_START 256
+
+#define DTV_POLARIZATION        (DTV_USER_COMMAND_START + 0)
+#define DTV_VIDEO_PID           (DTV_USER_COMMAND_START + 1)
+#define DTV_AUDIO_PID           (DTV_USER_COMMAND_START + 2)
+#define DTV_SERVICE_ID          (DTV_USER_COMMAND_START + 3)
+#define DTV_CH_NAME             (DTV_USER_COMMAND_START + 4)
+#define DTV_VCHANNEL            (DTV_USER_COMMAND_START + 5)
+#define DTV_SAT_NUMBER          (DTV_USER_COMMAND_START + 6)
+#define DTV_DISEQC_WAIT         (DTV_USER_COMMAND_START + 7)
+#define DTV_DISEQC_LNB          (DTV_USER_COMMAND_START + 8)
+#define DTV_FREQ_BPF            (DTV_USER_COMMAND_START + 9)
+#define DTV_MAX_USER_COMMAND    DTV_FREQ_BPF
+
+enum dvb_sat_polarization {
+	POLARIZATION_OFF	= 0,
+	POLARIZATION_H		= 1,
+	POLARIZATION_V		= 2,
+	POLARIZATION_L		= 3,
+	POLARIZATION_R		= 4,
+};
+
+extern const char *dvb_sat_pol_name[6];
+extern const char *dvb_user_name[2];
+extern const void *dvb_user_attr_names[];
+
+#endif
+
diff --git a/lib/include/libsat.h b/lib/include/libsat.h
index 42530ff..3879914 100644
--- a/lib/include/libsat.h
+++ b/lib/include/libsat.h
@@ -19,13 +19,7 @@
 #ifndef _LIBSAT_H
 #define _LIBSAT_H
 
-enum dvbsat_polarization {
-	POLARIZATION_OFF	= 0,
-	POLARIZATION_H		= 1,
-	POLARIZATION_V		= 2,
-	POLARIZATION_L		= 3,
-	POLARIZATION_R		= 4,
-};
+#include "dvb-v5-std.h"
 
 struct dvbsat_freqrange {
 	unsigned low, high;
diff --git a/lib/libdvbv5/Makefile.am b/lib/libdvbv5/Makefile.am
index 6f1545d..0a94311 100644
--- a/lib/libdvbv5/Makefile.am
+++ b/lib/libdvbv5/Makefile.am
@@ -4,7 +4,9 @@ libdvbv5_la_SOURCES = \
   dvb-demux.c ../include/dvb-demux.h \
   dvb-fe.c ../include/dvb-fe.h \
   dvb-file.c ../include/dvb-file.h \
-  ../include/dvb-frontend.h  dvb-v5.h  dvb-v5-std.h \
+  ../include/dvb-frontend.h \
+  dvb-v5.h dvb-v5.c \
+  ../include/dvb-v5-std.h dvb-v5-std.c \
   dvb-legacy-channel-format.c \
   dvb-zap-format.c \
   descriptors.c descriptors.h \
diff --git a/lib/libdvbv5/descriptors.c b/lib/libdvbv5/descriptors.c
index 09e9245..549965a 100644
--- a/lib/libdvbv5/descriptors.c
+++ b/lib/libdvbv5/descriptors.c
@@ -26,6 +26,7 @@
 #include "descriptors.h"
 #include "parse_string.h"
 #include "dvb-frontend.h"
+#include "dvb-v5-std.h"
 
 static char *default_charset = "iso-8859-1";
 static char *output_charset = "utf-8";
diff --git a/lib/libdvbv5/dvb-fe.c b/lib/libdvbv5/dvb-fe.c
index 663caa6..91713e2 100644
--- a/lib/libdvbv5/dvb-fe.c
+++ b/lib/libdvbv5/dvb-fe.c
@@ -385,7 +385,7 @@ void dvb_fe_prt_parms(FILE *fp, const struct dvb_v5_fe_parms *parms)
 	int i;
 
 	for (i = 0; i < parms->n_props; i++) {
-		const char * const *attr_name = dvbv5_attr_names[parms->dvb_prop[i].cmd];
+		const char * const *attr_name = dvb_v5_attr_names[parms->dvb_prop[i].cmd];
 		if (attr_name) {
 			int j;
 
diff --git a/lib/libdvbv5/dvb-file.c b/lib/libdvbv5/dvb-file.c
index b54c049..d7cf13e 100644
--- a/lib/libdvbv5/dvb-file.c
+++ b/lib/libdvbv5/dvb-file.c
@@ -24,6 +24,7 @@
 #include <unistd.h>
 
 #include "dvb-file.h"
+#include "dvb-v5-std.h"
 #include "libscan.h"
 
 static const char *parm_name(const struct parse_table *table)
@@ -150,12 +151,12 @@ struct dvb_file *parse_format_oneline(const char *fname,
 				}
 				if (table->prop == DTV_BANDWIDTH_HZ)
 					j = fe_bandwidth_name[j];
-				if (table->prop == DTV_POLARIZATION) {
-					entry->pol = j;
-				} else {
+				/*if (table->prop == DTV_POLARIZATION) {*/
+					/*entry->pol = j;*/
+				/*} else {*/
 					entry->props[entry->n_props].cmd = table->prop;
 					entry->props[entry->n_props++].u.data = j;
-				}
+				/*}*/
 			} else {
 				long v = atol(p);
 				if (table->mult_factor)
@@ -369,13 +370,6 @@ error:
 }
 
 
-static const char *pol_name[] = {
-	[POLARIZATION_H] = "HORIZONTAL",
-	[POLARIZATION_V] = "VERTICAL",
-	[POLARIZATION_L] = "LEFT",
-	[POLARIZATION_R] = "RIGHT",
-};
-
 #define CHANNEL "CHANNEL"
 
 static int fill_entry(struct dvb_entry *entry, char *key, char *value)
@@ -383,18 +377,17 @@ static int fill_entry(struct dvb_entry *entry, char *key, char *value)
 	int i, j, len, type = 0;
 	int is_video = 0, is_audio = 0, n_prop;
 	uint16_t *pid = NULL;
-	char *p;
+        char *p;
 
+	/* Handle the DVBv5 DTV_foo properties */
 	for (i = 0; i < ARRAY_SIZE(dvb_v5_name); i++) {
 		if (!dvb_v5_name[i])
 			continue;
 		if (!strcasecmp(key, dvb_v5_name[i]))
 			break;
 	}
-
-	/* Handle the DVBv5 DTV_foo properties */
 	if (i < ARRAY_SIZE(dvb_v5_name)) {
-		const char * const *attr_name = dvbv5_attr_names[i];
+		const char * const *attr_name = dvb_v5_attr_names[i];
 		n_prop = entry->n_props;
 		entry->props[n_prop].cmd = i;
 		if (!attr_name || !*attr_name)
@@ -411,6 +404,31 @@ static int fill_entry(struct dvb_entry *entry, char *key, char *value)
 		return 0;
 	}
 
+	/* Handle the DVB extra DTV_foo properties */
+	for (i = 0; i < ARRAY_SIZE(dvb_user_name); i++) {
+		if (!dvb_user_name[i])
+			continue;
+		if (!strcasecmp(key, dvb_user_name[i]))
+			break;
+	}
+	if (i < ARRAY_SIZE(dvb_user_name)) {
+		const char * const *attr_name = dvb_user_attr_names[i];
+		n_prop = entry->n_props;
+		entry->props[n_prop].cmd = i + DTV_USER_COMMAND_START;
+		if (!attr_name || !*attr_name)
+			entry->props[n_prop].u.data = atol(value);
+		else {
+			for (j = 0; attr_name[j]; j++)
+				if (!strcasecmp(value, attr_name[j]))
+					break;
+			if (!attr_name[j])
+				return -2;
+			entry->props[n_prop].u.data = j + DTV_USER_COMMAND_START;
+		}
+		entry->n_props++;
+		return 0;
+	}
+
 	/* Handle the other properties */
 
 	if (!strcasecmp(key, "SERVICE_ID")) {
@@ -447,7 +465,7 @@ static int fill_entry(struct dvb_entry *entry, char *key, char *value)
 		is_video = 1;
 	else if (!strcasecmp(key, "AUDIO_PID"))
 		is_audio = 1;
-	else if (!strcasecmp(key, "POLARIZATION")) {
+	/*else if (!strcasecmp(key, "POLARIZATION")) {
 		entry->service_id = atol(value);
 		for (j = 0; ARRAY_SIZE(pol_name); j++)
 			if (!strcasecmp(value, pol_name[j]))
@@ -456,7 +474,7 @@ static int fill_entry(struct dvb_entry *entry, char *key, char *value)
 			return -2;
 		entry->pol = j;
 		return 0;
-	} else if (!strncasecmp(key,"PID_", 4)){
+	}*/ else if (!strncasecmp(key,"PID_", 4)){
 		type = strtol(&key[4], NULL, 16);
 		if (!type)
 			return 0;
@@ -666,10 +684,10 @@ int write_dvb_file(const char *fname, struct dvb_file *dvb_file)
 			fprintf(fp, "\n");
 		}
 
-		if (entry->pol != POLARIZATION_OFF) {
-			fprintf(fp, "\tPOLARIZATION = %s\n",
-				pol_name[entry->pol]);
-		}
+		/*if (entry->pol != POLARIZATION_OFF) {*/
+			/*fprintf(fp, "\tPOLARIZATION = %s\n",*/
+				/*pol_name[entry->pol]);*/
+		/*}*/
 
 		if (entry->sat_number >= 0) {
 			fprintf(fp, "\tSAT_NUMBER = %d\n",
@@ -689,7 +707,7 @@ int write_dvb_file(const char *fname, struct dvb_file *dvb_file)
 				fprintf(fp, "\tLNB = %s\n", entry->lnb);
 
 		for (i = 0; i < entry->n_props; i++) {
-			const char * const *attr_name = dvbv5_attr_names[entry->props[i].cmd];
+			const char * const *attr_name = dvb_v5_attr_names[entry->props[i].cmd];
 			if (attr_name) {
 				int j;
 
@@ -710,6 +728,31 @@ int write_dvb_file(const char *fname, struct dvb_file *dvb_file)
 					*attr_name);
 		}
 		fprintf(fp, "\n");
+
+		for (i = 0; i < entry->n_props; i++) {
+                  if (entry->props[i].cmd < DTV_USER_COMMAND_START)
+                    continue;
+			const char * const *attr_name = dvb_user_attr_names[entry->props[i].cmd - DTV_USER_COMMAND_START];
+			if (attr_name) {
+				int j;
+
+				for (j = 0; j < entry->props[i].u.data; j++) {
+					if (!*attr_name)
+						break;
+					attr_name++;
+				}
+			}
+
+			if (!attr_name || !*attr_name)
+				fprintf(fp, "\t%s = %u\n",
+					dvb_user_name[entry->props[i].cmd - DTV_USER_COMMAND_START],
+					entry->props[i].u.data);
+			else
+				fprintf(fp, "\t%s = %s\n",
+					dvb_user_name[entry->props[i].cmd - DTV_USER_COMMAND_START],
+					*attr_name);
+		}
+		fprintf(fp, "\n");
 	}
 	fclose(fp);
 	return 0;
@@ -806,7 +849,9 @@ static void handle_std_specific_parms(struct dvb_entry *entry,
 				 nit_table->frequency[0]);
 		store_entry_prop(entry, DTV_MODULATION,
 				 nit_table->modulation);
-		entry->pol = nit_table->pol;
+		/*entry->pol = nit_table->pol;*/
+		store_entry_prop(entry, DTV_POLARIZATION,
+				 nit_table->pol);
 		store_entry_prop(entry, DTV_DELIVERY_SYSTEM,
 				 nit_table->delivery_system);
 		store_entry_prop(entry, DTV_SYMBOL_RATE,
@@ -936,7 +981,7 @@ int store_dvb_channel(struct dvb_file **dvb_file,
 
 		entry->vchannel = dvb_vchannel(dvb_desc, i);
 
-		entry->pol = parms->pol;
+		/*entry->pol = parms->pol;*/
 		entry->sat_number = parms->sat_number;
 		entry->freq_bpf = parms->freq_bpf;
 		entry->diseqc_wait = parms->diseqc_wait;
diff --git a/lib/libdvbv5/dvb-legacy-channel-format.c b/lib/libdvbv5/dvb-legacy-channel-format.c
index 53f821b..d05e3d2 100644
--- a/lib/libdvbv5/dvb-legacy-channel-format.c
+++ b/lib/libdvbv5/dvb-legacy-channel-format.c
@@ -22,6 +22,7 @@
 #include <string.h>
 
 #include "dvb-file.h"
+#include "dvb-v5-std.h"
 
 /*
  * Standard channel.conf format for DVB-T, DVB-C, DVB-S and ATSC
@@ -97,6 +98,7 @@ static const char *channel_parse_hierarchy[] = {
 };
 
 static const char *channel_parse_polarization[] = {
+	[POLARIZATION_OFF] = "-",
 	[POLARIZATION_H] = "H",
 	[POLARIZATION_V] = "V",
 	[POLARIZATION_L] = "L",
diff --git a/lib/libdvbv5/dvb-v5-std.h b/lib/libdvbv5/dvb-v5-std.c
similarity index 88%
rename from lib/libdvbv5/dvb-v5-std.h
rename to lib/libdvbv5/dvb-v5-std.c
index 045162c..ec588b1 100644
--- a/lib/libdvbv5/dvb-v5-std.h
+++ b/lib/libdvbv5/dvb-v5-std.c
@@ -19,11 +19,9 @@
  * Per-delivery system properties, according with the specs:
  * 	http://linuxtv.org/downloads/v4l-dvb-apis/FE_GET_SET_PROPERTY.html
  */
-#ifndef _DVB_V5_STD_H
-#define _DVB_V5_STD_H
 
-#include <stddef.h>
-#include "dvb-frontend.h"
+#include "dvb-v5-std.h"
+#include "dvb-v5.h"
 
 const unsigned int sys_dvbt_props[] = {
 	DTV_FREQUENCY,
@@ -166,7 +164,7 @@ const unsigned int *dvb_v5_delivery_system[] = {
 	[SYS_UNDEFINED] =     NULL,
 };
 
-const void *dvbv5_attr_names[] = {
+const void *dvb_v5_attr_names[] = {
 	[0 ...DTV_MAX_COMMAND ] = NULL,
 	[DTV_CODE_RATE_HP]		= fe_code_rate_name,
 	[DTV_CODE_RATE_LP]		= fe_code_rate_name,
@@ -189,5 +187,22 @@ const void *dvbv5_attr_names[] = {
 	[DTV_DELIVERY_SYSTEM]		= delivery_system_name,
 };
 
-#endif
+const char *dvb_sat_pol_name[6] = {
+	[POLARIZATION_OFF] = "OFF",
+	[POLARIZATION_H] = "HORIZONTAL",
+	[POLARIZATION_V] = "VERTICAL",
+	[POLARIZATION_L] = "LEFT",
+	[POLARIZATION_R] = "RIGHT",
+        [5] = NULL,
+};
+
+const char *dvb_user_name[2] = {
+	[DTV_POLARIZATION - DTV_USER_COMMAND_START] =                    "POLARIZATION",
+        [1] = NULL,
+};
+
+const void *dvb_user_attr_names[] = {
+	[0 ... DTV_MAX_USER_COMMAND - DTV_USER_COMMAND_START] = NULL,
+	[DTV_POLARIZATION - DTV_USER_COMMAND_START]           = dvb_sat_pol_name,
+};
 
diff --git a/lib/libdvbv5/dvb-v5.c b/lib/libdvbv5/dvb-v5.c
new file mode 100644
index 0000000..7b9760c
--- /dev/null
+++ b/lib/libdvbv5/dvb-v5.c
@@ -0,0 +1,230 @@
+/*
+ * File auto-generated from the kernel sources. Please, don't edit it
+ */
+#include "dvb-v5.h"
+struct fe_caps_name fe_caps_name[30] = {
+	{ FE_CAN_2G_MODULATION,          "CAN_2G_MODULATION" },
+	{ FE_CAN_8VSB,                   "CAN_8VSB" },
+	{ FE_CAN_16VSB,                  "CAN_16VSB" },
+	{ FE_CAN_BANDWIDTH_AUTO,         "CAN_BANDWIDTH_AUTO" },
+	{ FE_CAN_FEC_1_2,                "CAN_FEC_1_2" },
+	{ FE_CAN_FEC_2_3,                "CAN_FEC_2_3" },
+	{ FE_CAN_FEC_3_4,                "CAN_FEC_3_4" },
+	{ FE_CAN_FEC_4_5,                "CAN_FEC_4_5" },
+	{ FE_CAN_FEC_5_6,                "CAN_FEC_5_6" },
+	{ FE_CAN_FEC_6_7,                "CAN_FEC_6_7" },
+	{ FE_CAN_FEC_7_8,                "CAN_FEC_7_8" },
+	{ FE_CAN_FEC_8_9,                "CAN_FEC_8_9" },
+	{ FE_CAN_FEC_AUTO,               "CAN_FEC_AUTO" },
+	{ FE_CAN_GUARD_INTERVAL_AUTO,    "CAN_GUARD_INTERVAL_AUTO" },
+	{ FE_CAN_HIERARCHY_AUTO,         "CAN_HIERARCHY_AUTO" },
+	{ FE_CAN_INVERSION_AUTO,         "CAN_INVERSION_AUTO" },
+	{ FE_CAN_MUTE_TS,                "CAN_MUTE_TS" },
+	{ FE_CAN_QAM_16,                 "CAN_QAM_16" },
+	{ FE_CAN_QAM_32,                 "CAN_QAM_32" },
+	{ FE_CAN_QAM_64,                 "CAN_QAM_64" },
+	{ FE_CAN_QAM_128,                "CAN_QAM_128" },
+	{ FE_CAN_QAM_256,                "CAN_QAM_256" },
+	{ FE_CAN_QAM_AUTO,               "CAN_QAM_AUTO" },
+	{ FE_CAN_QPSK,                   "CAN_QPSK" },
+	{ FE_CAN_RECOVER,                "CAN_RECOVER" },
+	{ FE_CAN_TRANSMISSION_MODE_AUTO, "CAN_TRANSMISSION_MODE_AUTO" },
+	{ FE_CAN_TURBO_FEC,              "CAN_TURBO_FEC" },
+	{ FE_HAS_EXTENDED_CAPS,          "HAS_EXTENDED_CAPS" },
+	{ FE_IS_STUPID,                  "IS_STUPID" },
+	{ FE_NEEDS_BENDING,              "NEEDS_BENDING" },
+};
+
+struct fe_status_name fe_status_name[7] = {
+	{ FE_HAS_CARRIER, "CARRIER" },
+	{ FE_HAS_LOCK,    "LOCK" },
+	{ FE_HAS_SIGNAL,  "SIGNAL" },
+	{ FE_HAS_SYNC,    "SYNC" },
+	{ FE_HAS_VITERBI, "VITERBI" },
+	{ FE_REINIT,      "REINIT" },
+	{ FE_TIMEDOUT,    "TIMEDOUT" },
+};
+
+const char *fe_code_rate_name[13] = {
+	[FEC_1_2] =  "1/2",
+	[FEC_2_3] =  "2/3",
+	[FEC_3_4] =  "3/4",
+	[FEC_3_5] =  "3/5",
+	[FEC_4_5] =  "4/5",
+	[FEC_5_6] =  "5/6",
+	[FEC_6_7] =  "6/7",
+	[FEC_7_8] =  "7/8",
+	[FEC_8_9] =  "8/9",
+	[FEC_9_10] = "9/10",
+	[FEC_AUTO] = "AUTO",
+	[FEC_NONE] = "NONE",
+	[12] = NULL,
+};
+
+const char *fe_modulation_name[14] = {
+	[APSK_16] =  "APSK/16",
+	[APSK_32] =  "APSK/32",
+	[DQPSK] =    "DQPSK",
+	[PSK_8] =    "PSK/8",
+	[QAM_16] =   "QAM/16",
+	[QAM_32] =   "QAM/32",
+	[QAM_64] =   "QAM/64",
+	[QAM_128] =  "QAM/128",
+	[QAM_256] =  "QAM/256",
+	[QAM_AUTO] = "QAM/AUTO",
+	[QPSK] =     "QPSK",
+	[VSB_8] =    "VSB/8",
+	[VSB_16] =   "VSB/16",
+	[13] = NULL,
+};
+
+const char *fe_transmission_mode_name[8] = {
+	[TRANSMISSION_MODE_1K] =   "1K",
+	[TRANSMISSION_MODE_2K] =   "2K",
+	[TRANSMISSION_MODE_4K] =   "4K",
+	[TRANSMISSION_MODE_8K] =   "8K",
+	[TRANSMISSION_MODE_16K] =  "16K",
+	[TRANSMISSION_MODE_32K] =  "32K",
+	[TRANSMISSION_MODE_AUTO] = "AUTO",
+	[7] = NULL,
+};
+
+const unsigned fe_bandwidth_name[8] = {
+	[BANDWIDTH_1_712_MHZ] = 1712000,
+	[BANDWIDTH_5_MHZ] =     5000000,
+	[BANDWIDTH_6_MHZ] =     6000000,
+	[BANDWIDTH_7_MHZ] =     7000000,
+	[BANDWIDTH_8_MHZ] =     8000000,
+	[BANDWIDTH_10_MHZ] =    10000000,
+	[BANDWIDTH_AUTO] =      0,
+	[7] = 0,
+};
+
+const char *fe_guard_interval_name[9] = {
+	[GUARD_INTERVAL_1_4] =    "1/4",
+	[GUARD_INTERVAL_1_8] =    "1/8",
+	[GUARD_INTERVAL_1_16] =   "1/16",
+	[GUARD_INTERVAL_1_32] =   "1/32",
+	[GUARD_INTERVAL_1_128] =  "1/128",
+	[GUARD_INTERVAL_19_128] = "19/128",
+	[GUARD_INTERVAL_19_256] = "19/256",
+	[GUARD_INTERVAL_AUTO] =   "AUTO",
+	[8] = NULL,
+};
+
+const char *fe_hierarchy_name[6] = {
+	[HIERARCHY_1] =    "1",
+	[HIERARCHY_2] =    "2",
+	[HIERARCHY_4] =    "4",
+	[HIERARCHY_AUTO] = "AUTO",
+	[HIERARCHY_NONE] = "NONE",
+	[5] = NULL,
+};
+
+const char *fe_voltage_name[4] = {
+	[SEC_VOLTAGE_13] =  "13",
+	[SEC_VOLTAGE_18] =  "18",
+	[SEC_VOLTAGE_OFF] = "OFF",
+	[3] = NULL,
+};
+
+const char *fe_tone_name[3] = {
+	[SEC_TONE_OFF] = "OFF",
+	[SEC_TONE_ON] =  "ON",
+	[2] = NULL,
+};
+
+const char *fe_inversion_name[4] = {
+	[INVERSION_AUTO] = "AUTO",
+	[INVERSION_OFF] =  "OFF",
+	[INVERSION_ON] =   "ON",
+	[3] = NULL,
+};
+
+const char *fe_pilot_name[4] = {
+	[PILOT_AUTO] = "AUTO",
+	[PILOT_OFF] =  "OFF",
+	[PILOT_ON] =   "ON",
+	[3] = NULL,
+};
+
+const char *fe_rolloff_name[5] = {
+	[ROLLOFF_20] =   "20",
+	[ROLLOFF_25] =   "25",
+	[ROLLOFF_35] =   "35",
+	[ROLLOFF_AUTO] = "AUTO",
+	[4] = NULL,
+};
+
+const char *dvb_v5_name[46] = {
+	[DTV_API_VERSION] =                    "API_VERSION",
+	[DTV_BANDWIDTH_HZ] =                   "BANDWIDTH_HZ",
+	[DTV_CLEAR] =                          "CLEAR",
+	[DTV_CODE_RATE_HP] =                   "CODE_RATE_HP",
+	[DTV_CODE_RATE_LP] =                   "CODE_RATE_LP",
+	[DTV_DELIVERY_SYSTEM] =                "DELIVERY_SYSTEM",
+	[DTV_DISEQC_MASTER] =                  "DISEQC_MASTER",
+	[DTV_DISEQC_SLAVE_REPLY] =             "DISEQC_SLAVE_REPLY",
+	[DTV_DVBT2_PLP_ID] =                   "DVBT2_PLP_ID",
+	[DTV_ENUM_DELSYS] =                    "ENUM_DELSYS",
+	[DTV_FE_CAPABILITY] =                  "FE_CAPABILITY",
+	[DTV_FE_CAPABILITY_COUNT] =            "FE_CAPABILITY_COUNT",
+	[DTV_FREQUENCY] =                      "FREQUENCY",
+	[DTV_GUARD_INTERVAL] =                 "GUARD_INTERVAL",
+	[DTV_HIERARCHY] =                      "HIERARCHY",
+	[DTV_INNER_FEC] =                      "INNER_FEC",
+	[DTV_INVERSION] =                      "INVERSION",
+	[DTV_ISDBS_TS_ID] =                    "ISDBS_TS_ID",
+	[DTV_ISDBT_LAYERA_FEC] =               "ISDBT_LAYERA_FEC",
+	[DTV_ISDBT_LAYERA_MODULATION] =        "ISDBT_LAYERA_MODULATION",
+	[DTV_ISDBT_LAYERA_SEGMENT_COUNT] =     "ISDBT_LAYERA_SEGMENT_COUNT",
+	[DTV_ISDBT_LAYERA_TIME_INTERLEAVING] = "ISDBT_LAYERA_TIME_INTERLEAVING",
+	[DTV_ISDBT_LAYERB_FEC] =               "ISDBT_LAYERB_FEC",
+	[DTV_ISDBT_LAYERB_MODULATION] =        "ISDBT_LAYERB_MODULATION",
+	[DTV_ISDBT_LAYERB_SEGMENT_COUNT] =     "ISDBT_LAYERB_SEGMENT_COUNT",
+	[DTV_ISDBT_LAYERB_TIME_INTERLEAVING] = "ISDBT_LAYERB_TIME_INTERLEAVING",
+	[DTV_ISDBT_LAYERC_FEC] =               "ISDBT_LAYERC_FEC",
+	[DTV_ISDBT_LAYERC_MODULATION] =        "ISDBT_LAYERC_MODULATION",
+	[DTV_ISDBT_LAYERC_SEGMENT_COUNT] =     "ISDBT_LAYERC_SEGMENT_COUNT",
+	[DTV_ISDBT_LAYERC_TIME_INTERLEAVING] = "ISDBT_LAYERC_TIME_INTERLEAVING",
+	[DTV_ISDBT_LAYER_ENABLED] =            "ISDBT_LAYER_ENABLED",
+	[DTV_ISDBT_PARTIAL_RECEPTION] =        "ISDBT_PARTIAL_RECEPTION",
+	[DTV_ISDBT_SB_SEGMENT_COUNT] =         "ISDBT_SB_SEGMENT_COUNT",
+	[DTV_ISDBT_SB_SEGMENT_IDX] =           "ISDBT_SB_SEGMENT_IDX",
+	[DTV_ISDBT_SB_SUBCHANNEL_ID] =         "ISDBT_SB_SUBCHANNEL_ID",
+	[DTV_ISDBT_SOUND_BROADCASTING] =       "ISDBT_SOUND_BROADCASTING",
+	[DTV_MODULATION] =                     "MODULATION",
+	[DTV_PILOT] =                          "PILOT",
+	[DTV_ROLLOFF] =                        "ROLLOFF",
+	[DTV_SYMBOL_RATE] =                    "SYMBOL_RATE",
+	[DTV_TONE] =                           "TONE",
+	[DTV_TRANSMISSION_MODE] =              "TRANSMISSION_MODE",
+	[DTV_TUNE] =                           "TUNE",
+	[DTV_UNDEFINED] =                      "UNDEFINED",
+	[DTV_VOLTAGE] =                        "VOLTAGE",
+	[45] = NULL,
+};
+
+const char *delivery_system_name[20] = {
+	[SYS_ATSC] =         "ATSC",
+	[SYS_ATSCMH] =       "ATSCMH",
+	[SYS_CMMB] =         "CMMB",
+	[SYS_DAB] =          "DAB",
+	[SYS_DMBTH] =        "DMBTH",
+	[SYS_DSS] =          "DSS",
+	[SYS_DVBC_ANNEX_A] = "DVBC/ANNEX_A",
+	[SYS_DVBC_ANNEX_B] = "DVBC/ANNEX_B",
+	[SYS_DVBC_ANNEX_C] = "DVBC/ANNEX_C",
+	[SYS_DVBH] =         "DVBH",
+	[SYS_DVBS] =         "DVBS",
+	[SYS_DVBS2] =        "DVBS2",
+	[SYS_DVBT] =         "DVBT",
+	[SYS_DVBT2] =        "DVBT2",
+	[SYS_ISDBC] =        "ISDBC",
+	[SYS_ISDBS] =        "ISDBS",
+	[SYS_ISDBT] =        "ISDBT",
+	[SYS_TURBO] =        "TURBO",
+	[SYS_UNDEFINED] =    "UNDEFINED",
+	[19] = NULL,
+};
+
diff --git a/lib/libdvbv5/dvb-v5.h b/lib/libdvbv5/dvb-v5.h
index 6610552..e389519 100644
--- a/lib/libdvbv5/dvb-v5.h
+++ b/lib/libdvbv5/dvb-v5.h
@@ -3,241 +3,28 @@
  */
 #ifndef _DVB_V5_CONSTS_H
 #define _DVB_V5_CONSTS_H
-
-#include <stddef.h>
-#include "dvb-frontend.h"
-
+#include "dvb_frontend.h"
 struct fe_caps_name {
 	unsigned  idx;
 	char *name;
-} fe_caps_name[30] = {
-	{ FE_CAN_2G_MODULATION,          "CAN_2G_MODULATION" },
-	{ FE_CAN_8VSB,                   "CAN_8VSB" },
-	{ FE_CAN_16VSB,                  "CAN_16VSB" },
-	{ FE_CAN_BANDWIDTH_AUTO,         "CAN_BANDWIDTH_AUTO" },
-	{ FE_CAN_FEC_1_2,                "CAN_FEC_1_2" },
-	{ FE_CAN_FEC_2_3,                "CAN_FEC_2_3" },
-	{ FE_CAN_FEC_3_4,                "CAN_FEC_3_4" },
-	{ FE_CAN_FEC_4_5,                "CAN_FEC_4_5" },
-	{ FE_CAN_FEC_5_6,                "CAN_FEC_5_6" },
-	{ FE_CAN_FEC_6_7,                "CAN_FEC_6_7" },
-	{ FE_CAN_FEC_7_8,                "CAN_FEC_7_8" },
-	{ FE_CAN_FEC_8_9,                "CAN_FEC_8_9" },
-	{ FE_CAN_FEC_AUTO,               "CAN_FEC_AUTO" },
-	{ FE_CAN_GUARD_INTERVAL_AUTO,    "CAN_GUARD_INTERVAL_AUTO" },
-	{ FE_CAN_HIERARCHY_AUTO,         "CAN_HIERARCHY_AUTO" },
-	{ FE_CAN_INVERSION_AUTO,         "CAN_INVERSION_AUTO" },
-	{ FE_CAN_MUTE_TS,                "CAN_MUTE_TS" },
-	{ FE_CAN_QAM_16,                 "CAN_QAM_16" },
-	{ FE_CAN_QAM_32,                 "CAN_QAM_32" },
-	{ FE_CAN_QAM_64,                 "CAN_QAM_64" },
-	{ FE_CAN_QAM_128,                "CAN_QAM_128" },
-	{ FE_CAN_QAM_256,                "CAN_QAM_256" },
-	{ FE_CAN_QAM_AUTO,               "CAN_QAM_AUTO" },
-	{ FE_CAN_QPSK,                   "CAN_QPSK" },
-	{ FE_CAN_RECOVER,                "CAN_RECOVER" },
-	{ FE_CAN_TRANSMISSION_MODE_AUTO, "CAN_TRANSMISSION_MODE_AUTO" },
-	{ FE_CAN_TURBO_FEC,              "CAN_TURBO_FEC" },
-	{ FE_HAS_EXTENDED_CAPS,          "HAS_EXTENDED_CAPS" },
-	{ FE_IS_STUPID,                  "IS_STUPID" },
-	{ FE_NEEDS_BENDING,              "NEEDS_BENDING" },
 };
-
+extern struct fe_caps_name fe_caps_name[30];
 struct fe_status_name {
 	unsigned  idx;
 	char *name;
-} fe_status_name[7] = {
-	{ FE_HAS_CARRIER, "CARRIER" },
-	{ FE_HAS_LOCK,    "LOCK" },
-	{ FE_HAS_SIGNAL,  "SIGNAL" },
-	{ FE_HAS_SYNC,    "SYNC" },
-	{ FE_HAS_VITERBI, "VITERBI" },
-	{ FE_REINIT,      "REINIT" },
-	{ FE_TIMEDOUT,    "TIMEDOUT" },
 };
-
-const char *fe_code_rate_name[13] = {
-	[FEC_1_2] =  "1/2",
-	[FEC_2_3] =  "2/3",
-	[FEC_3_4] =  "3/4",
-	[FEC_3_5] =  "3/5",
-	[FEC_4_5] =  "4/5",
-	[FEC_5_6] =  "5/6",
-	[FEC_6_7] =  "6/7",
-	[FEC_7_8] =  "7/8",
-	[FEC_8_9] =  "8/9",
-	[FEC_9_10] = "9/10",
-	[FEC_AUTO] = "AUTO",
-	[FEC_NONE] = "NONE",
-	[12] = NULL,
-};
-
-const char *fe_modulation_name[14] = {
-	[APSK_16] =  "APSK/16",
-	[APSK_32] =  "APSK/32",
-	[DQPSK] =    "DQPSK",
-	[PSK_8] =    "PSK/8",
-	[QAM_16] =   "QAM/16",
-	[QAM_32] =   "QAM/32",
-	[QAM_64] =   "QAM/64",
-	[QAM_128] =  "QAM/128",
-	[QAM_256] =  "QAM/256",
-	[QAM_AUTO] = "QAM/AUTO",
-	[QPSK] =     "QPSK",
-	[VSB_8] =    "VSB/8",
-	[VSB_16] =   "VSB/16",
-	[13] = NULL,
-};
-
-const char *fe_transmission_mode_name[8] = {
-	[TRANSMISSION_MODE_1K] =   "1K",
-	[TRANSMISSION_MODE_2K] =   "2K",
-	[TRANSMISSION_MODE_4K] =   "4K",
-	[TRANSMISSION_MODE_8K] =   "8K",
-	[TRANSMISSION_MODE_16K] =  "16K",
-	[TRANSMISSION_MODE_32K] =  "32K",
-	[TRANSMISSION_MODE_AUTO] = "AUTO",
-	[7] = NULL,
-};
-
-const unsigned fe_bandwidth_name[8] = {
-	[BANDWIDTH_1_712_MHZ] = 1712000,
-	[BANDWIDTH_5_MHZ] =     5000000,
-	[BANDWIDTH_6_MHZ] =     6000000,
-	[BANDWIDTH_7_MHZ] =     7000000,
-	[BANDWIDTH_8_MHZ] =     8000000,
-	[BANDWIDTH_10_MHZ] =    10000000,
-	[BANDWIDTH_AUTO] =      0,
-	[7] = 0,
-};
-
-const char *fe_guard_interval_name[9] = {
-	[GUARD_INTERVAL_1_4] =    "1/4",
-	[GUARD_INTERVAL_1_8] =    "1/8",
-	[GUARD_INTERVAL_1_16] =   "1/16",
-	[GUARD_INTERVAL_1_32] =   "1/32",
-	[GUARD_INTERVAL_1_128] =  "1/128",
-	[GUARD_INTERVAL_19_128] = "19/128",
-	[GUARD_INTERVAL_19_256] = "19/256",
-	[GUARD_INTERVAL_AUTO] =   "AUTO",
-	[8] = NULL,
-};
-
-const char *fe_hierarchy_name[6] = {
-	[HIERARCHY_1] =    "1",
-	[HIERARCHY_2] =    "2",
-	[HIERARCHY_4] =    "4",
-	[HIERARCHY_AUTO] = "AUTO",
-	[HIERARCHY_NONE] = "NONE",
-	[5] = NULL,
-};
-
-const char *fe_voltage_name[4] = {
-	[SEC_VOLTAGE_13] =  "13",
-	[SEC_VOLTAGE_18] =  "18",
-	[SEC_VOLTAGE_OFF] = "OFF",
-	[3] = NULL,
-};
-
-const char *fe_tone_name[3] = {
-	[SEC_TONE_OFF] = "OFF",
-	[SEC_TONE_ON] =  "ON",
-	[2] = NULL,
-};
-
-const char *fe_inversion_name[4] = {
-	[INVERSION_AUTO] = "AUTO",
-	[INVERSION_OFF] =  "OFF",
-	[INVERSION_ON] =   "ON",
-	[3] = NULL,
-};
-
-const char *fe_pilot_name[4] = {
-	[PILOT_AUTO] = "AUTO",
-	[PILOT_OFF] =  "OFF",
-	[PILOT_ON] =   "ON",
-	[3] = NULL,
-};
-
-const char *fe_rolloff_name[5] = {
-	[ROLLOFF_20] =   "20",
-	[ROLLOFF_25] =   "25",
-	[ROLLOFF_35] =   "35",
-	[ROLLOFF_AUTO] = "AUTO",
-	[4] = NULL,
-};
-
-const char *dvb_v5_name[46] = {
-	[DTV_API_VERSION] =                    "API_VERSION",
-	[DTV_BANDWIDTH_HZ] =                   "BANDWIDTH_HZ",
-	[DTV_CLEAR] =                          "CLEAR",
-	[DTV_CODE_RATE_HP] =                   "CODE_RATE_HP",
-	[DTV_CODE_RATE_LP] =                   "CODE_RATE_LP",
-	[DTV_DELIVERY_SYSTEM] =                "DELIVERY_SYSTEM",
-	[DTV_DISEQC_MASTER] =                  "DISEQC_MASTER",
-	[DTV_DISEQC_SLAVE_REPLY] =             "DISEQC_SLAVE_REPLY",
-	[DTV_DVBT2_PLP_ID] =                   "DVBT2_PLP_ID",
-	[DTV_ENUM_DELSYS] =                    "ENUM_DELSYS",
-	[DTV_FE_CAPABILITY] =                  "FE_CAPABILITY",
-	[DTV_FE_CAPABILITY_COUNT] =            "FE_CAPABILITY_COUNT",
-	[DTV_FREQUENCY] =                      "FREQUENCY",
-	[DTV_GUARD_INTERVAL] =                 "GUARD_INTERVAL",
-	[DTV_HIERARCHY] =                      "HIERARCHY",
-	[DTV_INNER_FEC] =                      "INNER_FEC",
-	[DTV_INVERSION] =                      "INVERSION",
-	[DTV_ISDBS_TS_ID] =                    "ISDBS_TS_ID",
-	[DTV_ISDBT_LAYERA_FEC] =               "ISDBT_LAYERA_FEC",
-	[DTV_ISDBT_LAYERA_MODULATION] =        "ISDBT_LAYERA_MODULATION",
-	[DTV_ISDBT_LAYERA_SEGMENT_COUNT] =     "ISDBT_LAYERA_SEGMENT_COUNT",
-	[DTV_ISDBT_LAYERA_TIME_INTERLEAVING] = "ISDBT_LAYERA_TIME_INTERLEAVING",
-	[DTV_ISDBT_LAYERB_FEC] =               "ISDBT_LAYERB_FEC",
-	[DTV_ISDBT_LAYERB_MODULATION] =        "ISDBT_LAYERB_MODULATION",
-	[DTV_ISDBT_LAYERB_SEGMENT_COUNT] =     "ISDBT_LAYERB_SEGMENT_COUNT",
-	[DTV_ISDBT_LAYERB_TIME_INTERLEAVING] = "ISDBT_LAYERB_TIME_INTERLEAVING",
-	[DTV_ISDBT_LAYERC_FEC] =               "ISDBT_LAYERC_FEC",
-	[DTV_ISDBT_LAYERC_MODULATION] =        "ISDBT_LAYERC_MODULATION",
-	[DTV_ISDBT_LAYERC_SEGMENT_COUNT] =     "ISDBT_LAYERC_SEGMENT_COUNT",
-	[DTV_ISDBT_LAYERC_TIME_INTERLEAVING] = "ISDBT_LAYERC_TIME_INTERLEAVING",
-	[DTV_ISDBT_LAYER_ENABLED] =            "ISDBT_LAYER_ENABLED",
-	[DTV_ISDBT_PARTIAL_RECEPTION] =        "ISDBT_PARTIAL_RECEPTION",
-	[DTV_ISDBT_SB_SEGMENT_COUNT] =         "ISDBT_SB_SEGMENT_COUNT",
-	[DTV_ISDBT_SB_SEGMENT_IDX] =           "ISDBT_SB_SEGMENT_IDX",
-	[DTV_ISDBT_SB_SUBCHANNEL_ID] =         "ISDBT_SB_SUBCHANNEL_ID",
-	[DTV_ISDBT_SOUND_BROADCASTING] =       "ISDBT_SOUND_BROADCASTING",
-	[DTV_MODULATION] =                     "MODULATION",
-	[DTV_PILOT] =                          "PILOT",
-	[DTV_ROLLOFF] =                        "ROLLOFF",
-	[DTV_SYMBOL_RATE] =                    "SYMBOL_RATE",
-	[DTV_TONE] =                           "TONE",
-	[DTV_TRANSMISSION_MODE] =              "TRANSMISSION_MODE",
-	[DTV_TUNE] =                           "TUNE",
-	[DTV_UNDEFINED] =                      "UNDEFINED",
-	[DTV_VOLTAGE] =                        "VOLTAGE",
-	[45] = NULL,
-};
-
-const char *delivery_system_name[20] = {
-	[SYS_ATSC] =         "ATSC",
-	[SYS_ATSCMH] =       "ATSCMH",
-	[SYS_CMMB] =         "CMMB",
-	[SYS_DAB] =          "DAB",
-	[SYS_DMBTH] =        "DMBTH",
-	[SYS_DSS] =          "DSS",
-	[SYS_DVBC_ANNEX_A] = "DVBC/ANNEX_A",
-	[SYS_DVBC_ANNEX_B] = "DVBC/ANNEX_B",
-	[SYS_DVBC_ANNEX_C] = "DVBC/ANNEX_C",
-	[SYS_DVBH] =         "DVBH",
-	[SYS_DVBS] =         "DVBS",
-	[SYS_DVBS2] =        "DVBS2",
-	[SYS_DVBT] =         "DVBT",
-	[SYS_DVBT2] =        "DVBT2",
-	[SYS_ISDBC] =        "ISDBC",
-	[SYS_ISDBS] =        "ISDBS",
-	[SYS_ISDBT] =        "ISDBT",
-	[SYS_TURBO] =        "TURBO",
-	[SYS_UNDEFINED] =    "UNDEFINED",
-	[19] = NULL,
-};
-
+extern struct fe_status_name fe_status_name[7];
+const char *fe_code_rate_name[13];
+const char *fe_modulation_name[14];
+const char *fe_transmission_mode_name[8];
+const unsigned fe_bandwidth_name[8];
+const char *fe_guard_interval_name[9];
+const char *fe_hierarchy_name[6];
+const char *fe_voltage_name[4];
+const char *fe_tone_name[3];
+const char *fe_inversion_name[4];
+const char *fe_pilot_name[4];
+const char *fe_rolloff_name[5];
+const char *dvb_v5_name[46];
+const char *delivery_system_name[20];
 #endif
-
diff --git a/lib/libdvbv5/dvb-zap-format.c b/lib/libdvbv5/dvb-zap-format.c
index 876395a..b087d76 100644
--- a/lib/libdvbv5/dvb-zap-format.c
+++ b/lib/libdvbv5/dvb-zap-format.c
@@ -23,6 +23,7 @@
 #include <string.h>
 
 #include "dvb-file.h"
+#include "dvb-v5-std.h"
 
 /*
  * Standard channel.conf format for DVB-T, DVB-C, DVB-S and ATSC
diff --git a/lib/libdvbv5/dvb_frontend.h b/lib/libdvbv5/dvb_frontend.h
new file mode 100644
index 0000000..cb4428a
--- /dev/null
+++ b/lib/libdvbv5/dvb_frontend.h
@@ -0,0 +1,436 @@
+/*
+ * frontend.h
+ *
+ * Copyright (C) 2000 Marcus Metzler <marcus@xxxxxxxxxxxxxx>
+ *		    Ralph  Metzler <ralph@xxxxxxxxxxxxxx>
+ *		    Holger Waechtler <holger@xxxxxxxxxxxxxx>
+ *		    Andre Draszik <ad@xxxxxxxxxxxxxx>
+ *		    for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ */
+
+#ifndef _DVBFRONTEND_H_
+#define _DVBFRONTEND_H_
+
+#include <linux/types.h>
+
+typedef enum fe_type {
+	FE_QPSK,
+	FE_QAM,
+	FE_OFDM,
+	FE_ATSC
+} fe_type_t;
+
+
+typedef enum fe_caps {
+	FE_IS_STUPID			= 0,
+	FE_CAN_INVERSION_AUTO		= 0x1,
+	FE_CAN_FEC_1_2			= 0x2,
+	FE_CAN_FEC_2_3			= 0x4,
+	FE_CAN_FEC_3_4			= 0x8,
+	FE_CAN_FEC_4_5			= 0x10,
+	FE_CAN_FEC_5_6			= 0x20,
+	FE_CAN_FEC_6_7			= 0x40,
+	FE_CAN_FEC_7_8			= 0x80,
+	FE_CAN_FEC_8_9			= 0x100,
+	FE_CAN_FEC_AUTO			= 0x200,
+	FE_CAN_QPSK			= 0x400,
+	FE_CAN_QAM_16			= 0x800,
+	FE_CAN_QAM_32			= 0x1000,
+	FE_CAN_QAM_64			= 0x2000,
+	FE_CAN_QAM_128			= 0x4000,
+	FE_CAN_QAM_256			= 0x8000,
+	FE_CAN_QAM_AUTO			= 0x10000,
+	FE_CAN_TRANSMISSION_MODE_AUTO	= 0x20000,
+	FE_CAN_BANDWIDTH_AUTO		= 0x40000,
+	FE_CAN_GUARD_INTERVAL_AUTO	= 0x80000,
+	FE_CAN_HIERARCHY_AUTO		= 0x100000,
+	FE_CAN_8VSB			= 0x200000,
+	FE_CAN_16VSB			= 0x400000,
+	FE_HAS_EXTENDED_CAPS		= 0x800000,   /* We need more bitspace for newer APIs, indicate this. */
+	FE_CAN_TURBO_FEC		= 0x8000000,  /* frontend supports "turbo fec modulation" */
+	FE_CAN_2G_MODULATION		= 0x10000000, /* frontend supports "2nd generation modulation" (DVB-S2) */
+	FE_NEEDS_BENDING		= 0x20000000, /* not supported anymore, don't use (frontend requires frequency bending) */
+	FE_CAN_RECOVER			= 0x40000000, /* frontend can recover from a cable unplug automatically */
+	FE_CAN_MUTE_TS			= 0x80000000  /* frontend can stop spurious TS data output */
+} fe_caps_t;
+
+
+struct dvb_frontend_info {
+	char       name[128];
+	fe_type_t  type;			/* DEPRECATED. Use DTV_ENUM_DELSYS instead */
+	__u32      frequency_min;
+	__u32      frequency_max;
+	__u32      frequency_stepsize;
+	__u32      frequency_tolerance;
+	__u32      symbol_rate_min;
+	__u32      symbol_rate_max;
+	__u32      symbol_rate_tolerance;	/* ppm */
+	__u32      notifier_delay;		/* DEPRECATED */
+	fe_caps_t  caps;
+};
+
+
+/**
+ *  Check out the DiSEqC bus spec available on http://www.eutelsat.org/ for
+ *  the meaning of this struct...
+ */
+struct dvb_diseqc_master_cmd {
+	__u8 msg [6];	/*  { framing, address, command, data [3] } */
+	__u8 msg_len;	/*  valid values are 3...6  */
+};
+
+
+struct dvb_diseqc_slave_reply {
+	__u8 msg [4];	/*  { framing, data [3] } */
+	__u8 msg_len;	/*  valid values are 0...4, 0 means no msg  */
+	int  timeout;	/*  return from ioctl after timeout ms with */
+};			/*  errorcode when no message was received  */
+
+
+typedef enum fe_sec_voltage {
+	SEC_VOLTAGE_13,
+	SEC_VOLTAGE_18,
+	SEC_VOLTAGE_OFF
+} fe_sec_voltage_t;
+
+
+typedef enum fe_sec_tone_mode {
+	SEC_TONE_ON,
+	SEC_TONE_OFF
+} fe_sec_tone_mode_t;
+
+
+typedef enum fe_sec_mini_cmd {
+	SEC_MINI_A,
+	SEC_MINI_B
+} fe_sec_mini_cmd_t;
+
+
+typedef enum fe_status {
+	FE_HAS_SIGNAL	= 0x01,   /* found something above the noise level */
+	FE_HAS_CARRIER	= 0x02,   /* found a DVB signal  */
+	FE_HAS_VITERBI	= 0x04,   /* FEC is stable  */
+	FE_HAS_SYNC	= 0x08,   /* found sync bytes  */
+	FE_HAS_LOCK	= 0x10,   /* everything's working... */
+	FE_TIMEDOUT	= 0x20,   /* no lock within the last ~2 seconds */
+	FE_REINIT	= 0x40    /* frontend was reinitialized,  */
+} fe_status_t;			  /* application is recommended to reset */
+				  /* DiSEqC, tone and parameters */
+
+typedef enum fe_spectral_inversion {
+	INVERSION_OFF,
+	INVERSION_ON,
+	INVERSION_AUTO
+} fe_spectral_inversion_t;
+
+
+typedef enum fe_code_rate {
+	FEC_NONE = 0,
+	FEC_1_2,
+	FEC_2_3,
+	FEC_3_4,
+	FEC_4_5,
+	FEC_5_6,
+	FEC_6_7,
+	FEC_7_8,
+	FEC_8_9,
+	FEC_AUTO,
+	FEC_3_5,
+	FEC_9_10,
+} fe_code_rate_t;
+
+
+typedef enum fe_modulation {
+	QPSK,
+	QAM_16,
+	QAM_32,
+	QAM_64,
+	QAM_128,
+	QAM_256,
+	QAM_AUTO,
+	VSB_8,
+	VSB_16,
+	PSK_8,
+	APSK_16,
+	APSK_32,
+	DQPSK,
+} fe_modulation_t;
+
+typedef enum fe_transmit_mode {
+	TRANSMISSION_MODE_2K,
+	TRANSMISSION_MODE_8K,
+	TRANSMISSION_MODE_AUTO,
+	TRANSMISSION_MODE_4K,
+	TRANSMISSION_MODE_1K,
+	TRANSMISSION_MODE_16K,
+	TRANSMISSION_MODE_32K,
+} fe_transmit_mode_t;
+
+#if defined(__DVB_CORE__) || !defined (__KERNEL__)
+typedef enum fe_bandwidth {
+	BANDWIDTH_8_MHZ,
+	BANDWIDTH_7_MHZ,
+	BANDWIDTH_6_MHZ,
+	BANDWIDTH_AUTO,
+	BANDWIDTH_5_MHZ,
+	BANDWIDTH_10_MHZ,
+	BANDWIDTH_1_712_MHZ,
+} fe_bandwidth_t;
+#endif
+
+typedef enum fe_guard_interval {
+	GUARD_INTERVAL_1_32,
+	GUARD_INTERVAL_1_16,
+	GUARD_INTERVAL_1_8,
+	GUARD_INTERVAL_1_4,
+	GUARD_INTERVAL_AUTO,
+	GUARD_INTERVAL_1_128,
+	GUARD_INTERVAL_19_128,
+	GUARD_INTERVAL_19_256,
+} fe_guard_interval_t;
+
+
+typedef enum fe_hierarchy {
+	HIERARCHY_NONE,
+	HIERARCHY_1,
+	HIERARCHY_2,
+	HIERARCHY_4,
+	HIERARCHY_AUTO
+} fe_hierarchy_t;
+
+
+#if defined(__DVB_CORE__) || !defined (__KERNEL__)
+struct dvb_qpsk_parameters {
+	__u32		symbol_rate;  /* symbol rate in Symbols per second */
+	fe_code_rate_t	fec_inner;    /* forward error correction (see above) */
+};
+
+struct dvb_qam_parameters {
+	__u32		symbol_rate; /* symbol rate in Symbols per second */
+	fe_code_rate_t	fec_inner;   /* forward error correction (see above) */
+	fe_modulation_t	modulation;  /* modulation type (see above) */
+};
+
+struct dvb_vsb_parameters {
+	fe_modulation_t	modulation;  /* modulation type (see above) */
+};
+
+struct dvb_ofdm_parameters {
+	fe_bandwidth_t      bandwidth;
+	fe_code_rate_t      code_rate_HP;  /* high priority stream code rate */
+	fe_code_rate_t      code_rate_LP;  /* low priority stream code rate */
+	fe_modulation_t     constellation; /* modulation type (see above) */
+	fe_transmit_mode_t  transmission_mode;
+	fe_guard_interval_t guard_interval;
+	fe_hierarchy_t      hierarchy_information;
+};
+
+
+struct dvb_frontend_parameters {
+	__u32 frequency;     /* (absolute) frequency in Hz for QAM/OFDM/ATSC */
+			     /* intermediate frequency in kHz for QPSK */
+	fe_spectral_inversion_t inversion;
+	union {
+		struct dvb_qpsk_parameters qpsk;
+		struct dvb_qam_parameters  qam;
+		struct dvb_ofdm_parameters ofdm;
+		struct dvb_vsb_parameters vsb;
+	} u;
+};
+
+struct dvb_frontend_event {
+	fe_status_t status;
+	struct dvb_frontend_parameters parameters;
+};
+#endif
+
+/* S2API Commands */
+#define DTV_UNDEFINED		0
+#define DTV_TUNE		1
+#define DTV_CLEAR		2
+#define DTV_FREQUENCY		3
+#define DTV_MODULATION		4
+#define DTV_BANDWIDTH_HZ	5
+#define DTV_INVERSION		6
+#define DTV_DISEQC_MASTER	7
+#define DTV_SYMBOL_RATE		8
+#define DTV_INNER_FEC		9
+#define DTV_VOLTAGE		10
+#define DTV_TONE		11
+#define DTV_PILOT		12
+#define DTV_ROLLOFF		13
+#define DTV_DISEQC_SLAVE_REPLY	14
+
+/* Basic enumeration set for querying unlimited capabilities */
+#define DTV_FE_CAPABILITY_COUNT	15
+#define DTV_FE_CAPABILITY	16
+#define DTV_DELIVERY_SYSTEM	17
+
+/* ISDB-T and ISDB-Tsb */
+#define DTV_ISDBT_PARTIAL_RECEPTION	18
+#define DTV_ISDBT_SOUND_BROADCASTING	19
+
+#define DTV_ISDBT_SB_SUBCHANNEL_ID	20
+#define DTV_ISDBT_SB_SEGMENT_IDX	21
+#define DTV_ISDBT_SB_SEGMENT_COUNT	22
+
+#define DTV_ISDBT_LAYERA_FEC			23
+#define DTV_ISDBT_LAYERA_MODULATION		24
+#define DTV_ISDBT_LAYERA_SEGMENT_COUNT		25
+#define DTV_ISDBT_LAYERA_TIME_INTERLEAVING	26
+
+#define DTV_ISDBT_LAYERB_FEC			27
+#define DTV_ISDBT_LAYERB_MODULATION		28
+#define DTV_ISDBT_LAYERB_SEGMENT_COUNT		29
+#define DTV_ISDBT_LAYERB_TIME_INTERLEAVING	30
+
+#define DTV_ISDBT_LAYERC_FEC			31
+#define DTV_ISDBT_LAYERC_MODULATION		32
+#define DTV_ISDBT_LAYERC_SEGMENT_COUNT		33
+#define DTV_ISDBT_LAYERC_TIME_INTERLEAVING	34
+
+#define DTV_API_VERSION		35
+
+#define DTV_CODE_RATE_HP	36
+#define DTV_CODE_RATE_LP	37
+#define DTV_GUARD_INTERVAL	38
+#define DTV_TRANSMISSION_MODE	39
+#define DTV_HIERARCHY		40
+
+#define DTV_ISDBT_LAYER_ENABLED	41
+
+#define DTV_ISDBS_TS_ID		42
+
+#define DTV_DVBT2_PLP_ID	43
+
+#define DTV_ENUM_DELSYS		44
+
+#define DTV_MAX_COMMAND				DTV_ENUM_DELSYS
+
+typedef enum fe_pilot {
+	PILOT_ON,
+	PILOT_OFF,
+	PILOT_AUTO,
+} fe_pilot_t;
+
+typedef enum fe_rolloff {
+	ROLLOFF_35, /* Implied value in DVB-S, default for DVB-S2 */
+	ROLLOFF_20,
+	ROLLOFF_25,
+	ROLLOFF_AUTO,
+} fe_rolloff_t;
+
+typedef enum fe_delivery_system {
+	SYS_UNDEFINED,
+	SYS_DVBC_ANNEX_A,
+	SYS_DVBC_ANNEX_B,
+	SYS_DVBT,
+	SYS_DSS,
+	SYS_DVBS,
+	SYS_DVBS2,
+	SYS_DVBH,
+	SYS_ISDBT,
+	SYS_ISDBS,
+	SYS_ISDBC,
+	SYS_ATSC,
+	SYS_ATSCMH,
+	SYS_DMBTH,
+	SYS_CMMB,
+	SYS_DAB,
+	SYS_DVBT2,
+	SYS_TURBO,
+	SYS_DVBC_ANNEX_C,
+} fe_delivery_system_t;
+
+
+#define SYS_DVBC_ANNEX_AC	SYS_DVBC_ANNEX_A
+
+
+struct dtv_cmds_h {
+	char	*name;		/* A display name for debugging purposes */
+
+	__u32	cmd;		/* A unique ID */
+
+	/* Flags */
+	__u32	set:1;		/* Either a set or get property */
+	__u32	buffer:1;	/* Does this property use the buffer? */
+	__u32	reserved:30;	/* Align */
+};
+
+struct dtv_property {
+	__u32 cmd;
+	__u32 reserved[3];
+	union {
+		__u32 data;
+		struct {
+			__u8 data[32];
+			__u32 len;
+			__u32 reserved1[3];
+			void *reserved2;
+		} buffer;
+	} u;
+	int result;
+} __attribute__ ((packed));
+
+/* num of properties cannot exceed DTV_IOCTL_MAX_MSGS per ioctl */
+#define DTV_IOCTL_MAX_MSGS 64
+
+struct dtv_properties {
+	__u32 num;
+	struct dtv_property *props;
+};
+
+#define FE_SET_PROPERTY		   _IOW('o', 82, struct dtv_properties)
+#define FE_GET_PROPERTY		   _IOR('o', 83, struct dtv_properties)
+
+
+/**
+ * When set, this flag will disable any zigzagging or other "normal" tuning
+ * behaviour. Additionally, there will be no automatic monitoring of the lock
+ * status, and hence no frontend events will be generated. If a frontend device
+ * is closed, this flag will be automatically turned off when the device is
+ * reopened read-write.
+ */
+#define FE_TUNE_MODE_ONESHOT 0x01
+
+
+#define FE_GET_INFO		   _IOR('o', 61, struct dvb_frontend_info)
+
+#define FE_DISEQC_RESET_OVERLOAD   _IO('o', 62)
+#define FE_DISEQC_SEND_MASTER_CMD  _IOW('o', 63, struct dvb_diseqc_master_cmd)
+#define FE_DISEQC_RECV_SLAVE_REPLY _IOR('o', 64, struct dvb_diseqc_slave_reply)
+#define FE_DISEQC_SEND_BURST       _IO('o', 65)  /* fe_sec_mini_cmd_t */
+
+#define FE_SET_TONE		   _IO('o', 66)  /* fe_sec_tone_mode_t */
+#define FE_SET_VOLTAGE		   _IO('o', 67)  /* fe_sec_voltage_t */
+#define FE_ENABLE_HIGH_LNB_VOLTAGE _IO('o', 68)  /* int */
+
+#define FE_READ_STATUS		   _IOR('o', 69, fe_status_t)
+#define FE_READ_BER		   _IOR('o', 70, __u32)
+#define FE_READ_SIGNAL_STRENGTH    _IOR('o', 71, __u16)
+#define FE_READ_SNR		   _IOR('o', 72, __u16)
+#define FE_READ_UNCORRECTED_BLOCKS _IOR('o', 73, __u32)
+
+#define FE_SET_FRONTEND		   _IOW('o', 76, struct dvb_frontend_parameters)
+#define FE_GET_FRONTEND		   _IOR('o', 77, struct dvb_frontend_parameters)
+#define FE_SET_FRONTEND_TUNE_MODE  _IO('o', 81) /* unsigned int */
+#define FE_GET_EVENT		   _IOR('o', 78, struct dvb_frontend_event)
+
+#define FE_DISHNETWORK_SEND_LEGACY_CMD _IO('o', 80) /* unsigned int */
+
+#endif /*_DVBFRONTEND_H_*/
diff --git a/lib/libdvbv5/gen_dvb_structs.pl b/lib/libdvbv5/gen_dvb_structs.pl
index 7ed9645..99e8c44 100755
--- a/lib/libdvbv5/gen_dvb_structs.pl
+++ b/lib/libdvbv5/gen_dvb_structs.pl
@@ -3,21 +3,21 @@ use strict;
 use File::Copy;
 
 use constant {
-	NORMAL => 0,
-	FE_CAPS => 1,
-	FE_STATUS => 2,
-	FE_CODERATE => 3,
-	FE_MODULATION => 4,
-	FE_TMODE => 5,
-	FE_BW => 6,
-	FE_GINTERVAL => 7,
-	FE_HIERARCHY => 8,
-	FE_DTS => 9,
-	FE_VOLTAGE => 10,
-	FE_TONE => 11,
-	FE_INVERSION => 12,
-	FE_PILOT => 13,
-	FE_ROLLOFF => 14,
+  NORMAL => 0,
+  FE_CAPS => 1,
+  FE_STATUS => 2,
+  FE_CODERATE => 3,
+  FE_MODULATION => 4,
+  FE_TMODE => 5,
+  FE_BW => 6,
+  FE_GINTERVAL => 7,
+  FE_HIERARCHY => 8,
+  FE_DTS => 9,
+  FE_VOLTAGE => 10,
+  FE_TONE => 11,
+  FE_INVERSION => 12,
+  FE_PILOT => 13,
+  FE_ROLLOFF => 14,
 };
 
 my $dir = shift or die "Please specify the kernel include directory.";
@@ -47,412 +47,425 @@ my %fe_rolloff;
 
 sub gen_fe($)
 {
-	my $file = shift;
-
-	my $mode = 0;
-
-	open IN, "<$file" or die "Can't open $file";
-
-	while (<IN>) {
-		#
-		# Mode FE_CAPS
-		#
-		if (m/typedef enum fe_caps\ {/) {
-			$mode = FE_CAPS;
-			next;
-		}
-		if ($mode == FE_CAPS) {
-			if (m/\} fe_caps_t;/) {
-				$mode = NORMAL;
-				next;
-			}
-			if (m/(FE_)([^\s,=]+)/) {
-				my $macro = "$1$2";
-				my $name = $2;
-
-				$fe_caps{$macro} = $name;
-			}
-		}
-		#
-		# Mode FE_STATUS
-		#
-		if (m/typedef enum fe_status\ {/) {
-			$mode = FE_STATUS;
-			next;
-		}
-		if ($mode == FE_STATUS) {
-			if (m/\} fe_status_t;/) {
-				$mode = NORMAL;
-				next;
-			}
-			if (m/(FE_)([^\s,=]+)/) {
-				my $macro = "$1$2";
-				my $name = $2;
-
-				$name =~ s/HAS_//;
-
-				$fe_status{$macro} = $name;
-			}
-		}
-		#
-		# Mode FE_CODERATE
-		#
-		if (m/typedef enum fe_code_rate \{/) {
-			$mode = FE_CODERATE;
-			next;
-		}
-		if ($mode == FE_CODERATE) {
-			if (m/\} fe_code_rate_t;/) {
-				$mode = NORMAL;
-				next;
-			}
-			if (m/(FEC_)([^\s,]+)/) {
-				my $macro = "$1$2";
-				my $name = $2;
-				$name =~ s,_,/,;
-
-				$fe_code_rate{$macro} = $name;
-			}
-		}
-		#
-		# Mode FE_MODULATION
-		#
-		if (m/typedef enum fe_modulation \{/) {
-			$mode = FE_MODULATION;
-			next;
-		}
-		if ($mode == FE_MODULATION) {
-			if (m/\} fe_modulation_t;/) {
-				$mode = NORMAL;
-				next;
-			}
-			if (m/\t([^\s,=]+)/) {
-				my $macro = "$1";
-				my $name = $1;
-				$name =~ s,_,/,;
-
-				$fe_modulation{$macro} = $name;
-			}
-		}
-		#
-		# Mode FE_TMODE
-		#
-		if (m/typedef enum fe_transmit_mode \{/) {
-			$mode = FE_TMODE;
-			next;
-		}
-		if ($mode == FE_TMODE) {
-			if (m/\} fe_transmit_mode_t;/) {
-				$mode = NORMAL;
-				next;
-			}
-			if (m/(TRANSMISSION_MODE_)([^\s,=]+)/) {
-				my $macro = "$1$2";
-				my $name = $2;
-				$name =~ s,_,/,;
-
-				$fe_t_mode{$macro} = $name;
-			}
-		}
-		#
-		# Mode FE_BW
-		#
-		if (m/typedef enum fe_bandwidth \{/) {
-			$mode = FE_BW;
-			next;
-		}
-		if ($mode == FE_BW) {
-			if (m/\} fe_bandwidth_t;/) {
-				$mode = NORMAL;
-				next;
-			}
-			if (m/(BANDWIDTH_)([^\s]+)(_MHZ)/) {
-				my $macro = "$1$2$3";
-				my $name = $2;
-				$name =~ s,_,.,;
-				$name *= 1000000;
-
-				$fe_bw{$macro} = $name;
-			} elsif (m/(BANDWIDTH_)([^\s,=]+)/) {
-				my $macro = "$1$2$3";
-				my $name = 0;
-
-				$fe_bw{$macro} = $name;
-			}
-		}
-		#
-		# Mode FE_GINTERVAL
-		#
-		if (m/typedef enum fe_guard_interval \{/) {
-			$mode = FE_GINTERVAL;
-			next;
-		}
-		if ($mode == FE_GINTERVAL) {
-			if (m/\} fe_guard_interval_t;/) {
-				$mode = NORMAL;
-				next;
-			}
-			if (m/(GUARD_INTERVAL_)([^\s,=]+)/) {
-				my $macro = "$1$2";
-				my $name = $2;
-				$name =~ s,_,/,;
-
-				$fe_guard_interval{$macro} = $name;
-			}
-		}
-		#
-		# Mode FE_HIERARCHY
-		#
-		if (m/typedef enum fe_hierarchy \{/) {
-			$mode = FE_HIERARCHY;
-			next;
-		}
-		if ($mode == FE_HIERARCHY) {
-			if (m/\} fe_hierarchy_t;/) {
-				$mode = NORMAL;
-				next;
-			}
-			if (m/(HIERARCHY_)([^\s,=]+)/) {
-				my $macro = "$1$2";
-				my $name = $2;
-				$name =~ s,_,/,;
-
-				$fe_hierarchy{$macro} = $name;
-			}
-		}
-		#
-		# Mode FE_VOLTAGE
-		#
-		if (m/typedef enum fe_sec_voltage \{/) {
-			$mode = FE_VOLTAGE;
-			next;
-		}
-		if ($mode == FE_VOLTAGE) {
-			if (m/\} fe_sec_voltage_t;/) {
-				$mode = NORMAL;
-				next;
-			}
-			if (m/(SEC_VOLTAGE_)([^\s,]+)/) {
-				my $macro = "$1$2";
-				my $name = $2;
-				$name =~ s,_,/,;
-
-				$fe_voltage{$macro} = $name;
-			}
-		}
-		#
-		# Mode FE_TONE
-		#
-		if (m/typedef enum fe_sec_tone_mode \{/) {
-			$mode = FE_TONE;
-			next;
-		}
-		if ($mode == FE_TONE) {
-			if (m/\} fe_sec_tone_mode_t;/) {
-				$mode = NORMAL;
-				next;
-			}
-			if (m/(SEC_TONE_)([^\s,]+)/) {
-				my $macro = "$1$2";
-				my $name = $2;
-				$name =~ s,_,/,;
-
-				$fe_tone{$macro} = $name;
-			}
-		}
-		#
-		# Mode FE_INVERSION
-		#
-		if (m/typedef enum fe_spectral_inversion \{/) {
-			$mode = FE_INVERSION;
-			next;
-		}
-		if ($mode == FE_INVERSION) {
-			if (m/\} fe_spectral_inversion_t;/) {
-				$mode = NORMAL;
-				next;
-			}
-			if (m/(INVERSION_)([^\s,]+)/) {
-				my $macro = "$1$2";
-				my $name = $2;
-				$name =~ s,_,/,;
-
-				$fe_inversion{$macro} = $name;
-			}
-		}
-		#
-		# Mode FE_PILOT
-		#
-		if (m/typedef enum fe_pilot \{/) {
-			$mode = FE_PILOT;
-			next;
-		}
-		if ($mode == FE_PILOT) {
-			if (m/\} fe_pilot_t;/) {
-				$mode = NORMAL;
-				next;
-			}
-			if (m/(PILOT_)([^\s,]+)/) {
-				my $macro = "$1$2";
-				my $name = $2;
-				$name =~ s,_,/,;
-
-				$fe_pilot{$macro} = $name;
-			}
-		}
-		#
-		# Mode FE_ROLLOFF
-		#
-		if (m/typedef enum fe_rolloff \{/) {
-			$mode =FE_ROLLOFF;
-			next;
-		}
-		if ($mode == FE_ROLLOFF) {
-			if (m/\} fe_rolloff_t;/) {
-				$mode = NORMAL;
-				next;
-			}
-			if (m/(ROLLOFF_)([^\s,]+)/) {
-				my $macro = "$1$2";
-				my $name = $2;
-				$name =~ s,_,/,;
-
-				$fe_rolloff{$macro} = $name;
-			}
-		}
-		#
-		# DTV macros
-		#
-		if (m/\#define\s+(DTV_)([^\s]+)\s+\d+/) {
-			next if ($2 eq "IOCTL_MAX_MSGS");
-
-			my $macro = "$1$2";
-			my $name = $2;
-			$dvb_v5{$macro} = $name;
-		}
-		#
-		# Mode FE_DTS
-		#
-		if (m/typedef enum fe_delivery_system \{/) {
-			$mode = FE_DTS;
-			next;
-		}
-		if ($mode == FE_DTS) {
-			if (m/\} fe_delivery_system_t;/) {
-				$mode = NORMAL;
-				next;
-			}
-			if (m/(SYS_)([^\s,=]+)/) {
-				my $macro = "$1$2";
-				my $name = $2;
-				$name =~ s,_,/,;
-
-				$fe_delivery_system{$macro} = $name;
-			}
-		}
-	}
-
-	close IN;
+  my $file = shift;
+
+  my $mode = 0;
+
+  open IN, "<$file" or die "Can't open $file";
+
+  while (<IN>) {
+    #
+    # Mode FE_CAPS
+    #
+    if (m/typedef enum fe_caps\ {/) {
+      $mode = FE_CAPS;
+      next;
+    }
+    if ($mode == FE_CAPS) {
+      if (m/\} fe_caps_t;/) {
+        $mode = NORMAL;
+        next;
+      }
+      if (m/(FE_)([^\s,=]+)/) {
+        my $macro = "$1$2";
+        my $name = $2;
+
+        $fe_caps{$macro} = $name;
+      }
+    }
+    #
+    # Mode FE_STATUS
+    #
+    if (m/typedef enum fe_status\ {/) {
+      $mode = FE_STATUS;
+      next;
+    }
+    if ($mode == FE_STATUS) {
+      if (m/\} fe_status_t;/) {
+        $mode = NORMAL;
+        next;
+      }
+      if (m/(FE_)([^\s,=]+)/) {
+        my $macro = "$1$2";
+        my $name = $2;
+
+        $name =~ s/HAS_//;
+
+        $fe_status{$macro} = $name;
+      }
+    }
+    #
+    # Mode FE_CODERATE
+    #
+    if (m/typedef enum fe_code_rate \{/) {
+      $mode = FE_CODERATE;
+      next;
+    }
+    if ($mode == FE_CODERATE) {
+      if (m/\} fe_code_rate_t;/) {
+        $mode = NORMAL;
+        next;
+      }
+      if (m/(FEC_)([^\s,]+)/) {
+        my $macro = "$1$2";
+        my $name = $2;
+        $name =~ s,_,/,;
+
+        $fe_code_rate{$macro} = $name;
+      }
+    }
+    #
+    # Mode FE_MODULATION
+    #
+    if (m/typedef enum fe_modulation \{/) {
+      $mode = FE_MODULATION;
+      next;
+    }
+    if ($mode == FE_MODULATION) {
+      if (m/\} fe_modulation_t;/) {
+        $mode = NORMAL;
+        next;
+      }
+      if (m/\t([^\s,=]+)/) {
+        my $macro = "$1";
+        my $name = $1;
+        $name =~ s,_,/,;
+
+        $fe_modulation{$macro} = $name;
+      }
+    }
+    #
+    # Mode FE_TMODE
+    #
+    if (m/typedef enum fe_transmit_mode \{/) {
+      $mode = FE_TMODE;
+      next;
+    }
+    if ($mode == FE_TMODE) {
+      if (m/\} fe_transmit_mode_t;/) {
+        $mode = NORMAL;
+        next;
+      }
+      if (m/(TRANSMISSION_MODE_)([^\s,=]+)/) {
+        my $macro = "$1$2";
+        my $name = $2;
+        $name =~ s,_,/,;
+
+        $fe_t_mode{$macro} = $name;
+      }
+    }
+    #
+    # Mode FE_BW
+    #
+    if (m/typedef enum fe_bandwidth \{/) {
+      $mode = FE_BW;
+      next;
+    }
+    if ($mode == FE_BW) {
+      if (m/\} fe_bandwidth_t;/) {
+        $mode = NORMAL;
+        next;
+      }
+      if (m/(BANDWIDTH_)([^\s]+)(_MHZ)/) {
+        my $macro = "$1$2$3";
+        my $name = $2;
+        $name =~ s,_,.,;
+        $name *= 1000000;
+
+        $fe_bw{$macro} = $name;
+      } elsif (m/(BANDWIDTH_)([^\s,=]+)/) {
+        my $macro = "$1$2$3";
+        my $name = 0;
+
+        $fe_bw{$macro} = $name;
+      }
+    }
+    #
+    # Mode FE_GINTERVAL
+    #
+    if (m/typedef enum fe_guard_interval \{/) {
+      $mode = FE_GINTERVAL;
+      next;
+    }
+    if ($mode == FE_GINTERVAL) {
+      if (m/\} fe_guard_interval_t;/) {
+        $mode = NORMAL;
+        next;
+      }
+      if (m/(GUARD_INTERVAL_)([^\s,=]+)/) {
+        my $macro = "$1$2";
+        my $name = $2;
+        $name =~ s,_,/,;
+
+        $fe_guard_interval{$macro} = $name;
+      }
+    }
+    #
+    # Mode FE_HIERARCHY
+    #
+    if (m/typedef enum fe_hierarchy \{/) {
+      $mode = FE_HIERARCHY;
+      next;
+    }
+    if ($mode == FE_HIERARCHY) {
+      if (m/\} fe_hierarchy_t;/) {
+        $mode = NORMAL;
+        next;
+      }
+      if (m/(HIERARCHY_)([^\s,=]+)/) {
+        my $macro = "$1$2";
+        my $name = $2;
+        $name =~ s,_,/,;
+
+        $fe_hierarchy{$macro} = $name;
+      }
+    }
+    #
+    # Mode FE_VOLTAGE
+    #
+    if (m/typedef enum fe_sec_voltage \{/) {
+      $mode = FE_VOLTAGE;
+      next;
+    }
+    if ($mode == FE_VOLTAGE) {
+      if (m/\} fe_sec_voltage_t;/) {
+        $mode = NORMAL;
+        next;
+      }
+      if (m/(SEC_VOLTAGE_)([^\s,]+)/) {
+        my $macro = "$1$2";
+        my $name = $2;
+        $name =~ s,_,/,;
+
+        $fe_voltage{$macro} = $name;
+      }
+    }
+    #
+    # Mode FE_TONE
+    #
+    if (m/typedef enum fe_sec_tone_mode \{/) {
+      $mode = FE_TONE;
+      next;
+    }
+    if ($mode == FE_TONE) {
+      if (m/\} fe_sec_tone_mode_t;/) {
+        $mode = NORMAL;
+        next;
+      }
+      if (m/(SEC_TONE_)([^\s,]+)/) {
+        my $macro = "$1$2";
+        my $name = $2;
+        $name =~ s,_,/,;
+
+        $fe_tone{$macro} = $name;
+      }
+    }
+    #
+    # Mode FE_INVERSION
+    #
+    if (m/typedef enum fe_spectral_inversion \{/) {
+      $mode = FE_INVERSION;
+      next;
+    }
+    if ($mode == FE_INVERSION) {
+      if (m/\} fe_spectral_inversion_t;/) {
+        $mode = NORMAL;
+        next;
+      }
+      if (m/(INVERSION_)([^\s,]+)/) {
+        my $macro = "$1$2";
+        my $name = $2;
+        $name =~ s,_,/,;
+
+        $fe_inversion{$macro} = $name;
+      }
+    }
+    #
+    # Mode FE_PILOT
+    #
+    if (m/typedef enum fe_pilot \{/) {
+      $mode = FE_PILOT;
+      next;
+    }
+    if ($mode == FE_PILOT) {
+      if (m/\} fe_pilot_t;/) {
+        $mode = NORMAL;
+        next;
+      }
+      if (m/(PILOT_)([^\s,]+)/) {
+        my $macro = "$1$2";
+        my $name = $2;
+        $name =~ s,_,/,;
+
+        $fe_pilot{$macro} = $name;
+      }
+    }
+    #
+    # Mode FE_ROLLOFF
+    #
+    if (m/typedef enum fe_rolloff \{/) {
+      $mode =FE_ROLLOFF;
+      next;
+    }
+    if ($mode == FE_ROLLOFF) {
+      if (m/\} fe_rolloff_t;/) {
+        $mode = NORMAL;
+        next;
+      }
+      if (m/(ROLLOFF_)([^\s,]+)/) {
+        my $macro = "$1$2";
+        my $name = $2;
+        $name =~ s,_,/,;
+
+        $fe_rolloff{$macro} = $name;
+      }
+    }
+    #
+    # DTV macros
+    #
+    if (m/\#define\s+(DTV_)([^\s]+)\s+\d+/) {
+      next if ($2 eq "IOCTL_MAX_MSGS");
+
+      my $macro = "$1$2";
+      my $name = $2;
+      $dvb_v5{$macro} = $name;
+    }
+    #
+    # Mode FE_DTS
+    #
+    if (m/typedef enum fe_delivery_system \{/) {
+      $mode = FE_DTS;
+      next;
+    }
+    if ($mode == FE_DTS) {
+      if (m/\} fe_delivery_system_t;/) {
+        $mode = NORMAL;
+        next;
+      }
+      if (m/(SYS_)([^\s,=]+)/) {
+        my $macro = "$1$2";
+        my $name = $2;
+        $name =~ s,_,/,;
+
+        $fe_delivery_system{$macro} = $name;
+      }
+    }
+  }
+
+  close IN;
 }
 
 sub sort_func {
-	my $aa = $a;
-	my $bb = $b;
-
-	my $str_a;
-	my $str_b;
-
-	while ($aa && $bb) {
-		# Strings before a number
-		if ($aa =~ /^([^\d]+)\d/) { $str_a = $1 } else { $str_a = "" };
-		if ($bb =~ /^([^\d]+)\d/) { $str_b = $1 } else { $str_b = "" };
-		if ($str_a && $str_b) {
-			my $cmp = $str_a cmp $str_b;
-
-			return $cmp if ($cmp);
-
-			$aa =~ s/^($str_a)//;
-			$bb =~ s/^($str_b)//;
-			next;
-		}
-
-		# Numbers
-		if ($aa =~ /^(\d+)/) { $str_a = $1 } else { $str_a = "" };
-		if ($bb =~ /^(\d+)/) { $str_b = $1 } else { $str_b = "" };
-		if ($str_a && $str_b) {
-			my $cmp = $str_a <=> $str_b;
-
-			return $cmp if ($cmp);
-
-			$aa =~ s/^($str_a)//;
-			$bb =~ s/^($str_b)//;
-			next;
-		}
-		last;
-	}
-
-	return $a cmp $b;
+  my $aa = $a;
+  my $bb = $b;
+
+  my $str_a;
+  my $str_b;
+
+  while ($aa && $bb) {
+    # Strings before a number
+    if ($aa =~ /^([^\d]+)\d/) { $str_a = $1 } else { $str_a = "" };
+    if ($bb =~ /^([^\d]+)\d/) { $str_b = $1 } else { $str_b = "" };
+    if ($str_a && $str_b) {
+      my $cmp = $str_a cmp $str_b;
+
+      return $cmp if ($cmp);
+
+      $aa =~ s/^($str_a)//;
+      $bb =~ s/^($str_b)//;
+      next;
+    }
+
+    # Numbers
+    if ($aa =~ /^(\d+)/) { $str_a = $1 } else { $str_a = "" };
+    if ($bb =~ /^(\d+)/) { $str_b = $1 } else { $str_b = "" };
+    if ($str_a && $str_b) {
+      my $cmp = $str_a <=> $str_b;
+
+      return $cmp if ($cmp);
+
+      $aa =~ s/^($str_a)//;
+      $bb =~ s/^($str_b)//;
+      next;
+    }
+    last;
+  }
+
+  return $a cmp $b;
 }
 
-sub output_arrays($$$$)
+sub output_arrays($$$$$)
 {
-	my $name = shift;
-	my $struct = shift;
-	my $type = shift;
-	my $bitmap = shift;
-
-	my $size = keys(%$struct);
-	my $max;
-
-	return if (%$struct == 0);
-
-	$type .= " " if (!($type =~ m/\*$/));
-
-	if ($bitmap) {
-		printf OUT "struct %s {\n\t\%s idx;\n\tchar *name;\n} %s[%i] = {\n",
-			$name, $type, $name, $size;
-	} else {
-		printf OUT "const %s%s[%i] = {\n", $type, $name, $size + 1;
-	}
-
-	foreach my $i (sort keys %$struct) {
-		my $len = length($i);
-		$max = $len if ($len > $max);
-	}
-
-	foreach my $i (sort sort_func keys %$struct) {
-		if ($bitmap) {
-			printf OUT "\t{ %s, ", $i;
-		} else {
-			printf OUT "\t[%s] = ", $i;
-		}
-		my $len = length($i);
-		while ($len < $max) {
-			print OUT " ";
-			$len++;
-		}
-		if ($bitmap) {
-			printf OUT "\"%s\" },\n", $struct->{$i};
-		} else {
-			if ($type eq "char *") {
-				printf OUT "\"%s\",\n", $struct->{$i};
-			} else {
-				printf OUT "%s,\n", $struct->{$i};
-			}
-		}
-	}
-
-	if (!$bitmap) {
-		printf OUT "\t[%s] = ", $size;
-		if ($type eq "char *") {
-			printf OUT "NULL,\n";
-		} else {
-			printf OUT "0,\n";
-		}
-	}
-
-
-	printf OUT "};\n\n";
+  my $name = shift;
+  my $struct = shift;
+  my $type = shift;
+  my $bitmap = shift;
+  my $decl = shift;
+
+  my $size = keys(%$struct);
+  my $max;
+
+  return if (%$struct == 0);
+
+  $type .= " " if (!($type =~ m/\*$/));
+
+  if ($bitmap) {
+    printf OUT "struct %s", $name;
+    if ($decl) {
+      printf OUT " {\n\t\%s idx;\n\tchar *name;\n}", $type;
+    }
+    if ($decl) {
+      printf OUT ";\nextern struct %s", $name;
+    }
+    printf OUT " %s[%i]", $name, $size;
+  } else {
+    printf OUT "const %s%s[%i]", $type, $name, $size + 1;
+  }
+
+  if ($decl) {
+    printf OUT ";\n";
+  } else {
+    printf OUT " = {\n";
+
+    foreach my $i (sort keys %$struct) {
+      my $len = length($i);
+      $max = $len if ($len > $max);
+    }
+
+    foreach my $i (sort sort_func keys %$struct) {
+      if ($bitmap) {
+        printf OUT "\t{ %s, ", $i;
+      } else {
+        printf OUT "\t[%s] = ", $i;
+      }
+      my $len = length($i);
+      while ($len < $max) {
+        print OUT " ";
+        $len++;
+      }
+      if ($bitmap) {
+        printf OUT "\"%s\" },\n", $struct->{$i};
+      } else {
+        if ($type eq "char *") {
+          printf OUT "\"%s\",\n", $struct->{$i};
+        } else {
+          printf OUT "%s,\n", $struct->{$i};
+        }
+      }
+    }
+
+    if (!$bitmap) {
+      printf OUT "\t[%s] = ", $size;
+      if ($type eq "char *") {
+        printf OUT "NULL,\n";
+      } else {
+        printf OUT "0,\n";
+      }
+    }
+
+
+    printf OUT "};\n\n";
+  }
 }
 
 my $fe_file = "$dir/linux/dvb/frontend.h";
@@ -470,21 +483,47 @@ print OUT <<EOF;
 #define _DVB_V5_CONSTS_H
 #include "dvb_frontend.h"
 EOF
-output_arrays ("fe_caps_name", \%fe_caps, "unsigned", 1);
-output_arrays ("fe_status_name", \%fe_status, "unsigned", 1);
-output_arrays ("fe_code_rate_name", \%fe_code_rate, "char *", 0);
-output_arrays ("fe_modulation_name", \%fe_modulation, "char *", 0);
-output_arrays ("fe_transmission_mode_name", \%fe_t_mode, "char *", 0);
-output_arrays ("fe_bandwidth_name", \%fe_bw, "unsigned", 0);
-output_arrays ("fe_guard_interval_name", \%fe_guard_interval, "char *", 0);
-output_arrays ("fe_hierarchy_name", \%fe_hierarchy, "char *", 0);
-output_arrays ("fe_voltage_name", \%fe_voltage, "char *", 0);
-output_arrays ("fe_tone_name", \%fe_tone, "char *", 0);
-output_arrays ("fe_inversion_name", \%fe_inversion, "char *", 0);
-output_arrays ("fe_pilot_name", \%fe_pilot, "char *", 0);
-output_arrays ("fe_rolloff_name", \%fe_rolloff, "char *", 0);
-output_arrays ("dvb_v5_name", \%dvb_v5, "char *", 0);
-output_arrays ("delivery_system_name", \%fe_delivery_system, "char *", 0);
+output_arrays ("fe_caps_name", \%fe_caps, "unsigned", 1, 1);
+output_arrays ("fe_status_name", \%fe_status, "unsigned", 1, 1);
+output_arrays ("fe_code_rate_name", \%fe_code_rate, "char *", 0, 1);
+output_arrays ("fe_modulation_name", \%fe_modulation, "char *", 0, 1);
+output_arrays ("fe_transmission_mode_name", \%fe_t_mode, "char *", 0, 1);
+output_arrays ("fe_bandwidth_name", \%fe_bw, "unsigned", 0, 1);
+output_arrays ("fe_guard_interval_name", \%fe_guard_interval, "char *", 0, 1);
+output_arrays ("fe_hierarchy_name", \%fe_hierarchy, "char *", 0, 1);
+output_arrays ("fe_voltage_name", \%fe_voltage, "char *", 0, 1);
+output_arrays ("fe_tone_name", \%fe_tone, "char *", 0, 1);
+output_arrays ("fe_inversion_name", \%fe_inversion, "char *", 0, 1);
+output_arrays ("fe_pilot_name", \%fe_pilot, "char *", 0, 1);
+output_arrays ("fe_rolloff_name", \%fe_rolloff, "char *", 0, 1);
+output_arrays ("dvb_v5_name", \%dvb_v5, "char *", 0, 1);
+output_arrays ("delivery_system_name", \%fe_delivery_system, "char *", 0, 1);
 printf OUT "#endif\n";
 
 close OUT;
+
+# Generate a source file with the API conversions
+open OUT, ">dvb-v5.c" or die "Can't write on dvb-v5.c";
+print OUT <<EOF;
+/*
+ * File auto-generated from the kernel sources. Please, don't edit it
+ */
+#include "dvb-v5.h"
+EOF
+output_arrays ("fe_caps_name", \%fe_caps, "unsigned", 1, 0);
+output_arrays ("fe_status_name", \%fe_status, "unsigned", 1, 0);
+output_arrays ("fe_code_rate_name", \%fe_code_rate, "char *", 0, 0);
+output_arrays ("fe_modulation_name", \%fe_modulation, "char *", 0, 0);
+output_arrays ("fe_transmission_mode_name", \%fe_t_mode, "char *", 0, 0);
+output_arrays ("fe_bandwidth_name", \%fe_bw, "unsigned", 0, 0);
+output_arrays ("fe_guard_interval_name", \%fe_guard_interval, "char *", 0, 0);
+output_arrays ("fe_hierarchy_name", \%fe_hierarchy, "char *", 0, 0);
+output_arrays ("fe_voltage_name", \%fe_voltage, "char *", 0, 0);
+output_arrays ("fe_tone_name", \%fe_tone, "char *", 0, 0);
+output_arrays ("fe_inversion_name", \%fe_inversion, "char *", 0, 0);
+output_arrays ("fe_pilot_name", \%fe_pilot, "char *", 0, 0);
+output_arrays ("fe_rolloff_name", \%fe_rolloff, "char *", 0, 0);
+output_arrays ("dvb_v5_name", \%dvb_v5, "char *", 0, 0);
+output_arrays ("delivery_system_name", \%fe_delivery_system, "char *", 0, 0);
+
+close OUT;
diff --git a/lib/libdvbv5/libsat.c b/lib/libdvbv5/libsat.c
index 253e92e..e99cc25 100644
--- a/lib/libdvbv5/libsat.c
+++ b/lib/libdvbv5/libsat.c
@@ -23,6 +23,7 @@
 #include <unistd.h>
 
 #include "dvb-fe.h"
+#include "dvb-v5-std.h"
 
 struct dvbsat_lnb lnb[] = {
 	{
@@ -271,7 +272,8 @@ static int dvbsat_scr_odu_channel_change(struct diseqc_cmd *cmd,
 static int dvbsat_diseqc_set_input(struct dvb_v5_fe_parms *parms, uint16_t t)
 {
 	int rc;
-        enum dvbsat_polarization pol = parms->pol;
+        enum dvb_sat_polarization pol;
+        dvb_fe_retrieve_parm(parms, DTV_POLARIZATION,& pol);
 	int pol_v = (pol == POLARIZATION_V) || (pol == POLARIZATION_R);
 	int high_band = parms->high_band;
 	int sat_number = parms->sat_number;
@@ -346,7 +348,8 @@ static int dvbsat_diseqc_set_input(struct dvb_v5_fe_parms *parms, uint16_t t)
 int dvb_satellite_set_parms(struct dvb_v5_fe_parms *parms)
 {
 	struct dvbsat_lnb *lnb = parms->lnb;
-        enum dvbsat_polarization pol = parms->pol;
+        enum dvb_sat_polarization pol;
+        dvb_fe_retrieve_parm(parms, DTV_POLARIZATION,& pol);
 	uint32_t freq;
 	uint16_t t = 0;
 	uint32_t voltage = SEC_VOLTAGE_13;
diff --git a/utils/dvb/dvbv5-scan.c b/utils/dvb/dvbv5-scan.c
index 125e285..256fb00 100644
--- a/utils/dvb/dvbv5-scan.c
+++ b/utils/dvb/dvbv5-scan.c
@@ -35,6 +35,7 @@
 #include <linux/dvb/dmx.h>
 #include "dvb-file.h"
 #include "dvb-demux.h"
+#include "dvb-v5-std.h"
 #include "libscan.h"
 
 #define PROGRAM_NAME	"dvbv5-scan"
@@ -130,7 +131,7 @@ static int check_frontend(struct dvb_v5_fe_parms *parms, int timeout)
 static int new_freq_is_needed(struct dvb_entry *entry,
 			      struct dvb_entry *last_entry,
 			      uint32_t freq,
-			      enum dvbsat_polarization pol,
+			      enum dvb_sat_polarization pol,
 			      int shift)
 {
 	int i;
@@ -260,7 +261,7 @@ static void add_other_freq_entries(struct dvb_file *dvb_file,
 {
 	int i;
 	uint32_t freq, shift = 0;
-	enum dvbsat_polarization pol = POLARIZATION_OFF;
+	enum dvb_sat_polarization pol = POLARIZATION_OFF;
 
 	if (!dvb_desc->nit_table.frequency)
 		return;
-- 
1.7.2.5

--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux