uint16_t tr_id;
};
-struct lcn_table {
- uint16_t service_id;
- uint16_t lcn;
-};
-
struct nit_table {
uint16_t network_id;
unsigned char version;
unsigned lcn_len;
};
-struct service_table {
- uint16_t service_id;
- char running;
- char scrambled;
- unsigned char type;
- char *service_name, *service_alias;
- char *provider_name, *provider_alias;
-};
-
-struct sdt_table {
- unsigned char version;
- uint16_t ts_id;
- struct service_table *service_table;
- unsigned service_table_len;
-};
-
-
struct dvb_v5_descriptors_program {
struct dvb_table_pat_program *pat_pgm;
struct dvb_table_pmt *pmt;
uint32_t delivery_system;
struct nit_table nit_table;
- struct sdt_table sdt_table;
/* New data */
#include "dvb-scan.h"
#include "dvb-scan-table-handler.h"
#include "dvb-log.h"
+#include "descriptors/desc_ts_info.h"
+#include "descriptors/desc_logical_channel.h"
/*
* Generic parse function for all formats each channel is contained into
return 0;
};
-char *dvb_vchannel(struct dvb_v5_descriptors *dvb_scan_handler,
- int service)
+static char *dvb_vchannel(struct dvb_table_nit *nit, uint16_t service_id)
{
- struct service_table *service_table = &dvb_scan_handler->sdt_table.service_table[service];
- struct lcn_table *lcn = dvb_scan_handler->nit_table.lcn;
int i;
char *buf;
- if (!lcn) {
- if (!dvb_scan_handler->nit_table.virtual_channel)
- return NULL;
+ dvb_desc_find(struct dvb_desc_logical_channel, desc, nit, logical_channel_number_descriptor) {
+ struct dvb_desc_logical_channel *d = (void *)desc;
- asprintf(&buf, "%d.%d", dvb_scan_handler->nit_table.virtual_channel,
- service);
- return buf;
+ size_t len;
+
+ len = d->length / sizeof(d->lcn);
+
+ for (i = 0; i < len; i++) {
+ if (service_id == d->lcn[i].service_id) {
+ asprintf(&buf, "%d.%d",
+ d->lcn[i].logical_channel_number, i);
+ return buf;
+ }
+ }
}
- for (i = 0; i < dvb_scan_handler->nit_table.lcn_len; i++) {
- if (lcn[i].service_id == service_table->service_id) {
- asprintf(&buf, "%d.%d.%d",
- dvb_scan_handler->nit_table.virtual_channel,
- lcn[i].lcn, service);
- return buf;
+ dvb_desc_find(struct dvb_desc_ts_info, desc, nit, TS_Information_descriptior) {
+ const struct dvb_desc_ts_info *d = (const void *) desc;
+ const struct dvb_desc_ts_info_transmission_type *t;
+
+ t = &d->transmission_type;
+
+ for (i = 0; i < t->num_of_service; i++) {
+ if (d->service_id[i] == service_id) {
+ asprintf(&buf, "%d.%d",
+ d->remote_control_key_id, i);
+ return buf;
+ }
}
}
- asprintf(&buf, "%d.%d", dvb_scan_handler->nit_table.virtual_channel,
- service);
- return buf;
+
+ return NULL;
}
static void handle_std_specific_parms(struct dvb_entry *entry,
return ret;
}
-