Add the concept of onid into the DVB structures, this will help overcome a few minor issues.
This commit is contained in:
parent
16fdfd2547
commit
1cc67b75e8
8 changed files with 94 additions and 60 deletions
|
@ -128,6 +128,7 @@ typedef struct th_dvb_mux_instance {
|
||||||
/* Linked if tdmi_conf.dmc_satconf != NULL */
|
/* Linked if tdmi_conf.dmc_satconf != NULL */
|
||||||
LIST_ENTRY(th_dvb_mux_instance) tdmi_satconf_link;
|
LIST_ENTRY(th_dvb_mux_instance) tdmi_satconf_link;
|
||||||
|
|
||||||
|
uint32_t tdmi_network_id;
|
||||||
uint16_t tdmi_transport_stream_id;
|
uint16_t tdmi_transport_stream_id;
|
||||||
|
|
||||||
char *tdmi_identifier;
|
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,
|
th_dvb_mux_instance_t *dvb_mux_create(th_dvb_adapter_t *tda,
|
||||||
const struct dvb_mux_conf *dmc,
|
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,
|
const char *logprefix, int enabled,
|
||||||
int initialscan, const char *identifier,
|
int initialscan, const char *identifier,
|
||||||
dvb_satconf_t *satconf);
|
dvb_satconf_t *satconf);
|
||||||
|
|
|
@ -153,7 +153,7 @@ tdmi_compare_conf(int adapter_type,
|
||||||
*/
|
*/
|
||||||
th_dvb_mux_instance_t *
|
th_dvb_mux_instance_t *
|
||||||
dvb_mux_create(th_dvb_adapter_t *tda, const struct dvb_mux_conf *dmc,
|
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,
|
int enabled, int initialscan, const char *identifier,
|
||||||
dvb_satconf_t *satconf)
|
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;
|
tdmi->tdmi_transport_stream_id = tsid;
|
||||||
save = 1;
|
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 */
|
/* HACK - load old transports and remove old mux config */
|
||||||
if(identifier) {
|
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);
|
TAILQ_INIT(&tdmi->tdmi_table_queue);
|
||||||
|
|
||||||
|
tdmi->tdmi_network_id = onid;
|
||||||
tdmi->tdmi_transport_stream_id = tsid;
|
tdmi->tdmi_transport_stream_id = tsid;
|
||||||
tdmi->tdmi_adapter = tda;
|
tdmi->tdmi_adapter = tda;
|
||||||
tdmi->tdmi_network = network ? strdup(network) : NULL;
|
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_str(m, "status", dvb_mux_status(tdmi));
|
||||||
|
|
||||||
htsmsg_add_u32(m, "transportstreamid", tdmi->tdmi_transport_stream_id);
|
htsmsg_add_u32(m, "transportstreamid", tdmi->tdmi_transport_stream_id);
|
||||||
|
htsmsg_add_u32(m, "originalnetworkid", tdmi->tdmi_network_id);
|
||||||
if(tdmi->tdmi_network != NULL)
|
if(tdmi->tdmi_network != NULL)
|
||||||
htsmsg_add_str(m, "network", tdmi->tdmi_network);
|
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;
|
struct dvb_mux_conf dmc;
|
||||||
const char *s;
|
const char *s;
|
||||||
int r;
|
int r;
|
||||||
unsigned int tsid, u32, enabled, initscan;
|
unsigned int onid, tsid, u32, enabled, initscan;
|
||||||
|
|
||||||
memset(&dmc, 0, sizeof(dmc));
|
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))
|
if(htsmsg_get_u32(m, "transportstreamid", &tsid))
|
||||||
tsid = 0xffff;
|
tsid = 0xffff;
|
||||||
|
if(htsmsg_get_u32(m, "originalnetworkid", &onid))
|
||||||
|
onid = 0;
|
||||||
|
|
||||||
if(htsmsg_get_u32(m, "enabled", &enabled))
|
if(htsmsg_get_u32(m, "enabled", &enabled))
|
||||||
enabled = 1;
|
enabled = 1;
|
||||||
|
@ -779,7 +787,7 @@ tdmi_create_by_msg(th_dvb_adapter_t *tda, htsmsg_t *m, const char *identifier)
|
||||||
initscan = 1;
|
initscan = 1;
|
||||||
|
|
||||||
tdmi = dvb_mux_create(tda, &dmc,
|
tdmi = dvb_mux_create(tda, &dmc,
|
||||||
tsid, htsmsg_get_str(m, "network"), NULL, enabled,
|
onid, tsid, htsmsg_get_str(m, "network"), NULL, enabled,
|
||||||
initscan,
|
initscan,
|
||||||
identifier, NULL);
|
identifier, NULL);
|
||||||
if(tdmi != 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)
|
if(tdmi->tdmi_transport_stream_id != 0xffff)
|
||||||
htsmsg_add_u32(m, "muxid", tdmi->tdmi_transport_stream_id);
|
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);
|
htsmsg_add_u32(m, "quality", tdmi->tdmi_quality);
|
||||||
return m;
|
return m;
|
||||||
}
|
}
|
||||||
|
@ -1137,7 +1148,7 @@ dvb_mux_add_by_params(th_dvb_adapter_t *tda,
|
||||||
}
|
}
|
||||||
dmc.dmc_polarisation = polarisation;
|
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)
|
if(tdmi == NULL)
|
||||||
return "Mux already exist";
|
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_dst = dvb_mux_create(dst,
|
||||||
&tdmi_src->tdmi_conf,
|
&tdmi_src->tdmi_conf,
|
||||||
|
tdmi_src->tdmi_network_id,
|
||||||
tdmi_src->tdmi_transport_stream_id,
|
tdmi_src->tdmi_transport_stream_id,
|
||||||
tdmi_src->tdmi_network,
|
tdmi_src->tdmi_network,
|
||||||
"copy operation", tdmi_src->tdmi_enabled,
|
"copy operation", tdmi_src->tdmi_enabled,
|
||||||
|
|
|
@ -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);
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -366,7 +366,7 @@ dvb_bat_callback(th_dvb_mux_instance_t *tdmi, uint8_t *buf, int len,
|
||||||
{
|
{
|
||||||
int i, j, bdlen, tslen, tdlen;
|
int i, j, bdlen, tslen, tdlen;
|
||||||
uint8_t dtag, dlen;
|
uint8_t dtag, dlen;
|
||||||
uint16_t tsid;
|
uint16_t tsid, onid;
|
||||||
char crid[257];
|
char crid[257];
|
||||||
th_dvb_adapter_t *tda = tdmi->tdmi_adapter;
|
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;
|
i = 0;
|
||||||
while (i+6 < tslen) {
|
while (i+6 < tslen) {
|
||||||
tsid = buf[i] << 8 | buf[i+1];
|
tsid = buf[i] << 8 | buf[i+1];
|
||||||
|
onid = buf[i+2] << 8 | buf[i+3];
|
||||||
tdlen = ((buf[i+4] & 0xf) << 8) | buf[i+5];
|
tdlen = ((buf[i+4] & 0xf) << 8) | buf[i+5];
|
||||||
if (tdlen+i+6 > tslen) break;
|
if (tdlen+i+6 > tslen) break;
|
||||||
i += 6;
|
i += 6;
|
||||||
|
@ -398,7 +399,8 @@ dvb_bat_callback(th_dvb_mux_instance_t *tdmi, uint8_t *buf, int len,
|
||||||
|
|
||||||
/* Find TDMI */
|
/* Find TDMI */
|
||||||
LIST_FOREACH(tdmi, &tda->tda_muxes, tdmi_adapter_link)
|
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;
|
break;
|
||||||
|
|
||||||
/* Descriptors */
|
/* Descriptors */
|
||||||
|
@ -441,7 +443,7 @@ dvb_sdt_callback(th_dvb_mux_instance_t *tdmi, uint8_t *ptr, int len,
|
||||||
{
|
{
|
||||||
service_t *t;
|
service_t *t;
|
||||||
uint16_t service_id;
|
uint16_t service_id;
|
||||||
uint16_t transport_stream_id;
|
uint16_t tsid, onid;
|
||||||
int free_ca_mode;
|
int free_ca_mode;
|
||||||
int dllen;
|
int dllen;
|
||||||
uint8_t dtag, dlen;
|
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;
|
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 (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;
|
return -1;
|
||||||
} else {
|
} else {
|
||||||
LIST_FOREACH(tdmi, &tda->tda_muxes, tdmi_adapter_link)
|
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;
|
break;
|
||||||
if (!tdmi) return 0;
|
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)
|
LIST_FOREACH(other, &tda->tda_muxes, tdmi_adapter_link)
|
||||||
if(other != tdmi &&
|
if(other != tdmi &&
|
||||||
other->tdmi_conf.dmc_satconf == tdmi->tdmi_conf.dmc_satconf &&
|
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;
|
return -1;
|
||||||
|
|
||||||
if(tdmi->tdmi_transport_stream_id == 0xffff)
|
if(tdmi->tdmi_transport_stream_id == 0xffff)
|
||||||
dvb_mux_set_tsid(tdmi, tsid);
|
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
|
return -1; // TSID mismatches, skip packet, may be from another mux
|
||||||
}
|
|
||||||
|
|
||||||
ptr += 5;
|
ptr += 5;
|
||||||
len -= 5;
|
len -= 5;
|
||||||
|
@ -740,7 +744,7 @@ static const fe_modulation_t qam_tab [6] = {
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
dvb_table_cable_delivery(th_dvb_mux_instance_t *tdmi, uint8_t *ptr, int len,
|
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;
|
struct dvb_mux_conf dmc;
|
||||||
int freq, symrate;
|
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];
|
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);
|
"automatic mux discovery", 1, 1, NULL, NULL);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -787,7 +791,7 @@ dvb_table_cable_delivery(th_dvb_mux_instance_t *tdmi, uint8_t *ptr, int len,
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
dvb_table_sat_delivery(th_dvb_mux_instance_t *tdmi, uint8_t *ptr, int len,
|
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;
|
int freq, symrate;
|
||||||
// uint16_t orbital_pos;
|
// uint16_t orbital_pos;
|
||||||
|
@ -862,7 +866,7 @@ dvb_table_sat_delivery(th_dvb_mux_instance_t *tdmi, uint8_t *ptr, int len,
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#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);
|
"automatic mux discovery", 1, 1, NULL, tdmi->tdmi_conf.dmc_satconf);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -874,14 +878,14 @@ dvb_table_sat_delivery(th_dvb_mux_instance_t *tdmi, uint8_t *ptr, int len,
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
dvb_table_local_channel(th_dvb_mux_instance_t *tdmi, uint8_t *ptr, int len,
|
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;
|
uint16_t sid, chan;
|
||||||
th_dvb_adapter_t *tda = tdmi->tdmi_adapter;
|
th_dvb_adapter_t *tda = tdmi->tdmi_adapter;
|
||||||
service_t *t;
|
service_t *t;
|
||||||
|
|
||||||
LIST_FOREACH(tdmi, &tda->tda_muxes, tdmi_adapter_link)
|
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;
|
break;
|
||||||
|
|
||||||
if(tdmi == NULL)
|
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;
|
uint8_t tag, tlen;
|
||||||
int ntl;
|
int ntl;
|
||||||
char networkname[256];
|
char networkname[256];
|
||||||
uint16_t tsid;
|
uint16_t tsid, onid;
|
||||||
uint16_t network_id = (ptr[0] << 8) | ptr[1];
|
uint16_t network_id = (ptr[0] << 8) | ptr[1];
|
||||||
|
|
||||||
if(tdmi->tdmi_adapter->tda_nitoid) {
|
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) {
|
while(len >= 6) {
|
||||||
tsid = ( ptr[0] << 8) | ptr[1];
|
tsid = ( ptr[0] << 8) | ptr[1];
|
||||||
|
onid = ( ptr[2] << 8) | ptr[3];
|
||||||
ntl = ((ptr[4] & 0xf) << 8) | ptr[5];
|
ntl = ((ptr[4] & 0xf) << 8) | ptr[5];
|
||||||
|
|
||||||
ptr += 6;
|
ptr += 6;
|
||||||
|
@ -997,14 +1002,14 @@ dvb_nit_callback(th_dvb_mux_instance_t *tdmi, uint8_t *ptr, int len,
|
||||||
switch(tag) {
|
switch(tag) {
|
||||||
case DVB_DESC_SAT:
|
case DVB_DESC_SAT:
|
||||||
if(tdmi->tdmi_adapter->tda_type == FE_QPSK)
|
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;
|
break;
|
||||||
case DVB_DESC_CABLE:
|
case DVB_DESC_CABLE:
|
||||||
if(tdmi->tdmi_adapter->tda_type == FE_QAM)
|
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;
|
break;
|
||||||
case DVB_DESC_LOCAL_CHAN:
|
case DVB_DESC_LOCAL_CHAN:
|
||||||
dvb_table_local_channel(tdmi, ptr, tlen, tsid);
|
dvb_table_local_channel(tdmi, ptr, tlen, tsid, onid);
|
||||||
break;
|
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 atsc_stype;
|
||||||
uint8_t stype;
|
uint8_t stype;
|
||||||
uint16_t service_id;
|
uint16_t service_id;
|
||||||
uint16_t transport_stream_id;
|
uint16_t tsid, onid;
|
||||||
int dlen, dl;
|
int dlen, dl;
|
||||||
uint8_t *dptr;
|
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)
|
if(dlen + 32 > len)
|
||||||
return -1; // Corrupt table
|
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 */
|
/* Search all muxes on adapter */
|
||||||
LIST_FOREACH(tdmi, &tda->tda_muxes, tdmi_adapter_link)
|
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;
|
break;
|
||||||
|
|
||||||
if(tdmi == NULL)
|
if(tdmi == NULL)
|
||||||
|
|
|
@ -35,6 +35,7 @@ typedef struct eit_table_status
|
||||||
{
|
{
|
||||||
LIST_ENTRY(eit_table_status) link;
|
LIST_ENTRY(eit_table_status) link;
|
||||||
int tid;
|
int tid;
|
||||||
|
uint16_t onid;
|
||||||
uint16_t tsid;
|
uint16_t tsid;
|
||||||
uint16_t sid;
|
uint16_t sid;
|
||||||
uint32_t sec[8];
|
uint32_t sec[8];
|
||||||
|
@ -54,7 +55,8 @@ typedef struct eit_status
|
||||||
} eit_status_t;
|
} eit_status_t;
|
||||||
|
|
||||||
static eit_table_status_t *eit_status_find
|
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 )
|
uint8_t sec, uint8_t lst, uint8_t seg, uint8_t ver )
|
||||||
{
|
{
|
||||||
int i, sec_index;
|
int i, sec_index;
|
||||||
|
@ -63,7 +65,8 @@ static eit_table_status_t *eit_status_find
|
||||||
|
|
||||||
/* Find */
|
/* Find */
|
||||||
LIST_FOREACH(sta, &status->tables, link)
|
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;
|
break;
|
||||||
|
|
||||||
/* Already complete */
|
/* Already complete */
|
||||||
|
@ -74,6 +77,7 @@ static eit_table_status_t *eit_status_find
|
||||||
sta = calloc(1, sizeof(eit_table_status_t));
|
sta = calloc(1, sizeof(eit_table_status_t));
|
||||||
LIST_INSERT_HEAD(&status->tables, sta, link);
|
LIST_INSERT_HEAD(&status->tables, sta, link);
|
||||||
sta->tid = tableid;
|
sta->tid = tableid;
|
||||||
|
sta->onid = onid;
|
||||||
sta->tsid = tsid;
|
sta->tsid = tsid;
|
||||||
sta->sid = sid;
|
sta->sid = sid;
|
||||||
sta->ver = 255; // Note: force update below
|
sta->ver = 255; // Note: force update below
|
||||||
|
@ -651,7 +655,7 @@ static int _eit_callback
|
||||||
eit_status_t *sta;
|
eit_status_t *sta;
|
||||||
eit_table_status_t *tsta;
|
eit_table_status_t *tsta;
|
||||||
int resched = 0, save = 0;
|
int resched = 0, save = 0;
|
||||||
uint16_t tsid, sid;
|
uint16_t onid, tsid, sid;
|
||||||
uint16_t sec, lst, seg, ver;
|
uint16_t sec, lst, seg, ver;
|
||||||
|
|
||||||
/* Invalid */
|
/* Invalid */
|
||||||
|
@ -673,21 +677,22 @@ static int _eit_callback
|
||||||
/* Get table info */
|
/* Get table info */
|
||||||
sid = ptr[0] << 8 | ptr[1];
|
sid = ptr[0] << 8 | ptr[1];
|
||||||
tsid = ptr[5] << 8 | ptr[6];
|
tsid = ptr[5] << 8 | ptr[6];
|
||||||
|
onid = ptr[7] << 8 | ptr[8];
|
||||||
sec = ptr[3];
|
sec = ptr[3];
|
||||||
lst = ptr[4];
|
lst = ptr[4];
|
||||||
seg = ptr[9];
|
seg = ptr[9];
|
||||||
ver = (ptr[2] >> 1) & 0x1f;
|
ver = (ptr[2] >> 1) & 0x1f;
|
||||||
#ifdef EPG_EIT_TRACE
|
#ifdef EPG_EIT_TRACE
|
||||||
tvhlog(LOG_DEBUG, mod->id,
|
tvhlog(LOG_DEBUG, mod->id,
|
||||||
"tid=0x%02X, tsid=0x%04X, sid=0x%04X, sec=%3d/%3d, seg=%3d, ver=%2d, cur=%d",
|
"tid=0x%02X, onid=0x%04X, 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);
|
tableid, onid, tsid, sid, sec, lst, seg, ver, ptr[2] & 1);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Don't process */
|
/* Don't process */
|
||||||
if((ptr[2] & 1) == 0) return 0;
|
if((ptr[2] & 1) == 0) return 0;
|
||||||
|
|
||||||
/* Current status */
|
/* 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
|
#ifdef EPG_EIT_TRACE
|
||||||
tvhlog(LOG_DEBUG, mod->id, tsta && tsta->state != EIT_STATUS_DONE ? "section process" : "section seen");
|
tvhlog(LOG_DEBUG, mod->id, tsta && tsta->state != EIT_STATUS_DONE ? "section process" : "section seen");
|
||||||
#endif
|
#endif
|
||||||
|
@ -700,13 +705,16 @@ static int _eit_callback
|
||||||
if(tableid == 0x4f || tableid >= 0x60) {
|
if(tableid == 0x4f || tableid >= 0x60) {
|
||||||
tda = tdmi->tdmi_adapter;
|
tda = tdmi->tdmi_adapter;
|
||||||
LIST_FOREACH(tdmi, &tda->tda_muxes, tdmi_adapter_link)
|
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;
|
break;
|
||||||
} else {
|
} 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,
|
tvhlog(LOG_DEBUG, mod->id,
|
||||||
"invalid transport id found (tid 0x%02X, tsid %d != %d",
|
"invalid transport id found tid 0x%02X, onid:tsid %d:%d != %d:%d",
|
||||||
tableid, tdmi->tdmi_transport_stream_id, tsid);
|
tableid, tdmi->tdmi_network_id, tdmi->tdmi_transport_stream_id,
|
||||||
|
onid, tsid);
|
||||||
tdmi = NULL;
|
tdmi = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -762,9 +770,9 @@ done:
|
||||||
LIST_FOREACH(tsta, &sta->tables, link) {
|
LIST_FOREACH(tsta, &sta->tables, link) {
|
||||||
total++;
|
total++;
|
||||||
tvhlog(LOG_DEBUG, mod->id,
|
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",
|
"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->state == EIT_STATUS_DONE,
|
||||||
tsta->sec[7], tsta->sec[6], tsta->sec[5], tsta->sec[4],
|
tsta->sec[7], tsta->sec[6], tsta->sec[5], tsta->sec[4],
|
||||||
tsta->sec[3], tsta->sec[2], tsta->sec[1], tsta->sec[0]);
|
tsta->sec[3], tsta->sec[2], tsta->sec[1], tsta->sec[0]);
|
||||||
|
|
|
@ -131,7 +131,7 @@ typedef struct opentv_module_t
|
||||||
{
|
{
|
||||||
epggrab_module_ota_t ; ///< Base struct
|
epggrab_module_ota_t ; ///< Base struct
|
||||||
|
|
||||||
int nid;
|
int onid;
|
||||||
int tsid;
|
int tsid;
|
||||||
int sid;
|
int sid;
|
||||||
int *channel;
|
int *channel;
|
||||||
|
@ -189,7 +189,7 @@ static epggrab_channel_t *_opentv_find_epggrab_channel
|
||||||
(epggrab_module_t*)mod);
|
(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_adapter_t *tda;
|
||||||
th_dvb_mux_instance_t *tdmi;
|
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) {
|
TAILQ_FOREACH(tda, &dvb_adapters, tda_global_link) {
|
||||||
LIST_FOREACH(tdmi, &tda->tda_muxes, tdmi_adapter_link) {
|
LIST_FOREACH(tdmi, &tda->tda_muxes, tdmi_adapter_link) {
|
||||||
if (tdmi->tdmi_transport_stream_id != tsid) continue;
|
if (tdmi->tdmi_transport_stream_id != tsid) continue;
|
||||||
|
if (tdmi->tdmi_network_id != onid) continue;
|
||||||
LIST_FOREACH(t, &tdmi->tdmi_transports, s_group_link) {
|
LIST_FOREACH(t, &tdmi->tdmi_transports, s_group_link) {
|
||||||
if (t->s_dvb_service_id == sid) return t;
|
if (t->s_dvb_service_id == sid) return t;
|
||||||
}
|
}
|
||||||
|
@ -427,7 +428,7 @@ static int _opentv_parse_event_section
|
||||||
* ***********************************************************************/
|
* ***********************************************************************/
|
||||||
|
|
||||||
static void _opentv_parse_channels
|
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_t *ec;
|
||||||
epggrab_channel_link_t *ecl;
|
epggrab_channel_link_t *ecl;
|
||||||
|
@ -441,7 +442,7 @@ static void _opentv_parse_channels
|
||||||
cnum = ((int)buf[i+5] << 8) | buf[i+6];
|
cnum = ((int)buf[i+5] << 8) | buf[i+6];
|
||||||
|
|
||||||
/* Find the service */
|
/* 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)) {
|
if (svc && svc->s_ch && service_is_primary_epg(svc)) {
|
||||||
ec =_opentv_find_epggrab_channel(mod, cid, 1, &save);
|
ec =_opentv_find_epggrab_channel(mod, cid, 1, &save);
|
||||||
ecl = LIST_FIRST(&ec->channels);
|
ecl = LIST_FIRST(&ec->channels);
|
||||||
|
@ -457,13 +458,13 @@ static void _opentv_parse_channels
|
||||||
}
|
}
|
||||||
|
|
||||||
static int _opentv_parse_ts_desc
|
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 dtag = buf[0];
|
||||||
int dlen = buf[1];
|
int dlen = buf[1];
|
||||||
if (dlen+2 > len) return -1;
|
if (dlen+2 > len) return -1;
|
||||||
if (dtag == 0xb1)
|
if (dtag == 0xb1)
|
||||||
_opentv_parse_channels(mod, buf+2, dlen, tsid);
|
_opentv_parse_channels(mod, buf+2, dlen, onid, tsid);
|
||||||
return dlen + 2;
|
return dlen + 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -472,7 +473,7 @@ static int _opentv_bat_section
|
||||||
{
|
{
|
||||||
int i, r;
|
int i, r;
|
||||||
int bdlen, tllen, tdlen;
|
int bdlen, tllen, tdlen;
|
||||||
uint16_t bid, tsid;
|
uint16_t bid, tsid, onid;
|
||||||
uint8_t sec;
|
uint8_t sec;
|
||||||
|
|
||||||
/* Skip (not yet applicable) */
|
/* Skip (not yet applicable) */
|
||||||
|
@ -508,14 +509,14 @@ static int _opentv_bat_section
|
||||||
if (tllen > len) return -1;
|
if (tllen > len) return -1;
|
||||||
while (len > 0) {
|
while (len > 0) {
|
||||||
tsid = ((int)buf[0] << 8) | buf[1];
|
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];
|
tdlen = ((int)buf[4] & 0xf) << 8 | buf[5];
|
||||||
buf += 6;
|
buf += 6;
|
||||||
len -= 6;
|
len -= 6;
|
||||||
if (tdlen > len) return -1;
|
if (tdlen > len) return -1;
|
||||||
i = 0;
|
i = 0;
|
||||||
while (i < tdlen) {
|
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;
|
if (r < 0) return -1;
|
||||||
i += r;
|
i += r;
|
||||||
}
|
}
|
||||||
|
@ -725,7 +726,7 @@ static int _opentv_enable ( void *m, uint8_t e )
|
||||||
/* Register interest */
|
/* Register interest */
|
||||||
if (e) {
|
if (e) {
|
||||||
epggrab_ota_create_and_register_by_id((epggrab_module_ota_t*)mod,
|
epggrab_ota_create_and_register_by_id((epggrab_module_ota_t*)mod,
|
||||||
mod->nid, mod->tsid,
|
mod->onid, mod->tsid,
|
||||||
600, 3600, NULL);
|
600, 3600, NULL);
|
||||||
/* Remove all links */
|
/* Remove all links */
|
||||||
} else {
|
} else {
|
||||||
|
@ -837,7 +838,7 @@ static int _opentv_prov_load_one ( const char *id, htsmsg_t *m )
|
||||||
{
|
{
|
||||||
char ibuf[100], nbuf[1000];
|
char ibuf[100], nbuf[1000];
|
||||||
htsmsg_t *cl, *tl, *sl;
|
htsmsg_t *cl, *tl, *sl;
|
||||||
uint32_t tsid, sid, nid;
|
uint32_t tsid, sid, onid;
|
||||||
const char *str, *name;
|
const char *str, *name;
|
||||||
opentv_dict_t *dict;
|
opentv_dict_t *dict;
|
||||||
opentv_genre_t *genre;
|
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 (!(cl = htsmsg_get_list(m, "channel"))) return -1;
|
||||||
if (!(tl = htsmsg_get_list(m, "title"))) return -1;
|
if (!(tl = htsmsg_get_list(m, "title"))) return -1;
|
||||||
if (!(sl = htsmsg_get_list(m, "summary"))) 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, "tsid", &tsid)) return -1;
|
||||||
if (htsmsg_get_u32(m, "sid", &sid)) 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 */
|
/* Add provider details */
|
||||||
mod->dict = dict;
|
mod->dict = dict;
|
||||||
mod->genre = genre;
|
mod->genre = genre;
|
||||||
mod->nid = nid;
|
mod->onid = onid;
|
||||||
mod->tsid = tsid;
|
mod->tsid = tsid;
|
||||||
mod->sid = sid;
|
mod->sid = sid;
|
||||||
mod->channel = _pid_list_to_array(cl);
|
mod->channel = _pid_list_to_array(cl);
|
||||||
|
|
|
@ -104,19 +104,19 @@ static void _epggrab_ota_load_one ( epggrab_module_ota_t *mod, htsmsg_t *m )
|
||||||
{
|
{
|
||||||
htsmsg_t *e;
|
htsmsg_t *e;
|
||||||
htsmsg_field_t *f;
|
htsmsg_field_t *f;
|
||||||
int nid, tsid, period, interval;
|
int onid, tsid, period, interval;
|
||||||
const char *netname;
|
const char *netname;
|
||||||
|
|
||||||
HTSMSG_FOREACH(f, m) {
|
HTSMSG_FOREACH(f, m) {
|
||||||
if ((e = htsmsg_get_map_by_field(f))) {
|
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);
|
tsid = htsmsg_get_u32_or_default(m, "tsid", 0);
|
||||||
period = htsmsg_get_u32_or_default(m, "period", 0);
|
period = htsmsg_get_u32_or_default(m, "period", 0);
|
||||||
interval = htsmsg_get_u32_or_default(m, "interval", 0);
|
interval = htsmsg_get_u32_or_default(m, "interval", 0);
|
||||||
netname = htsmsg_get_str(m, "networkname");
|
netname = htsmsg_get_str(m, "networkname");
|
||||||
|
|
||||||
if (tsid)
|
if (tsid)
|
||||||
epggrab_ota_create_and_register_by_id(mod, nid, tsid,
|
epggrab_ota_create_and_register_by_id(mod, onid, tsid,
|
||||||
period, interval,
|
period, interval,
|
||||||
netname);
|
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) {
|
TAILQ_FOREACH(ota, &mod->muxes, grab_link) {
|
||||||
if (!l) l = htsmsg_create_list();
|
if (!l) l = htsmsg_create_list();
|
||||||
e = htsmsg_create_map();
|
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, "tsid", ota->tdmi->tdmi_transport_stream_id);
|
||||||
htsmsg_add_u32(e, "period", ota->timeout);
|
htsmsg_add_u32(e, "period", ota->timeout);
|
||||||
htsmsg_add_u32(e, "interval", ota->interval);
|
htsmsg_add_u32(e, "interval", ota->interval);
|
||||||
|
@ -246,15 +246,16 @@ epggrab_ota_mux_t *epggrab_ota_create
|
||||||
* Create and register using mux ID
|
* Create and register using mux ID
|
||||||
*/
|
*/
|
||||||
void epggrab_ota_create_and_register_by_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_adapter_t *tda;
|
||||||
th_dvb_mux_instance_t *tdmi;
|
th_dvb_mux_instance_t *tdmi;
|
||||||
epggrab_ota_mux_t *ota;
|
epggrab_ota_mux_t *ota;
|
||||||
TAILQ_FOREACH(tda, &dvb_adapters, tda_global_link) {
|
TAILQ_FOREACH(tda, &dvb_adapters, tda_global_link) {
|
||||||
//TODO: if (tda->nitoid != nid) continue;
|
|
||||||
LIST_FOREACH(tdmi, &tda->tda_muxes, tdmi_adapter_link) {
|
LIST_FOREACH(tdmi, &tda->tda_muxes, tdmi_adapter_link) {
|
||||||
if (tdmi->tdmi_transport_stream_id != tsid) continue;
|
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;
|
if (networkname && (!tdmi->tdmi_network || strcmp(networkname, tdmi->tdmi_network))) continue;
|
||||||
ota = epggrab_ota_create(mod, tdmi);
|
ota = epggrab_ota_create(mod, tdmi);
|
||||||
epggrab_ota_register(ota, period, interval);
|
epggrab_ota_register(ota, period, interval);
|
||||||
|
|
|
@ -76,6 +76,10 @@ tvheadend.dvb_muxes = function(adapterData, satConfStore) {
|
||||||
}
|
}
|
||||||
|
|
||||||
cmlist.push({
|
cmlist.push({
|
||||||
|
header : "NetworkID",
|
||||||
|
dataIndex : 'onid',
|
||||||
|
width : 50
|
||||||
|
}, {
|
||||||
header : "MuxID",
|
header : "MuxID",
|
||||||
dataIndex : 'muxid',
|
dataIndex : 'muxid',
|
||||||
width : 50
|
width : 50
|
||||||
|
@ -86,7 +90,7 @@ tvheadend.dvb_muxes = function(adapterData, satConfStore) {
|
||||||
defaultSortable: true});
|
defaultSortable: true});
|
||||||
|
|
||||||
var rec = Ext.data.Record.create([ 'id', 'enabled', 'network', 'freq',
|
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({
|
var store = new Ext.data.JsonStore({
|
||||||
root : 'entries',
|
root : 'entries',
|
||||||
|
|
Loading…
Add table
Reference in a new issue