return SR_OK;
}
-static int configure_probes(struct dev_context *devc, const GSList *probes)
+static int configure_probes(const struct sr_dev_inst *sdi)
{
+ struct dev_context *devc;
const struct sr_probe *probe;
const GSList *l;
int probe_bit, stage, i;
char *tc;
+ devc = sdi->priv;
+
devc->probe_mask = 0;
for (i = 0; i < NUM_TRIGGER_STAGES; i++) {
devc->trigger_mask[i] = 0;
}
devc->num_stages = 0;
- for (l = probes; l; l = l->next) {
+ for (l = sdi->probes; l; l = l->next) {
probe = (const struct sr_probe *)l->data;
if (!probe->enabled)
continue;
case SR_HWCAP_SAMPLERATE:
ret = set_samplerate(sdi, *(const uint64_t *)value);
break;
- case SR_HWCAP_PROBECONFIG:
- ret = configure_probes(devc, (const GSList *)value);
- break;
case SR_HWCAP_LIMIT_SAMPLES:
tmp_u64 = value;
if (*tmp_u64 < MIN_NUM_SAMPLES)
return ret;
}
+static void abort_acquisition(const struct sr_dev_inst *sdi)
+{
+ struct sr_datafeed_packet packet;
+ struct dev_context *devc;
+
+ devc = sdi->priv;
+ sr_source_remove(devc->serial->fd);
+
+ /* Terminate session */
+ packet.type = SR_DF_END;
+ sr_session_send(sdi, &packet);
+
+}
+
+
+
static int receive_data(int fd, int revents, void *cb_data)
{
struct sr_datafeed_packet packet;
serial_flush(fd);
serial_close(fd);
- packet.type = SR_DF_END;
- sr_session_send(cb_data, &packet);
+
+ abort_acquisition(sdi);
}
return TRUE;
if (sdi->status != SR_ST_ACTIVE)
return SR_ERR;
+ if (configure_probes(sdi) != SR_OK) {
+ sr_err("ols: failed to configured probes");
+ return SR_ERR;
+ }
+
/*
* Enable/disable channel groups in the flag register according to the
* probe mask. Calculate this here, because num_channels is needed
static int hw_dev_acquisition_stop(const struct sr_dev_inst *sdi,
void *cb_data)
{
- struct sr_datafeed_packet packet;
/* Avoid compiler warnings. */
- (void)sdi;
+ (void)cb_data;
- packet.type = SR_DF_END;
- sr_session_send(cb_data, &packet);
+ abort_acquisition(sdi);
return SR_OK;
}