NFC

Dependencies:   mbed NDefLib X_NUCLEO_NFC01A1

Files at this revision

API Documentation at this revision

Comitter:
giovannivisentini
Date:
Wed Aug 31 09:58:19 2016 +0000
Parent:
15:9b61a8057933
Commit message:
add a read example

Changed in this revision

NDefLib.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
--- a/NDefLib.lib	Wed Feb 03 09:04:26 2016 +0000
+++ b/NDefLib.lib	Wed Aug 31 09:58:19 2016 +0000
@@ -1,1 +1,1 @@
-https://developer.mbed.org/teams/ST-Expansion-SW-Team/code/NDefLib/#030e7ffdf512
+https://developer.mbed.org/teams/ST-Expansion-SW-Team/code/NDefLib/#46899fa3d9f2
--- a/main.cpp	Wed Feb 03 09:04:26 2016 +0000
+++ b/main.cpp	Wed Aug 31 09:58:19 2016 +0000
@@ -42,21 +42,11 @@
 #include "NDefLib/RecordType/RecordURI.h"
 
 /**
- * Write a Ndef URI message linking to st.com site.
+ * Write an NDef message with a Uri record linking the st.com site
+ * @param nfcNucleo expansion board where write the NDef message
  */
-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);
-    
-    //retrieve the NdefLib interface
-    NDefLib::NDefNfcTag& tag =nfcNucleo->getM24SR().getNDefTag();
-    printf("System Init done: !\n\r");
-    
+static void writeUrl(X_NUCLEO_NFC01A1 *nfcNucleo){
+    NDefLib::NDefNfcTag& tag = nfcNucleo->getM24SR().getNDefTag();
     //open the i2c session with the nfc chip
     if(tag.openSession()){
         printf("Session opened\n\r");
@@ -85,4 +75,91 @@
             
     }else
         printf("Error opening the session\n\r");
+}
+
+/**
+ * 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){
+    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.
+ */
+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);
+    
+    //retrieve the NdefLib interface
+    NDefLib::NDefNfcTag& tag =nfcNucleo->getM24SR().getNDefTag();
+    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
 }
\ No newline at end of file
--- a/mbed.bld	Wed Feb 03 09:04:26 2016 +0000
+++ b/mbed.bld	Wed Aug 31 09:58:19 2016 +0000
@@ -1,1 +1,1 @@
-http://mbed.org/users/mbed_official/code/mbed/builds/6f327212ef96
\ No newline at end of file
+http://mbed.org/users/mbed_official/code/mbed/builds/2241e3a39974
\ No newline at end of file