<p>Kévin Redon has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/9946">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">host sniff: add functions to print flags<br><br>Change-Id: If3c0a4790662bcc64db5ff03adcc033836e16ad0<br>---<br>M host/simtrace2-sniff.c<br>1 file changed, 58 insertions(+), 29 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/simtrace2 refs/changes/46/9946/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/host/simtrace2-sniff.c b/host/simtrace2-sniff.c</span><br><span>index d5fe48a..765ced3 100644</span><br><span>--- a/host/simtrace2-sniff.c</span><br><span>+++ b/host/simtrace2-sniff.c</span><br><span>@@ -94,6 +94,58 @@</span><br><span>       return 0;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+struct flag_meaning_t {</span><br><span style="color: hsl(120, 100%, 40%);">+   const uint32_t flag;</span><br><span style="color: hsl(120, 100%, 40%);">+  const char* meaning;</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+const struct flag_meaning_t change_flags[] = {</span><br><span style="color: hsl(120, 100%, 40%);">+    {</span><br><span style="color: hsl(120, 100%, 40%);">+             .flag = SNIFF_CHANGE_FLAG_CARD_INSERT,</span><br><span style="color: hsl(120, 100%, 40%);">+                .meaning = "card inserted",</span><br><span style="color: hsl(120, 100%, 40%);">+ },</span><br><span style="color: hsl(120, 100%, 40%);">+    {</span><br><span style="color: hsl(120, 100%, 40%);">+             .flag = SNIFF_CHANGE_FLAG_CARD_EJECT,</span><br><span style="color: hsl(120, 100%, 40%);">+         .meaning = "card ejected",</span><br><span style="color: hsl(120, 100%, 40%);">+  },</span><br><span style="color: hsl(120, 100%, 40%);">+    {</span><br><span style="color: hsl(120, 100%, 40%);">+             .flag = SNIFF_CHANGE_FLAG_RESET_HOLD,</span><br><span style="color: hsl(120, 100%, 40%);">+         .meaning = "reset hold",</span><br><span style="color: hsl(120, 100%, 40%);">+    },</span><br><span style="color: hsl(120, 100%, 40%);">+    {</span><br><span style="color: hsl(120, 100%, 40%);">+             .flag = SNIFF_CHANGE_FLAG_RESET_RELEASE,</span><br><span style="color: hsl(120, 100%, 40%);">+              .meaning = "reset release",</span><br><span style="color: hsl(120, 100%, 40%);">+ },</span><br><span style="color: hsl(120, 100%, 40%);">+    {</span><br><span style="color: hsl(120, 100%, 40%);">+             .flag = SNIFF_CHANGE_FLAG_TIMEOUT_WT,</span><br><span style="color: hsl(120, 100%, 40%);">+         .meaning = "data transfer timeout",</span><br><span style="color: hsl(120, 100%, 40%);">+ },</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+const struct flag_meaning_t data_flags[] = {</span><br><span style="color: hsl(120, 100%, 40%);">+        {</span><br><span style="color: hsl(120, 100%, 40%);">+             .flag = SNIFF_DATA_FLAG_ERROR_INCOMPLETE,</span><br><span style="color: hsl(120, 100%, 40%);">+             .meaning = "incomplete",</span><br><span style="color: hsl(120, 100%, 40%);">+    },</span><br><span style="color: hsl(120, 100%, 40%);">+    {</span><br><span style="color: hsl(120, 100%, 40%);">+             .flag = SNIFF_DATA_FLAG_ERROR_MALFORMED,</span><br><span style="color: hsl(120, 100%, 40%);">+              .meaning = "malformed",</span><br><span style="color: hsl(120, 100%, 40%);">+     },</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+static void print_flags(const struct flag_meaning_t* flag_meanings, uint32_t nb_flags, uint32_t flags) {</span><br><span style="color: hsl(120, 100%, 40%);">+    uint32_t i;</span><br><span style="color: hsl(120, 100%, 40%);">+   for (i = 0; i < nb_flags; i++) {</span><br><span style="color: hsl(120, 100%, 40%);">+           if (flags & flag_meanings[i].flag) {</span><br><span style="color: hsl(120, 100%, 40%);">+                      printf(flag_meanings[i].meaning);</span><br><span style="color: hsl(120, 100%, 40%);">+                     flags &= ~flag_meanings[i].flag;</span><br><span style="color: hsl(120, 100%, 40%);">+                  if (flags) {</span><br><span style="color: hsl(120, 100%, 40%);">+                          printf(", ");</span><br><span style="color: hsl(120, 100%, 40%);">+                       }</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> static int process_change(const uint8_t *buf, int len)</span><br><span> {</span><br><span>        /* check if there is enough data for the structure */</span><br><span>@@ -103,22 +155,12 @@</span><br><span>        struct sniff_change *change = (struct sniff_change *)buf;</span><br><span> </span><br><span>        printf("Card state change: ");</span><br><span style="color: hsl(0, 100%, 40%);">-        if (change->flags&SNIFF_CHANGE_FLAG_CARD_INSERT) {</span><br><span style="color: hsl(0, 100%, 40%);">-               printf("card inserted ");</span><br><span style="color: hsl(120, 100%, 40%);">+   if (change->flags) {</span><br><span style="color: hsl(120, 100%, 40%);">+               print_flags(change_flags, ARRAY_SIZE(change_flags), change->flags);</span><br><span style="color: hsl(120, 100%, 40%);">+                printf("\n");</span><br><span style="color: hsl(120, 100%, 40%);">+       } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              printf("no changes\n");</span><br><span>    }</span><br><span style="color: hsl(0, 100%, 40%);">-       if (change->flags&SNIFF_CHANGE_FLAG_CARD_EJECT) {</span><br><span style="color: hsl(0, 100%, 40%);">-                printf("card ejected ");</span><br><span style="color: hsl(0, 100%, 40%);">-      }</span><br><span style="color: hsl(0, 100%, 40%);">-       if (change->flags&SNIFF_CHANGE_FLAG_RESET_HOLD) {</span><br><span style="color: hsl(0, 100%, 40%);">-                printf("reset hold ");</span><br><span style="color: hsl(0, 100%, 40%);">-        }</span><br><span style="color: hsl(0, 100%, 40%);">-       if (change->flags&SNIFF_CHANGE_FLAG_RESET_RELEASE) {</span><br><span style="color: hsl(0, 100%, 40%);">-             printf("reset release ");</span><br><span style="color: hsl(0, 100%, 40%);">-     }</span><br><span style="color: hsl(0, 100%, 40%);">-       if (change->flags&SNIFF_CHANGE_FLAG_TIMEOUT_WT) {</span><br><span style="color: hsl(0, 100%, 40%);">-                printf("data transfer timeout ");</span><br><span style="color: hsl(0, 100%, 40%);">-     }</span><br><span style="color: hsl(0, 100%, 40%);">-       printf("\n");</span><br><span> </span><br><span>  return 0;</span><br><span> }</span><br><span>@@ -176,20 +218,7 @@</span><br><span>        }</span><br><span>    if (data->flags) {</span><br><span>                printf(" (");</span><br><span style="color: hsl(0, 100%, 40%);">-         if (data->flags & SNIFF_DATA_FLAG_ERROR_INCOMPLETE) {</span><br><span style="color: hsl(0, 100%, 40%);">-                    printf("incomplete");</span><br><span style="color: hsl(0, 100%, 40%);">-                 data->flags &= ~SNIFF_DATA_FLAG_ERROR_INCOMPLETE;</span><br><span style="color: hsl(0, 100%, 40%);">-                        if (data->flags) {</span><br><span style="color: hsl(0, 100%, 40%);">-                           printf(", ");</span><br><span style="color: hsl(0, 100%, 40%);">-                 }</span><br><span style="color: hsl(0, 100%, 40%);">-               }</span><br><span style="color: hsl(0, 100%, 40%);">-               if (data->flags & SNIFF_DATA_FLAG_ERROR_MALFORMED) {</span><br><span style="color: hsl(0, 100%, 40%);">-                     printf("malformed");</span><br><span style="color: hsl(0, 100%, 40%);">-                  data->flags &= ~SNIFF_DATA_FLAG_ERROR_MALFORMED;</span><br><span style="color: hsl(0, 100%, 40%);">-                 if (data->flags) {</span><br><span style="color: hsl(0, 100%, 40%);">-                           printf(", ");</span><br><span style="color: hsl(0, 100%, 40%);">-                 }</span><br><span style="color: hsl(0, 100%, 40%);">-               }</span><br><span style="color: hsl(120, 100%, 40%);">+             print_flags(data_flags, ARRAY_SIZE(data_flags), data->flags);</span><br><span>             printf(")");</span><br><span>       }</span><br><span>    printf(": ");</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/9946">change 9946</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/9946"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: simtrace2 </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: If3c0a4790662bcc64db5ff03adcc033836e16ad0 </div>
<div style="display:none"> Gerrit-Change-Number: 9946 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Kévin Redon <kredon@sysmocom.de> </div>