attempt at handling card insertion/removal
Change-Id: I88130de7f889811425c0a2ca4063ea8822c83f66
diff --git a/ccid_common/ccid_device.c b/ccid_common/ccid_device.c
index c67c52e..11edd3e 100644
--- a/ccid_common/ccid_device.c
+++ b/ccid_common/ccid_device.c
@@ -438,9 +438,20 @@
{
const union ccid_pc_to_rdr *u = msgb_ccid_out(msg);
const struct ccid_header *ch = (const struct ccid_header *) u;
+ struct msgb *resp;
+ int rc;
/* handle this asynchronously */
- cs->ci->slot_ops->xfr_block_async(cs, msg, &u->xfr_block);
+ rc = cs->ci->slot_ops->xfr_block_async(cs, msg, &u->xfr_block);
+ if (rc < 0) {
+ msgb_trim(msg, sizeof(struct ccid_rdr_to_pc_data_block));
+ resp = ccid_gen_data_block(cs, u->xfr_block.hdr.bSeq, CCID_CMD_STATUS_FAILED, -rc, 0, 0);
+ goto out;
+ }
+ /* busy */
+ return 1;
+out:
+ ccid_slot_send_unbusy(cs, resp);
return 1;
}