0

Dependencies:   mbed NDefLib X_NUCLEO_NFC01A1

Dependents:   Projekt KPG Program_KPG_2019

Files at this revision

API Documentation at this revision

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

NDefLib.lib Show annotated file Show diff for this revision Revisions of this file
NDefLib.lib.orig 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
--- 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
+}