aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--firmware/libcommon/include/card_emu.h2
-rw-r--r--firmware/libcommon/include/simtrace_usb.h2
-rw-r--r--firmware/libcommon/source/card_emu.c9
-rw-r--r--firmware/libcommon/source/mode_cardemu.c2
4 files changed, 9 insertions, 6 deletions
diff --git a/firmware/libcommon/include/card_emu.h b/firmware/libcommon/include/card_emu.h
index e545593..aaa07c5 100644
--- a/firmware/libcommon/include/card_emu.h
+++ b/firmware/libcommon/include/card_emu.h
@@ -56,7 +56,7 @@ int card_emu_set_atr(struct card_handle *ch, const uint8_t *atr, uint8_t len);
struct llist_head *card_emu_get_uart_tx_queue(struct card_handle *ch);
void card_emu_have_new_uart_tx(struct card_handle *ch);
-void card_emu_report_status(struct card_handle *ch);
+void card_emu_report_status(struct card_handle *ch, bool report_on_irq);
#define ENABLE_TX 0x01
#define ENABLE_RX 0x02
diff --git a/firmware/libcommon/include/simtrace_usb.h b/firmware/libcommon/include/simtrace_usb.h
index c0da9c5..be2da9f 100644
--- a/firmware/libcommon/include/simtrace_usb.h
+++ b/firmware/libcommon/include/simtrace_usb.h
@@ -64,4 +64,4 @@
#define SIMTRACE_CARDEM_USB_EP_USIM2_INT 3
/*! Maximum number of endpoints */
-#define BOARD_USB_NUMENDPOINTS 6
+#define BOARD_USB_NUMENDPOINTS 7 /* 0 (control) + 2 (interfaces) * 3 (endpoints) */
diff --git a/firmware/libcommon/source/card_emu.c b/firmware/libcommon/source/card_emu.c
index ced6b14..352284f 100644
--- a/firmware/libcommon/source/card_emu.c
+++ b/firmware/libcommon/source/card_emu.c
@@ -1051,13 +1051,16 @@ void card_emu_have_new_uart_tx(struct card_handle *ch)
}
}
-void card_emu_report_status(struct card_handle *ch)
+void card_emu_report_status(struct card_handle *ch, bool report_on_irq)
{
struct msgb *msg;
struct cardemu_usb_msg_status *sts;
+ uint8_t ep = ch->in_ep;
- msg = usb_buf_alloc_st(ch->in_ep, SIMTRACE_MSGC_CARDEM,
- SIMTRACE_MSGT_BD_CEMU_STATUS);
+ if (report_on_irq)
+ ep = ch->irq_ep;
+
+ msg = usb_buf_alloc_st(ep, SIMTRACE_MSGC_CARDEM, SIMTRACE_MSGT_BD_CEMU_STATUS);
if (!msg)
return;
diff --git a/firmware/libcommon/source/mode_cardemu.c b/firmware/libcommon/source/mode_cardemu.c
index 1d074cb..fbc042f 100644
--- a/firmware/libcommon/source/mode_cardemu.c
+++ b/firmware/libcommon/source/mode_cardemu.c
@@ -538,7 +538,7 @@ static void dispatch_usb_command_cardem(struct msgb *msg, struct cardem_inst *ci
usb_buf_free(msg);
break;
case SIMTRACE_MSGT_BD_CEMU_STATUS:
- card_emu_report_status(ci->ch);
+ card_emu_report_status(ci->ch, false);
usb_buf_free(msg);
break;
case SIMTRACE_MSGT_BD_CEMU_STATS: