<p>Harald Welte <strong>merged</strong> this change.</p><p><a href="https://gerrit.osmocom.org/9865">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: print parsed ATR and PPS; use red LED to show main application is running; use green LED to indicate activity (message parsed)<br><br>Change-Id: I8e906bdbf2c91e608757ae442dfb241f981b8f1e<br>---<br>M firmware/apps/trace/main.c<br>M firmware/libcommon/source/sniffer.c<br>2 files changed, 56 insertions(+), 3 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/firmware/apps/trace/main.c b/firmware/apps/trace/main.c</span><br><span>index 8c89907..a288a7b 100644</span><br><span>--- a/firmware/apps/trace/main.c</span><br><span>+++ b/firmware/apps/trace/main.c</span><br><span>@@ -124,8 +124,10 @@</span><br><span>      enum confNum last_simtrace_config = simtrace_config;</span><br><span>         unsigned int i = 0;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+       /* Configure LED output (red = on, green = activity */</span><br><span>       led_init();</span><br><span style="color: hsl(0, 100%, 40%);">-     led_blink(LED_RED, BLINK_3O_5F);</span><br><span style="color: hsl(120, 100%, 40%);">+      led_blink(LED_RED, BLINK_ALWAYS_ON);</span><br><span style="color: hsl(120, 100%, 40%);">+  led_blink(LED_GREEN, BLINK_ALWAYS_OFF);</span><br><span> </span><br><span>  /* Enable watchdog for 2000 ms, with no window */</span><br><span>    WDT_Enable(WDT, WDT_MR_WDRSTEN | WDT_MR_WDDBGHLT | WDT_MR_WDIDLEHLT |</span><br><span>diff --git a/firmware/libcommon/source/sniffer.c b/firmware/libcommon/source/sniffer.c</span><br><span>index 66aceab..4b3545f 100644</span><br><span>--- a/firmware/libcommon/source/sniffer.c</span><br><span>+++ b/firmware/libcommon/source/sniffer.c</span><br><span>@@ -189,7 +189,24 @@</span><br><span> </span><br><span>    /* save new state */</span><br><span>         iso_state = iso_state_new;</span><br><span style="color: hsl(0, 100%, 40%);">-      TRACE_INFO("Changed to ISO 7816-3 state %u\n\r", iso_state);</span><br><span style="color: hsl(120, 100%, 40%);">+        //TRACE_INFO("Changed to ISO 7816-3 state %u\n\r", iso_state); /* don't print since this is function is also called by ISRs */</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%);">+/*! Print current ATR */</span><br><span style="color: hsl(120, 100%, 40%);">+static void print_atr(void)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+   if (ISO7816_S_IN_ATR!=iso_state) {</span><br><span style="color: hsl(120, 100%, 40%);">+            TRACE_WARNING("Can't print ATR in ISO 7816-3 state %u\n\r", iso_state);</span><br><span style="color: hsl(120, 100%, 40%);">+         return;</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%);">+   led_blink(LED_GREEN, BLINK_2O_F);</span><br><span style="color: hsl(120, 100%, 40%);">+     printf("ATR: ");</span><br><span style="color: hsl(120, 100%, 40%);">+    uint8_t i;</span><br><span style="color: hsl(120, 100%, 40%);">+    for (i = 0; i < atr_i && i < ARRAY_SIZE(atr); i++) {</span><br><span style="color: hsl(120, 100%, 40%);">+            printf("%02x ", atr[i]);</span><br><span style="color: hsl(120, 100%, 40%);">+    }</span><br><span style="color: hsl(120, 100%, 40%);">+     printf("\n\r");</span><br><span> }</span><br><span> </span><br><span> /*! Process ATR byte</span><br><span>@@ -206,7 +223,7 @@</span><br><span>             return;</span><br><span>      }</span><br><span>    if (atr_i>=ARRAY_SIZE(atr)) {</span><br><span style="color: hsl(0, 100%, 40%);">-                TRACE_WARNING("ATR data overflow\n\r");</span><br><span style="color: hsl(120, 100%, 40%);">+             TRACE_ERROR("ATR data overflow\n\r");</span><br><span>              return;</span><br><span>      }</span><br><span> </span><br><span>@@ -273,6 +290,7 @@</span><br><span>          }</span><br><span>    case ATR_S_WAIT_TCK:  /* see ISO/IEC 7816-3:2006 section 8.2.5 */</span><br><span>            /* we could verify the checksum, but we are just here to sniff */</span><br><span style="color: hsl(120, 100%, 40%);">+             print_atr(); /* print ATR for info */</span><br><span>                change_state(ISO7816_S_WAIT_APDU); /* go to next state */</span><br><span>            break;</span><br><span>       default:</span><br><span>@@ -280,6 +298,38 @@</span><br><span>      }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/*! Print current PPS */</span><br><span style="color: hsl(120, 100%, 40%);">+static void print_pps(void)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+  uint8_t *pps_cur; /* current PPS (request or response) */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* sanity check */</span><br><span style="color: hsl(120, 100%, 40%);">+    if (ISO7816_S_IN_PPS_REQ==iso_state) {</span><br><span style="color: hsl(120, 100%, 40%);">+                pps_cur = pps_req;</span><br><span style="color: hsl(120, 100%, 40%);">+    } else if (ISO7816_S_IN_PPS_RSP==iso_state) {</span><br><span style="color: hsl(120, 100%, 40%);">+         pps_cur = pps_rsp;</span><br><span style="color: hsl(120, 100%, 40%);">+    } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              TRACE_ERROR("Can't print PPS in ISO 7816-3 state %u\n\r", iso_state);</span><br><span style="color: hsl(120, 100%, 40%);">+           return;</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%);">+   led_blink(LED_GREEN, BLINK_2O_F);</span><br><span style="color: hsl(120, 100%, 40%);">+     printf("PPS %s : ", ISO7816_S_IN_PPS_REQ==iso_state ? "REQUEST" : "RESPONSE");</span><br><span style="color: hsl(120, 100%, 40%);">+  printf("%02x ", pps_cur[0]);</span><br><span style="color: hsl(120, 100%, 40%);">+        printf("%02x ", pps_cur[1]);</span><br><span style="color: hsl(120, 100%, 40%);">+        if (pps_cur[1]&0x10) {</span><br><span style="color: hsl(120, 100%, 40%);">+            printf("%02x ", pps_cur[2]);</span><br><span style="color: hsl(120, 100%, 40%);">+        }</span><br><span style="color: hsl(120, 100%, 40%);">+     if (pps_cur[1]&0x20) {</span><br><span style="color: hsl(120, 100%, 40%);">+            printf("%02x ", pps_cur[3]);</span><br><span style="color: hsl(120, 100%, 40%);">+        }</span><br><span style="color: hsl(120, 100%, 40%);">+     if (pps_cur[1]&0x40) {</span><br><span style="color: hsl(120, 100%, 40%);">+            printf("%02x ", pps_cur[4]);</span><br><span style="color: hsl(120, 100%, 40%);">+        }</span><br><span style="color: hsl(120, 100%, 40%);">+     printf("%02x ", pps_cur[5]);</span><br><span style="color: hsl(120, 100%, 40%);">+        printf("\n\r");</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> static void process_byte_pps(uint8_t byte)</span><br><span> {</span><br><span>    uint8_t *pps_cur; /* current PPS (request or response) */</span><br><span>@@ -343,6 +393,7 @@</span><br><span>                      check ^= pps_cur[4];</span><br><span>                 }</span><br><span>            check ^= pps_cur[5];</span><br><span style="color: hsl(120, 100%, 40%);">+          print_pps(); /* print PPS for info */</span><br><span>                if (ISO7816_S_IN_PPS_REQ==iso_state) {</span><br><span>                       if (0==check) { /* checksum is valid */</span><br><span>                              change_state(ISO7816_S_WAIT_PPS_RSP); /* go to next state */</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/9865">change 9865</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/9865"/><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: I8e906bdbf2c91e608757ae442dfb241f981b8f1e </div>
<div style="display:none"> Gerrit-Change-Number: 9865 </div>
<div style="display:none"> Gerrit-PatchSet: 5 </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>