]> sigrok.org Git - libsigrok.git/blobdiff - src/hardware/fx2lafw/api.c
dslogic: Implement trigger functionality
[libsigrok.git] / src / hardware / fx2lafw / api.c
index 976cfbf9d28d735628c841b08b17849ecb8ad178..fe5ba9fe9b49ce49aefe6e632f0edb5c3c09d9d8 100644 (file)
@@ -125,7 +125,7 @@ static const uint32_t scanopts[] = {
 };
 
 static const uint32_t devopts[] = {
-       SR_CONF_CONTINUOUS | SR_CONF_SET,
+       SR_CONF_CONTINUOUS,
        SR_CONF_LIMIT_SAMPLES | SR_CONF_GET | SR_CONF_SET,
        SR_CONF_CONN | SR_CONF_GET,
        SR_CONF_SAMPLERATE | SR_CONF_GET | SR_CONF_SET | SR_CONF_LIST,
@@ -181,11 +181,6 @@ static const uint64_t dslogic_samplerates[] = {
 
 SR_PRIV struct sr_dev_driver fx2lafw_driver_info;
 
-static int init(struct sr_dev_driver *di, struct sr_context *sr_ctx)
-{
-       return std_init(sr_ctx, di, LOG_PREFIX);
-}
-
 static GSList *scan(struct sr_dev_driver *di, GSList *options)
 {
        struct drv_context *drvc;
@@ -399,11 +394,6 @@ static int dev_clear(const struct sr_dev_driver *di)
        return std_dev_clear(di, clear_dev_context);
 }
 
-static GSList *dev_list(const struct sr_dev_driver *di)
-{
-       return ((struct drv_context *)(di->context))->instances;
-}
-
 static int dev_open(struct sr_dev_inst *sdi)
 {
        struct sr_dev_driver *di = sdi->driver;
@@ -509,21 +499,6 @@ static int dev_close(struct sr_dev_inst *sdi)
        return SR_OK;
 }
 
-static int cleanup(const struct sr_dev_driver *di)
-{
-       int ret;
-       struct drv_context *drvc;
-
-       if (!(drvc = di->context))
-               return SR_OK;
-
-       ret = std_dev_clear(di, NULL);
-
-       g_free(drvc);
-
-       return ret;
-}
-
 static int config_get(uint32_t key, GVariant **data, const struct sr_dev_inst *sdi,
                const struct sr_channel_group *cg)
 {
@@ -689,7 +664,7 @@ static int start_transfers(const struct sr_dev_inst *sdi)
        devc->acq_aborted = FALSE;
        devc->empty_transfer_count = 0;
 
-       if ((trigger = sr_session_trigger_get(sdi->session))) {
+       if ((trigger = sr_session_trigger_get(sdi->session)) && !devc->dslogic) {
                int pre_trigger_samples = 0;
                if (devc->limit_samples > 0)
                        pre_trigger_samples = devc->capture_ratio * devc->limit_samples/100;
@@ -766,11 +741,11 @@ static void LIBUSB_CALL dslogic_trigger_receive(struct libusb_transfer *transfer
        } else if (transfer->status == LIBUSB_TRANSFER_COMPLETED
                        && transfer->actual_length == sizeof(struct dslogic_trigger_pos)) {
                tpos = (struct dslogic_trigger_pos *)transfer->buffer;
-               sr_dbg("tpos real_pos %.8x ram_saddr %.8x", tpos->real_pos, tpos->ram_saddr);
+               sr_info("tpos real_pos %d ram_saddr %d", tpos->real_pos, tpos->ram_saddr);
+               devc->trigger_pos  = tpos->real_pos;
                g_free(tpos);
                start_transfers(sdi);
        }
-
        libusb_free_transfer(transfer);
 }
 
@@ -844,7 +819,7 @@ static int configure_channels(const struct sr_dev_inst *sdi)
        return SR_OK;
 }
 
-static int dev_acquisition_start(const struct sr_dev_inst *sdi, void *cb_data)
+static int dev_acquisition_start(const struct sr_dev_inst *sdi)
 {
        struct sr_dev_driver *di;
        struct drv_context *drvc;
@@ -860,7 +835,6 @@ static int dev_acquisition_start(const struct sr_dev_inst *sdi, void *cb_data)
        devc = sdi->priv;
 
        devc->ctx = drvc->sr_ctx;
-       devc->cb_data = cb_data;
        devc->sent_samples = 0;
        devc->empty_transfer_count = 0;
        devc->acq_aborted = FALSE;
@@ -894,12 +868,10 @@ static int dev_acquisition_start(const struct sr_dev_inst *sdi, void *cb_data)
        return SR_OK;
 }
 
-static int dev_acquisition_stop(struct sr_dev_inst *sdi, void *cb_data)
+static int dev_acquisition_stop(struct sr_dev_inst *sdi)
 {
        struct dev_context *devc;
 
-       (void)cb_data;
-
        devc = sdi->priv;
 
        if (devc->dslogic)
@@ -914,10 +886,10 @@ SR_PRIV struct sr_dev_driver fx2lafw_driver_info = {
        .name = "fx2lafw",
        .longname = "fx2lafw (generic driver for FX2 based LAs)",
        .api_version = 1,
-       .init = init,
-       .cleanup = cleanup,
+       .init = std_init,
+       .cleanup = std_cleanup,
        .scan = scan,
-       .dev_list = dev_list,
+       .dev_list = std_dev_list,
        .dev_clear = dev_clear,
        .config_get = config_get,
        .config_set = config_set,