}
break;
case WAIT_FOR_TRANSFER_OF_BEGIN_TRANSMISSION_COMPLETE:
- if (read_data(sdi, scpi, devc, 1) == SR_OK) {
- if (devc->rcv_buffer[0] == '#')
- devc->state = WAIT_FOR_TRANSFER_OF_DATA_SIZE_DIGIT_COMPLETE;
- }
+ if (read_data(sdi, scpi, devc, 1) < 0)
+ break;
+ if (devc->rcv_buffer[0] == '#')
+ devc->state = WAIT_FOR_TRANSFER_OF_DATA_SIZE_DIGIT_COMPLETE;
break;
case WAIT_FOR_TRANSFER_OF_DATA_SIZE_DIGIT_COMPLETE:
- if (read_data(sdi, scpi, devc, 1) == SR_OK) {
- if (devc->rcv_buffer[0] != '4' &&
- devc->rcv_buffer[0] != '5' &&
- devc->rcv_buffer[0] != '6') {
- sr_err("Data size digits is not 4, 5 or 6 but "
- "'%c'.", devc->rcv_buffer[0]);
- sr_dev_acquisition_stop(sdi);
- return TRUE;
- } else {
- devc->data_size_digits = devc->rcv_buffer[0] - '0';
- devc->state = WAIT_FOR_TRANSFER_OF_DATA_SIZE_COMPLETE;
- }
+ if (read_data(sdi, scpi, devc, 1) < 0)
+ break;
+ if (devc->rcv_buffer[0] != '4' &&
+ devc->rcv_buffer[0] != '5' &&
+ devc->rcv_buffer[0] != '6') {
+ sr_err("Data size digits is not 4, 5 or 6 but "
+ "'%c'.", devc->rcv_buffer[0]);
+ sr_dev_acquisition_stop(sdi);
+ return TRUE;
+ } else {
+ devc->data_size_digits = devc->rcv_buffer[0] - '0';
+ devc->state = WAIT_FOR_TRANSFER_OF_DATA_SIZE_COMPLETE;
}
break;
case WAIT_FOR_TRANSFER_OF_DATA_SIZE_COMPLETE:
- if (read_data(sdi, scpi, devc, devc->data_size_digits) == SR_OK) {
- devc->rcv_buffer[devc->data_size_digits] = 0;
- if (sr_atoi(devc->rcv_buffer, &devc->data_size) != SR_OK) {
- sr_err("Could not parse data size '%s'", devc->rcv_buffer);
- sr_dev_acquisition_stop(sdi);
- return TRUE;
- } else
- devc->state = WAIT_FOR_TRANSFER_OF_SAMPLE_RATE_COMPLETE;
- }
+ if (read_data(sdi, scpi, devc, devc->data_size_digits) < 0)
+ break;
+ devc->rcv_buffer[devc->data_size_digits] = 0;
+ if (sr_atoi(devc->rcv_buffer, &devc->data_size) != SR_OK) {
+ sr_err("Could not parse data size '%s'", devc->rcv_buffer);
+ sr_dev_acquisition_stop(sdi);
+ return TRUE;
+ } else
+ devc->state = WAIT_FOR_TRANSFER_OF_SAMPLE_RATE_COMPLETE;
break;
case WAIT_FOR_TRANSFER_OF_SAMPLE_RATE_COMPLETE:
- if (read_data(sdi, scpi, devc, sizeof(float)) == SR_OK) {
- /*
- * Contrary to the documentation, this field is
- * transfered with most significant byte first!
- */
- sample_rate = RB32(devc->rcv_buffer);
- memcpy(&devc->sample_rate, &sample_rate, sizeof(float));
- devc->state = WAIT_FOR_TRANSFER_OF_CHANNEL_INDICATOR_COMPLETE;
+ if (read_data(sdi, scpi, devc, sizeof(float)) < 0)
+ break;
+ /*
+ * Contrary to the documentation, this field is
+ * transfered with most significant byte first!
+ */
+ sample_rate = RB32(devc->rcv_buffer);
+ memcpy(&devc->sample_rate, &sample_rate, sizeof(float));
+ devc->state = WAIT_FOR_TRANSFER_OF_CHANNEL_INDICATOR_COMPLETE;
- if (!devc->df_started) {
- std_session_send_df_header(sdi);
+ if (!devc->df_started) {
+ std_session_send_df_header(sdi);
- packet.type = SR_DF_FRAME_BEGIN;
- sr_session_send(sdi, &packet);
+ packet.type = SR_DF_FRAME_BEGIN;
+ sr_session_send(sdi, &packet);
- devc->df_started = TRUE;
- }
+ devc->df_started = TRUE;
}
break;
case WAIT_FOR_TRANSFER_OF_CHANNEL_INDICATOR_COMPLETE:
devc->state = WAIT_FOR_TRANSFER_OF_CHANNEL_DATA_COMPLETE;
break;
case WAIT_FOR_TRANSFER_OF_CHANNEL_DATA_COMPLETE:
- if (read_data(sdi, scpi, devc, devc->data_size - 8) == SR_OK) {
- /* Fetch data needed for conversion from device. */
- snprintf(command, sizeof(command), ":CHAN%d:SCAL?",
- devc->cur_acq_channel + 1);
- if (sr_scpi_get_string(scpi, command, &response) != SR_OK) {
- sr_err("Failed to get volts per division.");
- sr_dev_acquisition_stop(sdi);
- return TRUE;
- }
- volts_per_division = g_ascii_strtod(response, &end_ptr);
- if (!strcmp(end_ptr, "mV"))
- volts_per_division *= 1.e-3;
- g_free(response);
+ if (read_data(sdi, scpi, devc, devc->data_size - 8) < 0)
+ break;
- num_samples = (devc->data_size - 8) / 2;
- sr_spew("Received %d number of samples from channel "
- "%d.", num_samples, devc->cur_acq_channel + 1);
+ /* Fetch data needed for conversion from device. */
+ snprintf(command, sizeof(command), ":CHAN%d:SCAL?",
+ devc->cur_acq_channel + 1);
+ if (sr_scpi_get_string(scpi, command, &response) != SR_OK) {
+ sr_err("Failed to get volts per division.");
+ sr_dev_acquisition_stop(sdi);
+ return TRUE;
+ }
+ volts_per_division = g_ascii_strtod(response, &end_ptr);
+ if (!strcmp(end_ptr, "mV"))
+ volts_per_division *= 1.e-3;
+ g_free(response);
- float vbit = volts_per_division * VERTICAL_DIVISIONS / 256.0;
- float vbitlog = log10f(vbit);
- int digits = -(int)vbitlog + (vbitlog < 0.0);
+ num_samples = (devc->data_size - 8) / 2;
+ sr_spew("Received %d number of samples from channel "
+ "%d.", num_samples, devc->cur_acq_channel + 1);
- /* Convert data. */
- for (i = 0; i < num_samples; i++)
- samples[i] = ((float) ((int16_t) (RB16(&devc->rcv_buffer[i*2])))) * vbit;
+ float vbit = volts_per_division * VERTICAL_DIVISIONS / 256.0;
+ float vbitlog = log10f(vbit);
+ int digits = -(int)vbitlog + (vbitlog < 0.0);
- /* Fill frame. */
- sr_analog_init(&analog, &encoding, &meaning, &spec, digits);
- analog.meaning->channels = g_slist_append(NULL, g_slist_nth_data(sdi->channels, devc->cur_acq_channel));
- analog.num_samples = num_samples;
- analog.data = samples;
- analog.meaning->mq = SR_MQ_VOLTAGE;
- analog.meaning->unit = SR_UNIT_VOLT;
- analog.meaning->mqflags = 0;
- packet.type = SR_DF_ANALOG;
- packet.payload = &analog;
- sr_session_send(sdi, &packet);
- g_slist_free(analog.meaning->channels);
+ /* Convert data. */
+ for (i = 0; i < num_samples; i++)
+ samples[i] = ((float) ((int16_t) (RB16(&devc->rcv_buffer[i*2])))) * vbit;
- /* All channels acquired. */
- if (devc->cur_acq_channel == ANALOG_CHANNELS - 1) {
- sr_spew("All channels acquired.");
+ /* Fill frame. */
+ sr_analog_init(&analog, &encoding, &meaning, &spec, digits);
+ analog.meaning->channels = g_slist_append(NULL, g_slist_nth_data(sdi->channels, devc->cur_acq_channel));
+ analog.num_samples = num_samples;
+ analog.data = samples;
+ analog.meaning->mq = SR_MQ_VOLTAGE;
+ analog.meaning->unit = SR_UNIT_VOLT;
+ analog.meaning->mqflags = 0;
+ packet.type = SR_DF_ANALOG;
+ packet.payload = &analog;
+ sr_session_send(sdi, &packet);
+ g_slist_free(analog.meaning->channels);
- if (devc->cur_acq_frame == devc->frame_limit - 1) {
- /* All frames acquired. */
- sr_spew("All frames acquired.");
- sr_dev_acquisition_stop(sdi);
- return TRUE;
- } else {
- /* Start acquiring next frame. */
- if (devc->df_started) {
- packet.type = SR_DF_FRAME_END;
- sr_session_send(sdi, &packet);
+ /* All channels acquired. */
+ if (devc->cur_acq_channel == ANALOG_CHANNELS - 1) {
+ sr_spew("All channels acquired.");
- packet.type = SR_DF_FRAME_BEGIN;
- sr_session_send(sdi, &packet);
- }
- devc->cur_acq_frame++;
- devc->state = START_ACQUISITION;
- }
- } else {
- /* Start acquiring next channel. */
- devc->state = START_TRANSFER_OF_CHANNEL_DATA;
- devc->cur_acq_channel++;
+ if (devc->cur_acq_frame == devc->frame_limit - 1) {
+ /* All frames acquired. */
+ sr_spew("All frames acquired.");
+ sr_dev_acquisition_stop(sdi);
return TRUE;
+ } else {
+ /* Start acquiring next frame. */
+ if (devc->df_started) {
+ packet.type = SR_DF_FRAME_END;
+ sr_session_send(sdi, &packet);
+
+ packet.type = SR_DF_FRAME_BEGIN;
+ sr_session_send(sdi, &packet);
+ }
+ devc->cur_acq_frame++;
+ devc->state = START_ACQUISITION;
}
+ } else {
+ /* Start acquiring next channel. */
+ devc->state = START_TRANSFER_OF_CHANNEL_DATA;
+ devc->cur_acq_channel++;
+ return TRUE;
}
break;
}
(*model->timebases)[state->timebase][1]);
break;
case SR_CONF_NUM_VDIV:
- if (!cg) {
+ if (!cg)
return SR_ERR_CHANNEL_GROUP;
- } else if (cg_type == CG_ANALOG) {
- if (std_cg_idx(cg, devc->analog_groups, model->analog_channels) < 0)
- return SR_ERR_ARG;
- *data = g_variant_new_int32(model->num_ydivs);
- } else {
+ if (cg_type != CG_ANALOG)
return SR_ERR_NA;
- }
+ if (std_cg_idx(cg, devc->analog_groups, model->analog_channels) < 0)
+ return SR_ERR_ARG;
+ *data = g_variant_new_int32(model->num_ydivs);
break;
case SR_CONF_VDIV:
- if (!cg) {
+ if (!cg)
return SR_ERR_CHANNEL_GROUP;
- } else if (cg_type == CG_ANALOG) {
- if ((idx = std_cg_idx(cg, devc->analog_groups, model->analog_channels)) < 0)
- return SR_ERR_ARG;
- *data = g_variant_new("(tt)",
- (*model->vdivs)[state->analog_channels[idx].vdiv][0],
- (*model->vdivs)[state->analog_channels[idx].vdiv][1]);
- } else {
+ if (cg_type != CG_ANALOG)
return SR_ERR_NA;
- }
+ if ((idx = std_cg_idx(cg, devc->analog_groups, model->analog_channels)) < 0)
+ return SR_ERR_ARG;
+ *data = g_variant_new("(tt)",
+ (*model->vdivs)[state->analog_channels[idx].vdiv][0],
+ (*model->vdivs)[state->analog_channels[idx].vdiv][1]);
break;
case SR_CONF_TRIGGER_SOURCE:
*data = g_variant_new_string((*model->trigger_sources)[state->trigger_source]);
*data = g_variant_new_double(state->horiz_triggerpos);
break;
case SR_CONF_COUPLING:
- if (!cg) {
+ if (!cg)
return SR_ERR_CHANNEL_GROUP;
- } else if (cg_type == CG_ANALOG) {
- if ((idx = std_cg_idx(cg, devc->analog_groups, model->analog_channels)) < 0)
- return SR_ERR_ARG;
- *data = g_variant_new_string((*model->coupling_options)[state->analog_channels[idx].coupling]);
- } else {
+ if (cg_type != CG_ANALOG)
return SR_ERR_NA;
- }
+ if ((idx = std_cg_idx(cg, devc->analog_groups, model->analog_channels)) < 0)
+ return SR_ERR_ARG;
+ *data = g_variant_new_string((*model->coupling_options)[state->analog_channels[idx].coupling]);
break;
case SR_CONF_SAMPLERATE:
*data = g_variant_new_uint64(state->sample_rate);
channel_found = FALSE;
for (i = 0; i < config->analog_channels; i++) {
- if (state->analog_channels[i].state) {
- g_snprintf(chan_name, sizeof(chan_name), "CHAN%d", i + 1);
+ if (!state->analog_channels[i].state)
+ continue;
+ g_snprintf(chan_name, sizeof(chan_name), "CHAN%d", i + 1);
+ g_snprintf(tmp_str, sizeof(tmp_str),
+ (*config->scpi_dialect)[SCPI_CMD_GET_SAMPLE_RATE_LIVE],
+ chan_name);
+ channel_found = TRUE;
+ break;
+ }
+
+ if (!channel_found) {
+ for (i = 0; i < config->digital_pods; i++) {
+ if (!state->digital_pods[i])
+ continue;
+ g_snprintf(chan_name, sizeof(chan_name), "POD%d", i);
g_snprintf(tmp_str, sizeof(tmp_str),
(*config->scpi_dialect)[SCPI_CMD_GET_SAMPLE_RATE_LIVE],
chan_name);
}
}
- if (!channel_found) {
- for (i = 0; i < config->digital_pods; i++) {
- if (state->digital_pods[i]) {
- g_snprintf(chan_name, sizeof(chan_name), "POD%d", i);
- g_snprintf(tmp_str, sizeof(tmp_str),
- (*config->scpi_dialect)[SCPI_CMD_GET_SAMPLE_RATE_LIVE],
- chan_name);
- channel_found = TRUE;
- break;
- }
- }
- }
-
/* No channel is active, ask the instrument for the sample rate
* in single shot mode */
if (!channel_found) {
case SR_CONF_TRIGGER_SLOPE:
if (devc->edge >= ARRAY_SIZE(trigger_slopes))
return SR_ERR;
- else
- *data = g_variant_new_string(trigger_slopes[devc->edge]);
+ *data = g_variant_new_string(trigger_slopes[devc->edge]);
break;
case SR_CONF_BUFFERSIZE:
*data = g_variant_new_uint64(buffersizes[devc->last_step]);
break;
case SR_CONF_VDIV:
- if (!cg) {
+ if (!cg)
return SR_ERR_CHANNEL_GROUP;
- } else {
- if ((idx = std_u8_idx_s(devc->cctl[ch] & 0x33, ARRAY_AND_SIZE(vdivs_map))) < 0)
- return SR_ERR_BUG;
- *data = g_variant_new("(tt)", vdivs[idx][0], vdivs[idx][1]);
- }
+ if ((idx = std_u8_idx_s(devc->cctl[ch] & 0x33, ARRAY_AND_SIZE(vdivs_map))) < 0)
+ return SR_ERR_BUG;
+ *data = g_variant_new("(tt)", vdivs[idx][0], vdivs[idx][1]);
break;
case SR_CONF_COUPLING:
- if (!cg) {
+ if (!cg)
return SR_ERR_CHANNEL_GROUP;
- } else {
- if ((idx = std_u8_idx_s(devc->cctl[ch] & 0x0C, ARRAY_AND_SIZE(coupling_map))) < 0)
- return SR_ERR_BUG;
- *data = g_variant_new_string(coupling[idx]);
- }
+ if ((idx = std_u8_idx_s(devc->cctl[ch] & 0x0C, ARRAY_AND_SIZE(coupling_map))) < 0)
+ return SR_ERR_BUG;
+ *data = g_variant_new_string(coupling[idx]);
break;
case SR_CONF_PROBE_FACTOR:
if (!cg)
return SR_ERR_CHANNEL_GROUP;
- else
- *data = g_variant_new_uint64(devc->probe[ch]);
+ *data = g_variant_new_uint64(devc->probe[ch]);
break;
default:
return SR_ERR_NA;
devc->last_step = idx;
break;
case SR_CONF_VDIV:
- if (!cg) {
+ if (!cg)
return SR_ERR_CHANNEL_GROUP;
- } else if (!g_variant_is_of_type(data, G_VARIANT_TYPE("(tt)"))) {
+ if (!g_variant_is_of_type(data, G_VARIANT_TYPE("(tt)")))
return SR_ERR_ARG;
- } else {
- if ((idx = std_u64_tuple_idx(data, ARRAY_AND_SIZE(vdivs))) < 0)
- return SR_ERR_ARG;
- devc->cctl[ch] = (devc->cctl[ch] & 0xCC) | vdivs_map[idx];
- }
+ if ((idx = std_u64_tuple_idx(data, ARRAY_AND_SIZE(vdivs))) < 0)
+ return SR_ERR_ARG;
+ devc->cctl[ch] = (devc->cctl[ch] & 0xCC) | vdivs_map[idx];
break;
case SR_CONF_COUPLING:
- if (!cg) {
+ if (!cg)
return SR_ERR_CHANNEL_GROUP;
- } else {
- if ((idx = std_str_idx(data, ARRAY_AND_SIZE(coupling))) < 0)
- return SR_ERR_ARG;
- devc->cctl[ch] = (devc->cctl[ch] & 0xF3) | coupling_map[idx];
- }
+ if ((idx = std_str_idx(data, ARRAY_AND_SIZE(coupling))) < 0)
+ return SR_ERR_ARG;
+ devc->cctl[ch] = (devc->cctl[ch] & 0xF3) | coupling_map[idx];
break;
case SR_CONF_PROBE_FACTOR:
- if (!cg) {
+ if (!cg)
return SR_ERR_CHANNEL_GROUP;
- } else {
- u = g_variant_get_uint64(data);
- if (!u)
- return SR_ERR_ARG;
- else
- devc->probe[ch] = u;
- }
+ u = g_variant_get_uint64(data);
+ if (!u)
+ return SR_ERR_ARG;
+ devc->probe[ch] = u;
break;
default:
return SR_ERR_NA;
struct dev_context *devc = sdi->priv;
uint8_t v;
- if (changes & SR_CHANNEL_SET_ENABLED) {
- if (ch->enabled) {
- v = devc->channel | (1 << ch->index);
- if (v & (v - 1))
- return SR_ERR;
- devc->channel = v;
- devc->enabled_channel->data = ch;
- } else {
- devc->channel &= ~(1 << ch->index);
- }
+ if (!(changes & SR_CHANNEL_SET_ENABLED))
+ return SR_OK;
+
+ if (ch->enabled) {
+ v = devc->channel | (1 << ch->index);
+ if (v & (v - 1))
+ return SR_ERR;
+ devc->channel = v;
+ devc->enabled_channel->data = ch;
+ } else {
+ devc->channel &= ~(1 << ch->index);
}
+
return SR_OK;
}
modelid = config[0];
sdi = NULL;
- if (modelid) {
- profile = NULL;
- for (i = 0; profiles[i].modelid; i++) {
- if (profiles[i].modelid == modelid) {
- profile = &profiles[i];
- break;
- }
- }
- if (!profile) {
- sr_dbg("unknown EL-USB modelid %d", modelid);
- return NULL;
- }
- i = config[52] | (config[53] << 8);
- memcpy(firmware, config + 0x30, 4);
- firmware[4] = '\0';
- sr_dbg("found %s with firmware version %s serial %d",
- profile->modelname, firmware, i);
+ if (!modelid)
+ return sdi;
- if (profile->logformat == LOG_UNSUPPORTED) {
- sr_dbg("unsupported EL-USB logformat for %s", profile->modelname);
- return NULL;
+ profile = NULL;
+ for (i = 0; profiles[i].modelid; i++) {
+ if (profiles[i].modelid == modelid) {
+ profile = &profiles[i];
+ break;
}
+ }
+ if (!profile) {
+ sr_dbg("unknown EL-USB modelid %d", modelid);
+ return NULL;
+ }
- sdi = g_malloc0(sizeof(struct sr_dev_inst));
- sdi->status = SR_ST_INACTIVE;
- sdi->vendor = g_strdup("Lascar");
- sdi->model = g_strdup(profile->modelname);
- sdi->version = g_strdup(firmware);
-
- if (profile->logformat == LOG_TEMP_RH) {
- /* Model this as two channels: temperature and humidity. */
- sr_channel_new(sdi, 0, SR_CHANNEL_ANALOG, TRUE, "Temp");
- sr_channel_new(sdi, 0, SR_CHANNEL_ANALOG, TRUE, "Hum");
- } else if (profile->logformat == LOG_CO) {
- sr_channel_new(sdi, 0, SR_CHANNEL_ANALOG, TRUE, "CO");
- } else {
- sr_channel_new(sdi, 0, SR_CHANNEL_ANALOG, TRUE, "P1");
- }
+ i = config[52] | (config[53] << 8);
+ memcpy(firmware, config + 0x30, 4);
+ firmware[4] = '\0';
+ sr_dbg("found %s with firmware version %s serial %d",
+ profile->modelname, firmware, i);
- devc = g_malloc0(sizeof(struct dev_context));
- sdi->priv = devc;
- devc->profile = profile;
+ if (profile->logformat == LOG_UNSUPPORTED) {
+ sr_dbg("unsupported EL-USB logformat for %s", profile->modelname);
+ return NULL;
}
+ sdi = g_malloc0(sizeof(struct sr_dev_inst));
+ sdi->status = SR_ST_INACTIVE;
+ sdi->vendor = g_strdup("Lascar");
+ sdi->model = g_strdup(profile->modelname);
+ sdi->version = g_strdup(firmware);
+
+ if (profile->logformat == LOG_TEMP_RH) {
+ /* Model this as two channels: temperature and humidity. */
+ sr_channel_new(sdi, 0, SR_CHANNEL_ANALOG, TRUE, "Temp");
+ sr_channel_new(sdi, 0, SR_CHANNEL_ANALOG, TRUE, "Hum");
+ } else if (profile->logformat == LOG_CO) {
+ sr_channel_new(sdi, 0, SR_CHANNEL_ANALOG, TRUE, "CO");
+ } else {
+ sr_channel_new(sdi, 0, SR_CHANNEL_ANALOG, TRUE, "P1");
+ }
+
+ devc = g_malloc0(sizeof(struct dev_context));
+ sdi->priv = devc;
+ devc->profile = profile;
+
return sdi;
}
new_samples = convert_sample_data(devc, devc->convbuffer,
devc->convbuffer_size, transfer->buffer, transfer->actual_length);
- if (new_samples > 0) {
- if (devc->trigger_fired) {
- /* Send the incoming transfer to the session bus. */
+ if (new_samples <= 0) {
+ resubmit_transfer(transfer);
+ return;
+ }
+
+ /* At least one new sample. */
+ if (devc->trigger_fired) {
+ /* Send the incoming transfer to the session bus. */
+ packet.type = SR_DF_LOGIC;
+ packet.payload = &logic;
+ if (devc->limit_samples &&
+ new_samples > devc->limit_samples - devc->sent_samples)
+ new_samples = devc->limit_samples - devc->sent_samples;
+ logic.length = new_samples * 2;
+ logic.unitsize = 2;
+ logic.data = devc->convbuffer;
+ sr_session_send(sdi, &packet);
+ devc->sent_samples += new_samples;
+ } else {
+ trigger_offset = soft_trigger_logic_check(devc->stl,
+ devc->convbuffer, new_samples * 2, &pre_trigger_samples);
+ if (trigger_offset > -1) {
+ devc->sent_samples += pre_trigger_samples;
packet.type = SR_DF_LOGIC;
packet.payload = &logic;
+ num_samples = new_samples - trigger_offset;
if (devc->limit_samples &&
- new_samples > devc->limit_samples - devc->sent_samples)
- new_samples = devc->limit_samples - devc->sent_samples;
- logic.length = new_samples * 2;
+ num_samples > devc->limit_samples - devc->sent_samples)
+ num_samples = devc->limit_samples - devc->sent_samples;
+ logic.length = num_samples * 2;
logic.unitsize = 2;
- logic.data = devc->convbuffer;
+ logic.data = devc->convbuffer + trigger_offset * 2;
sr_session_send(sdi, &packet);
- devc->sent_samples += new_samples;
- } else {
- trigger_offset = soft_trigger_logic_check(devc->stl,
- devc->convbuffer, new_samples * 2, &pre_trigger_samples);
- if (trigger_offset > -1) {
- devc->sent_samples += pre_trigger_samples;
- packet.type = SR_DF_LOGIC;
- packet.payload = &logic;
- num_samples = new_samples - trigger_offset;
- if (devc->limit_samples &&
- num_samples > devc->limit_samples - devc->sent_samples)
- num_samples = devc->limit_samples - devc->sent_samples;
- logic.length = num_samples * 2;
- logic.unitsize = 2;
- logic.data = devc->convbuffer + trigger_offset * 2;
- sr_session_send(sdi, &packet);
- devc->sent_samples += num_samples;
-
- devc->trigger_fired = TRUE;
- }
- }
+ devc->sent_samples += num_samples;
- if (devc->limit_samples &&
- (uint64_t)devc->sent_samples >= devc->limit_samples) {
- devc->sent_samples = -2;
- free_transfer(transfer);
- return;
+ devc->trigger_fired = TRUE;
}
}
+ if (devc->limit_samples &&
+ (uint64_t)devc->sent_samples >= devc->limit_samples) {
+ devc->sent_samples = -2;
+ free_transfer(transfer);
+ return;
+ }
+
resubmit_transfer(transfer);
}
ret = SR_OK;
break;
case SR_CONF_NUM_VDIV:
- if (!cg) {
+ if (!cg)
return SR_ERR_CHANNEL_GROUP;
- } else if (cg_type == CG_ANALOG) {
- *data = g_variant_new_int32(model->num_ydivs);
- ret = SR_OK;
- break;
- } else {
- ret = SR_ERR_NA;
- }
+ if (cg_type != CG_ANALOG)
+ return SR_ERR_NA;
+ *data = g_variant_new_int32(model->num_ydivs);
+ ret = SR_OK;
break;
case SR_CONF_VDIV:
- ret = SR_ERR_NA;
- if (!cg) {
+ if (!cg)
return SR_ERR_CHANNEL_GROUP;
- } else if (cg_type != CG_ANALOG)
- break;
+ if (cg_type != CG_ANALOG)
+ return SR_ERR_NA;
if ((idx = std_cg_idx(cg, devc->analog_groups, model->analog_channels)) < 0)
return SR_ERR_ARG;
*data = g_variant_new("(tt)",
ret = SR_OK;
break;
case SR_CONF_COUPLING:
- ret = SR_ERR_NA;
- if (!cg) {
+ if (!cg)
return SR_ERR_CHANNEL_GROUP;
- } else if (cg_type != CG_ANALOG)
- break;
+ if (cg_type != CG_ANALOG)
+ return SR_ERR_NA;
if ((idx = std_cg_idx(cg, devc->analog_groups, model->analog_channels)) < 0)
return SR_ERR_ARG;
*data = g_variant_new_string((*model->coupling_options)[state->analog_states[idx].coupling]);