aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Welte <laforge@osmocom.org>2019-12-16 10:23:32 +0100
committerHarald Welte <laforge@osmocom.org>2019-12-16 14:51:49 +0100
commit140f007c3e2a15f8bdea79b08fbe50a8673d4ebd (patch)
tree8ec59c69af1797630b179312fd82162cf4e3be16
parent12c9b7ba02436435a7729d4c1042d91b9ac1b073 (diff)
cardem: Make card_emu_report_status() optionally use IRQ endpoint
This just introduces the capability to report on IRQ, but we don't actually use it yet. Change-Id: I83db4463b7010ba243a8adbda3ac9393975b4814
-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: