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