X-Git-Url: https://sigrok.org/gitweb/?p=sigrok-cli.git;a=blobdiff_plain;f=input.c;h=c62c96406917a74e424a4de7e054625bee5894c3;hp=5650b9f8d1a317644c32f537f91bbf714a86a054;hb=7c6a0420448760fc138cbe38579a5c9e0a46132c;hpb=20fb52e08416238c60392b410f69856cc7d98650 diff --git a/input.c b/input.c index 5650b9f..c62c964 100644 --- a/input.c +++ b/input.c @@ -19,13 +19,12 @@ #include "sigrok-cli.h" #include "config.h" +#include +#include +#include +#include #include -extern gchar *opt_input_file; -extern gchar *opt_input_format; -extern gchar *opt_probes; - - /** * Return the input file format which the CLI tool should use. * @@ -89,6 +88,7 @@ static void load_input_file_format(void) { GHashTable *fmtargs = NULL; struct stat st; + struct sr_session *session; struct sr_input *in; struct sr_input_format *input_format; char *fmtspec = NULL; @@ -127,20 +127,20 @@ static void load_input_file_format(void) } } - if (select_probes(in->sdi) > 0) + if (select_channels(in->sdi) != SR_OK) return; - sr_session_new(); - sr_session_datafeed_callback_add(datafeed_in, NULL); - if (sr_session_dev_add(in->sdi) != SR_OK) { + sr_session_new(&session); + sr_session_datafeed_callback_add(session, &datafeed_in, NULL); + if (sr_session_dev_add(session, in->sdi) != SR_OK) { g_critical("Failed to use device."); - sr_session_destroy(); + sr_session_destroy(session); return; } input_format->loadfile(in, opt_input_file); - sr_session_destroy(); + sr_session_destroy(session); if (fmtargs) g_hash_table_destroy(fmtargs); @@ -148,17 +148,31 @@ static void load_input_file_format(void) void load_input_file(void) { + GSList *devices; + struct sr_session *session; + struct sr_dev_inst *sdi; + int ret; - if (sr_session_load(opt_input_file) == SR_OK) { + if (sr_session_load(opt_input_file, &session) == SR_OK) { /* sigrok session file */ - sr_session_datafeed_callback_add(datafeed_in, NULL); - sr_session_start(); - sr_session_run(); - sr_session_stop(); + ret = sr_session_dev_list(session, &devices); + if (ret != SR_OK || !devices->data) { + g_critical("Failed to access session device."); + sr_session_destroy(session); + return; + } + sdi = devices->data; + if (select_channels(sdi) != SR_OK) { + sr_session_destroy(session); + return; + } + sr_session_datafeed_callback_add(session, datafeed_in, NULL); + sr_session_start(session); + sr_session_run(session); + sr_session_stop(session); } else { /* fall back on input modules */ load_input_file_format(); } } -