X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fdmm%2Fasycii.c;h=f32cbfef36250a7dd9fc315503588e8497ec265f;hb=6f7e15090e82333403751c646cdd117ea36c546b;hp=329f37e9e2964357704aeafa394e68ea671dfb88;hpb=43528280d9727872ede857bb3b6772947d9fb056;p=libsigrok.git diff --git a/src/dmm/asycii.c b/src/dmm/asycii.c index 329f37e9..f32cbfef 100644 --- a/src/dmm/asycii.c +++ b/src/dmm/asycii.c @@ -60,7 +60,8 @@ static int parse_value(const char *buf, struct asycii_info *info, { char valstr[7 + 1]; const char *valp; - int i, cnt, is_ol, dot_pos; + int i, cnt, is_ol; + const char *dot_pos; /* * Strip all spaces from bytes 0-6. By copying all @@ -102,12 +103,13 @@ static int parse_value(const char *buf, struct asycii_info *info, sr_spew("%s(), cannot convert number", __func__); return SR_ERR_DATA; } - dot_pos = strcspn(valstr, "."); - if (dot_pos < cnt) - *exponent = -(cnt - dot_pos - 1); + dot_pos = g_strstr_len(valstr, -1, "."); + if (dot_pos) + *exponent = -(valstr + strlen(valstr) - dot_pos - 1); else *exponent = 0; - sr_spew("%s(), display value is %f", __func__, *result); + sr_spew("%s(), display value is %f, exponent %d", + __func__, *result, *exponent); return SR_OK; } @@ -377,7 +379,7 @@ static void handle_flags(struct sr_datafeed_analog *analog, float *floatval, if (info->is_dc) analog->meaning->mqflags |= SR_MQFLAG_DC; if (info->is_diode) - analog->meaning->mqflags |= SR_MQFLAG_DIODE; + analog->meaning->mqflags |= SR_MQFLAG_DIODE | SR_MQFLAG_DC; if (info->is_peak_max) analog->meaning->mqflags |= SR_MQFLAG_MAX; if (info->is_peak_min) @@ -517,7 +519,7 @@ SR_PRIV int sr_asycii_parse(const uint8_t *buf, float *floatval, int ret, exponent; struct asycii_info *info_local; - info_local = (struct asycii_info *)info; + info_local = info; /* Don't print byte 15. That one contains the carriage return. */ sr_dbg("DMM packet: \"%.15s\"", buf);