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:
Thu Nov 19 08:50:18 2015 +0000
Revision:
0:674813bd5ec9
Child:
1:6d202b62ed68
first commit,

Who changed what in which revision?

UserRevisionLine numberNew contents of line
giovannivisentini 0:674813bd5ec9 1 #include <cstring>
giovannivisentini 0:674813bd5ec9 2 #include "mbed.h"
giovannivisentini 0:674813bd5ec9 3
giovannivisentini 0:674813bd5ec9 4 #include "m24sr/m24sr_class.h"
giovannivisentini 0:674813bd5ec9 5 //#include "lib_NDEF/lib_TagType4.h"
giovannivisentini 0:674813bd5ec9 6
giovannivisentini 0:674813bd5ec9 7 #include "Type4NfcTagSTM24SR.h"
giovannivisentini 0:674813bd5ec9 8
giovannivisentini 0:674813bd5ec9 9 #include "NDefLib/RecordType/RecordAAR.h"
giovannivisentini 0:674813bd5ec9 10 #include "NDefLib/RecordType/RecordSMS.h"
giovannivisentini 0:674813bd5ec9 11 #include "NDefLib/RecordType/RecordGeo.h"
giovannivisentini 0:674813bd5ec9 12 #include "NDefLib/RecordType/RecordUri.h"
giovannivisentini 0:674813bd5ec9 13 #include "NDefLib/RecordType/RecordMail.h"
giovannivisentini 0:674813bd5ec9 14 #include "NDefLib/RecordType/RecordText.h"
giovannivisentini 0:674813bd5ec9 15 #include "NDefLib/RecordType/RecordMimeType.h"
giovannivisentini 0:674813bd5ec9 16
giovannivisentini 0:674813bd5ec9 17 #include "X_NUCLEO_NFC01A1.h"
giovannivisentini 0:674813bd5ec9 18
giovannivisentini 0:674813bd5ec9 19 Serial pc(SERIAL_TX, SERIAL_RX);
giovannivisentini 0:674813bd5ec9 20
giovannivisentini 0:674813bd5ec9 21 DigitalOut myled(LED1);
giovannivisentini 0:674813bd5ec9 22
giovannivisentini 0:674813bd5ec9 23 void shiftLed(DigitalOut &led1,DigitalOut &led2,DigitalOut &led3){
giovannivisentini 0:674813bd5ec9 24 const uint8_t prevLed1=led1;
giovannivisentini 0:674813bd5ec9 25 const uint8_t prevLed2=led2;
giovannivisentini 0:674813bd5ec9 26 const uint8_t prevLed3=led3;
giovannivisentini 0:674813bd5ec9 27 led1=prevLed3;
giovannivisentini 0:674813bd5ec9 28 led2=prevLed1;
giovannivisentini 0:674813bd5ec9 29 led3=prevLed2;
giovannivisentini 0:674813bd5ec9 30 }
giovannivisentini 0:674813bd5ec9 31
giovannivisentini 0:674813bd5ec9 32
giovannivisentini 0:674813bd5ec9 33 static const PinName M24SR_SDA=D14;
giovannivisentini 0:674813bd5ec9 34 static const PinName M24SR_SDL=D15;
giovannivisentini 0:674813bd5ec9 35
giovannivisentini 0:674813bd5ec9 36 static const uint32_t MAX_WRITE_TRY=5;
giovannivisentini 0:674813bd5ec9 37
giovannivisentini 0:674813bd5ec9 38 I2C i2cChannel(M24SR_SDA,M24SR_SDL);
giovannivisentini 0:674813bd5ec9 39 M24SR *m24srDrv;
giovannivisentini 0:674813bd5ec9 40
giovannivisentini 0:674813bd5ec9 41 void setNFCTag(){
giovannivisentini 0:674813bd5ec9 42
giovannivisentini 0:674813bd5ec9 43 Type4NfcTagSTM24SR tag(*m24srDrv);
giovannivisentini 0:674813bd5ec9 44 bool writeStatus,closeStatus;
giovannivisentini 0:674813bd5ec9 45 if(tag.openSession()){
giovannivisentini 0:674813bd5ec9 46 NDefLib::Message msg;
giovannivisentini 0:674813bd5ec9 47
giovannivisentini 0:674813bd5ec9 48 NDefLib::RecordAAR rAAR("com.st.BlueMS");
giovannivisentini 0:674813bd5ec9 49 msg.addRecord(&rAAR);
giovannivisentini 0:674813bd5ec9 50
giovannivisentini 0:674813bd5ec9 51 NDefLib::RecordSMS rSMS("123456789","st.com.BlueMS");
giovannivisentini 0:674813bd5ec9 52 msg.addRecord(&rSMS);
giovannivisentini 0:674813bd5ec9 53
giovannivisentini 0:674813bd5ec9 54 NDefLib::RecordGeo rGeo("123.123","456.789");
giovannivisentini 0:674813bd5ec9 55 msg.addRecord(&rGeo);
giovannivisentini 0:674813bd5ec9 56
giovannivisentini 0:674813bd5ec9 57 NDefLib::RecordUri rUri(NDefLib::RecordUri::HTTP_WWW,"http://www.st.com");
giovannivisentini 0:674813bd5ec9 58 msg.addRecord(&rUri);
giovannivisentini 0:674813bd5ec9 59
giovannivisentini 0:674813bd5ec9 60 NDefLib::RecordMail rMail("mail@st.com","ciao","da nfc tag");
giovannivisentini 0:674813bd5ec9 61 msg.addRecord(&rMail);
giovannivisentini 0:674813bd5ec9 62
giovannivisentini 0:674813bd5ec9 63 NDefLib::RecordMimeType rText1("text/plain",(const uint8_t*)"ciao",4);
giovannivisentini 0:674813bd5ec9 64 msg.addRecord(&rText1);
giovannivisentini 0:674813bd5ec9 65
giovannivisentini 0:674813bd5ec9 66 NDefLib::RecordText rText2("ciao");
giovannivisentini 0:674813bd5ec9 67 msg.addRecord(&rText2);
giovannivisentini 0:674813bd5ec9 68
giovannivisentini 0:674813bd5ec9 69 NDefLib::RecordText rText3(NDefLib::RecordText::UTF8,"it","ciao");
giovannivisentini 0:674813bd5ec9 70 msg.addRecord(&rText3);
giovannivisentini 0:674813bd5ec9 71
giovannivisentini 0:674813bd5ec9 72 uint32_t writeTry=0;
giovannivisentini 0:674813bd5ec9 73 do{
giovannivisentini 0:674813bd5ec9 74 writeStatus = tag.write(msg);
giovannivisentini 0:674813bd5ec9 75 writeTry++;
giovannivisentini 0:674813bd5ec9 76 }while(!writeStatus && writeTry<MAX_WRITE_TRY);
giovannivisentini 0:674813bd5ec9 77
giovannivisentini 0:674813bd5ec9 78 closeStatus = tag.closeSession();
giovannivisentini 0:674813bd5ec9 79
giovannivisentini 0:674813bd5ec9 80 }else
giovannivisentini 0:674813bd5ec9 81 pc.printf("Error open Session\n\r");
giovannivisentini 0:674813bd5ec9 82
giovannivisentini 0:674813bd5ec9 83 if(writeStatus)
giovannivisentini 0:674813bd5ec9 84 pc.printf("writeOk\n\r");
giovannivisentini 0:674813bd5ec9 85 else
giovannivisentini 0:674813bd5ec9 86 pc.printf("writeFail\n\r");
giovannivisentini 0:674813bd5ec9 87
giovannivisentini 0:674813bd5ec9 88 if(closeStatus)
giovannivisentini 0:674813bd5ec9 89 pc.printf("closeOk\n\r");
giovannivisentini 0:674813bd5ec9 90 else
giovannivisentini 0:674813bd5ec9 91 pc.printf("CloseFail\n\r");
giovannivisentini 0:674813bd5ec9 92
giovannivisentini 0:674813bd5ec9 93 /*
giovannivisentini 0:674813bd5ec9 94 sURI_Info URI;
giovannivisentini 0:674813bd5ec9 95 sAARInfo aar;
giovannivisentini 0:674813bd5ec9 96 sSMSInfo sms;
giovannivisentini 0:674813bd5ec9 97 std::strcpy(sms.PhoneNumber,"123456789\0");
giovannivisentini 0:674813bd5ec9 98 std::strcpy(sms.Message,"st.com.BlueMS\0");
giovannivisentini 0:674813bd5ec9 99 std::strcpy(sms.Information,"\0");
giovannivisentini 0:674813bd5ec9 100
giovannivisentini 0:674813bd5ec9 101 std::strcpy(aar.PakageName,"st.com.BlueMS");
giovannivisentini 0:674813bd5ec9 102
giovannivisentini 0:674813bd5ec9 103 // Prepare URI NDEF message content
giovannivisentini 0:674813bd5ec9 104 std::strcpy(URI.protocol,URI_ID_0x01_STRING);
giovannivisentini 0:674813bd5ec9 105 std::strcpy(URI.URI_Message,"st3.com");
giovannivisentini 0:674813bd5ec9 106 std::strcpy(URI.Information,"\0");
giovannivisentini 0:674813bd5ec9 107
giovannivisentini 0:674813bd5ec9 108
giovannivisentini 0:674813bd5ec9 109 while (TT4_Init() != NFC_OK);
giovannivisentini 0:674813bd5ec9 110 // Prepare URI NDEF message content
giovannivisentini 0:674813bd5ec9 111 std::strcpy(URI.protocol,URI_ID_0x01_STRING);
giovannivisentini 0:674813bd5ec9 112 std::strcpy(URI.URI_Message,"st2.com");
giovannivisentini 0:674813bd5ec9 113 std::strcpy(URI.Information,"\0");
giovannivisentini 0:674813bd5ec9 114 //while (TT4_WriteURI(&URI) != NFC_OK);
giovannivisentini 0:674813bd5ec9 115 while (TT4_WriteSMS(&sms) != NFC_OK);
giovannivisentini 0:674813bd5ec9 116 //while (TT4_Write(&sms) != NFC_OK);
giovannivisentini 0:674813bd5ec9 117 */
giovannivisentini 0:674813bd5ec9 118 }
giovannivisentini 0:674813bd5ec9 119
giovannivisentini 0:674813bd5ec9 120 int main() {
giovannivisentini 0:674813bd5ec9 121 i2cChannel.frequency(400000);
giovannivisentini 0:674813bd5ec9 122 X_NUCLEO_NFC01A1 *nfcNucleo = X_NUCLEO_NFC01A1::Instance(i2cChannel);
giovannivisentini 0:674813bd5ec9 123 m24srDrv=&nfcNucleo->getM24SR();
giovannivisentini 0:674813bd5ec9 124
giovannivisentini 0:674813bd5ec9 125 pc.printf("Hello World !\n");
giovannivisentini 0:674813bd5ec9 126 nfcNucleo->getLed1()=1;
giovannivisentini 0:674813bd5ec9 127 nfcNucleo->getLed2()=0;
giovannivisentini 0:674813bd5ec9 128 nfcNucleo->getLed3()=0;
giovannivisentini 0:674813bd5ec9 129
giovannivisentini 0:674813bd5ec9 130 setNFCTag();
giovannivisentini 0:674813bd5ec9 131 while(1) {
giovannivisentini 0:674813bd5ec9 132 wait(1);
giovannivisentini 0:674813bd5ec9 133 myled = !myled;
giovannivisentini 0:674813bd5ec9 134 shiftLed(nfcNucleo->getLed1(),nfcNucleo->getLed2(),nfcNucleo->getLed3());
giovannivisentini 0:674813bd5ec9 135 }
giovannivisentini 0:674813bd5ec9 136 }
giovannivisentini 0:674813bd5ec9 137