X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fhardware%2Fsaleae-logic-pro%2Fapi.c;h=bd96e3de051b54f0dba011edb97cd70fffa65b59;hb=463160cbca37367ef94dfead0c64531d82b83ab8;hp=2741e3a06023871656bb9f5d1553a9f2da14585f;hpb=f1aca068c73a62f1d305c8e66958109475db9bb6;p=libsigrok.git diff --git a/src/hardware/saleae-logic-pro/api.c b/src/hardware/saleae-logic-pro/api.c index 2741e3a0..bd96e3de 100644 --- a/src/hardware/saleae-logic-pro/api.c +++ b/src/hardware/saleae-logic-pro/api.c @@ -22,20 +22,20 @@ #include #include "protocol.h" -#define BUF_COUNT 8 +#define BUF_COUNT 512 #define BUF_SIZE (16 * 1024) -#define BUF_TIMEOUT (1000 * 1000) +#define BUF_TIMEOUT 1000 SR_PRIV struct sr_dev_driver saleae_logic_pro_driver_info; -static const uint32_t drvopts[] = { - SR_CONF_LOGIC_ANALYZER, -}; - static const uint32_t scanopts[] = { SR_CONF_CONN, }; +static const uint32_t drvopts[] = { + SR_CONF_LOGIC_ANALYZER, +}; + static const uint32_t devopts[] = { SR_CONF_CONTINUOUS, SR_CONF_CONN | SR_CONF_GET, @@ -289,7 +289,7 @@ static int dev_open(struct sr_dev_inst *sdi) if (devc->dig_samplerate == 0) devc->dig_samplerate = samplerates[3]; - return SR_OK; + return saleae_logic_pro_init(sdi); } static int dev_close(struct sr_dev_inst *sdi) @@ -350,32 +350,12 @@ static int config_set(uint32_t key, GVariant *data, static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst *sdi, const struct sr_channel_group *cg) { - GVariant *gvar; - GVariantBuilder gvb; - - (void)sdi; - (void)cg; - switch (key) { case SR_CONF_SCAN_OPTIONS: - *data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32, - scanopts, ARRAY_SIZE(scanopts), sizeof(uint32_t)); - break; case SR_CONF_DEVICE_OPTIONS: - if (!sdi) { - *data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32, - drvopts, ARRAY_SIZE(drvopts), sizeof(uint32_t)); - } else { - *data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32, - devopts, ARRAY_SIZE(devopts), sizeof(uint32_t)); - } - break; + return STD_CONFIG_LIST(key, data, sdi, cg, scanopts, drvopts, devopts); case SR_CONF_SAMPLERATE: - g_variant_builder_init(&gvb, G_VARIANT_TYPE("a{sv}")); - gvar = g_variant_new_fixed_array(G_VARIANT_TYPE("t"), - samplerates, ARRAY_SIZE(samplerates), sizeof(uint64_t)); - g_variant_builder_add(&gvb, "{sv}", "samplerates", gvar); - *data = g_variant_builder_end(&gvb); + *data = std_gvar_samplerates(samplerates, ARRAY_SIZE(samplerates)); break; default: return SR_ERR_NA; @@ -402,10 +382,13 @@ static int dev_acquisition_handle(int fd, int revents, void *cb_data) struct timeval tv = ALL_ZERO; (void)fd; - (void)revents; libusb_handle_events_timeout(drvc->sr_ctx->libusb_ctx, &tv); + /* Handle timeout */ + if (!revents) + sr_dev_acquisition_stop(sdi); + return TRUE; } @@ -418,10 +401,6 @@ static int dev_acquisition_start(const struct sr_dev_inst *sdi) uint8_t *buf; unsigned int i, ret; - ret = saleae_logic_pro_init(sdi); - if (ret != SR_OK) - return ret; - ret = saleae_logic_pro_prepare(sdi); if (ret != SR_OK) return ret; @@ -437,7 +416,7 @@ static int dev_acquisition_start(const struct sr_dev_inst *sdi) transfer = libusb_alloc_transfer(0); libusb_fill_bulk_transfer(transfer, usb->devhdl, 2 | LIBUSB_ENDPOINT_IN, buf, BUF_SIZE, - saleae_logic_pro_receive_data, (void *)sdi, BUF_TIMEOUT); + saleae_logic_pro_receive_data, (void *)sdi, 0); if ((ret = libusb_submit_transfer(transfer)) != 0) { sr_err("Failed to submit transfer: %s.", libusb_error_name(ret));