Add new tda_enabled flag and close frontend after getting information so other frontends can be proped

This commit is contained in:
BtbN 2013-01-06 22:28:00 +01:00
parent 5f41fde7b6
commit d19b9b85a1
2 changed files with 40 additions and 3 deletions

View file

@ -200,6 +200,8 @@ typedef struct th_dvb_adapter {
int tda_table_epollfd;
uint32_t tda_enabled;
const char *tda_rootpath;
char *tda_identifier;
uint32_t tda_autodiscovery;
@ -342,6 +344,8 @@ void dvb_adapter_stop (th_dvb_adapter_t *tda);
void dvb_adapter_set_displayname(th_dvb_adapter_t *tda, const char *s);
void dvb_adapter_set_enabled(th_dvb_adapter_t *tda, uint32_t enabled);
void dvb_adapter_set_auto_discovery(th_dvb_adapter_t *tda, int on);
void dvb_adapter_set_skip_initialscan(th_dvb_adapter_t *tda, int on);

View file

@ -80,6 +80,7 @@ tda_save(th_dvb_adapter_t *tda)
lock_assert(&global_lock);
htsmsg_add_u32(m, "enabled", tda->tda_enabled);
htsmsg_add_str(m, "type", dvb_adaptertype_to_str(tda->tda_type));
htsmsg_add_str(m, "displayname", tda->tda_displayname);
htsmsg_add_u32(m, "autodiscovery", tda->tda_autodiscovery);
@ -124,6 +125,25 @@ dvb_adapter_set_displayname(th_dvb_adapter_t *tda, const char *s)
}
/**
*
*/
void
dvb_adapter_set_enabled(th_dvb_adapter_t *tda, uint32_t enabled)
{
if(tda->tda_enabled == enabled)
return;
lock_assert(&global_lock);
tvhlog(LOG_NOTICE, "dvb", "Adapter \"%s\" enabled set to \"%s\"",
tda->tda_displayname, enabled ? "Enabled" : "Disabled");
tda->tda_enabled = enabled;
tda_save(tda);
}
/**
*
*/
@ -473,6 +493,7 @@ tda_add(int adapter_num, int frontend_num, int demux_num)
tda->tda_fe_fd = -1;
tda->tda_dvr_pipe.rd = -1;
tda->tda_full_mux_rx = -1;
tda->tda_enabled = 0;
tda->tda_fe_info = malloc(sizeof(struct dvb_frontend_info));
@ -482,7 +503,9 @@ tda_add(int adapter_num, int frontend_num, int demux_num)
free(tda);
return;
}
tda->tda_fe_fd = fe;
close(fe);
fe = -1;
tda->tda_type = tda->tda_fe_info->type;
@ -540,6 +563,8 @@ tda_add_from_file(const char *filename)
tda->tda_fe_fd = -1;
tda->tda_dvr_pipe.rd = -1;
tda->tda_enabled = 1;
tda->tda_type = -1;
snprintf(buf, sizeof(buf), "%s", filename);
@ -588,6 +613,11 @@ static void tda_init_input (th_dvb_adapter_t *tda)
void
dvb_adapter_start ( th_dvb_adapter_t *tda )
{
if(tda->tda_enabled == 0) {
tvhlog(LOG_INFO, "dvb", "Adapter \"%s\" cannot be started - it's disabled", tda->tda_displayname);
return;
}
/* Open front end */
if (tda->tda_fe_fd == -1) {
tda->tda_fe_fd = tvh_open(tda->tda_fe_path, O_RDWR | O_NONBLOCK, 0);
@ -642,7 +672,7 @@ dvb_adapter_init(uint32_t adapter_mask, const char *rawfile)
htsmsg_t *l, *c;
htsmsg_field_t *f;
const char *name, *s;
int i, type;
int i, j, type;
uint32_t u32;
th_dvb_adapter_t *tda;
@ -651,7 +681,8 @@ dvb_adapter_init(uint32_t adapter_mask, const char *rawfile)
/* Initialise hardware */
for(i = 0; i < 32; i++)
if ((1 << i) & adapter_mask)
tda_add(i, 0, 0);
for(j = 0; j < 32; j++)
tda_add(i, j, 0);
/* Initialise rawts test file */
if(rawfile)
@ -675,6 +706,7 @@ dvb_adapter_init(uint32_t adapter_mask, const char *rawfile)
tda = tda_alloc();
tda->tda_identifier = strdup(f->hmf_name);
tda->tda_type = type;
tda->tda_enabled = 0;
TAILQ_INSERT_TAIL(&dvb_adapters, tda, tda_global_link);
} else {
if(type != tda->tda_type)
@ -684,6 +716,7 @@ dvb_adapter_init(uint32_t adapter_mask, const char *rawfile)
free(tda->tda_displayname);
tda->tda_displayname = strdup(name);
htsmsg_get_u32(c, "enabled", &tda->tda_enabled);
htsmsg_get_u32(c, "autodiscovery", &tda->tda_autodiscovery);
htsmsg_get_u32(c, "idlescan", &tda->tda_idlescan);
htsmsg_get_u32(c, "idleclose", &tda->tda_idleclose);