<p>Harald Welte <strong>merged</strong> this change.</p><p><a href="https://gerrit.osmocom.org/9946">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Jenkins Builder: Verified
  Harald Welte: Looks good to me, approved

</div><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, 61 insertions(+), 29 deletions(-)<br><br></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..efb986f 100644</span><br><span>--- a/host/simtrace2-sniff.c</span><br><span>+++ b/host/simtrace2-sniff.c</span><br><span>@@ -94,6 +94,61 @@</span><br><span>        return 0;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+const struct value_string change_flags[] = {</span><br><span style="color: hsl(120, 100%, 40%);">+      {</span><br><span style="color: hsl(120, 100%, 40%);">+             .value = SNIFF_CHANGE_FLAG_CARD_INSERT,</span><br><span style="color: hsl(120, 100%, 40%);">+               .str = "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%);">+             .value = SNIFF_CHANGE_FLAG_CARD_EJECT,</span><br><span style="color: hsl(120, 100%, 40%);">+                .str = "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%);">+             .value = SNIFF_CHANGE_FLAG_RESET_HOLD,</span><br><span style="color: hsl(120, 100%, 40%);">+                .str = "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%);">+             .value = SNIFF_CHANGE_FLAG_RESET_RELEASE,</span><br><span style="color: hsl(120, 100%, 40%);">+             .str = "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%);">+             .value = SNIFF_CHANGE_FLAG_TIMEOUT_WT,</span><br><span style="color: hsl(120, 100%, 40%);">+                .str = "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%);">+             .value = 0,</span><br><span style="color: hsl(120, 100%, 40%);">+           .str = NULL,</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 value_string data_flags[] = {</span><br><span style="color: hsl(120, 100%, 40%);">+  {</span><br><span style="color: hsl(120, 100%, 40%);">+             .value = SNIFF_DATA_FLAG_ERROR_INCOMPLETE,</span><br><span style="color: hsl(120, 100%, 40%);">+            .str = "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%);">+             .value = SNIFF_DATA_FLAG_ERROR_MALFORMED,</span><br><span style="color: hsl(120, 100%, 40%);">+             .str = "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%);">+             .value = 0,</span><br><span style="color: hsl(120, 100%, 40%);">+           .str = NULL,</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 value_string* 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].value) {</span><br><span style="color: hsl(120, 100%, 40%);">+                     printf(flag_meanings[i].str);</span><br><span style="color: hsl(120, 100%, 40%);">+                 flags &= ~flag_meanings[i].value;</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 +158,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 +221,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: merged </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: 6 </div>
<div style="display:none"> Gerrit-Owner: Kévin Redon <kredon@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Harald Welte <laforge@gnumonks.org> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: Kévin Redon <kredon@sysmocom.de> </div>