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:
Mon Jan 11 16:10:12 2016 +0000
Revision:
11:283df715f241
Parent:
9:9742acd0c015
Child:
12:c4a778f52d8a
update comments 2

Who changed what in which revision?

UserRevisionLine numberNew contents of line
giovannivisentini 5:3b300c8235b7 1 /**
giovannivisentini 5:3b300c8235b7 2 ******************************************************************************
giovannivisentini 5:3b300c8235b7 3 * @file Sample_writeAndChangeAll.cpp
giovannivisentini 9:9742acd0c015 4 * @author ST / Central Labs
giovannivisentini 9:9742acd0c015 5 * @date 03 Dic 2015
giovannivisentini 5:3b300c8235b7 6 * @brief This demo write an ndef message different records, when the user press the buttun
giovannivisentini 5:3b300c8235b7 7 * read the tag, change some data and write it again
giovannivisentini 5:3b300c8235b7 8 ******************************************************************************
giovannivisentini 5:3b300c8235b7 9 *
giovannivisentini 5:3b300c8235b7 10 * COPYRIGHT(c) 2015 STMicroelectronics
giovannivisentini 5:3b300c8235b7 11 *
giovannivisentini 5:3b300c8235b7 12 * Redistribution and use in source and binary forms, with or without modification,
giovannivisentini 5:3b300c8235b7 13 * are permitted provided that the following conditions are met:
giovannivisentini 5:3b300c8235b7 14 * 1. Redistributions of source code must retain the above copyright notice,
giovannivisentini 5:3b300c8235b7 15 * this list of conditions and the following disclaimer.
giovannivisentini 5:3b300c8235b7 16 * 2. Redistributions in binary form must reproduce the above copyright notice,
giovannivisentini 5:3b300c8235b7 17 * this list of conditions and the following disclaimer in the documentation
giovannivisentini 5:3b300c8235b7 18 * and/or other materials provided with the distribution.
giovannivisentini 5:3b300c8235b7 19 * 3. Neither the name of STMicroelectronics nor the names of its contributors
giovannivisentini 5:3b300c8235b7 20 * may be used to endorse or promote products derived from this software
giovannivisentini 5:3b300c8235b7 21 * without specific prior written permission.
giovannivisentini 5:3b300c8235b7 22 *
giovannivisentini 5:3b300c8235b7 23 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
giovannivisentini 5:3b300c8235b7 24 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
giovannivisentini 5:3b300c8235b7 25 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
giovannivisentini 5:3b300c8235b7 26 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
giovannivisentini 5:3b300c8235b7 27 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
giovannivisentini 5:3b300c8235b7 28 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
giovannivisentini 5:3b300c8235b7 29 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
giovannivisentini 5:3b300c8235b7 30 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
giovannivisentini 5:3b300c8235b7 31 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
giovannivisentini 5:3b300c8235b7 32 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
giovannivisentini 5:3b300c8235b7 33 *
giovannivisentini 5:3b300c8235b7 34 ******************************************************************************
giovannivisentini 5:3b300c8235b7 35 */
giovannivisentini 5:3b300c8235b7 36
giovannivisentini 4:f40b3505070c 37 #include "mbed.h"
giovannivisentini 4:f40b3505070c 38
giovannivisentini 9:9742acd0c015 39 #include "NDefLib/NDefNfcTag.h"
giovannivisentini 4:f40b3505070c 40
giovannivisentini 4:f40b3505070c 41 #include "NDefLib/RecordType/RecordAAR.h"
giovannivisentini 4:f40b3505070c 42 #include "NDefLib/RecordType/RecordSMS.h"
giovannivisentini 4:f40b3505070c 43 #include "NDefLib/RecordType/RecordGeo.h"
giovannivisentini 4:f40b3505070c 44 #include "NDefLib/RecordType/RecordURI.h"
giovannivisentini 4:f40b3505070c 45 #include "NDefLib/RecordType/RecordMail.h"
giovannivisentini 4:f40b3505070c 46 #include "NDefLib/RecordType/RecordText.h"
giovannivisentini 4:f40b3505070c 47 #include "NDefLib/RecordType/RecordMimeType.h"
giovannivisentini 4:f40b3505070c 48 #include "NDefLib/RecordType/RecordVCard.h"
giovannivisentini 4:f40b3505070c 49
giovannivisentini 4:f40b3505070c 50 #include "X_NUCLEO_NFC01A1.h"
giovannivisentini 4:f40b3505070c 51
giovannivisentini 11:283df715f241 52 static Serial pc(SERIAL_TX, SERIAL_RX); ///serial console
giovannivisentini 11:283df715f241 53
giovannivisentini 4:f40b3505070c 54
giovannivisentini 11:283df715f241 55 /**
giovannivisentini 11:283df715f241 56 * shift the led status between the 3 leds
giovannivisentini 11:283df715f241 57 */
giovannivisentini 4:f40b3505070c 58 static void shiftLed(DigitalOut &led1,DigitalOut &led2,DigitalOut &led3){
giovannivisentini 4:f40b3505070c 59 const uint8_t prevLed1=led1;
giovannivisentini 4:f40b3505070c 60 const uint8_t prevLed2=led2;
giovannivisentini 4:f40b3505070c 61 const uint8_t prevLed3=led3;
giovannivisentini 4:f40b3505070c 62 led1=prevLed3;
giovannivisentini 4:f40b3505070c 63 led2=prevLed1;
giovannivisentini 4:f40b3505070c 64 led3=prevLed2;
giovannivisentini 4:f40b3505070c 65 }
giovannivisentini 4:f40b3505070c 66
giovannivisentini 11:283df715f241 67 /**
giovannivisentini 11:283df715f241 68 * Create a message that contains all the possible records, and write it in the tag
giovannivisentini 11:283df715f241 69 * @param tag nfc tag where write the message
giovannivisentini 11:283df715f241 70 */
giovannivisentini 9:9742acd0c015 71 static void setNFCTag(NDefLib::NDefNfcTag &tag){
giovannivisentini 4:f40b3505070c 72
giovannivisentini 4:f40b3505070c 73 bool writeStatus,closeStatus;
giovannivisentini 4:f40b3505070c 74 if(tag.openSession()){
giovannivisentini 4:f40b3505070c 75 NDefLib::Message msg;
giovannivisentini 4:f40b3505070c 76
giovannivisentini 4:f40b3505070c 77 NDefLib::RecordAAR rAAR("com.st.BlueMS");
giovannivisentini 4:f40b3505070c 78 msg.addRecord(&rAAR);
giovannivisentini 4:f40b3505070c 79
giovannivisentini 4:f40b3505070c 80 NDefLib::RecordSMS rSMS("123456789","st.com.BlueMS");
giovannivisentini 4:f40b3505070c 81 msg.addRecord(&rSMS);
giovannivisentini 4:f40b3505070c 82
giovannivisentini 4:f40b3505070c 83 NDefLib::RecordGeo rGeo(123.123,-456.789);
giovannivisentini 4:f40b3505070c 84 msg.addRecord(&rGeo);
giovannivisentini 4:f40b3505070c 85
giovannivisentini 4:f40b3505070c 86 NDefLib::RecordURI rUri(NDefLib::RecordURI::HTTP_WWW,"http://www.st.com");
giovannivisentini 4:f40b3505070c 87 msg.addRecord(&rUri);
giovannivisentini 4:f40b3505070c 88
giovannivisentini 4:f40b3505070c 89 NDefLib::RecordMail rMail("mail@st.com","ciao","da nfc tag");
giovannivisentini 4:f40b3505070c 90 msg.addRecord(&rMail);
giovannivisentini 4:f40b3505070c 91
giovannivisentini 4:f40b3505070c 92 NDefLib::RecordMimeType rText1("text/plain",(const uint8_t*)"ciao",4);
giovannivisentini 4:f40b3505070c 93 msg.addRecord(&rText1);
giovannivisentini 4:f40b3505070c 94
giovannivisentini 4:f40b3505070c 95 NDefLib::RecordText rText3(NDefLib::RecordText::UTF8,"it","ciao");
giovannivisentini 4:f40b3505070c 96 msg.addRecord(&rText3);
giovannivisentini 4:f40b3505070c 97
giovannivisentini 4:f40b3505070c 98 NDefLib::RecordVCard::VCardInfo_t cardInfo;
giovannivisentini 4:f40b3505070c 99 cardInfo[NDefLib::RecordVCard::FORMATTED_NAME]="prova prova1";
giovannivisentini 4:f40b3505070c 100 cardInfo[NDefLib::RecordVCard::ADDRESS_HOME]=";;1 Main St.;Springfield;IL;12345;USA";
giovannivisentini 4:f40b3505070c 101 cardInfo[NDefLib::RecordVCard::ADDRESS_WORK]=";;2 Main St.;Springfield;IL;12345;USA";
giovannivisentini 4:f40b3505070c 102 cardInfo[NDefLib::RecordVCard::EMAIL_WORK]="workmail@st.com";
giovannivisentini 4:f40b3505070c 103 cardInfo[NDefLib::RecordVCard::EMAIL_HOME]="homemail@st.com";
giovannivisentini 4:f40b3505070c 104 cardInfo[NDefLib::RecordVCard::GEO]="39.95;-75.1667";
giovannivisentini 4:f40b3505070c 105 cardInfo[NDefLib::RecordVCard::IMPP]="aim:johndoe@aol.com";
giovannivisentini 4:f40b3505070c 106 cardInfo[NDefLib::RecordVCard::NAME]="prova2;prova3";
giovannivisentini 4:f40b3505070c 107 cardInfo[NDefLib::RecordVCard::NICKNAME]="test";
giovannivisentini 4:f40b3505070c 108 cardInfo[NDefLib::RecordVCard::NOTE]="A good test";
giovannivisentini 4:f40b3505070c 109 cardInfo[NDefLib::RecordVCard::ORGANIZATION]="STM";
giovannivisentini 4:f40b3505070c 110 cardInfo[NDefLib::RecordVCard::TEL_HOME]="123";
giovannivisentini 4:f40b3505070c 111 cardInfo[NDefLib::RecordVCard::TEL_MOBILE]="456";
giovannivisentini 4:f40b3505070c 112 cardInfo[NDefLib::RecordVCard::TEL_WORK]="789";
giovannivisentini 4:f40b3505070c 113 cardInfo[NDefLib::RecordVCard::TITLE]="King";
giovannivisentini 4:f40b3505070c 114 cardInfo[NDefLib::RecordVCard::URL]="www.st.com";
giovannivisentini 4:f40b3505070c 115 cardInfo[NDefLib::RecordVCard::PHOTO_URI]="http://www.st.com/st-web-ui/static/active/en/fragment/multimedia/image/picture/customer_focus.jpg";
giovannivisentini 4:f40b3505070c 116 NDefLib::RecordVCard rVCard(cardInfo);
giovannivisentini 4:f40b3505070c 117 msg.addRecord(&rVCard);
giovannivisentini 4:f40b3505070c 118
giovannivisentini 4:f40b3505070c 119 writeStatus = tag.write(msg);
giovannivisentini 4:f40b3505070c 120
giovannivisentini 4:f40b3505070c 121 closeStatus = tag.closeSession();
giovannivisentini 4:f40b3505070c 122
giovannivisentini 4:f40b3505070c 123 }else
giovannivisentini 4:f40b3505070c 124 pc.printf("Error open Session\n\r");
giovannivisentini 4:f40b3505070c 125
giovannivisentini 4:f40b3505070c 126 if(writeStatus)
giovannivisentini 4:f40b3505070c 127 pc.printf("writeOk\n\r");
giovannivisentini 4:f40b3505070c 128 else
giovannivisentini 4:f40b3505070c 129 pc.printf("writeFail\n\r");
giovannivisentini 4:f40b3505070c 130
giovannivisentini 4:f40b3505070c 131 if(closeStatus)
giovannivisentini 4:f40b3505070c 132 pc.printf("closeOk\n\r");
giovannivisentini 4:f40b3505070c 133 else
giovannivisentini 4:f40b3505070c 134 pc.printf("CloseFail\n\r");
giovannivisentini 4:f40b3505070c 135 }
giovannivisentini 4:f40b3505070c 136
giovannivisentini 11:283df715f241 137 /**
giovannivisentini 11:283df715f241 138 * Print the record content
giovannivisentini 11:283df715f241 139 * @param r record to print
giovannivisentini 11:283df715f241 140 */
giovannivisentini 11:283df715f241 141 static void printRecord(NDefLib::Record *const r){
giovannivisentini 4:f40b3505070c 142 using namespace NDefLib;
giovannivisentini 4:f40b3505070c 143 switch(r->getType()){
giovannivisentini 4:f40b3505070c 144 case Record::TYPE_TEXT: {
giovannivisentini 11:283df715f241 145 const RecordText *const temp = ( RecordText* )r;
giovannivisentini 4:f40b3505070c 146 pc.printf("Read Text: %s\r\n",temp->getText().c_str());
giovannivisentini 4:f40b3505070c 147 break; }
giovannivisentini 4:f40b3505070c 148 case Record::TYPE_AAR:{
giovannivisentini 11:283df715f241 149 const RecordAAR *const temp = ( RecordAAR* )r;
giovannivisentini 4:f40b3505070c 150 pc.printf("Read ARR: %s\r\n",temp->getPackage().c_str());
giovannivisentini 4:f40b3505070c 151 break; }
giovannivisentini 4:f40b3505070c 152 case Record::TYPE_MIME:{
giovannivisentini 11:283df715f241 153 const RecordMimeType *const temp = ( RecordMimeType* )r;
giovannivisentini 4:f40b3505070c 154 pc.printf("Read mimeType: %s\r\n",temp->getMimeType().c_str());
giovannivisentini 4:f40b3505070c 155 pc.printf("Read mimeData: %s\r\n",
giovannivisentini 4:f40b3505070c 156 std::string((const char*)temp->getMimeData(),
giovannivisentini 4:f40b3505070c 157 temp->getMimeDataLenght()).c_str());
giovannivisentini 4:f40b3505070c 158 break;}
giovannivisentini 4:f40b3505070c 159 case Record::TYPE_URI:{
giovannivisentini 11:283df715f241 160 RecordURI *const temp = (RecordURI*)r;
giovannivisentini 4:f40b3505070c 161 pc.printf("Read uriId: %d\r\n",temp->getUriId());
giovannivisentini 4:f40b3505070c 162 pc.printf("Read uriType: %s\r\n",temp->getUriType().c_str());
giovannivisentini 4:f40b3505070c 163 pc.printf("Read uriContent: %s\r\n",temp->getContent().c_str());
giovannivisentini 4:f40b3505070c 164 break;}
giovannivisentini 4:f40b3505070c 165 case Record::TYPE_URI_MAIL:{
giovannivisentini 11:283df715f241 166 const RecordMail*const temp = (RecordMail*)r;
giovannivisentini 4:f40b3505070c 167 pc.printf("Read Dest: %s\r\n",temp->getToAddress().c_str());
giovannivisentini 4:f40b3505070c 168 pc.printf("Read Subject: %s\r\n",temp->getSubject().c_str());
giovannivisentini 4:f40b3505070c 169 pc.printf("Read Body: %s\r\n",temp->getBody().c_str());
giovannivisentini 4:f40b3505070c 170 break;}
giovannivisentini 4:f40b3505070c 171 case Record::TYPE_URI_SMS:{
giovannivisentini 11:283df715f241 172 const RecordSMS*const temp = (RecordSMS*)r;
giovannivisentini 4:f40b3505070c 173 pc.printf("Read number: %s\r\n",temp->getNumber().c_str());
giovannivisentini 4:f40b3505070c 174 pc.printf("Read message: %s\r\n",temp->getMessagge().c_str());
giovannivisentini 4:f40b3505070c 175 break;}
giovannivisentini 4:f40b3505070c 176 case Record::TYPE_URI_GEOLOCATION:{
giovannivisentini 11:283df715f241 177 const RecordGeo*const temp = (RecordGeo*)r;
giovannivisentini 4:f40b3505070c 178 pc.printf("Read lat: %f\r\n",temp->getLatitude());
giovannivisentini 4:f40b3505070c 179 pc.printf("Read long: %f\r\n",temp->getLongitude());
giovannivisentini 4:f40b3505070c 180 break;}
giovannivisentini 4:f40b3505070c 181 case Record::TYPE_MIME_VCARD:{
giovannivisentini 11:283df715f241 182 const RecordVCard *const temp = (RecordVCard*)r;
giovannivisentini 4:f40b3505070c 183 pc.printf("Read Name: %s\r\n",(*temp)[RecordVCard::NAME].c_str());
giovannivisentini 4:f40b3505070c 184 pc.printf("Read Mail: %s\r\n",(*temp)[RecordVCard::EMAIL_WORK].c_str());
giovannivisentini 4:f40b3505070c 185 pc.printf("Read ORG: %s\r\n",(*temp)[RecordVCard::ORGANIZATION].c_str());
giovannivisentini 4:f40b3505070c 186 break;}
giovannivisentini 4:f40b3505070c 187 case Record::TYPE_UNKNOWN:{
giovannivisentini 4:f40b3505070c 188 pc.printf("Unknown record\r\n");
giovannivisentini 4:f40b3505070c 189 break;}
giovannivisentini 4:f40b3505070c 190 }//switch
giovannivisentini 4:f40b3505070c 191 }
giovannivisentini 4:f40b3505070c 192
giovannivisentini 11:283df715f241 193 /**
giovannivisentini 11:283df715f241 194 * change the record content
giovannivisentini 11:283df715f241 195 * @param r record to change
giovannivisentini 11:283df715f241 196 */
giovannivisentini 11:283df715f241 197 static void changeRecord(NDefLib::Record const* r){
giovannivisentini 4:f40b3505070c 198 using namespace NDefLib;
giovannivisentini 4:f40b3505070c 199 switch(r->getType()){
giovannivisentini 4:f40b3505070c 200 case Record::TYPE_TEXT: {
giovannivisentini 4:f40b3505070c 201 RecordText *temp = (RecordText*)r;
giovannivisentini 4:f40b3505070c 202 temp->setText("CIAOCiao");
giovannivisentini 4:f40b3505070c 203 break; }
giovannivisentini 4:f40b3505070c 204 case Record::TYPE_AAR:{
giovannivisentini 4:f40b3505070c 205 RecordAAR *temp = (RecordAAR*)r;
giovannivisentini 4:f40b3505070c 206 temp->setPackage("set Package Ok");
giovannivisentini 4:f40b3505070c 207 break; }
giovannivisentini 4:f40b3505070c 208 case Record::TYPE_MIME:{
giovannivisentini 4:f40b3505070c 209 RecordMimeType *temp = (RecordMimeType*)r;
giovannivisentini 4:f40b3505070c 210 temp->copyMimeData((const uint8_t *)"String2",sizeof("String2"));
giovannivisentini 4:f40b3505070c 211 break;}
giovannivisentini 4:f40b3505070c 212 case Record::TYPE_URI:{
giovannivisentini 4:f40b3505070c 213 RecordURI *temp = (RecordURI*)r;
giovannivisentini 4:f40b3505070c 214 temp->setContent("google.it");
giovannivisentini 4:f40b3505070c 215 break;}
giovannivisentini 4:f40b3505070c 216 case Record::TYPE_URI_MAIL:{
giovannivisentini 4:f40b3505070c 217 RecordMail *temp = (RecordMail*)r;
giovannivisentini 4:f40b3505070c 218 temp->setToAddress("newMail@st.com");
giovannivisentini 4:f40b3505070c 219 temp->setSubject("tag change");
giovannivisentini 4:f40b3505070c 220 temp->setBody("read/change Works!");
giovannivisentini 4:f40b3505070c 221 break;}
giovannivisentini 4:f40b3505070c 222 case Record::TYPE_URI_SMS:{
giovannivisentini 4:f40b3505070c 223 RecordSMS *temp = (RecordSMS*)r;
giovannivisentini 4:f40b3505070c 224 temp->setMessage("Message Change");
giovannivisentini 4:f40b3505070c 225 temp->setNumber("0987654321");
giovannivisentini 4:f40b3505070c 226 break;}
giovannivisentini 4:f40b3505070c 227 case Record::TYPE_URI_GEOLOCATION:{
giovannivisentini 4:f40b3505070c 228 RecordGeo *temp = (RecordGeo*)r;
giovannivisentini 4:f40b3505070c 229 temp->setLatitude(-temp->getLatitude());
giovannivisentini 4:f40b3505070c 230 temp->setLongitude(-temp->getLongitude());
giovannivisentini 4:f40b3505070c 231 break;}
giovannivisentini 4:f40b3505070c 232 case Record::TYPE_MIME_VCARD:{
giovannivisentini 4:f40b3505070c 233 RecordVCard *temp = (RecordVCard*)r;
giovannivisentini 4:f40b3505070c 234 (*temp)[RecordVCard::NAME]="name change";
giovannivisentini 4:f40b3505070c 235 (*temp)[RecordVCard::NICKNAME]="nic change";
giovannivisentini 4:f40b3505070c 236 break;}
giovannivisentini 4:f40b3505070c 237 case Record::TYPE_UNKNOWN:{
giovannivisentini 4:f40b3505070c 238 pc.printf("Unknown record\r\n");
giovannivisentini 4:f40b3505070c 239 break;}
giovannivisentini 4:f40b3505070c 240 }//switch
giovannivisentini 4:f40b3505070c 241 }
giovannivisentini 4:f40b3505070c 242
giovannivisentini 11:283df715f241 243 /**
giovannivisentini 11:283df715f241 244 * read the nfc message and print the content on the serial console
giovannivisentini 11:283df715f241 245 * @param tag nfc tag where read the content
giovannivisentini 11:283df715f241 246 */
giovannivisentini 9:9742acd0c015 247 static void readNfcTag(NDefLib::NDefNfcTag &tag){
giovannivisentini 4:f40b3505070c 248 using namespace NDefLib;
giovannivisentini 4:f40b3505070c 249
giovannivisentini 4:f40b3505070c 250 if(tag.openSession()){
giovannivisentini 4:f40b3505070c 251 NDefLib::Message readMsg;
giovannivisentini 4:f40b3505070c 252
giovannivisentini 4:f40b3505070c 253 tag.read(&readMsg);
giovannivisentini 4:f40b3505070c 254
giovannivisentini 4:f40b3505070c 255 if(readMsg.getNRecords()==0){
giovannivisentini 4:f40b3505070c 256 pc.printf("Error Read\r\n");
giovannivisentini 4:f40b3505070c 257 }else{
giovannivisentini 4:f40b3505070c 258 for(uint32_t i=0;i<readMsg.getNRecords();i++){
giovannivisentini 4:f40b3505070c 259 Record *r = readMsg[i];
giovannivisentini 4:f40b3505070c 260 printRecord(r);
giovannivisentini 4:f40b3505070c 261 delete r;
giovannivisentini 4:f40b3505070c 262 }//for
giovannivisentini 4:f40b3505070c 263 }//if-else
giovannivisentini 4:f40b3505070c 264
giovannivisentini 4:f40b3505070c 265 tag.closeSession();
giovannivisentini 4:f40b3505070c 266 }else{
giovannivisentini 4:f40b3505070c 267 pc.printf("Error open read Session\n\r");
giovannivisentini 4:f40b3505070c 268 }
giovannivisentini 4:f40b3505070c 269 }
giovannivisentini 4:f40b3505070c 270
giovannivisentini 11:283df715f241 271 /**
giovannivisentini 11:283df715f241 272 * read a nfc message, change the content of each record and write the new message
giovannivisentini 11:283df715f241 273 * @param tag tag where read and write the nfc message
giovannivisentini 11:283df715f241 274 */
giovannivisentini 9:9742acd0c015 275 static void changeNfcTag(NDefLib::NDefNfcTag &tag){
giovannivisentini 9:9742acd0c015 276 using NDefLib::Record;
giovannivisentini 9:9742acd0c015 277 using NDefLib::Message;
giovannivisentini 4:f40b3505070c 278
giovannivisentini 4:f40b3505070c 279 if(tag.openSession()){
giovannivisentini 9:9742acd0c015 280 Message readMsg;
giovannivisentini 4:f40b3505070c 281
giovannivisentini 4:f40b3505070c 282 tag.read(&readMsg);
giovannivisentini 4:f40b3505070c 283
giovannivisentini 4:f40b3505070c 284 if(readMsg.getNRecords()==0){
giovannivisentini 4:f40b3505070c 285 pc.printf("Error Read\r\n");
giovannivisentini 4:f40b3505070c 286 }else{
giovannivisentini 4:f40b3505070c 287 for(uint32_t i=0;i<readMsg.getNRecords();i++){
giovannivisentini 4:f40b3505070c 288 Record *r = readMsg[i];
giovannivisentini 4:f40b3505070c 289 changeRecord(r);
giovannivisentini 4:f40b3505070c 290 }//for
giovannivisentini 4:f40b3505070c 291 tag.write(readMsg);
giovannivisentini 4:f40b3505070c 292 }//if-else
giovannivisentini 4:f40b3505070c 293
giovannivisentini 4:f40b3505070c 294 tag.closeSession();
giovannivisentini 4:f40b3505070c 295 }else{
giovannivisentini 4:f40b3505070c 296 pc.printf("Error open SessionChange\n\r");
giovannivisentini 4:f40b3505070c 297 }
giovannivisentini 4:f40b3505070c 298 }
giovannivisentini 4:f40b3505070c 299
giovannivisentini 11:283df715f241 300 static volatile bool buttonPress=false; /// true when the user press the message
giovannivisentini 4:f40b3505070c 301
giovannivisentini 11:283df715f241 302 /**
giovannivisentini 11:283df715f241 303 * call back called when the user press the button
giovannivisentini 11:283df715f241 304 */
giovannivisentini 4:f40b3505070c 305 static void setButtonPress(){
giovannivisentini 4:f40b3505070c 306 buttonPress=true;
giovannivisentini 11:283df715f241 307 }//if buttonPress
giovannivisentini 4:f40b3505070c 308
giovannivisentini 11:283df715f241 309 /**
giovannivisentini 11:283df715f241 310 * write a message and when the user press the button it read the message, change it and update it
giovannivisentini 11:283df715f241 311 */
giovannivisentini 4:f40b3505070c 312 void sample_writeAndChangeAll() {
giovannivisentini 4:f40b3505070c 313 DigitalOut nucleoLed(LED1);
giovannivisentini 11:283df715f241 314
giovannivisentini 11:283df715f241 315 //instance the board with the default paramiters
giovannivisentini 11:283df715f241 316 I2C i2cChannel(X_NUCLEO_NFC01A1::DEFAULT_SDA_PIN,X_NUCLEO_NFC01A1::DEFAULT_SDL_PIN);
giovannivisentini 4:f40b3505070c 317 X_NUCLEO_NFC01A1 *nfcNucleo = X_NUCLEO_NFC01A1::Instance(i2cChannel);
giovannivisentini 11:283df715f241 318
giovannivisentini 11:283df715f241 319 //get the wrapper for use the NdefLib
giovannivisentini 9:9742acd0c015 320 NDefLib::NDefNfcTag& tag = nfcNucleo->getM24SR().getNDefTag();
giovannivisentini 4:f40b3505070c 321
giovannivisentini 11:283df715f241 322 //switch on the first led
giovannivisentini 4:f40b3505070c 323 nfcNucleo->getLed1()=1;
giovannivisentini 4:f40b3505070c 324 nfcNucleo->getLed2()=0;
giovannivisentini 4:f40b3505070c 325 nfcNucleo->getLed3()=0;
giovannivisentini 4:f40b3505070c 326
giovannivisentini 11:283df715f241 327 //write the message
giovannivisentini 4:f40b3505070c 328 setNFCTag(tag);
giovannivisentini 11:283df715f241 329 //read the message and write it on console
giovannivisentini 4:f40b3505070c 330 readNfcTag(tag);
giovannivisentini 4:f40b3505070c 331
giovannivisentini 11:283df715f241 332 //enable the button
giovannivisentini 11:283df715f241 333 InterruptIn mybutton(USER_BUTTON);
giovannivisentini 4:f40b3505070c 334 mybutton.fall(setButtonPress);
giovannivisentini 4:f40b3505070c 335
giovannivisentini 11:283df715f241 336 //each second change the led status and see if the user press the button
giovannivisentini 4:f40b3505070c 337 while(true) {
giovannivisentini 4:f40b3505070c 338 wait(1);
giovannivisentini 11:283df715f241 339 //update the status
giovannivisentini 4:f40b3505070c 340 nucleoLed = !nucleoLed;
giovannivisentini 4:f40b3505070c 341 shiftLed(nfcNucleo->getLed1(),nfcNucleo->getLed2(),nfcNucleo->getLed3());
giovannivisentini 11:283df715f241 342
giovannivisentini 4:f40b3505070c 343 if(buttonPress){
giovannivisentini 11:283df715f241 344 //update the message content
giovannivisentini 4:f40b3505070c 345 changeNfcTag(tag);
giovannivisentini 11:283df715f241 346 //write the new message on console
giovannivisentini 4:f40b3505070c 347 readNfcTag(tag);
giovannivisentini 4:f40b3505070c 348 buttonPress=false;
giovannivisentini 4:f40b3505070c 349 }
giovannivisentini 4:f40b3505070c 350 }
giovannivisentini 4:f40b3505070c 351
giovannivisentini 4:f40b3505070c 352 }