From: Aurelien Jacobs Date: Wed, 22 Jun 2016 22:30:09 +0000 (+0200) Subject: agilent-dmm: replace divider by exponent to ease computing of significant digits X-Git-Tag: libsigrok-0.5.0~296 X-Git-Url: https://sigrok.org/gitweb/?a=commitdiff_plain;h=40df76aacbb9f98a6e9e36f53886e1af13f150b0;p=libsigrok.git agilent-dmm: replace divider by exponent to ease computing of significant digits --- diff --git a/src/hardware/agilent-dmm/agilent-dmm.h b/src/hardware/agilent-dmm/agilent-dmm.h index 52c991de..5ebee013 100644 --- a/src/hardware/agilent-dmm/agilent-dmm.h +++ b/src/hardware/agilent-dmm/agilent-dmm.h @@ -61,7 +61,7 @@ struct dev_context { int cur_mq; int cur_unit; int cur_mqflags; - int cur_divider; + int cur_exponent; int cur_acdc; int mode_tempaux; int mode_continuity; diff --git a/src/hardware/agilent-dmm/sched.c b/src/hardware/agilent-dmm/sched.c index 0dd1c71d..b48d474e 100644 --- a/src/hardware/agilent-dmm/sched.c +++ b/src/hardware/agilent-dmm/sched.c @@ -295,8 +295,8 @@ static int recv_fetc(const struct sr_dev_inst *sdi, GMatchInfo *match) return SR_ERR; } g_free(mstr); - if (devc->cur_divider > 0) - fvalue /= devc->cur_divider; + if (devc->cur_exponent != 0) + fvalue *= powf(10, devc->cur_exponent); } sr_analog_init(&analog, &encoding, &meaning, &spec, 0); @@ -332,7 +332,7 @@ static int recv_conf_u123x(const struct sr_dev_inst *sdi, GMatchInfo *match) devc->cur_mq = SR_MQ_VOLTAGE; devc->cur_unit = SR_UNIT_VOLT; devc->cur_mqflags = 0; - devc->cur_divider = 0; + devc->cur_exponent = 0; } else if (!strcmp(mstr, "MV")) { if (devc->mode_tempaux) { devc->cur_mq = SR_MQ_TEMPERATURE; @@ -340,28 +340,28 @@ static int recv_conf_u123x(const struct sr_dev_inst *sdi, GMatchInfo *match) * is used, so we'll just default to Celsius. */ devc->cur_unit = SR_UNIT_CELSIUS; devc->cur_mqflags = 0; - devc->cur_divider = 0; + devc->cur_exponent = 0; } else { devc->cur_mq = SR_MQ_VOLTAGE; devc->cur_unit = SR_UNIT_VOLT; devc->cur_mqflags = 0; - devc->cur_divider = 1000; + devc->cur_exponent = -3; } } else if (!strcmp(mstr, "A")) { devc->cur_mq = SR_MQ_CURRENT; devc->cur_unit = SR_UNIT_AMPERE; devc->cur_mqflags = 0; - devc->cur_divider = 0; + devc->cur_exponent = 0; } else if (!strcmp(mstr, "UA")) { devc->cur_mq = SR_MQ_CURRENT; devc->cur_unit = SR_UNIT_AMPERE; devc->cur_mqflags = 0; - devc->cur_divider = 1000000; + devc->cur_exponent = -6; } else if (!strcmp(mstr, "FREQ")) { devc->cur_mq = SR_MQ_FREQUENCY; devc->cur_unit = SR_UNIT_HERTZ; devc->cur_mqflags = 0; - devc->cur_divider = 0; + devc->cur_exponent = 0; } else if (!strcmp(mstr, "RES")) { if (devc->mode_continuity) { devc->cur_mq = SR_MQ_CONTINUITY; @@ -371,12 +371,12 @@ static int recv_conf_u123x(const struct sr_dev_inst *sdi, GMatchInfo *match) devc->cur_unit = SR_UNIT_OHM; } devc->cur_mqflags = 0; - devc->cur_divider = 0; + devc->cur_exponent = 0; } else if (!strcmp(mstr, "CAP")) { devc->cur_mq = SR_MQ_CAPACITANCE; devc->cur_unit = SR_UNIT_FARAD; devc->cur_mqflags = 0; - devc->cur_divider = 0; + devc->cur_exponent = 0; } else sr_dbg("Unknown first argument."); g_free(mstr); @@ -412,7 +412,7 @@ static int recv_conf_u124x_5x(const struct sr_dev_inst *sdi, GMatchInfo *match) devc->cur_mq = SR_MQ_VOLTAGE; devc->cur_unit = SR_UNIT_VOLT; devc->cur_mqflags = 0; - devc->cur_divider = 0; + devc->cur_exponent = 0; if (mstr[4] == ':') { if (!strncmp(mstr + 5, "AC", 2)) { devc->cur_mqflags |= SR_MQFLAG_AC | SR_MQFLAG_RMS; @@ -430,27 +430,27 @@ static int recv_conf_u124x_5x(const struct sr_dev_inst *sdi, GMatchInfo *match) devc->cur_mq = SR_MQ_CURRENT; devc->cur_unit = SR_UNIT_AMPERE; devc->cur_mqflags = 0; - devc->cur_divider = 0; + devc->cur_exponent = 0; } else if (!strcmp(mstr, "RES")) { devc->cur_mq = SR_MQ_RESISTANCE; devc->cur_unit = SR_UNIT_OHM; devc->cur_mqflags = 0; - devc->cur_divider = 0; + devc->cur_exponent = 0; } else if (!strcmp(mstr, "CAP")) { devc->cur_mq = SR_MQ_CAPACITANCE; devc->cur_unit = SR_UNIT_FARAD; devc->cur_mqflags = 0; - devc->cur_divider = 0; + devc->cur_exponent = 0; } else if (!strcmp(mstr, "FREQ")) { devc->cur_mq = SR_MQ_FREQUENCY; devc->cur_unit = SR_UNIT_HERTZ; devc->cur_mqflags = 0; - devc->cur_divider = 0; + devc->cur_exponent = 0; } else if (!strcmp(mstr, "CONT")) { devc->cur_mq = SR_MQ_CONTINUITY; devc->cur_unit = SR_UNIT_BOOLEAN; devc->cur_mqflags = 0; - devc->cur_divider = 0; + devc->cur_exponent = 0; } else if (!strncmp(mstr, "T1", 2) || !strncmp(mstr, "T2", 2)) { devc->cur_mq = SR_MQ_TEMPERATURE; m2 = g_match_info_fetch(match, 2); @@ -460,7 +460,7 @@ static int recv_conf_u124x_5x(const struct sr_dev_inst *sdi, GMatchInfo *match) devc->cur_unit = SR_UNIT_CELSIUS; g_free(m2); devc->cur_mqflags = 0; - devc->cur_divider = 0; + devc->cur_exponent = 0; } else if (!strcmp(mstr, "SCOU")) { /* * Switch counter, not supported. Not sure what values @@ -471,7 +471,7 @@ static int recv_conf_u124x_5x(const struct sr_dev_inst *sdi, GMatchInfo *match) devc->cur_mq = SR_MQ_CURRENT; devc->cur_unit = SR_UNIT_PERCENTAGE; devc->cur_mqflags = 0; - devc->cur_divider = 0; + devc->cur_exponent = 0; } else { sr_dbg("Unknown first argument '%s'.", mstr); } @@ -492,7 +492,7 @@ static int recv_conf(const struct sr_dev_inst *sdi, GMatchInfo *match) devc->cur_mq = SR_MQ_VOLTAGE; devc->cur_unit = SR_UNIT_VOLT; devc->cur_mqflags = SR_MQFLAG_DIODE; - devc->cur_divider = 0; + devc->cur_exponent = 0; } else sr_dbg("Unknown single argument."); g_free(mstr);