X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fhardware%2Fkorad-kaxxxxp%2Fapi.c;fp=src%2Fhardware%2Fkorad-kaxxxxp%2Fapi.c;h=d8215c605535fa687cec7341492b3916dc0acb2b;hb=0f96d9bc50555adf662904230e6ef860b0baad12;hp=effab3e337ff78f01f7da2ca319e7d28f179da4e;hpb=d241cc20bd476712806a36ee2838670434ce1d32;p=libsigrok.git 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; } /*