diff --git a/src/dvb/dvb.h b/src/dvb/dvb.h index 9e627354..a4d0c876 100644 --- a/src/dvb/dvb.h +++ b/src/dvb/dvb.h @@ -218,6 +218,8 @@ typedef struct th_dvb_adapter { uint32_t tda_extrapriority; // extra priority for choosing the best adapter/service + uint32_t tda_skip_initialscan; // skip the initial scan + } th_dvb_adapter_t; /** @@ -278,6 +280,8 @@ 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_set_skip_initialscan(th_dvb_adapter_t *tda, int on); + void dvb_adapter_set_idlescan(th_dvb_adapter_t *tda, int on); void dvb_adapter_set_qmon(th_dvb_adapter_t *tda, int on); diff --git a/src/dvb/dvb_adapter.c b/src/dvb/dvb_adapter.c index 77427bbc..5f0bfe86 100644 --- a/src/dvb/dvb_adapter.c +++ b/src/dvb/dvb_adapter.c @@ -89,6 +89,7 @@ tda_save(th_dvb_adapter_t *tda) htsmsg_add_u32(m, "nitoid", tda->tda_nitoid); htsmsg_add_u32(m, "diseqc_version", tda->tda_diseqc_version); htsmsg_add_u32(m, "extrapriority", tda->tda_extrapriority); + htsmsg_add_u32(m, "skip_initialscan", tda->tda_skip_initialscan); hts_settings_save(m, "dvbadapters/%s", tda->tda_identifier); htsmsg_destroy(m); } @@ -136,6 +137,25 @@ 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) +{ + if(tda->tda_skip_initialscan == on) + return; + + lock_assert(&global_lock); + + tvhlog(LOG_NOTICE, "dvb", "Adapter \"%s\" skip initial scan set to: %s", + tda->tda_displayname, on ? "On" : "Off"); + + tda->tda_skip_initialscan = on; + tda_save(tda); +} + + /** * */ @@ -404,6 +424,7 @@ dvb_adapter_init(uint32_t adapter_mask) htsmsg_get_u32(c, "nitoid", &tda->tda_nitoid); htsmsg_get_u32(c, "diseqc_version", &tda->tda_diseqc_version); htsmsg_get_u32(c, "extrapriority", &tda->tda_extrapriority); + htsmsg_get_u32(c, "skip_initialscan", &tda->tda_skip_initialscan); } htsmsg_destroy(l); } diff --git a/src/dvb/dvb_multiplex.c b/src/dvb/dvb_multiplex.c index 9e67fcd5..e1be2b44 100644 --- a/src/dvb/dvb_multiplex.c +++ b/src/dvb/dvb_multiplex.c @@ -287,6 +287,8 @@ dvb_mux_create(th_dvb_adapter_t *tda, const struct dvb_mux_conf *dmc, tda->tda_initial_num_mux++; tdmi->tdmi_table_initial = 1; mux_link_initial(tda, tdmi); + } else { + dvb_mux_add_to_scan_queue(tdmi); } TAILQ_INIT(&tdmi->tdmi_epg_grab); @@ -731,7 +733,8 @@ tdmi_create_by_msg(th_dvb_adapter_t *tda, htsmsg_t *m, const char *identifier) dmc.dmc_satconf = NULL; tdmi = dvb_mux_create(tda, &dmc, - tsid, htsmsg_get_str(m, "network"), NULL, enabled, 1, + tsid, htsmsg_get_str(m, "network"), NULL, enabled, + tda->tda_skip_initialscan ? 0 : 1, identifier, NULL); if(tdmi != NULL) { diff --git a/src/webui/extjs_dvb.c b/src/webui/extjs_dvb.c index b9b918ba..1eb4e490 100644 --- a/src/webui/extjs_dvb.c +++ b/src/webui/extjs_dvb.c @@ -148,6 +148,7 @@ extjs_dvbadapter(http_connection_t *hc, const char *remain, void *opaque) 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); + htsmsg_add_u32(r, "skip_initialscan", tda->tda_skip_initialscan); htsmsg_add_u32(r, "idlescan", tda->tda_idlescan); htsmsg_add_u32(r, "qmon", tda->tda_qmon); htsmsg_add_u32(r, "dumpmux", tda->tda_dump_muxes); @@ -167,6 +168,9 @@ extjs_dvbadapter(http_connection_t *hc, const char *remain, void *opaque) s = http_arg_get(&hc->hc_req_args, "automux"); dvb_adapter_set_auto_discovery(tda, !!s); + s = http_arg_get(&hc->hc_req_args, "skip_initialscan"); + dvb_adapter_set_skip_initialscan(tda, !!s); + s = http_arg_get(&hc->hc_req_args, "idlescan"); dvb_adapter_set_idlescan(tda, !!s); diff --git a/src/webui/static/app/dvb.js b/src/webui/static/app/dvb.js index 9c7b7761..13f3976e 100644 --- a/src/webui/static/app/dvb.js +++ b/src/webui/static/app/dvb.js @@ -1105,7 +1105,7 @@ tvheadend.dvb_adapter_general = function(adapterData, satConfStore) { var confreader = new Ext.data.JsonReader({ root: 'dvbadapters' - }, ['name', 'automux', 'idlescan', 'diseqcversion', 'qmon', + }, ['name', 'automux', 'skip_initialscan', 'idlescan', 'diseqcversion', 'qmon', 'dumpmux', 'nitoid','extrapriority']); @@ -1127,6 +1127,10 @@ tvheadend.dvb_adapter_general = function(adapterData, satConfStore) { fieldLabel: 'Autodetect muxes', name: 'automux' }), + new Ext.form.Checkbox({ + fieldLabel: 'Skip initial scan', + name: 'skip_initialscan' + }), new Ext.form.Checkbox({ fieldLabel: 'Idle scanning', name: 'idlescan'