X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=hardware%2Fcommon%2Fdmm%2Fes519xx.c;h=075587ce40fcc37fcde278f84ec7976ea5a94ee7;hb=43cd4637285833706f8a404ca027bcf0ee75b9ae;hp=67d669a584211628b3a527b7e16edcec725f1a3e;hpb=4d2630e63a6456ab84d0968fbd8f1c319f034c46;p=libsigrok.git diff --git a/hardware/common/dmm/es519xx.c b/hardware/common/dmm/es519xx.c index 67d669a5..075587ce 100644 --- a/hardware/common/dmm/es519xx.c +++ b/hardware/common/dmm/es519xx.c @@ -111,7 +111,7 @@ static int parse_value(const uint8_t *buf, struct es519xx_info *info, } else if (!isdigit(buf[1]) || !isdigit(buf[2]) || !isdigit(buf[3]) || !isdigit(buf[4]) || (num_digits == 5 && !isdigit(buf[5]))) { - sr_err("Value contained invalid digits: %02x %02x %02x %02x " + sr_dbg("Value contained invalid digits: %02x %02x %02x %02x " "(%c %c %c %c).", buf[1], buf[2], buf[3], buf[4], buf[1], buf[2], buf[3], buf[4]); return SR_ERR; @@ -169,6 +169,8 @@ static int parse_range(uint8_t b, float *floatval, mode = 7; /* Capacitance */ else if (info->is_diode) mode = 8; /* Diode */ + else if (info->is_duty_cycle) + mode = 0; /* Dummy, unused */ else { sr_dbg("Invalid mode, range byte was: 0x%02x.", b); return SR_ERR; @@ -180,6 +182,8 @@ static int parse_range(uint8_t b, float *floatval, else if (info->is_milli) factor = (const float[]){1e-2, 1e-1}[idx]; } + else if (info->is_duty_cycle) + factor = 1e-1; else if (info->baudrate == 2400) factor = factors_2400_11b[mode][idx]; else if (info->fivedigits) @@ -335,7 +339,7 @@ static void parse_flags(const uint8_t *buf, struct es519xx_info *info) info->is_adp3 = TRUE; break; default: - sr_err("Invalid function byte: 0x%02x.", buf[function]); + sr_dbg("Invalid function byte: 0x%02x.", buf[function]); break; } } else { @@ -369,9 +373,9 @@ static void parse_flags(const uint8_t *buf, struct es519xx_info *info) case 0x32: /* Frequency / RPM / duty cycle */ if (info->packet_size == 14) { if (info->is_judge) - info->is_frequency = TRUE; - else info->is_duty_cycle = TRUE; + else + info->is_frequency = TRUE; } else { if (info->is_judge) info->is_rpm = TRUE; @@ -403,11 +407,28 @@ static void parse_flags(const uint8_t *buf, struct es519xx_info *info) info->is_adp3 = TRUE; break; default: - sr_err("Invalid function byte: 0x%02x.", buf[function]); + sr_dbg("Invalid function byte: 0x%02x.", buf[function]); break; } } + if (info->is_vahz && (info->is_voltage || info->is_current)) { + info->is_voltage = FALSE; + info->is_current = FALSE; + info->is_milli = info->is_micro = FALSE; + if (info->packet_size == 14) { + if (info->is_judge) + info->is_duty_cycle = TRUE; + else + info->is_frequency = TRUE; + } else { + if (info->is_judge) + info->is_rpm = TRUE; + else + info->is_frequency = TRUE; + } + } + if (info->is_current && (info->is_micro || info->is_milli) && info->is_vasel) { info->is_current = info->is_auto = FALSE; info->is_voltage = TRUE; @@ -532,7 +553,7 @@ static gboolean flags_valid(const struct es519xx_info *info) count = (info->is_micro) ? 1 : 0; count += (info->is_milli) ? 1 : 0; if (count > 1) { - sr_err("More than one multiplier detected in packet."); + sr_dbg("More than one multiplier detected in packet."); return FALSE; } @@ -547,13 +568,13 @@ static gboolean flags_valid(const struct es519xx_info *info) count += (info->is_diode) ? 1 : 0; count += (info->is_rpm) ? 1 : 0; if (count > 1) { - sr_err("More than one measurement type detected in packet."); + sr_dbg("More than one measurement type detected in packet."); return FALSE; } /* Both AC and DC set? */ if (info->is_ac && info->is_dc) { - sr_err("Both AC and DC flags detected in packet."); + sr_dbg("Both AC and DC flags detected in packet."); return FALSE; } @@ -591,7 +612,7 @@ static int sr_es519xx_parse(const uint8_t *buf, float *floatval, return SR_ERR; if ((ret = parse_value(buf, info, floatval)) != SR_OK) { - sr_err("Error parsing value: %d.", ret); + sr_dbg("Error parsing value: %d.", ret); return ret; } @@ -608,8 +629,9 @@ static int sr_es519xx_parse(const uint8_t *buf, float *floatval, */ SR_PRIV gboolean sr_es519xx_2400_11b_packet_valid(const uint8_t *buf) { - struct es519xx_info info = { 0 }; + struct es519xx_info info; + memset(&info, 0, sizeof(struct es519xx_info)); info.baudrate = 2400; info.packet_size = 11; @@ -635,8 +657,9 @@ SR_PRIV int sr_es519xx_2400_11b_parse(const uint8_t *buf, float *floatval, */ SR_PRIV gboolean sr_es519xx_2400_11b_altfn_packet_valid(const uint8_t *buf) { - struct es519xx_info info = { 0 }; + struct es519xx_info info; + memset(&info, 0, sizeof(struct es519xx_info)); info.baudrate = 2400; info.packet_size = 11; info.alt_functions = TRUE; @@ -664,8 +687,9 @@ SR_PRIV int sr_es519xx_2400_11b_altfn_parse(const uint8_t *buf, */ SR_PRIV gboolean sr_es519xx_19200_11b_5digits_packet_valid(const uint8_t *buf) { - struct es519xx_info info = { 0 }; + struct es519xx_info info; + memset(&info, 0, sizeof(struct es519xx_info)); info.baudrate = 19200; info.packet_size = 11; info.fivedigits = TRUE; @@ -693,8 +717,9 @@ SR_PRIV int sr_es519xx_19200_11b_5digits_parse(const uint8_t *buf, */ SR_PRIV gboolean sr_es519xx_19200_11b_clamp_packet_valid(const uint8_t *buf) { - struct es519xx_info info = { 0 }; + struct es519xx_info info; + memset(&info, 0, sizeof(struct es519xx_info)); info.baudrate = 19200; info.packet_size = 11; info.clampmeter = TRUE; @@ -722,8 +747,9 @@ SR_PRIV int sr_es519xx_19200_11b_clamp_parse(const uint8_t *buf, */ SR_PRIV gboolean sr_es519xx_19200_11b_packet_valid(const uint8_t *buf) { - struct es519xx_info info = { 0 }; + struct es519xx_info info; + memset(&info, 0, sizeof(struct es519xx_info)); info.baudrate = 19200; info.packet_size = 11; @@ -749,8 +775,9 @@ SR_PRIV int sr_es519xx_19200_11b_parse(const uint8_t *buf, float *floatval, */ SR_PRIV gboolean sr_es519xx_19200_14b_packet_valid(const uint8_t *buf) { - struct es519xx_info info = { 0 }; + struct es519xx_info info; + memset(&info, 0, sizeof(struct es519xx_info)); info.baudrate = 19200; info.packet_size = 14; @@ -776,8 +803,9 @@ SR_PRIV int sr_es519xx_19200_14b_parse(const uint8_t *buf, float *floatval, */ SR_PRIV gboolean sr_es519xx_19200_14b_sel_lpf_packet_valid(const uint8_t *buf) { - struct es519xx_info info = { 0 }; + struct es519xx_info info; + memset(&info, 0, sizeof(struct es519xx_info)); info.baudrate = 19200; info.packet_size = 14; info.selectable_lpf = TRUE;