From: Andreas Ă–man Date: Thu, 14 Jan 2010 22:56:05 +0000 (+0000) Subject: Add support for NIT-other tables. In particular useful for Ziggo DVB-C networks in .nl X-Git-Tag: 2.12~302 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=b3aa44ae473b89796f05fa99cf2bb3eeadfa4fbf;p=thirdparty%2Ftvheadend.git Add support for NIT-other tables. In particular useful for Ziggo DVB-C networks in .nl Patch by Rigolo --- diff --git a/src/dvb/dvb.h b/src/dvb/dvb.h index e1f691cb7..556ab8d07 100644 --- a/src/dvb/dvb.h +++ b/src/dvb/dvb.h @@ -168,6 +168,7 @@ typedef struct th_dvb_adapter { uint32_t tda_autodiscovery; uint32_t tda_idlescan; uint32_t tda_qmon; + uint32_t tda_nitoid; uint32_t tda_diseqc_version; char *tda_displayname; @@ -222,6 +223,8 @@ 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_nitoid(th_dvb_adapter_t *tda, int nitoid); + 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 55954d0bb..b894d6373 100644 --- a/src/dvb/dvb_adapter.c +++ b/src/dvb/dvb_adapter.c @@ -79,6 +79,7 @@ tda_save(th_dvb_adapter_t *tda) 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, "nitoid", tda->tda_nitoid); htsmsg_add_u32(m, "diseqc_version", tda->tda_diseqc_version); hts_settings_save(m, "dvbadapters/%s", tda->tda_identifier); htsmsg_destroy(m); @@ -165,6 +166,27 @@ dvb_adapter_set_qmon(th_dvb_adapter_t *tda, int on) } +/** + * + */ +void +dvb_adapter_set_nitoid(th_dvb_adapter_t *tda, int nitoid) +{ + lock_assert(&global_lock); + + if(tda->tda_nitoid == nitoid) + return; + + tvhlog(LOG_NOTICE, "dvb", "NIT-o network id \"%d\" changed to \"%d\"", + tda->tda_nitoid, nitoid); + + tda->tda_nitoid = nitoid; + + tda_save(tda); + +} + + /** * */ @@ -334,6 +356,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, "nitoid", &tda->tda_nitoid); htsmsg_get_u32(c, "diseqc_version", &tda->tda_diseqc_version); } htsmsg_destroy(l); diff --git a/src/dvb/dvb_tables.c b/src/dvb/dvb_tables.c index 6822f9ec9..ed5ce90ef 100644 --- a/src/dvb/dvb_tables.c +++ b/src/dvb/dvb_tables.c @@ -977,9 +977,19 @@ dvb_nit_callback(th_dvb_mux_instance_t *tdmi, uint8_t *ptr, int len, int ntl; char networkname[256]; uint16_t tsid; + uint16_t network_id = (ptr[0] << 8) | ptr[1]; - if(tableid != 0x40) - return -1; + if(tdmi->tdmi_adapter->tda_nitoid) { + if(tableid != 0x41) + return -1; + + if(network_id != tdmi->tdmi_adapter->tda_nitoid) + return -1; + + } else { + if(tableid != 0x40) + return -1; + } if((ptr[2] & 1) == 0) { /* current_next_indicator == next, skip this */ @@ -1169,7 +1179,12 @@ dvb_table_add_default_dvb(th_dvb_mux_instance_t *tdmi) /* Network Information Table */ fp = dvb_fparams_alloc(); - fp->filter.filter[0] = 0x40; + + if(tdmi->tdmi_adapter->tda_nitoid) { + fp->filter.filter[0] = 0x41; + } else { + fp->filter.filter[0] = 0x40; + } fp->filter.mask[0] = 0xff; tdt_add(tdmi, fp, dvb_nit_callback, NULL, "nit", TDT_QUICKREQ | TDT_CRC, 0x10, NULL); diff --git a/src/webui/extjs.c b/src/webui/extjs.c index 0defcf839..06867e6b1 100644 --- a/src/webui/extjs.c +++ b/src/webui/extjs.c @@ -1049,6 +1049,7 @@ extjs_dvbadapter(http_connection_t *hc, const char *remain, void *opaque) 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_u32(r, "nitoid", tda->tda_nitoid); htsmsg_add_str(r, "diseqcversion", ((const char *[]){"DiSEqC 1.0 / 2.0", "DiSEqC 1.1 / 2.1"}) @@ -1069,6 +1070,9 @@ extjs_dvbadapter(http_connection_t *hc, const char *remain, void *opaque) s = http_arg_get(&hc->hc_req_args, "qmon"); dvb_adapter_set_qmon(tda, !!s); + if((s = http_arg_get(&hc->hc_req_args, "nitoid")) != NULL) + dvb_adapter_set_nitoid(tda, atoi(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 3b1a478c7..e0eae5b87 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', 'qmon']); + }, ['name', 'automux', 'idlescan', 'diseqcversion', 'qmon', 'nitoid']); function saveConfForm () { @@ -1036,7 +1036,13 @@ tvheadend.dvb_adapter_general = function(adapterData, satConfStore) { new Ext.form.Checkbox({ fieldLabel: 'Monitor signal quality', name: 'qmon' - }) + }), + { + fieldLabel: 'NIT-o Network ID', + name: 'nitoid', + width: 50 + }, + ]; if(satConfStore) {