Firmware library for the X-NUCLEO-NFC01A1 Dynamic NFC Tag board.

Dependencies:   M24SR

Dependents:   NFC M2M_2016_STM32 MyongjiElec_capstone1 IDW01M1_Cloud_IBM ... more

Fork of X_NUCLEO_NFC01A1 by ST Expansion SW Team

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.

Firmware Library

Class X_NUCLEO_NFC01A1 is intended to represent the Dynamic NFC Tag Expansion Board with the same name.
It provides an API to access to the M24SR component and to the three onboard LEDs.
It is intentionally implemented as a singleton because only one X_NUCLEO_NFC01A1 at a time might be deployed in a HW component stack.
The library also provides an implementation of the NDEF library API for M24SR, providing an simple way to read/write NDEF formatted messages from/to the M24SR dynamic NFC tag.

Example applications

1. Hello World
2. Asynchronous Hello World

Revision:
27:3881985097bb
Parent:
26:2090378b0b51
Child:
28:e0d4ffa90f8b
--- a/m24sr/m24sr_class.cpp	Wed Feb 03 09:01:05 2016 +0000
+++ b/m24sr/m24sr_class.cpp	Fri Sep 30 12:33:20 2016 +0000
@@ -2,8 +2,8 @@
  ******************************************************************************
  * @file    m24sr_class.cpp
  * @author  ST Central Labs
- * @version V1.0.0
- * @date    05 Nov 2015
+ * @version V1.1.0
+ * @date    30 Set 2016
  * @brief   This file provides a set of functions to interface with the M24SR
  *          device.
  ******************************************************************************
@@ -39,8 +39,10 @@
 
 
 /* Includes ------------------------------------------------------------------*/
+#include "m24sr.h"
 #include "m24sr_class.h"
-#include "m24sr.h"
+#include "NDefNfcTagM24SR.h"
+
 #ifdef GPIO_PIN_RESET
 	#undef GPIO_PIN_RESET
 #endif
@@ -74,14 +76,14 @@
 /** value returned by the NFC chip when a command is successfully completed */
 #define NFC_COMMAND_SUCCESS 0x9000
 
-/** call the fCall function and check that the return status is NFC_SUCCESS,
+/** call the fCall function and check that the return status is M24SR_SUCCESS,
  *  otherwise return the error status*/
 #define errchk(fCall) {\
-	const NFC_StatusTypeDef status = (fCall); \
-	if((status!=NFC_SUCCESS)) \
-		return status; \
+	const int status = (int) (fCall); \
+	if((status!=M24SR_SUCCESS)){ \
+		return (M24SR::StatusTypeDef)status; \
 	}\
-
+}
 #endif
 
 /**
@@ -123,29 +125,31 @@
  * @retval 	Status (SW1&SW2)  	:   CRC16 residue is correct	
  * @retval 	M24SR_ERROR_CRC  	:  CRC16 residue is false
  */
- static NFC_StatusTypeDef M24SR_IsCorrectCRC16Residue(uint8_t *DataIn, uint8_t Length) {
+ static M24SR::StatusTypeDef M24SR_IsCorrectCRC16Residue(uint8_t *DataIn, uint8_t Length) {
 	uint16_t ResCRC = 0x0000;
-
+	M24SR::StatusTypeDef status;
 	/* check the CRC16 Residue */
 	if (Length != 0)
 		ResCRC = M24SR_ComputeCrc(DataIn, Length);
 
 	if (ResCRC == 0x0000) {
 		/* Good CRC, but error status from M24SR */
-		return (NFC_StatusTypeDef) (((DataIn[Length - UB_STATUS_OFFSET] << 8)
+		status = (M24SR::StatusTypeDef) (((DataIn[Length - UB_STATUS_OFFSET] << 8)
 				& 0xFF00) | (DataIn[Length - LB_STATUS_OFFSET] & 0x00FF));
 	} else {
 		ResCRC = 0x0000;
 		ResCRC = M24SR_ComputeCrc(DataIn, 5);
 		if (ResCRC != 0x0000) {
 			/* Bad CRC */
-			return NFC_IO_ERROR_CRC;
+			return M24SR::M24SR_IO_ERROR_CRC;
 		} else {
 			/* Good CRC, but error status from M24SR */
-			return (NFC_StatusTypeDef) (((DataIn[1] << 8) & 0xFF00)
+			status= (M24SR::StatusTypeDef) (((DataIn[1] << 8) & 0xFF00)
 					| (DataIn[2] & 0x00FF));
 		}
 	}
+	if(status==NFC_COMMAND_SUCCESS) status = M24SR::M24SR_SUCCESS;
+	return status;
 }
 
 /**
@@ -216,30 +220,63 @@
 }
 
 
+
+
 /**  
  * @brief  	This function returns M24SR_STATUS_SUCCESS if the pBuffer is an s-block
  * @param  	pBuffer		:	pointer to the data
- * @retval 	NFC_SUCCESS  :  the data is a S-Block
+ * @retval 	M24SR_SUCCESS  :  the data is a S-Block
  * @retval 	NFC_ERROR  	:  the data is not a S-Block
  */
- static NFC_StatusTypeDef IsSBlock(uint8_t *pBuffer) {
+ static M24SR::StatusTypeDef IsSBlock(uint8_t *pBuffer) {
 
 	if ((pBuffer[M24SR_OFFSET_PCB] & M24SR_MASK_BLOCK) == M24SR_MASK_SBLOCK) {
-		return NFC_SUCCESS;
+		return M24SR::M24SR_SUCCESS;
 	} else {
-		return NFC_ERROR;
+		return M24SR::M24SR_ERROR;
 	}
 
 }
 
+
+M24SR::M24SR(const uint8_t address, I2C &I2C,gpoEventCallback eventCallback, const PinName& GPOPinName,
+		const PinName& RFDISPinName) :
+		who_am_i(0),
+		type(0),
+		address(address),
+		dev_I2C(I2C),
+		GPOPin(GPOPinName),
+		RFDisablePin(RFDISPinName),
+		mCommunicationType(SYNC),
+		mLastCommandSend(NONE),
+		mGpoEventInterrupt(GPOPinName),
+		mManageGPOCallback(*this),
+		mCallback(&defaultCallback),
+		mComponentCallback(NULL),
+		mNDefTagUtil(new NDefNfcTagM24SR(*this)),
+		mReadIDCallback(*this){
+		//mNDefTagUtil(NULL){
+	memset(uM24SRbuffer, 0, 0xFF * sizeof(int8_t));
+	uDIDbyte = 0;
+	RFDisablePin = 0;
+	if(eventCallback!=NULL)
+		mGpoEventInterrupt.fall(eventCallback);
+	mGpoEventInterrupt.mode(PullUp);
+	mGpoEventInterrupt.disable_irq();
+}
+
+M24SR::~M24SR(){
+	delete mNDefTagUtil;
+}
+
 /**
  * @brief  This function sends the FWT extension command (S-Block format)
  * @param	FWTbyte : FWT value
- * @return NFC_SUCCESS if no errors
+ * @return M24SR_SUCCESS if no errors
  */
- NFC_StatusTypeDef M24SR::M24SR_SendFWTExtension(uint8_t FWTbyte) {
+ M24SR::StatusTypeDef M24SR::M24SR_SendFWTExtension(uint8_t FWTbyte) {
 	uint8_t pBuffer[M24SR_STATUSRESPONSE_NBBYTE];
-	NFC_StatusTypeDef status;
+	M24SR::StatusTypeDef status;
 	uint8_t NthByte = 0;
 	uint16_t uCRC16;
 
@@ -254,14 +291,14 @@
 
 	/* send the request */
 	status = M24SR_IO_SendI2Ccommand(NthByte, pBuffer);
-	if(status != NFC_SUCCESS)
+	if(status != M24SR_SUCCESS)
 		return status;
 
 	mLastCommandSend=UPDATE;
 
 	if(mCommunicationType==M24SR::SYNC){
 		status = M24SR_IO_PollI2C();
-		if(status == NFC_SUCCESS)
+		if(status == M24SR_SUCCESS)
 			return M24SR_ReceiveUpdateBinary();
 		else{
 			mLastCommandSend = NONE;
@@ -271,37 +308,46 @@
 		}//if-else
 	}//if
 
-	return NFC_SUCCESS;
+	return M24SR_SUCCESS;
 }
 
 /**
  * @brief  This function initialize the M24SR device
  * @retval None
  */
- NFC_StatusTypeDef M24SR::M24SR_Init(M24SR_InitTypeDef *notUsed) {
+ M24SR::StatusTypeDef M24SR::M24SR_Init(M24SR_InitTypeDef *notUsed) {
 	(void) notUsed;
 	//force to open a i2c session
-	errchk(M24SR_ForceSession())
+	StatusTypeDef status = M24SR_ForceSession();
+	if(status!= M24SR_SUCCESS)
+		return status;
 	//leave the gpo always up
-	errchk(M24SR_ManageI2CGPO(DEFAULT_GPO_STATUS))
-	errchk(M24SR_ManageRFGPO(DEFAULT_GPO_STATUS))
+	status = M24SR_ManageI2CGPO(DEFAULT_GPO_STATUS);
+	if(status!= M24SR_SUCCESS)
+			return status;
+	status = M24SR_ManageRFGPO(DEFAULT_GPO_STATUS);
+	if(status!= M24SR_SUCCESS)
+			return status;
 	//close the session
-	errchk(M24SR_Deselect())
+	status = M24SR_Deselect();
+	if(status!= M24SR_SUCCESS)
+			return status;
+
 	mGpoEventInterrupt.enable_irq();
-	return NFC_SUCCESS;
+	return M24SR_SUCCESS;
 }
 
 
 /**
  * @brief  This function sends the KillSession command to the M24SR device
  * @param  None
- * @return NFC_SUCCESS if no errors
+ * @return M24SR_SUCCESS if no errors
  */
- NFC_StatusTypeDef M24SR::M24SR_ForceSession(void) {
+ M24SR::StatusTypeDef M24SR::M24SR_ForceSession(void) {
 	uint8_t commandBuffer[] = M24SR_KILLSESSION_COMMAND;
-	NFC_StatusTypeDef status;
+	M24SR::StatusTypeDef status;
 	status = M24SR_IO_SendI2Ccommand(sizeof(commandBuffer), commandBuffer);
-	if(status!=NFC_SUCCESS){
+	if(status!=M24SR_SUCCESS){
 		mCallback->onSessionOpen(this,status);
 		return status;
 	}
@@ -318,14 +364,14 @@
 
 /**
  * @brief  This function sends the Deselect command (S-Block format)
- * @return NFC_SUCCESS if no errors
+ * @return M24SR_SUCCESS if no errors
  */
- NFC_StatusTypeDef M24SR::M24SR_Deselect(void) {
+ M24SR::StatusTypeDef M24SR::M24SR_Deselect(void) {
 	uint8_t pBuffer[] = M24SR_DESELECTREQUEST_COMMAND;
-	NFC_StatusTypeDef status;
+	M24SR::StatusTypeDef status;
 	/* send the request */
 	status = M24SR_IO_SendI2Ccommand(sizeof(pBuffer), pBuffer);
-	if(status!=NFC_SUCCESS){
+	if(status!=M24SR_SUCCESS){
 		getCallback()->onDeselect(this,status);
 	}
 
@@ -333,7 +379,7 @@
 
 	if(mCommunicationType==M24SR::SYNC){
 		status = M24SR_IO_PollI2C();
-		if(status == NFC_SUCCESS)
+		if(status == M24SR_SUCCESS)
 			return M24SR_ReceiveDeselect();
 		else{
 			mLastCommandSend = NONE;
@@ -343,12 +389,12 @@
 
 	}
 
-	return NFC_SUCCESS;
+	return M24SR_SUCCESS;
 }
 
-NFC_StatusTypeDef M24SR::M24SR_ReceiveDeselect(void){
+M24SR::StatusTypeDef M24SR::M24SR_ReceiveDeselect(void){
 	uint8_t pBuffer[4];
-	NFC_StatusTypeDef status;
+	M24SR::StatusTypeDef status;
 	status = M24SR_IO_ReceiveI2Cresponse(sizeof(pBuffer), pBuffer);
 	getCallback()->onDeselect(this,status);
 	return status;
@@ -358,15 +404,15 @@
 
 /**
  * @brief  This function sends the GetSession command to the M24SR device
- * @retval NFC_SUCCESS the function is successful.
+ * @retval M24SR_SUCCESS the function is successful.
  * @retval Status (SW1&SW2) if operation does not complete.
  */
- NFC_StatusTypeDef M24SR::M24SR_GetSession(void) {
+ M24SR::StatusTypeDef M24SR::M24SR_GetSession(void) {
 	uint8_t commandBuffer[] = M24SR_OPENSESSION_COMMAND;
 
-	NFC_StatusTypeDef status;
+	M24SR::StatusTypeDef status;
 	status = M24SR_IO_SendI2Ccommand(sizeof(commandBuffer), commandBuffer);
-	if(status!=NFC_SUCCESS){
+	if(status!=M24SR_SUCCESS){
 		getCallback()->onSessionOpen(this,status);
 		return status;
 	}
@@ -382,12 +428,12 @@
 
 /**
  * @brief  This function sends the SelectApplication command
- * @return NFC_SUCCESS if no errors
+ * @return M24SR_SUCCESS if no errors
  */
- NFC_StatusTypeDef M24SR::M24SR_SendSelectApplication(void) {
+ M24SR::StatusTypeDef M24SR::M24SR_SendSelectApplication(void) {
 
 	C_APDU command;
-	NFC_StatusTypeDef status;
+	M24SR::StatusTypeDef status;
 	uint8_t *pBuffer = uM24SRbuffer;
 	uint8_t pDataOut[] = M24SR_SELECTAPPLICATION_COMMAND;
 	uint8_t uLe = 0x00;
@@ -411,7 +457,7 @@
 
 	/* send the request */
 	status = M24SR_IO_SendI2Ccommand(NbByte, pBuffer);
-	if(status != NFC_SUCCESS){
+	if(status != M24SR_SUCCESS){
 		getCallback()->onSelectedApplication(this,status);
 		return status;
 	}
@@ -420,7 +466,7 @@
 
 	if(mCommunicationType==M24SR::SYNC){
 		status = M24SR_IO_PollI2C();
-		if(status == NFC_SUCCESS)
+		if(status == M24SR_SUCCESS)
 			return M24SR_ReceiveSelectApplication();
 		else{
 			mLastCommandSend = NONE;
@@ -429,18 +475,18 @@
 		}//if-else
 	}//if
 
-	return NFC_SUCCESS;
+	return M24SR_SUCCESS;
 }
 
-NFC_StatusTypeDef M24SR::M24SR_ReceiveSelectApplication(void) {
+M24SR::StatusTypeDef M24SR::M24SR_ReceiveSelectApplication(void) {
 
 	uint8_t pDataIn[M24SR_STATUSRESPONSE_NBBYTE];
-	NFC_StatusTypeDef status;
+	M24SR::StatusTypeDef status;
 
 	mLastCommandSend = NONE;
 
 	status = M24SR_IO_ReceiveI2Cresponse(sizeof(pDataIn), pDataIn);
-	if(status!=NFC_SUCCESS){
+	if(status!=M24SR_SUCCESS){
 		getCallback()->onSelectedApplication(this,status);
 		return status;
 	}//else
@@ -452,9 +498,9 @@
 
 
 
-NFC_StatusTypeDef M24SR::M24SR_ReadID(uint8_t *nfc_id) {
+M24SR::StatusTypeDef M24SR::M24SR_ReadID(uint8_t *nfc_id) {
 	if (!nfc_id) {
-		return NFC_ERROR;
+		return M24SR_ERROR;
 	}
 
 	//enable the callback for change the gpo
@@ -467,13 +513,13 @@
 
 /**
  * @brief  This function sends the SelectCCFile command
- * @retval NFC_SUCCESS the function is successful.
+ * @retval M24SR_SUCCESS the function is successful.
  * @retval M24SR_ERROR_I2CTIMEOUT I2C timeout occurred.
  * @retval Status (SW1&SW2)   if operation does not complete for another reason.
  */
- NFC_StatusTypeDef M24SR::M24SR_SendSelectCCfile(void) {
+ M24SR::StatusTypeDef M24SR::M24SR_SendSelectCCfile(void) {
 	C_APDU command;
-	NFC_StatusTypeDef status;
+	M24SR::StatusTypeDef status;
 	uint8_t *pBuffer = uM24SRbuffer;
 	uint8_t pDataOut[] = CC_FILE_ID_BYTES;
 	uint16_t uP1P2 =0x000C,
@@ -494,7 +540,7 @@
 
 	/* send the request */
 	status = M24SR_IO_SendI2Ccommand(NbByte, pBuffer);
-	if(status!=NFC_SUCCESS){
+	if(status!=M24SR_SUCCESS){
 		getCallback()->onSelectedCCFile(this,status);
 		return status;
 	}//else
@@ -504,7 +550,7 @@
 
 	if(mCommunicationType==M24SR::SYNC){
 		status = M24SR_IO_PollI2C();
-		if(status==NFC_SUCCESS)
+		if(status==M24SR_SUCCESS)
 			return M24SR_ReceiveSelectCCfile();
 		else{
 			mLastCommandSend = NONE;
@@ -513,18 +559,18 @@
 		}//if-else
 	}//if
 
-	return NFC_SUCCESS;
+	return M24SR_SUCCESS;
 }
 
-NFC_StatusTypeDef M24SR::M24SR_ReceiveSelectCCfile(void){
+M24SR::StatusTypeDef M24SR::M24SR_ReceiveSelectCCfile(void){
 
 	uint8_t pDataIn[M24SR_STATUSRESPONSE_NBBYTE];
-	NFC_StatusTypeDef status;
+	M24SR::StatusTypeDef status;
 
 	mLastCommandSend = NONE;
 
 	status = M24SR_IO_ReceiveI2Cresponse(sizeof(pDataIn), pDataIn);
-	if(status!=NFC_SUCCESS){
+	if(status!=M24SR_SUCCESS){
 		getCallback()->onSelectedCCFile(this,status);
 		return status;
 	}//else
@@ -539,12 +585,12 @@
  * @retval Status (SW1&SW2) Status of the operation to complete.
  * @retval M24SR_ERROR_I2CTIMEOUT I2C timeout occurred.
  */
- NFC_StatusTypeDef M24SR::M24SR_SendSelectSystemfile(void) {
+ M24SR::StatusTypeDef M24SR::M24SR_SendSelectSystemfile(void) {
 	C_APDU command;
 
 	uint8_t *pBuffer = uM24SRbuffer;
 	uint8_t pDataOut[] = SYSTEM_FILE_ID_BYTES;
-	NFC_StatusTypeDef status;
+	M24SR::StatusTypeDef status;
 	uint16_t uP1P2 =0x000C,	NbByte;
 
 	/* build the command */
@@ -556,13 +602,13 @@
 	/* copy the number of byte of the data field */
 	command.Body.LC = sizeof(pDataOut);
 	command.Body.pData = pDataOut;
-	/* build the I²C command */
+	/* build the I²C command */
 	M24SR_BuildIBlockCommand(M24SR_CMDSTRUCT_SELECTCCFILE, &command, uDIDbyte,
 			&NbByte, pBuffer);
 
 	/* send the request */
 	status = M24SR_IO_SendI2Ccommand(NbByte, pBuffer);
-	if(status!=NFC_SUCCESS){
+	if(status!=M24SR_SUCCESS){
 		getCallback()->onSelectedSystemFile(this,status);
 		return status;
 	}//else
@@ -571,7 +617,7 @@
 
 	if(mCommunicationType==M24SR::SYNC){
 		status = M24SR_IO_PollI2C();
-		if(status == NFC_SUCCESS)
+		if(status == M24SR_SUCCESS)
 			return M24SR_ReceiveSelectSystemfile();
 		else{
 			mLastCommandSend = NONE;
@@ -580,18 +626,18 @@
 		}//if-else
 	}//if
 
-	return NFC_SUCCESS;
+	return M24SR_SUCCESS;
 }
 
-NFC_StatusTypeDef M24SR::M24SR_ReceiveSelectSystemfile(){
+M24SR::StatusTypeDef M24SR::M24SR_ReceiveSelectSystemfile(){
 
 	uint8_t pDataIn[M24SR_STATUSRESPONSE_NBBYTE];
-	NFC_StatusTypeDef status;
+	M24SR::StatusTypeDef status;
 
 	mLastCommandSend = NONE;
 
 	status = M24SR_IO_ReceiveI2Cresponse(sizeof(pDataIn), pDataIn);
-	if(status!=NFC_SUCCESS){
+	if(status!=M24SR_SUCCESS){
 		getCallback()->onSelectedSystemFile(this,status);
 		return status;
 	}//else
@@ -606,9 +652,9 @@
  * @retval Status (SW1&SW2) Status of the operation to complete.
  * @retval M24SR_ERROR_I2CTIMEOUT I2C timeout occurred.
  */
- NFC_StatusTypeDef M24SR::M24SR_SendSelectNDEFfile(uint16_t NDEFfileId) {
+ M24SR::StatusTypeDef M24SR::M24SR_SendSelectNDEFfile(uint16_t NDEFfileId) {
 	C_APDU command;
-	NFC_StatusTypeDef status;
+	M24SR::StatusTypeDef status;
 	uint8_t *pBuffer = uM24SRbuffer;
 	uint8_t pDataOut[] = { GETMSB(NDEFfileId), GETLSB(NDEFfileId) };
 	uint16_t uP1P2 = 0x000C, NbByte;
@@ -629,7 +675,7 @@
 
 	/* send the request */
 	status = M24SR_IO_SendI2Ccommand(NbByte, pBuffer);
-	if(status!=NFC_SUCCESS){
+	if(status!=M24SR_SUCCESS){
 
 	}
 
@@ -637,7 +683,7 @@
 
 	if(mCommunicationType==M24SR::SYNC){
 		status = M24SR_IO_PollI2C();
-		if(status==NFC_SUCCESS)
+		if(status==M24SR_SUCCESS)
 			return M24SR_ReceiveSelectNDEFfile();
 		else{
 			mLastCommandSend = NONE;
@@ -646,19 +692,19 @@
 		}
 	}
 
-	return NFC_SUCCESS;
+	return M24SR_SUCCESS;
 
 }
 
-NFC_StatusTypeDef M24SR::M24SR_ReceiveSelectNDEFfile(){
+M24SR::StatusTypeDef M24SR::M24SR_ReceiveSelectNDEFfile(){
 
 	uint8_t pDataIn[M24SR_STATUSRESPONSE_NBBYTE];
-	NFC_StatusTypeDef status;
+	M24SR::StatusTypeDef status;
 
 	mLastCommandSend = NONE;
 
 	status = M24SR_IO_ReceiveI2Cresponse(sizeof(pDataIn), pDataIn);
-	if(status!=NFC_SUCCESS){
+	if(status!=M24SR_SUCCESS){
 		getCallback()->onSelectedNDEFFile(this,status);
 		return status;
 	}//else
@@ -676,7 +722,7 @@
  * @retval Status (SW1&SW2) Status of the operation to complete.
  * @retval M24SR_ERROR_I2CTIMEOUT I2C timeout occurred.
  */
- NFC_StatusTypeDef M24SR::M24SR_SendReadBinary(uint16_t Offset, uint8_t NbByteToRead,
+ M24SR::StatusTypeDef M24SR::M24SR_SendReadBinary(uint16_t Offset, uint8_t NbByteToRead,
 		uint8_t *pBufferRead) {
 	//clamp the buffer to the max size
 	if(NbByteToRead>M24SR_MAX_BYTE_OPERATION_LENGHT)
@@ -685,7 +731,7 @@
 	C_APDU command;
 	uint8_t *pBuffer = uM24SRbuffer;
 	uint16_t NbByte;
-	NFC_StatusTypeDef status;
+	M24SR::StatusTypeDef status;
 
 	/* build the command */
 	command.Header.CLA = C_APDU_CLA_DEFAULT;
@@ -700,7 +746,7 @@
 			&NbByte, pBuffer);
 
 	status = M24SR_IO_SendI2Ccommand(NbByte, pBuffer);
-	if(status!=NFC_SUCCESS){
+	if(status!=M24SR_SUCCESS){
 		getCallback()->onReadByte(this,status,Offset,pBufferRead,NbByteToRead);
 		return status;
 	}
@@ -712,7 +758,7 @@
 
 	if(mCommunicationType==M24SR::SYNC){
 		status = M24SR_IO_PollI2C();
-		if(status==NFC_SUCCESS){
+		if(status==M24SR_SUCCESS){
 			return M24SR_ReceiveReadBinary();
 		}else{
 			mLastCommandSend = NONE;
@@ -721,12 +767,12 @@
 		}//if-else
 	}//if
 
-	return NFC_SUCCESS;
+	return M24SR_SUCCESS;
 }
 
-NFC_StatusTypeDef M24SR::M24SR_ReceiveReadBinary(){
+M24SR::StatusTypeDef M24SR::M24SR_ReceiveReadBinary(){
 
-	NFC_StatusTypeDef status;
+	M24SR::StatusTypeDef status;
 	const uint16_t length = mLastCommandData.length;
 	const uint16_t offset = mLastCommandData.offset;
 	uint8_t *data = mLastCommandData.data;
@@ -734,12 +780,12 @@
 	mLastCommandSend=NONE;
 
 	status = M24SR_IO_ReceiveI2Cresponse (length + M24SR_STATUSRESPONSE_NBBYTE , uM24SRbuffer );
-	if(status!=NFC_SUCCESS){
+	if(status!=M24SR_SUCCESS){
 		getCallback()->onReadByte(this,status,offset,data,length);
 		return status;
 	}
 	status = M24SR_IsCorrectCRC16Residue(uM24SRbuffer, length + M24SR_STATUSRESPONSE_NBBYTE);
-	if(status != NFC_SUCCESS)
+	if(status != M24SR_SUCCESS)
 		getCallback()->onReadByte(this,status,offset,data,length);
 	else{
 		/* retrieve the data without SW1 & SW2 as provided as return value of the function */
@@ -758,7 +804,7 @@
  * @retval Status (SW1&SW2) Status of the operation to complete.
  * @retval M24SR_ERROR_I2CTIMEOUT I2C timeout occurred.
  */
- NFC_StatusTypeDef M24SR::M24SR_SendSTReadBinary(uint16_t Offset,
+ M24SR::StatusTypeDef M24SR::M24SR_SendSTReadBinary(uint16_t Offset,
 		uint8_t NbByteToRead, uint8_t *pBufferRead) {
 	//clamp the buffer to the max size
 	if(NbByteToRead>M24SR_MAX_BYTE_OPERATION_LENGHT)
@@ -767,7 +813,7 @@
 	C_APDU command;
 	uint8_t *pBuffer = uM24SRbuffer;
 	uint16_t NbByte;
-	NFC_StatusTypeDef status;
+	M24SR::StatusTypeDef status;
 
 	/* build the command */
 	command.Header.CLA = C_APDU_CLA_ST;
@@ -782,7 +828,7 @@
 			&NbByte, pBuffer);
 
 	status = M24SR_IO_SendI2Ccommand(NbByte, pBuffer);
-	if(status!=NFC_SUCCESS){
+	if(status!=M24SR_SUCCESS){
 		getCallback()->onReadByte(this,status,Offset,pBufferRead,NbByteToRead);
 		return status;
 	}
@@ -793,7 +839,7 @@
 
 	if(mCommunicationType==M24SR::SYNC){
 		status = M24SR_IO_PollI2C();
-		if(status==NFC_SUCCESS){
+		if(status==M24SR_SUCCESS){
 			return M24SR_ReceiveReadBinary();
 		}else{
 			mLastCommandSend = NONE;
@@ -802,7 +848,7 @@
 		}//if-else
 	}//if
 
-	return NFC_SUCCESS;
+	return M24SR_SUCCESS;
 }
 
 /**
@@ -813,14 +859,14 @@
  * @retval Status (SW1&SW2) Status of the operation to complete.
  * @retval M24SR_ERROR_I2CTIMEOUT I2C timeout occurred.
  */
- NFC_StatusTypeDef M24SR::M24SR_SendUpdateBinary(uint16_t Offset,
+ M24SR::StatusTypeDef M24SR::M24SR_SendUpdateBinary(uint16_t Offset,
 		uint8_t NbByteToWrite, uint8_t *pDataToWrite) {
 	//clamp the buffer to the max size
 	if(NbByteToWrite>M24SR_MAX_BYTE_OPERATION_LENGHT)
 		NbByteToWrite=M24SR_MAX_BYTE_OPERATION_LENGHT;
 
 	C_APDU command;
-	NFC_StatusTypeDef status;
+	M24SR::StatusTypeDef status;
 	uint8_t *pBuffer = uM24SRbuffer;
 	uint16_t NbByte;
 
@@ -839,7 +885,7 @@
 			&NbByte, pBuffer);
 
 	status = M24SR_IO_SendI2Ccommand(NbByte, pBuffer);
-	if(status!=NFC_SUCCESS){
+	if(status!=M24SR_SUCCESS){
 		getCallback()->onUpdatedBinary(this,status,Offset,pDataToWrite,NbByteToWrite);
 		return status;
 	}
@@ -851,7 +897,7 @@
 
 	if(mCommunicationType==M24SR::SYNC){
 		status = M24SR_IO_PollI2C();
-		if(status==NFC_SUCCESS){
+		if(status==M24SR_SUCCESS){
 			return M24SR_ReceiveUpdateBinary();
 		}else{
 			mLastCommandSend = NONE;
@@ -860,13 +906,13 @@
 		}//if-else
 	}
 
-	return NFC_SUCCESS;
+	return M24SR_SUCCESS;
 }
 
-NFC_StatusTypeDef M24SR::M24SR_ReceiveUpdateBinary() {
+M24SR::StatusTypeDef M24SR::M24SR_ReceiveUpdateBinary() {
 
 	uint8_t respBuffer[M24SR_STATUSRESPONSE_NBBYTE];
-	NFC_StatusTypeDef status;
+	M24SR::StatusTypeDef status;
 	const uint16_t length = mLastCommandData.length;
 	uint8_t *data = mLastCommandData.data;
 	const uint16_t offset = mLastCommandData.offset;
@@ -874,20 +920,20 @@
 	mLastCommandSend=NONE;
 
 	status= M24SR_IO_ReceiveI2Cresponse (sizeof(respBuffer) , respBuffer);
-	if(status != NFC_SUCCESS){
+	if(status != M24SR_SUCCESS){
 		getCallback()->onUpdatedBinary(this,status,offset,data,length);
 		return status;
 	}
 
-	if (IsSBlock(respBuffer) == NFC_SUCCESS) {
+	if (IsSBlock(respBuffer) == M24SR_SUCCESS) {
 		/*check the CRC */
 		status =M24SR_IsCorrectCRC16Residue(respBuffer,
 					M24SR_WATINGTIMEEXTRESPONSE_NBBYTE);
 		// TODO: why if we check ==NFC_Commandsuccess it fail?
-		if (status != NFC_IO_ERROR_CRC) {
+		if (status != M24SR_IO_ERROR_CRC) {
 			/* send the FrameExension response*/
 			status = M24SR_SendFWTExtension(respBuffer[M24SR_OFFSET_PCB + 1]);
-			if(status!=NFC_SUCCESS){ //something get wrong -> abort the update
+			if(status!=M24SR_SUCCESS){ //something get wrong -> abort the update
 				getCallback()->onUpdatedBinary(this,status,offset,data,length);
 			}//status
 		}//if
@@ -908,17 +954,17 @@
  * @retval Status (SW1&SW2) Status of the operation to complete.
  * @retval M24SR_ERROR_I2CTIMEOUT I2C timeout occurred.
  */
- NFC_StatusTypeDef M24SR::M24SR_SendVerify(uint16_t uPwdId, uint8_t NbPwdByte,
+ M24SR::StatusTypeDef M24SR::M24SR_SendVerify(uint16_t uPwdId, uint8_t NbPwdByte,
 		const uint8_t *pPwd) {
 	C_APDU command;
-	NFC_StatusTypeDef status;
+	M24SR::StatusTypeDef status;
 	uint8_t *pBuffer = uM24SRbuffer;
 	uint16_t NbByte;
 
 	/*check the parameters */
 	if ((uPwdId > 0x0003)|| ((NbPwdByte != 0x00) && (NbPwdByte != 0x10))) {
-		getCallback()->onVerified(this,NFC_IO_ERROR_PARAMETER,constToPasswordType(uPwdId),pPwd);
-		return NFC_IO_ERROR_PARAMETER;
+		getCallback()->onVerified(this,M24SR_IO_ERROR_PARAMETER,constToPasswordType(uPwdId),pPwd);
+		return M24SR_IO_ERROR_PARAMETER;
 	}
 
 	/* build the command */
@@ -945,7 +991,7 @@
 
 	/* send the request */
 	status = M24SR_IO_SendI2Ccommand(NbByte, pBuffer);
-	if(status!=NFC_SUCCESS){
+	if(status!=M24SR_SUCCESS){
 		getCallback()->onVerified(this,status,constToPasswordType(uPwdId),pPwd);
 		return status;
 	}
@@ -956,7 +1002,7 @@
 
 	if(mCommunicationType==M24SR::SYNC){
 		status = M24SR_IO_PollI2C();
-		if(status == NFC_SUCCESS)
+		if(status == M24SR_SUCCESS)
 			return M24SR_ReceiveVerify();
 		else{
 			mLastCommandSend = NONE;
@@ -965,11 +1011,11 @@
 		}
 	}
 
-	return NFC_SUCCESS;
+	return M24SR_SUCCESS;
 }
 
-NFC_StatusTypeDef M24SR::M24SR_ReceiveVerify(){
-	NFC_StatusTypeDef status;
+M24SR::StatusTypeDef M24SR::M24SR_ReceiveVerify(){
+	M24SR::StatusTypeDef status;
 	uint8_t respBuffer[M24SR_STATUSRESPONSE_NBBYTE];
 	mLastCommandSend=NONE;
 
@@ -978,7 +1024,7 @@
 
 	status=M24SR_IO_ReceiveI2Cresponse (sizeof(respBuffer),respBuffer);
 
-	if(status !=NFC_SUCCESS){
+	if(status !=M24SR_SUCCESS){
 		getCallback()->onVerified(this,status,type,data);
 		return status;
 	}
@@ -995,18 +1041,18 @@
  * @retval Status (SW1&SW2) Satus of the operation to complete.
  * @retval M24SR_ERROR_I2CTIMEOUT I2C timeout occurred.
  */
- NFC_StatusTypeDef M24SR::M24SR_SendChangeReferenceData(uint16_t uPwdId,
+ M24SR::StatusTypeDef M24SR::M24SR_SendChangeReferenceData(uint16_t uPwdId,
 		uint8_t *pPwd) {
 	C_APDU command;
-	NFC_StatusTypeDef status;
+	M24SR::StatusTypeDef status;
 	uint8_t *pBuffer = uM24SRbuffer;
 	uint16_t NbByte;
 
 	/*check the parameters */
 	if (uPwdId > 0x0003) {
-		getCallback()->onChangeReferenceData(this,NFC_IO_ERROR_PARAMETER,
+		getCallback()->onChangeReferenceData(this,M24SR_IO_ERROR_PARAMETER,
 				constToPasswordType(uPwdId), pPwd);
-		return NFC_IO_ERROR_PARAMETER;
+		return M24SR_IO_ERROR_PARAMETER;
 	}
 
 	/* build the command */
@@ -1019,13 +1065,13 @@
 	command.Body.LC = M24SR_PASSWORD_NBBYTE;
 	/* copy the password */
 	command.Body.pData = pPwd;
-	/* build the I²C command */
+	/* build the I²C command */
 	M24SR_BuildIBlockCommand(M24SR_CMDSTRUCT_CHANGEREFDATA, &command, uDIDbyte,
 			&NbByte, pBuffer);
 
 	/* send the request */
 	status = M24SR_IO_SendI2Ccommand(NbByte, pBuffer);
-	if(status != NFC_SUCCESS){
+	if(status != M24SR_SUCCESS){
 		getCallback()->onChangeReferenceData(this,status,
 							constToPasswordType(uPwdId), pPwd);
 		return status;
@@ -1038,7 +1084,7 @@
 
 	if(mCommunicationType==M24SR::SYNC){
 		status = M24SR_IO_PollI2C();
-		if(status == NFC_SUCCESS){
+		if(status == M24SR_SUCCESS){
 			return M24SR_ReceiveChangeReferenceData();
 		}else{
 			mLastCommandSend = NONE;
@@ -1048,11 +1094,11 @@
 		}//if-else
 	}//if
 
-	return NFC_SUCCESS;
+	return M24SR_SUCCESS;
 }
 
-NFC_StatusTypeDef M24SR::M24SR_ReceiveChangeReferenceData(){
-	NFC_StatusTypeDef status;
+M24SR::StatusTypeDef M24SR::M24SR_ReceiveChangeReferenceData(){
+	M24SR::StatusTypeDef status;
 	//TODO the size is 3?
 	uint8_t rensponseBuffer[M24SR_STATUSRESPONSE_NBBYTE];
 
@@ -1060,14 +1106,12 @@
 	uint8_t *data = mLastCommandData.data;
 
 	status =M24SR_IO_ReceiveI2Cresponse (M24SR_STATUSRESPONSE_NBBYTE , rensponseBuffer );
-	if(status!=NFC_SUCCESS){
+	if(status!=M24SR_SUCCESS){
 		getCallback()->onChangeReferenceData(this,status,type,data);
 		return status;
 	}//else
 
 	status = M24SR_IsCorrectCRC16Residue(rensponseBuffer, M24SR_STATUSRESPONSE_NBBYTE);
-
-	status = (status == NFC_COMMAND_SUCCESS) ? NFC_SUCCESS : status;
 	getCallback()->onChangeReferenceData(this,status,type,data);
 	return status;
 }
@@ -1078,18 +1122,18 @@
  * @retval Status (SW1&SW2) Status of the operation to complete.
  * @retval M24SR_ERROR_I2CTIMEOUT I2C timeout occurred.
  */
- NFC_StatusTypeDef M24SR::M24SR_SendEnableVerificationRequirement(
+ M24SR::StatusTypeDef M24SR::M24SR_SendEnableVerificationRequirement(
 		uint16_t uReadOrWrite) {
 	C_APDU command;
-	NFC_StatusTypeDef status;
+	M24SR::StatusTypeDef status;
 	uint8_t *pBuffer = uM24SRbuffer;
 	uint16_t NbByte;
 
 	/*check the parameters */
 	if ((uReadOrWrite != 0x0001) && (uReadOrWrite != 0x0002)) {
-		getCallback()->onEnableVerificationRequirement(this,NFC_IO_ERROR_PARAMETER,
+		getCallback()->onEnableVerificationRequirement(this,M24SR_IO_ERROR_PARAMETER,
 				constToPasswordType(uReadOrWrite));
-		return NFC_IO_ERROR_PARAMETER;
+		return M24SR_IO_ERROR_PARAMETER;
 	}
 
 	/* build the command */
@@ -1098,13 +1142,13 @@
 	/* copy the Password Id */
 	command.Header.P1 = GETMSB(uReadOrWrite);
 	command.Header.P2 = GETLSB(uReadOrWrite);
-	/* build the I²C command */
+	/* build the I²C command */
 	M24SR_BuildIBlockCommand( M24SR_CMDSTRUCT_ENABLEVERIFREQ, &command,
 			uDIDbyte, &NbByte, pBuffer);
 
 	/* send the request */
 	status = M24SR_IO_SendI2Ccommand(NbByte, pBuffer);
-	if(status != NFC_SUCCESS){
+	if(status != M24SR_SUCCESS){
 		getCallback()->onEnableVerificationRequirement(this,status,
 				constToPasswordType(uReadOrWrite));
 		return status;
@@ -1116,7 +1160,7 @@
 
 	if(mCommunicationType==M24SR::SYNC){
 		status = M24SR_IO_PollI2C();
-		if(status == NFC_SUCCESS){
+		if(status == M24SR_SUCCESS){
 			return M24SR_ReceiveEnableVerificationRequirement();
 		}else{
 			mLastCommandSend = NONE;
@@ -1126,25 +1170,23 @@
 		}//if-else
 	}//if
 
-	return NFC_SUCCESS;
+	return M24SR_SUCCESS;
 }
 
-NFC_StatusTypeDef M24SR::M24SR_ReceiveEnableVerificationRequirement(){
-	NFC_StatusTypeDef status;
+M24SR::StatusTypeDef M24SR::M24SR_ReceiveEnableVerificationRequirement(){
+	M24SR::StatusTypeDef status;
 	//TODO the size is 3?
 	uint8_t rensponseBuffer[M24SR_STATUSRESPONSE_NBBYTE];
 
 	const PasswordType_t type = constToPasswordType(mLastCommandData.offset);
 
 	status =M24SR_IO_ReceiveI2Cresponse (M24SR_STATUSRESPONSE_NBBYTE , rensponseBuffer );
-	if(status!=NFC_SUCCESS){
+	if(status!=M24SR_SUCCESS){
 		getCallback()->onEnableVerificationRequirement(this,status,type);
 		return status;
 	}//else
 
 	status = M24SR_IsCorrectCRC16Residue(rensponseBuffer, M24SR_STATUSRESPONSE_NBBYTE);
-
-	status = (status == NFC_COMMAND_SUCCESS) ? NFC_SUCCESS : status;
 	getCallback()->onEnableVerificationRequirement(this,status,type);
 	return status;
 }
@@ -1156,18 +1198,18 @@
  * @retval Status (SW1&SW2)   Status of the operation to complete.
  * @retval M24SR_ERROR_I2CTIMEOUT I2C timeout occurred.
  */
- NFC_StatusTypeDef M24SR::M24SR_SendDisableVerificationRequirement(
+ M24SR::StatusTypeDef M24SR::M24SR_SendDisableVerificationRequirement(
 		uint16_t uReadOrWrite) {
 	C_APDU command;
-	NFC_StatusTypeDef status;
+	M24SR::StatusTypeDef status;
 	uint8_t *pBuffer = uM24SRbuffer;
 	uint16_t NbByte;
 
 	/*check the parameters */
 	if ((uReadOrWrite != 0x0001) && (uReadOrWrite != 0x0002)) {
-		getCallback()->onDisableVerificationRequirement(this,NFC_IO_ERROR_PARAMETER,
+		getCallback()->onDisableVerificationRequirement(this,M24SR_IO_ERROR_PARAMETER,
 				 constToPasswordType(uReadOrWrite));
-		return NFC_IO_ERROR_PARAMETER;
+		return M24SR_IO_ERROR_PARAMETER;
 	}
 
 	/* build the command */
@@ -1176,13 +1218,13 @@
 	/* copy the Password Id */
 	command.Header.P1 = GETMSB(uReadOrWrite);
 	command.Header.P2 = GETLSB(uReadOrWrite);
-	/* build the I²C command */
+	/* build the I²C command */
 	M24SR_BuildIBlockCommand(M24SR_CMDSTRUCT_DISABLEVERIFREQ, &command,
 			uDIDbyte, &NbByte, pBuffer);
 
 	/* send the request */
 	status = M24SR_IO_SendI2Ccommand(NbByte, pBuffer);
-	if(status != NFC_SUCCESS){
+	if(status != M24SR_SUCCESS){
 		getCallback()->onDisableVerificationRequirement(this,status,
 				constToPasswordType(uReadOrWrite));
 		return status;
@@ -1194,7 +1236,7 @@
 
 	if(mCommunicationType==M24SR::SYNC){
 		status = M24SR_IO_PollI2C();
-		if(status==NFC_SUCCESS){
+		if(status==M24SR_SUCCESS){
 			return M24SR_ReceiveDisableVerificationRequirement();
 		}else{
 			mLastCommandSend = NONE;
@@ -1204,26 +1246,24 @@
 		}//if-else
 	}
 
-	return NFC_SUCCESS;
+	return M24SR_SUCCESS;
 
 }
 
-NFC_StatusTypeDef M24SR::M24SR_ReceiveDisableVerificationRequirement(){
-	NFC_StatusTypeDef status;
+M24SR::StatusTypeDef M24SR::M24SR_ReceiveDisableVerificationRequirement(){
+	M24SR::StatusTypeDef status;
 	//TODO the size is 3?
 	uint8_t rensponseBuffer[M24SR_STATUSRESPONSE_NBBYTE];
 
 	PasswordType_t type = constToPasswordType(mLastCommandData.offset);
 
 	status =M24SR_IO_ReceiveI2Cresponse (M24SR_STATUSRESPONSE_NBBYTE , rensponseBuffer );
-	if(status!=NFC_SUCCESS){
+	if(status!=M24SR_SUCCESS){
 		getCallback()->onDisableVerificationRequirement(this,status,type);
 		return status;
 	}//else
 
 	status = M24SR_IsCorrectCRC16Residue(rensponseBuffer, M24SR_STATUSRESPONSE_NBBYTE);
-
-	status = (status == NFC_COMMAND_SUCCESS) ? NFC_SUCCESS : status;
 	getCallback()->onDisableVerificationRequirement(this,status,type);
 	return status;
 }
@@ -1235,18 +1275,18 @@
  * @retval Status (SW1&SW2)   Status of the operation to complete.
  * @retval M24SR_ERROR_I2CTIMEOUT I2C timeout occurred.
  */
- NFC_StatusTypeDef M24SR::M24SR_SendEnablePermanentState(uint16_t uReadOrWrite) {
+ M24SR::StatusTypeDef M24SR::M24SR_SendEnablePermanentState(uint16_t uReadOrWrite) {
 	C_APDU command;
-	NFC_StatusTypeDef status;
+	M24SR::StatusTypeDef status;
 
 	uint8_t *pBuffer = uM24SRbuffer;
 	uint16_t NbByte;
 
 	/*check the parameters */
 	if ((uReadOrWrite != 0x0001) && (uReadOrWrite != 0x0002)) {
-		getCallback()->onEnablePermanentState(this,NFC_IO_ERROR_PARAMETER,
+		getCallback()->onEnablePermanentState(this,M24SR_IO_ERROR_PARAMETER,
 						constToPasswordType(uReadOrWrite));
-		return NFC_IO_ERROR_PARAMETER;
+		return M24SR_IO_ERROR_PARAMETER;
 	}
 
 	/* build the command */
@@ -1255,13 +1295,13 @@
 	/* copy the Password Id */
 	command.Header.P1 = GETMSB(uReadOrWrite);
 	command.Header.P2 = GETLSB(uReadOrWrite);
-	/* build the I²C command */
+	/* build the I2C command */
 	M24SR_BuildIBlockCommand(M24SR_CMDSTRUCT_ENABLEVERIFREQ, &command, uDIDbyte,
 			&NbByte, pBuffer);
 
 	/* send the request */
 	status = M24SR_IO_SendI2Ccommand(NbByte, pBuffer);
-	if(status != NFC_SUCCESS){
+	if(status != M24SR_SUCCESS){
 		getCallback()->onEnablePermanentState(this,status,
 				constToPasswordType(uReadOrWrite));
 		return status;
@@ -1273,7 +1313,7 @@
 
 	if(mCommunicationType==M24SR::SYNC){
 		status = M24SR_IO_PollI2C();
-		if(status==NFC_SUCCESS){
+		if(status==M24SR_SUCCESS){
 			return M24SR_ReceiveEnablePermanentState();
 		}else{
 			mLastCommandSend = NONE;
@@ -1283,25 +1323,23 @@
 		}//if-else
 	}
 
-	return NFC_SUCCESS;
+	return M24SR_SUCCESS;
 }
 
-NFC_StatusTypeDef M24SR::M24SR_ReceiveEnablePermanentState(){
-	NFC_StatusTypeDef status;
+M24SR::StatusTypeDef M24SR::M24SR_ReceiveEnablePermanentState(){
+	M24SR::StatusTypeDef status;
 	//TODO the size is 3?
 	uint8_t rensponseBuffer[M24SR_STATUSRESPONSE_NBBYTE];
 
 	PasswordType_t type = constToPasswordType(mLastCommandData.offset);
 
 	status =M24SR_IO_ReceiveI2Cresponse (M24SR_STATUSRESPONSE_NBBYTE , rensponseBuffer );
-	if(status!=NFC_SUCCESS){
+	if(status!=M24SR_SUCCESS){
 		getCallback()->onEnablePermanentState(this,status,type);
 		return status;
 	}//else
 
 	status = M24SR_IsCorrectCRC16Residue(rensponseBuffer, M24SR_STATUSRESPONSE_NBBYTE);
-
-	status = (status == NFC_COMMAND_SUCCESS) ? NFC_SUCCESS : status;
 	getCallback()->onEnablePermanentState(this,status,type);
 	return status;
 }
@@ -1313,17 +1351,17 @@
  * @retval Status (SW1&SW2)   Status of the operation to complete.
  * @retval M24SR_ERROR_I2CTIMEOUT I2C timeout occurred.
  */
- NFC_StatusTypeDef M24SR::M24SR_SendDisablePermanentState(uint16_t uReadOrWrite) {
+ M24SR::StatusTypeDef M24SR::M24SR_SendDisablePermanentState(uint16_t uReadOrWrite) {
 	C_APDU command;
-	NFC_StatusTypeDef status;
+	M24SR::StatusTypeDef status;
 	uint8_t *pBuffer = uM24SRbuffer;
 	uint16_t NbByte;
 
 	/*check the parameters */
 	if ((uReadOrWrite != 0x0001) && (uReadOrWrite != 0x0002)) {
-		getCallback()->onDisablePermanentState(this,NFC_IO_ERROR_PARAMETER,
+		getCallback()->onDisablePermanentState(this,M24SR_IO_ERROR_PARAMETER,
 				constToPasswordType(uReadOrWrite));
-		return NFC_IO_ERROR_PARAMETER;
+		return M24SR_IO_ERROR_PARAMETER;
 	}
 
 	/* build the command */
@@ -1332,25 +1370,25 @@
 	/* copy the Password Id */
 	command.Header.P1 = GETMSB(uReadOrWrite);
 	command.Header.P2 = GETLSB(uReadOrWrite);
-	/* build the I²C command */
+	/* build the I²C command */
 	M24SR_BuildIBlockCommand(M24SR_CMDSTRUCT_DISABLEVERIFREQ, &command,
 			uDIDbyte, &NbByte, pBuffer);
 
 	/* send the request */
 	status = M24SR_IO_SendI2Ccommand(NbByte, pBuffer);
-	if(status != NFC_SUCCESS){
+	if(status != M24SR_SUCCESS){
 		getCallback()->onEnablePermanentState(this,status,
 				constToPasswordType(uReadOrWrite));
 		return status;
 	}
 
-	mLastCommandSend = ENABLE_PERMANET_STATE;
+	mLastCommandSend = DISABLE_PERMANET_STATE;
 	//use the offset filed for store the pwd id;
 	mLastCommandData.offset = (uint8_t)uReadOrWrite;
 
 	if(mCommunicationType==M24SR::SYNC){
 		status = M24SR_IO_PollI2C();
-		if(status==NFC_SUCCESS){
+		if(status==M24SR_SUCCESS){
 			return M24SR_ReceiveDisablePermanentState();
 		}else{
 			mLastCommandSend = NONE;
@@ -1360,25 +1398,23 @@
 		}//if-else
 	}
 
-	return NFC_SUCCESS;
+	return M24SR_SUCCESS;
 }
 
-NFC_StatusTypeDef M24SR::M24SR_ReceiveDisablePermanentState(){
-	NFC_StatusTypeDef status;
+M24SR::StatusTypeDef M24SR::M24SR_ReceiveDisablePermanentState(){
+	M24SR::StatusTypeDef status;
 	//TODO the size is 3?
 	uint8_t rensponseBuffer[M24SR_STATUSRESPONSE_NBBYTE];
 
 	PasswordType_t type = constToPasswordType(mLastCommandData.offset);
 
 	status =M24SR_IO_ReceiveI2Cresponse (M24SR_STATUSRESPONSE_NBBYTE , rensponseBuffer );
-	if(status!=NFC_SUCCESS){
+	if(status!=M24SR_SUCCESS){
 		getCallback()->onDisablePermanentState(this,status,type);
 		return status;
 	}//else
 
 	status = M24SR_IsCorrectCRC16Residue(rensponseBuffer, M24SR_STATUSRESPONSE_NBBYTE);
-
-	status = (status == NFC_COMMAND_SUCCESS) ? NFC_SUCCESS : status;
 	getCallback()->onDisablePermanentState(this,status,type);
 	return status;
 }
@@ -1389,15 +1425,14 @@
  * @retval Status (SW1&SW2)   Status of the operation to complete.
  * @retval M24SR_ERROR_I2CTIMEOUT I2C timeout occurred.
  */
- NFC_StatusTypeDef M24SR::M24SR_SendInterrupt(void) {
+ M24SR::StatusTypeDef M24SR::M24SR_SendInterrupt(void) {
 	C_APDU command;
 
 	uint8_t *pBuffer = uM24SRbuffer;
 	uint16_t uP1P2 = 0x001E;
-	NFC_StatusTypeDef status = NFC_SUCCESS;
 	uint16_t NbByte;
 
-	status = M24SR_ManageI2CGPO(INTERRUPT);
+	M24SR_ManageI2CGPO(INTERRUPT);
 
 	/* build the command */
 	command.Header.CLA = C_APDU_CLA_ST;
@@ -1406,7 +1441,7 @@
 	command.Header.P1 = GETMSB(uP1P2);
 	command.Header.P2 = GETLSB(uP1P2);
 	command.Body.LC = 0x00;
-	/* build the I²C command */
+	/* build the I²C command */
 	M24SR_BuildIBlockCommand(M24SR_CMDSTRUCT_SENDINTERRUPT, &command, uDIDbyte,
 			&NbByte, pBuffer);
 
@@ -1417,12 +1452,7 @@
 	errchk(
 			M24SR_IO_ReceiveI2Cresponse (M24SR_STATUSRESPONSE_NBBYTE , pBuffer ));
 
-	status = M24SR_IsCorrectCRC16Residue(pBuffer, M24SR_STATUSRESPONSE_NBBYTE);
-
-	if(status == NFC_COMMAND_SUCCESS)
-		return NFC_SUCCESS;
-	else
-		return status;
+	return M24SR_IsCorrectCRC16Residue(pBuffer, M24SR_STATUSRESPONSE_NBBYTE);
 
 }
 
@@ -1432,19 +1462,18 @@
  * @retval Status (SW1&SW2) Status of the operation to complete.
  * @retval M24SR_ERROR_I2CTIMEOUT I2C timeout occurred.
  */
- NFC_StatusTypeDef M24SR::M24SR_StateControl(uint8_t uSetOrReset) {
+ M24SR::StatusTypeDef M24SR::M24SR_StateControl(uint8_t uSetOrReset) {
 	C_APDU command;
 	uint8_t *pBuffer = uM24SRbuffer;
 	uint16_t uP1P2 = 0x001F;
-	NFC_StatusTypeDef status = NFC_SUCCESS;
 	uint16_t NbByte;
 
 	/*check the parameters */
 	if ((uSetOrReset != 0x01) && (uSetOrReset != 0x00)) {
-		return NFC_IO_ERROR_PARAMETER;
+		return M24SR_IO_ERROR_PARAMETER;
 	}
 
-	status = M24SR_ManageI2CGPO(STATE_CONTROL);
+	M24SR_ManageI2CGPO(STATE_CONTROL);
 
 	/* build the command */
 	command.Header.CLA = C_APDU_CLA_ST;
@@ -1457,7 +1486,7 @@
 	/* copy the data */
 	//memcpy(command.Body.pData , &uSetOrReset, 0x01 );
 	//command.Body.LE = 0x00 ;
-	/* build the I²C command */
+	/* build the I2C command */
 	M24SR_BuildIBlockCommand( M24SR_CMDSTRUCT_GPOSTATE, &command, uDIDbyte,
 			&NbByte, pBuffer);
 
@@ -1468,19 +1497,15 @@
 	errchk(
 			M24SR_IO_ReceiveI2Cresponse (M24SR_STATUSRESPONSE_NBBYTE , pBuffer ));
 
-	status = M24SR_IsCorrectCRC16Residue(pBuffer, M24SR_STATUSRESPONSE_NBBYTE);
+	return M24SR_IsCorrectCRC16Residue(pBuffer, M24SR_STATUSRESPONSE_NBBYTE);
 
-	if(status == NFC_COMMAND_SUCCESS)
-		return NFC_SUCCESS;
-	else
-		return status;
 }
 
 
-NFC_StatusTypeDef M24SR::M24SR_ManageI2CGPO(NFC_GPO_MGMT GPO_I2Cconfig) {
+M24SR::StatusTypeDef M24SR::M24SR_ManageI2CGPO(NFC_GPO_MGMT GPO_I2Cconfig) {
 
 	if (GPO_I2Cconfig > STATE_CONTROL) {
-		return NFC_IO_ERROR_PARAMETER;
+		return M24SR_IO_ERROR_PARAMETER;
 	}
 
 	//enable the callback for change the gpo
@@ -1491,10 +1516,10 @@
 	return M24SR_SendSelectApplication();
 }
 
-NFC_StatusTypeDef M24SR::M24SR_ManageRFGPO(NFC_GPO_MGMT GPO_I2Cconfig) {
+M24SR::StatusTypeDef M24SR::M24SR_ManageRFGPO(NFC_GPO_MGMT GPO_I2Cconfig) {
 
 	if (GPO_I2Cconfig > STATE_CONTROL) {
-		return NFC_IO_ERROR_PARAMETER;
+		return M24SR_IO_ERROR_PARAMETER;
 	}
 
 	//enable the callback for change the gpo
@@ -1505,34 +1530,34 @@
 	return M24SR_SendSelectApplication();
 }
 
-NFC_StatusTypeDef M24SR::M24SR_RFConfig(uint8_t OnOffChoice) {
+M24SR::StatusTypeDef M24SR::M24SR_RFConfig(uint8_t OnOffChoice) {
 	/* Disable RF */
 	if (OnOffChoice != 0) {
 		M24SR_IO_RFDIS_WritePin(GPIO_PIN_RESET);
 	} else {
 		M24SR_IO_RFDIS_WritePin(GPIO_PIN_SET);
 	}
-	return NFC_SUCCESS;
+	return M24SR_SUCCESS;
 }
 
-NFC_StatusTypeDef M24SR::M24SR_IO_SendI2Ccommand(uint8_t NbByte,
+M24SR::StatusTypeDef M24SR::M24SR_IO_SendI2Ccommand(uint8_t NbByte,
 		uint8_t *pBuffer) {
 	int ret = dev_I2C.write(address, (char*) pBuffer, NbByte);
 	if (ret == 0)
-		return NFC_SUCCESS;
-	return NFC_IO_ERROR_I2CTIMEOUT;
+		return M24SR_SUCCESS;
+	return M24SR_IO_ERROR_I2CTIMEOUT;
 }
 
-NFC_StatusTypeDef M24SR::M24SR_IO_ReceiveI2Cresponse(uint8_t NbByte,
+M24SR::StatusTypeDef M24SR::M24SR_IO_ReceiveI2Cresponse(uint8_t NbByte,
 		uint8_t *pBuffer) {
 	int ret = dev_I2C.read(address, (char*) pBuffer, NbByte);
 	if (ret == 0)
-		return NFC_SUCCESS;
+		return M24SR_SUCCESS;
 
-	return NFC_IO_ERROR_I2CTIMEOUT;
+	return M24SR_IO_ERROR_I2CTIMEOUT;
 }
 
-NFC_StatusTypeDef M24SR::M24SR_IO_PollI2C(void) {
+M24SR::StatusTypeDef M24SR::M24SR_IO_PollI2C(void) {
 
 	int status = 1;
 	char buffer;
@@ -1541,12 +1566,12 @@
 	}
 
 	if (status == 0)
-		return NFC_SUCCESS;
+		return M24SR_SUCCESS;
 	//else
-	return NFC_IO_ERROR_I2CTIMEOUT;
+	return M24SR_IO_ERROR_I2CTIMEOUT;
 }
 
-NFC_StatusTypeDef M24SR::ManageEvent(void){
+M24SR::StatusTypeDef M24SR::ManageEvent(void){
 
 	switch(mLastCommandSend){
 		case SELECT_APPLICATION:
@@ -1571,11 +1596,18 @@
 			return M24SR_ReceiveEnableVerificationRequirement();
 		case DISABLE_VERIFICATION_REQUIREMENT:
 			return M24SR_ReceiveDisableVerificationRequirement();
+		case ENABLE_PERMANET_STATE:
+			return M24SR_ReceiveEnablePermanentState();
+		case DISABLE_PERMANET_STATE:
+			return M24SR_ReceiveDisablePermanentState();
 
 		default:
-			return NFC_SUCCESS;
+			return M24SR_SUCCESS;
 	}//switch
 }//manageInterrupt
 
+NDefLib::NDefNfcTag& M24SR::getNDefTag(){
+		return *mNDefTagUtil;
+}
 
 /******************* (C) COPYRIGHT 2013 STMicroelectronics *****END OF FILE****/