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

Committer:
giovannivisentini
Date:
Thu Jan 14 09:16:40 2016 +0000
Revision:
12:d1f5eaa85deb
Parent:
9:9f2e2e68d695
Child:
19:0b65a5813059
nfc_class not require m24sr.h

Who changed what in which revision?

UserRevisionLine numberNew contents of line
giovannivisentini 0:969a2be49f41 1 /**
giovannivisentini 0:969a2be49f41 2 ******************************************************************************
giovannivisentini 0:969a2be49f41 3 * @file Nfc_class.h
giovannivisentini 6:96389fb79676 4 * @author ST Central Labs
giovannivisentini 9:9f2e2e68d695 5 * @version V1.0.0
giovannivisentini 0:969a2be49f41 6 * @date 13-April-2015
giovannivisentini 0:969a2be49f41 7 * @brief This file contains the abstract class describing the interface of a
giovannivisentini 0:969a2be49f41 8 * nfc component.
giovannivisentini 0:969a2be49f41 9 ******************************************************************************
giovannivisentini 0:969a2be49f41 10 * @attention
giovannivisentini 0:969a2be49f41 11 *
giovannivisentini 0:969a2be49f41 12 * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
giovannivisentini 0:969a2be49f41 13 *
giovannivisentini 0:969a2be49f41 14 * Redistribution and use in source and binary forms, with or without modification,
giovannivisentini 0:969a2be49f41 15 * are permitted provided that the following conditions are met:
giovannivisentini 0:969a2be49f41 16 * 1. Redistributions of source code must retain the above copyright notice,
giovannivisentini 0:969a2be49f41 17 * this list of conditions and the following disclaimer.
giovannivisentini 0:969a2be49f41 18 * 2. Redistributions in binary form must reproduce the above copyright notice,
giovannivisentini 0:969a2be49f41 19 * this list of conditions and the following disclaimer in the documentation
giovannivisentini 0:969a2be49f41 20 * and/or other materials provided with the distribution.
giovannivisentini 0:969a2be49f41 21 * 3. Neither the name of STMicroelectronics nor the names of its contributors
giovannivisentini 0:969a2be49f41 22 * may be used to endorse or promote products derived from this software
giovannivisentini 0:969a2be49f41 23 * without specific prior written permission.
giovannivisentini 0:969a2be49f41 24 *
giovannivisentini 0:969a2be49f41 25 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
giovannivisentini 0:969a2be49f41 26 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
giovannivisentini 0:969a2be49f41 27 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
giovannivisentini 0:969a2be49f41 28 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
giovannivisentini 0:969a2be49f41 29 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
giovannivisentini 0:969a2be49f41 30 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
giovannivisentini 0:969a2be49f41 31 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
giovannivisentini 0:969a2be49f41 32 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
giovannivisentini 0:969a2be49f41 33 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
giovannivisentini 0:969a2be49f41 34 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
giovannivisentini 0:969a2be49f41 35 *
giovannivisentini 0:969a2be49f41 36 ******************************************************************************
giovannivisentini 0:969a2be49f41 37 */
giovannivisentini 0:969a2be49f41 38
giovannivisentini 0:969a2be49f41 39
giovannivisentini 0:969a2be49f41 40 /* Generated with Stm32CubeTOO -----------------------------------------------*/
giovannivisentini 0:969a2be49f41 41
giovannivisentini 0:969a2be49f41 42 /* Define to prevent from recursive inclusion --------------------------------*/
giovannivisentini 0:969a2be49f41 43
giovannivisentini 0:969a2be49f41 44 #ifndef __NFC_CLASS_H
giovannivisentini 0:969a2be49f41 45 #define __NFC_CLASS_H
giovannivisentini 0:969a2be49f41 46
giovannivisentini 0:969a2be49f41 47
giovannivisentini 0:969a2be49f41 48 /* Includes ------------------------------------------------------------------*/
giovannivisentini 0:969a2be49f41 49
giovannivisentini 0:969a2be49f41 50 #include "Component_class.h"
giovannivisentini 12:d1f5eaa85deb 51 #include "nfc.h"
giovannivisentini 0:969a2be49f41 52
giovannivisentini 0:969a2be49f41 53 /* Classes ------------------------------------------------------------------*/
giovannivisentini 0:969a2be49f41 54
giovannivisentini 9:9f2e2e68d695 55 /**
giovannivisentini 9:9f2e2e68d695 56 * An abstract class for Nfc components.
giovannivisentini 0:969a2be49f41 57 */
giovannivisentini 0:969a2be49f41 58 class Nfc : public Component
giovannivisentini 0:969a2be49f41 59 {
giovannivisentini 0:969a2be49f41 60 public:
giovannivisentini 0:969a2be49f41 61
giovannivisentini 0:969a2be49f41 62 /**
giovannivisentini 9:9f2e2e68d695 63 * Possible password to set.
giovannivisentini 0:969a2be49f41 64 */
giovannivisentini 0:969a2be49f41 65 typedef enum{
giovannivisentini 12:d1f5eaa85deb 66 ReadPwd, //!< Password to use before read the tag
giovannivisentini 12:d1f5eaa85deb 67 WritePwd, //!< Password to use before write the tag
giovannivisentini 12:d1f5eaa85deb 68 I2CPwd, //!< Root password, used only thought nfc
giovannivisentini 0:969a2be49f41 69 }PasswordType_t;
giovannivisentini 0:969a2be49f41 70
giovannivisentini 0:969a2be49f41 71
giovannivisentini 0:969a2be49f41 72 /**
giovannivisentini 9:9f2e2e68d695 73 * Open a I2C connection with the tag if an RF connection isn't already open.
giovannivisentini 0:969a2be49f41 74 * @return operation status
giovannivisentini 0:969a2be49f41 75 */
giovannivisentini 0:969a2be49f41 76 virtual NFC_StatusTypeDef GetSession(void) = 0;
giovannivisentini 9:9f2e2e68d695 77
giovannivisentini 0:969a2be49f41 78 /**
giovannivisentini 9:9f2e2e68d695 79 * Force to open an I2C connection , abort the RF connection.
giovannivisentini 7:19fc04b8fec6 80 * @return NFC_SUCCESS if the session is acquired
giovannivisentini 0:969a2be49f41 81 */
giovannivisentini 0:969a2be49f41 82 virtual NFC_StatusTypeDef KillSession(void) = 0;
giovannivisentini 0:969a2be49f41 83
giovannivisentini 0:969a2be49f41 84 /**
giovannivisentini 9:9f2e2e68d695 85 * Close an I2C connection.
giovannivisentini 7:19fc04b8fec6 86 * @return NFC_SUCCESS if the session is release
giovannivisentini 0:969a2be49f41 87 */
giovannivisentini 0:969a2be49f41 88 virtual NFC_StatusTypeDef Deselect(void) = 0;
giovannivisentini 0:969a2be49f41 89
giovannivisentini 0:969a2be49f41 90 /**
giovannivisentini 9:9f2e2e68d695 91 * Select the application file.
giovannivisentini 7:19fc04b8fec6 92 * @return NFC_SUCCESS if the application is selected
giovannivisentini 0:969a2be49f41 93 */
giovannivisentini 0:969a2be49f41 94 virtual NFC_StatusTypeDef SelectApplication(void) = 0;
giovannivisentini 0:969a2be49f41 95
giovannivisentini 0:969a2be49f41 96 /**
giovannivisentini 9:9f2e2e68d695 97 * Select the CC file.
giovannivisentini 9:9f2e2e68d695 98 * @return NFC_SUCCESS if the CC file is selected.
giovannivisentini 0:969a2be49f41 99 */
giovannivisentini 0:969a2be49f41 100 virtual NFC_StatusTypeDef SelectCCfile(void) = 0;
giovannivisentini 0:969a2be49f41 101
giovannivisentini 0:969a2be49f41 102 /**
giovannivisentini 9:9f2e2e68d695 103 * Select the ndef file.
giovannivisentini 9:9f2e2e68d695 104 * @param NDEFfileId File id to open.
giovannivisentini 7:19fc04b8fec6 105 * @return NFC_SUCCESS if the file is selected
giovannivisentini 0:969a2be49f41 106 */
giovannivisentini 0:969a2be49f41 107 virtual NFC_StatusTypeDef SelectNDEFfile(uint16_t NDEFfileId) = 0;
giovannivisentini 0:969a2be49f41 108
giovannivisentini 0:969a2be49f41 109 /**
giovannivisentini 9:9f2e2e68d695 110 * Select the system file.
giovannivisentini 7:19fc04b8fec6 111 * @return NFC_SUCCESS if the system file is selected
giovannivisentini 0:969a2be49f41 112 */
giovannivisentini 0:969a2be49f41 113 virtual NFC_StatusTypeDef SelectSystemfile(void) = 0;
giovannivisentini 0:969a2be49f41 114
giovannivisentini 0:969a2be49f41 115 /**
giovannivisentini 9:9f2e2e68d695 116 * Read data from the tag.
giovannivisentini 9:9f2e2e68d695 117 * @param Offset Read offset.
giovannivisentini 9:9f2e2e68d695 118 * @param NbByteToRead Number of bytes to read.
giovannivisentini 9:9f2e2e68d695 119 * @param[out] pBufferRead Buffer to store the read data into.
giovannivisentini 9:9f2e2e68d695 120 * @return NFC_SUCCESS if no errors
giovannivisentini 0:969a2be49f41 121 */
giovannivisentini 0:969a2be49f41 122 virtual NFC_StatusTypeDef ReadBinary(uint16_t Offset, uint8_t NbByteToRead, uint8_t *pBufferRead) = 0;
giovannivisentini 0:969a2be49f41 123
giovannivisentini 0:969a2be49f41 124 /**
giovannivisentini 9:9f2e2e68d695 125 * Write data to the tag.
giovannivisentini 9:9f2e2e68d695 126 * @param Offset Write offset.
giovannivisentini 9:9f2e2e68d695 127 * @param NbByteToWrite Number of bytes to write.
giovannivisentini 9:9f2e2e68d695 128 * @param pDataToWrite Buffer to write.
giovannivisentini 9:9f2e2e68d695 129 * @return NFC_SUCCESS if no errors
giovannivisentini 0:969a2be49f41 130 */
giovannivisentini 0:969a2be49f41 131 virtual NFC_StatusTypeDef UpdateBinary(uint16_t Offset, uint8_t NbByteToWrite, uint8_t *pDataToWrite) = 0;
giovannivisentini 0:969a2be49f41 132
giovannivisentini 0:969a2be49f41 133 /**
giovannivisentini 9:9f2e2e68d695 134 * Check that the password is correct.
giovannivisentini 9:9f2e2e68d695 135 * @param uPwdId Password type.
giovannivisentini 9:9f2e2e68d695 136 * @param NbPwdByte Password size ( must be 0x10).
giovannivisentini 9:9f2e2e68d695 137 * @param pPwd Password buffer.
giovannivisentini 9:9f2e2e68d695 138 * @return NFC_SUCCESS if no errors and write/read permission granted
giovannivisentini 0:969a2be49f41 139 */
giovannivisentini 0:969a2be49f41 140 virtual NFC_StatusTypeDef Verify(PasswordType_t uPwdId, uint8_t NbPwdByte,const uint8_t *pPwd) = 0;
giovannivisentini 0:969a2be49f41 141
giovannivisentini 0:969a2be49f41 142 /**
giovannivisentini 9:9f2e2e68d695 143 * Replace the read or write password.
giovannivisentini 9:9f2e2e68d695 144 * @param uPwdId Password to change.
giovannivisentini 9:9f2e2e68d695 145 * @param pPwd New password.
giovannivisentini 9:9f2e2e68d695 146 * @return NFC_SUCCESS if no errors
giovannivisentini 0:969a2be49f41 147 */
giovannivisentini 0:969a2be49f41 148 virtual NFC_StatusTypeDef ChangeReferenceData(PasswordType_t uPwdId,const uint8_t *pPwd) = 0;
giovannivisentini 8:5e637c71cbb3 149
giovannivisentini 8:5e637c71cbb3 150 /**
giovannivisentini 9:9f2e2e68d695 151 * Activate NDEF file password protection.
giovannivisentini 9:9f2e2e68d695 152 * When this command is successful, read or write access to the NDEF file is protected by a 128-bit password.
giovannivisentini 9:9f2e2e68d695 153 * @param uReadOrWrite Read or write password.
giovannivisentini 9:9f2e2e68d695 154 * @return NFC_SUCCESS if no errors
giovannivisentini 8:5e637c71cbb3 155 */
giovannivisentini 0:969a2be49f41 156 virtual NFC_StatusTypeDef EnableVerificationRequirement(PasswordType_t uReadOrWrite) = 0;
giovannivisentini 8:5e637c71cbb3 157
giovannivisentini 8:5e637c71cbb3 158 /**
giovannivisentini 9:9f2e2e68d695 159 * Deactivate NDEF file password protection.
giovannivisentini 9:9f2e2e68d695 160 * When this command is successful, read or write access to the NDEF file is granted.
giovannivisentini 9:9f2e2e68d695 161 * with no security enforcement.
giovannivisentini 9:9f2e2e68d695 162 * @param uReadOrWrite Read or write password.
giovannivisentini 9:9f2e2e68d695 163 * @return NFC_SUCCESS if no errors
giovannivisentini 8:5e637c71cbb3 164 */
giovannivisentini 0:969a2be49f41 165 virtual NFC_StatusTypeDef DisableVerificationRequirement(PasswordType_t uReadOrWrite) = 0;
giovannivisentini 7:19fc04b8fec6 166
giovannivisentini 7:19fc04b8fec6 167 /**
giovannivisentini 9:9f2e2e68d695 168 * Same as {@link NFC#ReadBinary}, however permitting to read more bytes than available.
giovannivisentini 9:9f2e2e68d695 169 * @param Offset read offset.
giovannivisentini 9:9f2e2e68d695 170 * @param NbByteToRead Number of bytes to read.
giovannivisentini 9:9f2e2e68d695 171 * @param[out] pBufferRead Buffer to store the read data into.
giovannivisentini 9:9f2e2e68d695 172 * @return NFC_SUCCESS if no errors
giovannivisentini 7:19fc04b8fec6 173 */
giovannivisentini 0:969a2be49f41 174 virtual NFC_StatusTypeDef STReadBinary(uint16_t Offset, uint8_t NbByteToRead, uint8_t *pBufferRead) = 0;
giovannivisentini 7:19fc04b8fec6 175
giovannivisentini 7:19fc04b8fec6 176 /**
giovannivisentini 9:9f2e2e68d695 177 * Set the tag as read/write only, stored in the eeprom.
giovannivisentini 9:9f2e2e68d695 178 * @param uReadOrWrite ReadPwd if write only, WritePwd if read only.
giovannivisentini 9:9f2e2e68d695 179 * @return NFC_SUCCESS if no errors
giovannivisentini 7:19fc04b8fec6 180 */
giovannivisentini 0:969a2be49f41 181 virtual NFC_StatusTypeDef EnablePermanentState(PasswordType_t uReadOrWrite) = 0;
giovannivisentini 9:9f2e2e68d695 182
giovannivisentini 7:19fc04b8fec6 183 /**
giovannivisentini 9:9f2e2e68d695 184 * Unset the tag as read/write only, stored in the eeprom.
giovannivisentini 9:9f2e2e68d695 185 * @param uReadOrWrite ReadPwd if write only, WritePwd if read only.
giovannivisentini 9:9f2e2e68d695 186 * @return NFC_SUCCESS if no errors
giovannivisentini 9:9f2e2e68d695 187 * @par Caller must have I2Csuper user permissions to call this function.
giovannivisentini 7:19fc04b8fec6 188 */
giovannivisentini 0:969a2be49f41 189 virtual NFC_StatusTypeDef DisablePermanentState(PasswordType_t uReadOrWrite) = 0;
giovannivisentini 7:19fc04b8fec6 190
giovannivisentini 7:19fc04b8fec6 191 /**
giovannivisentini 9:9f2e2e68d695 192 * Set the gpo output pin.
giovannivisentini 9:9f2e2e68d695 193 * @param uSetOrReset New pin status.
giovannivisentini 9:9f2e2e68d695 194 * @return NFC_SUCCESS if no errors
giovannivisentini 7:19fc04b8fec6 195 */
giovannivisentini 0:969a2be49f41 196 virtual NFC_StatusTypeDef StateControl(uint8_t uSetOrReset) = 0;
giovannivisentini 7:19fc04b8fec6 197
giovannivisentini 7:19fc04b8fec6 198 /**
giovannivisentini 9:9f2e2e68d695 199 * @brief This function configures GPO for I2C session.
giovannivisentini 9:9f2e2e68d695 200 * @param GPO_I2Cconfig GPO configuration to set.
giovannivisentini 9:9f2e2e68d695 201 * @return NFC_SUCCESS if no errors
giovannivisentini 7:19fc04b8fec6 202 */
giovannivisentini 0:969a2be49f41 203 virtual NFC_StatusTypeDef ManageI2CGPO(uint8_t GPO_I2Cconfig) = 0;
giovannivisentini 7:19fc04b8fec6 204
giovannivisentini 7:19fc04b8fec6 205 /**
giovannivisentini 9:9f2e2e68d695 206 * @brief This function configures GPO for RF session.
giovannivisentini 9:9f2e2e68d695 207 * @param GPO_RFconfig GPO configuration to set.
giovannivisentini 9:9f2e2e68d695 208 * @return NFC_SUCCESS if no errors
giovannivisentini 7:19fc04b8fec6 209 */
giovannivisentini 0:969a2be49f41 210 virtual NFC_StatusTypeDef ManageRFGPO(uint8_t GPO_RFconfig) = 0;
giovannivisentini 7:19fc04b8fec6 211
giovannivisentini 7:19fc04b8fec6 212 /**
giovannivisentini 9:9f2e2e68d695 213 * @brief This function enables or disables the RF communication.
giovannivisentini 9:9f2e2e68d695 214 * @param OnOffChoice GPO configuration to set.
giovannivisentini 9:9f2e2e68d695 215 * @return NFC_SUCCESS if no errors
giovannivisentini 7:19fc04b8fec6 216 */
giovannivisentini 0:969a2be49f41 217 virtual NFC_StatusTypeDef RFConfig(uint8_t OnOffChoice) = 0;
giovannivisentini 0:969a2be49f41 218
giovannivisentini 0:969a2be49f41 219 virtual ~Nfc(){};
giovannivisentini 0:969a2be49f41 220 };
giovannivisentini 0:969a2be49f41 221
giovannivisentini 0:969a2be49f41 222 #endif /* __NFC_CLASS_H */
giovannivisentini 0:969a2be49f41 223
giovannivisentini 0:969a2be49f41 224 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/