} dvb_isdbt_config_t;
typedef struct dvb_cablecard_config {
- uint32_t num;
- uint16_t minor;
+ uint32_t vchannel;
char *name;
} dvb_cablecard_config_t;
static int
dvb_mux_conf_str_cablecard(dvb_mux_conf_t *dmc, char *buf, size_t bufsize)
{
- if (!dmc->u.dmc_fe_cablecard.minor)
- return snprintf(buf, bufsize, "%s channel %u",
+ return snprintf(buf, bufsize, "%s channel %u",
dvb_type2str(dmc->dmc_fe_type),
- dmc->u.dmc_fe_cablecard.num);
- else
- return snprintf(buf, bufsize, "%s channel %u.%u",
- dvb_type2str(dmc->dmc_fe_type),
- dmc->u.dmc_fe_cablecard.num,
- dmc->u.dmc_fe_cablecard.minor);
+ dmc->u.dmc_fe_cablecard.vchannel);
}
static int
return 0;
}
-static const void *
-dvb_mux_class_vchan_get(void *o)
-{
- dvb_mux_t *lm = (dvb_mux_t *)o;
-
- if (!lm->lm_tuning.u.dmc_fe_cablecard.minor)
- snprintf(prop_sbuf, PROP_SBUF_LEN, "%u",
- lm->lm_tuning.u.dmc_fe_cablecard.num);
- else
- snprintf(prop_sbuf, PROP_SBUF_LEN, "%u.%u",
- lm->lm_tuning.u.dmc_fe_cablecard.num,
- lm->lm_tuning.u.dmc_fe_cablecard.minor);
- return &prop_sbuf_ptr;
-}
-
-static int
-dvb_mux_class_vchan_set(void *o, const void *v)
-{
- dvb_mux_t *lm = (dvb_mux_t *)o;
- int r;
-
- r = sscanf(v, "%u%*[.-]%hu",
- &lm->lm_tuning.u.dmc_fe_cablecard.num,
- &lm->lm_tuning.u.dmc_fe_cablecard.minor);
- switch (r) {
- case 0:
- return 1;
- case 1:
- lm->lm_tuning.u.dmc_fe_cablecard.minor = 0;
- }
- return 0;
-}
-
const idclass_t dvb_mux_class =
{
.ic_super = &mpegts_mux_class,
.ic_caption = N_("CableCARD multiplex"),
.ic_properties = (const property_t[]){
{
- .type = PT_STR,
+ .type = PT_U32,
.id = "vchan",
.name = N_("Channel"),
.desc = N_("The channel on the cable provider's network."),
- .get = dvb_mux_class_vchan_get,
- .set = dvb_mux_class_vchan_set,
+ .off = offsetof(dvb_mux_t, lm_tuning.dmc_fe_cablecard.vchannel),
},
{
.type = PT_U32,
uint32_t freq = lm->lm_tuning.dmc_fe_freq, freq2;
char extra[8], buf2[5], *p;
- if (lm->lm_tuning.dmc_fe_type == DVB_TYPE_CABLECARD) {
- if (!lm->lm_tuning.u.dmc_fe_cablecard.minor)
- snprintf(buf, len, "%u", lm->lm_tuning.u.dmc_fe_cablecard.num);
- else
- snprintf(buf, len, "%u.%u",
- lm->lm_tuning.u.dmc_fe_cablecard.num,
- lm->lm_tuning.u.dmc_fe_cablecard.minor);
- } else {
+ if (lm->lm_tuning.dmc_fe_type == DVB_TYPE_CABLECARD)
+ snprintf(buf, len, "%u", lm->lm_tuning.u.dmc_fe_cablecard.vchannel);
+ else {
if (ln->ln_type == DVB_TYPE_S) {
const char *s = dvb_pol2str(lm->lm_tuning.u.dmc_fe_qpsk.polarisation);
if (s) extra[0] = *s;
char ubuf[UUID_HEX_SIZE];
/* remove config */
- hts_settings_remove("input/dvb/networks/%s",
+ hts_settings_remove("input/dvb/networks/%s",
idnode_uuid_as_str(in, ubuf));
/* Parent delete */
if (!s->s_dvb_provider && ln->mn_provider_network_name)
s->s_dvb_provider = strdup(ln->mn_provider_network_name);
if (!s->s_dvb_channel_num)
- s->s_dvb_channel_num = lm->lm_tuning.u.dmc_fe_cablecard.num;
- if (!s->s_dvb_channel_minor && lm->lm_tuning.u.dmc_fe_cablecard.minor)
- s->s_dvb_channel_minor = lm->lm_tuning.u.dmc_fe_cablecard.minor;
+ s->s_dvb_channel_num = lm->lm_tuning.u.dmc_fe_cablecard.vchannel;
if (!s->s_dvb_svcname && lm->lm_tuning.u.dmc_fe_cablecard.name)
s->s_dvb_svcname = strdup(lm->lm_tuning.u.dmc_fe_cablecard.name);
}
if (!(ln = (dvb_network_t*)mpegts_network_create0((void*)ln,
idc, uuid, NULL, conf)))
return NULL;
-
+
/* Callbacks */
ln->mn_create_mux = dvb_network_create_mux;
ln->mn_create_service = dvb_network_create_service;
for (i = 0; i < ARRAY_SIZE(dvb_network_classes); i++)
mpegts_network_register_builder(dvb_network_classes[i],
dvb_network_builder);
-
+
/* Load settings */
if (!(c = hts_settings_load_r(1, "input/dvb/networks")))
return;
}
break;
case DVB_TYPE_CABLECARD:
- if (!dmc->u.dmc_fe_cablecard.minor)
- snprintf(channel_buf, sizeof(channel_buf), "%u", dmc->u.dmc_fe_cablecard.num);
- else
- snprintf(channel_buf, sizeof(channel_buf), "%u.%u",
- dmc->u.dmc_fe_cablecard.num,
- dmc->u.dmc_fe_cablecard.minor);
+ snprintf(channel_buf, sizeof(channel_buf), "%u", dmc->u.dmc_fe_cablecard.vchannel);
break;
default:
snprintf(channel_buf, sizeof(channel_buf), "auto:%u", dmc->dmc_fe_freq);