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

signal_data: only use type not complete signal struct

This commit is contained in:
Steffen Vogel 2021-02-19 06:37:21 +01:00
parent dd7fcb4c89
commit 937d4f0aae
11 changed files with 50 additions and 52 deletions

View file

@ -60,15 +60,15 @@ union signal_data {
};
/** Convert signal data from one description/format to another. */
void signal_data_cast(union signal_data *data, const struct signal *from, const struct signal *to);
void signal_data_cast(union signal_data *data, enum SignalType from, enum SignalType to);
/** Print value of a signal to a character buffer. */
int signal_data_print_str(const union signal_data *data, const struct signal *sig, char *buf, size_t len);
int signal_data_print_str(const union signal_data *data, enum SignalType type, char *buf, size_t len);
int signal_data_parse_str(union signal_data *data, const struct signal *sig, const char *ptr, char **end);
int signal_data_parse_str(union signal_data *data, enum SignalType type, const char *ptr, char **end);
int signal_data_parse_json(union signal_data *data, const struct signal *sig, json_t *cfg);
int signal_data_parse_json(union signal_data *data, enum SignalType type, json_t *cfg);
json_t * signal_data_to_json(union signal_data *data, const struct signal *sig);
json_t * signal_data_to_json(union signal_data *data, enum SignalType type);
void signal_data_set(union signal_data *data, const struct signal *sig, double val);
void signal_data_set(union signal_data *data, enum SignalType type, double val);

View file

@ -60,7 +60,7 @@ static size_t csv_sprint_single(struct io *io, char *buf, size_t len, const stru
break;
off += snprintf(buf + off, len - off, "%c", io->separator);
off += signal_data_print_str(&smp->data[i], sig, buf + off, len - off);
off += signal_data_print_str(&smp->data[i], sig->type, buf + off, len - off);
}
off += snprintf(buf + off, len - off, "%c", io->delimiter);
@ -118,7 +118,7 @@ static size_t csv_sscan_single(struct io *io, const char *buf, size_t len, struc
if (!sig)
goto out;
ret = signal_data_parse_str(&smp->data[i], sig, ptr, &end);
ret = signal_data_parse_str(&smp->data[i], sig->type, ptr, &end);
if (ret || end == ptr) /* There are no valid values anymore. */
goto out;
}

View file

@ -127,7 +127,7 @@ static int json_pack_sample(struct io *io, json_t **j, struct sample *smp)
if (!sig)
return -1;
json_t *json_value = signal_data_to_json(&smp->data[i], sig);
json_t *json_value = signal_data_to_json(&smp->data[i], sig->type);
json_array_append(json_data, json_value);
}
@ -209,7 +209,7 @@ static int json_unpack_sample(struct io *io, json_t *json_smp, struct sample *sm
return -2;
}
ret = signal_data_parse_json(&smp->data[i], sig, json_value);
ret = signal_data_parse_json(&smp->data[i], sig->type, json_value);
if (ret)
return -3;

View file

@ -45,7 +45,7 @@ int value_sprint(struct io *io, char *buf, size_t len, size_t *wbytes, struct sa
if (!sig)
return -1;
off += signal_data_print_str(&smp->data[i], sig, buf, len);
off += signal_data_print_str(&smp->data[i], sig->type, buf, len);
off += snprintf(buf + off, len - off, "\n");
}
@ -72,7 +72,7 @@ int value_sscan(struct io *io, const char *buf, size_t len, size_t *rbytes, stru
if (!sig)
return -1;
ret = signal_data_parse_str(&smp->data[i], sig, ptr, &end);
ret = signal_data_parse_str(&smp->data[i], sig->type, ptr, &end);
if (ret || end == ptr) /* There are no valid values anymore. */
goto out;

View file

@ -62,7 +62,7 @@ static size_t villas_human_sprint_single(struct io *io, char *buf, size_t len, c
break;
off += snprintf(buf + off, len - off, "%c", io->separator);
off += signal_data_print_str(&smp->data[i], sig, buf + off, len - off);
off += signal_data_print_str(&smp->data[i], sig->type, buf + off, len - off);
}
}
@ -140,7 +140,7 @@ static size_t villas_human_sscan_single(struct io *io, const char *buf, size_t l
if (!sig)
goto out;
ret = signal_data_parse_str(&smp->data[i], sig, ptr, &end);
ret = signal_data_parse_str(&smp->data[i], sig->type, ptr, &end);
if (ret || end == ptr) /* There are no valid values anymore. */
goto out;
}

View file

@ -159,7 +159,7 @@ public:
struct signal *orig_sig = (struct signal *) vlist_at(smp->signals, signal_index);
struct signal *new_sig = (struct signal *) vlist_at(&signals, signal_index);
signal_data_cast(&smp->data[signal_index], orig_sig, new_sig);
signal_data_cast(&smp->data[signal_index], orig_sig->type, new_sig->type);
return Reason::OK;
}

View file

@ -196,7 +196,7 @@ public:
json_array_append_new(json_value, json_pack("[ f, o, i ]",
time_to_double(smp->ts.origin),
signal_data_to_json(sd, sig),
signal_data_to_json(sd, sig->type),
smp->sequence
));
}
@ -206,7 +206,7 @@ public:
union signal_data *sd = &smp->data[index];
struct signal *sig = (struct signal *) vlist_at_safe(smp->signals, index);
json_t *json_value = signal_data_to_json(sd, sig);
json_t *json_value = signal_data_to_json(sd, sig->type);
#endif
json_object_set(json_attribute, "value", json_value);
@ -361,7 +361,7 @@ static int ngsi_parse_entity(struct vnode *n, json_t *json_entity, struct sample
if (value[0] == '\0') /* No data on Orion CB? -> Use init value */
*sd = sig->init;
else {
signal_data_parse_str(sd, sig, value, &end);
signal_data_parse_str(sd, sig->type, value, &end);
if (value == end)
return -10;
}
@ -383,7 +383,7 @@ static int ngsi_parse_entity(struct vnode *n, json_t *json_entity, struct sample
if (value[0] == '\0') /* No data on Orion CB? -> Use init value */
*sd = sig->init;
else {
signal_data_parse_str(sd, sig, value, &end);
signal_data_parse_str(sd, sig->type, value, &end);
if (value == end)
return -10;
}

View file

@ -219,12 +219,12 @@ int signal_parse(struct signal *s, json_t *cfg)
}
if (json_init) {
ret = signal_data_parse_json(&s->init, s, json_init);
ret = signal_data_parse_json(&s->init, s->type, json_init);
if (ret)
return ret;
}
else
signal_data_set(&s->init, s, 0);
signal_data_set(&s->init, s->type, 0);
return 0;
}
@ -234,7 +234,7 @@ json_t * signal_to_json(struct signal *s)
json_t *json_sig = json_pack("{ s: s, s: b, s: o }",
"type", signal_type_to_str(s->type),
"enabled", s->enabled,
"init", signal_data_to_json(&s->init, s)
"init", signal_data_to_json(&s->init, s->type)
);
if (s->name)

View file

@ -23,13 +23,12 @@
#include <cstring>
#include <cinttypes>
#include <villas/signal.h>
#include <villas/signal_type.h>
#include <villas/signal_data.h>
void signal_data_set(union signal_data *data, const struct signal *sig, double val)
void signal_data_set(union signal_data *data, enum SignalType type, double val)
{
switch (sig->type) {
switch (type) {
case SignalType::BOOLEAN:
data->b = val;
break;
@ -52,14 +51,14 @@ void signal_data_set(union signal_data *data, const struct signal *sig, double v
}
}
void signal_data_cast(union signal_data *data, const struct signal *from, const struct signal *to)
void signal_data_cast(union signal_data *data, enum SignalType from, enum SignalType to)
{
if (from->type == to->type) /* Nothing to do */
if (from == to) /* Nothing to do */
return;
switch (to->type) {
switch (to) {
case SignalType::BOOLEAN:
switch(from->type) {
switch(from) {
case SignalType::BOOLEAN:
break;
@ -80,7 +79,7 @@ void signal_data_cast(union signal_data *data, const struct signal *from, const
break;
case SignalType::INTEGER:
switch(from->type) {
switch(from) {
case SignalType::BOOLEAN:
data->i = data->b;
break;
@ -101,7 +100,7 @@ void signal_data_cast(union signal_data *data, const struct signal *from, const
break;
case SignalType::FLOAT:
switch(from->type) {
switch(from) {
case SignalType::BOOLEAN:
data->f = data->b;
break;
@ -122,7 +121,7 @@ void signal_data_cast(union signal_data *data, const struct signal *from, const
break;
case SignalType::COMPLEX:
switch(from->type) {
switch(from) {
case SignalType::BOOLEAN:
data->z = data->b;
break;
@ -146,9 +145,9 @@ void signal_data_cast(union signal_data *data, const struct signal *from, const
}
}
int signal_data_parse_str(union signal_data *data, const struct signal *sig, const char *ptr, char **end)
int signal_data_parse_str(union signal_data *data, enum SignalType type, const char *ptr, char **end)
{
switch (sig->type) {
switch (type) {
case SignalType::FLOAT:
data->f = strtod(ptr, end);
break;
@ -198,11 +197,11 @@ int signal_data_parse_str(union signal_data *data, const struct signal *sig, con
return 0;
}
int signal_data_parse_json(union signal_data *data, const struct signal *sig, json_t *cfg)
int signal_data_parse_json(union signal_data *data, enum SignalType type, json_t *cfg)
{
int ret;
switch (sig->type) {
switch (type) {
case SignalType::FLOAT:
data->f = json_real_value(cfg);
break;
@ -237,9 +236,9 @@ int signal_data_parse_json(union signal_data *data, const struct signal *sig, js
return 0;
}
json_t * signal_data_to_json(union signal_data *data, const struct signal *sig)
json_t * signal_data_to_json(union signal_data *data, enum SignalType type)
{
switch (sig->type) {
switch (type) {
case SignalType::INTEGER:
return json_integer(data->i);
@ -262,9 +261,9 @@ json_t * signal_data_to_json(union signal_data *data, const struct signal *sig)
return nullptr;
}
int signal_data_print_str(const union signal_data *data, const struct signal *sig, char *buf, size_t len)
int signal_data_print_str(const union signal_data *data, enum SignalType type, char *buf, size_t len)
{
switch (sig->type) {
switch (type) {
case SignalType::FLOAT:
return snprintf(buf, len, "%.6f", data->f);

View file

@ -159,7 +159,7 @@ void signal_list_dump(const struct vlist *list, const union signal_data *data, u
if (data && i < len) {
char val[32];
signal_data_print_str(&data[i], sig, val, sizeof(val));
signal_data_print_str(&data[i], sig->type, val, sizeof(val));
strcatf(&buf, " = %s", val);
}
@ -204,7 +204,7 @@ json_t * signal_list_to_json(struct vlist *list)
json_object_set_new(json_signal, "unit", json_string(sig->unit));
if (!sig->init.is_nan())
json_object_set_new(json_signal, "init", signal_data_to_json(&sig->init, sig));
json_object_set_new(json_signal, "init", signal_data_to_json(&sig->init, sig->type));
json_array_append_new(json_signals, json_signal);
}

View file

@ -27,18 +27,17 @@
extern void init_memory();
// cppcheck-suppress unknownMacro
Test(signal, parse, .init = init_memory) {
Test(signal_data, parse, .init = init_memory) {
int ret;
struct signal sig;
enum SignalType type;
union signal_data sd;
const char *str;
char *end;
str = "1";
sig.type = SignalType::INTEGER;
type = SignalType::INTEGER;
ret = signal_data_parse_str(&sd, &sig, str, &end);
ret = signal_data_parse_str(&sd, type, str, &end);
cr_assert_eq(ret, 0);
cr_assert_eq(end, str + strlen(str));
cr_assert_eq(sd.i, 1);
@ -46,7 +45,7 @@ Test(signal, parse, .init = init_memory) {
str = "1.2";
sig.type = SignalType::FLOAT;
ret = signal_data_parse_str(&sd, &sig, str, &end);
ret = signal_data_parse_str(&sd, type, str, &end);
cr_assert_eq(ret, 0);
cr_assert_eq(end, str + strlen(str));
cr_assert_float_eq(sd.f, 1.2, 1e-6);
@ -54,7 +53,7 @@ Test(signal, parse, .init = init_memory) {
str = "1";
sig.type = SignalType::BOOLEAN;
ret = signal_data_parse_str(&sd, &sig, str, &end);
ret = signal_data_parse_str(&sd, type, str, &end);
cr_assert_eq(ret, 0);
cr_assert_eq(end, str + strlen(str));
cr_assert_eq(sd.b, 1);
@ -62,7 +61,7 @@ Test(signal, parse, .init = init_memory) {
str = "1";
sig.type = SignalType::COMPLEX;
ret = signal_data_parse_str(&sd, &sig, str, &end);
ret = signal_data_parse_str(&sd, type, str, &end);
cr_assert_eq(ret, 0);
cr_assert_eq(end, str + strlen(str));
cr_assert_float_eq(std::real(sd.z), 1, 1e-6);
@ -71,7 +70,7 @@ Test(signal, parse, .init = init_memory) {
str = "-1-3i";
sig.type = SignalType::COMPLEX;
ret = signal_data_parse_str(&sd, &sig, str, &end);
ret = signal_data_parse_str(&sd, type, str, &end);
cr_assert_eq(ret, 0);
cr_assert_eq(end, str + strlen(str));
cr_assert_float_eq(std::real(sd.z), -1, 1e-6);
@ -80,7 +79,7 @@ Test(signal, parse, .init = init_memory) {
str = "-3i";
sig.type = SignalType::COMPLEX;
ret = signal_data_parse_str(&sd, &sig, str, &end);
ret = signal_data_parse_str(&sd, type, str, &end);
cr_assert_eq(ret, 0);
cr_assert_eq(end, str + strlen(str));
cr_assert_float_eq(std::real(sd.z), 0, 1e-6);