From: Gerhard Sittig Date: Fri, 16 Sep 2022 08:03:30 +0000 (+0200) Subject: korad-kaxxxxp: support optional version after fixed ID response text X-Git-Url: https://sigrok.org/gitaction?a=commitdiff_plain;h=0f96d9bc50555adf662904230e6ef860b0baad12;p=libsigrok.git korad-kaxxxxp: support optional version after fixed ID response text The combination of a literal expected ID response, and an optionally trailing version information that need not be part of the driver's strict expectation, would be useful to handle the RND devices' prefix. Extend the "strict ID response text check", accept an optional version text before checking for exhausted input. This commit only introduces the support code, does not change the set of supported models. --- diff --git a/src/hardware/korad-kaxxxxp/api.c b/src/hardware/korad-kaxxxxp/api.c index effab3e3..d8215c60 100644 --- a/src/hardware/korad-kaxxxxp/api.c +++ b/src/hardware/korad-kaxxxxp/api.c @@ -92,7 +92,7 @@ static gboolean model_matches(const struct korad_kaxxxxp_model *model, const char *id_text) { gboolean matches; - gboolean skip_vendor, accept_trail; + gboolean opt_version, skip_vendor, accept_trail; const char *want; if (!model) @@ -103,12 +103,34 @@ static gboolean model_matches(const struct korad_kaxxxxp_model *model, * then expect to see this very text in literal form. This * lets the driver map weird and untypical responses to a * specific set of display texts for vendor and model names. + * Accept an optionally trailing version if models[] says so. */ if (model->id && model->id[0]) { - matches = g_strcmp0(model->id, id_text) == 0; - if (matches) + opt_version = model->quirks & KORAD_QUIRK_ID_OPT_VERSION; + if (!opt_version) { + matches = g_strcmp0(id_text, model->id) == 0; + if (!matches) + return FALSE; sr_dbg("Matches expected ID text: '%s'.", model->id); - return matches; + return TRUE; + } + matches = g_str_has_prefix(id_text, model->id); + if (!matches) + return FALSE; + id_text += strlen(model->id); + while (isspace((int)*id_text)) + id_text++; + if (*id_text == 'V') { + id_text++; + while (*id_text == '.' || isdigit((int)*id_text)) + id_text++; + while (isspace((int)*id_text)) + id_text++; + } + if (*id_text) + return FALSE; + sr_dbg("Matches expected ID text [vers]: '%s'.", model->id); + return TRUE; } /* diff --git a/src/hardware/korad-kaxxxxp/protocol.h b/src/hardware/korad-kaxxxxp/protocol.h index 29903e9b..9dcc19ca 100644 --- a/src/hardware/korad-kaxxxxp/protocol.h +++ b/src/hardware/korad-kaxxxxp/protocol.h @@ -36,7 +36,8 @@ enum korad_quirks_flag { KORAD_QUIRK_LABPS_OVP_EN = 1UL << 0, KORAD_QUIRK_ID_NO_VENDOR = 1UL << 1, KORAD_QUIRK_ID_TRAILING = 1UL << 2, - KORAD_QUIRK_ALL = (1UL << 3) - 1, + KORAD_QUIRK_ID_OPT_VERSION = 1UL << 3, + KORAD_QUIRK_ALL = (1UL << 4) - 1, }; /* Information on single model */