explicitly inform card_emu once data to transmit has arrived
diff --git a/firmware/src_simtrace/card_emu.c b/firmware/src_simtrace/card_emu.c
index fa028a1..f45bc21 100644
--- a/firmware/src_simtrace/card_emu.c
+++ b/firmware/src_simtrace/card_emu.c
@@ -788,6 +788,23 @@
 	return rc;
 }
 
+void card_emu_have_new_uart_tx(struct card_handle *ch)
+{
+	switch (ch->state) {
+	case ISO_S_IN_TPDU:
+		switch (ch->tpdu.state) {
+		case TPDU_S_WAIT_TX:
+		case TPDU_S_WAIT_PB:
+			card_emu_uart_enable(ch->uart_chan, ENABLE_TX);
+			break;
+		default:
+			break;
+		}
+	default:
+		break;
+	}
+}
+
 /* hardware driver informs us that a card I/O signal has changed */
 void card_emu_io_statechg(struct card_handle *ch, enum card_io io, int active)
 {
diff --git a/firmware/src_simtrace/card_emu.h b/firmware/src_simtrace/card_emu.h
index eea3478..95d2bae 100644
--- a/firmware/src_simtrace/card_emu.h
+++ b/firmware/src_simtrace/card_emu.h
@@ -26,6 +26,7 @@
 
 struct llist_head *card_emu_get_uart_tx_queue(struct card_handle *ch);
 struct llist_head *card_emu_get_usb_tx_queue(struct card_handle *ch);
+void card_emu_have_new_uart_tx(struct card_handle *ch);
 
 #define ENABLE_TX	0x01
 #define ENABLE_RX	0x02
diff --git a/firmware/src_simtrace/mode_cardemu.c b/firmware/src_simtrace/mode_cardemu.c
index 5e8332b..9ee31ca 100644
--- a/firmware/src_simtrace/mode_cardemu.c
+++ b/firmware/src_simtrace/mode_cardemu.c
@@ -2,6 +2,7 @@
 #include "card_emu.h"
 #include "iso7816_fidi.h"
 #include "utils.h"
+#include "linuxlist.h"
 
 #define TRACE_ENTRY()	TRACE_DEBUG("%s entering\n", __func__)
 
@@ -207,9 +208,24 @@
 #endif
 }
 
+static int llist_count(struct llist_head *head)
+{
+	struct llist_head *list;
+	int i = 0;
+
+	llist_for_each(list, head)
+		i++;
+
+	return i;
+}
+
+static int usb_pending_old = 0;
+
 /* main loop function, called repeatedly */
 void mode_cardemu_run(void)
 {
+	struct llist_head *queue;
+
 	if (ch1) {
 		/* drain the ring buffer from UART into card_emu */
 		while (1) {
@@ -221,9 +237,21 @@
 			uint8_t byte = rbuf_read(&ch1_rb);
 			__enable_irq();
 			card_emu_process_rx_byte(ch1, byte);
+			TRACE_ERROR("Rx%02x\r\n", byte);
 		}
-		usb_refill_to_host(card_emu_get_usb_tx_queue(ch1), PHONE_DATAIN);
-		usb_refill_from_host(card_emu_get_uart_tx_queue(ch1), PHONE_DATAOUT);
+
+		queue = card_emu_get_usb_tx_queue(ch1);
+		int usb_pending = llist_count(queue);
+		if (usb_pending != usb_pending_old) {
+//			printf("usb_pending=%d\r\n", usb_pending);
+			usb_pending_old = usb_pending;
+		}
+		usb_refill_to_host(queue, PHONE_DATAIN);
+
+		queue = card_emu_get_uart_tx_queue(ch1);
+		usb_refill_from_host(queue, PHONE_DATAOUT);
+		if (llist_count(queue))
+			card_emu_have_new_uart_tx(ch1);
 	}
 
 #ifdef CARDEMU_SECOND_UART