Fix missing generation of waiting-time-extension in some situations
In the function set_tpdu_state(), there is a missing transition to
WAIT_TX state. This is fine if you are coming from the WAIT_PB state,
which has already restarted the waiting timer via
card_emu_uart_update_wt(), but if you are coming from the WAIT_RX
state, then card_emu_uart_update_wt() is never called and the USART
timer is never restarted. (Because the transmitter is left enabled in
WAIT_RX, the response is still sent to the modem; it is just the
half-wait timeouts that are missing).
Change-Id: Ib4eb964c073192e8f067004625af818ba2caf003
diff --git a/firmware/libcommon/source/card_emu.c b/firmware/libcommon/source/card_emu.c
index c85b08c..e6907e6 100644
--- a/firmware/libcommon/source/card_emu.c
+++ b/firmware/libcommon/source/card_emu.c
@@ -775,6 +775,15 @@
/* prepare to extend the waiting time once half of it is reached */
card_emu_uart_update_wt(ch->uart_chan, ch->waiting_time);
break;
+ case TPDU_S_WAIT_TX:
+ /* If we came from WAIT_RX, disable the receiver and
+ * enable the transmitter. If we came from WAIT_RX or
+ * WAIT_PB, reset the waiting time so that we can extend
+ * waiting time if needed. */
+ card_emu_uart_enable(ch->uart_chan, ENABLE_TX);
+ /* prepare to extend the waiting time once half of it is reached */
+ card_emu_uart_update_wt(ch->uart_chan, ch->waiting_time);
+ break;
default:
break;
}