#define LOG_PREFIX "es519xx"
/* Factors for the respective measurement mode (0 means "invalid"). */
-static const float factors_2400_11b[8][8] = {
+static const float factors_2400_11b[9][8] = {
{1e-4, 1e-3, 1e-2, 1e-1, 1, 0, 0, 0 }, /* V */
{1e-7, 1e-6, 0, 0, 0, 0, 0, 0 }, /* uA */
{1e-5, 1e-4, 0, 0, 0, 0, 0, 0 }, /* mA */
{1e-1, 1, 1e1, 1e2, 1e3, 1e4, 0, 0 }, /* Resistance */
{1, 1e1, 1e2, 1e3, 1e4, 1e5, 0, 0 }, /* Frequency */
{1e-12, 1e-11, 1e-10, 1e-9, 1e-8, 1e-7, 1e-6, 1e-5}, /* Capacitance */
+ {1e-3, 0, 0, 0, 0, 0, 0, 0 }, /* Diode */
};
-static const float factors_19200_11b_5digits[8][8] = {
+static const float factors_19200_11b_5digits[9][8] = {
{1e-4, 1e-3, 1e-2, 1e-1, 1e-5, 0, 0, 0}, /* V */
{1e-8, 1e-7, 0, 0, 0, 0, 0, 0}, /* uA */
{1e-6, 1e-5, 0, 0, 0, 0, 0, 0}, /* mA */
{1e-2, 1e-1, 1, 1e1, 1e2, 1e3, 1e4, 0}, /* Resistance */
{1e-1, 0, 1, 1e1, 1e2, 1e3, 1e4, 0}, /* Frequency */
{1e-12, 1e-11, 1e-10, 1e-9, 1e-8, 1e-7, 1e-6, 1e-5}, /* Capacitance */
+ {1e-4, 0, 0, 0, 0, 0, 0, 0 }, /* Diode */
};
-static const float factors_19200_11b_clampmeter[8][8] = {
+static const float factors_19200_11b_clampmeter[9][8] = {
{1e-3, 1e-2, 1e-1, 1, 1e-4, 0, 0, 0}, /* V */
{1e-7, 1e-6, 0, 0, 0, 0, 0, 0}, /* uA */
{1e-5, 1e-4, 0, 0, 0, 0, 0, 0}, /* mA */
{1e-1, 1, 1e1, 1e2, 1e3, 1e4, 0, 0}, /* Resistance */
{1e-1, 0, 1, 1e1, 1e2, 1e3, 1e4, 0}, /* Frequency */
{1e-12, 1e-11, 1e-10, 1e-9, 1e-8, 1e-7, 1e-6, 1e-5}, /* Capacitance */
+ {1e-3, 0, 0, 0, 0, 0, 0, 0 }, /* Diode */
};
-static const float factors_19200_11b[8][8] = {
+static const float factors_19200_11b[9][8] = {
{1e-3, 1e-2, 1e-1, 1, 1e-4, 0, 0, 0}, /* V */
{1e-7, 1e-6, 0, 0, 0, 0, 0, 0}, /* uA */
{1e-5, 1e-4, 0, 0, 0, 0, 0, 0}, /* mA */
{1e-1, 1, 1e1, 1e2, 1e3, 1e4, 0, 0}, /* Resistance */
{1, 1e1, 1e2, 1e3, 1e4, 0, 0, 0}, /* Frequency */
{1e-12, 1e-11, 1e-10, 1e-9, 1e-8, 1e-7, 1e-6, 0}, /* Capacitance */
+ {1e-3, 0, 0, 0, 0, 0, 0, 0}, /* Diode */
};
-static const float factors_19200_14b[8][8] = {
+static const float factors_19200_14b[9][8] = {
{1e-4, 1e-3, 1e-2, 1e-1, 1e-5, 0, 0, 0}, /* V */
{1e-8, 1e-7, 0, 0, 0, 0, 0, 0}, /* uA */
{1e-6, 1e-5, 0, 0, 0, 0, 0, 0}, /* mA */
{1e-2, 1e-1, 1, 1e1, 1e2, 1e3, 1e4, 0}, /* Resistance */
{1e-2, 1e-1, 0, 1, 1e1, 1e2, 1e3, 1e4}, /* Frequency */
{1e-12, 1e-11, 1e-10, 1e-9, 1e-8, 1e-7, 1e-6, 1e-5}, /* Capacitance */
+ {1e-4, 0, 0, 0, 0, 0, 0, 0 }, /* Diode */
};
static int parse_value(const uint8_t *buf, struct es519xx_info *info,
else if (info->is_rpm)
/* Not a typo, it's really index 4 in factors_2400_11b[][]. */
mode = 4; /* RPM */
- else if (info->is_resistance)
+ else if (info->is_resistance || info->is_continuity)
mode = 5; /* Resistance */
else if (info->is_frequency)
mode = 6; /* Frequency */
else if (info->is_capacitance)
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;
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)
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;
}
}
+ 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;
if (info->is_continuity) {
analog->mq = SR_MQ_CONTINUITY;
analog->unit = SR_UNIT_BOOLEAN;
- *floatval = (*floatval < 0.0) ? 0.0 : 1.0;
+ *floatval = (*floatval < 0.0 || *floatval > 25.0) ? 0.0 : 1.0;
}
if (info->is_diode) {
analog->mq = SR_MQ_VOLTAGE;
return ret;
}
- handle_flags(analog, floatval, info);
+ if ((ret = parse_range(buf[0], floatval, info)) != SR_OK)
+ return ret;
- return parse_range(buf[0], floatval, info);
+ handle_flags(analog, floatval, info);
+ return SR_OK;
}
/*