X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;f=session.c;h=1cf4170e220a1904ee798cb0161a29e67fcbef90;hb=3520422fc761d50830a45a43cd7d34cca589ad1b;hp=b52c91a374540de5eadd41c2cf030666b08706eb;hpb=2bb311b482d587a7d20c35bf54f084bc0011d72d;p=libsigrok.git diff --git a/session.c b/session.c index b52c91a3..1cf4170e 100644 --- a/session.c +++ b/session.c @@ -84,6 +84,7 @@ SR_API struct sr_session *sr_session_new(void) } session->source_timeout = -1; + session->running = FALSE; session->abort_session = FALSE; g_mutex_init(&session->stop_mutex); @@ -148,6 +149,7 @@ SR_API int sr_session_dev_remove_all(void) */ SR_API int sr_session_dev_add(const struct sr_dev_inst *sdi) { + int ret; if (!sdi) { sr_err("%s: sdi was NULL", __func__); @@ -176,6 +178,15 @@ SR_API int sr_session_dev_add(const struct sr_dev_inst *sdi) session->devs = g_slist_append(session->devs, (gpointer)sdi); + if (session->running) { + /* Adding a device to a running session. Start acquisition + * on that device now. */ + if ((ret = sdi->driver->dev_acquisition_start(sdi, + (void *)sdi)) != SR_OK) + sr_err("Failed to start acquisition of device in " + "running session: %d", ret); + } + return SR_OK; } @@ -343,7 +354,7 @@ SR_API int sr_session_start(void) sdi = l->data; if ((ret = sdi->driver->dev_acquisition_start(sdi, sdi)) != SR_OK) { sr_err("%s: could not start an acquisition " - "(%d)", __func__, ret); + "(%s)", __func__, sr_strerror(ret)); break; } } @@ -372,6 +383,7 @@ SR_API int sr_session_run(void) "cannot be run without devices.", __func__); return SR_ERR_BUG; } + session->running = TRUE; sr_info("Running."); @@ -399,6 +411,8 @@ SR_API int sr_session_run(void) * resources that the session thread will try to use. * * @return SR_OK upon success, SR_ERR_BUG if no session exists. + * + * @private */ SR_PRIV int sr_session_stop_sync(void) { @@ -419,6 +433,7 @@ SR_PRIV int sr_session_stop_sync(void) sdi->driver->dev_acquisition_stop(sdi, sdi); } } + session->running = FALSE; return SR_OK; }