X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fdmm%2Fut372.c;h=ef0677bc5364e9060130dd1c41d2fb1f7b6d898c;hb=55ec0b673af83b70615482c0c5ce33b18ef02fa8;hp=d9c7720fd16bce17323271ef0c25554c7caa4131;hpb=6df8e239de62694b30a3bb061e421ea12363c185;p=libsigrok.git diff --git a/src/dmm/ut372.c b/src/dmm/ut372.c index d9c7720f..ef0677bc 100644 --- a/src/dmm/ut372.c +++ b/src/dmm/ut372.c @@ -22,10 +22,11 @@ * UNI-T UT372 protocol parser. */ +#include #include #include #include -#include "libsigrok.h" +#include #include "libsigrok-internal.h" #define LOG_PREFIX "ut372" @@ -89,8 +90,9 @@ SR_PRIV gboolean sr_ut372_packet_valid(const uint8_t *buf) SR_PRIV int sr_ut372_parse(const uint8_t *buf, float *floatval, struct sr_datafeed_analog *analog, void *info) { - unsigned int i, j, value, divisor; + unsigned int i, j, value; uint8_t segments, flags1, flags2; + int exponent; (void) info; @@ -98,27 +100,27 @@ SR_PRIV int sr_ut372_parse(const uint8_t *buf, float *floatval, flags2 = decode_pair(buf + 23); if (flags2 & FLAGS2_RPM_MASK) { - analog->mq = SR_MQ_FREQUENCY; - analog->unit = SR_UNIT_REVOLUTIONS_PER_MINUTE; + analog->meaning->mq = SR_MQ_FREQUENCY; + analog->meaning->unit = SR_UNIT_REVOLUTIONS_PER_MINUTE; } else if (flags2 & FLAGS2_COUNT_MASK) { - analog->mq = SR_MQ_COUNT; - analog->unit = SR_UNIT_UNITLESS; + analog->meaning->mq = SR_MQ_COUNT; + analog->meaning->unit = SR_UNIT_UNITLESS; } if (flags1 & FLAGS1_HOLD_MASK) - analog->mqflags |= SR_MQFLAG_HOLD; + analog->meaning->mqflags |= SR_MQFLAG_HOLD; if (flags2 & FLAGS2_MIN_MASK) - analog->mqflags |= SR_MQFLAG_MIN; + analog->meaning->mqflags |= SR_MQFLAG_MIN; if (flags2 & FLAGS2_MAX_MASK) - analog->mqflags |= SR_MQFLAG_MAX; + analog->meaning->mqflags |= SR_MQFLAG_MAX; if (flags2 & FLAGS2_AVG_MASK) - analog->mqflags |= SR_MQFLAG_AVG; + analog->meaning->mqflags |= SR_MQFLAG_AVG; value = 0; - divisor = 1; + exponent = 0; for (i = 0; i < 5; i++) { - segments = decode_pair(buf + 1 + 2*i); + segments = decode_pair(buf + 1 + (2 * i)); for (j = 0; j < ARRAY_SIZE(lookup); j++) { if (lookup[j] == (segments & ~DECIMAL_POINT_MASK)) { value += j * pow(10, i); @@ -126,10 +128,13 @@ SR_PRIV int sr_ut372_parse(const uint8_t *buf, float *floatval, } } if (segments & DECIMAL_POINT_MASK) - divisor = pow(10, i); + exponent = -i; } - *floatval = (float) value / divisor; + *floatval = (float) value * powf(10, exponent); + + analog->encoding->digits = -exponent; + analog->spec->spec_digits = -exponent; return SR_OK; }