mode_cardemu: Implement CEMU_USB_MSGT_DT_SET_ATR

This way the host PC can set the ATR of the emulated card
diff --git a/firmware/src_simtrace/mode_cardemu.c b/firmware/src_simtrace/mode_cardemu.c
index 3108cd7..9bf706d 100644
--- a/firmware/src_simtrace/mode_cardemu.c
+++ b/firmware/src_simtrace/mode_cardemu.c
@@ -229,6 +229,7 @@
 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 @@
 		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 @@
  * 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);
 }