<p>Kévin Redon has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/9845">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">sniff: use USART 0 instead of USART 1<br><br>Use USART 0 connected to the SIM card side to sniff the communication.<br>The card side can also measure ETU times.<br>Do proper pin initialization.<br>This code can already capture the ATR communication between phone and card.<br><br>Change-Id: I0597ec723cb2225540c89c3821b91d8a45adfcd6<br>---<br>M firmware/apps/trace/main.c<br>M firmware/libboard/simtrace/include/board.h<br>M firmware/libcommon/include/simtrace.h<br>M firmware/libcommon/source/sniffer.c<br>4 files changed, 65 insertions(+), 70 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/simtrace2 refs/changes/45/9845/1</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 6096362..bc7c030 100644</span><br><span>--- a/firmware/apps/trace/main.c</span><br><span>+++ b/firmware/apps/trace/main.c</span><br><span>@@ -54,7 +54,7 @@</span><br><span>               .init = Sniffer_init,</span><br><span>                .exit = Sniffer_exit,</span><br><span>                .run = Sniffer_run,</span><br><span style="color: hsl(0, 100%, 40%);">-             .usart1_irq = Sniffer_usart1_irq,</span><br><span style="color: hsl(120, 100%, 40%);">+             .usart0_irq = Sniffer_usart0_irq,</span><br><span>    },</span><br><span> #endif</span><br><span> #ifdef HAVE_CCID</span><br><span>@@ -165,8 +165,7 @@</span><br><span>                  g_unique_id[0], g_unique_id[1],</span><br><span>              g_unique_id[2], g_unique_id[3]);</span><br><span>  TRACE_INFO("Reset Cause: 0x%x\n\r", (RSTC->RSTC_SR & RSTC_SR_RSTTYP_Msk) >> RSTC_SR_RSTTYP_Pos);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- TRACE_INFO("cfg %d\n\r", simtrace_config);</span><br><span style="color: hsl(120, 100%, 40%);">+  TRACE_INFO("USB configuration used: %d\n\r", simtrace_config);</span><br><span> </span><br><span>         board_main_top();</span><br><span> </span><br><span>diff --git a/firmware/libboard/simtrace/include/board.h b/firmware/libboard/simtrace/include/board.h</span><br><span>index 4648313..00d32ee 100644</span><br><span>--- a/firmware/libboard/simtrace/include/board.h</span><br><span>+++ b/firmware/libboard/simtrace/include/board.h</span><br><span>@@ -21,13 +21,11 @@</span><br><span> </span><br><span> /** Smart card connection **/</span><br><span> /* Card RST reset signal input (active low; RST_SIM in schematic) */</span><br><span style="color: hsl(0, 100%, 40%);">-#define PIN_ISO7816_RSTMC      {PIO_PA7, PIOA, ID_PIOA, PIO_OUTPUT_0, PIO_DEFAULT}</span><br><span style="color: hsl(120, 100%, 40%);">+#define PIN_SIM_RST            {PIO_PA7, PIOA, ID_PIOA, PIO_OUTPUT_0, PIO_DEFAULT}</span><br><span> /* Card I/O data signal input/output (I/O_SIM in schematic) */</span><br><span> #define PIN_SIM_IO             {PIO_PA6A_TXD0, PIOA, ID_PIOA, PIO_PERIPH_A, PIO_DEFAULT}</span><br><span> /* Card CLK clock input (CLK_SIM in schematic) */</span><br><span> #define PIN_SIM_CLK            {PIO_PA2B_SCK0, PIOA, ID_PIOA, PIO_PERIPH_B, PIO_DEFAULT}</span><br><span style="color: hsl(0, 100%, 40%);">-/* ISO7816-communication related pins */</span><br><span style="color: hsl(0, 100%, 40%);">-#define PINS_ISO7816            PIN_SIM_IO,  PIN_SIM_CLK,  PIN_ISO7816_RSTMC // SIM_PWEN_PIN, PIN_SIM_IO2, PIN_SIM_CLK2</span><br><span> /* Pin to measure card I/O timing (to start measuring the ETU on I/O activity; connected I/O_SIM in schematic) */</span><br><span> #define PIN_SIM_IO_INPUT       {PIO_PA1B_TIOB0, PIOA, ID_PIOA, PIO_PERIPH_B, PIO_DEFAULT}</span><br><span> /* Pin used as clock input (to measure the ETU duration; connected to CLK_SIM in schematic) */</span><br><span>@@ -66,15 +64,23 @@</span><br><span> #define PIN_IO_SW_SNIFF        {PIO_PA19, PIOA, ID_PIOA, PIO_OUTPUT_0, PIO_DEFAULT}</span><br><span> /* Connect all lines (VPP, CLK, RST, and I/O) between card and phone */</span><br><span> #define PINS_BUS_SNIFF          PIN_SC_SW_SNIFF, PIN_IO_SW_SNIFF</span><br><span style="color: hsl(120, 100%, 40%);">+/* Use RST_SIM line to detect phone issued card reset */</span><br><span style="color: hsl(120, 100%, 40%);">+#define PIN_SIM_RST_SNIFF      {PIO_PA7, PIOA, ID_PIOA, PIO_INPUT,  PIO_PULLUP | PIO_DEBOUNCE | PIO_DEGLITCH | PIO_IT_EDGE }</span><br><span> /* Pins used to sniff phone-card communication */</span><br><span style="color: hsl(0, 100%, 40%);">-#define PINS_SIM_SNIFF_SIM      PIN_PHONE_IO,  PIN_PHONE_CLK</span><br><span style="color: hsl(0, 100%, 40%);">-/* Disable power converter 4.5-6V to 3.3V; (active high) */</span><br><span style="color: hsl(120, 100%, 40%);">+#define PINS_SIM_SNIFF_SIM      PIN_SIM_IO, PIN_SIM_CLK, PIN_SIM_RST_SNIFF</span><br><span style="color: hsl(120, 100%, 40%);">+/* Disable power converter 4.5-6V to 3.3V (active high) */</span><br><span> #define PIN_SIM_PWEN_SNIFF     {SIM_PWEN, PIOA, ID_PIOA, PIO_OUTPUT_0, PIO_DEFAULT}</span><br><span style="color: hsl(0, 100%, 40%);">-/* Enable power switch: VCC_PHONE to VCC_SIM; (active high) */</span><br><span style="color: hsl(120, 100%, 40%);">+/* Enable power switch to forward VCC_PHONE to VCC_SIM (active high) */</span><br><span> #define PIN_VCC_FWD_SNIFF      {VCC_FWD, PIOA, ID_PIOA, PIO_OUTPUT_1, PIO_DEFAULT}</span><br><span> /* Use phone VCC to power card */</span><br><span> #define PWR_PINS                PIN_SIM_PWEN_SNIFF, PIN_VCC_FWD_SNIFF</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/** CCID configuration */</span><br><span style="color: hsl(120, 100%, 40%);">+/* Card RST reset signal input (active low; RST_SIM in schematic) */</span><br><span style="color: hsl(120, 100%, 40%);">+#define PIN_ISO7816_RSTMC      {PIO_PA7, PIOA, ID_PIOA, PIO_OUTPUT_0, PIO_DEFAULT}</span><br><span style="color: hsl(120, 100%, 40%);">+/* ISO7816-communication related pins */</span><br><span style="color: hsl(120, 100%, 40%);">+#define PINS_ISO7816            PIN_SIM_IO,  PIN_SIM_CLK,  PIN_ISO7816_RSTMC // SIM_PWEN_PIN, PIN_SIM_IO2, PIN_SIM_CLK2</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /** External SPI flash interface   **/</span><br><span> /* SPI MISO pin definition */</span><br><span> #define PIN_SPI_MISO  {PIO_PA12A_MISO, PIOA, PIOA, PIO_PERIPH_A, PIO_PULLUP}</span><br><span>diff --git a/firmware/libcommon/include/simtrace.h b/firmware/libcommon/include/simtrace.h</span><br><span>index 21921ca..e39d1dc 100644</span><br><span>--- a/firmware/libcommon/include/simtrace.h</span><br><span>+++ b/firmware/libcommon/include/simtrace.h</span><br><span>@@ -77,7 +77,6 @@</span><br><span> </span><br><span> extern const USBConfigurationDescriptor *configurationDescriptorsArr[];</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-int check_data_from_phone();</span><br><span> void update_fidi(uint8_t fidi);</span><br><span> </span><br><span> void ISR_PhoneRST( const Pin *pPin);</span><br><span>@@ -109,7 +108,7 @@</span><br><span> extern void MITM_run( void );</span><br><span> </span><br><span> /*  IRQ functions   */</span><br><span style="color: hsl(0, 100%, 40%);">-extern void Sniffer_usart1_irq(void);</span><br><span style="color: hsl(120, 100%, 40%);">+extern void Sniffer_usart0_irq(void);</span><br><span> extern void mode_cardemu_usart0_irq(void);</span><br><span> extern void mode_cardemu_usart1_irq(void);</span><br><span> </span><br><span>diff --git a/firmware/libcommon/source/sniffer.c b/firmware/libcommon/source/sniffer.c</span><br><span>index fa272eb..7cc688b 100644</span><br><span>--- a/firmware/libcommon/source/sniffer.c</span><br><span>+++ b/firmware/libcommon/source/sniffer.c</span><br><span>@@ -1,32 +1,22 @@</span><br><span style="color: hsl(0, 100%, 40%);">-/* ----------------------------------------------------------------------------</span><br><span style="color: hsl(0, 100%, 40%);">- *         ATMEL Microcontroller Software Support</span><br><span style="color: hsl(0, 100%, 40%);">- * ----------------------------------------------------------------------------</span><br><span style="color: hsl(0, 100%, 40%);">- * Copyright (c) 2009, Atmel Corporation</span><br><span style="color: hsl(120, 100%, 40%);">+/*</span><br><span style="color: hsl(120, 100%, 40%);">+ * (C) 2010-2017 by Harald Welte <hwelte@sysmocom.de></span><br><span style="color: hsl(120, 100%, 40%);">+ * (C) 2018 by Kevin Redon <kredon@sysmocom.de></span><br><span style="color: hsl(120, 100%, 40%);">+ * All Rights Reserved</span><br><span>  *</span><br><span style="color: hsl(0, 100%, 40%);">- * All rights reserved.</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is free software; you can redistribute it and/or modify</span><br><span style="color: hsl(120, 100%, 40%);">+ * it under the terms of the GNU Affero General Public License as published by</span><br><span style="color: hsl(120, 100%, 40%);">+ * the Free Software Foundation; either version 3 of the License, or</span><br><span style="color: hsl(120, 100%, 40%);">+ * (at your option) any later version.</span><br><span>  *</span><br><span style="color: hsl(0, 100%, 40%);">- * Redistribution and use in source and binary forms, with or without</span><br><span style="color: hsl(0, 100%, 40%);">- * modification, are permitted provided that the following conditions are met:</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is distributed in the hope that it will be useful,</span><br><span style="color: hsl(120, 100%, 40%);">+ * but WITHOUT ANY WARRANTY; without even the implied warranty of</span><br><span style="color: hsl(120, 100%, 40%);">+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span><br><span style="color: hsl(120, 100%, 40%);">+ * GNU Affero General Public License for more details.</span><br><span>  *</span><br><span style="color: hsl(0, 100%, 40%);">- * - Redistributions of source code must retain the above copyright notice,</span><br><span style="color: hsl(0, 100%, 40%);">- * this list of conditions and the disclaimer below.</span><br><span style="color: hsl(120, 100%, 40%);">+ * You should have received a copy of the GNU Affero General Public License</span><br><span style="color: hsl(120, 100%, 40%);">+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.</span><br><span>  *</span><br><span style="color: hsl(0, 100%, 40%);">- * Atmel's name may not be used to endorse or promote products derived from</span><br><span style="color: hsl(0, 100%, 40%);">- * this software without specific prior written permission.</span><br><span style="color: hsl(0, 100%, 40%);">- *</span><br><span style="color: hsl(0, 100%, 40%);">- * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR</span><br><span style="color: hsl(0, 100%, 40%);">- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF</span><br><span style="color: hsl(0, 100%, 40%);">- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE</span><br><span style="color: hsl(0, 100%, 40%);">- * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,</span><br><span style="color: hsl(0, 100%, 40%);">- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT</span><br><span style="color: hsl(0, 100%, 40%);">- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,</span><br><span style="color: hsl(0, 100%, 40%);">- * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF</span><br><span style="color: hsl(0, 100%, 40%);">- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING</span><br><span style="color: hsl(0, 100%, 40%);">- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,</span><br><span style="color: hsl(0, 100%, 40%);">- * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span><br><span style="color: hsl(0, 100%, 40%);">- * ----------------------------------------------------------------------------</span><br><span>  */</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> #include "board.h"</span><br><span> #include "simtrace.h"</span><br><span> </span><br><span>@@ -47,27 +37,24 @@</span><br><span> </span><br><span> /** Maximum ATR ucSize in bytes.*/</span><br><span> #define MAX_ATR_SIZE            55</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /*------------------------------------------------------------------------------</span><br><span>  *         Internal variables</span><br><span>  *------------------------------------------------------------------------------*/</span><br><span style="color: hsl(0, 100%, 40%);">-/** ISO7816 pins */</span><br><span style="color: hsl(0, 100%, 40%);">-static const Pin pinsISO7816_sniff[] = { PINS_SIM_SNIFF_SIM };</span><br><span style="color: hsl(120, 100%, 40%);">+/* Pin configuration to sniff communication (using USART connection to SIM card) */</span><br><span style="color: hsl(120, 100%, 40%);">+static const Pin pins_sniff[] = { PINS_SIM_SNIFF_SIM };</span><br><span style="color: hsl(120, 100%, 40%);">+/* Connect phone to card using bus switch */</span><br><span> static const Pin pins_bus[] = { PINS_BUS_SNIFF };</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-static const Pin pPwr[] = {</span><br><span style="color: hsl(0, 100%, 40%);">- /* Enable power converter 4.5-6V to 3.3V; low: off */</span><br><span style="color: hsl(0, 100%, 40%);">-   {SIM_PWEN, PIOA, ID_PIOA, PIO_OUTPUT_0, PIO_DEFAULT},</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-   /* Enable power forwarding: VCC_PHONE to VCC_SIM; high: on */</span><br><span style="color: hsl(0, 100%, 40%);">-   {VCC_FWD, PIOA, ID_PIOA, PIO_OUTPUT_1, PIO_DEFAULT}</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%);">-static struct Usart_info usart_info = {</span><br><span style="color: hsl(0, 100%, 40%);">-    .base = USART_PHONE,</span><br><span style="color: hsl(0, 100%, 40%);">-    .id = ID_USART_PHONE,</span><br><span style="color: hsl(120, 100%, 40%);">+/* Power card using phone VCC */</span><br><span style="color: hsl(120, 100%, 40%);">+static const Pin pins_power[] = { PWR_PINS };</span><br><span style="color: hsl(120, 100%, 40%);">+/* Timer Counter pins to measure ETU timing */</span><br><span style="color: hsl(120, 100%, 40%);">+static const Pin pins_tc[] = { PINS_TC };</span><br><span style="color: hsl(120, 100%, 40%);">+/* USART peripheral used to sniff communication */</span><br><span style="color: hsl(120, 100%, 40%);">+static struct Usart_info sniff_usart = {</span><br><span style="color: hsl(120, 100%, 40%);">+       .base = USART_SIM,</span><br><span style="color: hsl(120, 100%, 40%);">+    .id = ID_USART_SIM,</span><br><span>  .state = USART_RCV,</span><br><span> };</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> /* Ring buffer to store sniffer communication data */</span><br><span> static struct ringbuf sniff_buffer;</span><br><span> </span><br><span>@@ -75,14 +62,14 @@</span><br><span>  *         Global functions</span><br><span>  *------------------------------------------------------------------------------*/</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-void Sniffer_usart1_irq(void)</span><br><span style="color: hsl(120, 100%, 40%);">+void Sniffer_usart0_irq(void)</span><br><span> {</span><br><span>        /* Read channel status register */</span><br><span style="color: hsl(0, 100%, 40%);">-      uint32_t csr = usart_info.base->US_CSR & usart_info.base->US_IMR;</span><br><span style="color: hsl(120, 100%, 40%);">+   uint32_t csr = sniff_usart.base->US_CSR & sniff_usart.base->US_IMR;</span><br><span>        /* Verify if character has been received */</span><br><span>  if (csr & US_CSR_RXRDY) {</span><br><span>                /* Read communication data byte between phone and SIM */</span><br><span style="color: hsl(0, 100%, 40%);">-                uint8_t byte = usart_info.base->US_RHR;</span><br><span style="color: hsl(120, 100%, 40%);">+            uint8_t byte = sniff_usart.base->US_RHR;</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>@@ -92,7 +79,7 @@</span><br><span>  *         Internal functions</span><br><span>  *------------------------------------------------------------------------------*/</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-int check_data_from_phone(void)</span><br><span style="color: hsl(120, 100%, 40%);">+static void check_sniffed_data(void)</span><br><span> {</span><br><span>   /* Display sniffed data */</span><br><span>   while (!rbuf_is_empty(&sniff_buffer)) {</span><br><span>@@ -115,9 +102,10 @@</span><br><span> void Sniffer_exit(void)</span><br><span> {</span><br><span>   TRACE_INFO("Sniffer exit\n\r");</span><br><span style="color: hsl(0, 100%, 40%);">-       USART_DisableIt(USART_PHONE, US_IER_RXRDY);</span><br><span style="color: hsl(0, 100%, 40%);">-     NVIC_DisableIRQ(USART1_IRQn);</span><br><span style="color: hsl(0, 100%, 40%);">-   USART_SetReceiverEnabled(USART_PHONE, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+     USART_DisableIt(sniff_usart.base, US_IER_RXRDY);</span><br><span style="color: hsl(120, 100%, 40%);">+      /* NOTE: don't forget to set the IRQ according to the USART peripheral used */</span><br><span style="color: hsl(120, 100%, 40%);">+    NVIC_DisableIRQ(USART0_IRQn);</span><br><span style="color: hsl(120, 100%, 40%);">+ USART_SetReceiverEnabled(sniff_usart.base, 0);</span><br><span> }</span><br><span> </span><br><span> /* called when *Sniffer* configuration is set by host */</span><br><span>@@ -125,25 +113,28 @@</span><br><span> {</span><br><span>     TRACE_INFO("Sniffer Init\n\r");</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ /* Configure pins to sniff communication between phone and card */</span><br><span style="color: hsl(120, 100%, 40%);">+    PIO_Configure(pins_sniff, PIO_LISTSIZE(pins_sniff));</span><br><span style="color: hsl(120, 100%, 40%);">+  /* Configure pins to connect phone to card */</span><br><span style="color: hsl(120, 100%, 40%);">+ PIO_Configure(pins_bus, PIO_LISTSIZE(pins_bus));</span><br><span style="color: hsl(120, 100%, 40%);">+      /* Configure pins to forward phone power to card */</span><br><span style="color: hsl(120, 100%, 40%);">+   PIO_Configure(pins_power, PIO_LISTSIZE(pins_power));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>       /* Clear ring buffer containing the sniffed data */</span><br><span>  rbuf_reset(&sniff_buffer);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  /*  Configure ISO7816 driver */</span><br><span style="color: hsl(0, 100%, 40%);">- PIO_Configure(pinsISO7816_sniff, PIO_LISTSIZE(pinsISO7816_sniff));</span><br><span style="color: hsl(0, 100%, 40%);">-      PIO_Configure(pins_bus, PIO_LISTSIZE(pins_bus));</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        PIO_Configure(pPwr, PIO_LISTSIZE(pPwr));</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        ISO7816_Init(&usart_info, CLK_SLAVE);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       USART_SetReceiverEnabled(USART_PHONE, 1);</span><br><span style="color: hsl(0, 100%, 40%);">-       USART_EnableIt(USART_PHONE, US_IER_RXRDY);</span><br><span style="color: hsl(0, 100%, 40%);">-      NVIC_EnableIRQ(USART1_IRQn);</span><br><span style="color: hsl(120, 100%, 40%);">+  /* Configure USART to as ISO-7816 slave communication to sniff communication */</span><br><span style="color: hsl(120, 100%, 40%);">+       ISO7816_Init(&sniff_usart, CLK_SLAVE);</span><br><span style="color: hsl(120, 100%, 40%);">+    /* Only receive data when sniffing */</span><br><span style="color: hsl(120, 100%, 40%);">+ USART_SetReceiverEnabled(sniff_usart.base, 1);</span><br><span style="color: hsl(120, 100%, 40%);">+        /* Enable interrupt to indicate when data has been received */</span><br><span style="color: hsl(120, 100%, 40%);">+        USART_EnableIt(sniff_usart.base, US_IER_RXRDY);</span><br><span style="color: hsl(120, 100%, 40%);">+       /* Enable interrupt requests for the USART peripheral (warning: use IRQ corresponding to USART) */</span><br><span style="color: hsl(120, 100%, 40%);">+    NVIC_EnableIRQ(USART0_IRQn);</span><br><span> }</span><br><span> </span><br><span> /* main (idle/busy) loop of this USB configuration */</span><br><span> void Sniffer_run(void)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-   check_data_from_phone();</span><br><span style="color: hsl(120, 100%, 40%);">+      check_sniffed_data();</span><br><span> }</span><br><span> #endif /* HAVE_SNIFFER */</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/9845">change 9845</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/9845"/><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: I0597ec723cb2225540c89c3821b91d8a45adfcd6 </div>
<div style="display:none"> Gerrit-Change-Number: 9845 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Kévin Redon <kredon@sysmocom.de> </div>