From: Aurelien Jacobs Date: Sun, 21 Aug 2016 14:58:10 +0000 (+0200) Subject: kern-scale: properly set encoding digits X-Git-Tag: libsigrok-0.5.0~253 X-Git-Url: https://sigrok.org/gitaction?a=commitdiff_plain;h=0b8205504b4655f2a012a991afc61eefd45e70fb;p=libsigrok.git kern-scale: properly set encoding digits --- diff --git a/src/scale/kern.c b/src/scale/kern.c index 55e02ad4..bd819197 100644 --- a/src/scale/kern.c +++ b/src/scale/kern.c @@ -44,9 +44,9 @@ static int get_buflen(const uint8_t *buf) } static int parse_value(const uint8_t *buf, float *result, - const struct kern_info *info) + int *digits, const struct kern_info *info) { - char *strval; + char *strval, *ptrdot; float floatval; int s2, len; @@ -62,6 +62,9 @@ static int parse_value(const uint8_t *buf, float *result, strval = g_strndup((const char *)buf, len); floatval = g_ascii_strtod(strval, NULL); + ptrdot = strchr(strval, '.'); + if (ptrdot) + *digits = len - (ptrdot - strval + 1); g_free(strval); *result = floatval; @@ -199,18 +202,21 @@ SR_PRIV gboolean sr_kern_packet_valid(const uint8_t *buf) SR_PRIV int sr_kern_parse(const uint8_t *buf, float *floatval, struct sr_datafeed_analog *analog, void *info) { - int ret; + int ret, digits = 0; struct kern_info *info_local; info_local = (struct kern_info *)info; info_local->buflen = get_buflen(buf); - if ((ret = parse_value(buf, floatval, info_local)) != SR_OK) { + if ((ret = parse_value(buf, floatval, &digits, info_local)) != SR_OK) { sr_dbg("Error parsing value: %d.", ret); return ret; } + analog->encoding->digits = digits; + analog->spec->spec_digits = digits; + parse_flags(buf, info_local); handle_flags(analog, floatval, info_local);