Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Work on settings properties on nodes from UI
  • Loading branch information
andoma committed Feb 7, 2013
1 parent 3023192 commit a6433e4
Show file tree
Hide file tree
Showing 12 changed files with 218 additions and 138 deletions.
1 change: 1 addition & 0 deletions Makefile
Expand Up @@ -64,6 +64,7 @@ endif
#
SRCS = src/main.c \
src/idnode.c \
src/prop.c \
src/utils.c \
src/wrappers.c \
src/version.c \
Expand Down
19 changes: 10 additions & 9 deletions src/dvb/dvb_multiplex.c
Expand Up @@ -58,13 +58,18 @@ static struct strtab muxfestatustab[] = {



static htsmsg_t *dvb_mux_serialize(struct idnode *self, int full);
static idnode_t **dvb_mux_get_childs(struct idnode *self);
static const char *dvb_mux_get_title(struct idnode *self);

static const idclass_t dvb_mux_class = {
.ic_class = "dvbmux",
.ic_serialize = dvb_mux_serialize,
.ic_get_title = dvb_mux_get_title,
.ic_get_childs = dvb_mux_get_childs,
.ic_properties = {
{
"enabled", "Enabled", PT_BOOL,
offsetof(dvb_mux_t, dm_enabled)
}, {}}
};


Expand Down Expand Up @@ -1244,14 +1249,10 @@ dvb_subscription_create_from_tdmi(th_dvb_mux_instance_t *tdmi,
/**
*
*/
static htsmsg_t *
dvb_mux_serialize(struct idnode *self, int full)
static const char *
dvb_mux_get_title(struct idnode *self)
{
dvb_mux_t *dm = (dvb_mux_t *)self;
htsmsg_t *m = htsmsg_create_map();
htsmsg_add_str(m, "id", idnode_uuid_as_str(&dm->dm_id));
htsmsg_add_str(m, "text", dvb_mux_nicename(dm));
return m;
return dvb_mux_nicename((dvb_mux_t *)self);
}

/**
Expand Down
96 changes: 12 additions & 84 deletions src/dvb/dvb_network.c
Expand Up @@ -27,13 +27,23 @@

struct dvb_network_list dvb_networks;

static htsmsg_t *dvb_network_serialize(struct idnode *self, int full);
static idnode_t **dvb_network_get_childs(struct idnode *self);

static const idclass_t dvb_network_class = {
.ic_class = "dvbnetwork",
.ic_serialize = dvb_network_serialize,
.ic_get_childs = dvb_network_get_childs,
.ic_properties = {
{
"autodiscovery", "Auto discovery", PT_BOOL,
offsetof(dvb_network_t, dn_autodiscovery)
}, {
"nitoid", "NIT OID", PT_INT,
offsetof(dvb_network_t, dn_nitoid)
}, {
"disable_pmt_monitor", "Disable PMT monitor", PT_BOOL,
offsetof(dvb_network_t, dn_disable_pmt_monitor)
}, {
}},
};

/**
Expand All @@ -42,15 +52,12 @@ static const idclass_t dvb_network_class = {
dvb_network_t *
dvb_network_create(int fe_type, const char *uuid)
{
printf("Creating network %s\n", uuid);
dvb_network_t *dn = calloc(1, sizeof(dvb_network_t));
if(idnode_insert(&dn->dn_id, uuid, &dvb_network_class)) {
free(dn);
return NULL;
}

printf("Added network %s\n", idnode_uuid_as_str(&dn->dn_id));

dn->dn_fe_type = fe_type;
TAILQ_INIT(&dn->dn_initial_scan_pending_queue);
TAILQ_INIT(&dn->dn_initial_scan_current_queue);
Expand All @@ -62,20 +69,6 @@ dvb_network_create(int fe_type, const char *uuid)



/**
*
*/
static htsmsg_t *
dvb_network_serialize(struct idnode *self, int full)
{
dvb_network_t *dn = (dvb_network_t *)self;
htsmsg_t *m = htsmsg_create_map();
htsmsg_add_str(m, "id", idnode_uuid_as_str(&dn->dn_id));
htsmsg_add_str(m, "text", idnode_uuid_as_str(&dn->dn_id));
return m;
}


/**
*
*/
Expand Down Expand Up @@ -161,68 +154,6 @@ dvb_network_save(dvb_network_t *dn)
#endif


#if 0
/**
*
*/
void
dvb_network_set_auto_discovery(dvb_network_t *dn, int on)
{
if(dn->dn_autodiscovery == on)
return;

lock_assert(&global_lock);

tvhlog(LOG_NOTICE, "dvb", "Network \"%s\" mux autodiscovery set to: %s",
dn->dn_displayname, on ? "On" : "Off");

dn->dn_autodiscovery = on;
dvb_network_save(dn);
}



/**
*
*/
void
dvb_network_set_nitoid(dvb_network_t *dn, int nitoid)
{
lock_assert(&global_lock);

if(dn->dn_nitoid == nitoid)
return;

tvhlog(LOG_NOTICE, "dvb", "NIT-o network id \"%d\" changed to \"%d\"",
dn->dn_nitoid, nitoid);

dn->dn_nitoid = nitoid;
dvb_network_save(dn);
}



/**
*
*/
void
dvb_network_set_disable_pmt_monitor(th_dvb_network_t *dn, int on)
{
if(dn->dn_disable_pmt_monitor == on)
return;

lock_assert(&global_lock);

tvhlog(LOG_NOTICE, "dvb", "Network \"%s\" disabled PMT monitoring set to: %s",
dn->dn_displayname, on ? "On" : "Off");

dn->dn_disable_pmt_monitor = on;
dvb_network_save(dn);
}

#endif



/**
*
Expand Down Expand Up @@ -268,9 +199,6 @@ dvb_network_init(void)
if((l = hts_settings_load_r(1, "dvb/networks")) == NULL)
return;


htsmsg_print(l);

HTSMSG_FOREACH(f, l) {
if((c = htsmsg_get_map_by_field(f)) == NULL)
continue;
Expand Down
17 changes: 9 additions & 8 deletions src/dvb/dvb_service.c
Expand Up @@ -44,7 +44,7 @@
#include "dvb_support.h"
#include "notify.h"

static htsmsg_t *dvb_service_serialize(service_t *s, int full);
static htsmsg_t *dvb_service_serialize(service_t *s);


/**
Expand Down Expand Up @@ -414,18 +414,19 @@ dvb_service_find2(dvb_mux_t *dm, uint16_t sid, int pmt_pid,
*
*/
static htsmsg_t *
dvb_service_serialize(service_t *s, int full)
dvb_service_serialize(service_t *s)
{
dvb_mux_t *dm = s->s_dvb_mux;
htsmsg_t *m = htsmsg_create_map();
char buf[100];

htsmsg_add_str(m, "id", idnode_uuid_as_str(&s->s_id));

snprintf(buf, sizeof(buf), "%s (0x%04x)",
s->s_svcname ?: "<noname>", s->s_dvb_service_id);
htsmsg_add_str(m, "text", buf);

if(s->s_svcname) {
htsmsg_add_str(m, "text", s->s_svcname);
} else {
snprintf(buf, sizeof(buf), "Service-0x%04x",
s->s_dvb_service_id);
htsmsg_add_str(m, "text", buf);
}

htsmsg_add_u32(m, "enabled", s->s_enabled);
htsmsg_add_u32(m, "channel", s->s_channel_number);
Expand Down
26 changes: 26 additions & 0 deletions src/idnode.c
Expand Up @@ -156,3 +156,29 @@ idnode_unlink(idnode_t *in)
{
RB_REMOVE(&idnodes, in, in_link);
}


/**
*
*/
htsmsg_t *
idnode_serialize(struct idnode *self)
{
const idclass_t *c = self->in_class;
htsmsg_t *m;
if(c->ic_serialize != NULL) {
m = c->ic_serialize(self);
} else {
m = htsmsg_create_map();

if(c->ic_get_title != NULL) {
htsmsg_add_str(m, "text", c->ic_get_title(self));
} else {
htsmsg_add_str(m, "text", idnode_uuid_as_str(self));
}
htsmsg_add_msg(m, "properties", prop_get_values(self, c->ic_properties));
htsmsg_add_msg(m, "propertynames", prop_get_names(c->ic_properties));
htsmsg_add_str(m, "id", idnode_uuid_as_str(self));
}
return m;
}
7 changes: 6 additions & 1 deletion src/idnode.h
@@ -1,14 +1,17 @@
#pragma once

#include "tvheadend.h"
#include "prop.h"

struct htsmsg;
struct idnode;

typedef struct idclass {
const char *ic_class;
struct htsmsg *(*ic_serialize)(struct idnode *self, int full);
struct htsmsg *(*ic_serialize)(struct idnode *self);
struct idnode **(*ic_get_childs)(struct idnode *self);
const char *(*ic_get_title)(struct idnode *self);
const property_t ic_properties[];
} idclass_t;


Expand All @@ -27,3 +30,5 @@ const char *idnode_uuid_as_str(const idnode_t *in);
idnode_t *idnode_find(const char *uuid);

void idnode_unlink(idnode_t *in);

htsmsg_t *idnode_serialize(struct idnode *self);
84 changes: 84 additions & 0 deletions src/prop.c
@@ -0,0 +1,84 @@
#include "prop.h"

#if 0
/**
*
*/
void
prop_write_values(void *ptr, const property_t p[], htsmsg_t *m)
{
int i = 0;
for(;p[i].id; i++) {
switch(p[i].type) {
case PT_BOOL:
htsmsg_add_bool(m, p[i].id, *(int *)(ptr + p[i].off));
break;
case PT_INT:
htsmsg_add_s32(m, p[i].id, *(int *)(ptr + p[i].off));
break;
case PT_STR:
htsmsg_add_str(m, p[i].id, (const char *)(ptr + p[i].off));
break;
}
}
}
#endif


/**
*
*/
void
prop_read_values(void *ptr, const property_t p[], htsmsg_t *m)
{
int i = 0;
for(;p[i].id; i++) {
switch(p[i].type) {
case PT_BOOL:
htsmsg_add_bool(m, p[i].id, *(int *)(ptr + p[i].off));
break;
case PT_INT:
htsmsg_add_s32(m, p[i].id, *(int *)(ptr + p[i].off));
break;
case PT_STR:
htsmsg_add_str(m, p[i].id, (const char *)(ptr + p[i].off));
break;
}
}
}


/**
*
*/
htsmsg_t *
prop_get_values(void *ptr, const property_t p[])
{
htsmsg_t *m = htsmsg_create_map();
prop_read_values(ptr, p, m);
return m;
}


/**
*
*/
void
prop_read_names(const property_t p[], htsmsg_t *m)
{
int i = 0;
for(;p[i].name; i++)
htsmsg_add_str(m, p[i].id, p[i].name);
}


/**
*
*/
htsmsg_t *
prop_get_names(const property_t p[])
{
htsmsg_t *m = htsmsg_create_map();
prop_read_names(p, m);
return m;
}
24 changes: 24 additions & 0 deletions src/prop.h
@@ -0,0 +1,24 @@
#pragma once
#include <stddef.h>

#include "htsmsg.h"

typedef enum {
PT_BOOL,
PT_INT,
PT_STR,
} prop_type_t;

typedef struct property {
const char *id;
const char *name;
prop_type_t type;
size_t off;
} property_t;



void prop_read_values(void *ptr, const property_t p[], htsmsg_t *m);
htsmsg_t *prop_get_values(void *ptr, const property_t p[]);
void prop_read_names(const property_t p[], htsmsg_t *m);
htsmsg_t *prop_get_names(const property_t p[]);

0 comments on commit a6433e4

Please sign in to comment.