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