NFC
Dependencies: mbed NDefLib X_NUCLEO_NFC01A1
Revision 17:22e6c00f3a4c, committed 2016-08-31
- Comitter:
- giovannivisentini
- Date:
- Wed Aug 31 11:23:41 2016 +0000
- Parent:
- 16:0ab6bf9abd5a
- Child:
- 19:2e9835fbd14f
- Commit message:
- add example for read the NFC message from the tag
Changed in this revision
--- a/NDefLib.lib Wed Feb 03 10:17:14 2016 +0000 +++ b/NDefLib.lib Wed Aug 31 11:23:41 2016 +0000 @@ -1,1 +1,1 @@ -https://developer.mbed.org/teams/ST/code/NDefLib/#030e7ffdf512 +https://developer.mbed.org/teams/ST/code/NDefLib/#46899fa3d9f2
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/NDefLib.lib.orig Wed Aug 31 11:23:41 2016 +0000 @@ -0,0 +1,1 @@ +https://developer.mbed.org/teams/ST/code/NDefLib/#030e7ffdf512
--- a/main.cpp Wed Feb 03 10:17:14 2016 +0000
+++ b/main.cpp Wed Aug 31 11:23:41 2016 +0000
@@ -43,19 +43,12 @@
/**
* Write a Ndef URI message linking to st.com site.
- */
-int main(void){
-
- //use default board pinout
- I2C i2cChannel(X_NUCLEO_NFC01A1::DEFAULT_SDA_PIN,X_NUCLEO_NFC01A1::DEFAULT_SDL_PIN);
- X_NUCLEO_NFC01A1 *nfcNucleo = X_NUCLEO_NFC01A1::Instance(i2cChannel,NULL,
- X_NUCLEO_NFC01A1::DEFAULT_GPO_PIN,X_NUCLEO_NFC01A1::DEFAULT_RF_DISABLE_PIN,
- X_NUCLEO_NFC01A1::DEFAULT_LED1_PIN,X_NUCLEO_NFC01A1::DEFAULT_LED2_PIN,
- X_NUCLEO_NFC01A1::DEFAULT_LED3_PIN);
-
+ * Write an NDef message with a Uri record linking the st.com site
+ * @param nfcNucleo expansion board where write the NDef message
+ */
+static void writeUrl(X_NUCLEO_NFC01A1 *nfcNucleo){
//retrieve the NdefLib interface
- NDefLib::NDefNfcTag& tag =nfcNucleo->getM24SR().getNDefTag();
- printf("System Init done: !\n\r");
+ NDefLib::NDefNfcTag& tag = nfcNucleo->getM24SR().getNDefTag();
//open the i2c session with the nfc chip
if(tag.openSession()){
@@ -85,4 +78,93 @@
}else
printf("Error opening the session\n\r");
-}
\ No newline at end of file
+}
+
+/**
+ * Read a NDef message and print content and type of all the uri record inside
+ * the message
+ * @param nfcNucleo expansion board from where read the message
+ */
+static void readUrl(X_NUCLEO_NFC01A1 *nfcNucleo){
+ //retrieve the NdefLib interface
+ NDefLib::NDefNfcTag& tag = nfcNucleo->getM24SR().getNDefTag();
+
+ //open the i2c session with the nfc chip
+ if(tag.openSession()){
+ printf("Session opened\n\r");
+ nfcNucleo->getLed1()=1;
+
+ //create the NDef message and record
+ NDefLib::Message msg;
+
+ //read the tag
+ if(tag.read(&msg)){
+ const uint32_t nRecords = msg.getNRecords();
+ printf("Tag read: %d record\n\r",msg.getNRecords());
+ for(int i =0 ;i<nRecords ;i++){
+ if(msg[i]->getType()== NDefLib::Record::TYPE_URI){
+ NDefLib::RecordURI *rUri = (NDefLib::RecordURI *)msg[i];
+ printf("UriType: %x\n\rUriContent: %s\n\r",
+ rUri->getUriId(),
+ rUri->getContent().c_str());
+ }//if
+ }//for
+ //free the read records
+ NDefLib::Message::removeAndDeleteAllRecord(msg);
+ }else{
+ printf("Error Reading \n\r");
+ }//if-else
+
+ //close the i2c session
+ if(tag.closeSession()){
+ printf("Session closed\n\r");
+ nfcNucleo->getLed3()=1;
+ }else{
+ printf("Error closing the session\n\r");
+ }//if-else
+
+ }else
+ printf("Error opening the session\n\r");
+}
+
+static volatile bool buttonPress=false;
+
+static void setButtonPress(){
+ buttonPress=true;
+}//if buttonPress
+
+/**
+ * Write a Ndef URI message linking to st.com site and than read the message from
+ * the Nfc tag.
+ *
+ */
+int main(void){
+
+ //use default board pinout
+ I2C i2cChannel(X_NUCLEO_NFC01A1::DEFAULT_SDA_PIN,X_NUCLEO_NFC01A1::DEFAULT_SDL_PIN);
+ X_NUCLEO_NFC01A1 *nfcNucleo = X_NUCLEO_NFC01A1::Instance(i2cChannel,NULL,
+ X_NUCLEO_NFC01A1::DEFAULT_GPO_PIN,X_NUCLEO_NFC01A1::DEFAULT_RF_DISABLE_PIN,
+ X_NUCLEO_NFC01A1::DEFAULT_LED1_PIN,X_NUCLEO_NFC01A1::DEFAULT_LED2_PIN,
+ X_NUCLEO_NFC01A1::DEFAULT_LED3_PIN);
+
+ printf("System Init done: !\n\r");
+
+ // write an URI message
+ writeUrl(nfcNucleo);
+
+//if run on a nucleo board enable the user button for read the ndef record
+#if defined(TARGET_STM)
+ InterruptIn userButton(USER_BUTTON);
+ userButton.fall(setButtonPress);
+ while(true){
+ if(buttonPress){
+ readUrl(nfcNucleo);
+ buttonPress=false;
+ }//if
+ //wait next event
+ __WFE();
+ }//while
+#else
+ readUrl(nfcNucleo);
+#endif
+}