X-Git-Url: https://sigrok.org/gitweb/?p=sigrok-cli.git;a=blobdiff_plain;f=decode.c;h=8246eeee34e70eabf311baabaf001a28626d89cd;hp=19112a922575b04edfbb5ec8e6e5aae6bc6709a7;hb=7d8068f88f58f3998a9c74956e385a1e906001e8;hpb=2be182e6437fb082aedca653fdc106d702518db0 diff --git a/decode.c b/decode.c index 19112a9..8246eee 100644 --- a/decode.c +++ b/decode.c @@ -17,13 +17,9 @@ * along with this program. If not, see . */ +#include "sigrok-cli.h" #include "config.h" #include -#include -#ifdef HAVE_SRD -#include /* First, so we avoid a _POSIX_C_SOURCE warning. */ -#endif -#include "sigrok-cli.h" #ifdef HAVE_SRD static GHashTable *pd_ann_visible = NULL; @@ -32,11 +28,6 @@ static GHashTable *pd_binary_visible = NULL; extern struct srd_session *srd_sess; extern gint opt_loglevel; -extern gchar *opt_pds; -extern gchar *opt_pd_stack; -extern gchar *opt_pd_annotations; -extern gchar *opt_pd_meta; -extern gchar *opt_pd_binary; static int opts_to_gvar(struct srd_decoder *dec, GHashTable *hash, @@ -126,7 +117,7 @@ static int probes_to_gvar(struct srd_decoder *dec, GHashTable *hash, * That will instantiate two SPI decoders on the clock but different data * lines. */ -int register_pds(const char *pdstring) +int register_pds(const char *opt_pds, char *opt_pd_annotations) { struct srd_decoder *dec; GHashTable *pd_opthash, *options, *probes; @@ -140,7 +131,7 @@ int register_pds(const char *pdstring) ret = 0; pd_name = NULL; pd_opthash = options = probes = NULL; - pdtokens = g_strsplit(pdstring, ",", 0); + pdtokens = g_strsplit(opt_pds, ",", 0); for (pdtok = pdtokens; *pdtok; pdtok++) { if (!(pd_opthash = parse_generic_arg(*pdtok, TRUE))) { g_critical("Invalid protocol decoder option '%s'.", *pdtok); @@ -207,7 +198,7 @@ int register_pds(const char *pdstring) return ret; } -int setup_pd_stack(void) +int setup_pd_stack(char *opt_pds, char *opt_pd_stack, char *opt_pd_annotations) { struct srd_decoder_inst *di_from, *di_to; int ret, i; @@ -266,7 +257,7 @@ int setup_pd_stack(void) return 0; } -int setup_pd_annotations(void) +int setup_pd_annotations(char *opt_pd_annotations) { GSList *l; struct srd_decoder *dec; @@ -314,7 +305,7 @@ int setup_pd_annotations(void) return 0; } -int setup_pd_meta(void) +int setup_pd_meta(char *opt_pd_meta) { struct srd_decoder *dec; char **pds, **pdtok; @@ -335,7 +326,7 @@ int setup_pd_meta(void) return 0; } -int setup_pd_binary(void) +int setup_pd_binary(char *opt_pd_binary) { GSList *l; struct srd_decoder *dec; @@ -386,9 +377,11 @@ int setup_pd_binary(void) void show_pd_annotations(struct srd_proto_data *pdata, void *cb_data) { + struct srd_decoder *dec; struct srd_proto_data_annotation *pda; gpointer ann_format; - int format; + int format, i; + char **ann_descr; /* 'cb_data' is not used in this specific callback. */ (void)cb_data; @@ -402,16 +395,29 @@ void show_pd_annotations(struct srd_proto_data *pdata, void *cb_data) return; format = GPOINTER_TO_INT(ann_format); + dec = pdata->pdo->di->decoder; pda = pdata->data; if (format != -1 && pda->ann_format != format) /* We don't want this particular format from the PD. */ return; - if (opt_loglevel > SR_LOG_WARN) - printf("%"PRIu64"-%"PRIu64" ", pdata->start_sample, pdata->end_sample); - printf("%s: ", pdata->pdo->proto_id); - /* Show only the longest annotation. */ - printf("\"%s\" ", pda->ann_text[0]); + if (opt_loglevel <= SR_LOG_WARN) { + /* Show only the longest annotation. */ + printf("%s", pda->ann_text[0]); + } else if (opt_loglevel >= SR_LOG_INFO) { + /* Sample numbers and quotes around the longest annotation. */ + printf("%"PRIu64"-%"PRIu64"", pdata->start_sample, pdata->end_sample); + if (opt_loglevel == SR_LOG_INFO) { + printf(" \"%s\"", pda->ann_text[0]); + } else { + /* Protocol decoder id, annotation class, + * all annotation strings. */ + ann_descr = g_slist_nth_data(dec->annotations, pda->ann_format); + printf(" %s: %s:", pdata->pdo->proto_id, ann_descr[0]); + for (i = 0; pda->ann_text[i]; i++) + printf(" \"%s\"", pda->ann_text[i]); + } + } printf("\n"); fflush(stdout); }