X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fhardware%2Fdemo%2Fapi.c;h=7d3e08872d07c21b38832845a138d5cf2bd3fe80;hb=f6ce25ec05e8707ee3783b111ea13779f237c3b3;hp=32ca88dd106d55da14ac7f5e03b58ddb90214e0c;hpb=31f69b096f8020d817ff26800231cb549f5ce11e;p=libsigrok.git diff --git a/src/hardware/demo/api.c b/src/hardware/demo/api.c index 32ca88dd..7d3e0887 100644 --- a/src/hardware/demo/api.c +++ b/src/hardware/demo/api.c @@ -143,6 +143,8 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) devc->logic_pattern = DEFAULT_LOGIC_PATTERN; devc->num_analog_channels = num_analog_channels; devc->limit_frames = limit_frames; + devc->capture_ratio = 20; + devc->stl = NULL; if (num_logic_channels > 0) { /* Logic channels, all in one channel group. */ @@ -434,11 +436,33 @@ static int dev_acquisition_start(const struct sr_dev_inst *sdi) uint8_t mask; GHashTableIter iter; void *value; + struct sr_trigger *trigger; devc = sdi->priv; devc->sent_samples = 0; devc->sent_frame_samples = 0; + /* Setup triggers */ + if ((trigger = sr_session_trigger_get(sdi->session))) { + 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) + return SR_ERR_MALLOC; + + /* Disable all analog channels since using them when there are logic + * triggers set up would require having pre-trigger sample buffers + * for analog sample data. + */ + for (l = sdi->channels; l; l = l->next) { + ch = l->data; + if (ch->type == SR_CHANNEL_ANALOG) + ch->enabled = FALSE; + } + } + devc->trigger_fired = FALSE; + /* * Determine the numbers of logic and analog channels that are * involved in the acquisition. Determine an offset and a mask to @@ -514,6 +538,11 @@ static int dev_acquisition_stop(struct sr_dev_inst *sdi) std_session_send_df_end(sdi); + if (devc->stl) { + soft_trigger_logic_free(devc->stl); + devc->stl = NULL; + } + return SR_OK; }