Generic library for working with PN532-like chips

Fork of PN532 by Seeed

Committer:
r4z0r7o3
Date:
Wed Feb 04 19:04:54 2015 +0000
Revision:
10:f959b305a571
Parent:
3:4189a10038e6
Child:
11:5b8afec8bee6
Try multiple known auth. keys on classic.  Also fixed all debugging messages so they all end with newlines.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
yihui 3:4189a10038e6 1 #include <NfcTag.h>
yihui 3:4189a10038e6 2 #include <string.h>
yihui 3:4189a10038e6 3 #include <PN532_debug.h>
yihui 3:4189a10038e6 4
yihui 3:4189a10038e6 5 NfcTag::NfcTag()
yihui 3:4189a10038e6 6 {
yihui 3:4189a10038e6 7 _uid = 0;
yihui 3:4189a10038e6 8 _uidLength = 0;
yihui 3:4189a10038e6 9 _tagType = "Unknown";
yihui 3:4189a10038e6 10 _ndefMessage = (NdefMessage*)NULL;
yihui 3:4189a10038e6 11 }
yihui 3:4189a10038e6 12
yihui 3:4189a10038e6 13 NfcTag::NfcTag(uint8_t *uid, unsigned int uidLength)
yihui 3:4189a10038e6 14 {
yihui 3:4189a10038e6 15 _uid = uid;
yihui 3:4189a10038e6 16 _uidLength = uidLength;
yihui 3:4189a10038e6 17 _tagType = "Unknown";
yihui 3:4189a10038e6 18 _ndefMessage = (NdefMessage*)NULL;
yihui 3:4189a10038e6 19 }
yihui 3:4189a10038e6 20
yihui 3:4189a10038e6 21 NfcTag::NfcTag(uint8_t *uid, unsigned int uidLength, string tagType)
yihui 3:4189a10038e6 22 {
yihui 3:4189a10038e6 23 _uid = uid;
yihui 3:4189a10038e6 24 _uidLength = uidLength;
yihui 3:4189a10038e6 25 _tagType = tagType;
yihui 3:4189a10038e6 26 _ndefMessage = (NdefMessage*)NULL;
yihui 3:4189a10038e6 27 }
yihui 3:4189a10038e6 28
yihui 3:4189a10038e6 29 NfcTag::NfcTag(uint8_t *uid, unsigned int uidLength, string tagType, NdefMessage& ndefMessage)
yihui 3:4189a10038e6 30 {
yihui 3:4189a10038e6 31 _uid = uid;
yihui 3:4189a10038e6 32 _uidLength = uidLength;
yihui 3:4189a10038e6 33 _tagType = tagType;
yihui 3:4189a10038e6 34 _ndefMessage = new NdefMessage(ndefMessage);
yihui 3:4189a10038e6 35 }
yihui 3:4189a10038e6 36
yihui 3:4189a10038e6 37 // I don't like this version, but it will use less memory
yihui 3:4189a10038e6 38 NfcTag::NfcTag(uint8_t *uid, unsigned int uidLength, string tagType, const uint8_t *ndefData, const int ndefDataLength)
yihui 3:4189a10038e6 39 {
yihui 3:4189a10038e6 40 _uid = uid;
yihui 3:4189a10038e6 41 _uidLength = uidLength;
yihui 3:4189a10038e6 42 _tagType = tagType;
yihui 3:4189a10038e6 43 _ndefMessage = new NdefMessage(ndefData, ndefDataLength);
yihui 3:4189a10038e6 44 }
yihui 3:4189a10038e6 45
yihui 3:4189a10038e6 46 NfcTag::~NfcTag()
yihui 3:4189a10038e6 47 {
yihui 3:4189a10038e6 48 delete _ndefMessage;
yihui 3:4189a10038e6 49 }
yihui 3:4189a10038e6 50
yihui 3:4189a10038e6 51 NfcTag& NfcTag::operator=(const NfcTag& rhs)
yihui 3:4189a10038e6 52 {
yihui 3:4189a10038e6 53 if (this != &rhs)
yihui 3:4189a10038e6 54 {
yihui 3:4189a10038e6 55 delete _ndefMessage;
yihui 3:4189a10038e6 56 _uid = rhs._uid;
yihui 3:4189a10038e6 57 _uidLength = rhs._uidLength;
yihui 3:4189a10038e6 58 _tagType = rhs._tagType;
yihui 3:4189a10038e6 59 // TODO do I need a copy here?
yihui 3:4189a10038e6 60 _ndefMessage = rhs._ndefMessage;
yihui 3:4189a10038e6 61 }
yihui 3:4189a10038e6 62 return *this;
yihui 3:4189a10038e6 63 }
yihui 3:4189a10038e6 64
yihui 3:4189a10038e6 65 uint8_t NfcTag::getUidLength()
yihui 3:4189a10038e6 66 {
yihui 3:4189a10038e6 67 return _uidLength;
yihui 3:4189a10038e6 68 }
yihui 3:4189a10038e6 69
yihui 3:4189a10038e6 70 void NfcTag::getUid(uint8_t *uid, unsigned int uidLength)
yihui 3:4189a10038e6 71 {
yihui 3:4189a10038e6 72 memcpy(_uid, uid, uidLength);
yihui 3:4189a10038e6 73 }
yihui 3:4189a10038e6 74
yihui 3:4189a10038e6 75 string NfcTag::getUidString()
yihui 3:4189a10038e6 76 {
yihui 3:4189a10038e6 77 string uidString = "";
yihui 3:4189a10038e6 78 #if 0
yihui 3:4189a10038e6 79 for (int i = 0; i < _uidLength; i++)
yihui 3:4189a10038e6 80 {
yihui 3:4189a10038e6 81 if (i > 0)
yihui 3:4189a10038e6 82 {
yihui 3:4189a10038e6 83 uidString += " ";
yihui 3:4189a10038e6 84 }
yihui 3:4189a10038e6 85
r4z0r7o3 10:f959b305a571 86 if (_uid[i] < 0xA)
yihui 3:4189a10038e6 87 {
yihui 3:4189a10038e6 88 uidString += "0";
yihui 3:4189a10038e6 89 }
yihui 3:4189a10038e6 90
yihui 3:4189a10038e6 91 uidString += string((unsigned int)_uid[i], 16);
yihui 3:4189a10038e6 92 }
yihui 3:4189a10038e6 93 uidString.toUpperCase();
yihui 3:4189a10038e6 94 #endif
yihui 3:4189a10038e6 95 return uidString;
yihui 3:4189a10038e6 96 }
yihui 3:4189a10038e6 97
yihui 3:4189a10038e6 98 string NfcTag::getTagType()
yihui 3:4189a10038e6 99 {
yihui 3:4189a10038e6 100 return _tagType;
yihui 3:4189a10038e6 101 }
yihui 3:4189a10038e6 102
yihui 3:4189a10038e6 103 bool NfcTag::hasNdefMessage()
yihui 3:4189a10038e6 104 {
yihui 3:4189a10038e6 105 return (_ndefMessage != NULL);
yihui 3:4189a10038e6 106 }
yihui 3:4189a10038e6 107
yihui 3:4189a10038e6 108 NdefMessage NfcTag::getNdefMessage()
yihui 3:4189a10038e6 109 {
yihui 3:4189a10038e6 110 return *_ndefMessage;
yihui 3:4189a10038e6 111 }
yihui 3:4189a10038e6 112
yihui 3:4189a10038e6 113 void NfcTag::print()
yihui 3:4189a10038e6 114 {
yihui 3:4189a10038e6 115 DMSG("NFC Tag - ");
r4z0r7o3 10:f959b305a571 116 DMSG(_tagType.c_str());
yihui 3:4189a10038e6 117 DMSG("UID - ");
yihui 3:4189a10038e6 118 DMSG(getUidString().c_str());
yihui 3:4189a10038e6 119 if (_ndefMessage == NULL)
yihui 3:4189a10038e6 120 {
yihui 3:4189a10038e6 121 DMSG("\nNo NDEF Message");
yihui 3:4189a10038e6 122 }
yihui 3:4189a10038e6 123 else
yihui 3:4189a10038e6 124 {
yihui 3:4189a10038e6 125 _ndefMessage->print();
yihui 3:4189a10038e6 126 }
r4z0r7o3 10:f959b305a571 127 DMSG("\n");
yihui 3:4189a10038e6 128 }