Add support for the '-a' command line option. Used to specify which DVB adapters to use.

This commit is contained in:
Andreas Öman 2009-09-28 19:35:59 +00:00
parent 8211a3a19b
commit 1264b7b228
4 changed files with 32 additions and 7 deletions

View file

@ -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();
}

View file

@ -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);

View file

@ -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) {

View file

@ -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 <adapters> Use only DVB adapters specified (csv)\n");
printf(" -f Fork and daemonize\n");
printf(" -u <username> Run as user <username>, only works with -f\n");
printf(" -g <groupname> Run as group <groupname>, 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();