]> sigrok.org Git - libsigrok.git/blobdiff - src/input/saleae.c
korad-kaxxxxp: speed up scan process, rephrase response read routine
[libsigrok.git] / src / input / saleae.c
index 05de3e3ea5eddae271e6f86213392f5f79db9de9..cc954e627203fe4bec9dab7d82354ce70465b81b 100644 (file)
@@ -883,11 +883,14 @@ static int format_match(GHashTable *metadata, unsigned int *confidence)
        static const char *zip_ext = ".sal";
        static const char *bin_ext = ".bin";
 
+       gboolean matched;
        const char *fn;
        size_t fn_len, ext_len;
        const char *ext_pos;
        GString *buf;
 
+       matched = FALSE;
+
        /* Weak match on the filename (when available). */
        fn = g_hash_table_lookup(metadata, GINT_TO_POINTER(SR_INPUT_META_FILENAME));
        if (fn && *fn) {
@@ -895,13 +898,16 @@ static int format_match(GHashTable *metadata, unsigned int *confidence)
                ext_len = strlen(zip_ext);
                ext_pos = &fn[fn_len - ext_len];
                if (fn_len >= ext_len && g_ascii_strcasecmp(ext_pos, zip_ext) == 0) {
-                       if (SALEAE_WITH_SAL_SUPPORT)
+                       if (SALEAE_WITH_SAL_SUPPORT) {
                                *confidence = 10;
+                               matched = TRUE;
+                       }
                }
                ext_len = strlen(bin_ext);
                ext_pos = &fn[fn_len - ext_len];
                if (fn_len >= ext_len && g_ascii_strcasecmp(ext_pos, bin_ext) == 0) {
                        *confidence = 50;
+                       matched = TRUE;
                }
        }
 
@@ -913,13 +919,14 @@ static int format_match(GHashTable *metadata, unsigned int *confidence)
        case FMT_LOGIC2_DIGITAL:
        case FMT_LOGIC2_ANALOG:
                *confidence = 1;
+               matched = TRUE;
                break;
        default:
                /* EMPTY */
                break;
        }
 
-       return SR_OK;
+       return matched ? SR_OK : SR_ERR_DATA;
 }
 
 static int init(struct sr_input *in, GHashTable *options)
@@ -1060,6 +1067,7 @@ static void cleanup(struct sr_input *in)
 {
        struct context *inc;
        struct context_options save_opts;
+       GSList *save_channels;
 
        if (!in)
                return;
@@ -1077,8 +1085,10 @@ static void cleanup(struct sr_input *in)
 
        /* Clear internal state, but keep what .init() has provided. */
        save_opts = inc->options;
+       save_channels = inc->module_state.prev_channels;
        memset(inc, 0, sizeof(*inc));
        inc->options = save_opts;
+       inc->module_state.prev_channels = save_channels;
 }
 
 static int reset(struct sr_input *in)
@@ -1097,6 +1107,7 @@ static int reset(struct sr_input *in)
         */
        cleanup(in);
        in->sdi->channels = inc->module_state.prev_channels;
+       inc->module_state.prev_channels = NULL;
 
        inc->module_state.got_header = FALSE;
        inc->module_state.header_sent = FALSE;