X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fhwdriver.c;h=3e6b00126488ef58dd562cef0f7d12f124ce742b;hb=da39089014f845085efdb10acca83f0742b7e9fd;hp=deff5a7b2a9b703203ccf011256647d68e25f8ea;hpb=f200d59ee21a42998752c4319d4ff48e129c95c5;p=libsigrok.git diff --git a/src/hwdriver.c b/src/hwdriver.c index deff5a7b..3e6b0012 100644 --- a/src/hwdriver.c +++ b/src/hwdriver.c @@ -394,6 +394,8 @@ SR_API int sr_driver_init(struct sr_context *ctx, struct sr_dev_driver *driver) return SR_ERR_ARG; } + /* No log message here, too verbose and not very useful. */ + if ((ret = driver->init(driver, ctx)) < 0) sr_err("Failed to initialize the driver: %d.", ret); @@ -527,8 +529,7 @@ SR_API GSList *sr_driver_scan(struct sr_dev_driver *driver, GSList *options) l = driver->scan(driver, options); - sr_spew("Scan of '%s' found %d devices.", driver->name, - g_slist_length(l)); + sr_spew("Scan found %d devices (%s).", g_slist_length(l), driver->name); return l; } @@ -548,6 +549,8 @@ SR_PRIV void sr_hw_cleanup_all(const struct sr_context *ctx) if (!ctx) return; + sr_dbg("Cleaning up all drivers."); + drivers = sr_driver_list(ctx); for (i = 0; drivers[i]; i++) { if (drivers[i]->cleanup) @@ -581,7 +584,6 @@ SR_PRIV struct sr_config *sr_config_new(uint32_t key, GVariant *data) */ SR_PRIV void sr_config_free(struct sr_config *src) { - if (!src || !src->data) { sr_err("%s: invalid data!", __func__); return; @@ -589,7 +591,44 @@ SR_PRIV void sr_config_free(struct sr_config *src) g_variant_unref(src->data); g_free(src); +} + +/** @private */ +SR_PRIV int sr_dev_acquisition_start(struct sr_dev_inst *sdi) +{ + if (!sdi || !sdi->driver) { + sr_err("%s: Invalid arguments.", __func__); + return SR_ERR_ARG; + } + + if (sdi->status != SR_ST_ACTIVE) { + sr_err("%s: Device instance not active, can't start.", + sdi->driver->name); + return SR_ERR_DEV_CLOSED; + } + + sr_dbg("%s: Starting acquisition.", sdi->driver->name); + return sdi->driver->dev_acquisition_start(sdi); +} + +/** @private */ +SR_PRIV int sr_dev_acquisition_stop(struct sr_dev_inst *sdi) +{ + if (!sdi || !sdi->driver) { + sr_err("%s: Invalid arguments.", __func__); + return SR_ERR_ARG; + } + + if (sdi->status != SR_ST_ACTIVE) { + sr_err("%s: Device instance not active, can't stop.", + sdi->driver->name); + return SR_ERR_DEV_CLOSED; + } + + sr_dbg("%s: Stopping acquisition.", sdi->driver->name); + + return sdi->driver->dev_acquisition_stop(sdi); } static void log_key(const struct sr_dev_inst *sdi, @@ -767,7 +806,11 @@ SR_API int sr_config_set(const struct sr_dev_inst *sdi, ret = SR_ERR; else if (!sdi->driver->config_set) ret = SR_ERR_ARG; - else if (check_key(sdi->driver, sdi, cg, key, SR_CONF_SET, data) != SR_OK) + else if (sdi->status != SR_ST_ACTIVE) { + sr_err("%s: Device instance not active, can't set config.", + sdi->driver->name); + ret = SR_ERR_DEV_CLOSED; + } else if (check_key(sdi->driver, sdi, cg, key, SR_CONF_SET, data) != SR_OK) return SR_ERR_ARG; else if ((ret = sr_variant_type_check(key, data)) == SR_OK) { log_key(sdi, cg, key, SR_CONF_SET, data); @@ -796,7 +839,11 @@ SR_API int sr_config_commit(const struct sr_dev_inst *sdi) ret = SR_ERR; else if (!sdi->driver->config_commit) ret = SR_OK; - else + else if (sdi->status != SR_ST_ACTIVE) { + sr_err("%s: Device instance not active, can't commit config.", + sdi->driver->name); + ret = SR_ERR_DEV_CLOSED; + } else ret = sdi->driver->config_commit(sdi); return ret;