X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=hardware%2Ffx2lafw%2Ffx2lafw.c;h=1bbb45470bbbd5fb567cd38eab971752ff2f6079;hb=4afdfd4628e9955af02a3ea619ecdfe469f9a9e2;hp=43f6f5254dad6fe48e61a17a5de96f6c85be99d5;hpb=1953564a96798bc298d1c94eb90c129adbde1c9e;p=libsigrok.git diff --git a/hardware/fx2lafw/fx2lafw.c b/hardware/fx2lafw/fx2lafw.c index 43f6f525..1bbb4547 100644 --- a/hardware/fx2lafw/fx2lafw.c +++ b/hardware/fx2lafw/fx2lafw.c @@ -118,17 +118,16 @@ static const uint64_t supported_samplerates[] = { }; static const struct sr_samplerates samplerates = { - 0, - 0, - 0, - supported_samplerates, + .low = 0, + .high = 0, + .step = 0, + .list = supported_samplerates, }; SR_PRIV struct sr_dev_driver fx2lafw_driver_info; static struct sr_dev_driver *di = &fx2lafw_driver_info; static int hw_dev_close(struct sr_dev_inst *sdi); -static int hw_dev_config_set(const struct sr_dev_inst *sdi, int hwcap, - const void *value); +static int config_set(int id, const void *value, const struct sr_dev_inst *sdi); static int hw_dev_acquisition_stop(struct sr_dev_inst *sdi, void *cb_data); /** @@ -385,17 +384,7 @@ static int clear_instances(void) static int hw_init(struct sr_context *sr_ctx) { - struct drv_context *drvc; - - if (!(drvc = g_try_malloc0(sizeof(struct drv_context)))) { - sr_err("Driver context malloc failed."); - return SR_ERR_MALLOC; - } - - drvc->sr_ctx = sr_ctx; - di->priv = drvc; - - return SR_OK; + return std_hw_init(sr_ctx, di, DRIVER_LOG_DOMAIN); } static GSList *hw_scan(GSList *options) @@ -489,11 +478,7 @@ static GSList *hw_scan(GSList *options) static GSList *hw_dev_list(void) { - struct drv_context *drvc; - - drvc = di->priv; - - return drvc->instances; + return ((struct drv_context *)(di->priv))->instances; } static int hw_dev_open(struct sr_dev_inst *sdi) @@ -561,8 +546,8 @@ static int hw_dev_open(struct sr_dev_inst *sdi) if (devc->cur_samplerate == 0) { /* Samplerate hasn't been set; default to the slowest one. */ - if (hw_dev_config_set(sdi, SR_CONF_SAMPLERATE, - &supported_samplerates[0]) == SR_ERR) + if (config_set(SR_CONF_SAMPLERATE, &supported_samplerates[0], + sdi) == SR_ERR) return SR_ERR; } @@ -574,6 +559,7 @@ static int hw_dev_close(struct sr_dev_inst *sdi) struct dev_context *devc; devc = sdi->priv; + if (devc->usb->devhdl == NULL) return SR_ERR; @@ -603,22 +589,12 @@ static int hw_cleanup(void) return ret; } -static int hw_info_get(int info_id, const void **data, - const struct sr_dev_inst *sdi) +static int config_get(int id, const void **data, const struct sr_dev_inst *sdi) { struct dev_context *devc; - switch (info_id) { - case SR_DI_HWCAPS: - *data = hwcaps; - break; - case SR_DI_SAMPLERATES: - *data = &samplerates; - break; - case SR_DI_TRIGGER_TYPES: - *data = TRIGGER_TYPES; - break; - case SR_DI_CUR_SAMPLERATE: + switch (id) { + case SR_CONF_SAMPLERATE: if (sdi) { devc = sdi->priv; *data = &devc->cur_samplerate; @@ -632,18 +608,17 @@ static int hw_info_get(int info_id, const void **data, return SR_OK; } -static int hw_dev_config_set(const struct sr_dev_inst *sdi, int hwcap, - const void *value) +static int config_set(int id, const void *value, const struct sr_dev_inst *sdi) { struct dev_context *devc; int ret; devc = sdi->priv; - if (hwcap == SR_CONF_SAMPLERATE) { + if (id == SR_CONF_SAMPLERATE) { devc->cur_samplerate = *(const uint64_t *)value; ret = SR_OK; - } else if (hwcap == SR_CONF_LIMIT_SAMPLES) { + } else if (id == SR_CONF_LIMIT_SAMPLES) { devc->limit_samples = *(const uint64_t *)value; ret = SR_OK; } else { @@ -653,6 +628,28 @@ static int hw_dev_config_set(const struct sr_dev_inst *sdi, int hwcap, return ret; } +static int config_list(int key, const void **data, const struct sr_dev_inst *sdi) +{ + + (void)sdi; + + switch (key) { + case SR_CONF_DEVICE_OPTIONS: + *data = hwcaps; + break; + case SR_CONF_SAMPLERATE: + *data = &samplerates; + break; + case SR_CONF_TRIGGER_TYPE: + *data = TRIGGER_TYPE; + break; + default: + return SR_ERR_ARG; + } + + return SR_OK; +} + static int receive_data(int fd, int revents, void *cb_data) { struct timeval tv; @@ -926,8 +923,6 @@ static unsigned int get_timeout(struct dev_context *devc) static int hw_dev_acquisition_start(const struct sr_dev_inst *sdi, void *cb_data) { - struct sr_datafeed_packet packet; - struct sr_datafeed_header header; struct dev_context *devc; struct drv_context *drvc; struct libusb_transfer *transfer; @@ -991,11 +986,8 @@ static int hw_dev_acquisition_start(const struct sr_dev_inst *sdi, timeout, receive_data, NULL); free(lupfd); /* NOT g_free()! */ - packet.type = SR_DF_HEADER; - packet.payload = &header; - header.feed_version = 1; - gettimeofday(&header.starttime, NULL); - sr_session_send(cb_data, &packet); + /* Send header packet to the session bus. */ + std_session_send_df_header(cb_data, DRIVER_LOG_DOMAIN); if ((ret = command_start_acquisition(devc->usb->devhdl, devc->cur_samplerate, devc->sample_wide)) != SR_OK) { @@ -1025,10 +1017,11 @@ SR_PRIV struct sr_dev_driver fx2lafw_driver_info = { .scan = hw_scan, .dev_list = hw_dev_list, .dev_clear = clear_instances, + .config_get = config_get, + .config_set = config_set, + .config_list = config_list, .dev_open = hw_dev_open, .dev_close = hw_dev_close, - .info_get = hw_info_get, - .dev_config_set = hw_dev_config_set, .dev_acquisition_start = hw_dev_acquisition_start, .dev_acquisition_stop = hw_dev_acquisition_stop, .priv = NULL,