diff --git a/include/villas/signal.h b/include/villas/signal.h index e638afd2d..1701a9b96 100644 --- a/include/villas/signal.h +++ b/include/villas/signal.h @@ -81,11 +81,5 @@ 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); -enum SignalType signal_type_from_str(const char *str); - -enum SignalType signal_type_from_fmtstr(char c); - -const char * signal_type_to_str(enum SignalType fmt); - -enum SignalType signal_type_detect(const char *val); - +/** Produce JSON representation of signal. */ +json_t * signal_to_json(struct signal *s); diff --git a/include/villas/signal_type.h b/include/villas/signal_type.h index 6b7d733a4..909399c04 100644 --- a/include/villas/signal_type.h +++ b/include/villas/signal_type.h @@ -30,3 +30,11 @@ enum class SignalType { BOOLEAN = 3, /**< See signal_data::b */ COMPLEX = 4 /**< See signal_data::z */ }; + +enum SignalType signal_type_from_str(const char *str); + +enum SignalType signal_type_from_fmtstr(char c); + +const char * signal_type_to_str(enum SignalType fmt); + +enum SignalType signal_type_detect(const char *val); diff --git a/lib/signal.cpp b/lib/signal.cpp index 743f8b820..b00ab1e03 100644 --- a/lib/signal.cpp +++ b/lib/signal.cpp @@ -25,6 +25,9 @@ #include #include +#include +#include + using namespace villas; using namespace villas::utils; @@ -216,3 +219,20 @@ int signal_parse(struct signal *s, json_t *cfg) return 0; } + +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) + ); + + if (s->name) + json_object_set(json_sig, "name", json_string(s->name)); + + if (s->unit) + json_object_set(json_sig, "unit", json_string(s->unit)); + + return json_sig; +}