From 1264b7b228668c8cb3d73d71617a820200fcad5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96man?= Date: Mon, 28 Sep 2009 19:35:59 +0000 Subject: [PATCH] Add support for the '-a' command line option. Used to specify which DVB adapters to use. --- src/dvb/dvb.c | 4 ++-- src/dvb/dvb.h | 4 ++-- src/dvb/dvb_adapter.c | 4 +++- src/main.c | 27 +++++++++++++++++++++++++-- 4 files changed, 32 insertions(+), 7 deletions(-) diff --git a/src/dvb/dvb.c b/src/dvb/dvb.c index 8ef90076..3543c401 100644 --- a/src/dvb/dvb.c +++ b/src/dvb/dvb.c @@ -22,9 +22,9 @@ #include "dvb_support.h" void -dvb_init(void) +dvb_init(uint32_t adapter_mask) { - dvb_adapter_init(); + dvb_adapter_init(adapter_mask); dvb_conversion_init(); } diff --git a/src/dvb/dvb.h b/src/dvb/dvb.h index 77858593..d5b391b2 100644 --- a/src/dvb/dvb.h +++ b/src/dvb/dvb.h @@ -198,12 +198,12 @@ typedef struct th_dvb_adapter { extern struct th_dvb_adapter_queue dvb_adapters; extern struct th_dvb_mux_instance_tree dvb_muxes; -void dvb_init(void); +void dvb_init(uint32_t adapter_mask); /** * DVB Adapter */ -void dvb_adapter_init(void); +void dvb_adapter_init(uint32_t adapter_mask); void dvb_adapter_mux_scanner(void *aux); diff --git a/src/dvb/dvb_adapter.c b/src/dvb/dvb_adapter.c index 85695790..ec34423b 100644 --- a/src/dvb/dvb_adapter.c +++ b/src/dvb/dvb_adapter.c @@ -272,7 +272,7 @@ tda_add(const char *path) * */ void -dvb_adapter_init(void) +dvb_adapter_init(uint32_t adapter_mask) { char path[200]; htsmsg_t *l, *c; @@ -284,9 +284,11 @@ dvb_adapter_init(void) TAILQ_INIT(&dvb_adapters); for(i = 0; i < 32; i++) { + if ((1 << i) & adapter_mask) { snprintf(path, sizeof(path), "/dev/dvb/adapter%d", i); tda_add(path); } + } l = hts_settings_load("dvbadapters"); if(l != NULL) { diff --git a/src/main.c b/src/main.c index e7a99b24..2636e404 100644 --- a/src/main.c +++ b/src/main.c @@ -160,6 +160,7 @@ usage(const char *argv0) printf("HTS Tvheadend %s\n", htsversion_full); printf("usage: %s [options]\n", argv0); printf("\n"); + printf(" -a Use only DVB adapters specified (csv)\n"); printf(" -f Fork and daemonize\n"); printf(" -u Run as user , only works with -f\n"); printf(" -g Run as group , only works with -f\n"); @@ -234,9 +235,31 @@ main(int argc, char **argv) const char *homedir = NULL; const char *rawts_input = NULL; const char *join_transport = NULL; + char *p, *endp; + uint32_t adapter_mask = 0xffffffff; - while((c = getopt(argc, argv, "fu:g:c:Chdr:j:")) != -1) { + while((c = getopt(argc, argv, "a:fu:g:c:Chdr:j:")) != -1) { switch(c) { + case 'a': + adapter_mask = 0x0; + p = strtok(optarg, ","); + if (p != NULL) { + do { + int adapter = strtol(p, &endp, 10); + if (*endp != 0 || adapter < 0 || adapter > 31) { + fprintf(stderr, "Invalid adapter number '%s'\n", p); + return 1; + } + adapter_mask |= (1 << adapter); + } while ((p = strtok(NULL, ",")) != NULL); + if (adapter_mask == 0x0) { + fprintf(stderr, "No adapters specified!\n"); + return 1; + } + } else { + usage(argv[0]); + } + break; case 'f': forkaway = 1; break; @@ -337,7 +360,7 @@ main(int argc, char **argv) tcp_server_init(); - dvb_init(); + dvb_init(adapter_mask); iptv_input_init();