From 1cc67b75e8f7a90ef0d6aaaf88cf5cf633c8c840 Mon Sep 17 00:00:00 2001 From: Adam Sutton Date: Wed, 10 Oct 2012 12:52:07 +0100 Subject: [PATCH] Add the concept of onid into the DVB structures, this will help overcome a few minor issues. --- src/dvb/dvb.h | 3 ++- src/dvb/dvb_multiplex.c | 20 ++++++++++++--- src/dvb/dvb_preconf.c | 2 +- src/dvb/dvb_tables.c | 50 +++++++++++++++++++++---------------- src/epggrab/module/eit.c | 32 +++++++++++++++--------- src/epggrab/module/opentv.c | 28 +++++++++++---------- src/epggrab/otamux.c | 13 +++++----- src/webui/static/app/dvb.js | 6 ++++- 8 files changed, 94 insertions(+), 60 deletions(-) diff --git a/src/dvb/dvb.h b/src/dvb/dvb.h index 9d863972..c29bef1a 100644 --- a/src/dvb/dvb.h +++ b/src/dvb/dvb.h @@ -128,6 +128,7 @@ typedef struct th_dvb_mux_instance { /* Linked if tdmi_conf.dmc_satconf != NULL */ LIST_ENTRY(th_dvb_mux_instance) tdmi_satconf_link; + uint32_t tdmi_network_id; uint16_t tdmi_transport_stream_id; char *tdmi_identifier; @@ -354,7 +355,7 @@ void dvb_mux_destroy(th_dvb_mux_instance_t *tdmi); th_dvb_mux_instance_t *dvb_mux_create(th_dvb_adapter_t *tda, const struct dvb_mux_conf *dmc, - uint16_t tsid, const char *network, + uint16_t onid, uint16_t tsid, const char *network, const char *logprefix, int enabled, int initialscan, const char *identifier, dvb_satconf_t *satconf); diff --git a/src/dvb/dvb_multiplex.c b/src/dvb/dvb_multiplex.c index 31ad8d5e..357a2816 100644 --- a/src/dvb/dvb_multiplex.c +++ b/src/dvb/dvb_multiplex.c @@ -153,7 +153,7 @@ tdmi_compare_conf(int adapter_type, */ th_dvb_mux_instance_t * dvb_mux_create(th_dvb_adapter_t *tda, const struct dvb_mux_conf *dmc, - uint16_t tsid, const char *network, const char *source, + uint16_t onid, uint16_t tsid, const char *network, const char *source, int enabled, int initialscan, const char *identifier, dvb_satconf_t *satconf) { @@ -200,6 +200,10 @@ dvb_mux_create(th_dvb_adapter_t *tda, const struct dvb_mux_conf *dmc, tdmi->tdmi_transport_stream_id = tsid; save = 1; } + if(onid && tdmi->tdmi_network_id != onid) { + tdmi->tdmi_network_id = onid; + save = 1; + } /* HACK - load old transports and remove old mux config */ if(identifier) { @@ -262,6 +266,7 @@ dvb_mux_create(th_dvb_adapter_t *tda, const struct dvb_mux_conf *dmc, TAILQ_INIT(&tdmi->tdmi_table_queue); + tdmi->tdmi_network_id = onid; tdmi->tdmi_transport_stream_id = tsid; tdmi->tdmi_adapter = tda; tdmi->tdmi_network = network ? strdup(network) : NULL; @@ -560,6 +565,7 @@ dvb_mux_save(th_dvb_mux_instance_t *tdmi) htsmsg_add_str(m, "status", dvb_mux_status(tdmi)); htsmsg_add_u32(m, "transportstreamid", tdmi->tdmi_transport_stream_id); + htsmsg_add_u32(m, "originalnetworkid", tdmi->tdmi_network_id); if(tdmi->tdmi_network != NULL) htsmsg_add_str(m, "network", tdmi->tdmi_network); @@ -650,7 +656,7 @@ tdmi_create_by_msg(th_dvb_adapter_t *tda, htsmsg_t *m, const char *identifier) struct dvb_mux_conf dmc; const char *s; int r; - unsigned int tsid, u32, enabled, initscan; + unsigned int onid, tsid, u32, enabled, initscan; memset(&dmc, 0, sizeof(dmc)); @@ -765,6 +771,8 @@ tdmi_create_by_msg(th_dvb_adapter_t *tda, htsmsg_t *m, const char *identifier) if(htsmsg_get_u32(m, "transportstreamid", &tsid)) tsid = 0xffff; + if(htsmsg_get_u32(m, "originalnetworkid", &onid)) + onid = 0; if(htsmsg_get_u32(m, "enabled", &enabled)) enabled = 1; @@ -779,7 +787,7 @@ tdmi_create_by_msg(th_dvb_adapter_t *tda, htsmsg_t *m, const char *identifier) initscan = 1; tdmi = dvb_mux_create(tda, &dmc, - tsid, htsmsg_get_str(m, "network"), NULL, enabled, + onid, tsid, htsmsg_get_str(m, "network"), NULL, enabled, initscan, identifier, NULL); if(tdmi != NULL) { @@ -1004,6 +1012,9 @@ dvb_mux_build_msg(th_dvb_mux_instance_t *tdmi) if(tdmi->tdmi_transport_stream_id != 0xffff) htsmsg_add_u32(m, "muxid", tdmi->tdmi_transport_stream_id); + if(tdmi->tdmi_network_id) + htsmsg_add_u32(m, "onid", tdmi->tdmi_network_id); + htsmsg_add_u32(m, "quality", tdmi->tdmi_quality); return m; } @@ -1137,7 +1148,7 @@ dvb_mux_add_by_params(th_dvb_adapter_t *tda, } dmc.dmc_polarisation = polarisation; - tdmi = dvb_mux_create(tda, &dmc, 0xffff, NULL, NULL, 1, 1, NULL, NULL); + tdmi = dvb_mux_create(tda, &dmc, 0, 0xffff, NULL, NULL, 1, 1, NULL, NULL); if(tdmi == NULL) return "Mux already exist"; @@ -1160,6 +1171,7 @@ dvb_mux_copy(th_dvb_adapter_t *dst, th_dvb_mux_instance_t *tdmi_src, tdmi_dst = dvb_mux_create(dst, &tdmi_src->tdmi_conf, + tdmi_src->tdmi_network_id, tdmi_src->tdmi_transport_stream_id, tdmi_src->tdmi_network, "copy operation", tdmi_src->tdmi_enabled, diff --git a/src/dvb/dvb_preconf.c b/src/dvb/dvb_preconf.c index 5219a15c..755340db 100644 --- a/src/dvb/dvb_preconf.c +++ b/src/dvb/dvb_preconf.c @@ -98,7 +98,7 @@ dvb_mux_preconf_add(th_dvb_adapter_t *tda, const network_t *net, dmc.dmc_satconf = dvb_satconf_entry_find(tda, satconf, 0); - dvb_mux_create(tda, &dmc, 0xffff, NULL, source, 1, 1, NULL, NULL); + dvb_mux_create(tda, &dmc, 0, 0xffff, NULL, source, 1, 1, NULL, NULL); } } diff --git a/src/dvb/dvb_tables.c b/src/dvb/dvb_tables.c index 7d352448..dea5892e 100644 --- a/src/dvb/dvb_tables.c +++ b/src/dvb/dvb_tables.c @@ -366,7 +366,7 @@ dvb_bat_callback(th_dvb_mux_instance_t *tdmi, uint8_t *buf, int len, { int i, j, bdlen, tslen, tdlen; uint8_t dtag, dlen; - uint16_t tsid; + uint16_t tsid, onid; char crid[257]; th_dvb_adapter_t *tda = tdmi->tdmi_adapter; @@ -391,6 +391,7 @@ dvb_bat_callback(th_dvb_mux_instance_t *tdmi, uint8_t *buf, int len, i = 0; while (i+6 < tslen) { tsid = buf[i] << 8 | buf[i+1]; + onid = buf[i+2] << 8 | buf[i+3]; tdlen = ((buf[i+4] & 0xf) << 8) | buf[i+5]; if (tdlen+i+6 > tslen) break; i += 6; @@ -398,7 +399,8 @@ dvb_bat_callback(th_dvb_mux_instance_t *tdmi, uint8_t *buf, int len, /* Find TDMI */ LIST_FOREACH(tdmi, &tda->tda_muxes, tdmi_adapter_link) - if(tdmi->tdmi_transport_stream_id == tsid) + if(tdmi->tdmi_transport_stream_id == tsid && + tdmi->tdmi_network_id == onid) break; /* Descriptors */ @@ -441,7 +443,7 @@ dvb_sdt_callback(th_dvb_mux_instance_t *tdmi, uint8_t *ptr, int len, { service_t *t; uint16_t service_id; - uint16_t transport_stream_id; + uint16_t tsid, onid; int free_ca_mode; int dllen; uint8_t dtag, dlen; @@ -458,13 +460,15 @@ dvb_sdt_callback(th_dvb_mux_instance_t *tdmi, uint8_t *ptr, int len, if(len < 8) return -1; - transport_stream_id = ptr[0] << 8 | ptr[1]; + tsid = ptr[0] << 8 | ptr[1]; + onid = ptr[5] << 8 | ptr[6]; if (tableid == 0x42) { - if(tdmi->tdmi_transport_stream_id != transport_stream_id) + if(tdmi->tdmi_transport_stream_id != tsid || tdmi->tdmi_network_id != onid) return -1; } else { LIST_FOREACH(tdmi, &tda->tda_muxes, tdmi_adapter_link) - if(tdmi->tdmi_transport_stream_id == transport_stream_id) + if(tdmi->tdmi_transport_stream_id == tsid && + tdmi->tdmi_network_id != onid) break; if (!tdmi) return 0; } @@ -623,14 +627,14 @@ dvb_pat_callback(th_dvb_mux_instance_t *tdmi, uint8_t *ptr, int len, LIST_FOREACH(other, &tda->tda_muxes, tdmi_adapter_link) if(other != tdmi && other->tdmi_conf.dmc_satconf == tdmi->tdmi_conf.dmc_satconf && - other->tdmi_transport_stream_id == tsid) + other->tdmi_transport_stream_id == tsid && + other->tdmi_network_id == tdmi->tdmi_network_id) return -1; if(tdmi->tdmi_transport_stream_id == 0xffff) dvb_mux_set_tsid(tdmi, tsid); - else if(tdmi->tdmi_transport_stream_id != tsid) { + else if (tdmi->tdmi_transport_stream_id != tsid) return -1; // TSID mismatches, skip packet, may be from another mux - } ptr += 5; len -= 5; @@ -740,7 +744,7 @@ static const fe_modulation_t qam_tab [6] = { */ static int dvb_table_cable_delivery(th_dvb_mux_instance_t *tdmi, uint8_t *ptr, int len, - uint16_t tsid) + uint16_t tsid, uint16_t onid) { struct dvb_mux_conf dmc; int freq, symrate; @@ -777,7 +781,7 @@ dvb_table_cable_delivery(th_dvb_mux_instance_t *tdmi, uint8_t *ptr, int len, dmc.dmc_fe_params.u.qam.fec_inner = fec_tab[ptr[10] & 0x07]; - dvb_mux_create(tdmi->tdmi_adapter, &dmc, tsid, NULL, + dvb_mux_create(tdmi->tdmi_adapter, &dmc, onid, tsid, NULL, "automatic mux discovery", 1, 1, NULL, NULL); return 0; } @@ -787,7 +791,7 @@ dvb_table_cable_delivery(th_dvb_mux_instance_t *tdmi, uint8_t *ptr, int len, */ static int dvb_table_sat_delivery(th_dvb_mux_instance_t *tdmi, uint8_t *ptr, int len, - uint16_t tsid) + uint16_t tsid, uint16_t onid) { int freq, symrate; // uint16_t orbital_pos; @@ -862,7 +866,7 @@ dvb_table_sat_delivery(th_dvb_mux_instance_t *tdmi, uint8_t *ptr, int len, } #endif - dvb_mux_create(tdmi->tdmi_adapter, &dmc, tsid, NULL, + dvb_mux_create(tdmi->tdmi_adapter, &dmc, onid, tsid, NULL, "automatic mux discovery", 1, 1, NULL, tdmi->tdmi_conf.dmc_satconf); return 0; @@ -874,14 +878,14 @@ dvb_table_sat_delivery(th_dvb_mux_instance_t *tdmi, uint8_t *ptr, int len, */ static void dvb_table_local_channel(th_dvb_mux_instance_t *tdmi, uint8_t *ptr, int len, - uint16_t tsid) + uint16_t tsid, uint16_t onid) { uint16_t sid, chan; th_dvb_adapter_t *tda = tdmi->tdmi_adapter; service_t *t; LIST_FOREACH(tdmi, &tda->tda_muxes, tdmi_adapter_link) - if(tdmi->tdmi_transport_stream_id == tsid) + if(tdmi->tdmi_transport_stream_id == tsid && tdmi->tdmi_network_id == onid) break; if(tdmi == NULL) @@ -919,7 +923,7 @@ dvb_nit_callback(th_dvb_mux_instance_t *tdmi, uint8_t *ptr, int len, uint8_t tag, tlen; int ntl; char networkname[256]; - uint16_t tsid; + uint16_t tsid, onid; uint16_t network_id = (ptr[0] << 8) | ptr[1]; if(tdmi->tdmi_adapter->tda_nitoid) { @@ -981,6 +985,7 @@ dvb_nit_callback(th_dvb_mux_instance_t *tdmi, uint8_t *ptr, int len, while(len >= 6) { tsid = ( ptr[0] << 8) | ptr[1]; + onid = ( ptr[2] << 8) | ptr[3]; ntl = ((ptr[4] & 0xf) << 8) | ptr[5]; ptr += 6; @@ -997,14 +1002,14 @@ dvb_nit_callback(th_dvb_mux_instance_t *tdmi, uint8_t *ptr, int len, switch(tag) { case DVB_DESC_SAT: if(tdmi->tdmi_adapter->tda_type == FE_QPSK) - dvb_table_sat_delivery(tdmi, ptr, tlen, tsid); + dvb_table_sat_delivery(tdmi, ptr, tlen, tsid, onid); break; case DVB_DESC_CABLE: if(tdmi->tdmi_adapter->tda_type == FE_QAM) - dvb_table_cable_delivery(tdmi, ptr, tlen, tsid); + dvb_table_cable_delivery(tdmi, ptr, tlen, tsid, onid); break; case DVB_DESC_LOCAL_CHAN: - dvb_table_local_channel(tdmi, ptr, tlen, tsid); + dvb_table_local_channel(tdmi, ptr, tlen, tsid, onid); break; } @@ -1031,7 +1036,7 @@ atsc_vct_callback(th_dvb_mux_instance_t *tdmi, uint8_t *ptr, int len, uint8_t atsc_stype; uint8_t stype; uint16_t service_id; - uint16_t transport_stream_id; + uint16_t tsid, onid; int dlen, dl; uint8_t *dptr; @@ -1055,11 +1060,12 @@ atsc_vct_callback(th_dvb_mux_instance_t *tdmi, uint8_t *ptr, int len, if(dlen + 32 > len) return -1; // Corrupt table - transport_stream_id = (ptr[22] << 8) | ptr[23]; + tsid = (ptr[22] << 8) | ptr[23]; + onid = (ptr[24] << 8) | ptr[25]; /* Search all muxes on adapter */ LIST_FOREACH(tdmi, &tda->tda_muxes, tdmi_adapter_link) - if(tdmi->tdmi_transport_stream_id == transport_stream_id) + if(tdmi->tdmi_transport_stream_id == tsid && tdmi->tdmi_network_id == onid); break; if(tdmi == NULL) diff --git a/src/epggrab/module/eit.c b/src/epggrab/module/eit.c index 792b9671..03b8483c 100644 --- a/src/epggrab/module/eit.c +++ b/src/epggrab/module/eit.c @@ -35,6 +35,7 @@ typedef struct eit_table_status { LIST_ENTRY(eit_table_status) link; int tid; + uint16_t onid; uint16_t tsid; uint16_t sid; uint32_t sec[8]; @@ -54,7 +55,8 @@ typedef struct eit_status } eit_status_t; static eit_table_status_t *eit_status_find - ( eit_status_t *status, int tableid, uint16_t tsid, uint16_t sid, + ( eit_status_t *status, int tableid, + uint16_t onid, uint16_t tsid, uint16_t sid, uint8_t sec, uint8_t lst, uint8_t seg, uint8_t ver ) { int i, sec_index; @@ -63,7 +65,8 @@ static eit_table_status_t *eit_status_find /* Find */ LIST_FOREACH(sta, &status->tables, link) - if (sta->tid == tableid && sta->tsid == tsid && sta->sid == sid) + if (sta->tid == tableid && sta->tsid == tsid && sta->onid == onid && + sta->sid == sid) break; /* Already complete */ @@ -74,6 +77,7 @@ static eit_table_status_t *eit_status_find sta = calloc(1, sizeof(eit_table_status_t)); LIST_INSERT_HEAD(&status->tables, sta, link); sta->tid = tableid; + sta->onid = onid; sta->tsid = tsid; sta->sid = sid; sta->ver = 255; // Note: force update below @@ -651,7 +655,7 @@ static int _eit_callback eit_status_t *sta; eit_table_status_t *tsta; int resched = 0, save = 0; - uint16_t tsid, sid; + uint16_t onid, tsid, sid; uint16_t sec, lst, seg, ver; /* Invalid */ @@ -673,21 +677,22 @@ static int _eit_callback /* Get table info */ sid = ptr[0] << 8 | ptr[1]; tsid = ptr[5] << 8 | ptr[6]; + onid = ptr[7] << 8 | ptr[8]; sec = ptr[3]; lst = ptr[4]; seg = ptr[9]; ver = (ptr[2] >> 1) & 0x1f; #ifdef EPG_EIT_TRACE tvhlog(LOG_DEBUG, mod->id, - "tid=0x%02X, tsid=0x%04X, sid=0x%04X, sec=%3d/%3d, seg=%3d, ver=%2d, cur=%d", - tableid, tsid, sid, sec, lst, seg, ver, ptr[2] & 1); + "tid=0x%02X, onid=0x%04X, tsid=0x%04X, sid=0x%04X, sec=%3d/%3d, seg=%3d, ver=%2d, cur=%d", + tableid, onid, tsid, sid, sec, lst, seg, ver, ptr[2] & 1); #endif /* Don't process */ if((ptr[2] & 1) == 0) return 0; /* Current status */ - tsta = eit_status_find(sta, tableid, tsid, sid, sec, lst, seg, ver); + tsta = eit_status_find(sta, tableid, onid, tsid, sid, sec, lst, seg, ver); #ifdef EPG_EIT_TRACE tvhlog(LOG_DEBUG, mod->id, tsta && tsta->state != EIT_STATUS_DONE ? "section process" : "section seen"); #endif @@ -700,13 +705,16 @@ static int _eit_callback if(tableid == 0x4f || tableid >= 0x60) { tda = tdmi->tdmi_adapter; LIST_FOREACH(tdmi, &tda->tda_muxes, tdmi_adapter_link) - if(tdmi->tdmi_transport_stream_id == tsid) + if(tdmi->tdmi_transport_stream_id == tsid && + tdmi->tdmi_network_id == onid) break; } else { - if (tdmi->tdmi_transport_stream_id != tsid) { + if (tdmi->tdmi_transport_stream_id != tsid || + tdmi->tdmi_network_id != onid) { tvhlog(LOG_DEBUG, mod->id, - "invalid transport id found (tid 0x%02X, tsid %d != %d", - tableid, tdmi->tdmi_transport_stream_id, tsid); + "invalid transport id found tid 0x%02X, onid:tsid %d:%d != %d:%d", + tableid, tdmi->tdmi_network_id, tdmi->tdmi_transport_stream_id, + onid, tsid); tdmi = NULL; } } @@ -762,9 +770,9 @@ done: LIST_FOREACH(tsta, &sta->tables, link) { total++; tvhlog(LOG_DEBUG, mod->id, - " tid=0x%02X, tsid=0x%04X, sid=0x%04X, ver=%02d, done=%d, " + " tid=0x%02X, onid=0x%04X, tsid=0x%04X, sid=0x%04X, ver=%02d, done=%d, " "mask=%08X|%08X|%08X|%08X|%08X|%08X|%08X|%08X", - tsta->tid, tsta->tsid, tsta->sid, tsta->ver, + tsta->tid, tsta->onid, tsta->tsid, tsta->sid, tsta->ver, tsta->state == EIT_STATUS_DONE, tsta->sec[7], tsta->sec[6], tsta->sec[5], tsta->sec[4], tsta->sec[3], tsta->sec[2], tsta->sec[1], tsta->sec[0]); diff --git a/src/epggrab/module/opentv.c b/src/epggrab/module/opentv.c index 6eaf21b6..7a1fbba6 100644 --- a/src/epggrab/module/opentv.c +++ b/src/epggrab/module/opentv.c @@ -131,7 +131,7 @@ typedef struct opentv_module_t { epggrab_module_ota_t ; ///< Base struct - int nid; + int onid; int tsid; int sid; int *channel; @@ -189,7 +189,7 @@ static epggrab_channel_t *_opentv_find_epggrab_channel (epggrab_module_t*)mod); } -static service_t *_opentv_find_service ( int tsid, int sid ) +static service_t *_opentv_find_service ( int onid, int tsid, int sid ) { th_dvb_adapter_t *tda; th_dvb_mux_instance_t *tdmi; @@ -197,6 +197,7 @@ static service_t *_opentv_find_service ( int tsid, int sid ) TAILQ_FOREACH(tda, &dvb_adapters, tda_global_link) { LIST_FOREACH(tdmi, &tda->tda_muxes, tdmi_adapter_link) { if (tdmi->tdmi_transport_stream_id != tsid) continue; + if (tdmi->tdmi_network_id != onid) continue; LIST_FOREACH(t, &tdmi->tdmi_transports, s_group_link) { if (t->s_dvb_service_id == sid) return t; } @@ -427,7 +428,7 @@ static int _opentv_parse_event_section * ***********************************************************************/ static void _opentv_parse_channels - ( opentv_module_t *mod, uint8_t *buf, int len, uint16_t tsid ) + ( opentv_module_t *mod, uint8_t *buf, int len, uint16_t onid, uint16_t tsid ) { epggrab_channel_t *ec; epggrab_channel_link_t *ecl; @@ -441,7 +442,7 @@ static void _opentv_parse_channels cnum = ((int)buf[i+5] << 8) | buf[i+6]; /* Find the service */ - svc = _opentv_find_service(tsid, sid); + svc = _opentv_find_service(onid, tsid, sid); if (svc && svc->s_ch && service_is_primary_epg(svc)) { ec =_opentv_find_epggrab_channel(mod, cid, 1, &save); ecl = LIST_FIRST(&ec->channels); @@ -457,13 +458,13 @@ static void _opentv_parse_channels } static int _opentv_parse_ts_desc - ( opentv_module_t *mod, uint8_t *buf, int len, uint16_t tsid ) + ( opentv_module_t *mod, uint8_t *buf, int len, uint16_t onid, uint16_t tsid ) { int dtag = buf[0]; int dlen = buf[1]; if (dlen+2 > len) return -1; if (dtag == 0xb1) - _opentv_parse_channels(mod, buf+2, dlen, tsid); + _opentv_parse_channels(mod, buf+2, dlen, onid, tsid); return dlen + 2; } @@ -472,7 +473,7 @@ static int _opentv_bat_section { int i, r; int bdlen, tllen, tdlen; - uint16_t bid, tsid; + uint16_t bid, tsid, onid; uint8_t sec; /* Skip (not yet applicable) */ @@ -508,14 +509,14 @@ static int _opentv_bat_section if (tllen > len) return -1; while (len > 0) { tsid = ((int)buf[0] << 8) | buf[1]; - //nid = ((int)buf[2] << 8) | buf[3]; + onid = ((int)buf[2] << 8) | buf[3]; tdlen = ((int)buf[4] & 0xf) << 8 | buf[5]; buf += 6; len -= 6; if (tdlen > len) return -1; i = 0; while (i < tdlen) { - r = _opentv_parse_ts_desc(mod, buf+i, tdlen-i, tsid); + r = _opentv_parse_ts_desc(mod, buf+i, tdlen-i, onid, tsid); if (r < 0) return -1; i += r; } @@ -725,7 +726,7 @@ static int _opentv_enable ( void *m, uint8_t e ) /* Register interest */ if (e) { epggrab_ota_create_and_register_by_id((epggrab_module_ota_t*)mod, - mod->nid, mod->tsid, + mod->onid, mod->tsid, 600, 3600, NULL); /* Remove all links */ } else { @@ -837,7 +838,7 @@ static int _opentv_prov_load_one ( const char *id, htsmsg_t *m ) { char ibuf[100], nbuf[1000]; htsmsg_t *cl, *tl, *sl; - uint32_t tsid, sid, nid; + uint32_t tsid, sid, onid; const char *str, *name; opentv_dict_t *dict; opentv_genre_t *genre; @@ -850,7 +851,8 @@ static int _opentv_prov_load_one ( const char *id, htsmsg_t *m ) if (!(cl = htsmsg_get_list(m, "channel"))) return -1; if (!(tl = htsmsg_get_list(m, "title"))) return -1; if (!(sl = htsmsg_get_list(m, "summary"))) return -1; - if (htsmsg_get_u32(m, "nid", &nid)) return -1; + if (htsmsg_get_u32(m, "onid", &onid)) + if (htsmsg_get_u32(m, "nid", &onid)) return -1; if (htsmsg_get_u32(m, "tsid", &tsid)) return -1; if (htsmsg_get_u32(m, "sid", &sid)) return -1; @@ -877,7 +879,7 @@ static int _opentv_prov_load_one ( const char *id, htsmsg_t *m ) /* Add provider details */ mod->dict = dict; mod->genre = genre; - mod->nid = nid; + mod->onid = onid; mod->tsid = tsid; mod->sid = sid; mod->channel = _pid_list_to_array(cl); diff --git a/src/epggrab/otamux.c b/src/epggrab/otamux.c index 2dd9aa3e..80ace9d2 100644 --- a/src/epggrab/otamux.c +++ b/src/epggrab/otamux.c @@ -104,19 +104,19 @@ static void _epggrab_ota_load_one ( epggrab_module_ota_t *mod, htsmsg_t *m ) { htsmsg_t *e; htsmsg_field_t *f; - int nid, tsid, period, interval; + int onid, tsid, period, interval; const char *netname; HTSMSG_FOREACH(f, m) { if ((e = htsmsg_get_map_by_field(f))) { - nid = htsmsg_get_u32_or_default(m, "nid", 0); + onid = htsmsg_get_u32_or_default(m, "onid", 0); tsid = htsmsg_get_u32_or_default(m, "tsid", 0); period = htsmsg_get_u32_or_default(m, "period", 0); interval = htsmsg_get_u32_or_default(m, "interval", 0); netname = htsmsg_get_str(m, "networkname"); if (tsid) - epggrab_ota_create_and_register_by_id(mod, nid, tsid, + epggrab_ota_create_and_register_by_id(mod, onid, tsid, period, interval, netname); } @@ -146,7 +146,7 @@ static void _epggrab_ota_save_one ( htsmsg_t *m, epggrab_module_ota_t *mod ) TAILQ_FOREACH(ota, &mod->muxes, grab_link) { if (!l) l = htsmsg_create_list(); e = htsmsg_create_map(); - //htsmsg_add_u32(e, "nid", ); + htsmsg_add_u32(e, "onid", ota->tdmi->tdmi_network_id); htsmsg_add_u32(e, "tsid", ota->tdmi->tdmi_transport_stream_id); htsmsg_add_u32(e, "period", ota->timeout); htsmsg_add_u32(e, "interval", ota->interval); @@ -246,15 +246,16 @@ epggrab_ota_mux_t *epggrab_ota_create * Create and register using mux ID */ void epggrab_ota_create_and_register_by_id - ( epggrab_module_ota_t *mod, int nid, int tsid, int period, int interval, const char *networkname ) + ( epggrab_module_ota_t *mod, int onid, int tsid, int period, int interval, + const char *networkname ) { th_dvb_adapter_t *tda; th_dvb_mux_instance_t *tdmi; epggrab_ota_mux_t *ota; TAILQ_FOREACH(tda, &dvb_adapters, tda_global_link) { - //TODO: if (tda->nitoid != nid) continue; LIST_FOREACH(tdmi, &tda->tda_muxes, tdmi_adapter_link) { if (tdmi->tdmi_transport_stream_id != tsid) continue; + if (onid && tdmi->tdmi_network_id != onid) continue; if (networkname && (!tdmi->tdmi_network || strcmp(networkname, tdmi->tdmi_network))) continue; ota = epggrab_ota_create(mod, tdmi); epggrab_ota_register(ota, period, interval); diff --git a/src/webui/static/app/dvb.js b/src/webui/static/app/dvb.js index d1806e67..6a06f89e 100644 --- a/src/webui/static/app/dvb.js +++ b/src/webui/static/app/dvb.js @@ -76,6 +76,10 @@ tvheadend.dvb_muxes = function(adapterData, satConfStore) { } cmlist.push({ + header : "NetworkID", + dataIndex : 'onid', + width : 50 + }, { header : "MuxID", dataIndex : 'muxid', width : 50 @@ -86,7 +90,7 @@ tvheadend.dvb_muxes = function(adapterData, satConfStore) { defaultSortable: true}); var rec = Ext.data.Record.create([ 'id', 'enabled', 'network', 'freq', - 'pol', 'satconf', 'muxid', 'quality', 'fe_status', 'mod' ]); + 'pol', 'satconf', 'onid', 'muxid', 'quality', 'fe_status', 'mod' ]); var store = new Ext.data.JsonStore({ root : 'entries',