X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Foutput%2Fanalog.c;h=94175369e1a15c43e4d0a48f7a3a6df9b4fb6b4e;hb=0f523f2b45e84114add85cec5a97aed3f85f95e6;hp=cd1764b842fd7c23d0e8fd2a91e3aaf762a3160c;hpb=6ca578feb8a0b5b0cc689c97dd1307935bf0a817;p=libsigrok.git diff --git a/src/output/analog.c b/src/output/analog.c index cd1764b8..94175369 100644 --- a/src/output/analog.c +++ b/src/output/analog.c @@ -75,6 +75,9 @@ static int receive(const struct sr_output *o, const struct sr_datafeed_packet *p { struct context *ctx; const struct sr_datafeed_analog *analog; + const struct sr_datafeed_meta *meta; + const struct sr_config *src; + const struct sr_key_info *srci; struct sr_channel *ch; GSList *l; float *fdata; @@ -94,6 +97,29 @@ static int receive(const struct sr_output *o, const struct sr_datafeed_packet *p case SR_DF_FRAME_END: *out = g_string_new("FRAME-END\n"); break; + case SR_DF_META: + meta = packet->payload; + for (l = meta->config; l; l = l->next) { + src = l->data; + if (!(srci = sr_key_info_get(SR_KEY_CONFIG, src->key))) + return SR_ERR; + *out = g_string_sized_new(512); + g_string_append(*out, "META "); + g_string_append_printf(*out, "%s: ", srci->id); + if (srci->datatype == SR_T_BOOL) { + g_string_append_printf(*out, "%u", + g_variant_get_boolean(src->data)); + } else if (srci->datatype == SR_T_FLOAT) { + g_string_append_printf(*out, "%f", + g_variant_get_double(src->data)); + } else if (srci->datatype == SR_T_UINT64) { + g_string_append_printf(*out, "%" + G_GUINT64_FORMAT, + g_variant_get_uint64(src->data)); + } + g_string_append(*out, "\n"); + } + break; case SR_DF_ANALOG: analog = packet->payload; num_channels = g_slist_length(analog->meaning->channels); @@ -179,7 +205,7 @@ static int cleanup(struct sr_output *o) SR_PRIV struct sr_output_module output_analog = { .id = "analog", .name = "Analog", - .desc = "Analog data and types", + .desc = "ASCII analog data values and units", .exts = NULL, .flags = 0, .options = get_options,