From a047d16a76b451e66db6a6077b457247425f6cb2 Mon Sep 17 00:00:00 2001 From: whowechina Date: Tue, 11 Jun 2024 21:49:52 +0800 Subject: [PATCH] Move the false card id filtering into PN5180 module --- Production/Firmware/aic_pico.uf2 | Bin 415232 -> 415232 bytes firmware/src/lib/pn5180.c | 10 ++++++++++ firmware/src/main.c | 9 --------- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/Production/Firmware/aic_pico.uf2 b/Production/Firmware/aic_pico.uf2 index 366867c3e95e679eec2d02cf9e4ff17fb9e40466..2ab70200ad85f793319622ddfe76153aa7a5a9a2 100644 GIT binary patch delta 35486 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 delta 35901 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 diff --git a/firmware/src/lib/pn5180.c b/firmware/src/lib/pn5180.c index 5fb664d..356b772 100644 --- a/firmware/src/lib/pn5180.c +++ b/firmware/src/lib/pn5180.c @@ -364,6 +364,16 @@ bool pn5180_poll_felica(uint8_t uid[8], uint8_t pmm[8], uint8_t syscode[2], bool memcpy(uid, out.idm, 8); memcpy(pmm, out.pmm, 8); memcpy(syscode, out.syscode, 2); + + /* double check the result */ + pn5180_send_data(cmd, sizeof(cmd), 0x00); + sleep_ms(1); + pn5180_read_data((uint8_t *)&out, sizeof(out)); + if ((out.len != sizeof(out)) || (out.cmd != 0x01) || + (memcmp(uid, out.idm, 8) != 0)) { + return false; + } + memcpy(idm_cache, uid, 8); return true; } diff --git a/firmware/src/main.c b/firmware/src/main.c index d1bf017..8b8e3f1 100644 --- a/firmware/src/main.c +++ b/firmware/src/main.c @@ -199,15 +199,6 @@ static void cardio_run() nfc_card_t card = nfc_detect_card(); nfc_rf_field(false); - /* Double check ID, some module gives random false data */ - nfc_rf_field(true); - nfc_card_t card_confirm = nfc_detect_card(); - nfc_rf_field(false); - - if (memcmp(&card, &card_confirm, sizeof(card)) != 0) { - return; - } - if (memcmp(&old_card, &card, sizeof(old_card)) == 0) { return; }