Move mux configuration stuff into dvb_mux_t

This also disables sat_conf stuff (LNB switches, etc) but we will
have to solve that in a different manner anyway
This commit is contained in:
Andreas Öman 2012-12-05 09:24:10 +01:00
parent 9c2a55eb01
commit 97debaeff3
14 changed files with 182 additions and 195 deletions

View file

@ -39,7 +39,7 @@ RB_HEAD(th_dvb_mux_instance_tree, th_dvb_mux_instance);
TAILQ_HEAD(th_dvb_mux_instance_queue, th_dvb_mux_instance);
LIST_HEAD(th_dvb_mux_instance_list, th_dvb_mux_instance);
TAILQ_HEAD(dvb_satconf_queue, dvb_satconf);
LIST_HEAD(dvb_mux_list, dvb_mux);
/**
* Satconf
@ -53,12 +53,9 @@ typedef struct dvb_satconf {
char *sc_comment;
char *sc_lnb;
struct th_dvb_mux_instance_list sc_tdmis;
} dvb_satconf_t;
enum polarisation {
POLARISATION_HORIZONTAL = 0x00,
POLARISATION_VERTICAL = 0x01,
@ -76,7 +73,7 @@ typedef struct dvb_frontend_parameters dvb_frontend_parameters_t;
typedef struct dvb_mux_conf {
dvb_frontend_parameters_t dmc_fe_params;
int dmc_polarisation;
dvb_satconf_t *dmc_satconf;
// dvb_satconf_t *dmc_satconf;
#if DVB_API_VERSION >= 5
fe_modulation_t dmc_fe_modulation;
fe_delivery_system_t dmc_fe_delsys;
@ -85,14 +82,54 @@ typedef struct dvb_mux_conf {
} dvb_mux_conf_t;
/**
*
*/
typedef struct dvb_network {
struct th_dvb_mux_instance_list dn_mux_instances; // Should go away
struct th_dvb_mux_instance_queue dn_initial_scan_queue;
int dn_initial_num_mux;
struct th_dvb_mux_instance *dn_mux_epg;
int dn_fe_type; // Frontend types for this network (FE_QPSK, etc)
// struct dvb_mux_list dn_muxes;
} dvb_network_t;
/**
*
*/
typedef struct dvb_mux {
// LIST_ENTRY(dvb_mux) dm_network_link;
dvb_network_t *dm_network;
struct service_list dm_services;
dvb_mux_conf_t dm_conf;
} dvb_mux_t;
/**
* DVB Mux instance
*/
typedef struct th_dvb_mux_instance {
dvb_mux_t *tdmi_mux;
RB_ENTRY(th_dvb_mux_instance) tdmi_global_link;
LIST_ENTRY(th_dvb_mux_instance) tdmi_adapter_link;
LIST_ENTRY(th_dvb_mux_instance) tdmi_adapter_link; // wrong
struct th_dvb_adapter *tdmi_adapter;
@ -124,8 +161,6 @@ typedef struct th_dvb_mux_instance {
int tdmi_enabled;
dvb_mux_conf_t tdmi_conf;
/* Linked if tdmi_conf.dmc_satconf != NULL */
LIST_ENTRY(th_dvb_mux_instance) tdmi_satconf_link;
@ -137,8 +172,6 @@ typedef struct th_dvb_mux_instance {
char *tdmi_default_authority;
struct service_list tdmi_transports; /* via s_mux_link */
TAILQ_ENTRY(th_dvb_mux_instance) tdmi_scan_link;
struct th_dvb_mux_instance_queue *tdmi_scan_queue;
@ -151,6 +184,7 @@ typedef struct th_dvb_mux_instance {
/**
* When in raw mode we need to enqueue raw TS packet
* to a different thread because we need to hold
@ -165,20 +199,6 @@ typedef struct dvb_table_feed {
/**
*
*/
typedef struct dvb_network {
struct th_dvb_mux_instance_list dn_muxes;
struct th_dvb_mux_instance_queue dn_initial_scan_queue;
int dn_initial_num_mux;
th_dvb_mux_instance_t *dn_mux_epg;
} dvb_network_t;
/**
* DVB Adapter (one of these per physical adapter)
@ -212,7 +232,7 @@ typedef struct th_dvb_adapter {
int32_t tda_full_mux_rx;
char *tda_displayname;
int tda_type;
int tda_fe_type;
struct dvb_frontend_info *tda_fe_info; // result of FE_GET_INFO ioctl()
char *tda_fe_path;
@ -407,8 +427,7 @@ th_dvb_mux_instance_t *dvb_mux_create(th_dvb_adapter_t *tda,
const struct dvb_mux_conf *dmc,
uint16_t onid, uint16_t tsid, const char *network,
const char *logprefix, int enabled,
int initialscan, const char *identifier,
dvb_satconf_t *satconf);
int initialscan, const char *identifier);
void dvb_mux_set_networkname(th_dvb_mux_instance_t *tdmi, const char *name);
@ -439,9 +458,10 @@ const char *dvb_mux_add_by_params(th_dvb_adapter_t *tda,
int fec,
int polarisation,
const char *satconf);
#if 0
int dvb_mux_copy(th_dvb_adapter_t *dst, th_dvb_mux_instance_t *tdmi_src,
dvb_satconf_t *satconf);
#endif
th_dvb_mux_instance_t *dvb_mux_find
(th_dvb_adapter_t *tda, const char *netname, uint16_t onid, uint16_t tsid,

View file

@ -78,7 +78,7 @@ tda_save(th_dvb_adapter_t *tda)
lock_assert(&global_lock);
htsmsg_add_str(m, "type", dvb_adaptertype_to_str(tda->tda_type));
htsmsg_add_str(m, "type", dvb_adaptertype_to_str(tda->tda_fe_type));
htsmsg_add_str(m, "displayname", tda->tda_displayname);
htsmsg_add_u32(m, "autodiscovery", tda->tda_autodiscovery);
htsmsg_add_u32(m, "idleclose", tda->tda_idleclose);
@ -466,7 +466,8 @@ tda_add(int adapter_num)
else
close(fe);
tda->tda_type = tda->tda_fe_info->type;
tda->tda_fe_type = tda->tda_fe_info->type;
tda->tda_dn->dn_fe_type = tda->tda_fe_type;
snprintf(buf, sizeof(buf), "%s_%s", tda->tda_rootpath,
tda->tda_fe_info->name);
@ -478,9 +479,9 @@ tda_add(int adapter_num)
tda->tda_identifier = strdup(buf);
tda->tda_autodiscovery = tda->tda_type != FE_QPSK;
tda->tda_autodiscovery = tda->tda_fe_type != FE_QPSK;
tda->tda_sat = tda->tda_type == FE_QPSK;
tda->tda_sat = tda->tda_fe_type == FE_QPSK;
/* Come up with an initial displayname, user can change it and it will
be overridden by any stored settings later on */
@ -516,7 +517,7 @@ tda_add_from_file(const char *filename)
tda->tda_fe_fd = -1;
tda->tda_dvr_pipe[0] = -1;
tda->tda_type = -1;
tda->tda_fe_type = -1;
snprintf(buf, sizeof(buf), "%s", filename);
@ -546,7 +547,7 @@ tda_add_from_file(const char *filename)
*/
static void tda_init_input (th_dvb_adapter_t *tda)
{
if(tda->tda_type == -1 || check_full_stream(tda)) {
if(tda->tda_fe_type == -1 || check_full_stream(tda)) {
tvhlog(LOG_INFO, "dvb", "Adapter %s will run in full mux mode", tda->tda_rootpath);
dvb_input_raw_setup(tda);
} else {
@ -656,10 +657,10 @@ dvb_adapter_init(uint32_t adapter_mask, const char *rawfile)
/* Not discovered by hardware, create it */
tda = tda_alloc();
tda->tda_identifier = strdup(f->hmf_name);
tda->tda_type = type;
tda->tda_fe_type = type;
TAILQ_INSERT_TAIL(&dvb_adapters, tda, tda_global_link);
} else {
if(type != tda->tda_type)
if(type != tda->tda_fe_type)
continue; /* Something is wrong, ignore */
}
@ -713,7 +714,7 @@ dvb_adapter_mux_scanner(void *aux)
gtimer_arm(&tda->tda_mux_scanner_timer, dvb_adapter_mux_scanner, tda, 20);
/* No muxes */
if(LIST_FIRST(&tda->tda_dn->dn_muxes) == NULL) {
if(LIST_FIRST(&tda->tda_dn->dn_mux_instances) == NULL) {
dvb_adapter_poweroff(tda);
return;
}
@ -763,17 +764,17 @@ dvb_adapter_mux_scanner(void *aux)
void
dvb_adapter_clone(th_dvb_adapter_t *dst, th_dvb_adapter_t *src)
{
#if 0
th_dvb_mux_instance_t *tdmi_src, *tdmi_dst;
lock_assert(&global_lock);
while((tdmi_dst = LIST_FIRST(&dst->tda_dn->dn_muxes)) != NULL)
while((tdmi_dst = LIST_FIRST(&dst->tda_dn->dn_mux_instances)) != NULL)
dvb_mux_destroy(tdmi_dst);
LIST_FOREACH(tdmi_src, &src->tda_dn->dn_muxes, tdmi_adapter_link)
dvb_mux_copy(dst, tdmi_src, NULL);
tda_save(dst);
#endif
abort(); // XXX(dvbreorg)
}
@ -792,7 +793,7 @@ dvb_adapter_destroy(th_dvb_adapter_t *tda)
hts_settings_remove("dvbadapters/%s", tda->tda_identifier);
while((tdmi = LIST_FIRST(&tda->tda_dn->dn_muxes)) != NULL)
while((tdmi = LIST_FIRST(&tda->tda_dn->dn_mux_instances)) != NULL)
dvb_mux_destroy(tdmi);
TAILQ_REMOVE(&dvb_adapters, tda, tda_global_link);
@ -995,9 +996,9 @@ dvb_adapter_build_msg(th_dvb_adapter_t *tda)
htsmsg_add_str(m, "name", tda->tda_displayname);
// XXX: bad bad bad slow slow slow
LIST_FOREACH(tdmi, &tda->tda_dn->dn_muxes, tdmi_adapter_link) {
LIST_FOREACH(tdmi, &tda->tda_dn->dn_mux_instances, tdmi_adapter_link) {
nummux++;
LIST_FOREACH(t, &tdmi->tdmi_transports, s_group_link) {
LIST_FOREACH(t, &tdmi->tdmi_mux->dm_services, s_group_link) {
numsvc++;
}
}
@ -1046,11 +1047,11 @@ dvb_adapter_build_msg(th_dvb_adapter_t *tda)
htsmsg_add_str(m, "devicename", tda->tda_fe_info->name);
htsmsg_add_str(m, "deliverySystem",
dvb_adaptertype_to_str(tda->tda_type) ?: "");
dvb_adaptertype_to_str(tda->tda_fe_type) ?: "");
htsmsg_add_u32(m, "satConf", tda->tda_sat);
fdiv = tda->tda_type == FE_QPSK ? 1 : 1000;
fdiv = tda->tda_fe_type == FE_QPSK ? 1 : 1000;
htsmsg_add_u32(m, "freqMin", tda->tda_fe_info->frequency_min / fdiv);
htsmsg_add_u32(m, "freqMax", tda->tda_fe_info->frequency_max / fdiv);
@ -1208,7 +1209,7 @@ dvb_adapter_poweroff(th_dvb_adapter_t *tda)
{
if (tda->tda_fe_fd == -1) return;
lock_assert(&global_lock);
if (!tda->tda_poweroff || tda->tda_type != FE_QPSK)
if (!tda->tda_poweroff || tda->tda_fe_type != FE_QPSK)
return;
diseqc_voltage_off(tda->tda_fe_fd);
tvhlog(LOG_DEBUG, "dvb", "\"%s\" is off", tda->tda_rootpath);

View file

@ -396,7 +396,8 @@ dvb_fe_tune(th_dvb_mux_instance_t *tdmi, const char *reason)
th_dvb_adapter_t *tda = tdmi->tdmi_adapter;
// copy dmc, cause frequency may be change with FE_QPSK
dvb_mux_conf_t dmc = tdmi->tdmi_conf;
const dvb_mux_t *dm = tdmi->tdmi_mux;
dvb_mux_conf_t dmc = dm->dm_conf;
dvb_frontend_parameters_t* p = &dmc.dmc_fe_params;
char buf[256];
@ -423,10 +424,9 @@ dvb_fe_tune(th_dvb_mux_instance_t *tdmi, const char *reason)
else
dvb_adapter_start(tda);
if(tda->tda_type == FE_QPSK) {
if(tda->tda_fe_type == FE_QPSK) {
/* DVB-S */
dvb_satconf_t *sc;
int port, lowfreq, hifreq, switchfreq, hiband, pol, dbsbs;
lowfreq = 9750000;
@ -434,8 +434,9 @@ dvb_fe_tune(th_dvb_mux_instance_t *tdmi, const char *reason)
switchfreq = 11700000;
port = 0;
dbsbs = 0;
if((sc = tdmi->tdmi_conf.dmc_satconf) != NULL) {
#if 0
dvb_satconf_t *sc;
if((sc = dm->dm_conf.dmc_satconf) != NULL) {
port = sc->sc_port;
if(sc->sc_lnb != NULL)
@ -443,18 +444,19 @@ dvb_fe_tune(th_dvb_mux_instance_t *tdmi, const char *reason)
if(!strcmp(sc->sc_id ?: "", "DBS Bandstacked"))
dbsbs = 1;
}
#endif
if(dbsbs) {
hiband = 0;
if(tdmi->tdmi_conf.dmc_polarisation == POLARISATION_HORIZONTAL ||
tdmi->tdmi_conf.dmc_polarisation == POLARISATION_CIRCULAR_LEFT)
if(dm->dm_conf.dmc_polarisation == POLARISATION_HORIZONTAL ||
dm->dm_conf.dmc_polarisation == POLARISATION_CIRCULAR_LEFT)
p->frequency = abs(p->frequency - hifreq);
else
p->frequency = abs(p->frequency - lowfreq);
pol = POLARISATION_CIRCULAR_LEFT;
} else {
hiband = switchfreq && p->frequency > switchfreq;
pol = tdmi->tdmi_conf.dmc_polarisation;
pol = dm->dm_conf.dmc_polarisation;
if(hiband)
p->frequency = abs(p->frequency - hifreq);
else
@ -475,7 +477,7 @@ dvb_fe_tune(th_dvb_mux_instance_t *tdmi, const char *reason)
#if DVB_API_VERSION >= 5
if (tda->tda_type == FE_QPSK) {
if (tda->tda_fe_type == FE_QPSK) {
tvhlog(LOG_DEBUG, "dvb", "\"%s\" tuning via s2api to \"%s\" (%d, %d Baud, "
"%s, %s, %s) for %s", tda->tda_rootpath, buf, p->frequency, p->u.qpsk.symbol_rate,
dvb_mux_fec2str(p->u.qpsk.fec_inner), dvb_mux_delsys2str(dmc.dmc_fe_delsys),

View file

@ -108,8 +108,7 @@ tdmi_compare_key(const struct dvb_mux_conf *a,
- (int32_t)b->dmc_fe_params.frequency;
fd = labs(fd);
return fd < 2000 &&
a->dmc_polarisation == b->dmc_polarisation &&
a->dmc_satconf == b->dmc_satconf;
a->dmc_polarisation == b->dmc_polarisation;
}
@ -154,8 +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 onid, uint16_t tsid, const char *network, const char *source,
int enabled, int initialscan, const char *identifier,
dvb_satconf_t *satconf)
int enabled, int initialscan, const char *identifier)
{
th_dvb_mux_instance_t *tdmi, *c;
char buf[200];
@ -163,8 +161,8 @@ dvb_mux_create(th_dvb_adapter_t *tda, const struct dvb_mux_conf *dmc,
lock_assert(&global_lock);
/* HACK - we hash/compare based on 2KHz spacing and compare on +/-500Hz */
LIST_FOREACH(tdmi, &tda->tda_dn->dn_muxes, tdmi_adapter_link) {
if(tdmi_compare_key(&tdmi->tdmi_conf, dmc))
LIST_FOREACH(tdmi, &tda->tda_dn->dn_mux_instances, tdmi_adapter_link) {
if(tdmi_compare_key(&tdmi->tdmi_mux->dm_conf, dmc))
break; /* Mux already exist */
}
@ -174,25 +172,25 @@ dvb_mux_create(th_dvb_adapter_t *tda, const struct dvb_mux_conf *dmc,
char buf2[1024];
buf2[0] = 0;
if(tdmi_compare_conf(tda->tda_type, &tdmi->tdmi_conf, dmc)) {
if(tdmi_compare_conf(tda->tda_fe_type, &tdmi->tdmi_mux->dm_conf, dmc)) {
#if DVB_API_VERSION >= 5
snprintf(buf2, sizeof(buf2), " (");
if (tdmi->tdmi_conf.dmc_fe_modulation != dmc->dmc_fe_modulation)
if (tdmi->tdmi_mux->dm_conf.dmc_fe_modulation != dmc->dmc_fe_modulation)
sprintf(buf2, "%s %s->%s, ", buf2,
dvb_mux_qam2str(tdmi->tdmi_conf.dmc_fe_modulation),
dvb_mux_qam2str(tdmi->tdmi_mux->dm_conf.dmc_fe_modulation),
dvb_mux_qam2str(dmc->dmc_fe_modulation));
if (tdmi->tdmi_conf.dmc_fe_delsys != dmc->dmc_fe_delsys)
if (tdmi->tdmi_mux->dm_conf.dmc_fe_delsys != dmc->dmc_fe_delsys)
sprintf(buf2, "%s %s->%s, ", buf2,
dvb_mux_delsys2str(tdmi->tdmi_conf.dmc_fe_delsys),
dvb_mux_delsys2str(tdmi->tdmi_mux->dm_conf.dmc_fe_delsys),
dvb_mux_delsys2str(dmc->dmc_fe_delsys));
if (tdmi->tdmi_conf.dmc_fe_rolloff != dmc->dmc_fe_rolloff)
if (tdmi->tdmi_mux->dm_conf.dmc_fe_rolloff != dmc->dmc_fe_rolloff)
sprintf(buf2, "%s %s->%s, ", buf2,
dvb_mux_rolloff2str(tdmi->tdmi_conf.dmc_fe_rolloff),
dvb_mux_rolloff2str(tdmi->tdmi_mux->dm_conf.dmc_fe_rolloff),
dvb_mux_rolloff2str(dmc->dmc_fe_rolloff));
sprintf(buf2, "%s)", buf2);
#endif
memcpy(&tdmi->tdmi_conf, dmc, sizeof(struct dvb_mux_conf));
memcpy(&tdmi->tdmi_mux->dm_conf, dmc, sizeof(struct dvb_mux_conf));
save = 1;
}
@ -227,6 +225,10 @@ dvb_mux_create(th_dvb_adapter_t *tda, const struct dvb_mux_conf *dmc,
tdmi = calloc(1, sizeof(th_dvb_mux_instance_t));
tdmi->tdmi_mux = calloc(1, sizeof(dvb_mux_t));
tdmi->tdmi_mux->dm_network = tda->tda_dn;
if(identifier == NULL) {
char qpsktxt[20];
@ -236,12 +238,8 @@ dvb_mux_create(th_dvb_adapter_t *tda, const struct dvb_mux_conf *dmc,
else
qpsktxt[0] = 0;
snprintf(buf, sizeof(buf), "%s%d%s%s%s",
tda->tda_identifier, dmc->dmc_fe_params.frequency, qpsktxt,
(satconf || dmc->dmc_satconf) ? "_satconf_" : "",
(satconf ? satconf->sc_id :
(dmc->dmc_satconf ? dmc->dmc_satconf->sc_id : "")));
snprintf(buf, sizeof(buf), "%s%d%s",
tda->tda_identifier, dmc->dmc_fe_params.frequency, qpsktxt);
tdmi->tdmi_identifier = strdup(buf);
} else {
tdmi->tdmi_identifier = strdup(identifier);
@ -272,15 +270,9 @@ dvb_mux_create(th_dvb_adapter_t *tda, const struct dvb_mux_conf *dmc,
tdmi->tdmi_network = network ? strdup(network) : NULL;
tdmi->tdmi_quality = 100;
memcpy(&tdmi->tdmi_conf, dmc, sizeof(struct dvb_mux_conf));
if(satconf)
tdmi->tdmi_conf.dmc_satconf = satconf;
if(tdmi->tdmi_conf.dmc_satconf != NULL) {
LIST_INSERT_HEAD(&tdmi->tdmi_conf.dmc_satconf->sc_tdmis,
tdmi, tdmi_satconf_link);
}
memcpy(&tdmi->tdmi_mux->dm_conf, dmc, sizeof(struct dvb_mux_conf));
LIST_INSERT_HEAD(&tda->tda_dn->dn_muxes, tdmi, tdmi_adapter_link);
LIST_INSERT_HEAD(&tda->tda_dn->dn_mux_instances, tdmi, tdmi_adapter_link);
tdmi->tdmi_table_initial = initialscan;
if(source != NULL) {
@ -316,7 +308,7 @@ dvb_mux_destroy(th_dvb_mux_instance_t *tdmi)
hts_settings_remove("dvbmuxes/%s/%s",
tda->tda_identifier, tdmi->tdmi_identifier);
while((t = LIST_FIRST(&tdmi->tdmi_transports)) != NULL) {
while((t = LIST_FIRST(&tdmi->tdmi_mux->dm_services)) != NULL) {
hts_settings_remove("dvbtransports/%s/%s",
t->s_dvb_mux_instance->tdmi_identifier,
t->s_identifier);
@ -328,9 +320,6 @@ dvb_mux_destroy(th_dvb_mux_instance_t *tdmi)
if(tda->tda_mux_current == tdmi)
dvb_fe_stop(tda->tda_mux_current, 0);
if(tdmi->tdmi_conf.dmc_satconf != NULL)
LIST_REMOVE(tdmi, tdmi_satconf_link);
RB_REMOVE(&dvb_muxes, tdmi, tdmi_global_link);
LIST_REMOVE(tdmi, tdmi_adapter_link);
@ -552,7 +541,8 @@ int dvb_mux_str2hier(const char *str)
void
dvb_mux_save(th_dvb_mux_instance_t *tdmi)
{
struct dvb_frontend_parameters *f = &tdmi->tdmi_conf.dmc_fe_params;
const dvb_mux_conf_t *dmc = &tdmi->tdmi_mux->dm_conf;
const struct dvb_frontend_parameters *f = &dmc->dmc_fe_params;
htsmsg_t *m = htsmsg_create_map();
@ -572,7 +562,7 @@ dvb_mux_save(th_dvb_mux_instance_t *tdmi)
if(tdmi->tdmi_default_authority)
htsmsg_add_str(m, "default_authority", tdmi->tdmi_default_authority);
switch(tdmi->tdmi_adapter->tda_type) {
switch(tdmi->tdmi_adapter->tda_fe_type) {
case FE_OFDM:
htsmsg_add_str(m, "bandwidth",
val2str(f->u.ofdm.bandwidth, bwtab));
@ -603,17 +593,17 @@ dvb_mux_save(th_dvb_mux_instance_t *tdmi)
val2str(f->u.qpsk.fec_inner, fectab));
htsmsg_add_str(m, "polarisation",
val2str(tdmi->tdmi_conf.dmc_polarisation, poltab));
val2str(dmc->dmc_polarisation, poltab));
#if DVB_API_VERSION >= 5
htsmsg_add_str(m, "modulation",
val2str(tdmi->tdmi_conf.dmc_fe_modulation, qamtab));
val2str(dmc->dmc_fe_modulation, qamtab));
htsmsg_add_str(m, "delivery_system",
val2str(tdmi->tdmi_conf.dmc_fe_delsys, delsystab));
val2str(dmc->dmc_fe_delsys, delsystab));
htsmsg_add_str(m, "rolloff",
val2str(tdmi->tdmi_conf.dmc_fe_rolloff, rollofftab));
val2str(dmc->dmc_fe_rolloff, rollofftab));
#endif
break;
@ -633,10 +623,7 @@ dvb_mux_save(th_dvb_mux_instance_t *tdmi)
break;
}
if(tdmi->tdmi_conf.dmc_satconf != NULL)
htsmsg_add_str(m, "satconf", tdmi->tdmi_conf.dmc_satconf->sc_id);
hts_settings_save(m, "dvbmuxes/%s/%s",
hts_settings_save(m, "dvbmuxes/%s/%s",
tdmi->tdmi_adapter->tda_identifier, tdmi->tdmi_identifier);
htsmsg_destroy(m);
}
@ -660,7 +647,7 @@ tdmi_create_by_msg(th_dvb_adapter_t *tda, htsmsg_t *m, const char *identifier)
htsmsg_get_u32(m, "frequency", &dmc.dmc_fe_params.frequency);
switch(tda->tda_type) {
switch(tda->tda_fe_type) {
case FE_OFDM:
s = htsmsg_get_str(m, "bandwidth");
if(s == NULL || (r = str2val(s, bwtab)) < 0)
@ -773,16 +760,11 @@ tdmi_create_by_msg(th_dvb_adapter_t *tda, htsmsg_t *m, const char *identifier)
if(htsmsg_get_u32(m, "enabled", &enabled))
enabled = 1;
if((s = htsmsg_get_str(m, "satconf")) != NULL)
dmc.dmc_satconf = dvb_satconf_entry_find(tda, s, 0);
else
dmc.dmc_satconf = NULL;
initscan = htsmsg_get_u32_or_default(m, "initialscan", 0);
tdmi = dvb_mux_create(tda, &dmc,
onid, tsid, htsmsg_get_str(m, "network"), NULL, enabled,
initscan,
identifier, NULL);
identifier);
if(tdmi != NULL) {
if((s = htsmsg_get_str(m, "status")) != NULL)
@ -956,9 +938,10 @@ dvb_mux_fe_status(char *buf, size_t size, th_dvb_mux_instance_t *tdmi)
static void
dvb_mux_modulation(char *buf, size_t size, th_dvb_mux_instance_t *tdmi)
{
struct dvb_frontend_parameters *f = &tdmi->tdmi_conf.dmc_fe_params;
const dvb_mux_conf_t *dmc = &tdmi->tdmi_mux->dm_conf;
const struct dvb_frontend_parameters *f = &dmc->dmc_fe_params;
switch(tdmi->tdmi_adapter->tda_type) {
switch(tdmi->tdmi_adapter->tda_fe_type) {
case FE_OFDM:
snprintf(buf, size, "%s, %s, %s-mode",
val2str(f->u.ofdm.constellation, qamtab),
@ -969,8 +952,8 @@ dvb_mux_modulation(char *buf, size_t size, th_dvb_mux_instance_t *tdmi)
case FE_QPSK:
#if DVB_API_VERSION >= 5
snprintf(buf, size, "%d kBaud, %s, %s", f->u.qpsk.symbol_rate / 1000,
val2str(tdmi->tdmi_conf.dmc_fe_delsys, delsystab),
val2str(tdmi->tdmi_conf.dmc_fe_modulation, qamtab));
val2str(dmc->dmc_fe_delsys, delsystab),
val2str(dmc->dmc_fe_modulation, qamtab));
#else
snprintf(buf, size, "%d kBaud", f->u.qpsk.symbol_rate / 1000);
#endif
@ -1005,7 +988,7 @@ dvb_mux_build_msg(th_dvb_mux_instance_t *tdmi)
htsmsg_add_u32(m, "enabled", tdmi->tdmi_enabled);
htsmsg_add_str(m, "network", tdmi->tdmi_network ?: "");
dvb_mux_nicefreq(buf, sizeof(buf), tdmi);
dvb_mux_nicefreq(buf, sizeof(buf), tdmi->tdmi_mux);
htsmsg_add_str(m, "freq", buf);
dvb_mux_modulation(buf, sizeof(buf), tdmi);
@ -1014,11 +997,11 @@ dvb_mux_build_msg(th_dvb_mux_instance_t *tdmi)
dvb_mux_fe_status(buf, sizeof(buf), tdmi);
htsmsg_add_str(m, "fe_status", buf);
htsmsg_add_str(m, "pol",
dvb_polarisation_to_str_long(tdmi->tdmi_conf.dmc_polarisation));
const dvb_mux_conf_t *dmc = &tdmi->tdmi_mux->dm_conf;
if(tdmi->tdmi_conf.dmc_satconf != NULL)
htsmsg_add_str(m, "satconf", tdmi->tdmi_conf.dmc_satconf->sc_id);
htsmsg_add_str(m, "pol",
dvb_polarisation_to_str_long(dmc->dmc_polarisation));
if(tdmi->tdmi_transport_stream_id != 0xffff)
htsmsg_add_u32(m, "muxid", tdmi->tdmi_transport_stream_id);
@ -1066,7 +1049,7 @@ dvb_mux_add_by_params(th_dvb_adapter_t *tda,
memset(&dmc, 0, sizeof(dmc));
dmc.dmc_fe_params.inversion = INVERSION_AUTO;
switch(tda->tda_type) {
switch(tda->tda_fe_type) {
case FE_OFDM:
dmc.dmc_fe_params.frequency = freq * 1000;
if(!val2str(bw, bwtab))
@ -1150,16 +1133,9 @@ dvb_mux_add_by_params(th_dvb_adapter_t *tda,
}
if(satconf != NULL) {
dmc.dmc_satconf = dvb_satconf_entry_find(tda, satconf, 0);
if(dmc.dmc_satconf == NULL)
return "Satellite configuration not found";
} else {
dmc.dmc_satconf = NULL;
}
dmc.dmc_polarisation = polarisation;
tdmi = dvb_mux_create(tda, &dmc, 0, 0xffff, NULL, NULL, 1, 1, NULL, NULL);
tdmi = dvb_mux_create(tda, &dmc, 0, 0xffff, NULL, NULL, 1, 1, NULL);
if(tdmi == NULL)
return "Mux already exist";
@ -1167,7 +1143,7 @@ dvb_mux_add_by_params(th_dvb_adapter_t *tda,
return NULL;
}
#if 0
/**
*
*/
@ -1191,7 +1167,7 @@ dvb_mux_copy(th_dvb_adapter_t *dst, th_dvb_mux_instance_t *tdmi_src,
if(tdmi_dst == NULL)
return -1; // Already exist
LIST_FOREACH(t_src, &tdmi_src->tdmi_transports, s_group_link) {
LIST_FOREACH(t_src, &tdmi_src->tdmi_mux->dm_services, s_group_link) {
t_dst = dvb_service_find(tdmi_dst,
t_src->s_dvb_service_id,
t_src->s_pmt_pid, NULL);
@ -1245,6 +1221,7 @@ dvb_mux_copy(th_dvb_adapter_t *dst, th_dvb_mux_instance_t *tdmi_src,
dvb_mux_save(tdmi_dst);
return 0;
}
#endif
th_dvb_mux_instance_t *dvb_mux_find
( th_dvb_adapter_t *tda, const char *netname, uint16_t onid, uint16_t tsid,
@ -1252,7 +1229,7 @@ th_dvb_mux_instance_t *dvb_mux_find
{
th_dvb_mux_instance_t *tdmi;
if (tda) {
LIST_FOREACH(tdmi, &tda->tda_dn->dn_muxes, tdmi_adapter_link) {
LIST_FOREACH(tdmi, &tda->tda_dn->dn_mux_instances, tdmi_adapter_link) {
if (enabled && !tdmi->tdmi_enabled) continue;
if (onid && onid != tdmi->tdmi_network_id) continue;
if (tsid && tsid != tdmi->tdmi_transport_stream_id) continue;

View file

@ -36,7 +36,7 @@
*/
static void
dvb_mux_preconf_add(th_dvb_adapter_t *tda, const network_t *net,
const char *source, const char *satconf)
const char *source)
{
const mux_t *m;
struct dvb_mux_conf dmc;
@ -48,7 +48,7 @@ dvb_mux_preconf_add(th_dvb_adapter_t *tda, const network_t *net,
dmc.dmc_fe_params.inversion = INVERSION_AUTO;
dmc.dmc_fe_params.frequency = m->freq;
switch(tda->tda_type) {
switch(tda->tda_fe_type) {
case FE_OFDM:
dmc.dmc_fe_params.u.ofdm.bandwidth = m->bw;
dmc.dmc_fe_params.u.ofdm.constellation = m->constellation;
@ -96,9 +96,7 @@ dvb_mux_preconf_add(th_dvb_adapter_t *tda, const network_t *net,
break;
}
dmc.dmc_satconf = dvb_satconf_entry_find(tda, satconf, 0);
dvb_mux_create(tda, &dmc, 0, 0xffff, NULL, source, 1, 1, NULL, NULL);
dvb_mux_create(tda, &dmc, 0, 0xffff, NULL, source, 1, 1, NULL);
}
}
@ -107,8 +105,7 @@ dvb_mux_preconf_add(th_dvb_adapter_t *tda, const network_t *net,
*
*/
int
dvb_mux_preconf_add_network(th_dvb_adapter_t *tda, const char *id,
const char *satconf)
dvb_mux_preconf_add_network(th_dvb_adapter_t *tda, const char *id)
{
region_list_t *list;
const region_t *r;
@ -117,7 +114,7 @@ dvb_mux_preconf_add_network(th_dvb_adapter_t *tda, const char *id,
snprintf(source, sizeof(source), "built-in configuration from \"%s\"", id);
switch(tda->tda_type) {
switch(tda->tda_fe_type) {
case FE_QAM:
list = &regions_DVBC;
break;
@ -137,7 +134,7 @@ dvb_mux_preconf_add_network(th_dvb_adapter_t *tda, const char *id,
LIST_FOREACH(r, list, link) {
LIST_FOREACH(n, &r->networks, link) {
if(!strcmp(n->id, id)) {
dvb_mux_preconf_add(tda, n, source, satconf);
dvb_mux_preconf_add(tda, n, source);
break;
}
}

View file

@ -23,7 +23,6 @@
htsmsg_t *dvb_mux_preconf_get_node(int fetype, const char *node);
int dvb_mux_preconf_add_network(th_dvb_adapter_t *tda, const char *id,
const char *satconf);
int dvb_mux_preconf_add_network(th_dvb_adapter_t *tda, const char *id);
#endif /* DVB_MUXCONFIG_H */

View file

@ -87,14 +87,7 @@ dvb_satconf_entry_find(th_dvb_adapter_t *tda, const char *id, int create)
static void
satconf_destroy(th_dvb_adapter_t *tda, dvb_satconf_t *sc)
{
th_dvb_mux_instance_t *tdmi;
while((tdmi = LIST_FIRST(&sc->sc_tdmis)) != NULL) {
tdmi->tdmi_conf.dmc_satconf = NULL;
LIST_REMOVE(tdmi, tdmi_satconf_link);
}
TAILQ_REMOVE(&tda->tda_satconfs, sc, sc_adapter_link);
TAILQ_REMOVE(&tda->tda_satconfs, sc, sc_adapter_link);
free(sc->sc_id);
free(sc->sc_name);
free(sc->sc_comment);

View file

@ -346,13 +346,13 @@ dvb_service_find3
{
service_t *svc;
if (tdmi) {
LIST_FOREACH(svc, &tdmi->tdmi_transports, s_group_link) {
LIST_FOREACH(svc, &tdmi->tdmi_mux->dm_services, s_group_link) {
if (enabled && !svc->s_enabled) continue;
if (epgprimary && !service_is_primary_epg(svc)) continue;
if (sid == svc->s_dvb_service_id) return svc;
}
} else if (tda) {
LIST_FOREACH(tdmi, &tda->tda_dn->dn_muxes, tdmi_adapter_link) {
LIST_FOREACH(tdmi, &tda->tda_dn->dn_mux_instances, tdmi_adapter_link) {
if (enabled && !tdmi->tdmi_enabled) continue;
if (onid && onid != tdmi->tdmi_network_id) continue;
if (tsid && tsid != tdmi->tdmi_transport_stream_id) continue;
@ -393,7 +393,7 @@ dvb_service_find2(th_dvb_mux_instance_t *tdmi, uint16_t sid, int pmt_pid,
lock_assert(&global_lock);
LIST_FOREACH(t, &tdmi->tdmi_transports, s_group_link) {
LIST_FOREACH(t, &tdmi->tdmi_mux->dm_services, s_group_link) {
if(t->s_dvb_service_id == sid)
return t;
}
@ -424,7 +424,7 @@ dvb_service_find2(th_dvb_mux_instance_t *tdmi, uint16_t sid, int pmt_pid,
t->s_grace_period = dvb_grace_period;
t->s_dvb_mux_instance = tdmi;
LIST_INSERT_HEAD(&tdmi->tdmi_transports, t, s_group_link);
LIST_INSERT_HEAD(&tdmi->tdmi_mux->dm_services, t, s_group_link);
pthread_mutex_lock(&t->s_stream_mutex);
service_make_nicename(t);
@ -460,7 +460,7 @@ dvb_service_build_msg(service_t *t)
htsmsg_add_str(m, "network", tdmi->tdmi_network ?: "");
dvb_mux_nicefreq(buf, sizeof(buf), tdmi);
dvb_mux_nicefreq(buf, sizeof(buf), tdmi->tdmi_mux);
htsmsg_add_str(m, "mux", buf);
if(t->s_ch != NULL)

View file

@ -466,16 +466,16 @@ nicenum(char *x, size_t siz, unsigned int v)
*
*/
void
dvb_mux_nicefreq(char *buf, size_t size, th_dvb_mux_instance_t *tdmi)
dvb_mux_nicefreq(char *buf, size_t size, const dvb_mux_t *dm)
{
char freq[50];
if(tdmi->tdmi_adapter->tda_type == FE_QPSK) {
nicenum(freq, sizeof(freq), tdmi->tdmi_conf.dmc_fe_params.frequency);
if(dm->dm_network->dn_fe_type == FE_QPSK) {
nicenum(freq, sizeof(freq), dm->dm_conf.dmc_fe_params.frequency);
snprintf(buf, size, "%s kHz", freq);
} else {
nicenum(freq, sizeof(freq),
tdmi->tdmi_conf.dmc_fe_params.frequency / 1000);
dm->dm_conf.dmc_fe_params.frequency / 1000);
snprintf(buf, size, "%s kHz", freq);
}
}
@ -489,16 +489,16 @@ dvb_mux_nicename(char *buf, size_t size, th_dvb_mux_instance_t *tdmi)
{
char freq[50];
const char *n = tdmi->tdmi_network;
const dvb_mux_t *dm = tdmi->tdmi_mux;
if(tdmi->tdmi_adapter->tda_type == FE_QPSK) {
nicenum(freq, sizeof(freq), tdmi->tdmi_conf.dmc_fe_params.frequency);
snprintf(buf, size, "%s%s%s kHz %s (%s)",
if(tdmi->tdmi_adapter->tda_fe_type == FE_QPSK) {
nicenum(freq, sizeof(freq), dm->dm_conf.dmc_fe_params.frequency);
snprintf(buf, size, "%s%s%s kHz %s",
n?:"", n ? ": ":"", freq,
dvb_polarisation_to_str_long(tdmi->tdmi_conf.dmc_polarisation),
tdmi->tdmi_conf.dmc_satconf ? tdmi->tdmi_conf.dmc_satconf->sc_name : "No satconf");
dvb_polarisation_to_str_long(dm->dm_conf.dmc_polarisation));
} else {
nicenum(freq, sizeof(freq), tdmi->tdmi_conf.dmc_fe_params.frequency / 1000);
nicenum(freq, sizeof(freq), dm->dm_conf.dmc_fe_params.frequency / 1000);
snprintf(buf, size, "%s%s%s kHz", n?:"", n ? ": ":"", freq);
}
}

View file

@ -82,7 +82,7 @@ th_dvb_mux_instance_t *dvb_mux_find_by_identifier(const char *identifier);
void dvb_mux_nicename(char *buf, size_t size, th_dvb_mux_instance_t *tdmi);
int dvb_mux_badness(th_dvb_mux_instance_t *tdmi);
const char *dvb_mux_status(th_dvb_mux_instance_t *tdmi);
void dvb_mux_nicefreq(char *buf, size_t size, th_dvb_mux_instance_t *tdmi);
void dvb_mux_nicefreq(char *buf, size_t size, const dvb_mux_t *dm);
void atsc_utf16_to_utf8(uint8_t *src, int len, char *buf, int buflen);

View file

@ -267,7 +267,7 @@ dvb_bat_callback(th_dvb_mux_instance_t *tdmi, uint8_t *buf, int len,
j = 0;
/* Find TDMI */
LIST_FOREACH(tdmi, &tda->tda_dn->dn_muxes, tdmi_adapter_link)
LIST_FOREACH(tdmi, &tda->tda_dn->dn_mux_instances, tdmi_adapter_link)
if(tdmi->tdmi_transport_stream_id == tsid &&
tdmi->tdmi_network_id == onid)
break;
@ -337,7 +337,7 @@ dvb_sdt_callback(th_dvb_mux_instance_t *tdmi, uint8_t *ptr, int len,
if(!tdmi->tdmi_network_id)
dvb_mux_set_onid(tdmi, onid);
} else {
LIST_FOREACH(tdmi, &tda->tda_dn->dn_muxes, tdmi_adapter_link)
LIST_FOREACH(tdmi, &tda->tda_dn->dn_mux_instances, tdmi_adapter_link)
if(tdmi->tdmi_transport_stream_id == tsid &&
tdmi->tdmi_network_id != onid)
break;
@ -495,9 +495,8 @@ dvb_pat_callback(th_dvb_mux_instance_t *tdmi, uint8_t *ptr, int len,
// Make sure this TSID is not already known on another mux
// That might indicate that we have accedentally received a PAT
// from another mux
LIST_FOREACH(other, &tda->tda_dn->dn_muxes, tdmi_adapter_link)
if(other != tdmi &&
other->tdmi_conf.dmc_satconf == tdmi->tdmi_conf.dmc_satconf &&
LIST_FOREACH(other, &tda->tda_dn->dn_mux_instances, tdmi_adapter_link)
if(other != tdmi &&
other->tdmi_transport_stream_id == tsid &&
other->tdmi_network_id == tdmi->tdmi_network_id)
return -1;
@ -653,7 +652,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, onid, tsid, NULL,
"automatic mux discovery", 1, 1, NULL, NULL);
"automatic mux discovery", 1, 1, NULL);
return 0;
}
@ -695,8 +694,6 @@ dvb_table_sat_delivery(th_dvb_mux_instance_t *tdmi, uint8_t *ptr, int len,
dmc.dmc_fe_params.u.qam.fec_inner = fec_tab[ptr[10] & 0x0f];
dmc.dmc_polarisation = (ptr[6] >> 5) & 0x03;
// Same satconf (lnb, switch, etc)
dmc.dmc_satconf = tdmi->tdmi_conf.dmc_satconf;
#if DVB_API_VERSION >= 5
int modulation = (ptr[6] & 0x03);
@ -738,8 +735,7 @@ dvb_table_sat_delivery(th_dvb_mux_instance_t *tdmi, uint8_t *ptr, int len,
#endif
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);
return 0;
}
@ -755,7 +751,7 @@ dvb_table_local_channel(th_dvb_mux_instance_t *tdmi, uint8_t *ptr, int len,
th_dvb_adapter_t *tda = tdmi->tdmi_adapter;
service_t *t;
LIST_FOREACH(tdmi, &tda->tda_dn->dn_muxes, tdmi_adapter_link)
LIST_FOREACH(tdmi, &tda->tda_dn->dn_mux_instances, tdmi_adapter_link)
if(tdmi->tdmi_transport_stream_id == tsid && tdmi->tdmi_network_id == onid)
break;
@ -872,11 +868,11 @@ 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)
if(tdmi->tdmi_adapter->tda_fe_type == FE_QPSK)
dvb_table_sat_delivery(tdmi, ptr, tlen, tsid, onid);
break;
case DVB_DESC_CABLE:
if(tdmi->tdmi_adapter->tda_type == FE_QAM)
if(tdmi->tdmi_adapter->tda_fe_type == FE_QAM)
dvb_table_cable_delivery(tdmi, ptr, tlen, tsid, onid);
break;
case DVB_DESC_LOCAL_CHAN:
@ -935,7 +931,7 @@ atsc_vct_callback(th_dvb_mux_instance_t *tdmi, uint8_t *ptr, int len,
onid = (ptr[24] << 8) | ptr[25];
/* Search all muxes on adapter */
LIST_FOREACH(tdmi, &tda->tda_dn->dn_muxes, tdmi_adapter_link)
LIST_FOREACH(tdmi, &tda->tda_dn->dn_mux_instances, tdmi_adapter_link)
if(tdmi->tdmi_transport_stream_id == tsid && tdmi->tdmi_network_id == onid);
break;
@ -988,7 +984,7 @@ dvb_pmt_callback(th_dvb_mux_instance_t *tdmi, uint8_t *ptr, int len,
service_t *t;
th_dvb_table_t *tdt = opaque;
LIST_FOREACH(t, &tdmi->tdmi_transports, s_group_link) {
LIST_FOREACH(t, &tdmi->tdmi_mux->dm_services, s_group_link) {
pthread_mutex_lock(&t->s_stream_mutex);
psi_parse_pmt(t, ptr, len, 1, 1);
if (t->s_pmt_pid == tdt->tdt_pid && t->s_status == SERVICE_RUNNING)
@ -1036,7 +1032,7 @@ dvb_table_add_default_atsc(th_dvb_mux_instance_t *tdmi)
{
int tableid;
if(tdmi->tdmi_conf.dmc_fe_params.u.vsb.modulation == VSB_8) {
if(tdmi->tdmi_mux->dm_conf.dmc_fe_params.u.vsb.modulation == VSB_8) {
tableid = 0xc8; // Terrestrial
} else {
tableid = 0xc9; // Cable
@ -1064,7 +1060,7 @@ dvb_table_add_default(th_dvb_mux_instance_t *tdmi)
TDT_CRC, 1);
switch(tdmi->tdmi_adapter->tda_type) {
switch(tdmi->tdmi_adapter->tda_fe_type) {
case FE_QPSK:
case FE_OFDM:
case FE_QAM:

View file

@ -255,7 +255,7 @@ void epggrab_ota_create_and_register_by_id
th_dvb_mux_instance_t *tdmi;
epggrab_ota_mux_t *ota;
TAILQ_FOREACH(tda, &dvb_adapters, tda_global_link) {
LIST_FOREACH(tdmi, &tda->tda_dn->dn_muxes, tdmi_adapter_link) {
LIST_FOREACH(tdmi, &tda->tda_dn->dn_mux_instances, 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;

View file

@ -72,7 +72,7 @@ extjs_dvblocations(http_connection_t *hc, const char *remain, void *opaque)
pthread_mutex_unlock(&global_lock);
if((out = dvb_mux_preconf_get_node(tda->tda_type, s)) == NULL)
if((out = dvb_mux_preconf_get_node(tda->tda_fe_type, s)) == NULL)
return 404;
htsmsg_json_serialize(out, hq, 0);
@ -110,7 +110,7 @@ extjs_dvbadapter(http_connection_t *hc, const char *remain, void *opaque)
htsmsg_t *out, *array, *r;
const char *op = http_arg_get(&hc->hc_req_args, "op");
const char *sibling = http_arg_get(&hc->hc_req_args, "sibling");
const char *s, *sc;
const char *s;
th_dvb_mux_instance_t *tdmi;
service_t *t;
@ -124,7 +124,7 @@ extjs_dvbadapter(http_connection_t *hc, const char *remain, void *opaque)
array = htsmsg_create_list();
TAILQ_FOREACH(tda, &dvb_adapters, tda_global_link) {
if(ref == NULL || (ref != tda && ref->tda_type == tda->tda_type))
if(ref == NULL || (ref != tda && ref->tda_fe_type == tda->tda_fe_type))
htsmsg_add_msg(array, NULL, dvb_adapter_build_msg(tda));
}
pthread_mutex_unlock(&global_lock);
@ -224,10 +224,10 @@ extjs_dvbadapter(http_connection_t *hc, const char *remain, void *opaque)
htsmsg_add_u32(out, "success", 1);
} else if(!strcmp(op, "addnetwork")) {
sc = http_arg_get(&hc->hc_req_args, "satconf");
// sc = http_arg_get(&hc->hc_req_args, "satconf");
if((s = http_arg_get(&hc->hc_req_args, "network")) != NULL)
dvb_mux_preconf_add_network(tda, s, sc);
dvb_mux_preconf_add_network(tda, s);
out = htsmsg_create_map();
htsmsg_add_u32(out, "success", 1);
@ -237,8 +237,8 @@ extjs_dvbadapter(http_connection_t *hc, const char *remain, void *opaque)
tvhlog(LOG_NOTICE, "web interface",
"Service probe started on \"%s\"", tda->tda_displayname);
LIST_FOREACH(tdmi, &tda->tda_dn->dn_muxes, tdmi_adapter_link) {
LIST_FOREACH(t, &tdmi->tdmi_transports, s_group_link) {
LIST_FOREACH(tdmi, &tda->tda_dn->dn_mux_instances, tdmi_adapter_link) {
LIST_FOREACH(t, &tdmi->tdmi_mux->dm_services, s_group_link) {
if(t->s_enabled)
serviceprobe_enqueue(t);
}
@ -334,7 +334,7 @@ extjs_dvbmuxes(http_connection_t *hc, const char *remain, void *opaque)
if(!strcmp(op, "get")) {
array = htsmsg_create_list();
LIST_FOREACH(tdmi, &tda->tda_dn->dn_muxes, tdmi_adapter_link)
LIST_FOREACH(tdmi, &tda->tda_dn->dn_mux_instances, tdmi_adapter_link)
htsmsg_add_msg(array, NULL, dvb_mux_build_msg(tdmi));
htsmsg_add_msg(out, "entries", array);
@ -415,16 +415,16 @@ extjs_dvbservices(http_connection_t *hc, const char *remain, void *opaque)
out = htsmsg_create_map();
array = htsmsg_create_list();
LIST_FOREACH(tdmi, &tda->tda_dn->dn_muxes, tdmi_adapter_link) {
LIST_FOREACH(t, &tdmi->tdmi_transports, s_group_link) {
LIST_FOREACH(tdmi, &tda->tda_dn->dn_mux_instances, tdmi_adapter_link) {
LIST_FOREACH(t, &tdmi->tdmi_mux->dm_services, s_group_link) {
count++;
}
}
tvec = alloca(sizeof(service_t *) * count);
LIST_FOREACH(tdmi, &tda->tda_dn->dn_muxes, tdmi_adapter_link) {
LIST_FOREACH(t, &tdmi->tdmi_transports, s_group_link) {
LIST_FOREACH(tdmi, &tda->tda_dn->dn_mux_instances, tdmi_adapter_link) {
LIST_FOREACH(t, &tdmi->tdmi_mux->dm_services, s_group_link) {
tvec[i++] = t;
}
}
@ -608,7 +608,7 @@ extjs_dvb_addmux(http_connection_t *hc, const char *remain, void *opaque)
return 0;
}
#if 0
/**
*
*/
@ -672,6 +672,7 @@ extjs_dvb_copymux(http_connection_t *hc, const char *remain, void *opaque)
return 0;
}
#endif
/**
*
@ -766,8 +767,9 @@ extjs_start_dvb(void)
http_path_add("/dvb/addmux",
NULL, extjs_dvb_addmux, ACCESS_ADMIN);
#if 0 // XXX(dvbreorg)
http_path_add("/dvb/copymux",
NULL, extjs_dvb_copymux, ACCESS_ADMIN);
#endif
}

View file

@ -134,14 +134,14 @@ dumpdvbadapters(htsbuf_queue_t *hq)
htsbuf_qprintf(hq, "%s (%s)\n", tda->tda_displayname, tda->tda_identifier);
outputtitle(hq, 4, "Multiplexes");
LIST_FOREACH(tdmi, &tda->tda_dn->dn_muxes, tdmi_adapter_link) {
LIST_FOREACH(tdmi, &tda->tda_dn->dn_mux_instances, tdmi_adapter_link) {
char tdminame[64];
dvb_mux_nicename(tdminame, sizeof(tdminame), tdmi);
htsbuf_qprintf(hq, " %s (%s)\n",
tdminame, tdmi->tdmi_identifier);
htsbuf_qprintf(hq, "\n");
dumptransports(hq, &tdmi->tdmi_transports, 8);
dumptransports(hq, &tdmi->tdmi_mux->dm_services, 8);
}
}
}