]> sigrok.org Git - libsigrok.git/blobdiff - hardware/openbench-logic-sniffer/api.c
ols: Fix stack clobbering at start of acquisition
[libsigrok.git] / hardware / openbench-logic-sniffer / api.c
index 9b7beb6194664318e624223c281318b1f446980a..a744fc5a86e7d9e3dd4f0b2a21d77b1487a76f05 100644 (file)
@@ -148,6 +148,7 @@ static GSList *hw_scan(GSList *options)
                devc = sdi->priv;
        } else {
                /* Not an OLS -- some other board that uses the sump protocol. */
+               sr_info("Device does not support metadata.");
                sdi = sr_dev_inst_new(0, SR_ST_INACTIVE,
                                "Sump", "Logic Analyzer", "v1.0");
                sdi->driver = di;
@@ -266,7 +267,7 @@ static int config_get(int id, GVariant **data, const struct sr_dev_inst *sdi)
                *data = g_variant_new_boolean(devc->flag_reg & FLAG_RLE ? TRUE : FALSE);
                break;
        default:
-               return SR_ERR_ARG;
+               return SR_ERR_NA;
        }
 
        return SR_OK;
@@ -280,9 +281,6 @@ static int config_set(int id, GVariant *data, const struct sr_dev_inst *sdi)
 
        devc = sdi->priv;
 
-       if (sdi->status != SR_ST_ACTIVE)
-               return SR_ERR;
-
        switch (id) {
        case SR_CONF_SAMPLERATE:
                tmp_u64 = g_variant_get_uint64(data);
@@ -316,7 +314,7 @@ static int config_set(int id, GVariant *data, const struct sr_dev_inst *sdi)
                ret = SR_OK;
                break;
        default:
-               ret = SR_ERR;
+               ret = SR_ERR_NA;
        }
 
        return ret;
@@ -349,7 +347,7 @@ static int config_list(int key, GVariant **data, const struct sr_dev_inst *sdi)
                *data = g_variant_new_string(TRIGGER_TYPE);
                break;
        default:
-               return SR_ERR_ARG;
+               return SR_ERR_NA;
        }
 
        return SR_OK;
@@ -397,7 +395,7 @@ static int hw_dev_acquisition_start(const struct sr_dev_inst *sdi,
        readcount = MIN(devc->max_samples / num_channels, devc->limit_samples) / 4;
 
        memset(trigger_config, 0, 16);
-       trigger_config[devc->num_stages - 1] |= 0x08;
+       trigger_config[devc->num_stages] |= 0x08;
        if (devc->trigger_mask[0]) {
                delaycount = readcount * (1 - devc->capture_ratio / 100.0);
                devc->trigger_at = (readcount - delaycount) * 4 - devc->num_stages;