From 4601d0e77a740f8c059328b764ce4caa5304280c Mon Sep 17 00:00:00 2001 From: James Chambers Date: Thu, 15 Mar 2018 13:45:21 -0400 Subject: [PATCH] mfu read block: retry block with bad CRC --- armsrc/mifarecmd.c | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/armsrc/mifarecmd.c b/armsrc/mifarecmd.c index 3854b589..b3d14f72 100644 --- a/armsrc/mifarecmd.c +++ b/armsrc/mifarecmd.c @@ -310,6 +310,8 @@ void MifareUReadCard(uint8_t arg0, uint16_t arg1, uint8_t arg2, uint8_t *datain) } } + #define MFU_MAX_CRC_RETRIES 5 + unsigned int retries = 0; for (int i = 0; i < blocks; i++){ if ((i*4) + 4 >= CARD_MEMORY_SIZE) { Dbprintf("Data exceeds buffer!!"); @@ -320,15 +322,22 @@ void MifareUReadCard(uint8_t arg0, uint16_t arg1, uint8_t arg2, uint8_t *datain) if (len) { if (MF_DBGLEVEL >= MF_DBG_ERROR) Dbprintf("Read block %d error",i); - // if no blocks read - error out - if (i==0){ - OnError(2); - return; + + if (retries >= MFU_MAX_CRC_RETRIES) { + // if no blocks read - error out + if (i==0) { + OnError(2); + return; + } else { + //stop at last successful read block and return what we got + break; + } } else { - //stop at last successful read block and return what we got - break; + retries++; + i--; } } else { + retries = 0; countblocks++; } }