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:
Davidroid
Date:
Wed Jul 12 14:15:02 2017 +0000
Revision:
33:e6b7e74be1d5
Parent:
32:9fc4f9195d28
Child:
34:b76765d2cc68
Updated to fit 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 */
Davidroid 33:e6b7e74be1d5 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 */
Davidroid 33:e6b7e74be1d5 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 */
Davidroid 33:e6b7e74be1d5 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 */
Davidroid 33:e6b7e74be1d5 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 */
Davidroid 33:e6b7e74be1d5 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 */
Davidroid 33:e6b7e74be1d5 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,
Davidroid 33:e6b7e74be1d5 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,
Davidroid 33:e6b7e74be1d5 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,
Davidroid 33:e6b7e74be1d5 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 */
Davidroid 33:e6b7e74be1d5 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 */
Davidroid 33:e6b7e74be1d5 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,
Davidroid 33:e6b7e74be1d5 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 */
Davidroid 33:e6b7e74be1d5 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 */
Davidroid 33:e6b7e74be1d5 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 */
Davidroid 33:e6b7e74be1d5 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 */
Davidroid 33:e6b7e74be1d5 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 */
Davidroid 33:e6b7e74be1d5 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 */
Davidroid 33:e6b7e74be1d5 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 */
Davidroid 33:e6b7e74be1d5 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 */
Davidroid 33:e6b7e74be1d5 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 */
Davidroid 33:e6b7e74be1d5 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 */
Davidroid 33:e6b7e74be1d5 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 */
Davidroid 33:e6b7e74be1d5 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 */
Davidroid 33:e6b7e74be1d5 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 */
Davidroid 33:e6b7e74be1d5 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 */
Davidroid 33:e6b7e74be1d5 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
Davidroid 33:e6b7e74be1d5 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 */
Davidroid 33:e6b7e74be1d5 536 void set_callback(Callbacks *commandCallback) {
Davidroid 33:e6b7e74be1d5 537 if (commandCallback!=NULL) {
giovannivisentini 29:7a2dfd06cb29 538 mCallback = commandCallback;
Davidroid 33:e6b7e74be1d5 539 } else {
giovannivisentini 29:7a2dfd06cb29 540 mCallback = &defaultCallback;
Davidroid 33:e6b7e74be1d5 541 }
giovannivisentini 29:7a2dfd06cb29 542 }
giovannivisentini 29:7a2dfd06cb29 543
giovannivisentini 29:7a2dfd06cb29 544
giovannivisentini 29:7a2dfd06cb29 545 /////////////////// hight level/utility function /////////////////////
giovannivisentini 29:7a2dfd06cb29 546
giovannivisentini 29:7a2dfd06cb29 547
giovannivisentini 29:7a2dfd06cb29 548 /**
giovannivisentini 29:7a2dfd06cb29 549 * Enable the request of a password before reading the tag.
giovannivisentini 29:7a2dfd06cb29 550 * @param pCurrentWritePassword Current password
giovannivisentini 29:7a2dfd06cb29 551 * @param pNewPassword Password to request before reading the tag.
giovannivisentini 29:7a2dfd06cb29 552 * @return return M24SR_SUCCESS if no errors
giovannivisentini 29:7a2dfd06cb29 553 * @par The password must have a length of 16 chars.
giovannivisentini 29:7a2dfd06cb29 554 */
Davidroid 33:e6b7e74be1d5 555 StatusTypeDef enable_read_password(const uint8_t* pCurrentWritePassword, 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 */
Davidroid 33:e6b7e74be1d5 584 StatusTypeDef enable_write_password(const uint8_t* pCurrentWritePassword, uint8_t* pNewPassword) {
giovannivisentini 29:7a2dfd06cb29 585 //enable the callback for change the gpo
giovannivisentini 29:7a2dfd06cb29 586 mComponentCallback = &mChangePasswordRequestStatusCallback;
giovannivisentini 29:7a2dfd06cb29 587 mChangePasswordRequestStatusCallback.set_task(WritePwd,pNewPassword);
giovannivisentini 29:7a2dfd06cb29 588
giovannivisentini 29:7a2dfd06cb29 589 return verify(M24SR::WritePwd, 0x10, pCurrentWritePassword);
giovannivisentini 29:7a2dfd06cb29 590 }
giovannivisentini 29:7a2dfd06cb29 591
giovannivisentini 29:7a2dfd06cb29 592 /**
giovannivisentini 29:7a2dfd06cb29 593 * Disable the request of a password before writing the tag.
giovannivisentini 29:7a2dfd06cb29 594 * @param pCurrentWritePassword Current password.
giovannivisentini 29:7a2dfd06cb29 595 * @return return M24SR_SUCCESS if no errors
giovannivisentini 29:7a2dfd06cb29 596 * @par The password must have a length of 16 chars.
giovannivisentini 29:7a2dfd06cb29 597 */
giovannivisentini 29:7a2dfd06cb29 598 StatusTypeDef disable_write_password(const uint8_t* pCurrentWritePassword) {
giovannivisentini 29:7a2dfd06cb29 599 mComponentCallback = &mChangePasswordRequestStatusCallback;
giovannivisentini 29:7a2dfd06cb29 600 mChangePasswordRequestStatusCallback.set_task(WritePwd,NULL);
giovannivisentini 29:7a2dfd06cb29 601
giovannivisentini 29:7a2dfd06cb29 602 return verify(M24SR::WritePwd, 0x10, pCurrentWritePassword);
giovannivisentini 29:7a2dfd06cb29 603 }
giovannivisentini 29:7a2dfd06cb29 604
giovannivisentini 29:7a2dfd06cb29 605 /**
giovannivisentini 29:7a2dfd06cb29 606 * @brief This function disables both read and write passwords.
giovannivisentini 29:7a2dfd06cb29 607 * @param pSuperUserPassword I2C super user password.
giovannivisentini 29:7a2dfd06cb29 608 * @return return M24SR_SUCCESS if no errors
giovannivisentini 29:7a2dfd06cb29 609 * @par The password must have a length of 16 chars.
giovannivisentini 29:7a2dfd06cb29 610 */
Davidroid 33:e6b7e74be1d5 611 StatusTypeDef disable_all_password(const uint8_t* pSuperUserPassword) {
giovannivisentini 29:7a2dfd06cb29 612 mComponentCallback = &mRemoveAllPasswordCallback;
giovannivisentini 29:7a2dfd06cb29 613 return verify(M24SR::I2CPwd, 0x10, pSuperUserPassword);
giovannivisentini 29:7a2dfd06cb29 614 }
giovannivisentini 29:7a2dfd06cb29 615
giovannivisentini 29:7a2dfd06cb29 616 /**
giovannivisentini 29:7a2dfd06cb29 617 * @brief This function enables read only mode.
giovannivisentini 29:7a2dfd06cb29 618 * @param pCurrentWritePassword Write password is needed to enable read only mode.
giovannivisentini 29:7a2dfd06cb29 619 * @return return M24SR_SUCCESS if no errors
giovannivisentini 29:7a2dfd06cb29 620 * @par The password must have a length of 16 chars.
giovannivisentini 29:7a2dfd06cb29 621 */
Davidroid 33:e6b7e74be1d5 622 StatusTypeDef enable_read_only(const uint8_t* pCurrentWritePassword) {
giovannivisentini 29:7a2dfd06cb29 623 mComponentCallback = &mChangeAccessStateCallback;
giovannivisentini 29:7a2dfd06cb29 624 //disable write = read only
giovannivisentini 29:7a2dfd06cb29 625 mChangeAccessStateCallback.change_access_state(ChangeAccessStateCallback::WRITE,false);
giovannivisentini 29:7a2dfd06cb29 626
giovannivisentini 29:7a2dfd06cb29 627 return verify(M24SR::WritePwd, 0x10, pCurrentWritePassword);
giovannivisentini 29:7a2dfd06cb29 628 }
giovannivisentini 29:7a2dfd06cb29 629
giovannivisentini 29:7a2dfd06cb29 630 /**
giovannivisentini 29:7a2dfd06cb29 631 * @brief This function disables read only mode.
giovannivisentini 29:7a2dfd06cb29 632 * @param pCurrentWritePassword Write password is needed to disable read only mode.
giovannivisentini 29:7a2dfd06cb29 633 * @return return M24SR_SUCCESS if no errors
giovannivisentini 29:7a2dfd06cb29 634 * @par The password must have a length of 16 chars.
giovannivisentini 29:7a2dfd06cb29 635 */
giovannivisentini 29:7a2dfd06cb29 636 StatusTypeDef disable_read_only(const uint8_t* pCurrentWritePassword) {
giovannivisentini 29:7a2dfd06cb29 637 mComponentCallback = &mChangeAccessStateCallback;
giovannivisentini 29:7a2dfd06cb29 638 mChangeAccessStateCallback.change_access_state(ChangeAccessStateCallback::WRITE,true);
Davidroid 33:e6b7e74be1d5 639
giovannivisentini 29:7a2dfd06cb29 640 return verify(M24SR::I2CPwd, 0x10,pCurrentWritePassword);
giovannivisentini 29:7a2dfd06cb29 641 }
giovannivisentini 29:7a2dfd06cb29 642
giovannivisentini 29:7a2dfd06cb29 643
giovannivisentini 29:7a2dfd06cb29 644 /**
giovannivisentini 29:7a2dfd06cb29 645 * @brief This function enables write only mode.
giovannivisentini 29:7a2dfd06cb29 646 * @param pCurrentWritePassword Write password is needed to enable write only mode.
giovannivisentini 29:7a2dfd06cb29 647 * @return return M24SR_SUCCESS if no errors
giovannivisentini 29:7a2dfd06cb29 648 * @par The password must have a length of 16 chars.
giovannivisentini 29:7a2dfd06cb29 649 */
giovannivisentini 29:7a2dfd06cb29 650 StatusTypeDef enable_write_only(const uint8_t* pCurrentWritePassword) {
giovannivisentini 29:7a2dfd06cb29 651 mComponentCallback = &mChangeAccessStateCallback;
giovannivisentini 29:7a2dfd06cb29 652 //disable read = enable write only
giovannivisentini 29:7a2dfd06cb29 653 mChangeAccessStateCallback.change_access_state(ChangeAccessStateCallback::READ,false);
giovannivisentini 29:7a2dfd06cb29 654
giovannivisentini 29:7a2dfd06cb29 655 return verify(M24SR::WritePwd, 0x10, pCurrentWritePassword);
giovannivisentini 29:7a2dfd06cb29 656 }
giovannivisentini 29:7a2dfd06cb29 657
giovannivisentini 29:7a2dfd06cb29 658 /**
giovannivisentini 29:7a2dfd06cb29 659 * @brief This function disables write only mode.
giovannivisentini 29:7a2dfd06cb29 660 * @param pCurrentWritePassword Write password is needed to disable write only mode.
giovannivisentini 29:7a2dfd06cb29 661 * @return return M24SR_SUCCESS if no errors
giovannivisentini 29:7a2dfd06cb29 662 * @par The password must have a length of 16 chars.
giovannivisentini 29:7a2dfd06cb29 663 */
giovannivisentini 29:7a2dfd06cb29 664 StatusTypeDef disable_write_only(const uint8_t* pCurrentWritePassword) {
giovannivisentini 29:7a2dfd06cb29 665 mComponentCallback = &mChangeAccessStateCallback;
giovannivisentini 29:7a2dfd06cb29 666 mChangeAccessStateCallback.change_access_state(ChangeAccessStateCallback::READ,true);
Davidroid 33:e6b7e74be1d5 667
giovannivisentini 29:7a2dfd06cb29 668 return verify(M24SR::I2CPwd, 0x10, pCurrentWritePassword);
giovannivisentini 29:7a2dfd06cb29 669 }
giovannivisentini 29:7a2dfd06cb29 670
giovannivisentini 29:7a2dfd06cb29 671
giovannivisentini 29:7a2dfd06cb29 672 /**
giovannivisentini 29:7a2dfd06cb29 673 * Get an implementation of NDefNfcTag to use the library NDefLib.
giovannivisentini 29:7a2dfd06cb29 674 * @return an object of type NdefNfcTag
giovannivisentini 29:7a2dfd06cb29 675 */
giovannivisentini 29:7a2dfd06cb29 676 NDefLib::NDefNfcTag& get_NDef_tag();
giovannivisentini 29:7a2dfd06cb29 677
giovannivisentini 29:7a2dfd06cb29 678
giovannivisentini 29:7a2dfd06cb29 679 protected:
giovannivisentini 29:7a2dfd06cb29 680
giovannivisentini 29:7a2dfd06cb29 681 /*** Protected Component Related Methods ***/
giovannivisentini 29:7a2dfd06cb29 682
giovannivisentini 29:7a2dfd06cb29 683 StatusTypeDef M24SR_Init(M24SR_InitTypeDef *);
giovannivisentini 29:7a2dfd06cb29 684 StatusTypeDef M24SR_ReadID(uint8_t *nfc_id);
giovannivisentini 29:7a2dfd06cb29 685 StatusTypeDef M24SR_GetSession(void);
giovannivisentini 29:7a2dfd06cb29 686 StatusTypeDef M24SR_ForceSession(void);
giovannivisentini 29:7a2dfd06cb29 687
giovannivisentini 29:7a2dfd06cb29 688 StatusTypeDef M24SR_Deselect(void);
giovannivisentini 29:7a2dfd06cb29 689 StatusTypeDef M24SR_ReceiveDeselect(void);
giovannivisentini 29:7a2dfd06cb29 690
giovannivisentini 29:7a2dfd06cb29 691 StatusTypeDef M24SR_SendSelectApplication(void);
giovannivisentini 29:7a2dfd06cb29 692 StatusTypeDef M24SR_ReceiveSelectApplication(void);
giovannivisentini 29:7a2dfd06cb29 693
giovannivisentini 29:7a2dfd06cb29 694 StatusTypeDef M24SR_SendSelectCCfile(void);
giovannivisentini 29:7a2dfd06cb29 695 StatusTypeDef M24SR_ReceiveSelectCCfile(void);
giovannivisentini 29:7a2dfd06cb29 696
giovannivisentini 29:7a2dfd06cb29 697 StatusTypeDef M24SR_SendSelectNDEFfile(uint16_t NDEFfileId);
giovannivisentini 29:7a2dfd06cb29 698 StatusTypeDef M24SR_ReceiveSelectNDEFfile();
giovannivisentini 29:7a2dfd06cb29 699
giovannivisentini 29:7a2dfd06cb29 700 StatusTypeDef M24SR_SendSelectSystemfile(void);
giovannivisentini 29:7a2dfd06cb29 701 StatusTypeDef M24SR_ReceiveSelectSystemfile(void);
giovannivisentini 29:7a2dfd06cb29 702
giovannivisentini 29:7a2dfd06cb29 703 StatusTypeDef M24SR_SendReadBinary(uint16_t Offset, uint8_t NbByteToRead,
giovannivisentini 29:7a2dfd06cb29 704 uint8_t *pBufferRead);
giovannivisentini 29:7a2dfd06cb29 705 StatusTypeDef M24SR_SendSTReadBinary(uint16_t Offset, uint8_t NbByteToRead,
giovannivisentini 29:7a2dfd06cb29 706 uint8_t *pBufferRead);
giovannivisentini 29:7a2dfd06cb29 707 StatusTypeDef M24SR_ReceiveReadBinary(void);
giovannivisentini 29:7a2dfd06cb29 708
giovannivisentini 29:7a2dfd06cb29 709 StatusTypeDef M24SR_SendUpdateBinary(uint16_t Offset, uint8_t NbByteToWrite,
giovannivisentini 29:7a2dfd06cb29 710 uint8_t *pDataToWrite);
giovannivisentini 29:7a2dfd06cb29 711 StatusTypeDef M24SR_ReceiveUpdateBinary();
giovannivisentini 29:7a2dfd06cb29 712
giovannivisentini 29:7a2dfd06cb29 713 StatusTypeDef M24SR_SendVerify(uint16_t uPwdId, uint8_t NbPwdByte,
giovannivisentini 29:7a2dfd06cb29 714 const uint8_t *pPwd);
giovannivisentini 29:7a2dfd06cb29 715 StatusTypeDef M24SR_ReceiveVerify();
giovannivisentini 29:7a2dfd06cb29 716
giovannivisentini 29:7a2dfd06cb29 717 StatusTypeDef M24SR_SendChangeReferenceData(uint16_t uPwdId, uint8_t *pPwd);
giovannivisentini 29:7a2dfd06cb29 718 StatusTypeDef M24SR_ReceiveChangeReferenceData();
giovannivisentini 29:7a2dfd06cb29 719
giovannivisentini 29:7a2dfd06cb29 720 StatusTypeDef M24SR_SendEnableVerificationRequirement(
giovannivisentini 29:7a2dfd06cb29 721 uint16_t uReadOrWrite);
giovannivisentini 29:7a2dfd06cb29 722 StatusTypeDef M24SR_ReceiveEnableVerificationRequirement();
giovannivisentini 29:7a2dfd06cb29 723
giovannivisentini 29:7a2dfd06cb29 724 StatusTypeDef M24SR_SendDisableVerificationRequirement(
giovannivisentini 29:7a2dfd06cb29 725 uint16_t uReadOrWrite);
giovannivisentini 29:7a2dfd06cb29 726 StatusTypeDef M24SR_ReceiveDisableVerificationRequirement();
giovannivisentini 29:7a2dfd06cb29 727
giovannivisentini 29:7a2dfd06cb29 728 StatusTypeDef M24SR_SendEnablePermanentState(uint16_t uReadOrWrite);
giovannivisentini 29:7a2dfd06cb29 729 StatusTypeDef M24SR_ReceiveEnablePermanentState();
giovannivisentini 29:7a2dfd06cb29 730
giovannivisentini 29:7a2dfd06cb29 731 StatusTypeDef M24SR_SendDisablePermanentState(uint16_t uReadOrWrite);
giovannivisentini 29:7a2dfd06cb29 732 StatusTypeDef M24SR_ReceiveDisablePermanentState();
giovannivisentini 29:7a2dfd06cb29 733
giovannivisentini 29:7a2dfd06cb29 734 StatusTypeDef M24SR_SendInterrupt(void);
giovannivisentini 29:7a2dfd06cb29 735 StatusTypeDef M24SR_StateControl(uint8_t uSetOrReset);
giovannivisentini 29:7a2dfd06cb29 736
giovannivisentini 29:7a2dfd06cb29 737 StatusTypeDef M24SR_ManageI2CGPO(NFC_GPO_MGMT GPO_I2Cconfig);
giovannivisentini 29:7a2dfd06cb29 738 StatusTypeDef M24SR_ManageRFGPO(NFC_GPO_MGMT GPO_RFconfig);
giovannivisentini 29:7a2dfd06cb29 739
giovannivisentini 29:7a2dfd06cb29 740 StatusTypeDef M24SR_RFConfig(uint8_t OnOffChoice);
giovannivisentini 29:7a2dfd06cb29 741 StatusTypeDef M24SR_SendFWTExtension(uint8_t FWTbyte);
giovannivisentini 29:7a2dfd06cb29 742
giovannivisentini 29:7a2dfd06cb29 743
giovannivisentini 29:7a2dfd06cb29 744 /**
giovannivisentini 29:7a2dfd06cb29 745 * Send a command to the component.
giovannivisentini 29:7a2dfd06cb29 746 * @param NbByte Length of the command.
giovannivisentini 29:7a2dfd06cb29 747 * @param pBuffer Buffer containing the command.
giovannivisentini 29:7a2dfd06cb29 748 * @return M24SR_SUCCESS if no errors
giovannivisentini 29:7a2dfd06cb29 749 */
giovannivisentini 29:7a2dfd06cb29 750 StatusTypeDef M24SR_IO_SendI2Ccommand(uint8_t NbByte, uint8_t *pBuffer);
giovannivisentini 29:7a2dfd06cb29 751
giovannivisentini 29:7a2dfd06cb29 752 /**
giovannivisentini 29:7a2dfd06cb29 753 * Read a command response.
giovannivisentini 29:7a2dfd06cb29 754 * @param NbByte Number of bytes to read.
giovannivisentini 29:7a2dfd06cb29 755 * @param pBuffer Buffer to store the response into.
giovannivisentini 29:7a2dfd06cb29 756 * @return M24SR_SUCCESS if no errors
giovannivisentini 29:7a2dfd06cb29 757 */
Davidroid 33:e6b7e74be1d5 758 StatusTypeDef M24SR_IO_ReceiveI2Cresponse(uint8_t NbByte, uint8_t *pBuffer);
giovannivisentini 29:7a2dfd06cb29 759
giovannivisentini 29:7a2dfd06cb29 760 /**
giovannivisentini 29:7a2dfd06cb29 761 * Do an active polling on the I2C bus until the answer is ready.
giovannivisentini 29:7a2dfd06cb29 762 * @return M24SR_SUCCESS if no errors
giovannivisentini 29:7a2dfd06cb29 763 */
giovannivisentini 29:7a2dfd06cb29 764 StatusTypeDef M24SR_IO_PollI2C(void);
giovannivisentini 29:7a2dfd06cb29 765
giovannivisentini 29:7a2dfd06cb29 766 /**
giovannivisentini 29:7a2dfd06cb29 767 * Read the gpo pin.
giovannivisentini 29:7a2dfd06cb29 768 * @param[out] pPinState Variable to store the pin state into.
giovannivisentini 29:7a2dfd06cb29 769 */
giovannivisentini 29:7a2dfd06cb29 770 void M24SR_IO_GPO_ReadPin(uint8_t *pPinState) {
Davidroid 33:e6b7e74be1d5 771 *pPinState = GPOPin.read();
giovannivisentini 29:7a2dfd06cb29 772 }
giovannivisentini 29:7a2dfd06cb29 773
giovannivisentini 29:7a2dfd06cb29 774 /**
giovannivisentini 29:7a2dfd06cb29 775 * Write the gpo pin.
giovannivisentini 29:7a2dfd06cb29 776 * @param pPinState Pin state to write.
giovannivisentini 29:7a2dfd06cb29 777 */
giovannivisentini 29:7a2dfd06cb29 778 void M24SR_IO_RFDIS_WritePin(uint8_t PinState) {
Davidroid 33:e6b7e74be1d5 779 if (PinState == 0) {
giovannivisentini 29:7a2dfd06cb29 780 RFDisablePin = 0;
Davidroid 33:e6b7e74be1d5 781 }
Davidroid 33:e6b7e74be1d5 782 else {
giovannivisentini 29:7a2dfd06cb29 783 RFDisablePin = 1;
Davidroid 33:e6b7e74be1d5 784 }
giovannivisentini 29:7a2dfd06cb29 785 }
giovannivisentini 29:7a2dfd06cb29 786
giovannivisentini 29:7a2dfd06cb29 787 /*** Component's Instance Variables ***/
giovannivisentini 29:7a2dfd06cb29 788
giovannivisentini 29:7a2dfd06cb29 789 /* Identity */
giovannivisentini 29:7a2dfd06cb29 790 uint8_t who_am_i;
giovannivisentini 29:7a2dfd06cb29 791
giovannivisentini 29:7a2dfd06cb29 792 /* Type */
giovannivisentini 29:7a2dfd06cb29 793 uint8_t type;
giovannivisentini 29:7a2dfd06cb29 794
giovannivisentini 29:7a2dfd06cb29 795 /* I2C address */
giovannivisentini 29:7a2dfd06cb29 796 uint8_t address;
giovannivisentini 29:7a2dfd06cb29 797
giovannivisentini 29:7a2dfd06cb29 798 /* IO Device. */
giovannivisentini 29:7a2dfd06cb29 799 I2C &dev_I2C;
giovannivisentini 29:7a2dfd06cb29 800
giovannivisentini 29:7a2dfd06cb29 801 /* GPIO */
giovannivisentini 29:7a2dfd06cb29 802 DigitalIn GPOPin;
giovannivisentini 29:7a2dfd06cb29 803
giovannivisentini 29:7a2dfd06cb29 804 /**
giovannivisentini 29:7a2dfd06cb29 805 * Pin used to disable the rf chip functionality.
giovannivisentini 29:7a2dfd06cb29 806 */
giovannivisentini 29:7a2dfd06cb29 807 DigitalOut RFDisablePin;
giovannivisentini 29:7a2dfd06cb29 808
giovannivisentini 29:7a2dfd06cb29 809 /**
giovannivisentini 29:7a2dfd06cb29 810 * Buffer used to build the command to send to the chip.
giovannivisentini 29:7a2dfd06cb29 811 */
giovannivisentini 29:7a2dfd06cb29 812 uint8_t uM24SRbuffer[0xFF];//max command length is 255
giovannivisentini 29:7a2dfd06cb29 813
giovannivisentini 29:7a2dfd06cb29 814 /**
giovannivisentini 29:7a2dfd06cb29 815 * ???
giovannivisentini 29:7a2dfd06cb29 816 */
giovannivisentini 29:7a2dfd06cb29 817 uint8_t uDIDbyte;
giovannivisentini 29:7a2dfd06cb29 818
giovannivisentini 29:7a2dfd06cb29 819
giovannivisentini 29:7a2dfd06cb29 820 /**
giovannivisentini 29:7a2dfd06cb29 821 * Command that the component can accept
giovannivisentini 29:7a2dfd06cb29 822 */
giovannivisentini 29:7a2dfd06cb29 823 typedef enum{
giovannivisentini 29:7a2dfd06cb29 824 NONE, //!< NONE
giovannivisentini 29:7a2dfd06cb29 825 DESELECT, //!< DESELECT
giovannivisentini 29:7a2dfd06cb29 826 SELECT_APPLICATION, //!< SELECT_APPLICATION
giovannivisentini 29:7a2dfd06cb29 827 SELECT_CC_FILE, //!< SELECT_CC_FILE
giovannivisentini 29:7a2dfd06cb29 828 SELECT_NDEF_FILE, //!< SELECT_NDEF_FILE
giovannivisentini 29:7a2dfd06cb29 829 SELECT_SYSTEM_FILE, //!< SELECT_SYSTEM_FILE
giovannivisentini 29:7a2dfd06cb29 830 READ, //!< READ
giovannivisentini 29:7a2dfd06cb29 831 UPDATE, //!< UPDATE
giovannivisentini 29:7a2dfd06cb29 832 VERIFY, //!< VERIFY
giovannivisentini 29:7a2dfd06cb29 833 MANAGE_I2C_GPO, //!< MANAGE_I2C_GPO
giovannivisentini 29:7a2dfd06cb29 834 MANAGE_RF_GPO, //!< MANAGE_RF_GPO
giovannivisentini 29:7a2dfd06cb29 835 CHANGE_REFERENCE_DATA, //!< CHANGE_REFERENCE_DATA
giovannivisentini 29:7a2dfd06cb29 836 ENABLE_VERIFICATION_REQUIREMENT, //!< ENABLE_VERIFICATION_REQUIREMENT
giovannivisentini 29:7a2dfd06cb29 837 DISABLE_VERIFICATION_REQUIREMENT,//!< DISABLE_VERIFICATION_REQUIREMENT
giovannivisentini 29:7a2dfd06cb29 838 ENABLE_PERMANET_STATE, //!< ENABLE_PERMANET_STATE
giovannivisentini 29:7a2dfd06cb29 839 DISABLE_PERMANET_STATE, //!< DISABLE_PERMANET_STATE
giovannivisentini 29:7a2dfd06cb29 840 }M24SR_command_t;
giovannivisentini 29:7a2dfd06cb29 841
giovannivisentini 29:7a2dfd06cb29 842 /**
giovannivisentini 29:7a2dfd06cb29 843 * User parameter used to invoke a command,
giovannivisentini 29:7a2dfd06cb29 844 * it is used to provide the data back with the response
giovannivisentini 29:7a2dfd06cb29 845 */
giovannivisentini 29:7a2dfd06cb29 846 typedef struct{
giovannivisentini 29:7a2dfd06cb29 847 uint8_t *data; //!< data
giovannivisentini 29:7a2dfd06cb29 848 uint16_t length; //!< number of bytes in the data array
giovannivisentini 29:7a2dfd06cb29 849 uint16_t offset; //!< offset parameter used in the read/write command
giovannivisentini 29:7a2dfd06cb29 850 }M24SR_command_data_t;
giovannivisentini 29:7a2dfd06cb29 851
giovannivisentini 29:7a2dfd06cb29 852 /**
giovannivisentini 29:7a2dfd06cb29 853 * Communication mode used by this device
giovannivisentini 29:7a2dfd06cb29 854 */
giovannivisentini 29:7a2dfd06cb29 855 typedef enum{
giovannivisentini 29:7a2dfd06cb29 856 SYNC,//!< SYNC wait the command response before returning
giovannivisentini 29:7a2dfd06cb29 857 ASYNC//!< ASYNC use a callback to notify the end of a command
giovannivisentini 29:7a2dfd06cb29 858 }M24SR_communication_t;
giovannivisentini 29:7a2dfd06cb29 859
giovannivisentini 29:7a2dfd06cb29 860 /**
giovannivisentini 29:7a2dfd06cb29 861 * Type of communication being used
giovannivisentini 29:7a2dfd06cb29 862 */
giovannivisentini 29:7a2dfd06cb29 863 M24SR_communication_t mCommunicationType;
giovannivisentini 29:7a2dfd06cb29 864
giovannivisentini 29:7a2dfd06cb29 865 /**
giovannivisentini 29:7a2dfd06cb29 866 * Last pending command
giovannivisentini 29:7a2dfd06cb29 867 */
giovannivisentini 29:7a2dfd06cb29 868 M24SR_command_t mLastCommandSend;
giovannivisentini 29:7a2dfd06cb29 869
giovannivisentini 29:7a2dfd06cb29 870 /**
giovannivisentini 29:7a2dfd06cb29 871 * Parameter used to invoke the last command
giovannivisentini 29:7a2dfd06cb29 872 */
giovannivisentini 29:7a2dfd06cb29 873 M24SR_command_data_t mLastCommandData;
giovannivisentini 29:7a2dfd06cb29 874
giovannivisentini 29:7a2dfd06cb29 875 /**
giovannivisentini 29:7a2dfd06cb29 876 * Interrupt object fired when the gpo status changes
giovannivisentini 29:7a2dfd06cb29 877 */
giovannivisentini 29:7a2dfd06cb29 878 InterruptIn mGpoEventInterrupt;
giovannivisentini 29:7a2dfd06cb29 879
giovannivisentini 29:7a2dfd06cb29 880 /** object containing the callbacks to use*/
giovannivisentini 29:7a2dfd06cb29 881 Callbacks *mCallback;
giovannivisentini 29:7a2dfd06cb29 882
giovannivisentini 29:7a2dfd06cb29 883 /**
giovannivisentini 29:7a2dfd06cb29 884 * Object with private callbacks used to hide high level commands each
giovannivisentini 29:7a2dfd06cb29 885 * calling multiple low level commands. This callbacks object has
giovannivisentini 29:7a2dfd06cb29 886 * higher priority comparing to the user callbacks.
giovannivisentini 29:7a2dfd06cb29 887 */
giovannivisentini 29:7a2dfd06cb29 888 Callbacks *mComponentCallback;
giovannivisentini 29:7a2dfd06cb29 889
giovannivisentini 29:7a2dfd06cb29 890 /**
giovannivisentini 29:7a2dfd06cb29 891 * Object implementing the interface to use the NDefLib.
giovannivisentini 29:7a2dfd06cb29 892 */
giovannivisentini 29:7a2dfd06cb29 893 NDefNfcTagM24SR *mNDefTagUtil;
giovannivisentini 29:7a2dfd06cb29 894
giovannivisentini 29:7a2dfd06cb29 895 /**
giovannivisentini 29:7a2dfd06cb29 896 * get the callback object to use
giovannivisentini 29:7a2dfd06cb29 897 * @return callback object to use
giovannivisentini 29:7a2dfd06cb29 898 */
Davidroid 33:e6b7e74be1d5 899 Callbacks * getCallback() {
Davidroid 33:e6b7e74be1d5 900 if (mComponentCallback != NULL) {
giovannivisentini 29:7a2dfd06cb29 901 return mComponentCallback;
Davidroid 33:e6b7e74be1d5 902 }
giovannivisentini 29:7a2dfd06cb29 903 return mCallback;
giovannivisentini 29:7a2dfd06cb29 904 }//getCallback
giovannivisentini 29:7a2dfd06cb29 905
giovannivisentini 29:7a2dfd06cb29 906 private:
giovannivisentini 29:7a2dfd06cb29 907 /** object containing empty callback to use in the default case*/
giovannivisentini 29:7a2dfd06cb29 908 Callbacks defaultCallback;
giovannivisentini 29:7a2dfd06cb29 909
giovannivisentini 29:7a2dfd06cb29 910
giovannivisentini 29:7a2dfd06cb29 911 /**
giovannivisentini 29:7a2dfd06cb29 912 * This class permits to enable/disable the password request to read/write into the tag
giovannivisentini 29:7a2dfd06cb29 913 * This class is equivalent to calling the methods:
giovannivisentini 29:7a2dfd06cb29 914 * To enable the request:
giovannivisentini 29:7a2dfd06cb29 915 * <ul>
giovannivisentini 29:7a2dfd06cb29 916 * <li> Verify </li>
giovannivisentini 29:7a2dfd06cb29 917 * <li> ChangeReferenceData </li>
giovannivisentini 29:7a2dfd06cb29 918 * <li> EnablePermanentState </li>
giovannivisentini 29:7a2dfd06cb29 919 * </ul>
giovannivisentini 29:7a2dfd06cb29 920 * To disable the request:
giovannivisentini 29:7a2dfd06cb29 921 * <ul>
giovannivisentini 29:7a2dfd06cb29 922 * <li> Verify </li>
giovannivisentini 29:7a2dfd06cb29 923 * <li> disable_verification_requirement </li>
giovannivisentini 29:7a2dfd06cb29 924 * </ul>
giovannivisentini 29:7a2dfd06cb29 925 */
Davidroid 33:e6b7e74be1d5 926 class ChangePasswordRequestStatusCallback : public Callbacks {
giovannivisentini 29:7a2dfd06cb29 927
giovannivisentini 29:7a2dfd06cb29 928 public:
giovannivisentini 29:7a2dfd06cb29 929
giovannivisentini 29:7a2dfd06cb29 930 /**
giovannivisentini 29:7a2dfd06cb29 931 * Build the chain of callbacks.
giovannivisentini 29:7a2dfd06cb29 932 */
giovannivisentini 29:7a2dfd06cb29 933 ChangePasswordRequestStatusCallback():
Davidroid 33:e6b7e74be1d5 934 mNewPwd(NULL), mType(I2CPwd),mEnable(false) {}
giovannivisentini 29:7a2dfd06cb29 935
giovannivisentini 29:7a2dfd06cb29 936 /**
giovannivisentini 29:7a2dfd06cb29 937 * Set the password to enable/disable.
giovannivisentini 29:7a2dfd06cb29 938 * @param type Type of password to enable/disable.
giovannivisentini 29:7a2dfd06cb29 939 * @param newPwd Array of 16bytes with the new password, if null the request will be disabled.
giovannivisentini 29:7a2dfd06cb29 940 */
Davidroid 33:e6b7e74be1d5 941 void set_task(PasswordType_t type, const uint8_t *newPwd) {
giovannivisentini 29:7a2dfd06cb29 942 mNewPwd=newPwd;
giovannivisentini 29:7a2dfd06cb29 943 mType=type;
giovannivisentini 29:7a2dfd06cb29 944 mEnable=newPwd!=NULL;
giovannivisentini 29:7a2dfd06cb29 945 }//setTask
giovannivisentini 29:7a2dfd06cb29 946
giovannivisentini 29:7a2dfd06cb29 947 virtual void on_verified(M24SR *nfc, StatusTypeDef status,PasswordType_t ,
Davidroid 33:e6b7e74be1d5 948 const uint8_t *) {
Davidroid 33:e6b7e74be1d5 949 if (status!=M24SR_SUCCESS) {
giovannivisentini 29:7a2dfd06cb29 950 return onFinishCommand(nfc,status);
Davidroid 33:e6b7e74be1d5 951 }
Davidroid 33:e6b7e74be1d5 952 if (mEnable) {
giovannivisentini 29:7a2dfd06cb29 953 nfc->change_reference_data(mType,mNewPwd);
Davidroid 33:e6b7e74be1d5 954 } else {
giovannivisentini 29:7a2dfd06cb29 955 nfc->disable_verification_requirement(mType);
Davidroid 33:e6b7e74be1d5 956 }
giovannivisentini 29:7a2dfd06cb29 957 }
giovannivisentini 29:7a2dfd06cb29 958
giovannivisentini 29:7a2dfd06cb29 959 virtual void on_disable_verification_requirement(M24SR *nfc,
Davidroid 33:e6b7e74be1d5 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,
Davidroid 33:e6b7e74be1d5 966 uint8_t *) {
Davidroid 33:e6b7e74be1d5 967 if (status==M24SR_SUCCESS) {
giovannivisentini 29:7a2dfd06cb29 968 nfc->enable_permanent_state(type);
Davidroid 33:e6b7e74be1d5 969 } else {
giovannivisentini 29:7a2dfd06cb29 970 onFinishCommand(nfc,status);
Davidroid 33:e6b7e74be1d5 971 }
giovannivisentini 29:7a2dfd06cb29 972 }
giovannivisentini 29:7a2dfd06cb29 973
giovannivisentini 29:7a2dfd06cb29 974 virtual void on_enable_permanent_state(M24SR *nfc, StatusTypeDef status,
Davidroid 33:e6b7e74be1d5 975 PasswordType_t ) {
giovannivisentini 29:7a2dfd06cb29 976 onFinishCommand(nfc,status);
giovannivisentini 29:7a2dfd06cb29 977 }
giovannivisentini 29:7a2dfd06cb29 978
giovannivisentini 29:7a2dfd06cb29 979
giovannivisentini 29:7a2dfd06cb29 980 private:
giovannivisentini 29:7a2dfd06cb29 981
giovannivisentini 29:7a2dfd06cb29 982 /**
giovannivisentini 29:7a2dfd06cb29 983 * Remove the private callbacks and call the user callback.
giovannivisentini 29:7a2dfd06cb29 984 * @param nfc Object triggering the command.
giovannivisentini 29:7a2dfd06cb29 985 * @param status Command status.
giovannivisentini 29:7a2dfd06cb29 986 */
Davidroid 33:e6b7e74be1d5 987 void onFinishCommand(M24SR *nfc,StatusTypeDef status) {
giovannivisentini 29:7a2dfd06cb29 988 nfc->mComponentCallback=NULL;
giovannivisentini 29:7a2dfd06cb29 989
Davidroid 33:e6b7e74be1d5 990 if (mEnable) {
Davidroid 33:e6b7e74be1d5 991 if (mType==ReadPwd) {
giovannivisentini 29:7a2dfd06cb29 992 nfc->getCallback()->on_enable_read_password(nfc,status,mNewPwd);
Davidroid 33:e6b7e74be1d5 993 } else {
giovannivisentini 29:7a2dfd06cb29 994 nfc->getCallback()->on_enable_write_password(nfc,status,mNewPwd);
Davidroid 33:e6b7e74be1d5 995 }
Davidroid 33:e6b7e74be1d5 996 } else {
Davidroid 33:e6b7e74be1d5 997 if (mType==ReadPwd) {
giovannivisentini 29:7a2dfd06cb29 998 nfc->getCallback()->on_disable_read_password(nfc,status);
Davidroid 33:e6b7e74be1d5 999 } else {
giovannivisentini 29:7a2dfd06cb29 1000 nfc->getCallback()->on_disable_write_password(nfc,status);
Davidroid 33:e6b7e74be1d5 1001 }
giovannivisentini 29:7a2dfd06cb29 1002 }//if-else enable
giovannivisentini 29:7a2dfd06cb29 1003 }//onFinish
giovannivisentini 29:7a2dfd06cb29 1004
giovannivisentini 29:7a2dfd06cb29 1005 const uint8_t *mNewPwd;
giovannivisentini 29:7a2dfd06cb29 1006 PasswordType_t mType;
giovannivisentini 29:7a2dfd06cb29 1007 bool mEnable;
giovannivisentini 29:7a2dfd06cb29 1008
Davidroid 33:e6b7e74be1d5 1009 };
giovannivisentini 29:7a2dfd06cb29 1010
Davidroid 33:e6b7e74be1d5 1011 /**
Davidroid 33:e6b7e74be1d5 1012 * Object containing the callback chain needed to change the password request
Davidroid 33:e6b7e74be1d5 1013 */
Davidroid 33:e6b7e74be1d5 1014 ChangePasswordRequestStatusCallback mChangePasswordRequestStatusCallback;
Davidroid 33:e6b7e74be1d5 1015 friend class ChangePasswordRequestStatusCallback;
giovannivisentini 29:7a2dfd06cb29 1016
Davidroid 33:e6b7e74be1d5 1017 /**
Davidroid 33:e6b7e74be1d5 1018 * This class permits to disable all the password requests to read/write into the tag
Davidroid 33:e6b7e74be1d5 1019 * This class is equivalent to calling the methods:
Davidroid 33:e6b7e74be1d5 1020 * <ul>
Davidroid 33:e6b7e74be1d5 1021 * <li> Verify(i2c) </li>
Davidroid 33:e6b7e74be1d5 1022 * <li> DisablePermanentState(Read) </li>
Davidroid 33:e6b7e74be1d5 1023 * <li> DisablePermanentState(write) </li>
Davidroid 33:e6b7e74be1d5 1024 * <li> disable_verification_requirement(Read) </li>
Davidroid 33:e6b7e74be1d5 1025 * <li> disable_verification_requirement(write) </li>
Davidroid 33:e6b7e74be1d5 1026 * <li> ChangeReferenceData(Read) </li>
Davidroid 33:e6b7e74be1d5 1027 * <li> ChangeReferenceData(write) </li>
Davidroid 33:e6b7e74be1d5 1028 * </ul>
Davidroid 33:e6b7e74be1d5 1029 */
Davidroid 33:e6b7e74be1d5 1030 class RemoveAllPasswordCallback : public Callbacks{
giovannivisentini 29:7a2dfd06cb29 1031
giovannivisentini 29:7a2dfd06cb29 1032 /**
Davidroid 33:e6b7e74be1d5 1033 * Store the default password used for open a super user session
Davidroid 33:e6b7e74be1d5 1034 * it will be set as default read/write password
giovannivisentini 29:7a2dfd06cb29 1035 */
Davidroid 33:e6b7e74be1d5 1036 const uint8_t *mI2CPwd;
Davidroid 33:e6b7e74be1d5 1037
Davidroid 33:e6b7e74be1d5 1038 public:
Davidroid 33:e6b7e74be1d5 1039
Davidroid 33:e6b7e74be1d5 1040 /**
Davidroid 33:e6b7e74be1d5 1041 * Build the chain of callbacks.
Davidroid 33:e6b7e74be1d5 1042 */
Davidroid 33:e6b7e74be1d5 1043 RemoveAllPasswordCallback():mI2CPwd(NULL) {}
giovannivisentini 29:7a2dfd06cb29 1044
Davidroid 33:e6b7e74be1d5 1045 virtual void on_verified(M24SR *nfc,StatusTypeDef status,
Davidroid 33:e6b7e74be1d5 1046 PasswordType_t,const uint8_t* data) {
Davidroid 33:e6b7e74be1d5 1047 if (status!=M24SR_SUCCESS) {
Davidroid 33:e6b7e74be1d5 1048 return onFinishCommand(nfc,status);
Davidroid 33:e6b7e74be1d5 1049 }
Davidroid 33:e6b7e74be1d5 1050 mI2CPwd = data;
Davidroid 33:e6b7e74be1d5 1051 nfc->disable_permanent_state(ReadPwd);
Davidroid 33:e6b7e74be1d5 1052 }
giovannivisentini 29:7a2dfd06cb29 1053
Davidroid 33:e6b7e74be1d5 1054 virtual void on_disable_permanent_state(M24SR *nfc , StatusTypeDef status,
Davidroid 33:e6b7e74be1d5 1055 PasswordType_t type) {
Davidroid 33:e6b7e74be1d5 1056 if (status!=M24SR_SUCCESS) {
Davidroid 33:e6b7e74be1d5 1057 return onFinishCommand(nfc,status);
Davidroid 33:e6b7e74be1d5 1058 }
Davidroid 33:e6b7e74be1d5 1059 if (type==ReadPwd) {
Davidroid 33:e6b7e74be1d5 1060 nfc->disable_permanent_state(WritePwd);
Davidroid 33:e6b7e74be1d5 1061 } else {
Davidroid 33:e6b7e74be1d5 1062 nfc->disable_verification_requirement(ReadPwd);
Davidroid 33:e6b7e74be1d5 1063 }
Davidroid 33:e6b7e74be1d5 1064 }
Davidroid 33:e6b7e74be1d5 1065
Davidroid 33:e6b7e74be1d5 1066 virtual void on_disable_verification_requirement(M24SR *nfc ,
Davidroid 33:e6b7e74be1d5 1067 StatusTypeDef status,PasswordType_t type) {
Davidroid 33:e6b7e74be1d5 1068 if (status!=M24SR_SUCCESS) {
Davidroid 33:e6b7e74be1d5 1069 return onFinishCommand(nfc,status);
Davidroid 33:e6b7e74be1d5 1070 }
Davidroid 33:e6b7e74be1d5 1071 if (type==ReadPwd) {
Davidroid 33:e6b7e74be1d5 1072 nfc->disable_verification_requirement(WritePwd);
Davidroid 33:e6b7e74be1d5 1073 } else {
Davidroid 33:e6b7e74be1d5 1074 nfc->change_reference_data(ReadPwd,mI2CPwd);
Davidroid 33:e6b7e74be1d5 1075 }
Davidroid 33:e6b7e74be1d5 1076 }
Davidroid 33:e6b7e74be1d5 1077
Davidroid 33:e6b7e74be1d5 1078 virtual void on_change_reference_data(M24SR *nfc ,StatusTypeDef status,PasswordType_t type,
Davidroid 33:e6b7e74be1d5 1079 uint8_t *data) {
Davidroid 33:e6b7e74be1d5 1080 if (status!=M24SR_SUCCESS) {
Davidroid 33:e6b7e74be1d5 1081 return onFinishCommand(nfc,status);
Davidroid 33:e6b7e74be1d5 1082 }
Davidroid 33:e6b7e74be1d5 1083 if (type==ReadPwd) {
Davidroid 33:e6b7e74be1d5 1084 nfc->change_reference_data(WritePwd,data);
Davidroid 33:e6b7e74be1d5 1085 } else {
Davidroid 33:e6b7e74be1d5 1086 onFinishCommand(nfc,status);
Davidroid 33:e6b7e74be1d5 1087 }
Davidroid 33:e6b7e74be1d5 1088 }
Davidroid 33:e6b7e74be1d5 1089
Davidroid 33:e6b7e74be1d5 1090 private:
giovannivisentini 29:7a2dfd06cb29 1091
Davidroid 33:e6b7e74be1d5 1092 /**
Davidroid 33:e6b7e74be1d5 1093 * Remove the private callback and call the onDisableAllPassword callback.
Davidroid 33:e6b7e74be1d5 1094 * @param nfc Object triggering the command.
Davidroid 33:e6b7e74be1d5 1095 * @param status Command status.
Davidroid 33:e6b7e74be1d5 1096 */
Davidroid 33:e6b7e74be1d5 1097 void onFinishCommand(M24SR *nfc,StatusTypeDef status) {
Davidroid 33:e6b7e74be1d5 1098 nfc->mComponentCallback=NULL;
Davidroid 33:e6b7e74be1d5 1099 mI2CPwd=NULL;
Davidroid 33:e6b7e74be1d5 1100 nfc->getCallback()->on_disable_all_password(nfc,status);
Davidroid 33:e6b7e74be1d5 1101 }//onFinish
Davidroid 33:e6b7e74be1d5 1102
Davidroid 33:e6b7e74be1d5 1103 };
Davidroid 33:e6b7e74be1d5 1104
Davidroid 33:e6b7e74be1d5 1105
Davidroid 33:e6b7e74be1d5 1106 /**
Davidroid 33:e6b7e74be1d5 1107 * Object containing the callback chain needed to remove the password request
Davidroid 33:e6b7e74be1d5 1108 */
Davidroid 33:e6b7e74be1d5 1109 RemoveAllPasswordCallback mRemoveAllPasswordCallback;
Davidroid 33:e6b7e74be1d5 1110 friend class RemoveAllPasswordCallback;
giovannivisentini 29:7a2dfd06cb29 1111
Davidroid 33:e6b7e74be1d5 1112 /**
Davidroid 33:e6b7e74be1d5 1113 * This class permits to set the tag as read/write only
Davidroid 33:e6b7e74be1d5 1114 * This class is equivalent to calling the methods:
Davidroid 33:e6b7e74be1d5 1115 * <ul>
Davidroid 33:e6b7e74be1d5 1116 * <li> Verify(i2c) </li>
Davidroid 33:e6b7e74be1d5 1117 * <li> EnablePermanentState(Read/write) </li>
Davidroid 33:e6b7e74be1d5 1118 * </ul>
Davidroid 33:e6b7e74be1d5 1119 * or:
Davidroid 33:e6b7e74be1d5 1120 * <ul>
Davidroid 33:e6b7e74be1d5 1121 * <li> Verify(i2c) </li>
Davidroid 33:e6b7e74be1d5 1122 * <li> DisablePermanentState</li>
Davidroid 33:e6b7e74be1d5 1123 * <li> disable_verification_requirement(Read/write) </li>
Davidroid 33:e6b7e74be1d5 1124 * </ul>
Davidroid 33:e6b7e74be1d5 1125 */
Davidroid 33:e6b7e74be1d5 1126 class ChangeAccessStateCallback : public Callbacks{
Davidroid 33:e6b7e74be1d5 1127
Davidroid 33:e6b7e74be1d5 1128 public:
giovannivisentini 29:7a2dfd06cb29 1129
Davidroid 33:e6b7e74be1d5 1130 typedef enum{
Davidroid 33:e6b7e74be1d5 1131 WRITE,
Davidroid 33:e6b7e74be1d5 1132 READ
Davidroid 33:e6b7e74be1d5 1133 }AccessType_t;
Davidroid 33:e6b7e74be1d5 1134
Davidroid 33:e6b7e74be1d5 1135 /**
Davidroid 33:e6b7e74be1d5 1136 * Build the chain of callbacks.
Davidroid 33:e6b7e74be1d5 1137 */
Davidroid 33:e6b7e74be1d5 1138 ChangeAccessStateCallback():mType(WRITE),mEnable(false) {}
giovannivisentini 29:7a2dfd06cb29 1139
Davidroid 33:e6b7e74be1d5 1140 /**
Davidroid 33:e6b7e74be1d5 1141 * Set the access to enable/disable an access type.
Davidroid 33:e6b7e74be1d5 1142 * @param type Access type.
Davidroid 33:e6b7e74be1d5 1143 * @param enable True to enable the state, False to disable it.
Davidroid 33:e6b7e74be1d5 1144 */
Davidroid 33:e6b7e74be1d5 1145 void change_access_state(AccessType_t type,bool enable) {
Davidroid 33:e6b7e74be1d5 1146 mType=type;
Davidroid 33:e6b7e74be1d5 1147 mEnable=enable;
Davidroid 33:e6b7e74be1d5 1148 }
giovannivisentini 29:7a2dfd06cb29 1149
Davidroid 33:e6b7e74be1d5 1150 virtual void on_verified(M24SR *nfc,StatusTypeDef status,
Davidroid 33:e6b7e74be1d5 1151 PasswordType_t,const uint8_t*) {
Davidroid 33:e6b7e74be1d5 1152 if (status!=M24SR_SUCCESS){
Davidroid 33:e6b7e74be1d5 1153 return onFinishCommand(nfc,status);
giovannivisentini 29:7a2dfd06cb29 1154 }
giovannivisentini 29:7a2dfd06cb29 1155
Davidroid 33:e6b7e74be1d5 1156 if (mEnable) {
Davidroid 33:e6b7e74be1d5 1157 nfc->disable_permanent_state(mType==WRITE? WritePwd : ReadPwd);
Davidroid 33:e6b7e74be1d5 1158 } else {
Davidroid 33:e6b7e74be1d5 1159 nfc->enable_permanent_state(mType==WRITE? WritePwd : ReadPwd);
giovannivisentini 29:7a2dfd06cb29 1160 }
giovannivisentini 29:7a2dfd06cb29 1161
Davidroid 33:e6b7e74be1d5 1162 }
Davidroid 33:e6b7e74be1d5 1163
Davidroid 33:e6b7e74be1d5 1164 virtual void on_disable_permanent_state(M24SR *nfc, StatusTypeDef status,
Davidroid 33:e6b7e74be1d5 1165 PasswordType_t type ) {
Davidroid 33:e6b7e74be1d5 1166 if (status!=M24SR_SUCCESS) {
Davidroid 33:e6b7e74be1d5 1167 return onFinishCommand(nfc,status);
giovannivisentini 29:7a2dfd06cb29 1168 }
giovannivisentini 29:7a2dfd06cb29 1169
Davidroid 33:e6b7e74be1d5 1170 nfc->disable_verification_requirement(type);
Davidroid 33:e6b7e74be1d5 1171 }
Davidroid 33:e6b7e74be1d5 1172
Davidroid 33:e6b7e74be1d5 1173 virtual void on_disable_verification_requirement(M24SR *nfc , StatusTypeDef status, PasswordType_t ) {
Davidroid 33:e6b7e74be1d5 1174 onFinishCommand(nfc,status);
Davidroid 33:e6b7e74be1d5 1175 }
Davidroid 33:e6b7e74be1d5 1176
Davidroid 33:e6b7e74be1d5 1177 virtual void on_enable_permanent_state(M24SR *nfc ,StatusTypeDef status,PasswordType_t ) {
Davidroid 33:e6b7e74be1d5 1178 onFinishCommand(nfc,status);
Davidroid 33:e6b7e74be1d5 1179 }
giovannivisentini 29:7a2dfd06cb29 1180
giovannivisentini 29:7a2dfd06cb29 1181
Davidroid 33:e6b7e74be1d5 1182 private:
giovannivisentini 29:7a2dfd06cb29 1183
Davidroid 33:e6b7e74be1d5 1184 /**
Davidroid 33:e6b7e74be1d5 1185 * Remove the private callback and call the user callback.
Davidroid 33:e6b7e74be1d5 1186 * @param nfc Object triggering the command.
Davidroid 33:e6b7e74be1d5 1187 * @param status Command status.
Davidroid 33:e6b7e74be1d5 1188 */
Davidroid 33:e6b7e74be1d5 1189 void onFinishCommand(M24SR *nfc,StatusTypeDef status) {
Davidroid 33:e6b7e74be1d5 1190 nfc->mComponentCallback=NULL;
Davidroid 33:e6b7e74be1d5 1191 if (mEnable) {
Davidroid 33:e6b7e74be1d5 1192 if (mType==READ) {
Davidroid 33:e6b7e74be1d5 1193 //enable read = disable write only
Davidroid 33:e6b7e74be1d5 1194 nfc->getCallback()->on_disable_write_only(nfc,status);
Davidroid 33:e6b7e74be1d5 1195 } else {}
Davidroid 33:e6b7e74be1d5 1196 //enable write = disable read only
Davidroid 33:e6b7e74be1d5 1197 nfc->getCallback()->on_disable_read_only(nfc,status);
Davidroid 33:e6b7e74be1d5 1198 }
Davidroid 33:e6b7e74be1d5 1199 } else {
Davidroid 33:e6b7e74be1d5 1200 if (mType==WRITE) {
Davidroid 33:e6b7e74be1d5 1201 //disable write = enable read only
Davidroid 33:e6b7e74be1d5 1202 nfc->getCallback()->on_enable_read_only(nfc,status);
Davidroid 33:e6b7e74be1d5 1203 } else {
Davidroid 33:e6b7e74be1d5 1204 //
Davidroid 33:e6b7e74be1d5 1205 nfc->getCallback()->on_enable_write_only(nfc,status);
Davidroid 33:e6b7e74be1d5 1206 }
Davidroid 33:e6b7e74be1d5 1207 }//if-else enable
Davidroid 33:e6b7e74be1d5 1208 }//onFinish
giovannivisentini 29:7a2dfd06cb29 1209
Davidroid 33:e6b7e74be1d5 1210 AccessType_t mType;
Davidroid 33:e6b7e74be1d5 1211 bool mEnable;
Davidroid 33:e6b7e74be1d5 1212 };
giovannivisentini 29:7a2dfd06cb29 1213
giovannivisentini 29:7a2dfd06cb29 1214
Davidroid 33:e6b7e74be1d5 1215 /**
Davidroid 33:e6b7e74be1d5 1216 * Object containing the callback chain needed to change the access state
Davidroid 33:e6b7e74be1d5 1217 */
Davidroid 33:e6b7e74be1d5 1218 ChangeAccessStateCallback mChangeAccessStateCallback;
Davidroid 33:e6b7e74be1d5 1219 friend class ChangeAccessStateCallback;
giovannivisentini 29:7a2dfd06cb29 1220
giovannivisentini 29:7a2dfd06cb29 1221
giovannivisentini 29:7a2dfd06cb29 1222 /**
giovannivisentini 29:7a2dfd06cb29 1223 * Object with the callback used to send a ManageGPO command.
giovannivisentini 29:7a2dfd06cb29 1224 * This class is equivalent to calling the methods:
giovannivisentini 29:7a2dfd06cb29 1225 * <ul>
giovannivisentini 29:7a2dfd06cb29 1226 * <li> SelectedApplication </li>
giovannivisentini 29:7a2dfd06cb29 1227 * <li> SelectSystemfile </li>
giovannivisentini 29:7a2dfd06cb29 1228 * <li> ReadBinar: read the old value </li>
giovannivisentini 29:7a2dfd06cb29 1229 * <li> onVerified </li>
giovannivisentini 29:7a2dfd06cb29 1230 * <li> onUpdatedBinary: write the new value</li>
giovannivisentini 29:7a2dfd06cb29 1231 * </ul>
giovannivisentini 29:7a2dfd06cb29 1232 */
giovannivisentini 29:7a2dfd06cb29 1233 class ManageGPOCallback : public Callbacks{
giovannivisentini 29:7a2dfd06cb29 1234
giovannivisentini 29:7a2dfd06cb29 1235 public:
giovannivisentini 29:7a2dfd06cb29 1236
giovannivisentini 29:7a2dfd06cb29 1237 /**
giovannivisentini 29:7a2dfd06cb29 1238 * Build the chain of callbacks.
giovannivisentini 29:7a2dfd06cb29 1239 * @param parent Parent component to run the command on.
giovannivisentini 29:7a2dfd06cb29 1240 */
giovannivisentini 29:7a2dfd06cb29 1241 ManageGPOCallback(M24SR &parent):mParent(parent),
Davidroid 33:e6b7e74be1d5 1242 mGpoConfig(HIGH_IMPEDANCE),mReadGpoConfig(0),mI2CGpo(true) {}
giovannivisentini 29:7a2dfd06cb29 1243
giovannivisentini 29:7a2dfd06cb29 1244
giovannivisentini 29:7a2dfd06cb29 1245 /**
giovannivisentini 29:7a2dfd06cb29 1246 * Command parameters.
giovannivisentini 29:7a2dfd06cb29 1247 * @param i2cGpo true to change the i2c gpo, false for the rf gpo.
giovannivisentini 29:7a2dfd06cb29 1248 * @param newConfig new gpo function.
giovannivisentini 29:7a2dfd06cb29 1249 */
Davidroid 33:e6b7e74be1d5 1250 void set_new_GPO_config(bool i2cGpo,NFC_GPO_MGMT newConfig) {
giovannivisentini 29:7a2dfd06cb29 1251 mGpoConfig=newConfig;
giovannivisentini 29:7a2dfd06cb29 1252 mI2CGpo =i2cGpo;
giovannivisentini 29:7a2dfd06cb29 1253 }
giovannivisentini 29:7a2dfd06cb29 1254
Davidroid 33:e6b7e74be1d5 1255 virtual void on_selected_application(M24SR *nfc,StatusTypeDef status) {
Davidroid 33:e6b7e74be1d5 1256 if (status==M24SR_SUCCESS) {
giovannivisentini 29:7a2dfd06cb29 1257 nfc->select_system_file();
Davidroid 33:e6b7e74be1d5 1258 } else {
giovannivisentini 29:7a2dfd06cb29 1259 onFinishCommand(nfc,status);
Davidroid 33:e6b7e74be1d5 1260 }
giovannivisentini 29:7a2dfd06cb29 1261 }
giovannivisentini 29:7a2dfd06cb29 1262
Davidroid 33:e6b7e74be1d5 1263 virtual void on_selected_system_file(M24SR *nfc,StatusTypeDef status) {
Davidroid 33:e6b7e74be1d5 1264 if (status==M24SR_SUCCESS) {
giovannivisentini 29:7a2dfd06cb29 1265 nfc->read_binary(0x0004, 0x01, &mReadGpoConfig);
Davidroid 33:e6b7e74be1d5 1266 } else {
giovannivisentini 29:7a2dfd06cb29 1267 onFinishCommand(nfc,status);
Davidroid 33:e6b7e74be1d5 1268 }
giovannivisentini 29:7a2dfd06cb29 1269 }
giovannivisentini 29:7a2dfd06cb29 1270
giovannivisentini 29:7a2dfd06cb29 1271 virtual void on_read_byte(M24SR *nfc,StatusTypeDef status,
Davidroid 33:e6b7e74be1d5 1272 uint16_t,uint8_t*, uint16_t ) {
Davidroid 33:e6b7e74be1d5 1273 if (status==M24SR_SUCCESS) {
giovannivisentini 29:7a2dfd06cb29 1274 nfc->verify(M24SR::I2CPwd, 0x10, M24SR::DEFAULT_PASSWORD);
Davidroid 33:e6b7e74be1d5 1275 } else {
giovannivisentini 29:7a2dfd06cb29 1276 onFinishCommand(nfc,status);
Davidroid 33:e6b7e74be1d5 1277 }
giovannivisentini 29:7a2dfd06cb29 1278 }
giovannivisentini 29:7a2dfd06cb29 1279
Davidroid 33:e6b7e74be1d5 1280 virtual void on_verified(M24SR *nfc,StatusTypeDef status,PasswordType_t, const uint8_t*) {
Davidroid 33:e6b7e74be1d5 1281 if (status!=M24SR_SUCCESS) {
giovannivisentini 29:7a2dfd06cb29 1282 return onFinishCommand(nfc,status);
Davidroid 33:e6b7e74be1d5 1283 }
giovannivisentini 29:7a2dfd06cb29 1284
Davidroid 33:e6b7e74be1d5 1285 if (mI2CGpo) {
giovannivisentini 29:7a2dfd06cb29 1286 mReadGpoConfig = (mReadGpoConfig & 0xF0) | (uint8_t)mGpoConfig;
Davidroid 33:e6b7e74be1d5 1287 } else {
giovannivisentini 29:7a2dfd06cb29 1288 mReadGpoConfig = (mReadGpoConfig & 0x0F) | (((uint8_t)mGpoConfig)<<4);
Davidroid 33:e6b7e74be1d5 1289 }
giovannivisentini 29:7a2dfd06cb29 1290
giovannivisentini 29:7a2dfd06cb29 1291 nfc->update_binary(0x0004, 0x01, &mReadGpoConfig);
giovannivisentini 29:7a2dfd06cb29 1292 }
giovannivisentini 29:7a2dfd06cb29 1293
giovannivisentini 29:7a2dfd06cb29 1294 virtual void on_updated_binary(M24SR *nfc,StatusTypeDef status,
Davidroid 33:e6b7e74be1d5 1295 uint16_t , uint8_t*, uint16_t ) {
giovannivisentini 29:7a2dfd06cb29 1296
Davidroid 33:e6b7e74be1d5 1297 if (status==M24SR_SUCCESS) {
Davidroid 33:e6b7e74be1d5 1298 if (mGpoConfig == I2C_ANSWER_READY) {
giovannivisentini 29:7a2dfd06cb29 1299 mParent.mCommunicationType = ASYNC;
Davidroid 33:e6b7e74be1d5 1300 } else {
giovannivisentini 29:7a2dfd06cb29 1301 mParent.mCommunicationType = SYNC;
giovannivisentini 29:7a2dfd06cb29 1302 }//if-else
giovannivisentini 29:7a2dfd06cb29 1303 }//status
giovannivisentini 29:7a2dfd06cb29 1304 onFinishCommand(nfc,status);
giovannivisentini 29:7a2dfd06cb29 1305 }
giovannivisentini 29:7a2dfd06cb29 1306
giovannivisentini 29:7a2dfd06cb29 1307 private:
giovannivisentini 29:7a2dfd06cb29 1308
giovannivisentini 29:7a2dfd06cb29 1309 /**
giovannivisentini 29:7a2dfd06cb29 1310 * Remove the private callback and call the user callback.
giovannivisentini 29:7a2dfd06cb29 1311 * @param nfc Object where the command was send to.
giovannivisentini 29:7a2dfd06cb29 1312 * @param status Command status.
giovannivisentini 29:7a2dfd06cb29 1313 */
Davidroid 33:e6b7e74be1d5 1314 void onFinishCommand(M24SR *nfc,StatusTypeDef status) {
giovannivisentini 29:7a2dfd06cb29 1315 mParent.mComponentCallback=NULL;
Davidroid 33:e6b7e74be1d5 1316 if (mI2CGpo) {
giovannivisentini 29:7a2dfd06cb29 1317 mParent.mCallback->on_manage_I2C_GPO(nfc,status,mGpoConfig);
Davidroid 33:e6b7e74be1d5 1318 } else {
giovannivisentini 29:7a2dfd06cb29 1319 mParent.mCallback->on_manage_RF_GPO(nfc,status,mGpoConfig);
giovannivisentini 29:7a2dfd06cb29 1320 }//if-else
giovannivisentini 29:7a2dfd06cb29 1321 }//onFinishCommand
giovannivisentini 29:7a2dfd06cb29 1322
giovannivisentini 29:7a2dfd06cb29 1323 /**
giovannivisentini 29:7a2dfd06cb29 1324 * Component where send the commands
giovannivisentini 29:7a2dfd06cb29 1325 */
giovannivisentini 29:7a2dfd06cb29 1326 M24SR &mParent;
giovannivisentini 29:7a2dfd06cb29 1327
giovannivisentini 29:7a2dfd06cb29 1328 /** new gpo function that this class has to write */
giovannivisentini 29:7a2dfd06cb29 1329 NFC_GPO_MGMT mGpoConfig;
giovannivisentini 29:7a2dfd06cb29 1330
giovannivisentini 29:7a2dfd06cb29 1331 /**
giovannivisentini 29:7a2dfd06cb29 1332 * variable where storeing the read gpo configuration
giovannivisentini 29:7a2dfd06cb29 1333 */
giovannivisentini 29:7a2dfd06cb29 1334 uint8_t mReadGpoConfig;
giovannivisentini 29:7a2dfd06cb29 1335
giovannivisentini 29:7a2dfd06cb29 1336 /**
giovannivisentini 29:7a2dfd06cb29 1337 * true to change the i2c gpo, false to change the rf gpo
giovannivisentini 29:7a2dfd06cb29 1338 */
giovannivisentini 29:7a2dfd06cb29 1339 bool mI2CGpo;
giovannivisentini 29:7a2dfd06cb29 1340
giovannivisentini 29:7a2dfd06cb29 1341 };
giovannivisentini 29:7a2dfd06cb29 1342
giovannivisentini 29:7a2dfd06cb29 1343 /**
giovannivisentini 29:7a2dfd06cb29 1344 * Object containing the callback chain needed to change the gpo function
giovannivisentini 29:7a2dfd06cb29 1345 */
giovannivisentini 29:7a2dfd06cb29 1346 ManageGPOCallback mManageGPOCallback;
giovannivisentini 29:7a2dfd06cb29 1347
giovannivisentini 29:7a2dfd06cb29 1348 /**
giovannivisentini 29:7a2dfd06cb29 1349 * Object with the callback used to read the component ID
giovannivisentini 29:7a2dfd06cb29 1350 * This class is equivalent to calling the methods:
giovannivisentini 29:7a2dfd06cb29 1351 * <ul>
giovannivisentini 29:7a2dfd06cb29 1352 * <li> SelectedApplication </li>
giovannivisentini 29:7a2dfd06cb29 1353 * <li> SelectSystemfile </li>
giovannivisentini 29:7a2dfd06cb29 1354 * <li> read_binary </li>
giovannivisentini 29:7a2dfd06cb29 1355 * </ul>
giovannivisentini 29:7a2dfd06cb29 1356 */
Davidroid 33:e6b7e74be1d5 1357 class ReadIDCallback : public Callbacks {
giovannivisentini 29:7a2dfd06cb29 1358
Davidroid 33:e6b7e74be1d5 1359 public:
giovannivisentini 29:7a2dfd06cb29 1360
Davidroid 33:e6b7e74be1d5 1361 /**
Davidroid 33:e6b7e74be1d5 1362 * Build the chain of callbacks.
Davidroid 33:e6b7e74be1d5 1363 * @param parent object where to send the command to.
Davidroid 33:e6b7e74be1d5 1364 */
Davidroid 33:e6b7e74be1d5 1365 ReadIDCallback(M24SR &parent):mParent(parent),mIdPtr(NULL) {}
giovannivisentini 29:7a2dfd06cb29 1366
Davidroid 33:e6b7e74be1d5 1367 /**
Davidroid 33:e6b7e74be1d5 1368 * Set the variable containing the result
Davidroid 33:e6b7e74be1d5 1369 * @param idPtr
Davidroid 33:e6b7e74be1d5 1370 */
Davidroid 33:e6b7e74be1d5 1371 void read_id_on(uint8_t *idPtr) {
Davidroid 33:e6b7e74be1d5 1372 mIdPtr = idPtr;
Davidroid 33:e6b7e74be1d5 1373 }
giovannivisentini 29:7a2dfd06cb29 1374
Davidroid 33:e6b7e74be1d5 1375 virtual void on_selected_application(M24SR *nfc,StatusTypeDef status) {
Davidroid 33:e6b7e74be1d5 1376 if (status==M24SR_SUCCESS) {
Davidroid 33:e6b7e74be1d5 1377 nfc->select_system_file();
Davidroid 33:e6b7e74be1d5 1378 } else {
Davidroid 33:e6b7e74be1d5 1379 onFinishCommand(nfc,status);
Davidroid 33:e6b7e74be1d5 1380 }
giovannivisentini 29:7a2dfd06cb29 1381
Davidroid 33:e6b7e74be1d5 1382 }
giovannivisentini 29:7a2dfd06cb29 1383
Davidroid 33:e6b7e74be1d5 1384 virtual void on_selected_system_file(M24SR *nfc,StatusTypeDef status) {
Davidroid 33:e6b7e74be1d5 1385 if (status==M24SR_SUCCESS) {
Davidroid 33:e6b7e74be1d5 1386 nfc->read_binary(0x0011, 0x01, mIdPtr);
Davidroid 33:e6b7e74be1d5 1387 } else {
Davidroid 33:e6b7e74be1d5 1388 onFinishCommand(nfc,status);
Davidroid 33:e6b7e74be1d5 1389 }
Davidroid 33:e6b7e74be1d5 1390 }
giovannivisentini 29:7a2dfd06cb29 1391
Davidroid 33:e6b7e74be1d5 1392 virtual void on_read_byte(M24SR *nfc,StatusTypeDef status,
Davidroid 33:e6b7e74be1d5 1393 uint16_t ,uint8_t *, uint16_t ) {
Davidroid 33:e6b7e74be1d5 1394 onFinishCommand(nfc,status);
Davidroid 33:e6b7e74be1d5 1395 }
giovannivisentini 29:7a2dfd06cb29 1396
Davidroid 33:e6b7e74be1d5 1397 private:
giovannivisentini 29:7a2dfd06cb29 1398
Davidroid 33:e6b7e74be1d5 1399 /**
Davidroid 33:e6b7e74be1d5 1400 * Remove the private callback and call the user onReadId function.
Davidroid 33:e6b7e74be1d5 1401 * @param nfc Object where the command was send.
Davidroid 33:e6b7e74be1d5 1402 * @param status Command status.
Davidroid 33:e6b7e74be1d5 1403 */
Davidroid 33:e6b7e74be1d5 1404 void onFinishCommand(M24SR *nfc,StatusTypeDef status) {
Davidroid 33:e6b7e74be1d5 1405 mParent.mComponentCallback=NULL;
Davidroid 33:e6b7e74be1d5 1406 mParent.getCallback()->on_read_id(nfc,status,mIdPtr);
Davidroid 33:e6b7e74be1d5 1407 }
giovannivisentini 29:7a2dfd06cb29 1408
Davidroid 33:e6b7e74be1d5 1409 M24SR& mParent;
giovannivisentini 29:7a2dfd06cb29 1410
Davidroid 33:e6b7e74be1d5 1411 /**
Davidroid 33:e6b7e74be1d5 1412 * pointer to read id
Davidroid 33:e6b7e74be1d5 1413 */
Davidroid 33:e6b7e74be1d5 1414 uint8_t *mIdPtr;
giovannivisentini 29:7a2dfd06cb29 1415 };
giovannivisentini 29:7a2dfd06cb29 1416
giovannivisentini 29:7a2dfd06cb29 1417
giovannivisentini 29:7a2dfd06cb29 1418 /**
giovannivisentini 29:7a2dfd06cb29 1419 * Object containing the callback chain needed to read the component id
giovannivisentini 29:7a2dfd06cb29 1420 */
giovannivisentini 29:7a2dfd06cb29 1421 ReadIDCallback mReadIDCallback;
giovannivisentini 29:7a2dfd06cb29 1422 friend class ReadIDCallback;
giovannivisentini 29:7a2dfd06cb29 1423
giovannivisentini 29:7a2dfd06cb29 1424 /**
giovannivisentini 29:7a2dfd06cb29 1425 * Convert a generic enum to the value used by the M24SR chip.
giovannivisentini 29:7a2dfd06cb29 1426 * @param type Password type.
giovannivisentini 29:7a2dfd06cb29 1427 * @return equivalent value used inside the m24sr chip */
Davidroid 33:e6b7e74be1d5 1428 uint16_t passwordTypeToConst(const PasswordType_t &type) const {
Davidroid 33:e6b7e74be1d5 1429 switch (type) {
giovannivisentini 29:7a2dfd06cb29 1430 case ReadPwd:
giovannivisentini 29:7a2dfd06cb29 1431 return READ_PWD;
giovannivisentini 29:7a2dfd06cb29 1432 case WritePwd:
giovannivisentini 29:7a2dfd06cb29 1433 return WRITE_PWD;
giovannivisentini 29:7a2dfd06cb29 1434 case I2CPwd:
giovannivisentini 29:7a2dfd06cb29 1435 default:
giovannivisentini 29:7a2dfd06cb29 1436 return I2C_PWD;
giovannivisentini 29:7a2dfd06cb29 1437 }//switch
giovannivisentini 29:7a2dfd06cb29 1438 }//passwordTypeToConst
giovannivisentini 29:7a2dfd06cb29 1439
giovannivisentini 29:7a2dfd06cb29 1440 /**
giovannivisentini 29:7a2dfd06cb29 1441 * convert a uint16 into an enum value
giovannivisentini 29:7a2dfd06cb29 1442 * @param type
giovannivisentini 29:7a2dfd06cb29 1443 * @return
giovannivisentini 29:7a2dfd06cb29 1444 */
giovannivisentini 29:7a2dfd06cb29 1445 PasswordType_t constToPasswordType(const uint16_t type)const{
Davidroid 33:e6b7e74be1d5 1446 switch(type) {
giovannivisentini 29:7a2dfd06cb29 1447 case READ_PWD:
giovannivisentini 29:7a2dfd06cb29 1448 return ReadPwd;
giovannivisentini 29:7a2dfd06cb29 1449 case WRITE_PWD:
giovannivisentini 29:7a2dfd06cb29 1450 return WritePwd;
giovannivisentini 29:7a2dfd06cb29 1451 case I2C_PWD:
giovannivisentini 29:7a2dfd06cb29 1452 default:
giovannivisentini 29:7a2dfd06cb29 1453 return I2CPwd;
giovannivisentini 29:7a2dfd06cb29 1454 }//switch
giovannivisentini 29:7a2dfd06cb29 1455 }//passwordTypeToConst
giovannivisentini 29:7a2dfd06cb29 1456 };
giovannivisentini 29:7a2dfd06cb29 1457
giovannivisentini 29:7a2dfd06cb29 1458 #endif // __M24SR_CLASS_H
giovannivisentini 29:7a2dfd06cb29 1459
Davidroid 33:e6b7e74be1d5 1460
giovannivisentini 29:7a2dfd06cb29 1461 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/