From b819315caa7c9a1da1a4ad129ec457d70c4965b8 Mon Sep 17 00:00:00 2001 From: Pi3rrot Date: Tue, 22 Nov 2016 21:27:30 +0100 Subject: [PATCH] Add support for Mifare Mini 0.3k --- libfreefare/freefare.c | 4 ++++ libfreefare/freefare.h | 2 +- libfreefare/mifare_classic.c | 17 +++++++++++++++++ 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/libfreefare/freefare.c b/libfreefare/freefare.c index b7c2fb5..40fe1e5 100644 --- a/libfreefare/freefare.c +++ b/libfreefare/freefare.c @@ -38,6 +38,8 @@ freefare_tag_new (nfc_device *device, nfc_target target) if (felica_taste (device, target)) { tag = felica_tag_new (device, target); + } else if (mifare_mini_taste (device, target)) { + tag = mifare_mini_tag_new (device, target); } else if (mifare_classic1k_taste (device, target)) { tag = mifare_classic1k_tag_new (device, target); } else if (mifare_classic4k_taste (device, target)) { @@ -155,6 +157,8 @@ freefare_get_tag_friendly_name (FreefareTag tag) switch (tag->type) { case FELICA: return "FeliCA"; + case MIFARE_MINI: + return "Mifare Mini 0.3k"; case MIFARE_CLASSIC_1K: return "Mifare Classic 1k"; case MIFARE_CLASSIC_4K: diff --git a/libfreefare/freefare.h b/libfreefare/freefare.h index 8d02e41..d7b5c98 100644 --- a/libfreefare/freefare.h +++ b/libfreefare/freefare.h @@ -30,7 +30,7 @@ enum freefare_tag_type { FELICA, -// MIFARE_MINI, + MIFARE_MINI, MIFARE_CLASSIC_1K, MIFARE_CLASSIC_4K, MIFARE_DESFIRE, diff --git a/libfreefare/mifare_classic.c b/libfreefare/mifare_classic.c index 7789ff9..18014a5 100644 --- a/libfreefare/mifare_classic.c +++ b/libfreefare/mifare_classic.c @@ -193,6 +193,16 @@ int get_block_access_bits (FreefareTag tag, const MifareClassicBlockNumber blo * Memory management functions. */ +bool +mifare_mini_taste (nfc_device *device, nfc_target target) +{ + (void) device; + return target.nm.nmt == NMT_ISO14443A && + ( + target.nti.nai.btSak == 0x09 + ); +} + bool mifare_classic1k_taste (nfc_device *device, nfc_target target) { @@ -237,6 +247,13 @@ _mifare_classic_tag_new (nfc_device *device, nfc_target target, int tag_type) return tag; } + +FreefareTag +mifare_mini_tag_new (nfc_device *device, nfc_target target) +{ + return _mifare_classic_tag_new (device, target, MIFARE_MINI); +} + FreefareTag mifare_classic1k_tag_new (nfc_device *device, nfc_target target) {