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:
Fri Jan 29 15:06:30 2016 +0000
Revision:
21:ccc4f3fed4b3
Parent:
19:0b65a5813059
Child:
23:d07138541feb
move abstract function inside the Nfc class + rename killSession to ForceGetSession

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