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:
Fri Jan 29 15:06:30 2016 +0000
Revision:
21:ccc4f3fed4b3
Parent:
20:aad5727cb8c6
Child:
23:d07138541feb
move abstract function inside the Nfc class + rename killSession to ForceGetSession

Who changed what in which revision?

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