From 06b27f64a2f09ab3d4dd75412633dc472eed5d46 Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Wed, 2 Mar 2016 14:26:38 +0100 Subject: [PATCH] mode_cardemu: Implement CEMU_USB_MSGT_DT_SET_ATR This way the host PC can set the ATR of the emulated card --- firmware/src_simtrace/mode_cardemu.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/firmware/src_simtrace/mode_cardemu.c b/firmware/src_simtrace/mode_cardemu.c index 3108cd7b..9bf706da 100644 --- a/firmware/src_simtrace/mode_cardemu.c +++ b/firmware/src_simtrace/mode_cardemu.c @@ -229,6 +229,7 @@ static int usb_pending_old = 0; static void dispatch_usb_command(struct req_ctx *rctx, struct card_handle *ch) { struct cardemu_usb_msg_hdr *hdr; + struct cardemu_usb_msg_set_atr *atr; struct llist_head *queue; hdr = (struct cardemu_usb_msg_hdr *) rctx->data; @@ -240,6 +241,11 @@ static void dispatch_usb_command(struct req_ctx *rctx, struct card_handle *ch) card_emu_have_new_uart_tx(ch); break; case CEMU_USB_MSGT_DT_SET_ATR: + atr = (struct cardemu_usb_msg_set_atr *) hdr; + card_emu_set_atr(ch, atr->atr, hdr->data_len); + llist_del(&rctx->list); + req_ctx_put(rctx); + break; case CEMU_USB_MSGT_DT_GET_STATS: case CEMU_USB_MSGT_DT_GET_STATUS: default: @@ -252,9 +258,9 @@ static void dispatch_usb_command(struct req_ctx *rctx, struct card_handle *ch) * them */ static void process_any_usb_commands(struct llist_head *main_q, struct card_handle *ch) { - struct req_ctx *rctx; + struct req_ctx *rctx, *tmp; - llist_for_each_entry(rctx, main_q, list) + llist_for_each_entry_safe(rctx, tmp, main_q, list) dispatch_usb_command(rctx, ch); }