<p>laforge would like tsaitgaist to <strong>review</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/simtrace2/+/23615">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">minor add comments<br><br>this is just to better understand the flow<br><br>Change-Id: I045286836176da729cc8c863866d6f6aa3836592<br>---<br>M firmware/libcommon/source/mode_cardemu.c<br>1 file changed, 24 insertions(+), 15 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/simtrace2 refs/changes/15/23615/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/firmware/libcommon/source/mode_cardemu.c b/firmware/libcommon/source/mode_cardemu.c</span><br><span>index 6a8d98f..7a37317 100644</span><br><span>--- a/firmware/libcommon/source/mode_cardemu.c</span><br><span>+++ b/firmware/libcommon/source/mode_cardemu.c</span><br><span>@@ -1,7 +1,7 @@</span><br><span> /* card emulation mode</span><br><span> *</span><br><span> * (C) 2015-2017 by Harald Welte <laforge@gnumonks.org></span><br><span style="color: hsl(0, 100%, 40%);">- * (C) 2018 by sysmocom -s.f.m.c. GmbH, Author: Kevin Redon <kredon@sysmocom.de></span><br><span style="color: hsl(120, 100%, 40%);">+ * (C) 2018-2019 by sysmocom -s.f.m.c. GmbH, Author: Kevin Redon <kredon@sysmocom.de></span><br><span> *</span><br><span> * This program is free software; you can redistribute it and/or modify</span><br><span> * it under the terms of the GNU General Public License as published by</span><br><span>@@ -202,32 +202,33 @@</span><br><span> uint32_t csr;</span><br><span> uint8_t byte = 0;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- csr = usart->US_CSR & usart->US_IMR;</span><br><span style="color: hsl(120, 100%, 40%);">+ csr = usart->US_CSR & usart->US_IMR; // save state/flags before they get changed</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- if (csr & US_CSR_RXRDY) {</span><br><span style="color: hsl(0, 100%, 40%);">- byte = (usart->US_RHR) & 0xFF;</span><br><span style="color: hsl(0, 100%, 40%);">- if (rbuf_write(&ci->rb, byte) < 0)</span><br><span style="color: hsl(0, 100%, 40%);">- TRACE_ERROR("rbuf overrun\r\n");</span><br><span style="color: hsl(120, 100%, 40%);">+ if (csr & US_CSR_RXRDY) { // bytes has been received</span><br><span style="color: hsl(120, 100%, 40%);">+ byte = (usart->US_RHR) & 0xFF; // ready out byte</span><br><span style="color: hsl(120, 100%, 40%);">+ if (rbuf_write(&ci->rb, byte) < 0) // store byte in buffer</span><br><span style="color: hsl(120, 100%, 40%);">+ TRACE_ERROR("rbuf overrun\r\n"); // error if could not store in buffer</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- if (csr & US_CSR_TXRDY) {</span><br><span style="color: hsl(0, 100%, 40%);">- if (card_emu_tx_byte(ci->ch) == 0)</span><br><span style="color: hsl(0, 100%, 40%);">- USART_DisableIt(usart, US_IER_TXRDY);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (csr & US_CSR_TXRDY) { // ready to transmit the next byte</span><br><span style="color: hsl(120, 100%, 40%);">+ if (card_emu_tx_byte(ci->ch) == 0) // transmit next byte, and check if a byte is being transmitted</span><br><span style="color: hsl(120, 100%, 40%);">+ USART_DisableIt(usart, US_IER_TXRDY); // stop the TX ready signal if not byte has been transmitted</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- if (csr & (US_CSR_OVRE|US_CSR_FRAME|US_CSR_PARE|</span><br><span style="color: hsl(0, 100%, 40%);">- US_CSR_TIMEOUT|US_CSR_NACK|(1<<10))) {</span><br><span style="color: hsl(0, 100%, 40%);">- usart->US_CR = US_CR_RSTSTA | US_CR_RSTIT | US_CR_RSTNACK;</span><br><span style="color: hsl(0, 100%, 40%);">- TRACE_ERROR("%u e 0x%x st: 0x%lx\n", ci->num, byte, csr);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (csr & (US_CSR_OVRE|US_CSR_FRAME|US_CSR_PARE|US_CSR_TIMEOUT|US_CSR_NACK|(1<<10))) { // error flag set</span><br><span style="color: hsl(120, 100%, 40%);">+ usart->US_CR = US_CR_RSTSTA | US_CR_RSTIT | US_CR_RSTNACK; // reset UART state to clear flag</span><br><span style="color: hsl(120, 100%, 40%);">+ TRACE_ERROR("%u USART error on 0x%x status: 0x%lx\n", ci->num, byte, csr); // warn user about error</span><br><span> }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/*! ISR called for USART0 */</span><br><span> void mode_cardemu_usart0_irq(void)</span><br><span> {</span><br><span> /* USART0 == Instance 1 == USIM 2 */</span><br><span> usart_irq_rx(1);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/*! ISR called for USART1 */</span><br><span> void mode_cardemu_usart1_irq(void)</span><br><span> {</span><br><span> /* USART1 == Instance 0 == USIM 1 */</span><br><span>@@ -419,15 +420,21 @@</span><br><span> INIT_LLIST_HEAD(&cardem_inst[0].usb_out_queue);</span><br><span> rbuf_reset(&cardem_inst[0].rb);</span><br><span> PIO_Configure(pins_usim1, PIO_LISTSIZE(pins_usim1));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* configure USART as ISO-7816 slave (e.g. card) */</span><br><span> ISO7816_Init(&cardem_inst[0].usart_info, CLK_SLAVE);</span><br><span> NVIC_EnableIRQ(USART1_IRQn);</span><br><span> PIO_ConfigureIt(&pin_usim1_rst, usim1_rst_irqhandler);</span><br><span> PIO_EnableIt(&pin_usim1_rst);</span><br><span style="color: hsl(0, 100%, 40%);">- usim1_rst_irqhandler(&pin_usim1_rst); /* obtain current RST state */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* obtain current RST state */</span><br><span style="color: hsl(120, 100%, 40%);">+ usim1_rst_irqhandler(&pin_usim1_rst);</span><br><span> #ifndef DETECT_VCC_BY_ADC</span><br><span> PIO_ConfigureIt(&pin_usim1_vcc, usim1_vcc_irqhandler);</span><br><span> PIO_EnableIt(&pin_usim1_vcc);</span><br><span style="color: hsl(0, 100%, 40%);">- usim1_vcc_irqhandler(&pin_usim1_vcc); /* obtain current VCC state */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* obtain current VCC state */</span><br><span style="color: hsl(120, 100%, 40%);">+ usim1_vcc_irqhandler(&pin_usim1_vcc);</span><br><span> #else</span><br><span> do {} while (!adc_triggered); /* wait for first ADC reading */</span><br><span> #endif /* DETECT_VCC_BY_ADC */</span><br><span>@@ -442,6 +449,7 @@</span><br><span> rbuf_reset(&cardem_inst[1].rb);</span><br><span> PIO_Configure(pins_usim2, PIO_LISTSIZE(pins_usim2));</span><br><span> ISO7816_Init(&cardem_inst[1].usart_info, CLK_SLAVE);</span><br><span style="color: hsl(120, 100%, 40%);">+ // TODO enable timeout</span><br><span> NVIC_EnableIRQ(USART0_IRQn);</span><br><span> PIO_ConfigureIt(&pin_usim2_rst, usim2_rst_irqhandler);</span><br><span> PIO_EnableIt(&pin_usim2_rst);</span><br><span>@@ -458,6 +466,7 @@</span><br><span> SIMTRACE_CARDEM_USB_EP_USIM2_INT, cardem_inst[1].vcc_active,</span><br><span> cardem_inst[1].rst_active, cardem_inst[1].vcc_active);</span><br><span> sim_switch_use_physical(1, 1);</span><br><span style="color: hsl(120, 100%, 40%);">+ // TODO check rst and vcc</span><br><span> #endif /* CARDEMU_SECOND_UART */</span><br><span> }</span><br><span> </span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/simtrace2/+/23615">change 23615</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/simtrace2/+/23615"/><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-Change-Id: I045286836176da729cc8c863866d6f6aa3836592 </div>
<div style="display:none"> Gerrit-Change-Number: 23615 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: tsaitgaist <kredon@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>