Project

General

Profile

Feature #123

Support NIT-Other (0x41) NIT Tables

Added by Hein Rigolo over 9 years ago. Updated over 9 years ago.

Status:
Fixed
Priority:
High
Assignee:
Category:
General
Target version:
Start date:
Due date:
% Done:

0%

Estimated time:

Description

The Ziggo DVB-C cable network is using the NIT-Other NIT tables to provide the specific details about their transponders for a specific region/city. The NIT-ACTUAL tables show the Network ID of 1000 with the network name Main. It will contain a standard set of transponders but most of them can not be found on the actual dvb-c network as active transponders.

Because the NIT-Other table is crucial for finding the correct transponders on the Ziggo Network it is not possible for Tvheadend to automatically find all valid transponders that are available in a specific region/city

I would be great if tvheadend would detect that there are NIT-OTHER tables available (they are now excluded by dvb_nit_callback). When it finds NIT-Other tables it should show the user a message telling him/her that NIT-Other tables are found and then ask if it should use those tables to find the available transponders.

If the answer is YES then tvheadend can display a list of available NIT-Other networks (Network ID + Network Name). The user can then select his/her network and from that moment on tvheadend should use that network ID and transponder list for all further automatic scanning.

if the answer is NO then tvheadend can continue as it is doing now.

Without this enhancement it is not possble to complete discover all available services and transponders on the Ziggo Network. As far as I know there are more DVB-C networks that use this same method.

History

#1 Updated by Hein Rigolo over 9 years ago

This patch makes it possible to only use the NIT-a table and the 9003 network ID to determine the correct multiplexes.

Index: src/dvb/dvb_tables.c
===================================================================
--- src/dvb/dvb_tables.c    (revision 3877)
+++ src/dvb/dvb_tables.c    (working copy)
@@ -977,10 +977,15 @@
   int ntl;
   char networknamer256;
   uint16_t tsid;
+  uint16_t network_id;

-  if(tableid != 0x40)
+  if(tableid != 0x41)
     return -1;

+  network_id = (ptrr0 << 8) | ptrr1 ;
+  if (network_id != 9003)
+    return -1;
+
   if((ptrr2 & 1) == 0) {
     /* current_next_indicator == next, skip this */
     return -1;
@@ -1169,7 +1174,7 @@
   /* Network Information Table */

   fp = dvb_fparams_alloc();
-  fp->filter.filterr0 = 0x40;
+  fp->filter.filterr0 = 0x41;
   fp->filter.maskr0 = 0xff;
   tdt_add(tdmi, fp, dvb_nit_callback, NULL, "nit", 
       TDT_QUICKREQ | TDT_CRC, 0x10, NULL);

#2 Updated by Hein Rigolo over 9 years ago

new enhanced patch:

Index: src/webui/static/app/dvb.js
===================================================================
--- src/webui/static/app/dvb.js    (revision 4067)
+++ src/webui/static/app/dvb.js    (working copy)
@@ -1008,7 +1008,7 @@

     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 @@
     new Ext.form.Checkbox({
         fieldLabel: 'Monitor signal quality',
         name: 'qmon'
-    })
+    }),
+    {
+        fieldLabel: 'NIT-o Network ID',
+        name: 'nitoid',
+        width: 50
+    },
+
     ];

     if(satConfStore) { 
Index: src/webui/extjs.c
===================================================================
--- src/webui/extjs.c    (revision 4067)
+++ src/webui/extjs.c    (working copy)
@@ -1049,6 +1049,7 @@
     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 @@
     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);
Index: src/dvb/dvb.h
===================================================================
--- src/dvb/dvb.h    (revision 4067)
+++ src/dvb/dvb.h    (working copy)
@@ -168,6 +168,7 @@
   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_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);
Index: src/dvb/dvb_tables.c
===================================================================
--- src/dvb/dvb_tables.c    (revision 4067)
+++ src/dvb/dvb_tables.c    (working copy)
@@ -977,10 +977,16 @@
   int ntl;
   char networknamer256;
   uint16_t tsid;
+  uint16_t network_id;

-  if(tableid != 0x40)
+  if(tableid != 0x40 && tableid != 0x41)
     return -1;

+  network_id = (ptrr0 << 8) | ptrr1 ;
+
+  if (tdmi->tdmi_adapter->tda_nitoid && network_id != tdmi->tdmi_adapter->tda_nitoid)
+    return -1;
+
   if((ptrr2 & 1) == 0) {
     /* current_next_indicator == next, skip this */
     return -1;
@@ -1169,7 +1175,13 @@
   /* Network Information Table */

   fp = dvb_fparams_alloc();
-  fp->filter.filterr0 = 0x40;
+
+  if( tdmi->tdmi_adapter->tda_nitoid) {
+      fp->filter.filterr0 = 0x41;
+  }
+  else {
+      fp->filter.filterr0 = 0x40;
+  }
   fp->filter.maskr0 = 0xff;
   tdt_add(tdmi, fp, dvb_nit_callback, NULL, "nit", 
       TDT_QUICKREQ | TDT_CRC, 0x10, NULL);
Index: src/dvb/dvb_adapter.c
===================================================================
--- src/dvb/dvb_adapter.c    (revision 4067)
+++ src/dvb/dvb_adapter.c    (working copy)
@@ -79,6 +79,7 @@
   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);
@@ -169,6 +170,27 @@
  *
  */
 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);
+
+}
+
+
+/**
+ *
+ */
+void
 dvb_adapter_set_diseqc_version(th_dvb_adapter_t *tda, unsigned int v)
 {
   if(v > 1)
@@ -334,6 +356,7 @@
       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);

#3 Updated by Andreas Smas over 9 years ago

  • Status changed from New to Fixed
  • Found in version set to fixed

Fixed.

Also available in: Atom PDF