]> sigrok.org Git - libsigrok.git/blobdiff - src/dmm/m2110.c
asyc-ii: Rephrase "exponent" logic when parsing packets
[libsigrok.git] / src / dmm / m2110.c
index 8f094a5c8144196e243214118d24f60f0ccad50f..fc09276561b6e60b134e2438b7c3a79f4605a40d 100644 (file)
@@ -25,6 +25,7 @@
  * Most probably the simplest multimeter protocol ever ;-) .
  */
 
+#include <config.h>
 #include <string.h>
 #include <math.h>
 #include <glib.h>
@@ -52,19 +53,27 @@ SR_PRIV gboolean sr_m2110_packet_valid(const uint8_t *buf)
 SR_PRIV int sr_m2110_parse(const uint8_t *buf, float *floatval,
                                struct sr_datafeed_analog *analog, void *info)
 {
+       int dot_pos, digits = 0;
        float val;
 
        (void)info;
 
        /* We don't know the unit, so that's the best we can do. */
-       analog->mq = SR_MQ_GAIN;
-       analog->unit = SR_UNIT_UNITLESS;
-       analog->mqflags = 0;
+       analog->meaning->mq = SR_MQ_GAIN;
+       analog->meaning->unit = SR_UNIT_UNITLESS;
+       analog->meaning->mqflags = 0;
 
        if (!strncmp((const char *)buf, "OVERRNG", 7))
                *floatval = INFINITY;
-       else if (sscanf((const char *)buf, "%f", &val) == 1)
+       else if (sscanf((const char *)buf, "%f", &val) == 1) {
                *floatval = val;
+               dot_pos = strcspn((const char *)buf, ".");
+               if (dot_pos < 7)
+                       digits = 6 - dot_pos;
+       }
+
+       analog->encoding->digits  = digits;
+       analog->spec->spec_digits = digits;
 
        return SR_OK;
 }