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:
Tue Feb 02 16:04:24 2016 +0000
Revision:
24:9f98eafa2d39
Parent:
23:d07138541feb
Child:
25:caa16fd0e50b
update docs

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 19:0b65a5813059 51 #include "../Common/nfc.h"
giovannivisentini 0:969a2be49f41 52
giovannivisentini 0:969a2be49f41 53 /* Classes ------------------------------------------------------------------*/
giovannivisentini 0:969a2be49f41 54
giovannivisentini 9:9f2e2e68d695 55 /**
giovannivisentini 24:9f98eafa2d39 56 * An abstract class for Nfc components.
giovannivisentini 24:9f98eafa2d39 57 * This component has two operation modes, sync or async.
giovannivisentini 24:9f98eafa2d39 58 * In sync mode each function call returns only after the command has completed.
giovannivisentini 24:9f98eafa2d39 59 * In async mode each function call returns immediately and the answer will be notified
giovannivisentini 24:9f98eafa2d39 60 * through a callback.
giovannivisentini 24:9f98eafa2d39 61 * The default behavior is sync mode.
giovannivisentini 24:9f98eafa2d39 62 * To enable the async mode ManageI2CGPO(I2C_ANSWER_READY) function must be called.
giovannivisentini 24:9f98eafa2d39 63 * When the component notifies an interrupt user must call {@link ManageEvent} function.
giovannivisentini 24:9f98eafa2d39 64 * Note that passing a parameter other than I2C_ANSWER_READY to ManageI2CGPO initialize the component in sync mode.
giovannivisentini 24:9f98eafa2d39 65 */
giovannivisentini 0:969a2be49f41 66 class Nfc : public Component
giovannivisentini 0:969a2be49f41 67 {
giovannivisentini 0:969a2be49f41 68 public:
giovannivisentini 0:969a2be49f41 69
giovannivisentini 0:969a2be49f41 70 /**
giovannivisentini 9:9f2e2e68d695 71 * Possible password to set.
giovannivisentini 0:969a2be49f41 72 */
giovannivisentini 0:969a2be49f41 73 typedef enum{
giovannivisentini 24:9f98eafa2d39 74 ReadPwd, //!< Password to use before reading the tag
giovannivisentini 24:9f98eafa2d39 75 WritePwd, //!< Password to use before writing the tag
giovannivisentini 24:9f98eafa2d39 76 I2CPwd, //!< Root password, used only through nfc
giovannivisentini 0:969a2be49f41 77 }PasswordType_t;
giovannivisentini 0:969a2be49f41 78
giovannivisentini 23:d07138541feb 79 /**
giovannivisentini 23:d07138541feb 80 * Function that will be called when an interrupt is fired,
giovannivisentini 23:d07138541feb 81 * this function must be set if you want use the component in async mode.
giovannivisentini 23:d07138541feb 82 */
giovannivisentini 19:0b65a5813059 83 typedef void(*gpoEventCallback)(void);
giovannivisentini 19:0b65a5813059 84
giovannivisentini 19:0b65a5813059 85 /**
giovannivisentini 24:9f98eafa2d39 86 * Object that contains all the callbacks fired by this class, each command has its own callback.
giovannivisentini 19:0b65a5813059 87 * The callback default implementation is an empty function.
giovannivisentini 19:0b65a5813059 88 */
giovannivisentini 24:9f98eafa2d39 89 class Callbacks{
giovannivisentini 19:0b65a5813059 90 public:
giovannivisentini 19:0b65a5813059 91
giovannivisentini 24:9f98eafa2d39 92 /** called when GetSession or KillSession finish */
giovannivisentini 19:0b65a5813059 93 virtual void onSessionOpen(Nfc *nfc,NFC_StatusTypeDef status){
giovannivisentini 19:0b65a5813059 94 (void)nfc; (void)status;
giovannivisentini 19:0b65a5813059 95 }
giovannivisentini 19:0b65a5813059 96
giovannivisentini 19:0b65a5813059 97 virtual void onDeselect(Nfc *nfc,NFC_StatusTypeDef status){
giovannivisentini 19:0b65a5813059 98 (void)nfc; (void)status;
giovannivisentini 19:0b65a5813059 99 }
giovannivisentini 19:0b65a5813059 100
giovannivisentini 19:0b65a5813059 101 virtual void onSelectedApplication(Nfc *nfc,NFC_StatusTypeDef status){
giovannivisentini 19:0b65a5813059 102 (void)nfc; (void)status;
giovannivisentini 19:0b65a5813059 103 }
giovannivisentini 19:0b65a5813059 104
giovannivisentini 19:0b65a5813059 105 virtual void onSelectedCCFile(Nfc *nfc,NFC_StatusTypeDef status){
giovannivisentini 19:0b65a5813059 106 (void)nfc; (void)status;
giovannivisentini 19:0b65a5813059 107 }
giovannivisentini 19:0b65a5813059 108
giovannivisentini 19:0b65a5813059 109 virtual void onSelectedNDEFFile(Nfc *nfc,NFC_StatusTypeDef status){
giovannivisentini 19:0b65a5813059 110 (void)nfc; (void)status;
giovannivisentini 19:0b65a5813059 111 }
giovannivisentini 19:0b65a5813059 112
giovannivisentini 19:0b65a5813059 113 virtual void onSelectedSystemFile(Nfc *nfc,NFC_StatusTypeDef status){
giovannivisentini 19:0b65a5813059 114 (void)nfc; (void)status;
giovannivisentini 19:0b65a5813059 115 }
giovannivisentini 19:0b65a5813059 116
giovannivisentini 19:0b65a5813059 117 virtual void onReadByte(Nfc *nfc,NFC_StatusTypeDef status,
giovannivisentini 19:0b65a5813059 118 uint16_t offset,uint8_t *readByte, uint16_t nReadByte){
giovannivisentini 19:0b65a5813059 119 (void)nfc; (void)status;(void)offset; (void)readByte; (void)nReadByte;
giovannivisentini 19:0b65a5813059 120 }
giovannivisentini 19:0b65a5813059 121
giovannivisentini 19:0b65a5813059 122 virtual void onUpdatedBinary(Nfc *nfc,NFC_StatusTypeDef status,uint16_t offset,
giovannivisentini 19:0b65a5813059 123 uint8_t *writeByte,uint16_t nWriteByte){
giovannivisentini 19:0b65a5813059 124 (void)nfc; (void)status; (void)writeByte; (void)nWriteByte; (void)offset;
giovannivisentini 19:0b65a5813059 125 }
giovannivisentini 19:0b65a5813059 126
giovannivisentini 24:9f98eafa2d39 127 virtual void onVerified(Nfc *nfc,NFC_StatusTypeDef status,PasswordType_t uPwdId,
giovannivisentini 21:ccc4f3fed4b3 128 const uint8_t *pwd){
giovannivisentini 21:ccc4f3fed4b3 129 (void)nfc; (void)status;(void)uPwdId;(void)pwd;
giovannivisentini 19:0b65a5813059 130 }
giovannivisentini 19:0b65a5813059 131
giovannivisentini 19:0b65a5813059 132 virtual void onManageI2CGPO(Nfc *nfc,NFC_StatusTypeDef status,NFC_GPO_MGMT newStatus){
giovannivisentini 19:0b65a5813059 133 (void)nfc; (void)status;(void)newStatus;
giovannivisentini 19:0b65a5813059 134 }
giovannivisentini 19:0b65a5813059 135
giovannivisentini 19:0b65a5813059 136 virtual void onManageRFGPO(Nfc *nfc,NFC_StatusTypeDef status,NFC_GPO_MGMT newStatus){
giovannivisentini 19:0b65a5813059 137 (void)nfc; (void)status;(void)newStatus;
giovannivisentini 19:0b65a5813059 138 }
giovannivisentini 19:0b65a5813059 139
giovannivisentini 19:0b65a5813059 140 virtual void onChangeReferenceData(Nfc *nfc ,NFC_StatusTypeDef status,PasswordType_t type,
giovannivisentini 19:0b65a5813059 141 uint8_t *data){
giovannivisentini 19:0b65a5813059 142 (void)nfc; (void)status;(void)type;(void)data;
giovannivisentini 19:0b65a5813059 143 }
giovannivisentini 19:0b65a5813059 144
giovannivisentini 19:0b65a5813059 145 virtual void onEnableVerificationRequirement(Nfc *nfc ,NFC_StatusTypeDef status,PasswordType_t type){
giovannivisentini 19:0b65a5813059 146 (void)nfc; (void)status;(void)type;
giovannivisentini 19:0b65a5813059 147 }
giovannivisentini 19:0b65a5813059 148
giovannivisentini 19:0b65a5813059 149 virtual void onDisableVerificationRequirement(Nfc *nfc , NFC_StatusTypeDef status,PasswordType_t type){
giovannivisentini 19:0b65a5813059 150 (void)nfc; (void)status;(void)type;
giovannivisentini 19:0b65a5813059 151 }
giovannivisentini 19:0b65a5813059 152
giovannivisentini 19:0b65a5813059 153 virtual void onEnablePermanentState(Nfc *nfc, NFC_StatusTypeDef status, PasswordType_t type){
giovannivisentini 19:0b65a5813059 154 (void)nfc; (void)status;(void)type;
giovannivisentini 19:0b65a5813059 155 }
giovannivisentini 19:0b65a5813059 156
giovannivisentini 19:0b65a5813059 157 virtual void onDisablePermanentState(Nfc *nfc, NFC_StatusTypeDef status, PasswordType_t type){
giovannivisentini 19:0b65a5813059 158 (void)nfc; (void)status;(void)type;
giovannivisentini 19:0b65a5813059 159 }
giovannivisentini 19:0b65a5813059 160
giovannivisentini 19:0b65a5813059 161 virtual void onReadId(Nfc *nfc, NFC_StatusTypeDef status, uint8_t *id){
giovannivisentini 21:ccc4f3fed4b3 162 (void)nfc; (void)status;(void)id;
giovannivisentini 19:0b65a5813059 163 }
giovannivisentini 19:0b65a5813059 164
giovannivisentini 19:0b65a5813059 165 virtual void onEnableReadPassword(Nfc *nfc, NFC_StatusTypeDef status,const uint8_t *newPwd){
giovannivisentini 19:0b65a5813059 166 (void)nfc; (void)status;(void)newPwd;
giovannivisentini 19:0b65a5813059 167 }
giovannivisentini 19:0b65a5813059 168
giovannivisentini 19:0b65a5813059 169 virtual void onEnableWritePassword(Nfc *nfc, NFC_StatusTypeDef status,const uint8_t *newPwd){
giovannivisentini 19:0b65a5813059 170 (void)nfc; (void)status;(void)newPwd;
giovannivisentini 19:0b65a5813059 171 }
giovannivisentini 19:0b65a5813059 172
giovannivisentini 19:0b65a5813059 173 virtual void onDisableReadPassword(Nfc *nfc, NFC_StatusTypeDef status){
giovannivisentini 19:0b65a5813059 174 (void)nfc; (void)status;
giovannivisentini 19:0b65a5813059 175 }
giovannivisentini 19:0b65a5813059 176
giovannivisentini 19:0b65a5813059 177 virtual void onDisableWritePassword(Nfc *nfc, NFC_StatusTypeDef status){
giovannivisentini 19:0b65a5813059 178 (void)nfc; (void)status;
giovannivisentini 19:0b65a5813059 179 }
giovannivisentini 19:0b65a5813059 180
giovannivisentini 19:0b65a5813059 181 virtual void onDisableAllPassword(Nfc *nfc, NFC_StatusTypeDef status){
giovannivisentini 19:0b65a5813059 182 (void)nfc; (void)status;
giovannivisentini 19:0b65a5813059 183 }
giovannivisentini 19:0b65a5813059 184
giovannivisentini 19:0b65a5813059 185 virtual void onEnableReadOnly(Nfc *nfc,NFC_StatusTypeDef status){
giovannivisentini 19:0b65a5813059 186 (void)nfc; (void)status;
giovannivisentini 19:0b65a5813059 187 }
giovannivisentini 19:0b65a5813059 188
giovannivisentini 19:0b65a5813059 189 virtual void onEnableWriteOnly(Nfc *nfc,NFC_StatusTypeDef status){
giovannivisentini 19:0b65a5813059 190 (void)nfc; (void)status;
giovannivisentini 19:0b65a5813059 191 }
giovannivisentini 19:0b65a5813059 192
giovannivisentini 19:0b65a5813059 193 virtual void onDisableReadOnly(Nfc *nfc,NFC_StatusTypeDef status){
giovannivisentini 19:0b65a5813059 194 (void)nfc; (void)status;
giovannivisentini 19:0b65a5813059 195 }
giovannivisentini 19:0b65a5813059 196
giovannivisentini 19:0b65a5813059 197 virtual void onDisableWriteOnly(Nfc *nfc,NFC_StatusTypeDef status){
giovannivisentini 19:0b65a5813059 198 (void)nfc; (void)status;
giovannivisentini 19:0b65a5813059 199 }
giovannivisentini 19:0b65a5813059 200
giovannivisentini 24:9f98eafa2d39 201 virtual ~Callbacks(){};
giovannivisentini 19:0b65a5813059 202 };
giovannivisentini 19:0b65a5813059 203
giovannivisentini 21:ccc4f3fed4b3 204 Nfc():mCallback(&defaultCallback),
giovannivisentini 21:ccc4f3fed4b3 205 mComponentCallback(NULL){ }
giovannivisentini 0:969a2be49f41 206
giovannivisentini 0:969a2be49f41 207 /**
giovannivisentini 9:9f2e2e68d695 208 * Open a I2C connection with the tag if an RF connection isn't already open.
giovannivisentini 0:969a2be49f41 209 * @return operation status
giovannivisentini 0:969a2be49f41 210 */
giovannivisentini 0:969a2be49f41 211 virtual NFC_StatusTypeDef GetSession(void) = 0;
giovannivisentini 9:9f2e2e68d695 212
giovannivisentini 0:969a2be49f41 213 /**
giovannivisentini 9:9f2e2e68d695 214 * Force to open an I2C connection , abort the RF connection.
giovannivisentini 7:19fc04b8fec6 215 * @return NFC_SUCCESS if the session is acquired
giovannivisentini 0:969a2be49f41 216 */
giovannivisentini 21:ccc4f3fed4b3 217 virtual NFC_StatusTypeDef ForceGetSession(void) = 0;
giovannivisentini 0:969a2be49f41 218
giovannivisentini 0:969a2be49f41 219 /**
giovannivisentini 9:9f2e2e68d695 220 * Close an I2C connection.
giovannivisentini 7:19fc04b8fec6 221 * @return NFC_SUCCESS if the session is release
giovannivisentini 0:969a2be49f41 222 */
giovannivisentini 0:969a2be49f41 223 virtual NFC_StatusTypeDef Deselect(void) = 0;
giovannivisentini 0:969a2be49f41 224
giovannivisentini 0:969a2be49f41 225 /**
giovannivisentini 9:9f2e2e68d695 226 * Select the application file.
giovannivisentini 7:19fc04b8fec6 227 * @return NFC_SUCCESS if the application is selected
giovannivisentini 0:969a2be49f41 228 */
giovannivisentini 0:969a2be49f41 229 virtual NFC_StatusTypeDef SelectApplication(void) = 0;
giovannivisentini 0:969a2be49f41 230
giovannivisentini 0:969a2be49f41 231 /**
giovannivisentini 9:9f2e2e68d695 232 * Select the CC file.
giovannivisentini 9:9f2e2e68d695 233 * @return NFC_SUCCESS if the CC file is selected.
giovannivisentini 0:969a2be49f41 234 */
giovannivisentini 0:969a2be49f41 235 virtual NFC_StatusTypeDef SelectCCfile(void) = 0;
giovannivisentini 0:969a2be49f41 236
giovannivisentini 0:969a2be49f41 237 /**
giovannivisentini 23:d07138541feb 238 * Select the NDEF file.
giovannivisentini 9:9f2e2e68d695 239 * @param NDEFfileId File id to open.
giovannivisentini 7:19fc04b8fec6 240 * @return NFC_SUCCESS if the file is selected
giovannivisentini 0:969a2be49f41 241 */
giovannivisentini 0:969a2be49f41 242 virtual NFC_StatusTypeDef SelectNDEFfile(uint16_t NDEFfileId) = 0;
giovannivisentini 0:969a2be49f41 243
giovannivisentini 0:969a2be49f41 244 /**
giovannivisentini 9:9f2e2e68d695 245 * Select the system file.
giovannivisentini 7:19fc04b8fec6 246 * @return NFC_SUCCESS if the system file is selected
giovannivisentini 0:969a2be49f41 247 */
giovannivisentini 0:969a2be49f41 248 virtual NFC_StatusTypeDef SelectSystemfile(void) = 0;
giovannivisentini 0:969a2be49f41 249
giovannivisentini 0:969a2be49f41 250 /**
giovannivisentini 9:9f2e2e68d695 251 * Read data from the tag.
giovannivisentini 9:9f2e2e68d695 252 * @param Offset Read offset.
giovannivisentini 9:9f2e2e68d695 253 * @param NbByteToRead Number of bytes to read.
giovannivisentini 9:9f2e2e68d695 254 * @param[out] pBufferRead Buffer to store the read data into.
giovannivisentini 9:9f2e2e68d695 255 * @return NFC_SUCCESS if no errors
giovannivisentini 0:969a2be49f41 256 */
giovannivisentini 0:969a2be49f41 257 virtual NFC_StatusTypeDef ReadBinary(uint16_t Offset, uint8_t NbByteToRead, uint8_t *pBufferRead) = 0;
giovannivisentini 0:969a2be49f41 258
giovannivisentini 0:969a2be49f41 259 /**
giovannivisentini 9:9f2e2e68d695 260 * Write data to the tag.
giovannivisentini 9:9f2e2e68d695 261 * @param Offset Write offset.
giovannivisentini 9:9f2e2e68d695 262 * @param NbByteToWrite Number of bytes to write.
giovannivisentini 9:9f2e2e68d695 263 * @param pDataToWrite Buffer to write.
giovannivisentini 9:9f2e2e68d695 264 * @return NFC_SUCCESS if no errors
giovannivisentini 0:969a2be49f41 265 */
giovannivisentini 0:969a2be49f41 266 virtual NFC_StatusTypeDef UpdateBinary(uint16_t Offset, uint8_t NbByteToWrite, uint8_t *pDataToWrite) = 0;
giovannivisentini 0:969a2be49f41 267
giovannivisentini 0:969a2be49f41 268 /**
giovannivisentini 9:9f2e2e68d695 269 * Check that the password is correct.
giovannivisentini 9:9f2e2e68d695 270 * @param uPwdId Password type.
giovannivisentini 9:9f2e2e68d695 271 * @param NbPwdByte Password size ( must be 0x10).
giovannivisentini 9:9f2e2e68d695 272 * @param pPwd Password buffer.
giovannivisentini 9:9f2e2e68d695 273 * @return NFC_SUCCESS if no errors and write/read permission granted
giovannivisentini 0:969a2be49f41 274 */
giovannivisentini 0:969a2be49f41 275 virtual NFC_StatusTypeDef Verify(PasswordType_t uPwdId, uint8_t NbPwdByte,const uint8_t *pPwd) = 0;
giovannivisentini 0:969a2be49f41 276
giovannivisentini 0:969a2be49f41 277 /**
giovannivisentini 9:9f2e2e68d695 278 * Replace the read or write password.
giovannivisentini 9:9f2e2e68d695 279 * @param uPwdId Password to change.
giovannivisentini 9:9f2e2e68d695 280 * @param pPwd New password.
giovannivisentini 9:9f2e2e68d695 281 * @return NFC_SUCCESS if no errors
giovannivisentini 0:969a2be49f41 282 */
giovannivisentini 0:969a2be49f41 283 virtual NFC_StatusTypeDef ChangeReferenceData(PasswordType_t uPwdId,const uint8_t *pPwd) = 0;
giovannivisentini 8:5e637c71cbb3 284
giovannivisentini 8:5e637c71cbb3 285 /**
giovannivisentini 9:9f2e2e68d695 286 * Activate NDEF file password protection.
giovannivisentini 9:9f2e2e68d695 287 * When this command is successful, read or write access to the NDEF file is protected by a 128-bit password.
giovannivisentini 9:9f2e2e68d695 288 * @param uReadOrWrite Read or write password.
giovannivisentini 9:9f2e2e68d695 289 * @return NFC_SUCCESS if no errors
giovannivisentini 8:5e637c71cbb3 290 */
giovannivisentini 0:969a2be49f41 291 virtual NFC_StatusTypeDef EnableVerificationRequirement(PasswordType_t uReadOrWrite) = 0;
giovannivisentini 8:5e637c71cbb3 292
giovannivisentini 8:5e637c71cbb3 293 /**
giovannivisentini 9:9f2e2e68d695 294 * Deactivate NDEF file password protection.
giovannivisentini 9:9f2e2e68d695 295 * When this command is successful, read or write access to the NDEF file is granted.
giovannivisentini 9:9f2e2e68d695 296 * with no security enforcement.
giovannivisentini 9:9f2e2e68d695 297 * @param uReadOrWrite Read or write password.
giovannivisentini 9:9f2e2e68d695 298 * @return NFC_SUCCESS if no errors
giovannivisentini 8:5e637c71cbb3 299 */
giovannivisentini 0:969a2be49f41 300 virtual NFC_StatusTypeDef DisableVerificationRequirement(PasswordType_t uReadOrWrite) = 0;
giovannivisentini 7:19fc04b8fec6 301
giovannivisentini 7:19fc04b8fec6 302 /**
giovannivisentini 9:9f2e2e68d695 303 * Same as {@link NFC#ReadBinary}, however permitting to read more bytes than available.
giovannivisentini 9:9f2e2e68d695 304 * @param Offset read offset.
giovannivisentini 9:9f2e2e68d695 305 * @param NbByteToRead Number of bytes to read.
giovannivisentini 9:9f2e2e68d695 306 * @param[out] pBufferRead Buffer to store the read data into.
giovannivisentini 9:9f2e2e68d695 307 * @return NFC_SUCCESS if no errors
giovannivisentini 7:19fc04b8fec6 308 */
giovannivisentini 0:969a2be49f41 309 virtual NFC_StatusTypeDef STReadBinary(uint16_t Offset, uint8_t NbByteToRead, uint8_t *pBufferRead) = 0;
giovannivisentini 7:19fc04b8fec6 310
giovannivisentini 7:19fc04b8fec6 311 /**
giovannivisentini 9:9f2e2e68d695 312 * Set the tag as read/write only, stored in the eeprom.
giovannivisentini 9:9f2e2e68d695 313 * @param uReadOrWrite ReadPwd if write only, WritePwd if read only.
giovannivisentini 9:9f2e2e68d695 314 * @return NFC_SUCCESS if no errors
giovannivisentini 7:19fc04b8fec6 315 */
giovannivisentini 0:969a2be49f41 316 virtual NFC_StatusTypeDef EnablePermanentState(PasswordType_t uReadOrWrite) = 0;
giovannivisentini 9:9f2e2e68d695 317
giovannivisentini 7:19fc04b8fec6 318 /**
giovannivisentini 9:9f2e2e68d695 319 * Unset the tag as read/write only, stored in the eeprom.
giovannivisentini 9:9f2e2e68d695 320 * @param uReadOrWrite ReadPwd if write only, WritePwd if read only.
giovannivisentini 9:9f2e2e68d695 321 * @return NFC_SUCCESS if no errors
giovannivisentini 9:9f2e2e68d695 322 * @par Caller must have I2Csuper user permissions to call this function.
giovannivisentini 7:19fc04b8fec6 323 */
giovannivisentini 0:969a2be49f41 324 virtual NFC_StatusTypeDef DisablePermanentState(PasswordType_t uReadOrWrite) = 0;
giovannivisentini 7:19fc04b8fec6 325
giovannivisentini 7:19fc04b8fec6 326 /**
giovannivisentini 9:9f2e2e68d695 327 * Set the gpo output pin.
giovannivisentini 9:9f2e2e68d695 328 * @param uSetOrReset New pin status.
giovannivisentini 9:9f2e2e68d695 329 * @return NFC_SUCCESS if no errors
giovannivisentini 7:19fc04b8fec6 330 */
giovannivisentini 0:969a2be49f41 331 virtual NFC_StatusTypeDef StateControl(uint8_t uSetOrReset) = 0;
giovannivisentini 7:19fc04b8fec6 332
giovannivisentini 7:19fc04b8fec6 333 /**
giovannivisentini 9:9f2e2e68d695 334 * @brief This function configures GPO for I2C session.
giovannivisentini 9:9f2e2e68d695 335 * @param GPO_I2Cconfig GPO configuration to set.
giovannivisentini 9:9f2e2e68d695 336 * @return NFC_SUCCESS if no errors
giovannivisentini 23:d07138541feb 337 * @par if the configuration is I2C_ANSWER_READY, the component will start to work
giovannivisentini 23:d07138541feb 338 * in async mode.
giovannivisentini 7:19fc04b8fec6 339 */
giovannivisentini 19:0b65a5813059 340 virtual NFC_StatusTypeDef ManageI2CGPO(NFC_GPO_MGMT GPO_I2Cconfig) = 0;
giovannivisentini 7:19fc04b8fec6 341
giovannivisentini 7:19fc04b8fec6 342 /**
giovannivisentini 9:9f2e2e68d695 343 * @brief This function configures GPO for RF session.
giovannivisentini 9:9f2e2e68d695 344 * @param GPO_RFconfig GPO configuration to set.
giovannivisentini 9:9f2e2e68d695 345 * @return NFC_SUCCESS if no errors
giovannivisentini 7:19fc04b8fec6 346 */
giovannivisentini 0:969a2be49f41 347 virtual NFC_StatusTypeDef ManageRFGPO(uint8_t GPO_RFconfig) = 0;
giovannivisentini 7:19fc04b8fec6 348
giovannivisentini 7:19fc04b8fec6 349 /**
giovannivisentini 9:9f2e2e68d695 350 * @brief This function enables or disables the RF communication.
giovannivisentini 9:9f2e2e68d695 351 * @param OnOffChoice GPO configuration to set.
giovannivisentini 9:9f2e2e68d695 352 * @return NFC_SUCCESS if no errors
giovannivisentini 7:19fc04b8fec6 353 */
giovannivisentini 0:969a2be49f41 354 virtual NFC_StatusTypeDef RFConfig(uint8_t OnOffChoice) = 0;
giovannivisentini 0:969a2be49f41 355
giovannivisentini 19:0b65a5813059 356 /**
giovannivisentini 19:0b65a5813059 357 * Generates a negative pulse on the GPO pin.
giovannivisentini 19:0b65a5813059 358 * Pulse starts immediately after the command is issued and ends at the end of the RF response.
giovannivisentini 19:0b65a5813059 359 * @return NFC_SUCCESS if no errors
giovannivisentini 19:0b65a5813059 360 */
giovannivisentini 19:0b65a5813059 361 virtual NFC_StatusTypeDef SendInterrupt(void)=0;
giovannivisentini 19:0b65a5813059 362
giovannivisentini 19:0b65a5813059 363 /**
giovannivisentini 23:d07138541feb 364 * Change the function to call when a command ends.
giovannivisentini 23:d07138541feb 365 * @param commandCallback Object containing the callback, if NULL it will use empty callback
giovannivisentini 19:0b65a5813059 366 */
giovannivisentini 24:9f98eafa2d39 367 void SetCallback(Callbacks *commandCallback){
giovannivisentini 19:0b65a5813059 368 if(commandCallback!=NULL)
giovannivisentini 19:0b65a5813059 369 mCallback = commandCallback;
giovannivisentini 19:0b65a5813059 370 else
giovannivisentini 19:0b65a5813059 371 mCallback = &defaultCallback;
giovannivisentini 19:0b65a5813059 372 }
giovannivisentini 19:0b65a5813059 373
giovannivisentini 19:0b65a5813059 374 /**
giovannivisentini 23:d07138541feb 375 * Function to call when the component fire an interrupt.
giovannivisentini 19:0b65a5813059 376 * @return last operation status
giovannivisentini 19:0b65a5813059 377 */
giovannivisentini 19:0b65a5813059 378 virtual NFC_StatusTypeDef ManageEvent()=0;
giovannivisentini 19:0b65a5813059 379
giovannivisentini 21:ccc4f3fed4b3 380
giovannivisentini 24:9f98eafa2d39 381 ///////////////////////HIGH LEVEL / UTILITY FUNCTIONS ////////////////////////////////////
giovannivisentini 21:ccc4f3fed4b3 382
giovannivisentini 21:ccc4f3fed4b3 383 /**
giovannivisentini 21:ccc4f3fed4b3 384 * Enable the request of a password before reading the tag.
giovannivisentini 21:ccc4f3fed4b3 385 * @param pCurrentWritePassword Current password
giovannivisentini 21:ccc4f3fed4b3 386 * @param pNewPassword Password to request before reading the tag.
giovannivisentini 21:ccc4f3fed4b3 387 * @return return NFC_SUCCESS if no errors
giovannivisentini 21:ccc4f3fed4b3 388 * @par The password must have a length of 16 chars.
giovannivisentini 21:ccc4f3fed4b3 389 */
giovannivisentini 23:d07138541feb 390 NFC_StatusTypeDef EnableReadPassword(const uint8_t* pCurrentWritePassword,
giovannivisentini 21:ccc4f3fed4b3 391 const uint8_t* pNewPassword) {
giovannivisentini 21:ccc4f3fed4b3 392
giovannivisentini 21:ccc4f3fed4b3 393 //enable the callback for change the gpo
giovannivisentini 21:ccc4f3fed4b3 394 mComponentCallback = &mChangePasswordRequestStatusCallback;
giovannivisentini 21:ccc4f3fed4b3 395 mChangePasswordRequestStatusCallback.setTask(ReadPwd,pNewPassword);
giovannivisentini 21:ccc4f3fed4b3 396
giovannivisentini 21:ccc4f3fed4b3 397 return Verify(Nfc::WritePwd, 0x10, pCurrentWritePassword);
giovannivisentini 21:ccc4f3fed4b3 398 }
giovannivisentini 21:ccc4f3fed4b3 399
giovannivisentini 21:ccc4f3fed4b3 400 /**
giovannivisentini 21:ccc4f3fed4b3 401 * Disable the request of a password before reading the tag.
giovannivisentini 21:ccc4f3fed4b3 402 * @param pCurrentWritePassword Current password
giovannivisentini 21:ccc4f3fed4b3 403 * @return return NFC_SUCCESS if no errors
giovannivisentini 21:ccc4f3fed4b3 404 * @par The password must have a length of 16 chars.
giovannivisentini 21:ccc4f3fed4b3 405 */
giovannivisentini 23:d07138541feb 406 NFC_StatusTypeDef DisableReadPassword(const uint8_t* pCurrentWritePassword) {
giovannivisentini 21:ccc4f3fed4b3 407 mComponentCallback = &mChangePasswordRequestStatusCallback;
giovannivisentini 21:ccc4f3fed4b3 408 mChangePasswordRequestStatusCallback.setTask(ReadPwd,NULL);
giovannivisentini 21:ccc4f3fed4b3 409
giovannivisentini 21:ccc4f3fed4b3 410 return Verify(Nfc::WritePwd, 0x10, pCurrentWritePassword);
giovannivisentini 21:ccc4f3fed4b3 411 }
giovannivisentini 21:ccc4f3fed4b3 412
giovannivisentini 21:ccc4f3fed4b3 413 /**
giovannivisentini 21:ccc4f3fed4b3 414 * Enable the request of a password before writing to the tag.
giovannivisentini 21:ccc4f3fed4b3 415 * @param pCurrentWritePassword Current password
giovannivisentini 21:ccc4f3fed4b3 416 * @param pNewPassword Password to request before reading the tag.
giovannivisentini 21:ccc4f3fed4b3 417 * @return return NFC_SUCCESS if no errors
giovannivisentini 21:ccc4f3fed4b3 418 * @par The password must have a length of 16 chars.
giovannivisentini 21:ccc4f3fed4b3 419 */
giovannivisentini 23:d07138541feb 420 NFC_StatusTypeDef EnableWritePassword(const uint8_t* pCurrentWritePassword,
giovannivisentini 21:ccc4f3fed4b3 421 uint8_t* pNewPassword) {
giovannivisentini 21:ccc4f3fed4b3 422 //enable the callback for change the gpo
giovannivisentini 21:ccc4f3fed4b3 423 mComponentCallback = &mChangePasswordRequestStatusCallback;
giovannivisentini 21:ccc4f3fed4b3 424 mChangePasswordRequestStatusCallback.setTask(WritePwd,pNewPassword);
giovannivisentini 21:ccc4f3fed4b3 425
giovannivisentini 21:ccc4f3fed4b3 426 return Verify(Nfc::WritePwd, 0x10, pCurrentWritePassword);
giovannivisentini 21:ccc4f3fed4b3 427 }
giovannivisentini 21:ccc4f3fed4b3 428
giovannivisentini 21:ccc4f3fed4b3 429 /**
giovannivisentini 21:ccc4f3fed4b3 430 * Disable the request of a password before writing the tag.
giovannivisentini 21:ccc4f3fed4b3 431 * @param pCurrentWritePassword Current password.
giovannivisentini 21:ccc4f3fed4b3 432 * @return return NFC_SUCCESS if no errors
giovannivisentini 21:ccc4f3fed4b3 433 * @par The password must have a length of 16 chars.
giovannivisentini 21:ccc4f3fed4b3 434 */
giovannivisentini 23:d07138541feb 435 NFC_StatusTypeDef DisableWritePassword(const uint8_t* pCurrentWritePassword) {
giovannivisentini 21:ccc4f3fed4b3 436 mComponentCallback = &mChangePasswordRequestStatusCallback;
giovannivisentini 21:ccc4f3fed4b3 437 mChangePasswordRequestStatusCallback.setTask(WritePwd,NULL);
giovannivisentini 21:ccc4f3fed4b3 438
giovannivisentini 21:ccc4f3fed4b3 439 return Verify(Nfc::WritePwd, 0x10, pCurrentWritePassword);
giovannivisentini 21:ccc4f3fed4b3 440 }
giovannivisentini 21:ccc4f3fed4b3 441
giovannivisentini 21:ccc4f3fed4b3 442 /**
giovannivisentini 21:ccc4f3fed4b3 443 * @brief This function disables both read and write passwords.
giovannivisentini 21:ccc4f3fed4b3 444 * @param pSuperUserPassword I2C super user password.
giovannivisentini 21:ccc4f3fed4b3 445 * @return return NFC_SUCCESS if no errors
giovannivisentini 21:ccc4f3fed4b3 446 * @par The password must have a length of 16 chars.
giovannivisentini 21:ccc4f3fed4b3 447 */
giovannivisentini 23:d07138541feb 448 NFC_StatusTypeDef DisableAllPassword(const uint8_t* pSuperUserPassword){
giovannivisentini 21:ccc4f3fed4b3 449 mComponentCallback = &mRemoveAllPasswordCallback;
giovannivisentini 21:ccc4f3fed4b3 450 return Verify(Nfc::I2CPwd, 0x10, pSuperUserPassword);
giovannivisentini 21:ccc4f3fed4b3 451 }
giovannivisentini 21:ccc4f3fed4b3 452
giovannivisentini 21:ccc4f3fed4b3 453 /**
giovannivisentini 21:ccc4f3fed4b3 454 * @brief This function enables read only mode.
giovannivisentini 21:ccc4f3fed4b3 455 * @param pCurrentWritePassword Write password is needed to enable read only mode.
giovannivisentini 21:ccc4f3fed4b3 456 * @return return NFC_SUCCESS if no errors
giovannivisentini 21:ccc4f3fed4b3 457 * @par The password must have a length of 16 chars.
giovannivisentini 21:ccc4f3fed4b3 458 */
giovannivisentini 23:d07138541feb 459 NFC_StatusTypeDef EnableReadOnly(const uint8_t* pCurrentWritePassword){
giovannivisentini 21:ccc4f3fed4b3 460
giovannivisentini 21:ccc4f3fed4b3 461 mComponentCallback = &mChangeAccessStateCallback;
giovannivisentini 21:ccc4f3fed4b3 462 //disable write = read only
giovannivisentini 21:ccc4f3fed4b3 463 mChangeAccessStateCallback.changeAccessState(ChangeAccessStateCallback::WRITE,false);
giovannivisentini 21:ccc4f3fed4b3 464
giovannivisentini 23:d07138541feb 465 return Verify(Nfc::WritePwd, 0x10, pCurrentWritePassword);
giovannivisentini 21:ccc4f3fed4b3 466 }
giovannivisentini 21:ccc4f3fed4b3 467
giovannivisentini 21:ccc4f3fed4b3 468 /**
giovannivisentini 21:ccc4f3fed4b3 469 * @brief This function disables read only mode.
giovannivisentini 21:ccc4f3fed4b3 470 * @param pCurrentWritePassword Write password is needed to disable read only mode.
giovannivisentini 21:ccc4f3fed4b3 471 * @return return NFC_SUCCESS if no errors
giovannivisentini 21:ccc4f3fed4b3 472 * @par The password must have a length of 16 chars.
giovannivisentini 21:ccc4f3fed4b3 473 */
giovannivisentini 23:d07138541feb 474 NFC_StatusTypeDef DisableReadOnly(const uint8_t* pCurrentWritePassword) {
giovannivisentini 21:ccc4f3fed4b3 475 mComponentCallback = &mChangeAccessStateCallback;
giovannivisentini 21:ccc4f3fed4b3 476 mChangeAccessStateCallback.changeAccessState(ChangeAccessStateCallback::WRITE,true);
giovannivisentini 21:ccc4f3fed4b3 477 return Verify(Nfc::I2CPwd, 0x10,pCurrentWritePassword);
giovannivisentini 21:ccc4f3fed4b3 478 }
giovannivisentini 21:ccc4f3fed4b3 479
giovannivisentini 21:ccc4f3fed4b3 480
giovannivisentini 21:ccc4f3fed4b3 481 /**
giovannivisentini 21:ccc4f3fed4b3 482 * @brief This function enables write only mode.
giovannivisentini 21:ccc4f3fed4b3 483 * @param pCurrentWritePassword Write password is needed to enable write only mode.
giovannivisentini 21:ccc4f3fed4b3 484 * @return return NFC_SUCCESS if no errors
giovannivisentini 21:ccc4f3fed4b3 485 * @par The password must have a length of 16 chars.
giovannivisentini 21:ccc4f3fed4b3 486 */
giovannivisentini 23:d07138541feb 487 NFC_StatusTypeDef EnableWriteOnly(const uint8_t* pCurrentWritePassword) {
giovannivisentini 21:ccc4f3fed4b3 488
giovannivisentini 21:ccc4f3fed4b3 489 mComponentCallback = &mChangeAccessStateCallback;
giovannivisentini 21:ccc4f3fed4b3 490 //disable read = enable write only
giovannivisentini 21:ccc4f3fed4b3 491 mChangeAccessStateCallback.changeAccessState(ChangeAccessStateCallback::READ,false);
giovannivisentini 21:ccc4f3fed4b3 492
giovannivisentini 23:d07138541feb 493 return Verify(Nfc::WritePwd, 0x10, pCurrentWritePassword);
giovannivisentini 21:ccc4f3fed4b3 494
giovannivisentini 21:ccc4f3fed4b3 495 }
giovannivisentini 21:ccc4f3fed4b3 496
giovannivisentini 21:ccc4f3fed4b3 497 /**
giovannivisentini 21:ccc4f3fed4b3 498 * @brief This function disables write only mode.
giovannivisentini 21:ccc4f3fed4b3 499 * @param pCurrentWritePassword Write password is needed to disable write only mode.
giovannivisentini 21:ccc4f3fed4b3 500 * @return return NFC_SUCCESS if no errors
giovannivisentini 21:ccc4f3fed4b3 501 * @par The password must have a length of 16 chars.
giovannivisentini 21:ccc4f3fed4b3 502 */
giovannivisentini 23:d07138541feb 503 NFC_StatusTypeDef DisableWriteOnly(const uint8_t* pCurrentWritePassword) {
giovannivisentini 21:ccc4f3fed4b3 504 mComponentCallback = &mChangeAccessStateCallback;
giovannivisentini 21:ccc4f3fed4b3 505 mChangeAccessStateCallback.changeAccessState(ChangeAccessStateCallback::READ,true);
giovannivisentini 21:ccc4f3fed4b3 506 return Verify(Nfc::I2CPwd, 0x10, pCurrentWritePassword);
giovannivisentini 21:ccc4f3fed4b3 507 }
giovannivisentini 21:ccc4f3fed4b3 508
giovannivisentini 0:969a2be49f41 509 virtual ~Nfc(){};
giovannivisentini 19:0b65a5813059 510
giovannivisentini 21:ccc4f3fed4b3 511 protected:
giovannivisentini 24:9f98eafa2d39 512 /** object containing the callbacks to use*/
giovannivisentini 24:9f98eafa2d39 513 Callbacks *mCallback;
giovannivisentini 21:ccc4f3fed4b3 514
giovannivisentini 21:ccc4f3fed4b3 515 /**
giovannivisentini 24:9f98eafa2d39 516 * Object with private callbacks used to hide high level commands each
giovannivisentini 24:9f98eafa2d39 517 * calling multiple low level commands. This callbacks object has
giovannivisentini 24:9f98eafa2d39 518 * higher priority comparing to the user callbacks.
giovannivisentini 21:ccc4f3fed4b3 519 */
giovannivisentini 24:9f98eafa2d39 520 Nfc::Callbacks *mComponentCallback;
giovannivisentini 21:ccc4f3fed4b3 521
giovannivisentini 21:ccc4f3fed4b3 522 /**
giovannivisentini 21:ccc4f3fed4b3 523 * get the callback object to use
giovannivisentini 21:ccc4f3fed4b3 524 * @return callback object to use
giovannivisentini 21:ccc4f3fed4b3 525 */
giovannivisentini 24:9f98eafa2d39 526 Nfc::Callbacks * getCallback(){
giovannivisentini 21:ccc4f3fed4b3 527 if(mComponentCallback!=NULL)
giovannivisentini 21:ccc4f3fed4b3 528 return mComponentCallback;
giovannivisentini 21:ccc4f3fed4b3 529 return mCallback;
giovannivisentini 21:ccc4f3fed4b3 530 }//getCallback
giovannivisentini 21:ccc4f3fed4b3 531
giovannivisentini 19:0b65a5813059 532 private:
giovannivisentini 19:0b65a5813059 533 /** object containing empty callback to use in the default case*/
giovannivisentini 24:9f98eafa2d39 534 Callbacks defaultCallback;
giovannivisentini 19:0b65a5813059 535
giovannivisentini 21:ccc4f3fed4b3 536
giovannivisentini 21:ccc4f3fed4b3 537 /**
giovannivisentini 24:9f98eafa2d39 538 * This class permits to enable/disable the password request to read/write into the tag
giovannivisentini 24:9f98eafa2d39 539 * This class is equivalent to calling the methods:
giovannivisentini 21:ccc4f3fed4b3 540 * To enable the request:
giovannivisentini 21:ccc4f3fed4b3 541 * <ul>
giovannivisentini 21:ccc4f3fed4b3 542 * <li> Verify </li>
giovannivisentini 21:ccc4f3fed4b3 543 * <li> ChangeReferenceData </li>
giovannivisentini 21:ccc4f3fed4b3 544 * <li> EnablePermanentState </li>
giovannivisentini 21:ccc4f3fed4b3 545 * </ul>
giovannivisentini 21:ccc4f3fed4b3 546 * To disable the request:
giovannivisentini 21:ccc4f3fed4b3 547 * <ul>
giovannivisentini 21:ccc4f3fed4b3 548 * <li> Verify </li>
giovannivisentini 21:ccc4f3fed4b3 549 * <li> DisableVerificationRequirement </li>
giovannivisentini 21:ccc4f3fed4b3 550 * </ul>
giovannivisentini 21:ccc4f3fed4b3 551 */
giovannivisentini 24:9f98eafa2d39 552 class ChangePasswordRequestStatusCallback : public Nfc::Callbacks{
giovannivisentini 21:ccc4f3fed4b3 553
giovannivisentini 21:ccc4f3fed4b3 554 public:
giovannivisentini 21:ccc4f3fed4b3 555
giovannivisentini 21:ccc4f3fed4b3 556 /**
giovannivisentini 24:9f98eafa2d39 557 * Build the chain of callbacks.
giovannivisentini 21:ccc4f3fed4b3 558 * @param parent object where send the command
giovannivisentini 21:ccc4f3fed4b3 559 */
giovannivisentini 21:ccc4f3fed4b3 560 ChangePasswordRequestStatusCallback():
giovannivisentini 21:ccc4f3fed4b3 561 mNewPwd(NULL),mType(I2CPwd),mEnable(false){}
giovannivisentini 21:ccc4f3fed4b3 562
giovannivisentini 21:ccc4f3fed4b3 563 /**
giovannivisentini 21:ccc4f3fed4b3 564 * Set the password to enable/disable.
giovannivisentini 21:ccc4f3fed4b3 565 * @param type Type of password to enable/disable.
giovannivisentini 21:ccc4f3fed4b3 566 * @param newPwd Array of 16bytes with the new password, if null the request will be disabled.
giovannivisentini 21:ccc4f3fed4b3 567 */
giovannivisentini 21:ccc4f3fed4b3 568 void setTask(PasswordType_t type, const uint8_t *newPwd){
giovannivisentini 21:ccc4f3fed4b3 569 mNewPwd=newPwd;
giovannivisentini 21:ccc4f3fed4b3 570 mType=type;
giovannivisentini 21:ccc4f3fed4b3 571 mEnable=newPwd!=NULL;
giovannivisentini 21:ccc4f3fed4b3 572 }//setTask
giovannivisentini 21:ccc4f3fed4b3 573
giovannivisentini 24:9f98eafa2d39 574 virtual void onVerified(Nfc *nfc, NFC_StatusTypeDef status,PasswordType_t ,
giovannivisentini 21:ccc4f3fed4b3 575 const uint8_t *){
giovannivisentini 21:ccc4f3fed4b3 576 if(status!=NFC_SUCCESS)
giovannivisentini 21:ccc4f3fed4b3 577 return onFinishCommand(nfc,status);
giovannivisentini 21:ccc4f3fed4b3 578 if(mEnable)
giovannivisentini 21:ccc4f3fed4b3 579 nfc->ChangeReferenceData(mType,mNewPwd);
giovannivisentini 21:ccc4f3fed4b3 580 else
giovannivisentini 21:ccc4f3fed4b3 581 nfc->DisableVerificationRequirement(mType);
giovannivisentini 21:ccc4f3fed4b3 582 }
giovannivisentini 21:ccc4f3fed4b3 583
giovannivisentini 21:ccc4f3fed4b3 584 virtual void onDisableVerificationRequirement(Nfc *nfc,
giovannivisentini 21:ccc4f3fed4b3 585 NFC_StatusTypeDef status, PasswordType_t ){
giovannivisentini 21:ccc4f3fed4b3 586 onFinishCommand(nfc,status);
giovannivisentini 21:ccc4f3fed4b3 587 }
giovannivisentini 21:ccc4f3fed4b3 588
giovannivisentini 21:ccc4f3fed4b3 589 virtual void onChangeReferenceData(Nfc *nfc, NFC_StatusTypeDef status,
giovannivisentini 21:ccc4f3fed4b3 590 PasswordType_t type,
giovannivisentini 21:ccc4f3fed4b3 591 uint8_t *){
giovannivisentini 21:ccc4f3fed4b3 592 if(status==NFC_SUCCESS)
giovannivisentini 21:ccc4f3fed4b3 593 nfc->EnablePermanentState(type);
giovannivisentini 21:ccc4f3fed4b3 594 else
giovannivisentini 21:ccc4f3fed4b3 595 onFinishCommand(nfc,status);
giovannivisentini 21:ccc4f3fed4b3 596 }
giovannivisentini 21:ccc4f3fed4b3 597
giovannivisentini 21:ccc4f3fed4b3 598 virtual void onEnablePermanentState(Nfc *nfc, NFC_StatusTypeDef status,
giovannivisentini 21:ccc4f3fed4b3 599 PasswordType_t ){
giovannivisentini 21:ccc4f3fed4b3 600 onFinishCommand(nfc,status);
giovannivisentini 21:ccc4f3fed4b3 601 }
giovannivisentini 21:ccc4f3fed4b3 602
giovannivisentini 21:ccc4f3fed4b3 603
giovannivisentini 21:ccc4f3fed4b3 604 private:
giovannivisentini 21:ccc4f3fed4b3 605
giovannivisentini 21:ccc4f3fed4b3 606 /**
giovannivisentini 24:9f98eafa2d39 607 * Remove the private callbacks and call the user callback.
giovannivisentini 21:ccc4f3fed4b3 608 * @param nfc Object where the command is run.
giovannivisentini 21:ccc4f3fed4b3 609 * @param status Command status.
giovannivisentini 21:ccc4f3fed4b3 610 */
giovannivisentini 21:ccc4f3fed4b3 611 void onFinishCommand(Nfc *nfc,NFC_StatusTypeDef status){
giovannivisentini 21:ccc4f3fed4b3 612 nfc->mComponentCallback=NULL;
giovannivisentini 21:ccc4f3fed4b3 613
giovannivisentini 21:ccc4f3fed4b3 614 if(mEnable){
giovannivisentini 21:ccc4f3fed4b3 615 if(mType==ReadPwd){
giovannivisentini 21:ccc4f3fed4b3 616 nfc->getCallback()->onEnableReadPassword(nfc,status,mNewPwd);
giovannivisentini 21:ccc4f3fed4b3 617 }else
giovannivisentini 21:ccc4f3fed4b3 618 nfc->getCallback()->onEnableWritePassword(nfc,status,mNewPwd);
giovannivisentini 21:ccc4f3fed4b3 619 }else{
giovannivisentini 21:ccc4f3fed4b3 620 if(mType==ReadPwd){
giovannivisentini 21:ccc4f3fed4b3 621 nfc->getCallback()->onDisableReadPassword(nfc,status);
giovannivisentini 21:ccc4f3fed4b3 622 }else
giovannivisentini 21:ccc4f3fed4b3 623 nfc->getCallback()->onDisableWritePassword(nfc,status);
giovannivisentini 21:ccc4f3fed4b3 624 }//if-else enable
giovannivisentini 21:ccc4f3fed4b3 625 }//onFinish
giovannivisentini 21:ccc4f3fed4b3 626
giovannivisentini 21:ccc4f3fed4b3 627 const uint8_t *mNewPwd;
giovannivisentini 21:ccc4f3fed4b3 628 Nfc::PasswordType_t mType;
giovannivisentini 21:ccc4f3fed4b3 629 bool mEnable;
giovannivisentini 21:ccc4f3fed4b3 630
giovannivisentini 21:ccc4f3fed4b3 631 };
giovannivisentini 21:ccc4f3fed4b3 632
giovannivisentini 23:d07138541feb 633
giovannivisentini 21:ccc4f3fed4b3 634 /**
giovannivisentini 21:ccc4f3fed4b3 635 * Object containing the callback chain needed to change the password request
giovannivisentini 21:ccc4f3fed4b3 636 */
giovannivisentini 21:ccc4f3fed4b3 637 ChangePasswordRequestStatusCallback mChangePasswordRequestStatusCallback;
giovannivisentini 23:d07138541feb 638 friend class ChangePasswordRequestStatusCallback;
giovannivisentini 21:ccc4f3fed4b3 639
giovannivisentini 21:ccc4f3fed4b3 640 /**
giovannivisentini 24:9f98eafa2d39 641 * This class permits to disable all the password requests to read/write into the tag
giovannivisentini 24:9f98eafa2d39 642 * This class is equivalent to calling the methods:
giovannivisentini 21:ccc4f3fed4b3 643 * <ul>
giovannivisentini 21:ccc4f3fed4b3 644 * <li> Verify(i2c) </li>
giovannivisentini 21:ccc4f3fed4b3 645 * <li> DisablePermanentState(Read) </li>
giovannivisentini 21:ccc4f3fed4b3 646 * <li> DisablePermanentState(write) </li>
giovannivisentini 21:ccc4f3fed4b3 647 * <li> DisableVerificationRequirement(Read) </li>
giovannivisentini 21:ccc4f3fed4b3 648 * <li> DisableVerificationRequirement(write) </li>
giovannivisentini 21:ccc4f3fed4b3 649 * <li> ChangeReferenceData(Read) </li>
giovannivisentini 21:ccc4f3fed4b3 650 * <li> ChangeReferenceData(write) </li>
giovannivisentini 21:ccc4f3fed4b3 651 * </ul>
giovannivisentini 21:ccc4f3fed4b3 652 */
giovannivisentini 24:9f98eafa2d39 653 class RemoveAllPasswordCallback : public Nfc::Callbacks{
giovannivisentini 21:ccc4f3fed4b3 654
giovannivisentini 23:d07138541feb 655 /**
giovannivisentini 23:d07138541feb 656 * Store the default password used for open a super user session
giovannivisentini 23:d07138541feb 657 * it will be set as default read/write password
giovannivisentini 23:d07138541feb 658 */
giovannivisentini 21:ccc4f3fed4b3 659 const uint8_t *mI2CPwd;
giovannivisentini 21:ccc4f3fed4b3 660
giovannivisentini 21:ccc4f3fed4b3 661 public:
giovannivisentini 21:ccc4f3fed4b3 662
giovannivisentini 21:ccc4f3fed4b3 663 /**
giovannivisentini 24:9f98eafa2d39 664 * Build the chain of callbacks.
giovannivisentini 24:9f98eafa2d39 665 * @param parent object where to send the command
giovannivisentini 21:ccc4f3fed4b3 666 */
giovannivisentini 21:ccc4f3fed4b3 667 RemoveAllPasswordCallback():mI2CPwd(NULL){}
giovannivisentini 21:ccc4f3fed4b3 668
giovannivisentini 24:9f98eafa2d39 669 virtual void onVerified(Nfc *nfc,NFC_StatusTypeDef status,
giovannivisentini 23:d07138541feb 670 PasswordType_t,const uint8_t* data){
giovannivisentini 21:ccc4f3fed4b3 671 if(status!=NFC_SUCCESS)
giovannivisentini 21:ccc4f3fed4b3 672 return onFinishCommand(nfc,status);
giovannivisentini 23:d07138541feb 673 mI2CPwd = data;
giovannivisentini 21:ccc4f3fed4b3 674 nfc->DisablePermanentState(ReadPwd);
giovannivisentini 21:ccc4f3fed4b3 675 }
giovannivisentini 21:ccc4f3fed4b3 676
giovannivisentini 21:ccc4f3fed4b3 677 virtual void onDisablePermanentState(Nfc *nfc , NFC_StatusTypeDef status,
giovannivisentini 21:ccc4f3fed4b3 678 PasswordType_t type){
giovannivisentini 21:ccc4f3fed4b3 679 if(status!=NFC_SUCCESS)
giovannivisentini 21:ccc4f3fed4b3 680 return onFinishCommand(nfc,status);
giovannivisentini 21:ccc4f3fed4b3 681 if(type==ReadPwd)
giovannivisentini 21:ccc4f3fed4b3 682 nfc->DisablePermanentState(WritePwd);
giovannivisentini 21:ccc4f3fed4b3 683 else
giovannivisentini 21:ccc4f3fed4b3 684 nfc->DisableVerificationRequirement(ReadPwd);
giovannivisentini 21:ccc4f3fed4b3 685 }
giovannivisentini 21:ccc4f3fed4b3 686
giovannivisentini 21:ccc4f3fed4b3 687 virtual void onDisableVerificationRequirement(Nfc *nfc ,
giovannivisentini 21:ccc4f3fed4b3 688 NFC_StatusTypeDef status,PasswordType_t type){
giovannivisentini 21:ccc4f3fed4b3 689 if(status!=NFC_SUCCESS)
giovannivisentini 21:ccc4f3fed4b3 690 return onFinishCommand(nfc,status);
giovannivisentini 21:ccc4f3fed4b3 691 if(type==ReadPwd)
giovannivisentini 21:ccc4f3fed4b3 692 nfc->DisableVerificationRequirement(WritePwd);
giovannivisentini 21:ccc4f3fed4b3 693 else
giovannivisentini 21:ccc4f3fed4b3 694 nfc->ChangeReferenceData(ReadPwd,mI2CPwd);
giovannivisentini 21:ccc4f3fed4b3 695 }
giovannivisentini 21:ccc4f3fed4b3 696
giovannivisentini 21:ccc4f3fed4b3 697 virtual void onChangeReferenceData(Nfc *nfc ,NFC_StatusTypeDef status,PasswordType_t type,
giovannivisentini 21:ccc4f3fed4b3 698 uint8_t *data){
giovannivisentini 21:ccc4f3fed4b3 699 if(status!=NFC_SUCCESS)
giovannivisentini 21:ccc4f3fed4b3 700 return onFinishCommand(nfc,status);
giovannivisentini 21:ccc4f3fed4b3 701 if(type==ReadPwd)
giovannivisentini 21:ccc4f3fed4b3 702 nfc->ChangeReferenceData(WritePwd,data);
giovannivisentini 21:ccc4f3fed4b3 703 else
giovannivisentini 21:ccc4f3fed4b3 704 onFinishCommand(nfc,status);
giovannivisentini 21:ccc4f3fed4b3 705 }
giovannivisentini 21:ccc4f3fed4b3 706
giovannivisentini 21:ccc4f3fed4b3 707 private:
giovannivisentini 21:ccc4f3fed4b3 708
giovannivisentini 21:ccc4f3fed4b3 709 /**
giovannivisentini 21:ccc4f3fed4b3 710 * Remove the private callback and call the onDisableAllPassword callback.
giovannivisentini 21:ccc4f3fed4b3 711 * @param nfc Object where the command is run.
giovannivisentini 21:ccc4f3fed4b3 712 * @param status Command status.
giovannivisentini 21:ccc4f3fed4b3 713 */
giovannivisentini 21:ccc4f3fed4b3 714 void onFinishCommand(Nfc *nfc,NFC_StatusTypeDef status){
giovannivisentini 21:ccc4f3fed4b3 715 nfc->mComponentCallback=NULL;
giovannivisentini 21:ccc4f3fed4b3 716 mI2CPwd=NULL;
giovannivisentini 21:ccc4f3fed4b3 717 nfc->getCallback()->onDisableAllPassword(nfc,status);
giovannivisentini 21:ccc4f3fed4b3 718 }//onFinish
giovannivisentini 21:ccc4f3fed4b3 719
giovannivisentini 21:ccc4f3fed4b3 720 };
giovannivisentini 21:ccc4f3fed4b3 721
giovannivisentini 23:d07138541feb 722
giovannivisentini 21:ccc4f3fed4b3 723 /**
giovannivisentini 24:9f98eafa2d39 724 * Object containing the callback chain needed to remove the password request
giovannivisentini 21:ccc4f3fed4b3 725 */
giovannivisentini 21:ccc4f3fed4b3 726 RemoveAllPasswordCallback mRemoveAllPasswordCallback;
giovannivisentini 23:d07138541feb 727 friend class RemoveAllPasswordCallback;
giovannivisentini 21:ccc4f3fed4b3 728
giovannivisentini 21:ccc4f3fed4b3 729 /**
giovannivisentini 24:9f98eafa2d39 730 * This class permits to set the tag as read/write only
giovannivisentini 24:9f98eafa2d39 731 * This class is equivalent to calling the methods:
giovannivisentini 21:ccc4f3fed4b3 732 * <ul>
giovannivisentini 21:ccc4f3fed4b3 733 * <li> Verify(i2c) </li>
giovannivisentini 21:ccc4f3fed4b3 734 * <li> EnablePermanentState(Read/write) </li>
giovannivisentini 21:ccc4f3fed4b3 735 * </ul>
giovannivisentini 21:ccc4f3fed4b3 736 * or:
giovannivisentini 21:ccc4f3fed4b3 737 * <ul>
giovannivisentini 21:ccc4f3fed4b3 738 * <li> Verify(i2c) </li>
giovannivisentini 21:ccc4f3fed4b3 739 * <li> DisablePermanentState</li>
giovannivisentini 21:ccc4f3fed4b3 740 * <li> DisableVerificationRequirement(Read/write) </li>
giovannivisentini 21:ccc4f3fed4b3 741 * </ul>
giovannivisentini 21:ccc4f3fed4b3 742 */
giovannivisentini 24:9f98eafa2d39 743 class ChangeAccessStateCallback : public Nfc::Callbacks{
giovannivisentini 21:ccc4f3fed4b3 744
giovannivisentini 21:ccc4f3fed4b3 745 public:
giovannivisentini 21:ccc4f3fed4b3 746
giovannivisentini 21:ccc4f3fed4b3 747 typedef enum{
giovannivisentini 21:ccc4f3fed4b3 748 WRITE,
giovannivisentini 21:ccc4f3fed4b3 749 READ
giovannivisentini 21:ccc4f3fed4b3 750 }AccessType_t;
giovannivisentini 21:ccc4f3fed4b3 751
giovannivisentini 21:ccc4f3fed4b3 752 /**
giovannivisentini 24:9f98eafa2d39 753 * Build the chain of callbacks.
giovannivisentini 24:9f98eafa2d39 754 * @param parent object where to send the command
giovannivisentini 21:ccc4f3fed4b3 755 */
giovannivisentini 21:ccc4f3fed4b3 756 ChangeAccessStateCallback():mType(WRITE),mEnable(false){}
giovannivisentini 21:ccc4f3fed4b3 757
giovannivisentini 21:ccc4f3fed4b3 758 /**
giovannivisentini 24:9f98eafa2d39 759 * Set the access to enable/disable an access type.
giovannivisentini 24:9f98eafa2d39 760 * @param type Access type.
giovannivisentini 24:9f98eafa2d39 761 * @param enable True to enable the state, False to disable it.
giovannivisentini 21:ccc4f3fed4b3 762 */
giovannivisentini 21:ccc4f3fed4b3 763 void changeAccessState(AccessType_t type,bool enable){
giovannivisentini 21:ccc4f3fed4b3 764 mType=type;
giovannivisentini 21:ccc4f3fed4b3 765 mEnable=enable;
giovannivisentini 21:ccc4f3fed4b3 766 }
giovannivisentini 21:ccc4f3fed4b3 767
giovannivisentini 24:9f98eafa2d39 768 virtual void onVerified(Nfc *nfc,NFC_StatusTypeDef status,
giovannivisentini 21:ccc4f3fed4b3 769 PasswordType_t,const uint8_t*){
giovannivisentini 21:ccc4f3fed4b3 770 if(status!=NFC_SUCCESS)
giovannivisentini 21:ccc4f3fed4b3 771 return onFinishCommand(nfc,status);
giovannivisentini 21:ccc4f3fed4b3 772
giovannivisentini 21:ccc4f3fed4b3 773 if(mEnable){
giovannivisentini 21:ccc4f3fed4b3 774 nfc->DisablePermanentState(mType==WRITE? WritePwd : ReadPwd);
giovannivisentini 21:ccc4f3fed4b3 775 }else
giovannivisentini 21:ccc4f3fed4b3 776 nfc->EnablePermanentState(mType==WRITE? WritePwd : ReadPwd);
giovannivisentini 21:ccc4f3fed4b3 777
giovannivisentini 21:ccc4f3fed4b3 778 }
giovannivisentini 21:ccc4f3fed4b3 779
giovannivisentini 21:ccc4f3fed4b3 780 virtual void onDisablePermanentState(Nfc *nfc, NFC_StatusTypeDef status,
giovannivisentini 21:ccc4f3fed4b3 781 PasswordType_t type ){
giovannivisentini 21:ccc4f3fed4b3 782 if(status!=NFC_SUCCESS)
giovannivisentini 21:ccc4f3fed4b3 783 return onFinishCommand(nfc,status);
giovannivisentini 21:ccc4f3fed4b3 784
giovannivisentini 21:ccc4f3fed4b3 785 nfc->DisableVerificationRequirement(type);
giovannivisentini 21:ccc4f3fed4b3 786 }
giovannivisentini 21:ccc4f3fed4b3 787
giovannivisentini 21:ccc4f3fed4b3 788 virtual void onDisableVerificationRequirement(Nfc *nfc , NFC_StatusTypeDef status,
giovannivisentini 21:ccc4f3fed4b3 789 PasswordType_t ){
giovannivisentini 21:ccc4f3fed4b3 790 onFinishCommand(nfc,status);
giovannivisentini 21:ccc4f3fed4b3 791 }
giovannivisentini 21:ccc4f3fed4b3 792
giovannivisentini 21:ccc4f3fed4b3 793 virtual void onEnablePermanentState(Nfc *nfc ,NFC_StatusTypeDef status,PasswordType_t ){
giovannivisentini 21:ccc4f3fed4b3 794 onFinishCommand(nfc,status);
giovannivisentini 21:ccc4f3fed4b3 795 }
giovannivisentini 21:ccc4f3fed4b3 796
giovannivisentini 21:ccc4f3fed4b3 797
giovannivisentini 21:ccc4f3fed4b3 798 private:
giovannivisentini 21:ccc4f3fed4b3 799
giovannivisentini 21:ccc4f3fed4b3 800 /**
giovannivisentini 21:ccc4f3fed4b3 801 * Remove the private callback and call the user callback.
giovannivisentini 21:ccc4f3fed4b3 802 * @param nfc Object where the command is run.
giovannivisentini 21:ccc4f3fed4b3 803 * @param status Command status.
giovannivisentini 21:ccc4f3fed4b3 804 */
giovannivisentini 21:ccc4f3fed4b3 805 void onFinishCommand(Nfc *nfc,NFC_StatusTypeDef status){
giovannivisentini 21:ccc4f3fed4b3 806 nfc->mComponentCallback=NULL;
giovannivisentini 21:ccc4f3fed4b3 807 if(mEnable){
giovannivisentini 21:ccc4f3fed4b3 808 if(mType==READ){
giovannivisentini 21:ccc4f3fed4b3 809 //enable read = disable write only
giovannivisentini 21:ccc4f3fed4b3 810 nfc->getCallback()->onDisableWriteOnly(nfc,status);
giovannivisentini 21:ccc4f3fed4b3 811 }else
giovannivisentini 21:ccc4f3fed4b3 812 //enable write = disable read only
giovannivisentini 21:ccc4f3fed4b3 813 nfc->getCallback()->onDisableReadOnly(nfc,status);
giovannivisentini 21:ccc4f3fed4b3 814 }else{
giovannivisentini 21:ccc4f3fed4b3 815 if(mType==WRITE){
giovannivisentini 21:ccc4f3fed4b3 816 //disable write = enable read only
giovannivisentini 21:ccc4f3fed4b3 817 nfc->getCallback()->onEnableReadOnly(nfc,status);
giovannivisentini 21:ccc4f3fed4b3 818 }else{
giovannivisentini 21:ccc4f3fed4b3 819 //
giovannivisentini 21:ccc4f3fed4b3 820 nfc->getCallback()->onEnableWriteOnly(nfc,status);
giovannivisentini 21:ccc4f3fed4b3 821 }
giovannivisentini 21:ccc4f3fed4b3 822 }//if-else enable
giovannivisentini 21:ccc4f3fed4b3 823 }//onFinish
giovannivisentini 21:ccc4f3fed4b3 824
giovannivisentini 21:ccc4f3fed4b3 825 AccessType_t mType;
giovannivisentini 21:ccc4f3fed4b3 826 bool mEnable;
giovannivisentini 21:ccc4f3fed4b3 827
giovannivisentini 21:ccc4f3fed4b3 828 };
giovannivisentini 21:ccc4f3fed4b3 829
giovannivisentini 23:d07138541feb 830
giovannivisentini 21:ccc4f3fed4b3 831 /**
giovannivisentini 21:ccc4f3fed4b3 832 * Object containing the callback chain needed to change the access state
giovannivisentini 21:ccc4f3fed4b3 833 */
giovannivisentini 21:ccc4f3fed4b3 834 ChangeAccessStateCallback mChangeAccessStateCallback;
giovannivisentini 23:d07138541feb 835 friend class ChangeAccessStateCallback;
giovannivisentini 19:0b65a5813059 836
giovannivisentini 0:969a2be49f41 837 };
giovannivisentini 0:969a2be49f41 838
giovannivisentini 0:969a2be49f41 839 #endif /* __NFC_CLASS_H */
giovannivisentini 0:969a2be49f41 840
giovannivisentini 0:969a2be49f41 841 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/