diff --git a/src/dvb/dvb.h b/src/dvb/dvb.h index d1bb3117..0f769ec2 100644 --- a/src/dvb/dvb.h +++ b/src/dvb/dvb.h @@ -178,6 +178,7 @@ typedef struct th_dvb_adapter { uint32_t tda_skip_checksubscr; uint32_t tda_qmon; uint32_t tda_poweroff; + uint32_t tda_sidtochan; uint32_t tda_nitoid; uint32_t tda_diseqc_version; char *tda_displayname; @@ -293,6 +294,8 @@ void dvb_adapter_set_dump_muxes(th_dvb_adapter_t *tda, int on); void dvb_adapter_set_poweroff(th_dvb_adapter_t *tda, int on); +void dvb_adapter_set_sidtochan(th_dvb_adapter_t *tda, int on); + void dvb_adapter_set_nitoid(th_dvb_adapter_t *tda, int nitoid); void dvb_adapter_set_diseqc_version(th_dvb_adapter_t *tda, unsigned int v); diff --git a/src/dvb/dvb_adapter.c b/src/dvb/dvb_adapter.c index 302fd8e1..73d852c4 100644 --- a/src/dvb/dvb_adapter.c +++ b/src/dvb/dvb_adapter.c @@ -213,6 +213,23 @@ dvb_adapter_set_qmon(th_dvb_adapter_t *tda, int on) tda_save(tda); } +/** + * + */ +void +dvb_adapter_set_sidtochan(th_dvb_adapter_t *tda, int on) +{ + if(tda->tda_sidtochan == on) + return; + + lock_assert(&global_lock); + + tvhlog(LOG_NOTICE, "dvb", "Adapter \"%s\" use SID as channel number when mapping set to: %s", + tda->tda_displayname, on ? "On" : "Off"); + + tda->tda_sidtochan = on; + tda_save(tda); +} /** * diff --git a/src/serviceprobe.c b/src/serviceprobe.c index 68c70db4..f73c6a81 100644 --- a/src/serviceprobe.c +++ b/src/serviceprobe.c @@ -174,9 +174,13 @@ serviceprobe_thread(void *aux) tvhlog(LOG_INFO, "serviceprobe", "%20s: skipped: %s", t->s_svcname, err); } else if(t->s_ch == NULL) { + int channum = t->s_channel_number; const char *str; + + if (!channum && t->s_dvb_mux_instance->tdmi_adapter->tda_sidtochan) + channum = t->s_dvb_service_id; - ch = channel_find_by_name(t->s_svcname, 1, t->s_channel_number); + ch = channel_find_by_name(t->s_svcname, 1, channum); service_map_channel(t, ch, 1); tvhlog(LOG_INFO, "serviceprobe", "%20s: mapped to channel \"%s\"", diff --git a/src/webui/extjs_dvb.c b/src/webui/extjs_dvb.c index 4b0dc002..b5643e11 100644 --- a/src/webui/extjs_dvb.c +++ b/src/webui/extjs_dvb.c @@ -154,6 +154,7 @@ extjs_dvbadapter(http_connection_t *hc, const char *remain, void *opaque) htsmsg_add_u32(r, "qmon", tda->tda_qmon); htsmsg_add_u32(r, "dumpmux", tda->tda_dump_muxes); htsmsg_add_u32(r, "poweroff", tda->tda_poweroff); + htsmsg_add_u32(r, "sidtochan", tda->tda_sidtochan); htsmsg_add_u32(r, "nitoid", tda->tda_nitoid); htsmsg_add_str(r, "diseqcversion", ((const char *[]){"DiSEqC 1.0 / 2.0", @@ -185,6 +186,9 @@ extjs_dvbadapter(http_connection_t *hc, const char *remain, void *opaque) s = http_arg_get(&hc->hc_req_args, "poweroff"); dvb_adapter_set_poweroff(tda, !!s); + s = http_arg_get(&hc->hc_req_args, "sidtochan"); + dvb_adapter_set_sidtochan(tda, !!s); + s = http_arg_get(&hc->hc_req_args, "dumpmux"); dvb_adapter_set_dump_muxes(tda, !!s); diff --git a/src/webui/static/app/dvb.js b/src/webui/static/app/dvb.js index 61b46ce4..ebaea6a7 100644 --- a/src/webui/static/app/dvb.js +++ b/src/webui/static/app/dvb.js @@ -1106,7 +1106,7 @@ tvheadend.dvb_adapter_general = function(adapterData, satConfStore) { var confreader = new Ext.data.JsonReader({ root: 'dvbadapters' }, ['name', 'automux', 'skip_initialscan', 'idlescan', 'diseqcversion', 'qmon', - 'skip_checksubscr', 'dumpmux', 'poweroff', 'nitoid','extrapriority']); + 'skip_checksubscr', 'dumpmux', 'poweroff', 'sidtochan', 'nitoid','extrapriority']); function saveConfForm () { @@ -1182,6 +1182,10 @@ tvheadend.dvb_adapter_general = function(adapterData, satConfStore) { fieldLabel: 'Turn off LNB when idle', name: 'poweroff' }); + new Ext.form.Checkbox({ + fieldLabel: 'Use SID as channel number during mapping', + name: 'sidtochan' + }), items.push(v); }