mfu read block: retry block with bad CRC

This commit is contained in:
James Chambers 2018-03-15 13:45:21 -04:00
commit 4601d0e77a

View file

@ -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++){ for (int i = 0; i < blocks; i++){
if ((i*4) + 4 >= CARD_MEMORY_SIZE) { if ((i*4) + 4 >= CARD_MEMORY_SIZE) {
Dbprintf("Data exceeds buffer!!"); Dbprintf("Data exceeds buffer!!");
@ -320,6 +322,8 @@ void MifareUReadCard(uint8_t arg0, uint16_t arg1, uint8_t arg2, uint8_t *datain)
if (len) { if (len) {
if (MF_DBGLEVEL >= MF_DBG_ERROR) Dbprintf("Read block %d error",i); if (MF_DBGLEVEL >= MF_DBG_ERROR) Dbprintf("Read block %d error",i);
if (retries >= MFU_MAX_CRC_RETRIES) {
// if no blocks read - error out // if no blocks read - error out
if (i==0) { if (i==0) {
OnError(2); OnError(2);
@ -329,6 +333,11 @@ void MifareUReadCard(uint8_t arg0, uint16_t arg1, uint8_t arg2, uint8_t *datain)
break; break;
} }
} else { } else {
retries++;
i--;
}
} else {
retries = 0;
countblocks++; countblocks++;
} }
} }