From: Andreas Ă–man Date: Fri, 8 Jan 2010 09:21:37 +0000 (+0000) Subject: * It's now possible to enable/disable the signal quality monitor per X-Git-Tag: 2.12~317 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=8d32499e116a2ff287c54926d82028dde55f58e5;p=thirdparty%2Ftvheadend.git * It's now possible to enable/disable the signal quality monitor per adapter. This is now default off as it seem to mostly cause problems for people and it's only useful if you have complex setups with multiple adapters, etc. --- diff --git a/debian/changelog b/debian/changelog index 182f205e7..5831f7afe 100644 --- a/debian/changelog +++ b/debian/changelog @@ -5,6 +5,11 @@ hts-tvheadend (2.8) hts; urgency=low * Added support for manual creation of DVR entries. Prior to this it was only possible to schedule a recording based on EPG entries. + * It's now possible to enable/disable the signal quality monitor per + adapter. This is now default off as it seem to mostly cause problems + for people and it's only useful if you have complex setups with + multiple adapters, etc. + hts-tvheadend (2.7) hts; urgency=low * Added support for DVB subtitles. Currently only forwarded over HTSP diff --git a/src/dvb/dvb.h b/src/dvb/dvb.h index d08fde2eb..b52b39eae 100644 --- a/src/dvb/dvb.h +++ b/src/dvb/dvb.h @@ -163,6 +163,7 @@ typedef struct th_dvb_adapter { char *tda_identifier; uint32_t tda_autodiscovery; uint32_t tda_idlescan; + uint32_t tda_qmon; uint32_t tda_diseqc_version; char *tda_displayname; @@ -213,6 +214,8 @@ void dvb_adapter_set_auto_discovery(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); + void dvb_adapter_set_diseqc_version(th_dvb_adapter_t *tda, unsigned int v); void dvb_adapter_clone(th_dvb_adapter_t *dst, th_dvb_adapter_t *src); diff --git a/src/dvb/dvb_adapter.c b/src/dvb/dvb_adapter.c index 7e0a684a3..5ad5c3ed0 100644 --- a/src/dvb/dvb_adapter.c +++ b/src/dvb/dvb_adapter.c @@ -78,6 +78,7 @@ tda_save(th_dvb_adapter_t *tda) htsmsg_add_str(m, "displayname", tda->tda_displayname); htsmsg_add_u32(m, "autodiscovery", tda->tda_autodiscovery); htsmsg_add_u32(m, "idlescan", tda->tda_idlescan); + htsmsg_add_u32(m, "qmon", tda->tda_qmon); htsmsg_add_u32(m, "diseqc_version", tda->tda_diseqc_version); hts_settings_save(m, "dvbadapters/%s", tda->tda_identifier); htsmsg_destroy(m); @@ -145,6 +146,25 @@ dvb_adapter_set_idlescan(th_dvb_adapter_t *tda, int on) } +/** + * + */ +void +dvb_adapter_set_qmon(th_dvb_adapter_t *tda, int on) +{ + if(tda->tda_qmon == on) + return; + + lock_assert(&global_lock); + + tvhlog(LOG_NOTICE, "dvb", "Adapter \"%s\" quality monitoring set to: %s", + tda->tda_displayname, on ? "On" : "Off"); + + tda->tda_qmon = on; + tda_save(tda); +} + + /** * */ @@ -298,6 +318,7 @@ dvb_adapter_init(uint32_t adapter_mask) htsmsg_get_u32(c, "autodiscovery", &tda->tda_autodiscovery); htsmsg_get_u32(c, "idlescan", &tda->tda_idlescan); + htsmsg_get_u32(c, "qmon", &tda->tda_qmon); htsmsg_get_u32(c, "diseqc_version", &tda->tda_diseqc_version); } htsmsg_destroy(l); @@ -337,11 +358,14 @@ dvb_adapter_mux_scanner(void *aux) } if(!tda->tda_idlescan && TAILQ_FIRST(&tda->tda_scan_queues[0]) == NULL) { - /* Idlescan is disabled and no muxes are bad. - If the currently tuned mux is ok, we can stick to it */ + /* Idlescan is disabled and no muxes are bad */ + + if(!tda->tda_qmon) + return; // Quality monitoring is disabled + + /* If the currently tuned mux is ok, we can stick to it */ tdmi = tda->tda_mux_current; - if(tdmi != NULL && tdmi->tdmi_quality > 90) return; } diff --git a/src/dvb/dvb_fe.c b/src/dvb/dvb_fe.c index b03607463..d49e3bf9b 100644 --- a/src/dvb/dvb_fe.c +++ b/src/dvb/dvb_fe.c @@ -123,13 +123,17 @@ dvb_fe_monitor(void *aux) } if(status != TDMI_FE_UNKNOWN) { - q = tdmi->tdmi_quality + (status - TDMI_FE_OK + 1); - q = MAX(MIN(q, 100), 0); + if(tda->tda_qmon) { + q = tdmi->tdmi_quality + (status - TDMI_FE_OK + 1); + q = MAX(MIN(q, 100), 0); + } else { + q = 100; + } if(q != tdmi->tdmi_quality) { tdmi->tdmi_quality = q; update = 1; } - } + } if(update) { htsmsg_t *m = htsmsg_create_map(); diff --git a/src/webui/extjs.c b/src/webui/extjs.c index bc26d6caa..2920c26a8 100644 --- a/src/webui/extjs.c +++ b/src/webui/extjs.c @@ -1048,6 +1048,7 @@ extjs_dvbadapter(http_connection_t *hc, const char *remain, void *opaque) htsmsg_add_str(r, "name", tda->tda_displayname); htsmsg_add_u32(r, "automux", tda->tda_autodiscovery); htsmsg_add_u32(r, "idlescan", tda->tda_idlescan); + htsmsg_add_u32(r, "qmon", tda->tda_qmon); htsmsg_add_str(r, "diseqcversion", ((const char *[]){"DiSEqC 1.0 / 2.0", "DiSEqC 1.1 / 2.1"}) @@ -1065,6 +1066,9 @@ extjs_dvbadapter(http_connection_t *hc, const char *remain, void *opaque) s = http_arg_get(&hc->hc_req_args, "idlescan"); dvb_adapter_set_idlescan(tda, !!s); + s = http_arg_get(&hc->hc_req_args, "qmon"); + dvb_adapter_set_qmon(tda, !!s); + if((s = http_arg_get(&hc->hc_req_args, "diseqcversion")) != NULL) { if(!strcmp(s, "DiSEqC 1.0 / 2.0")) dvb_adapter_set_diseqc_version(tda, 0); diff --git a/src/webui/static/app/dvb.js b/src/webui/static/app/dvb.js index 8a5ee629a..9dde4a332 100644 --- a/src/webui/static/app/dvb.js +++ b/src/webui/static/app/dvb.js @@ -1008,7 +1008,7 @@ tvheadend.dvb_adapter_general = function(adapterData, satConfStore) { var confreader = new Ext.data.JsonReader({ root: 'dvbadapters' - }, ['name', 'automux', 'idlescan', 'diseqcversion']); + }, ['name', 'automux', 'idlescan', 'diseqcversion', 'qmon']); function saveConfForm () { @@ -1032,6 +1032,10 @@ tvheadend.dvb_adapter_general = function(adapterData, satConfStore) { new Ext.form.Checkbox({ fieldLabel: 'Idle scanning', name: 'idlescan' + }), + new Ext.form.Checkbox({ + fieldLabel: 'Monitor signal quality', + name: 'qmon' }) ]; @@ -1057,7 +1061,7 @@ tvheadend.dvb_adapter_general = function(adapterData, satConfStore) { style:'margin:10px', bodyStyle:'padding:5px', labelAlign: 'right', - labelWidth: 110, + labelWidth: 130, waitMsgTarget: true, reader: confreader, defaultType: 'textfield',