X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fdmm%2Fdtm0660.c;h=42012399e22195a2b3ee10e1f5dcfe4f7cfc642f;hb=HEAD;hp=66e894afc516f40f7288a548b0613dc03743d9fa;hpb=427015d7c1cf2b01b05084df5904ad72c636456e;p=libsigrok.git diff --git a/src/dmm/dtm0660.c b/src/dmm/dtm0660.c index 66e894af..42012399 100644 --- a/src/dmm/dtm0660.c +++ b/src/dmm/dtm0660.c @@ -16,8 +16,7 @@ * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * along with this program; if not, see . */ /* @@ -255,6 +254,8 @@ static void parse_flags(const uint8_t *buf, struct dtm0660_info *info) static void handle_flags(struct sr_datafeed_analog *analog, float *floatval, int *exponent, const struct dtm0660_info *info) { + int initial_exponent = *exponent; + /* Factors */ if (info->is_nano) *exponent -= 9; @@ -266,7 +267,7 @@ static void handle_flags(struct sr_datafeed_analog *analog, float *floatval, *exponent += 3; if (info->is_mega) *exponent += 6; - *floatval *= powf(10, *exponent); + *floatval *= powf(10, (*exponent - initial_exponent)); /* Measurement modes */ if (info->is_volt) { @@ -319,7 +320,7 @@ static void handle_flags(struct sr_datafeed_analog *analog, float *floatval, if (info->is_auto) analog->meaning->mqflags |= SR_MQFLAG_AUTORANGE; if (info->is_diode) - analog->meaning->mqflags |= SR_MQFLAG_DIODE; + analog->meaning->mqflags |= SR_MQFLAG_DIODE | SR_MQFLAG_DC; if (info->is_hold) analog->meaning->mqflags |= SR_MQFLAG_HOLD; if (info->is_rel) @@ -374,7 +375,7 @@ SR_PRIV int sr_dtm0660_parse(const uint8_t *buf, float *floatval, int ret, exponent = 0; struct dtm0660_info *info_local; - info_local = (struct dtm0660_info *)info; + info_local = info; if ((ret = parse_value(buf, floatval, &exponent)) != SR_OK) { sr_dbg("Error parsing value: %d.", ret); @@ -384,7 +385,7 @@ SR_PRIV int sr_dtm0660_parse(const uint8_t *buf, float *floatval, parse_flags(buf, info_local); handle_flags(analog, floatval, &exponent, info_local); - analog->encoding->digits = -exponent; + analog->encoding->digits = -exponent; analog->spec->spec_digits = -exponent; return SR_OK;