analog output: convert binary to digital digits of precision.

This fixes parts of bug #950.
This commit is contained in:
Martin Ling 2018-09-20 02:40:06 +01:00 committed by Uwe Hermann
parent 5e5fde6e2c
commit cd1e7fd20d
1 changed files with 8 additions and 9 deletions

View File

@ -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++) {