X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;f=hardware%2Ffx2lafw%2Ffx2lafw.c;h=fb673d675ac784725cf7e20f78a61bdc49230a6d;hb=7ec5b54955118d8c1ee003a02c3334f1a0046457;hp=43f6f5254dad6fe48e61a17a5de96f6c85be99d5;hpb=1953564a96798bc298d1c94eb90c129adbde1c9e;p=libsigrok.git diff --git a/hardware/fx2lafw/fx2lafw.c b/hardware/fx2lafw/fx2lafw.c index 43f6f525..fb673d67 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) @@ -561,8 +550,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; } @@ -603,22 +592,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 +611,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 +631,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; @@ -1025,10 +1025,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,