From 67ad6298cd4f7d4e34a40cb43c2302c710df5e1b Mon Sep 17 00:00:00 2001 From: merlokk <807634+merlokk@users.noreply.github.com> Date: Wed, 17 Jul 2019 15:54:22 +0300 Subject: [PATCH] added 14a send/receive arm timeout --- armsrc/iso14443a.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/armsrc/iso14443a.c b/armsrc/iso14443a.c index b5e612ec9..6851ef85a 100644 --- a/armsrc/iso14443a.c +++ b/armsrc/iso14443a.c @@ -1578,6 +1578,7 @@ static void TransmitFor14443a(const uint8_t *cmd, uint16_t len, uint32_t *timing volatile uint8_t b; uint16_t c = 0; + uint32_t sendtimer = GetTickCount(); while (c < len) { if (AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_TXRDY)) { AT91C_BASE_SSC->SSC_THR = cmd[c++]; @@ -1587,6 +1588,8 @@ static void TransmitFor14443a(const uint8_t *cmd, uint16_t len, uint32_t *timing b = (uint16_t)(AT91C_BASE_SSC->SSC_RHR); (void)b; } + if (GetTickCount() - sendtimer > 100) + break; } NextTransferTime = MAX(NextTransferTime, LastTimeProxToAirStart + REQUEST_GUARD_TIME); @@ -1937,6 +1940,7 @@ static int GetIso14443aAnswerFromTag(uint8_t *receivedResponse, uint8_t *receive (void)b; uint32_t timeout = iso14a_get_timeout(); + uint32_t receive_timer = GetTickCount(); for (;;) { WDT_HIT(); @@ -1949,7 +1953,12 @@ static int GetIso14443aAnswerFromTag(uint8_t *receivedResponse, uint8_t *receive return false; } } + + // timeout already in ms + 100ms guard time + if (GetTickCount() - receive_timer > timeout + 100) + break; } + return false; } void ReaderTransmitBitsPar(uint8_t *frame, uint16_t bits, uint8_t *par, uint32_t *timing) {