to colorize a colorful pixel with a simple touch using nfc technology

Dependencies:   Chainable_RGB_LED mbed

use Arch, NFC Shield and Grove - Chainable RGB LED to DIY a touch pixel. Then use an Android with NFC support to colorize it.

The project is on https://github.com/Seeed-Studio/TouchPixel

Committer:
yihui
Date:
Fri Dec 27 01:46:32 2013 +0000
Revision:
0:88960f3eeb2c
initial

Who changed what in which revision?

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