<p>Hoernchen has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ccid-firmware/+/16243">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">dbg<br><br>Change-Id: I4340cb53f0f903842eb1c4d60a36d44ac9e5cbde<br>---<br>M ccid_common/cuart.h<br>M ccid_common/iso7816_fsm.c<br>M sysmoOCTSIM/atmel_start.c<br>M sysmoOCTSIM/cuart_driver_asf4_usart_async.c<br>M sysmoOCTSIM/driver_init.c<br>M sysmoOCTSIM/gcc/Makefile<br>M sysmoOCTSIM/hpl/sercom/hpl_sercom.c<br>M sysmoOCTSIM/libosmo_emb.c<br>M sysmoOCTSIM/main.c<br>9 files changed, 124 insertions(+), 23 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-ccid-firmware refs/changes/43/16243/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/ccid_common/cuart.h b/ccid_common/cuart.h</span><br><span>index 9c93b7e..efd70f0 100644</span><br><span>--- a/ccid_common/cuart.h</span><br><span>+++ b/ccid_common/cuart.h</span><br><span>@@ -23,6 +23,7 @@</span><br><span> </span><br><span> enum card_uart_ctl {</span><br><span>   CUART_CTL_RX,           /* enable/disable receiver */</span><br><span style="color: hsl(120, 100%, 40%);">+ CUART_CTL_NO_RXTX,              /* enable/disable receiver */</span><br><span>        CUART_CTL_POWER,        /* enable/disable ICC power */</span><br><span>       CUART_CTL_CLOCK,        /* enable/disable ICC clock */</span><br><span>       CUART_CTL_CLOCK_FREQ, /* set ICC clock frequency (hz)*/</span><br><span>diff --git a/ccid_common/iso7816_fsm.c b/ccid_common/iso7816_fsm.c</span><br><span>index 3d09a84..585d25d 100644</span><br><span>--- a/ccid_common/iso7816_fsm.c</span><br><span>+++ b/ccid_common/iso7816_fsm.c</span><br><span>@@ -305,7 +305,7 @@</span><br><span> {</span><br><span>  struct iso7816_3_priv *ip = get_iso7816_3_priv(fi);</span><br><span>  OSMO_ASSERT(fi->fsm == &iso7816_3_fsm);</span><br><span style="color: hsl(0, 100%, 40%);">-  card_uart_ctrl(ip->uart, CUART_CTL_RX, false);</span><br><span style="color: hsl(120, 100%, 40%);">+     card_uart_ctrl(ip->uart, CUART_CTL_NO_RXTX, true);</span><br><span>        /* reset the TPDU state machine */</span><br><span>   osmo_fsm_inst_dispatch(ip->tpdu_fi, ISO7816_E_TPDU_CLEAR_REQ, NULL);</span><br><span> }</span><br><span>@@ -1135,11 +1135,14 @@</span><br><span>       }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+#include <hal_gpio.h></span><br><span> static void tpdu_s_tx_hdr_action(struct osmo_fsm_inst *fi, uint32_t event, void *data)</span><br><span> {</span><br><span>       OSMO_ASSERT(fi->fsm == &tpdu_fsm);</span><br><span>    switch (event) {</span><br><span>     case ISO7816_E_TX_COMPL:</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>                 /* Rx of single byte is already enabled by previous card_uart_tx() call */</span><br><span>           osmo_fsm_inst_state_chg(fi, TPDU_S_PROCEDURE, 0, 0);</span><br><span>                 break;</span><br><span>@@ -1174,6 +1177,12 @@</span><br><span>              } else if (byte == tpduh->ins) {</span><br><span>                  if (tfp->is_command) {</span><br><span>                            /* transmit all remaining bytes */</span><br><span style="color: hsl(120, 100%, 40%);">+#if 0</span><br><span style="color: hsl(120, 100%, 40%);">+// rx -> tx delay</span><br><span style="color: hsl(120, 100%, 40%);">+                               gpio_set_pin_level(PIN_PB12, true);</span><br><span style="color: hsl(120, 100%, 40%);">+                           delay_us(1);</span><br><span style="color: hsl(120, 100%, 40%);">+                          gpio_set_pin_level(PIN_PB12, false);</span><br><span style="color: hsl(120, 100%, 40%);">+#endif</span><br><span>                                 card_uart_tx(ip->uart, msgb_l2(tfp->tpdu), msgb_l2len(tfp->tpdu), true);</span><br><span>                            osmo_fsm_inst_state_chg(fi, TPDU_S_TX_REMAINING, 0, 0);</span><br><span>                      } else {</span><br><span>diff --git a/sysmoOCTSIM/atmel_start.c b/sysmoOCTSIM/atmel_start.c</span><br><span>index bee1ed2..6670364 100644</span><br><span>--- a/sysmoOCTSIM/atmel_start.c</span><br><span>+++ b/sysmoOCTSIM/atmel_start.c</span><br><span>@@ -14,6 +14,6 @@</span><br><span>        system_init();</span><br><span>       dma_memory_init();</span><br><span>   dma_memory_register_callback(DMA_MEMORY_COMPLETE_CB, M2M_DMA_complete_cb);</span><br><span style="color: hsl(0, 100%, 40%);">-      stdio_redirect_init();</span><br><span style="color: hsl(120, 100%, 40%);">+//      stdio_redirect_init();</span><br><span>       usb_init();</span><br><span> }</span><br><span>diff --git a/sysmoOCTSIM/cuart_driver_asf4_usart_async.c b/sysmoOCTSIM/cuart_driver_asf4_usart_async.c</span><br><span>index a8f8044..14fe491 100644</span><br><span>--- a/sysmoOCTSIM/cuart_driver_asf4_usart_async.c</span><br><span>+++ b/sysmoOCTSIM/cuart_driver_asf4_usart_async.c</span><br><span>@@ -348,14 +348,39 @@</span><br><span>    Sercom *sercom = cuart->u.asf4.usa_pd->device.hw;</span><br><span> </span><br><span>  switch (ctl) {</span><br><span style="color: hsl(120, 100%, 40%);">+        case CUART_CTL_NO_RXTX:</span><br><span style="color: hsl(120, 100%, 40%);">+//             if (arg){</span><br><span style="color: hsl(120, 100%, 40%);">+//                   uint32_t ctrlb = ((Sercom *)sercom)->USART.CTRLB.reg;</span><br><span style="color: hsl(120, 100%, 40%);">+//                    ctrlb &= ~(SERCOM_USART_CTRLB_TXEN | SERCOM_USART_CTRLB_RXEN);</span><br><span style="color: hsl(120, 100%, 40%);">+//                  ((Sercom *)sercom)->USART.CTRLB.reg = ctrlb;</span><br><span style="color: hsl(120, 100%, 40%);">+//                     hri_sercomusart_wait_for_sync(sercom, SERCOM_USART_SYNCBUSY_MASK);</span><br><span style="color: hsl(120, 100%, 40%);">+//          } else {</span><br><span style="color: hsl(120, 100%, 40%);">+//                    uint32_t ctrlb = ((Sercom *)sercom)->USART.CTRLB.reg;</span><br><span style="color: hsl(120, 100%, 40%);">+//                    ctrlb |= (SERCOM_USART_CTRLB_TXEN | SERCOM_USART_CTRLB_RXEN);</span><br><span style="color: hsl(120, 100%, 40%);">+//                       ((Sercom *)sercom)->USART.CTRLB.reg = ctrlb;</span><br><span style="color: hsl(120, 100%, 40%);">+//                     hri_sercomusart_wait_for_sync(sercom, SERCOM_USART_SYNCBUSY_MASK);</span><br><span style="color: hsl(120, 100%, 40%);">+//          }</span><br><span style="color: hsl(120, 100%, 40%);">+             break;</span><br><span>       case CUART_CTL_RX:</span><br><span>           if (arg){</span><br><span style="color: hsl(0, 100%, 40%);">-                       sercom->USART.CTRLB.bit.RXEN = 1;</span><br><span style="color: hsl(0, 100%, 40%);">-                    sercom->USART.CTRLB.bit.TXEN = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+////                      delay_us(cuart->u.asf4.extrawait_after_rx);</span><br><span style="color: hsl(120, 100%, 40%);">+//                      uint32_t ctrlb = ((Sercom *)sercom)->USART.CTRLB.reg;</span><br><span style="color: hsl(120, 100%, 40%);">+//                    ctrlb &= ~SERCOM_USART_CTRLB_TXEN;</span><br><span style="color: hsl(120, 100%, 40%);">+//                      ctrlb |= SERCOM_USART_CTRLB_RXEN;</span><br><span style="color: hsl(120, 100%, 40%);">+//                   ((Sercom *)sercom)->USART.CTRLB.reg = ctrlb;</span><br><span style="color: hsl(120, 100%, 40%);">+//                     hri_sercomusart_wait_for_sync(sercom, SERCOM_USART_SYNCBUSY_MASK);</span><br><span style="color: hsl(120, 100%, 40%);">+//</span><br><span style="color: hsl(120, 100%, 40%);">+////                    sercom->USART.CTRLB.bit.TXEN = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+////                      sercom->USART.CTRLB.bit.RXEN = 1;</span><br><span>                 } else {</span><br><span>                     delay_us(cuart->u.asf4.extrawait_after_rx);</span><br><span style="color: hsl(0, 100%, 40%);">-                  sercom->USART.CTRLB.bit.RXEN = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-                    sercom->USART.CTRLB.bit.TXEN = 1;</span><br><span style="color: hsl(120, 100%, 40%);">+////                      sercom->USART.CTRLB.bit.RXEN = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+////                      sercom->USART.CTRLB.bit.TXEN = 1;</span><br><span style="color: hsl(120, 100%, 40%);">+//                        uint32_t ctrlb = ((Sercom *)sercom)->USART.CTRLB.reg;</span><br><span style="color: hsl(120, 100%, 40%);">+//                    ctrlb &= ~SERCOM_USART_CTRLB_RXEN;</span><br><span style="color: hsl(120, 100%, 40%);">+//                      ctrlb |= SERCOM_USART_CTRLB_TXEN;</span><br><span style="color: hsl(120, 100%, 40%);">+//                   ((Sercom *)sercom)->USART.CTRLB.reg = ctrlb;</span><br><span style="color: hsl(120, 100%, 40%);">+//                     hri_sercomusart_wait_for_sync(sercom, SERCOM_USART_SYNCBUSY_MASK);</span><br><span>           }</span><br><span>            break;</span><br><span>       case CUART_CTL_RST:</span><br><span>diff --git a/sysmoOCTSIM/driver_init.c b/sysmoOCTSIM/driver_init.c</span><br><span>index c373dc2..7071ea5 100644</span><br><span>--- a/sysmoOCTSIM/driver_init.c</span><br><span>+++ b/sysmoOCTSIM/driver_init.c</span><br><span>@@ -33,7 +33,7 @@</span><br><span> #define SIM6_BUFFER_SIZE 512</span><br><span> </span><br><span> /*! The buffer size for USART */</span><br><span style="color: hsl(0, 100%, 40%);">-#define UART_DEBUG_BUFFER_SIZE 256</span><br><span style="color: hsl(120, 100%, 40%);">+#define UART_DEBUG_BUFFER_SIZE 4096</span><br><span> </span><br><span> struct usart_async_descriptor SIM0;</span><br><span> struct usart_async_descriptor SIM1;</span><br><span>diff --git a/sysmoOCTSIM/gcc/Makefile b/sysmoOCTSIM/gcc/Makefile</span><br><span>index 41f5d10..95a582f 100644</span><br><span>--- a/sysmoOCTSIM/gcc/Makefile</span><br><span>+++ b/sysmoOCTSIM/gcc/Makefile</span><br><span>@@ -8,7 +8,7 @@</span><br><span> CROSS_COMPILE= arm-none-eabi-</span><br><span> </span><br><span> CFLAGS_CPU=-D__SAME54N19A__ -mcpu=cortex-m4 -mfloat-abi=softfp -mfpu=fpv4-sp-d16</span><br><span style="color: hsl(0, 100%, 40%);">-CFLAGS=-x c -mthumb -DDEBUG -O0 -ffunction-sections -fdata-sections -mlong-calls \</span><br><span style="color: hsl(120, 100%, 40%);">+CFLAGS=-x c -mthumb -DDEBUG -Os -ffunction-sections -fdata-sections -mlong-calls \</span><br><span>        -g3 -Wall -c -std=gnu99 $(CFLAGS_CPU)</span><br><span> </span><br><span> CC = $(CROSS_COMPILE)gcc</span><br><span>diff --git a/sysmoOCTSIM/hpl/sercom/hpl_sercom.c b/sysmoOCTSIM/hpl/sercom/hpl_sercom.c</span><br><span>index f235115..272fb07 100644</span><br><span>--- a/sysmoOCTSIM/hpl/sercom/hpl_sercom.c</span><br><span>+++ b/sysmoOCTSIM/hpl/sercom/hpl_sercom.c</span><br><span>@@ -577,7 +577,7 @@</span><br><span>               hri_sercomusart_write_INTEN_ERROR_bit(device->hw, state);</span><br><span>         }</span><br><span> }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(120, 100%, 40%);">+#include <hal_gpio.h></span><br><span> /**</span><br><span>  * \internal Sercom interrupt handler</span><br><span>  *</span><br><span>@@ -591,6 +591,12 @@</span><br><span>             hri_sercomusart_clear_INTEN_DRE_bit(hw);</span><br><span>             device->usart_cb.tx_byte_sent(device);</span><br><span>    } else if (hri_sercomusart_get_interrupt_TXC_bit(hw) && hri_sercomusart_get_INTEN_TXC_bit(hw)) {</span><br><span style="color: hsl(120, 100%, 40%);">+#if 0</span><br><span style="color: hsl(120, 100%, 40%);">+// tx byte last edge <-> txc irq delay</span><br><span style="color: hsl(120, 100%, 40%);">+                         gpio_set_pin_level(PIN_PB12, true);</span><br><span style="color: hsl(120, 100%, 40%);">+                           delay_us(1);</span><br><span style="color: hsl(120, 100%, 40%);">+                          gpio_set_pin_level(PIN_PB12, false);</span><br><span style="color: hsl(120, 100%, 40%);">+#endif</span><br><span>                 hri_sercomusart_clear_INTEN_TXC_bit(hw);</span><br><span>             device->usart_cb.tx_done_cb(device);</span><br><span>      } else if (hri_sercomusart_get_interrupt_RXC_bit(hw)) {</span><br><span>@@ -600,8 +606,20 @@</span><br><span>                       hri_sercomusart_clear_STATUS_reg(hw, SERCOM_USART_STATUS_MASK);</span><br><span>                      return;</span><br><span>              }</span><br><span style="color: hsl(120, 100%, 40%);">+#if 0</span><br><span style="color: hsl(120, 100%, 40%);">+// rx byte last edge <-> rxc irq delay</span><br><span style="color: hsl(120, 100%, 40%);">+                                gpio_set_pin_level(PIN_PB12, true);</span><br><span style="color: hsl(120, 100%, 40%);">+                           delay_us(1);</span><br><span style="color: hsl(120, 100%, 40%);">+                          gpio_set_pin_level(PIN_PB12, false);</span><br><span style="color: hsl(120, 100%, 40%);">+#endif</span><br><span> </span><br><span>             device->usart_cb.rx_done_cb(device, hri_sercomusart_read_DATA_reg(hw));</span><br><span style="color: hsl(120, 100%, 40%);">+#if 0</span><br><span style="color: hsl(120, 100%, 40%);">+// rx byte last edge <-> rxc irq end delay</span><br><span style="color: hsl(120, 100%, 40%);">+                           gpio_set_pin_level(PIN_PB12, true);</span><br><span style="color: hsl(120, 100%, 40%);">+                           delay_us(1);</span><br><span style="color: hsl(120, 100%, 40%);">+                          gpio_set_pin_level(PIN_PB12, false);</span><br><span style="color: hsl(120, 100%, 40%);">+#endif</span><br><span>         } else if (hri_sercomusart_get_interrupt_ERROR_bit(hw)) {</span><br><span>            uint32_t status;</span><br><span> </span><br><span>diff --git a/sysmoOCTSIM/libosmo_emb.c b/sysmoOCTSIM/libosmo_emb.c</span><br><span>index 09555f3..e550b07 100644</span><br><span>--- a/sysmoOCTSIM/libosmo_emb.c</span><br><span>+++ b/sysmoOCTSIM/libosmo_emb.c</span><br><span>@@ -41,43 +41,43 @@</span><br><span>  [DUSB] = {</span><br><span>           .name = "USB",</span><br><span>             .description = "USB Transport",</span><br><span style="color: hsl(0, 100%, 40%);">-               .enabled = 1,</span><br><span style="color: hsl(120, 100%, 40%);">+         .enabled = 0,</span><br><span>                .loglevel = LOGL_NOTICE,</span><br><span>     },</span><br><span>   [DCCID] = {</span><br><span>          .name = "CCID",</span><br><span>            .description = "USB-CCID Protocol",</span><br><span style="color: hsl(0, 100%, 40%);">-           .enabled = 1,</span><br><span style="color: hsl(120, 100%, 40%);">+         .enabled = 0,</span><br><span>                .loglevel = LOGL_DEBUG,</span><br><span>      },</span><br><span>   [DISO7816] = {</span><br><span>               .name = "ISO7816",</span><br><span>                 .description = "ISO7816-3 State machines",</span><br><span style="color: hsl(0, 100%, 40%);">-            .enabled = 1,</span><br><span style="color: hsl(120, 100%, 40%);">+         .enabled = 0,</span><br><span>                .loglevel = LOGL_DEBUG,</span><br><span>      },</span><br><span>   [DATR] = {</span><br><span>           .name = "ATR",</span><br><span>             .description = "ATR (Answer To Reset) FSM",</span><br><span style="color: hsl(0, 100%, 40%);">-           .enabled = 1,</span><br><span style="color: hsl(120, 100%, 40%);">+         .enabled = 0,</span><br><span>                .loglevel = LOGL_DEBUG,</span><br><span>      },</span><br><span>   [DTPDU] = {</span><br><span>          .name = "TPDU",</span><br><span>            .description = "TPDU FSM",</span><br><span style="color: hsl(0, 100%, 40%);">-            .enabled = 1,</span><br><span style="color: hsl(120, 100%, 40%);">+         .enabled = 0,</span><br><span>                .loglevel = LOGL_DEBUG,</span><br><span>      },</span><br><span>   [DPPS] = {</span><br><span>           .name = "PPS",</span><br><span>             .description = "PPS (Protocol and Parameter Selection) FSM",</span><br><span style="color: hsl(0, 100%, 40%);">-          .enabled = 1,</span><br><span style="color: hsl(120, 100%, 40%);">+         .enabled = 0,</span><br><span>                .loglevel = LOGL_DEBUG,</span><br><span>      },</span><br><span>   [DCARD] = {</span><br><span>          .name = "CARD",</span><br><span>            .description = "Card FSM",</span><br><span style="color: hsl(0, 100%, 40%);">-            .enabled = 1,</span><br><span style="color: hsl(120, 100%, 40%);">+         .enabled = 0,</span><br><span>                .loglevel = LOGL_DEBUG,</span><br><span>      },</span><br><span> };</span><br><span>@@ -150,13 +150,13 @@</span><br><span>     struct log_target *stderr_target;</span><br><span> </span><br><span>        /* msgb */</span><br><span style="color: hsl(0, 100%, 40%);">-      g_msgb_ctx = talloc_pool(g_tall_ctx, 20480);</span><br><span style="color: hsl(120, 100%, 40%);">+//        g_msgb_ctx = talloc_pool(g_tall_ctx, 20480);</span><br><span>         //talloc_set_memlimit(g_msgb_ctx, 20480);</span><br><span style="color: hsl(0, 100%, 40%);">-       msgb_talloc_ctx_init(g_msgb_ctx, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+//        msgb_talloc_ctx_init(g_msgb_ctx, 0);</span><br><span> </span><br><span>     /* logging */</span><br><span>        log_init(&log_info, g_tall_ctx);</span><br><span style="color: hsl(0, 100%, 40%);">-    stderr_target = log_target_create_stderr_raw();</span><br><span style="color: hsl(120, 100%, 40%);">+//     stderr_target = log_target_create_stderr_raw();</span><br><span>      //log_add_target(stderr_target);</span><br><span>     //log_set_all_filter(stderr_target, 1);</span><br><span> </span><br><span>diff --git a/sysmoOCTSIM/main.c b/sysmoOCTSIM/main.c</span><br><span>index d81f189..189d764 100644</span><br><span>--- a/sysmoOCTSIM/main.c</span><br><span>+++ b/sysmoOCTSIM/main.c</span><br><span>@@ -151,7 +151,7 @@</span><br><span>       /* bit-mask of card-insert status, as determined from NCN8025 IRQ output */</span><br><span>  uint8_t card_insert_mask;</span><br><span> };</span><br><span style="color: hsl(0, 100%, 40%);">-static struct ccid_state g_ccid_s;</span><br><span style="color: hsl(120, 100%, 40%);">+static volatile struct ccid_state g_ccid_s;</span><br><span> </span><br><span> static void ccid_out_read_compl(const uint8_t ep, enum usb_xfer_code code, uint32_t transferred);</span><br><span> static void ccid_in_write_compl(const uint8_t ep, enum usb_xfer_code code, uint32_t transferred);</span><br><span>@@ -1131,6 +1131,38 @@</span><br><span>        char sernr_buf[16*2+1];</span><br><span>      char rstcause_buf[RSTCAUSE_STR_SIZE];</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+#if 0</span><br><span style="color: hsl(120, 100%, 40%);">+CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk ; //| /* tracing*/</span><br><span style="color: hsl(120, 100%, 40%);">+////CoreDebug_DEMCR_MON_EN_Msk; /* mon interupt catcher */</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%);">+DWT->COMP0 = 0x40003028; /* sercom 0 data */</span><br><span style="color: hsl(120, 100%, 40%);">+//DWT->COMP0 = 0x40003428; /* sercom 1 data */</span><br><span style="color: hsl(120, 100%, 40%);">+DWT->MASK0 = 0; /* 0 */</span><br><span style="color: hsl(120, 100%, 40%);">+DWT->FUNCTION0 = 0; /* has to be 0 for linked address */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+DWT->COMP1 = 0xa5;     /* value */</span><br><span style="color: hsl(120, 100%, 40%);">+DWT->MASK1 = 0;     /* match all bits */</span><br><span style="color: hsl(120, 100%, 40%);">+DWT->FUNCTION1 =    (0b10 << DWT_FUNCTION_DATAVSIZE_Pos) |  /* DATAVSIZE 10 - dword */</span><br><span style="color: hsl(120, 100%, 40%);">+#if 1</span><br><span style="color: hsl(120, 100%, 40%);">+(0 << DWT_FUNCTION_DATAVADDR0_Pos) | /* Data Match linked addr pointer in COMP0 */</span><br><span style="color: hsl(120, 100%, 40%);">+#else</span><br><span style="color: hsl(120, 100%, 40%);">+(1 << DWT_FUNCTION_DATAVADDR0_Pos) | /* Data Match on any addr -> own number */</span><br><span style="color: hsl(120, 100%, 40%);">+#endif</span><br><span style="color: hsl(120, 100%, 40%);">+(1 << DWT_FUNCTION_DATAVMATCH_Pos) | /* DATAVMATCH Enable data comparation */</span><br><span style="color: hsl(120, 100%, 40%);">+(0b0111 << DWT_FUNCTION_FUNCTION_Pos);  /* generate a watchpoint event on rw */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#endif</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#if 0</span><br><span style="color: hsl(120, 100%, 40%);">+   dwt_init();</span><br><span style="color: hsl(120, 100%, 40%);">+   //geht</span><br><span style="color: hsl(120, 100%, 40%);">+        //      int a = request_dwt_watchpoint(0x40003428, 0, WDE_DATA_RW, 0, false);</span><br><span style="color: hsl(120, 100%, 40%);">+ int a = request_dwt_watchpoint(0x40003428, 0, WDE_DATA_RW, 0, false);</span><br><span style="color: hsl(120, 100%, 40%);">+//       int b = request_dwt_watchpoint(0, 0, WDE_DATA_RW, a, true);</span><br><span style="color: hsl(120, 100%, 40%);">+   enable_dwt_comp(a);</span><br><span style="color: hsl(120, 100%, 40%);">+// enable_dwt_comp(b);</span><br><span style="color: hsl(120, 100%, 40%);">+#endif</span><br><span>  atmel_start_init();</span><br><span>  get_chip_unique_serial_str(sernr_buf, sizeof(sernr_buf));</span><br><span>    get_rstcause_str(rstcause_buf);</span><br><span>@@ -1154,6 +1186,9 @@</span><br><span> //   command_register(&cmd_get_time);</span><br><span> //      command_register(&cmd_test_timer);</span><br><span> </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%);">+</span><br><span>     printf("\r\n\r\n"</span><br><span>          "=============================================================================\n\r"</span><br><span>                "sysmoOCTSIM firmware " GIT_VERSION "\n\r"</span><br><span>@@ -1166,12 +1201,14 @@</span><br><span>     g_tall_ctx = talloc_named_const(NULL, 0, "global");</span><br><span>        printf("g_tall_ctx=%p\r\n", g_tall_ctx);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+        //FIXME osmo_emb has a pool?</span><br><span style="color: hsl(120, 100%, 40%);">+  msgb_talloc_ctx_init(g_tall_ctx, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>       libosmo_emb_init();</span><br><span> </span><br><span>      LOGP(DUSB, LOGL_ERROR, "foobar usb\n");</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   //FIXME osmo_emb has a pool?</span><br><span style="color: hsl(0, 100%, 40%);">-    //msgb_set_talloc_ctx(g_tall_ctx);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> </span><br><span>     //prevent spurious interrupts before our driver structs are ready</span><br><span>    CRITICAL_SECTION_ENTER()</span><br><span>@@ -1186,11 +1223,22 @@</span><br><span>   }</span><br><span>    submit_next_out();</span><br><span>   CRITICAL_SECTION_LEAVE()</span><br><span style="color: hsl(120, 100%, 40%);">+#if 0</span><br><span style="color: hsl(120, 100%, 40%);">+       /* CAN_RX */</span><br><span style="color: hsl(120, 100%, 40%);">+  gpio_set_pin_function(PIN_PB12, GPIO_PIN_FUNCTION_OFF);</span><br><span style="color: hsl(120, 100%, 40%);">+       gpio_set_pin_direction(PIN_PB12, GPIO_DIRECTION_OUT);</span><br><span style="color: hsl(120, 100%, 40%);">+ gpio_set_pin_level(PIN_PB12, false);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+      /* CAN_TX */</span><br><span style="color: hsl(120, 100%, 40%);">+  gpio_set_pin_function(PIN_PB13, GPIO_PIN_FUNCTION_OFF);</span><br><span style="color: hsl(120, 100%, 40%);">+       gpio_set_pin_direction(PIN_PB13, GPIO_DIRECTION_OUT);</span><br><span style="color: hsl(120, 100%, 40%);">+ gpio_set_pin_level(PIN_PB13, false);</span><br><span style="color: hsl(120, 100%, 40%);">+#endif</span><br><span style="color: hsl(120, 100%, 40%);">+  poll_card_detect();</span><br><span> //       command_print_prompt();</span><br><span>      while (true) { // main loop</span><br><span>          command_try_recv();</span><br><span style="color: hsl(0, 100%, 40%);">-             poll_card_detect();</span><br><span style="color: hsl(120, 100%, 40%);">+//         poll_card_detect();</span><br><span>          submit_next_irq();</span><br><span>           feed_ccid();</span><br><span>                 osmo_timers_update();</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ccid-firmware/+/16243">change 16243</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/c/osmo-ccid-firmware/+/16243"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-ccid-firmware </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I4340cb53f0f903842eb1c4d60a36d44ac9e5cbde </div>
<div style="display:none"> Gerrit-Change-Number: 16243 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Hoernchen <ewild@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>