]> sigrok.org Git - libsigrok.git/commitdiff
sr: Consistent ctx name for per-dev-inst context.
authorUwe Hermann <redacted>
Sat, 18 Feb 2012 17:07:42 +0000 (18:07 +0100)
committerUwe Hermann <redacted>
Sat, 18 Feb 2012 17:07:42 +0000 (18:07 +0100)
12 files changed:
hardware/alsa/alsa.c
hardware/asix-sigma/asix-sigma.c
hardware/asix-sigma/asix-sigma.h
hardware/chronovu-la8/chronovu-la8.c
hardware/demo/demo.c
hardware/link-mso19/link-mso19.c
hardware/link-mso19/link-mso19.h
hardware/openbench-logic-sniffer/ols.c
hardware/openbench-logic-sniffer/ols.h
hardware/saleae-logic/saleae-logic.c
hardware/saleae-logic/saleae-logic.h
hardware/zeroplus-logic-cube/zeroplus.c

index 9e33d4309be1302aee90e7b0e630e33c01348dbb..80c0e11d4c899f1a810f07646092289ce873fbf5 100644 (file)
@@ -56,7 +56,8 @@ static const char *probe_names[NUM_PROBES + 1] = {
 
 static GSList *dev_insts = NULL;
 
-struct alsa {
+/* Private, per-device-instance driver context. */
+struct context {
        uint64_t cur_rate;
        uint64_t limit_samples;
        snd_pcm_t *capture_handle;
@@ -67,57 +68,58 @@ struct alsa {
 static int hw_init(const char *devinfo)
 {
        struct sr_dev_inst *sdi;
-       struct alsa *alsa;
+       struct context *ctx;
 
        /* Avoid compiler warnings. */
-       devinfo = devinfo;
+       (void)devinfo;
 
-       if (!(alsa = g_try_malloc0(sizeof(struct alsa)))) {
-               sr_err("alsa: %s: alsa malloc failed", __func__);
+       if (!(ctx = g_try_malloc0(sizeof(struct context)))) {
+               sr_err("alsa: %s: ctx malloc failed", __func__);
                return 0;
        }
 
-       sdi = sr_dev_inst_new(0, SR_ST_ACTIVE, "alsa", NULL, NULL);
-       if (!sdi)
-               goto free_alsa;
+       if (!(sdi = sr_dev_inst_new(0, SR_ST_ACTIVE, "alsa", NULL, NULL))) {
+               sr_err("alsa: %s: sdi was NULL", __func__);
+               goto free_ctx;
+       }
 
-       sdi->priv = alsa;
+       sdi->priv = ctx;
 
        dev_insts = g_slist_append(dev_insts, sdi);
 
        return 1;
 
-free_alsa:
-       g_free(alsa);
+free_ctx:
+       g_free(ctx);
        return 0;
 }
 
 static int hw_dev_open(int dev_index)
 {
        struct sr_dev_inst *sdi;
-       struct alsa *alsa;
+       struct context *ctx;
        int err;
 
        if (!(sdi = sr_dev_inst_get(dev_insts, dev_index)))
                return SR_ERR;
-       alsa = sdi->priv;
+       ctx = sdi->priv;
 
-       err = snd_pcm_open(&alsa->capture_handle, AUDIO_DEV,
-                                       SND_PCM_STREAM_CAPTURE, 0);
+       err = snd_pcm_open(&ctx->capture_handle, AUDIO_DEV,
+                          SND_PCM_STREAM_CAPTURE, 0);
        if (err < 0) {
                sr_err("alsa: can't open audio device %s (%s)", AUDIO_DEV,
                       snd_strerror(err));
                return SR_ERR;
        }
 
-       err = snd_pcm_hw_params_malloc(&alsa->hw_params);
+       err = snd_pcm_hw_params_malloc(&ctx->hw_params);
        if (err < 0) {
                sr_err("alsa: can't allocate hardware parameter structure (%s)",
                       snd_strerror(err));
                return SR_ERR;
        }
 
-       err = snd_pcm_hw_params_any(alsa->capture_handle, alsa->hw_params);
+       err = snd_pcm_hw_params_any(ctx->capture_handle, ctx->hw_params);
        if (err < 0) {
                sr_err("alsa: can't initialize hardware parameter structure "
                       "(%s)", snd_strerror(err));
@@ -130,23 +132,23 @@ static int hw_dev_open(int dev_index)
 static int hw_dev_close(int dev_index)
 {
        struct sr_dev_inst *sdi;
-       struct alsa *alsa;
+       struct context *ctx;
 
        if (!(sdi = sr_dev_inst_get(dev_insts, dev_index))) {
                sr_err("alsa: %s: sdi was NULL", __func__);
                return SR_ERR; /* TODO: SR_ERR_ARG? */
        }
 
-       if (!(alsa = sdi->priv)) {
+       if (!(ctx = sdi->priv)) {
                sr_err("alsa: %s: sdi->priv was NULL", __func__);
                return SR_ERR; /* TODO: SR_ERR_ARG? */
        }
 
        // TODO: Return values of snd_*?
-       if (alsa->hw_params)
-               snd_pcm_hw_params_free(alsa->hw_params);
-       if (alsa->capture_handle)
-               snd_pcm_close(alsa->capture_handle);
+       if (ctx->hw_params)
+               snd_pcm_hw_params_free(ctx->hw_params);
+       if (ctx->capture_handle)
+               snd_pcm_close(ctx->capture_handle);
 
        return SR_OK;
 }
@@ -168,12 +170,12 @@ static int hw_cleanup(void)
 static void *hw_dev_info_get(int dev_index, int dev_info_id)
 {
        struct sr_dev_inst *sdi;
-       struct alsa *alsa;
+       struct context *ctx;
        void *info = NULL;
 
        if (!(sdi = sr_dev_inst_get(dev_insts, dev_index)))
                return NULL;
-       alsa = sdi->priv;
+       ctx = sdi->priv;
 
        switch (dev_info_id) {
        case SR_DI_INST:
@@ -186,7 +188,7 @@ static void *hw_dev_info_get(int dev_index, int dev_info_id)
                info = probe_names;
                break;
        case SR_DI_CUR_SAMPLERATE:
-               info = &alsa->cur_rate;
+               info = &ctx->cur_rate;
                break;
        // case SR_DI_PROBE_TYPE:
        //      info = GINT_TO_POINTER(SR_PROBE_TYPE_ANALOG);
@@ -212,20 +214,20 @@ static int *hw_hwcap_get_all(void)
 static int hw_dev_config_set(int dev_index, int hwcap, void *value)
 {
        struct sr_dev_inst *sdi;
-       struct alsa *alsa;
+       struct context *ctx;
 
        if (!(sdi = sr_dev_inst_get(dev_insts, dev_index)))
                return SR_ERR;
-       alsa = sdi->priv;
+       ctx = sdi->priv;
 
        switch (hwcap) {
        case SR_HWCAP_PROBECONFIG:
                return SR_OK;
        case SR_HWCAP_SAMPLERATE:
-               alsa->cur_rate = *(uint64_t *) value;
+               ctx->cur_rate = *(uint64_t *)value;
                return SR_OK;
        case SR_HWCAP_LIMIT_SAMPLES:
-               alsa->limit_samples = *(uint64_t *) value;
+               ctx->limit_samples = *(uint64_t *)value;
                return SR_OK;
        default:
                return SR_ERR;
@@ -235,7 +237,7 @@ static int hw_dev_config_set(int dev_index, int hwcap, void *value)
 static int receive_data(int fd, int revents, void *user_data)
 {
        struct sr_dev_inst *sdi = user_data;
-       struct alsa *alsa = sdi->priv;
+       struct context *ctx = sdi->priv;
        struct sr_datafeed_packet packet;
        struct sr_analog_sample *sample;
        unsigned int sample_size = sizeof(struct sr_analog_sample) +
@@ -249,8 +251,8 @@ static int receive_data(int fd, int revents, void *user_data)
 
        do {
                memset(inb, 0, sizeof(inb));
-               count = snd_pcm_readi(alsa->capture_handle, inb,
-                       MIN(4096/4, alsa->limit_samples));
+               count = snd_pcm_readi(ctx->capture_handle, inb,
+                       MIN(4096 / 4, ctx->limit_samples));
                if (count < 1) {
                        sr_err("alsa: Failed to read samples");
                        return FALSE;
@@ -268,7 +270,7 @@ static int receive_data(int fd, int revents, void *user_data)
 
                        for (x = 0; x < NUM_PROBES; x++) {
                                sample->probes[x].val =
-                                       *(uint16_t *) (inb + (i * 4) + (x * 2));
+                                       *(uint16_t *)(inb + (i * 4) + (x * 2));
                                sample->probes[x].val &= ((1 << 16) - 1);
                                sample->probes[x].res = 16;
                        }
@@ -280,9 +282,9 @@ static int receive_data(int fd, int revents, void *user_data)
                packet.payload = outb;
                sr_session_bus(user_data, &packet);
                g_free(outb);
-               alsa->limit_samples -= count;
+               ctx->limit_samples -= count;
 
-       } while (alsa->limit_samples > 0);
+       } while (ctx->limit_samples > 0);
 
        packet.type = SR_DF_END;
        sr_session_bus(user_data, &packet);
@@ -293,7 +295,7 @@ static int receive_data(int fd, int revents, void *user_data)
 static int hw_dev_acquisition_start(int dev_index, gpointer session_dev_id)
 {
        struct sr_dev_inst *sdi;
-       struct alsa *alsa;
+       struct context *ctx;
        struct sr_datafeed_packet packet;
        struct sr_datafeed_header header;
        struct pollfd *ufds;
@@ -302,51 +304,51 @@ static int hw_dev_acquisition_start(int dev_index, gpointer session_dev_id)
 
        if (!(sdi = sr_dev_inst_get(dev_insts, dev_index)))
                return SR_ERR;
-       alsa = sdi->priv;
+       ctx = sdi->priv;
 
-       err = snd_pcm_hw_params_set_access(alsa->capture_handle,
-                       alsa->hw_params, SND_PCM_ACCESS_RW_INTERLEAVED);
+       err = snd_pcm_hw_params_set_access(ctx->capture_handle,
+                       ctx->hw_params, SND_PCM_ACCESS_RW_INTERLEAVED);
        if (err < 0) {
                sr_err("alsa: can't set access type (%s)", snd_strerror(err));
                return SR_ERR;
        }
 
        /* FIXME: Hardcoded for 16bits */
-       err = snd_pcm_hw_params_set_format(alsa->capture_handle,
-                       alsa->hw_params, SND_PCM_FORMAT_S16_LE);
+       err = snd_pcm_hw_params_set_format(ctx->capture_handle,
+                       ctx->hw_params, SND_PCM_FORMAT_S16_LE);
        if (err < 0) {
                sr_err("alsa: can't set sample format (%s)", snd_strerror(err));
                return SR_ERR;
        }
 
-       err = snd_pcm_hw_params_set_rate_near(alsa->capture_handle,
-                       alsa->hw_params, (unsigned int *) &alsa->cur_rate, 0);
+       err = snd_pcm_hw_params_set_rate_near(ctx->capture_handle,
+                       ctx->hw_params, (unsigned int *)&ctx->cur_rate, 0);
        if (err < 0) {
                sr_err("alsa: can't set sample rate (%s)", snd_strerror(err));
                return SR_ERR;
        }
 
-       err = snd_pcm_hw_params_set_channels(alsa->capture_handle,
-                       alsa->hw_params, NUM_PROBES);
+       err = snd_pcm_hw_params_set_channels(ctx->capture_handle,
+                       ctx->hw_params, NUM_PROBES);
        if (err < 0) {
                sr_err("alsa: can't set channel count (%s)", snd_strerror(err));
                return SR_ERR;
        }
 
-       err = snd_pcm_hw_params(alsa->capture_handle, alsa->hw_params);
+       err = snd_pcm_hw_params(ctx->capture_handle, ctx->hw_params);
        if (err < 0) {
                sr_err("alsa: can't set parameters (%s)", snd_strerror(err));
                return SR_ERR;
        }
 
-       err = snd_pcm_prepare(alsa->capture_handle);
+       err = snd_pcm_prepare(ctx->capture_handle);
        if (err < 0) {
                sr_err("alsa: can't prepare audio interface for use (%s)",
                       snd_strerror(err));
                return SR_ERR;
        }
 
-       count = snd_pcm_poll_descriptors_count(alsa->capture_handle);
+       count = snd_pcm_poll_descriptors_count(ctx->capture_handle);
        if (count < 1) {
                sr_err("alsa: Unable to obtain poll descriptors count");
                return SR_ERR;
@@ -357,7 +359,7 @@ static int hw_dev_acquisition_start(int dev_index, gpointer session_dev_id)
                return SR_ERR_MALLOC;
        }
 
-       err = snd_pcm_poll_descriptors(alsa->capture_handle, ufds, count);
+       err = snd_pcm_poll_descriptors(ctx->capture_handle, ufds, count);
        if (err < 0) {
                sr_err("alsa: Unable to obtain poll descriptors (%s)",
                       snd_strerror(err));
@@ -365,15 +367,15 @@ static int hw_dev_acquisition_start(int dev_index, gpointer session_dev_id)
                return SR_ERR;
        }
 
-       alsa->session_id = session_dev_id;
+       ctx->session_id = session_dev_id;
        sr_source_add(ufds[0].fd, ufds[0].events, 10, receive_data, sdi);
 
        packet.type = SR_DF_HEADER;
        packet.length = sizeof(struct sr_datafeed_header);
-       packet.payload = (unsigned char *) &header;
+       packet.payload = (unsigned char *)&header;
        header.feed_version = 1;
        gettimeofday(&header.starttime, NULL);
-       header.samplerate = alsa->cur_rate;
+       header.samplerate = ctx->cur_rate;
        header.num_analog_probes = NUM_PROBES;
        header.num_logic_probes = 0;
        header.protocol_id = SR_PROTO_RAW;
index d0427498b2569bfe9ed306b97bc1d02cd9b08dee..bb90b41ae507b5e7262864a0c365d0d800f93831 100644 (file)
@@ -120,27 +120,27 @@ static const char *firmware_files[] = {
 
 static int hw_dev_acquisition_stop(int dev_index, gpointer session_data);
 
-static int sigma_read(void *buf, size_t size, struct sigma *sigma)
+static int sigma_read(void *buf, size_t size, struct context *ctx)
 {
        int ret;
 
-       ret = ftdi_read_data(&sigma->ftdic, (unsigned char *)buf, size);
+       ret = ftdi_read_data(&ctx->ftdic, (unsigned char *)buf, size);
        if (ret < 0) {
                sr_err("sigma: ftdi_read_data failed: %s",
-                      ftdi_get_error_string(&sigma->ftdic));
+                      ftdi_get_error_string(&ctx->ftdic));
        }
 
        return ret;
 }
 
-static int sigma_write(void *buf, size_t size, struct sigma *sigma)
+static int sigma_write(void *buf, size_t size, struct context *ctx)
 {
        int ret;
 
-       ret = ftdi_write_data(&sigma->ftdic, (unsigned char *)buf, size);
+       ret = ftdi_write_data(&ctx->ftdic, (unsigned char *)buf, size);
        if (ret < 0) {
                sr_err("sigma: ftdi_write_data failed: %s",
-                      ftdi_get_error_string(&sigma->ftdic));
+                      ftdi_get_error_string(&ctx->ftdic));
        } else if ((size_t) ret != size) {
                sr_err("sigma: ftdi_write_data did not complete write\n");
        }
@@ -149,7 +149,7 @@ static int sigma_write(void *buf, size_t size, struct sigma *sigma)
 }
 
 static int sigma_write_register(uint8_t reg, uint8_t *data, size_t len,
-               struct sigma *sigma)
+                               struct context *ctx)
 {
        size_t i;
        uint8_t buf[len + 2];
@@ -163,16 +163,16 @@ static int sigma_write_register(uint8_t reg, uint8_t *data, size_t len,
                buf[idx++] = REG_DATA_HIGH_WRITE | (data[i] >> 4);
        }
 
-       return sigma_write(buf, idx, sigma);
+       return sigma_write(buf, idx, ctx);
 }
 
-static int sigma_set_register(uint8_t reg, uint8_t value, struct sigma *sigma)
+static int sigma_set_register(uint8_t reg, uint8_t value, struct context *ctx)
 {
-       return sigma_write_register(reg, &value, 1, sigma);
+       return sigma_write_register(reg, &value, 1, ctx);
 }
 
 static int sigma_read_register(uint8_t reg, uint8_t *data, size_t len,
-               struct sigma *sigma)
+                              struct context *ctx)
 {
        uint8_t buf[3];
 
@@ -180,16 +180,16 @@ static int sigma_read_register(uint8_t reg, uint8_t *data, size_t len,
        buf[1] = REG_ADDR_HIGH | (reg >> 4);
        buf[2] = REG_READ_ADDR;
 
-       sigma_write(buf, sizeof(buf), sigma);
+       sigma_write(buf, sizeof(buf), ctx);
 
-       return sigma_read(data, len, sigma);
+       return sigma_read(data, len, ctx);
 }
 
-static uint8_t sigma_get_register(uint8_t reg, struct sigma *sigma)
+static uint8_t sigma_get_register(uint8_t reg, struct context *ctx)
 {
        uint8_t value;
 
-       if (1 != sigma_read_register(reg, &value, 1, sigma)) {
+       if (1 != sigma_read_register(reg, &value, 1, ctx)) {
                sr_err("sigma: sigma_get_register: 1 byte expected");
                return 0;
        }
@@ -198,7 +198,7 @@ static uint8_t sigma_get_register(uint8_t reg, struct sigma *sigma)
 }
 
 static int sigma_read_pos(uint32_t *stoppos, uint32_t *triggerpos,
-               struct sigma *sigma)
+                         struct context *ctx)
 {
        uint8_t buf[] = {
                REG_ADDR_LOW | READ_TRIGGER_POS_LOW,
@@ -212,9 +212,9 @@ static int sigma_read_pos(uint32_t *stoppos, uint32_t *triggerpos,
        };
        uint8_t result[6];
 
-       sigma_write(buf, sizeof(buf), sigma);
+       sigma_write(buf, sizeof(buf), ctx);
 
-       sigma_read(result, sizeof(result), sigma);
+       sigma_read(result, sizeof(result), ctx);
 
        *triggerpos = result[0] | (result[1] << 8) | (result[2] << 16);
        *stoppos = result[3] | (result[4] << 8) | (result[5] << 16);
@@ -230,7 +230,7 @@ static int sigma_read_pos(uint32_t *stoppos, uint32_t *triggerpos,
 }
 
 static int sigma_read_dram(uint16_t startchunk, size_t numchunks,
-               uint8_t *data, struct sigma *sigma)
+                          uint8_t *data, struct context *ctx)
 {
        size_t i;
        uint8_t buf[4096];
@@ -239,7 +239,7 @@ static int sigma_read_dram(uint16_t startchunk, size_t numchunks,
        /* Send the startchunk. Index start with 1. */
        buf[0] = startchunk >> 8;
        buf[1] = startchunk & 0xff;
-       sigma_write_register(WRITE_MEMROW, buf, 2, sigma);
+       sigma_write_register(WRITE_MEMROW, buf, 2, ctx);
 
        /* Read the DRAM. */
        buf[idx++] = REG_DRAM_BLOCK;
@@ -256,13 +256,13 @@ static int sigma_read_dram(uint16_t startchunk, size_t numchunks,
                        buf[idx++] = REG_DRAM_WAIT_ACK;
        }
 
-       sigma_write(buf, idx, sigma);
+       sigma_write(buf, idx, ctx);
 
-       return sigma_read(data, numchunks * CHUNK_SIZE, sigma);
+       return sigma_read(data, numchunks * CHUNK_SIZE, ctx);
 }
 
 /* Upload trigger look-up tables to Sigma. */
-static int sigma_write_trigger_lut(struct triggerlut *lut, struct sigma *sigma)
+static int sigma_write_trigger_lut(struct triggerlut *lut, struct context *ctx)
 {
        int i;
        uint8_t tmp[2];
@@ -309,13 +309,13 @@ static int sigma_write_trigger_lut(struct triggerlut *lut, struct sigma *sigma)
                        tmp[1] |= 0x80;
 
                sigma_write_register(WRITE_TRIGGER_SELECT0, tmp, sizeof(tmp),
-                                    sigma);
-               sigma_set_register(WRITE_TRIGGER_SELECT1, 0x30 | i, sigma);
+                                    ctx);
+               sigma_set_register(WRITE_TRIGGER_SELECT1, 0x30 | i, ctx);
        }
 
        /* Send the parameters */
        sigma_write_register(WRITE_TRIGGER_SELECT0, (uint8_t *) &lut->params,
-                            sizeof(lut->params), sigma);
+                            sizeof(lut->params), ctx);
 
        return SR_OK;
 }
@@ -418,31 +418,31 @@ static int bin2bitbang(const char *filename,
 static int hw_init(const char *devinfo)
 {
        struct sr_dev_inst *sdi;
-       struct sigma *sigma;
+       struct context *ctx;
 
        /* Avoid compiler warnings. */
        (void)devinfo;
 
-       if (!(sigma = g_try_malloc(sizeof(struct sigma)))) {
-               sr_err("sigma: %s: sigma malloc failed", __func__);
+       if (!(ctx = g_try_malloc(sizeof(struct context)))) {
+               sr_err("sigma: %s: ctx malloc failed", __func__);
                return 0; /* FIXME: Should be SR_ERR_MALLOC. */
        }
 
-       ftdi_init(&sigma->ftdic);
+       ftdi_init(&ctx->ftdic);
 
        /* Look for SIGMAs. */
-       if (ftdi_usb_open_desc(&sigma->ftdic, USB_VENDOR, USB_PRODUCT,
+       if (ftdi_usb_open_desc(&ctx->ftdic, USB_VENDOR, USB_PRODUCT,
                               USB_DESCRIPTION, NULL) < 0)
                goto free;
 
-       sigma->cur_samplerate = 0;
-       sigma->period_ps = 0;
-       sigma->limit_msec = 0;
-       sigma->cur_firmware = -1;
-       sigma->num_probes = 0;
-       sigma->samples_per_event = 0;
-       sigma->capture_ratio = 50;
-       sigma->use_triggers = 0;
+       ctx->cur_samplerate = 0;
+       ctx->period_ps = 0;
+       ctx->limit_msec = 0;
+       ctx->cur_firmware = -1;
+       ctx->num_probes = 0;
+       ctx->samples_per_event = 0;
+       ctx->capture_ratio = 50;
+       ctx->use_triggers = 0;
 
        /* Register SIGMA device. */
        if (!(sdi = sr_dev_inst_new(0, SR_ST_INITIALIZING, USB_VENDOR_NAME,
@@ -451,20 +451,21 @@ static int hw_init(const char *devinfo)
                goto free;
        }
 
-       sdi->priv = sigma;
+       sdi->priv = ctx;
 
        dev_insts = g_slist_append(dev_insts, sdi);
 
        /* We will open the device again when we need it. */
-       ftdi_usb_close(&sigma->ftdic);
+       ftdi_usb_close(&ctx->ftdic);
 
        return 1;
+
 free:
-       g_free(sigma);
+       g_free(ctx);
        return 0;
 }
 
-static int upload_firmware(int firmware_idx, struct sigma *sigma)
+static int upload_firmware(int firmware_idx, struct context *ctx)
 {
        int ret;
        unsigned char *buf;
@@ -474,40 +475,40 @@ static int upload_firmware(int firmware_idx, struct sigma *sigma)
        char firmware_path[128];
 
        /* Make sure it's an ASIX SIGMA. */
-       if ((ret = ftdi_usb_open_desc(&sigma->ftdic,
+       if ((ret = ftdi_usb_open_desc(&ctx->ftdic,
                USB_VENDOR, USB_PRODUCT, USB_DESCRIPTION, NULL)) < 0) {
                sr_err("sigma: ftdi_usb_open failed: %s",
-                      ftdi_get_error_string(&sigma->ftdic));
+                      ftdi_get_error_string(&ctx->ftdic));
                return 0;
        }
 
-       if ((ret = ftdi_set_bitmode(&sigma->ftdic, 0xdf, BITMODE_BITBANG)) < 0) {
+       if ((ret = ftdi_set_bitmode(&ctx->ftdic, 0xdf, BITMODE_BITBANG)) < 0) {
                sr_err("sigma: ftdi_set_bitmode failed: %s",
-                      ftdi_get_error_string(&sigma->ftdic));
+                      ftdi_get_error_string(&ctx->ftdic));
                return 0;
        }
 
        /* Four times the speed of sigmalogan - Works well. */
-       if ((ret = ftdi_set_baudrate(&sigma->ftdic, 750000)) < 0) {
+       if ((ret = ftdi_set_baudrate(&ctx->ftdic, 750000)) < 0) {
                sr_err("sigma: ftdi_set_baudrate failed: %s",
-                      ftdi_get_error_string(&sigma->ftdic));
+                      ftdi_get_error_string(&ctx->ftdic));
                return 0;
        }
 
        /* Force the FPGA to reboot. */
-       sigma_write(suicide, sizeof(suicide), sigma);
-       sigma_write(suicide, sizeof(suicide), sigma);
-       sigma_write(suicide, sizeof(suicide), sigma);
-       sigma_write(suicide, sizeof(suicide), sigma);
+       sigma_write(suicide, sizeof(suicide), ctx);
+       sigma_write(suicide, sizeof(suicide), ctx);
+       sigma_write(suicide, sizeof(suicide), ctx);
+       sigma_write(suicide, sizeof(suicide), ctx);
 
        /* Prepare to upload firmware (FPGA specific). */
-       sigma_write(init, sizeof(init), sigma);
+       sigma_write(init, sizeof(init), ctx);
 
-       ftdi_usb_purge_buffers(&sigma->ftdic);
+       ftdi_usb_purge_buffers(&ctx->ftdic);
 
        /* Wait until the FPGA asserts INIT_B. */
        while (1) {
-               ret = sigma_read(result, 1, sigma);
+               ret = sigma_read(result, 1, ctx);
                if (result[0] & 0x20)
                        break;
        }
@@ -523,34 +524,34 @@ static int upload_firmware(int firmware_idx, struct sigma *sigma)
        }
 
        /* Upload firmare. */
-       sigma_write(buf, buf_size, sigma);
+       sigma_write(buf, buf_size, ctx);
 
        g_free(buf);
 
-       if ((ret = ftdi_set_bitmode(&sigma->ftdic, 0x00, BITMODE_RESET)) < 0) {
+       if ((ret = ftdi_set_bitmode(&ctx->ftdic, 0x00, BITMODE_RESET)) < 0) {
                sr_err("sigma: ftdi_set_bitmode failed: %s",
-                      ftdi_get_error_string(&sigma->ftdic));
+                      ftdi_get_error_string(&ctx->ftdic));
                return SR_ERR;
        }
 
-       ftdi_usb_purge_buffers(&sigma->ftdic);
+       ftdi_usb_purge_buffers(&ctx->ftdic);
 
        /* Discard garbage. */
-       while (1 == sigma_read(&pins, 1, sigma))
+       while (1 == sigma_read(&pins, 1, ctx))
                ;
 
        /* Initialize the logic analyzer mode. */
-       sigma_write(logic_mode_start, sizeof(logic_mode_start), sigma);
+       sigma_write(logic_mode_start, sizeof(logic_mode_start), ctx);
 
        /* Expect a 3 byte reply. */
-       ret = sigma_read(result, 3, sigma);
+       ret = sigma_read(result, 3, ctx);
        if (ret != 3 ||
            result[0] != 0xa6 || result[1] != 0x55 || result[2] != 0xaa) {
                sr_err("sigma: Configuration failed. Invalid reply received.");
                return SR_ERR;
        }
 
-       sigma->cur_firmware = firmware_idx;
+       ctx->cur_firmware = firmware_idx;
 
        return SR_OK;
 }
@@ -558,20 +559,20 @@ static int upload_firmware(int firmware_idx, struct sigma *sigma)
 static int hw_dev_open(int dev_index)
 {
        struct sr_dev_inst *sdi;
-       struct sigma *sigma;
+       struct context *ctx;
        int ret;
 
        if (!(sdi = sr_dev_inst_get(dev_insts, dev_index)))
                return SR_ERR;
 
-       sigma = sdi->priv;
+       ctx = sdi->priv;
 
        /* Make sure it's an ASIX SIGMA. */
-       if ((ret = ftdi_usb_open_desc(&sigma->ftdic,
+       if ((ret = ftdi_usb_open_desc(&ctx->ftdic,
                USB_VENDOR, USB_PRODUCT, USB_DESCRIPTION, NULL)) < 0) {
 
                sr_err("sigma: ftdi_usb_open failed: %s",
-                      ftdi_get_error_string(&sigma->ftdic));
+                      ftdi_get_error_string(&ctx->ftdic));
 
                return 0;
        }
@@ -584,7 +585,7 @@ static int hw_dev_open(int dev_index)
 static int set_samplerate(struct sr_dev_inst *sdi, uint64_t samplerate)
 {
        int i, ret;
-       struct sigma *sigma = sdi->priv;
+       struct context *ctx = sdi->priv;
 
        for (i = 0; supported_samplerates[i]; i++) {
                if (supported_samplerates[i] == samplerate)
@@ -594,22 +595,22 @@ static int set_samplerate(struct sr_dev_inst *sdi, uint64_t samplerate)
                return SR_ERR_SAMPLERATE;
 
        if (samplerate <= SR_MHZ(50)) {
-               ret = upload_firmware(0, sigma);
-               sigma->num_probes = 16;
+               ret = upload_firmware(0, ctx);
+               ctx->num_probes = 16;
        }
        if (samplerate == SR_MHZ(100)) {
-               ret = upload_firmware(1, sigma);
-               sigma->num_probes = 8;
+               ret = upload_firmware(1, ctx);
+               ctx->num_probes = 8;
        }
        else if (samplerate == SR_MHZ(200)) {
-               ret = upload_firmware(2, sigma);
-               sigma->num_probes = 4;
+               ret = upload_firmware(2, ctx);
+               ctx->num_probes = 4;
        }
 
-       sigma->cur_samplerate = samplerate;
-       sigma->period_ps = 1000000000000 / samplerate;
-       sigma->samples_per_event = 16 / sigma->num_probes;
-       sigma->state.state = SIGMA_IDLE;
+       ctx->cur_samplerate = samplerate;
+       ctx->period_ps = 1000000000000 / samplerate;
+       ctx->samples_per_event = 16 / ctx->num_probes;
+       ctx->state.state = SIGMA_IDLE;
 
        sr_info("sigma: Firmware uploaded");
 
@@ -626,13 +627,13 @@ static int set_samplerate(struct sr_dev_inst *sdi, uint64_t samplerate)
  */
 static int configure_probes(struct sr_dev_inst *sdi, GSList *probes)
 {
-       struct sigma *sigma = sdi->priv;
+       struct context *ctx = sdi->priv;
        struct sr_probe *probe;
        GSList *l;
        int trigger_set = 0;
        int probebit;
 
-       memset(&sigma->trigger, 0, sizeof(struct sigma_trigger));
+       memset(&ctx->trigger, 0, sizeof(struct sigma_trigger));
 
        for (l = probes; l; l = l->next) {
                probe = (struct sr_probe *)l->data;
@@ -641,7 +642,7 @@ static int configure_probes(struct sr_dev_inst *sdi, GSList *probes)
                if (!probe->enabled || !probe->trigger)
                        continue;
 
-               if (sigma->cur_samplerate >= SR_MHZ(100)) {
+               if (ctx->cur_samplerate >= SR_MHZ(100)) {
                        /* Fast trigger support. */
                        if (trigger_set) {
                                sr_err("sigma: ASIX SIGMA only supports a single "
@@ -649,9 +650,9 @@ static int configure_probes(struct sr_dev_inst *sdi, GSList *probes)
                                return SR_ERR;
                        }
                        if (probe->trigger[0] == 'f')
-                               sigma->trigger.fallingmask |= probebit;
+                               ctx->trigger.fallingmask |= probebit;
                        else if (probe->trigger[0] == 'r')
-                               sigma->trigger.risingmask |= probebit;
+                               ctx->trigger.risingmask |= probebit;
                        else {
                                sr_err("sigma: ASIX SIGMA only supports "
                                       "rising/falling trigger in 100 "
@@ -663,27 +664,27 @@ static int configure_probes(struct sr_dev_inst *sdi, GSList *probes)
                } else {
                        /* Simple trigger support (event). */
                        if (probe->trigger[0] == '1') {
-                               sigma->trigger.simplevalue |= probebit;
-                               sigma->trigger.simplemask |= probebit;
+                               ctx->trigger.simplevalue |= probebit;
+                               ctx->trigger.simplemask |= probebit;
                        }
                        else if (probe->trigger[0] == '0') {
-                               sigma->trigger.simplevalue &= ~probebit;
-                               sigma->trigger.simplemask |= probebit;
+                               ctx->trigger.simplevalue &= ~probebit;
+                               ctx->trigger.simplemask |= probebit;
                        }
                        else if (probe->trigger[0] == 'f') {
-                               sigma->trigger.fallingmask |= probebit;
+                               ctx->trigger.fallingmask |= probebit;
                                ++trigger_set;
                        }
                        else if (probe->trigger[0] == 'r') {
-                               sigma->trigger.risingmask |= probebit;
+                               ctx->trigger.risingmask |= probebit;
                                ++trigger_set;
                        }
 
-                        /*
-                         * Actually, Sigma supports 2 rising/falling triggers,
-                         * but they are ORed and the current trigger syntax
-                         * does not permit ORed triggers.
-                         */
+                       /*
+                        * Actually, Sigma supports 2 rising/falling triggers,
+                        * but they are ORed and the current trigger syntax
+                        * does not permit ORed triggers.
+                        */
                        if (trigger_set > 1) {
                                sr_err("sigma: ASIX SIGMA only supports 1 "
                                       "rising/falling triggers.");
@@ -692,7 +693,7 @@ static int configure_probes(struct sr_dev_inst *sdi, GSList *probes)
                }
 
                if (trigger_set)
-                       sigma->use_triggers = 1;
+                       ctx->use_triggers = 1;
        }
 
        return SR_OK;
@@ -701,21 +702,21 @@ static int configure_probes(struct sr_dev_inst *sdi, GSList *probes)
 static int hw_dev_close(int dev_index)
 {
        struct sr_dev_inst *sdi;
-       struct sigma *sigma;
+       struct context *ctx;
 
        if (!(sdi = sr_dev_inst_get(dev_insts, dev_index))) {
                sr_err("sigma: %s: sdi was NULL", __func__);
                return SR_ERR; /* TODO: SR_ERR_ARG? */
        }
 
-       if (!(sigma = sdi->priv)) {
+       if (!(ctx = sdi->priv)) {
                sr_err("sigma: %s: sdi->priv was NULL", __func__);
                return SR_ERR; /* TODO: SR_ERR_ARG? */
        }
 
        /* TODO */
        if (sdi->status == SR_ST_ACTIVE)
-               ftdi_usb_close(&sigma->ftdic);
+               ftdi_usb_close(&ctx->ftdic);
 
        sdi->status = SR_ST_INACTIVE;
 
@@ -747,7 +748,7 @@ static int hw_cleanup(void)
 static void *hw_dev_info_get(int dev_index, int dev_info_id)
 {
        struct sr_dev_inst *sdi;
-       struct sigma *sigma;
+       struct context *ctx;
        void *info = NULL;
 
        if (!(sdi = sr_dev_inst_get(dev_insts, dev_index))) {
@@ -755,7 +756,7 @@ static void *hw_dev_info_get(int dev_index, int dev_info_id)
                return NULL;
        }
 
-       sigma = sdi->priv;
+       ctx = sdi->priv;
 
        switch (dev_info_id) {
        case SR_DI_INST:
@@ -774,7 +775,7 @@ static void *hw_dev_info_get(int dev_index, int dev_info_id)
                info = (char *)TRIGGER_TYPES;
                break;
        case SR_DI_CUR_SAMPLERATE:
-               info = &sigma->cur_samplerate;
+               info = &ctx->cur_samplerate;
                break;
        }
 
@@ -800,27 +801,27 @@ static int *hw_hwcap_get_all(void)
 static int hw_dev_config_set(int dev_index, int hwcap, void *value)
 {
        struct sr_dev_inst *sdi;
-       struct sigma *sigma;
+       struct context *ctx;
        int ret;
 
        if (!(sdi = sr_dev_inst_get(dev_insts, dev_index)))
                return SR_ERR;
 
-       sigma = sdi->priv;
+       ctx = sdi->priv;
 
        if (hwcap == SR_HWCAP_SAMPLERATE) {
-               ret = set_samplerate(sdi, *(uint64_t*) value);
+               ret = set_samplerate(sdi, *(uint64_t *)value);
        } else if (hwcap == SR_HWCAP_PROBECONFIG) {
                ret = configure_probes(sdi, value);
        } else if (hwcap == SR_HWCAP_LIMIT_MSEC) {
-               sigma->limit_msec = *(uint64_t*) value;
-               if (sigma->limit_msec > 0)
+               ctx->limit_msec = *(uint64_t *)value;
+               if (ctx->limit_msec > 0)
                        ret = SR_OK;
                else
                        ret = SR_ERR;
        } else if (hwcap == SR_HWCAP_CAPTURE_RATIO) {
-               sigma->capture_ratio = *(uint64_t*) value;
-               if (sigma->capture_ratio < 0 || sigma->capture_ratio > 100)
+               ctx->capture_ratio = *(uint64_t *)value;
+               if (ctx->capture_ratio < 0 || ctx->capture_ratio > 100)
                        ret = SR_ERR;
                else
                        ret = SR_OK;
@@ -876,21 +877,21 @@ static int decode_chunk_ts(uint8_t *buf, uint16_t *lastts,
                           uint16_t limit_chunk, void *session_data)
 {
        struct sr_dev_inst *sdi = session_data;
-       struct sigma *sigma = sdi->priv;
+       struct context *ctx = sdi->priv;
        uint16_t tsdiff, ts;
-       uint16_t samples[65536 * sigma->samples_per_event];
+       uint16_t samples[65536 * ctx->samples_per_event];
        struct sr_datafeed_packet packet;
        struct sr_datafeed_logic logic;
        int i, j, k, l, numpad, tosend;
        size_t n = 0, sent = 0;
-       int clustersize = EVENTS_PER_CLUSTER * sigma->samples_per_event;
+       int clustersize = EVENTS_PER_CLUSTER * ctx->samples_per_event;
        uint16_t *event;
        uint16_t cur_sample;
        int triggerts = -1;
 
        /* Check if trigger is in this chunk. */
        if (triggerpos != -1) {
-               if (sigma->cur_samplerate <= SR_MHZ(50))
+               if (ctx->cur_samplerate <= SR_MHZ(50))
                        triggerpos -= EVENTS_PER_CLUSTER - 1;
 
                if (triggerpos < 0)
@@ -911,7 +912,7 @@ static int decode_chunk_ts(uint8_t *buf, uint16_t *lastts,
                        return SR_OK;
 
                /* Pad last sample up to current point. */
-               numpad = tsdiff * sigma->samples_per_event - clustersize;
+               numpad = tsdiff * ctx->samples_per_event - clustersize;
                if (numpad > 0) {
                        for (j = 0; j < numpad; ++j)
                                samples[j] = *lastsample;
@@ -929,7 +930,7 @@ static int decode_chunk_ts(uint8_t *buf, uint16_t *lastts,
                        logic.length = tosend * sizeof(uint16_t);
                        logic.unitsize = 2;
                        logic.data = samples + sent;
-                       sr_session_bus(sigma->session_id, &packet);
+                       sr_session_bus(ctx->session_id, &packet);
 
                        sent += tosend;
                }
@@ -942,15 +943,13 @@ static int decode_chunk_ts(uint8_t *buf, uint16_t *lastts,
                for (j = 0; j < 7; ++j) {
 
                        /* For each sample in event. */
-                       for (k = 0; k < sigma->samples_per_event; ++k) {
+                       for (k = 0; k < ctx->samples_per_event; ++k) {
                                cur_sample = 0;
 
                                /* For each probe. */
-                               for (l = 0; l < sigma->num_probes; ++l)
+                               for (l = 0; l < ctx->num_probes; ++l)
                                        cur_sample |= (!!(event[j] & (1 << (l *
-                                                     sigma->samples_per_event
-                                                     + k))))
-                                                     << l;
+                                          ctx->samples_per_event + k)))) << l;
 
                                samples[n++] = cur_sample;
                        }
@@ -966,7 +965,7 @@ static int decode_chunk_ts(uint8_t *buf, uint16_t *lastts,
                         * samples to pinpoint the exact position of the trigger.
                         */
                        tosend = get_trigger_offset(samples, *lastsample,
-                                                   &sigma->trigger);
+                                                   &ctx->trigger);
 
                        if (tosend > 0) {
                                packet.type = SR_DF_LOGIC;
@@ -974,15 +973,15 @@ static int decode_chunk_ts(uint8_t *buf, uint16_t *lastts,
                                logic.length = tosend * sizeof(uint16_t);
                                logic.unitsize = 2;
                                logic.data = samples;
-                               sr_session_bus(sigma->session_id, &packet);
+                               sr_session_bus(ctx->session_id, &packet);
 
                                sent += tosend;
                        }
 
                        /* Only send trigger if explicitly enabled. */
-                       if (sigma->use_triggers) {
+                       if (ctx->use_triggers) {
                                packet.type = SR_DF_TRIGGER;
-                               sr_session_bus(sigma->session_id, &packet);
+                               sr_session_bus(ctx->session_id, &packet);
                        }
                }
 
@@ -995,7 +994,7 @@ static int decode_chunk_ts(uint8_t *buf, uint16_t *lastts,
                        logic.length = tosend * sizeof(uint16_t);
                        logic.unitsize = 2;
                        logic.data = samples + sent;
-                       sr_session_bus(sigma->session_id, &packet);
+                       sr_session_bus(ctx->session_id, &packet);
                }
 
                *lastsample = samples[n - 1];
@@ -1007,7 +1006,7 @@ static int decode_chunk_ts(uint8_t *buf, uint16_t *lastts,
 static int receive_data(int fd, int revents, void *session_data)
 {
        struct sr_dev_inst *sdi = session_data;
-       struct sigma *sigma = sdi->priv;
+       struct context *ctx = sdi->priv;
        struct sr_datafeed_packet packet;
        const int chunks_per_read = 32;
        unsigned char buf[chunks_per_read * CHUNK_SIZE];
@@ -1019,51 +1018,49 @@ static int receive_data(int fd, int revents, void *session_data)
        (void)fd;
        (void)revents;
 
-       numchunks = (sigma->state.stoppos + 511) / 512;
+       numchunks = (ctx->state.stoppos + 511) / 512;
 
-       if (sigma->state.state == SIGMA_IDLE)
+       if (ctx->state.state == SIGMA_IDLE)
                return FALSE;
 
-       if (sigma->state.state == SIGMA_CAPTURE) {
-
+       if (ctx->state.state == SIGMA_CAPTURE) {
                /* Check if the timer has expired, or memory is full. */
                gettimeofday(&tv, 0);
-               running_msec = (tv.tv_sec - sigma->start_tv.tv_sec) * 1000 +
-                       (tv.tv_usec - sigma->start_tv.tv_usec) / 1000;
+               running_msec = (tv.tv_sec - ctx->start_tv.tv_sec) * 1000 +
+                       (tv.tv_usec - ctx->start_tv.tv_usec) / 1000;
 
-               if (running_msec < sigma->limit_msec && numchunks < 32767)
+               if (running_msec < ctx->limit_msec && numchunks < 32767)
                        return FALSE;
 
                hw_dev_acquisition_stop(sdi->index, session_data);
 
                return FALSE;
-
-       } else if (sigma->state.state == SIGMA_DOWNLOAD) {
-               if (sigma->state.chunks_downloaded >= numchunks) {
+       } else if (ctx->state.state == SIGMA_DOWNLOAD) {
+               if (ctx->state.chunks_downloaded >= numchunks) {
                        /* End of samples. */
                        packet.type = SR_DF_END;
-                       sr_session_bus(sigma->session_id, &packet);
+                       sr_session_bus(ctx->session_id, &packet);
 
-                       sigma->state.state = SIGMA_IDLE;
+                       ctx->state.state = SIGMA_IDLE;
 
                        return TRUE;
                }
 
                newchunks = MIN(chunks_per_read,
-                               numchunks - sigma->state.chunks_downloaded);
+                               numchunks - ctx->state.chunks_downloaded);
 
                sr_info("sigma: Downloading sample data: %.0f %%",
-                       100.0 * sigma->state.chunks_downloaded / numchunks);
+                       100.0 * ctx->state.chunks_downloaded / numchunks);
 
-               bufsz = sigma_read_dram(sigma->state.chunks_downloaded,
-                                       newchunks, buf, sigma);
+               bufsz = sigma_read_dram(ctx->state.chunks_downloaded,
+                                       newchunks, buf, ctx);
                /* TODO: Check bufsz. For now, just avoid compiler warnings. */
                (void)bufsz;
 
                /* Find first ts. */
-               if (sigma->state.chunks_downloaded == 0) {
-                       sigma->state.lastts = *(uint16_t *) buf - 1;
-                       sigma->state.lastsample = 0;
+               if (ctx->state.chunks_downloaded == 0) {
+                       ctx->state.lastts = *(uint16_t *) buf - 1;
+                       ctx->state.lastsample = 0;
                }
 
                /* Decode chunks and send them to sigrok. */
@@ -1071,25 +1068,24 @@ static int receive_data(int fd, int revents, void *session_data)
                        int limit_chunk = 0;
 
                        /* The last chunk may potentially be only in part. */
-                       if (sigma->state.chunks_downloaded == numchunks - 1)
-                       {
+                       if (ctx->state.chunks_downloaded == numchunks - 1) {
                                /* Find the last valid timestamp */
-                               limit_chunk = sigma->state.stoppos % 512 + sigma->state.lastts;
+                               limit_chunk = ctx->state.stoppos % 512 + ctx->state.lastts;
                        }
 
-                       if (sigma->state.chunks_downloaded + i == sigma->state.triggerchunk)
+                       if (ctx->state.chunks_downloaded + i == ctx->state.triggerchunk)
                                decode_chunk_ts(buf + (i * CHUNK_SIZE),
-                                               &sigma->state.lastts,
-                                               &sigma->state.lastsample,
-                                               sigma->state.triggerpos & 0x1ff,
+                                               &ctx->state.lastts,
+                                               &ctx->state.lastsample,
+                                               ctx->state.triggerpos & 0x1ff,
                                                limit_chunk, session_data);
                        else
                                decode_chunk_ts(buf + (i * CHUNK_SIZE),
-                                               &sigma->state.lastts,
-                                               &sigma->state.lastsample,
+                                               &ctx->state.lastts,
+                                               &ctx->state.lastsample,
                                                -1, limit_chunk, session_data);
 
-                       ++sigma->state.chunks_downloaded;
+                       ++ctx->state.chunks_downloaded;
                }
        }
 
@@ -1168,12 +1164,13 @@ static void add_trigger_function(enum triggerop oper, enum triggerfunc func,
 
        /* Transpose if neg is set. */
        if (neg) {
-               for (i = 0; i < 2; ++i)
+               for (i = 0; i < 2; ++i) {
                        for (j = 0; j < 2; ++j) {
                                tmp = x[i][j];
                                x[i][j] = x[1-i][1-j];
                                x[1-i][1-j] = tmp;
                        }
+               }
        }
 
        /* Update mask with function. */
@@ -1206,7 +1203,7 @@ static void add_trigger_function(enum triggerop oper, enum triggerfunc func,
  * simple pin change and state triggers. Only two transitions (rise/fall) can be
  * set at any time, but a full mask and value can be set (0/1).
  */
-static int build_basic_trigger(struct triggerlut *lut, struct sigma *sigma)
+static int build_basic_trigger(struct triggerlut *lut, struct context *ctx)
 {
        int i,j;
        uint16_t masks[2] = { 0, 0 };
@@ -1217,13 +1214,13 @@ static int build_basic_trigger(struct triggerlut *lut, struct sigma *sigma)
        lut->m4 = 0xa000;
 
        /* Value/mask trigger support. */
-       build_lut_entry(sigma->trigger.simplevalue, sigma->trigger.simplemask,
+       build_lut_entry(ctx->trigger.simplevalue, ctx->trigger.simplemask,
                        lut->m2d);
 
        /* Rise/fall trigger support. */
        for (i = 0, j = 0; i < 16; ++i) {
-               if (sigma->trigger.risingmask & (1 << i) ||
-                   sigma->trigger.fallingmask & (1 << i))
+               if (ctx->trigger.risingmask & (1 << i) ||
+                   ctx->trigger.fallingmask & (1 << i))
                        masks[j++] = 1 << i;
        }
 
@@ -1233,13 +1230,13 @@ static int build_basic_trigger(struct triggerlut *lut, struct sigma *sigma)
        /* Add glue logic */
        if (masks[0] || masks[1]) {
                /* Transition trigger. */
-               if (masks[0] & sigma->trigger.risingmask)
+               if (masks[0] & ctx->trigger.risingmask)
                        add_trigger_function(OP_RISE, FUNC_OR, 0, 0, &lut->m3);
-               if (masks[0] & sigma->trigger.fallingmask)
+               if (masks[0] & ctx->trigger.fallingmask)
                        add_trigger_function(OP_FALL, FUNC_OR, 0, 0, &lut->m3);
-               if (masks[1] & sigma->trigger.risingmask)
+               if (masks[1] & ctx->trigger.risingmask)
                        add_trigger_function(OP_RISE, FUNC_OR, 1, 0, &lut->m3);
-               if (masks[1] & sigma->trigger.fallingmask)
+               if (masks[1] & ctx->trigger.fallingmask)
                        add_trigger_function(OP_FALL, FUNC_OR, 1, 0, &lut->m3);
        } else {
                /* Only value/mask trigger. */
@@ -1255,7 +1252,7 @@ static int build_basic_trigger(struct triggerlut *lut, struct sigma *sigma)
 static int hw_dev_acquisition_start(int dev_index, gpointer session_data)
 {
        struct sr_dev_inst *sdi;
-       struct sigma *sigma;
+       struct context *ctx;
        struct sr_datafeed_packet packet;
        struct sr_datafeed_header header;
        struct clockselect_50 clockselect;
@@ -1270,24 +1267,24 @@ static int hw_dev_acquisition_start(int dev_index, gpointer session_data)
        if (!(sdi = sr_dev_inst_get(dev_insts, dev_index)))
                return SR_ERR;
 
-       sigma = sdi->priv;
+       ctx = sdi->priv;
 
-       /* If the samplerate has not been set, default to 200 KHz. */
-       if (sigma->cur_firmware == -1) {
+       /* If the samplerate has not been set, default to 200 kHz. */
+       if (ctx->cur_firmware == -1) {
                if ((ret = set_samplerate(sdi, SR_KHZ(200))) != SR_OK)
                        return ret;
        }
 
        /* Enter trigger programming mode. */
-       sigma_set_register(WRITE_TRIGGER_SELECT1, 0x20, sigma);
+       sigma_set_register(WRITE_TRIGGER_SELECT1, 0x20, ctx);
 
        /* 100 and 200 MHz mode. */
-       if (sigma->cur_samplerate >= SR_MHZ(100)) {
-               sigma_set_register(WRITE_TRIGGER_SELECT1, 0x81, sigma);
+       if (ctx->cur_samplerate >= SR_MHZ(100)) {
+               sigma_set_register(WRITE_TRIGGER_SELECT1, 0x81, ctx);
 
                /* Find which pin to trigger on from mask. */
                for (triggerpin = 0; triggerpin < 8; ++triggerpin)
-                       if ((sigma->trigger.risingmask | sigma->trigger.fallingmask) &
+                       if ((ctx->trigger.risingmask | ctx->trigger.fallingmask) &
                            (1 << triggerpin))
                                break;
 
@@ -1295,14 +1292,14 @@ static int hw_dev_acquisition_start(int dev_index, gpointer session_data)
                triggerselect = (1 << LEDSEL1) | (triggerpin & 0x7);
 
                /* Default rising edge. */
-               if (sigma->trigger.fallingmask)
+               if (ctx->trigger.fallingmask)
                        triggerselect |= 1 << 3;
 
        /* All other modes. */
-       } else if (sigma->cur_samplerate <= SR_MHZ(50)) {
-               build_basic_trigger(&lut, sigma);
+       } else if (ctx->cur_samplerate <= SR_MHZ(50)) {
+               build_basic_trigger(&lut, ctx);
 
-               sigma_write_trigger_lut(&lut, sigma);
+               sigma_write_trigger_lut(&lut, ctx);
 
                triggerselect = (1 << LEDSEL1) | (1 << LEDSEL0);
        }
@@ -1314,24 +1311,24 @@ static int hw_dev_acquisition_start(int dev_index, gpointer session_data)
 
        sigma_write_register(WRITE_TRIGGER_OPTION,
                             (uint8_t *) &triggerinout_conf,
-                            sizeof(struct triggerinout), sigma);
+                            sizeof(struct triggerinout), ctx);
 
        /* Go back to normal mode. */
-       sigma_set_register(WRITE_TRIGGER_SELECT1, triggerselect, sigma);
+       sigma_set_register(WRITE_TRIGGER_SELECT1, triggerselect, ctx);
 
        /* Set clock select register. */
-       if (sigma->cur_samplerate == SR_MHZ(200))
+       if (ctx->cur_samplerate == SR_MHZ(200))
                /* Enable 4 probes. */
-               sigma_set_register(WRITE_CLOCK_SELECT, 0xf0, sigma);
-       else if (sigma->cur_samplerate == SR_MHZ(100))
+               sigma_set_register(WRITE_CLOCK_SELECT, 0xf0, ctx);
+       else if (ctx->cur_samplerate == SR_MHZ(100))
                /* Enable 8 probes. */
-               sigma_set_register(WRITE_CLOCK_SELECT, 0x00, sigma);
+               sigma_set_register(WRITE_CLOCK_SELECT, 0x00, ctx);
        else {
                /*
                 * 50 MHz mode (or fraction thereof). Any fraction down to
                 * 50 MHz / 256 can be used, but is not supported by sigrok API.
                 */
-               frac = SR_MHZ(50) / sigma->cur_samplerate - 1;
+               frac = SR_MHZ(50) / ctx->cur_samplerate - 1;
 
                clockselect.async = 0;
                clockselect.fraction = frac;
@@ -1339,32 +1336,32 @@ static int hw_dev_acquisition_start(int dev_index, gpointer session_data)
 
                sigma_write_register(WRITE_CLOCK_SELECT,
                                     (uint8_t *) &clockselect,
-                                    sizeof(clockselect), sigma);
+                                    sizeof(clockselect), ctx);
        }
 
        /* Setup maximum post trigger time. */
        sigma_set_register(WRITE_POST_TRIGGER,
-                       (sigma->capture_ratio * 255) / 100, sigma);
+                       (ctx->capture_ratio * 255) / 100, ctx);
 
        /* Start acqusition. */
-       gettimeofday(&sigma->start_tv, 0);
-       sigma_set_register(WRITE_MODE, 0x0d, sigma);
+       gettimeofday(&ctx->start_tv, 0);
+       sigma_set_register(WRITE_MODE, 0x0d, ctx);
 
-       sigma->session_id = session_data;
+       ctx->session_id = session_data;
 
        /* Send header packet to the session bus. */
        packet.type = SR_DF_HEADER;
        packet.payload = &header;
        header.feed_version = 1;
        gettimeofday(&header.starttime, NULL);
-       header.samplerate = sigma->cur_samplerate;
-       header.num_logic_probes = sigma->num_probes;
+       header.samplerate = ctx->cur_samplerate;
+       header.num_logic_probes = ctx->num_probes;
        sr_session_bus(session_data, &packet);
 
        /* Add capture source. */
        sr_source_add(0, G_IO_IN, 10, receive_data, sdi);
 
-       sigma->state.state = SIGMA_CAPTURE;
+       ctx->state.state = SIGMA_CAPTURE;
 
        return SR_OK;
 }
@@ -1372,7 +1369,7 @@ static int hw_dev_acquisition_start(int dev_index, gpointer session_data)
 static int hw_dev_acquisition_stop(int dev_index, gpointer session_data)
 {
        struct sr_dev_inst *sdi;
-       struct sigma *sigma;
+       struct context *ctx;
        uint8_t modestatus;
 
        /* Avoid compiler warnings. */
@@ -1383,30 +1380,30 @@ static int hw_dev_acquisition_stop(int dev_index, gpointer session_data)
                return SR_ERR_BUG;
        }
 
-       if (!(sigma = sdi->priv)) {
+       if (!(ctx = sdi->priv)) {
                sr_err("sigma: %s: sdi->priv was NULL", __func__);
                return SR_ERR_BUG;
        }
 
        /* Stop acquisition. */
-       sigma_set_register(WRITE_MODE, 0x11, sigma);
+       sigma_set_register(WRITE_MODE, 0x11, ctx);
 
        /* Set SDRAM Read Enable. */
-       sigma_set_register(WRITE_MODE, 0x02, sigma);
+       sigma_set_register(WRITE_MODE, 0x02, ctx);
 
        /* Get the current position. */
-       sigma_read_pos(&sigma->state.stoppos, &sigma->state.triggerpos, sigma);
+       sigma_read_pos(&ctx->state.stoppos, &ctx->state.triggerpos, ctx);
 
        /* Check if trigger has fired. */
-       modestatus = sigma_get_register(READ_MODE, sigma);
+       modestatus = sigma_get_register(READ_MODE, ctx);
        if (modestatus & 0x20)
-               sigma->state.triggerchunk = sigma->state.triggerpos / 512;
+               ctx->state.triggerchunk = ctx->state.triggerpos / 512;
        else
-               sigma->state.triggerchunk = -1;
+               ctx->state.triggerchunk = -1;
 
-       sigma->state.chunks_downloaded = 0;
+       ctx->state.chunks_downloaded = 0;
 
-       sigma->state.state = SIGMA_DOWNLOAD;
+       ctx->state.state = SIGMA_DOWNLOAD;
 
        return SR_OK;
 }
index fbecb80f9008ec0a2b7cc6912c15a7a3f359f099..c65a8eb0469558e3bc269f10bbd15ee1dd87e27a 100644 (file)
@@ -173,7 +173,8 @@ struct sigma_state {
        int chunks_downloaded;
 };
 
-struct sigma {
+/* Private, per-device-instance driver context. */
+struct context {
        struct ftdi_context ftdic;
        uint64_t cur_samplerate;
        uint64_t period_ps;
index 6de27a49f6b207a8cb9bc49673a6873d451a997e..fea43db859435e67bd8bba423075a57eb1afe7c7 100644 (file)
@@ -54,7 +54,8 @@ static const char *probe_names[NUM_PROBES + 1] = {
        NULL,
 };
 
-struct la8 {
+/* Private, per-device-instance driver context. */
+struct context {
        /** FTDI device context (used by libftdi). */
        struct ftdi_context *ftdic;
 
@@ -135,9 +136,9 @@ static int hwcaps[] = {
 };
 
 /* Function prototypes. */
-static int la8_close_usb_reset_sequencer(struct la8 *la8);
+static int la8_close_usb_reset_sequencer(struct context *ctx);
 static int hw_dev_acquisition_stop(int dev_index, gpointer session_data);
-static int la8_reset(struct la8 *la8);
+static int la8_reset(struct context *ctx);
 
 static void fill_supported_samplerates_if_needed(void)
 {
@@ -205,22 +206,22 @@ static uint8_t samplerate_to_divcount(uint64_t samplerate)
 /**
  * Write data of a certain length to the LA8's FTDI device.
  *
- * @param la8 The LA8 struct containing private per-device-instance data.
+ * @param ctx The struct containing private per-device-instance data.
  * @param buf The buffer containing the data to write.
  * @param size The number of bytes to write.
  * @return The number of bytes written, or a negative value upon errors.
  */
-static int la8_write(struct la8 *la8, uint8_t *buf, int size)
+static int la8_write(struct context *ctx, uint8_t *buf, int size)
 {
        int bytes_written;
 
-       if (!la8) {
-               sr_err("la8: %s: la8 was NULL", __func__);
+       if (!ctx) {
+               sr_err("la8: %s: ctx was NULL", __func__);
                return SR_ERR_ARG;
        }
 
-       if (!la8->ftdic) {
-               sr_err("la8: %s: la8->ftdic was NULL", __func__);
+       if (!ctx->ftdic) {
+               sr_err("la8: %s: ctx->ftdic was NULL", __func__);
                return SR_ERR_ARG;
        }
 
@@ -234,16 +235,16 @@ static int la8_write(struct la8 *la8, uint8_t *buf, int size)
                return SR_ERR_ARG;
        }
 
-       bytes_written = ftdi_write_data(la8->ftdic, buf, size);
+       bytes_written = ftdi_write_data(ctx->ftdic, buf, size);
 
        if (bytes_written < 0) {
                sr_err("la8: %s: ftdi_write_data: (%d) %s", __func__,
-                      bytes_written, ftdi_get_error_string(la8->ftdic));
-               (void) la8_close_usb_reset_sequencer(la8); /* Ignore errors. */
+                      bytes_written, ftdi_get_error_string(ctx->ftdic));
+               (void) la8_close_usb_reset_sequencer(ctx); /* Ignore errors. */
        } else if (bytes_written != size) {
                sr_err("la8: %s: bytes to write: %d, bytes written: %d",
                       __func__, size, bytes_written);
-               (void) la8_close_usb_reset_sequencer(la8); /* Ignore errors. */
+               (void) la8_close_usb_reset_sequencer(ctx); /* Ignore errors. */
        }
 
        return bytes_written;
@@ -252,22 +253,22 @@ static int la8_write(struct la8 *la8, uint8_t *buf, int size)
 /**
  * Read a certain amount of bytes from the LA8's FTDI device.
  *
- * @param la8 The LA8 struct containing private per-device-instance data.
+ * @param ctx The struct containing private per-device-instance data.
  * @param buf The buffer where the received data will be stored.
  * @param size The number of bytes to read.
  * @return The number of bytes read, or a negative value upon errors.
  */
-static int la8_read(struct la8 *la8, uint8_t *buf, int size)
+static int la8_read(struct context *ctx, uint8_t *buf, int size)
 {
        int bytes_read;
 
-       if (!la8) {
-               sr_err("la8: %s: la8 was NULL", __func__);
+       if (!ctx) {
+               sr_err("la8: %s: ctx was NULL", __func__);
                return SR_ERR_ARG;
        }
 
-       if (!la8->ftdic) {
-               sr_err("la8: %s: la8->ftdic was NULL", __func__);
+       if (!ctx->ftdic) {
+               sr_err("la8: %s: ctx->ftdic was NULL", __func__);
                return SR_ERR_ARG;
        }
 
@@ -281,11 +282,11 @@ static int la8_read(struct la8 *la8, uint8_t *buf, int size)
                return SR_ERR_ARG;
        }
 
-       bytes_read = ftdi_read_data(la8->ftdic, buf, size);
+       bytes_read = ftdi_read_data(ctx->ftdic, buf, size);
 
        if (bytes_read < 0) {
                sr_err("la8: %s: ftdi_read_data: (%d) %s", __func__,
-                      bytes_read, ftdi_get_error_string(la8->ftdic));
+                      bytes_read, ftdi_get_error_string(ctx->ftdic));
        } else if (bytes_read != size) {
                // sr_err("la8: %s: bytes to read: %d, bytes read: %d",
                //        __func__, size, bytes_read);
@@ -294,23 +295,23 @@ static int la8_read(struct la8 *la8, uint8_t *buf, int size)
        return bytes_read;
 }
 
-static int la8_close(struct la8 *la8)
+static int la8_close(struct context *ctx)
 {
        int ret;
 
-       if (!la8) {
-               sr_err("la8: %s: la8 was NULL", __func__);
+       if (!ctx) {
+               sr_err("la8: %s: ctx was NULL", __func__);
                return SR_ERR_ARG;
        }
 
-       if (!la8->ftdic) {
-               sr_err("la8: %s: la8->ftdic was NULL", __func__);
+       if (!ctx->ftdic) {
+               sr_err("la8: %s: ctx->ftdic was NULL", __func__);
                return SR_ERR_ARG;
        }
 
-       if ((ret = ftdi_usb_close(la8->ftdic)) < 0) {
+       if ((ret = ftdi_usb_close(ctx->ftdic)) < 0) {
                sr_err("la8: %s: ftdi_usb_close: (%d) %s",
-                      __func__, ret, ftdi_get_error_string(la8->ftdic));
+                      __func__, ret, ftdi_get_error_string(ctx->ftdic));
        }
 
        return ret;
@@ -319,48 +320,48 @@ static int la8_close(struct la8 *la8)
 /**
  * Close the ChronoVu LA8 USB port and reset the LA8 sequencer logic.
  *
- * @param la8 The LA8 struct containing private per-device-instance data.
+ * @param ctx The struct containing private per-device-instance data.
  * @return SR_OK upon success, SR_ERR upon failure.
  */
-static int la8_close_usb_reset_sequencer(struct la8 *la8)
+static int la8_close_usb_reset_sequencer(struct context *ctx)
 {
        /* Magic sequence of bytes for resetting the LA8 sequencer logic. */
        uint8_t buf[8] = {0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01};
        int ret;
 
-       if (!la8) {
-               sr_err("la8: %s: la8 was NULL", __func__);
+       if (!ctx) {
+               sr_err("la8: %s: ctx was NULL", __func__);
                return SR_ERR_ARG;
        }
 
-       if (!la8->ftdic) {
-               sr_err("la8: %s: la8->ftdic was NULL", __func__);
+       if (!ctx->ftdic) {
+               sr_err("la8: %s: ctx->ftdic was NULL", __func__);
                return SR_ERR_ARG;
        }
 
-       if (la8->ftdic->usb_dev) {
+       if (ctx->ftdic->usb_dev) {
                /* Reset the LA8 sequencer logic, then wait 100ms. */
                sr_dbg("la8: resetting sequencer logic");
-               (void) la8_write(la8, buf, 8); /* Ignore errors. */
+               (void) la8_write(ctx, buf, 8); /* Ignore errors. */
                g_usleep(100 * 1000);
 
                /* Purge FTDI buffers, then reset and close the FTDI device. */
                sr_dbg("la8: purging buffers, resetting+closing FTDI device");
 
                /* Log errors, but ignore them (i.e., don't abort). */
-               if ((ret = ftdi_usb_purge_buffers(la8->ftdic)) < 0)
+               if ((ret = ftdi_usb_purge_buffers(ctx->ftdic)) < 0)
                        sr_err("la8: %s: ftdi_usb_purge_buffers: (%d) %s",
-                           __func__, ret, ftdi_get_error_string(la8->ftdic));
-               if ((ret = ftdi_usb_reset(la8->ftdic)) < 0)
+                           __func__, ret, ftdi_get_error_string(ctx->ftdic));
+               if ((ret = ftdi_usb_reset(ctx->ftdic)) < 0)
                        sr_err("la8: %s: ftdi_usb_reset: (%d) %s", __func__,
-                              ret, ftdi_get_error_string(la8->ftdic));
-               if ((ret = ftdi_usb_close(la8->ftdic)) < 0)
+                              ret, ftdi_get_error_string(ctx->ftdic));
+               if ((ret = ftdi_usb_close(ctx->ftdic)) < 0)
                        sr_err("la8: %s: ftdi_usb_close: (%d) %s", __func__,
-                              ret, ftdi_get_error_string(la8->ftdic));
+                              ret, ftdi_get_error_string(ctx->ftdic));
        }
 
-       ftdi_free(la8->ftdic); /* Returns void. */
-       la8->ftdic = NULL;
+       ftdi_free(ctx->ftdic); /* Returns void. */
+       ctx->ftdic = NULL;
 
        return SR_OK;
 }
@@ -370,22 +371,22 @@ static int la8_close_usb_reset_sequencer(struct la8 *la8)
  *
  * The LA8 must be reset after a failed read/write operation or upon timeouts.
  *
- * @param la8 The LA8 struct containing private per-device-instance data.
+ * @param ctx The struct containing private per-device-instance data.
  * @return SR_OK upon success, SR_ERR upon failure.
  */
-static int la8_reset(struct la8 *la8)
+static int la8_reset(struct context *ctx)
 {
        uint8_t buf[BS];
        time_t done, now;
        int bytes_read;
 
-       if (!la8) {
-               sr_err("la8: %s: la8 was NULL", __func__);
+       if (!ctx) {
+               sr_err("la8: %s: ctx was NULL", __func__);
                return SR_ERR_ARG;
        }
 
-       if (!la8->ftdic) {
-               sr_err("la8: %s: la8->ftdic was NULL", __func__);
+       if (!ctx->ftdic) {
+               sr_err("la8: %s: ctx->ftdic was NULL", __func__);
                return SR_ERR_ARG;
        }
 
@@ -398,27 +399,27 @@ static int la8_reset(struct la8 *la8)
        done = 20 + time(NULL);
        do {
                /* TODO: Ignore errors? Check for < 0 at least! */
-               bytes_read = la8_read(la8, (uint8_t *)&buf, BS);
+               bytes_read = la8_read(ctx, (uint8_t *)&buf, BS);
                now = time(NULL);
        } while ((done > now) && (bytes_read > 0));
 
        /* Reset the LA8 sequencer logic and close the USB port. */
-       (void) la8_close_usb_reset_sequencer(la8); /* Ignore errors. */
+       (void) la8_close_usb_reset_sequencer(ctx); /* Ignore errors. */
 
        sr_dbg("la8: device reset finished");
 
        return SR_OK;
 }
 
-static int configure_probes(struct la8 *la8, GSList *probes)
+static int configure_probes(struct context *ctx, GSList *probes)
 {
        struct sr_probe *probe;
        GSList *l;
        uint8_t probe_bit;
        char *tc;
 
-       la8->trigger_pattern = 0;
-       la8->trigger_mask = 0; /* Default to "don't care" for all probes. */
+       ctx->trigger_pattern = 0;
+       ctx->trigger_mask = 0; /* Default to "don't care" for all probes. */
 
        for (l = probes; l; l = l->next) {
                probe = (struct sr_probe *)l->data;
@@ -447,7 +448,7 @@ static int configure_probes(struct la8 *la8, GSList *probes)
 
                /* Configure the probe's trigger mask and trigger pattern. */
                for (tc = probe->trigger; tc && *tc; tc++) {
-                       la8->trigger_mask |= probe_bit;
+                       ctx->trigger_mask |= probe_bit;
 
                        /* Sanity check, LA8 only supports low/high trigger. */
                        if (*tc != '0' && *tc != '1') {
@@ -457,12 +458,12 @@ static int configure_probes(struct la8 *la8, GSList *probes)
                        }
 
                        if (*tc == '1')
-                               la8->trigger_pattern |= probe_bit;
+                               ctx->trigger_pattern |= probe_bit;
                }
        }
 
        sr_dbg("la8: %s: trigger_mask = 0x%x, trigger_pattern = 0x%x",
-              __func__, la8->trigger_mask, la8->trigger_pattern);
+              __func__, ctx->trigger_mask, ctx->trigger_pattern);
 
        return SR_OK;
 }
@@ -471,49 +472,49 @@ static int hw_init(const char *devinfo)
 {
        int ret;
        struct sr_dev_inst *sdi;
-       struct la8 *la8;
+       struct context *ctx;
 
        /* Avoid compiler errors. */
        (void)devinfo;
 
        /* Allocate memory for our private driver context. */
-       if (!(la8 = g_try_malloc(sizeof(struct la8)))) {
-               sr_err("la8: %s: struct la8 malloc failed", __func__);
+       if (!(ctx = g_try_malloc(sizeof(struct context)))) {
+               sr_err("la8: %s: struct context malloc failed", __func__);
                goto err_free_nothing;
        }
 
        /* Set some sane defaults. */
-       la8->ftdic = NULL;
-       la8->cur_samplerate = SR_MHZ(100); /* 100MHz == max. samplerate */
-       la8->limit_msec = 0;
-       la8->limit_samples = 0;
-       la8->session_id = NULL;
-       memset(la8->mangled_buf, 0, BS);
-       la8->final_buf = NULL;
-       la8->trigger_pattern = 0x00; /* Value irrelevant, see trigger_mask. */
-       la8->trigger_mask = 0x00; /* All probes are "don't care". */
-       la8->trigger_timeout = 10; /* Default to 10s trigger timeout. */
-       la8->trigger_found = 0;
-       la8->done = 0;
-       la8->block_counter = 0;
-       la8->divcount = 0; /* 10ns sample period == 100MHz samplerate */
+       ctx->ftdic = NULL;
+       ctx->cur_samplerate = SR_MHZ(100); /* 100MHz == max. samplerate */
+       ctx->limit_msec = 0;
+       ctx->limit_samples = 0;
+       ctx->session_id = NULL;
+       memset(ctx->mangled_buf, 0, BS);
+       ctx->final_buf = NULL;
+       ctx->trigger_pattern = 0x00; /* Value irrelevant, see trigger_mask. */
+       ctx->trigger_mask = 0x00; /* All probes are "don't care". */
+       ctx->trigger_timeout = 10; /* Default to 10s trigger timeout. */
+       ctx->trigger_found = 0;
+       ctx->done = 0;
+       ctx->block_counter = 0;
+       ctx->divcount = 0; /* 10ns sample period == 100MHz samplerate */
 
        /* Allocate memory where we'll store the de-mangled data. */
-       if (!(la8->final_buf = g_try_malloc(SDRAM_SIZE))) {
+       if (!(ctx->final_buf = g_try_malloc(SDRAM_SIZE))) {
                sr_err("la8: %s: final_buf malloc failed", __func__);
-               goto err_free_la8;
+               goto err_free_ctx;
        }
 
        /* Allocate memory for the FTDI context (ftdic) and initialize it. */
-       if (!(la8->ftdic = ftdi_new())) {
+       if (!(ctx->ftdic = ftdi_new())) {
                sr_err("la8: %s: ftdi_new failed", __func__);
                goto err_free_final_buf;
        }
 
        /* Check for the device and temporarily open it. */
-       if ((ret = ftdi_usb_open_desc(la8->ftdic, USB_VENDOR_ID,
+       if ((ret = ftdi_usb_open_desc(ctx->ftdic, USB_VENDOR_ID,
                        USB_PRODUCT_ID, USB_DESCRIPTION, NULL)) < 0) {
-               (void) la8_close_usb_reset_sequencer(la8); /* Ignore errors. */
+               (void) la8_close_usb_reset_sequencer(ctx); /* Ignore errors. */
                goto err_free_ftdic;
        }
        sr_dbg("la8: found device");
@@ -526,25 +527,25 @@ static int hw_init(const char *devinfo)
                goto err_close_ftdic;
        }
 
-       sdi->priv = la8;
+       sdi->priv = ctx;
 
        dev_insts = g_slist_append(dev_insts, sdi);
 
        sr_spew("la8: %s finished successfully", __func__);
 
        /* Close device. We'll reopen it again when we need it. */
-       (void) la8_close(la8); /* Log, but ignore errors. */
+       (void) la8_close(ctx); /* Log, but ignore errors. */
 
        return 1;
 
 err_close_ftdic:
-       (void) la8_close(la8); /* Log, but ignore errors. */
+       (void) la8_close(ctx); /* Log, but ignore errors. */
 err_free_ftdic:
-       free(la8->ftdic); /* NOT g_free()! */
+       free(ctx->ftdic); /* NOT g_free()! */
 err_free_final_buf:
-       g_free(la8->final_buf);
-err_free_la8:
-       g_free(la8);
+       g_free(ctx->final_buf);
+err_free_ctx:
+       g_free(ctx);
 err_free_nothing:
 
        return 0;
@@ -554,14 +555,14 @@ static int hw_dev_open(int dev_index)
 {
        int ret;
        struct sr_dev_inst *sdi;
-       struct la8 *la8;
+       struct context *ctx;
 
        if (!(sdi = sr_dev_inst_get(dev_insts, dev_index))) {
                sr_err("la8: %s: sdi was NULL", __func__);
                return SR_ERR; /* TODO: SR_ERR_ARG? */
        }
 
-       if (!(la8 = sdi->priv)) {
+       if (!(ctx = sdi->priv)) {
                sr_err("la8: %s: sdi->priv was NULL", __func__);
                return SR_ERR; /* TODO: SR_ERR_ARG? */
        }
@@ -569,29 +570,29 @@ static int hw_dev_open(int dev_index)
        sr_dbg("la8: opening device");
 
        /* Open the device. */
-       if ((ret = ftdi_usb_open_desc(la8->ftdic, USB_VENDOR_ID,
+       if ((ret = ftdi_usb_open_desc(ctx->ftdic, USB_VENDOR_ID,
                        USB_PRODUCT_ID, USB_DESCRIPTION, NULL)) < 0) {
                sr_err("la8: %s: ftdi_usb_open_desc: (%d) %s",
-                      __func__, ret, ftdi_get_error_string(la8->ftdic));
-               (void) la8_close_usb_reset_sequencer(la8); /* Ignore errors. */
+                      __func__, ret, ftdi_get_error_string(ctx->ftdic));
+               (void) la8_close_usb_reset_sequencer(ctx); /* Ignore errors. */
                return SR_ERR;
        }
        sr_dbg("la8: device opened successfully");
 
        /* Purge RX/TX buffers in the FTDI chip. */
-       if ((ret = ftdi_usb_purge_buffers(la8->ftdic)) < 0) {
+       if ((ret = ftdi_usb_purge_buffers(ctx->ftdic)) < 0) {
                sr_err("la8: %s: ftdi_usb_purge_buffers: (%d) %s",
-                      __func__, ret, ftdi_get_error_string(la8->ftdic));
-               (void) la8_close_usb_reset_sequencer(la8); /* Ignore errors. */
+                      __func__, ret, ftdi_get_error_string(ctx->ftdic));
+               (void) la8_close_usb_reset_sequencer(ctx); /* Ignore errors. */
                goto err_dev_open_close_ftdic;
        }
        sr_dbg("la8: FTDI buffers purged successfully");
 
        /* Enable flow control in the FTDI chip. */
-       if ((ret = ftdi_setflowctrl(la8->ftdic, SIO_RTS_CTS_HS)) < 0) {
+       if ((ret = ftdi_setflowctrl(ctx->ftdic, SIO_RTS_CTS_HS)) < 0) {
                sr_err("la8: %s: ftdi_setflowcontrol: (%d) %s",
-                      __func__, ret, ftdi_get_error_string(la8->ftdic));
-               (void) la8_close_usb_reset_sequencer(la8); /* Ignore errors. */
+                      __func__, ret, ftdi_get_error_string(ctx->ftdic));
+               (void) la8_close_usb_reset_sequencer(ctx); /* Ignore errors. */
                goto err_dev_open_close_ftdic;
        }
        sr_dbg("la8: FTDI flow control enabled successfully");
@@ -604,20 +605,20 @@ static int hw_dev_open(int dev_index)
        return SR_OK;
 
 err_dev_open_close_ftdic:
-       (void) la8_close(la8); /* Log, but ignore errors. */
+       (void) la8_close(ctx); /* Log, but ignore errors. */
        return SR_ERR;
 }
 
 static int set_samplerate(struct sr_dev_inst *sdi, uint64_t samplerate)
 {
-       struct la8 *la8;
+       struct context *ctx;
 
        if (!sdi) {
                sr_err("la8: %s: sdi was NULL", __func__);
                return SR_ERR_ARG;
        }
 
-       if (!(la8 = sdi->priv)) {
+       if (!(ctx = sdi->priv)) {
                sr_err("la8: %s: sdi->priv was NULL", __func__);
                return SR_ERR_ARG;
        }
@@ -631,9 +632,9 @@ static int set_samplerate(struct sr_dev_inst *sdi, uint64_t samplerate)
                return SR_ERR;
 
        /* Set the new samplerate. */
-       la8->cur_samplerate = samplerate;
+       ctx->cur_samplerate = samplerate;
 
-       sr_dbg("la8: samplerate set to %" PRIu64 "Hz", la8->cur_samplerate);
+       sr_dbg("la8: samplerate set to %" PRIu64 "Hz", ctx->cur_samplerate);
 
        return SR_OK;
 }
@@ -641,14 +642,14 @@ static int set_samplerate(struct sr_dev_inst *sdi, uint64_t samplerate)
 static int hw_dev_close(int dev_index)
 {
        struct sr_dev_inst *sdi;
-       struct la8 *la8;
+       struct context *ctx;
 
        if (!(sdi = sr_dev_inst_get(dev_insts, dev_index))) {
                sr_err("la8: %s: sdi was NULL", __func__);
                return SR_ERR; /* TODO: SR_ERR_ARG? */
        }
 
-       if (!(la8 = sdi->priv)) {
+       if (!(ctx = sdi->priv)) {
                sr_err("la8: %s: sdi->priv was NULL", __func__);
                return SR_ERR; /* TODO: SR_ERR_ARG? */
        }
@@ -658,7 +659,7 @@ static int hw_dev_close(int dev_index)
        if (sdi->status == SR_ST_ACTIVE) {
                sr_dbg("la8: %s: status ACTIVE, closing device", __func__);
                /* TODO: Really ignore errors here, or return SR_ERR? */
-               (void) la8_close_usb_reset_sequencer(la8); /* Ignore errors. */
+               (void) la8_close_usb_reset_sequencer(ctx); /* Ignore errors. */
        } else {
                sr_spew("la8: %s: status not ACTIVE, nothing to do", __func__);
        }
@@ -666,7 +667,7 @@ static int hw_dev_close(int dev_index)
        sdi->status = SR_ST_INACTIVE;
 
        sr_dbg("la8: %s: freeing sample buffers", __func__);
-       g_free(la8->final_buf);
+       g_free(ctx->final_buf);
 
        return SR_OK;
 }
@@ -696,7 +697,7 @@ static int hw_cleanup(void)
 static void *hw_dev_info_get(int dev_index, int dev_info_id)
 {
        struct sr_dev_inst *sdi;
-       struct la8 *la8;
+       struct context *ctx;
        void *info;
 
        sr_spew("la8: entering %s", __func__);
@@ -706,7 +707,7 @@ static void *hw_dev_info_get(int dev_index, int dev_info_id)
                return NULL;
        }
 
-       if (!(la8 = sdi->priv)) {
+       if (!(ctx = sdi->priv)) {
                sr_err("la8: %s: sdi->priv was NULL", __func__);
                return NULL;
        }
@@ -729,7 +730,7 @@ static void *hw_dev_info_get(int dev_index, int dev_info_id)
                info = (char *)TRIGGER_TYPES;
                break;
        case SR_DI_CUR_SAMPLERATE:
-               info = &la8->cur_samplerate;
+               info = &ctx->cur_samplerate;
                break;
        default:
                /* Unknown device info ID, return NULL. */
@@ -765,7 +766,7 @@ static int *hw_hwcap_get_all(void)
 static int hw_dev_config_set(int dev_index, int hwcap, void *value)
 {
        struct sr_dev_inst *sdi;
-       struct la8 *la8;
+       struct context *ctx;
 
        sr_spew("la8: entering %s", __func__);
 
@@ -774,7 +775,7 @@ static int hw_dev_config_set(int dev_index, int hwcap, void *value)
                return SR_ERR; /* TODO: SR_ERR_ARG? */
        }
 
-       if (!(la8 = sdi->priv)) {
+       if (!(ctx = sdi->priv)) {
                sr_err("la8: %s: sdi->priv was NULL", __func__);
                return SR_ERR; /* TODO: SR_ERR_ARG? */
        }
@@ -783,10 +784,10 @@ static int hw_dev_config_set(int dev_index, int hwcap, void *value)
        case SR_HWCAP_SAMPLERATE:
                if (set_samplerate(sdi, *(uint64_t *)value) == SR_ERR)
                        return SR_ERR;
-               sr_dbg("la8: SAMPLERATE = %" PRIu64, la8->cur_samplerate);
+               sr_dbg("la8: SAMPLERATE = %" PRIu64, ctx->cur_samplerate);
                break;
        case SR_HWCAP_PROBECONFIG:
-               if (configure_probes(la8, (GSList *)value) != SR_OK) {
+               if (configure_probes(ctx, (GSList *)value) != SR_OK) {
                        sr_err("la8: %s: probe config failed", __func__);
                        return SR_ERR;
                }
@@ -796,16 +797,16 @@ static int hw_dev_config_set(int dev_index, int hwcap, void *value)
                        sr_err("la8: %s: LIMIT_MSEC can't be 0", __func__);
                        return SR_ERR;
                }
-               la8->limit_msec = *(uint64_t *)value;
-               sr_dbg("la8: LIMIT_MSEC = %" PRIu64, la8->limit_msec);
+               ctx->limit_msec = *(uint64_t *)value;
+               sr_dbg("la8: LIMIT_MSEC = %" PRIu64, ctx->limit_msec);
                break;
        case SR_HWCAP_LIMIT_SAMPLES:
                if (*(uint64_t *)value < MIN_NUM_SAMPLES) {
                        sr_err("la8: %s: LIMIT_SAMPLES too small", __func__);
                        return SR_ERR;
                }
-               la8->limit_samples = *(uint64_t *)value;
-               sr_dbg("la8: LIMIT_SAMPLES = %" PRIu64, la8->limit_samples);
+               ctx->limit_samples = *(uint64_t *)value;
+               sr_dbg("la8: LIMIT_SAMPLES = %" PRIu64, ctx->limit_samples);
                break;
        default:
                /* Unknown capability, return SR_ERR. */
@@ -820,61 +821,61 @@ static int hw_dev_config_set(int dev_index, int hwcap, void *value)
 /**
  * Get a block of data from the LA8.
  *
- * @param la8 The LA8 struct containing private per-device-instance data.
+ * @param ctx The struct containing private per-device-instance data.
  * @return SR_OK upon success, or SR_ERR upon errors.
  */
-static int la8_read_block(struct la8 *la8)
+static int la8_read_block(struct context *ctx)
 {
        int i, byte_offset, m, mi, p, index, bytes_read;
        time_t now;
 
-       if (!la8) {
-               sr_err("la8: %s: la8 was NULL", __func__);
+       if (!ctx) {
+               sr_err("la8: %s: ctx was NULL", __func__);
                return SR_ERR_ARG;
        }
 
-       if (!la8->ftdic) {
-               sr_err("la8: %s: la8->ftdic was NULL", __func__);
+       if (!ctx->ftdic) {
+               sr_err("la8: %s: ctx->ftdic was NULL", __func__);
                return SR_ERR_ARG;
        }
 
-       sr_spew("la8: %s: reading block %d", __func__, la8->block_counter);
+       sr_spew("la8: %s: reading block %d", __func__, ctx->block_counter);
 
-       bytes_read = la8_read(la8, la8->mangled_buf, BS);
+       bytes_read = la8_read(ctx, ctx->mangled_buf, BS);
 
        /* If first block read got 0 bytes, retry until success or timeout. */
-       if ((bytes_read == 0) && (la8->block_counter == 0)) {
+       if ((bytes_read == 0) && (ctx->block_counter == 0)) {
                do {
                        sr_spew("la8: %s: reading block 0 again", __func__);
-                       bytes_read = la8_read(la8, la8->mangled_buf, BS);
+                       bytes_read = la8_read(ctx, ctx->mangled_buf, BS);
                        /* TODO: How to handle read errors here? */
                        now = time(NULL);
-               } while ((la8->done > now) && (bytes_read == 0));
+               } while ((ctx->done > now) && (bytes_read == 0));
        }
 
        /* Check if block read was successful or a timeout occured. */
        if (bytes_read != BS) {
                sr_err("la8: %s: trigger timed out", __func__);
-               (void) la8_reset(la8); /* Ignore errors. */
+               (void) la8_reset(ctx); /* Ignore errors. */
                return SR_ERR;
        }
 
        /* De-mangle the data. */
-       sr_spew("la8: de-mangling samples of block %d", la8->block_counter);
-       byte_offset = la8->block_counter * BS;
+       sr_spew("la8: de-mangling samples of block %d", ctx->block_counter);
+       byte_offset = ctx->block_counter * BS;
        m = byte_offset / (1024 * 1024);
        mi = m * (1024 * 1024);
        for (i = 0; i < BS; i++) {
                p = i & (1 << 0);
                index = m * 2 + (((byte_offset + i) - mi) / 2) * 16;
-               index += (la8->divcount == 0) ? p : (1 - p);
-               la8->final_buf[index] = la8->mangled_buf[i];
+               index += (ctx->divcount == 0) ? p : (1 - p);
+               ctx->final_buf[index] = ctx->mangled_buf[i];
        }
 
        return SR_OK;
 }
 
-static void send_block_to_session_bus(struct la8 *la8, int block)
+static void send_block_to_session_bus(struct context *ctx, int block)
 {
        int i;
        uint8_t sample, expected_sample;
@@ -882,14 +883,14 @@ static void send_block_to_session_bus(struct la8 *la8, int block)
        struct sr_datafeed_logic logic;
        int trigger_point; /* Relative trigger point (in this block). */
 
-       /* Note: No sanity checks on la8/block, caller is responsible. */
+       /* Note: No sanity checks on ctx/block, caller is responsible. */
 
        /* Check if we can find the trigger condition in this block. */
        trigger_point = -1;
-       expected_sample = la8->trigger_pattern & la8->trigger_mask;
+       expected_sample = ctx->trigger_pattern & ctx->trigger_mask;
        for (i = 0; i < BS; i++) {
                /* Don't continue if the trigger was found previously. */
-               if (la8->trigger_found)
+               if (ctx->trigger_found)
                        break;
 
                /*
@@ -897,14 +898,14 @@ static void send_block_to_session_bus(struct la8 *la8, int block)
                 * no trigger conditions were specified by the user. In that
                 * case we don't want to send an SR_DF_TRIGGER packet at all.
                 */
-               if (la8->trigger_mask == 0x00)
+               if (ctx->trigger_mask == 0x00)
                        break;
 
-               sample = *(la8->final_buf + (block * BS) + i);
+               sample = *(ctx->final_buf + (block * BS) + i);
 
-               if ((sample & la8->trigger_mask) == expected_sample) {
+               if ((sample & ctx->trigger_mask) == expected_sample) {
                        trigger_point = i;
-                       la8->trigger_found = 1;
+                       ctx->trigger_found = 1;
                        break;
                }
        }
@@ -918,8 +919,8 @@ static void send_block_to_session_bus(struct la8 *la8, int block)
                packet.payload = &logic;
                logic.length = BS;
                logic.unitsize = 1;
-               logic.data = la8->final_buf + (block * BS);
-               sr_session_bus(la8->session_id, &packet);
+               logic.data = ctx->final_buf + (block * BS);
+               sr_session_bus(ctx->session_id, &packet);
                return;
        }
 
@@ -941,8 +942,8 @@ static void send_block_to_session_bus(struct la8 *la8, int block)
                packet.payload = &logic;
                logic.length = trigger_point;
                logic.unitsize = 1;
-               logic.data = la8->final_buf + (block * BS);
-               sr_session_bus(la8->session_id, &packet);
+               logic.data = ctx->final_buf + (block * BS);
+               sr_session_bus(ctx->session_id, &packet);
        }
 
        /* Send the SR_DF_TRIGGER packet to the session bus. */
@@ -950,7 +951,7 @@ static void send_block_to_session_bus(struct la8 *la8, int block)
                (block * BS) + trigger_point);
        packet.type = SR_DF_TRIGGER;
        packet.payload = NULL;
-       sr_session_bus(la8->session_id, &packet);
+       sr_session_bus(ctx->session_id, &packet);
 
        /* If at least one sample is located after the trigger... */
        if (trigger_point < (BS - 1)) {
@@ -962,8 +963,8 @@ static void send_block_to_session_bus(struct la8 *la8, int block)
                packet.payload = &logic;
                logic.length = BS - trigger_point;
                logic.unitsize = 1;
-               logic.data = la8->final_buf + (block * BS) + trigger_point;
-               sr_session_bus(la8->session_id, &packet);
+               logic.data = ctx->final_buf + (block * BS) + trigger_point;
+               sr_session_bus(ctx->session_id, &packet);
        }
 }
 
@@ -971,7 +972,7 @@ static int receive_data(int fd, int revents, void *session_data)
 {
        int i, ret;
        struct sr_dev_inst *sdi;
-       struct la8 *la8;
+       struct context *ctx;
 
        /* Avoid compiler errors. */
        (void)fd;
@@ -982,21 +983,21 @@ static int receive_data(int fd, int revents, void *session_data)
                return FALSE;
        }
 
-       if (!(la8 = sdi->priv)) {
+       if (!(ctx = sdi->priv)) {
                sr_err("la8: %s: sdi->priv was NULL", __func__);
                return FALSE;
        }
 
        /* Get one block of data. */
-       if ((ret = la8_read_block(la8)) < 0) {
+       if ((ret = la8_read_block(ctx)) < 0) {
                sr_err("la8: %s: la8_read_block error: %d", __func__, ret);
                hw_dev_acquisition_stop(sdi->index, session_data);
                return FALSE;
        }
 
        /* We need to get exactly NUM_BLOCKS blocks (i.e. 8MB) of data. */
-       if (la8->block_counter != (NUM_BLOCKS - 1)) {
-               la8->block_counter++;
+       if (ctx->block_counter != (NUM_BLOCKS - 1)) {
+               ctx->block_counter++;
                return TRUE;
        }
 
@@ -1004,7 +1005,7 @@ static int receive_data(int fd, int revents, void *session_data)
 
        /* All data was received and demangled, send it to the session bus. */
        for (i = 0; i < NUM_BLOCKS; i++)
-               send_block_to_session_bus(la8, i);
+               send_block_to_session_bus(ctx, i);
 
        hw_dev_acquisition_stop(sdi->index, session_data);
 
@@ -1015,7 +1016,7 @@ static int receive_data(int fd, int revents, void *session_data)
 static int hw_dev_acquisition_start(int dev_index, gpointer session_data)
 {
        struct sr_dev_inst *sdi;
-       struct la8 *la8;
+       struct context *ctx;
        struct sr_datafeed_packet packet;
        struct sr_datafeed_header header;
        uint8_t buf[4];
@@ -1028,30 +1029,30 @@ static int hw_dev_acquisition_start(int dev_index, gpointer session_data)
                return SR_ERR; /* TODO: SR_ERR_ARG? */
        }
 
-       if (!(la8 = sdi->priv)) {
+       if (!(ctx = sdi->priv)) {
                sr_err("la8: %s: sdi->priv was NULL", __func__);
                return SR_ERR; /* TODO: SR_ERR_ARG? */
        }
 
-       if (!la8->ftdic) {
-               sr_err("la8: %s: la8->ftdic was NULL", __func__);
+       if (!ctx->ftdic) {
+               sr_err("la8: %s: ctx->ftdic was NULL", __func__);
                return SR_ERR_ARG;
        }
 
-       la8->divcount = samplerate_to_divcount(la8->cur_samplerate);
-       if (la8->divcount == 0xff) {
+       ctx->divcount = samplerate_to_divcount(ctx->cur_samplerate);
+       if (ctx->divcount == 0xff) {
                sr_err("la8: %s: invalid divcount/samplerate", __func__);
                return SR_ERR;
        }
 
        /* Fill acquisition parameters into buf[]. */
-       buf[0] = la8->divcount;
+       buf[0] = ctx->divcount;
        buf[1] = 0xff; /* This byte must always be 0xff. */
-       buf[2] = la8->trigger_pattern;
-       buf[3] = la8->trigger_mask;
+       buf[2] = ctx->trigger_pattern;
+       buf[3] = ctx->trigger_mask;
 
        /* Start acquisition. */
-       bytes_written = la8_write(la8, buf, 4);
+       bytes_written = la8_write(ctx, buf, 4);
 
        if (bytes_written < 0) {
                sr_err("la8: acquisition failed to start");
@@ -1063,7 +1064,7 @@ static int hw_dev_acquisition_start(int dev_index, gpointer session_data)
 
        sr_dbg("la8: acquisition started successfully");
 
-       la8->session_id = session_data;
+       ctx->session_id = session_data;
 
        /* Send header packet to the session bus. */
        sr_dbg("la8: %s: sending SR_DF_HEADER", __func__);
@@ -1071,15 +1072,15 @@ static int hw_dev_acquisition_start(int dev_index, gpointer session_data)
        packet.payload = &header;
        header.feed_version = 1;
        gettimeofday(&header.starttime, NULL);
-       header.samplerate = la8->cur_samplerate;
+       header.samplerate = ctx->cur_samplerate;
        header.num_logic_probes = NUM_PROBES;
        sr_session_bus(session_data, &packet);
 
        /* Time when we should be done (for detecting trigger timeouts). */
-       la8->done = (la8->divcount + 1) * 0.08388608 + time(NULL)
-                       + la8->trigger_timeout;
-       la8->block_counter = 0;
-       la8->trigger_found = 0;
+       ctx->done = (ctx->divcount + 1) * 0.08388608 + time(NULL)
+                       + ctx->trigger_timeout;
+       ctx->block_counter = 0;
+       ctx->trigger_found = 0;
 
        /* Hook up a dummy handler to receive data from the LA8. */
        sr_source_add(-1, G_IO_IN, 0, receive_data, sdi);
@@ -1090,7 +1091,7 @@ static int hw_dev_acquisition_start(int dev_index, gpointer session_data)
 static int hw_dev_acquisition_stop(int dev_index, gpointer session_data)
 {
        struct sr_dev_inst *sdi;
-       struct la8 *la8;
+       struct context *ctx;
        struct sr_datafeed_packet packet;
 
        sr_dbg("la8: stopping acquisition");
@@ -1100,7 +1101,7 @@ static int hw_dev_acquisition_stop(int dev_index, gpointer session_data)
                return SR_ERR_BUG;
        }
 
-       if (!(la8 = sdi->priv)) {
+       if (!(ctx = sdi->priv)) {
                sr_err("la8: %s: sdi->priv was NULL", __func__);
                return SR_ERR_BUG;
        }
index 6ae0d80da960e8f57ea2f358ca6d32a41e835333..aa3f57d4a919f8c920aab54864531b0af68c8cca 100644 (file)
@@ -125,6 +125,9 @@ static uint8_t pattern_sigrok[] = {
        0xbe, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 };
 
+/* Private, per-device-instance driver context. */
+/* TODO: struct context as with the other drivers. */
+
 /* List of struct sr_dev_inst, maintained by dev_open()/dev_close(). */
 static GSList *dev_insts = NULL;
 static uint64_t cur_samplerate = SR_KHZ(200);
index 37f0a96bf9aa9d9609fe3c8e0492677655f6302a..c3dc19bd934865109902f7d1d39f57a60d646158 100644 (file)
@@ -139,12 +139,12 @@ ret:
 
 static int mso_reset_adc(struct sr_dev_inst *sdi)
 {
-       struct mso *mso = sdi->priv;
+       struct context *ctx = sdi->priv;
        uint16_t ops[2];
 
-       ops[0] = mso_trans(REG_CTL1, (mso->ctlbase1 | BIT_CTL1_RESETADC));
-       ops[1] = mso_trans(REG_CTL1, mso->ctlbase1);
-       mso->ctlbase1 |= BIT_CTL1_ADC_UNKNOWN4;
+       ops[0] = mso_trans(REG_CTL1, (ctx->ctlbase1 | BIT_CTL1_RESETADC));
+       ops[1] = mso_trans(REG_CTL1, ctx->ctlbase1);
+       ctx->ctlbase1 |= BIT_CTL1_ADC_UNKNOWN4;
 
        sr_dbg("mso19: Requesting ADC reset");
        return mso_send_control_message(sdi, ARRAY_AND_SIZE(ops));
@@ -152,11 +152,11 @@ static int mso_reset_adc(struct sr_dev_inst *sdi)
 
 static int mso_reset_fsm(struct sr_dev_inst *sdi)
 {
-       struct mso *mso = sdi->priv;
+       struct context *ctx = sdi->priv;
        uint16_t ops[1];
 
-       mso->ctlbase1 |= BIT_CTL1_RESETFSM;
-       ops[0] = mso_trans(REG_CTL1, mso->ctlbase1);
+       ctx->ctlbase1 |= BIT_CTL1_RESETFSM;
+       ops[0] = mso_trans(REG_CTL1, ctx->ctlbase1);
 
        sr_dbg("mso19: Requesting ADC reset");
        return mso_send_control_message(sdi, ARRAY_AND_SIZE(ops));
@@ -164,13 +164,13 @@ static int mso_reset_fsm(struct sr_dev_inst *sdi)
 
 static int mso_toggle_led(struct sr_dev_inst *sdi, int state)
 {
-       struct mso *mso = sdi->priv;
+       struct context *ctx = sdi->priv;
        uint16_t ops[1];
 
-       mso->ctlbase1 &= ~BIT_CTL1_LED;
+       ctx->ctlbase1 &= ~BIT_CTL1_LED;
        if (state)
-               mso->ctlbase1 |= BIT_CTL1_LED;
-       ops[0] = mso_trans(REG_CTL1, mso->ctlbase1);
+               ctx->ctlbase1 |= BIT_CTL1_LED;
+       ops[0] = mso_trans(REG_CTL1, ctx->ctlbase1);
 
        sr_dbg("mso19: Requesting LED toggle");
        return mso_send_control_message(sdi, ARRAY_AND_SIZE(ops));
@@ -206,11 +206,11 @@ static int mso_read_buffer(struct sr_dev_inst *sdi)
 
 static int mso_arm(struct sr_dev_inst *sdi)
 {
-       struct mso *mso = sdi->priv;
+       struct context *ctx = sdi->priv;
        uint16_t ops[] = {
-               mso_trans(REG_CTL1, mso->ctlbase1 | BIT_CTL1_RESETFSM),
-               mso_trans(REG_CTL1, mso->ctlbase1 | BIT_CTL1_ARM),
-               mso_trans(REG_CTL1, mso->ctlbase1),
+               mso_trans(REG_CTL1, ctx->ctlbase1 | BIT_CTL1_RESETFSM),
+               mso_trans(REG_CTL1, ctx->ctlbase1 | BIT_CTL1_ARM),
+               mso_trans(REG_CTL1, ctx->ctlbase1),
        };
 
        sr_dbg("mso19: Requesting trigger arm");
@@ -219,10 +219,10 @@ static int mso_arm(struct sr_dev_inst *sdi)
 
 static int mso_force_capture(struct sr_dev_inst *sdi)
 {
-       struct mso *mso = sdi->priv;
+       struct context *ctx = sdi->priv;
        uint16_t ops[] = {
-               mso_trans(REG_CTL1, mso->ctlbase1 | 8),
-               mso_trans(REG_CTL1, mso->ctlbase1),
+               mso_trans(REG_CTL1, ctx->ctlbase1 | 8),
+               mso_trans(REG_CTL1, ctx->ctlbase1),
        };
 
        sr_dbg("mso19: Requesting forced capture");
@@ -231,11 +231,11 @@ static int mso_force_capture(struct sr_dev_inst *sdi)
 
 static int mso_dac_out(struct sr_dev_inst *sdi, uint16_t val)
 {
-       struct mso *mso = sdi->priv;
+       struct context *ctx = sdi->priv;
        uint16_t ops[] = {
                mso_trans(REG_DAC1, (val >> 8) & 0xff),
                mso_trans(REG_DAC2, val & 0xff),
-               mso_trans(REG_CTL1, mso->ctlbase1 | BIT_CTL1_RESETADC),
+               mso_trans(REG_CTL1, ctx->ctlbase1 | BIT_CTL1_RESETADC),
        };
 
        sr_dbg("mso19: Setting dac word to 0x%x", val);
@@ -255,44 +255,44 @@ static int mso_clkrate_out(struct sr_dev_inst *sdi, uint16_t val)
 
 static int mso_configure_rate(struct sr_dev_inst *sdi, uint32_t rate)
 {
-       struct mso *mso = sdi->priv;
+       struct context *ctx = sdi->priv;
        unsigned int i;
        int ret = SR_ERR;
 
        for (i = 0; i < ARRAY_SIZE(rate_map); i++) {
                if (rate_map[i].rate == rate) {
-                       mso->ctlbase2 = rate_map[i].slowmode;
+                       ctx->ctlbase2 = rate_map[i].slowmode;
                        ret = mso_clkrate_out(sdi, rate_map[i].val);
                        if (ret == SR_OK)
-                               mso->cur_rate = rate;
+                               ctx->cur_rate = rate;
                        return ret;
                }
        }
        return ret;
 }
 
-static inline uint16_t mso_calc_raw_from_mv(struct mso *mso)
+static inline uint16_t mso_calc_raw_from_mv(struct context *ctx)
 {
        return (uint16_t) (0x200 -
-                       ((mso->dso_trigger_voltage / mso->dso_probe_attn) /
-                        mso->vbit));
+                       ((ctx->dso_trigger_voltage / ctx->dso_probe_attn) /
+                        ctx->vbit));
 }
 
 static int mso_configure_trigger(struct sr_dev_inst *sdi)
 {
-       struct mso *mso = sdi->priv;
+       struct context *ctx = sdi->priv;
        uint16_t ops[16];
-       uint16_t dso_trigger = mso_calc_raw_from_mv(mso);
+       uint16_t dso_trigger = mso_calc_raw_from_mv(ctx);
 
        dso_trigger &= 0x3ff;
-       if ((!mso->trigger_slope && mso->trigger_chan == 1) ||
-                       (mso->trigger_slope &&
-                        (mso->trigger_chan == 0 ||
-                         mso->trigger_chan == 2 ||
-                         mso->trigger_chan == 3)))
+       if ((!ctx->trigger_slope && ctx->trigger_chan == 1) ||
+                       (ctx->trigger_slope &&
+                        (ctx->trigger_chan == 0 ||
+                         ctx->trigger_chan == 2 ||
+                         ctx->trigger_chan == 3)))
                dso_trigger |= 0x400;
 
-       switch (mso->trigger_chan) {
+       switch (ctx->trigger_chan) {
        case 1:
                dso_trigger |= 0xe000;
        case 2:
@@ -312,7 +312,7 @@ static int mso_configure_trigger(struct sr_dev_inst *sdi)
                break;
        }
 
-       switch (mso->trigger_outsrc) {
+       switch (ctx->trigger_outsrc) {
        case 1:
                dso_trigger |= 0x800;
                break;
@@ -325,40 +325,40 @@ static int mso_configure_trigger(struct sr_dev_inst *sdi)
 
        }
 
-       ops[0] = mso_trans(5, mso->la_trigger);
-       ops[1] = mso_trans(6, mso->la_trigger_mask);
+       ops[0] = mso_trans(5, ctx->la_trigger);
+       ops[1] = mso_trans(6, ctx->la_trigger_mask);
        ops[2] = mso_trans(3, dso_trigger & 0xff);
        ops[3] = mso_trans(4, (dso_trigger >> 8) & 0xff);
        ops[4] = mso_trans(11,
-                       mso->dso_trigger_width / SR_HZ_TO_NS(mso->cur_rate));
+                       ctx->dso_trigger_width / SR_HZ_TO_NS(ctx->cur_rate));
 
        /* Select the SPI/I2C trigger config bank */
-       ops[5] = mso_trans(REG_CTL2, (mso->ctlbase2 | BITS_CTL2_BANK(2)));
+       ops[5] = mso_trans(REG_CTL2, (ctx->ctlbase2 | BITS_CTL2_BANK(2)));
        /* Configure the SPI/I2C protocol trigger */
-       ops[6] = mso_trans(REG_PT_WORD(0), mso->protocol_trigger.word[0]);
-       ops[7] = mso_trans(REG_PT_WORD(1), mso->protocol_trigger.word[1]);
-       ops[8] = mso_trans(REG_PT_WORD(2), mso->protocol_trigger.word[2]);
-       ops[9] = mso_trans(REG_PT_WORD(3), mso->protocol_trigger.word[3]);
-       ops[10] = mso_trans(REG_PT_MASK(0), mso->protocol_trigger.mask[0]);
-       ops[11] = mso_trans(REG_PT_MASK(1), mso->protocol_trigger.mask[1]);
-       ops[12] = mso_trans(REG_PT_MASK(2), mso->protocol_trigger.mask[2]);
-       ops[13] = mso_trans(REG_PT_MASK(3), mso->protocol_trigger.mask[3]);
-       ops[14] = mso_trans(REG_PT_SPIMODE, mso->protocol_trigger.spimode);
+       ops[6] = mso_trans(REG_PT_WORD(0), ctx->protocol_trigger.word[0]);
+       ops[7] = mso_trans(REG_PT_WORD(1), ctx->protocol_trigger.word[1]);
+       ops[8] = mso_trans(REG_PT_WORD(2), ctx->protocol_trigger.word[2]);
+       ops[9] = mso_trans(REG_PT_WORD(3), ctx->protocol_trigger.word[3]);
+       ops[10] = mso_trans(REG_PT_MASK(0), ctx->protocol_trigger.mask[0]);
+       ops[11] = mso_trans(REG_PT_MASK(1), ctx->protocol_trigger.mask[1]);
+       ops[12] = mso_trans(REG_PT_MASK(2), ctx->protocol_trigger.mask[2]);
+       ops[13] = mso_trans(REG_PT_MASK(3), ctx->protocol_trigger.mask[3]);
+       ops[14] = mso_trans(REG_PT_SPIMODE, ctx->protocol_trigger.spimode);
        /* Select the default config bank */
-       ops[15] = mso_trans(REG_CTL2, mso->ctlbase2);
+       ops[15] = mso_trans(REG_CTL2, ctx->ctlbase2);
 
        return mso_send_control_message(sdi, ARRAY_AND_SIZE(ops));
 }
 
 static int mso_configure_threshold_level(struct sr_dev_inst *sdi)
 {
-       struct mso *mso = sdi->priv;
+       struct context *ctx = sdi->priv;
 
-       return mso_dac_out(sdi, la_threshold_map[mso->la_threshold]);
+       return mso_dac_out(sdi, la_threshold_map[ctx->la_threshold]);
 }
 
 static int mso_parse_serial(const char *iSerial, const char *iProduct,
-                           struct mso *mso)
+                           struct context *ctx)
 {
        unsigned int u1, u2, u3, u4, u5, u6;
 
@@ -366,26 +366,26 @@ static int mso_parse_serial(const char *iSerial, const char *iProduct,
        /* FIXME: This code is in the original app, but I think its
         * used only for the GUI */
 /*     if (strstr(iProduct, "REV_02") || strstr(iProduct, "REV_03"))
-               mso->num_sample_rates = 0x16;
+               ctx->num_sample_rates = 0x16;
        else
-               mso->num_sample_rates = 0x10; */
+               ctx->num_sample_rates = 0x10; */
 
        /* parse iSerial */
        if (iSerial[0] != '4' || sscanf(iSerial, "%5u%3u%3u%1u%1u%6u",
                                &u1, &u2, &u3, &u4, &u5, &u6) != 6)
                return SR_ERR;
-       mso->hwmodel = u4;
-       mso->hwrev = u5;
-       mso->serial = u6;
-       mso->vbit = u1 / 10000;
-       if (mso->vbit == 0)
-               mso->vbit = 4.19195;
-       mso->dac_offset = u2;
-       if (mso->dac_offset == 0)
-               mso->dac_offset = 0x1ff;
-       mso->offset_range = u3;
-       if (mso->offset_range == 0)
-               mso->offset_range = 0x17d;
+       ctx->hwmodel = u4;
+       ctx->hwrev = u5;
+       ctx->serial = u6;
+       ctx->vbit = u1 / 10000;
+       if (ctx->vbit == 0)
+               ctx->vbit = 4.19195;
+       ctx->dac_offset = u2;
+       if (ctx->dac_offset == 0)
+               ctx->dac_offset = 0x1ff;
+       ctx->offset_range = u3;
+       if (ctx->offset_range == 0)
+               ctx->offset_range = 0x17d;
 
        /*
         * FIXME: There is more code on the original software to handle
@@ -403,7 +403,7 @@ static int hw_init(const char *devinfo)
        struct udev *udev;
        struct udev_enumerate *enumerate;
        struct udev_list_entry *devs, *dev_list_entry;
-       struct mso *mso;
+       struct context *ctx;
 
        devinfo = devinfo;
 
@@ -460,27 +460,27 @@ static int hw_init(const char *devinfo)
                product[s] = 0;
                strcpy(manufacturer, iProduct + s);
 
-               if (!(mso = g_try_malloc0(sizeof(struct mso)))) {
-                       sr_err("mso19: %s: mso malloc failed", __func__);
+               if (!(ctx = g_try_malloc0(sizeof(struct context)))) {
+                       sr_err("mso19: %s: ctx malloc failed", __func__);
                        continue; /* TODO: Errors handled correctly? */
                }
 
-               if (mso_parse_serial(iSerial, iProduct, mso) != SR_OK) {
+               if (mso_parse_serial(iSerial, iProduct, ctx) != SR_OK) {
                        sr_err("mso19: Invalid iSerial: %s", iSerial);
-                       goto err_free_mso;
+                       goto err_free_ctx;
                }
-               sprintf(hwrev, "r%d", mso->hwrev);
+               sprintf(hwrev, "r%d", ctx->hwrev);
 
                /* hardware initial state */
-               mso->ctlbase1 = 0;
+               ctx->ctlbase1 = 0;
                {
                        /* Initialize the protocol trigger configuration */
                        int i;
                        for (i = 0; i < 4; i++) {
-                               mso->protocol_trigger.word[i] = 0;
-                               mso->protocol_trigger.mask[i] = 0xff;
+                               ctx->protocol_trigger.word[i] = 0;
+                               ctx->protocol_trigger.mask[i] = 0xff;
                        }
-                       mso->protocol_trigger.spimode = 0;
+                       ctx->protocol_trigger.spimode = 0;
                }
 
                sdi = sr_dev_inst_new(devcnt, SR_ST_INITIALIZING,
@@ -488,11 +488,11 @@ static int hw_init(const char *devinfo)
                if (!sdi) {
                        sr_err("mso19: Unable to create device instance for %s",
                               sysname);
-                       goto err_free_mso;
+                       goto err_free_ctx;
                }
 
                /* save a pointer to our private instance data */
-               sdi->priv = mso;
+               sdi->priv = ctx;
 
                sdi->serial = sr_serial_dev_inst_new(path, -1);
                if (!sdi->serial)
@@ -504,8 +504,8 @@ static int hw_init(const char *devinfo)
 
 err_dev_inst_free:
                sr_dev_inst_free(sdi);
-err_free_mso:
-               g_free(mso);
+err_free_ctx:
+               g_free(ctx);
        }
 
        udev_enumerate_unref(enumerate);
@@ -543,13 +543,13 @@ static int hw_cleanup(void)
 static int hw_dev_open(int dev_index)
 {
        struct sr_dev_inst *sdi;
-       struct mso *mso;
+       struct context *ctx;
        int ret = SR_ERR;
 
        if (!(sdi = sr_dev_inst_get(dev_insts, dev_index)))
                return ret;
 
-       mso = sdi->priv;
+       ctx = sdi->priv;
        sdi->serial->fd = serial_open(sdi->serial->port, O_RDWR);
        if (sdi->serial->fd == -1)
                return ret;
@@ -562,15 +562,15 @@ static int hw_dev_open(int dev_index)
 
        /* FIXME: discard serial buffer */
 
-       mso_check_trigger(sdi, &mso->trigger_state);
-       sr_dbg("mso19: trigger state: 0x%x", mso->trigger_state);
+       mso_check_trigger(sdi, &ctx->trigger_state);
+       sr_dbg("mso19: trigger state: 0x%x", ctx->trigger_state);
 
        ret = mso_reset_adc(sdi);
        if (ret != SR_OK)
                return ret;
 
-       mso_check_trigger(sdi, &mso->trigger_state);
-       sr_dbg("mso19: trigger state: 0x%x", mso->trigger_state);
+       mso_check_trigger(sdi, &ctx->trigger_state);
+       sr_dbg("mso19: trigger state: 0x%x", ctx->trigger_state);
 
 //     ret = mso_reset_fsm(sdi);
 //     if (ret != SR_OK)
@@ -605,12 +605,12 @@ static int hw_dev_close(int dev_index)
 static void *hw_dev_info_get(int dev_index, int dev_info_id)
 {
        struct sr_dev_inst *sdi;
-       struct mso *mso;
+       struct context *ctx;
        void *info = NULL;
 
        if (!(sdi = sr_dev_inst_get(dev_insts, dev_index)))
                return NULL;
-       mso = sdi->priv;
+       ctx = sdi->priv;
 
        switch (dev_info_id) {
        case SR_DI_INST:
@@ -629,7 +629,7 @@ static void *hw_dev_info_get(int dev_index, int dev_info_id)
                info = "01"; /* FIXME */
                break;
        case SR_DI_CUR_SAMPLERATE:
-               info = &mso->cur_rate;
+               info = &ctx->cur_rate;
                break;
        }
        return info;
@@ -679,7 +679,7 @@ static int hw_dev_config_set(int dev_index, int hwcap, void *value)
 static int receive_data(int fd, int revents, void *user_data)
 {
        struct sr_dev_inst *sdi = user_data;
-       struct mso *mso = sdi->priv;
+       struct context *ctx = sdi->priv;
        struct sr_datafeed_packet packet;
        struct sr_datafeed_logic logic;
        uint8_t in[1024], logic_out[1024];
@@ -693,11 +693,11 @@ static int receive_data(int fd, int revents, void *user_data)
                return FALSE;
 
        /* No samples */
-       if (mso->trigger_state != MSO_TRIGGER_DATAREADY) {
-               mso->trigger_state = in[0];
-               if (mso->trigger_state == MSO_TRIGGER_DATAREADY) {
+       if (ctx->trigger_state != MSO_TRIGGER_DATAREADY) {
+               ctx->trigger_state = in[0];
+               if (ctx->trigger_state == MSO_TRIGGER_DATAREADY) {
                        mso_read_buffer(sdi);
-                       mso->buffer_n = 0;
+                       ctx->buffer_n = 0;
                } else {
                        mso_check_trigger(sdi, NULL);
                }
@@ -705,20 +705,20 @@ static int receive_data(int fd, int revents, void *user_data)
        }
 
        /* the hardware always dumps 1024 samples, 24bits each */
-       if (mso->buffer_n < 3072) {
-               memcpy(mso->buffer + mso->buffer_n, in, s);
-               mso->buffer_n += s;
+       if (ctx->buffer_n < 3072) {
+               memcpy(ctx->buffer + ctx->buffer_n, in, s);
+               ctx->buffer_n += s;
        }
-       if (mso->buffer_n < 3072)
+       if (ctx->buffer_n < 3072)
                return FALSE;
 
        /* do the conversion */
        for (i = 0; i < 1024; i++) {
                /* FIXME: Need to do conversion to mV */
-               analog_out[i] = (mso->buffer[i * 3] & 0x3f) |
-                       ((mso->buffer[i * 3 + 1] & 0xf) << 6);
-               logic_out[i] = ((mso->buffer[i * 3 + 1] & 0x30) >> 4) |
-                       ((mso->buffer[i * 3 + 2] & 0x3f) << 2);
+               analog_out[i] = (ctx->buffer[i * 3] & 0x3f) |
+                       ((ctx->buffer[i * 3 + 1] & 0xf) << 6);
+               logic_out[i] = ((ctx->buffer[i * 3 + 1] & 0x30) >> 4) |
+                       ((ctx->buffer[i * 3 + 2] & 0x3f) << 2);
        }
 
        packet.type = SR_DF_LOGIC;
@@ -726,7 +726,7 @@ static int receive_data(int fd, int revents, void *user_data)
        logic.length = 1024;
        logic.unitsize = 1;
        logic.data = logic_out;
-       sr_session_bus(mso->session_id, &packet);
+       sr_session_bus(ctx->session_id, &packet);
 
        // Dont bother fixing this yet, keep it "old style"
        /*
@@ -734,11 +734,11 @@ static int receive_data(int fd, int revents, void *user_data)
        packet.length = 1024;
        packet.unitsize = sizeof(double);
        packet.payload = analog_out;
-       sr_session_bus(mso->session_id, &packet);
+       sr_session_bus(ctx->session_id, &packet);
        */
 
        packet.type = SR_DF_END;
-       sr_session_bus(mso->session_id, &packet);
+       sr_session_bus(ctx->session_id, &packet);
 
        return TRUE;
 }
@@ -746,14 +746,14 @@ static int receive_data(int fd, int revents, void *user_data)
 static int hw_dev_acquisition_start(int dev_index, gpointer session_dev_id)
 {
        struct sr_dev_inst *sdi;
-       struct mso *mso;
+       struct context *ctx;
        struct sr_datafeed_packet packet;
        struct sr_datafeed_header header;
        int ret = SR_ERR;
 
        if (!(sdi = sr_dev_inst_get(dev_insts, dev_index)))
                return ret;
-       mso = sdi->priv;
+       ctx = sdi->priv;
 
        /* FIXME: No need to do full reconfigure every time */
 //     ret = mso_reset_fsm(sdi);
@@ -761,15 +761,15 @@ static int hw_dev_acquisition_start(int dev_index, gpointer session_dev_id)
 //             return ret;
 
        /* FIXME: ACDC Mode */
-       mso->ctlbase1 &= 0x7f;
-//     mso->ctlbase1 |= mso->acdcmode;
+       ctx->ctlbase1 &= 0x7f;
+//     ctx->ctlbase1 |= ctx->acdcmode;
 
-       ret = mso_configure_rate(sdi, mso->cur_rate);
+       ret = mso_configure_rate(sdi, ctx->cur_rate);
        if (ret != SR_OK)
                return ret;
 
        /* set dac offset */
-       ret = mso_dac_out(sdi, mso->dac_offset);
+       ret = mso_dac_out(sdi, ctx->dac_offset);
        if (ret != SR_OK)
                return ret;
 
@@ -796,19 +796,19 @@ static int hw_dev_acquisition_start(int dev_index, gpointer session_dev_id)
 //     if (ret != SR_OK)
 //             return ret;
 
-       mso_check_trigger(sdi, &mso->trigger_state);
+       mso_check_trigger(sdi, &ctx->trigger_state);
        ret = mso_check_trigger(sdi, NULL);
        if (ret != SR_OK)
                return ret;
 
-       mso->session_id = session_dev_id;
+       ctx->session_id = session_dev_id;
        sr_source_add(sdi->serial->fd, G_IO_IN, -1, receive_data, sdi);
 
        packet.type = SR_DF_HEADER;
        packet.payload = (unsigned char *) &header;
        header.feed_version = 1;
        gettimeofday(&header.starttime, NULL);
-       header.samplerate = mso->cur_rate;
+       header.samplerate = ctx->cur_rate;
        // header.num_analog_probes = 1;
        header.num_logic_probes = 8;
        sr_session_bus(session_dev_id, &packet);
index 02a42e5290d0f44dff150c51e0b93bd63ff93888..13215f66eb13fb18fd1472f04556c455d66fc65c 100644 (file)
@@ -51,7 +51,7 @@ struct mso_prototrig {
        uint8_t spimode;
 };
 
-/* our private per-instance data */
+/* Private, per-device-instance driver context. */
 struct mso {
        /* info */
        uint8_t hwmodel;
index a4013826963386ce4827554c4a39e2da04fa3a8a..4e38f56b5ab9d169bde6a7d0a2a5f6f4449edc6e 100644 (file)
@@ -130,20 +130,20 @@ static int send_longcommand(int fd, uint8_t command, uint32_t data)
        return SR_OK;
 }
 
-static int configure_probes(struct ols_dev *ols, GSList *probes)
+static int configure_probes(struct context *ctx, GSList *probes)
 {
        struct sr_probe *probe;
        GSList *l;
        int probe_bit, stage, i;
        char *tc;
 
-       ols->probe_mask = 0;
+       ctx->probe_mask = 0;
        for (i = 0; i < NUM_TRIGGER_STAGES; i++) {
-               ols->trigger_mask[i] = 0;
-               ols->trigger_value[i] = 0;
+               ctx->trigger_mask[i] = 0;
+               ctx->trigger_value[i] = 0;
        }
 
-       ols->num_stages = 0;
+       ctx->num_stages = 0;
        for (l = probes; l; l = l->next) {
                probe = (struct sr_probe *)l->data;
                if (!probe->enabled)
@@ -154,7 +154,7 @@ static int configure_probes(struct ols_dev *ols, GSList *probes)
                 * flag register.
                 */
                probe_bit = 1 << (probe->index - 1);
-               ols->probe_mask |= probe_bit;
+               ctx->probe_mask |= probe_bit;
 
                if (!probe->trigger)
                        continue;
@@ -162,9 +162,9 @@ static int configure_probes(struct ols_dev *ols, GSList *probes)
                /* Configure trigger mask and value. */
                stage = 0;
                for (tc = probe->trigger; tc && *tc; tc++) {
-                       ols->trigger_mask[stage] |= probe_bit;
+                       ctx->trigger_mask[stage] |= probe_bit;
                        if (*tc == '1')
-                               ols->trigger_value[stage] |= probe_bit;
+                               ctx->trigger_value[stage] |= probe_bit;
                        stage++;
                        if (stage > 3)
                                /*
@@ -173,8 +173,8 @@ static int configure_probes(struct ols_dev *ols, GSList *probes)
                                 */
                                return SR_ERR;
                }
-               if (stage > ols->num_stages)
-                       ols->num_stages = stage;
+               if (stage > ctx->num_stages)
+                       ctx->num_stages = stage;
        }
 
        return SR_OK;
@@ -204,36 +204,36 @@ static uint32_t reverse32(uint32_t in)
        return out;
 }
 
-static struct ols_dev *ols_dev_new(void)
+static struct context *ols_dev_new(void)
 {
-       struct ols_dev *ols;
+       struct context *ctx;
 
-       /* TODO: Is 'ols' ever g_free()'d? */
-       if (!(ols = g_try_malloc0(sizeof(struct ols_dev)))) {
-               sr_err("ols: %s: ols malloc failed", __func__);
+       /* TODO: Is 'ctx' ever g_free()'d? */
+       if (!(ctx = g_try_malloc0(sizeof(struct context)))) {
+               sr_err("ols: %s: ctx malloc failed", __func__);
                return NULL;
        }
 
-       ols->trigger_at = -1;
-       ols->probe_mask = 0xffffffff;
-       ols->cur_samplerate = SR_KHZ(200);
-       ols->serial = NULL;
+       ctx->trigger_at = -1;
+       ctx->probe_mask = 0xffffffff;
+       ctx->cur_samplerate = SR_KHZ(200);
+       ctx->serial = NULL;
 
-       return ols;
+       return ctx;
 }
 
 static struct sr_dev_inst *get_metadata(int fd)
 {
        struct sr_dev_inst *sdi;
-       struct ols_dev *ols;
+       struct context *ctx;
        uint32_t tmp_int;
        uint8_t key, type, token;
        GString *tmp_str, *devname, *version;
        gchar tmp_c;
 
        sdi = sr_dev_inst_new(0, SR_ST_INACTIVE, NULL, NULL, NULL);
-       ols = ols_dev_new();
-       sdi->priv = ols;
+       ctx = ols_dev_new();
+       sdi->priv = ctx;
 
        devname = g_string_new("");
        version = g_string_new("");
@@ -288,11 +288,11 @@ static struct sr_dev_inst *get_metadata(int fd)
                        switch (token) {
                        case 0x00:
                                /* Number of usable probes */
-                               ols->num_probes = tmp_int;
+                               ctx->num_probes = tmp_int;
                                break;
                        case 0x01:
                                /* Amount of sample memory available (bytes) */
-                               ols->max_samples = tmp_int;
+                               ctx->max_samples = tmp_int;
                                break;
                        case 0x02:
                                /* Amount of dynamic memory available (bytes) */
@@ -300,11 +300,11 @@ static struct sr_dev_inst *get_metadata(int fd)
                                break;
                        case 0x03:
                                /* Maximum sample rate (hz) */
-                               ols->max_samplerate = tmp_int;
+                               ctx->max_samplerate = tmp_int;
                                break;
                        case 0x04:
                                /* protocol version */
-                               ols->protocol_version = tmp_int;
+                               ctx->protocol_version = tmp_int;
                                break;
                        default:
                                sr_info("ols: unknown token 0x%.2x: 0x%.8x",
@@ -321,11 +321,11 @@ static struct sr_dev_inst *get_metadata(int fd)
                        switch (token) {
                        case 0x00:
                                /* Number of usable probes */
-                               ols->num_probes = tmp_c;
+                               ctx->num_probes = tmp_c;
                                break;
                        case 0x01:
                                /* protocol version */
-                               ols->protocol_version = tmp_c;
+                               ctx->protocol_version = tmp_c;
                                break;
                        default:
                                sr_info("ols: unknown token 0x%.2x: 0x%.2x",
@@ -350,7 +350,7 @@ static struct sr_dev_inst *get_metadata(int fd)
 static int hw_init(const char *devinfo)
 {
        struct sr_dev_inst *sdi;
-       struct ols_dev *ols;
+       struct context *ctx;
        GSList *ports, *l;
        GPollFD *fds, probefd;
        int devcnt, final_devcnt, num_ports, fd, ret, i;
@@ -448,11 +448,11 @@ static int hw_init(const char *devinfo)
                        /* not an OLS -- some other board that uses the sump protocol */
                        sdi = sr_dev_inst_new(final_devcnt, SR_ST_INACTIVE,
                                        "Sump", "Logic Analyzer", "v1.0");
-                       ols = ols_dev_new();
-                       ols->num_probes = 32;
-                       sdi->priv = ols;
+                       ctx = ols_dev_new();
+                       ctx->num_probes = 32;
+                       sdi->priv = ctx;
                }
-               ols->serial = sr_serial_dev_inst_new(dev_names[i], -1);
+               ctx->serial = sr_serial_dev_inst_new(dev_names[i], -1);
                dev_insts = g_slist_append(dev_insts, sdi);
                final_devcnt++;
                serial_close(fds[i].fd);
@@ -483,15 +483,15 @@ hw_init_free_ports:
 static int hw_dev_open(int dev_index)
 {
        struct sr_dev_inst *sdi;
-       struct ols_dev *ols;
+       struct context *ctx;
 
        if (!(sdi = sr_dev_inst_get(dev_insts, dev_index)))
                return SR_ERR;
 
-       ols = sdi->priv;
+       ctx = sdi->priv;
 
-       ols->serial->fd = serial_open(ols->serial->port, O_RDWR);
-       if (ols->serial->fd == -1)
+       ctx->serial->fd = serial_open(ctx->serial->port, O_RDWR);
+       if (ctx->serial->fd == -1)
                return SR_ERR;
 
        sdi->status = SR_ST_ACTIVE;
@@ -502,19 +502,19 @@ static int hw_dev_open(int dev_index)
 static int hw_dev_close(int dev_index)
 {
        struct sr_dev_inst *sdi;
-       struct ols_dev *ols;
+       struct context *ctx;
 
        if (!(sdi = sr_dev_inst_get(dev_insts, dev_index))) {
                sr_err("ols: %s: sdi was NULL", __func__);
                return SR_ERR; /* TODO: SR_ERR_ARG? */
        }
 
-       ols = sdi->priv;
+       ctx = sdi->priv;
 
        /* TODO */
-       if (ols->serial->fd != -1) {
-               serial_close(ols->serial->fd);
-               ols->serial->fd = -1;
+       if (ctx->serial->fd != -1) {
+               serial_close(ctx->serial->fd);
+               ctx->serial->fd = -1;
                sdi->status = SR_ST_INACTIVE;
        }
 
@@ -525,7 +525,7 @@ static int hw_cleanup(void)
 {
        GSList *l;
        struct sr_dev_inst *sdi;
-       struct ols_dev *ols;
+       struct context *ctx;
        int ret = SR_OK;
 
        /* Properly close and free all devices. */
@@ -536,7 +536,7 @@ static int hw_cleanup(void)
                        ret = SR_ERR_BUG;
                        continue;
                }
-               if (!(ols = sdi->priv)) {
+               if (!(ctx = sdi->priv)) {
                        /* Log error, but continue cleaning up the rest. */
                        sr_err("ols: %s: sdi->priv was NULL, continuing",
                               __func__);
@@ -544,9 +544,9 @@ static int hw_cleanup(void)
                        continue;
                }
                /* TODO: Check for serial != NULL. */
-               if (ols->serial->fd != -1)
-                       serial_close(ols->serial->fd);
-               sr_serial_dev_inst_free(ols->serial);
+               if (ctx->serial->fd != -1)
+                       serial_close(ctx->serial->fd);
+               sr_serial_dev_inst_free(ctx->serial);
                sr_dev_inst_free(sdi);
        }
        g_slist_free(dev_insts);
@@ -558,12 +558,12 @@ static int hw_cleanup(void)
 static void *hw_dev_info_get(int dev_index, int dev_info_id)
 {
        struct sr_dev_inst *sdi;
-       struct ols_dev *ols;
+       struct context *ctx;
        void *info;
 
        if (!(sdi = sr_dev_inst_get(dev_insts, dev_index)))
                return NULL;
-       ols = sdi->priv;
+       ctx = sdi->priv;
 
        info = NULL;
        switch (dev_info_id) {
@@ -583,7 +583,7 @@ static void *hw_dev_info_get(int dev_index, int dev_info_id)
                info = (char *)TRIGGER_TYPES;
                break;
        case SR_DI_CUR_SAMPLERATE:
-               info = &ols->cur_samplerate;
+               info = &ctx->cur_samplerate;
                break;
        }
 
@@ -607,32 +607,32 @@ static int *hw_hwcap_get_all(void)
 
 static int set_samplerate(struct sr_dev_inst *sdi, uint64_t samplerate)
 {
-       struct ols_dev *ols;
+       struct context *ctx;
 
-       ols = sdi->priv;
-       if (ols->max_samplerate) {
-               if (samplerate > ols->max_samplerate)
+       ctx = sdi->priv;
+       if (ctx->max_samplerate) {
+               if (samplerate > ctx->max_samplerate)
                        return SR_ERR_SAMPLERATE;
        } else if (samplerate < samplerates.low || samplerate > samplerates.high)
                return SR_ERR_SAMPLERATE;
 
        if (samplerate > CLOCK_RATE) {
-               ols->flag_reg |= FLAG_DEMUX;
-               ols->cur_samplerate_divider = (CLOCK_RATE * 2 / samplerate) - 1;
+               ctx->flag_reg |= FLAG_DEMUX;
+               ctx->cur_samplerate_divider = (CLOCK_RATE * 2 / samplerate) - 1;
        } else {
-               ols->flag_reg &= ~FLAG_DEMUX;
-               ols->cur_samplerate_divider = (CLOCK_RATE / samplerate) - 1;
+               ctx->flag_reg &= ~FLAG_DEMUX;
+               ctx->cur_samplerate_divider = (CLOCK_RATE / samplerate) - 1;
        }
 
        /* Calculate actual samplerate used and complain if it is different
         * from the requested.
         */
-       ols->cur_samplerate = CLOCK_RATE / (ols->cur_samplerate_divider + 1);
-       if (ols->flag_reg & FLAG_DEMUX)
-               ols->cur_samplerate *= 2;
-       if (ols->cur_samplerate != samplerate)
+       ctx->cur_samplerate = CLOCK_RATE / (ctx->cur_samplerate_divider + 1);
+       if (ctx->flag_reg & FLAG_DEMUX)
+               ctx->cur_samplerate *= 2;
+       if (ctx->cur_samplerate != samplerate)
                sr_err("ols: can't match samplerate %" PRIu64 ", using %"
-                      PRIu64, samplerate, ols->cur_samplerate);
+                      PRIu64, samplerate, ctx->cur_samplerate);
 
        return SR_OK;
 }
@@ -640,13 +640,13 @@ static int set_samplerate(struct sr_dev_inst *sdi, uint64_t samplerate)
 static int hw_dev_config_set(int dev_index, int hwcap, void *value)
 {
        struct sr_dev_inst *sdi;
-       struct ols_dev *ols;
+       struct context *ctx;
        int ret;
        uint64_t *tmp_u64;
 
        if (!(sdi = sr_dev_inst_get(dev_insts, dev_index)))
                return SR_ERR;
-       ols = sdi->priv;
+       ctx = sdi->priv;
 
        if (sdi->status != SR_ST_ACTIVE)
                return SR_ERR;
@@ -656,22 +656,22 @@ static int hw_dev_config_set(int dev_index, int hwcap, void *value)
                ret = set_samplerate(sdi, *(uint64_t *)value);
                break;
        case SR_HWCAP_PROBECONFIG:
-               ret = configure_probes(ols, (GSList *)value);
+               ret = configure_probes(ctx, (GSList *)value);
                break;
        case SR_HWCAP_LIMIT_SAMPLES:
                tmp_u64 = value;
                if (*tmp_u64 < MIN_NUM_SAMPLES)
                        return SR_ERR;
-               if (*tmp_u64 > ols->max_samples)
+               if (*tmp_u64 > ctx->max_samples)
                        sr_err("ols: sample limit exceeds hw max");
-               ols->limit_samples = *tmp_u64;
-               sr_info("ols: sample limit %" PRIu64, ols->limit_samples);
+               ctx->limit_samples = *tmp_u64;
+               sr_info("ols: sample limit %" PRIu64, ctx->limit_samples);
                ret = SR_OK;
                break;
        case SR_HWCAP_CAPTURE_RATIO:
-               ols->capture_ratio = *(uint64_t *)value;
-               if (ols->capture_ratio < 0 || ols->capture_ratio > 100) {
-                       ols->capture_ratio = 0;
+               ctx->capture_ratio = *(uint64_t *)value;
+               if (ctx->capture_ratio < 0 || ctx->capture_ratio > 100) {
+                       ctx->capture_ratio = 0;
                        ret = SR_ERR;
                } else
                        ret = SR_OK;
@@ -679,7 +679,7 @@ static int hw_dev_config_set(int dev_index, int hwcap, void *value)
        case SR_HWCAP_RLE:
                if (GPOINTER_TO_INT(value)) {
                        sr_info("ols: enabling RLE");
-                       ols->flag_reg |= FLAG_RLE;
+                       ctx->flag_reg |= FLAG_RLE;
                }
                ret = SR_OK;
                break;
@@ -695,25 +695,25 @@ static int receive_data(int fd, int revents, void *session_data)
        struct sr_datafeed_packet packet;
        struct sr_datafeed_logic logic;
        struct sr_dev_inst *sdi;
-       struct ols_dev *ols;
+       struct context *ctx;
        GSList *l;
        int num_channels, offset, i, j;
        unsigned char byte;
 
-       /* find this device's ols_dev struct by its fd */
-       ols = NULL;
+       /* Find this device's ctx struct by its fd. */
+       ctx = NULL;
        for (l = dev_insts; l; l = l->next) {
                sdi = l->data;
-               if (ols->serial->fd == fd) {
-                       ols = sdi->priv;
+               if (ctx->serial->fd == fd) {
+                       ctx = sdi->priv;
                        break;
                }
        }
-       if (!ols)
-               /* shouldn't happen */
+       if (!ctx)
+               /* Shouldn't happen. */
                return TRUE;
 
-       if (ols->num_transfers++ == 0) {
+       if (ctx->num_transfers++ == 0) {
                /*
                 * First time round, means the device started sending data,
                 * and will not stop until done. If it stops sending for
@@ -722,19 +722,19 @@ static int receive_data(int fd, int revents, void *session_data)
                 */
                sr_source_remove(fd);
                sr_source_add(fd, G_IO_IN, 30, receive_data, session_data);
-               ols->raw_sample_buf = g_try_malloc(ols->limit_samples * 4);
-               if (!ols->raw_sample_buf) {
-                       sr_err("ols: %s: ols->raw_sample_buf malloc failed",
+               ctx->raw_sample_buf = g_try_malloc(ctx->limit_samples * 4);
+               if (!ctx->raw_sample_buf) {
+                       sr_err("ols: %s: ctx->raw_sample_buf malloc failed",
                               __func__);
                        return FALSE;
                }
                /* fill with 1010... for debugging */
-               memset(ols->raw_sample_buf, 0x82, ols->limit_samples * 4);
+               memset(ctx->raw_sample_buf, 0x82, ctx->limit_samples * 4);
        }
 
        num_channels = 0;
        for (i = 0x20; i > 0x02; i /= 2) {
-               if ((ols->flag_reg & i) == 0)
+               if ((ctx->flag_reg & i) == 0)
                        num_channels++;
        }
 
@@ -743,37 +743,37 @@ static int receive_data(int fd, int revents, void *session_data)
                        return FALSE;
 
                /* Ignore it if we've read enough. */
-               if (ols->num_samples >= ols->limit_samples)
+               if (ctx->num_samples >= ctx->limit_samples)
                        return TRUE;
 
-               ols->sample[ols->num_bytes++] = byte;
+               ctx->sample[ctx->num_bytes++] = byte;
                sr_dbg("ols: received byte 0x%.2x", byte);
-               if (ols->num_bytes == num_channels) {
+               if (ctx->num_bytes == num_channels) {
                        /* Got a full sample. */
                        sr_dbg("ols: received sample 0x%.*x",
-                              ols->num_bytes * 2, *(int *)ols->sample);
-                       if (ols->flag_reg & FLAG_RLE) {
+                              ctx->num_bytes * 2, *(int *)ctx->sample);
+                       if (ctx->flag_reg & FLAG_RLE) {
                                /*
                                 * In RLE mode -1 should never come in as a
                                 * sample, because bit 31 is the "count" flag.
                                 */
-                               if (ols->sample[ols->num_bytes - 1] & 0x80) {
-                                       ols->sample[ols->num_bytes - 1] &= 0x7f;
+                               if (ctx->sample[ctx->num_bytes - 1] & 0x80) {
+                                       ctx->sample[ctx->num_bytes - 1] &= 0x7f;
                                        /*
                                         * FIXME: This will only work on
                                         * little-endian systems.
                                         */
-                                       ols->rle_count = *(int *)(ols->sample);
-                                       sr_dbg("ols: RLE count = %d", ols->rle_count);
-                                       ols->num_bytes = 0;
+                                       ctx->rle_count = *(int *)(ctx->sample);
+                                       sr_dbg("ols: RLE count = %d", ctx->rle_count);
+                                       ctx->num_bytes = 0;
                                        return TRUE;
                                }
                        }
-                       ols->num_samples += ols->rle_count + 1;
-                       if (ols->num_samples > ols->limit_samples) {
+                       ctx->num_samples += ctx->rle_count + 1;
+                       if (ctx->num_samples > ctx->limit_samples) {
                                /* Save us from overrunning the buffer. */
-                               ols->rle_count -= ols->num_samples - ols->limit_samples;
-                               ols->num_samples = ols->limit_samples;
+                               ctx->rle_count -= ctx->num_samples - ctx->limit_samples;
+                               ctx->num_samples = ctx->limit_samples;
                        }
 
                        if (num_channels < 4) {
@@ -787,33 +787,33 @@ static int receive_data(int fd, int revents, void *session_data)
                                 * the number of probes.
                                 */
                                j = 0;
-                               memset(ols->tmp_sample, 0, 4);
+                               memset(ctx->tmp_sample, 0, 4);
                                for (i = 0; i < 4; i++) {
-                                       if (((ols->flag_reg >> 2) & (1 << i)) == 0) {
+                                       if (((ctx->flag_reg >> 2) & (1 << i)) == 0) {
                                                /*
                                                 * This channel group was
                                                 * enabled, copy from received
                                                 * sample.
                                                 */
-                                               ols->tmp_sample[i] = ols->sample[j++];
+                                               ctx->tmp_sample[i] = ctx->sample[j++];
                                        }
                                }
-                               memcpy(ols->sample, ols->tmp_sample, 4);
-                               sr_dbg("ols: full sample 0x%.8x", *(int *)ols->sample);
+                               memcpy(ctx->sample, ctx->tmp_sample, 4);
+                               sr_dbg("ols: full sample 0x%.8x", *(int *)ctx->sample);
                        }
 
                        /* the OLS sends its sample buffer backwards.
                         * store it in reverse order here, so we can dump
                         * this on the session bus later.
                         */
-                       offset = (ols->limit_samples - ols->num_samples) * 4;
-                       for (i = 0; i <= ols->rle_count; i++) {
-                               memcpy(ols->raw_sample_buf + offset + (i * 4),
-                                      ols->sample, 4);
+                       offset = (ctx->limit_samples - ctx->num_samples) * 4;
+                       for (i = 0; i <= ctx->rle_count; i++) {
+                               memcpy(ctx->raw_sample_buf + offset + (i * 4),
+                                      ctx->sample, 4);
                        }
-                       memset(ols->sample, 0, 4);
-                       ols->num_bytes = 0;
-                       ols->rle_count = 0;
+                       memset(ctx->sample, 0, 4);
+                       ctx->num_bytes = 0;
+                       ctx->rle_count = 0;
                }
        } else {
                /*
@@ -821,18 +821,18 @@ static int receive_data(int fd, int revents, void *session_data)
                 * we've acquired all the samples we asked for -- we're done.
                 * Send the (properly-ordered) buffer to the frontend.
                 */
-               if (ols->trigger_at != -1) {
+               if (ctx->trigger_at != -1) {
                        /* a trigger was set up, so we need to tell the frontend
                         * about it.
                         */
-                       if (ols->trigger_at > 0) {
+                       if (ctx->trigger_at > 0) {
                                /* there are pre-trigger samples, send those first */
                                packet.type = SR_DF_LOGIC;
                                packet.payload = &logic;
-                               logic.length = ols->trigger_at * 4;
+                               logic.length = ctx->trigger_at * 4;
                                logic.unitsize = 4;
-                               logic.data = ols->raw_sample_buf +
-                                       (ols->limit_samples - ols->num_samples) * 4;
+                               logic.data = ctx->raw_sample_buf +
+                                       (ctx->limit_samples - ctx->num_samples) * 4;
                                sr_session_bus(session_data, &packet);
                        }
 
@@ -843,22 +843,22 @@ static int receive_data(int fd, int revents, void *session_data)
                        /* send post-trigger samples */
                        packet.type = SR_DF_LOGIC;
                        packet.payload = &logic;
-                       logic.length = (ols->num_samples * 4) - (ols->trigger_at * 4);
+                       logic.length = (ctx->num_samples * 4) - (ctx->trigger_at * 4);
                        logic.unitsize = 4;
-                       logic.data = ols->raw_sample_buf + ols->trigger_at * 4 +
-                               (ols->limit_samples - ols->num_samples) * 4;
+                       logic.data = ctx->raw_sample_buf + ctx->trigger_at * 4 +
+                               (ctx->limit_samples - ctx->num_samples) * 4;
                        sr_session_bus(session_data, &packet);
                } else {
                        /* no trigger was used */
                        packet.type = SR_DF_LOGIC;
                        packet.payload = &logic;
-                       logic.length = ols->num_samples * 4;
+                       logic.length = ctx->num_samples * 4;
                        logic.unitsize = 4;
-                       logic.data = ols->raw_sample_buf +
-                               (ols->limit_samples - ols->num_samples) * 4;
+                       logic.data = ctx->raw_sample_buf +
+                               (ctx->limit_samples - ctx->num_samples) * 4;
                        sr_session_bus(session_data, &packet);
                }
-               g_free(ols->raw_sample_buf);
+               g_free(ctx->raw_sample_buf);
 
                serial_flush(fd);
                serial_close(fd);
@@ -874,7 +874,7 @@ static int hw_dev_acquisition_start(int dev_index, gpointer session_data)
        struct sr_datafeed_packet *packet;
        struct sr_datafeed_header *header;
        struct sr_dev_inst *sdi;
-       struct ols_dev *ols;
+       struct context *ctx;
        uint32_t trigger_config[4];
        uint32_t data;
        uint16_t readcount, delaycount;
@@ -885,7 +885,7 @@ static int hw_dev_acquisition_start(int dev_index, gpointer session_data)
        if (!(sdi = sr_dev_inst_get(dev_insts, dev_index)))
                return SR_ERR;
 
-       ols = sdi->priv;
+       ctx = sdi->priv;
 
        if (sdi->status != SR_ST_ACTIVE)
                return SR_ERR;
@@ -898,7 +898,7 @@ static int hw_dev_acquisition_start(int dev_index, gpointer session_data)
        changrp_mask = 0;
        num_channels = 0;
        for (i = 0; i < 4; i++) {
-               if (ols->probe_mask & (0xff << (i * 8))) {
+               if (ctx->probe_mask & (0xff << (i * 8))) {
                        changrp_mask |= (1 << i);
                        num_channels++;
                }
@@ -908,92 +908,92 @@ static int hw_dev_acquisition_start(int dev_index, gpointer session_data)
         * Limit readcount to prevent reading past the end of the hardware
         * buffer.
         */
-       readcount = MIN(ols->max_samples / num_channels, ols->limit_samples) / 4;
+       readcount = MIN(ctx->max_samples / num_channels, ctx->limit_samples) / 4;
 
        memset(trigger_config, 0, 16);
-       trigger_config[ols->num_stages - 1] |= 0x08;
-       if (ols->trigger_mask[0]) {
-               delaycount = readcount * (1 - ols->capture_ratio / 100.0);
-               ols->trigger_at = (readcount - delaycount) * 4 - ols->num_stages;
+       trigger_config[ctx->num_stages - 1] |= 0x08;
+       if (ctx->trigger_mask[0]) {
+               delaycount = readcount * (1 - ctx->capture_ratio / 100.0);
+               ctx->trigger_at = (readcount - delaycount) * 4 - ctx->num_stages;
 
-               if (send_longcommand(ols->serial->fd, CMD_SET_TRIGGER_MASK_0,
-                       reverse32(ols->trigger_mask[0])) != SR_OK)
+               if (send_longcommand(ctx->serial->fd, CMD_SET_TRIGGER_MASK_0,
+                       reverse32(ctx->trigger_mask[0])) != SR_OK)
                        return SR_ERR;
-               if (send_longcommand(ols->serial->fd, CMD_SET_TRIGGER_VALUE_0,
-                       reverse32(ols->trigger_value[0])) != SR_OK)
+               if (send_longcommand(ctx->serial->fd, CMD_SET_TRIGGER_VALUE_0,
+                       reverse32(ctx->trigger_value[0])) != SR_OK)
                        return SR_ERR;
-               if (send_longcommand(ols->serial->fd, CMD_SET_TRIGGER_CONFIG_0,
+               if (send_longcommand(ctx->serial->fd, CMD_SET_TRIGGER_CONFIG_0,
                        trigger_config[0]) != SR_OK)
                        return SR_ERR;
 
-               if (send_longcommand(ols->serial->fd, CMD_SET_TRIGGER_MASK_1,
-                       reverse32(ols->trigger_mask[1])) != SR_OK)
+               if (send_longcommand(ctx->serial->fd, CMD_SET_TRIGGER_MASK_1,
+                       reverse32(ctx->trigger_mask[1])) != SR_OK)
                        return SR_ERR;
-               if (send_longcommand(ols->serial->fd, CMD_SET_TRIGGER_VALUE_1,
-                       reverse32(ols->trigger_value[1])) != SR_OK)
+               if (send_longcommand(ctx->serial->fd, CMD_SET_TRIGGER_VALUE_1,
+                       reverse32(ctx->trigger_value[1])) != SR_OK)
                        return SR_ERR;
-               if (send_longcommand(ols->serial->fd, CMD_SET_TRIGGER_CONFIG_1,
+               if (send_longcommand(ctx->serial->fd, CMD_SET_TRIGGER_CONFIG_1,
                        trigger_config[1]) != SR_OK)
                        return SR_ERR;
 
-               if (send_longcommand(ols->serial->fd, CMD_SET_TRIGGER_MASK_2,
-                       reverse32(ols->trigger_mask[2])) != SR_OK)
+               if (send_longcommand(ctx->serial->fd, CMD_SET_TRIGGER_MASK_2,
+                       reverse32(ctx->trigger_mask[2])) != SR_OK)
                        return SR_ERR;
-               if (send_longcommand(ols->serial->fd, CMD_SET_TRIGGER_VALUE_2,
-                       reverse32(ols->trigger_value[2])) != SR_OK)
+               if (send_longcommand(ctx->serial->fd, CMD_SET_TRIGGER_VALUE_2,
+                       reverse32(ctx->trigger_value[2])) != SR_OK)
                        return SR_ERR;
-               if (send_longcommand(ols->serial->fd, CMD_SET_TRIGGER_CONFIG_2,
+               if (send_longcommand(ctx->serial->fd, CMD_SET_TRIGGER_CONFIG_2,
                        trigger_config[2]) != SR_OK)
                        return SR_ERR;
 
-               if (send_longcommand(ols->serial->fd, CMD_SET_TRIGGER_MASK_3,
-                       reverse32(ols->trigger_mask[3])) != SR_OK)
+               if (send_longcommand(ctx->serial->fd, CMD_SET_TRIGGER_MASK_3,
+                       reverse32(ctx->trigger_mask[3])) != SR_OK)
                        return SR_ERR;
-               if (send_longcommand(ols->serial->fd, CMD_SET_TRIGGER_VALUE_3,
-                       reverse32(ols->trigger_value[3])) != SR_OK)
+               if (send_longcommand(ctx->serial->fd, CMD_SET_TRIGGER_VALUE_3,
+                       reverse32(ctx->trigger_value[3])) != SR_OK)
                        return SR_ERR;
-               if (send_longcommand(ols->serial->fd, CMD_SET_TRIGGER_CONFIG_3,
+               if (send_longcommand(ctx->serial->fd, CMD_SET_TRIGGER_CONFIG_3,
                        trigger_config[3]) != SR_OK)
                        return SR_ERR;
        } else {
-               if (send_longcommand(ols->serial->fd, CMD_SET_TRIGGER_MASK_0,
-                               ols->trigger_mask[0]) != SR_OK)
+               if (send_longcommand(ctx->serial->fd, CMD_SET_TRIGGER_MASK_0,
+                               ctx->trigger_mask[0]) != SR_OK)
                        return SR_ERR;
-               if (send_longcommand(ols->serial->fd, CMD_SET_TRIGGER_VALUE_0,
-                               ols->trigger_value[0]) != SR_OK)
+               if (send_longcommand(ctx->serial->fd, CMD_SET_TRIGGER_VALUE_0,
+                               ctx->trigger_value[0]) != SR_OK)
                        return SR_ERR;
-               if (send_longcommand(ols->serial->fd, CMD_SET_TRIGGER_CONFIG_0,
+               if (send_longcommand(ctx->serial->fd, CMD_SET_TRIGGER_CONFIG_0,
                     0x00000008) != SR_OK)
                        return SR_ERR;
                delaycount = readcount;
        }
 
        sr_info("ols: setting samplerate to %" PRIu64 " Hz (divider %u, "
-               "demux %s)", ols->cur_samplerate, ols->cur_samplerate_divider,
-               ols->flag_reg & FLAG_DEMUX ? "on" : "off");
-       if (send_longcommand(ols->serial->fd, CMD_SET_DIVIDER,
-                       reverse32(ols->cur_samplerate_divider)) != SR_OK)
+               "demux %s)", ctx->cur_samplerate, ctx->cur_samplerate_divider,
+               ctx->flag_reg & FLAG_DEMUX ? "on" : "off");
+       if (send_longcommand(ctx->serial->fd, CMD_SET_DIVIDER,
+                       reverse32(ctx->cur_samplerate_divider)) != SR_OK)
                return SR_ERR;
 
        /* Send sample limit and pre/post-trigger capture ratio. */
        data = ((readcount - 1) & 0xffff) << 16;
        data |= (delaycount - 1) & 0xffff;
-       if (send_longcommand(ols->serial->fd, CMD_CAPTURE_SIZE, reverse16(data)) != SR_OK)
+       if (send_longcommand(ctx->serial->fd, CMD_CAPTURE_SIZE, reverse16(data)) != SR_OK)
                return SR_ERR;
 
        /* The flag register wants them here, and 1 means "disable channel". */
-       ols->flag_reg |= ~(changrp_mask << 2) & 0x3c;
-       ols->flag_reg |= FLAG_FILTER;
-       ols->rle_count = 0;
-       data = (ols->flag_reg << 24) | ((ols->flag_reg << 8) & 0xff0000);
-       if (send_longcommand(ols->serial->fd, CMD_SET_FLAGS, data) != SR_OK)
+       ctx->flag_reg |= ~(changrp_mask << 2) & 0x3c;
+       ctx->flag_reg |= FLAG_FILTER;
+       ctx->rle_count = 0;
+       data = (ctx->flag_reg << 24) | ((ctx->flag_reg << 8) & 0xff0000);
+       if (send_longcommand(ctx->serial->fd, CMD_SET_FLAGS, data) != SR_OK)
                return SR_ERR;
 
        /* Start acquisition on the device. */
-       if (send_shortcommand(ols->serial->fd, CMD_RUN) != SR_OK)
+       if (send_shortcommand(ctx->serial->fd, CMD_RUN) != SR_OK)
                return SR_ERR;
 
-       sr_source_add(ols->serial->fd, G_IO_IN, -1, receive_data,
+       sr_source_add(ctx->serial->fd, G_IO_IN, -1, receive_data,
                      session_data);
 
        if (!(packet = g_try_malloc(sizeof(struct sr_datafeed_packet)))) {
@@ -1012,7 +1012,7 @@ static int hw_dev_acquisition_start(int dev_index, gpointer session_data)
        packet->payload = (unsigned char *)header;
        header->feed_version = 1;
        gettimeofday(&header->starttime, NULL);
-       header->samplerate = ols->cur_samplerate;
+       header->samplerate = ctx->cur_samplerate;
        header->num_logic_probes = NUM_PROBES;
        sr_session_bus(session_data, packet);
 
index 832413fd03cb88728e116e089af9b27968a4666f..f452c74846876bb81d5e507b08710fdcb02a3b6f 100644 (file)
@@ -59,7 +59,8 @@
 #define FLAG_CLOCK_INVERTED        0x80
 #define FLAG_RLE                   0x0100
 
-struct ols_dev {
+/* Private, per-device-instance driver context. */
+struct context {
        uint32_t max_samplerate;
        uint32_t max_samples;
        uint32_t protocol_version;
index cf4b600d4b63f9dc9e2fe96104bc26b5b2d7b0e6..295582a963c435ed2bb9466f24030fcdb95b8768 100644 (file)
@@ -170,12 +170,12 @@ static int sl_open_dev(int dev_index)
        libusb_device **devlist;
        struct libusb_device_descriptor des;
        struct sr_dev_inst *sdi;
-       struct fx2_dev *fx2;
+       struct context *ctx;
        int err, skip, i;
 
        if (!(sdi = sr_dev_inst_get(dev_insts, dev_index)))
                return SR_ERR;
-       fx2 = sdi->priv;
+       ctx = sdi->priv;
 
        if (sdi->status == SR_ST_ACTIVE)
                /* already in use */
@@ -189,8 +189,8 @@ static int sl_open_dev(int dev_index)
                        continue;
                }
 
-               if (des.idVendor != fx2->profile->fw_vid
-                   || des.idProduct != fx2->profile->fw_pid)
+               if (des.idVendor != ctx->profile->fw_vid
+                   || des.idProduct != ctx->profile->fw_pid)
                        continue;
 
                if (sdi->status == SR_ST_INITIALIZING) {
@@ -204,24 +204,24 @@ static int sl_open_dev(int dev_index)
                         * This device is fully enumerated, so we need to find
                         * this device by vendor, product, bus and address.
                         */
-                       if (libusb_get_bus_number(devlist[i]) != fx2->usb->bus
-                               || libusb_get_device_address(devlist[i]) != fx2->usb->address)
+                       if (libusb_get_bus_number(devlist[i]) != ctx->usb->bus
+                               || libusb_get_device_address(devlist[i]) != ctx->usb->address)
                                /* this is not the one */
                                continue;
                }
 
-               if (!(err = libusb_open(devlist[i], &fx2->usb->devhdl))) {
-                       if (fx2->usb->address == 0xff)
+               if (!(err = libusb_open(devlist[i], &ctx->usb->devhdl))) {
+                       if (ctx->usb->address == 0xff)
                                /*
                                 * first time we touch this device after firmware upload,
                                 * so we don't know the address yet.
                                 */
-                               fx2->usb->address = libusb_get_device_address(devlist[i]);
+                               ctx->usb->address = libusb_get_device_address(devlist[i]);
 
                        sdi->status = SR_ST_ACTIVE;
                        sr_info("logic: opened device %d on %d.%d interface %d",
-                               sdi->index, fx2->usb->bus,
-                               fx2->usb->address, USB_INTERFACE);
+                               sdi->index, ctx->usb->bus,
+                               ctx->usb->address, USB_INTERFACE);
                } else {
                        sr_err("logic: failed to open device: %d", err);
                }
@@ -239,32 +239,32 @@ static int sl_open_dev(int dev_index)
 
 static void close_dev(struct sr_dev_inst *sdi)
 {
-       struct fx2_dev *fx2;
+       struct context *ctx;
 
-       fx2 = sdi->priv;
+       ctx = sdi->priv;
 
-       if (fx2->usb->devhdl == NULL)
+       if (ctx->usb->devhdl == NULL)
                return;
 
        sr_info("logic: closing device %d on %d.%d interface %d", sdi->index,
-               fx2->usb->bus, fx2->usb->address, USB_INTERFACE);
-       libusb_release_interface(fx2->usb->devhdl, USB_INTERFACE);
-       libusb_close(fx2->usb->devhdl);
-       fx2->usb->devhdl = NULL;
+               ctx->usb->bus, ctx->usb->address, USB_INTERFACE);
+       libusb_release_interface(ctx->usb->devhdl, USB_INTERFACE);
+       libusb_close(ctx->usb->devhdl);
+       ctx->usb->devhdl = NULL;
        sdi->status = SR_ST_INACTIVE;
 }
 
-static int configure_probes(struct fx2_dev *fx2, GSList *probes)
+static int configure_probes(struct context *ctx, GSList *probes)
 {
        struct sr_probe *probe;
        GSList *l;
        int probe_bit, stage, i;
        char *tc;
 
-       fx2->probe_mask = 0;
+       ctx->probe_mask = 0;
        for (i = 0; i < NUM_TRIGGER_STAGES; i++) {
-               fx2->trigger_mask[i] = 0;
-               fx2->trigger_value[i] = 0;
+               ctx->trigger_mask[i] = 0;
+               ctx->trigger_value[i] = 0;
        }
 
        stage = -1;
@@ -273,15 +273,15 @@ static int configure_probes(struct fx2_dev *fx2, GSList *probes)
                if (probe->enabled == FALSE)
                        continue;
                probe_bit = 1 << (probe->index - 1);
-               fx2->probe_mask |= probe_bit;
+               ctx->probe_mask |= probe_bit;
                if (!(probe->trigger))
                        continue;
 
                stage = 0;
                for (tc = probe->trigger; *tc; tc++) {
-                       fx2->trigger_mask[stage] |= probe_bit;
+                       ctx->trigger_mask[stage] |= probe_bit;
                        if (*tc == '1')
-                               fx2->trigger_value[stage] |= probe_bit;
+                               ctx->trigger_value[stage] |= probe_bit;
                        stage++;
                        if (stage > NUM_TRIGGER_STAGES)
                                return SR_ERR;
@@ -293,25 +293,25 @@ static int configure_probes(struct fx2_dev *fx2, GSList *probes)
                 * We didn't configure any triggers, make sure acquisition
                 * doesn't wait for any.
                 */
-               fx2->trigger_stage = TRIGGER_FIRED;
+               ctx->trigger_stage = TRIGGER_FIRED;
        else
-               fx2->trigger_stage = 0;
+               ctx->trigger_stage = 0;
 
        return SR_OK;
 }
 
-static struct fx2_dev *fx2_dev_new(void)
+static struct context *fx2_dev_new(void)
 {
-       struct fx2_dev *fx2;
+       struct context *ctx;
 
-       if (!(fx2 = g_try_malloc0(sizeof(struct fx2_dev)))) {
-               sr_err("logic: %s: fx2 malloc failed", __func__);
+       if (!(ctx = g_try_malloc0(sizeof(struct context)))) {
+               sr_err("logic: %s: ctx malloc failed", __func__);
                return NULL;
        }
-       fx2->trigger_stage = TRIGGER_FIRED;
-       fx2->usb = NULL;
+       ctx->trigger_stage = TRIGGER_FIRED;
+       ctx->usb = NULL;
 
-       return fx2;
+       return ctx;
 }
 
 
@@ -324,7 +324,7 @@ static int hw_init(const char *devinfo)
        struct sr_dev_inst *sdi;
        struct libusb_device_descriptor des;
        struct fx2_profile *fx2_prof;
-       struct fx2_dev *fx2;
+       struct context *ctx;
        libusb_device **devlist;
        int err, devcnt, i, j;
 
@@ -363,9 +363,9 @@ static int hw_init(const char *devinfo)
                        fx2_prof->vendor, fx2_prof->model, fx2_prof->model_version);
                if (!sdi)
                        return 0;
-               fx2 = fx2_dev_new();
-               fx2->profile = fx2_prof;
-               sdi->priv = fx2;
+               ctx = fx2_dev_new();
+               ctx->profile = fx2_prof;
+               sdi->priv = ctx;
                dev_insts = g_slist_append(dev_insts, sdi);
 
                if (check_conf_profile(devlist[i])) {
@@ -373,17 +373,17 @@ static int hw_init(const char *devinfo)
                        sr_dbg("logic: Found a Saleae Logic with %s firmware.",
                               new_saleae_logic_firmware ? "new" : "old");
                        sdi->status = SR_ST_INACTIVE;
-                       fx2->usb = sr_usb_dev_inst_new
+                       ctx->usb = sr_usb_dev_inst_new
                            (libusb_get_bus_number(devlist[i]),
                             libusb_get_device_address(devlist[i]), NULL);
                } else {
                        if (ezusb_upload_firmware(devlist[i], USB_CONFIGURATION, FIRMWARE) == SR_OK)
                                /* Remember when the firmware on this device was updated */
-                               g_get_current_time(&fx2->fw_updated);
+                               g_get_current_time(&ctx->fw_updated);
                        else
                                sr_err("logic: firmware upload failed for "
                                       "device %d", devcnt);
-                       fx2->usb = sr_usb_dev_inst_new
+                       ctx->usb = sr_usb_dev_inst_new
                                (libusb_get_bus_number(devlist[i]), 0xff, NULL);
                }
                devcnt++;
@@ -397,19 +397,19 @@ static int hw_dev_open(int dev_index)
 {
        GTimeVal cur_time;
        struct sr_dev_inst *sdi;
-       struct fx2_dev *fx2;
+       struct context *ctx;
        int timediff, err;
 
        if (!(sdi = sr_dev_inst_get(dev_insts, dev_index)))
                return SR_ERR;
-       fx2 = sdi->priv;
+       ctx = sdi->priv;
 
        /*
         * if the firmware was recently uploaded, wait up to MAX_RENUM_DELAY ms
         * for the FX2 to renumerate
         */
        err = 0;
-       if (GTV_TO_MSEC(fx2->fw_updated) > 0) {
+       if (GTV_TO_MSEC(ctx->fw_updated) > 0) {
                sr_info("logic: waiting for device to reset");
                /* takes at least 300ms for the FX2 to be gone from the USB bus */
                g_usleep(300 * 1000);
@@ -419,7 +419,7 @@ static int hw_dev_open(int dev_index)
                                break;
                        g_usleep(100 * 1000);
                        g_get_current_time(&cur_time);
-                       timediff = GTV_TO_MSEC(cur_time) - GTV_TO_MSEC(fx2->fw_updated);
+                       timediff = GTV_TO_MSEC(cur_time) - GTV_TO_MSEC(ctx->fw_updated);
                }
                sr_info("logic: device came back after %d ms", timediff);
        } else {
@@ -430,15 +430,15 @@ static int hw_dev_open(int dev_index)
                sr_err("logic: unable to open device");
                return SR_ERR;
        }
-       fx2 = sdi->priv;
+       ctx = sdi->priv;
 
-       err = libusb_claim_interface(fx2->usb->devhdl, USB_INTERFACE);
+       err = libusb_claim_interface(ctx->usb->devhdl, USB_INTERFACE);
        if (err != 0) {
                sr_err("logic: Unable to claim interface: %d", err);
                return SR_ERR;
        }
 
-       if (fx2->cur_samplerate == 0) {
+       if (ctx->cur_samplerate == 0) {
                /* Samplerate hasn't been set; default to the slowest one. */
                if (hw_dev_config_set(dev_index, SR_HWCAP_SAMPLERATE,
                    &supported_samplerates[0]) == SR_ERR)
@@ -467,7 +467,7 @@ static int hw_cleanup(void)
 {
        GSList *l;
        struct sr_dev_inst *sdi;
-       struct fx2_dev *fx2;
+       struct context *ctx;
        int ret = SR_OK;
 
        /* Properly close and free all devices. */
@@ -478,7 +478,7 @@ static int hw_cleanup(void)
                        ret = SR_ERR_BUG;
                        continue;
                }
-               if (!(fx2 = sdi->priv)) {
+               if (!(ctx = sdi->priv)) {
                        /* Log error, but continue cleaning up the rest. */
                        sr_err("logic: %s: sdi->priv was NULL, continuing",
                               __func__);
@@ -486,7 +486,7 @@ static int hw_cleanup(void)
                        continue;
                }
                close_dev(sdi);
-               sr_usb_dev_inst_free(fx2->usb);
+               sr_usb_dev_inst_free(ctx->usb);
                sr_dev_inst_free(sdi);
        }
 
@@ -503,19 +503,19 @@ static int hw_cleanup(void)
 static void *hw_dev_info_get(int dev_index, int dev_info_id)
 {
        struct sr_dev_inst *sdi;
-       struct fx2_dev *fx2;
+       struct context *ctx;
        void *info = NULL;
 
        if (!(sdi = sr_dev_inst_get(dev_insts, dev_index)))
                return NULL;
-       fx2 = sdi->priv;
+       ctx = sdi->priv;
 
        switch (dev_info_id) {
        case SR_DI_INST:
                info = sdi;
                break;
        case SR_DI_NUM_PROBES:
-               info = GINT_TO_POINTER(fx2->profile->num_probes);
+               info = GINT_TO_POINTER(ctx->profile->num_probes);
                break;
        case SR_DI_PROBE_NAMES:
                info = probe_names;
@@ -527,7 +527,7 @@ static void *hw_dev_info_get(int dev_index, int dev_info_id)
                info = TRIGGER_TYPES;
                break;
        case SR_DI_CUR_SAMPLERATE:
-               info = &fx2->cur_samplerate;
+               info = &ctx->cur_samplerate;
                break;
        }
 
@@ -593,12 +593,12 @@ static uint8_t new_firmware_divider_value(uint64_t samplerate)
 
 static int set_samplerate(struct sr_dev_inst *sdi, uint64_t samplerate)
 {
-       struct fx2_dev *fx2;
+       struct context *ctx;
        uint8_t divider;
        int ret, result, i;
        unsigned char buf[2];
 
-       fx2 = sdi->priv;
+       ctx = sdi->priv;
        for (i = 0; supported_samplerates[i]; i++) {
                if (supported_samplerates[i] == samplerate)
                        break;
@@ -616,13 +616,13 @@ static int set_samplerate(struct sr_dev_inst *sdi, uint64_t samplerate)
 
        buf[0] = (new_saleae_logic_firmware) ? 0xd5 : 0x01;
        buf[1] = divider;
-       ret = libusb_bulk_transfer(fx2->usb->devhdl, 1 | LIBUSB_ENDPOINT_OUT,
+       ret = libusb_bulk_transfer(ctx->usb->devhdl, 1 | LIBUSB_ENDPOINT_OUT,
                                   buf, 2, &result, 500);
        if (ret != 0) {
                sr_err("logic: failed to set samplerate: %d", ret);
                return SR_ERR;
        }
-       fx2->cur_samplerate = samplerate;
+       ctx->cur_samplerate = samplerate;
 
        return SR_OK;
 }
@@ -630,19 +630,19 @@ static int set_samplerate(struct sr_dev_inst *sdi, uint64_t samplerate)
 static int hw_dev_config_set(int dev_index, int hwcap, void *value)
 {
        struct sr_dev_inst *sdi;
-       struct fx2_dev *fx2;
+       struct context *ctx;
        int ret;
 
        if (!(sdi = sr_dev_inst_get(dev_insts, dev_index)))
                return SR_ERR;
-       fx2 = sdi->priv;
+       ctx = sdi->priv;
 
        if (hwcap == SR_HWCAP_SAMPLERATE) {
                ret = set_samplerate(sdi, *(uint64_t *)value);
        } else if (hwcap == SR_HWCAP_PROBECONFIG) {
-               ret = configure_probes(fx2, (GSList *) value);
+               ret = configure_probes(ctx, (GSList *) value);
        } else if (hwcap == SR_HWCAP_LIMIT_SAMPLES) {
-               fx2->limit_samples = *(uint64_t *)value;
+               ctx->limit_samples = *(uint64_t *)value;
                ret = SR_OK;
        } else {
                ret = SR_ERR;
@@ -668,12 +668,12 @@ static int receive_data(int fd, int revents, void *user_data)
 
 static void receive_transfer(struct libusb_transfer *transfer)
 {
-       /* TODO: these statics have to move to fx2_dev struct */
+       /* TODO: These statics have to move to the ctx struct. */
        static int num_samples = 0;
        static int empty_transfer_count = 0;
        struct sr_datafeed_packet packet;
        struct sr_datafeed_logic logic;
-       struct fx2_dev *fx2;
+       struct context *ctx;
        int cur_buflen, trigger_offset, i;
        unsigned char *cur_buf, *new_buf;
 
@@ -697,7 +697,7 @@ static void receive_transfer(struct libusb_transfer *transfer)
        /* Save incoming transfer before reusing the transfer struct. */
        cur_buf = transfer->buffer;
        cur_buflen = transfer->actual_length;
-       fx2 = transfer->user_data;
+       ctx = transfer->user_data;
 
        /* Fire off a new request. */
        if (!(new_buf = g_try_malloc(4096))) {
@@ -720,7 +720,7 @@ static void receive_transfer(struct libusb_transfer *transfer)
                         * The FX2 gave up. End the acquisition, the frontend
                         * will work out that the samplecount is short.
                         */
-                       hw_dev_acquisition_stop(-1, fx2->session_data);
+                       hw_dev_acquisition_stop(-1, ctx->session_data);
                }
                return;
        } else {
@@ -728,15 +728,15 @@ static void receive_transfer(struct libusb_transfer *transfer)
        }
 
        trigger_offset = 0;
-       if (fx2->trigger_stage >= 0) {
+       if (ctx->trigger_stage >= 0) {
                for (i = 0; i < cur_buflen; i++) {
 
-                       if ((cur_buf[i] & fx2->trigger_mask[fx2->trigger_stage]) == fx2->trigger_value[fx2->trigger_stage]) {
+                       if ((cur_buf[i] & ctx->trigger_mask[ctx->trigger_stage]) == ctx->trigger_value[ctx->trigger_stage]) {
                                /* Match on this trigger stage. */
-                               fx2->trigger_buffer[fx2->trigger_stage] = cur_buf[i];
-                               fx2->trigger_stage++;
+                               ctx->trigger_buffer[ctx->trigger_stage] = cur_buf[i];
+                               ctx->trigger_stage++;
 
-                               if (fx2->trigger_stage == NUM_TRIGGER_STAGES || fx2->trigger_mask[fx2->trigger_stage] == 0) {
+                               if (ctx->trigger_stage == NUM_TRIGGER_STAGES || ctx->trigger_mask[ctx->trigger_stage] == 0) {
                                        /* Match on all trigger stages, we're done. */
                                        trigger_offset = i + 1;
 
@@ -746,7 +746,7 @@ static void receive_transfer(struct libusb_transfer *transfer)
                                         */
                                        packet.type = SR_DF_TRIGGER;
                                        packet.payload = NULL;
-                                       sr_session_bus(fx2->session_data, &packet);
+                                       sr_session_bus(ctx->session_data, &packet);
 
                                        /*
                                         * Send the samples that triggered it, since we're
@@ -754,12 +754,12 @@ static void receive_transfer(struct libusb_transfer *transfer)
                                         */
                                        packet.type = SR_DF_LOGIC;
                                        packet.payload = &logic;
-                                       logic.length = fx2->trigger_stage;
+                                       logic.length = ctx->trigger_stage;
                                        logic.unitsize = 1;
-                                       logic.data = fx2->trigger_buffer;
-                                       sr_session_bus(fx2->session_data, &packet);
+                                       logic.data = ctx->trigger_buffer;
+                                       sr_session_bus(ctx->session_data, &packet);
 
-                                       fx2->trigger_stage = TRIGGER_FIRED;
+                                       ctx->trigger_stage = TRIGGER_FIRED;
                                        break;
                                }
                                return;
@@ -772,29 +772,29 @@ static void receive_transfer(struct libusb_transfer *transfer)
                         * the next sample from the one that matched originally, which the
                         * counter increment at the end of the loop takes care of.
                         */
-                       if (fx2->trigger_stage > 0) {
-                               i -= fx2->trigger_stage;
+                       if (ctx->trigger_stage > 0) {
+                               i -= ctx->trigger_stage;
                                if (i < -1)
                                        i = -1; /* Oops, went back past this buffer. */
                                /* Reset trigger stage. */
-                               fx2->trigger_stage = 0;
+                               ctx->trigger_stage = 0;
                        }
                }
        }
 
-       if (fx2->trigger_stage == TRIGGER_FIRED) {
+       if (ctx->trigger_stage == TRIGGER_FIRED) {
                /* Send the incoming transfer to the session bus. */
                packet.type = SR_DF_LOGIC;
                packet.payload = &logic;
                logic.length = cur_buflen - trigger_offset;
                logic.unitsize = 1;
                logic.data = cur_buf + trigger_offset;
-               sr_session_bus(fx2->session_data, &packet);
+               sr_session_bus(ctx->session_data, &packet);
                g_free(cur_buf);
 
                num_samples += cur_buflen;
-               if (fx2->limit_samples && (unsigned int) num_samples > fx2->limit_samples) {
-                       hw_dev_acquisition_stop(-1, fx2->session_data);
+               if (ctx->limit_samples && (unsigned int) num_samples > ctx->limit_samples) {
+                       hw_dev_acquisition_stop(-1, ctx->session_data);
                }
        } else {
                /*
@@ -809,7 +809,7 @@ static int hw_dev_acquisition_start(int dev_index, gpointer session_data)
        struct sr_dev_inst *sdi;
        struct sr_datafeed_packet *packet;
        struct sr_datafeed_header *header;
-       struct fx2_dev *fx2;
+       struct context *ctx;
        struct libusb_transfer *transfer;
        const struct libusb_pollfd **lupfd;
        int size, i;
@@ -817,8 +817,8 @@ static int hw_dev_acquisition_start(int dev_index, gpointer session_data)
 
        if (!(sdi = sr_dev_inst_get(dev_insts, dev_index)))
                return SR_ERR;
-       fx2 = sdi->priv;
-       fx2->session_data = session_data;
+       ctx = sdi->priv;
+       ctx->session_data = session_data;
 
        if (!(packet = g_try_malloc(sizeof(struct sr_datafeed_packet)))) {
                sr_err("logic: %s: packet malloc failed", __func__);
@@ -838,9 +838,9 @@ static int hw_dev_acquisition_start(int dev_index, gpointer session_data)
                        return SR_ERR_MALLOC;
                }
                transfer = libusb_alloc_transfer(0);
-               libusb_fill_bulk_transfer(transfer, fx2->usb->devhdl,
+               libusb_fill_bulk_transfer(transfer, ctx->usb->devhdl,
                                2 | LIBUSB_ENDPOINT_IN, buf, size,
-                               receive_transfer, fx2, 40);
+                               receive_transfer, ctx, 40);
                if (libusb_submit_transfer(transfer) != 0) {
                        /* TODO: Free them all. */
                        libusb_free_transfer(transfer);
@@ -860,8 +860,8 @@ static int hw_dev_acquisition_start(int dev_index, gpointer session_data)
        packet->payload = header;
        header->feed_version = 1;
        gettimeofday(&header->starttime, NULL);
-       header->samplerate = fx2->cur_samplerate;
-       header->num_logic_probes = fx2->profile->num_probes;
+       header->samplerate = ctx->cur_samplerate;
+       header->num_logic_probes = ctx->profile->num_probes;
        sr_session_bus(session_data, packet);
        g_free(header);
        g_free(packet);
index 5b8f489c2857b9ca8c7b22c31ce1406985ed716a..7cd28c488af1c55aa73955d8b70401efddc30556 100644 (file)
@@ -48,7 +48,8 @@ struct fx2_profile {
        int num_probes;
 };
 
-struct fx2_dev {
+/* Private, per-device-instance driver context. */
+struct context {
        struct fx2_profile *profile;
        /*
         * Since we can't keep track of a Saleae Logic device after upgrading
index 4accf20cdec9c35a4aa2a7692d0176bcd6f04e1a..c3a1f9224360865976f446e70e7d9ca9b5845a07 100644 (file)
@@ -153,7 +153,8 @@ static struct sr_samplerates samplerates = {
        supported_samplerates,
 };
 
-struct zp {
+/* Private, per-device-instance driver context. */
+struct context {
        uint64_t cur_samplerate;
        uint64_t limit_samples;
        int num_channels; /* TODO: This isn't initialized before it's needed :( */
@@ -185,13 +186,13 @@ static unsigned int get_memory_size(int type)
 static int opendev4(struct sr_dev_inst **sdi, libusb_device *dev,
                    struct libusb_device_descriptor *des)
 {
-       struct zp *zp;
+       struct context *ctx;
        unsigned int i;
        int err;
 
        /* Note: sdi is non-NULL, the caller already checked this. */
 
-       if (!(zp = (*sdi)->priv)) {
+       if (!(ctx = (*sdi)->priv)) {
                sr_err("zp: %s: (*sdi)->priv was NULL", __func__);
                return -1;
        }
@@ -204,8 +205,8 @@ static int opendev4(struct sr_dev_inst **sdi, libusb_device *dev,
        if (des->idVendor != USB_VENDOR)
                return 0;
 
-       if (libusb_get_bus_number(dev) == zp->usb->bus
-           && libusb_get_device_address(dev) == zp->usb->address) {
+       if (libusb_get_bus_number(dev) == ctx->usb->bus
+           && libusb_get_device_address(dev) == ctx->usb->address) {
 
                for (i = 0; i < ARRAY_SIZE(zeroplus_models); i++) {
                        if (!(des->idProduct == zeroplus_models[i].pid))
@@ -213,23 +214,23 @@ static int opendev4(struct sr_dev_inst **sdi, libusb_device *dev,
 
                        sr_info("zp: Found ZeroPlus device 0x%04x (%s)",
                                des->idProduct, zeroplus_models[i].model_name);
-                       zp->num_channels = zeroplus_models[i].channels;
-                       zp->memory_size = zeroplus_models[i].sample_depth * 1024;
+                       ctx->num_channels = zeroplus_models[i].channels;
+                       ctx->memory_size = zeroplus_models[i].sample_depth * 1024;
                        break;
                }
 
-               if (zp->num_channels == 0) {
+               if (ctx->num_channels == 0) {
                        sr_err("zp: Unknown ZeroPlus device 0x%04x",
                               des->idProduct);
                        return -2;
                }
 
                /* Found it. */
-               if (!(err = libusb_open(dev, &(zp->usb->devhdl)))) {
+               if (!(err = libusb_open(dev, &(ctx->usb->devhdl)))) {
                        (*sdi)->status = SR_ST_ACTIVE;
                        sr_info("zp: opened device %d on %d.%d interface %d",
-                               (*sdi)->index, zp->usb->bus,
-                               zp->usb->address, USB_INTERFACE);
+                               (*sdi)->index, ctx->usb->bus,
+                               ctx->usb->address, USB_INTERFACE);
                } else {
                        sr_err("zp: failed to open device: %d", err);
                        *sdi = NULL;
@@ -271,41 +272,41 @@ static struct sr_dev_inst *zp_open_dev(int dev_index)
 
 static void close_dev(struct sr_dev_inst *sdi)
 {
-       struct zp *zp;
+       struct context *ctx;
 
-       if (!(zp = sdi->priv)) {
+       if (!(ctx = sdi->priv)) {
                sr_err("zp: %s: sdi->priv was NULL", __func__);
                return; /* FIXME */
        }
 
-       if (!zp->usb->devhdl)
+       if (!ctx->usb->devhdl)
                return;
 
        sr_info("zp: closing device %d on %d.%d interface %d", sdi->index,
-               zp->usb->bus, zp->usb->address, USB_INTERFACE);
-       libusb_release_interface(zp->usb->devhdl, USB_INTERFACE);
-       libusb_reset_device(zp->usb->devhdl);
-       libusb_close(zp->usb->devhdl);
-       zp->usb->devhdl = NULL;
+               ctx->usb->bus, ctx->usb->address, USB_INTERFACE);
+       libusb_release_interface(ctx->usb->devhdl, USB_INTERFACE);
+       libusb_reset_device(ctx->usb->devhdl);
+       libusb_close(ctx->usb->devhdl);
+       ctx->usb->devhdl = NULL;
        /* TODO: Call libusb_exit() here or only in hw_cleanup()? */
        sdi->status = SR_ST_INACTIVE;
 }
 
 static int configure_probes(struct sr_dev_inst *sdi, GSList *probes)
 {
-       struct zp *zp;
+       struct context *ctx;
        struct sr_probe *probe;
        GSList *l;
        int probe_bit, stage, i;
        char *tc;
 
        /* Note: sdi and sdi->priv are non-NULL, the caller checked this. */
-       zp = sdi->priv;
+       ctx = sdi->priv;
 
-       zp->probe_mask = 0;
+       ctx->probe_mask = 0;
        for (i = 0; i < NUM_TRIGGER_STAGES; i++) {
-               zp->trigger_mask[i] = 0;
-               zp->trigger_value[i] = 0;
+               ctx->trigger_mask[i] = 0;
+               ctx->trigger_value[i] = 0;
        }
 
        stage = -1;
@@ -314,14 +315,14 @@ static int configure_probes(struct sr_dev_inst *sdi, GSList *probes)
                if (probe->enabled == FALSE)
                        continue;
                probe_bit = 1 << (probe->index - 1);
-               zp->probe_mask |= probe_bit;
+               ctx->probe_mask |= probe_bit;
 
                if (probe->trigger) {
                        stage = 0;
                        for (tc = probe->trigger; *tc; tc++) {
-                               zp->trigger_mask[stage] |= probe_bit;
+                               ctx->trigger_mask[stage] |= probe_bit;
                                if (*tc == '1')
-                                       zp->trigger_value[stage] |= probe_bit;
+                                       ctx->trigger_value[stage] |= probe_bit;
                                stage++;
                                if (stage > NUM_TRIGGER_STAGES)
                                        return SR_ERR;
@@ -342,26 +343,26 @@ static int hw_init(const char *devinfo)
        struct libusb_device_descriptor des;
        libusb_device **devlist;
        int err, devcnt, i;
-       struct zp *zp;
+       struct context *ctx;
 
        /* Avoid compiler warnings. */
        (void)devinfo;
 
        /* Allocate memory for our private driver context. */
-       if (!(zp = g_try_malloc(sizeof(struct zp)))) {
-               sr_err("zp: %s: struct zp malloc failed", __func__);
+       if (!(ctx = g_try_malloc(sizeof(struct context)))) {
+               sr_err("zp: %s: ctx malloc failed", __func__);
                return 0;
        }
 
        /* Set some sane defaults. */
-       zp->cur_samplerate = 0;
-       zp->limit_samples = 0;
-       zp->num_channels = 32; /* TODO: This isn't initialized before it's needed :( */
-       zp->memory_size = 0;
-       zp->probe_mask = 0;
-       memset(zp->trigger_mask, 0, NUM_TRIGGER_STAGES);
-       memset(zp->trigger_value, 0, NUM_TRIGGER_STAGES);
-       // memset(zp->trigger_buffer, 0, NUM_TRIGGER_STAGES);
+       ctx->cur_samplerate = 0;
+       ctx->limit_samples = 0;
+       ctx->num_channels = 32; /* TODO: This isn't initialized before it's needed :( */
+       ctx->memory_size = 0;
+       ctx->probe_mask = 0;
+       memset(ctx->trigger_mask, 0, NUM_TRIGGER_STAGES);
+       memset(ctx->trigger_value, 0, NUM_TRIGGER_STAGES);
+       // memset(ctx->trigger_buffer, 0, NUM_TRIGGER_STAGES);
 
        if (libusb_init(&usb_context) != 0) {
                sr_err("zp: Failed to initialize USB.");
@@ -394,11 +395,11 @@ static int hw_init(const char *devinfo)
                                return 0;
                        }
 
-                       sdi->priv = zp;
+                       sdi->priv = ctx;
 
                        dev_insts =
                            g_slist_append(dev_insts, sdi);
-                       zp->usb = sr_usb_dev_inst_new(
+                       ctx->usb = sr_usb_dev_inst_new(
                                libusb_get_bus_number(devlist[i]),
                                libusb_get_device_address(devlist[i]), NULL);
                        devcnt++;
@@ -412,7 +413,7 @@ static int hw_init(const char *devinfo)
 static int hw_dev_open(int dev_index)
 {
        struct sr_dev_inst *sdi;
-       struct zp *zp;
+       struct context *ctx;
        int err;
 
        if (!(sdi = zp_open_dev(dev_index))) {
@@ -422,26 +423,26 @@ static int hw_dev_open(int dev_index)
 
        /* TODO: Note: sdi is retrieved in zp_open_dev(). */
 
-       if (!(zp = sdi->priv)) {
+       if (!(ctx = sdi->priv)) {
                sr_err("zp: %s: sdi->priv was NULL", __func__);
                return SR_ERR_ARG;
        }
 
-       err = libusb_set_configuration(zp->usb->devhdl, USB_CONFIGURATION);
+       err = libusb_set_configuration(ctx->usb->devhdl, USB_CONFIGURATION);
        if (err < 0) {
                sr_err("zp: Unable to set USB configuration %d: %d",
                       USB_CONFIGURATION, err);
                return SR_ERR;
        }
 
-       err = libusb_claim_interface(zp->usb->devhdl, USB_INTERFACE);
+       err = libusb_claim_interface(ctx->usb->devhdl, USB_INTERFACE);
        if (err != 0) {
                sr_err("zp: Unable to claim interface: %d", err);
                return SR_ERR;
        }
 
-       analyzer_reset(zp->usb->devhdl);
-       analyzer_initialize(zp->usb->devhdl);
+       analyzer_reset(ctx->usb->devhdl);
+       analyzer_initialize(ctx->usb->devhdl);
 
        analyzer_set_memory_size(MEMORY_SIZE_512K);
        // analyzer_set_freq(g_freq, g_freq_scale);
@@ -460,7 +461,7 @@ static int hw_dev_open(int dev_index)
 #endif
        analyzer_set_compression(COMPRESSION_NONE);
 
-       if (zp->cur_samplerate == 0) {
+       if (ctx->cur_samplerate == 0) {
                /* Samplerate hasn't been set. Default to the slowest one. */
                if (hw_dev_config_set(dev_index, SR_HWCAP_SAMPLERATE,
                     &samplerates.list[0]) == SR_ERR)
@@ -510,7 +511,7 @@ static int hw_cleanup(void)
 static void *hw_dev_info_get(int dev_index, int dev_info_id)
 {
        struct sr_dev_inst *sdi;
-       struct zp *zp;
+       struct context *ctx;
        void *info;
 
        if (!(sdi = sr_dev_inst_get(dev_insts, dev_index))) {
@@ -518,7 +519,7 @@ static void *hw_dev_info_get(int dev_index, int dev_info_id)
                return NULL;
        }
 
-       if (!(zp = sdi->priv)) {
+       if (!(ctx = sdi->priv)) {
                sr_err("zp: %s: sdi->priv was NULL", __func__);
                return NULL;
        }
@@ -528,7 +529,7 @@ static void *hw_dev_info_get(int dev_index, int dev_info_id)
                info = sdi;
                break;
        case SR_DI_NUM_PROBES:
-               info = GINT_TO_POINTER(zp->num_channels);
+               info = GINT_TO_POINTER(ctx->num_channels);
                break;
        case SR_DI_PROBE_NAMES:
                info = probe_names;
@@ -540,7 +541,7 @@ static void *hw_dev_info_get(int dev_index, int dev_info_id)
                info = TRIGGER_TYPES;
                break;
        case SR_DI_CUR_SAMPLERATE:
-               info = &zp->cur_samplerate;
+               info = &ctx->cur_samplerate;
                break;
        default:
                /* Unknown device info ID, return NULL. */
@@ -570,14 +571,14 @@ static int *hw_hwcap_get_all(void)
 
 static int set_samplerate(struct sr_dev_inst *sdi, uint64_t samplerate)
 {
-       struct zp *zp;
+       struct context *ctx;
 
        if (!sdi) {
                sr_err("zp: %s: sdi was NULL", __func__);
                return SR_ERR_ARG;
        }
 
-       if (!(zp = sdi->priv)) {
+       if (!(ctx = sdi->priv)) {
                sr_err("zp: %s: sdi->priv was NULL", __func__);
                return SR_ERR_ARG;
        }
@@ -591,7 +592,7 @@ static int set_samplerate(struct sr_dev_inst *sdi, uint64_t samplerate)
        else
                analyzer_set_freq(samplerate, FREQ_SCALE_HZ);
 
-       zp->cur_samplerate = samplerate;
+       ctx->cur_samplerate = samplerate;
 
        return SR_OK;
 }
@@ -599,14 +600,14 @@ static int set_samplerate(struct sr_dev_inst *sdi, uint64_t samplerate)
 static int hw_dev_config_set(int dev_index, int hwcap, void *value)
 {
        struct sr_dev_inst *sdi;
-       struct zp *zp;
+       struct context *ctx;
 
        if (!(sdi = sr_dev_inst_get(dev_insts, dev_index))) {
                sr_err("zp: %s: sdi was NULL", __func__);
                return SR_ERR;
        }
 
-       if (!(zp = sdi->priv)) {
+       if (!(ctx = sdi->priv)) {
                sr_err("zp: %s: sdi->priv was NULL", __func__);
                return SR_ERR_ARG;
        }
@@ -617,7 +618,7 @@ static int hw_dev_config_set(int dev_index, int hwcap, void *value)
        case SR_HWCAP_PROBECONFIG:
                return configure_probes(sdi, (GSList *)value);
        case SR_HWCAP_LIMIT_SAMPLES:
-               zp->limit_samples = *(uint64_t *)value;
+               ctx->limit_samples = *(uint64_t *)value;
                return SR_OK;
        default:
                return SR_ERR;
@@ -634,38 +635,38 @@ static int hw_dev_acquisition_start(int dev_index, gpointer session_data)
        int res;
        unsigned int packet_num;
        unsigned char *buf;
-       struct zp *zp;
+       struct context *ctx;
 
        if (!(sdi = sr_dev_inst_get(dev_insts, dev_index))) {
                sr_err("zp: %s: sdi was NULL", __func__);
                return SR_ERR;
        }
 
-       if (!(zp = sdi->priv)) {
+       if (!(ctx = sdi->priv)) {
                sr_err("zp: %s: sdi->priv was NULL", __func__);
                return SR_ERR_ARG;
        }
 
        /* push configured settings to device */
-       analyzer_configure(zp->usb->devhdl);
+       analyzer_configure(ctx->usb->devhdl);
 
-       analyzer_start(zp->usb->devhdl);
+       analyzer_start(ctx->usb->devhdl);
        sr_info("zp: Waiting for data");
-       analyzer_wait_data(zp->usb->devhdl);
+       analyzer_wait_data(ctx->usb->devhdl);
 
        sr_info("zp: Stop address    = 0x%x",
-               analyzer_get_stop_address(zp->usb->devhdl));
+               analyzer_get_stop_address(ctx->usb->devhdl));
        sr_info("zp: Now address     = 0x%x",
-               analyzer_get_now_address(zp->usb->devhdl));
+               analyzer_get_now_address(ctx->usb->devhdl));
        sr_info("zp: Trigger address = 0x%x",
-               analyzer_get_trigger_address(zp->usb->devhdl));
+               analyzer_get_trigger_address(ctx->usb->devhdl));
 
        packet.type = SR_DF_HEADER;
        packet.payload = &header;
        header.feed_version = 1;
        gettimeofday(&header.starttime, NULL);
-       header.samplerate = zp->cur_samplerate;
-       header.num_logic_probes = zp->num_channels;
+       header.samplerate = ctx->cur_samplerate;
+       header.num_logic_probes = ctx->num_channels;
        sr_session_bus(session_data, &packet);
 
        if (!(buf = g_try_malloc(PACKET_SIZE))) {
@@ -674,11 +675,11 @@ static int hw_dev_acquisition_start(int dev_index, gpointer session_data)
        }
 
        samples_read = 0;
-       analyzer_read_start(zp->usb->devhdl);
+       analyzer_read_start(ctx->usb->devhdl);
        /* Send the incoming transfer to the session bus. */
-       for (packet_num = 0; packet_num < (zp->memory_size * 4 / PACKET_SIZE);
+       for (packet_num = 0; packet_num < (ctx->memory_size * 4 / PACKET_SIZE);
             packet_num++) {
-               res = analyzer_read_data(zp->usb->devhdl, buf, PACKET_SIZE);
+               res = analyzer_read_data(ctx->usb->devhdl, buf, PACKET_SIZE);
                sr_info("zp: Tried to read %llx bytes, actually read %x bytes",
                        PACKET_SIZE, res);
 
@@ -690,7 +691,7 @@ static int hw_dev_acquisition_start(int dev_index, gpointer session_data)
                sr_session_bus(session_data, &packet);
                samples_read += res / 4;
        }
-       analyzer_read_stop(zp->usb->devhdl);
+       analyzer_read_stop(ctx->usb->devhdl);
        g_free(buf);
 
        packet.type = SR_DF_END;
@@ -704,7 +705,7 @@ static int hw_dev_acquisition_stop(int dev_index, gpointer session_dev_id)
 {
        struct sr_datafeed_packet packet;
        struct sr_dev_inst *sdi;
-       struct zp *zp;
+       struct context *ctx;
 
        packet.type = SR_DF_END;
        sr_session_bus(session_dev_id, &packet);
@@ -714,12 +715,12 @@ static int hw_dev_acquisition_stop(int dev_index, gpointer session_dev_id)
                return SR_ERR_BUG;
        }
 
-       if (!(zp = sdi->priv)) {
+       if (!(ctx = sdi->priv)) {
                sr_err("zp: %s: sdi->priv was NULL", __func__);
                return SR_ERR_BUG;
        }
 
-       analyzer_reset(zp->usb->devhdl);
+       analyzer_reset(ctx->usb->devhdl);
        /* TODO: Need to cancel and free any queued up transfers. */
 
        return SR_OK;