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
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 .
Diff: m24sr/lib_M24SR.cpp
- Revision:
- 1:6d202b62ed68
- Parent:
- 0:674813bd5ec9
- Child:
- 2:0648c1561eb2
--- a/m24sr/lib_M24SR.cpp Thu Nov 19 08:50:18 2015 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,595 +0,0 @@
-/**
- ******************************************************************************
- * @file lib_M24SR.c
- * @author MMY Application Team
- * @version V1.1.0
- * @date 20-October-2014
- * @brief This file help to manage M24SR in a NFC forum context.
- ******************************************************************************
- * @attention
- *
- * <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
- *
- * 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.
- *
- ******************************************************************************
- */
-
-
-/* Includes ------------------------------------------------------------------*/
-#include "m24sr_class.h"
-#include "lib_M24SR.h"
-
-/** @addtogroup M24SR_Driver
- * @{
- */
-
-/** @defgroup lib_M24SR
- * @{
- * @brief This is the library to interface with the M24SR dynamic tag.
- * This layer simplify the use of the M24SR driver by sequencing
- * some commands.
- */
-
-uint8_t I2CPassword[16]={0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
-
-static uint32_t NDEFSessionOpenID=NDEF_SESSION_CLOSED;
-
-/* Init NDEF_FileID with bad value in case Init failed */
-static uint16_t NDEF_FileID = 0xDEAD;
-
-
-extern M24SR *m24srDrv;
-
-/** @defgroup libM24SR_Private_Functions
- * @{
- */
-
-/**
- * @}
- */
-
-
-/** @defgroup libM24SR_Public_Functions
- * @{
- */
-
-
-
-
-/**
- * @brief This fonction initialize the M24SR
- * @param CCBuffer : pointer on the buffer to store CC file
- * @param size : number of byte of data to read
- * @retval NFC_OK : Initalization done
- * @retval NFC_ERROR : Not able to Initialize.
- */
-uint16_t M24SR_Initialization ( uint8_t* CCBuffer, uint8_t size )
-{
- uint16_t status = NFC_ERROR;
- uint16_t trials = 5; /* wait 1sec, driver is configured to let 200ms for command to complete */
- /* which is enough for all commands except GetSession if RF session is already opened */
- /* Smartphone generaly release the session within the second, but customer can modify this value */
-
-
- /* Perform HW initialization */
- (*m24srDrv).Init(NULL);
- /* Read CC file */
- while( status != NFC_OK && trials)
- {
- status = (*m24srDrv).GetSession();
- trials--;
- }
- if (status != NFC_OK)
- return NFC_ERROR;
- /*===================================*/
- /* Select the NFC type 4 application */
- /*===================================*/
- errorchk( (*m24srDrv).SelectApplication() );
-
- /*==================*/
- /* select a CC file */
- /*==================*/
- errorchk ((*m24srDrv).SelectCCfile( ) );
-
- /* read the first 15 bytes of the CC file */
- if( M24SR_ReadData ( 0x0000 , 0x0F , CCBuffer )== NFC_OK)
- {
- NDEF_FileID = (uint16_t) ((CCBuffer[0x09]<<8) | CCBuffer[0x0A]);
- errorchk( (*m24srDrv).Deselect ( ) );
- return NFC_OK;
- }
- else
- errorchk( (*m24srDrv).Deselect ( ) );
-
-Error:
- return NFC_ERROR;
-
-}
-
-/**
- * @brief This fonction retrieve the NDEF file ID of NDEF file present in M24SR
- * @param NDEF_fileID : To store NDEF ID
- * @retval NFC_OK : File ID read
- * @retval NFC_ERROR : Not able to read file ID.
- */
-uint16_t M24SR_GetNDEFFileId ( uint16_t *NDEF_fileID )
-{
- if( NDEF_FileID != 0xDEAD)
- {
- *NDEF_fileID = NDEF_FileID;
- return NFC_OK;
- }
- else
- {
- return NFC_ERROR;
- }
-}
-
-
-/**
- * @brief This fonction configure the M24SR to access NDEF message by I2C
- * @param NDEF_fileID : NDEF identification to select NDEF in M24SR
- * @param Priority: 2 options: check if M24SR available to open session (no RF session on going)
- * Kill RF session and open I2C sesssion.
- * @retval NFC_OK : Session is opened
- * @retval NFC_ERROR : Not able to open session.
- */
-uint16_t M24SR_OpenNDEFSession ( uint16_t NDEF_fileID, uint16_t Priority )
-{
- uint16_t status = NFC_ERROR;
- uint16_t trials = 5; /* wait 1sec, driver is configured to let 200ms for command to complete */
- /* which is enough for all commands except GetSession if RF session is already opened */
- /* Smartphone generaly release the session within the second, but customer can modify this value */
-
- if(NDEFSessionOpenID == NDEF_SESSION_CLOSED)
- {
- if( Priority == TAKE_SESSION)
- {
- status = (*m24srDrv).KillSession( );
- }
- else
- {
- while( status != NFC_OK && trials)
- {
- status = (*m24srDrv).GetSession( );
- trials--;
- }
- }
- if (status != NFC_OK)
- {
- /* seems session already open on RF side */
- /* But in case of I2C issue try to init again */
- (*m24srDrv).Init( NULL);
- return NFC_ERROR;
- }
-
- /*===================================*/
- /* Select the NFC type 4 application */
- /*===================================*/
- errorchk( (*m24srDrv).SelectApplication( ) );
-
- /*====================*/
- /* select NDEF file */
- /*====================*/
- errorchk( (*m24srDrv).SelectNDEFfile( NDEF_fileID) );
-
- NDEFSessionOpenID = (uint32_t)(NDEF_fileID);
-
- return NFC_OK;
- }
- else if(NDEFSessionOpenID == NDEF_fileID)
- {
- /* Session already Open not an issue caller can perform access in NDEF file */
- return NFC_OK;
- }
-
-Error:
- return NFC_ERROR;
-}
-
-/**
- * @brief This fonction close the NDEF Session.
- * @param NDEF_fileID : NDEF identification to select NDEF in M24SR
- * @retval NFC_OK : Session is closed
- * @retval NFC_ERROR : Not able to close session.
- */
-uint16_t M24SR_CloseNDEFSession ( uint16_t NDEF_fileID )
-{
- uint16_t status = NFC_ERROR;
-
- if(NDEFSessionOpenID == (uint32_t)(NDEF_fileID))
- {
- errorchk( (*m24srDrv).Deselect ( ) );
- NDEFSessionOpenID = NDEF_SESSION_CLOSED;
-
- return NFC_OK;
- }
- else if(NDEFSessionOpenID == NDEF_SESSION_CLOSED)
- {
- /* Not an NFC_ERROR as session is already closed */
- return NFC_OK;
- }
-
-Error:
- return NFC_ERROR;
-}
-
-/**
- * @brief This fonction read the data stored in M24SR at defined offset
- * @param Offset : Offset in the NDEF file in M24SR
- * @param DataSize : Number of byte to read
- * @param pData : pointer on buffer to store read data
- * @retval Status (SW1&SW2) : Status of the operation.
- */
-uint16_t M24SR_ReadData ( uint16_t Offset , uint16_t DataSize , uint8_t* pData)
-{
- uint16_t status;
-
- if( DataSize > M24SR_READ_MAX_NBBYTE)
- {
- do
- {
- status = (*m24srDrv).ReadBinary ( Offset, M24SR_READ_MAX_NBBYTE , pData);
- Offset += M24SR_READ_MAX_NBBYTE;
- pData += M24SR_READ_MAX_NBBYTE;
- DataSize -= M24SR_READ_MAX_NBBYTE;
- }while( DataSize > M24SR_READ_MAX_NBBYTE && status == NFC_OK);
- if( status == NFC_OK && DataSize)
- status = (*m24srDrv).ReadBinary ( Offset, (uint8_t)(DataSize) , pData);
- }
- else
- status = (*m24srDrv).ReadBinary ( Offset, (uint8_t)(DataSize) , pData);
-
- return status;
-}
-
-/**
- * @brief This fonction read the data stored in M24SR at defined offset without NDEF concideration
- * @param Offset : Offset in the NDEF file in M24SR
- * @param DataSize : Number of byte to read
- * @param pData : pointer on buffer to store read data
- * @retval Status (SW1&SW2) : Status of the operation.
- */
-uint16_t M24SR_ForceReadData ( uint16_t Offset , uint16_t DataSize , uint8_t* pData)
-{
- uint16_t status;
-
- if( DataSize > M24SR_READ_MAX_NBBYTE)
- {
- do
- {
- status = (*m24srDrv).STReadBinary ( Offset, M24SR_READ_MAX_NBBYTE , pData);
- Offset += M24SR_READ_MAX_NBBYTE;
- pData += M24SR_READ_MAX_NBBYTE;
- DataSize -= M24SR_READ_MAX_NBBYTE;
- }while( DataSize > M24SR_READ_MAX_NBBYTE && status == NFC_OK);
- if( status == NFC_OK && DataSize)
- status = (*m24srDrv).STReadBinary ( Offset, (uint8_t)(DataSize) , pData);
- }
- else
- status = (*m24srDrv).STReadBinary ( Offset, (uint8_t)(DataSize) , pData);
-
- return status;
-}
-
-/**
- * @brief This fonction write data in M24SR at defined offset
- * @param Offset : Offset in the NDEF file in M24SR
- * @param DataSize : Number of byte to read
- * @param pData : pointer on buffer to copy in M24SR
- * @retval Status (SW1&SW2) : Status of the operation.
- */
-uint16_t M24SR_WriteData ( uint16_t Offset , uint16_t DataSize , uint8_t* pData)
-{
- uint16_t status;
-
- if( DataSize > M24SR_WRITE_MAX_NBBYTE)
- {
- do
- {
- status = (*m24srDrv).UpdateBinary ( Offset, M24SR_WRITE_MAX_NBBYTE , pData);
- Offset += M24SR_WRITE_MAX_NBBYTE;
- pData += M24SR_WRITE_MAX_NBBYTE;
- DataSize -= M24SR_WRITE_MAX_NBBYTE;
- }while( DataSize > M24SR_WRITE_MAX_NBBYTE && status == NFC_OK);
- if( status == NFC_OK && DataSize)
- status = (*m24srDrv).UpdateBinary ( Offset, (uint8_t)(DataSize) , pData);
- }
- else
- status = (*m24srDrv).UpdateBinary ( Offset, (uint8_t)(DataSize) , pData);
-
- return status;
-}
-
-/**
- * @brief This fonction activate the need of a password for next read access
- * @param pCurrentWritePassword : Write password is needed to have the right to enable Read Password
- * @param pNewPassword : The password that will be requiered for next read access
- * @retval NFC_OK : Read password is activated
- * @retval NFC_ERROR : operation does not complete
- */
-uint16_t M24SR_EnableReadPassword( uint8_t* pCurrentWritePassword, uint8_t* pNewPassword)
-{
- uint16_t status = NFC_OK;
-
- if((*m24srDrv).Verify( WRITE_PWD ,0x10 ,pCurrentWritePassword ) == NFC_OK)
- {
- /* Set new password */
- (*m24srDrv).ChangeReferenceData ( READ_PWD, pNewPassword );
- (*m24srDrv).EnableVerificationRequirement( READ_PWD );
- status = NFC_OK;
- }
- else
- {
- /* M24SR already lock but password not known */
- status = NFC_ERROR;
- }
-
- return status;
-}
-
-/**
- * @brief This fonction desactivate the need of a password for next read access
- * @param pCurrentWritePassword : Write password is needed to have the right to disable Read Password
- * @retval NFC_OK : Read password is desactivated
- * @retval NFC_ERROR : operation does not complete
- */
-uint16_t M24SR_DisableReadPassword( uint8_t* pCurrentWritePassword)
-{
- uint16_t status = NFC_OK;
-
- if((*m24srDrv).Verify( WRITE_PWD ,0x10 ,pCurrentWritePassword ) == NFC_OK)
- {
- /* Set new password */
- (*m24srDrv).DisableVerificationRequirement( READ_PWD );
- status = NFC_OK;
- }
- else
- {
- /* M24SR already lock but password not known */
- status = NFC_ERROR;
- }
-
- return status;
-}
-
-/**
- * @brief This fonction activate the need of a password for next write access
- * @param pCurrentWritePassword : Write password must be prensented to have the right to modify write Password
- * @param pNewPassword : The password that will be requiered for next write access
- * @retval NFC_OK : Write password is activated
- * @retval NFC_ERROR : operation does not complete
- */
-uint16_t M24SR_EnableWritePassword( uint8_t* pCurrentWritePassword, uint8_t* pNewPassword)
-{
- uint16_t status;
-
- /* check we have the good password */
- if ((*m24srDrv).Verify( WRITE_PWD ,0x10 ,pCurrentWritePassword )== NFC_OK)
- {
- /* Set new password */
- (*m24srDrv).ChangeReferenceData ( WRITE_PWD, pNewPassword );
- (*m24srDrv).EnableVerificationRequirement( WRITE_PWD );
- status = NFC_OK;
- }
- else /* we don't have the good password */
- {
- status = NFC_ERROR;
- }
-
- return status;
-}
-
-/**
- * @brief This fonction desactivate the need of a password for next write access
- * @param pCurrentWritePassword : Write password must be prensented to have the right to disable it
- * @retval NFC_OK : Write password is desactivated
- * @retval NFC_ERROR : operation does not complete
- */
-uint16_t M24SR_DisableWritePassword( uint8_t* pCurrentWritePassword)
-{
- uint16_t status = NFC_OK;
-
- if((*m24srDrv).Verify( WRITE_PWD ,0x10 ,pCurrentWritePassword ) == NFC_OK)
- {
- (*m24srDrv).DisableVerificationRequirement( WRITE_PWD );
- status = NFC_OK;
- }
- else
- {
- /* M24SR already lock but password not known */
- status = NFC_ERROR;
- }
-
- return status;
-}
-
-/**
- * @brief This fonction desactivate the need of read and write password for next access
- * @param pSuperUserPassword : I2C super user password to overwrite read and write password
- * @retval NFC_OK : M24SR access is now free (no password needed)
- * @retval NFC_ERROR : operation does not complete
- */
-uint16_t M24SR_DisableAllPassword( uint8_t* pSuperUserPassword)
-{
- uint16_t status = NFC_OK;
-
- if((*m24srDrv).Verify( I2C_PWD ,0x10 ,pSuperUserPassword ) == NFC_OK)
- {
- (*m24srDrv).DisablePermanentState( READ_PWD );
- (*m24srDrv).DisablePermanentState( WRITE_PWD );
-
- (*m24srDrv).DisableVerificationRequirement( READ_PWD );
- (*m24srDrv).DisableVerificationRequirement( WRITE_PWD );
-
- /* reset password */
- (*m24srDrv).ChangeReferenceData ( READ_PWD, pSuperUserPassword );
- (*m24srDrv).ChangeReferenceData ( WRITE_PWD, pSuperUserPassword );
- status = NFC_OK;
- }
- else
- {
- /* M24SR already lock but password not known */
- status = NFC_ERROR;
- }
-
- return status;
-}
-
-/**
- * @brief This fonction enable read only mode
- * @param pCurrentWritePassword : Write password is needed to have right to enable read only mode
- * @retval NFC_OK : M24SR access is now forbidden in write mode
- * @retval NFC_ERROR : operation does not complete
- */
-uint16_t M24SR_EnableReadOnly( uint8_t* pCurrentWritePassword)
-{
- uint16_t status = NFC_OK;
-
- if((*m24srDrv).Verify( WRITE_PWD ,0x10 ,pCurrentWritePassword ) == NFC_OK)
- {
- (*m24srDrv).EnablePermanentState( WRITE_PWD ); /* lock write to have read only */
- status = NFC_OK;
- }
- else
- {
- /* M24SR already lock but password not known */
- status = NFC_ERROR;
- }
-
- return status;
-}
-
-/**
- * @brief This fonction disable read only mode
- * @param pCurrentWritePassword : Write password is needed to have right to disable read only mode
- * @retval NFC_OK : M24SR write access is now allowed
- * @retval NFC_ERROR : operation does not complete
- */
-uint16_t M24SR_DisableReadOnly( uint8_t* pCurrentWritePassword)
-{
- uint16_t status = NFC_OK;
-
- if((*m24srDrv).Verify( I2C_PWD ,0x10 ,I2CPassword ) == NFC_OK)
- {
- (*m24srDrv).DisablePermanentState( WRITE_PWD ); /* disable write protection to disable read only mode */
- (*m24srDrv).DisableVerificationRequirement( WRITE_PWD );
- status = NFC_OK;
- }
- else
- {
- /* we don't have the good I2C password nothing to do anymore */
- status = NFC_ERROR;
- }
-
- return status;
-}
-
-/**
- * @brief This fonction enable write only mode
- * @param pCurrentWritePassword : Write password is needed to have right to enable write only mode
- * @retval NFC_OK : M24SR access is now forbidden in read mode
- * @retval NFC_ERROR : operation does not complete
- */
-uint16_t M24SR_EnableWriteOnly( uint8_t* pCurrentWritePassword)
-{
- uint16_t status = NFC_OK;
-
- if((*m24srDrv).Verify( WRITE_PWD ,0x10 ,pCurrentWritePassword ) == NFC_OK)
- {
- (*m24srDrv).EnablePermanentState( READ_PWD ); /* disable read access and keep write */
- status = NFC_OK;
- }
- else
- {
- /* M24SR already lock but password not known */
- status = NFC_ERROR;
- }
-
- return status;
-}
-
-/**
- * @brief This fonction disable write only mode
- * @param pCurrentWritePassword : Write password is needed to have right to disable write only mode
- * @retval NFC_OK : M24SR read access is now allowed
- * @retval NFC_ERROR : operation does not complete
- */
-uint16_t M24SR_DisableWriteOnly( uint8_t* pCurrentWritePassword)
-{
- uint16_t status = NFC_OK;
-
- if((*m24srDrv).Verify( I2C_PWD ,0x10 ,I2CPassword ) == NFC_OK)
- {
- (*m24srDrv).DisablePermanentState( READ_PWD ); /* disable write only -> enable write acces */
- (*m24srDrv).DisableVerificationRequirement( READ_PWD );
- status = NFC_OK;
- }
- else
- {
- /* M24SR already lock but password not known */
- status = NFC_ERROR;
- }
-
- return status;
-}
-
-/**
- * @brief This function configure GPO purpose for RF session
- * @param GPO_config: GPO configuration to set
- * @param mode: select RF or I2C, GPO config to update
- * @retval Status : Status of the operation.
- */
-uint16_t M24SR_ManageGPO( uint8_t GPO_config, uint8_t mode)
-{
- uint16_t status;
-
- if( mode == RF_GPO)
- {
- status = (*m24srDrv).ManageRFGPO ( GPO_config );
- }
- else
- {
- status = (*m24srDrv).ManageI2CGPO (GPO_config );
- }
- return status;
-}
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/******************* (C) COPYRIGHT 2013 STMicroelectronics *****END OF FILE****/
-
-
-
