From 697199676e81692dcb8073e81e906dbf3addbb01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Redon?= Date: Sat, 28 Jul 2018 17:11:21 +0200 Subject: [PATCH] sniff: ensure the checksum error flag is also printed the firmware now also use a generic value_string array (as does the host application) Change-Id: I861bd8b52e8f2f2a4786bbe1cc834917119dc394 --- firmware/libcommon/source/sniffer.c | 47 ++++++++++++++++++++--------- host/simtrace2-sniff.c | 8 ++--- 2 files changed, 37 insertions(+), 18 deletions(-) diff --git a/firmware/libcommon/source/sniffer.c b/firmware/libcommon/source/sniffer.c index e8002163..5cf96fd3 100644 --- a/firmware/libcommon/source/sniffer.c +++ b/firmware/libcommon/source/sniffer.c @@ -302,6 +302,38 @@ static void change_state(enum iso7816_3_sniff_state iso_state_new) //TRACE_INFO("Changed to ISO 7816-3 state %u\n\r", iso_state); /* don't print since this is function is also called by ISRs */ } +const struct value_string data_flags[] = { + { + .value = SNIFF_DATA_FLAG_ERROR_INCOMPLETE, + .str = "incomplete", + }, + { + .value = SNIFF_DATA_FLAG_ERROR_MALFORMED, + .str = "malformed", + }, + { + .value = SNIFF_DATA_FLAG_ERROR_CHECKSUM, + .str = "checksum error", + }, + { + .value = 0, + .str = NULL, + }, +}; + +static void print_flags(const struct value_string* flag_meanings, uint32_t nb_flags, uint32_t flags) { + uint32_t i; + for (i = 0; i < nb_flags; i++) { + if (flags & flag_meanings[i].value) { + printf(flag_meanings[i].str); + flags &= ~flag_meanings[i].value; + if (flags) { + printf(", "); + } + } + } +} + static void usb_send_data(enum simtrace_msg_type_sniff type, const uint8_t* data, uint16_t length, uint32_t flags) { /* Sanity check */ @@ -329,20 +361,7 @@ static void usb_send_data(enum simtrace_msg_type_sniff type, const uint8_t* data } if (flags) { printf(" ("); - if (flags & SNIFF_DATA_FLAG_ERROR_INCOMPLETE) { - printf("incomplete"); - flags &= ~SNIFF_DATA_FLAG_ERROR_INCOMPLETE; - if (flags) { - printf(", "); - } - } - if (flags & SNIFF_DATA_FLAG_ERROR_MALFORMED) { - printf("malformed"); - flags &= ~SNIFF_DATA_FLAG_ERROR_MALFORMED; - if (flags) { - printf(", "); - } - } + print_flags(data_flags, ARRAY_SIZE(data_flags), flags); putchar(')'); } printf(": "); diff --git a/host/simtrace2-sniff.c b/host/simtrace2-sniff.c index aeacc6b0..368ae604 100644 --- a/host/simtrace2-sniff.c +++ b/host/simtrace2-sniff.c @@ -131,14 +131,14 @@ const struct value_string data_flags[] = { .value = SNIFF_DATA_FLAG_ERROR_MALFORMED, .str = "malformed", }, - { - .value = 0, - .str = NULL, - }, { .value = SNIFF_DATA_FLAG_ERROR_CHECKSUM, .str = "checksum error", }, + { + .value = 0, + .str = NULL, + }, }; static void print_flags(const struct value_string* flag_meanings, uint32_t nb_flags, uint32_t flags) {