]> sigrok.org Git - libsigrok.git/blobdiff - src/dmm/m2110.c
output/csv: use intermediate time_t var, silence compiler warning
[libsigrok.git] / src / dmm / m2110.c
index ea53fae5e738aee2d7a1dc32a0a546d2e08eeee0..4f3af6940c062e2a9a28aa12e09a14f2fab9f613 100644 (file)
@@ -44,28 +44,36 @@ SR_PRIV gboolean sr_m2110_packet_valid(const uint8_t *buf)
        if (!strncmp((const char *)buf, "OVERRNG", 7))
                return TRUE;
 
-       if (sscanf((const char *)buf, "%f", &val) == 1)
+       if (sr_atof_ascii((const char *)buf, &val) == SR_OK)
                return TRUE;
        else
                return FALSE;
 }
 
 SR_PRIV int sr_m2110_parse(const uint8_t *buf, float *floatval,
-                               struct sr_datafeed_analog_old *analog, void *info)
+                               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 (sr_atof_ascii((const char *)buf, &val) == SR_OK) {
                *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;
 }