1
0
Fork 0
mirror of https://git.rwth-aachen.de/acs/public/villas/node/ synced 2025-03-09 00:00:00 +01:00

sample: add function to dump sample details

This commit is contained in:
Steffen Vogel 2019-01-23 00:49:28 +01:00
parent c23d1979df
commit 357df1600f
7 changed files with 52 additions and 16 deletions

View file

@ -123,6 +123,9 @@ int sample_decref(struct sample *s);
int sample_copy(struct sample *dst, struct sample *src);
/** Dump all details about a sample to debug log */
void sample_dump(struct sample *s);
/** Compare two samples */
int sample_cmp(struct sample *a, struct sample *b, double epsilon, int flags);

View file

@ -106,11 +106,11 @@ int signal_parse(struct signal *s, json_t *cfg);
/** Initialize signal from a mapping_entry. */
int signal_init_from_mapping(struct signal *s, const struct mapping_entry *me, unsigned index);
int signal_vlist_parse(struct vlist *list, json_t *cfg);
int signal_list_parse(struct vlist *list, json_t *cfg);
int signal_vlist_generate(struct vlist *list, unsigned len, enum signal_type fmt);
int signal_list_generate(struct vlist *list, unsigned len, enum signal_type fmt);
void signal_vlist_dump(const struct vlist *list);
void signal_list_dump(const struct vlist *list, const union signal_data *data, int len);
enum signal_type signal_type_from_str(const char *str);

View file

@ -122,7 +122,7 @@ int io_init_auto(struct io *io, const struct format_type *fmt, int len, int flag
if (ret)
return ret;
ret = signal_vlist_generate(signals, len, SIGNAL_TYPE_AUTO);
ret = signal_list_generate(signals, len, SIGNAL_TYPE_AUTO);
if (ret)
return ret;

View file

@ -274,7 +274,7 @@ int node_parse(struct node *n, json_t *json, const char *name)
}
else if (json_signals) {
if (json_is_array(json_signals)) {
ret = signal_vlist_parse(&n->signals, json_signals);
ret = signal_list_parse(&n->signals, json_signals);
if (ret)
error("Failed to parse signal definition of node %s", node_name(n));
}
@ -291,13 +291,13 @@ int node_parse(struct node *n, json_t *json, const char *name)
if (type < 0)
error("Invalid signal type %s", type_str);
signal_vlist_generate(&n->signals, count, type);
signal_list_generate(&n->signals, count, type);
}
}
else {
warning("No signal definition found for node %s. Using the default config of %d floating point signals.", node_name(n), DEFAULT_SAMPLE_LENGTH);
signal_vlist_generate(&n->signals, DEFAULT_SAMPLE_LENGTH, SIGNAL_TYPE_FLOAT);
signal_list_generate(&n->signals, DEFAULT_SAMPLE_LENGTH, SIGNAL_TYPE_FLOAT);
}
struct {

View file

@ -284,3 +284,20 @@ enum signal_type sample_format(const struct sample *s, unsigned idx)
return sig ? sig->type : SIGNAL_TYPE_AUTO;
}
void sample_dump(struct sample *s)
{
debug(5, "Sample: sequence=%zu, length=%d, capacity=%d, flags=%#x, signals=%p, #signals=%zu, "
"refcnt=%d, pool_off=%zd",
s->sequence, s->length, s->capacity, s->flags, s->signals,
s->signals ? vlist_length(s->signals) : 0, atomic_load(&s->refcnt), s->pool_off);
if (s->flags & SAMPLE_HAS_TS_ORIGIN)
debug(5, " ts.origin=%ld.%ld", s->ts.origin.tv_sec, s->ts.origin.tv_nsec);
if (s->flags & SAMPLE_HAS_TS_RECEIVED)
debug(5, " ts.received=%ld.%ld", s->ts.received.tv_sec, s->ts.received.tv_nsec);
if (s->signals)
signal_list_dump(s->signals, s->data, s->length);
}

View file

@ -223,7 +223,7 @@ int signal_parse(struct signal *s, json_t *cfg)
/* Signal list */
int signal_vlist_parse(struct vlist *list, json_t *cfg)
int signal_list_parse(struct vlist *list, json_t *cfg)
{
int ret;
struct signal *s;
@ -252,7 +252,7 @@ int signal_vlist_parse(struct vlist *list, json_t *cfg)
return 0;
}
int signal_vlist_generate(struct vlist *list, unsigned len, enum signal_type fmt)
int signal_list_generate(struct vlist *list, unsigned len, enum signal_type fmt)
{
for (int i = 0; i < len; i++) {
char name[32];
@ -268,17 +268,33 @@ int signal_vlist_generate(struct vlist *list, unsigned len, enum signal_type fmt
return 0;
}
void signal_vlist_dump(const struct vlist *list)
void signal_list_dump(const struct vlist *list, const union signal_data *data, int len)
{
info ("Signals:");
debug(5, " Signals:");
for (int i = 0; i < vlist_length(list); i++) {
struct signal *sig = vlist_at(list, i);
char *buf = strf(" %d:", i);
if (sig->name)
strcatf(&buf, " %s", sig->name);
if (sig->unit)
info(" %d: %s [%s] = %s", i, sig->name, sig->unit, signal_type_to_str(sig->type));
else
info(" %d: %s = %s", i, sig->name, signal_type_to_str(sig->type));
strcatf(&buf, " [%s]", sig->unit);
strcatf(&buf, "(%s)", signal_type_to_str(sig->type));
if (data && i < len) {
char val[32];
signal_data_snprint(&data[i], sig, val, sizeof(val));
strcatf(&buf, " = %s", val);
}
debug(5, buf);
free(buf);
}
}

View file

@ -231,7 +231,7 @@ ParameterizedTest(struct param *p, io, lowlevel, .init = init_memory)
cr_assert_eq(ret, 0);
vlist_init(&signals);
signal_vlist_generate(&signals, NUM_VALUES, SIGNAL_TYPE_FLOAT);
signal_list_generate(&signals, NUM_VALUES, SIGNAL_TYPE_FLOAT);
ret = sample_alloc_many(&pool, smps, p->cnt);
cr_assert_eq(ret, p->cnt);
@ -307,7 +307,7 @@ ParameterizedTest(struct param *p, io, highlevel, .init = init_memory)
cr_assert_eq(ret, p->cnt);
vlist_init(&signals);
signal_vlist_generate(&signals, NUM_VALUES, SIGNAL_TYPE_FLOAT);
signal_list_generate(&signals, NUM_VALUES, SIGNAL_TYPE_FLOAT);
fill_sample_data(&signals, smps, p->cnt);