ST / X_NUCLEO_NFC01A1

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:
Mon Feb 01 13:04:43 2016 +0000
Revision:
22:ac2e9a086341
Parent:
19:0b65a5813059
add default value for the gpocallback

Who changed what in which revision?

UserRevisionLine numberNew contents of line
giovannivisentini 0:969a2be49f41 1 /**
giovannivisentini 0:969a2be49f41 2 ******************************************************************************
giovannivisentini 0:969a2be49f41 3 * @file m24sr_class.h
giovannivisentini 6:96389fb79676 4 * @author ST Central Labs
giovannivisentini 9:9f2e2e68d695 5 * @version V1.0.0
giovannivisentini 6:96389fb79676 6 * @date 05 Nov 2015
giovannivisentini 0:969a2be49f41 7 * @brief This file provides a set of functions to interface with the M24SR
giovannivisentini 0:969a2be49f41 8 * device.
giovannivisentini 0:969a2be49f41 9 ******************************************************************************
giovannivisentini 0:969a2be49f41 10 * @attention
giovannivisentini 0:969a2be49f41 11 *
giovannivisentini 1:15d4a123ef6b 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 /* Revision ------------------------------------------------------------------*/
giovannivisentini 0:969a2be49f41 40 /*
giovannivisentini 0:969a2be49f41 41 Based on: X-CUBE-MEMS1/trunk/Drivers/BSP/Components/m24sr/m24sr.h
giovannivisentini 0:969a2be49f41 42 Revision: M24SR Driver V1.0.0
giovannivisentini 0:969a2be49f41 43 */
giovannivisentini 0:969a2be49f41 44
giovannivisentini 0:969a2be49f41 45 /* Define to prevent recursive inclusion -------------------------------------*/
giovannivisentini 0:969a2be49f41 46
giovannivisentini 0:969a2be49f41 47 #ifndef __M24SR_CLASS_H
giovannivisentini 0:969a2be49f41 48 #define __M24SR_CLASS_H
giovannivisentini 0:969a2be49f41 49
giovannivisentini 0:969a2be49f41 50 /* Includes ------------------------------------------------------------------*/
giovannivisentini 0:969a2be49f41 51
giovannivisentini 0:969a2be49f41 52 #include "mbed.h"
giovannivisentini 0:969a2be49f41 53 #include "I2C.h"
giovannivisentini 0:969a2be49f41 54
giovannivisentini 0:969a2be49f41 55 #include "m24sr.h"
giovannivisentini 0:969a2be49f41 56 #include "Interfaces/Nfc_class.h"
giovannivisentini 6:96389fb79676 57 #include "NDefNfcTagM24SR.h"
giovannivisentini 0:969a2be49f41 58
giovannivisentini 0:969a2be49f41 59 /* Classes -------------------------------------------------------------------*/
giovannivisentini 0:969a2be49f41 60
giovannivisentini 9:9f2e2e68d695 61 /**
giovannivisentini 9:9f2e2e68d695 62 * Class representing a M24SR component.
giovannivisentini 0:969a2be49f41 63 */
giovannivisentini 0:969a2be49f41 64 class M24SR: public Nfc {
giovannivisentini 0:969a2be49f41 65
giovannivisentini 0:969a2be49f41 66 public:
giovannivisentini 0:969a2be49f41 67
giovannivisentini 7:19fc04b8fec6 68 /**
giovannivisentini 9:9f2e2e68d695 69 * Default password used to change the write/read permission
giovannivisentini 7:19fc04b8fec6 70 */
giovannivisentini 0:969a2be49f41 71 static const uint8_t DEFAULT_PASSWORD[16];
giovannivisentini 19:0b65a5813059 72
giovannivisentini 19:0b65a5813059 73 /**
giovannivisentini 19:0b65a5813059 74 * Default gpo status
giovannivisentini 19:0b65a5813059 75 */
giovannivisentini 19:0b65a5813059 76 static const NFC_GPO_MGMT DEFAULT_GPO_STATUS=HIGH_IMPEDANCE;
giovannivisentini 19:0b65a5813059 77
giovannivisentini 0:969a2be49f41 78 /*** Constructor and Destructor Methods ***/
giovannivisentini 0:969a2be49f41 79
giovannivisentini 0:969a2be49f41 80 /**
giovannivisentini 0:969a2be49f41 81 * @brief Constructor.
giovannivisentini 0:969a2be49f41 82 * @param address I2C address of the component.
giovannivisentini 9:9f2e2e68d695 83 * @param I2C I2C device to be used for communication.
giovannivisentini 19:0b65a5813059 84 * @param eventCallback Function that will be called when the gpo pin status change.
giovannivisentini 9:9f2e2e68d695 85 * @param GPOPinName Pin used as GPIO.
giovannivisentini 9:9f2e2e68d695 86 * @param RFDISPinName Pin used to disable the RF function.
giovannivisentini 0:969a2be49f41 87 */
giovannivisentini 19:0b65a5813059 88 M24SR(const uint8_t address, I2C &I2C,gpoEventCallback eventCallback, const PinName& GPOPinName,
giovannivisentini 0:969a2be49f41 89 const PinName& RFDISPinName) :
giovannivisentini 19:0b65a5813059 90 Nfc(),
giovannivisentini 19:0b65a5813059 91 who_am_i(0),
giovannivisentini 19:0b65a5813059 92 type(0),
giovannivisentini 19:0b65a5813059 93 address(address),
giovannivisentini 19:0b65a5813059 94 dev_I2C(I2C),
giovannivisentini 19:0b65a5813059 95 GPOPin(GPOPinName),
giovannivisentini 19:0b65a5813059 96 RFDisablePin(RFDISPinName),
giovannivisentini 19:0b65a5813059 97 NDefTagUtil(*this),
giovannivisentini 19:0b65a5813059 98 mCommunicationType(SYNC),
giovannivisentini 19:0b65a5813059 99 mLastCommandSend(NONE),
giovannivisentini 19:0b65a5813059 100 mGpoEventInterrupt(GPOPinName),
giovannivisentini 19:0b65a5813059 101 mComponentCallback(NULL),
giovannivisentini 19:0b65a5813059 102 mManageGPOCallback(*this),
giovannivisentini 19:0b65a5813059 103 mReadIDCallback(*this),
giovannivisentini 19:0b65a5813059 104 mChangePasswordRequestStatusCallback(*this),
giovannivisentini 19:0b65a5813059 105 mRemoveAllPasswordCallback(*this),
giovannivisentini 19:0b65a5813059 106 mChangeAccessStateCallback(*this){
giovannivisentini 19:0b65a5813059 107
giovannivisentini 0:969a2be49f41 108 memset(uM24SRbuffer, 0, 0xFF * sizeof(int8_t));
giovannivisentini 0:969a2be49f41 109 uDIDbyte = 0;
giovannivisentini 0:969a2be49f41 110 RFDisablePin = 0;
giovannivisentini 22:ac2e9a086341 111 if(eventCallback!=NULL)
giovannivisentini 22:ac2e9a086341 112 mGpoEventInterrupt.fall(eventCallback);
giovannivisentini 19:0b65a5813059 113 mGpoEventInterrupt.mode(PullUp);
giovannivisentini 19:0b65a5813059 114 mGpoEventInterrupt.disable_irq();
giovannivisentini 0:969a2be49f41 115 }
giovannivisentini 0:969a2be49f41 116
giovannivisentini 0:969a2be49f41 117 /**
giovannivisentini 0:969a2be49f41 118 * @brief Destructor.
giovannivisentini 0:969a2be49f41 119 */
giovannivisentini 0:969a2be49f41 120 virtual ~M24SR(void) {
giovannivisentini 0:969a2be49f41 121 }
giovannivisentini 0:969a2be49f41 122
giovannivisentini 0:969a2be49f41 123 /*** Public Component Related Methods ***/
giovannivisentini 7:19fc04b8fec6 124
giovannivisentini 7:19fc04b8fec6 125 /**
giovannivisentini 9:9f2e2e68d695 126 * @brief This function initializes the M24SR device.
giovannivisentini 9:9f2e2e68d695 127 * @param ptr Configure parameters, not used.
giovannivisentini 9:9f2e2e68d695 128 * @return NFC_SUCCESS if no errors
giovannivisentini 7:19fc04b8fec6 129 */
giovannivisentini 0:969a2be49f41 130 virtual int Init(void *ptr) {
giovannivisentini 15:67e136b6921d 131 return (NFC_StatusTypeDef) M24SR_Init((M24SR_InitTypeDef*)ptr);
giovannivisentini 0:969a2be49f41 132 }
giovannivisentini 0:969a2be49f41 133
giovannivisentini 0:969a2be49f41 134 virtual int ReadID(uint8_t *id) {
giovannivisentini 0:969a2be49f41 135 return (NFC_StatusTypeDef) M24SR_ReadID((uint8_t *) id);
giovannivisentini 0:969a2be49f41 136 }
giovannivisentini 0:969a2be49f41 137
giovannivisentini 0:969a2be49f41 138 /** lock the tag channel */
giovannivisentini 0:969a2be49f41 139 virtual NFC_StatusTypeDef GetSession(void) {
giovannivisentini 0:969a2be49f41 140 return (NFC_StatusTypeDef) M24SR_GetSession();
giovannivisentini 0:969a2be49f41 141 }
giovannivisentini 0:969a2be49f41 142
giovannivisentini 0:969a2be49f41 143 virtual NFC_StatusTypeDef KillSession(void) {
giovannivisentini 0:969a2be49f41 144 return (NFC_StatusTypeDef) M24SR_KillSession();
giovannivisentini 0:969a2be49f41 145 }
giovannivisentini 0:969a2be49f41 146
giovannivisentini 0:969a2be49f41 147 virtual NFC_StatusTypeDef Deselect(void) {
giovannivisentini 0:969a2be49f41 148 return (NFC_StatusTypeDef) M24SR_Deselect();
giovannivisentini 0:969a2be49f41 149 }
giovannivisentini 0:969a2be49f41 150
giovannivisentini 7:19fc04b8fec6 151 ////////// tag4 command ////////////////////
giovannivisentini 7:19fc04b8fec6 152
giovannivisentini 0:969a2be49f41 153 virtual NFC_StatusTypeDef SelectApplication(void) {
giovannivisentini 19:0b65a5813059 154 return M24SR_SendSelectApplication();
giovannivisentini 0:969a2be49f41 155 }
giovannivisentini 0:969a2be49f41 156
giovannivisentini 0:969a2be49f41 157 virtual NFC_StatusTypeDef SelectCCfile(void) {
giovannivisentini 19:0b65a5813059 158 return M24SR_SendSelectCCfile();
giovannivisentini 0:969a2be49f41 159 }
giovannivisentini 0:969a2be49f41 160
giovannivisentini 0:969a2be49f41 161 virtual NFC_StatusTypeDef SelectNDEFfile(uint16_t NDEFfileId) {
giovannivisentini 19:0b65a5813059 162 return M24SR_SendSelectNDEFfile(NDEFfileId);
giovannivisentini 0:969a2be49f41 163 }
giovannivisentini 0:969a2be49f41 164
giovannivisentini 0:969a2be49f41 165 virtual NFC_StatusTypeDef SelectSystemfile(void) {
giovannivisentini 19:0b65a5813059 166 return M24SR_SendSelectSystemfile();
giovannivisentini 0:969a2be49f41 167 }
giovannivisentini 0:969a2be49f41 168
giovannivisentini 0:969a2be49f41 169 virtual NFC_StatusTypeDef ReadBinary(uint16_t Offset, uint8_t NbByteToRead,
giovannivisentini 0:969a2be49f41 170 uint8_t *pBufferRead) {
giovannivisentini 19:0b65a5813059 171 return (NFC_StatusTypeDef) M24SR_SendReadBinary((uint16_t) Offset,
giovannivisentini 0:969a2be49f41 172 (uint8_t) NbByteToRead, (uint8_t *) pBufferRead);
giovannivisentini 0:969a2be49f41 173 }
giovannivisentini 0:969a2be49f41 174
giovannivisentini 0:969a2be49f41 175 virtual NFC_StatusTypeDef UpdateBinary(uint16_t Offset,
giovannivisentini 19:0b65a5813059 176 uint8_t NbByteToWrite,uint8_t *pDataToWrite) {
giovannivisentini 19:0b65a5813059 177 return (NFC_StatusTypeDef) M24SR_SendUpdateBinary((uint16_t) Offset,
giovannivisentini 0:969a2be49f41 178 (uint8_t) NbByteToWrite, (uint8_t *) pDataToWrite);
giovannivisentini 0:969a2be49f41 179 }
giovannivisentini 0:969a2be49f41 180
giovannivisentini 7:19fc04b8fec6 181 /////////////////// iso 7816-4 commands //////////////////////////
giovannivisentini 7:19fc04b8fec6 182
giovannivisentini 0:969a2be49f41 183 virtual NFC_StatusTypeDef Verify(PasswordType_t pwdId, uint8_t NbPwdByte,
giovannivisentini 0:969a2be49f41 184 const uint8_t *pPwd) {
giovannivisentini 19:0b65a5813059 185 return (NFC_StatusTypeDef) M24SR_SendVerify(passwordTypeToConst(pwdId),
giovannivisentini 0:969a2be49f41 186 (uint8_t) NbPwdByte, pPwd);
giovannivisentini 0:969a2be49f41 187 }
giovannivisentini 0:969a2be49f41 188
giovannivisentini 0:969a2be49f41 189 virtual NFC_StatusTypeDef ChangeReferenceData(PasswordType_t pwdId,
giovannivisentini 0:969a2be49f41 190 const uint8_t *pPwd) {
giovannivisentini 19:0b65a5813059 191 return (NFC_StatusTypeDef) M24SR_SendChangeReferenceData(passwordTypeToConst(pwdId),
giovannivisentini 0:969a2be49f41 192 (uint8_t *) pPwd);
giovannivisentini 0:969a2be49f41 193 }
giovannivisentini 0:969a2be49f41 194
giovannivisentini 0:969a2be49f41 195 virtual NFC_StatusTypeDef EnableVerificationRequirement(
giovannivisentini 0:969a2be49f41 196 PasswordType_t uReadOrWrite) {
giovannivisentini 19:0b65a5813059 197 return (NFC_StatusTypeDef) M24SR_SendEnableVerificationRequirement(
giovannivisentini 12:d1f5eaa85deb 198 passwordTypeToConst(uReadOrWrite));
giovannivisentini 0:969a2be49f41 199 }
giovannivisentini 0:969a2be49f41 200
giovannivisentini 0:969a2be49f41 201 virtual NFC_StatusTypeDef DisableVerificationRequirement(
giovannivisentini 0:969a2be49f41 202 PasswordType_t uReadOrWrite) {
giovannivisentini 19:0b65a5813059 203 return (NFC_StatusTypeDef) M24SR_SendDisableVerificationRequirement(
giovannivisentini 12:d1f5eaa85deb 204 passwordTypeToConst(uReadOrWrite));
giovannivisentini 0:969a2be49f41 205 }
giovannivisentini 0:969a2be49f41 206
giovannivisentini 7:19fc04b8fec6 207 ////////////////////// ST proprietary //////////////////////////////////
giovannivisentini 9:9f2e2e68d695 208
giovannivisentini 0:969a2be49f41 209 virtual NFC_StatusTypeDef STReadBinary(uint16_t Offset,
giovannivisentini 0:969a2be49f41 210 uint8_t NbByteToRead, uint8_t *pBufferRead) {
giovannivisentini 19:0b65a5813059 211 return (NFC_StatusTypeDef) M24SR_SendSTReadBinary((uint16_t) Offset,
giovannivisentini 0:969a2be49f41 212 (uint8_t) NbByteToRead, (uint8_t *) pBufferRead);
giovannivisentini 0:969a2be49f41 213 }
giovannivisentini 0:969a2be49f41 214
giovannivisentini 0:969a2be49f41 215 virtual NFC_StatusTypeDef EnablePermanentState(PasswordType_t uReadOrWrite) {
giovannivisentini 19:0b65a5813059 216 return (NFC_StatusTypeDef) M24SR_SendEnablePermanentState(
giovannivisentini 12:d1f5eaa85deb 217 passwordTypeToConst(uReadOrWrite));
giovannivisentini 0:969a2be49f41 218 }
giovannivisentini 0:969a2be49f41 219
giovannivisentini 0:969a2be49f41 220 virtual NFC_StatusTypeDef DisablePermanentState(PasswordType_t uReadOrWrite) {
giovannivisentini 19:0b65a5813059 221 return (NFC_StatusTypeDef) M24SR_SendDisablePermanentState(
giovannivisentini 12:d1f5eaa85deb 222 passwordTypeToConst(uReadOrWrite));
giovannivisentini 0:969a2be49f41 223 }
giovannivisentini 0:969a2be49f41 224
giovannivisentini 7:19fc04b8fec6 225 ///////////////////// chip configuration /////////////////////////////////
giovannivisentini 0:969a2be49f41 226 virtual NFC_StatusTypeDef StateControl(uint8_t uSetOrReset) {
giovannivisentini 0:969a2be49f41 227 return (NFC_StatusTypeDef) M24SR_StateControl((uint8_t) uSetOrReset);
giovannivisentini 0:969a2be49f41 228 }
giovannivisentini 0:969a2be49f41 229
giovannivisentini 19:0b65a5813059 230 virtual NFC_StatusTypeDef ManageI2CGPO(NFC_GPO_MGMT GPO_I2Cconfig) {
giovannivisentini 19:0b65a5813059 231 return (NFC_StatusTypeDef) M24SR_ManageI2CGPO(GPO_I2Cconfig);
giovannivisentini 0:969a2be49f41 232 }
giovannivisentini 0:969a2be49f41 233
giovannivisentini 0:969a2be49f41 234 virtual NFC_StatusTypeDef ManageRFGPO(uint8_t GPO_RFconfig) {
giovannivisentini 0:969a2be49f41 235 return (NFC_StatusTypeDef) M24SR_ManageRFGPO(
giovannivisentini 19:0b65a5813059 236 (NFC_GPO_MGMT) GPO_RFconfig);
giovannivisentini 0:969a2be49f41 237 }
giovannivisentini 0:969a2be49f41 238
giovannivisentini 0:969a2be49f41 239 virtual NFC_StatusTypeDef RFConfig(uint8_t OnOffChoice) {
giovannivisentini 0:969a2be49f41 240 return (NFC_StatusTypeDef) M24SR_RFConfig((uint8_t) OnOffChoice);
giovannivisentini 0:969a2be49f41 241 }
giovannivisentini 0:969a2be49f41 242
giovannivisentini 19:0b65a5813059 243
giovannivisentini 0:969a2be49f41 244 virtual NFC_StatusTypeDef SendInterrupt(void) {
giovannivisentini 0:969a2be49f41 245 return (NFC_StatusTypeDef) M24SR_SendInterrupt();
giovannivisentini 0:969a2be49f41 246 }
giovannivisentini 0:969a2be49f41 247
giovannivisentini 6:96389fb79676 248 /////////////////// hight level/utility function /////////////////////
giovannivisentini 6:96389fb79676 249
giovannivisentini 7:19fc04b8fec6 250 /**
giovannivisentini 9:9f2e2e68d695 251 * Get an implementation of NDefNfcTag to use the library NDefLib.
giovannivisentini 9:9f2e2e68d695 252 * @return an object of type NdefNfcTag
giovannivisentini 7:19fc04b8fec6 253 */
giovannivisentini 6:96389fb79676 254 NDefLib::NDefNfcTag& getNDefTag(){
giovannivisentini 6:96389fb79676 255 return NDefTagUtil;
giovannivisentini 6:96389fb79676 256 }
giovannivisentini 6:96389fb79676 257
giovannivisentini 6:96389fb79676 258
giovannivisentini 7:19fc04b8fec6 259 /**
giovannivisentini 9:9f2e2e68d695 260 * Enable the request of a password before reading the tag.
giovannivisentini 9:9f2e2e68d695 261 * @param pCurrentWritePassword Current password (the first time use M24SR::DEFAULT_PASSWORD ).
giovannivisentini 9:9f2e2e68d695 262 * @param pNewPassword Password to request before reading the tag.
giovannivisentini 9:9f2e2e68d695 263 * @return return NFC_SUCCESS if no errors
giovannivisentini 9:9f2e2e68d695 264 * @par The password must have a length of 16 chars.
giovannivisentini 7:19fc04b8fec6 265 */
giovannivisentini 6:96389fb79676 266 NFC_StatusTypeDef enableReadPassword(const uint8_t* pCurrentWritePassword,
giovannivisentini 6:96389fb79676 267 const uint8_t* pNewPassword);
giovannivisentini 6:96389fb79676 268
giovannivisentini 7:19fc04b8fec6 269 /**
giovannivisentini 9:9f2e2e68d695 270 * Disable the request of a password before reading the tag.
giovannivisentini 9:9f2e2e68d695 271 * @param pCurrentWritePassword Current password (the first time use M24SR::DEFAULT_PASSWORD).
giovannivisentini 9:9f2e2e68d695 272 * @return return NFC_SUCCESS if no errors
giovannivisentini 9:9f2e2e68d695 273 * @par The password must have a length of 16 chars.
giovannivisentini 7:19fc04b8fec6 274 */
giovannivisentini 6:96389fb79676 275 NFC_StatusTypeDef disableReadPassword(const uint8_t* pCurrentWritePassword=M24SR::DEFAULT_PASSWORD);
giovannivisentini 6:96389fb79676 276
giovannivisentini 7:19fc04b8fec6 277 /**
giovannivisentini 9:9f2e2e68d695 278 * Enable the request of a password before writing to the tag.
giovannivisentini 9:9f2e2e68d695 279 * @param pCurrentWritePassword Current password (the first time use M24SR::DEFAULT_PASSWORD).
giovannivisentini 9:9f2e2e68d695 280 * @param pNewPassword Password to request before reading the tag.
giovannivisentini 9:9f2e2e68d695 281 * @return return NFC_SUCCESS if no errors
giovannivisentini 9:9f2e2e68d695 282 * @par The password must have a length of 16 chars.
giovannivisentini 7:19fc04b8fec6 283 */
giovannivisentini 6:96389fb79676 284 NFC_StatusTypeDef enableWritePassword(const uint8_t* pCurrentWritePassword,
giovannivisentini 6:96389fb79676 285 uint8_t* pNewPassword);
giovannivisentini 6:96389fb79676 286
giovannivisentini 9:9f2e2e68d695 287 /**
giovannivisentini 9:9f2e2e68d695 288 * Disable the request of a password before writing the tag.
giovannivisentini 9:9f2e2e68d695 289 * @param pCurrentWritePassword Current password (the first time use M24SR::DEFAULT_PASSWORD).
giovannivisentini 9:9f2e2e68d695 290 * @return return NFC_SUCCESS if no errors
giovannivisentini 9:9f2e2e68d695 291 * @par The password must have a length of 16 chars.
giovannivisentini 9:9f2e2e68d695 292 */
giovannivisentini 6:96389fb79676 293 NFC_StatusTypeDef disableWritePassword(const uint8_t* pCurrentWritePassword=M24SR::DEFAULT_PASSWORD);
giovannivisentini 6:96389fb79676 294
giovannivisentini 6:96389fb79676 295 /**
giovannivisentini 9:9f2e2e68d695 296 * @brief This function disables both read and write passwords.
giovannivisentini 9:9f2e2e68d695 297 * @param pSuperUserPassword I2C super user password.
giovannivisentini 9:9f2e2e68d695 298 * @return return NFC_SUCCESS if no errors
giovannivisentini 9:9f2e2e68d695 299 * @par The password must have a length of 16 chars.
giovannivisentini 6:96389fb79676 300 */
giovannivisentini 6:96389fb79676 301 NFC_StatusTypeDef disableAllPassword(const uint8_t* pSuperUserPassword=M24SR::DEFAULT_PASSWORD);
giovannivisentini 6:96389fb79676 302
giovannivisentini 6:96389fb79676 303 /**
giovannivisentini 9:9f2e2e68d695 304 * @brief This function enables read only mode.
giovannivisentini 9:9f2e2e68d695 305 * @param pCurrentWritePassword Write password is needed to enable read only mode.
giovannivisentini 9:9f2e2e68d695 306 * @return return NFC_SUCCESS if no errors
giovannivisentini 9:9f2e2e68d695 307 * @par The password must have a length of 16 chars.
giovannivisentini 6:96389fb79676 308 */
giovannivisentini 6:96389fb79676 309 NFC_StatusTypeDef enableReadOnly(const uint8_t* pCurrentWritePassword=M24SR::DEFAULT_PASSWORD);
giovannivisentini 6:96389fb79676 310
giovannivisentini 6:96389fb79676 311 /**
giovannivisentini 9:9f2e2e68d695 312 * @brief This function disables read only mode.
giovannivisentini 9:9f2e2e68d695 313 * @param pCurrentWritePassword Write password is needed to disable read only mode.
giovannivisentini 9:9f2e2e68d695 314 * @return return NFC_SUCCESS if no errors
giovannivisentini 9:9f2e2e68d695 315 * @par The password must have a length of 16 chars.
giovannivisentini 6:96389fb79676 316 */
giovannivisentini 6:96389fb79676 317 NFC_StatusTypeDef disableReadOnly();
giovannivisentini 6:96389fb79676 318
giovannivisentini 6:96389fb79676 319 /**
giovannivisentini 9:9f2e2e68d695 320 * @brief This function enables write only mode.
giovannivisentini 9:9f2e2e68d695 321 * @param pCurrentWritePassword Write password is needed to enable write only mode.
giovannivisentini 9:9f2e2e68d695 322 * @return return NFC_SUCCESS if no errors
giovannivisentini 9:9f2e2e68d695 323 * @par The password must have a length of 16 chars.
giovannivisentini 6:96389fb79676 324 */
giovannivisentini 6:96389fb79676 325 NFC_StatusTypeDef enableWriteOnly(const uint8_t* pCurrentWritePassword=M24SR::DEFAULT_PASSWORD);
giovannivisentini 6:96389fb79676 326
giovannivisentini 6:96389fb79676 327 /**
giovannivisentini 9:9f2e2e68d695 328 * @brief This function disables write only mode.
giovannivisentini 9:9f2e2e68d695 329 * @param pCurrentWritePassword Write password is needed to disable write only mode.
giovannivisentini 9:9f2e2e68d695 330 * @return return NFC_SUCCESS if no errors
giovannivisentini 9:9f2e2e68d695 331 * @par The password must have a length of 16 chars.
giovannivisentini 6:96389fb79676 332 */
giovannivisentini 6:96389fb79676 333 NFC_StatusTypeDef disableWriteOnly();
giovannivisentini 6:96389fb79676 334
giovannivisentini 19:0b65a5813059 335 virtual NFC_StatusTypeDef ManageEvent();
giovannivisentini 19:0b65a5813059 336
giovannivisentini 0:969a2be49f41 337 protected:
giovannivisentini 0:969a2be49f41 338
giovannivisentini 0:969a2be49f41 339 /*** Protected Component Related Methods ***/
giovannivisentini 0:969a2be49f41 340
giovannivisentini 15:67e136b6921d 341 NFC_StatusTypeDef M24SR_Init(M24SR_InitTypeDef *);
giovannivisentini 0:969a2be49f41 342 NFC_StatusTypeDef M24SR_ReadID(uint8_t *nfc_id);
giovannivisentini 0:969a2be49f41 343 NFC_StatusTypeDef M24SR_GetSession(void);
giovannivisentini 0:969a2be49f41 344 NFC_StatusTypeDef M24SR_KillSession(void);
giovannivisentini 19:0b65a5813059 345
giovannivisentini 0:969a2be49f41 346 NFC_StatusTypeDef M24SR_Deselect(void);
giovannivisentini 19:0b65a5813059 347 NFC_StatusTypeDef M24SR_ReceiveDeselect(void);
giovannivisentini 19:0b65a5813059 348
giovannivisentini 19:0b65a5813059 349 NFC_StatusTypeDef M24SR_SendSelectApplication(void);
giovannivisentini 19:0b65a5813059 350 NFC_StatusTypeDef M24SR_ReceiveSelectApplication(void);
giovannivisentini 19:0b65a5813059 351
giovannivisentini 19:0b65a5813059 352 NFC_StatusTypeDef M24SR_SendSelectCCfile(void);
giovannivisentini 19:0b65a5813059 353 NFC_StatusTypeDef M24SR_ReceiveSelectCCfile(void);
giovannivisentini 19:0b65a5813059 354
giovannivisentini 19:0b65a5813059 355 NFC_StatusTypeDef M24SR_SendSelectNDEFfile(uint16_t NDEFfileId);
giovannivisentini 19:0b65a5813059 356 NFC_StatusTypeDef M24SR_ReceiveSelectNDEFfile();
giovannivisentini 19:0b65a5813059 357
giovannivisentini 19:0b65a5813059 358 NFC_StatusTypeDef M24SR_SendSelectSystemfile(void);
giovannivisentini 19:0b65a5813059 359 NFC_StatusTypeDef M24SR_ReceiveSelectSystemfile(void);
giovannivisentini 19:0b65a5813059 360
giovannivisentini 19:0b65a5813059 361 NFC_StatusTypeDef M24SR_SendReadBinary(uint16_t Offset, uint8_t NbByteToRead,
giovannivisentini 0:969a2be49f41 362 uint8_t *pBufferRead);
giovannivisentini 19:0b65a5813059 363 NFC_StatusTypeDef M24SR_SendSTReadBinary(uint16_t Offset, uint8_t NbByteToRead,
giovannivisentini 19:0b65a5813059 364 uint8_t *pBufferRead);
giovannivisentini 19:0b65a5813059 365 NFC_StatusTypeDef M24SR_ReceiveReadBinary(void);
giovannivisentini 19:0b65a5813059 366
giovannivisentini 19:0b65a5813059 367 NFC_StatusTypeDef M24SR_SendUpdateBinary(uint16_t Offset, uint8_t NbByteToWrite,
giovannivisentini 0:969a2be49f41 368 uint8_t *pDataToWrite);
giovannivisentini 19:0b65a5813059 369 NFC_StatusTypeDef M24SR_ReceiveUpdateBinary();
giovannivisentini 19:0b65a5813059 370
giovannivisentini 19:0b65a5813059 371 NFC_StatusTypeDef M24SR_SendVerify(uint16_t uPwdId, uint8_t NbPwdByte,
giovannivisentini 0:969a2be49f41 372 const uint8_t *pPwd);
giovannivisentini 19:0b65a5813059 373 NFC_StatusTypeDef M24SR_ReceiveVerify();
giovannivisentini 19:0b65a5813059 374
giovannivisentini 19:0b65a5813059 375 NFC_StatusTypeDef M24SR_SendChangeReferenceData(uint16_t uPwdId, uint8_t *pPwd);
giovannivisentini 19:0b65a5813059 376 NFC_StatusTypeDef M24SR_ReceiveChangeReferenceData();
giovannivisentini 19:0b65a5813059 377
giovannivisentini 19:0b65a5813059 378 NFC_StatusTypeDef M24SR_SendEnableVerificationRequirement(
giovannivisentini 0:969a2be49f41 379 uint16_t uReadOrWrite);
giovannivisentini 19:0b65a5813059 380 NFC_StatusTypeDef M24SR_ReceiveEnableVerificationRequirement();
giovannivisentini 19:0b65a5813059 381
giovannivisentini 19:0b65a5813059 382 NFC_StatusTypeDef M24SR_SendDisableVerificationRequirement(
giovannivisentini 0:969a2be49f41 383 uint16_t uReadOrWrite);
giovannivisentini 19:0b65a5813059 384 NFC_StatusTypeDef M24SR_ReceiveDisableVerificationRequirement();
giovannivisentini 19:0b65a5813059 385
giovannivisentini 19:0b65a5813059 386 NFC_StatusTypeDef M24SR_SendEnablePermanentState(uint16_t uReadOrWrite);
giovannivisentini 19:0b65a5813059 387 NFC_StatusTypeDef M24SR_ReceiveEnablePermanentState();
giovannivisentini 19:0b65a5813059 388
giovannivisentini 19:0b65a5813059 389 NFC_StatusTypeDef M24SR_SendDisablePermanentState(uint16_t uReadOrWrite);
giovannivisentini 19:0b65a5813059 390 NFC_StatusTypeDef M24SR_ReceiveDisablePermanentState();
giovannivisentini 19:0b65a5813059 391
giovannivisentini 0:969a2be49f41 392 NFC_StatusTypeDef M24SR_SendInterrupt(void);
giovannivisentini 0:969a2be49f41 393 NFC_StatusTypeDef M24SR_StateControl(uint8_t uSetOrReset);
giovannivisentini 19:0b65a5813059 394
giovannivisentini 19:0b65a5813059 395 NFC_StatusTypeDef M24SR_ManageI2CGPO(NFC_GPO_MGMT GPO_I2Cconfig);
giovannivisentini 19:0b65a5813059 396 NFC_StatusTypeDef M24SR_ManageRFGPO(NFC_GPO_MGMT GPO_RFconfig);
giovannivisentini 0:969a2be49f41 397
giovannivisentini 19:0b65a5813059 398 NFC_StatusTypeDef M24SR_RFConfig(uint8_t OnOffChoice);
giovannivisentini 19:0b65a5813059 399 NFC_StatusTypeDef M24SR_SendFWTExtension(uint8_t FWTbyte);
giovannivisentini 19:0b65a5813059 400
giovannivisentini 7:19fc04b8fec6 401
giovannivisentini 7:19fc04b8fec6 402 /**
giovannivisentini 9:9f2e2e68d695 403 * Send a command to the component.
giovannivisentini 19:0b65a5813059 404 * @param NbByte Length of the command.
giovannivisentini 9:9f2e2e68d695 405 * @param pBuffer Buffer containing the command.
giovannivisentini 9:9f2e2e68d695 406 * @return NFC_SUCCESS if no errors
giovannivisentini 7:19fc04b8fec6 407 */
giovannivisentini 0:969a2be49f41 408 NFC_StatusTypeDef M24SR_IO_SendI2Ccommand(uint8_t NbByte, uint8_t *pBuffer);
giovannivisentini 7:19fc04b8fec6 409
giovannivisentini 7:19fc04b8fec6 410 /**
giovannivisentini 9:9f2e2e68d695 411 * Read a command response.
giovannivisentini 9:9f2e2e68d695 412 * @param NbByte Number of bytes to read.
giovannivisentini 9:9f2e2e68d695 413 * @param pBuffer Buffer to store the response into.
giovannivisentini 9:9f2e2e68d695 414 * @return NFC_SUCCESS if no errors
giovannivisentini 7:19fc04b8fec6 415 */
giovannivisentini 0:969a2be49f41 416 NFC_StatusTypeDef M24SR_IO_ReceiveI2Cresponse(uint8_t NbByte,
giovannivisentini 0:969a2be49f41 417 uint8_t *pBuffer);
giovannivisentini 0:969a2be49f41 418
giovannivisentini 7:19fc04b8fec6 419 /**
giovannivisentini 9:9f2e2e68d695 420 * Do an active polling on the I2C bus until the answer is ready.
giovannivisentini 9:9f2e2e68d695 421 * @return NFC_SUCCESS if no errors
giovannivisentini 7:19fc04b8fec6 422 */
giovannivisentini 0:969a2be49f41 423 NFC_StatusTypeDef M24SR_IO_PollI2C(void);
giovannivisentini 0:969a2be49f41 424
giovannivisentini 7:19fc04b8fec6 425 /**
giovannivisentini 9:9f2e2e68d695 426 * Read the gpo pin.
giovannivisentini 9:9f2e2e68d695 427 * @param[out] pPinState Variable to store the pin state into.
giovannivisentini 7:19fc04b8fec6 428 */
giovannivisentini 13:840a9c7f90b9 429 void M24SR_IO_GPO_ReadPin(uint8_t *pPinState) {
giovannivisentini 13:840a9c7f90b9 430 *pPinState= GPOPin.read();
giovannivisentini 0:969a2be49f41 431 }
giovannivisentini 0:969a2be49f41 432
giovannivisentini 7:19fc04b8fec6 433 /**
giovannivisentini 9:9f2e2e68d695 434 * Write the gpo pin.
giovannivisentini 9:9f2e2e68d695 435 * @param pPinState Pin state to write.
giovannivisentini 7:19fc04b8fec6 436 */
giovannivisentini 13:840a9c7f90b9 437 void M24SR_IO_RFDIS_WritePin(uint8_t PinState) {
giovannivisentini 13:840a9c7f90b9 438 if (PinState == 0)
giovannivisentini 0:969a2be49f41 439 RFDisablePin = 0;
giovannivisentini 0:969a2be49f41 440 else
giovannivisentini 0:969a2be49f41 441 RFDisablePin = 1;
giovannivisentini 0:969a2be49f41 442 }
giovannivisentini 0:969a2be49f41 443
giovannivisentini 0:969a2be49f41 444 /*** Component's Instance Variables ***/
giovannivisentini 0:969a2be49f41 445
giovannivisentini 0:969a2be49f41 446 /* Identity */
giovannivisentini 0:969a2be49f41 447 uint8_t who_am_i;
giovannivisentini 0:969a2be49f41 448
giovannivisentini 9:9f2e2e68d695 449 /* Type */
giovannivisentini 0:969a2be49f41 450 uint8_t type;
giovannivisentini 0:969a2be49f41 451
giovannivisentini 0:969a2be49f41 452 /* I2C address */
giovannivisentini 0:969a2be49f41 453 uint8_t address;
giovannivisentini 0:969a2be49f41 454
giovannivisentini 0:969a2be49f41 455 /* IO Device. */
giovannivisentini 9:9f2e2e68d695 456 I2C &dev_I2C;
giovannivisentini 0:969a2be49f41 457
giovannivisentini 0:969a2be49f41 458 /* GPIO */
giovannivisentini 0:969a2be49f41 459 DigitalIn GPOPin;
giovannivisentini 0:969a2be49f41 460
giovannivisentini 0:969a2be49f41 461 /**
giovannivisentini 9:9f2e2e68d695 462 * Pin used to disable the rf chip functionality.
giovannivisentini 0:969a2be49f41 463 */
giovannivisentini 0:969a2be49f41 464 DigitalOut RFDisablePin;
giovannivisentini 0:969a2be49f41 465
giovannivisentini 0:969a2be49f41 466 /**
giovannivisentini 9:9f2e2e68d695 467 * Buffer used to build the command to send to the chip.
giovannivisentini 0:969a2be49f41 468 */
giovannivisentini 9:9f2e2e68d695 469 uint8_t uM24SRbuffer[0xFF];//max command length is 255
giovannivisentini 0:969a2be49f41 470
giovannivisentini 0:969a2be49f41 471 /**
giovannivisentini 0:969a2be49f41 472 * ???
giovannivisentini 0:969a2be49f41 473 */
giovannivisentini 0:969a2be49f41 474 uint8_t uDIDbyte;
giovannivisentini 0:969a2be49f41 475
giovannivisentini 0:969a2be49f41 476 /**
giovannivisentini 9:9f2e2e68d695 477 * Object implementing the interface to use the NDefLib.
giovannivisentini 7:19fc04b8fec6 478 */
giovannivisentini 6:96389fb79676 479 NDefNfcTagM24SR NDefTagUtil;
giovannivisentini 19:0b65a5813059 480
giovannivisentini 19:0b65a5813059 481 /**
giovannivisentini 19:0b65a5813059 482 * command that the component can accept
giovannivisentini 19:0b65a5813059 483 */
giovannivisentini 19:0b65a5813059 484 typedef enum{
giovannivisentini 19:0b65a5813059 485 NONE, //!< NONE
giovannivisentini 19:0b65a5813059 486 DESELECT, //!< DESELECT
giovannivisentini 19:0b65a5813059 487 SELECT_APPLICATION, //!< SELECT_APPLICATION
giovannivisentini 19:0b65a5813059 488 SELECT_CC_FILE, //!< SELECT_CC_FILE
giovannivisentini 19:0b65a5813059 489 SELECT_NDEF_FILE, //!< SELECT_NDEF_FILE
giovannivisentini 19:0b65a5813059 490 SELECT_SYSTEM_FILE, //!< SELECT_SYSTEM_FILE
giovannivisentini 19:0b65a5813059 491 READ, //!< READ
giovannivisentini 19:0b65a5813059 492 UPDATE, //!< UPDATE
giovannivisentini 19:0b65a5813059 493 VERIFY, //!< VERIFY
giovannivisentini 19:0b65a5813059 494 MANAGE_I2C_GPO, //!< MANAGE_I2C_GPO
giovannivisentini 19:0b65a5813059 495 MANAGE_RF_GPO, //!< MANAGE_RF_GPO
giovannivisentini 19:0b65a5813059 496 CHANGE_REFERENCE_DATA, //!< CHANGE_REFERENCE_DATA
giovannivisentini 19:0b65a5813059 497 ENABLE_VERIFICATION_REQUIREMENT, //!< ENABLE_VERIFICATION_REQUIREMENT
giovannivisentini 19:0b65a5813059 498 DISABLE_VERIFICATION_REQUIREMENT,//!< DISABLE_VERIFICATION_REQUIREMENT
giovannivisentini 19:0b65a5813059 499 ENABLE_PERMANET_STATE, //!< ENABLE_PERMANET_STATE
giovannivisentini 19:0b65a5813059 500 DISABLE_PERMANET_STATE, //!< DISABLE_PERMANET_STATE
giovannivisentini 19:0b65a5813059 501 }M24SR_command_t;
giovannivisentini 19:0b65a5813059 502
giovannivisentini 19:0b65a5813059 503 /**
giovannivisentini 19:0b65a5813059 504 * parameter used for invoke the command
giovannivisentini 19:0b65a5813059 505 */
giovannivisentini 19:0b65a5813059 506 typedef struct{
giovannivisentini 19:0b65a5813059 507 uint8_t *data; //!< data
giovannivisentini 19:0b65a5813059 508 uint16_t length; //!< number of byte in the data array
giovannivisentini 19:0b65a5813059 509 uint16_t offset; //!< offset parameter used in the read/write command
giovannivisentini 19:0b65a5813059 510 }M24SR_command_data_t;
giovannivisentini 19:0b65a5813059 511
giovannivisentini 19:0b65a5813059 512 /**
giovannivisentini 19:0b65a5813059 513 * communication mode used by this device
giovannivisentini 19:0b65a5813059 514 */
giovannivisentini 19:0b65a5813059 515 typedef enum{
giovannivisentini 19:0b65a5813059 516 SYNC,//!< SYNC wait the command response before return
giovannivisentini 19:0b65a5813059 517 ASYNC//!< ASYNC use a callback for notify the end of a command
giovannivisentini 19:0b65a5813059 518 }M24SR_communication_t;
giovannivisentini 19:0b65a5813059 519
giovannivisentini 19:0b65a5813059 520 /**
giovannivisentini 19:0b65a5813059 521 * type of communication that we are using
giovannivisentini 19:0b65a5813059 522 */
giovannivisentini 19:0b65a5813059 523 M24SR_communication_t mCommunicationType;
giovannivisentini 19:0b65a5813059 524
giovannivisentini 19:0b65a5813059 525 /**
giovannivisentini 19:0b65a5813059 526 * the class is wait the answer of this command
giovannivisentini 19:0b65a5813059 527 */
giovannivisentini 19:0b65a5813059 528 M24SR_command_t mLastCommandSend;
giovannivisentini 19:0b65a5813059 529
giovannivisentini 19:0b65a5813059 530 /**
giovannivisentini 19:0b65a5813059 531 * parameter used for invoke the last command
giovannivisentini 19:0b65a5813059 532 */
giovannivisentini 19:0b65a5813059 533 M24SR_command_data_t mLastCommandData;
giovannivisentini 19:0b65a5813059 534
giovannivisentini 19:0b65a5813059 535 InterruptIn mGpoEventInterrupt;
giovannivisentini 12:d1f5eaa85deb 536 private:
giovannivisentini 12:d1f5eaa85deb 537
giovannivisentini 12:d1f5eaa85deb 538 /**
giovannivisentini 19:0b65a5813059 539 * Object with private callback used for hide height level commands
giovannivisentini 19:0b65a5813059 540 * that require more than one low level command.
giovannivisentini 19:0b65a5813059 541 * This object has an height priority comparing the user callback
giovannivisentini 19:0b65a5813059 542 */
giovannivisentini 19:0b65a5813059 543 Nfc::Callback *mComponentCallback;
giovannivisentini 19:0b65a5813059 544
giovannivisentini 19:0b65a5813059 545 /**
giovannivisentini 19:0b65a5813059 546 * get the callback object to use
giovannivisentini 19:0b65a5813059 547 * @return callback object to use
giovannivisentini 19:0b65a5813059 548 */
giovannivisentini 19:0b65a5813059 549 Nfc::Callback * getCallback(){
giovannivisentini 19:0b65a5813059 550 if(mComponentCallback!=NULL)
giovannivisentini 19:0b65a5813059 551 return mComponentCallback;
giovannivisentini 19:0b65a5813059 552 return mCallback;
giovannivisentini 19:0b65a5813059 553 }//getCallback
giovannivisentini 19:0b65a5813059 554
giovannivisentini 19:0b65a5813059 555
giovannivisentini 19:0b65a5813059 556 /**
giovannivisentini 19:0b65a5813059 557 * Object with the callback used to send a ManageGPO command.
giovannivisentini 19:0b65a5813059 558 * This class is equivalent to call the method:
giovannivisentini 19:0b65a5813059 559 * <ul>
giovannivisentini 19:0b65a5813059 560 * <li> SelectedApplication </li>
giovannivisentini 19:0b65a5813059 561 * <li> SelectSystemfile </li>
giovannivisentini 19:0b65a5813059 562 * <li> ReadBinar: read the old value </li>
giovannivisentini 19:0b65a5813059 563 * <li> onVerifyed </li>
giovannivisentini 19:0b65a5813059 564 * <li> onUpdatedBinary: write the new value</li>
giovannivisentini 19:0b65a5813059 565 * </ul>
giovannivisentini 19:0b65a5813059 566 */
giovannivisentini 19:0b65a5813059 567 class ManageGPOCallback : public Nfc::Callback{
giovannivisentini 19:0b65a5813059 568
giovannivisentini 19:0b65a5813059 569 public:
giovannivisentini 19:0b65a5813059 570
giovannivisentini 19:0b65a5813059 571 /**
giovannivisentini 19:0b65a5813059 572 * Create the MamageGpoCallback command chain.
giovannivisentini 19:0b65a5813059 573 * @param parent component where run the command.
giovannivisentini 19:0b65a5813059 574 */
giovannivisentini 19:0b65a5813059 575 ManageGPOCallback(M24SR &parent):mParent(parent),
giovannivisentini 19:0b65a5813059 576 mGpoConfig(HIGH_IMPEDANCE),mReadGpoConfig(0),mI2CGpo(true){}
giovannivisentini 19:0b65a5813059 577
giovannivisentini 19:0b65a5813059 578
giovannivisentini 19:0b65a5813059 579 /**
giovannivisentini 19:0b65a5813059 580 * Command parameters
giovannivisentini 19:0b65a5813059 581 * @param i2cGpo true if you want change the i2c gpo, false for change the rf gpo.
giovannivisentini 19:0b65a5813059 582 * @param newConfig new gpo function.
giovannivisentini 19:0b65a5813059 583 */
giovannivisentini 19:0b65a5813059 584 void setNewGpoConfig(bool i2cGpo,NFC_GPO_MGMT newConfig){
giovannivisentini 19:0b65a5813059 585 mGpoConfig=newConfig;
giovannivisentini 19:0b65a5813059 586 mI2CGpo =i2cGpo;
giovannivisentini 19:0b65a5813059 587 }
giovannivisentini 19:0b65a5813059 588
giovannivisentini 19:0b65a5813059 589 virtual void onSelectedApplication(Nfc *nfc,NFC_StatusTypeDef status){
giovannivisentini 19:0b65a5813059 590 if(status==NFC_SUCCESS)
giovannivisentini 19:0b65a5813059 591 nfc->SelectSystemfile();
giovannivisentini 19:0b65a5813059 592 else
giovannivisentini 19:0b65a5813059 593 onFinishCommand(nfc,status);
giovannivisentini 19:0b65a5813059 594 }
giovannivisentini 19:0b65a5813059 595
giovannivisentini 19:0b65a5813059 596 virtual void onSelectedSystemFile(Nfc *nfc,NFC_StatusTypeDef status){
giovannivisentini 19:0b65a5813059 597 if(status==NFC_SUCCESS)
giovannivisentini 19:0b65a5813059 598 nfc->ReadBinary(0x0004, 0x01, &mReadGpoConfig);
giovannivisentini 19:0b65a5813059 599 else
giovannivisentini 19:0b65a5813059 600 onFinishCommand(nfc,status);
giovannivisentini 19:0b65a5813059 601 }
giovannivisentini 19:0b65a5813059 602
giovannivisentini 19:0b65a5813059 603 virtual void onReadByte(Nfc *nfc,NFC_StatusTypeDef status,
giovannivisentini 19:0b65a5813059 604 uint16_t,uint8_t*, uint16_t ){
giovannivisentini 19:0b65a5813059 605 if(status==NFC_SUCCESS)
giovannivisentini 19:0b65a5813059 606 nfc->Verify(M24SR::I2CPwd, 0x10, M24SR::DEFAULT_PASSWORD);
giovannivisentini 19:0b65a5813059 607 else
giovannivisentini 19:0b65a5813059 608 onFinishCommand(nfc,status);
giovannivisentini 19:0b65a5813059 609 }
giovannivisentini 19:0b65a5813059 610
giovannivisentini 19:0b65a5813059 611 virtual void onVerifyed(Nfc *nfc,NFC_StatusTypeDef status){
giovannivisentini 19:0b65a5813059 612 if(status!=NFC_SUCCESS)
giovannivisentini 19:0b65a5813059 613 return onFinishCommand(nfc,status);
giovannivisentini 19:0b65a5813059 614
giovannivisentini 19:0b65a5813059 615 if(mI2CGpo)
giovannivisentini 19:0b65a5813059 616 mReadGpoConfig = (mReadGpoConfig & 0xF0) | (uint8_t)mGpoConfig;
giovannivisentini 19:0b65a5813059 617 else
giovannivisentini 19:0b65a5813059 618 mReadGpoConfig = (mReadGpoConfig & 0x0F) | (((uint8_t)mGpoConfig)<<4);
giovannivisentini 19:0b65a5813059 619
giovannivisentini 19:0b65a5813059 620 nfc->UpdateBinary(0x0004, 0x01, &mReadGpoConfig);
giovannivisentini 19:0b65a5813059 621 }
giovannivisentini 19:0b65a5813059 622
giovannivisentini 19:0b65a5813059 623 virtual void onUpdatedBinary(Nfc *nfc,NFC_StatusTypeDef status,
giovannivisentini 19:0b65a5813059 624 uint16_t , uint8_t*, uint16_t ){
giovannivisentini 19:0b65a5813059 625
giovannivisentini 19:0b65a5813059 626 if(status==NFC_SUCCESS){
giovannivisentini 19:0b65a5813059 627 if (mGpoConfig == I2C_ANSWER_READY){
giovannivisentini 19:0b65a5813059 628 mParent.mCommunicationType = ASYNC;
giovannivisentini 19:0b65a5813059 629 }else{
giovannivisentini 19:0b65a5813059 630 mParent.mCommunicationType = SYNC;
giovannivisentini 19:0b65a5813059 631 }//if-else
giovannivisentini 19:0b65a5813059 632 }//status
giovannivisentini 19:0b65a5813059 633 onFinishCommand(nfc,status);
giovannivisentini 19:0b65a5813059 634 }
giovannivisentini 19:0b65a5813059 635
giovannivisentini 19:0b65a5813059 636 private:
giovannivisentini 19:0b65a5813059 637
giovannivisentini 19:0b65a5813059 638 /**
giovannivisentini 19:0b65a5813059 639 * Remove the private callback and call the user callback
giovannivisentini 19:0b65a5813059 640 * @param nfc Object where the command complete
giovannivisentini 19:0b65a5813059 641 * @param status Command status
giovannivisentini 19:0b65a5813059 642 */
giovannivisentini 19:0b65a5813059 643 void onFinishCommand(Nfc *nfc,NFC_StatusTypeDef status){
giovannivisentini 19:0b65a5813059 644 mParent.mComponentCallback=NULL;
giovannivisentini 19:0b65a5813059 645 if(mI2CGpo){
giovannivisentini 19:0b65a5813059 646 mParent.mCallback->onManageI2CGPO(nfc,status,mGpoConfig);
giovannivisentini 19:0b65a5813059 647 }else{
giovannivisentini 19:0b65a5813059 648 mParent.mCallback->onManageRFGPO(nfc,status,mGpoConfig);
giovannivisentini 19:0b65a5813059 649 }//if-else
giovannivisentini 19:0b65a5813059 650 }//onFinishCommand
giovannivisentini 19:0b65a5813059 651
giovannivisentini 19:0b65a5813059 652 /**
giovannivisentini 19:0b65a5813059 653 * component where run the command
giovannivisentini 19:0b65a5813059 654 */
giovannivisentini 19:0b65a5813059 655 M24SR &mParent;
giovannivisentini 19:0b65a5813059 656
giovannivisentini 19:0b65a5813059 657 /** new gpo function that this class has to write */
giovannivisentini 19:0b65a5813059 658 NFC_GPO_MGMT mGpoConfig;
giovannivisentini 19:0b65a5813059 659
giovannivisentini 19:0b65a5813059 660 /**
giovannivisentini 19:0b65a5813059 661 * variable where store the read gpo configuration
giovannivisentini 19:0b65a5813059 662 */
giovannivisentini 19:0b65a5813059 663 uint8_t mReadGpoConfig;
giovannivisentini 19:0b65a5813059 664
giovannivisentini 19:0b65a5813059 665 /**
giovannivisentini 19:0b65a5813059 666 * true for change the i2c gpo, false for change the rf gpo
giovannivisentini 19:0b65a5813059 667 */
giovannivisentini 19:0b65a5813059 668 bool mI2CGpo;
giovannivisentini 19:0b65a5813059 669
giovannivisentini 19:0b65a5813059 670 };
giovannivisentini 19:0b65a5813059 671
giovannivisentini 19:0b65a5813059 672 /**
giovannivisentini 19:0b65a5813059 673 * Object containing the callback chain needed to change the gpo function
giovannivisentini 19:0b65a5813059 674 */
giovannivisentini 19:0b65a5813059 675 ManageGPOCallback mManageGPOCallback;
giovannivisentini 19:0b65a5813059 676
giovannivisentini 19:0b65a5813059 677
giovannivisentini 19:0b65a5813059 678 /**
giovannivisentini 19:0b65a5813059 679 * Object with the callback used to read the component ID
giovannivisentini 19:0b65a5813059 680 * This class is equivalent to call the method:
giovannivisentini 19:0b65a5813059 681 * <ul>
giovannivisentini 19:0b65a5813059 682 * <li> SelectedApplication </li>
giovannivisentini 19:0b65a5813059 683 * <li> SelectSystemfile </li>
giovannivisentini 19:0b65a5813059 684 * <li> ReadBinary </li>
giovannivisentini 19:0b65a5813059 685 * </ul>
giovannivisentini 19:0b65a5813059 686 */
giovannivisentini 19:0b65a5813059 687 class ReadIDCallback : public Nfc::Callback{
giovannivisentini 19:0b65a5813059 688
giovannivisentini 19:0b65a5813059 689 public:
giovannivisentini 19:0b65a5813059 690
giovannivisentini 19:0b65a5813059 691 /**
giovannivisentini 19:0b65a5813059 692 * build the chain of callback
giovannivisentini 19:0b65a5813059 693 * @param parent object where send the command
giovannivisentini 19:0b65a5813059 694 */
giovannivisentini 19:0b65a5813059 695 ReadIDCallback(M24SR &parent):mParent(parent),mIdPtr(NULL){}
giovannivisentini 19:0b65a5813059 696
giovannivisentini 19:0b65a5813059 697 /**
giovannivisentini 19:0b65a5813059 698 * set the location where write the result
giovannivisentini 19:0b65a5813059 699 * @param idPtr
giovannivisentini 19:0b65a5813059 700 */
giovannivisentini 19:0b65a5813059 701 void readIdOn(uint8_t *idPtr){
giovannivisentini 19:0b65a5813059 702 mIdPtr=idPtr;
giovannivisentini 19:0b65a5813059 703 }
giovannivisentini 19:0b65a5813059 704
giovannivisentini 19:0b65a5813059 705 virtual void onSelectedApplication(Nfc *nfc,NFC_StatusTypeDef status){
giovannivisentini 19:0b65a5813059 706 if(status==NFC_SUCCESS){
giovannivisentini 19:0b65a5813059 707 nfc->SelectSystemfile();
giovannivisentini 19:0b65a5813059 708 }else
giovannivisentini 19:0b65a5813059 709 onFinishCommand(nfc,status);
giovannivisentini 19:0b65a5813059 710
giovannivisentini 19:0b65a5813059 711 }
giovannivisentini 19:0b65a5813059 712
giovannivisentini 19:0b65a5813059 713 virtual void onSelectedSystemFile(Nfc *nfc,NFC_StatusTypeDef status){
giovannivisentini 19:0b65a5813059 714 if(status==NFC_SUCCESS){
giovannivisentini 19:0b65a5813059 715 nfc->ReadBinary(0x0011, 0x01, mIdPtr);
giovannivisentini 19:0b65a5813059 716 }else
giovannivisentini 19:0b65a5813059 717 onFinishCommand(nfc,status);
giovannivisentini 19:0b65a5813059 718 }
giovannivisentini 19:0b65a5813059 719
giovannivisentini 19:0b65a5813059 720 virtual void onReadByte(Nfc *nfc,NFC_StatusTypeDef status,
giovannivisentini 19:0b65a5813059 721 uint16_t ,uint8_t *, uint16_t ){
giovannivisentini 19:0b65a5813059 722 onFinishCommand(nfc,status);
giovannivisentini 19:0b65a5813059 723 }
giovannivisentini 19:0b65a5813059 724
giovannivisentini 19:0b65a5813059 725 private:
giovannivisentini 19:0b65a5813059 726
giovannivisentini 19:0b65a5813059 727 /**
giovannivisentini 19:0b65a5813059 728 * remove the private callback and call the user onReadId function
giovannivisentini 19:0b65a5813059 729 * @param nfc object where the command run
giovannivisentini 19:0b65a5813059 730 * @param status command status
giovannivisentini 19:0b65a5813059 731 */
giovannivisentini 19:0b65a5813059 732 void onFinishCommand(Nfc *nfc,NFC_StatusTypeDef status){
giovannivisentini 19:0b65a5813059 733 mParent.mComponentCallback=NULL;
giovannivisentini 19:0b65a5813059 734 mParent.getCallback()->onReadId(nfc,status,mIdPtr);
giovannivisentini 19:0b65a5813059 735 }
giovannivisentini 19:0b65a5813059 736
giovannivisentini 19:0b65a5813059 737 /**
giovannivisentini 19:0b65a5813059 738 * component where run the command
giovannivisentini 19:0b65a5813059 739 */
giovannivisentini 19:0b65a5813059 740 M24SR &mParent;
giovannivisentini 19:0b65a5813059 741
giovannivisentini 19:0b65a5813059 742 /**
giovannivisentini 19:0b65a5813059 743 * location where write the read id
giovannivisentini 19:0b65a5813059 744 */
giovannivisentini 19:0b65a5813059 745 uint8_t *mIdPtr;
giovannivisentini 19:0b65a5813059 746 };
giovannivisentini 19:0b65a5813059 747
giovannivisentini 19:0b65a5813059 748 /**
giovannivisentini 19:0b65a5813059 749 * Object containing the callback chain needed to read the component id
giovannivisentini 19:0b65a5813059 750 */
giovannivisentini 19:0b65a5813059 751 ReadIDCallback mReadIDCallback;
giovannivisentini 19:0b65a5813059 752
giovannivisentini 19:0b65a5813059 753 /**
giovannivisentini 19:0b65a5813059 754 * This class permit to enable/disable the password request for read/write into the tag
giovannivisentini 19:0b65a5813059 755 * This class is equivalent to call the method:
giovannivisentini 19:0b65a5813059 756 * To enable the request:
giovannivisentini 19:0b65a5813059 757 * <ul>
giovannivisentini 19:0b65a5813059 758 * <li> Verify </li>
giovannivisentini 19:0b65a5813059 759 * <li> ChangeReferenceData </li>
giovannivisentini 19:0b65a5813059 760 * <li> EnablePermanentState </li>
giovannivisentini 19:0b65a5813059 761 * </ul>
giovannivisentini 19:0b65a5813059 762 * To disable the request:
giovannivisentini 19:0b65a5813059 763 * <ul>
giovannivisentini 19:0b65a5813059 764 * <li> Verify </li>
giovannivisentini 19:0b65a5813059 765 * <li> DisableVerificationRequirement </li>
giovannivisentini 19:0b65a5813059 766 * </ul>
giovannivisentini 19:0b65a5813059 767 */
giovannivisentini 19:0b65a5813059 768 class ChangePasswordRequestStatusCallback : public Nfc::Callback{
giovannivisentini 19:0b65a5813059 769
giovannivisentini 19:0b65a5813059 770 public:
giovannivisentini 19:0b65a5813059 771
giovannivisentini 19:0b65a5813059 772 /**
giovannivisentini 19:0b65a5813059 773 * Build the chain of callback.
giovannivisentini 19:0b65a5813059 774 * @param parent object where send the command
giovannivisentini 19:0b65a5813059 775 */
giovannivisentini 19:0b65a5813059 776 ChangePasswordRequestStatusCallback(M24SR &parent):
giovannivisentini 19:0b65a5813059 777 mParent(parent),mNewPwd(NULL),
giovannivisentini 19:0b65a5813059 778 mType(I2CPwd),mEnable(false){}
giovannivisentini 19:0b65a5813059 779
giovannivisentini 19:0b65a5813059 780 /**
giovannivisentini 19:0b65a5813059 781 * Set the password to enable/disable.
giovannivisentini 19:0b65a5813059 782 * @param type Type of password to enable/disable.
giovannivisentini 19:0b65a5813059 783 * @param newPwd Array of 16bytes with the new password, if null the request will be disabled.
giovannivisentini 19:0b65a5813059 784 */
giovannivisentini 19:0b65a5813059 785 void setTask(PasswordType_t type, const uint8_t *newPwd){
giovannivisentini 19:0b65a5813059 786 mNewPwd=newPwd;
giovannivisentini 19:0b65a5813059 787 mType=type;
giovannivisentini 19:0b65a5813059 788 mEnable=newPwd!=NULL;
giovannivisentini 19:0b65a5813059 789 }//setTask
giovannivisentini 19:0b65a5813059 790
giovannivisentini 19:0b65a5813059 791 virtual void onVerifyed(Nfc *nfc, NFC_StatusTypeDef status){
giovannivisentini 19:0b65a5813059 792 if(status!=NFC_SUCCESS)
giovannivisentini 19:0b65a5813059 793 return onFinishCommand(nfc,status);
giovannivisentini 19:0b65a5813059 794 if(mEnable)
giovannivisentini 19:0b65a5813059 795 nfc->ChangeReferenceData(mType,mNewPwd);
giovannivisentini 19:0b65a5813059 796 else
giovannivisentini 19:0b65a5813059 797 nfc->DisableVerificationRequirement(mType);
giovannivisentini 19:0b65a5813059 798 }
giovannivisentini 19:0b65a5813059 799
giovannivisentini 19:0b65a5813059 800 virtual void onDisableVerificationRequirement(Nfc *nfc,
giovannivisentini 19:0b65a5813059 801 NFC_StatusTypeDef status, PasswordType_t ){
giovannivisentini 19:0b65a5813059 802 onFinishCommand(nfc,status);
giovannivisentini 19:0b65a5813059 803 }
giovannivisentini 19:0b65a5813059 804
giovannivisentini 19:0b65a5813059 805 virtual void onChangeReferenceData(Nfc *nfc, NFC_StatusTypeDef status,
giovannivisentini 19:0b65a5813059 806 PasswordType_t type,
giovannivisentini 19:0b65a5813059 807 uint8_t *){
giovannivisentini 19:0b65a5813059 808 if(status==NFC_SUCCESS)
giovannivisentini 19:0b65a5813059 809 nfc->EnablePermanentState(type);
giovannivisentini 19:0b65a5813059 810 else
giovannivisentini 19:0b65a5813059 811 onFinishCommand(nfc,status);
giovannivisentini 19:0b65a5813059 812 }
giovannivisentini 19:0b65a5813059 813
giovannivisentini 19:0b65a5813059 814 virtual void onEnablePermanentState(Nfc *nfc, NFC_StatusTypeDef status,
giovannivisentini 19:0b65a5813059 815 PasswordType_t ){
giovannivisentini 19:0b65a5813059 816 onFinishCommand(nfc,status);
giovannivisentini 19:0b65a5813059 817 }
giovannivisentini 19:0b65a5813059 818
giovannivisentini 19:0b65a5813059 819
giovannivisentini 19:0b65a5813059 820 private:
giovannivisentini 19:0b65a5813059 821
giovannivisentini 19:0b65a5813059 822 /**
giovannivisentini 19:0b65a5813059 823 * Remove the private callback and call the user callback.
giovannivisentini 19:0b65a5813059 824 * @param nfc Object where the command is run.
giovannivisentini 19:0b65a5813059 825 * @param status Command status.
giovannivisentini 19:0b65a5813059 826 */
giovannivisentini 19:0b65a5813059 827 void onFinishCommand(Nfc *nfc,NFC_StatusTypeDef status){
giovannivisentini 19:0b65a5813059 828 mParent.mComponentCallback=NULL;
giovannivisentini 19:0b65a5813059 829 if(mEnable){
giovannivisentini 19:0b65a5813059 830 if(mType==ReadPwd){
giovannivisentini 19:0b65a5813059 831 mParent.getCallback()->onEnableReadPassword(nfc,status,mNewPwd);
giovannivisentini 19:0b65a5813059 832 }else
giovannivisentini 19:0b65a5813059 833 mParent.getCallback()->onEnableWritePassword(nfc,status,mNewPwd);
giovannivisentini 19:0b65a5813059 834 }else{
giovannivisentini 19:0b65a5813059 835 if(mType==ReadPwd){
giovannivisentini 19:0b65a5813059 836 mParent.getCallback()->onDisableReadPassword(nfc,status);
giovannivisentini 19:0b65a5813059 837 }else
giovannivisentini 19:0b65a5813059 838 mParent.getCallback()->onDisableWritePassword(nfc,status);
giovannivisentini 19:0b65a5813059 839 }//if-else enable
giovannivisentini 19:0b65a5813059 840 }//onFinish
giovannivisentini 19:0b65a5813059 841
giovannivisentini 19:0b65a5813059 842 M24SR &mParent;
giovannivisentini 19:0b65a5813059 843
giovannivisentini 19:0b65a5813059 844 const uint8_t *mNewPwd;
giovannivisentini 19:0b65a5813059 845 Nfc::PasswordType_t mType;
giovannivisentini 19:0b65a5813059 846 bool mEnable;
giovannivisentini 19:0b65a5813059 847
giovannivisentini 19:0b65a5813059 848 };
giovannivisentini 19:0b65a5813059 849
giovannivisentini 19:0b65a5813059 850 /**
giovannivisentini 19:0b65a5813059 851 * Object containing the callback chain needed to change the password request
giovannivisentini 19:0b65a5813059 852 */
giovannivisentini 19:0b65a5813059 853 ChangePasswordRequestStatusCallback mChangePasswordRequestStatusCallback;
giovannivisentini 19:0b65a5813059 854
giovannivisentini 19:0b65a5813059 855 /**
giovannivisentini 19:0b65a5813059 856 * This class permit to disable all the password request for read/write into the tag
giovannivisentini 19:0b65a5813059 857 * This class is equivalent to call the methods:
giovannivisentini 19:0b65a5813059 858 * <ul>
giovannivisentini 19:0b65a5813059 859 * <li> Verify(i2c) </li>
giovannivisentini 19:0b65a5813059 860 * <li> DisablePermanentState(Read) </li>
giovannivisentini 19:0b65a5813059 861 * <li> DisablePermanentState(write) </li>
giovannivisentini 19:0b65a5813059 862 * <li> DisableVerificationRequirement(Read) </li>
giovannivisentini 19:0b65a5813059 863 * <li> DisableVerificationRequirement(write) </li>
giovannivisentini 19:0b65a5813059 864 * <li> ChangeReferenceData(Read) </li>
giovannivisentini 19:0b65a5813059 865 * <li> ChangeReferenceData(write) </li>
giovannivisentini 19:0b65a5813059 866 * </ul>
giovannivisentini 19:0b65a5813059 867 */
giovannivisentini 19:0b65a5813059 868 class RemoveAllPasswordCallback : public Nfc::Callback{
giovannivisentini 19:0b65a5813059 869
giovannivisentini 19:0b65a5813059 870 public:
giovannivisentini 19:0b65a5813059 871
giovannivisentini 19:0b65a5813059 872 /**
giovannivisentini 19:0b65a5813059 873 * Build the chain of callback.
giovannivisentini 19:0b65a5813059 874 * @param parent object where send the command
giovannivisentini 19:0b65a5813059 875 */
giovannivisentini 19:0b65a5813059 876 RemoveAllPasswordCallback(M24SR &parent):
giovannivisentini 19:0b65a5813059 877 mParent(parent){}
giovannivisentini 19:0b65a5813059 878
giovannivisentini 19:0b65a5813059 879 virtual void onVerifyed(Nfc *nfc,NFC_StatusTypeDef status){
giovannivisentini 19:0b65a5813059 880 if(status!=NFC_SUCCESS)
giovannivisentini 19:0b65a5813059 881 return onFinishCommand(nfc,status);
giovannivisentini 19:0b65a5813059 882 nfc->DisablePermanentState(ReadPwd);
giovannivisentini 19:0b65a5813059 883 }
giovannivisentini 19:0b65a5813059 884
giovannivisentini 19:0b65a5813059 885 virtual void onDisablePermanentState(Nfc *nfc , NFC_StatusTypeDef status,
giovannivisentini 19:0b65a5813059 886 PasswordType_t type){
giovannivisentini 19:0b65a5813059 887 if(status!=NFC_SUCCESS)
giovannivisentini 19:0b65a5813059 888 return onFinishCommand(nfc,status);
giovannivisentini 19:0b65a5813059 889 if(type==ReadPwd)
giovannivisentini 19:0b65a5813059 890 nfc->DisablePermanentState(WritePwd);
giovannivisentini 19:0b65a5813059 891 else
giovannivisentini 19:0b65a5813059 892 nfc->DisableVerificationRequirement(ReadPwd);
giovannivisentini 19:0b65a5813059 893 }
giovannivisentini 19:0b65a5813059 894
giovannivisentini 19:0b65a5813059 895 virtual void onDisableVerificationRequirement(Nfc *nfc ,
giovannivisentini 19:0b65a5813059 896 NFC_StatusTypeDef status,PasswordType_t type){
giovannivisentini 19:0b65a5813059 897 if(status!=NFC_SUCCESS)
giovannivisentini 19:0b65a5813059 898 return onFinishCommand(nfc,status);
giovannivisentini 19:0b65a5813059 899 if(type==ReadPwd)
giovannivisentini 19:0b65a5813059 900 nfc->DisableVerificationRequirement(WritePwd);
giovannivisentini 19:0b65a5813059 901 else
giovannivisentini 19:0b65a5813059 902 nfc->ChangeReferenceData(ReadPwd,DEFAULT_PASSWORD);
giovannivisentini 19:0b65a5813059 903 }
giovannivisentini 19:0b65a5813059 904
giovannivisentini 19:0b65a5813059 905 virtual void onChangeReferenceData(Nfc *nfc ,NFC_StatusTypeDef status,PasswordType_t type,
giovannivisentini 19:0b65a5813059 906 uint8_t *data){
giovannivisentini 19:0b65a5813059 907 if(status!=NFC_SUCCESS)
giovannivisentini 19:0b65a5813059 908 return onFinishCommand(nfc,status);
giovannivisentini 19:0b65a5813059 909 if(type==ReadPwd)
giovannivisentini 19:0b65a5813059 910 nfc->ChangeReferenceData(WritePwd,data);
giovannivisentini 19:0b65a5813059 911 else
giovannivisentini 19:0b65a5813059 912 onFinishCommand(nfc,status);
giovannivisentini 19:0b65a5813059 913 }
giovannivisentini 19:0b65a5813059 914
giovannivisentini 19:0b65a5813059 915 private:
giovannivisentini 19:0b65a5813059 916
giovannivisentini 19:0b65a5813059 917 /**
giovannivisentini 19:0b65a5813059 918 * Remove the private callback and call the onDisableAllPassword callback.
giovannivisentini 19:0b65a5813059 919 * @param nfc Object where the command is run.
giovannivisentini 19:0b65a5813059 920 * @param status Command status.
giovannivisentini 19:0b65a5813059 921 */
giovannivisentini 19:0b65a5813059 922 void onFinishCommand(Nfc *nfc,NFC_StatusTypeDef status){
giovannivisentini 19:0b65a5813059 923 mParent.mComponentCallback=NULL;
giovannivisentini 19:0b65a5813059 924 mParent.getCallback()->onDisableAllPassword(nfc,status);
giovannivisentini 19:0b65a5813059 925 }//onFinish
giovannivisentini 19:0b65a5813059 926
giovannivisentini 19:0b65a5813059 927 M24SR &mParent;
giovannivisentini 19:0b65a5813059 928 };
giovannivisentini 19:0b65a5813059 929
giovannivisentini 19:0b65a5813059 930 /**
giovannivisentini 19:0b65a5813059 931 * Object containing the callback chain needed remove the password request
giovannivisentini 19:0b65a5813059 932 */
giovannivisentini 19:0b65a5813059 933 RemoveAllPasswordCallback mRemoveAllPasswordCallback;
giovannivisentini 19:0b65a5813059 934
giovannivisentini 19:0b65a5813059 935 /**
giovannivisentini 19:0b65a5813059 936 * This class permit set the tag as read/write only
giovannivisentini 19:0b65a5813059 937 * This class is equivalent to call the methods:
giovannivisentini 19:0b65a5813059 938 * <ul>
giovannivisentini 19:0b65a5813059 939 * <li> Verify(i2c) </li>
giovannivisentini 19:0b65a5813059 940 * <li> EnablePermanentState(Read/write) </li>
giovannivisentini 19:0b65a5813059 941 * </ul>
giovannivisentini 19:0b65a5813059 942 * or:
giovannivisentini 19:0b65a5813059 943 * <ul>
giovannivisentini 19:0b65a5813059 944 * <li> Verify(i2c) </li>
giovannivisentini 19:0b65a5813059 945 * <li> DisableVerificationRequirement(Read/write) </li>
giovannivisentini 19:0b65a5813059 946 * </ul>
giovannivisentini 19:0b65a5813059 947 */
giovannivisentini 19:0b65a5813059 948 class ChangeAccessStateCallback : public Nfc::Callback{
giovannivisentini 19:0b65a5813059 949
giovannivisentini 19:0b65a5813059 950 public:
giovannivisentini 19:0b65a5813059 951
giovannivisentini 19:0b65a5813059 952 typedef enum{
giovannivisentini 19:0b65a5813059 953 WRITE,
giovannivisentini 19:0b65a5813059 954 READ
giovannivisentini 19:0b65a5813059 955 }AccessType_t;
giovannivisentini 19:0b65a5813059 956
giovannivisentini 19:0b65a5813059 957 /**
giovannivisentini 19:0b65a5813059 958 * Build the chain of callback.
giovannivisentini 19:0b65a5813059 959 * @param parent object where send the command
giovannivisentini 19:0b65a5813059 960 */
giovannivisentini 19:0b65a5813059 961 ChangeAccessStateCallback(M24SR &parent):
giovannivisentini 19:0b65a5813059 962 mParent(parent),mType(WRITE),mEnable(false){}
giovannivisentini 19:0b65a5813059 963
giovannivisentini 19:0b65a5813059 964 /**
giovannivisentini 19:0b65a5813059 965 * Set the access to enable/disable
giovannivisentini 19:0b65a5813059 966 * @param type Type to enable or disable
giovannivisentini 19:0b65a5813059 967 * @param enable true for enable the state, false for disable it
giovannivisentini 19:0b65a5813059 968 */
giovannivisentini 19:0b65a5813059 969 void changeAccessState(AccessType_t type,bool enable){
giovannivisentini 19:0b65a5813059 970 mType=type;
giovannivisentini 19:0b65a5813059 971 mEnable=enable;
giovannivisentini 19:0b65a5813059 972 }
giovannivisentini 19:0b65a5813059 973
giovannivisentini 19:0b65a5813059 974 virtual void onVerifyed(Nfc *nfc,NFC_StatusTypeDef status){
giovannivisentini 19:0b65a5813059 975 if(status!=NFC_SUCCESS)
giovannivisentini 19:0b65a5813059 976 return onFinishCommand(nfc,status);
giovannivisentini 19:0b65a5813059 977
giovannivisentini 19:0b65a5813059 978 if(mEnable){
giovannivisentini 19:0b65a5813059 979 nfc->EnablePermanentState(mType==WRITE? WritePwd : ReadPwd);
giovannivisentini 19:0b65a5813059 980 }else
giovannivisentini 19:0b65a5813059 981 nfc->DisableVerificationRequirement(mType==WRITE? WritePwd : ReadPwd);
giovannivisentini 19:0b65a5813059 982 }
giovannivisentini 19:0b65a5813059 983
giovannivisentini 19:0b65a5813059 984 virtual void onDisableVerificationRequirement(Nfc *nfc , NFC_StatusTypeDef status,
giovannivisentini 19:0b65a5813059 985 PasswordType_t ){
giovannivisentini 19:0b65a5813059 986 onFinishCommand(nfc,status);
giovannivisentini 19:0b65a5813059 987 }
giovannivisentini 19:0b65a5813059 988
giovannivisentini 19:0b65a5813059 989 virtual void onEnablePermanentState(Nfc *nfc ,NFC_StatusTypeDef status,PasswordType_t ){
giovannivisentini 19:0b65a5813059 990 onFinishCommand(nfc,status);
giovannivisentini 19:0b65a5813059 991 }
giovannivisentini 19:0b65a5813059 992
giovannivisentini 19:0b65a5813059 993
giovannivisentini 19:0b65a5813059 994 private:
giovannivisentini 19:0b65a5813059 995
giovannivisentini 19:0b65a5813059 996 /**
giovannivisentini 19:0b65a5813059 997 * Remove the private callback and call the user callback.
giovannivisentini 19:0b65a5813059 998 * @param nfc Object where the command is run.
giovannivisentini 19:0b65a5813059 999 * @param status Command status.
giovannivisentini 19:0b65a5813059 1000 */
giovannivisentini 19:0b65a5813059 1001 void onFinishCommand(Nfc *nfc,NFC_StatusTypeDef status){
giovannivisentini 19:0b65a5813059 1002 mParent.mComponentCallback=NULL;
giovannivisentini 19:0b65a5813059 1003 if(mEnable){
giovannivisentini 19:0b65a5813059 1004 if(mType==READ){
giovannivisentini 19:0b65a5813059 1005 //enable read = disable write only
giovannivisentini 19:0b65a5813059 1006 mParent.getCallback()->onDisableWriteOnly(nfc,status);
giovannivisentini 19:0b65a5813059 1007 }else
giovannivisentini 19:0b65a5813059 1008 //enable write = disable read only
giovannivisentini 19:0b65a5813059 1009 mParent.getCallback()->onDisableReadOnly(nfc,status);
giovannivisentini 19:0b65a5813059 1010 }else{
giovannivisentini 19:0b65a5813059 1011 if(mType==WRITE){
giovannivisentini 19:0b65a5813059 1012 //disable write = enable read only
giovannivisentini 19:0b65a5813059 1013 mParent.getCallback()->onEnableReadOnly(nfc,status);
giovannivisentini 19:0b65a5813059 1014 }else{
giovannivisentini 19:0b65a5813059 1015 //
giovannivisentini 19:0b65a5813059 1016 mParent.getCallback()->onEnableWriteOnly(nfc,status);
giovannivisentini 19:0b65a5813059 1017 }
giovannivisentini 19:0b65a5813059 1018 }//if-else enable
giovannivisentini 19:0b65a5813059 1019 }//onFinish
giovannivisentini 19:0b65a5813059 1020
giovannivisentini 19:0b65a5813059 1021 M24SR &mParent;
giovannivisentini 19:0b65a5813059 1022
giovannivisentini 19:0b65a5813059 1023 AccessType_t mType;
giovannivisentini 19:0b65a5813059 1024 bool mEnable;
giovannivisentini 19:0b65a5813059 1025
giovannivisentini 19:0b65a5813059 1026 };
giovannivisentini 19:0b65a5813059 1027
giovannivisentini 19:0b65a5813059 1028 /**
giovannivisentini 19:0b65a5813059 1029 * Object containing the callback chain needed to change the access state
giovannivisentini 19:0b65a5813059 1030 */
giovannivisentini 19:0b65a5813059 1031 ChangeAccessStateCallback mChangeAccessStateCallback;
giovannivisentini 19:0b65a5813059 1032
giovannivisentini 19:0b65a5813059 1033
giovannivisentini 19:0b65a5813059 1034 /**
giovannivisentini 12:d1f5eaa85deb 1035 * Convert a generic enum to the value used by the M24SR chip.
giovannivisentini 12:d1f5eaa85deb 1036 * @param type Password type.
giovannivisentini 12:d1f5eaa85deb 1037 * @return equivalent value used inside the m24sr chip */
giovannivisentini 12:d1f5eaa85deb 1038 uint16_t passwordTypeToConst(const PasswordType_t &type)const{
giovannivisentini 12:d1f5eaa85deb 1039 switch(type){
giovannivisentini 12:d1f5eaa85deb 1040 case ReadPwd:
giovannivisentini 12:d1f5eaa85deb 1041 return READ_PWD;
giovannivisentini 12:d1f5eaa85deb 1042 case WritePwd:
giovannivisentini 12:d1f5eaa85deb 1043 return WRITE_PWD;
giovannivisentini 12:d1f5eaa85deb 1044 case I2CPwd:
giovannivisentini 12:d1f5eaa85deb 1045 default:
giovannivisentini 12:d1f5eaa85deb 1046 return I2C_PWD;
giovannivisentini 19:0b65a5813059 1047 }//switch
giovannivisentini 12:d1f5eaa85deb 1048 }//passwordTypeToConst
giovannivisentini 12:d1f5eaa85deb 1049
giovannivisentini 19:0b65a5813059 1050 /**
giovannivisentini 19:0b65a5813059 1051 * convert a uint16 into an enum value
giovannivisentini 19:0b65a5813059 1052 * @param type
giovannivisentini 19:0b65a5813059 1053 * @return
giovannivisentini 19:0b65a5813059 1054 */
giovannivisentini 19:0b65a5813059 1055 PasswordType_t constToPasswordType(const uint16_t type)const{
giovannivisentini 19:0b65a5813059 1056 switch(type){
giovannivisentini 19:0b65a5813059 1057 case READ_PWD:
giovannivisentini 19:0b65a5813059 1058 return ReadPwd;
giovannivisentini 19:0b65a5813059 1059 case WRITE_PWD:
giovannivisentini 19:0b65a5813059 1060 return WritePwd;
giovannivisentini 19:0b65a5813059 1061 case I2C_PWD:
giovannivisentini 19:0b65a5813059 1062 default:
giovannivisentini 19:0b65a5813059 1063 return I2CPwd;
giovannivisentini 19:0b65a5813059 1064 }//switch
giovannivisentini 19:0b65a5813059 1065 }//passwordTypeToConst
giovannivisentini 0:969a2be49f41 1066 };
giovannivisentini 0:969a2be49f41 1067
giovannivisentini 0:969a2be49f41 1068 #endif // __M24SR_CLASS_H
giovannivisentini 0:969a2be49f41 1069
giovannivisentini 0:969a2be49f41 1070 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/