Show annotations based on decoder ID
authorKarl Palsson <karlp@etactica.com>
Tue, 29 Nov 2016 16:21:30 +0000 (16:21 +0000)
committerUwe Hermann <uwe@hermann-uwe.de>
Mon, 20 Feb 2017 15:31:25 +0000 (16:31 +0100)
Originally, decoder ID was equal to decoder instance ID, so it didn't
matter what you were comparing with. However, with distinct decoder
instances, this assumption fails. Because instance IDs can't be known
in advance, and because it would make the CLI arguments even more
complex, we simply let the -A option continue to be per decoder, not per
instance. This maintains compatibility with prior behaviour, but
doesn't allow the full flexibility possible with the library.

Behaviour preserved:
Single PD, no -A flag => all annotations from PD
Single PD, -A pdid => all annotations from PD
Single PD, -A pdid=annX => annX from PD

Behaviour now added:
Duplicate PDs, no -A flag => all annotations from all PDs
Duplicate PDs, -A pdid => all annotations from all PDs of type pdid
Duplicate PDs, -A pdid=annX => all annX from all PDs of type pdid

This fixes parts of bug #868.

Signed-off-by: Karl Palsson <karlp@etactica.com>
decode.c

index adbe73b..2bcc0ae 100644 (file)
--- a/decode.c
+++ b/decode.c
@@ -179,7 +179,7 @@ static int register_pd(char *opt_pds, char *opt_pd_annotations)
                 * in the stack.
                 */
                if (!opt_pd_annotations) {
-                       g_hash_table_insert(pd_ann_visible, g_strdup(di->inst_id),
+                       g_hash_table_insert(pd_ann_visible, g_strdup(di->decoder->id),
                                        g_slist_append(NULL, GINT_TO_POINTER(-1)));
                }
                if (di_prior) {
@@ -430,10 +430,11 @@ void show_pd_annotations(struct srd_proto_data *pdata, void *cb_data)
        if (!pd_ann_visible)
                return;
 
-       if (!g_hash_table_lookup_extended(pd_ann_visible, pdata->pdo->di->inst_id,
-                       NULL, (void **)&ann_list))
+       if (!g_hash_table_lookup_extended(pd_ann_visible, pdata->pdo->di->decoder->id,
+                       NULL, (void **)&ann_list)) {
                /* Not in the list of PDs whose annotations we're showing. */
                return;
+       }
 
        dec = pdata->pdo->di->decoder;
        pda = pdata->data;