This application provides a set of demos with X-NUCLEO-NFC01A1 expansion board.

Dependencies:   NDefLib X_NUCLEO_NFC01A1 mbed

Fork of X-MBED-NFC1 by Giovanni Visentini

This application provides a set of demos with X-NUCLEO-NFC01A1 expansion board.

The available demos are:

  • SAMPLE_WRITE_URL: write a tag with the ST home page URL
  • SAMPLE_COUNT_CLICK: create a custom tag to count and report the user button clicks.
  • SAMPLE_WRITE_AND_CHANGE_ALL: write a tag with all the supported records and update the tag contents when the user button is pressed.
  • SAMPLE_LOCK_TAG_CONTENT: use the M24SR component API to set the NFC tag as read-only.

To enable the different demos comment/uncomment the SAMPLE_* macros provided in main.cpp .

Committer:
giovannivisentini
Date:
Tue Dec 01 16:01:24 2015 +0000
Revision:
3:f7f818ee694e
Parent:
2:0648c1561eb2
Child:
4:f40b3505070c
create a sample main + semplify the class constuction

Who changed what in which revision?

UserRevisionLine numberNew contents of line
giovannivisentini 3:f7f818ee694e 1 #if 0
giovannivisentini 0:674813bd5ec9 2 #include "mbed.h"
giovannivisentini 0:674813bd5ec9 3
giovannivisentini 0:674813bd5ec9 4 #include "Type4NfcTagSTM24SR.h"
giovannivisentini 0:674813bd5ec9 5
giovannivisentini 0:674813bd5ec9 6 #include "NDefLib/RecordType/RecordAAR.h"
giovannivisentini 0:674813bd5ec9 7 #include "NDefLib/RecordType/RecordSMS.h"
giovannivisentini 0:674813bd5ec9 8 #include "NDefLib/RecordType/RecordGeo.h"
giovannivisentini 1:6d202b62ed68 9 #include "NDefLib/RecordType/RecordURI.h"
giovannivisentini 0:674813bd5ec9 10 #include "NDefLib/RecordType/RecordMail.h"
giovannivisentini 0:674813bd5ec9 11 #include "NDefLib/RecordType/RecordText.h"
giovannivisentini 0:674813bd5ec9 12 #include "NDefLib/RecordType/RecordMimeType.h"
giovannivisentini 1:6d202b62ed68 13 #include "NDefLib/RecordType/RecordVCard.h"
giovannivisentini 0:674813bd5ec9 14
giovannivisentini 0:674813bd5ec9 15 #include "X_NUCLEO_NFC01A1.h"
giovannivisentini 0:674813bd5ec9 16
giovannivisentini 0:674813bd5ec9 17 Serial pc(SERIAL_TX, SERIAL_RX);
giovannivisentini 0:674813bd5ec9 18
giovannivisentini 0:674813bd5ec9 19 DigitalOut myled(LED1);
giovannivisentini 0:674813bd5ec9 20
giovannivisentini 0:674813bd5ec9 21 void shiftLed(DigitalOut &led1,DigitalOut &led2,DigitalOut &led3){
giovannivisentini 0:674813bd5ec9 22 const uint8_t prevLed1=led1;
giovannivisentini 0:674813bd5ec9 23 const uint8_t prevLed2=led2;
giovannivisentini 0:674813bd5ec9 24 const uint8_t prevLed3=led3;
giovannivisentini 0:674813bd5ec9 25 led1=prevLed3;
giovannivisentini 0:674813bd5ec9 26 led2=prevLed1;
giovannivisentini 0:674813bd5ec9 27 led3=prevLed2;
giovannivisentini 0:674813bd5ec9 28 }
giovannivisentini 0:674813bd5ec9 29
giovannivisentini 1:6d202b62ed68 30 static const uint32_t MAX_WRITE_TRY=1;
giovannivisentini 0:674813bd5ec9 31
giovannivisentini 2:0648c1561eb2 32 void setNFCTag(NDefLib::Type4NfcTag &tag){
giovannivisentini 0:674813bd5ec9 33
giovannivisentini 0:674813bd5ec9 34 bool writeStatus,closeStatus;
giovannivisentini 0:674813bd5ec9 35 if(tag.openSession()){
giovannivisentini 0:674813bd5ec9 36 NDefLib::Message msg;
giovannivisentini 0:674813bd5ec9 37
giovannivisentini 0:674813bd5ec9 38 NDefLib::RecordAAR rAAR("com.st.BlueMS");
giovannivisentini 0:674813bd5ec9 39 msg.addRecord(&rAAR);
giovannivisentini 0:674813bd5ec9 40
giovannivisentini 0:674813bd5ec9 41 NDefLib::RecordSMS rSMS("123456789","st.com.BlueMS");
giovannivisentini 0:674813bd5ec9 42 msg.addRecord(&rSMS);
giovannivisentini 0:674813bd5ec9 43
giovannivisentini 2:0648c1561eb2 44 NDefLib::RecordGeo rGeo(123.123,-456.789);
giovannivisentini 0:674813bd5ec9 45 msg.addRecord(&rGeo);
giovannivisentini 0:674813bd5ec9 46
giovannivisentini 1:6d202b62ed68 47 NDefLib::RecordURI rUri(NDefLib::RecordURI::HTTP_WWW,"http://www.st.com");
giovannivisentini 0:674813bd5ec9 48 msg.addRecord(&rUri);
giovannivisentini 0:674813bd5ec9 49
giovannivisentini 0:674813bd5ec9 50 NDefLib::RecordMail rMail("mail@st.com","ciao","da nfc tag");
giovannivisentini 0:674813bd5ec9 51 msg.addRecord(&rMail);
giovannivisentini 0:674813bd5ec9 52
giovannivisentini 2:0648c1561eb2 53 NDefLib::RecordMimeType rText1("text/plain",(const uint8_t*)"ciao",4);
giovannivisentini 0:674813bd5ec9 54 msg.addRecord(&rText1);
giovannivisentini 0:674813bd5ec9 55
giovannivisentini 0:674813bd5ec9 56 NDefLib::RecordText rText3(NDefLib::RecordText::UTF8,"it","ciao");
giovannivisentini 0:674813bd5ec9 57 msg.addRecord(&rText3);
giovannivisentini 0:674813bd5ec9 58
giovannivisentini 1:6d202b62ed68 59 NDefLib::RecordVCard::VCardInfo_t cardInfo;
giovannivisentini 2:0648c1561eb2 60 cardInfo[NDefLib::RecordVCard::FORMATTED_NAME]="prova prova1";
giovannivisentini 1:6d202b62ed68 61 cardInfo[NDefLib::RecordVCard::ADDRESS_HOME]=";;1 Main St.;Springfield;IL;12345;USA";
giovannivisentini 1:6d202b62ed68 62 cardInfo[NDefLib::RecordVCard::ADDRESS_WORK]=";;2 Main St.;Springfield;IL;12345;USA";
giovannivisentini 1:6d202b62ed68 63 cardInfo[NDefLib::RecordVCard::EMAIL_WORK]="workmail@st.com";
giovannivisentini 1:6d202b62ed68 64 cardInfo[NDefLib::RecordVCard::EMAIL_HOME]="homemail@st.com";
giovannivisentini 1:6d202b62ed68 65 cardInfo[NDefLib::RecordVCard::GEO]="39.95;-75.1667";
giovannivisentini 1:6d202b62ed68 66 cardInfo[NDefLib::RecordVCard::IMPP]="aim:johndoe@aol.com";
giovannivisentini 2:0648c1561eb2 67 cardInfo[NDefLib::RecordVCard::NAME]="prova2;prova3";
giovannivisentini 1:6d202b62ed68 68 cardInfo[NDefLib::RecordVCard::NICKNAME]="test";
giovannivisentini 1:6d202b62ed68 69 cardInfo[NDefLib::RecordVCard::NOTE]="A good test";
giovannivisentini 1:6d202b62ed68 70 cardInfo[NDefLib::RecordVCard::ORGANIZATION]="STM";
giovannivisentini 1:6d202b62ed68 71 cardInfo[NDefLib::RecordVCard::TEL_HOME]="123";
giovannivisentini 1:6d202b62ed68 72 cardInfo[NDefLib::RecordVCard::TEL_MOBILE]="456";
giovannivisentini 1:6d202b62ed68 73 cardInfo[NDefLib::RecordVCard::TEL_WORK]="789";
giovannivisentini 1:6d202b62ed68 74 cardInfo[NDefLib::RecordVCard::TITLE]="King";
giovannivisentini 1:6d202b62ed68 75 cardInfo[NDefLib::RecordVCard::URL]="www.st.com";
giovannivisentini 1:6d202b62ed68 76 cardInfo[NDefLib::RecordVCard::PHOTO_URI]="http://www.st.com/st-web-ui/static/active/en/fragment/multimedia/image/picture/customer_focus.jpg";
giovannivisentini 1:6d202b62ed68 77 NDefLib::RecordVCard rVCard(cardInfo);
giovannivisentini 1:6d202b62ed68 78 msg.addRecord(&rVCard);
giovannivisentini 1:6d202b62ed68 79
giovannivisentini 0:674813bd5ec9 80 uint32_t writeTry=0;
giovannivisentini 0:674813bd5ec9 81 do{
giovannivisentini 0:674813bd5ec9 82 writeStatus = tag.write(msg);
giovannivisentini 0:674813bd5ec9 83 writeTry++;
giovannivisentini 0:674813bd5ec9 84 }while(!writeStatus && writeTry<MAX_WRITE_TRY);
giovannivisentini 0:674813bd5ec9 85
giovannivisentini 0:674813bd5ec9 86 closeStatus = tag.closeSession();
giovannivisentini 0:674813bd5ec9 87
giovannivisentini 0:674813bd5ec9 88 }else
giovannivisentini 0:674813bd5ec9 89 pc.printf("Error open Session\n\r");
giovannivisentini 0:674813bd5ec9 90
giovannivisentini 0:674813bd5ec9 91 if(writeStatus)
giovannivisentini 0:674813bd5ec9 92 pc.printf("writeOk\n\r");
giovannivisentini 0:674813bd5ec9 93 else
giovannivisentini 0:674813bd5ec9 94 pc.printf("writeFail\n\r");
giovannivisentini 0:674813bd5ec9 95
giovannivisentini 0:674813bd5ec9 96 if(closeStatus)
giovannivisentini 0:674813bd5ec9 97 pc.printf("closeOk\n\r");
giovannivisentini 0:674813bd5ec9 98 else
giovannivisentini 0:674813bd5ec9 99 pc.printf("CloseFail\n\r");
giovannivisentini 0:674813bd5ec9 100
giovannivisentini 0:674813bd5ec9 101 /*
giovannivisentini 0:674813bd5ec9 102 sURI_Info URI;
giovannivisentini 0:674813bd5ec9 103 sAARInfo aar;
giovannivisentini 0:674813bd5ec9 104 sSMSInfo sms;
giovannivisentini 0:674813bd5ec9 105 std::strcpy(sms.PhoneNumber,"123456789\0");
giovannivisentini 0:674813bd5ec9 106 std::strcpy(sms.Message,"st.com.BlueMS\0");
giovannivisentini 0:674813bd5ec9 107 std::strcpy(sms.Information,"\0");
giovannivisentini 0:674813bd5ec9 108
giovannivisentini 0:674813bd5ec9 109 std::strcpy(aar.PakageName,"st.com.BlueMS");
giovannivisentini 0:674813bd5ec9 110
giovannivisentini 0:674813bd5ec9 111 // Prepare URI NDEF message content
giovannivisentini 0:674813bd5ec9 112 std::strcpy(URI.protocol,URI_ID_0x01_STRING);
giovannivisentini 0:674813bd5ec9 113 std::strcpy(URI.URI_Message,"st3.com");
giovannivisentini 0:674813bd5ec9 114 std::strcpy(URI.Information,"\0");
giovannivisentini 0:674813bd5ec9 115
giovannivisentini 0:674813bd5ec9 116
giovannivisentini 0:674813bd5ec9 117 while (TT4_Init() != NFC_OK);
giovannivisentini 0:674813bd5ec9 118 // Prepare URI NDEF message content
giovannivisentini 0:674813bd5ec9 119 std::strcpy(URI.protocol,URI_ID_0x01_STRING);
giovannivisentini 0:674813bd5ec9 120 std::strcpy(URI.URI_Message,"st2.com");
giovannivisentini 0:674813bd5ec9 121 std::strcpy(URI.Information,"\0");
giovannivisentini 0:674813bd5ec9 122 //while (TT4_WriteURI(&URI) != NFC_OK);
giovannivisentini 0:674813bd5ec9 123 while (TT4_WriteSMS(&sms) != NFC_OK);
giovannivisentini 0:674813bd5ec9 124 //while (TT4_Write(&sms) != NFC_OK);
giovannivisentini 0:674813bd5ec9 125 */
giovannivisentini 0:674813bd5ec9 126 }
giovannivisentini 0:674813bd5ec9 127
giovannivisentini 1:6d202b62ed68 128 void printRecord(NDefLib::Record *r){
giovannivisentini 1:6d202b62ed68 129 using namespace NDefLib;
giovannivisentini 1:6d202b62ed68 130 switch(r->getType()){
giovannivisentini 1:6d202b62ed68 131 case Record::TYPE_TEXT: {
giovannivisentini 1:6d202b62ed68 132 RecordText *temp = (RecordText*)r;
giovannivisentini 1:6d202b62ed68 133 pc.printf("Read Text: %s\r\n",temp->getText().c_str());
giovannivisentini 1:6d202b62ed68 134 break; }
giovannivisentini 1:6d202b62ed68 135 case Record::TYPE_AAR:{
giovannivisentini 1:6d202b62ed68 136 RecordAAR *temp = (RecordAAR*)r;
giovannivisentini 1:6d202b62ed68 137 pc.printf("Read ARR: %s\r\n",temp->getPackage().c_str());
giovannivisentini 1:6d202b62ed68 138 break; }
giovannivisentini 1:6d202b62ed68 139 case Record::TYPE_MIME:{
giovannivisentini 1:6d202b62ed68 140 RecordMimeType *temp = (RecordMimeType*)r;
giovannivisentini 1:6d202b62ed68 141 pc.printf("Read mimeType: %s\r\n",temp->getMimeType().c_str());
giovannivisentini 1:6d202b62ed68 142 pc.printf("Read mimeData: %s\r\n",
giovannivisentini 1:6d202b62ed68 143 std::string((const char*)temp->getMimeData(),
giovannivisentini 1:6d202b62ed68 144 temp->getMimeDataLenght()).c_str());
giovannivisentini 1:6d202b62ed68 145 break;}
giovannivisentini 1:6d202b62ed68 146 case Record::TYPE_URI:{
giovannivisentini 1:6d202b62ed68 147 RecordURI *temp = (RecordURI*)r;
giovannivisentini 1:6d202b62ed68 148 pc.printf("Read uriId: %d\r\n",temp->getUriId());
giovannivisentini 1:6d202b62ed68 149 pc.printf("Read uriType: %s\r\n",temp->getUriType().c_str());
giovannivisentini 1:6d202b62ed68 150 pc.printf("Read uriContent: %s\r\n",temp->getContent().c_str());
giovannivisentini 1:6d202b62ed68 151 break;}
giovannivisentini 1:6d202b62ed68 152 case Record::TYPE_URI_MAIL:{
giovannivisentini 1:6d202b62ed68 153 RecordMail *temp = (RecordMail*)r;
giovannivisentini 2:0648c1561eb2 154 pc.printf("Read Dest: %s\r\n",temp->getToAddress().c_str());
giovannivisentini 1:6d202b62ed68 155 pc.printf("Read Subject: %s\r\n",temp->getSubject().c_str());
giovannivisentini 1:6d202b62ed68 156 pc.printf("Read Body: %s\r\n",temp->getBody().c_str());
giovannivisentini 1:6d202b62ed68 157 break;}
giovannivisentini 2:0648c1561eb2 158 case Record::TYPE_URI_SMS:{
giovannivisentini 1:6d202b62ed68 159 RecordSMS *temp = (RecordSMS*)r;
giovannivisentini 1:6d202b62ed68 160 pc.printf("Read number: %s\r\n",temp->getNumber().c_str());
giovannivisentini 1:6d202b62ed68 161 pc.printf("Read message: %s\r\n",temp->getMessagge().c_str());
giovannivisentini 1:6d202b62ed68 162 break;}
giovannivisentini 2:0648c1561eb2 163 case Record::TYPE_URI_GEOLOCATION:{
giovannivisentini 1:6d202b62ed68 164 RecordGeo *temp = (RecordGeo*)r;
giovannivisentini 2:0648c1561eb2 165 pc.printf("Read lat: %f\r\n",temp->getLatitude());
giovannivisentini 2:0648c1561eb2 166 pc.printf("Read long: %f\r\n",temp->getLongitude());
giovannivisentini 1:6d202b62ed68 167 break;}
giovannivisentini 1:6d202b62ed68 168 case Record::TYPE_MIME_VCARD:{
giovannivisentini 2:0648c1561eb2 169 const RecordVCard *temp = (RecordVCard*)r;
giovannivisentini 1:6d202b62ed68 170 pc.printf("Read Name: %s\r\n",(*temp)[RecordVCard::NAME].c_str());
giovannivisentini 1:6d202b62ed68 171 pc.printf("Read Mail: %s\r\n",(*temp)[RecordVCard::EMAIL_WORK].c_str());
giovannivisentini 2:0648c1561eb2 172 pc.printf("Read ORG: %s\r\n",(*temp)[RecordVCard::ORGANIZATION].c_str());
giovannivisentini 1:6d202b62ed68 173 break;}
giovannivisentini 1:6d202b62ed68 174 case Record::TYPE_UNKNOWN:{
giovannivisentini 1:6d202b62ed68 175 pc.printf("Unknown record\r\n");
giovannivisentini 1:6d202b62ed68 176 break;}
giovannivisentini 1:6d202b62ed68 177 }//switch
giovannivisentini 1:6d202b62ed68 178 }
giovannivisentini 1:6d202b62ed68 179
giovannivisentini 2:0648c1561eb2 180 void changeRecord(NDefLib::Record *r){
giovannivisentini 1:6d202b62ed68 181 using namespace NDefLib;
giovannivisentini 2:0648c1561eb2 182 switch(r->getType()){
giovannivisentini 2:0648c1561eb2 183 case Record::TYPE_TEXT: {
giovannivisentini 2:0648c1561eb2 184 RecordText *temp = (RecordText*)r;
giovannivisentini 2:0648c1561eb2 185 temp->setText("CIAOCiao");
giovannivisentini 2:0648c1561eb2 186 break; }
giovannivisentini 2:0648c1561eb2 187 case Record::TYPE_AAR:{
giovannivisentini 2:0648c1561eb2 188 RecordAAR *temp = (RecordAAR*)r;
giovannivisentini 2:0648c1561eb2 189 temp->setPackage("set Package Ok");
giovannivisentini 2:0648c1561eb2 190 break; }
giovannivisentini 2:0648c1561eb2 191 case Record::TYPE_MIME:{
giovannivisentini 2:0648c1561eb2 192 RecordMimeType *temp = (RecordMimeType*)r;
giovannivisentini 2:0648c1561eb2 193 temp->copyMimeData((const uint8_t *)"String2",sizeof("String2"));
giovannivisentini 2:0648c1561eb2 194 break;}
giovannivisentini 2:0648c1561eb2 195 case Record::TYPE_URI:{
giovannivisentini 2:0648c1561eb2 196 RecordURI *temp = (RecordURI*)r;
giovannivisentini 2:0648c1561eb2 197 temp->setContent("google.it");
giovannivisentini 2:0648c1561eb2 198 break;}
giovannivisentini 2:0648c1561eb2 199 case Record::TYPE_URI_MAIL:{
giovannivisentini 2:0648c1561eb2 200 RecordMail *temp = (RecordMail*)r;
giovannivisentini 2:0648c1561eb2 201 temp->setToAddress("newMail@st.com");
giovannivisentini 2:0648c1561eb2 202 temp->setSubject("tag change");
giovannivisentini 2:0648c1561eb2 203 temp->setBody("read/change Works!");
giovannivisentini 2:0648c1561eb2 204 break;}
giovannivisentini 2:0648c1561eb2 205 case Record::TYPE_URI_SMS:{
giovannivisentini 2:0648c1561eb2 206 RecordSMS *temp = (RecordSMS*)r;
giovannivisentini 2:0648c1561eb2 207 temp->setMessage("Message Change");
giovannivisentini 2:0648c1561eb2 208 temp->setNumber("0987654321");
giovannivisentini 2:0648c1561eb2 209 break;}
giovannivisentini 2:0648c1561eb2 210 case Record::TYPE_URI_GEOLOCATION:{
giovannivisentini 2:0648c1561eb2 211 RecordGeo *temp = (RecordGeo*)r;
giovannivisentini 2:0648c1561eb2 212 temp->setLatitude(-temp->getLatitude());
giovannivisentini 2:0648c1561eb2 213 temp->setLongitude(-temp->getLongitude());
giovannivisentini 2:0648c1561eb2 214 break;}
giovannivisentini 2:0648c1561eb2 215 case Record::TYPE_MIME_VCARD:{
giovannivisentini 2:0648c1561eb2 216 RecordVCard *temp = (RecordVCard*)r;
giovannivisentini 2:0648c1561eb2 217 (*temp)[RecordVCard::NAME]="name change";
giovannivisentini 2:0648c1561eb2 218 (*temp)[RecordVCard::NICKNAME]="nic change";
giovannivisentini 2:0648c1561eb2 219 break;}
giovannivisentini 2:0648c1561eb2 220 case Record::TYPE_UNKNOWN:{
giovannivisentini 2:0648c1561eb2 221 pc.printf("Unknown record\r\n");
giovannivisentini 2:0648c1561eb2 222 break;}
giovannivisentini 2:0648c1561eb2 223 }//switch
giovannivisentini 2:0648c1561eb2 224 }
giovannivisentini 2:0648c1561eb2 225
giovannivisentini 2:0648c1561eb2 226 void readNfcTag(NDefLib::Type4NfcTag &tag){
giovannivisentini 2:0648c1561eb2 227 using namespace NDefLib;
giovannivisentini 2:0648c1561eb2 228
giovannivisentini 1:6d202b62ed68 229 if(tag.openSession()){
giovannivisentini 1:6d202b62ed68 230 NDefLib::Message readMsg;
giovannivisentini 1:6d202b62ed68 231
giovannivisentini 1:6d202b62ed68 232 tag.read(&readMsg);
giovannivisentini 1:6d202b62ed68 233
giovannivisentini 1:6d202b62ed68 234 if(readMsg.getNRecords()==0){
giovannivisentini 1:6d202b62ed68 235 pc.printf("Error Read\r\n");
giovannivisentini 1:6d202b62ed68 236 }else{
giovannivisentini 1:6d202b62ed68 237 for(uint32_t i=0;i<readMsg.getNRecords();i++){
giovannivisentini 2:0648c1561eb2 238 Record *r = readMsg[i];
giovannivisentini 1:6d202b62ed68 239 printRecord(r);
giovannivisentini 1:6d202b62ed68 240 delete r;
giovannivisentini 1:6d202b62ed68 241 }//for
giovannivisentini 1:6d202b62ed68 242 }//if-else
giovannivisentini 1:6d202b62ed68 243
giovannivisentini 1:6d202b62ed68 244 tag.closeSession();
giovannivisentini 1:6d202b62ed68 245 }else{
giovannivisentini 1:6d202b62ed68 246 pc.printf("Error open Session2\n\r");
giovannivisentini 1:6d202b62ed68 247 }
giovannivisentini 1:6d202b62ed68 248 }
giovannivisentini 1:6d202b62ed68 249
giovannivisentini 2:0648c1561eb2 250
giovannivisentini 2:0648c1561eb2 251 void changeNfcTag(NDefLib::Type4NfcTag &tag){
giovannivisentini 2:0648c1561eb2 252 using namespace NDefLib;
giovannivisentini 2:0648c1561eb2 253
giovannivisentini 2:0648c1561eb2 254 if(tag.openSession()){
giovannivisentini 2:0648c1561eb2 255 NDefLib::Message readMsg;
giovannivisentini 2:0648c1561eb2 256
giovannivisentini 2:0648c1561eb2 257 tag.read(&readMsg);
giovannivisentini 2:0648c1561eb2 258
giovannivisentini 2:0648c1561eb2 259 if(readMsg.getNRecords()==0){
giovannivisentini 2:0648c1561eb2 260 pc.printf("Error Read\r\n");
giovannivisentini 2:0648c1561eb2 261 }else{
giovannivisentini 2:0648c1561eb2 262 for(uint32_t i=0;i<readMsg.getNRecords();i++){
giovannivisentini 2:0648c1561eb2 263 Record *r = readMsg[i];
giovannivisentini 2:0648c1561eb2 264 changeRecord(r);
giovannivisentini 2:0648c1561eb2 265 }//for
giovannivisentini 2:0648c1561eb2 266 tag.write(readMsg);
giovannivisentini 2:0648c1561eb2 267 }//if-else
giovannivisentini 2:0648c1561eb2 268
giovannivisentini 2:0648c1561eb2 269 tag.closeSession();
giovannivisentini 2:0648c1561eb2 270 }else{
giovannivisentini 2:0648c1561eb2 271 pc.printf("Error open SessionChange\n\r");
giovannivisentini 2:0648c1561eb2 272 }
giovannivisentini 2:0648c1561eb2 273 }
giovannivisentini 2:0648c1561eb2 274
giovannivisentini 2:0648c1561eb2 275 static bool buttonPress=false;
giovannivisentini 2:0648c1561eb2 276 void setButtonPress(){
giovannivisentini 2:0648c1561eb2 277 buttonPress=true;
giovannivisentini 2:0648c1561eb2 278 }
giovannivisentini 2:0648c1561eb2 279
giovannivisentini 0:674813bd5ec9 280 int main() {
giovannivisentini 3:f7f818ee694e 281 I2C i2cChannel(X_NUCLEO_NFC01A1::DEFAULT_SDA_PIN,X_NUCLEO_NFC01A1::DEFAULT_SDL_PIN);
giovannivisentini 0:674813bd5ec9 282 i2cChannel.frequency(400000);
giovannivisentini 0:674813bd5ec9 283 X_NUCLEO_NFC01A1 *nfcNucleo = X_NUCLEO_NFC01A1::Instance(i2cChannel);
giovannivisentini 2:0648c1561eb2 284 Type4NfcTagSTM24SR tag(nfcNucleo->getM24SR());
giovannivisentini 2:0648c1561eb2 285 InterruptIn mybutton(USER_BUTTON);
giovannivisentini 1:6d202b62ed68 286 pc.printf("Hello World !\n\r");
giovannivisentini 0:674813bd5ec9 287 nfcNucleo->getLed1()=1;
giovannivisentini 0:674813bd5ec9 288 nfcNucleo->getLed2()=0;
giovannivisentini 0:674813bd5ec9 289 nfcNucleo->getLed3()=0;
giovannivisentini 0:674813bd5ec9 290
giovannivisentini 2:0648c1561eb2 291 setNFCTag(tag);
giovannivisentini 2:0648c1561eb2 292 readNfcTag(tag);
giovannivisentini 2:0648c1561eb2 293
giovannivisentini 2:0648c1561eb2 294 mybutton.fall(setButtonPress);
giovannivisentini 2:0648c1561eb2 295
giovannivisentini 0:674813bd5ec9 296 while(1) {
giovannivisentini 0:674813bd5ec9 297 wait(1);
giovannivisentini 0:674813bd5ec9 298 myled = !myled;
giovannivisentini 0:674813bd5ec9 299 shiftLed(nfcNucleo->getLed1(),nfcNucleo->getLed2(),nfcNucleo->getLed3());
giovannivisentini 2:0648c1561eb2 300 if(buttonPress){
giovannivisentini 2:0648c1561eb2 301 changeNfcTag(tag);
giovannivisentini 2:0648c1561eb2 302 readNfcTag(tag);
giovannivisentini 2:0648c1561eb2 303 buttonPress=false;
giovannivisentini 2:0648c1561eb2 304 }
giovannivisentini 1:6d202b62ed68 305 }
giovannivisentini 1:6d202b62ed68 306
giovannivisentini 0:674813bd5ec9 307 }
giovannivisentini 3:f7f818ee694e 308 #endif
giovannivisentini 2:0648c1561eb2 309
giovannivisentini 3:f7f818ee694e 310 #if 0
giovannivisentini 3:f7f818ee694e 311 #include "mbed.h"
giovannivisentini 3:f7f818ee694e 312
giovannivisentini 3:f7f818ee694e 313 #include "Type4NfcTagSTM24SR.h"
giovannivisentini 3:f7f818ee694e 314 #include "NDefLib/RecordType/RecordURI.h"
giovannivisentini 3:f7f818ee694e 315
giovannivisentini 3:f7f818ee694e 316 #include "X_NUCLEO_NFC01A1.h"
giovannivisentini 3:f7f818ee694e 317
giovannivisentini 3:f7f818ee694e 318 int main() {
giovannivisentini 3:f7f818ee694e 319 Serial pc(SERIAL_TX, SERIAL_RX);
giovannivisentini 3:f7f818ee694e 320 I2C i2cChannel(X_NUCLEO_NFC01A1::DEFAULT_SDA_PIN,X_NUCLEO_NFC01A1::DEFAULT_SDL_PIN);
giovannivisentini 3:f7f818ee694e 321 i2cChannel.frequency(400000);
giovannivisentini 3:f7f818ee694e 322 X_NUCLEO_NFC01A1 *nfcNucleo = X_NUCLEO_NFC01A1::Instance(i2cChannel);
giovannivisentini 3:f7f818ee694e 323 //create the wrapper for use the NdefLib
giovannivisentini 3:f7f818ee694e 324 Type4NfcTagSTM24SR tag(nfcNucleo->getM24SR());
giovannivisentini 3:f7f818ee694e 325 pc.printf("System Init done: !\n\r");
giovannivisentini 3:f7f818ee694e 326 //open the i2c session with the nfc chip
giovannivisentini 3:f7f818ee694e 327 if(tag.openSession()){
giovannivisentini 3:f7f818ee694e 328 nfcNucleo->getLed1()=1;
giovannivisentini 3:f7f818ee694e 329
giovannivisentini 3:f7f818ee694e 330 //create the NDef message and record
giovannivisentini 3:f7f818ee694e 331 NDefLib::Message msg;
giovannivisentini 3:f7f818ee694e 332 NDefLib::RecordURI rUri(NDefLib::RecordURI::HTTP_WWW,"st.com");
giovannivisentini 3:f7f818ee694e 333 msg.addRecord(&rUri);
giovannivisentini 3:f7f818ee694e 334
giovannivisentini 3:f7f818ee694e 335 //write the tag
giovannivisentini 3:f7f818ee694e 336 if(tag.write(msg)){
giovannivisentini 3:f7f818ee694e 337 pc.printf("Tag writed \n\r");
giovannivisentini 3:f7f818ee694e 338 nfcNucleo->getLed2()=1;
giovannivisentini 3:f7f818ee694e 339 }
giovannivisentini 3:f7f818ee694e 340
giovannivisentini 3:f7f818ee694e 341
giovannivisentini 3:f7f818ee694e 342 //close the i2c session
giovannivisentini 3:f7f818ee694e 343 if(!tag.closeSession()){
giovannivisentini 3:f7f818ee694e 344 pc.printf("Error Closing the session\n\r");
giovannivisentini 3:f7f818ee694e 345 }else
giovannivisentini 3:f7f818ee694e 346 nfcNucleo->getLed3()=1;
giovannivisentini 3:f7f818ee694e 347 }else
giovannivisentini 3:f7f818ee694e 348 pc.printf("Error open Session\n\r");
giovannivisentini 3:f7f818ee694e 349
giovannivisentini 3:f7f818ee694e 350 return 0;
giovannivisentini 3:f7f818ee694e 351 }
giovannivisentini 3:f7f818ee694e 352
giovannivisentini 3:f7f818ee694e 353 #endif
giovannivisentini 3:f7f818ee694e 354
giovannivisentini 3:f7f818ee694e 355 #if 1
giovannivisentini 3:f7f818ee694e 356
giovannivisentini 3:f7f818ee694e 357 #include "mbed.h"
giovannivisentini 3:f7f818ee694e 358
giovannivisentini 3:f7f818ee694e 359 #include "Type4NfcTagSTM24SR.h"
giovannivisentini 3:f7f818ee694e 360 #include "NDefLib/RecordType/RecordText.h"
giovannivisentini 3:f7f818ee694e 361
giovannivisentini 3:f7f818ee694e 362 #include "X_NUCLEO_NFC01A1.h"
giovannivisentini 3:f7f818ee694e 363
giovannivisentini 3:f7f818ee694e 364 class MyRecord : public NDefLib::RecordText{
giovannivisentini 3:f7f818ee694e 365
giovannivisentini 3:f7f818ee694e 366 private:
giovannivisentini 3:f7f818ee694e 367 char nClickStringBuffer[12];
giovannivisentini 3:f7f818ee694e 368 uint32_t nClick;
giovannivisentini 3:f7f818ee694e 369
giovannivisentini 3:f7f818ee694e 370 void syncTextValue(){
giovannivisentini 3:f7f818ee694e 371 sprintf(nClickStringBuffer,"%d",nClick);
giovannivisentini 3:f7f818ee694e 372 setText(nClickStringBuffer);
giovannivisentini 3:f7f818ee694e 373 }
giovannivisentini 3:f7f818ee694e 374
giovannivisentini 3:f7f818ee694e 375 public:
giovannivisentini 3:f7f818ee694e 376
giovannivisentini 3:f7f818ee694e 377 MyRecord():nClick(0){
giovannivisentini 3:f7f818ee694e 378 syncTextValue();
giovannivisentini 3:f7f818ee694e 379 }
giovannivisentini 3:f7f818ee694e 380
giovannivisentini 3:f7f818ee694e 381 void incrementClick(){
giovannivisentini 3:f7f818ee694e 382 nClick++;
giovannivisentini 3:f7f818ee694e 383 syncTextValue();
giovannivisentini 3:f7f818ee694e 384 }
giovannivisentini 3:f7f818ee694e 385
giovannivisentini 3:f7f818ee694e 386 };
giovannivisentini 3:f7f818ee694e 387
giovannivisentini 3:f7f818ee694e 388 static volatile bool buttonPress=false;
giovannivisentini 3:f7f818ee694e 389
giovannivisentini 3:f7f818ee694e 390 void setButtonPress(){
giovannivisentini 3:f7f818ee694e 391 buttonPress=true;
giovannivisentini 3:f7f818ee694e 392 }//if buttonPress
giovannivisentini 3:f7f818ee694e 393
giovannivisentini 3:f7f818ee694e 394 void writeMessage(X_NUCLEO_NFC01A1 *nfcNucleo,NDefLib::Message &msg){
giovannivisentini 3:f7f818ee694e 395 Type4NfcTagSTM24SR tag(nfcNucleo->getM24SR());
giovannivisentini 3:f7f818ee694e 396 //open the i2c session with the nfc chip
giovannivisentini 3:f7f818ee694e 397 if(tag.openSession()){
giovannivisentini 3:f7f818ee694e 398 nfcNucleo->getLed1()=! nfcNucleo->getLed1();
giovannivisentini 3:f7f818ee694e 399
giovannivisentini 3:f7f818ee694e 400 //write the tag
giovannivisentini 3:f7f818ee694e 401 if(tag.write(msg)){
giovannivisentini 3:f7f818ee694e 402 nfcNucleo->getLed2()=!nfcNucleo->getLed2();
giovannivisentini 3:f7f818ee694e 403 }//if
giovannivisentini 3:f7f818ee694e 404
giovannivisentini 3:f7f818ee694e 405 //close the i2c session
giovannivisentini 3:f7f818ee694e 406 if(tag.closeSession())
giovannivisentini 3:f7f818ee694e 407 nfcNucleo->getLed3()=!nfcNucleo->getLed3();
giovannivisentini 3:f7f818ee694e 408 }//if open session
giovannivisentini 3:f7f818ee694e 409 }
giovannivisentini 3:f7f818ee694e 410
giovannivisentini 3:f7f818ee694e 411 void main() {
giovannivisentini 3:f7f818ee694e 412 I2C i2cChannel(X_NUCLEO_NFC01A1::DEFAULT_SDA_PIN,X_NUCLEO_NFC01A1::DEFAULT_SDL_PIN);
giovannivisentini 3:f7f818ee694e 413 i2cChannel.frequency(400000);
giovannivisentini 3:f7f818ee694e 414
giovannivisentini 3:f7f818ee694e 415 X_NUCLEO_NFC01A1 *nfcNucleo = X_NUCLEO_NFC01A1::Instance(i2cChannel);
giovannivisentini 3:f7f818ee694e 416 //create the wrapper for use the NdefLib
giovannivisentini 3:f7f818ee694e 417 Type4NfcTagSTM24SR tag(nfcNucleo->getM24SR());
giovannivisentini 3:f7f818ee694e 418
giovannivisentini 3:f7f818ee694e 419 InterruptIn userButton(USER_BUTTON);
giovannivisentini 3:f7f818ee694e 420 userButton.fall(setButtonPress);
giovannivisentini 3:f7f818ee694e 421
giovannivisentini 3:f7f818ee694e 422 //create the NDef message and record
giovannivisentini 3:f7f818ee694e 423 NDefLib::Message msg;
giovannivisentini 3:f7f818ee694e 424 MyRecord rClickCount;
giovannivisentini 3:f7f818ee694e 425 msg.addRecord(&rClickCount);
giovannivisentini 3:f7f818ee694e 426
giovannivisentini 3:f7f818ee694e 427 writeMessage(nfcNucleo,msg);
giovannivisentini 3:f7f818ee694e 428
giovannivisentini 3:f7f818ee694e 429 while(1){
giovannivisentini 3:f7f818ee694e 430
giovannivisentini 3:f7f818ee694e 431 if(buttonPress){
giovannivisentini 3:f7f818ee694e 432 rClickCount.incrementClick();
giovannivisentini 3:f7f818ee694e 433 writeMessage(nfcNucleo,msg);
giovannivisentini 3:f7f818ee694e 434 buttonPress=false;
giovannivisentini 3:f7f818ee694e 435 }//if
giovannivisentini 3:f7f818ee694e 436
giovannivisentini 3:f7f818ee694e 437 }//while
giovannivisentini 3:f7f818ee694e 438
giovannivisentini 3:f7f818ee694e 439 }//main
giovannivisentini 3:f7f818ee694e 440
giovannivisentini 3:f7f818ee694e 441 #endif