korad-kaxxxxp: Add workaround for a Korad KA3005P issue.

In some situations, the reply to the *IDN? command contains an
additional trailing 0x01 byte for unknown reasons.

This issue seems to be reproducible by changing the voltage using the knobs
on the device, then turning on the output and turning it off again.

The next korad-kaxxxxp scan() operation would contain the trailing 0x01
byte, which would lead to the detection of the device in libsigrok no
longer working until the next power-cycle.

Work around this issue by treating both the ID string with and without
the trailing 0x01 byte as valid.
This commit is contained in:
Uwe Hermann 2015-12-25 23:20:00 +01:00
parent ae9ca5b1df
commit a078d3ec52
2 changed files with 6 additions and 1 deletions

View File

@ -56,6 +56,9 @@ static const struct korad_kaxxxxp_model models[] = {
"VELLEMANLABPS3005DV2.0", 1, {0, 31, 0.01}, {0, 5, 0.001}},
{KORAD_KA3005P, "Korad", "KA3005P",
"KORADKA3005PV2.0", 1, {0, 31, 0.01}, {0, 5, 0.001}},
/* Sometimes the KA3005P has an extra 0x01 after the ID. */
{KORAD_KA3005P_0X01, "Korad", "KA3005P",
"KORADKA3005PV2.0\x01", 1, {0, 31, 0.01}, {0, 5, 0.001}},
ALL_ZERO
};
@ -135,7 +138,8 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options)
sr_err("Unknown model ID '%s' detected, aborting.", reply);
return NULL;
}
sr_dbg("Found: %s %s", models[model_id].vendor, models[model_id].name);
sr_dbg("Found: %s %s (idx %d, ID '%s').", models[model_id].vendor,
models[model_id].name, model_id, models[model_id].id);
/* Init device instance, etc. */
sdi = g_malloc0(sizeof(struct sr_dev_inst));

View File

@ -40,6 +40,7 @@ enum {
VELLEMAN_PS3005D,
VELLEMAN_LABPS3005D,
KORAD_KA3005P,
KORAD_KA3005P_0X01,
/* Support for future devices with this protocol. */
};