output: fixup trigger marker position in ascii/bits/hex output modules

Adjust the calculation of the '^' marker's position in T: lines of the
-O ascii/bits/hex output modules such that it matches the sample data
lines' layout. Add comments which discuss the motivation of the marker
position's calculation, which differs among each of those modules.

Strictly speaking -O bits was already correct. But I chose to adjust and
comment the logic such that multiple output modules follow a common
pattern. If performance is an issue, the bits.c change might be worth
reverting.

This commit fixes bug #1238.
This commit is contained in:
Gerhard Sittig 2018-06-27 23:57:45 +02:00 committed by Uwe Hermann
parent 769561cbe9
commit 67b345b981
3 changed files with 23 additions and 3 deletions

View File

@ -199,7 +199,13 @@ static int receive(const struct sr_output *o, const struct sr_datafeed_packet *p
g_string_append_len(*out, ctx->lines[j]->str, ctx->lines[j]->len); g_string_append_len(*out, ctx->lines[j]->str, ctx->lines[j]->len);
g_string_append_c(*out, '\n'); g_string_append_c(*out, '\n');
if (j == ctx->num_enabled_channels - 1 && ctx->trigger > -1) { if (j == ctx->num_enabled_channels - 1 && ctx->trigger > -1) {
offset = ctx->trigger + ctx->trigger / 8; /*
* Each group of 8 bits occupies 8 bit positions
* and no separator. With this dense presentation
* the "calculation" of the trigger position is
* rather straight forward.
*/
offset = ctx->trigger;
g_string_append_printf(*out, "T:%*s^ %d\n", offset, "", ctx->trigger); g_string_append_printf(*out, "T:%*s^ %d\n", offset, "", ctx->trigger);
ctx->trigger = -1; ctx->trigger = -1;
} }

View File

@ -168,7 +168,14 @@ static int receive(const struct sr_output *o, const struct sr_datafeed_packet *p
g_string_append_len(*out, ctx->lines[j]->str, ctx->lines[j]->len); g_string_append_len(*out, ctx->lines[j]->str, ctx->lines[j]->len);
g_string_append_c(*out, '\n'); g_string_append_c(*out, '\n');
if (j == ctx->num_enabled_channels - 1 && ctx->trigger > -1) { if (j == ctx->num_enabled_channels - 1 && ctx->trigger > -1) {
offset = ctx->trigger + ctx->trigger / 8; /*
* Each group of 8 bits occupies 8 bit positions
* plus 1 separator. Calculate the position of the
* byte which contains the trigger, then adjust for
* the trigger's bit position within that byte.
*/
offset = ctx->trigger / 8 * (8 + 1);
offset += ctx->trigger % 8;
g_string_append_printf(*out, "T:%*s^ %d\n", offset, "", ctx->trigger); g_string_append_printf(*out, "T:%*s^ %d\n", offset, "", ctx->trigger);
ctx->trigger = -1; ctx->trigger = -1;
} }

View File

@ -181,7 +181,14 @@ static int receive(const struct sr_output *o, const struct sr_datafeed_packet *p
g_string_append_len(*out, ctx->lines[j]->str, ctx->lines[j]->len); g_string_append_len(*out, ctx->lines[j]->str, ctx->lines[j]->len);
g_string_append_c(*out, '\n'); g_string_append_c(*out, '\n');
if (j == ctx->num_enabled_channels - 1 && ctx->trigger > -1) { if (j == ctx->num_enabled_channels - 1 && ctx->trigger > -1) {
offset = ctx->trigger + ctx->trigger / 8; /*
* Each group of 8 bits occupies 2 hex digits plus
* 1 separator. Calculate the position of the byte
* which contains the trigger, then adjust for the
* trigger's bit position within that byte.
*/
offset = ctx->trigger / 8 * (2 + 1);
offset += (ctx->trigger % 8) / 4;
g_string_append_printf(*out, "T:%*s^ %d\n", offset, "", ctx->trigger); g_string_append_printf(*out, "T:%*s^ %d\n", offset, "", ctx->trigger);
ctx->trigger = -1; ctx->trigger = -1;
} }