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:
Thu Jan 28 16:38:30 2016 +0000
Revision:
20:aad5727cb8c6
Parent:
19:0b65a5813059
Child:
21:ccc4f3fed4b3
fix reading and password managment

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