From: Karl Palsson Date: Tue, 29 Nov 2016 16:21:30 +0000 (+0000) Subject: Show annotations based on decoder ID X-Git-Tag: sigrok-cli-0.7.0~15 X-Git-Url: https://sigrok.org/gitaction?a=commitdiff_plain;h=10d4fc25bfd67dbd7b457851d6c8a1dc8b031b39;p=sigrok-cli.git 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 --- 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;