<p>Harald Welte <strong>merged</strong> this change.</p><p><a href="https://gerrit.osmocom.org/9867">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;">sniff: add WT timeout detection using USART timeout (TC is not required)<br><br>Change-Id: I4ec6e812e7e1eb91005027d2e864fc315550d79c<br>---<br>M firmware/libcommon/source/sniffer.c<br>1 file changed, 28 insertions(+), 4 deletions(-)<br><br></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 bada46e..8a94c8a 100644</span><br><span>--- a/firmware/libcommon/source/sniffer.c</span><br><span>+++ b/firmware/libcommon/source/sniffer.c</span><br><span>@@ -193,11 +193,9 @@</span><br><span>      switch (iso_state_new) {</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 style="color: hsl(0, 100%, 40%);">-              // TODO disable USART and TC</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%);">-         // TODO enable USART and TC</span><br><span>          break;</span><br><span>       case ISO7816_S_IN_ATR:</span><br><span>               atr_i = 0;</span><br><span>@@ -614,6 +612,30 @@</span><br><span>            /* Store sniffed data into buffer (also clear interrupt */</span><br><span>           rbuf_write(&sniff_buffer, byte);</span><br><span>         }</span><br><span style="color: hsl(120, 100%, 40%);">+     /* Verify it WT timeout occurred, to detect unresponsive card */</span><br><span style="color: hsl(120, 100%, 40%);">+      if (csr & US_CSR_TIMEOUT) {</span><br><span style="color: hsl(120, 100%, 40%);">+               /* Stop timeout until next character is received */</span><br><span style="color: hsl(120, 100%, 40%);">+           sniff_usart.base->US_CR |= US_CR_STTTO;</span><br><span style="color: hsl(120, 100%, 40%);">+            /* Use timeout to detect end of ATR/PPS/TPDU */</span><br><span style="color: hsl(120, 100%, 40%);">+               switch (iso_state) {</span><br><span style="color: hsl(120, 100%, 40%);">+          case ISO7816_S_RESET:</span><br><span style="color: hsl(120, 100%, 40%);">+         case ISO7816_S_WAIT_ATR:</span><br><span style="color: hsl(120, 100%, 40%);">+                      break;</span><br><span style="color: hsl(120, 100%, 40%);">+                case ISO7816_S_IN_ATR:</span><br><span style="color: hsl(120, 100%, 40%);">+                        change_state(ISO7816_S_WAIT_ATR);</span><br><span style="color: hsl(120, 100%, 40%);">+                     break;</span><br><span style="color: hsl(120, 100%, 40%);">+                case ISO7816_S_WAIT_TPDU:</span><br><span style="color: hsl(120, 100%, 40%);">+                     break;</span><br><span style="color: hsl(120, 100%, 40%);">+                case ISO7816_S_WAIT_PPS_RSP:</span><br><span style="color: hsl(120, 100%, 40%);">+          case ISO7816_S_IN_TPDU:</span><br><span style="color: hsl(120, 100%, 40%);">+               case ISO7816_S_IN_PPS_REQ:</span><br><span style="color: hsl(120, 100%, 40%);">+            case ISO7816_S_IN_PPS_RSP:</span><br><span style="color: hsl(120, 100%, 40%);">+                    change_state(ISO7816_S_WAIT_TPDU);</span><br><span style="color: hsl(120, 100%, 40%);">+                    break;</span><br><span style="color: hsl(120, 100%, 40%);">+                default:</span><br><span style="color: hsl(120, 100%, 40%);">+                      break;</span><br><span style="color: hsl(120, 100%, 40%);">+                }</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span> }</span><br><span> </span><br><span> /** PIO interrupt service routine to checks if the card reset line has changed</span><br><span>@@ -700,8 +722,10 @@</span><br><span>  ISO7816_Init(&sniff_usart, CLK_SLAVE);</span><br><span>   /* Only receive data when sniffing */</span><br><span>        USART_SetReceiverEnabled(sniff_usart.base, 1);</span><br><span style="color: hsl(0, 100%, 40%);">-  /* Enable interrupt to indicate when data has been received */</span><br><span style="color: hsl(0, 100%, 40%);">-  USART_EnableIt(sniff_usart.base, US_IER_RXRDY);</span><br><span style="color: hsl(120, 100%, 40%);">+       /* Enable Receiver time-out WT to detect unresponsive cards */</span><br><span style="color: hsl(120, 100%, 40%);">+        sniff_usart.base->US_RTOR = 9600-12; /* -12 because the timer starts at the end of the 12 ETU frame */</span><br><span style="color: hsl(120, 100%, 40%);">+     /* Enable interrupt to indicate when data has been received or timeout occurred */</span><br><span style="color: hsl(120, 100%, 40%);">+    USART_EnableIt(sniff_usart.base, US_IER_RXRDY | US_IER_TIMEOUT);</span><br><span>     /* Enable interrupt requests for the USART peripheral */</span><br><span>     NVIC_EnableIRQ(IRQ_USART_SIM);</span><br><span> </span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/9867">change 9867</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/9867"/><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: I4ec6e812e7e1eb91005027d2e864fc315550d79c </div>
<div style="display:none"> Gerrit-Change-Number: 9867 </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>