X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fdmm%2Fm2110.c;h=4f3af6940c062e2a9a28aa12e09a14f2fab9f613;hb=8cd15dd4ce2fdbefbcc6e64632c8006e5404f253;hp=5863cef1e706e31d4923a51d02754f65c3c1cc32;hpb=155b680da482cea2381becb73c51cfb838bff31e;p=libsigrok.git diff --git a/src/dmm/m2110.c b/src/dmm/m2110.c index 5863cef1..4f3af694 100644 --- a/src/dmm/m2110.c +++ b/src/dmm/m2110.c @@ -25,10 +25,11 @@ * Most probably the simplest multimeter protocol ever ;-) . */ +#include #include #include #include -#include "libsigrok.h" +#include #include "libsigrok-internal.h" #define LOG_PREFIX "m2110" @@ -43,7 +44,7 @@ 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; @@ -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 (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; }