- if (g_strv_length(keyval) == 2) {
- for (l = dec->annotations; l; l = l->next, ann++) {
- ann_descr = l->data;
- if (!canon_cmp(ann_descr[0], keyval[1]))
- /* Found it. */
- break;
- }
- if (!l) {
- g_critical("Annotation '%s' not found "
- "for protocol decoder '%s'.", keyval[1], keyval[0]);
- return 1;
- }
+ g_debug("cli: Showing protocol decoder %s annotation "
+ "class %d (%s).", keyval[0], ann_class, ann_descr[0]);
+ } else {
+ /* No class specified: show all of them. */
+ ann_class = -1;
+ g_debug("cli: Showing all annotation classes for protocol "
+ "decoder %s.", keyval[0]);
+ }
+ g_hash_table_insert(pd_ann_visible, g_strdup(keyval[0]), GINT_TO_POINTER(ann_class));
+ g_strfreev(keyval);
+ }
+ g_strfreev(pds);
+
+ return 0;
+}
+
+int setup_pd_meta(void)
+{
+ struct srd_decoder *dec;
+ char **pds, **pdtok;
+
+ pd_meta_visible = g_hash_table_new_full(g_str_hash, g_int_equal,
+ g_free, NULL);
+ pds = g_strsplit(opt_pd_meta, ",", 0);
+ for (pdtok = pds; *pdtok && **pdtok; pdtok++) {
+ if (!(dec = srd_decoder_get_by_id(*pdtok))) {
+ g_critical("Protocol decoder '%s' not found.", *pdtok);
+ return 1;
+ }
+ g_debug("cli: Showing protocol decoder meta output from '%s'.", *pdtok);
+ g_hash_table_insert(pd_meta_visible, g_strdup(*pdtok), NULL);
+ }
+ g_strfreev(pds);
+
+ return 0;
+}
+
+int setup_pd_binary(void)
+{
+ GSList *l;
+ struct srd_decoder *dec;
+ int bin_class;
+ char **pds, **pdtok, **keyval, *bin_name;
+
+ pd_binary_visible = g_hash_table_new_full(g_str_hash, g_int_equal,
+ g_free, NULL);
+ pds = g_strsplit(opt_pd_binary, ",", 0);
+ for (pdtok = pds; *pdtok && **pdtok; pdtok++) {
+ keyval = g_strsplit(*pdtok, "=", 0);
+ if (!(dec = srd_decoder_get_by_id(keyval[0]))) {
+ g_critical("Protocol decoder '%s' not found.", keyval[0]);
+ return 1;
+ }
+ if (!dec->binary) {
+ g_critical("Protocol decoder '%s' has no binary output.", keyval[0]);
+ return 1;
+ }
+ bin_class = 0;
+ if (g_strv_length(keyval) == 2) {
+ for (l = dec->binary; l; l = l->next, bin_class++) {
+ bin_name = l->data;
+ if (!canon_cmp(bin_name, keyval[1]))
+ /* Found it. */
+ break;