X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fdevice.c;fp=src%2Fdevice.c;h=14b56b2f33a2ed269c95d8bcaeceb85e9c6fc3e8;hb=7e463623382e1f574fde150b3fc88a65eaebb578;hp=e5cbf4ef2868473e1c689e0752361d5f9e35c998;hpb=6402c379161ec138e451901c411817a55846a75b;p=libsigrok.git diff --git a/src/device.c b/src/device.c index e5cbf4ef..14b56b2f 100644 --- a/src/device.c +++ b/src/device.c @@ -545,11 +545,19 @@ SR_API int sr_dev_clear(const struct sr_dev_driver *driver) } /** - * Open the specified device. + * Open the specified device instance. + * + * If the device instance is already open (sdi->status == SR_ST_ACTIVE), + * SR_ERR will be returned and no re-opening of the device will be attempted. + * + * If opening was successful, sdi->status is set to SR_ST_ACTIVE, otherwise + * it will be left unchanged. * * @param sdi Device instance to use. Must not be NULL. * - * @return SR_OK upon success, a negative error code upon errors. + * @retval SR_OK Success. + * @retval SR_ERR_ARG Invalid arguments. + * @retval SR_ERR Device instance was already active, or other error. * * @since 0.2.0 */ @@ -558,7 +566,7 @@ SR_API int sr_dev_open(struct sr_dev_inst *sdi) int ret; if (!sdi || !sdi->driver || !sdi->driver->dev_open) - return SR_ERR; + return SR_ERR_ARG; if (sdi->status == SR_ST_ACTIVE) { sr_err("%s: Device instance already active, can't re-open.", @@ -566,10 +574,13 @@ SR_API int sr_dev_open(struct sr_dev_inst *sdi) return SR_ERR; } - sr_dbg("%s: Opening device.", sdi->driver->name) + sr_dbg("%s: Opening device instance.", sdi->driver->name); ret = sdi->driver->dev_open(sdi); + if (ret == SR_OK) + sdi->status = SR_ST_ACTIVE; + return ret; }