#include <libusb.h>
#include <libsigrok/libsigrok.h>
#include "libsigrok-internal.h"
-#include "dso.h"
+#include "protocol.h"
/* Max time in ms before we want to check on USB events */
/* TODO tune this properly */
#define TICK 1
-#define NUM_TIMEBASE 10
-#define NUM_VDIV 8
+#define NUM_TIMEBASE 10
+#define NUM_VDIV 8
#define NUM_BUFFER_SIZES 2
static const uint32_t devopts[] = {
SR_CONF_CONTINUOUS,
- SR_CONF_LIMIT_FRAMES | SR_CONF_SET,
SR_CONF_CONN | SR_CONF_GET,
+ SR_CONF_LIMIT_FRAMES | SR_CONF_SET,
SR_CONF_TIMEBASE | SR_CONF_GET | SR_CONF_SET | SR_CONF_LIST,
- SR_CONF_BUFFERSIZE | SR_CONF_GET | SR_CONF_SET | SR_CONF_LIST,
+ SR_CONF_NUM_HDIV | SR_CONF_GET,
+ SR_CONF_HORIZ_TRIGGERPOS | SR_CONF_GET | SR_CONF_SET,
SR_CONF_TRIGGER_SOURCE | SR_CONF_GET | SR_CONF_SET | SR_CONF_LIST,
SR_CONF_TRIGGER_SLOPE | SR_CONF_GET | SR_CONF_SET,
- SR_CONF_HORIZ_TRIGGERPOS | SR_CONF_GET | SR_CONF_SET,
- SR_CONF_NUM_HDIV | SR_CONF_GET,
+ SR_CONF_BUFFERSIZE | SR_CONF_GET | SR_CONF_SET | SR_CONF_LIST,
SR_CONF_NUM_VDIV | SR_CONF_GET,
};
static const uint32_t devopts_cg[] = {
- SR_CONF_FILTER | SR_CONF_GET | SR_CONF_SET | SR_CONF_LIST,
SR_CONF_VDIV | SR_CONF_GET | SR_CONF_SET | SR_CONF_LIST,
SR_CONF_COUPLING | SR_CONF_GET | SR_CONF_SET | SR_CONF_LIST,
+ SR_CONF_FILTER | SR_CONF_GET | SR_CONF_SET | SR_CONF_LIST,
};
static const char *channel_names[] = {
"GND",
};
-static int dev_acquisition_stop(struct sr_dev_inst *sdi);
-
static struct sr_dev_inst *dso_dev_new(const struct dso_profile *prof)
{
struct sr_dev_inst *sdi;
return SR_OK;
}
-static void clear_dev_context(void *priv)
+static void clear_helper(void *priv)
{
struct dev_context *devc;
devc = priv;
g_free(devc->triggersource);
g_slist_free(devc->enabled_channels);
-
}
static int dev_clear(const struct sr_dev_driver *di)
{
- return std_dev_clear(di, clear_dev_context);
+ return std_dev_clear_with_callback(di, clear_helper);
}
static GSList *scan(struct sr_dev_driver *di, GSList *options)
err = libusb_claim_interface(usb->devhdl, USB_INTERFACE);
if (err != 0) {
sr_err("Unable to claim interface: %s.",
- libusb_error_name(err));
+ libusb_error_name(err));
return SR_ERR;
}
unsigned int i;
const char *tmp_str;
- if (sdi->status != SR_ST_ACTIVE)
- return SR_ERR_DEV_CLOSED;
-
ret = SR_OK;
devc = sdi->priv;
if (!cg) {
num_samples = transfer->actual_length / 2;
sr_spew("Got %d-%d/%d samples in frame.", devc->samp_received + 1,
- devc->samp_received + num_samples, devc->framesize);
+ devc->samp_received + num_samples, devc->framesize);
/*
* The device always sends a full frame, but the beginning of the frame
/* The rest of this chunk starts with the trigger point. */
sr_dbg("Reached trigger point, %d samples buffered.",
- devc->samp_buffered);
+ devc->samp_buffered);
/* Avoid the corner case where the chunk ended at
* exactly the trigger point. */
/* That was the last chunk in this frame. Send the buffered
* pre-trigger samples out now, in one big chunk. */
sr_dbg("End of frame, sending %d pre-trigger buffered samples.",
- devc->samp_buffered);
+ devc->samp_buffered);
send_chunk(sdi, devc->framebuf, devc->samp_buffered);
/* Mark the end of this frame. */
struct sr_dev_driver *di = sdi->driver;
struct drv_context *drvc = di->context;
- if (sdi->status != SR_ST_ACTIVE)
- return SR_ERR_DEV_CLOSED;
-
devc = sdi->priv;
if (configure_channels(sdi) != SR_OK) {
{
struct dev_context *devc;
- if (sdi->status != SR_ST_ACTIVE)
- return SR_ERR;
-
devc = sdi->priv;
devc->dev_state = STOPPING;