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:
parent
9c2a55eb01
commit
97debaeff3
14 changed files with 182 additions and 195 deletions
|
@ -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,
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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),
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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 = ®ions_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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue