From c58bba0833d61d978fa84c054c926715abb792aa Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Sun, 20 Mar 2016 14:57:53 +0100 Subject: [PATCH] wait for UART Tx completion before switching baud rate at PTS --- firmware/src_simtrace/card_emu.c | 1 + firmware/src_simtrace/card_emu.h | 1 + firmware/src_simtrace/mode_cardemu.c | 6 ++++++ 3 files changed, 8 insertions(+) diff --git a/firmware/src_simtrace/card_emu.c b/firmware/src_simtrace/card_emu.c index cc5fb02a..5044bea9 100644 --- a/firmware/src_simtrace/card_emu.c +++ b/firmware/src_simtrace/card_emu.c @@ -454,6 +454,7 @@ static int tx_byte_pts(struct card_handle *ch) switch (ch->pts.state) { case PTS_S_WAIT_RESP_PCK: + card_emu_uart_wait_tx_idle(ch->uart_chan); /* update baud rate generator with Fi/Di */ emu_update_fidi(ch); /* Wait for the next TPDU */ diff --git a/firmware/src_simtrace/card_emu.h b/firmware/src_simtrace/card_emu.h index 2b2d3f12..df23ce47 100644 --- a/firmware/src_simtrace/card_emu.h +++ b/firmware/src_simtrace/card_emu.h @@ -35,3 +35,4 @@ void card_emu_report_status(struct card_handle *ch); int card_emu_uart_update_fidi(uint8_t uart_chan, unsigned int fidi); int card_emu_uart_tx(uint8_t uart_chan, uint8_t byte); void card_emu_uart_enable(uint8_t uart_chan, uint8_t rxtx); +void card_emu_uart_wait_tx_idle(uint8_t uart_chan); diff --git a/firmware/src_simtrace/mode_cardemu.c b/firmware/src_simtrace/mode_cardemu.c index 098e0d67..0f0d7dc0 100644 --- a/firmware/src_simtrace/mode_cardemu.c +++ b/firmware/src_simtrace/mode_cardemu.c @@ -97,6 +97,12 @@ static void wait_tx_idle(Usart *usart) } } +void card_emu_uart_wait_tx_idle(uint8_t uart_chan) +{ + Usart *usart = get_usart_by_chan(uart_chan); + wait_tx_idle(usart); +} + /* call-back from card_emu.c to enable/disable transmit and/or receive */ void card_emu_uart_enable(uint8_t uart_chan, uint8_t rxtx) {