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:
Tue Jan 12 14:24:42 2016 +0000
Revision:
11:a798ebea69fa
Parent:
7:19fc04b8fec6
Nfc_class doesn't depent by m24sr.h;

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 6:96389fb79676 5 * @date 05 Nov 2015
giovannivisentini 0:969a2be49f41 6 * @brief This file provides a set of functions to interface with the M24SR
giovannivisentini 0:969a2be49f41 7 * device.
giovannivisentini 0:969a2be49f41 8 ******************************************************************************
giovannivisentini 0:969a2be49f41 9 * @attention
giovannivisentini 0:969a2be49f41 10 *
giovannivisentini 1:15d4a123ef6b 11 * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
giovannivisentini 0:969a2be49f41 12 *
giovannivisentini 0:969a2be49f41 13 * Redistribution and use in source and binary forms, with or without modification,
giovannivisentini 0:969a2be49f41 14 * are permitted provided that the following conditions are met:
giovannivisentini 0:969a2be49f41 15 * 1. Redistributions of source code must retain the above copyright notice,
giovannivisentini 0:969a2be49f41 16 * this list of conditions and the following disclaimer.
giovannivisentini 0:969a2be49f41 17 * 2. Redistributions in binary form must reproduce the above copyright notice,
giovannivisentini 0:969a2be49f41 18 * this list of conditions and the following disclaimer in the documentation
giovannivisentini 0:969a2be49f41 19 * and/or other materials provided with the distribution.
giovannivisentini 0:969a2be49f41 20 * 3. Neither the name of STMicroelectronics nor the names of its contributors
giovannivisentini 0:969a2be49f41 21 * may be used to endorse or promote products derived from this software
giovannivisentini 0:969a2be49f41 22 * without specific prior written permission.
giovannivisentini 0:969a2be49f41 23 *
giovannivisentini 0:969a2be49f41 24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
giovannivisentini 0:969a2be49f41 25 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
giovannivisentini 0:969a2be49f41 26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
giovannivisentini 0:969a2be49f41 27 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
giovannivisentini 0:969a2be49f41 28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
giovannivisentini 0:969a2be49f41 29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
giovannivisentini 0:969a2be49f41 30 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
giovannivisentini 0:969a2be49f41 31 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
giovannivisentini 0:969a2be49f41 32 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
giovannivisentini 0:969a2be49f41 33 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
giovannivisentini 0:969a2be49f41 34 *
giovannivisentini 0:969a2be49f41 35 ******************************************************************************
giovannivisentini 0:969a2be49f41 36 */
giovannivisentini 0:969a2be49f41 37
giovannivisentini 0:969a2be49f41 38 /* Revision ------------------------------------------------------------------*/
giovannivisentini 0:969a2be49f41 39 /*
giovannivisentini 0:969a2be49f41 40 Based on: X-CUBE-MEMS1/trunk/Drivers/BSP/Components/m24sr/m24sr.h
giovannivisentini 0:969a2be49f41 41 Revision: M24SR Driver V1.0.0
giovannivisentini 0:969a2be49f41 42 */
giovannivisentini 0:969a2be49f41 43
giovannivisentini 0:969a2be49f41 44 /* Define to prevent recursive inclusion -------------------------------------*/
giovannivisentini 0:969a2be49f41 45
giovannivisentini 0:969a2be49f41 46 #ifndef __M24SR_CLASS_H
giovannivisentini 0:969a2be49f41 47 #define __M24SR_CLASS_H
giovannivisentini 0:969a2be49f41 48
giovannivisentini 0:969a2be49f41 49 /* Includes ------------------------------------------------------------------*/
giovannivisentini 0:969a2be49f41 50
giovannivisentini 0:969a2be49f41 51 #include "mbed.h"
giovannivisentini 0:969a2be49f41 52 #include "I2C.h"
giovannivisentini 0:969a2be49f41 53
giovannivisentini 0:969a2be49f41 54 #include "m24sr.h"
giovannivisentini 0:969a2be49f41 55 #include "Interfaces/Nfc_class.h"
giovannivisentini 6:96389fb79676 56 #include "NDefNfcTagM24SR.h"
giovannivisentini 0:969a2be49f41 57
giovannivisentini 0:969a2be49f41 58 /* Classes -------------------------------------------------------------------*/
giovannivisentini 0:969a2be49f41 59
giovannivisentini 0:969a2be49f41 60 /** Class representing a M24SR component.
giovannivisentini 0:969a2be49f41 61 */
giovannivisentini 0:969a2be49f41 62 class M24SR: public Nfc {
giovannivisentini 0:969a2be49f41 63
giovannivisentini 0:969a2be49f41 64 public:
giovannivisentini 0:969a2be49f41 65
giovannivisentini 7:19fc04b8fec6 66 /**
giovannivisentini 7:19fc04b8fec6 67 * default password uesed for change the write/read permission
giovannivisentini 7:19fc04b8fec6 68 */
giovannivisentini 0:969a2be49f41 69 static const uint8_t DEFAULT_PASSWORD[16];
giovannivisentini 7:19fc04b8fec6 70
giovannivisentini 0:969a2be49f41 71 /*** Constructor and Destructor Methods ***/
giovannivisentini 0:969a2be49f41 72
giovannivisentini 0:969a2be49f41 73 /**
giovannivisentini 0:969a2be49f41 74 * @brief Constructor.
giovannivisentini 0:969a2be49f41 75 * @param address I2C address of the component.
giovannivisentini 0:969a2be49f41 76 * @param i2c I2C device to be used for communication.
giovannivisentini 7:19fc04b8fec6 77 * @param GPOPinName pin used as GPIO
giovannivisentini 7:19fc04b8fec6 78 * @param RFDISPinName pin used for disable the RF function
giovannivisentini 0:969a2be49f41 79 */
giovannivisentini 0:969a2be49f41 80 M24SR(const uint8_t address, I2C &i2c, const PinName& GPOPinName,
giovannivisentini 0:969a2be49f41 81 const PinName& RFDISPinName) :
giovannivisentini 0:969a2be49f41 82 Nfc(), address(address), dev_i2c(i2c), GPOPin(GPOPinName), RFDisablePin(
giovannivisentini 0:969a2be49f41 83 RFDISPinName), answerReadyInterrupt(GPOPinName), interruptIsFired(
giovannivisentini 6:96389fb79676 84 false),NDefTagUtil(*this) {
giovannivisentini 0:969a2be49f41 85
giovannivisentini 0:969a2be49f41 86 memset(uM24SRbuffer, 0, 0xFF * sizeof(int8_t));
giovannivisentini 0:969a2be49f41 87 syncMode = M24SR_WAITINGTIME_POLLING;
giovannivisentini 0:969a2be49f41 88 uDIDbyte = 0;
giovannivisentini 0:969a2be49f41 89 RFDisablePin = 0;
giovannivisentini 0:969a2be49f41 90 GPOPin.mode(PullNone);
giovannivisentini 0:969a2be49f41 91 answerReadyInterrupt.disable_irq();
giovannivisentini 0:969a2be49f41 92 answerReadyInterrupt.fall(this,
giovannivisentini 0:969a2be49f41 93 &M24SR::M24SR_AnswerReadyInterruptCallback);
giovannivisentini 0:969a2be49f41 94 answerReadyInterrupt.mode(PullUp);
giovannivisentini 0:969a2be49f41 95
giovannivisentini 0:969a2be49f41 96 }
giovannivisentini 0:969a2be49f41 97
giovannivisentini 0:969a2be49f41 98 /**
giovannivisentini 0:969a2be49f41 99 * @brief Destructor.
giovannivisentini 0:969a2be49f41 100 */
giovannivisentini 0:969a2be49f41 101 virtual ~M24SR(void) {
giovannivisentini 0:969a2be49f41 102 }
giovannivisentini 0:969a2be49f41 103
giovannivisentini 0:969a2be49f41 104 /*** Public Component Related Methods ***/
giovannivisentini 7:19fc04b8fec6 105
giovannivisentini 7:19fc04b8fec6 106 /**
giovannivisentini 7:19fc04b8fec6 107 * @brief This function initialize the M24SR device
giovannivisentini 7:19fc04b8fec6 108 * @param ptr configure paramiters, not used
giovannivisentini 7:19fc04b8fec6 109 * @return NFC_SUCCESS if no error happen
giovannivisentini 7:19fc04b8fec6 110 */
giovannivisentini 0:969a2be49f41 111 virtual int Init(void *ptr) {
giovannivisentini 0:969a2be49f41 112 return (NFC_StatusTypeDef) M24SR_Init((NFC_InitTypeDef*)ptr);
giovannivisentini 0:969a2be49f41 113 }
giovannivisentini 0:969a2be49f41 114
giovannivisentini 0:969a2be49f41 115 virtual int ReadID(uint8_t *id) {
giovannivisentini 0:969a2be49f41 116 return (NFC_StatusTypeDef) M24SR_ReadID((uint8_t *) id);
giovannivisentini 0:969a2be49f41 117 }
giovannivisentini 0:969a2be49f41 118
giovannivisentini 0:969a2be49f41 119 /** lock the tag channel */
giovannivisentini 0:969a2be49f41 120 virtual NFC_StatusTypeDef GetSession(void) {
giovannivisentini 0:969a2be49f41 121 return (NFC_StatusTypeDef) M24SR_GetSession();
giovannivisentini 0:969a2be49f41 122 }
giovannivisentini 0:969a2be49f41 123
giovannivisentini 0:969a2be49f41 124 virtual NFC_StatusTypeDef KillSession(void) {
giovannivisentini 0:969a2be49f41 125 return (NFC_StatusTypeDef) M24SR_KillSession();
giovannivisentini 0:969a2be49f41 126 }
giovannivisentini 0:969a2be49f41 127
giovannivisentini 0:969a2be49f41 128 virtual NFC_StatusTypeDef Deselect(void) {
giovannivisentini 0:969a2be49f41 129 return (NFC_StatusTypeDef) M24SR_Deselect();
giovannivisentini 0:969a2be49f41 130 }
giovannivisentini 0:969a2be49f41 131
giovannivisentini 7:19fc04b8fec6 132 ////////// tag4 command ////////////////////
giovannivisentini 7:19fc04b8fec6 133
giovannivisentini 0:969a2be49f41 134 virtual NFC_StatusTypeDef SelectApplication(void) {
giovannivisentini 0:969a2be49f41 135 return (NFC_StatusTypeDef) M24SR_SelectApplication();
giovannivisentini 0:969a2be49f41 136 }
giovannivisentini 0:969a2be49f41 137
giovannivisentini 0:969a2be49f41 138 virtual NFC_StatusTypeDef SelectCCfile(void) {
giovannivisentini 0:969a2be49f41 139 return (NFC_StatusTypeDef) M24SR_SelectCCfile();
giovannivisentini 0:969a2be49f41 140 }
giovannivisentini 0:969a2be49f41 141
giovannivisentini 0:969a2be49f41 142 virtual NFC_StatusTypeDef SelectNDEFfile(uint16_t NDEFfileId) {
giovannivisentini 0:969a2be49f41 143 return (NFC_StatusTypeDef) M24SR_SelectNDEFfile((uint16_t) NDEFfileId);
giovannivisentini 0:969a2be49f41 144 }
giovannivisentini 0:969a2be49f41 145
giovannivisentini 0:969a2be49f41 146 virtual NFC_StatusTypeDef SelectSystemfile(void) {
giovannivisentini 0:969a2be49f41 147 return (NFC_StatusTypeDef) M24SR_SelectSystemfile();
giovannivisentini 0:969a2be49f41 148 }
giovannivisentini 0:969a2be49f41 149
giovannivisentini 0:969a2be49f41 150 virtual NFC_StatusTypeDef ReadBinary(uint16_t Offset, uint8_t NbByteToRead,
giovannivisentini 0:969a2be49f41 151 uint8_t *pBufferRead) {
giovannivisentini 0:969a2be49f41 152 return (NFC_StatusTypeDef) M24SR_ReadBinary((uint16_t) Offset,
giovannivisentini 0:969a2be49f41 153 (uint8_t) NbByteToRead, (uint8_t *) pBufferRead);
giovannivisentini 0:969a2be49f41 154 }
giovannivisentini 0:969a2be49f41 155
giovannivisentini 0:969a2be49f41 156 virtual NFC_StatusTypeDef UpdateBinary(uint16_t Offset,
giovannivisentini 0:969a2be49f41 157 uint8_t NbByteToWrite, uint8_t *pDataToWrite) {
giovannivisentini 0:969a2be49f41 158 return (NFC_StatusTypeDef) M24SR_UpdateBinary((uint16_t) Offset,
giovannivisentini 0:969a2be49f41 159 (uint8_t) NbByteToWrite, (uint8_t *) pDataToWrite);
giovannivisentini 0:969a2be49f41 160 }
giovannivisentini 0:969a2be49f41 161
giovannivisentini 7:19fc04b8fec6 162 /////////////////// iso 7816-4 commands //////////////////////////
giovannivisentini 7:19fc04b8fec6 163
giovannivisentini 0:969a2be49f41 164 virtual NFC_StatusTypeDef Verify(PasswordType_t pwdId, uint8_t NbPwdByte,
giovannivisentini 0:969a2be49f41 165 const uint8_t *pPwd) {
giovannivisentini 11:a798ebea69fa 166 return (NFC_StatusTypeDef) M24SR_Verify(passTypeToIntFlag(pwdId),
giovannivisentini 0:969a2be49f41 167 (uint8_t) NbPwdByte, pPwd);
giovannivisentini 0:969a2be49f41 168 }
giovannivisentini 0:969a2be49f41 169
giovannivisentini 0:969a2be49f41 170 virtual NFC_StatusTypeDef ChangeReferenceData(PasswordType_t pwdId,
giovannivisentini 0:969a2be49f41 171 const uint8_t *pPwd) {
giovannivisentini 11:a798ebea69fa 172 return (NFC_StatusTypeDef) M24SR_ChangeReferenceData(passTypeToIntFlag(pwdId),
giovannivisentini 0:969a2be49f41 173 (uint8_t *) pPwd);
giovannivisentini 0:969a2be49f41 174 }
giovannivisentini 0:969a2be49f41 175
giovannivisentini 0:969a2be49f41 176 virtual NFC_StatusTypeDef EnableVerificationRequirement(
giovannivisentini 0:969a2be49f41 177 PasswordType_t uReadOrWrite) {
giovannivisentini 0:969a2be49f41 178 return (NFC_StatusTypeDef) M24SR_EnableVerificationRequirement(
giovannivisentini 11:a798ebea69fa 179 passTypeToIntFlag(uReadOrWrite));
giovannivisentini 0:969a2be49f41 180 }
giovannivisentini 0:969a2be49f41 181
giovannivisentini 0:969a2be49f41 182 virtual NFC_StatusTypeDef DisableVerificationRequirement(
giovannivisentini 0:969a2be49f41 183 PasswordType_t uReadOrWrite) {
giovannivisentini 0:969a2be49f41 184 return (NFC_StatusTypeDef) M24SR_DisableVerificationRequirement(
giovannivisentini 11:a798ebea69fa 185 passTypeToIntFlag(uReadOrWrite));
giovannivisentini 0:969a2be49f41 186 }
giovannivisentini 0:969a2be49f41 187
giovannivisentini 7:19fc04b8fec6 188 ////////////////////// ST proprietary //////////////////////////////////
giovannivisentini 7:19fc04b8fec6 189 /**
giovannivisentini 7:19fc04b8fec6 190 * as
giovannivisentini 7:19fc04b8fec6 191 */
giovannivisentini 0:969a2be49f41 192 virtual NFC_StatusTypeDef STReadBinary(uint16_t Offset,
giovannivisentini 0:969a2be49f41 193 uint8_t NbByteToRead, uint8_t *pBufferRead) {
giovannivisentini 0:969a2be49f41 194 return (NFC_StatusTypeDef) M24SR_STReadBinary((uint16_t) Offset,
giovannivisentini 0:969a2be49f41 195 (uint8_t) NbByteToRead, (uint8_t *) pBufferRead);
giovannivisentini 0:969a2be49f41 196 }
giovannivisentini 0:969a2be49f41 197
giovannivisentini 0:969a2be49f41 198 virtual NFC_StatusTypeDef EnablePermanentState(PasswordType_t uReadOrWrite) {
giovannivisentini 0:969a2be49f41 199 return (NFC_StatusTypeDef) M24SR_EnablePermanentState(
giovannivisentini 11:a798ebea69fa 200 passTypeToIntFlag(uReadOrWrite));
giovannivisentini 0:969a2be49f41 201 }
giovannivisentini 0:969a2be49f41 202
giovannivisentini 0:969a2be49f41 203 virtual NFC_StatusTypeDef DisablePermanentState(PasswordType_t uReadOrWrite) {
giovannivisentini 0:969a2be49f41 204 return (NFC_StatusTypeDef) M24SR_DisablePermanentState(
giovannivisentini 11:a798ebea69fa 205 passTypeToIntFlag(uReadOrWrite));
giovannivisentini 0:969a2be49f41 206 }
giovannivisentini 0:969a2be49f41 207
giovannivisentini 7:19fc04b8fec6 208 ///////////////////// chip configuration /////////////////////////////////
giovannivisentini 0:969a2be49f41 209 virtual NFC_StatusTypeDef StateControl(uint8_t uSetOrReset) {
giovannivisentini 0:969a2be49f41 210 return (NFC_StatusTypeDef) M24SR_StateControl((uint8_t) uSetOrReset);
giovannivisentini 0:969a2be49f41 211 }
giovannivisentini 0:969a2be49f41 212
giovannivisentini 0:969a2be49f41 213 virtual NFC_StatusTypeDef ManageI2CGPO(uint8_t GPO_I2Cconfig) {
giovannivisentini 0:969a2be49f41 214 return (NFC_StatusTypeDef) M24SR_ManageI2CGPO(
giovannivisentini 0:969a2be49f41 215 (M24SR_GPO_MGMT) GPO_I2Cconfig);
giovannivisentini 0:969a2be49f41 216 }
giovannivisentini 0:969a2be49f41 217
giovannivisentini 0:969a2be49f41 218 virtual NFC_StatusTypeDef ManageRFGPO(uint8_t GPO_RFconfig) {
giovannivisentini 0:969a2be49f41 219 return (NFC_StatusTypeDef) M24SR_ManageRFGPO(
giovannivisentini 0:969a2be49f41 220 (M24SR_GPO_MGMT) GPO_RFconfig);
giovannivisentini 0:969a2be49f41 221 }
giovannivisentini 0:969a2be49f41 222
giovannivisentini 0:969a2be49f41 223 virtual NFC_StatusTypeDef RFConfig(uint8_t OnOffChoice) {
giovannivisentini 0:969a2be49f41 224 return (NFC_StatusTypeDef) M24SR_RFConfig((uint8_t) OnOffChoice);
giovannivisentini 0:969a2be49f41 225 }
giovannivisentini 0:969a2be49f41 226
giovannivisentini 7:19fc04b8fec6 227 /**
giovannivisentini 7:19fc04b8fec6 228 * Generates a negative pulse on the GPO pin.
giovannivisentini 7:19fc04b8fec6 229 * It starts at the end of the command and ends at the end of the RF response
giovannivisentini 7:19fc04b8fec6 230 * @return NFC_SUCCESS if no error happen
giovannivisentini 7:19fc04b8fec6 231 */
giovannivisentini 0:969a2be49f41 232 virtual NFC_StatusTypeDef SendInterrupt(void) {
giovannivisentini 0:969a2be49f41 233 return (NFC_StatusTypeDef) M24SR_SendInterrupt();
giovannivisentini 0:969a2be49f41 234 }
giovannivisentini 0:969a2be49f41 235
giovannivisentini 6:96389fb79676 236 /////////////////// hight level/utility function /////////////////////
giovannivisentini 6:96389fb79676 237
giovannivisentini 7:19fc04b8fec6 238 /**
giovannivisentini 7:19fc04b8fec6 239 * get an implementation of NDefNfcTag for use the library NDefLib
giovannivisentini 7:19fc04b8fec6 240 * @retrun object of type NdefNfcTag for use this M24SR component
giovannivisentini 7:19fc04b8fec6 241 */
giovannivisentini 6:96389fb79676 242 NDefLib::NDefNfcTag& getNDefTag(){
giovannivisentini 6:96389fb79676 243 return NDefTagUtil;
giovannivisentini 6:96389fb79676 244 }
giovannivisentini 6:96389fb79676 245
giovannivisentini 6:96389fb79676 246
giovannivisentini 7:19fc04b8fec6 247 /**
giovannivisentini 7:19fc04b8fec6 248 * enable the request of a password before read the tag
giovannivisentini 7:19fc04b8fec6 249 * @param pCurrentWritePassword current password ( use M24SR::DEFAULT_PASSWORD if it is the first time)
giovannivisentini 7:19fc04b8fec6 250 * @param pNewPassword password to request before read the tag
giovannivisentini 7:19fc04b8fec6 251 * @return return NFC_SUCCESS if no error happen
giovannivisentini 7:19fc04b8fec6 252 * @par the password must have a length of 16 char
giovannivisentini 7:19fc04b8fec6 253 */
giovannivisentini 6:96389fb79676 254 NFC_StatusTypeDef enableReadPassword(const uint8_t* pCurrentWritePassword,
giovannivisentini 6:96389fb79676 255 const uint8_t* pNewPassword);
giovannivisentini 6:96389fb79676 256
giovannivisentini 7:19fc04b8fec6 257 /**
giovannivisentini 7:19fc04b8fec6 258 * disable the request of a password before read the tag
giovannivisentini 7:19fc04b8fec6 259 * @param pCurrentWritePassword current password ( use M24SR::DEFAULT_PASSWORD if it is the first time)
giovannivisentini 7:19fc04b8fec6 260 * @return return NFC_SUCCESS if no error happen
giovannivisentini 7:19fc04b8fec6 261 * @par the password must have a length of 16 char
giovannivisentini 7:19fc04b8fec6 262 */
giovannivisentini 6:96389fb79676 263 NFC_StatusTypeDef disableReadPassword(const uint8_t* pCurrentWritePassword=M24SR::DEFAULT_PASSWORD);
giovannivisentini 6:96389fb79676 264
giovannivisentini 7:19fc04b8fec6 265 /**
giovannivisentini 7:19fc04b8fec6 266 * enable the request of a password before write the tag
giovannivisentini 7:19fc04b8fec6 267 * @param pCurrentWritePassword current password ( use M24SR::DEFAULT_PASSWORD if it is the first time)
giovannivisentini 7:19fc04b8fec6 268 * @param pNewPassword password to request before read the tag
giovannivisentini 7:19fc04b8fec6 269 * @return return NFC_SUCCESS if no error happen
giovannivisentini 7:19fc04b8fec6 270 * @par the password must have a length of 16 char
giovannivisentini 7:19fc04b8fec6 271 */
giovannivisentini 6:96389fb79676 272 NFC_StatusTypeDef enableWritePassword(const uint8_t* pCurrentWritePassword,
giovannivisentini 6:96389fb79676 273 uint8_t* pNewPassword);
giovannivisentini 6:96389fb79676 274
giovannivisentini 11:a798ebea69fa 275 /**
giovannivisentini 11:a798ebea69fa 276 * disable the request of a password before write the tag
giovannivisentini 11:a798ebea69fa 277 * @param pCurrentWritePassword current password ( use M24SR::DEFAULT_PASSWORD if it is the first time)
giovannivisentini 11:a798ebea69fa 278 * @return return NFC_SUCCESS if no error happen
giovannivisentini 11:a798ebea69fa 279 * @par the password must have a length of 16 char
giovannivisentini 11:a798ebea69fa 280 */
giovannivisentini 6:96389fb79676 281 NFC_StatusTypeDef disableWritePassword(const uint8_t* pCurrentWritePassword=M24SR::DEFAULT_PASSWORD);
giovannivisentini 6:96389fb79676 282
giovannivisentini 6:96389fb79676 283 /**
giovannivisentini 6:96389fb79676 284 * @brief This function deactivate the need of read and write password for next access
giovannivisentini 7:19fc04b8fec6 285 * @param pSuperUserPassword I2C super user password to overwrite read and write password
giovannivisentini 7:19fc04b8fec6 286 * @return return NFC_SUCCESS if no error happen
giovannivisentini 7:19fc04b8fec6 287 * @par the password must have a length of 16 char
giovannivisentini 6:96389fb79676 288 */
giovannivisentini 6:96389fb79676 289 NFC_StatusTypeDef disableAllPassword(const uint8_t* pSuperUserPassword=M24SR::DEFAULT_PASSWORD);
giovannivisentini 6:96389fb79676 290
giovannivisentini 6:96389fb79676 291 /**
giovannivisentini 6:96389fb79676 292 * @brief This function enable read only mode
giovannivisentini 7:19fc04b8fec6 293 * @param pCurrentWritePassword Write password is needed to have right to enable read only mode
giovannivisentini 7:19fc04b8fec6 294 * @return return NFC_SUCCESS if no error happen
giovannivisentini 7:19fc04b8fec6 295 * @par the password must have a length of 16 char
giovannivisentini 6:96389fb79676 296 */
giovannivisentini 6:96389fb79676 297 NFC_StatusTypeDef enableReadOnly(const uint8_t* pCurrentWritePassword=M24SR::DEFAULT_PASSWORD);
giovannivisentini 6:96389fb79676 298
giovannivisentini 6:96389fb79676 299 /**
giovannivisentini 6:96389fb79676 300 * @brief This fonction disable read only mode
giovannivisentini 7:19fc04b8fec6 301 * @param pCurrentWritePassword Write password is needed to have right to disable read only mode
giovannivisentini 7:19fc04b8fec6 302 * @return return NFC_SUCCESS if no error happen
giovannivisentini 7:19fc04b8fec6 303 * @par the password must have a length of 16 char
giovannivisentini 6:96389fb79676 304 */
giovannivisentini 6:96389fb79676 305 NFC_StatusTypeDef disableReadOnly();
giovannivisentini 6:96389fb79676 306
giovannivisentini 6:96389fb79676 307 /**
giovannivisentini 6:96389fb79676 308 * @brief This fonction enable write only mode
giovannivisentini 7:19fc04b8fec6 309 * @param pCurrentWritePassword Write password is needed to have right to enable write only mode
giovannivisentini 7:19fc04b8fec6 310 * @return return NFC_SUCCESS if no error happen
giovannivisentini 7:19fc04b8fec6 311 * @par the password must have a length of 16 char
giovannivisentini 6:96389fb79676 312 */
giovannivisentini 6:96389fb79676 313 NFC_StatusTypeDef enableWriteOnly(const uint8_t* pCurrentWritePassword=M24SR::DEFAULT_PASSWORD);
giovannivisentini 6:96389fb79676 314
giovannivisentini 6:96389fb79676 315 /**
giovannivisentini 6:96389fb79676 316 * @brief This fonction disable write only mode
giovannivisentini 7:19fc04b8fec6 317 * @param pCurrentWritePassword Write password is needed to have right to disable write only mode
giovannivisentini 7:19fc04b8fec6 318 * @return return NFC_SUCCESS if no error happen
giovannivisentini 7:19fc04b8fec6 319 * @par the password must have a length of 16 char
giovannivisentini 6:96389fb79676 320 */
giovannivisentini 6:96389fb79676 321 NFC_StatusTypeDef disableWriteOnly();
giovannivisentini 6:96389fb79676 322
giovannivisentini 0:969a2be49f41 323 protected:
giovannivisentini 0:969a2be49f41 324
giovannivisentini 0:969a2be49f41 325 /*** Protected Component Related Methods ***/
giovannivisentini 0:969a2be49f41 326
giovannivisentini 0:969a2be49f41 327 NFC_StatusTypeDef M24SR_Init(NFC_InitTypeDef *);
giovannivisentini 0:969a2be49f41 328 NFC_StatusTypeDef M24SR_ReadID(uint8_t *nfc_id);
giovannivisentini 0:969a2be49f41 329 NFC_StatusTypeDef M24SR_GetSession(void);
giovannivisentini 0:969a2be49f41 330 NFC_StatusTypeDef M24SR_KillSession(void);
giovannivisentini 0:969a2be49f41 331 NFC_StatusTypeDef M24SR_Deselect(void);
giovannivisentini 0:969a2be49f41 332 NFC_StatusTypeDef M24SR_SelectApplication(void);
giovannivisentini 0:969a2be49f41 333 NFC_StatusTypeDef M24SR_SelectCCfile(void);
giovannivisentini 0:969a2be49f41 334 NFC_StatusTypeDef M24SR_SelectNDEFfile(uint16_t NDEFfileId);
giovannivisentini 0:969a2be49f41 335 NFC_StatusTypeDef M24SR_SelectSystemfile(void);
giovannivisentini 0:969a2be49f41 336 NFC_StatusTypeDef M24SR_ReadBinary(uint16_t Offset, uint8_t NbByteToRead,
giovannivisentini 0:969a2be49f41 337 uint8_t *pBufferRead);
giovannivisentini 0:969a2be49f41 338 NFC_StatusTypeDef M24SR_STReadBinary(uint16_t Offset, uint8_t NbByteToRead,
giovannivisentini 0:969a2be49f41 339 uint8_t *pBufferRead);
giovannivisentini 0:969a2be49f41 340 NFC_StatusTypeDef M24SR_UpdateBinary(uint16_t Offset, uint8_t NbByteToWrite,
giovannivisentini 0:969a2be49f41 341 uint8_t *pDataToWrite);
giovannivisentini 0:969a2be49f41 342 NFC_StatusTypeDef M24SR_Verify(uint16_t uPwdId, uint8_t NbPwdByte,
giovannivisentini 0:969a2be49f41 343 const uint8_t *pPwd);
giovannivisentini 0:969a2be49f41 344 NFC_StatusTypeDef M24SR_ChangeReferenceData(uint16_t uPwdId, uint8_t *pPwd);
giovannivisentini 0:969a2be49f41 345 NFC_StatusTypeDef M24SR_EnableVerificationRequirement(
giovannivisentini 0:969a2be49f41 346 uint16_t uReadOrWrite);
giovannivisentini 0:969a2be49f41 347 NFC_StatusTypeDef M24SR_DisableVerificationRequirement(
giovannivisentini 0:969a2be49f41 348 uint16_t uReadOrWrite);
giovannivisentini 0:969a2be49f41 349 NFC_StatusTypeDef M24SR_EnablePermanentState(uint16_t uReadOrWrite);
giovannivisentini 0:969a2be49f41 350 NFC_StatusTypeDef M24SR_DisablePermanentState(uint16_t uReadOrWrite);
giovannivisentini 0:969a2be49f41 351 NFC_StatusTypeDef M24SR_SendInterrupt(void);
giovannivisentini 0:969a2be49f41 352 NFC_StatusTypeDef M24SR_StateControl(uint8_t uSetOrReset);
giovannivisentini 0:969a2be49f41 353 NFC_StatusTypeDef M24SR_ManageI2CGPO(M24SR_GPO_MGMT GPO_I2Cconfig);
giovannivisentini 0:969a2be49f41 354 NFC_StatusTypeDef M24SR_ManageRFGPO(M24SR_GPO_MGMT GPO_RFconfig);
giovannivisentini 0:969a2be49f41 355 NFC_StatusTypeDef M24SR_RFConfig(uint8_t OnOffChoice);
giovannivisentini 0:969a2be49f41 356 NFC_StatusTypeDef M24SR_FWTExtension(uint8_t FWTbyte);
giovannivisentini 0:969a2be49f41 357
giovannivisentini 7:19fc04b8fec6 358 /**
giovannivisentini 7:19fc04b8fec6 359 * wait until the answer is not ready
giovannivisentini 7:19fc04b8fec6 360 */
giovannivisentini 0:969a2be49f41 361 NFC_StatusTypeDef M24SR_IO_IsAnswerReady(void);
giovannivisentini 7:19fc04b8fec6 362
giovannivisentini 7:19fc04b8fec6 363 /**
giovannivisentini 7:19fc04b8fec6 364 * send a command to the component
giovannivisentini 7:19fc04b8fec6 365 * @param NbByte lenght of the command
giovannivisentini 7:19fc04b8fec6 366 * @param pBuffer buffer containing the command
giovannivisentini 7:19fc04b8fec6 367 * @return NFC_SUCCESS if no error happen
giovannivisentini 7:19fc04b8fec6 368 */
giovannivisentini 0:969a2be49f41 369 NFC_StatusTypeDef M24SR_IO_SendI2Ccommand(uint8_t NbByte, uint8_t *pBuffer);
giovannivisentini 7:19fc04b8fec6 370
giovannivisentini 7:19fc04b8fec6 371 /**
giovannivisentini 7:19fc04b8fec6 372 * read a command renspose
giovannivisentini 7:19fc04b8fec6 373 * @param NbByte number of byte to read
giovannivisentini 7:19fc04b8fec6 374 * @param pBuffer buffer where store the rensponse
giovannivisentini 7:19fc04b8fec6 375 * @return NFC_SUCCESS if no error happen
giovannivisentini 7:19fc04b8fec6 376 */
giovannivisentini 0:969a2be49f41 377 NFC_StatusTypeDef M24SR_IO_ReceiveI2Cresponse(uint8_t NbByte,
giovannivisentini 0:969a2be49f41 378 uint8_t *pBuffer);
giovannivisentini 0:969a2be49f41 379
giovannivisentini 7:19fc04b8fec6 380 /**
giovannivisentini 7:19fc04b8fec6 381 * do and active polling on the i2c bus until the answer is not ready
giovannivisentini 7:19fc04b8fec6 382 * @return NFC_SUCCESS if no error happen
giovannivisentini 7:19fc04b8fec6 383 */
giovannivisentini 0:969a2be49f41 384 NFC_StatusTypeDef M24SR_IO_PollI2C(void);
giovannivisentini 0:969a2be49f41 385
giovannivisentini 7:19fc04b8fec6 386 /**
giovannivisentini 7:19fc04b8fec6 387 * read the gpo pin
giovannivisentini 7:19fc04b8fec6 388 * @param[out] pPinState variable where store the pin state
giovannivisentini 7:19fc04b8fec6 389 */
giovannivisentini 0:969a2be49f41 390 void M24SR_IO_GPO_ReadPin(GPIO_PinState *pPinState) {
giovannivisentini 0:969a2be49f41 391 if (GPOPin == 0)
giovannivisentini 0:969a2be49f41 392 (*pPinState) = GPIO_PIN_RESET;
giovannivisentini 0:969a2be49f41 393 else
giovannivisentini 0:969a2be49f41 394 (*pPinState) = GPIO_PIN_SET;
giovannivisentini 0:969a2be49f41 395 }
giovannivisentini 0:969a2be49f41 396
giovannivisentini 7:19fc04b8fec6 397 /**
giovannivisentini 7:19fc04b8fec6 398 * write the gpo pin
giovannivisentini 7:19fc04b8fec6 399 * @param pPinState state to write
giovannivisentini 7:19fc04b8fec6 400 */
giovannivisentini 0:969a2be49f41 401 void M24SR_IO_RFDIS_WritePin(GPIO_PinState PinState) {
giovannivisentini 0:969a2be49f41 402 if (PinState == GPIO_PIN_RESET)
giovannivisentini 0:969a2be49f41 403 RFDisablePin = 0;
giovannivisentini 0:969a2be49f41 404 else
giovannivisentini 0:969a2be49f41 405 RFDisablePin = 1;
giovannivisentini 0:969a2be49f41 406 }
giovannivisentini 0:969a2be49f41 407
giovannivisentini 7:19fc04b8fec6 408 /**
giovannivisentini 7:19fc04b8fec6 409 * set how wait the command answer
giovannivisentini 7:19fc04b8fec6 410 * @param mode how to wait the i2c rensponse
giovannivisentini 7:19fc04b8fec6 411 */
giovannivisentini 0:969a2be49f41 412 void M24SR_IO_SetI2CSynchroMode(M24SR_WAITINGTIME_MGMT mode) {
giovannivisentini 0:969a2be49f41 413 syncMode = mode;
giovannivisentini 0:969a2be49f41 414 }
giovannivisentini 0:969a2be49f41 415
giovannivisentini 0:969a2be49f41 416 /**
giovannivisentini 0:969a2be49f41 417 * callback trigger when the chip finish to do a command
giovannivisentini 0:969a2be49f41 418 */
giovannivisentini 0:969a2be49f41 419 void M24SR_AnswerReadyInterruptCallback() {
giovannivisentini 0:969a2be49f41 420 interruptIsFired = true;
giovannivisentini 0:969a2be49f41 421 answerReadyInterrupt.disable_irq();
giovannivisentini 0:969a2be49f41 422 }
giovannivisentini 0:969a2be49f41 423
giovannivisentini 0:969a2be49f41 424 /*** Component's Instance Variables ***/
giovannivisentini 0:969a2be49f41 425
giovannivisentini 0:969a2be49f41 426 /* Identity */
giovannivisentini 0:969a2be49f41 427 uint8_t who_am_i;
giovannivisentini 0:969a2be49f41 428
giovannivisentini 0:969a2be49f41 429 /* Type. */
giovannivisentini 0:969a2be49f41 430 uint8_t type;
giovannivisentini 0:969a2be49f41 431
giovannivisentini 0:969a2be49f41 432 /* I2C address */
giovannivisentini 0:969a2be49f41 433 uint8_t address;
giovannivisentini 0:969a2be49f41 434
giovannivisentini 0:969a2be49f41 435 /* IO Device. */
giovannivisentini 0:969a2be49f41 436 I2C &dev_i2c;
giovannivisentini 0:969a2be49f41 437
giovannivisentini 0:969a2be49f41 438 /* GPIO */
giovannivisentini 0:969a2be49f41 439 DigitalIn GPOPin;
giovannivisentini 0:969a2be49f41 440
giovannivisentini 0:969a2be49f41 441 /**
giovannivisentini 0:969a2be49f41 442 * pin used for disable the rf chip functionality
giovannivisentini 0:969a2be49f41 443 */
giovannivisentini 0:969a2be49f41 444 DigitalOut RFDisablePin;
giovannivisentini 0:969a2be49f41 445
giovannivisentini 0:969a2be49f41 446 /**
giovannivisentini 0:969a2be49f41 447 * pin used as interrupt
giovannivisentini 0:969a2be49f41 448 */
giovannivisentini 0:969a2be49f41 449 InterruptIn answerReadyInterrupt;
giovannivisentini 0:969a2be49f41 450
giovannivisentini 0:969a2be49f41 451 /**
giovannivisentini 0:969a2be49f41 452 * method used for wait the chip response
giovannivisentini 0:969a2be49f41 453 */
giovannivisentini 0:969a2be49f41 454 M24SR_WAITINGTIME_MGMT syncMode;
giovannivisentini 0:969a2be49f41 455
giovannivisentini 0:969a2be49f41 456 /**
giovannivisentini 0:969a2be49f41 457 * buffer used for build the command to send to the chip
giovannivisentini 0:969a2be49f41 458 */
giovannivisentini 0:969a2be49f41 459 uint8_t uM24SRbuffer[0xFF];
giovannivisentini 0:969a2be49f41 460
giovannivisentini 0:969a2be49f41 461 /**
giovannivisentini 0:969a2be49f41 462 * ???
giovannivisentini 0:969a2be49f41 463 */
giovannivisentini 0:969a2be49f41 464 uint8_t uDIDbyte;
giovannivisentini 0:969a2be49f41 465
giovannivisentini 0:969a2be49f41 466 /**
giovannivisentini 0:969a2be49f41 467 * state variable change when the interrupt is fired
giovannivisentini 0:969a2be49f41 468 */
giovannivisentini 0:969a2be49f41 469 volatile bool interruptIsFired;
giovannivisentini 6:96389fb79676 470
giovannivisentini 7:19fc04b8fec6 471 /**
giovannivisentini 7:19fc04b8fec6 472 * Object implementing the interface for use the NDefLib
giovannivisentini 7:19fc04b8fec6 473 */
giovannivisentini 6:96389fb79676 474 NDefNfcTagM24SR NDefTagUtil;
giovannivisentini 11:a798ebea69fa 475
giovannivisentini 11:a798ebea69fa 476 private:
giovannivisentini 11:a798ebea69fa 477
giovannivisentini 11:a798ebea69fa 478 /**
giovannivisentini 11:a798ebea69fa 479 * Convert a enum file into a M24SR constant
giovannivisentini 11:a798ebea69fa 480 * @param pass type of password
giovannivisentini 11:a798ebea69fa 481 * @return equvalent constant used in the m24sr device
giovannivisentini 11:a798ebea69fa 482 */
giovannivisentini 11:a798ebea69fa 483 uint16_t passTypeToIntFlag(const PasswordType_t &pass){
giovannivisentini 11:a798ebea69fa 484 switch(pass){
giovannivisentini 11:a798ebea69fa 485 case ReadPwd:
giovannivisentini 11:a798ebea69fa 486 return READ_PWD;
giovannivisentini 11:a798ebea69fa 487 case WritePwd:
giovannivisentini 11:a798ebea69fa 488 return WRITE_PWD;
giovannivisentini 11:a798ebea69fa 489 case I2CPwd:
giovannivisentini 11:a798ebea69fa 490 default:
giovannivisentini 11:a798ebea69fa 491 return I2C_PWD;
giovannivisentini 11:a798ebea69fa 492 }//switch
giovannivisentini 11:a798ebea69fa 493 }//passTypeToIntFlag
giovannivisentini 11:a798ebea69fa 494
giovannivisentini 0:969a2be49f41 495 };
giovannivisentini 0:969a2be49f41 496
giovannivisentini 0:969a2be49f41 497 #endif // __M24SR_CLASS_H
giovannivisentini 0:969a2be49f41 498
giovannivisentini 0:969a2be49f41 499 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/