Add support for switching automatic DVB multiplex discovery on/off.
Fixes issue #17
This commit is contained in:
parent
8066398c0b
commit
04bc7b609f
5 changed files with 58 additions and 19 deletions
|
@ -44,6 +44,8 @@ void dvb_adapter_notify_reload(th_dvb_adapter_t *tda);
|
|||
|
||||
void dvb_adapter_set_displayname(th_dvb_adapter_t *tda, const char *s);
|
||||
|
||||
void dvb_adapter_set_auto_discovery(th_dvb_adapter_t *tda, int on);
|
||||
|
||||
void dvb_adapter_clone(th_dvb_adapter_t *dst, th_dvb_adapter_t *src);
|
||||
|
||||
int dvb_adapter_destroy(th_dvb_adapter_t *tda);
|
||||
|
|
|
@ -78,6 +78,7 @@ tda_save(th_dvb_adapter_t *tda)
|
|||
|
||||
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);
|
||||
hts_settings_save(m, "dvbadapters/%s", tda->tda_identifier);
|
||||
htsmsg_destroy(m);
|
||||
}
|
||||
|
@ -89,7 +90,15 @@ tda_save(th_dvb_adapter_t *tda)
|
|||
void
|
||||
dvb_adapter_set_displayname(th_dvb_adapter_t *tda, const char *s)
|
||||
{
|
||||
htsmsg_t *m = htsmsg_create();
|
||||
htsmsg_t *m;
|
||||
|
||||
if(!strcmp(s, tda->tda_displayname))
|
||||
return;
|
||||
|
||||
tvhlog(LOG_NOTICE, "dvb", "Adapter \"%s\" renamed to \"%s\"",
|
||||
tda->tda_displayname, s);
|
||||
|
||||
m = htsmsg_create();
|
||||
htsmsg_add_str(m, "id", tda->tda_identifier);
|
||||
|
||||
free(tda->tda_displayname);
|
||||
|
@ -103,6 +112,23 @@ dvb_adapter_set_displayname(th_dvb_adapter_t *tda, const char *s)
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
void
|
||||
dvb_adapter_set_auto_discovery(th_dvb_adapter_t *tda, int on)
|
||||
{
|
||||
if(tda->tda_autodiscovery == on)
|
||||
return;
|
||||
|
||||
tvhlog(LOG_NOTICE, "dvb", "Adapter \"%s\" mux autodiscovery set to %s",
|
||||
tda->tda_displayname, on ? "On" : "Off");
|
||||
|
||||
tda->tda_autodiscovery = on;
|
||||
tda_save(tda);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
|
@ -161,7 +187,8 @@ tda_add(const char *path)
|
|||
buf[i] = '_';
|
||||
|
||||
tda->tda_identifier = strdup(buf);
|
||||
|
||||
|
||||
tda->tda_autodiscovery = tda->tda_type != FE_QPSK;
|
||||
|
||||
/* Come up with an initial displayname, user can change it and it will
|
||||
be overridden by any stored settings later on */
|
||||
|
@ -205,33 +232,32 @@ dvb_adapter_init(void)
|
|||
|
||||
name = htsmsg_get_str(c, "displayname");
|
||||
|
||||
if((tda = dvb_adapter_find_by_identifier(f->hmf_name)) != NULL) {
|
||||
/* Already loaded */
|
||||
|
||||
free(tda->tda_displayname);
|
||||
tda->tda_displayname = strdup(name);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
if((s = htsmsg_get_str(c, "type")) == NULL ||
|
||||
(type = dvb_str_to_adaptertype(s)) < 0)
|
||||
continue;
|
||||
|
||||
tda = tda_alloc();
|
||||
tda->tda_identifier = strdup(f->hmf_name);
|
||||
if((tda = dvb_adapter_find_by_identifier(f->hmf_name)) == NULL) {
|
||||
/* Not discovered by hardware, create it */
|
||||
|
||||
tda = tda_alloc();
|
||||
tda->tda_identifier = strdup(f->hmf_name);
|
||||
tda->tda_type = type;
|
||||
TAILQ_INSERT_TAIL(&dvb_adapters, tda, tda_global_link);
|
||||
} else {
|
||||
if(type != tda->tda_type)
|
||||
continue; /* Something is wrong, ignore */
|
||||
}
|
||||
|
||||
free(tda->tda_displayname);
|
||||
tda->tda_displayname = strdup(name);
|
||||
tda->tda_type = type;
|
||||
|
||||
TAILQ_INSERT_TAIL(&dvb_adapters, tda, tda_global_link);
|
||||
|
||||
htsmsg_get_u32(c, "autodiscovery", &tda->tda_autodiscovery);
|
||||
}
|
||||
htsmsg_destroy(l);
|
||||
}
|
||||
|
||||
TAILQ_FOREACH(tda, &dvb_adapters, tda_global_link)
|
||||
dvb_mux_load(tda);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -537,6 +537,9 @@ dvb_table_cable_delivery(th_dvb_mux_instance_t *tdmi, uint8_t *ptr, int len,
|
|||
int freq, symrate;
|
||||
struct dvb_frontend_parameters fe_param;
|
||||
|
||||
if(!tdmi->tdmi_adapter->tda_autodiscovery)
|
||||
return;
|
||||
|
||||
if(len < 11) {
|
||||
printf("Invalid CABLE DESCRIPTOR\n");
|
||||
return;
|
||||
|
@ -578,6 +581,9 @@ dvb_table_sat_delivery(th_dvb_mux_instance_t *tdmi, uint8_t *ptr, int len,
|
|||
int freq, symrate, pol;
|
||||
struct dvb_frontend_parameters fe_param;
|
||||
|
||||
if(!tdmi->tdmi_adapter->tda_autodiscovery)
|
||||
return;
|
||||
|
||||
if(len < 11)
|
||||
return;
|
||||
|
||||
|
|
2
tvhead.h
2
tvhead.h
|
@ -232,7 +232,7 @@ typedef struct th_dvb_adapter {
|
|||
|
||||
const char *tda_rootpath;
|
||||
char *tda_identifier;
|
||||
|
||||
uint32_t tda_autodiscovery;
|
||||
char *tda_displayname;
|
||||
|
||||
pthread_mutex_t tda_lock;
|
||||
|
|
|
@ -392,7 +392,7 @@ extjs_dvbadapter(http_connection_t *hc, http_reply_t *hr,
|
|||
htsmsg_add_str(r, "id", tda->tda_identifier);
|
||||
htsmsg_add_str(r, "device", tda->tda_rootpath ?: "No hardware attached");
|
||||
htsmsg_add_str(r, "name", tda->tda_displayname);
|
||||
htsmsg_add_u32(r, "automux", 1);
|
||||
htsmsg_add_u32(r, "automux", tda->tda_autodiscovery);
|
||||
|
||||
out = json_single_record(r, "dvbadapters");
|
||||
} else if(!strcmp(op, "save")) {
|
||||
|
@ -400,6 +400,11 @@ extjs_dvbadapter(http_connection_t *hc, http_reply_t *hr,
|
|||
if((s = http_arg_get(&hc->hc_req_args, "name")) != NULL)
|
||||
dvb_adapter_set_displayname(tda, s);
|
||||
|
||||
if((s = http_arg_get(&hc->hc_req_args, "automux")) != NULL)
|
||||
dvb_adapter_set_auto_discovery(tda, 1);
|
||||
else
|
||||
dvb_adapter_set_auto_discovery(tda, 0);
|
||||
|
||||
out = htsmsg_create();
|
||||
htsmsg_add_u32(out, "success", 1);
|
||||
} else if(!strcmp(op, "addnetwork")) {
|
||||
|
|
Loading…
Add table
Reference in a new issue