<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>