SR_CONF_LOGIC_ANALYZER,
SR_CONF_SAMPLERATE,
SR_CONF_LIMIT_SAMPLES,
- SR_CONF_TRIGGER_TYPE,
+ SR_CONF_TRIGGER_MATCH,
SR_CONF_CAPTURE_RATIO,
};
+static const int32_t trigger_matches[] = {
+ SR_TRIGGER_RISING,
+ SR_TRIGGER_FALLING,
+ SR_TRIGGER_EDGE,
+};
+
SR_PRIV const uint64_t sl2_samplerates[NUM_SAMPLERATES] = {
SR_KHZ(1.25),
SR_KHZ(10),
SR_MHZ(20),
};
-static const char *probe_names[NUM_PROBES + 1] = {
+static const char *channel_names[NUM_CHANNELS + 1] = {
"0", "1", "2", "3",
NULL,
};
GSList *usb_devices, *devices, *l;
struct drv_context *drvc;
struct sr_dev_inst *sdi;
- struct sr_probe *probe;
+ struct sr_channel *ch;
struct dev_context *devc;
struct sr_usb_dev_inst *usb;
struct device_info dev_info;
sdi->inst_type = SR_INST_USB;
sdi->conn = usb;
- for (i = 0; probe_names[i]; i++) {
- probe = sr_probe_new(i, SR_PROBE_LOGIC, TRUE,
- probe_names[i]);
- sdi->probes = g_slist_append(sdi->probes, probe);
- devc->probes[i] = probe;
+ for (i = 0; channel_names[i]; i++) {
+ ch = sr_channel_new(i, SR_CHANNEL_LOGIC, TRUE,
+ channel_names[i]);
+ sdi->channels = g_slist_append(sdi->channels, ch);
+ devc->channels[i] = ch;
}
devc->state = STATE_IDLE;
return dev_clear();
}
-static int config_get(int key, GVariant **data, const struct sr_dev_inst *sdi)
+static int config_get(int key, GVariant **data, const struct sr_dev_inst *sdi,
+ const struct sr_channel_group *cg)
{
struct dev_context *devc;
int ret;
+ (void)cg;
+
ret = SR_OK;
devc = sdi->priv;
return ret;
}
-static int config_set(int key, GVariant *data, const struct sr_dev_inst *sdi)
+static int config_set(int key, GVariant *data, const struct sr_dev_inst *sdi,
+ const struct sr_channel_group *cg)
{
uint64_t samplerate, limit_samples, capture_ratio;
int ret;
+ (void)cg;
+
if (sdi->status != SR_ST_ACTIVE)
return SR_ERR_DEV_CLOSED;
return ret;
}
-static int config_list(int key, GVariant **data, const struct sr_dev_inst *sdi)
+static int config_list(int key, GVariant **data, const struct sr_dev_inst *sdi,
+ const struct sr_channel_group *cg)
{
- GVariant *gvar;
+ GVariant *gvar, *grange[2];
GVariantBuilder gvb;
int ret;
(void)sdi;
+ (void)cg;
ret = SR_OK;
g_variant_builder_add(&gvb, "{sv}", "samplerates", gvar);
*data = g_variant_builder_end(&gvb);
break;
- case SR_CONF_TRIGGER_TYPE:
- *data = g_variant_new_string(TRIGGER_TYPES);
+ case SR_CONF_TRIGGER_MATCH:
+ *data = g_variant_new_fixed_array(G_VARIANT_TYPE_INT32,
+ trigger_matches, ARRAY_SIZE(trigger_matches),
+ sizeof(int32_t));
+ break;
+ case SR_CONF_LIMIT_SAMPLES:
+ grange[0] = g_variant_new_uint64(0);
+ grange[1] = g_variant_new_uint64(MAX_SAMPLES);
+ *data = g_variant_new_tuple(grange, 2);
break;
default:
return SR_ERR_NA;
static int dev_acquisition_start(const struct sr_dev_inst *sdi, void *cb_data)
{
- const struct libusb_pollfd **pfd;
struct drv_context *drvc;
struct dev_context *devc;
uint16_t trigger_bytes, tmp;
* The trigger must be configured first because the calculation of the
* pre and post trigger samples depends on a configured trigger.
*/
- sl2_configure_trigger(sdi);
+ sl2_convert_trigger(sdi);
sl2_calculate_trigger_samples(sdi);
trigger_bytes = devc->pre_trigger_bytes + devc->post_trigger_bytes;
if (trigger_bytes % PACKET_NUM_SAMPLE_BYTES != 0)
devc->num_sample_packets++;
- devc->num_enabled_probes = 0;
+ devc->num_enabled_channels = 0;
/*
- * Count the number of enabled probes and number them for a sequential
+ * Count the number of enabled channels and number them for a sequential
* access.
*/
- for (i = 0, j = 0; i < NUM_PROBES; i++) {
- if (devc->probes[i]->enabled) {
- devc->num_enabled_probes++;
- devc->probe_map[j] = i;
+ for (i = 0, j = 0; i < NUM_CHANNELS; i++) {
+ if (devc->channels[i]->enabled) {
+ devc->num_enabled_channels++;
+ devc->channel_map[j] = i;
j++;
}
}
- sr_dbg("Number of enabled probes: %i.", devc->num_enabled_probes);
+ sr_dbg("Number of enabled channels: %i.", devc->num_enabled_channels);
/* Set up the transfer buffer for the acquisition. */
devc->xfer_data_out[0] = CMD_SAMPLE;
tmp = GUINT16_TO_LE(devc->after_trigger_delay);
memcpy(devc->xfer_data_out + 10, &tmp, sizeof(tmp));
- if (!(pfd = libusb_get_pollfds(drvc->sr_ctx->libusb_ctx))) {
- sr_err("libusb_get_pollfds failed.");
- return SR_ERR;
- }
-
- /* Count the number of file descriptors. */
- for (devc->num_usbfd = 0; pfd[devc->num_usbfd]; devc->num_usbfd++);
-
- if (!(devc->usbfd = g_try_malloc(devc->num_usbfd * sizeof(int)))) {
- sr_err("File descriptor array malloc failed.");
- free(pfd);
- return SR_ERR_MALLOC;
- }
-
if ((ret = libusb_submit_transfer(devc->xfer_out)) != 0) {
sr_err("Submit transfer failed: %s.", libusb_error_name(ret));
- g_free(devc->usbfd);
return SR_ERR;
}
- for (i = 0; i < devc->num_usbfd; i++) {
- sr_source_add(pfd[i]->fd, pfd[i]->events, 100,
- ikalogic_scanalogic2_receive_data, (void *)sdi);
-
- devc->usbfd[i] = pfd[i]->fd;
- }
-
- free(pfd);
+ usb_source_add(drvc->sr_ctx, 100, ikalogic_scanalogic2_receive_data, (void *)sdi);
sr_dbg("Acquisition started successfully.");