From 10d4fc25bfd67dbd7b457851d6c8a1dc8b031b39 Mon Sep 17 00:00:00 2001 From: Karl Palsson Date: Tue, 29 Nov 2016 16:21:30 +0000 Subject: [PATCH] Show annotations based on decoder ID 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 --- decode.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/decode.c b/decode.c index adbe73b..2bcc0ae 100644 --- 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; -- 2.30.2