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 .

Revision:
18:d596eb3f575f
Parent:
17:d8d3d2088cac
Child:
19:de38cedf89d6
--- a/Samples/sampleAsync_lockWriteTag.cpp	Thu Jul 13 09:41:01 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,284 +0,0 @@
-/**
-  ******************************************************************************
-  * @file       Sample_lockWriteTag.cpp
-  * @author     ST / Central Labs
-  * @date       03 Dic 2015
-  * @brief      This demo define a lock/unlock the tag content when the user press
-  *  the user button
-  ******************************************************************************
-  *
-  * COPYRIGHT(c) 2015 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 "XNucleoNFC01A1.h"
-
-static volatile bool buttonPress=false; /// true when the user press the message
-static volatile bool nfcEvent=false; /// true when the user press the message
-
-static void set_nfc_event_callback(){
-	nfcEvent=true;
-}//if buttonPress
-
-/**
- * Call back called when the user press the button.
- */
-static void set_button_press(){
-    buttonPress=true;
-}//if buttonPress
-
-/**
- * Class with the command chain needed to remove all the read/write password
- */
-class RemoveAllPasswordStatusCallback : public M24SR::Callbacks {
-
-public:
-
-	RemoveAllPasswordStatusCallback():mIsComamndRunning(false){}
-
-	/**
-	 * True when the command chain finish, and the tag can now be read and write
-	 * @return true if the command chain finish
-	 */
-	bool is_finish(){
-		return !mIsComamndRunning;
-	}
-
-
-private:
-	bool mIsComamndRunning; /// false when the command chain finish
-
-	/**
-	 * end the command chain and print an error message
-	 * @param status error code of the last command
-	 */
-	void on_error(const M24SR::StatusTypeDef status){
-		mIsComamndRunning=false;
-		printf("Error Code: %X \r\n",status);
-	}
-
-	virtual void on_session_open(M24SR *tag,M24SR::StatusTypeDef status){
-		if(status!=M24SR::M24SR_SUCCESS)
-			return on_error(status);
-		mIsComamndRunning=true;
-		printf("Session Opened\r\n");
-		tag->select_application();
-	}
-
-	virtual void on_selected_application(M24SR *tag,M24SR::StatusTypeDef status){
-		if(status!=M24SR::M24SR_SUCCESS)
-			return on_error(status);
-			
-		printf("Select application\r\n");
-		tag->select_NDEF_file(0x0001);
-	}
-
-	virtual void on_selected_NDEF_file(M24SR *tag,M24SR::StatusTypeDef status){
-		if(status!=M24SR::M24SR_SUCCESS)
-			return on_error(status);
-
-		printf("Select NDef\r\n");
-		tag->disable_all_password(M24SR::DEFAULT_PASSWORD);
-	}
-
-	virtual void on_disable_all_password(M24SR *tag, M24SR::StatusTypeDef status){
-		if(status!=M24SR::M24SR_SUCCESS)
-			return on_error(status);
-			
-		printf("Disable all Password\r\n");
-		tag->deselect();
-	}
-
-	virtual void on_deselect(M24SR *,M24SR::StatusTypeDef status){
-		if(status!=M24SR::M24SR_SUCCESS)
-			return on_error(status);
-			
-		printf("Close Application\r\n");
-		mIsComamndRunning=false;
-	}
-
-};
-
-/**
- * Chain of call needed to change the tag status between read only and write/read
- */
-class ChangeTagStatusCallback : public M24SR::Callbacks {
-
-	M24SR &mNfcTag; /// object to change
-	DigitalOut& mReadOnlyLed; /// led to switch on when it is in read only mode
-	DigitalOut& mReadWriteWriteLed; /// led to switch on when is in read/write mode
-
-	bool mIsReadOnly; /// current tag status
-	bool mIsComamndRunning; /// true if the chain is running
-
-	public:
-
-		/**
-		 * Build a chain of callback needed to change the tag status.
-		 * @param nfcTag Tag to change.
-		 * @param readLed Led to switch on when in read only mode.
-		 * @param writeLed Led to switch on when in read/write mode.
-		 */
-		ChangeTagStatusCallback(M24SR &nfcTag, DigitalOut& readLed, DigitalOut& writeLed):
-			mNfcTag(nfcTag),mReadOnlyLed(readLed),mReadWriteWriteLed(writeLed),mIsReadOnly(false),
-			mIsComamndRunning(false){
-			mReadOnlyLed=false;
-			mReadWriteWriteLed=true;
-		}
-
-		/**
-		 * Change the tag status
-		 */
-		void change_status(){
-			mIsReadOnly=!mIsReadOnly;
-			//if it is not running a previous command
-			if(!mIsComamndRunning){
-				mNfcTag.get_session();
-			}//if
-		}//changeStatus;
-
-	private:
-
-		/**
-		 * When an error happen switch on both the led and print the error code.
-		 * @param status Error code.
-		 */
-		void on_error(const M24SR::StatusTypeDef status){
-			mIsComamndRunning=false;
-			mReadOnlyLed=true;
-			mReadWriteWriteLed=true;
-			printf("Error %X changing the status\r\n",status);
-		}
-
-		virtual void on_session_open(M24SR *,M24SR::StatusTypeDef status){
-			if(status!=M24SR::M24SR_SUCCESS)
-				return on_error(status);
-			printf("Session Open\r\n");
-			mNfcTag.select_application();
-		}
-
-		virtual void on_selected_application(M24SR *,M24SR::StatusTypeDef status){
-			if(status!=M24SR::M24SR_SUCCESS)
-				return on_error(status);
-	
-			printf("Select Application\r\n");
-			mNfcTag.select_NDEF_file(0x0001);
-		}
-
-		virtual void on_selected_NDEF_file(M24SR *,M24SR::StatusTypeDef status){
-			if(status!=M24SR::M24SR_SUCCESS)
-				return on_error(status);
-			printf("Select NDef file\r\n");
-			if(mIsReadOnly){
-				mNfcTag.enable_read_only(M24SR::DEFAULT_PASSWORD);
-			}else
-				mNfcTag.disable_read_only(M24SR::DEFAULT_PASSWORD);
-		}
-
-
-		virtual void on_enable_read_only(M24SR *,M24SR::StatusTypeDef status){
-			if(status!=M24SR::M24SR_SUCCESS)
-				return on_error(status);
-			printf("Ready only Enabled\r\n");
-			if(!mIsReadOnly) //if in the meantime the status change
-				mNfcTag.disable_read_only(M24SR::DEFAULT_PASSWORD);
-			else{
-				mReadOnlyLed=true;
-				mReadWriteWriteLed=false;
-				mNfcTag.deselect();
-			}
-		}
-
-		virtual void on_disable_read_only(M24SR *,M24SR::StatusTypeDef status){
-			if(status!=M24SR::M24SR_SUCCESS)
-				return on_error(status);
-			printf("Ready only Disabled\r\n");
-			if(mIsReadOnly) //if in the meantime the status change
-				mNfcTag.enable_read_only(M24SR::DEFAULT_PASSWORD);
-			else{
-				mReadOnlyLed=false;
-				mReadWriteWriteLed=true;
-				mNfcTag.deselect();
-			}
-		}
-
-		virtual void on_deselect(M24SR *,M24SR::StatusTypeDef status){
-			if(status!=M24SR::M24SR_SUCCESS)
-				return on_error(status);
-			printf("Close Application\r\n");
-			mIsComamndRunning=false;
-		}
-};
-
-/**
- * When the user press the button enable/disable the tag write protection.
- */
-void sampleAsync_lockTagContent() {
-
-    //instance the board with the default parameters
-    I2C i2cChannel(XNucleoNFC01A1::DEFAULT_SDA_PIN,XNucleoNFC01A1::DEFAULT_SDL_PIN);
-    XNucleoNFC01A1 *nfcNucleo = XNucleoNFC01A1::instance(i2cChannel,&set_nfc_event_callback);
-	
-    //when the user press the button set buttonPress to true
-	#if defined(TARGET_STM)
-        InterruptIn userButton(USER_BUTTON);
-    #else
-        InterruptIn userButton(SW2);
-    #endif
-    userButton.fall(set_button_press);
-    
-    M24SR &nfcTag =nfcNucleo->get_M24SR();
-
-    //set async mode
-    if(nfcTag.get_session()==M24SR::M24SR_SUCCESS)
-    	nfcTag.manage_I2C_GPO(M24SR::I2C_ANSWER_READY);
-
-
-    ChangeTagStatusCallback changeTagStatus(nfcTag,nfcNucleo->get_led2(),nfcNucleo->get_led3());
-    RemoveAllPasswordStatusCallback removeAllPasswordStatusCallback;
-
-    nfcTag.set_callback(&removeAllPasswordStatusCallback);
-    nfcTag.get_session();
-    nfcNucleo->get_led1()=true;
-
-    while(true){
-
-        if(buttonPress && removeAllPasswordStatusCallback.is_finish()){
-        	buttonPress=false;
-            nfcTag.set_callback(&changeTagStatus);
-        	changeTagStatus.change_status();
-        }//if
-        if(nfcEvent){
-        	nfcEvent=false;
-        	nfcTag.manage_event();
-        }
-        //wait next event
-        __WFE();
-    }//while
-
-}//sampleAsync_lockTagContent