X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;f=hardware%2Fcommon%2Fdmm%2Fmetex14.c;h=4a37efe0c545577b9eff5bbb33b46c60fd02677c;hb=c4f2dfd0f0df07e6e2b10e33c46c9c457c9c5016;hp=f54188210f64d06a8243f86515934c61e389c0da;hpb=1a807c13fcf4bc015fb22311c70292e9c51bb5f9;p=libsigrok.git diff --git a/hardware/common/dmm/metex14.c b/hardware/common/dmm/metex14.c index f5418821..4a37efe0 100644 --- a/hardware/common/dmm/metex14.c +++ b/hardware/common/dmm/metex14.c @@ -57,10 +57,14 @@ static int parse_value(const uint8_t *buf, float *result) /* Bytes 5-7: Over limit (various forms) */ is_ol = 0; - is_ol += (!strcmp((const char *)&valstr, ".OL")) ? 1 : 0; - is_ol += (!strcmp((const char *)&valstr, "O.L")) ? 1 : 0; - is_ol += (!strcmp((const char *)&valstr, "OL.")) ? 1 : 0; - is_ol += (!strcmp((const char *)&valstr, "OL")) ? 1 : 0; + is_ol += (!strcasecmp((const char *)&valstr, ".OL")) ? 1 : 0; + is_ol += (!strcasecmp((const char *)&valstr, "O.L")) ? 1 : 0; + is_ol += (!strcasecmp((const char *)&valstr, "OL.")) ? 1 : 0; + is_ol += (!strcasecmp((const char *)&valstr, "OL")) ? 1 : 0; + is_ol += (!strcasecmp((const char *)&valstr, "-.OL")) ? 1 : 0; + is_ol += (!strcasecmp((const char *)&valstr, "-O.L")) ? 1 : 0; + is_ol += (!strcasecmp((const char *)&valstr, "-OL.")) ? 1 : 0; + is_ol += (!strcasecmp((const char *)&valstr, "-OL")) ? 1 : 0; if (is_ol != 0) { sr_spew("Over limit."); *result = INFINITY; @@ -112,33 +116,35 @@ static void parse_flags(const char *buf, struct metex14_info *info) /* Bytes 9-12: Unit */ u = (const char *)&unit; - if (!strcmp(u, "A")) + if (!strcasecmp(u, "A")) info->is_ampere = TRUE; - else if (!strcmp(u, "mA")) + else if (!strcasecmp(u, "mA")) info->is_milli = info->is_ampere = TRUE; - else if (!strcmp(u, "uA")) + else if (!strcasecmp(u, "uA")) info->is_micro = info->is_ampere = TRUE; - else if (!strcmp(u, "V")) + else if (!strcasecmp(u, "V")) info->is_volt = TRUE; - else if (!strcmp(u, "mV")) + else if (!strcasecmp(u, "mV")) info->is_milli = info->is_volt = TRUE; - else if (!strcmp(u, "Ohm")) + else if (!strcasecmp(u, "Ohm")) info->is_ohm = TRUE; - else if (!strcmp(u, "KOhm")) + else if (!strcasecmp(u, "KOhm")) info->is_kilo = info->is_ohm = TRUE; - else if (!strcmp(u, "MOhm")) + else if (!strcasecmp(u, "MOhm")) info->is_mega = info->is_ohm = TRUE; - else if (!strcmp(u, "nF")) + else if (!strcasecmp(u, "pF")) + info->is_pico = info->is_farad = TRUE; + else if (!strcasecmp(u, "nF")) info->is_nano = info->is_farad = TRUE; - else if (!strcmp(u, "uF")) + else if (!strcasecmp(u, "uF")) info->is_micro = info->is_farad = TRUE; - else if (!strcmp(u, "KHz")) + else if (!strcasecmp(u, "KHz")) info->is_kilo = info->is_hertz = TRUE; - else if (!strcmp(u, "C")) + else if (!strcasecmp(u, "C")) info->is_celsius = TRUE; - else if (!strcmp(u, "DB")) + else if (!strcasecmp(u, "DB")) info->is_decibel = TRUE; - else if (!strcmp(u, "")) + else if (!strcasecmp(u, "")) info->is_unitless = TRUE; /* Byte 13: Always '\r' (carriage return, 0x0d, 13) */ @@ -148,6 +154,8 @@ static void handle_flags(struct sr_datafeed_analog *analog, float *floatval, const struct metex14_info *info) { /* Factors */ + if (info->is_pico) + *floatval /= 1000000000000ULL; if (info->is_nano) *floatval /= 1000000000; if (info->is_micro) @@ -212,6 +220,7 @@ static gboolean flags_valid(const struct metex14_info *info) /* Does the packet have more than one multiplier? */ count = 0; + count += (info->is_pico) ? 1 : 0; count += (info->is_nano) ? 1 : 0; count += (info->is_micro) ? 1 : 0; count += (info->is_milli) ? 1 : 0; @@ -245,6 +254,7 @@ static gboolean flags_valid(const struct metex14_info *info) return TRUE; } +#ifdef HAVE_LIBSERIALPORT SR_PRIV int sr_metex14_packet_request(struct sr_serial_dev_inst *serial) { const uint8_t wbuf = 'D'; @@ -253,6 +263,7 @@ SR_PRIV int sr_metex14_packet_request(struct sr_serial_dev_inst *serial) return (serial_write(serial, &wbuf, 1) == 1) ? SR_OK : SR_ERR; } +#endif SR_PRIV gboolean sr_metex14_packet_valid(const uint8_t *buf) {