Merge remote-tracking branch 'origin/pr/206'

This commit is contained in:
Adam Sutton 2013-01-07 21:25:13 +00:00
commit f1e4c480ec
4 changed files with 52 additions and 7 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);
}
/**
*
*/
@ -445,7 +465,7 @@ check_full_stream(th_dvb_adapter_t *tda)
*
*/
static void
tda_add(int adapter_num)
tda_add(int adapter_num, int frontend_num, int demux_num)
{
char path[200], fname[256];
int fe, i, r;
@ -453,7 +473,7 @@ tda_add(int adapter_num)
char buf[400];
snprintf(path, sizeof(path), "/dev/dvb/adapter%d", adapter_num);
snprintf(fname, sizeof(fname), "%s/frontend0", path);
snprintf(fname, sizeof(fname), "%s/frontend%d", path, frontend_num);
fe = tvh_open(fname, O_RDWR | O_NONBLOCK, 0);
if(fe == -1) {
@ -468,11 +488,12 @@ tda_add(int adapter_num)
tda->tda_adapter_num = adapter_num;
tda->tda_rootpath = strdup(path);
tda->tda_demux_path = malloc(256);
snprintf(tda->tda_demux_path, 256, "%s/demux0", path);
snprintf(tda->tda_demux_path, 256, "%s/demux%d", path, demux_num);
tda->tda_fe_path = strdup(fname);
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)
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);
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);

View file

@ -145,6 +145,7 @@ extjs_dvbadapter(http_connection_t *hc, const char *remain, void *opaque)
if(!strcmp(op, "load")) {
r = htsmsg_create_map();
htsmsg_add_str(r, "id", tda->tda_identifier);
htsmsg_add_u32(r, "enabled", tda->tda_enabled);
htsmsg_add_str(r, "device", tda->tda_rootpath ?: "No hardware attached");
htsmsg_add_str(r, "name", tda->tda_displayname);
htsmsg_add_u32(r, "automux", tda->tda_autodiscovery);
@ -173,6 +174,9 @@ extjs_dvbadapter(http_connection_t *hc, const char *remain, void *opaque)
if((s = http_arg_get(&hc->hc_req_args, "name")) != NULL)
dvb_adapter_set_displayname(tda, s);
s = http_arg_get(&hc->hc_req_args, "enabled");
dvb_adapter_set_enabled(tda, !!s);
s = http_arg_get(&hc->hc_req_args, "automux");
dvb_adapter_set_auto_discovery(tda, !!s);

View file

@ -1095,7 +1095,7 @@ tvheadend.dvb_adapter_general = function(adapterData, satConfStore) {
var confreader = new Ext.data.JsonReader({
root : 'dvbadapters'
}, [ 'name', 'automux', 'skip_initialscan', 'idlescan', 'diseqcversion',
}, [ 'name', 'enabled', 'automux', 'skip_initialscan', 'idlescan', 'diseqcversion',
'diseqcrepeats', 'qmon', 'skip_checksubscr',
'poweroff', 'sidtochan', 'nitoid', 'extrapriority',
,'disable_pmt_monitor', 'full_mux_rx', 'idleclose' ]);
@ -1116,6 +1116,10 @@ tvheadend.dvb_adapter_general = function(adapterData, satConfStore) {
name : 'name',
width : 250
},
new Ext.form.Checkbox({
fieldLabel : 'Enabled',
name : 'enabled'
}),
new Ext.form.Checkbox({
fieldLabel : 'Autodetect muxes',
name : 'automux'