X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Foutput%2Fanalog.c;h=d10f2e94c2985f49372f271353c854ea1e784bb3;hb=34eaf4bcbbff5e2165f38afc9123c5ddd9a40079;hp=16ae0bd32f620453ce1bd85a397fb13551bea1be;hpb=820c48f8c294d29660bfb2d081c575e138568909;p=libsigrok.git diff --git a/src/output/analog.c b/src/output/analog.c index 16ae0bd3..d10f2e94 100644 --- a/src/output/analog.c +++ b/src/output/analog.c @@ -21,7 +21,7 @@ #include #include #include -#include "libsigrok.h" +#include #include "libsigrok-internal.h" #define LOG_PREFIX "output/analog" @@ -47,7 +47,7 @@ static int init(struct sr_output *o, GHashTable *options) if (!o || !o->sdi) return SR_ERR_ARG; - o->priv = ctx = g_try_malloc0(sizeof(struct context)); + o->priv = ctx = g_malloc0(sizeof(struct context)); s = g_variant_get_string(g_hash_table_lookup(options, "digits"), NULL); if (!strcmp(s, "all")) ctx->digits = DIGITS_ALL; @@ -173,7 +173,7 @@ static void fancyprint(int unit, int mqflags, float value, GString *out) g_string_append(out, " %oA"); break; case SR_UNIT_CONCENTRATION: - g_string_append_printf(out, "%f ppm", value * 1000000); + g_string_append_printf(out, "%f ppm", value * (1000 * 1000)); break; case SR_UNIT_REVOLUTIONS_PER_MINUTE: si_printf(value, out, "RPM"); @@ -200,6 +200,39 @@ static void fancyprint(int unit, int mqflags, float value, GString *out) si_printf(value, out, ""); g_string_append_unichar(out, 0x00b0); break; + case SR_UNIT_GRAM: + si_printf(value, out, "g"); + break; + case SR_UNIT_CARAT: + si_printf(value, out, "ct"); + break; + case SR_UNIT_OUNCE: + si_printf(value, out, "oz"); + break; + case SR_UNIT_TROY_OUNCE: + si_printf(value, out, "oz t"); + break; + case SR_UNIT_POUND: + si_printf(value, out, "lb"); + break; + case SR_UNIT_PENNYWEIGHT: + si_printf(value, out, "dwt"); + break; + case SR_UNIT_GRAIN: + si_printf(value, out, "gr"); + break; + case SR_UNIT_TAEL: + si_printf(value, out, "tael"); + break; + case SR_UNIT_MOMME: + si_printf(value, out, "momme"); + break; + case SR_UNIT_TOLA: + si_printf(value, out, "tola"); + break; + case SR_UNIT_PIECE: + si_printf(value, out, "pcs"); + break; default: si_printf(value, out, ""); break; @@ -227,6 +260,8 @@ static void fancyprint(int unit, int mqflags, float value, GString *out) g_string_append_printf(out, " AVG"); if (mqflags & SR_MQFLAG_REFERENCE) g_string_append_printf(out, " REF"); + if (mqflags & SR_MQFLAG_UNSTABLE) + g_string_append_printf(out, " UNSTABLE"); g_string_append_c(out, '\n'); } @@ -241,7 +276,7 @@ static int receive(const struct sr_output *o, const struct sr_datafeed_packet *p float *fdata; unsigned int i; int num_channels, c, ret, si, digits; - char number[32], suffix[32]; + char *number, *suffix; *out = NULL; if (!o || !o->sdi) @@ -285,20 +320,22 @@ static int receive(const struct sr_output *o, const struct sr_datafeed_packet *p /* TODO we don't know how to print by number of bits yet. */ digits = 6; } - sr_analog_unit_to_string(analog2, suffix, sizeof(suffix)); + sr_analog_unit_to_string(analog2, &suffix); num_channels = g_slist_length(analog2->meaning->channels); for (i = 0; i < analog2->num_samples; i++) { for (l = analog2->meaning->channels, c = 0; l; l = l->next, c++) { ch = l->data; g_string_append_printf(*out, "%s: ", ch->name); sr_analog_float_to_string(fdata[i * num_channels + c], - digits, number, sizeof(number)); + digits, &number); g_string_append(*out, number); + g_free(number); g_string_append(*out, " "); g_string_append(*out, suffix); g_string_append(*out, "\n"); } } + g_free(suffix); break; } @@ -342,6 +379,8 @@ SR_PRIV struct sr_output_module output_analog = { .id = "analog", .name = "Analog", .desc = "Analog data and types", + .exts = NULL, + .flags = 0, .options = get_options, .init = init, .receive = receive,