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:
parent
c23d1979df
commit
357df1600f
7 changed files with 52 additions and 16 deletions
|
@ -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);
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
2
lib/io.c
2
lib/io.c
|
@ -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;
|
||||
|
||||
|
|
|
@ -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 {
|
||||
|
|
17
lib/sample.c
17
lib/sample.c
|
@ -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);
|
||||
}
|
||||
|
|
30
lib/signal.c
30
lib/signal.c
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue