aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKévin Redon <kredon@sysmocom.de>2018-07-28 17:11:21 +0200
committerKévin Redon <kredon@sysmocom.de>2018-07-28 20:59:41 +0200
commit697199676e81692dcb8073e81e906dbf3addbb01 (patch)
tree5546e1d147261c9baefafb63a75458a8a7516dc9
parent8e84f8125c68389f0fdc611040fb129282d7febc (diff)
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
-rw-r--r--firmware/libcommon/source/sniffer.c47
-rw-r--r--host/simtrace2-sniff.c8
2 files changed, 37 insertions, 18 deletions
diff --git a/firmware/libcommon/source/sniffer.c b/firmware/libcommon/source/sniffer.c
index e800216..5cf96fd 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 aeacc6b..368ae60 100644
--- a/host/simtrace2-sniff.c
+++ b/host/simtrace2-sniff.c
@@ -132,13 +132,13 @@ const struct value_string data_flags[] = {
.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) {