ST / X_NUCLEO_NFC01A1

Dependencies:   M24SR

Dependents:   NFC M2M_2016_STM32 MyongjiElec_capstone1 IDW01M1_Cloud_IBM ... more

Fork of X_NUCLEO_NFC01A1 by ST Expansion SW Team

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

Introduction

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

Firmware Library

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

Example applications

1. Hello World
2. Asynchronous Hello World

Committer:
giovannivisentini
Date:
Wed Feb 03 08:52:54 2016 +0000
Revision:
25:caa16fd0e50b
Parent:
24:9f98eafa2d39
Child:
27:3881985097bb
update docs

Who changed what in which revision?

UserRevisionLine numberNew contents of line
giovannivisentini 0:969a2be49f41 1 /**
giovannivisentini 0:969a2be49f41 2 ******************************************************************************
giovannivisentini 0:969a2be49f41 3 * @file m24sr_class.h
giovannivisentini 6:96389fb79676 4 * @author ST Central Labs
giovannivisentini 9:9f2e2e68d695 5 * @version V1.0.0
giovannivisentini 6:96389fb79676 6 * @date 05 Nov 2015
giovannivisentini 0:969a2be49f41 7 * @brief This file provides a set of functions to interface with the M24SR
giovannivisentini 0:969a2be49f41 8 * device.
giovannivisentini 0:969a2be49f41 9 ******************************************************************************
giovannivisentini 0:969a2be49f41 10 * @attention
giovannivisentini 0:969a2be49f41 11 *
giovannivisentini 1:15d4a123ef6b 12 * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
giovannivisentini 0:969a2be49f41 13 *
giovannivisentini 0:969a2be49f41 14 * Redistribution and use in source and binary forms, with or without modification,
giovannivisentini 0:969a2be49f41 15 * are permitted provided that the following conditions are met:
giovannivisentini 0:969a2be49f41 16 * 1. Redistributions of source code must retain the above copyright notice,
giovannivisentini 0:969a2be49f41 17 * this list of conditions and the following disclaimer.
giovannivisentini 0:969a2be49f41 18 * 2. Redistributions in binary form must reproduce the above copyright notice,
giovannivisentini 0:969a2be49f41 19 * this list of conditions and the following disclaimer in the documentation
giovannivisentini 0:969a2be49f41 20 * and/or other materials provided with the distribution.
giovannivisentini 0:969a2be49f41 21 * 3. Neither the name of STMicroelectronics nor the names of its contributors
giovannivisentini 0:969a2be49f41 22 * may be used to endorse or promote products derived from this software
giovannivisentini 0:969a2be49f41 23 * without specific prior written permission.
giovannivisentini 0:969a2be49f41 24 *
giovannivisentini 0:969a2be49f41 25 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
giovannivisentini 0:969a2be49f41 26 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
giovannivisentini 0:969a2be49f41 27 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
giovannivisentini 0:969a2be49f41 28 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
giovannivisentini 0:969a2be49f41 29 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
giovannivisentini 0:969a2be49f41 30 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
giovannivisentini 0:969a2be49f41 31 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
giovannivisentini 0:969a2be49f41 32 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
giovannivisentini 0:969a2be49f41 33 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
giovannivisentini 0:969a2be49f41 34 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
giovannivisentini 0:969a2be49f41 35 *
giovannivisentini 0:969a2be49f41 36 ******************************************************************************
giovannivisentini 0:969a2be49f41 37 */
giovannivisentini 0:969a2be49f41 38
giovannivisentini 0:969a2be49f41 39 /* Revision ------------------------------------------------------------------*/
giovannivisentini 0:969a2be49f41 40 /*
giovannivisentini 0:969a2be49f41 41 Based on: X-CUBE-MEMS1/trunk/Drivers/BSP/Components/m24sr/m24sr.h
giovannivisentini 0:969a2be49f41 42 Revision: M24SR Driver V1.0.0
giovannivisentini 0:969a2be49f41 43 */
giovannivisentini 0:969a2be49f41 44
giovannivisentini 0:969a2be49f41 45 /* Define to prevent recursive inclusion -------------------------------------*/
giovannivisentini 0:969a2be49f41 46
giovannivisentini 0:969a2be49f41 47 #ifndef __M24SR_CLASS_H
giovannivisentini 0:969a2be49f41 48 #define __M24SR_CLASS_H
giovannivisentini 0:969a2be49f41 49
giovannivisentini 0:969a2be49f41 50 /* Includes ------------------------------------------------------------------*/
giovannivisentini 0:969a2be49f41 51
giovannivisentini 0:969a2be49f41 52 #include "mbed.h"
giovannivisentini 0:969a2be49f41 53 #include "I2C.h"
giovannivisentini 0:969a2be49f41 54
giovannivisentini 0:969a2be49f41 55 #include "m24sr.h"
giovannivisentini 0:969a2be49f41 56 #include "Interfaces/Nfc_class.h"
giovannivisentini 6:96389fb79676 57 #include "NDefNfcTagM24SR.h"
giovannivisentini 0:969a2be49f41 58
giovannivisentini 0:969a2be49f41 59 /* Classes -------------------------------------------------------------------*/
giovannivisentini 0:969a2be49f41 60
giovannivisentini 9:9f2e2e68d695 61 /**
giovannivisentini 9:9f2e2e68d695 62 * Class representing a M24SR component.
giovannivisentini 0:969a2be49f41 63 */
giovannivisentini 0:969a2be49f41 64 class M24SR: public Nfc {
giovannivisentini 0:969a2be49f41 65
giovannivisentini 0:969a2be49f41 66 public:
giovannivisentini 0:969a2be49f41 67
giovannivisentini 7:19fc04b8fec6 68 /**
giovannivisentini 9:9f2e2e68d695 69 * Default password used to change the write/read permission
giovannivisentini 7:19fc04b8fec6 70 */
giovannivisentini 0:969a2be49f41 71 static const uint8_t DEFAULT_PASSWORD[16];
giovannivisentini 19:0b65a5813059 72
giovannivisentini 19:0b65a5813059 73 /**
giovannivisentini 23:d07138541feb 74 * Default gpo status -> the gpo will remain high
giovannivisentini 19:0b65a5813059 75 */
giovannivisentini 19:0b65a5813059 76 static const NFC_GPO_MGMT DEFAULT_GPO_STATUS=HIGH_IMPEDANCE;
giovannivisentini 19:0b65a5813059 77
giovannivisentini 0:969a2be49f41 78 /*** Constructor and Destructor Methods ***/
giovannivisentini 0:969a2be49f41 79
giovannivisentini 0:969a2be49f41 80 /**
giovannivisentini 0:969a2be49f41 81 * @brief Constructor.
giovannivisentini 0:969a2be49f41 82 * @param address I2C address of the component.
giovannivisentini 9:9f2e2e68d695 83 * @param I2C I2C device to be used for communication.
giovannivisentini 24:9f98eafa2d39 84 * @param eventCallback Function that will be called when the gpo pin status changes.
giovannivisentini 9:9f2e2e68d695 85 * @param GPOPinName Pin used as GPIO.
giovannivisentini 9:9f2e2e68d695 86 * @param RFDISPinName Pin used to disable the RF function.
giovannivisentini 0:969a2be49f41 87 */
giovannivisentini 19:0b65a5813059 88 M24SR(const uint8_t address, I2C &I2C,gpoEventCallback eventCallback, const PinName& GPOPinName,
giovannivisentini 0:969a2be49f41 89 const PinName& RFDISPinName) :
giovannivisentini 19:0b65a5813059 90 Nfc(),
giovannivisentini 19:0b65a5813059 91 who_am_i(0),
giovannivisentini 19:0b65a5813059 92 type(0),
giovannivisentini 19:0b65a5813059 93 address(address),
giovannivisentini 19:0b65a5813059 94 dev_I2C(I2C),
giovannivisentini 19:0b65a5813059 95 GPOPin(GPOPinName),
giovannivisentini 19:0b65a5813059 96 RFDisablePin(RFDISPinName),
giovannivisentini 19:0b65a5813059 97 NDefTagUtil(*this),
giovannivisentini 19:0b65a5813059 98 mCommunicationType(SYNC),
giovannivisentini 19:0b65a5813059 99 mLastCommandSend(NONE),
giovannivisentini 19:0b65a5813059 100 mGpoEventInterrupt(GPOPinName),
giovannivisentini 19:0b65a5813059 101 mManageGPOCallback(*this),
giovannivisentini 21:ccc4f3fed4b3 102 mReadIDCallback(*this){
giovannivisentini 19:0b65a5813059 103
giovannivisentini 0:969a2be49f41 104 memset(uM24SRbuffer, 0, 0xFF * sizeof(int8_t));
giovannivisentini 0:969a2be49f41 105 uDIDbyte = 0;
giovannivisentini 0:969a2be49f41 106 RFDisablePin = 0;
giovannivisentini 20:aad5727cb8c6 107 if(eventCallback!=NULL)
giovannivisentini 20:aad5727cb8c6 108 mGpoEventInterrupt.fall(eventCallback);
giovannivisentini 19:0b65a5813059 109 mGpoEventInterrupt.mode(PullUp);
giovannivisentini 19:0b65a5813059 110 mGpoEventInterrupt.disable_irq();
giovannivisentini 0:969a2be49f41 111 }
giovannivisentini 0:969a2be49f41 112
giovannivisentini 0:969a2be49f41 113 /**
giovannivisentini 0:969a2be49f41 114 * @brief Destructor.
giovannivisentini 0:969a2be49f41 115 */
giovannivisentini 0:969a2be49f41 116 virtual ~M24SR(void) {
giovannivisentini 0:969a2be49f41 117 }
giovannivisentini 0:969a2be49f41 118
giovannivisentini 0:969a2be49f41 119 /*** Public Component Related Methods ***/
giovannivisentini 7:19fc04b8fec6 120
giovannivisentini 7:19fc04b8fec6 121 /**
giovannivisentini 9:9f2e2e68d695 122 * @brief This function initializes the M24SR device.
giovannivisentini 9:9f2e2e68d695 123 * @param ptr Configure parameters, not used.
giovannivisentini 9:9f2e2e68d695 124 * @return NFC_SUCCESS if no errors
giovannivisentini 7:19fc04b8fec6 125 */
giovannivisentini 0:969a2be49f41 126 virtual int Init(void *ptr) {
giovannivisentini 15:67e136b6921d 127 return (NFC_StatusTypeDef) M24SR_Init((M24SR_InitTypeDef*)ptr);
giovannivisentini 0:969a2be49f41 128 }
giovannivisentini 0:969a2be49f41 129
giovannivisentini 0:969a2be49f41 130 virtual int ReadID(uint8_t *id) {
giovannivisentini 0:969a2be49f41 131 return (NFC_StatusTypeDef) M24SR_ReadID((uint8_t *) id);
giovannivisentini 0:969a2be49f41 132 }
giovannivisentini 0:969a2be49f41 133
giovannivisentini 0:969a2be49f41 134 /** lock the tag channel */
giovannivisentini 0:969a2be49f41 135 virtual NFC_StatusTypeDef GetSession(void) {
giovannivisentini 0:969a2be49f41 136 return (NFC_StatusTypeDef) M24SR_GetSession();
giovannivisentini 0:969a2be49f41 137 }
giovannivisentini 0:969a2be49f41 138
giovannivisentini 21:ccc4f3fed4b3 139 virtual NFC_StatusTypeDef ForceGetSession(void) {
giovannivisentini 23:d07138541feb 140 return (NFC_StatusTypeDef) M24SR_ForceSession();
giovannivisentini 0:969a2be49f41 141 }
giovannivisentini 0:969a2be49f41 142
giovannivisentini 0:969a2be49f41 143 virtual NFC_StatusTypeDef Deselect(void) {
giovannivisentini 0:969a2be49f41 144 return (NFC_StatusTypeDef) M24SR_Deselect();
giovannivisentini 0:969a2be49f41 145 }
giovannivisentini 0:969a2be49f41 146
giovannivisentini 7:19fc04b8fec6 147 ////////// tag4 command ////////////////////
giovannivisentini 7:19fc04b8fec6 148
giovannivisentini 0:969a2be49f41 149 virtual NFC_StatusTypeDef SelectApplication(void) {
giovannivisentini 19:0b65a5813059 150 return M24SR_SendSelectApplication();
giovannivisentini 0:969a2be49f41 151 }
giovannivisentini 0:969a2be49f41 152
giovannivisentini 0:969a2be49f41 153 virtual NFC_StatusTypeDef SelectCCfile(void) {
giovannivisentini 19:0b65a5813059 154 return M24SR_SendSelectCCfile();
giovannivisentini 0:969a2be49f41 155 }
giovannivisentini 0:969a2be49f41 156
giovannivisentini 0:969a2be49f41 157 virtual NFC_StatusTypeDef SelectNDEFfile(uint16_t NDEFfileId) {
giovannivisentini 19:0b65a5813059 158 return M24SR_SendSelectNDEFfile(NDEFfileId);
giovannivisentini 0:969a2be49f41 159 }
giovannivisentini 0:969a2be49f41 160
giovannivisentini 0:969a2be49f41 161 virtual NFC_StatusTypeDef SelectSystemfile(void) {
giovannivisentini 19:0b65a5813059 162 return M24SR_SendSelectSystemfile();
giovannivisentini 0:969a2be49f41 163 }
giovannivisentini 0:969a2be49f41 164
giovannivisentini 0:969a2be49f41 165 virtual NFC_StatusTypeDef ReadBinary(uint16_t Offset, uint8_t NbByteToRead,
giovannivisentini 0:969a2be49f41 166 uint8_t *pBufferRead) {
giovannivisentini 19:0b65a5813059 167 return (NFC_StatusTypeDef) M24SR_SendReadBinary((uint16_t) Offset,
giovannivisentini 0:969a2be49f41 168 (uint8_t) NbByteToRead, (uint8_t *) pBufferRead);
giovannivisentini 0:969a2be49f41 169 }
giovannivisentini 0:969a2be49f41 170
giovannivisentini 0:969a2be49f41 171 virtual NFC_StatusTypeDef UpdateBinary(uint16_t Offset,
giovannivisentini 19:0b65a5813059 172 uint8_t NbByteToWrite,uint8_t *pDataToWrite) {
giovannivisentini 19:0b65a5813059 173 return (NFC_StatusTypeDef) M24SR_SendUpdateBinary((uint16_t) Offset,
giovannivisentini 0:969a2be49f41 174 (uint8_t) NbByteToWrite, (uint8_t *) pDataToWrite);
giovannivisentini 0:969a2be49f41 175 }
giovannivisentini 0:969a2be49f41 176
giovannivisentini 7:19fc04b8fec6 177 /////////////////// iso 7816-4 commands //////////////////////////
giovannivisentini 7:19fc04b8fec6 178
giovannivisentini 0:969a2be49f41 179 virtual NFC_StatusTypeDef Verify(PasswordType_t pwdId, uint8_t NbPwdByte,
giovannivisentini 0:969a2be49f41 180 const uint8_t *pPwd) {
giovannivisentini 19:0b65a5813059 181 return (NFC_StatusTypeDef) M24SR_SendVerify(passwordTypeToConst(pwdId),
giovannivisentini 0:969a2be49f41 182 (uint8_t) NbPwdByte, pPwd);
giovannivisentini 0:969a2be49f41 183 }
giovannivisentini 0:969a2be49f41 184
giovannivisentini 0:969a2be49f41 185 virtual NFC_StatusTypeDef ChangeReferenceData(PasswordType_t pwdId,
giovannivisentini 0:969a2be49f41 186 const uint8_t *pPwd) {
giovannivisentini 19:0b65a5813059 187 return (NFC_StatusTypeDef) M24SR_SendChangeReferenceData(passwordTypeToConst(pwdId),
giovannivisentini 0:969a2be49f41 188 (uint8_t *) pPwd);
giovannivisentini 0:969a2be49f41 189 }
giovannivisentini 0:969a2be49f41 190
giovannivisentini 0:969a2be49f41 191 virtual NFC_StatusTypeDef EnableVerificationRequirement(
giovannivisentini 0:969a2be49f41 192 PasswordType_t uReadOrWrite) {
giovannivisentini 19:0b65a5813059 193 return (NFC_StatusTypeDef) M24SR_SendEnableVerificationRequirement(
giovannivisentini 12:d1f5eaa85deb 194 passwordTypeToConst(uReadOrWrite));
giovannivisentini 0:969a2be49f41 195 }
giovannivisentini 0:969a2be49f41 196
giovannivisentini 0:969a2be49f41 197 virtual NFC_StatusTypeDef DisableVerificationRequirement(
giovannivisentini 0:969a2be49f41 198 PasswordType_t uReadOrWrite) {
giovannivisentini 19:0b65a5813059 199 return (NFC_StatusTypeDef) M24SR_SendDisableVerificationRequirement(
giovannivisentini 12:d1f5eaa85deb 200 passwordTypeToConst(uReadOrWrite));
giovannivisentini 0:969a2be49f41 201 }
giovannivisentini 0:969a2be49f41 202
giovannivisentini 7:19fc04b8fec6 203 ////////////////////// ST proprietary //////////////////////////////////
giovannivisentini 9:9f2e2e68d695 204
giovannivisentini 0:969a2be49f41 205 virtual NFC_StatusTypeDef STReadBinary(uint16_t Offset,
giovannivisentini 0:969a2be49f41 206 uint8_t NbByteToRead, uint8_t *pBufferRead) {
giovannivisentini 19:0b65a5813059 207 return (NFC_StatusTypeDef) M24SR_SendSTReadBinary((uint16_t) Offset,
giovannivisentini 0:969a2be49f41 208 (uint8_t) NbByteToRead, (uint8_t *) pBufferRead);
giovannivisentini 0:969a2be49f41 209 }
giovannivisentini 0:969a2be49f41 210
giovannivisentini 0:969a2be49f41 211 virtual NFC_StatusTypeDef EnablePermanentState(PasswordType_t uReadOrWrite) {
giovannivisentini 19:0b65a5813059 212 return (NFC_StatusTypeDef) M24SR_SendEnablePermanentState(
giovannivisentini 12:d1f5eaa85deb 213 passwordTypeToConst(uReadOrWrite));
giovannivisentini 0:969a2be49f41 214 }
giovannivisentini 0:969a2be49f41 215
giovannivisentini 0:969a2be49f41 216 virtual NFC_StatusTypeDef DisablePermanentState(PasswordType_t uReadOrWrite) {
giovannivisentini 19:0b65a5813059 217 return (NFC_StatusTypeDef) M24SR_SendDisablePermanentState(
giovannivisentini 12:d1f5eaa85deb 218 passwordTypeToConst(uReadOrWrite));
giovannivisentini 0:969a2be49f41 219 }
giovannivisentini 0:969a2be49f41 220
giovannivisentini 7:19fc04b8fec6 221 ///////////////////// chip configuration /////////////////////////////////
giovannivisentini 0:969a2be49f41 222 virtual NFC_StatusTypeDef StateControl(uint8_t uSetOrReset) {
giovannivisentini 0:969a2be49f41 223 return (NFC_StatusTypeDef) M24SR_StateControl((uint8_t) uSetOrReset);
giovannivisentini 0:969a2be49f41 224 }
giovannivisentini 0:969a2be49f41 225
giovannivisentini 19:0b65a5813059 226 virtual NFC_StatusTypeDef ManageI2CGPO(NFC_GPO_MGMT GPO_I2Cconfig) {
giovannivisentini 19:0b65a5813059 227 return (NFC_StatusTypeDef) M24SR_ManageI2CGPO(GPO_I2Cconfig);
giovannivisentini 0:969a2be49f41 228 }
giovannivisentini 0:969a2be49f41 229
giovannivisentini 0:969a2be49f41 230 virtual NFC_StatusTypeDef ManageRFGPO(uint8_t GPO_RFconfig) {
giovannivisentini 0:969a2be49f41 231 return (NFC_StatusTypeDef) M24SR_ManageRFGPO(
giovannivisentini 19:0b65a5813059 232 (NFC_GPO_MGMT) GPO_RFconfig);
giovannivisentini 0:969a2be49f41 233 }
giovannivisentini 0:969a2be49f41 234
giovannivisentini 0:969a2be49f41 235 virtual NFC_StatusTypeDef RFConfig(uint8_t OnOffChoice) {
giovannivisentini 0:969a2be49f41 236 return (NFC_StatusTypeDef) M24SR_RFConfig((uint8_t) OnOffChoice);
giovannivisentini 0:969a2be49f41 237 }
giovannivisentini 0:969a2be49f41 238
giovannivisentini 19:0b65a5813059 239
giovannivisentini 0:969a2be49f41 240 virtual NFC_StatusTypeDef SendInterrupt(void) {
giovannivisentini 0:969a2be49f41 241 return (NFC_StatusTypeDef) M24SR_SendInterrupt();
giovannivisentini 0:969a2be49f41 242 }
giovannivisentini 0:969a2be49f41 243
giovannivisentini 21:ccc4f3fed4b3 244 virtual NFC_StatusTypeDef ManageEvent();
giovannivisentini 21:ccc4f3fed4b3 245
giovannivisentini 6:96389fb79676 246 /////////////////// hight level/utility function /////////////////////
giovannivisentini 6:96389fb79676 247
giovannivisentini 7:19fc04b8fec6 248 /**
giovannivisentini 9:9f2e2e68d695 249 * Get an implementation of NDefNfcTag to use the library NDefLib.
giovannivisentini 9:9f2e2e68d695 250 * @return an object of type NdefNfcTag
giovannivisentini 7:19fc04b8fec6 251 */
giovannivisentini 6:96389fb79676 252 NDefLib::NDefNfcTag& getNDefTag(){
giovannivisentini 6:96389fb79676 253 return NDefTagUtil;
giovannivisentini 6:96389fb79676 254 }
giovannivisentini 6:96389fb79676 255
giovannivisentini 6:96389fb79676 256
giovannivisentini 0:969a2be49f41 257 protected:
giovannivisentini 0:969a2be49f41 258
giovannivisentini 0:969a2be49f41 259 /*** Protected Component Related Methods ***/
giovannivisentini 0:969a2be49f41 260
giovannivisentini 15:67e136b6921d 261 NFC_StatusTypeDef M24SR_Init(M24SR_InitTypeDef *);
giovannivisentini 0:969a2be49f41 262 NFC_StatusTypeDef M24SR_ReadID(uint8_t *nfc_id);
giovannivisentini 0:969a2be49f41 263 NFC_StatusTypeDef M24SR_GetSession(void);
giovannivisentini 23:d07138541feb 264 NFC_StatusTypeDef M24SR_ForceSession(void);
giovannivisentini 23:d07138541feb 265
giovannivisentini 23:d07138541feb 266
giovannivisentini 19:0b65a5813059 267
giovannivisentini 0:969a2be49f41 268 NFC_StatusTypeDef M24SR_Deselect(void);
giovannivisentini 19:0b65a5813059 269 NFC_StatusTypeDef M24SR_ReceiveDeselect(void);
giovannivisentini 19:0b65a5813059 270
giovannivisentini 19:0b65a5813059 271 NFC_StatusTypeDef M24SR_SendSelectApplication(void);
giovannivisentini 19:0b65a5813059 272 NFC_StatusTypeDef M24SR_ReceiveSelectApplication(void);
giovannivisentini 19:0b65a5813059 273
giovannivisentini 19:0b65a5813059 274 NFC_StatusTypeDef M24SR_SendSelectCCfile(void);
giovannivisentini 19:0b65a5813059 275 NFC_StatusTypeDef M24SR_ReceiveSelectCCfile(void);
giovannivisentini 19:0b65a5813059 276
giovannivisentini 19:0b65a5813059 277 NFC_StatusTypeDef M24SR_SendSelectNDEFfile(uint16_t NDEFfileId);
giovannivisentini 19:0b65a5813059 278 NFC_StatusTypeDef M24SR_ReceiveSelectNDEFfile();
giovannivisentini 19:0b65a5813059 279
giovannivisentini 19:0b65a5813059 280 NFC_StatusTypeDef M24SR_SendSelectSystemfile(void);
giovannivisentini 19:0b65a5813059 281 NFC_StatusTypeDef M24SR_ReceiveSelectSystemfile(void);
giovannivisentini 19:0b65a5813059 282
giovannivisentini 19:0b65a5813059 283 NFC_StatusTypeDef M24SR_SendReadBinary(uint16_t Offset, uint8_t NbByteToRead,
giovannivisentini 0:969a2be49f41 284 uint8_t *pBufferRead);
giovannivisentini 19:0b65a5813059 285 NFC_StatusTypeDef M24SR_SendSTReadBinary(uint16_t Offset, uint8_t NbByteToRead,
giovannivisentini 19:0b65a5813059 286 uint8_t *pBufferRead);
giovannivisentini 19:0b65a5813059 287 NFC_StatusTypeDef M24SR_ReceiveReadBinary(void);
giovannivisentini 19:0b65a5813059 288
giovannivisentini 19:0b65a5813059 289 NFC_StatusTypeDef M24SR_SendUpdateBinary(uint16_t Offset, uint8_t NbByteToWrite,
giovannivisentini 0:969a2be49f41 290 uint8_t *pDataToWrite);
giovannivisentini 19:0b65a5813059 291 NFC_StatusTypeDef M24SR_ReceiveUpdateBinary();
giovannivisentini 19:0b65a5813059 292
giovannivisentini 19:0b65a5813059 293 NFC_StatusTypeDef M24SR_SendVerify(uint16_t uPwdId, uint8_t NbPwdByte,
giovannivisentini 0:969a2be49f41 294 const uint8_t *pPwd);
giovannivisentini 19:0b65a5813059 295 NFC_StatusTypeDef M24SR_ReceiveVerify();
giovannivisentini 19:0b65a5813059 296
giovannivisentini 19:0b65a5813059 297 NFC_StatusTypeDef M24SR_SendChangeReferenceData(uint16_t uPwdId, uint8_t *pPwd);
giovannivisentini 19:0b65a5813059 298 NFC_StatusTypeDef M24SR_ReceiveChangeReferenceData();
giovannivisentini 19:0b65a5813059 299
giovannivisentini 19:0b65a5813059 300 NFC_StatusTypeDef M24SR_SendEnableVerificationRequirement(
giovannivisentini 0:969a2be49f41 301 uint16_t uReadOrWrite);
giovannivisentini 19:0b65a5813059 302 NFC_StatusTypeDef M24SR_ReceiveEnableVerificationRequirement();
giovannivisentini 19:0b65a5813059 303
giovannivisentini 19:0b65a5813059 304 NFC_StatusTypeDef M24SR_SendDisableVerificationRequirement(
giovannivisentini 0:969a2be49f41 305 uint16_t uReadOrWrite);
giovannivisentini 19:0b65a5813059 306 NFC_StatusTypeDef M24SR_ReceiveDisableVerificationRequirement();
giovannivisentini 19:0b65a5813059 307
giovannivisentini 19:0b65a5813059 308 NFC_StatusTypeDef M24SR_SendEnablePermanentState(uint16_t uReadOrWrite);
giovannivisentini 19:0b65a5813059 309 NFC_StatusTypeDef M24SR_ReceiveEnablePermanentState();
giovannivisentini 19:0b65a5813059 310
giovannivisentini 19:0b65a5813059 311 NFC_StatusTypeDef M24SR_SendDisablePermanentState(uint16_t uReadOrWrite);
giovannivisentini 19:0b65a5813059 312 NFC_StatusTypeDef M24SR_ReceiveDisablePermanentState();
giovannivisentini 19:0b65a5813059 313
giovannivisentini 0:969a2be49f41 314 NFC_StatusTypeDef M24SR_SendInterrupt(void);
giovannivisentini 0:969a2be49f41 315 NFC_StatusTypeDef M24SR_StateControl(uint8_t uSetOrReset);
giovannivisentini 19:0b65a5813059 316
giovannivisentini 19:0b65a5813059 317 NFC_StatusTypeDef M24SR_ManageI2CGPO(NFC_GPO_MGMT GPO_I2Cconfig);
giovannivisentini 19:0b65a5813059 318 NFC_StatusTypeDef M24SR_ManageRFGPO(NFC_GPO_MGMT GPO_RFconfig);
giovannivisentini 0:969a2be49f41 319
giovannivisentini 19:0b65a5813059 320 NFC_StatusTypeDef M24SR_RFConfig(uint8_t OnOffChoice);
giovannivisentini 19:0b65a5813059 321 NFC_StatusTypeDef M24SR_SendFWTExtension(uint8_t FWTbyte);
giovannivisentini 19:0b65a5813059 322
giovannivisentini 7:19fc04b8fec6 323
giovannivisentini 7:19fc04b8fec6 324 /**
giovannivisentini 9:9f2e2e68d695 325 * Send a command to the component.
giovannivisentini 19:0b65a5813059 326 * @param NbByte Length of the command.
giovannivisentini 9:9f2e2e68d695 327 * @param pBuffer Buffer containing the command.
giovannivisentini 9:9f2e2e68d695 328 * @return NFC_SUCCESS if no errors
giovannivisentini 7:19fc04b8fec6 329 */
giovannivisentini 0:969a2be49f41 330 NFC_StatusTypeDef M24SR_IO_SendI2Ccommand(uint8_t NbByte, uint8_t *pBuffer);
giovannivisentini 7:19fc04b8fec6 331
giovannivisentini 7:19fc04b8fec6 332 /**
giovannivisentini 9:9f2e2e68d695 333 * Read a command response.
giovannivisentini 9:9f2e2e68d695 334 * @param NbByte Number of bytes to read.
giovannivisentini 9:9f2e2e68d695 335 * @param pBuffer Buffer to store the response into.
giovannivisentini 9:9f2e2e68d695 336 * @return NFC_SUCCESS if no errors
giovannivisentini 7:19fc04b8fec6 337 */
giovannivisentini 0:969a2be49f41 338 NFC_StatusTypeDef M24SR_IO_ReceiveI2Cresponse(uint8_t NbByte,
giovannivisentini 0:969a2be49f41 339 uint8_t *pBuffer);
giovannivisentini 0:969a2be49f41 340
giovannivisentini 7:19fc04b8fec6 341 /**
giovannivisentini 9:9f2e2e68d695 342 * Do an active polling on the I2C bus until the answer is ready.
giovannivisentini 9:9f2e2e68d695 343 * @return NFC_SUCCESS if no errors
giovannivisentini 7:19fc04b8fec6 344 */
giovannivisentini 0:969a2be49f41 345 NFC_StatusTypeDef M24SR_IO_PollI2C(void);
giovannivisentini 0:969a2be49f41 346
giovannivisentini 7:19fc04b8fec6 347 /**
giovannivisentini 9:9f2e2e68d695 348 * Read the gpo pin.
giovannivisentini 9:9f2e2e68d695 349 * @param[out] pPinState Variable to store the pin state into.
giovannivisentini 7:19fc04b8fec6 350 */
giovannivisentini 13:840a9c7f90b9 351 void M24SR_IO_GPO_ReadPin(uint8_t *pPinState) {
giovannivisentini 13:840a9c7f90b9 352 *pPinState= GPOPin.read();
giovannivisentini 0:969a2be49f41 353 }
giovannivisentini 0:969a2be49f41 354
giovannivisentini 7:19fc04b8fec6 355 /**
giovannivisentini 9:9f2e2e68d695 356 * Write the gpo pin.
giovannivisentini 9:9f2e2e68d695 357 * @param pPinState Pin state to write.
giovannivisentini 7:19fc04b8fec6 358 */
giovannivisentini 13:840a9c7f90b9 359 void M24SR_IO_RFDIS_WritePin(uint8_t PinState) {
giovannivisentini 13:840a9c7f90b9 360 if (PinState == 0)
giovannivisentini 0:969a2be49f41 361 RFDisablePin = 0;
giovannivisentini 0:969a2be49f41 362 else
giovannivisentini 0:969a2be49f41 363 RFDisablePin = 1;
giovannivisentini 0:969a2be49f41 364 }
giovannivisentini 0:969a2be49f41 365
giovannivisentini 0:969a2be49f41 366 /*** Component's Instance Variables ***/
giovannivisentini 0:969a2be49f41 367
giovannivisentini 0:969a2be49f41 368 /* Identity */
giovannivisentini 0:969a2be49f41 369 uint8_t who_am_i;
giovannivisentini 0:969a2be49f41 370
giovannivisentini 9:9f2e2e68d695 371 /* Type */
giovannivisentini 0:969a2be49f41 372 uint8_t type;
giovannivisentini 0:969a2be49f41 373
giovannivisentini 0:969a2be49f41 374 /* I2C address */
giovannivisentini 0:969a2be49f41 375 uint8_t address;
giovannivisentini 0:969a2be49f41 376
giovannivisentini 0:969a2be49f41 377 /* IO Device. */
giovannivisentini 9:9f2e2e68d695 378 I2C &dev_I2C;
giovannivisentini 0:969a2be49f41 379
giovannivisentini 0:969a2be49f41 380 /* GPIO */
giovannivisentini 0:969a2be49f41 381 DigitalIn GPOPin;
giovannivisentini 0:969a2be49f41 382
giovannivisentini 0:969a2be49f41 383 /**
giovannivisentini 9:9f2e2e68d695 384 * Pin used to disable the rf chip functionality.
giovannivisentini 0:969a2be49f41 385 */
giovannivisentini 0:969a2be49f41 386 DigitalOut RFDisablePin;
giovannivisentini 0:969a2be49f41 387
giovannivisentini 0:969a2be49f41 388 /**
giovannivisentini 9:9f2e2e68d695 389 * Buffer used to build the command to send to the chip.
giovannivisentini 0:969a2be49f41 390 */
giovannivisentini 9:9f2e2e68d695 391 uint8_t uM24SRbuffer[0xFF];//max command length is 255
giovannivisentini 0:969a2be49f41 392
giovannivisentini 0:969a2be49f41 393 /**
giovannivisentini 0:969a2be49f41 394 * ???
giovannivisentini 0:969a2be49f41 395 */
giovannivisentini 0:969a2be49f41 396 uint8_t uDIDbyte;
giovannivisentini 0:969a2be49f41 397
giovannivisentini 0:969a2be49f41 398 /**
giovannivisentini 9:9f2e2e68d695 399 * Object implementing the interface to use the NDefLib.
giovannivisentini 7:19fc04b8fec6 400 */
giovannivisentini 6:96389fb79676 401 NDefNfcTagM24SR NDefTagUtil;
giovannivisentini 19:0b65a5813059 402
giovannivisentini 19:0b65a5813059 403 /**
giovannivisentini 23:d07138541feb 404 * Command that the component can accept
giovannivisentini 19:0b65a5813059 405 */
giovannivisentini 19:0b65a5813059 406 typedef enum{
giovannivisentini 19:0b65a5813059 407 NONE, //!< NONE
giovannivisentini 19:0b65a5813059 408 DESELECT, //!< DESELECT
giovannivisentini 19:0b65a5813059 409 SELECT_APPLICATION, //!< SELECT_APPLICATION
giovannivisentini 19:0b65a5813059 410 SELECT_CC_FILE, //!< SELECT_CC_FILE
giovannivisentini 19:0b65a5813059 411 SELECT_NDEF_FILE, //!< SELECT_NDEF_FILE
giovannivisentini 19:0b65a5813059 412 SELECT_SYSTEM_FILE, //!< SELECT_SYSTEM_FILE
giovannivisentini 19:0b65a5813059 413 READ, //!< READ
giovannivisentini 19:0b65a5813059 414 UPDATE, //!< UPDATE
giovannivisentini 19:0b65a5813059 415 VERIFY, //!< VERIFY
giovannivisentini 19:0b65a5813059 416 MANAGE_I2C_GPO, //!< MANAGE_I2C_GPO
giovannivisentini 19:0b65a5813059 417 MANAGE_RF_GPO, //!< MANAGE_RF_GPO
giovannivisentini 19:0b65a5813059 418 CHANGE_REFERENCE_DATA, //!< CHANGE_REFERENCE_DATA
giovannivisentini 19:0b65a5813059 419 ENABLE_VERIFICATION_REQUIREMENT, //!< ENABLE_VERIFICATION_REQUIREMENT
giovannivisentini 19:0b65a5813059 420 DISABLE_VERIFICATION_REQUIREMENT,//!< DISABLE_VERIFICATION_REQUIREMENT
giovannivisentini 19:0b65a5813059 421 ENABLE_PERMANET_STATE, //!< ENABLE_PERMANET_STATE
giovannivisentini 19:0b65a5813059 422 DISABLE_PERMANET_STATE, //!< DISABLE_PERMANET_STATE
giovannivisentini 19:0b65a5813059 423 }M24SR_command_t;
giovannivisentini 19:0b65a5813059 424
giovannivisentini 19:0b65a5813059 425 /**
giovannivisentini 24:9f98eafa2d39 426 * User parameter used to invoke a command,
giovannivisentini 24:9f98eafa2d39 427 * it is used to provide the data back with the response
giovannivisentini 19:0b65a5813059 428 */
giovannivisentini 19:0b65a5813059 429 typedef struct{
giovannivisentini 19:0b65a5813059 430 uint8_t *data; //!< data
giovannivisentini 24:9f98eafa2d39 431 uint16_t length; //!< number of bytes in the data array
giovannivisentini 19:0b65a5813059 432 uint16_t offset; //!< offset parameter used in the read/write command
giovannivisentini 19:0b65a5813059 433 }M24SR_command_data_t;
giovannivisentini 19:0b65a5813059 434
giovannivisentini 19:0b65a5813059 435 /**
giovannivisentini 23:d07138541feb 436 * Communication mode used by this device
giovannivisentini 19:0b65a5813059 437 */
giovannivisentini 19:0b65a5813059 438 typedef enum{
giovannivisentini 24:9f98eafa2d39 439 SYNC,//!< SYNC wait the command response before returning
giovannivisentini 24:9f98eafa2d39 440 ASYNC//!< ASYNC use a callback to notify the end of a command
giovannivisentini 19:0b65a5813059 441 }M24SR_communication_t;
giovannivisentini 19:0b65a5813059 442
giovannivisentini 19:0b65a5813059 443 /**
giovannivisentini 24:9f98eafa2d39 444 * Type of communication being used
giovannivisentini 19:0b65a5813059 445 */
giovannivisentini 19:0b65a5813059 446 M24SR_communication_t mCommunicationType;
giovannivisentini 19:0b65a5813059 447
giovannivisentini 19:0b65a5813059 448 /**
giovannivisentini 24:9f98eafa2d39 449 * Last pending command
giovannivisentini 19:0b65a5813059 450 */
giovannivisentini 19:0b65a5813059 451 M24SR_command_t mLastCommandSend;
giovannivisentini 19:0b65a5813059 452
giovannivisentini 19:0b65a5813059 453 /**
giovannivisentini 24:9f98eafa2d39 454 * Parameter used to invoke the last command
giovannivisentini 19:0b65a5813059 455 */
giovannivisentini 19:0b65a5813059 456 M24SR_command_data_t mLastCommandData;
giovannivisentini 19:0b65a5813059 457
giovannivisentini 23:d07138541feb 458 /**
giovannivisentini 24:9f98eafa2d39 459 * Interrupt object fired when the gpo status changes
giovannivisentini 23:d07138541feb 460 */
giovannivisentini 19:0b65a5813059 461 InterruptIn mGpoEventInterrupt;
giovannivisentini 12:d1f5eaa85deb 462 private:
giovannivisentini 12:d1f5eaa85deb 463
giovannivisentini 19:0b65a5813059 464
giovannivisentini 19:0b65a5813059 465 /**
giovannivisentini 19:0b65a5813059 466 * Object with the callback used to send a ManageGPO command.
giovannivisentini 24:9f98eafa2d39 467 * This class is equivalent to calling the methods:
giovannivisentini 19:0b65a5813059 468 * <ul>
giovannivisentini 19:0b65a5813059 469 * <li> SelectedApplication </li>
giovannivisentini 19:0b65a5813059 470 * <li> SelectSystemfile </li>
giovannivisentini 19:0b65a5813059 471 * <li> ReadBinar: read the old value </li>
giovannivisentini 24:9f98eafa2d39 472 * <li> onVerified </li>
giovannivisentini 19:0b65a5813059 473 * <li> onUpdatedBinary: write the new value</li>
giovannivisentini 19:0b65a5813059 474 * </ul>
giovannivisentini 19:0b65a5813059 475 */
giovannivisentini 24:9f98eafa2d39 476 class ManageGPOCallback : public Nfc::Callbacks{
giovannivisentini 19:0b65a5813059 477
giovannivisentini 19:0b65a5813059 478 public:
giovannivisentini 19:0b65a5813059 479
giovannivisentini 19:0b65a5813059 480 /**
giovannivisentini 24:9f98eafa2d39 481 * Build the chain of callbacks.
giovannivisentini 24:9f98eafa2d39 482 * @param parent Parent component to run the command on.
giovannivisentini 19:0b65a5813059 483 */
giovannivisentini 19:0b65a5813059 484 ManageGPOCallback(M24SR &parent):mParent(parent),
giovannivisentini 19:0b65a5813059 485 mGpoConfig(HIGH_IMPEDANCE),mReadGpoConfig(0),mI2CGpo(true){}
giovannivisentini 19:0b65a5813059 486
giovannivisentini 19:0b65a5813059 487
giovannivisentini 19:0b65a5813059 488 /**
giovannivisentini 24:9f98eafa2d39 489 * Command parameters.
giovannivisentini 24:9f98eafa2d39 490 * @param i2cGpo true to change the i2c gpo, false for the rf gpo.
giovannivisentini 19:0b65a5813059 491 * @param newConfig new gpo function.
giovannivisentini 19:0b65a5813059 492 */
giovannivisentini 19:0b65a5813059 493 void setNewGpoConfig(bool i2cGpo,NFC_GPO_MGMT newConfig){
giovannivisentini 19:0b65a5813059 494 mGpoConfig=newConfig;
giovannivisentini 19:0b65a5813059 495 mI2CGpo =i2cGpo;
giovannivisentini 19:0b65a5813059 496 }
giovannivisentini 19:0b65a5813059 497
giovannivisentini 19:0b65a5813059 498 virtual void onSelectedApplication(Nfc *nfc,NFC_StatusTypeDef status){
giovannivisentini 19:0b65a5813059 499 if(status==NFC_SUCCESS)
giovannivisentini 19:0b65a5813059 500 nfc->SelectSystemfile();
giovannivisentini 19:0b65a5813059 501 else
giovannivisentini 19:0b65a5813059 502 onFinishCommand(nfc,status);
giovannivisentini 19:0b65a5813059 503 }
giovannivisentini 19:0b65a5813059 504
giovannivisentini 19:0b65a5813059 505 virtual void onSelectedSystemFile(Nfc *nfc,NFC_StatusTypeDef status){
giovannivisentini 19:0b65a5813059 506 if(status==NFC_SUCCESS)
giovannivisentini 19:0b65a5813059 507 nfc->ReadBinary(0x0004, 0x01, &mReadGpoConfig);
giovannivisentini 19:0b65a5813059 508 else
giovannivisentini 19:0b65a5813059 509 onFinishCommand(nfc,status);
giovannivisentini 19:0b65a5813059 510 }
giovannivisentini 19:0b65a5813059 511
giovannivisentini 19:0b65a5813059 512 virtual void onReadByte(Nfc *nfc,NFC_StatusTypeDef status,
giovannivisentini 19:0b65a5813059 513 uint16_t,uint8_t*, uint16_t ){
giovannivisentini 19:0b65a5813059 514 if(status==NFC_SUCCESS)
giovannivisentini 19:0b65a5813059 515 nfc->Verify(M24SR::I2CPwd, 0x10, M24SR::DEFAULT_PASSWORD);
giovannivisentini 19:0b65a5813059 516 else
giovannivisentini 19:0b65a5813059 517 onFinishCommand(nfc,status);
giovannivisentini 19:0b65a5813059 518 }
giovannivisentini 19:0b65a5813059 519
giovannivisentini 24:9f98eafa2d39 520 virtual void onVerified(Nfc *nfc,NFC_StatusTypeDef status,PasswordType_t, const uint8_t*){
giovannivisentini 19:0b65a5813059 521 if(status!=NFC_SUCCESS)
giovannivisentini 19:0b65a5813059 522 return onFinishCommand(nfc,status);
giovannivisentini 19:0b65a5813059 523
giovannivisentini 19:0b65a5813059 524 if(mI2CGpo)
giovannivisentini 19:0b65a5813059 525 mReadGpoConfig = (mReadGpoConfig & 0xF0) | (uint8_t)mGpoConfig;
giovannivisentini 19:0b65a5813059 526 else
giovannivisentini 19:0b65a5813059 527 mReadGpoConfig = (mReadGpoConfig & 0x0F) | (((uint8_t)mGpoConfig)<<4);
giovannivisentini 19:0b65a5813059 528
giovannivisentini 19:0b65a5813059 529 nfc->UpdateBinary(0x0004, 0x01, &mReadGpoConfig);
giovannivisentini 19:0b65a5813059 530 }
giovannivisentini 19:0b65a5813059 531
giovannivisentini 19:0b65a5813059 532 virtual void onUpdatedBinary(Nfc *nfc,NFC_StatusTypeDef status,
giovannivisentini 19:0b65a5813059 533 uint16_t , uint8_t*, uint16_t ){
giovannivisentini 19:0b65a5813059 534
giovannivisentini 19:0b65a5813059 535 if(status==NFC_SUCCESS){
giovannivisentini 19:0b65a5813059 536 if (mGpoConfig == I2C_ANSWER_READY){
giovannivisentini 19:0b65a5813059 537 mParent.mCommunicationType = ASYNC;
giovannivisentini 19:0b65a5813059 538 }else{
giovannivisentini 19:0b65a5813059 539 mParent.mCommunicationType = SYNC;
giovannivisentini 19:0b65a5813059 540 }//if-else
giovannivisentini 19:0b65a5813059 541 }//status
giovannivisentini 19:0b65a5813059 542 onFinishCommand(nfc,status);
giovannivisentini 19:0b65a5813059 543 }
giovannivisentini 19:0b65a5813059 544
giovannivisentini 19:0b65a5813059 545 private:
giovannivisentini 19:0b65a5813059 546
giovannivisentini 19:0b65a5813059 547 /**
giovannivisentini 24:9f98eafa2d39 548 * Remove the private callback and call the user callback.
giovannivisentini 25:caa16fd0e50b 549 * @param nfc Object where the command was send to.
giovannivisentini 24:9f98eafa2d39 550 * @param status Command status.
giovannivisentini 19:0b65a5813059 551 */
giovannivisentini 19:0b65a5813059 552 void onFinishCommand(Nfc *nfc,NFC_StatusTypeDef status){
giovannivisentini 19:0b65a5813059 553 mParent.mComponentCallback=NULL;
giovannivisentini 19:0b65a5813059 554 if(mI2CGpo){
giovannivisentini 19:0b65a5813059 555 mParent.mCallback->onManageI2CGPO(nfc,status,mGpoConfig);
giovannivisentini 19:0b65a5813059 556 }else{
giovannivisentini 19:0b65a5813059 557 mParent.mCallback->onManageRFGPO(nfc,status,mGpoConfig);
giovannivisentini 19:0b65a5813059 558 }//if-else
giovannivisentini 19:0b65a5813059 559 }//onFinishCommand
giovannivisentini 19:0b65a5813059 560
giovannivisentini 19:0b65a5813059 561 /**
giovannivisentini 24:9f98eafa2d39 562 * Component where send the commands
giovannivisentini 19:0b65a5813059 563 */
giovannivisentini 19:0b65a5813059 564 M24SR &mParent;
giovannivisentini 19:0b65a5813059 565
giovannivisentini 19:0b65a5813059 566 /** new gpo function that this class has to write */
giovannivisentini 19:0b65a5813059 567 NFC_GPO_MGMT mGpoConfig;
giovannivisentini 19:0b65a5813059 568
giovannivisentini 19:0b65a5813059 569 /**
giovannivisentini 24:9f98eafa2d39 570 * variable where storeing the read gpo configuration
giovannivisentini 19:0b65a5813059 571 */
giovannivisentini 19:0b65a5813059 572 uint8_t mReadGpoConfig;
giovannivisentini 19:0b65a5813059 573
giovannivisentini 19:0b65a5813059 574 /**
giovannivisentini 24:9f98eafa2d39 575 * true to change the i2c gpo, false to change the rf gpo
giovannivisentini 19:0b65a5813059 576 */
giovannivisentini 19:0b65a5813059 577 bool mI2CGpo;
giovannivisentini 19:0b65a5813059 578
giovannivisentini 19:0b65a5813059 579 };
giovannivisentini 19:0b65a5813059 580
giovannivisentini 19:0b65a5813059 581 /**
giovannivisentini 19:0b65a5813059 582 * Object containing the callback chain needed to change the gpo function
giovannivisentini 19:0b65a5813059 583 */
giovannivisentini 19:0b65a5813059 584 ManageGPOCallback mManageGPOCallback;
giovannivisentini 19:0b65a5813059 585
giovannivisentini 19:0b65a5813059 586
giovannivisentini 19:0b65a5813059 587 /**
giovannivisentini 19:0b65a5813059 588 * Object with the callback used to read the component ID
giovannivisentini 24:9f98eafa2d39 589 * This class is equivalent to calling the methods:
giovannivisentini 19:0b65a5813059 590 * <ul>
giovannivisentini 19:0b65a5813059 591 * <li> SelectedApplication </li>
giovannivisentini 19:0b65a5813059 592 * <li> SelectSystemfile </li>
giovannivisentini 19:0b65a5813059 593 * <li> ReadBinary </li>
giovannivisentini 19:0b65a5813059 594 * </ul>
giovannivisentini 19:0b65a5813059 595 */
giovannivisentini 24:9f98eafa2d39 596 class ReadIDCallback : public Nfc::Callbacks{
giovannivisentini 19:0b65a5813059 597
giovannivisentini 19:0b65a5813059 598 public:
giovannivisentini 19:0b65a5813059 599
giovannivisentini 19:0b65a5813059 600 /**
giovannivisentini 24:9f98eafa2d39 601 * Build the chain of callbacks.
giovannivisentini 24:9f98eafa2d39 602 * @param parent object where to send the command to.
giovannivisentini 19:0b65a5813059 603 */
giovannivisentini 19:0b65a5813059 604 ReadIDCallback(M24SR &parent):mParent(parent),mIdPtr(NULL){}
giovannivisentini 19:0b65a5813059 605
giovannivisentini 19:0b65a5813059 606 /**
giovannivisentini 24:9f98eafa2d39 607 * Set the variable containing the result
giovannivisentini 19:0b65a5813059 608 * @param idPtr
giovannivisentini 19:0b65a5813059 609 */
giovannivisentini 19:0b65a5813059 610 void readIdOn(uint8_t *idPtr){
giovannivisentini 19:0b65a5813059 611 mIdPtr=idPtr;
giovannivisentini 19:0b65a5813059 612 }
giovannivisentini 19:0b65a5813059 613
giovannivisentini 19:0b65a5813059 614 virtual void onSelectedApplication(Nfc *nfc,NFC_StatusTypeDef status){
giovannivisentini 19:0b65a5813059 615 if(status==NFC_SUCCESS){
giovannivisentini 19:0b65a5813059 616 nfc->SelectSystemfile();
giovannivisentini 19:0b65a5813059 617 }else
giovannivisentini 19:0b65a5813059 618 onFinishCommand(nfc,status);
giovannivisentini 19:0b65a5813059 619
giovannivisentini 19:0b65a5813059 620 }
giovannivisentini 19:0b65a5813059 621
giovannivisentini 19:0b65a5813059 622 virtual void onSelectedSystemFile(Nfc *nfc,NFC_StatusTypeDef status){
giovannivisentini 19:0b65a5813059 623 if(status==NFC_SUCCESS){
giovannivisentini 19:0b65a5813059 624 nfc->ReadBinary(0x0011, 0x01, mIdPtr);
giovannivisentini 19:0b65a5813059 625 }else
giovannivisentini 19:0b65a5813059 626 onFinishCommand(nfc,status);
giovannivisentini 19:0b65a5813059 627 }
giovannivisentini 19:0b65a5813059 628
giovannivisentini 19:0b65a5813059 629 virtual void onReadByte(Nfc *nfc,NFC_StatusTypeDef status,
giovannivisentini 19:0b65a5813059 630 uint16_t ,uint8_t *, uint16_t ){
giovannivisentini 19:0b65a5813059 631 onFinishCommand(nfc,status);
giovannivisentini 19:0b65a5813059 632 }
giovannivisentini 19:0b65a5813059 633
giovannivisentini 19:0b65a5813059 634 private:
giovannivisentini 19:0b65a5813059 635
giovannivisentini 19:0b65a5813059 636 /**
giovannivisentini 24:9f98eafa2d39 637 * Remove the private callback and call the user onReadId function.
giovannivisentini 24:9f98eafa2d39 638 * @param nfc Object where the command was send.
giovannivisentini 24:9f98eafa2d39 639 * @param status Command status.
giovannivisentini 19:0b65a5813059 640 */
giovannivisentini 19:0b65a5813059 641 void onFinishCommand(Nfc *nfc,NFC_StatusTypeDef status){
giovannivisentini 19:0b65a5813059 642 mParent.mComponentCallback=NULL;
giovannivisentini 19:0b65a5813059 643 mParent.getCallback()->onReadId(nfc,status,mIdPtr);
giovannivisentini 19:0b65a5813059 644 }
giovannivisentini 19:0b65a5813059 645
giovannivisentini 21:ccc4f3fed4b3 646 M24SR& mParent;
giovannivisentini 19:0b65a5813059 647
giovannivisentini 19:0b65a5813059 648 /**
giovannivisentini 24:9f98eafa2d39 649 * pointer to read id
giovannivisentini 19:0b65a5813059 650 */
giovannivisentini 19:0b65a5813059 651 uint8_t *mIdPtr;
giovannivisentini 19:0b65a5813059 652 };
giovannivisentini 19:0b65a5813059 653
giovannivisentini 24:9f98eafa2d39 654
giovannivisentini 19:0b65a5813059 655 /**
giovannivisentini 19:0b65a5813059 656 * Object containing the callback chain needed to read the component id
giovannivisentini 19:0b65a5813059 657 */
giovannivisentini 19:0b65a5813059 658 ReadIDCallback mReadIDCallback;
giovannivisentini 24:9f98eafa2d39 659 friend class ReadIDCallback;
giovannivisentini 19:0b65a5813059 660
giovannivisentini 19:0b65a5813059 661 /**
giovannivisentini 12:d1f5eaa85deb 662 * Convert a generic enum to the value used by the M24SR chip.
giovannivisentini 12:d1f5eaa85deb 663 * @param type Password type.
giovannivisentini 12:d1f5eaa85deb 664 * @return equivalent value used inside the m24sr chip */
giovannivisentini 12:d1f5eaa85deb 665 uint16_t passwordTypeToConst(const PasswordType_t &type)const{
giovannivisentini 12:d1f5eaa85deb 666 switch(type){
giovannivisentini 12:d1f5eaa85deb 667 case ReadPwd:
giovannivisentini 12:d1f5eaa85deb 668 return READ_PWD;
giovannivisentini 12:d1f5eaa85deb 669 case WritePwd:
giovannivisentini 12:d1f5eaa85deb 670 return WRITE_PWD;
giovannivisentini 12:d1f5eaa85deb 671 case I2CPwd:
giovannivisentini 12:d1f5eaa85deb 672 default:
giovannivisentini 12:d1f5eaa85deb 673 return I2C_PWD;
giovannivisentini 19:0b65a5813059 674 }//switch
giovannivisentini 12:d1f5eaa85deb 675 }//passwordTypeToConst
giovannivisentini 12:d1f5eaa85deb 676
giovannivisentini 19:0b65a5813059 677 /**
giovannivisentini 19:0b65a5813059 678 * convert a uint16 into an enum value
giovannivisentini 19:0b65a5813059 679 * @param type
giovannivisentini 19:0b65a5813059 680 * @return
giovannivisentini 19:0b65a5813059 681 */
giovannivisentini 19:0b65a5813059 682 PasswordType_t constToPasswordType(const uint16_t type)const{
giovannivisentini 19:0b65a5813059 683 switch(type){
giovannivisentini 19:0b65a5813059 684 case READ_PWD:
giovannivisentini 19:0b65a5813059 685 return ReadPwd;
giovannivisentini 19:0b65a5813059 686 case WRITE_PWD:
giovannivisentini 19:0b65a5813059 687 return WritePwd;
giovannivisentini 19:0b65a5813059 688 case I2C_PWD:
giovannivisentini 19:0b65a5813059 689 default:
giovannivisentini 19:0b65a5813059 690 return I2CPwd;
giovannivisentini 19:0b65a5813059 691 }//switch
giovannivisentini 19:0b65a5813059 692 }//passwordTypeToConst
giovannivisentini 0:969a2be49f41 693 };
giovannivisentini 0:969a2be49f41 694
giovannivisentini 0:969a2be49f41 695 #endif // __M24SR_CLASS_H
giovannivisentini 0:969a2be49f41 696
giovannivisentini 0:969a2be49f41 697 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/