diff --git a/src/dvb/dvb.h b/src/dvb/dvb.h index 5ff64f63..14e8ef68 100644 --- a/src/dvb/dvb.h +++ b/src/dvb/dvb.h @@ -217,6 +217,7 @@ typedef struct th_dvb_adapter { uint32_t tda_diseqc_repeats; uint32_t tda_disable_pmt_monitor; int32_t tda_full_mux_rx; + uint32_t tda_grace_period; char *tda_displayname; char *tda_fe_path; @@ -374,6 +375,8 @@ void dvb_adapter_set_disable_pmt_monitor(th_dvb_adapter_t *tda, int on); void dvb_adapter_set_full_mux_rx(th_dvb_adapter_t *tda, int r); +void dvb_adapter_set_grace_period(th_dvb_adapter_t *tda, uint32_t p); + void dvb_adapter_clone(th_dvb_adapter_t *dst, th_dvb_adapter_t *src); void dvb_adapter_clean(th_dvb_adapter_t *tda); diff --git a/src/dvb/dvb_adapter.c b/src/dvb/dvb_adapter.c index 6a1b1cc5..86e42c31 100644 --- a/src/dvb/dvb_adapter.c +++ b/src/dvb/dvb_adapter.c @@ -106,6 +106,7 @@ tda_save(th_dvb_adapter_t *tda) htsmsg_add_u32(m, "skip_initialscan", tda->tda_skip_initialscan); htsmsg_add_u32(m, "disable_pmt_monitor", tda->tda_disable_pmt_monitor); htsmsg_add_s32(m, "full_mux_rx", tda->tda_full_mux_rx); + htsmsg_add_u32(m, "grace_period", tda->tda_grace_period); hts_settings_save(m, "dvbadapters/%s", tda->tda_identifier); htsmsg_destroy(m); } @@ -424,6 +425,22 @@ dvb_adapter_set_full_mux_rx(th_dvb_adapter_t *tda, int on) tda_save(tda); } +/** + * + */ +void +dvb_adapter_set_grace_period(th_dvb_adapter_t *tda, uint32_t p) +{ + if (tda->tda_grace_period == p) + return; + + tvhlog(LOG_NOTICE, "dvb", + "Adapter \"%s\" set grace period to %d", tda->tda_displayname, p); + + tda->tda_grace_period = p; + tda_save(tda); +} + /** * @@ -776,6 +793,8 @@ dvb_adapter_init(uint32_t adapter_mask, const char *rawfile) htsmsg_get_u32(c, "extrapriority", &tda->tda_extrapriority); htsmsg_get_u32(c, "skip_initialscan", &tda->tda_skip_initialscan); htsmsg_get_u32(c, "disable_pmt_monitor", &tda->tda_disable_pmt_monitor); + if (htsmsg_get_u32(c, "grace_period", &tda->tda_grace_period)) + tda->tda_grace_period = 10; if (htsmsg_get_s32(c, "full_mux_rx", &tda->tda_full_mux_rx)) if (!htsmsg_get_u32(c, "disable_full_mux_rx", &u32) && u32) tda->tda_full_mux_rx = 0; diff --git a/src/dvb/dvb_service.c b/src/dvb/dvb_service.c index 5ca5a29e..c927ec3e 100644 --- a/src/dvb/dvb_service.c +++ b/src/dvb/dvb_service.c @@ -339,6 +339,8 @@ dvb_service_setsourceinfo(service_t *t, struct source_info *si) static int dvb_grace_period(service_t *t) { + if (t->s_dvb_mux_instance && t->s_dvb_mux_instance->tdmi_adapter) + return t->s_dvb_mux_instance->tdmi_adapter->tda_grace_period ?: 10; return 10; } diff --git a/src/webui/extjs_dvb.c b/src/webui/extjs_dvb.c index 0919e5ac..4aefa6b7 100644 --- a/src/webui/extjs_dvb.c +++ b/src/webui/extjs_dvb.c @@ -159,6 +159,7 @@ extjs_dvbadapter(http_connection_t *hc, const char *remain, void *opaque) htsmsg_add_u32(r, "nitoid", tda->tda_nitoid); htsmsg_add_u32(r, "disable_pmt_monitor", tda->tda_disable_pmt_monitor); htsmsg_add_u32(r, "full_mux_rx", tda->tda_full_mux_rx+1); + htsmsg_add_u32(r, "grace_period", tda->tda_grace_period); htsmsg_add_str(r, "diseqcversion", ((const char *[]){"DiSEqC 1.0 / 2.0", "DiSEqC 1.1 / 2.1"}) @@ -207,6 +208,9 @@ extjs_dvbadapter(http_connection_t *hc, const char *remain, void *opaque) s = http_arg_get(&hc->hc_req_args, "full_mux_rx"); dvb_adapter_set_full_mux_rx(tda, atoi(s)-1); + s = http_arg_get(&hc->hc_req_args, "grace_period"); + dvb_adapter_set_grace_period(tda, atoi(s)); + if((s = http_arg_get(&hc->hc_req_args, "nitoid")) != NULL) dvb_adapter_set_nitoid(tda, atoi(s)); diff --git a/src/webui/static/app/dvb.js b/src/webui/static/app/dvb.js index 5710640a..eeca7090 100644 --- a/src/webui/static/app/dvb.js +++ b/src/webui/static/app/dvb.js @@ -1165,7 +1165,7 @@ tvheadend.dvb_adapter_general = function(adapterData, satConfStore) { }, [ 'name', 'enabled', 'automux', 'skip_initialscan', 'idlescan', 'diseqcversion', 'diseqcrepeats', 'qmon', 'skip_checksubscr', 'poweroff', 'sidtochan', 'nitoid', 'extrapriority', - ,'disable_pmt_monitor', 'full_mux_rx', 'idleclose' ]); + ,'disable_pmt_monitor', 'full_mux_rx', 'idleclose', 'grace_period' ]); function saveConfForm() { confform.getForm().submit({ @@ -1228,6 +1228,10 @@ tvheadend.dvb_adapter_general = function(adapterData, satConfStore) { fields: [ 'num', 'str' ], store : [ [0, 'Auto'], [1, 'Off'], [2, 'On'] ] }), + new Ext.form.NumberField({ + fieldLabel: 'Grace Period', + name: 'grace_period' + }), new Ext.form.Checkbox({ fieldLabel : 'Disable PMT monitoring', name : 'disable_pmt_monitor'