From: Martin Ling Date: Thu, 20 Sep 2018 01:40:06 +0000 (+0100) Subject: analog output: convert binary to digital digits of precision. X-Git-Url: https://sigrok.org/gitaction?a=commitdiff_plain;h=cd1e7fd20dde8475ab766425c352f8ad4247747c;p=libsigrok.git analog output: convert binary to digital digits of precision. This fixes parts of bug #950. --- diff --git a/src/output/analog.c b/src/output/analog.c index 94175369..6632cda6 100644 --- a/src/output/analog.c +++ b/src/output/analog.c @@ -27,6 +27,8 @@ #define LOG_PREFIX "output/analog" +#define BIN_TO_DEC_DIGITS (log(2) / log(10)) + struct context { int num_enabled_channels; GPtrArray *channellist; @@ -130,15 +132,12 @@ static int receive(const struct sr_output *o, const struct sr_datafeed_packet *p if ((ret = sr_analog_to_float(analog, fdata)) != SR_OK) return ret; *out = g_string_sized_new(512); - if (analog->encoding->is_digits_decimal) { - if (ctx->digits == DIGITS_ALL) - digits = analog->encoding->digits; - else - digits = analog->spec->spec_digits; - } else { - /* TODO we don't know how to print by number of bits yet. */ - digits = 6; - } + if (ctx->digits == DIGITS_ALL) + digits = analog->encoding->digits; + else + digits = analog->spec->spec_digits; + if (!analog->encoding->is_digits_decimal) + digits = copysign(ceil(abs(digits) * BIN_TO_DEC_DIGITS), digits); gboolean si_friendly = sr_analog_si_prefix_friendly(analog->meaning->unit); sr_analog_unit_to_string(analog, &suffix); for (i = 0; i < analog->num_samples; i++) {