Firmware library for the X-NUCLEO-NFC01A1 Dynamic NFC Tag board.

Dependencies:   M24SR

Dependents:   NFC M2M_2016_STM32 MyongjiElec_capstone1 IDW01M1_Cloud_IBM ... more

Fork of X_NUCLEO_NFC01A1 by ST Expansion SW Team

X-NUCLEO-NFC01A1 Dynamic NFC Tag Expansion Board Firmware Package

Introduction

This firmware package includes Components Device Drivers, Board Support Package and example applications for STMicroelectronics X-NUCLEO-NFC01A1 Dynamic NFC Tag Expansion Board based on M24SR.

Firmware Library

Class X_NUCLEO_NFC01A1 is intended to represent the Dynamic NFC Tag Expansion Board with the same name.
It provides an API to access to the M24SR component and to the three onboard LEDs.
It is intentionally implemented as a singleton because only one X_NUCLEO_NFC01A1 at a time might be deployed in a HW component stack.
The library also provides an implementation of the NDEF library API for M24SR, providing an simple way to read/write NDEF formatted messages from/to the M24SR dynamic NFC tag.

Example applications

1. Hello World
2. Asynchronous Hello World

Committer:
giovannivisentini
Date:
Fri Apr 28 12:14:12 2017 +0000
Revision:
29:7a2dfd06cb29
Child:
31:85fdf6fd3da5
Child:
32:9fc4f9195d28
Aligned to ARM mbed coding style.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
giovannivisentini 29:7a2dfd06cb29 1 /**
giovannivisentini 29:7a2dfd06cb29 2 ******************************************************************************
giovannivisentini 29:7a2dfd06cb29 3 * @file m24sr_class.h
giovannivisentini 29:7a2dfd06cb29 4 * @author ST Central Labs
giovannivisentini 29:7a2dfd06cb29 5 * @version V2.0.0
giovannivisentini 29:7a2dfd06cb29 6 * @date 28 Apr 2017
giovannivisentini 29:7a2dfd06cb29 7 * @brief This file provides a set of functions to interface with the M24SR
giovannivisentini 29:7a2dfd06cb29 8 * device.
giovannivisentini 29:7a2dfd06cb29 9 ******************************************************************************
giovannivisentini 29:7a2dfd06cb29 10 * @attention
giovannivisentini 29:7a2dfd06cb29 11 *
giovannivisentini 29:7a2dfd06cb29 12 * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
giovannivisentini 29:7a2dfd06cb29 13 *
giovannivisentini 29:7a2dfd06cb29 14 * Redistribution and use in source and binary forms, with or without modification,
giovannivisentini 29:7a2dfd06cb29 15 * are permitted provided that the following conditions are met:
giovannivisentini 29:7a2dfd06cb29 16 * 1. Redistributions of source code must retain the above copyright notice,
giovannivisentini 29:7a2dfd06cb29 17 * this list of conditions and the following disclaimer.
giovannivisentini 29:7a2dfd06cb29 18 * 2. Redistributions in binary form must reproduce the above copyright notice,
giovannivisentini 29:7a2dfd06cb29 19 * this list of conditions and the following disclaimer in the documentation
giovannivisentini 29:7a2dfd06cb29 20 * and/or other materials provided with the distribution.
giovannivisentini 29:7a2dfd06cb29 21 * 3. Neither the name of STMicroelectronics nor the names of its contributors
giovannivisentini 29:7a2dfd06cb29 22 * may be used to endorse or promote products derived from this software
giovannivisentini 29:7a2dfd06cb29 23 * without specific prior written permission.
giovannivisentini 29:7a2dfd06cb29 24 *
giovannivisentini 29:7a2dfd06cb29 25 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
giovannivisentini 29:7a2dfd06cb29 26 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
giovannivisentini 29:7a2dfd06cb29 27 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
giovannivisentini 29:7a2dfd06cb29 28 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
giovannivisentini 29:7a2dfd06cb29 29 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
giovannivisentini 29:7a2dfd06cb29 30 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
giovannivisentini 29:7a2dfd06cb29 31 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
giovannivisentini 29:7a2dfd06cb29 32 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
giovannivisentini 29:7a2dfd06cb29 33 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
giovannivisentini 29:7a2dfd06cb29 34 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
giovannivisentini 29:7a2dfd06cb29 35 *
giovannivisentini 29:7a2dfd06cb29 36 ******************************************************************************
giovannivisentini 29:7a2dfd06cb29 37 */
giovannivisentini 29:7a2dfd06cb29 38
giovannivisentini 29:7a2dfd06cb29 39 /* Revision ------------------------------------------------------------------*/
giovannivisentini 29:7a2dfd06cb29 40 /*
giovannivisentini 29:7a2dfd06cb29 41 Based on: X-CUBE-MEMS1/trunk/Drivers/BSP/Components/m24sr/m24sr.h
giovannivisentini 29:7a2dfd06cb29 42 Revision: M24SR Driver V1.0.0
giovannivisentini 29:7a2dfd06cb29 43 */
giovannivisentini 29:7a2dfd06cb29 44
giovannivisentini 29:7a2dfd06cb29 45 /* Define to prevent recursive inclusion -------------------------------------*/
giovannivisentini 29:7a2dfd06cb29 46
giovannivisentini 29:7a2dfd06cb29 47 #ifndef __M24SR_CLASS_H
giovannivisentini 29:7a2dfd06cb29 48 #define __M24SR_CLASS_H
giovannivisentini 29:7a2dfd06cb29 49
giovannivisentini 29:7a2dfd06cb29 50 /* Includes ------------------------------------------------------------------*/
giovannivisentini 29:7a2dfd06cb29 51
giovannivisentini 29:7a2dfd06cb29 52 #include "mbed.h"
giovannivisentini 29:7a2dfd06cb29 53 #include "I2C.h"
giovannivisentini 29:7a2dfd06cb29 54
giovannivisentini 29:7a2dfd06cb29 55 #include "m24sr_def.h"
giovannivisentini 29:7a2dfd06cb29 56 #include "Nfc.h"
giovannivisentini 29:7a2dfd06cb29 57
giovannivisentini 29:7a2dfd06cb29 58 #include "NDefLib/NDefNfcTag.h"
giovannivisentini 29:7a2dfd06cb29 59 class NDefNfcTagM24SR;
giovannivisentini 29:7a2dfd06cb29 60
giovannivisentini 29:7a2dfd06cb29 61 /* Classes -------------------------------------------------------------------*/
giovannivisentini 29:7a2dfd06cb29 62
giovannivisentini 29:7a2dfd06cb29 63 /**
giovannivisentini 29:7a2dfd06cb29 64 * Class representing a M24SR component.
giovannivisentini 29:7a2dfd06cb29 65 * This component has two operation modes, sync or async.
giovannivisentini 29:7a2dfd06cb29 66 * In sync mode each function call returns only after the command has completed.
giovannivisentini 29:7a2dfd06cb29 67 * In async mode each function call returns immediately and the answer will be notified
giovannivisentini 29:7a2dfd06cb29 68 * through a callback.
giovannivisentini 29:7a2dfd06cb29 69 * The default behavior is sync mode.
giovannivisentini 29:7a2dfd06cb29 70 * To enable the async mode ManageI2CGPO(I2C_ANSWER_READY) function must be called.
giovannivisentini 29:7a2dfd06cb29 71 * When the component notifies an interrupt user must call {@link ManageEvent} function.
giovannivisentini 29:7a2dfd06cb29 72 * Note that passing a parameter other than I2C_ANSWER_READY to ManageI2CGPO initialize the component in sync mode.
giovannivisentini 29:7a2dfd06cb29 73 */
giovannivisentini 29:7a2dfd06cb29 74 class M24SR: public Nfc {
giovannivisentini 29:7a2dfd06cb29 75
giovannivisentini 29:7a2dfd06cb29 76 public:
giovannivisentini 29:7a2dfd06cb29 77
giovannivisentini 29:7a2dfd06cb29 78 typedef enum {
giovannivisentini 29:7a2dfd06cb29 79 M24SR_SUCCESS=NFC_SUCCESS,
giovannivisentini 29:7a2dfd06cb29 80 M24SR_ERROR=0x6F00,
giovannivisentini 29:7a2dfd06cb29 81 M24SR_FILE_OVERFLOW_LE = 0x6280,
giovannivisentini 29:7a2dfd06cb29 82 M24SR_EOF = 0x6282,
giovannivisentini 29:7a2dfd06cb29 83 M24SR_PASSWORD_REQUIRED = 0x6300,
giovannivisentini 29:7a2dfd06cb29 84 M24SR_PASSWORD_INCORRECT = 0x63C0,
giovannivisentini 29:7a2dfd06cb29 85 M24SR_PASSWORD_INCORRECT1RETRY = 0x63C1,
giovannivisentini 29:7a2dfd06cb29 86 M24SR_PASSWORD_INCORRECT2RETRY = 0x63C2,
giovannivisentini 29:7a2dfd06cb29 87 M24SR_WRONG_LENGHT = 0x6700,
giovannivisentini 29:7a2dfd06cb29 88 M24SR_UNSUCESSFUL_UPDATING = 0x6581,
giovannivisentini 29:7a2dfd06cb29 89 M24SR_INCOPATIBLE_COMMAND= 0x6981,
giovannivisentini 29:7a2dfd06cb29 90 M24SR_SECURITY_UNSATISFIED = 0x6982,
giovannivisentini 29:7a2dfd06cb29 91 M24SR_REFERENCE_DATA_NOT_USABLE = 0x6984,
giovannivisentini 29:7a2dfd06cb29 92
giovannivisentini 29:7a2dfd06cb29 93 M24SR_INCORRECT_PARAMETER = 0x6a80,
giovannivisentini 29:7a2dfd06cb29 94 M24SR_FILE_NOT_FOUND=0x6a82,
giovannivisentini 29:7a2dfd06cb29 95 M24SR_FILE_OVERFLOW_LC = 0x6A84, //TODO difference with Le??
giovannivisentini 29:7a2dfd06cb29 96
giovannivisentini 29:7a2dfd06cb29 97 M24SR_INCORRECT_P1_OR_P2 = 0x6A86, //TODO better name?
giovannivisentini 29:7a2dfd06cb29 98 M24SR_RF_SESSION_KILLED=0x6500,
giovannivisentini 29:7a2dfd06cb29 99 M24SR_INS_NOT_SUPPORTED=0x6D00,
giovannivisentini 29:7a2dfd06cb29 100 M24SR_CLASS_NOT_SUPPORTED=0x6E00,
giovannivisentini 29:7a2dfd06cb29 101
giovannivisentini 29:7a2dfd06cb29 102 //IOError
giovannivisentini 29:7a2dfd06cb29 103 M24SR_IO_ERROR_I2CTIMEOUT=0x0011,
giovannivisentini 29:7a2dfd06cb29 104 M24SR_IO_ERROR_CRC=0x0012,
giovannivisentini 29:7a2dfd06cb29 105 M24SR_IO_ERROR_NACK=0x0013,
giovannivisentini 29:7a2dfd06cb29 106 M24SR_IO_ERROR_PARAMETER=0x0014,
giovannivisentini 29:7a2dfd06cb29 107 M24SR_IO_ERROR_NBATEMPT=0x0015,
giovannivisentini 29:7a2dfd06cb29 108 M24SR_IO_NOACKNOWLEDGE=0x0016,
giovannivisentini 29:7a2dfd06cb29 109 M24SR_IO_PIN_NOT_CONNECTED=0x0017
giovannivisentini 29:7a2dfd06cb29 110 } StatusTypeDef;
giovannivisentini 29:7a2dfd06cb29 111
giovannivisentini 29:7a2dfd06cb29 112 /**
giovannivisentini 29:7a2dfd06cb29 113 * @brief GPO state structure
giovannivisentini 29:7a2dfd06cb29 114 */
giovannivisentini 29:7a2dfd06cb29 115 typedef enum {
giovannivisentini 29:7a2dfd06cb29 116 HIGH_IMPEDANCE = 0,
giovannivisentini 29:7a2dfd06cb29 117 SESSION_OPENED =1,
giovannivisentini 29:7a2dfd06cb29 118 WIP=2,
giovannivisentini 29:7a2dfd06cb29 119 I2C_ANSWER_READY=3,
giovannivisentini 29:7a2dfd06cb29 120 INTERRUPT=4,
giovannivisentini 29:7a2dfd06cb29 121 STATE_CONTROL=5
giovannivisentini 29:7a2dfd06cb29 122 } NFC_GPO_MGMT;
giovannivisentini 29:7a2dfd06cb29 123
giovannivisentini 29:7a2dfd06cb29 124 /**
giovannivisentini 29:7a2dfd06cb29 125 * Possible password to set.
giovannivisentini 29:7a2dfd06cb29 126 */
giovannivisentini 29:7a2dfd06cb29 127 typedef enum{
giovannivisentini 29:7a2dfd06cb29 128 ReadPwd, //!< Password to use before reading the tag
giovannivisentini 29:7a2dfd06cb29 129 WritePwd, //!< Password to use before writing the tag
giovannivisentini 29:7a2dfd06cb29 130 I2CPwd, //!< Root password, used only through nfc
giovannivisentini 29:7a2dfd06cb29 131 }PasswordType_t;
giovannivisentini 29:7a2dfd06cb29 132
giovannivisentini 29:7a2dfd06cb29 133 /**
giovannivisentini 29:7a2dfd06cb29 134 * Default password used to change the write/read permission
giovannivisentini 29:7a2dfd06cb29 135 */
giovannivisentini 29:7a2dfd06cb29 136 static const uint8_t DEFAULT_PASSWORD[16];
giovannivisentini 29:7a2dfd06cb29 137
giovannivisentini 29:7a2dfd06cb29 138 /**
giovannivisentini 29:7a2dfd06cb29 139 * Default gpo status -> the gpo will remain high
giovannivisentini 29:7a2dfd06cb29 140 */
giovannivisentini 29:7a2dfd06cb29 141 static const NFC_GPO_MGMT DEFAULT_GPO_STATUS=HIGH_IMPEDANCE;
giovannivisentini 29:7a2dfd06cb29 142
giovannivisentini 29:7a2dfd06cb29 143
giovannivisentini 29:7a2dfd06cb29 144 /**
giovannivisentini 29:7a2dfd06cb29 145 * Function that will be called when an interrupt is fired,
giovannivisentini 29:7a2dfd06cb29 146 * this function must be set if you want use the component in async mode.
giovannivisentini 29:7a2dfd06cb29 147 */
giovannivisentini 29:7a2dfd06cb29 148 typedef void(*gpoEventCallback)(void);
giovannivisentini 29:7a2dfd06cb29 149
giovannivisentini 29:7a2dfd06cb29 150 /**
giovannivisentini 29:7a2dfd06cb29 151 * Object that contains all the callbacks fired by this class, each command has its own callback.
giovannivisentini 29:7a2dfd06cb29 152 * The callback default implementation is an empty function.
giovannivisentini 29:7a2dfd06cb29 153 */
giovannivisentini 29:7a2dfd06cb29 154 class Callbacks{
giovannivisentini 29:7a2dfd06cb29 155 public:
giovannivisentini 29:7a2dfd06cb29 156
giovannivisentini 29:7a2dfd06cb29 157 /** called when GetSession or ForceGetSession completes
giovannivisentini 29:7a2dfd06cb29 158 * @see M24SR#GetSession
giovannivisentini 29:7a2dfd06cb29 159 * @see M24SR#ForceGetSession */
giovannivisentini 29:7a2dfd06cb29 160 virtual void on_session_open(M24SR *nfc,StatusTypeDef status){
giovannivisentini 29:7a2dfd06cb29 161 (void)nfc; (void)status;
giovannivisentini 29:7a2dfd06cb29 162 }
giovannivisentini 29:7a2dfd06cb29 163
giovannivisentini 29:7a2dfd06cb29 164 /** called when Deselect completes
giovannivisentini 29:7a2dfd06cb29 165 * @see M24SR#Deselect */
giovannivisentini 29:7a2dfd06cb29 166 virtual void on_deselect(M24SR *nfc,StatusTypeDef status){
giovannivisentini 29:7a2dfd06cb29 167 (void)nfc; (void)status;
giovannivisentini 29:7a2dfd06cb29 168 }
giovannivisentini 29:7a2dfd06cb29 169
giovannivisentini 29:7a2dfd06cb29 170 /** called when SelectedApplication completes
giovannivisentini 29:7a2dfd06cb29 171 * @see M24SR#SelectedApplication */
giovannivisentini 29:7a2dfd06cb29 172 virtual void on_selected_application(M24SR *nfc,StatusTypeDef status){
giovannivisentini 29:7a2dfd06cb29 173 (void)nfc; (void)status;
giovannivisentini 29:7a2dfd06cb29 174 }
giovannivisentini 29:7a2dfd06cb29 175
giovannivisentini 29:7a2dfd06cb29 176 /** called when SelectedCCFile completes
giovannivisentini 29:7a2dfd06cb29 177 * @see M24SR#SelectedCCFile */
giovannivisentini 29:7a2dfd06cb29 178 virtual void on_selected_CC_file(M24SR *nfc,StatusTypeDef status){
giovannivisentini 29:7a2dfd06cb29 179 (void)nfc; (void)status;
giovannivisentini 29:7a2dfd06cb29 180 }
giovannivisentini 29:7a2dfd06cb29 181
giovannivisentini 29:7a2dfd06cb29 182 /** called when SelectedNDEFFile completes
giovannivisentini 29:7a2dfd06cb29 183 * @see M24SR#SelectedNDEFFile */
giovannivisentini 29:7a2dfd06cb29 184 virtual void on_selected_NDEF_file(M24SR *nfc,StatusTypeDef status){
giovannivisentini 29:7a2dfd06cb29 185 (void)nfc; (void)status;
giovannivisentini 29:7a2dfd06cb29 186 }
giovannivisentini 29:7a2dfd06cb29 187
giovannivisentini 29:7a2dfd06cb29 188 /** called when SelectedSystemFile completes
giovannivisentini 29:7a2dfd06cb29 189 * @see M24SR#SelectedSystemFile */
giovannivisentini 29:7a2dfd06cb29 190 virtual void on_selected_system_file(M24SR *nfc,StatusTypeDef status){
giovannivisentini 29:7a2dfd06cb29 191 (void)nfc; (void)status;
giovannivisentini 29:7a2dfd06cb29 192 }
giovannivisentini 29:7a2dfd06cb29 193
giovannivisentini 29:7a2dfd06cb29 194 /** called when read_binary or STReadBinary completes
giovannivisentini 29:7a2dfd06cb29 195 * @see M24SR#read_binary
giovannivisentini 29:7a2dfd06cb29 196 * @see M24SR#STReadBinary */
giovannivisentini 29:7a2dfd06cb29 197 virtual void on_read_byte(M24SR *nfc,StatusTypeDef status,
giovannivisentini 29:7a2dfd06cb29 198 uint16_t offset,uint8_t *readByte, uint16_t nReadByte){
giovannivisentini 29:7a2dfd06cb29 199 (void)nfc; (void)status;(void)offset; (void)readByte; (void)nReadByte;
giovannivisentini 29:7a2dfd06cb29 200 }
giovannivisentini 29:7a2dfd06cb29 201
giovannivisentini 29:7a2dfd06cb29 202 /** called when UpdatedBinary completes
giovannivisentini 29:7a2dfd06cb29 203 * @see M24SR#UpdatedBinary */
giovannivisentini 29:7a2dfd06cb29 204 virtual void on_updated_binary(M24SR *nfc,StatusTypeDef status,uint16_t offset,
giovannivisentini 29:7a2dfd06cb29 205 uint8_t *writeByte,uint16_t nWriteByte){
giovannivisentini 29:7a2dfd06cb29 206 (void)nfc; (void)status; (void)writeByte; (void)nWriteByte; (void)offset;
giovannivisentini 29:7a2dfd06cb29 207 }
giovannivisentini 29:7a2dfd06cb29 208
giovannivisentini 29:7a2dfd06cb29 209 /** called when Verify completes
giovannivisentini 29:7a2dfd06cb29 210 * @see M24SR#Verify */
giovannivisentini 29:7a2dfd06cb29 211 virtual void on_verified(M24SR *nfc,StatusTypeDef status,PasswordType_t uPwdId,
giovannivisentini 29:7a2dfd06cb29 212 const uint8_t *pwd){
giovannivisentini 29:7a2dfd06cb29 213 (void)nfc; (void)status;(void)uPwdId;(void)pwd;
giovannivisentini 29:7a2dfd06cb29 214 }
giovannivisentini 29:7a2dfd06cb29 215
giovannivisentini 29:7a2dfd06cb29 216 /** called when ManageI2CGPO completes
giovannivisentini 29:7a2dfd06cb29 217 * @see M24SR#ManageI2CGPO */
giovannivisentini 29:7a2dfd06cb29 218 virtual void on_manage_I2C_GPO(M24SR *nfc,StatusTypeDef status,NFC_GPO_MGMT newStatus){
giovannivisentini 29:7a2dfd06cb29 219 (void)nfc; (void)status;(void)newStatus;
giovannivisentini 29:7a2dfd06cb29 220 }
giovannivisentini 29:7a2dfd06cb29 221
giovannivisentini 29:7a2dfd06cb29 222 /** called when ManageRFGPO completes
giovannivisentini 29:7a2dfd06cb29 223 * @see M24SR#ManageRFGPO */
giovannivisentini 29:7a2dfd06cb29 224 virtual void on_manage_RF_GPO(M24SR *nfc,StatusTypeDef status,NFC_GPO_MGMT newStatus){
giovannivisentini 29:7a2dfd06cb29 225 (void)nfc; (void)status;(void)newStatus;
giovannivisentini 29:7a2dfd06cb29 226 }
giovannivisentini 29:7a2dfd06cb29 227
giovannivisentini 29:7a2dfd06cb29 228 /** called when ChangeReferenceData completes
giovannivisentini 29:7a2dfd06cb29 229 * @see M24SR#ChangeReferenceData */
giovannivisentini 29:7a2dfd06cb29 230 virtual void on_change_reference_data(M24SR *nfc ,StatusTypeDef status,PasswordType_t type,
giovannivisentini 29:7a2dfd06cb29 231 uint8_t *data){
giovannivisentini 29:7a2dfd06cb29 232 (void)nfc; (void)status;(void)type;(void)data;
giovannivisentini 29:7a2dfd06cb29 233 }
giovannivisentini 29:7a2dfd06cb29 234
giovannivisentini 29:7a2dfd06cb29 235 /** called when EnableVerificationRequirement completes
giovannivisentini 29:7a2dfd06cb29 236 * @see M24SR#EnableVerificationRequirement */
giovannivisentini 29:7a2dfd06cb29 237 virtual void on_enable_verification_requirement(M24SR *nfc ,StatusTypeDef status,PasswordType_t type){
giovannivisentini 29:7a2dfd06cb29 238 (void)nfc; (void)status;(void)type;
giovannivisentini 29:7a2dfd06cb29 239 }
giovannivisentini 29:7a2dfd06cb29 240
giovannivisentini 29:7a2dfd06cb29 241 /** called when disable_verification_requirement completes
giovannivisentini 29:7a2dfd06cb29 242 * @see M24SR#disable_verification_requirement */
giovannivisentini 29:7a2dfd06cb29 243 virtual void on_disable_verification_requirement(M24SR *nfc , StatusTypeDef status,PasswordType_t type){
giovannivisentini 29:7a2dfd06cb29 244 (void)nfc; (void)status;(void)type;
giovannivisentini 29:7a2dfd06cb29 245 }
giovannivisentini 29:7a2dfd06cb29 246
giovannivisentini 29:7a2dfd06cb29 247 /** called when EnablePermanentState completes
giovannivisentini 29:7a2dfd06cb29 248 * @see M24SR#EnablePermanentState */
giovannivisentini 29:7a2dfd06cb29 249 virtual void on_enable_permanent_state(M24SR *nfc, StatusTypeDef status, PasswordType_t type){
giovannivisentini 29:7a2dfd06cb29 250 (void)nfc; (void)status;(void)type;
giovannivisentini 29:7a2dfd06cb29 251 }
giovannivisentini 29:7a2dfd06cb29 252
giovannivisentini 29:7a2dfd06cb29 253 /** called when DisablePermanentState completes
giovannivisentini 29:7a2dfd06cb29 254 * @see M24SR#DisablePermanentState */
giovannivisentini 29:7a2dfd06cb29 255 virtual void on_disable_permanent_state(M24SR *nfc, StatusTypeDef status, PasswordType_t type){
giovannivisentini 29:7a2dfd06cb29 256 (void)nfc; (void)status;(void)type;
giovannivisentini 29:7a2dfd06cb29 257 }
giovannivisentini 29:7a2dfd06cb29 258
giovannivisentini 29:7a2dfd06cb29 259 /** called when ReadId completes
giovannivisentini 29:7a2dfd06cb29 260 * @see M24SR#ReadId */
giovannivisentini 29:7a2dfd06cb29 261 virtual void on_read_id(M24SR *nfc, StatusTypeDef status, uint8_t *id){
giovannivisentini 29:7a2dfd06cb29 262 (void)nfc; (void)status;(void)id;
giovannivisentini 29:7a2dfd06cb29 263 }
giovannivisentini 29:7a2dfd06cb29 264
giovannivisentini 29:7a2dfd06cb29 265 /** called when EnableReadPassword completes
giovannivisentini 29:7a2dfd06cb29 266 * @see M24SR#EnableReadPassword */
giovannivisentini 29:7a2dfd06cb29 267 virtual void on_enable_read_password(M24SR *nfc, StatusTypeDef status,const uint8_t *newPwd){
giovannivisentini 29:7a2dfd06cb29 268 (void)nfc; (void)status;(void)newPwd;
giovannivisentini 29:7a2dfd06cb29 269 }
giovannivisentini 29:7a2dfd06cb29 270
giovannivisentini 29:7a2dfd06cb29 271 /** called when EnableWritePassword completes
giovannivisentini 29:7a2dfd06cb29 272 * @see M24SR#EnableWritePassword */
giovannivisentini 29:7a2dfd06cb29 273 virtual void on_enable_write_password(M24SR *nfc, StatusTypeDef status,const uint8_t *newPwd){
giovannivisentini 29:7a2dfd06cb29 274 (void)nfc; (void)status;(void)newPwd;
giovannivisentini 29:7a2dfd06cb29 275 }
giovannivisentini 29:7a2dfd06cb29 276
giovannivisentini 29:7a2dfd06cb29 277 /** called when DisableReadPassword completes
giovannivisentini 29:7a2dfd06cb29 278 * @see M24SR#DisableReadPassword */
giovannivisentini 29:7a2dfd06cb29 279 virtual void on_disable_read_password(M24SR *nfc, StatusTypeDef status){
giovannivisentini 29:7a2dfd06cb29 280 (void)nfc; (void)status;
giovannivisentini 29:7a2dfd06cb29 281 }
giovannivisentini 29:7a2dfd06cb29 282
giovannivisentini 29:7a2dfd06cb29 283 /** called when DisableWritePassword completes
giovannivisentini 29:7a2dfd06cb29 284 * @see M24SR#DisableWritePassword */
giovannivisentini 29:7a2dfd06cb29 285 virtual void on_disable_write_password(M24SR *nfc, StatusTypeDef status){
giovannivisentini 29:7a2dfd06cb29 286 (void)nfc; (void)status;
giovannivisentini 29:7a2dfd06cb29 287 }
giovannivisentini 29:7a2dfd06cb29 288
giovannivisentini 29:7a2dfd06cb29 289 /** called when DisableAllPassword completes
giovannivisentini 29:7a2dfd06cb29 290 * @see M24SR#DisableAllPassword */
giovannivisentini 29:7a2dfd06cb29 291 virtual void on_disable_all_password(M24SR *nfc, StatusTypeDef status){
giovannivisentini 29:7a2dfd06cb29 292 (void)nfc; (void)status;
giovannivisentini 29:7a2dfd06cb29 293 }
giovannivisentini 29:7a2dfd06cb29 294
giovannivisentini 29:7a2dfd06cb29 295
giovannivisentini 29:7a2dfd06cb29 296 /** called when EnableReadOnly completes
giovannivisentini 29:7a2dfd06cb29 297 * @see M24SR#EnableReadOnly */
giovannivisentini 29:7a2dfd06cb29 298 virtual void on_enable_read_only(M24SR *nfc,StatusTypeDef status){
giovannivisentini 29:7a2dfd06cb29 299 (void)nfc; (void)status;
giovannivisentini 29:7a2dfd06cb29 300 }
giovannivisentini 29:7a2dfd06cb29 301
giovannivisentini 29:7a2dfd06cb29 302 /** called when EnableWriteOnly completes
giovannivisentini 29:7a2dfd06cb29 303 * @see M24SR#EnableWriteOnly */
giovannivisentini 29:7a2dfd06cb29 304 virtual void on_enable_write_only(M24SR *nfc,StatusTypeDef status){
giovannivisentini 29:7a2dfd06cb29 305 (void)nfc; (void)status;
giovannivisentini 29:7a2dfd06cb29 306 }
giovannivisentini 29:7a2dfd06cb29 307
giovannivisentini 29:7a2dfd06cb29 308
giovannivisentini 29:7a2dfd06cb29 309 /** called when DisableReadOnly completes
giovannivisentini 29:7a2dfd06cb29 310 * @see M24SR#DisableReadOnly */
giovannivisentini 29:7a2dfd06cb29 311 virtual void on_disable_read_only(M24SR *nfc,StatusTypeDef status){
giovannivisentini 29:7a2dfd06cb29 312 (void)nfc; (void)status;
giovannivisentini 29:7a2dfd06cb29 313 }
giovannivisentini 29:7a2dfd06cb29 314
giovannivisentini 29:7a2dfd06cb29 315 /** called when DisableWriteOnly completes
giovannivisentini 29:7a2dfd06cb29 316 * @see M24SR#DisableWriteOnly */
giovannivisentini 29:7a2dfd06cb29 317 virtual void on_disable_write_only(M24SR *nfc,StatusTypeDef status){
giovannivisentini 29:7a2dfd06cb29 318 (void)nfc; (void)status;
giovannivisentini 29:7a2dfd06cb29 319 }
giovannivisentini 29:7a2dfd06cb29 320
giovannivisentini 29:7a2dfd06cb29 321 virtual ~Callbacks(){};
giovannivisentini 29:7a2dfd06cb29 322 };
giovannivisentini 29:7a2dfd06cb29 323
giovannivisentini 29:7a2dfd06cb29 324 /*** Constructor and Destructor Methods ***/
giovannivisentini 29:7a2dfd06cb29 325
giovannivisentini 29:7a2dfd06cb29 326 /**
giovannivisentini 29:7a2dfd06cb29 327 * @brief Constructor.
giovannivisentini 29:7a2dfd06cb29 328 * @param address I2C address of the component.
giovannivisentini 29:7a2dfd06cb29 329 * @param I2C I2C device to be used for communication.
giovannivisentini 29:7a2dfd06cb29 330 * @param eventCallback Function that will be called when the gpo pin status changes.
giovannivisentini 29:7a2dfd06cb29 331 * @param GPOPinName Pin used as GPIO.
giovannivisentini 29:7a2dfd06cb29 332 * @param RFDISPinName Pin used to disable the RF function.
giovannivisentini 29:7a2dfd06cb29 333 */
giovannivisentini 29:7a2dfd06cb29 334 M24SR(const uint8_t address, I2C &I2C,gpoEventCallback eventCallback, const PinName& GPOPinName,
giovannivisentini 29:7a2dfd06cb29 335 const PinName& RFDISPinName);
giovannivisentini 29:7a2dfd06cb29 336
giovannivisentini 29:7a2dfd06cb29 337 /**
giovannivisentini 29:7a2dfd06cb29 338 * @brief Destructor.
giovannivisentini 29:7a2dfd06cb29 339 */
giovannivisentini 29:7a2dfd06cb29 340 virtual ~M24SR(void);
giovannivisentini 29:7a2dfd06cb29 341
giovannivisentini 29:7a2dfd06cb29 342 /*** Public Component Related Methods ***/
giovannivisentini 29:7a2dfd06cb29 343
giovannivisentini 29:7a2dfd06cb29 344 /**
giovannivisentini 29:7a2dfd06cb29 345 * @brief This function initializes the M24SR device.
giovannivisentini 29:7a2dfd06cb29 346 * @param ptr Configure parameters, not used.
giovannivisentini 29:7a2dfd06cb29 347 * @return M24SR_SUCCESS if no errors
giovannivisentini 29:7a2dfd06cb29 348 */
giovannivisentini 29:7a2dfd06cb29 349 virtual int init(void *ptr) {
giovannivisentini 29:7a2dfd06cb29 350 return (StatusTypeDef) M24SR_Init((M24SR_InitTypeDef*)ptr);
giovannivisentini 29:7a2dfd06cb29 351 }
giovannivisentini 29:7a2dfd06cb29 352
giovannivisentini 29:7a2dfd06cb29 353 virtual int read_id(uint8_t *id) {
giovannivisentini 29:7a2dfd06cb29 354 return (StatusTypeDef) M24SR_ReadID((uint8_t *) id);
giovannivisentini 29:7a2dfd06cb29 355 }
giovannivisentini 29:7a2dfd06cb29 356
giovannivisentini 29:7a2dfd06cb29 357 /** lock the tag channel */
giovannivisentini 29:7a2dfd06cb29 358 virtual StatusTypeDef get_session(void) {
giovannivisentini 29:7a2dfd06cb29 359 return (StatusTypeDef) M24SR_GetSession();
giovannivisentini 29:7a2dfd06cb29 360 }
giovannivisentini 29:7a2dfd06cb29 361
giovannivisentini 29:7a2dfd06cb29 362 /**
giovannivisentini 29:7a2dfd06cb29 363 * Force to open an I2C connection , abort the RF connection.
giovannivisentini 29:7a2dfd06cb29 364 * @return M24SR_SUCCESS if the session is acquired
giovannivisentini 29:7a2dfd06cb29 365 */
giovannivisentini 29:7a2dfd06cb29 366 StatusTypeDef force_get_session(void) {
giovannivisentini 29:7a2dfd06cb29 367 return (StatusTypeDef) M24SR_ForceSession();
giovannivisentini 29:7a2dfd06cb29 368 }
giovannivisentini 29:7a2dfd06cb29 369
giovannivisentini 29:7a2dfd06cb29 370 virtual StatusTypeDef deselect(void) {
giovannivisentini 29:7a2dfd06cb29 371 return (StatusTypeDef) M24SR_Deselect();
giovannivisentini 29:7a2dfd06cb29 372 }
giovannivisentini 29:7a2dfd06cb29 373
giovannivisentini 29:7a2dfd06cb29 374 ////////// tag4 command ////////////////////
giovannivisentini 29:7a2dfd06cb29 375
giovannivisentini 29:7a2dfd06cb29 376 /**
giovannivisentini 29:7a2dfd06cb29 377 * Select the application file.
giovannivisentini 29:7a2dfd06cb29 378 * @return M24SR_SUCCESS if the application is selected
giovannivisentini 29:7a2dfd06cb29 379 */
giovannivisentini 29:7a2dfd06cb29 380 StatusTypeDef select_application(void) {
giovannivisentini 29:7a2dfd06cb29 381 return M24SR_SendSelectApplication();
giovannivisentini 29:7a2dfd06cb29 382 }
giovannivisentini 29:7a2dfd06cb29 383
giovannivisentini 29:7a2dfd06cb29 384 /**
giovannivisentini 29:7a2dfd06cb29 385 * Select the CC file.
giovannivisentini 29:7a2dfd06cb29 386 * @return M24SR_SUCCESS if the CC file is selected.
giovannivisentini 29:7a2dfd06cb29 387 */
giovannivisentini 29:7a2dfd06cb29 388 StatusTypeDef select_CC_file(void) {
giovannivisentini 29:7a2dfd06cb29 389 return M24SR_SendSelectCCfile();
giovannivisentini 29:7a2dfd06cb29 390 }
giovannivisentini 29:7a2dfd06cb29 391
giovannivisentini 29:7a2dfd06cb29 392 /**
giovannivisentini 29:7a2dfd06cb29 393 * Select the NDEF file.
giovannivisentini 29:7a2dfd06cb29 394 * @param NDEFfileId File id to open.
giovannivisentini 29:7a2dfd06cb29 395 * @return M24SR_SUCCESS if the file is selected
giovannivisentini 29:7a2dfd06cb29 396 */
giovannivisentini 29:7a2dfd06cb29 397 StatusTypeDef select_NDEF_file(uint16_t NDEFfileId) {
giovannivisentini 29:7a2dfd06cb29 398 return M24SR_SendSelectNDEFfile(NDEFfileId);
giovannivisentini 29:7a2dfd06cb29 399 }
giovannivisentini 29:7a2dfd06cb29 400
giovannivisentini 29:7a2dfd06cb29 401 /**
giovannivisentini 29:7a2dfd06cb29 402 * Select the system file.
giovannivisentini 29:7a2dfd06cb29 403 * @return M24SR_SUCCESS if the system file is selected
giovannivisentini 29:7a2dfd06cb29 404 */
giovannivisentini 29:7a2dfd06cb29 405 StatusTypeDef select_system_file(void) {
giovannivisentini 29:7a2dfd06cb29 406 return M24SR_SendSelectSystemfile();
giovannivisentini 29:7a2dfd06cb29 407 }
giovannivisentini 29:7a2dfd06cb29 408
giovannivisentini 29:7a2dfd06cb29 409 virtual int read_binary(uint16_t Offset, uint8_t NbByteToRead,
giovannivisentini 29:7a2dfd06cb29 410 uint8_t *pBufferRead) {
giovannivisentini 29:7a2dfd06cb29 411 return (StatusTypeDef) M24SR_SendReadBinary((uint16_t) Offset,
giovannivisentini 29:7a2dfd06cb29 412 (uint8_t) NbByteToRead, (uint8_t *) pBufferRead);
giovannivisentini 29:7a2dfd06cb29 413 }
giovannivisentini 29:7a2dfd06cb29 414
giovannivisentini 29:7a2dfd06cb29 415 virtual int update_binary(uint16_t Offset,
giovannivisentini 29:7a2dfd06cb29 416 uint8_t NbByteToWrite,uint8_t *pDataToWrite) {
giovannivisentini 29:7a2dfd06cb29 417 return (StatusTypeDef) M24SR_SendUpdateBinary((uint16_t) Offset,
giovannivisentini 29:7a2dfd06cb29 418 (uint8_t) NbByteToWrite, (uint8_t *) pDataToWrite);
giovannivisentini 29:7a2dfd06cb29 419 }
giovannivisentini 29:7a2dfd06cb29 420
giovannivisentini 29:7a2dfd06cb29 421 /////////////////// iso 7816-4 commands //////////////////////////
giovannivisentini 29:7a2dfd06cb29 422
giovannivisentini 29:7a2dfd06cb29 423 virtual StatusTypeDef verify(PasswordType_t pwdId, uint8_t NbPwdByte,
giovannivisentini 29:7a2dfd06cb29 424 const uint8_t *pPwd) {
giovannivisentini 29:7a2dfd06cb29 425 return (StatusTypeDef) M24SR_SendVerify(passwordTypeToConst(pwdId),
giovannivisentini 29:7a2dfd06cb29 426 (uint8_t) NbPwdByte, pPwd);
giovannivisentini 29:7a2dfd06cb29 427 }
giovannivisentini 29:7a2dfd06cb29 428
giovannivisentini 29:7a2dfd06cb29 429 virtual StatusTypeDef change_reference_data(PasswordType_t pwdId,
giovannivisentini 29:7a2dfd06cb29 430 const uint8_t *pPwd) {
giovannivisentini 29:7a2dfd06cb29 431 return (StatusTypeDef) M24SR_SendChangeReferenceData(passwordTypeToConst(pwdId),
giovannivisentini 29:7a2dfd06cb29 432 (uint8_t *) pPwd);
giovannivisentini 29:7a2dfd06cb29 433 }
giovannivisentini 29:7a2dfd06cb29 434
giovannivisentini 29:7a2dfd06cb29 435 virtual StatusTypeDef enable_verification_requirement(
giovannivisentini 29:7a2dfd06cb29 436 PasswordType_t uReadOrWrite) {
giovannivisentini 29:7a2dfd06cb29 437 return (StatusTypeDef) M24SR_SendEnableVerificationRequirement(
giovannivisentini 29:7a2dfd06cb29 438 passwordTypeToConst(uReadOrWrite));
giovannivisentini 29:7a2dfd06cb29 439 }
giovannivisentini 29:7a2dfd06cb29 440
giovannivisentini 29:7a2dfd06cb29 441 virtual StatusTypeDef disable_verification_requirement(
giovannivisentini 29:7a2dfd06cb29 442 PasswordType_t uReadOrWrite) {
giovannivisentini 29:7a2dfd06cb29 443 return (StatusTypeDef) M24SR_SendDisableVerificationRequirement(
giovannivisentini 29:7a2dfd06cb29 444 passwordTypeToConst(uReadOrWrite));
giovannivisentini 29:7a2dfd06cb29 445 }
giovannivisentini 29:7a2dfd06cb29 446
giovannivisentini 29:7a2dfd06cb29 447 ////////////////////// ST proprietary //////////////////////////////////
giovannivisentini 29:7a2dfd06cb29 448
giovannivisentini 29:7a2dfd06cb29 449 /**
giovannivisentini 29:7a2dfd06cb29 450 * Same as {@link NFC#read_binary}, however permitting to read more bytes than available.
giovannivisentini 29:7a2dfd06cb29 451 * @param Offset read offset.
giovannivisentini 29:7a2dfd06cb29 452 * @param NbByteToRead Number of bytes to read.
giovannivisentini 29:7a2dfd06cb29 453 * @param[out] pBufferRead Buffer to store the read data into.
giovannivisentini 29:7a2dfd06cb29 454 * @return M24SR_SUCCESS if no errors
giovannivisentini 29:7a2dfd06cb29 455 */
giovannivisentini 29:7a2dfd06cb29 456 StatusTypeDef ST_read_binary(uint16_t Offset,
giovannivisentini 29:7a2dfd06cb29 457 uint8_t NbByteToRead, uint8_t *pBufferRead) {
giovannivisentini 29:7a2dfd06cb29 458 return (StatusTypeDef) M24SR_SendSTReadBinary((uint16_t) Offset,
giovannivisentini 29:7a2dfd06cb29 459 (uint8_t) NbByteToRead, (uint8_t *) pBufferRead);
giovannivisentini 29:7a2dfd06cb29 460 }
giovannivisentini 29:7a2dfd06cb29 461
giovannivisentini 29:7a2dfd06cb29 462 virtual StatusTypeDef enable_permanent_state(PasswordType_t uReadOrWrite) {
giovannivisentini 29:7a2dfd06cb29 463 return (StatusTypeDef) M24SR_SendEnablePermanentState(
giovannivisentini 29:7a2dfd06cb29 464 passwordTypeToConst(uReadOrWrite));
giovannivisentini 29:7a2dfd06cb29 465 }
giovannivisentini 29:7a2dfd06cb29 466
giovannivisentini 29:7a2dfd06cb29 467 virtual StatusTypeDef disable_permanent_state(PasswordType_t uReadOrWrite) {
giovannivisentini 29:7a2dfd06cb29 468 return (StatusTypeDef) M24SR_SendDisablePermanentState(
giovannivisentini 29:7a2dfd06cb29 469 passwordTypeToConst(uReadOrWrite));
giovannivisentini 29:7a2dfd06cb29 470 }
giovannivisentini 29:7a2dfd06cb29 471
giovannivisentini 29:7a2dfd06cb29 472 ///////////////////// chip configuration /////////////////////////////////
giovannivisentini 29:7a2dfd06cb29 473 /**
giovannivisentini 29:7a2dfd06cb29 474 * Set the gpo output pin.
giovannivisentini 29:7a2dfd06cb29 475 * @param uSetOrReset New pin status.
giovannivisentini 29:7a2dfd06cb29 476 * @return M24SR_SUCCESS if no errors
giovannivisentini 29:7a2dfd06cb29 477 */
giovannivisentini 29:7a2dfd06cb29 478 StatusTypeDef state_control(uint8_t uSetOrReset) {
giovannivisentini 29:7a2dfd06cb29 479 return (StatusTypeDef) M24SR_StateControl((uint8_t) uSetOrReset);
giovannivisentini 29:7a2dfd06cb29 480 }
giovannivisentini 29:7a2dfd06cb29 481
giovannivisentini 29:7a2dfd06cb29 482 /**
giovannivisentini 29:7a2dfd06cb29 483 * @brief This function configures GPO for I2C session.
giovannivisentini 29:7a2dfd06cb29 484 * @param GPO_I2Cconfig GPO configuration to set.
giovannivisentini 29:7a2dfd06cb29 485 * @return M24SR_SUCCESS if no errors
giovannivisentini 29:7a2dfd06cb29 486 * @par if the configuration is I2C_ANSWER_READY, the component will start to work
giovannivisentini 29:7a2dfd06cb29 487 * in async mode.
giovannivisentini 29:7a2dfd06cb29 488 */
giovannivisentini 29:7a2dfd06cb29 489 StatusTypeDef manage_I2C_GPO(NFC_GPO_MGMT GPO_I2Cconfig) {
giovannivisentini 29:7a2dfd06cb29 490 return (StatusTypeDef) M24SR_ManageI2CGPO(GPO_I2Cconfig);
giovannivisentini 29:7a2dfd06cb29 491 }
giovannivisentini 29:7a2dfd06cb29 492
giovannivisentini 29:7a2dfd06cb29 493
giovannivisentini 29:7a2dfd06cb29 494 /**
giovannivisentini 29:7a2dfd06cb29 495 * @brief This function configures GPO for RF session.
giovannivisentini 29:7a2dfd06cb29 496 * @param GPO_RFconfig GPO configuration to set.
giovannivisentini 29:7a2dfd06cb29 497 * @return M24SR_SUCCESS if no errors
giovannivisentini 29:7a2dfd06cb29 498 */
giovannivisentini 29:7a2dfd06cb29 499 StatusTypeDef manage_RF_GPO(uint8_t GPO_RFconfig) {
giovannivisentini 29:7a2dfd06cb29 500 return (StatusTypeDef) M24SR_ManageRFGPO(
giovannivisentini 29:7a2dfd06cb29 501 (NFC_GPO_MGMT) GPO_RFconfig);
giovannivisentini 29:7a2dfd06cb29 502 }
giovannivisentini 29:7a2dfd06cb29 503
giovannivisentini 29:7a2dfd06cb29 504
giovannivisentini 29:7a2dfd06cb29 505 /**
giovannivisentini 29:7a2dfd06cb29 506 * @brief This function enables or disables the RF communication.
giovannivisentini 29:7a2dfd06cb29 507 * @param OnOffChoice GPO configuration to set.
giovannivisentini 29:7a2dfd06cb29 508 * @return M24SR_SUCCESS if no errors
giovannivisentini 29:7a2dfd06cb29 509 */
giovannivisentini 29:7a2dfd06cb29 510
giovannivisentini 29:7a2dfd06cb29 511 StatusTypeDef RF_config(uint8_t OnOffChoice) {
giovannivisentini 29:7a2dfd06cb29 512 return (StatusTypeDef) M24SR_RFConfig((uint8_t) OnOffChoice);
giovannivisentini 29:7a2dfd06cb29 513 }
giovannivisentini 29:7a2dfd06cb29 514
giovannivisentini 29:7a2dfd06cb29 515
giovannivisentini 29:7a2dfd06cb29 516 /**
giovannivisentini 29:7a2dfd06cb29 517 * Generates a negative pulse on the GPO pin.
giovannivisentini 29:7a2dfd06cb29 518 * Pulse starts immediately after the command is issued and ends at the end of the RF response.
giovannivisentini 29:7a2dfd06cb29 519 * @return M24SR_SUCCESS if no errors
giovannivisentini 29:7a2dfd06cb29 520 */
giovannivisentini 29:7a2dfd06cb29 521 StatusTypeDef send_interrupt(void) {
giovannivisentini 29:7a2dfd06cb29 522 return (StatusTypeDef) M24SR_SendInterrupt();
giovannivisentini 29:7a2dfd06cb29 523 }
giovannivisentini 29:7a2dfd06cb29 524
giovannivisentini 29:7a2dfd06cb29 525
giovannivisentini 29:7a2dfd06cb29 526 /**
giovannivisentini 29:7a2dfd06cb29 527 * Function to call when the component fire an interrupt.
giovannivisentini 29:7a2dfd06cb29 528 * @return last operation status
giovannivisentini 29:7a2dfd06cb29 529 */
giovannivisentini 29:7a2dfd06cb29 530 StatusTypeDef manage_event();
giovannivisentini 29:7a2dfd06cb29 531
giovannivisentini 29:7a2dfd06cb29 532 /**
giovannivisentini 29:7a2dfd06cb29 533 * Change the function to call when a command ends.
giovannivisentini 29:7a2dfd06cb29 534 * @param commandCallback Object containing the callback, if NULL it will use empty callback
giovannivisentini 29:7a2dfd06cb29 535 */
giovannivisentini 29:7a2dfd06cb29 536 void set_callback(Callbacks *commandCallback){
giovannivisentini 29:7a2dfd06cb29 537 if(commandCallback!=NULL)
giovannivisentini 29:7a2dfd06cb29 538 mCallback = commandCallback;
giovannivisentini 29:7a2dfd06cb29 539 else
giovannivisentini 29:7a2dfd06cb29 540 mCallback = &defaultCallback;
giovannivisentini 29:7a2dfd06cb29 541 }
giovannivisentini 29:7a2dfd06cb29 542
giovannivisentini 29:7a2dfd06cb29 543
giovannivisentini 29:7a2dfd06cb29 544 /////////////////// hight level/utility function /////////////////////
giovannivisentini 29:7a2dfd06cb29 545
giovannivisentini 29:7a2dfd06cb29 546
giovannivisentini 29:7a2dfd06cb29 547 /**
giovannivisentini 29:7a2dfd06cb29 548 * Enable the request of a password before reading the tag.
giovannivisentini 29:7a2dfd06cb29 549 * @param pCurrentWritePassword Current password
giovannivisentini 29:7a2dfd06cb29 550 * @param pNewPassword Password to request before reading the tag.
giovannivisentini 29:7a2dfd06cb29 551 * @return return M24SR_SUCCESS if no errors
giovannivisentini 29:7a2dfd06cb29 552 * @par The password must have a length of 16 chars.
giovannivisentini 29:7a2dfd06cb29 553 */
giovannivisentini 29:7a2dfd06cb29 554 StatusTypeDef enable_read_password(const uint8_t* pCurrentWritePassword,
giovannivisentini 29:7a2dfd06cb29 555 const uint8_t* pNewPassword) {
giovannivisentini 29:7a2dfd06cb29 556
giovannivisentini 29:7a2dfd06cb29 557 //enable the callback for change the gpo
giovannivisentini 29:7a2dfd06cb29 558 mComponentCallback = &mChangePasswordRequestStatusCallback;
giovannivisentini 29:7a2dfd06cb29 559 mChangePasswordRequestStatusCallback.set_task(ReadPwd,pNewPassword);
giovannivisentini 29:7a2dfd06cb29 560
giovannivisentini 29:7a2dfd06cb29 561 return verify(M24SR::WritePwd, 0x10, pCurrentWritePassword);
giovannivisentini 29:7a2dfd06cb29 562 }
giovannivisentini 29:7a2dfd06cb29 563
giovannivisentini 29:7a2dfd06cb29 564 /**
giovannivisentini 29:7a2dfd06cb29 565 * Disable the request of a password before reading the tag.
giovannivisentini 29:7a2dfd06cb29 566 * @param pCurrentWritePassword Current password
giovannivisentini 29:7a2dfd06cb29 567 * @return return M24SR_SUCCESS if no errors
giovannivisentini 29:7a2dfd06cb29 568 * @par The password must have a length of 16 chars.
giovannivisentini 29:7a2dfd06cb29 569 */
giovannivisentini 29:7a2dfd06cb29 570 StatusTypeDef disable_read_password(const uint8_t* pCurrentWritePassword) {
giovannivisentini 29:7a2dfd06cb29 571 mComponentCallback = &mChangePasswordRequestStatusCallback;
giovannivisentini 29:7a2dfd06cb29 572 mChangePasswordRequestStatusCallback.set_task(ReadPwd,NULL);
giovannivisentini 29:7a2dfd06cb29 573
giovannivisentini 29:7a2dfd06cb29 574 return verify(M24SR::WritePwd, 0x10, pCurrentWritePassword);
giovannivisentini 29:7a2dfd06cb29 575 }
giovannivisentini 29:7a2dfd06cb29 576
giovannivisentini 29:7a2dfd06cb29 577 /**
giovannivisentini 29:7a2dfd06cb29 578 * Enable the request of a password before writing to the tag.
giovannivisentini 29:7a2dfd06cb29 579 * @param pCurrentWritePassword Current password
giovannivisentini 29:7a2dfd06cb29 580 * @param pNewPassword Password to request before reading the tag.
giovannivisentini 29:7a2dfd06cb29 581 * @return return M24SR_SUCCESS if no errors
giovannivisentini 29:7a2dfd06cb29 582 * @par The password must have a length of 16 chars.
giovannivisentini 29:7a2dfd06cb29 583 */
giovannivisentini 29:7a2dfd06cb29 584 StatusTypeDef enable_write_password(const uint8_t* pCurrentWritePassword,
giovannivisentini 29:7a2dfd06cb29 585 uint8_t* pNewPassword) {
giovannivisentini 29:7a2dfd06cb29 586 //enable the callback for change the gpo
giovannivisentini 29:7a2dfd06cb29 587 mComponentCallback = &mChangePasswordRequestStatusCallback;
giovannivisentini 29:7a2dfd06cb29 588 mChangePasswordRequestStatusCallback.set_task(WritePwd,pNewPassword);
giovannivisentini 29:7a2dfd06cb29 589
giovannivisentini 29:7a2dfd06cb29 590 return verify(M24SR::WritePwd, 0x10, pCurrentWritePassword);
giovannivisentini 29:7a2dfd06cb29 591 }
giovannivisentini 29:7a2dfd06cb29 592
giovannivisentini 29:7a2dfd06cb29 593 /**
giovannivisentini 29:7a2dfd06cb29 594 * Disable the request of a password before writing the tag.
giovannivisentini 29:7a2dfd06cb29 595 * @param pCurrentWritePassword Current password.
giovannivisentini 29:7a2dfd06cb29 596 * @return return M24SR_SUCCESS if no errors
giovannivisentini 29:7a2dfd06cb29 597 * @par The password must have a length of 16 chars.
giovannivisentini 29:7a2dfd06cb29 598 */
giovannivisentini 29:7a2dfd06cb29 599 StatusTypeDef disable_write_password(const uint8_t* pCurrentWritePassword) {
giovannivisentini 29:7a2dfd06cb29 600 mComponentCallback = &mChangePasswordRequestStatusCallback;
giovannivisentini 29:7a2dfd06cb29 601 mChangePasswordRequestStatusCallback.set_task(WritePwd,NULL);
giovannivisentini 29:7a2dfd06cb29 602
giovannivisentini 29:7a2dfd06cb29 603 return verify(M24SR::WritePwd, 0x10, pCurrentWritePassword);
giovannivisentini 29:7a2dfd06cb29 604 }
giovannivisentini 29:7a2dfd06cb29 605
giovannivisentini 29:7a2dfd06cb29 606 /**
giovannivisentini 29:7a2dfd06cb29 607 * @brief This function disables both read and write passwords.
giovannivisentini 29:7a2dfd06cb29 608 * @param pSuperUserPassword I2C super user password.
giovannivisentini 29:7a2dfd06cb29 609 * @return return M24SR_SUCCESS if no errors
giovannivisentini 29:7a2dfd06cb29 610 * @par The password must have a length of 16 chars.
giovannivisentini 29:7a2dfd06cb29 611 */
giovannivisentini 29:7a2dfd06cb29 612 StatusTypeDef disable_all_password(const uint8_t* pSuperUserPassword){
giovannivisentini 29:7a2dfd06cb29 613 mComponentCallback = &mRemoveAllPasswordCallback;
giovannivisentini 29:7a2dfd06cb29 614 return verify(M24SR::I2CPwd, 0x10, pSuperUserPassword);
giovannivisentini 29:7a2dfd06cb29 615 }
giovannivisentini 29:7a2dfd06cb29 616
giovannivisentini 29:7a2dfd06cb29 617 /**
giovannivisentini 29:7a2dfd06cb29 618 * @brief This function enables read only mode.
giovannivisentini 29:7a2dfd06cb29 619 * @param pCurrentWritePassword Write password is needed to enable read only mode.
giovannivisentini 29:7a2dfd06cb29 620 * @return return M24SR_SUCCESS if no errors
giovannivisentini 29:7a2dfd06cb29 621 * @par The password must have a length of 16 chars.
giovannivisentini 29:7a2dfd06cb29 622 */
giovannivisentini 29:7a2dfd06cb29 623 StatusTypeDef enable_read_only(const uint8_t* pCurrentWritePassword){
giovannivisentini 29:7a2dfd06cb29 624
giovannivisentini 29:7a2dfd06cb29 625 mComponentCallback = &mChangeAccessStateCallback;
giovannivisentini 29:7a2dfd06cb29 626 //disable write = read only
giovannivisentini 29:7a2dfd06cb29 627 mChangeAccessStateCallback.change_access_state(ChangeAccessStateCallback::WRITE,false);
giovannivisentini 29:7a2dfd06cb29 628
giovannivisentini 29:7a2dfd06cb29 629 return verify(M24SR::WritePwd, 0x10, pCurrentWritePassword);
giovannivisentini 29:7a2dfd06cb29 630 }
giovannivisentini 29:7a2dfd06cb29 631
giovannivisentini 29:7a2dfd06cb29 632 /**
giovannivisentini 29:7a2dfd06cb29 633 * @brief This function disables read only mode.
giovannivisentini 29:7a2dfd06cb29 634 * @param pCurrentWritePassword Write password is needed to disable read only mode.
giovannivisentini 29:7a2dfd06cb29 635 * @return return M24SR_SUCCESS if no errors
giovannivisentini 29:7a2dfd06cb29 636 * @par The password must have a length of 16 chars.
giovannivisentini 29:7a2dfd06cb29 637 */
giovannivisentini 29:7a2dfd06cb29 638 StatusTypeDef disable_read_only(const uint8_t* pCurrentWritePassword) {
giovannivisentini 29:7a2dfd06cb29 639 mComponentCallback = &mChangeAccessStateCallback;
giovannivisentini 29:7a2dfd06cb29 640 mChangeAccessStateCallback.change_access_state(ChangeAccessStateCallback::WRITE,true);
giovannivisentini 29:7a2dfd06cb29 641 return verify(M24SR::I2CPwd, 0x10,pCurrentWritePassword);
giovannivisentini 29:7a2dfd06cb29 642 }
giovannivisentini 29:7a2dfd06cb29 643
giovannivisentini 29:7a2dfd06cb29 644
giovannivisentini 29:7a2dfd06cb29 645 /**
giovannivisentini 29:7a2dfd06cb29 646 * @brief This function enables write only mode.
giovannivisentini 29:7a2dfd06cb29 647 * @param pCurrentWritePassword Write password is needed to enable write only mode.
giovannivisentini 29:7a2dfd06cb29 648 * @return return M24SR_SUCCESS if no errors
giovannivisentini 29:7a2dfd06cb29 649 * @par The password must have a length of 16 chars.
giovannivisentini 29:7a2dfd06cb29 650 */
giovannivisentini 29:7a2dfd06cb29 651 StatusTypeDef enable_write_only(const uint8_t* pCurrentWritePassword) {
giovannivisentini 29:7a2dfd06cb29 652
giovannivisentini 29:7a2dfd06cb29 653 mComponentCallback = &mChangeAccessStateCallback;
giovannivisentini 29:7a2dfd06cb29 654 //disable read = enable write only
giovannivisentini 29:7a2dfd06cb29 655 mChangeAccessStateCallback.change_access_state(ChangeAccessStateCallback::READ,false);
giovannivisentini 29:7a2dfd06cb29 656
giovannivisentini 29:7a2dfd06cb29 657 return verify(M24SR::WritePwd, 0x10, pCurrentWritePassword);
giovannivisentini 29:7a2dfd06cb29 658
giovannivisentini 29:7a2dfd06cb29 659 }
giovannivisentini 29:7a2dfd06cb29 660
giovannivisentini 29:7a2dfd06cb29 661 /**
giovannivisentini 29:7a2dfd06cb29 662 * @brief This function disables write only mode.
giovannivisentini 29:7a2dfd06cb29 663 * @param pCurrentWritePassword Write password is needed to disable write only mode.
giovannivisentini 29:7a2dfd06cb29 664 * @return return M24SR_SUCCESS if no errors
giovannivisentini 29:7a2dfd06cb29 665 * @par The password must have a length of 16 chars.
giovannivisentini 29:7a2dfd06cb29 666 */
giovannivisentini 29:7a2dfd06cb29 667 StatusTypeDef disable_write_only(const uint8_t* pCurrentWritePassword) {
giovannivisentini 29:7a2dfd06cb29 668 mComponentCallback = &mChangeAccessStateCallback;
giovannivisentini 29:7a2dfd06cb29 669 mChangeAccessStateCallback.change_access_state(ChangeAccessStateCallback::READ,true);
giovannivisentini 29:7a2dfd06cb29 670 return verify(M24SR::I2CPwd, 0x10, pCurrentWritePassword);
giovannivisentini 29:7a2dfd06cb29 671 }
giovannivisentini 29:7a2dfd06cb29 672
giovannivisentini 29:7a2dfd06cb29 673
giovannivisentini 29:7a2dfd06cb29 674 /**
giovannivisentini 29:7a2dfd06cb29 675 * Get an implementation of NDefNfcTag to use the library NDefLib.
giovannivisentini 29:7a2dfd06cb29 676 * @return an object of type NdefNfcTag
giovannivisentini 29:7a2dfd06cb29 677 */
giovannivisentini 29:7a2dfd06cb29 678 NDefLib::NDefNfcTag& get_NDef_tag();
giovannivisentini 29:7a2dfd06cb29 679
giovannivisentini 29:7a2dfd06cb29 680
giovannivisentini 29:7a2dfd06cb29 681 protected:
giovannivisentini 29:7a2dfd06cb29 682
giovannivisentini 29:7a2dfd06cb29 683 /*** Protected Component Related Methods ***/
giovannivisentini 29:7a2dfd06cb29 684
giovannivisentini 29:7a2dfd06cb29 685 StatusTypeDef M24SR_Init(M24SR_InitTypeDef *);
giovannivisentini 29:7a2dfd06cb29 686 StatusTypeDef M24SR_ReadID(uint8_t *nfc_id);
giovannivisentini 29:7a2dfd06cb29 687 StatusTypeDef M24SR_GetSession(void);
giovannivisentini 29:7a2dfd06cb29 688 StatusTypeDef M24SR_ForceSession(void);
giovannivisentini 29:7a2dfd06cb29 689
giovannivisentini 29:7a2dfd06cb29 690
giovannivisentini 29:7a2dfd06cb29 691
giovannivisentini 29:7a2dfd06cb29 692 StatusTypeDef M24SR_Deselect(void);
giovannivisentini 29:7a2dfd06cb29 693 StatusTypeDef M24SR_ReceiveDeselect(void);
giovannivisentini 29:7a2dfd06cb29 694
giovannivisentini 29:7a2dfd06cb29 695 StatusTypeDef M24SR_SendSelectApplication(void);
giovannivisentini 29:7a2dfd06cb29 696 StatusTypeDef M24SR_ReceiveSelectApplication(void);
giovannivisentini 29:7a2dfd06cb29 697
giovannivisentini 29:7a2dfd06cb29 698 StatusTypeDef M24SR_SendSelectCCfile(void);
giovannivisentini 29:7a2dfd06cb29 699 StatusTypeDef M24SR_ReceiveSelectCCfile(void);
giovannivisentini 29:7a2dfd06cb29 700
giovannivisentini 29:7a2dfd06cb29 701 StatusTypeDef M24SR_SendSelectNDEFfile(uint16_t NDEFfileId);
giovannivisentini 29:7a2dfd06cb29 702 StatusTypeDef M24SR_ReceiveSelectNDEFfile();
giovannivisentini 29:7a2dfd06cb29 703
giovannivisentini 29:7a2dfd06cb29 704 StatusTypeDef M24SR_SendSelectSystemfile(void);
giovannivisentini 29:7a2dfd06cb29 705 StatusTypeDef M24SR_ReceiveSelectSystemfile(void);
giovannivisentini 29:7a2dfd06cb29 706
giovannivisentini 29:7a2dfd06cb29 707 StatusTypeDef M24SR_SendReadBinary(uint16_t Offset, uint8_t NbByteToRead,
giovannivisentini 29:7a2dfd06cb29 708 uint8_t *pBufferRead);
giovannivisentini 29:7a2dfd06cb29 709 StatusTypeDef M24SR_SendSTReadBinary(uint16_t Offset, uint8_t NbByteToRead,
giovannivisentini 29:7a2dfd06cb29 710 uint8_t *pBufferRead);
giovannivisentini 29:7a2dfd06cb29 711 StatusTypeDef M24SR_ReceiveReadBinary(void);
giovannivisentini 29:7a2dfd06cb29 712
giovannivisentini 29:7a2dfd06cb29 713 StatusTypeDef M24SR_SendUpdateBinary(uint16_t Offset, uint8_t NbByteToWrite,
giovannivisentini 29:7a2dfd06cb29 714 uint8_t *pDataToWrite);
giovannivisentini 29:7a2dfd06cb29 715 StatusTypeDef M24SR_ReceiveUpdateBinary();
giovannivisentini 29:7a2dfd06cb29 716
giovannivisentini 29:7a2dfd06cb29 717 StatusTypeDef M24SR_SendVerify(uint16_t uPwdId, uint8_t NbPwdByte,
giovannivisentini 29:7a2dfd06cb29 718 const uint8_t *pPwd);
giovannivisentini 29:7a2dfd06cb29 719 StatusTypeDef M24SR_ReceiveVerify();
giovannivisentini 29:7a2dfd06cb29 720
giovannivisentini 29:7a2dfd06cb29 721 StatusTypeDef M24SR_SendChangeReferenceData(uint16_t uPwdId, uint8_t *pPwd);
giovannivisentini 29:7a2dfd06cb29 722 StatusTypeDef M24SR_ReceiveChangeReferenceData();
giovannivisentini 29:7a2dfd06cb29 723
giovannivisentini 29:7a2dfd06cb29 724 StatusTypeDef M24SR_SendEnableVerificationRequirement(
giovannivisentini 29:7a2dfd06cb29 725 uint16_t uReadOrWrite);
giovannivisentini 29:7a2dfd06cb29 726 StatusTypeDef M24SR_ReceiveEnableVerificationRequirement();
giovannivisentini 29:7a2dfd06cb29 727
giovannivisentini 29:7a2dfd06cb29 728 StatusTypeDef M24SR_SendDisableVerificationRequirement(
giovannivisentini 29:7a2dfd06cb29 729 uint16_t uReadOrWrite);
giovannivisentini 29:7a2dfd06cb29 730 StatusTypeDef M24SR_ReceiveDisableVerificationRequirement();
giovannivisentini 29:7a2dfd06cb29 731
giovannivisentini 29:7a2dfd06cb29 732 StatusTypeDef M24SR_SendEnablePermanentState(uint16_t uReadOrWrite);
giovannivisentini 29:7a2dfd06cb29 733 StatusTypeDef M24SR_ReceiveEnablePermanentState();
giovannivisentini 29:7a2dfd06cb29 734
giovannivisentini 29:7a2dfd06cb29 735 StatusTypeDef M24SR_SendDisablePermanentState(uint16_t uReadOrWrite);
giovannivisentini 29:7a2dfd06cb29 736 StatusTypeDef M24SR_ReceiveDisablePermanentState();
giovannivisentini 29:7a2dfd06cb29 737
giovannivisentini 29:7a2dfd06cb29 738 StatusTypeDef M24SR_SendInterrupt(void);
giovannivisentini 29:7a2dfd06cb29 739 StatusTypeDef M24SR_StateControl(uint8_t uSetOrReset);
giovannivisentini 29:7a2dfd06cb29 740
giovannivisentini 29:7a2dfd06cb29 741 StatusTypeDef M24SR_ManageI2CGPO(NFC_GPO_MGMT GPO_I2Cconfig);
giovannivisentini 29:7a2dfd06cb29 742 StatusTypeDef M24SR_ManageRFGPO(NFC_GPO_MGMT GPO_RFconfig);
giovannivisentini 29:7a2dfd06cb29 743
giovannivisentini 29:7a2dfd06cb29 744 StatusTypeDef M24SR_RFConfig(uint8_t OnOffChoice);
giovannivisentini 29:7a2dfd06cb29 745 StatusTypeDef M24SR_SendFWTExtension(uint8_t FWTbyte);
giovannivisentini 29:7a2dfd06cb29 746
giovannivisentini 29:7a2dfd06cb29 747
giovannivisentini 29:7a2dfd06cb29 748 /**
giovannivisentini 29:7a2dfd06cb29 749 * Send a command to the component.
giovannivisentini 29:7a2dfd06cb29 750 * @param NbByte Length of the command.
giovannivisentini 29:7a2dfd06cb29 751 * @param pBuffer Buffer containing the command.
giovannivisentini 29:7a2dfd06cb29 752 * @return M24SR_SUCCESS if no errors
giovannivisentini 29:7a2dfd06cb29 753 */
giovannivisentini 29:7a2dfd06cb29 754 StatusTypeDef M24SR_IO_SendI2Ccommand(uint8_t NbByte, uint8_t *pBuffer);
giovannivisentini 29:7a2dfd06cb29 755
giovannivisentini 29:7a2dfd06cb29 756 /**
giovannivisentini 29:7a2dfd06cb29 757 * Read a command response.
giovannivisentini 29:7a2dfd06cb29 758 * @param NbByte Number of bytes to read.
giovannivisentini 29:7a2dfd06cb29 759 * @param pBuffer Buffer to store the response into.
giovannivisentini 29:7a2dfd06cb29 760 * @return M24SR_SUCCESS if no errors
giovannivisentini 29:7a2dfd06cb29 761 */
giovannivisentini 29:7a2dfd06cb29 762 StatusTypeDef M24SR_IO_ReceiveI2Cresponse(uint8_t NbByte,
giovannivisentini 29:7a2dfd06cb29 763 uint8_t *pBuffer);
giovannivisentini 29:7a2dfd06cb29 764
giovannivisentini 29:7a2dfd06cb29 765 /**
giovannivisentini 29:7a2dfd06cb29 766 * Do an active polling on the I2C bus until the answer is ready.
giovannivisentini 29:7a2dfd06cb29 767 * @return M24SR_SUCCESS if no errors
giovannivisentini 29:7a2dfd06cb29 768 */
giovannivisentini 29:7a2dfd06cb29 769 StatusTypeDef M24SR_IO_PollI2C(void);
giovannivisentini 29:7a2dfd06cb29 770
giovannivisentini 29:7a2dfd06cb29 771 /**
giovannivisentini 29:7a2dfd06cb29 772 * Read the gpo pin.
giovannivisentini 29:7a2dfd06cb29 773 * @param[out] pPinState Variable to store the pin state into.
giovannivisentini 29:7a2dfd06cb29 774 */
giovannivisentini 29:7a2dfd06cb29 775 void M24SR_IO_GPO_ReadPin(uint8_t *pPinState) {
giovannivisentini 29:7a2dfd06cb29 776 *pPinState= GPOPin.read();
giovannivisentini 29:7a2dfd06cb29 777 }
giovannivisentini 29:7a2dfd06cb29 778
giovannivisentini 29:7a2dfd06cb29 779 /**
giovannivisentini 29:7a2dfd06cb29 780 * Write the gpo pin.
giovannivisentini 29:7a2dfd06cb29 781 * @param pPinState Pin state to write.
giovannivisentini 29:7a2dfd06cb29 782 */
giovannivisentini 29:7a2dfd06cb29 783 void M24SR_IO_RFDIS_WritePin(uint8_t PinState) {
giovannivisentini 29:7a2dfd06cb29 784 if (PinState == 0)
giovannivisentini 29:7a2dfd06cb29 785 RFDisablePin = 0;
giovannivisentini 29:7a2dfd06cb29 786 else
giovannivisentini 29:7a2dfd06cb29 787 RFDisablePin = 1;
giovannivisentini 29:7a2dfd06cb29 788 }
giovannivisentini 29:7a2dfd06cb29 789
giovannivisentini 29:7a2dfd06cb29 790 /*** Component's Instance Variables ***/
giovannivisentini 29:7a2dfd06cb29 791
giovannivisentini 29:7a2dfd06cb29 792 /* Identity */
giovannivisentini 29:7a2dfd06cb29 793 uint8_t who_am_i;
giovannivisentini 29:7a2dfd06cb29 794
giovannivisentini 29:7a2dfd06cb29 795 /* Type */
giovannivisentini 29:7a2dfd06cb29 796 uint8_t type;
giovannivisentini 29:7a2dfd06cb29 797
giovannivisentini 29:7a2dfd06cb29 798 /* I2C address */
giovannivisentini 29:7a2dfd06cb29 799 uint8_t address;
giovannivisentini 29:7a2dfd06cb29 800
giovannivisentini 29:7a2dfd06cb29 801 /* IO Device. */
giovannivisentini 29:7a2dfd06cb29 802 I2C &dev_I2C;
giovannivisentini 29:7a2dfd06cb29 803
giovannivisentini 29:7a2dfd06cb29 804 /* GPIO */
giovannivisentini 29:7a2dfd06cb29 805 DigitalIn GPOPin;
giovannivisentini 29:7a2dfd06cb29 806
giovannivisentini 29:7a2dfd06cb29 807 /**
giovannivisentini 29:7a2dfd06cb29 808 * Pin used to disable the rf chip functionality.
giovannivisentini 29:7a2dfd06cb29 809 */
giovannivisentini 29:7a2dfd06cb29 810 DigitalOut RFDisablePin;
giovannivisentini 29:7a2dfd06cb29 811
giovannivisentini 29:7a2dfd06cb29 812 /**
giovannivisentini 29:7a2dfd06cb29 813 * Buffer used to build the command to send to the chip.
giovannivisentini 29:7a2dfd06cb29 814 */
giovannivisentini 29:7a2dfd06cb29 815 uint8_t uM24SRbuffer[0xFF];//max command length is 255
giovannivisentini 29:7a2dfd06cb29 816
giovannivisentini 29:7a2dfd06cb29 817 /**
giovannivisentini 29:7a2dfd06cb29 818 * ???
giovannivisentini 29:7a2dfd06cb29 819 */
giovannivisentini 29:7a2dfd06cb29 820 uint8_t uDIDbyte;
giovannivisentini 29:7a2dfd06cb29 821
giovannivisentini 29:7a2dfd06cb29 822
giovannivisentini 29:7a2dfd06cb29 823 /**
giovannivisentini 29:7a2dfd06cb29 824 * Command that the component can accept
giovannivisentini 29:7a2dfd06cb29 825 */
giovannivisentini 29:7a2dfd06cb29 826 typedef enum{
giovannivisentini 29:7a2dfd06cb29 827 NONE, //!< NONE
giovannivisentini 29:7a2dfd06cb29 828 DESELECT, //!< DESELECT
giovannivisentini 29:7a2dfd06cb29 829 SELECT_APPLICATION, //!< SELECT_APPLICATION
giovannivisentini 29:7a2dfd06cb29 830 SELECT_CC_FILE, //!< SELECT_CC_FILE
giovannivisentini 29:7a2dfd06cb29 831 SELECT_NDEF_FILE, //!< SELECT_NDEF_FILE
giovannivisentini 29:7a2dfd06cb29 832 SELECT_SYSTEM_FILE, //!< SELECT_SYSTEM_FILE
giovannivisentini 29:7a2dfd06cb29 833 READ, //!< READ
giovannivisentini 29:7a2dfd06cb29 834 UPDATE, //!< UPDATE
giovannivisentini 29:7a2dfd06cb29 835 VERIFY, //!< VERIFY
giovannivisentini 29:7a2dfd06cb29 836 MANAGE_I2C_GPO, //!< MANAGE_I2C_GPO
giovannivisentini 29:7a2dfd06cb29 837 MANAGE_RF_GPO, //!< MANAGE_RF_GPO
giovannivisentini 29:7a2dfd06cb29 838 CHANGE_REFERENCE_DATA, //!< CHANGE_REFERENCE_DATA
giovannivisentini 29:7a2dfd06cb29 839 ENABLE_VERIFICATION_REQUIREMENT, //!< ENABLE_VERIFICATION_REQUIREMENT
giovannivisentini 29:7a2dfd06cb29 840 DISABLE_VERIFICATION_REQUIREMENT,//!< DISABLE_VERIFICATION_REQUIREMENT
giovannivisentini 29:7a2dfd06cb29 841 ENABLE_PERMANET_STATE, //!< ENABLE_PERMANET_STATE
giovannivisentini 29:7a2dfd06cb29 842 DISABLE_PERMANET_STATE, //!< DISABLE_PERMANET_STATE
giovannivisentini 29:7a2dfd06cb29 843 }M24SR_command_t;
giovannivisentini 29:7a2dfd06cb29 844
giovannivisentini 29:7a2dfd06cb29 845 /**
giovannivisentini 29:7a2dfd06cb29 846 * User parameter used to invoke a command,
giovannivisentini 29:7a2dfd06cb29 847 * it is used to provide the data back with the response
giovannivisentini 29:7a2dfd06cb29 848 */
giovannivisentini 29:7a2dfd06cb29 849 typedef struct{
giovannivisentini 29:7a2dfd06cb29 850 uint8_t *data; //!< data
giovannivisentini 29:7a2dfd06cb29 851 uint16_t length; //!< number of bytes in the data array
giovannivisentini 29:7a2dfd06cb29 852 uint16_t offset; //!< offset parameter used in the read/write command
giovannivisentini 29:7a2dfd06cb29 853 }M24SR_command_data_t;
giovannivisentini 29:7a2dfd06cb29 854
giovannivisentini 29:7a2dfd06cb29 855 /**
giovannivisentini 29:7a2dfd06cb29 856 * Communication mode used by this device
giovannivisentini 29:7a2dfd06cb29 857 */
giovannivisentini 29:7a2dfd06cb29 858 typedef enum{
giovannivisentini 29:7a2dfd06cb29 859 SYNC,//!< SYNC wait the command response before returning
giovannivisentini 29:7a2dfd06cb29 860 ASYNC//!< ASYNC use a callback to notify the end of a command
giovannivisentini 29:7a2dfd06cb29 861 }M24SR_communication_t;
giovannivisentini 29:7a2dfd06cb29 862
giovannivisentini 29:7a2dfd06cb29 863 /**
giovannivisentini 29:7a2dfd06cb29 864 * Type of communication being used
giovannivisentini 29:7a2dfd06cb29 865 */
giovannivisentini 29:7a2dfd06cb29 866 M24SR_communication_t mCommunicationType;
giovannivisentini 29:7a2dfd06cb29 867
giovannivisentini 29:7a2dfd06cb29 868 /**
giovannivisentini 29:7a2dfd06cb29 869 * Last pending command
giovannivisentini 29:7a2dfd06cb29 870 */
giovannivisentini 29:7a2dfd06cb29 871 M24SR_command_t mLastCommandSend;
giovannivisentini 29:7a2dfd06cb29 872
giovannivisentini 29:7a2dfd06cb29 873 /**
giovannivisentini 29:7a2dfd06cb29 874 * Parameter used to invoke the last command
giovannivisentini 29:7a2dfd06cb29 875 */
giovannivisentini 29:7a2dfd06cb29 876 M24SR_command_data_t mLastCommandData;
giovannivisentini 29:7a2dfd06cb29 877
giovannivisentini 29:7a2dfd06cb29 878 /**
giovannivisentini 29:7a2dfd06cb29 879 * Interrupt object fired when the gpo status changes
giovannivisentini 29:7a2dfd06cb29 880 */
giovannivisentini 29:7a2dfd06cb29 881 InterruptIn mGpoEventInterrupt;
giovannivisentini 29:7a2dfd06cb29 882
giovannivisentini 29:7a2dfd06cb29 883 /** object containing the callbacks to use*/
giovannivisentini 29:7a2dfd06cb29 884 Callbacks *mCallback;
giovannivisentini 29:7a2dfd06cb29 885
giovannivisentini 29:7a2dfd06cb29 886 /**
giovannivisentini 29:7a2dfd06cb29 887 * Object with private callbacks used to hide high level commands each
giovannivisentini 29:7a2dfd06cb29 888 * calling multiple low level commands. This callbacks object has
giovannivisentini 29:7a2dfd06cb29 889 * higher priority comparing to the user callbacks.
giovannivisentini 29:7a2dfd06cb29 890 */
giovannivisentini 29:7a2dfd06cb29 891 Callbacks *mComponentCallback;
giovannivisentini 29:7a2dfd06cb29 892
giovannivisentini 29:7a2dfd06cb29 893 /**
giovannivisentini 29:7a2dfd06cb29 894 * Object implementing the interface to use the NDefLib.
giovannivisentini 29:7a2dfd06cb29 895 */
giovannivisentini 29:7a2dfd06cb29 896 NDefNfcTagM24SR *mNDefTagUtil;
giovannivisentini 29:7a2dfd06cb29 897
giovannivisentini 29:7a2dfd06cb29 898 /**
giovannivisentini 29:7a2dfd06cb29 899 * get the callback object to use
giovannivisentini 29:7a2dfd06cb29 900 * @return callback object to use
giovannivisentini 29:7a2dfd06cb29 901 */
giovannivisentini 29:7a2dfd06cb29 902 Callbacks * getCallback(){
giovannivisentini 29:7a2dfd06cb29 903 if(mComponentCallback!=NULL)
giovannivisentini 29:7a2dfd06cb29 904 return mComponentCallback;
giovannivisentini 29:7a2dfd06cb29 905 return mCallback;
giovannivisentini 29:7a2dfd06cb29 906 }//getCallback
giovannivisentini 29:7a2dfd06cb29 907
giovannivisentini 29:7a2dfd06cb29 908 private:
giovannivisentini 29:7a2dfd06cb29 909 /** object containing empty callback to use in the default case*/
giovannivisentini 29:7a2dfd06cb29 910 Callbacks defaultCallback;
giovannivisentini 29:7a2dfd06cb29 911
giovannivisentini 29:7a2dfd06cb29 912
giovannivisentini 29:7a2dfd06cb29 913 /**
giovannivisentini 29:7a2dfd06cb29 914 * This class permits to enable/disable the password request to read/write into the tag
giovannivisentini 29:7a2dfd06cb29 915 * This class is equivalent to calling the methods:
giovannivisentini 29:7a2dfd06cb29 916 * To enable the request:
giovannivisentini 29:7a2dfd06cb29 917 * <ul>
giovannivisentini 29:7a2dfd06cb29 918 * <li> Verify </li>
giovannivisentini 29:7a2dfd06cb29 919 * <li> ChangeReferenceData </li>
giovannivisentini 29:7a2dfd06cb29 920 * <li> EnablePermanentState </li>
giovannivisentini 29:7a2dfd06cb29 921 * </ul>
giovannivisentini 29:7a2dfd06cb29 922 * To disable the request:
giovannivisentini 29:7a2dfd06cb29 923 * <ul>
giovannivisentini 29:7a2dfd06cb29 924 * <li> Verify </li>
giovannivisentini 29:7a2dfd06cb29 925 * <li> disable_verification_requirement </li>
giovannivisentini 29:7a2dfd06cb29 926 * </ul>
giovannivisentini 29:7a2dfd06cb29 927 */
giovannivisentini 29:7a2dfd06cb29 928 class ChangePasswordRequestStatusCallback : public Callbacks{
giovannivisentini 29:7a2dfd06cb29 929
giovannivisentini 29:7a2dfd06cb29 930 public:
giovannivisentini 29:7a2dfd06cb29 931
giovannivisentini 29:7a2dfd06cb29 932 /**
giovannivisentini 29:7a2dfd06cb29 933 * Build the chain of callbacks.
giovannivisentini 29:7a2dfd06cb29 934 */
giovannivisentini 29:7a2dfd06cb29 935 ChangePasswordRequestStatusCallback():
giovannivisentini 29:7a2dfd06cb29 936 mNewPwd(NULL),mType(I2CPwd),mEnable(false){}
giovannivisentini 29:7a2dfd06cb29 937
giovannivisentini 29:7a2dfd06cb29 938 /**
giovannivisentini 29:7a2dfd06cb29 939 * Set the password to enable/disable.
giovannivisentini 29:7a2dfd06cb29 940 * @param type Type of password to enable/disable.
giovannivisentini 29:7a2dfd06cb29 941 * @param newPwd Array of 16bytes with the new password, if null the request will be disabled.
giovannivisentini 29:7a2dfd06cb29 942 */
giovannivisentini 29:7a2dfd06cb29 943 void set_task(PasswordType_t type, const uint8_t *newPwd){
giovannivisentini 29:7a2dfd06cb29 944 mNewPwd=newPwd;
giovannivisentini 29:7a2dfd06cb29 945 mType=type;
giovannivisentini 29:7a2dfd06cb29 946 mEnable=newPwd!=NULL;
giovannivisentini 29:7a2dfd06cb29 947 }//setTask
giovannivisentini 29:7a2dfd06cb29 948
giovannivisentini 29:7a2dfd06cb29 949 virtual void on_verified(M24SR *nfc, StatusTypeDef status,PasswordType_t ,
giovannivisentini 29:7a2dfd06cb29 950 const uint8_t *){
giovannivisentini 29:7a2dfd06cb29 951 if(status!=M24SR_SUCCESS)
giovannivisentini 29:7a2dfd06cb29 952 return onFinishCommand(nfc,status);
giovannivisentini 29:7a2dfd06cb29 953 if(mEnable)
giovannivisentini 29:7a2dfd06cb29 954 nfc->change_reference_data(mType,mNewPwd);
giovannivisentini 29:7a2dfd06cb29 955 else
giovannivisentini 29:7a2dfd06cb29 956 nfc->disable_verification_requirement(mType);
giovannivisentini 29:7a2dfd06cb29 957 }
giovannivisentini 29:7a2dfd06cb29 958
giovannivisentini 29:7a2dfd06cb29 959 virtual void on_disable_verification_requirement(M24SR *nfc,
giovannivisentini 29:7a2dfd06cb29 960 StatusTypeDef status, PasswordType_t ){
giovannivisentini 29:7a2dfd06cb29 961 onFinishCommand(nfc,status);
giovannivisentini 29:7a2dfd06cb29 962 }
giovannivisentini 29:7a2dfd06cb29 963
giovannivisentini 29:7a2dfd06cb29 964 virtual void on_change_reference_data(M24SR *nfc, StatusTypeDef status,
giovannivisentini 29:7a2dfd06cb29 965 PasswordType_t type,
giovannivisentini 29:7a2dfd06cb29 966 uint8_t *){
giovannivisentini 29:7a2dfd06cb29 967 if(status==M24SR_SUCCESS)
giovannivisentini 29:7a2dfd06cb29 968 nfc->enable_permanent_state(type);
giovannivisentini 29:7a2dfd06cb29 969 else
giovannivisentini 29:7a2dfd06cb29 970 onFinishCommand(nfc,status);
giovannivisentini 29:7a2dfd06cb29 971 }
giovannivisentini 29:7a2dfd06cb29 972
giovannivisentini 29:7a2dfd06cb29 973 virtual void on_enable_permanent_state(M24SR *nfc, StatusTypeDef status,
giovannivisentini 29:7a2dfd06cb29 974 PasswordType_t ){
giovannivisentini 29:7a2dfd06cb29 975 onFinishCommand(nfc,status);
giovannivisentini 29:7a2dfd06cb29 976 }
giovannivisentini 29:7a2dfd06cb29 977
giovannivisentini 29:7a2dfd06cb29 978
giovannivisentini 29:7a2dfd06cb29 979 private:
giovannivisentini 29:7a2dfd06cb29 980
giovannivisentini 29:7a2dfd06cb29 981 /**
giovannivisentini 29:7a2dfd06cb29 982 * Remove the private callbacks and call the user callback.
giovannivisentini 29:7a2dfd06cb29 983 * @param nfc Object triggering the command.
giovannivisentini 29:7a2dfd06cb29 984 * @param status Command status.
giovannivisentini 29:7a2dfd06cb29 985 */
giovannivisentini 29:7a2dfd06cb29 986 void onFinishCommand(M24SR *nfc,StatusTypeDef status){
giovannivisentini 29:7a2dfd06cb29 987 nfc->mComponentCallback=NULL;
giovannivisentini 29:7a2dfd06cb29 988
giovannivisentini 29:7a2dfd06cb29 989 if(mEnable){
giovannivisentini 29:7a2dfd06cb29 990 if(mType==ReadPwd){
giovannivisentini 29:7a2dfd06cb29 991 nfc->getCallback()->on_enable_read_password(nfc,status,mNewPwd);
giovannivisentini 29:7a2dfd06cb29 992 }else
giovannivisentini 29:7a2dfd06cb29 993 nfc->getCallback()->on_enable_write_password(nfc,status,mNewPwd);
giovannivisentini 29:7a2dfd06cb29 994 }else{
giovannivisentini 29:7a2dfd06cb29 995 if(mType==ReadPwd){
giovannivisentini 29:7a2dfd06cb29 996 nfc->getCallback()->on_disable_read_password(nfc,status);
giovannivisentini 29:7a2dfd06cb29 997 }else
giovannivisentini 29:7a2dfd06cb29 998 nfc->getCallback()->on_disable_write_password(nfc,status);
giovannivisentini 29:7a2dfd06cb29 999 }//if-else enable
giovannivisentini 29:7a2dfd06cb29 1000 }//onFinish
giovannivisentini 29:7a2dfd06cb29 1001
giovannivisentini 29:7a2dfd06cb29 1002 const uint8_t *mNewPwd;
giovannivisentini 29:7a2dfd06cb29 1003 PasswordType_t mType;
giovannivisentini 29:7a2dfd06cb29 1004 bool mEnable;
giovannivisentini 29:7a2dfd06cb29 1005
giovannivisentini 29:7a2dfd06cb29 1006 };
giovannivisentini 29:7a2dfd06cb29 1007
giovannivisentini 29:7a2dfd06cb29 1008
giovannivisentini 29:7a2dfd06cb29 1009 /**
giovannivisentini 29:7a2dfd06cb29 1010 * Object containing the callback chain needed to change the password request
giovannivisentini 29:7a2dfd06cb29 1011 */
giovannivisentini 29:7a2dfd06cb29 1012 ChangePasswordRequestStatusCallback mChangePasswordRequestStatusCallback;
giovannivisentini 29:7a2dfd06cb29 1013 friend class ChangePasswordRequestStatusCallback;
giovannivisentini 29:7a2dfd06cb29 1014
giovannivisentini 29:7a2dfd06cb29 1015 /**
giovannivisentini 29:7a2dfd06cb29 1016 * This class permits to disable all the password requests to read/write into the tag
giovannivisentini 29:7a2dfd06cb29 1017 * This class is equivalent to calling the methods:
giovannivisentini 29:7a2dfd06cb29 1018 * <ul>
giovannivisentini 29:7a2dfd06cb29 1019 * <li> Verify(i2c) </li>
giovannivisentini 29:7a2dfd06cb29 1020 * <li> DisablePermanentState(Read) </li>
giovannivisentini 29:7a2dfd06cb29 1021 * <li> DisablePermanentState(write) </li>
giovannivisentini 29:7a2dfd06cb29 1022 * <li> disable_verification_requirement(Read) </li>
giovannivisentini 29:7a2dfd06cb29 1023 * <li> disable_verification_requirement(write) </li>
giovannivisentini 29:7a2dfd06cb29 1024 * <li> ChangeReferenceData(Read) </li>
giovannivisentini 29:7a2dfd06cb29 1025 * <li> ChangeReferenceData(write) </li>
giovannivisentini 29:7a2dfd06cb29 1026 * </ul>
giovannivisentini 29:7a2dfd06cb29 1027 */
giovannivisentini 29:7a2dfd06cb29 1028 class RemoveAllPasswordCallback : public Callbacks{
giovannivisentini 29:7a2dfd06cb29 1029
giovannivisentini 29:7a2dfd06cb29 1030 /**
giovannivisentini 29:7a2dfd06cb29 1031 * Store the default password used for open a super user session
giovannivisentini 29:7a2dfd06cb29 1032 * it will be set as default read/write password
giovannivisentini 29:7a2dfd06cb29 1033 */
giovannivisentini 29:7a2dfd06cb29 1034 const uint8_t *mI2CPwd;
giovannivisentini 29:7a2dfd06cb29 1035
giovannivisentini 29:7a2dfd06cb29 1036 public:
giovannivisentini 29:7a2dfd06cb29 1037
giovannivisentini 29:7a2dfd06cb29 1038 /**
giovannivisentini 29:7a2dfd06cb29 1039 * Build the chain of callbacks.
giovannivisentini 29:7a2dfd06cb29 1040 */
giovannivisentini 29:7a2dfd06cb29 1041 RemoveAllPasswordCallback():mI2CPwd(NULL){}
giovannivisentini 29:7a2dfd06cb29 1042
giovannivisentini 29:7a2dfd06cb29 1043 virtual void onVerified(M24SR *nfc,StatusTypeDef status,
giovannivisentini 29:7a2dfd06cb29 1044 PasswordType_t,const uint8_t* data){
giovannivisentini 29:7a2dfd06cb29 1045 if(status!=M24SR_SUCCESS)
giovannivisentini 29:7a2dfd06cb29 1046 return onFinishCommand(nfc,status);
giovannivisentini 29:7a2dfd06cb29 1047 mI2CPwd = data;
giovannivisentini 29:7a2dfd06cb29 1048 nfc->disable_permanent_state(ReadPwd);
giovannivisentini 29:7a2dfd06cb29 1049 }
giovannivisentini 29:7a2dfd06cb29 1050
giovannivisentini 29:7a2dfd06cb29 1051 virtual void on_disable_permanent_state(M24SR *nfc , StatusTypeDef status,
giovannivisentini 29:7a2dfd06cb29 1052 PasswordType_t type){
giovannivisentini 29:7a2dfd06cb29 1053 if(status!=M24SR_SUCCESS)
giovannivisentini 29:7a2dfd06cb29 1054 return onFinishCommand(nfc,status);
giovannivisentini 29:7a2dfd06cb29 1055 if(type==ReadPwd)
giovannivisentini 29:7a2dfd06cb29 1056 nfc->disable_permanent_state(WritePwd);
giovannivisentini 29:7a2dfd06cb29 1057 else
giovannivisentini 29:7a2dfd06cb29 1058 nfc->disable_verification_requirement(ReadPwd);
giovannivisentini 29:7a2dfd06cb29 1059 }
giovannivisentini 29:7a2dfd06cb29 1060
giovannivisentini 29:7a2dfd06cb29 1061 virtual void on_disable_verification_requirement(M24SR *nfc ,
giovannivisentini 29:7a2dfd06cb29 1062 StatusTypeDef status,PasswordType_t type){
giovannivisentini 29:7a2dfd06cb29 1063 if(status!=M24SR_SUCCESS)
giovannivisentini 29:7a2dfd06cb29 1064 return onFinishCommand(nfc,status);
giovannivisentini 29:7a2dfd06cb29 1065 if(type==ReadPwd)
giovannivisentini 29:7a2dfd06cb29 1066 nfc->disable_verification_requirement(WritePwd);
giovannivisentini 29:7a2dfd06cb29 1067 else
giovannivisentini 29:7a2dfd06cb29 1068 nfc->change_reference_data(ReadPwd,mI2CPwd);
giovannivisentini 29:7a2dfd06cb29 1069 }
giovannivisentini 29:7a2dfd06cb29 1070
giovannivisentini 29:7a2dfd06cb29 1071 virtual void on_change_reference_data(M24SR *nfc ,StatusTypeDef status,PasswordType_t type,
giovannivisentini 29:7a2dfd06cb29 1072 uint8_t *data){
giovannivisentini 29:7a2dfd06cb29 1073 if(status!=M24SR_SUCCESS)
giovannivisentini 29:7a2dfd06cb29 1074 return onFinishCommand(nfc,status);
giovannivisentini 29:7a2dfd06cb29 1075 if(type==ReadPwd)
giovannivisentini 29:7a2dfd06cb29 1076 nfc->change_reference_data(WritePwd,data);
giovannivisentini 29:7a2dfd06cb29 1077 else
giovannivisentini 29:7a2dfd06cb29 1078 onFinishCommand(nfc,status);
giovannivisentini 29:7a2dfd06cb29 1079 }
giovannivisentini 29:7a2dfd06cb29 1080
giovannivisentini 29:7a2dfd06cb29 1081 private:
giovannivisentini 29:7a2dfd06cb29 1082
giovannivisentini 29:7a2dfd06cb29 1083 /**
giovannivisentini 29:7a2dfd06cb29 1084 * Remove the private callback and call the onDisableAllPassword callback.
giovannivisentini 29:7a2dfd06cb29 1085 * @param nfc Object triggering the command.
giovannivisentini 29:7a2dfd06cb29 1086 * @param status Command status.
giovannivisentini 29:7a2dfd06cb29 1087 */
giovannivisentini 29:7a2dfd06cb29 1088 void onFinishCommand(M24SR *nfc,StatusTypeDef status){
giovannivisentini 29:7a2dfd06cb29 1089 nfc->mComponentCallback=NULL;
giovannivisentini 29:7a2dfd06cb29 1090 mI2CPwd=NULL;
giovannivisentini 29:7a2dfd06cb29 1091 nfc->getCallback()->on_disable_all_password(nfc,status);
giovannivisentini 29:7a2dfd06cb29 1092 }//onFinish
giovannivisentini 29:7a2dfd06cb29 1093
giovannivisentini 29:7a2dfd06cb29 1094 };
giovannivisentini 29:7a2dfd06cb29 1095
giovannivisentini 29:7a2dfd06cb29 1096
giovannivisentini 29:7a2dfd06cb29 1097 /**
giovannivisentini 29:7a2dfd06cb29 1098 * Object containing the callback chain needed to remove the password request
giovannivisentini 29:7a2dfd06cb29 1099 */
giovannivisentini 29:7a2dfd06cb29 1100 RemoveAllPasswordCallback mRemoveAllPasswordCallback;
giovannivisentini 29:7a2dfd06cb29 1101 friend class RemoveAllPasswordCallback;
giovannivisentini 29:7a2dfd06cb29 1102
giovannivisentini 29:7a2dfd06cb29 1103 /**
giovannivisentini 29:7a2dfd06cb29 1104 * This class permits to set the tag as read/write only
giovannivisentini 29:7a2dfd06cb29 1105 * This class is equivalent to calling the methods:
giovannivisentini 29:7a2dfd06cb29 1106 * <ul>
giovannivisentini 29:7a2dfd06cb29 1107 * <li> Verify(i2c) </li>
giovannivisentini 29:7a2dfd06cb29 1108 * <li> EnablePermanentState(Read/write) </li>
giovannivisentini 29:7a2dfd06cb29 1109 * </ul>
giovannivisentini 29:7a2dfd06cb29 1110 * or:
giovannivisentini 29:7a2dfd06cb29 1111 * <ul>
giovannivisentini 29:7a2dfd06cb29 1112 * <li> Verify(i2c) </li>
giovannivisentini 29:7a2dfd06cb29 1113 * <li> DisablePermanentState</li>
giovannivisentini 29:7a2dfd06cb29 1114 * <li> disable_verification_requirement(Read/write) </li>
giovannivisentini 29:7a2dfd06cb29 1115 * </ul>
giovannivisentini 29:7a2dfd06cb29 1116 */
giovannivisentini 29:7a2dfd06cb29 1117 class ChangeAccessStateCallback : public Callbacks{
giovannivisentini 29:7a2dfd06cb29 1118
giovannivisentini 29:7a2dfd06cb29 1119 public:
giovannivisentini 29:7a2dfd06cb29 1120
giovannivisentini 29:7a2dfd06cb29 1121 typedef enum{
giovannivisentini 29:7a2dfd06cb29 1122 WRITE,
giovannivisentini 29:7a2dfd06cb29 1123 READ
giovannivisentini 29:7a2dfd06cb29 1124 }AccessType_t;
giovannivisentini 29:7a2dfd06cb29 1125
giovannivisentini 29:7a2dfd06cb29 1126 /**
giovannivisentini 29:7a2dfd06cb29 1127 * Build the chain of callbacks.
giovannivisentini 29:7a2dfd06cb29 1128 */
giovannivisentini 29:7a2dfd06cb29 1129 ChangeAccessStateCallback():mType(WRITE),mEnable(false){}
giovannivisentini 29:7a2dfd06cb29 1130
giovannivisentini 29:7a2dfd06cb29 1131 /**
giovannivisentini 29:7a2dfd06cb29 1132 * Set the access to enable/disable an access type.
giovannivisentini 29:7a2dfd06cb29 1133 * @param type Access type.
giovannivisentini 29:7a2dfd06cb29 1134 * @param enable True to enable the state, False to disable it.
giovannivisentini 29:7a2dfd06cb29 1135 */
giovannivisentini 29:7a2dfd06cb29 1136 void change_access_state(AccessType_t type,bool enable){
giovannivisentini 29:7a2dfd06cb29 1137 mType=type;
giovannivisentini 29:7a2dfd06cb29 1138 mEnable=enable;
giovannivisentini 29:7a2dfd06cb29 1139 }
giovannivisentini 29:7a2dfd06cb29 1140
giovannivisentini 29:7a2dfd06cb29 1141 virtual void on_verified(M24SR *nfc,StatusTypeDef status,
giovannivisentini 29:7a2dfd06cb29 1142 PasswordType_t,const uint8_t*){
giovannivisentini 29:7a2dfd06cb29 1143 if(status!=M24SR_SUCCESS)
giovannivisentini 29:7a2dfd06cb29 1144 return onFinishCommand(nfc,status);
giovannivisentini 29:7a2dfd06cb29 1145
giovannivisentini 29:7a2dfd06cb29 1146 if(mEnable){
giovannivisentini 29:7a2dfd06cb29 1147 nfc->disable_permanent_state(mType==WRITE? WritePwd : ReadPwd);
giovannivisentini 29:7a2dfd06cb29 1148 }else
giovannivisentini 29:7a2dfd06cb29 1149 nfc->enable_permanent_state(mType==WRITE? WritePwd : ReadPwd);
giovannivisentini 29:7a2dfd06cb29 1150
giovannivisentini 29:7a2dfd06cb29 1151 }
giovannivisentini 29:7a2dfd06cb29 1152
giovannivisentini 29:7a2dfd06cb29 1153 virtual void on_disable_permanent_state(M24SR *nfc, StatusTypeDef status,
giovannivisentini 29:7a2dfd06cb29 1154 PasswordType_t type ){
giovannivisentini 29:7a2dfd06cb29 1155 if(status!=M24SR_SUCCESS)
giovannivisentini 29:7a2dfd06cb29 1156 return onFinishCommand(nfc,status);
giovannivisentini 29:7a2dfd06cb29 1157
giovannivisentini 29:7a2dfd06cb29 1158 nfc->disable_verification_requirement(type);
giovannivisentini 29:7a2dfd06cb29 1159 }
giovannivisentini 29:7a2dfd06cb29 1160
giovannivisentini 29:7a2dfd06cb29 1161 virtual void on_disable_verification_requirement(M24SR *nfc , StatusTypeDef status,
giovannivisentini 29:7a2dfd06cb29 1162 PasswordType_t ){
giovannivisentini 29:7a2dfd06cb29 1163 onFinishCommand(nfc,status);
giovannivisentini 29:7a2dfd06cb29 1164 }
giovannivisentini 29:7a2dfd06cb29 1165
giovannivisentini 29:7a2dfd06cb29 1166 virtual void on_enable_permanent_state(M24SR *nfc ,StatusTypeDef status,PasswordType_t ){
giovannivisentini 29:7a2dfd06cb29 1167 onFinishCommand(nfc,status);
giovannivisentini 29:7a2dfd06cb29 1168 }
giovannivisentini 29:7a2dfd06cb29 1169
giovannivisentini 29:7a2dfd06cb29 1170
giovannivisentini 29:7a2dfd06cb29 1171 private:
giovannivisentini 29:7a2dfd06cb29 1172
giovannivisentini 29:7a2dfd06cb29 1173 /**
giovannivisentini 29:7a2dfd06cb29 1174 * Remove the private callback and call the user callback.
giovannivisentini 29:7a2dfd06cb29 1175 * @param nfc Object triggering the command.
giovannivisentini 29:7a2dfd06cb29 1176 * @param status Command status.
giovannivisentini 29:7a2dfd06cb29 1177 */
giovannivisentini 29:7a2dfd06cb29 1178 void onFinishCommand(M24SR *nfc,StatusTypeDef status){
giovannivisentini 29:7a2dfd06cb29 1179 nfc->mComponentCallback=NULL;
giovannivisentini 29:7a2dfd06cb29 1180 if(mEnable){
giovannivisentini 29:7a2dfd06cb29 1181 if(mType==READ){
giovannivisentini 29:7a2dfd06cb29 1182 //enable read = disable write only
giovannivisentini 29:7a2dfd06cb29 1183 nfc->getCallback()->on_disable_write_only(nfc,status);
giovannivisentini 29:7a2dfd06cb29 1184 }else
giovannivisentini 29:7a2dfd06cb29 1185 //enable write = disable read only
giovannivisentini 29:7a2dfd06cb29 1186 nfc->getCallback()->on_disable_read_only(nfc,status);
giovannivisentini 29:7a2dfd06cb29 1187 }else{
giovannivisentini 29:7a2dfd06cb29 1188 if(mType==WRITE){
giovannivisentini 29:7a2dfd06cb29 1189 //disable write = enable read only
giovannivisentini 29:7a2dfd06cb29 1190 nfc->getCallback()->on_enable_read_only(nfc,status);
giovannivisentini 29:7a2dfd06cb29 1191 }else{
giovannivisentini 29:7a2dfd06cb29 1192 //
giovannivisentini 29:7a2dfd06cb29 1193 nfc->getCallback()->on_enable_write_only(nfc,status);
giovannivisentini 29:7a2dfd06cb29 1194 }
giovannivisentini 29:7a2dfd06cb29 1195 }//if-else enable
giovannivisentini 29:7a2dfd06cb29 1196 }//onFinish
giovannivisentini 29:7a2dfd06cb29 1197
giovannivisentini 29:7a2dfd06cb29 1198 AccessType_t mType;
giovannivisentini 29:7a2dfd06cb29 1199 bool mEnable;
giovannivisentini 29:7a2dfd06cb29 1200
giovannivisentini 29:7a2dfd06cb29 1201 };
giovannivisentini 29:7a2dfd06cb29 1202
giovannivisentini 29:7a2dfd06cb29 1203
giovannivisentini 29:7a2dfd06cb29 1204 /**
giovannivisentini 29:7a2dfd06cb29 1205 * Object containing the callback chain needed to change the access state
giovannivisentini 29:7a2dfd06cb29 1206 */
giovannivisentini 29:7a2dfd06cb29 1207 ChangeAccessStateCallback mChangeAccessStateCallback;
giovannivisentini 29:7a2dfd06cb29 1208 friend class ChangeAccessStateCallback;
giovannivisentini 29:7a2dfd06cb29 1209
giovannivisentini 29:7a2dfd06cb29 1210
giovannivisentini 29:7a2dfd06cb29 1211 /**
giovannivisentini 29:7a2dfd06cb29 1212 * Object with the callback used to send a ManageGPO command.
giovannivisentini 29:7a2dfd06cb29 1213 * This class is equivalent to calling the methods:
giovannivisentini 29:7a2dfd06cb29 1214 * <ul>
giovannivisentini 29:7a2dfd06cb29 1215 * <li> SelectedApplication </li>
giovannivisentini 29:7a2dfd06cb29 1216 * <li> SelectSystemfile </li>
giovannivisentini 29:7a2dfd06cb29 1217 * <li> ReadBinar: read the old value </li>
giovannivisentini 29:7a2dfd06cb29 1218 * <li> onVerified </li>
giovannivisentini 29:7a2dfd06cb29 1219 * <li> onUpdatedBinary: write the new value</li>
giovannivisentini 29:7a2dfd06cb29 1220 * </ul>
giovannivisentini 29:7a2dfd06cb29 1221 */
giovannivisentini 29:7a2dfd06cb29 1222 class ManageGPOCallback : public Callbacks{
giovannivisentini 29:7a2dfd06cb29 1223
giovannivisentini 29:7a2dfd06cb29 1224 public:
giovannivisentini 29:7a2dfd06cb29 1225
giovannivisentini 29:7a2dfd06cb29 1226 /**
giovannivisentini 29:7a2dfd06cb29 1227 * Build the chain of callbacks.
giovannivisentini 29:7a2dfd06cb29 1228 * @param parent Parent component to run the command on.
giovannivisentini 29:7a2dfd06cb29 1229 */
giovannivisentini 29:7a2dfd06cb29 1230 ManageGPOCallback(M24SR &parent):mParent(parent),
giovannivisentini 29:7a2dfd06cb29 1231 mGpoConfig(HIGH_IMPEDANCE),mReadGpoConfig(0),mI2CGpo(true){}
giovannivisentini 29:7a2dfd06cb29 1232
giovannivisentini 29:7a2dfd06cb29 1233
giovannivisentini 29:7a2dfd06cb29 1234 /**
giovannivisentini 29:7a2dfd06cb29 1235 * Command parameters.
giovannivisentini 29:7a2dfd06cb29 1236 * @param i2cGpo true to change the i2c gpo, false for the rf gpo.
giovannivisentini 29:7a2dfd06cb29 1237 * @param newConfig new gpo function.
giovannivisentini 29:7a2dfd06cb29 1238 */
giovannivisentini 29:7a2dfd06cb29 1239 void set_new_GPO_config(bool i2cGpo,NFC_GPO_MGMT newConfig){
giovannivisentini 29:7a2dfd06cb29 1240 mGpoConfig=newConfig;
giovannivisentini 29:7a2dfd06cb29 1241 mI2CGpo =i2cGpo;
giovannivisentini 29:7a2dfd06cb29 1242 }
giovannivisentini 29:7a2dfd06cb29 1243
giovannivisentini 29:7a2dfd06cb29 1244 virtual void on_selected_application(M24SR *nfc,StatusTypeDef status){
giovannivisentini 29:7a2dfd06cb29 1245 if(status==M24SR_SUCCESS)
giovannivisentini 29:7a2dfd06cb29 1246 nfc->select_system_file();
giovannivisentini 29:7a2dfd06cb29 1247 else
giovannivisentini 29:7a2dfd06cb29 1248 onFinishCommand(nfc,status);
giovannivisentini 29:7a2dfd06cb29 1249 }
giovannivisentini 29:7a2dfd06cb29 1250
giovannivisentini 29:7a2dfd06cb29 1251 virtual void on_selected_system_file(M24SR *nfc,StatusTypeDef status){
giovannivisentini 29:7a2dfd06cb29 1252 if(status==M24SR_SUCCESS)
giovannivisentini 29:7a2dfd06cb29 1253 nfc->read_binary(0x0004, 0x01, &mReadGpoConfig);
giovannivisentini 29:7a2dfd06cb29 1254 else
giovannivisentini 29:7a2dfd06cb29 1255 onFinishCommand(nfc,status);
giovannivisentini 29:7a2dfd06cb29 1256 }
giovannivisentini 29:7a2dfd06cb29 1257
giovannivisentini 29:7a2dfd06cb29 1258 virtual void on_read_byte(M24SR *nfc,StatusTypeDef status,
giovannivisentini 29:7a2dfd06cb29 1259 uint16_t,uint8_t*, uint16_t ){
giovannivisentini 29:7a2dfd06cb29 1260 if(status==M24SR_SUCCESS)
giovannivisentini 29:7a2dfd06cb29 1261 nfc->verify(M24SR::I2CPwd, 0x10, M24SR::DEFAULT_PASSWORD);
giovannivisentini 29:7a2dfd06cb29 1262 else
giovannivisentini 29:7a2dfd06cb29 1263 onFinishCommand(nfc,status);
giovannivisentini 29:7a2dfd06cb29 1264 }
giovannivisentini 29:7a2dfd06cb29 1265
giovannivisentini 29:7a2dfd06cb29 1266 virtual void on_verified(M24SR *nfc,StatusTypeDef status,PasswordType_t, const uint8_t*){
giovannivisentini 29:7a2dfd06cb29 1267 if(status!=M24SR_SUCCESS)
giovannivisentini 29:7a2dfd06cb29 1268 return onFinishCommand(nfc,status);
giovannivisentini 29:7a2dfd06cb29 1269
giovannivisentini 29:7a2dfd06cb29 1270 if(mI2CGpo)
giovannivisentini 29:7a2dfd06cb29 1271 mReadGpoConfig = (mReadGpoConfig & 0xF0) | (uint8_t)mGpoConfig;
giovannivisentini 29:7a2dfd06cb29 1272 else
giovannivisentini 29:7a2dfd06cb29 1273 mReadGpoConfig = (mReadGpoConfig & 0x0F) | (((uint8_t)mGpoConfig)<<4);
giovannivisentini 29:7a2dfd06cb29 1274
giovannivisentini 29:7a2dfd06cb29 1275 nfc->update_binary(0x0004, 0x01, &mReadGpoConfig);
giovannivisentini 29:7a2dfd06cb29 1276 }
giovannivisentini 29:7a2dfd06cb29 1277
giovannivisentini 29:7a2dfd06cb29 1278 virtual void on_updated_binary(M24SR *nfc,StatusTypeDef status,
giovannivisentini 29:7a2dfd06cb29 1279 uint16_t , uint8_t*, uint16_t ){
giovannivisentini 29:7a2dfd06cb29 1280
giovannivisentini 29:7a2dfd06cb29 1281 if(status==M24SR_SUCCESS){
giovannivisentini 29:7a2dfd06cb29 1282 if (mGpoConfig == I2C_ANSWER_READY){
giovannivisentini 29:7a2dfd06cb29 1283 mParent.mCommunicationType = ASYNC;
giovannivisentini 29:7a2dfd06cb29 1284 }else{
giovannivisentini 29:7a2dfd06cb29 1285 mParent.mCommunicationType = SYNC;
giovannivisentini 29:7a2dfd06cb29 1286 }//if-else
giovannivisentini 29:7a2dfd06cb29 1287 }//status
giovannivisentini 29:7a2dfd06cb29 1288 onFinishCommand(nfc,status);
giovannivisentini 29:7a2dfd06cb29 1289 }
giovannivisentini 29:7a2dfd06cb29 1290
giovannivisentini 29:7a2dfd06cb29 1291 private:
giovannivisentini 29:7a2dfd06cb29 1292
giovannivisentini 29:7a2dfd06cb29 1293 /**
giovannivisentini 29:7a2dfd06cb29 1294 * Remove the private callback and call the user callback.
giovannivisentini 29:7a2dfd06cb29 1295 * @param nfc Object where the command was send to.
giovannivisentini 29:7a2dfd06cb29 1296 * @param status Command status.
giovannivisentini 29:7a2dfd06cb29 1297 */
giovannivisentini 29:7a2dfd06cb29 1298 void onFinishCommand(M24SR *nfc,StatusTypeDef status){
giovannivisentini 29:7a2dfd06cb29 1299 mParent.mComponentCallback=NULL;
giovannivisentini 29:7a2dfd06cb29 1300 if(mI2CGpo){
giovannivisentini 29:7a2dfd06cb29 1301 mParent.mCallback->on_manage_I2C_GPO(nfc,status,mGpoConfig);
giovannivisentini 29:7a2dfd06cb29 1302 }else{
giovannivisentini 29:7a2dfd06cb29 1303 mParent.mCallback->on_manage_RF_GPO(nfc,status,mGpoConfig);
giovannivisentini 29:7a2dfd06cb29 1304 }//if-else
giovannivisentini 29:7a2dfd06cb29 1305 }//onFinishCommand
giovannivisentini 29:7a2dfd06cb29 1306
giovannivisentini 29:7a2dfd06cb29 1307 /**
giovannivisentini 29:7a2dfd06cb29 1308 * Component where send the commands
giovannivisentini 29:7a2dfd06cb29 1309 */
giovannivisentini 29:7a2dfd06cb29 1310 M24SR &mParent;
giovannivisentini 29:7a2dfd06cb29 1311
giovannivisentini 29:7a2dfd06cb29 1312 /** new gpo function that this class has to write */
giovannivisentini 29:7a2dfd06cb29 1313 NFC_GPO_MGMT mGpoConfig;
giovannivisentini 29:7a2dfd06cb29 1314
giovannivisentini 29:7a2dfd06cb29 1315 /**
giovannivisentini 29:7a2dfd06cb29 1316 * variable where storeing the read gpo configuration
giovannivisentini 29:7a2dfd06cb29 1317 */
giovannivisentini 29:7a2dfd06cb29 1318 uint8_t mReadGpoConfig;
giovannivisentini 29:7a2dfd06cb29 1319
giovannivisentini 29:7a2dfd06cb29 1320 /**
giovannivisentini 29:7a2dfd06cb29 1321 * true to change the i2c gpo, false to change the rf gpo
giovannivisentini 29:7a2dfd06cb29 1322 */
giovannivisentini 29:7a2dfd06cb29 1323 bool mI2CGpo;
giovannivisentini 29:7a2dfd06cb29 1324
giovannivisentini 29:7a2dfd06cb29 1325 };
giovannivisentini 29:7a2dfd06cb29 1326
giovannivisentini 29:7a2dfd06cb29 1327 /**
giovannivisentini 29:7a2dfd06cb29 1328 * Object containing the callback chain needed to change the gpo function
giovannivisentini 29:7a2dfd06cb29 1329 */
giovannivisentini 29:7a2dfd06cb29 1330 ManageGPOCallback mManageGPOCallback;
giovannivisentini 29:7a2dfd06cb29 1331
giovannivisentini 29:7a2dfd06cb29 1332
giovannivisentini 29:7a2dfd06cb29 1333 /**
giovannivisentini 29:7a2dfd06cb29 1334 * Object with the callback used to read the component ID
giovannivisentini 29:7a2dfd06cb29 1335 * This class is equivalent to calling the methods:
giovannivisentini 29:7a2dfd06cb29 1336 * <ul>
giovannivisentini 29:7a2dfd06cb29 1337 * <li> SelectedApplication </li>
giovannivisentini 29:7a2dfd06cb29 1338 * <li> SelectSystemfile </li>
giovannivisentini 29:7a2dfd06cb29 1339 * <li> read_binary </li>
giovannivisentini 29:7a2dfd06cb29 1340 * </ul>
giovannivisentini 29:7a2dfd06cb29 1341 */
giovannivisentini 29:7a2dfd06cb29 1342 class ReadIDCallback : public Callbacks{
giovannivisentini 29:7a2dfd06cb29 1343
giovannivisentini 29:7a2dfd06cb29 1344 public:
giovannivisentini 29:7a2dfd06cb29 1345
giovannivisentini 29:7a2dfd06cb29 1346 /**
giovannivisentini 29:7a2dfd06cb29 1347 * Build the chain of callbacks.
giovannivisentini 29:7a2dfd06cb29 1348 * @param parent object where to send the command to.
giovannivisentini 29:7a2dfd06cb29 1349 */
giovannivisentini 29:7a2dfd06cb29 1350 ReadIDCallback(M24SR &parent):mParent(parent),mIdPtr(NULL){}
giovannivisentini 29:7a2dfd06cb29 1351
giovannivisentini 29:7a2dfd06cb29 1352 /**
giovannivisentini 29:7a2dfd06cb29 1353 * Set the variable containing the result
giovannivisentini 29:7a2dfd06cb29 1354 * @param idPtr
giovannivisentini 29:7a2dfd06cb29 1355 */
giovannivisentini 29:7a2dfd06cb29 1356 void read_id_on(uint8_t *idPtr){
giovannivisentini 29:7a2dfd06cb29 1357 mIdPtr=idPtr;
giovannivisentini 29:7a2dfd06cb29 1358 }
giovannivisentini 29:7a2dfd06cb29 1359
giovannivisentini 29:7a2dfd06cb29 1360 virtual void on_selected_application(M24SR *nfc,StatusTypeDef status){
giovannivisentini 29:7a2dfd06cb29 1361 if(status==M24SR_SUCCESS){
giovannivisentini 29:7a2dfd06cb29 1362 nfc->select_system_file();
giovannivisentini 29:7a2dfd06cb29 1363 }else
giovannivisentini 29:7a2dfd06cb29 1364 onFinishCommand(nfc,status);
giovannivisentini 29:7a2dfd06cb29 1365
giovannivisentini 29:7a2dfd06cb29 1366 }
giovannivisentini 29:7a2dfd06cb29 1367
giovannivisentini 29:7a2dfd06cb29 1368 virtual void on_selected_system_file(M24SR *nfc,StatusTypeDef status){
giovannivisentini 29:7a2dfd06cb29 1369 if(status==M24SR_SUCCESS){
giovannivisentini 29:7a2dfd06cb29 1370 nfc->read_binary(0x0011, 0x01, mIdPtr);
giovannivisentini 29:7a2dfd06cb29 1371 }else
giovannivisentini 29:7a2dfd06cb29 1372 onFinishCommand(nfc,status);
giovannivisentini 29:7a2dfd06cb29 1373 }
giovannivisentini 29:7a2dfd06cb29 1374
giovannivisentini 29:7a2dfd06cb29 1375 virtual void on_read_byte(M24SR *nfc,StatusTypeDef status,
giovannivisentini 29:7a2dfd06cb29 1376 uint16_t ,uint8_t *, uint16_t ){
giovannivisentini 29:7a2dfd06cb29 1377 onFinishCommand(nfc,status);
giovannivisentini 29:7a2dfd06cb29 1378 }
giovannivisentini 29:7a2dfd06cb29 1379
giovannivisentini 29:7a2dfd06cb29 1380 private:
giovannivisentini 29:7a2dfd06cb29 1381
giovannivisentini 29:7a2dfd06cb29 1382 /**
giovannivisentini 29:7a2dfd06cb29 1383 * Remove the private callback and call the user onReadId function.
giovannivisentini 29:7a2dfd06cb29 1384 * @param nfc Object where the command was send.
giovannivisentini 29:7a2dfd06cb29 1385 * @param status Command status.
giovannivisentini 29:7a2dfd06cb29 1386 */
giovannivisentini 29:7a2dfd06cb29 1387 void onFinishCommand(M24SR *nfc,StatusTypeDef status){
giovannivisentini 29:7a2dfd06cb29 1388 mParent.mComponentCallback=NULL;
giovannivisentini 29:7a2dfd06cb29 1389 mParent.getCallback()->on_read_id(nfc,status,mIdPtr);
giovannivisentini 29:7a2dfd06cb29 1390 }
giovannivisentini 29:7a2dfd06cb29 1391
giovannivisentini 29:7a2dfd06cb29 1392 M24SR& mParent;
giovannivisentini 29:7a2dfd06cb29 1393
giovannivisentini 29:7a2dfd06cb29 1394 /**
giovannivisentini 29:7a2dfd06cb29 1395 * pointer to read id
giovannivisentini 29:7a2dfd06cb29 1396 */
giovannivisentini 29:7a2dfd06cb29 1397 uint8_t *mIdPtr;
giovannivisentini 29:7a2dfd06cb29 1398 };
giovannivisentini 29:7a2dfd06cb29 1399
giovannivisentini 29:7a2dfd06cb29 1400
giovannivisentini 29:7a2dfd06cb29 1401 /**
giovannivisentini 29:7a2dfd06cb29 1402 * Object containing the callback chain needed to read the component id
giovannivisentini 29:7a2dfd06cb29 1403 */
giovannivisentini 29:7a2dfd06cb29 1404 ReadIDCallback mReadIDCallback;
giovannivisentini 29:7a2dfd06cb29 1405 friend class ReadIDCallback;
giovannivisentini 29:7a2dfd06cb29 1406
giovannivisentini 29:7a2dfd06cb29 1407 /**
giovannivisentini 29:7a2dfd06cb29 1408 * Convert a generic enum to the value used by the M24SR chip.
giovannivisentini 29:7a2dfd06cb29 1409 * @param type Password type.
giovannivisentini 29:7a2dfd06cb29 1410 * @return equivalent value used inside the m24sr chip */
giovannivisentini 29:7a2dfd06cb29 1411 uint16_t passwordTypeToConst(const PasswordType_t &type)const{
giovannivisentini 29:7a2dfd06cb29 1412 switch(type){
giovannivisentini 29:7a2dfd06cb29 1413 case ReadPwd:
giovannivisentini 29:7a2dfd06cb29 1414 return READ_PWD;
giovannivisentini 29:7a2dfd06cb29 1415 case WritePwd:
giovannivisentini 29:7a2dfd06cb29 1416 return WRITE_PWD;
giovannivisentini 29:7a2dfd06cb29 1417 case I2CPwd:
giovannivisentini 29:7a2dfd06cb29 1418 default:
giovannivisentini 29:7a2dfd06cb29 1419 return I2C_PWD;
giovannivisentini 29:7a2dfd06cb29 1420 }//switch
giovannivisentini 29:7a2dfd06cb29 1421 }//passwordTypeToConst
giovannivisentini 29:7a2dfd06cb29 1422
giovannivisentini 29:7a2dfd06cb29 1423 /**
giovannivisentini 29:7a2dfd06cb29 1424 * convert a uint16 into an enum value
giovannivisentini 29:7a2dfd06cb29 1425 * @param type
giovannivisentini 29:7a2dfd06cb29 1426 * @return
giovannivisentini 29:7a2dfd06cb29 1427 */
giovannivisentini 29:7a2dfd06cb29 1428 PasswordType_t constToPasswordType(const uint16_t type)const{
giovannivisentini 29:7a2dfd06cb29 1429 switch(type){
giovannivisentini 29:7a2dfd06cb29 1430 case READ_PWD:
giovannivisentini 29:7a2dfd06cb29 1431 return ReadPwd;
giovannivisentini 29:7a2dfd06cb29 1432 case WRITE_PWD:
giovannivisentini 29:7a2dfd06cb29 1433 return WritePwd;
giovannivisentini 29:7a2dfd06cb29 1434 case I2C_PWD:
giovannivisentini 29:7a2dfd06cb29 1435 default:
giovannivisentini 29:7a2dfd06cb29 1436 return I2CPwd;
giovannivisentini 29:7a2dfd06cb29 1437 }//switch
giovannivisentini 29:7a2dfd06cb29 1438 }//passwordTypeToConst
giovannivisentini 29:7a2dfd06cb29 1439 };
giovannivisentini 29:7a2dfd06cb29 1440
giovannivisentini 29:7a2dfd06cb29 1441 #endif // __M24SR_CLASS_H
giovannivisentini 29:7a2dfd06cb29 1442
giovannivisentini 29:7a2dfd06cb29 1443 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/