PN532 NFC shield of Adafruit based on PN532 of Seeed.

Fork of PN532 by Seeed

Committer:
dwini
Date:
Thu Nov 17 11:32:02 2016 +0000
Revision:
11:e7bbcfa61859
Parent:
3:4189a10038e6
Fix use of DMSG instead of printf

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
yihui 3:4189a10038e6 86 if (_uid[i] < 0xF)
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 - ");
yihui 3:4189a10038e6 116 DMSG_INT(_tagType);
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 }
yihui 3:4189a10038e6 127 }