A simple application providing an example of asynchronous access to the X-NUCLEO_NFC01A1 Dynamic NFC Tag board.
Dependencies: NDefLib X_NUCLEO_NFC01A1 mbed
Fork of HelloWord_Async_NFC01A1 by
X-NUCLEO-NFC01A1 Dynamic NFC Tag Expansion Board Firmware Package
Introduction
This firmware package includes Components Device Drivers, Board Support Package and example applications for STMicroelectronics X-NUCLEO-NFC01A1 Dynamic NFC Tag Expansion Board based on M24SR.
Example Application
The application provides a simple example of asynchronous access to the X-NUCLEO-NFC01A1 Dynamic NFC Tag Expansion Board. The program writes a URI link to the M24SR dynamic tag using the asynchronous programming model. The URI can then be retrieved from an NFC enabled smartphone/tablet.
A simpler example providing synchronous access to the tag is also available.
Revision 7:cd34abf10350, committed 2017-07-12
- Comitter:
- Davidroid
- Date:
- Wed Jul 12 15:51:19 2017 +0000
- Parent:
- 6:01e1182e2320
- Child:
- 8:d398c0ab9103
- Commit message:
- Updated to fit ARM mbed coding style.
Changed in this revision
--- a/NDefLib.lib Thu May 18 14:37:39 2017 +0000 +++ b/NDefLib.lib Wed Jul 12 15:51:19 2017 +0000 @@ -1,1 +1,1 @@ -https://developer.mbed.org/teams/ST/code/NDefLib/#13d84b136a62 +https://developer.mbed.org/teams/ST/code/NDefLib/#31f727872290
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/ReadUriCallbacks.h Wed Jul 12 15:51:19 2017 +0000
@@ -0,0 +1,120 @@
+/**
+ ******************************************************************************
+ * @file ReadUriCallbacks.cpp
+ * @date 12/07/2017
+ * @brief Class to read and print a URI tag.
+ ******************************************************************************
+ *
+ * COPYRIGHT(c) 2017 STMicroelectronics
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 3. Neither the name of STMicroelectronics nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ ******************************************************************************
+ */
+
+#include "mbed.h"
+#include "NDefLib/RecordType/RecordURI.h"
+
+/**
+ * Chain of callback that will read a NDef Message and print all the
+ * record of type URI.
+ * After each operation the class will switch on a led
+ */
+class ReadUriCallbacks : public NDefLib::NDefNfcTag::Callbacks {
+
+ DigitalOut &mOnOpenSession;
+ DigitalOut &mOnRead;
+ DigitalOut &mOnCloseSession;
+
+ NDefLib::Message mMsg;
+
+public:
+
+ /**
+ * create the callback chain
+ * @param onOpenSession led to switch on when the session open
+ * @param onWrite led to switch on when the write end
+ * @param onCloseSession led to switch on when the session end
+ */
+ ReadUriCallbacks(DigitalOut &onOpenSession,DigitalOut &onRead,
+ DigitalOut &onCloseSession):mOnOpenSession(onOpenSession),
+ mOnRead(onRead),mOnCloseSession(onCloseSession){};
+
+ /**
+ * crate the new message and write it
+ * @param tag tag where write the message
+ * @param success true if the session correctly open
+ */
+ virtual void on_session_open(NDefLib::NDefNfcTag *tag,bool success){
+ if (!success) {
+ printf("Error opening the session\r\n");
+ }//else
+ printf("Session opened\r\n");
+ //ask to have an interrupt when the command finish
+ mOnOpenSession=1;
+
+ tag->read(&mMsg);
+ }
+
+ /**
+ * request to close the session
+ * @param tag tag where close the session
+ * @param success true if the message is correctly wrote
+ * @param message wrote
+ */
+ virtual void on_message_read(NDefLib::NDefNfcTag *tag,bool success,
+ const NDefLib::Message*){
+
+ if (!success) {
+ printf("Error Reading tag!\r\n");
+ } else {
+ const uint32_t nRecords =mMsg.get_N_records();
+ printf("Read %d records!\r\n",nRecords);
+ for (uint32_t i=0;i<nRecords;i++) {
+ if (mMsg[i]->get_type()== NDefLib::Record::TYPE_URI) {
+ NDefLib::RecordURI *rUri = (NDefLib::RecordURI *)mMsg[i];
+ printf("UriType: %x\r\nUriContent: %s\r\n",
+ rUri->get_uri_id(),
+ rUri->get_content().c_str());
+ }//if
+ }//for
+ NDefLib::Message::remove_and_delete_all_record(mMsg);
+ mOnRead=1;
+ }//if-else
+ tag->close_session();
+ }
+
+ /**
+ * switch on the led
+ * @param tag where the session is closed
+ * @param success true if the session is correctly close
+ */
+ virtual void on_session_close(NDefLib::NDefNfcTag*, bool success) {
+ if (success) {
+ printf("Session closed\r\n");
+ mOnCloseSession=1;
+ } else {
+ printf("Error opening the session\r\n");
+ }
+ }
+};
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/WriteUriCallbacks.h Wed Jul 12 15:51:19 2017 +0000
@@ -0,0 +1,111 @@
+/**
+ ******************************************************************************
+ * @file WriteUriCallbacks.h
+ * @date 12/07/2017
+ * @brief Class to write a URI tag.
+ ******************************************************************************
+ *
+ * COPYRIGHT(c) 2017 STMicroelectronics
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 3. Neither the name of STMicroelectronics nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ ******************************************************************************
+ */
+
+#include "mbed.h"
+#include "NDefLib/RecordType/RecordURI.h"
+
+/**
+ * Chain of callback that will crate a Uri record and write it.
+ * After each operation the class will switch on a led
+ */
+class WriteUriCallbacks : public NDefLib::NDefNfcTag::Callbacks {
+
+ DigitalOut &mOnOpenSession;
+ DigitalOut &mOnWrite;
+ DigitalOut &mOnCloseSession;
+ NDefLib::Message msg;
+
+public:
+
+ /**
+ * create the callback chain
+ * @param onOpenSession led to switch on when the session open
+ * @param onWrite led to switch on when the write end
+ * @param onCloseSession led to switch on when the session end
+ */
+ WriteUriCallbacks(DigitalOut &onOpenSession,DigitalOut &onWrite,
+ DigitalOut &onCloseSession):mOnOpenSession(onOpenSession),
+ mOnWrite(onWrite),mOnCloseSession(onCloseSession){};
+
+ /**
+ * crate the new message and write it
+ * @param tag tag where write the message
+ * @param success true if the session correctly open
+ */
+ virtual void on_session_open(NDefLib::NDefNfcTag *tag,bool success) {
+ if (!success) {
+ printf("Error opening the session\r\n");
+ }//else
+ printf("Session opened\r\n");
+ //ask to have an interrupt when the command finish
+ mOnOpenSession=1;
+
+ NDefLib::RecordURI rUri(NDefLib::RecordURI::HTTP_WWW,"http://www.st.com");
+ msg.add_record(&rUri);
+
+ tag->write(msg);
+ }
+
+ /**
+ * request to close the session
+ * @param tag tag where close the session
+ * @param success true if the message is correctly wrote
+ * @param message wrote
+ */
+ virtual void on_message_write(NDefLib::NDefNfcTag *tag,bool success,
+ const NDefLib::Message&) {
+
+ if (!success) {
+ printf("Error writing tag!\r\n");
+ } else {
+ printf("Tag written!\r\n");
+ mOnWrite=1;
+ }//if-else
+ tag->close_session();
+ }
+
+ /**
+ * switch on the led
+ * @param tag where the session is closed
+ * @param success true if the session is correctly close
+ */
+ virtual void on_session_close(NDefLib::NDefNfcTag*, bool success) {
+ if (success) {
+ printf("Session closed\r\n");
+ mOnCloseSession=1;
+ } else {
+ printf("Error closing the session\r\n");
+ }
+ }
+};
--- a/X_NUCLEO_NFC01A1.lib Thu May 18 14:37:39 2017 +0000 +++ b/X_NUCLEO_NFC01A1.lib Wed Jul 12 15:51:19 2017 +0000 @@ -1,1 +1,1 @@ -https://developer.mbed.org/teams/ST/code/X_NUCLEO_NFC01A1/#85fdf6fd3da5 +https://developer.mbed.org/teams/ST/code/X_NUCLEO_NFC01A1/#b76765d2cc68
--- a/main.cpp Thu May 18 14:37:39 2017 +0000
+++ b/main.cpp Wed Jul 12 15:51:19 2017 +0000
@@ -1,6 +1,6 @@
/**
******************************************************************************
- * @file Sample_async.cpp
+ * @file main.cpp
* @date 22/01/2016
* @brief Test the async comunication api
******************************************************************************
@@ -33,10 +33,12 @@
*/
#include "mbed.h"
-
#include "XNucleoNFC01A1.h"
+#include "ReadUriCallbacks.h"
+#include "WriteUriCallbacks.h"
#include "m24sr/NDefNfcTagM24SR.h"
#include "NDefLib/RecordType/RecordURI.h"
+
/** variable set to true when we receive an interrupt from the nfc component*/
static volatile bool nfcInterruptFlag=false;
@@ -45,175 +47,15 @@
static volatile bool buttonPress=false;
/** Nfc ISR called when the nfc component has a message ready*/
-static void nfc_interrupt_callback(){
+static void nfc_interrupt_callback() {
nfcInterruptFlag=true;
}//nfcInterruptCallback
-static void set_button_press(){
+static void set_button_press() {
buttonPress=true;
}//if buttonPress
-/**
- * Chain of callback that will crate a Uri record and write it.
- * After each operation the class will switch on a led
- */
-class WriteUriCallbacks : public NDefLib::NDefNfcTag::Callbacks{
-
- DigitalOut &mOnOpenSession;
- DigitalOut &mOnWrite;
- DigitalOut &mOnCloseSession;
- NDefLib::Message msg;
-
-public:
-
- /**
- * create the callback chain
- * @param onOpenSession led to switch on when the session open
- * @param onWrite led to switch on when the write end
- * @param onCloseSession led to switch on when the session end
- */
- WriteUriCallbacks(DigitalOut &onOpenSession,DigitalOut &onWrite,
- DigitalOut &onCloseSession):mOnOpenSession(onOpenSession),
- mOnWrite(onWrite),mOnCloseSession(onCloseSession){};
-
- /**
- * crate the new message and write it
- * @param tag tag where write the message
- * @param success true if the session correctly open
- */
- virtual void on_session_open(NDefLib::NDefNfcTag *tag,bool success){
- if(!success){
- printf("Error opening the session\r\n");
- }//else
- printf("Session opened\r\n");
- //ask to have an interrupt when the command finish
- mOnOpenSession=1;
-
- NDefLib::RecordURI rUri(NDefLib::RecordURI::HTTP_WWW,"http://www.st.com");
- msg.add_record(&rUri);
-
- tag->write(msg);
- }
-
- /**
- * request to close the session
- * @param tag tag where close the session
- * @param success true if the message is correctly wrote
- * @param message wrote
- */
- virtual void on_message_write(NDefLib::NDefNfcTag *tag,bool success,
- const NDefLib::Message&){
-
- if(!success)
- printf("Error writing tag!\r\n");
- else{
- printf("Tag written!\r\n");
- mOnWrite=1;
- }//if-else
- tag->close_session();
- }
-
- /**
- * switch on the led
- * @param tag where the session is closed
- * @param success true if the session is correctly close
- */
- virtual void on_session_close(NDefLib::NDefNfcTag*,bool success){
- if(success){
- printf("Session closed\r\n");
- mOnCloseSession=1;
- }else
- printf("Error closing the session\r\n");
- }
-
-};
-
-/**
- * Chain of callback that will read a NDef Message and print all the
- * record of type URI.
- * After each operation the class will switch on a led
- */
-class ReadUriCallbacks : public NDefLib::NDefNfcTag::Callbacks{
-
- DigitalOut &mOnOpenSession;
- DigitalOut &mOnRead;
- DigitalOut &mOnCloseSession;
-
- NDefLib::Message mMsg;
-
-public:
-
- /**
- * create the callback chain
- * @param onOpenSession led to switch on when the session open
- * @param onWrite led to switch on when the write end
- * @param onCloseSession led to switch on when the session end
- */
- ReadUriCallbacks(DigitalOut &onOpenSession,DigitalOut &onRead,
- DigitalOut &onCloseSession):mOnOpenSession(onOpenSession),
- mOnRead(onRead),mOnCloseSession(onCloseSession){};
-
- /**
- * crate the new message and write it
- * @param tag tag where write the message
- * @param success true if the session correctly open
- */
- virtual void on_session_open(NDefLib::NDefNfcTag *tag,bool success){
- if(!success){
- printf("Error opening the session\r\n");
- }//else
- printf("Session opened\r\n");
- //ask to have an interrupt when the command finish
- mOnOpenSession=1;
-
- tag->read(&mMsg);
- }
-
- /**
- * request to close the session
- * @param tag tag where close the session
- * @param success true if the message is correctly wrote
- * @param message wrote
- */
- virtual void on_message_read(NDefLib::NDefNfcTag *tag,bool success,
- const NDefLib::Message*){
-
- if(!success)
- printf("Error Reading tag!\r\n");
- else{
- const uint32_t nRecords =mMsg.get_N_records();
- printf("Read %d records!\r\n",nRecords);
- for(uint32_t i=0;i<nRecords;i++){
- if(mMsg[i]->get_type()== NDefLib::Record::TYPE_URI){
- NDefLib::RecordURI *rUri = (NDefLib::RecordURI *)mMsg[i];
- printf("UriType: %x\r\nUriContent: %s\r\n",
- rUri->get_uri_id(),
- rUri->get_content().c_str());
- }//if
- }//for
- NDefLib::Message::remove_and_delete_all_record(mMsg);
- mOnRead=1;
- }//if-else
- tag->close_session();
- }
-
- /**
- * switch on the led
- * @param tag where the session is closed
- * @param success true if the session is correctly close
- */
- virtual void on_session_close(NDefLib::NDefNfcTag*,bool success){
- if(success){
- printf("Session closed\r\n");
- mOnCloseSession=1;
- }else
- printf("Error opening the session\r\n");
- }
-
-};
-
-
-int main(int argc,char *args[]){
+int main(int argc,char *args[]) {
(void)argc; (void)args;
#if defined(TARGET_STM)
@@ -225,9 +67,9 @@
I2C i2cChannel(XNucleoNFC01A1::DEFAULT_SDA_PIN,XNucleoNFC01A1::DEFAULT_SDL_PIN);
XNucleoNFC01A1 *nfcNucleo = XNucleoNFC01A1::instance(i2cChannel,&nfc_interrupt_callback,
- XNucleoNFC01A1::DEFAULT_GPO_PIN,XNucleoNFC01A1::DEFAULT_RF_DISABLE_PIN,
- XNucleoNFC01A1::DEFAULT_LED1_PIN,XNucleoNFC01A1::DEFAULT_LED2_PIN,
- XNucleoNFC01A1::DEFAULT_LED3_PIN);
+ XNucleoNFC01A1::DEFAULT_GPO_PIN,XNucleoNFC01A1::DEFAULT_RF_DISABLE_PIN,
+ XNucleoNFC01A1::DEFAULT_LED1_PIN,XNucleoNFC01A1::DEFAULT_LED2_PIN,
+ XNucleoNFC01A1::DEFAULT_LED3_PIN);
//No call back needed since default behavior is sync
nfcNucleo->get_M24SR().get_session();
@@ -243,15 +85,14 @@
tag.open_session(); //start the callback chain
printf("Start Main Loop\n\r");
- while(true){
- if(nfcInterruptFlag){
+ while(true) {
+ if (nfcInterruptFlag) {
nfcInterruptFlag=false;
//manage an async event from the nfc component
nfcNucleo->get_M24SR().manage_event();
-
}//if
#if defined(TARGET_STM)
- if(buttonPress){
+ if (buttonPress) {
buttonPress=false;
printf("Pressed");
tag.set_callback(&NDefReadCallback);
@@ -262,4 +103,4 @@
}//while
//return 0;
-}
\ No newline at end of file
+}
--- a/mbed.bld Thu May 18 14:37:39 2017 +0000 +++ b/mbed.bld Wed Jul 12 15:51:19 2017 +0000 @@ -1,1 +1,1 @@ -https://mbed.org/users/mbed_official/code/mbed/builds/4eea097334d6 \ No newline at end of file +https://mbed.org/users/mbed_official/code/mbed/builds/22da6e220af6 \ No newline at end of file
