SR_CONF_SAMPLERATE | SR_CONF_GET | SR_CONF_SET | SR_CONF_LIST,
SR_CONF_VOLTAGE_THRESHOLD | SR_CONF_GET | SR_CONF_SET | SR_CONF_LIST,
SR_CONF_TRIGGER_MATCH | SR_CONF_LIST,
+ SR_CONF_CAPTURE_RATIO | SR_CONF_GET | SR_CONF_SET,
};
static const int32_t soft_trigger_matches[] = {
if (des.idVendor != LOGIC16_VID || des.idProduct != LOGIC16_PID)
continue;
- sdi = sr_dev_inst_new(0, SR_ST_INITIALIZING,
- "Saleae", "Logic16", NULL);
- if (!sdi)
- return NULL;
+ sdi = g_malloc0(sizeof(struct sr_dev_inst));
+ sdi->status = SR_ST_INITIALIZING;
+ sdi->vendor = g_strdup("Saleae");
+ sdi->model = g_strdup("Logic16");
sdi->driver = di;
sdi->connection_id = g_strdup(connection_id);
for (j = 0; channel_names[j]; j++) {
- if (!(ch = sr_channel_new(j, SR_CHANNEL_LOGIC, TRUE,
- channel_names[j])))
- return NULL;
+ ch = sr_channel_new(j, SR_CHANNEL_LOGIC, TRUE,
+ channel_names[j]);
sdi->channels = g_slist_append(sdi->channels, ch);
}
- if (!(devc = g_try_malloc0(sizeof(struct dev_context))))
- return NULL;
+ devc = g_malloc0(sizeof(struct dev_context));
devc->selected_voltage_range = VOLTAGE_RANGE_18_33_V;
sdi->priv = devc;
drvc->instances = g_slist_append(drvc->instances, sdi);
devc = sdi->priv;
*data = g_variant_new_uint64(devc->cur_samplerate);
break;
+ case SR_CONF_CAPTURE_RATIO:
+ if (!sdi)
+ return SR_ERR;
+ devc = sdi->priv;
+ *data = g_variant_new_uint64(devc->capture_ratio);
+ break;
case SR_CONF_VOLTAGE_THRESHOLD:
if (!sdi)
return SR_ERR;
case SR_CONF_LIMIT_SAMPLES:
devc->limit_samples = g_variant_get_uint64(data);
break;
+ case SR_CONF_CAPTURE_RATIO:
+ devc->capture_ratio = g_variant_get_uint64(data);
+ if (devc->capture_ratio > 100) {
+ devc->capture_ratio = 0;
+ ret = SR_ERR;
+ } else
+ ret = SR_OK;
+ break;
case SR_CONF_VOLTAGE_THRESHOLD:
g_variant_get(data, "(dd)", &low, &high);
ret = SR_ERR_ARG;
memset(devc->channel_data, 0, sizeof(devc->channel_data));
if ((trigger = sr_session_trigger_get(sdi->session))) {
- devc->stl = soft_trigger_logic_new(sdi, trigger);
+ int pre_trigger_samples = 0;
+ if (devc->limit_samples > 0)
+ pre_trigger_samples = devc->capture_ratio * devc->limit_samples/100;
+ devc->stl = soft_trigger_logic_new(sdi, trigger, pre_trigger_samples);
+ if (devc->stl == NULL)
+ return SR_ERR_MALLOC;
devc->trigger_fired = FALSE;
} else
devc->trigger_fired = TRUE;