]> sigrok.org Git - libsigrok.git/commitdiff
analog: add support for negative number of digits
authorAurelien Jacobs <redacted>
Mon, 20 Jun 2016 20:58:12 +0000 (22:58 +0200)
committerAurelien Jacobs <redacted>
Sun, 26 Jun 2016 18:32:56 +0000 (20:32 +0200)
When a meter display 105.2 kΩ, libsigrok will return 105200 Ω
but it is really valuable to know that the last 2 digits are not
significant, so encoding.digits should be set to -2.
This would allow a sigrok client to display 105200 as 105.2 k
instead of 105.200 k.

include/libsigrok/libsigrok.h
src/output/analog.c

index 511ab28c0f074ce25afb5fe121ed038dda9298e6..7d9260edabf714cc404b529fde981ac4c738afd1 100644 (file)
@@ -508,7 +508,7 @@ struct sr_analog_encoding {
        gboolean is_signed;
        gboolean is_float;
        gboolean is_bigendian;
-       uint8_t digits;
+       int8_t digits;
        gboolean is_digits_decimal;
        struct sr_rational scale;
        struct sr_rational offset;
@@ -522,7 +522,7 @@ struct sr_analog_meaning {
 };
 
 struct sr_analog_spec {
-       uint8_t spec_digits;
+       int8_t spec_digits;
 };
 
 /** Generic option struct used by various subsystems. */
index 99daf3ac8a56f0ab1f03f57ce63c60664d733d91..5f77a59c2c3393c1160ea610a116e893f50cf512 100644 (file)
@@ -118,7 +118,7 @@ static int receive(const struct sr_output *o, const struct sr_datafeed_packet *p
                        for (l = analog->meaning->channels, c = 0; l; l = l->next, c++) {
                                ch = l->data;
                                g_string_append_printf(*out, "%s: ", ch->name);
-                               number = g_strdup_printf("%.*f", digits,
+                               number = g_strdup_printf("%.*f", MAX(digits, 0),
                                                fdata[i * num_channels + c]);
                                g_string_append(*out, number);
                                g_free(number);