aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Wild <ewild@sysmocom.de>2020-03-30 04:10:31 +0200
committerlaforge <laforge@osmocom.org>2020-07-31 21:28:07 +0000
commit91f75ce2802537770ce771e1f7b734f08501f2ce (patch)
treeda9bf9227efacdf17807a5b03601f68987a4494d
parentbf21f24a5bfd7b7ac125e273af5d53f26eccea28 (diff)
ccid: handle timeouts
Empty trays caused a hang, because the timeout was not handled. This fixes this, and allows manual voltage selection by attempting slot powerup with different voltages after timeout until it succeeds. Change-Id: I4dfc8d6d0e25008765615d3c4149a75efc0ef44d
-rw-r--r--ccid_common/ccid_slot_fsm.c20
1 files changed, 18 insertions, 2 deletions
diff --git a/ccid_common/ccid_slot_fsm.c b/ccid_common/ccid_slot_fsm.c
index 4bd1b0d..8b8fdd2 100644
--- a/ccid_common/ccid_slot_fsm.c
+++ b/ccid_common/ccid_slot_fsm.c
@@ -122,6 +122,7 @@ static void iso_fsm_clot_user_cb(struct osmo_fsm_inst *fi, int event, int cause,
case ISO7816_E_TPDU_FAILED_IND:
case ISO7816_E_PPS_DONE_IND:
case ISO7816_E_PPS_FAILED_IND:
+ case ISO7816_E_WTIME_EXP:
cs->event_data = data;
#ifdef OCTSIMFWBUILD
asm volatile("dmb st": : :"memory");
@@ -143,10 +144,25 @@ static int iso_handle_fsm_events(struct ccid_slot *cs, bool enable){
if(!event)
return 0;
- if(event && !data)
- return 0;
+// if(event && !data)
+// return 0;
switch (event) {
+ case ISO7816_E_WTIME_EXP:
+ tpdu = data;
+ LOGPCS(cs, LOGL_DEBUG, "%s(event=%d, data=0)\n", __func__, event);
+
+
+ /* perform deactivation */
+ card_uart_ctrl(ss->cuart, CUART_CTL_RST, true);
+ card_uart_ctrl(ss->cuart, CUART_CTL_POWER, false);
+ cs->icc_powered = false;
+
+
+ resp = ccid_gen_data_block(cs, ss->seq, CCID_CMD_STATUS_FAILED, CCID_ERR_ICC_MUTE, 0, 0);
+ ccid_slot_send_unbusy(cs, resp);
+ cs->event = 0;
+ break;
case ISO7816_E_ATR_DONE_IND:
tpdu = data;
LOGPCS(cs, LOGL_DEBUG, "%s(event=%d, data=%s)\n", __func__, event,