garmin: teach the parser to show undefined values for unknown fields too
Make it easier to see which of the unknown fields don't contain anything interesting. Soon this will be at the stage where the parser skeleton itself doesn't need much work, and I should look at the actual data and turn it into samples instead. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
6d53e31cba
commit
3dbe5353f5
@ -407,21 +407,31 @@ static int traverse_regular(struct garmin_parser_t *garmin,
|
||||
field_desc->parse(garmin, data);
|
||||
} else {
|
||||
#if 1
|
||||
fprintf(stderr, "%s/%d:", msg_name, field_nr);
|
||||
if (base_type == 7)
|
||||
fprintf(stderr, " %s\n", data);
|
||||
else {
|
||||
static const unsigned long long inval_value_array[] = {
|
||||
0xff, 0x7f, 0xff, 0x7fff, 0xffff, 0x7fffffff, 0xffffffff, 0,
|
||||
0xffffffff, 0xfffffffffffffffful, 0x00, 0x0000, 0x00000000, 0xff,
|
||||
0x7fffffffffffffff, 0xffffffffffffffff, 0x0000000000000000 };
|
||||
const unsigned long long inval = inval_value_array[base_type];
|
||||
|
||||
switch (base_type) {
|
||||
case 7:
|
||||
if (!*data)
|
||||
break;
|
||||
fprintf(stderr, "%s/%d: %s\n", msg_name, field_nr, data);
|
||||
break;
|
||||
default:
|
||||
fprintf(stderr, "%s/%d:", msg_name, field_nr);
|
||||
for (int i = 0; i < len; i += base_size) {
|
||||
unsigned long long value;
|
||||
unsigned long long val;
|
||||
const char *fmt;
|
||||
const unsigned char *ptr = data + i;
|
||||
switch (base_size) {
|
||||
default: value = *ptr; fmt = " %02llx"; break;
|
||||
case 2: value = *(unsigned short *)ptr; fmt = " %04llx"; break;
|
||||
case 4: value = *(unsigned int *)ptr; fmt = " %08llx"; break;
|
||||
case 8: value = *(unsigned long long *)ptr; fmt = " %016llx"; break;
|
||||
default: val = *ptr; fmt = val == inval ? " --" : " %02llx"; break;
|
||||
case 2: val = *(unsigned short *)ptr; fmt = val == inval ? " ----" : " %04llx"; break;
|
||||
case 4: val = *(unsigned int *)ptr; fmt = val == inval ? " --------" : " %08llx"; break;
|
||||
case 8: val = *(unsigned long long *)ptr; fmt = val == inval ? " ----------------" : " %016llx"; break;
|
||||
}
|
||||
fprintf(stderr, fmt, value);
|
||||
fprintf(stderr, fmt, val);
|
||||
}
|
||||
fprintf(stderr, "\n");
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user