]> sigrok.org Git - sigrok-cli.git/blobdiff - session.c
anykey: Use GLib I/O channel watch
[sigrok-cli.git] / session.c
index 1d98877801a429e3f0b437f976f7958f68871056..f71f999bd10491449b191e14786d62f9edb28eb6 100644 (file)
--- a/session.c
+++ b/session.c
@@ -17,6 +17,7 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
+#include <config.h>
 #include <glib.h>
 #include <glib/gstdio.h>
 #include <string.h>
@@ -530,6 +531,7 @@ void run_session(void)
        int is_demo_dev;
        struct sr_dev_driver *driver;
        const struct sr_transform *t;
+       GMainLoop *main_loop;
 
        devices = device_scan();
        if (!devices) {
@@ -606,6 +608,7 @@ void run_session(void)
                return;
        }
 
+       trigger = NULL;
        if (opt_triggers) {
                if (!parse_triggerstring(sdi, opt_triggers, &trigger)) {
                        sr_session_destroy(session);
@@ -680,8 +683,14 @@ void run_session(void)
        if (!(t = setup_transform_module(sdi)))
                g_critical("Failed to initialize transform module.");
 
+       main_loop = g_main_loop_new(NULL, FALSE);
+
+       sr_session_stopped_callback_set(session,
+               (sr_session_stopped_callback)g_main_loop_quit, main_loop);
+
        if (sr_session_start(session) != SR_OK) {
                g_critical("Failed to start session.");
+               g_main_loop_unref(main_loop);
                sr_session_destroy(session);
                return;
        }
@@ -689,12 +698,15 @@ void run_session(void)
        if (opt_continuous)
                add_anykey(session);
 
-       sr_session_run(session);
+       g_main_loop_run(main_loop);
 
        if (opt_continuous)
                clear_anykey();
 
+       if (trigger)
+               sr_trigger_free(trigger);
+
        sr_session_datafeed_callback_remove_all(session);
+       g_main_loop_unref(main_loop);
        sr_session_destroy(session);
-
 }