<p>Kévin Redon has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/9922">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">sniffer: move reset handling from ISR to main loop<br><br>Change-Id: Ia88fb4baf49017524bb201123da3511e5342ba48<br>---<br>M firmware/libcommon/source/sniffer.c<br>1 file changed, 16 insertions(+), 8 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/simtrace2 refs/changes/22/9922/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/firmware/libcommon/source/sniffer.c b/firmware/libcommon/source/sniffer.c</span><br><span>index a47ef55..0c7829f 100644</span><br><span>--- a/firmware/libcommon/source/sniffer.c</span><br><span>+++ b/firmware/libcommon/source/sniffer.c</span><br><span>@@ -267,11 +267,9 @@</span><br><span>   case ISO7816_S_RESET:</span><br><span>                update_fidi(&sniff_usart, 0x11); /* reset baud rate to default Di/Fi values */</span><br><span>           update_wt(10, 1); /* reset WT time-out */</span><br><span style="color: hsl(0, 100%, 40%);">-               change_flags |= SNIFF_CHANGE_FLAG_RESET_HOLD; /* set flag and let main loop send it */</span><br><span>               break;</span><br><span>       case ISO7816_S_WAIT_ATR:</span><br><span>             rbuf_reset(&sniff_buffer); /* reset buffer for new communication */</span><br><span style="color: hsl(0, 100%, 40%);">-         change_flags |= SNIFF_CHANGE_FLAG_RESET_RELEASE; /* set flag and let main loop send it */</span><br><span>            break;</span><br><span>       case ISO7816_S_IN_ATR:</span><br><span>               atr_i = 0;</span><br><span>@@ -817,13 +815,9 @@</span><br><span>    }</span><br><span>    /* Update the ISO state according to the reset change */</span><br><span>     if (PIO_Get(&pin_rst)) {</span><br><span style="color: hsl(0, 100%, 40%);">-            if (ISO7816_S_WAIT_ATR != iso_state) {</span><br><span style="color: hsl(0, 100%, 40%);">-                  change_state(ISO7816_S_WAIT_ATR);</span><br><span style="color: hsl(0, 100%, 40%);">-               }</span><br><span style="color: hsl(120, 100%, 40%);">+             change_flags |= SNIFF_CHANGE_FLAG_RESET_HOLD; /* set flag and let main loop send it */</span><br><span>       } else {</span><br><span style="color: hsl(0, 100%, 40%);">-                if (ISO7816_S_RESET != iso_state) {</span><br><span style="color: hsl(0, 100%, 40%);">-                     change_state(ISO7816_S_RESET);</span><br><span style="color: hsl(0, 100%, 40%);">-          }</span><br><span style="color: hsl(120, 100%, 40%);">+             change_flags |= SNIFF_CHANGE_FLAG_RESET_RELEASE; /* set flag and let main loop send it */</span><br><span>    }</span><br><span> }</span><br><span> </span><br><span>@@ -949,6 +943,10 @@</span><br><span>    process_any_usb_commands(queue);</span><br><span>     */</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+        /* WARNING: the signal data and flags are not synchronized. We have to hope </span><br><span style="color: hsl(120, 100%, 40%);">+   * the processing is fast enough to not land in the wrong state while data</span><br><span style="color: hsl(120, 100%, 40%);">+     * is remaining</span><br><span style="color: hsl(120, 100%, 40%);">+        */</span><br><span>  /* Handle sniffed data */</span><br><span>    if (!rbuf_is_empty(&sniff_buffer)) { /* use if instead of while to let the main loop restart the watchdog */</span><br><span>             uint8_t byte = rbuf_read(&sniff_buffer);</span><br><span>@@ -993,6 +991,16 @@</span><br><span> </span><br><span>      /* Handle flags */</span><br><span>   if (change_flags) { /* WARNING this is not synced with the data buffer handling */</span><br><span style="color: hsl(120, 100%, 40%);">+            if (change_flags & SNIFF_CHANGE_FLAG_RESET_HOLD) {</span><br><span style="color: hsl(120, 100%, 40%);">+                        if (ISO7816_S_WAIT_ATR != iso_state) {</span><br><span style="color: hsl(120, 100%, 40%);">+                                change_state(ISO7816_S_WAIT_ATR);</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%);">+             if (change_flags & SNIFF_CHANGE_FLAG_RESET_RELEASE) {</span><br><span style="color: hsl(120, 100%, 40%);">+                     if (ISO7816_S_RESET != iso_state) {</span><br><span style="color: hsl(120, 100%, 40%);">+                           change_state(ISO7816_S_RESET);</span><br><span style="color: hsl(120, 100%, 40%);">+                        }</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span>            if (change_flags & SNIFF_CHANGE_FLAG_TIMEOUT_WT) {</span><br><span>                       /* Use timeout to detect interrupted data transmission */</span><br><span>                    switch (iso_state) {</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/9922">change 9922</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/9922"/><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: Ia88fb4baf49017524bb201123da3511e5342ba48 </div>
<div style="display:none"> Gerrit-Change-Number: 9922 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Kévin Redon <kredon@sysmocom.de> </div>