From 1f8cfcc66930d5074b816988400525939329242d Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Sat, 22 Mar 2025 09:38:43 +0000 Subject: [PATCH] NFC: Detect NTAG4xx in Type 4 Tag poller --- .../type_4_tag/type_4_tag_poller_i.c | 26 +++++++++++++------ 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/lib/nfc/protocols/type_4_tag/type_4_tag_poller_i.c b/lib/nfc/protocols/type_4_tag/type_4_tag_poller_i.c index e9555fcf8..e9bbfffc0 100644 --- a/lib/nfc/protocols/type_4_tag/type_4_tag_poller_i.c +++ b/lib/nfc/protocols/type_4_tag/type_4_tag_poller_i.c @@ -4,6 +4,8 @@ #include #include +#include +#include #include #include @@ -226,17 +228,25 @@ Type4TagError type_4_tag_poller_detect_platform(Type4TagPoller* instance) { NfcDevice* device = nfc_device_alloc(); do { - FURI_LOG_D(TAG, "Detect DESFire"); - MfDesfirePoller* mf_des = mf_desfire_poller.alloc(instance->iso14443_4a_poller); - mf_desfire_poller_set_command_mode(mf_des, MfDesfirePollerCommandModeIsoWrapped); - if(mf_desfire_poller.detect(event, mf_des)) { - platform = Type4TagPlatformMfDesfire; - nfc_device_set_data(device, NfcProtocolMfDesfire, mf_desfire_poller.get_data(mf_des)); + FURI_LOG_D(TAG, "Detect NTAG4xx"); + Ntag4xxPoller* ntag4xx = ntag4xx_poller.alloc(instance->iso14443_4a_poller); + if(ntag4xx_poller.detect(event, ntag4xx)) { + platform = Type4TagPlatformNtag4xx; + nfc_device_set_data(device, NfcProtocolNtag4xx, ntag4xx_poller.get_data(ntag4xx)); } - mf_desfire_poller.free(mf_des); + ntag4xx_poller.free(ntag4xx); if(platform != Type4TagPlatformUnknown) break; - // FIXME: detect NTAG4xx + FURI_LOG_D(TAG, "Detect DESFire"); + MfDesfirePoller* mf_desfire = mf_desfire_poller.alloc(instance->iso14443_4a_poller); + mf_desfire_poller_set_command_mode(mf_desfire, MfDesfirePollerCommandModeIsoWrapped); + if(mf_desfire_poller.detect(event, mf_desfire)) { + platform = Type4TagPlatformMfDesfire; + nfc_device_set_data( + device, NfcProtocolMfDesfire, mf_desfire_poller.get_data(mf_desfire)); + } + mf_desfire_poller.free(mf_desfire); + if(platform != Type4TagPlatformUnknown) break; } while(false); Type4TagError error;