X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fscale%2Fkern.c;fp=src%2Fscale%2Fkern.c;h=bd819197e73aff6f42aafd2b221c64d6eeb64b85;hb=0b8205504b4655f2a012a991afc61eefd45e70fb;hp=55e02ad4419aadfdff29bfe168b5178a3047930f;hpb=3be044aa9012a863d50dcca69c49ccd7d8209c60;p=libsigrok.git 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);