* 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
char *tda_identifier;
uint32_t tda_autodiscovery;
uint32_t tda_idlescan;
+ uint32_t tda_qmon;
uint32_t tda_diseqc_version;
char *tda_displayname;
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);
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);
}
+/**
+ *
+ */
+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);
+}
+
+
/**
*
*/
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);
}
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;
}
}
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();
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"})
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);
var confreader = new Ext.data.JsonReader({
root: 'dvbadapters'
- }, ['name', 'automux', 'idlescan', 'diseqcversion']);
+ }, ['name', 'automux', 'idlescan', 'diseqcversion', 'qmon']);
function saveConfForm () {
new Ext.form.Checkbox({
fieldLabel: 'Idle scanning',
name: 'idlescan'
+ }),
+ new Ext.form.Checkbox({
+ fieldLabel: 'Monitor signal quality',
+ name: 'qmon'
})
];
style:'margin:10px',
bodyStyle:'padding:5px',
labelAlign: 'right',
- labelWidth: 110,
+ labelWidth: 130,
waitMsgTarget: true,
reader: confreader,
defaultType: 'textfield',