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 22 09:04:51 2016 +0000
Revision:
18:10def2fefa8a
Parent:
17:c750fff4a096
Child:
19:0b65a5813059
remove unused code and register the exeption only when needed

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 7:19fc04b8fec6 72
giovannivisentini 0:969a2be49f41 73 /*** Constructor and Destructor Methods ***/
giovannivisentini 0:969a2be49f41 74
giovannivisentini 0:969a2be49f41 75 /**
giovannivisentini 0:969a2be49f41 76 * @brief Constructor.
giovannivisentini 0:969a2be49f41 77 * @param address I2C address of the component.
giovannivisentini 9:9f2e2e68d695 78 * @param I2C I2C device to be used for communication.
giovannivisentini 9:9f2e2e68d695 79 * @param GPOPinName Pin used as GPIO.
giovannivisentini 9:9f2e2e68d695 80 * @param RFDISPinName Pin used to disable the RF function.
giovannivisentini 0:969a2be49f41 81 */
giovannivisentini 9:9f2e2e68d695 82 M24SR(const uint8_t address, I2C &I2C, const PinName& GPOPinName,
giovannivisentini 0:969a2be49f41 83 const PinName& RFDISPinName) :
giovannivisentini 9:9f2e2e68d695 84 Nfc(), address(address), dev_I2C(I2C), GPOPin(GPOPinName), RFDisablePin(
giovannivisentini 0:969a2be49f41 85 RFDISPinName), answerReadyInterrupt(GPOPinName), interruptIsFired(
giovannivisentini 6:96389fb79676 86 false),NDefTagUtil(*this) {
giovannivisentini 0:969a2be49f41 87 memset(uM24SRbuffer, 0, 0xFF * sizeof(int8_t));
giovannivisentini 0:969a2be49f41 88 uDIDbyte = 0;
giovannivisentini 0:969a2be49f41 89 RFDisablePin = 0;
giovannivisentini 0:969a2be49f41 90 GPOPin.mode(PullNone);
giovannivisentini 0:969a2be49f41 91 answerReadyInterrupt.fall(this,
giovannivisentini 0:969a2be49f41 92 &M24SR::M24SR_AnswerReadyInterruptCallback);
giovannivisentini 0:969a2be49f41 93 answerReadyInterrupt.mode(PullUp);
giovannivisentini 0:969a2be49f41 94 }
giovannivisentini 0:969a2be49f41 95
giovannivisentini 0:969a2be49f41 96 /**
giovannivisentini 0:969a2be49f41 97 * @brief Destructor.
giovannivisentini 0:969a2be49f41 98 */
giovannivisentini 0:969a2be49f41 99 virtual ~M24SR(void) {
giovannivisentini 0:969a2be49f41 100 }
giovannivisentini 0:969a2be49f41 101
giovannivisentini 0:969a2be49f41 102 /*** Public Component Related Methods ***/
giovannivisentini 7:19fc04b8fec6 103
giovannivisentini 7:19fc04b8fec6 104 /**
giovannivisentini 9:9f2e2e68d695 105 * @brief This function initializes the M24SR device.
giovannivisentini 9:9f2e2e68d695 106 * @param ptr Configure parameters, not used.
giovannivisentini 9:9f2e2e68d695 107 * @return NFC_SUCCESS if no errors
giovannivisentini 7:19fc04b8fec6 108 */
giovannivisentini 0:969a2be49f41 109 virtual int Init(void *ptr) {
giovannivisentini 15:67e136b6921d 110 return (NFC_StatusTypeDef) M24SR_Init((M24SR_InitTypeDef*)ptr);
giovannivisentini 0:969a2be49f41 111 }
giovannivisentini 0:969a2be49f41 112
giovannivisentini 0:969a2be49f41 113 virtual int ReadID(uint8_t *id) {
giovannivisentini 0:969a2be49f41 114 return (NFC_StatusTypeDef) M24SR_ReadID((uint8_t *) id);
giovannivisentini 0:969a2be49f41 115 }
giovannivisentini 0:969a2be49f41 116
giovannivisentini 0:969a2be49f41 117 /** lock the tag channel */
giovannivisentini 0:969a2be49f41 118 virtual NFC_StatusTypeDef GetSession(void) {
giovannivisentini 0:969a2be49f41 119 return (NFC_StatusTypeDef) M24SR_GetSession();
giovannivisentini 0:969a2be49f41 120 }
giovannivisentini 0:969a2be49f41 121
giovannivisentini 0:969a2be49f41 122 virtual NFC_StatusTypeDef KillSession(void) {
giovannivisentini 0:969a2be49f41 123 return (NFC_StatusTypeDef) M24SR_KillSession();
giovannivisentini 0:969a2be49f41 124 }
giovannivisentini 0:969a2be49f41 125
giovannivisentini 0:969a2be49f41 126 virtual NFC_StatusTypeDef Deselect(void) {
giovannivisentini 0:969a2be49f41 127 return (NFC_StatusTypeDef) M24SR_Deselect();
giovannivisentini 0:969a2be49f41 128 }
giovannivisentini 0:969a2be49f41 129
giovannivisentini 7:19fc04b8fec6 130 ////////// tag4 command ////////////////////
giovannivisentini 7:19fc04b8fec6 131
giovannivisentini 0:969a2be49f41 132 virtual NFC_StatusTypeDef SelectApplication(void) {
giovannivisentini 0:969a2be49f41 133 return (NFC_StatusTypeDef) M24SR_SelectApplication();
giovannivisentini 0:969a2be49f41 134 }
giovannivisentini 0:969a2be49f41 135
giovannivisentini 0:969a2be49f41 136 virtual NFC_StatusTypeDef SelectCCfile(void) {
giovannivisentini 0:969a2be49f41 137 return (NFC_StatusTypeDef) M24SR_SelectCCfile();
giovannivisentini 0:969a2be49f41 138 }
giovannivisentini 0:969a2be49f41 139
giovannivisentini 0:969a2be49f41 140 virtual NFC_StatusTypeDef SelectNDEFfile(uint16_t NDEFfileId) {
giovannivisentini 0:969a2be49f41 141 return (NFC_StatusTypeDef) M24SR_SelectNDEFfile((uint16_t) NDEFfileId);
giovannivisentini 0:969a2be49f41 142 }
giovannivisentini 0:969a2be49f41 143
giovannivisentini 0:969a2be49f41 144 virtual NFC_StatusTypeDef SelectSystemfile(void) {
giovannivisentini 0:969a2be49f41 145 return (NFC_StatusTypeDef) M24SR_SelectSystemfile();
giovannivisentini 0:969a2be49f41 146 }
giovannivisentini 0:969a2be49f41 147
giovannivisentini 0:969a2be49f41 148 virtual NFC_StatusTypeDef ReadBinary(uint16_t Offset, uint8_t NbByteToRead,
giovannivisentini 0:969a2be49f41 149 uint8_t *pBufferRead) {
giovannivisentini 0:969a2be49f41 150 return (NFC_StatusTypeDef) M24SR_ReadBinary((uint16_t) Offset,
giovannivisentini 0:969a2be49f41 151 (uint8_t) NbByteToRead, (uint8_t *) pBufferRead);
giovannivisentini 0:969a2be49f41 152 }
giovannivisentini 0:969a2be49f41 153
giovannivisentini 0:969a2be49f41 154 virtual NFC_StatusTypeDef UpdateBinary(uint16_t Offset,
giovannivisentini 0:969a2be49f41 155 uint8_t NbByteToWrite, uint8_t *pDataToWrite) {
giovannivisentini 0:969a2be49f41 156 return (NFC_StatusTypeDef) M24SR_UpdateBinary((uint16_t) Offset,
giovannivisentini 0:969a2be49f41 157 (uint8_t) NbByteToWrite, (uint8_t *) pDataToWrite);
giovannivisentini 0:969a2be49f41 158 }
giovannivisentini 0:969a2be49f41 159
giovannivisentini 7:19fc04b8fec6 160 /////////////////// iso 7816-4 commands //////////////////////////
giovannivisentini 7:19fc04b8fec6 161
giovannivisentini 0:969a2be49f41 162 virtual NFC_StatusTypeDef Verify(PasswordType_t pwdId, uint8_t NbPwdByte,
giovannivisentini 0:969a2be49f41 163 const uint8_t *pPwd) {
giovannivisentini 12:d1f5eaa85deb 164 return (NFC_StatusTypeDef) M24SR_Verify(passwordTypeToConst(pwdId),
giovannivisentini 0:969a2be49f41 165 (uint8_t) NbPwdByte, pPwd);
giovannivisentini 0:969a2be49f41 166 }
giovannivisentini 0:969a2be49f41 167
giovannivisentini 0:969a2be49f41 168 virtual NFC_StatusTypeDef ChangeReferenceData(PasswordType_t pwdId,
giovannivisentini 0:969a2be49f41 169 const uint8_t *pPwd) {
giovannivisentini 12:d1f5eaa85deb 170 return (NFC_StatusTypeDef) M24SR_ChangeReferenceData(passwordTypeToConst(pwdId),
giovannivisentini 0:969a2be49f41 171 (uint8_t *) pPwd);
giovannivisentini 0:969a2be49f41 172 }
giovannivisentini 0:969a2be49f41 173
giovannivisentini 0:969a2be49f41 174 virtual NFC_StatusTypeDef EnableVerificationRequirement(
giovannivisentini 0:969a2be49f41 175 PasswordType_t uReadOrWrite) {
giovannivisentini 0:969a2be49f41 176 return (NFC_StatusTypeDef) M24SR_EnableVerificationRequirement(
giovannivisentini 12:d1f5eaa85deb 177 passwordTypeToConst(uReadOrWrite));
giovannivisentini 0:969a2be49f41 178 }
giovannivisentini 0:969a2be49f41 179
giovannivisentini 0:969a2be49f41 180 virtual NFC_StatusTypeDef DisableVerificationRequirement(
giovannivisentini 0:969a2be49f41 181 PasswordType_t uReadOrWrite) {
giovannivisentini 0:969a2be49f41 182 return (NFC_StatusTypeDef) M24SR_DisableVerificationRequirement(
giovannivisentini 12:d1f5eaa85deb 183 passwordTypeToConst(uReadOrWrite));
giovannivisentini 0:969a2be49f41 184 }
giovannivisentini 0:969a2be49f41 185
giovannivisentini 7:19fc04b8fec6 186 ////////////////////// ST proprietary //////////////////////////////////
giovannivisentini 9:9f2e2e68d695 187
giovannivisentini 0:969a2be49f41 188 virtual NFC_StatusTypeDef STReadBinary(uint16_t Offset,
giovannivisentini 0:969a2be49f41 189 uint8_t NbByteToRead, uint8_t *pBufferRead) {
giovannivisentini 0:969a2be49f41 190 return (NFC_StatusTypeDef) M24SR_STReadBinary((uint16_t) Offset,
giovannivisentini 0:969a2be49f41 191 (uint8_t) NbByteToRead, (uint8_t *) pBufferRead);
giovannivisentini 0:969a2be49f41 192 }
giovannivisentini 0:969a2be49f41 193
giovannivisentini 0:969a2be49f41 194 virtual NFC_StatusTypeDef EnablePermanentState(PasswordType_t uReadOrWrite) {
giovannivisentini 0:969a2be49f41 195 return (NFC_StatusTypeDef) M24SR_EnablePermanentState(
giovannivisentini 12:d1f5eaa85deb 196 passwordTypeToConst(uReadOrWrite));
giovannivisentini 0:969a2be49f41 197 }
giovannivisentini 0:969a2be49f41 198
giovannivisentini 0:969a2be49f41 199 virtual NFC_StatusTypeDef DisablePermanentState(PasswordType_t uReadOrWrite) {
giovannivisentini 0:969a2be49f41 200 return (NFC_StatusTypeDef) M24SR_DisablePermanentState(
giovannivisentini 12:d1f5eaa85deb 201 passwordTypeToConst(uReadOrWrite));
giovannivisentini 0:969a2be49f41 202 }
giovannivisentini 0:969a2be49f41 203
giovannivisentini 7:19fc04b8fec6 204 ///////////////////// chip configuration /////////////////////////////////
giovannivisentini 0:969a2be49f41 205 virtual NFC_StatusTypeDef StateControl(uint8_t uSetOrReset) {
giovannivisentini 0:969a2be49f41 206 return (NFC_StatusTypeDef) M24SR_StateControl((uint8_t) uSetOrReset);
giovannivisentini 0:969a2be49f41 207 }
giovannivisentini 0:969a2be49f41 208
giovannivisentini 0:969a2be49f41 209 virtual NFC_StatusTypeDef ManageI2CGPO(uint8_t GPO_I2Cconfig) {
giovannivisentini 0:969a2be49f41 210 return (NFC_StatusTypeDef) M24SR_ManageI2CGPO(
giovannivisentini 0:969a2be49f41 211 (M24SR_GPO_MGMT) GPO_I2Cconfig);
giovannivisentini 0:969a2be49f41 212 }
giovannivisentini 0:969a2be49f41 213
giovannivisentini 0:969a2be49f41 214 virtual NFC_StatusTypeDef ManageRFGPO(uint8_t GPO_RFconfig) {
giovannivisentini 0:969a2be49f41 215 return (NFC_StatusTypeDef) M24SR_ManageRFGPO(
giovannivisentini 0:969a2be49f41 216 (M24SR_GPO_MGMT) GPO_RFconfig);
giovannivisentini 0:969a2be49f41 217 }
giovannivisentini 0:969a2be49f41 218
giovannivisentini 0:969a2be49f41 219 virtual NFC_StatusTypeDef RFConfig(uint8_t OnOffChoice) {
giovannivisentini 0:969a2be49f41 220 return (NFC_StatusTypeDef) M24SR_RFConfig((uint8_t) OnOffChoice);
giovannivisentini 0:969a2be49f41 221 }
giovannivisentini 0:969a2be49f41 222
giovannivisentini 7:19fc04b8fec6 223 /**
giovannivisentini 7:19fc04b8fec6 224 * Generates a negative pulse on the GPO pin.
giovannivisentini 9:9f2e2e68d695 225 * Pulse starts immediately after the command is issued and ends at the end of the RF response.
giovannivisentini 9:9f2e2e68d695 226 * @return NFC_SUCCESS if no errors
giovannivisentini 7:19fc04b8fec6 227 */
giovannivisentini 0:969a2be49f41 228 virtual NFC_StatusTypeDef SendInterrupt(void) {
giovannivisentini 0:969a2be49f41 229 return (NFC_StatusTypeDef) M24SR_SendInterrupt();
giovannivisentini 0:969a2be49f41 230 }
giovannivisentini 0:969a2be49f41 231
giovannivisentini 6:96389fb79676 232 /////////////////// hight level/utility function /////////////////////
giovannivisentini 6:96389fb79676 233
giovannivisentini 7:19fc04b8fec6 234 /**
giovannivisentini 9:9f2e2e68d695 235 * Get an implementation of NDefNfcTag to use the library NDefLib.
giovannivisentini 9:9f2e2e68d695 236 * @return an object of type NdefNfcTag
giovannivisentini 7:19fc04b8fec6 237 */
giovannivisentini 6:96389fb79676 238 NDefLib::NDefNfcTag& getNDefTag(){
giovannivisentini 6:96389fb79676 239 return NDefTagUtil;
giovannivisentini 6:96389fb79676 240 }
giovannivisentini 6:96389fb79676 241
giovannivisentini 6:96389fb79676 242
giovannivisentini 7:19fc04b8fec6 243 /**
giovannivisentini 9:9f2e2e68d695 244 * Enable the request of a password before reading the tag.
giovannivisentini 9:9f2e2e68d695 245 * @param pCurrentWritePassword Current password (the first time use M24SR::DEFAULT_PASSWORD ).
giovannivisentini 9:9f2e2e68d695 246 * @param pNewPassword Password to request before reading the tag.
giovannivisentini 9:9f2e2e68d695 247 * @return return NFC_SUCCESS if no errors
giovannivisentini 9:9f2e2e68d695 248 * @par The password must have a length of 16 chars.
giovannivisentini 7:19fc04b8fec6 249 */
giovannivisentini 6:96389fb79676 250 NFC_StatusTypeDef enableReadPassword(const uint8_t* pCurrentWritePassword,
giovannivisentini 6:96389fb79676 251 const uint8_t* pNewPassword);
giovannivisentini 6:96389fb79676 252
giovannivisentini 7:19fc04b8fec6 253 /**
giovannivisentini 9:9f2e2e68d695 254 * Disable the request of a password before reading the tag.
giovannivisentini 9:9f2e2e68d695 255 * @param pCurrentWritePassword Current password (the first time use M24SR::DEFAULT_PASSWORD).
giovannivisentini 9:9f2e2e68d695 256 * @return return NFC_SUCCESS if no errors
giovannivisentini 9:9f2e2e68d695 257 * @par The password must have a length of 16 chars.
giovannivisentini 7:19fc04b8fec6 258 */
giovannivisentini 6:96389fb79676 259 NFC_StatusTypeDef disableReadPassword(const uint8_t* pCurrentWritePassword=M24SR::DEFAULT_PASSWORD);
giovannivisentini 6:96389fb79676 260
giovannivisentini 7:19fc04b8fec6 261 /**
giovannivisentini 9:9f2e2e68d695 262 * Enable the request of a password before writing to the tag.
giovannivisentini 9:9f2e2e68d695 263 * @param pCurrentWritePassword Current password (the first time use M24SR::DEFAULT_PASSWORD).
giovannivisentini 9:9f2e2e68d695 264 * @param pNewPassword Password to request before reading the tag.
giovannivisentini 9:9f2e2e68d695 265 * @return return NFC_SUCCESS if no errors
giovannivisentini 9:9f2e2e68d695 266 * @par The password must have a length of 16 chars.
giovannivisentini 7:19fc04b8fec6 267 */
giovannivisentini 6:96389fb79676 268 NFC_StatusTypeDef enableWritePassword(const uint8_t* pCurrentWritePassword,
giovannivisentini 6:96389fb79676 269 uint8_t* pNewPassword);
giovannivisentini 6:96389fb79676 270
giovannivisentini 9:9f2e2e68d695 271 /**
giovannivisentini 9:9f2e2e68d695 272 * Disable the request of a password before writing the tag.
giovannivisentini 9:9f2e2e68d695 273 * @param pCurrentWritePassword Current password (the first time use M24SR::DEFAULT_PASSWORD).
giovannivisentini 9:9f2e2e68d695 274 * @return return NFC_SUCCESS if no errors
giovannivisentini 9:9f2e2e68d695 275 * @par The password must have a length of 16 chars.
giovannivisentini 9:9f2e2e68d695 276 */
giovannivisentini 6:96389fb79676 277 NFC_StatusTypeDef disableWritePassword(const uint8_t* pCurrentWritePassword=M24SR::DEFAULT_PASSWORD);
giovannivisentini 6:96389fb79676 278
giovannivisentini 6:96389fb79676 279 /**
giovannivisentini 9:9f2e2e68d695 280 * @brief This function disables both read and write passwords.
giovannivisentini 9:9f2e2e68d695 281 * @param pSuperUserPassword I2C super user password.
giovannivisentini 9:9f2e2e68d695 282 * @return return NFC_SUCCESS if no errors
giovannivisentini 9:9f2e2e68d695 283 * @par The password must have a length of 16 chars.
giovannivisentini 6:96389fb79676 284 */
giovannivisentini 6:96389fb79676 285 NFC_StatusTypeDef disableAllPassword(const uint8_t* pSuperUserPassword=M24SR::DEFAULT_PASSWORD);
giovannivisentini 6:96389fb79676 286
giovannivisentini 6:96389fb79676 287 /**
giovannivisentini 9:9f2e2e68d695 288 * @brief This function enables read only mode.
giovannivisentini 9:9f2e2e68d695 289 * @param pCurrentWritePassword Write password is needed to enable read only mode.
giovannivisentini 9:9f2e2e68d695 290 * @return return NFC_SUCCESS if no errors
giovannivisentini 9:9f2e2e68d695 291 * @par The password must have a length of 16 chars.
giovannivisentini 6:96389fb79676 292 */
giovannivisentini 6:96389fb79676 293 NFC_StatusTypeDef enableReadOnly(const uint8_t* pCurrentWritePassword=M24SR::DEFAULT_PASSWORD);
giovannivisentini 6:96389fb79676 294
giovannivisentini 6:96389fb79676 295 /**
giovannivisentini 9:9f2e2e68d695 296 * @brief This function disables read only mode.
giovannivisentini 9:9f2e2e68d695 297 * @param pCurrentWritePassword Write password is needed to disable read only mode.
giovannivisentini 9:9f2e2e68d695 298 * @return return NFC_SUCCESS if no errors
giovannivisentini 9:9f2e2e68d695 299 * @par The password must have a length of 16 chars.
giovannivisentini 6:96389fb79676 300 */
giovannivisentini 6:96389fb79676 301 NFC_StatusTypeDef disableReadOnly();
giovannivisentini 6:96389fb79676 302
giovannivisentini 6:96389fb79676 303 /**
giovannivisentini 9:9f2e2e68d695 304 * @brief This function enables write only mode.
giovannivisentini 9:9f2e2e68d695 305 * @param pCurrentWritePassword Write password is needed to enable write only mode.
giovannivisentini 9:9f2e2e68d695 306 * @return return NFC_SUCCESS if no errors
giovannivisentini 9:9f2e2e68d695 307 * @par The password must have a length of 16 chars.
giovannivisentini 6:96389fb79676 308 */
giovannivisentini 6:96389fb79676 309 NFC_StatusTypeDef enableWriteOnly(const uint8_t* pCurrentWritePassword=M24SR::DEFAULT_PASSWORD);
giovannivisentini 6:96389fb79676 310
giovannivisentini 6:96389fb79676 311 /**
giovannivisentini 9:9f2e2e68d695 312 * @brief This function disables write only mode.
giovannivisentini 9:9f2e2e68d695 313 * @param pCurrentWritePassword Write password is needed to disable write only mode.
giovannivisentini 9:9f2e2e68d695 314 * @return return NFC_SUCCESS if no errors
giovannivisentini 9:9f2e2e68d695 315 * @par The password must have a length of 16 chars.
giovannivisentini 6:96389fb79676 316 */
giovannivisentini 6:96389fb79676 317 NFC_StatusTypeDef disableWriteOnly();
giovannivisentini 6:96389fb79676 318
giovannivisentini 0:969a2be49f41 319 protected:
giovannivisentini 0:969a2be49f41 320
giovannivisentini 0:969a2be49f41 321 /*** Protected Component Related Methods ***/
giovannivisentini 0:969a2be49f41 322
giovannivisentini 15:67e136b6921d 323 NFC_StatusTypeDef M24SR_Init(M24SR_InitTypeDef *);
giovannivisentini 0:969a2be49f41 324 NFC_StatusTypeDef M24SR_ReadID(uint8_t *nfc_id);
giovannivisentini 0:969a2be49f41 325 NFC_StatusTypeDef M24SR_GetSession(void);
giovannivisentini 0:969a2be49f41 326 NFC_StatusTypeDef M24SR_KillSession(void);
giovannivisentini 0:969a2be49f41 327 NFC_StatusTypeDef M24SR_Deselect(void);
giovannivisentini 0:969a2be49f41 328 NFC_StatusTypeDef M24SR_SelectApplication(void);
giovannivisentini 0:969a2be49f41 329 NFC_StatusTypeDef M24SR_SelectCCfile(void);
giovannivisentini 0:969a2be49f41 330 NFC_StatusTypeDef M24SR_SelectNDEFfile(uint16_t NDEFfileId);
giovannivisentini 0:969a2be49f41 331 NFC_StatusTypeDef M24SR_SelectSystemfile(void);
giovannivisentini 0:969a2be49f41 332 NFC_StatusTypeDef M24SR_ReadBinary(uint16_t Offset, uint8_t NbByteToRead,
giovannivisentini 0:969a2be49f41 333 uint8_t *pBufferRead);
giovannivisentini 0:969a2be49f41 334 NFC_StatusTypeDef M24SR_STReadBinary(uint16_t Offset, uint8_t NbByteToRead,
giovannivisentini 0:969a2be49f41 335 uint8_t *pBufferRead);
giovannivisentini 0:969a2be49f41 336 NFC_StatusTypeDef M24SR_UpdateBinary(uint16_t Offset, uint8_t NbByteToWrite,
giovannivisentini 0:969a2be49f41 337 uint8_t *pDataToWrite);
giovannivisentini 0:969a2be49f41 338 NFC_StatusTypeDef M24SR_Verify(uint16_t uPwdId, uint8_t NbPwdByte,
giovannivisentini 0:969a2be49f41 339 const uint8_t *pPwd);
giovannivisentini 0:969a2be49f41 340 NFC_StatusTypeDef M24SR_ChangeReferenceData(uint16_t uPwdId, uint8_t *pPwd);
giovannivisentini 0:969a2be49f41 341 NFC_StatusTypeDef M24SR_EnableVerificationRequirement(
giovannivisentini 0:969a2be49f41 342 uint16_t uReadOrWrite);
giovannivisentini 0:969a2be49f41 343 NFC_StatusTypeDef M24SR_DisableVerificationRequirement(
giovannivisentini 0:969a2be49f41 344 uint16_t uReadOrWrite);
giovannivisentini 0:969a2be49f41 345 NFC_StatusTypeDef M24SR_EnablePermanentState(uint16_t uReadOrWrite);
giovannivisentini 0:969a2be49f41 346 NFC_StatusTypeDef M24SR_DisablePermanentState(uint16_t uReadOrWrite);
giovannivisentini 0:969a2be49f41 347 NFC_StatusTypeDef M24SR_SendInterrupt(void);
giovannivisentini 0:969a2be49f41 348 NFC_StatusTypeDef M24SR_StateControl(uint8_t uSetOrReset);
giovannivisentini 0:969a2be49f41 349 NFC_StatusTypeDef M24SR_ManageI2CGPO(M24SR_GPO_MGMT GPO_I2Cconfig);
giovannivisentini 0:969a2be49f41 350 NFC_StatusTypeDef M24SR_ManageRFGPO(M24SR_GPO_MGMT GPO_RFconfig);
giovannivisentini 0:969a2be49f41 351 NFC_StatusTypeDef M24SR_RFConfig(uint8_t OnOffChoice);
giovannivisentini 0:969a2be49f41 352 NFC_StatusTypeDef M24SR_FWTExtension(uint8_t FWTbyte);
giovannivisentini 0:969a2be49f41 353
giovannivisentini 7:19fc04b8fec6 354 /**
giovannivisentini 9:9f2e2e68d695 355 * Wait until the answer is ready.
giovannivisentini 7:19fc04b8fec6 356 */
giovannivisentini 0:969a2be49f41 357 NFC_StatusTypeDef M24SR_IO_IsAnswerReady(void);
giovannivisentini 7:19fc04b8fec6 358
giovannivisentini 7:19fc04b8fec6 359 /**
giovannivisentini 9:9f2e2e68d695 360 * Send a command to the component.
giovannivisentini 9:9f2e2e68d695 361 * @param NbByte Lenght of the command.
giovannivisentini 9:9f2e2e68d695 362 * @param pBuffer Buffer containing the command.
giovannivisentini 9:9f2e2e68d695 363 * @return NFC_SUCCESS if no errors
giovannivisentini 7:19fc04b8fec6 364 */
giovannivisentini 0:969a2be49f41 365 NFC_StatusTypeDef M24SR_IO_SendI2Ccommand(uint8_t NbByte, uint8_t *pBuffer);
giovannivisentini 7:19fc04b8fec6 366
giovannivisentini 7:19fc04b8fec6 367 /**
giovannivisentini 9:9f2e2e68d695 368 * Read a command response.
giovannivisentini 9:9f2e2e68d695 369 * @param NbByte Number of bytes to read.
giovannivisentini 9:9f2e2e68d695 370 * @param pBuffer Buffer to store the response into.
giovannivisentini 9:9f2e2e68d695 371 * @return NFC_SUCCESS if no errors
giovannivisentini 7:19fc04b8fec6 372 */
giovannivisentini 0:969a2be49f41 373 NFC_StatusTypeDef M24SR_IO_ReceiveI2Cresponse(uint8_t NbByte,
giovannivisentini 0:969a2be49f41 374 uint8_t *pBuffer);
giovannivisentini 0:969a2be49f41 375
giovannivisentini 7:19fc04b8fec6 376 /**
giovannivisentini 9:9f2e2e68d695 377 * Do an active polling on the I2C bus until the answer is ready.
giovannivisentini 9:9f2e2e68d695 378 * @return NFC_SUCCESS if no errors
giovannivisentini 7:19fc04b8fec6 379 */
giovannivisentini 0:969a2be49f41 380 NFC_StatusTypeDef M24SR_IO_PollI2C(void);
giovannivisentini 0:969a2be49f41 381
giovannivisentini 7:19fc04b8fec6 382 /**
giovannivisentini 9:9f2e2e68d695 383 * Read the gpo pin.
giovannivisentini 9:9f2e2e68d695 384 * @param[out] pPinState Variable to store the pin state into.
giovannivisentini 7:19fc04b8fec6 385 */
giovannivisentini 13:840a9c7f90b9 386 void M24SR_IO_GPO_ReadPin(uint8_t *pPinState) {
giovannivisentini 13:840a9c7f90b9 387 *pPinState= GPOPin.read();
giovannivisentini 0:969a2be49f41 388 }
giovannivisentini 0:969a2be49f41 389
giovannivisentini 7:19fc04b8fec6 390 /**
giovannivisentini 9:9f2e2e68d695 391 * Write the gpo pin.
giovannivisentini 9:9f2e2e68d695 392 * @param pPinState Pin state to write.
giovannivisentini 7:19fc04b8fec6 393 */
giovannivisentini 13:840a9c7f90b9 394 void M24SR_IO_RFDIS_WritePin(uint8_t PinState) {
giovannivisentini 13:840a9c7f90b9 395 if (PinState == 0)
giovannivisentini 0:969a2be49f41 396 RFDisablePin = 0;
giovannivisentini 0:969a2be49f41 397 else
giovannivisentini 0:969a2be49f41 398 RFDisablePin = 1;
giovannivisentini 0:969a2be49f41 399 }
giovannivisentini 0:969a2be49f41 400
giovannivisentini 7:19fc04b8fec6 401 /**
giovannivisentini 9:9f2e2e68d695 402 * Set the command synchronous answer mode.
giovannivisentini 9:9f2e2e68d695 403 * @param mode How to wait the I2C rensponse.
giovannivisentini 7:19fc04b8fec6 404 */
giovannivisentini 0:969a2be49f41 405 void M24SR_IO_SetI2CSynchroMode(M24SR_WAITINGTIME_MGMT mode) {
giovannivisentini 0:969a2be49f41 406 syncMode = mode;
giovannivisentini 0:969a2be49f41 407 }
giovannivisentini 0:969a2be49f41 408
giovannivisentini 0:969a2be49f41 409 /**
giovannivisentini 9:9f2e2e68d695 410 * Callback triggers when a command is completed.
giovannivisentini 0:969a2be49f41 411 */
giovannivisentini 0:969a2be49f41 412 void M24SR_AnswerReadyInterruptCallback() {
giovannivisentini 18:10def2fefa8a 413 /**
giovannivisentini 18:10def2fefa8a 414 * register the interrupt only if we are waiting for it
giovannivisentini 18:10def2fefa8a 415 * the gpo can became low also for other reason
giovannivisentini 18:10def2fefa8a 416 */
giovannivisentini 18:10def2fefa8a 417 if(syncMode==M24SR_INTERRUPT_GPO){
giovannivisentini 18:10def2fefa8a 418 interruptIsFired=true;
giovannivisentini 18:10def2fefa8a 419 }//if
giovannivisentini 0:969a2be49f41 420 }
giovannivisentini 0:969a2be49f41 421
giovannivisentini 0:969a2be49f41 422 /*** Component's Instance Variables ***/
giovannivisentini 0:969a2be49f41 423
giovannivisentini 0:969a2be49f41 424 /* Identity */
giovannivisentini 0:969a2be49f41 425 uint8_t who_am_i;
giovannivisentini 0:969a2be49f41 426
giovannivisentini 9:9f2e2e68d695 427 /* Type */
giovannivisentini 0:969a2be49f41 428 uint8_t type;
giovannivisentini 0:969a2be49f41 429
giovannivisentini 0:969a2be49f41 430 /* I2C address */
giovannivisentini 0:969a2be49f41 431 uint8_t address;
giovannivisentini 0:969a2be49f41 432
giovannivisentini 0:969a2be49f41 433 /* IO Device. */
giovannivisentini 9:9f2e2e68d695 434 I2C &dev_I2C;
giovannivisentini 0:969a2be49f41 435
giovannivisentini 0:969a2be49f41 436 /* GPIO */
giovannivisentini 0:969a2be49f41 437 DigitalIn GPOPin;
giovannivisentini 0:969a2be49f41 438
giovannivisentini 0:969a2be49f41 439 /**
giovannivisentini 9:9f2e2e68d695 440 * Pin used to disable the rf chip functionality.
giovannivisentini 0:969a2be49f41 441 */
giovannivisentini 0:969a2be49f41 442 DigitalOut RFDisablePin;
giovannivisentini 0:969a2be49f41 443
giovannivisentini 0:969a2be49f41 444 /**
giovannivisentini 9:9f2e2e68d695 445 * Pin used as interrupt.
giovannivisentini 0:969a2be49f41 446 */
giovannivisentini 0:969a2be49f41 447 InterruptIn answerReadyInterrupt;
giovannivisentini 0:969a2be49f41 448
giovannivisentini 0:969a2be49f41 449 /**
giovannivisentini 9:9f2e2e68d695 450 * Method used to wait the chip response.
giovannivisentini 0:969a2be49f41 451 */
giovannivisentini 0:969a2be49f41 452 M24SR_WAITINGTIME_MGMT syncMode;
giovannivisentini 0:969a2be49f41 453
giovannivisentini 0:969a2be49f41 454 /**
giovannivisentini 9:9f2e2e68d695 455 * Buffer used to build the command to send to the chip.
giovannivisentini 0:969a2be49f41 456 */
giovannivisentini 9:9f2e2e68d695 457 uint8_t uM24SRbuffer[0xFF];//max command length is 255
giovannivisentini 0:969a2be49f41 458
giovannivisentini 0:969a2be49f41 459 /**
giovannivisentini 0:969a2be49f41 460 * ???
giovannivisentini 0:969a2be49f41 461 */
giovannivisentini 0:969a2be49f41 462 uint8_t uDIDbyte;
giovannivisentini 0:969a2be49f41 463
giovannivisentini 0:969a2be49f41 464 /**
giovannivisentini 9:9f2e2e68d695 465 * State variable changes when the interrupt is fired.
giovannivisentini 0:969a2be49f41 466 */
giovannivisentini 0:969a2be49f41 467 volatile bool interruptIsFired;
giovannivisentini 6:96389fb79676 468
giovannivisentini 7:19fc04b8fec6 469 /**
giovannivisentini 9:9f2e2e68d695 470 * Object implementing the interface to use the NDefLib.
giovannivisentini 7:19fc04b8fec6 471 */
giovannivisentini 6:96389fb79676 472 NDefNfcTagM24SR NDefTagUtil;
giovannivisentini 12:d1f5eaa85deb 473
giovannivisentini 12:d1f5eaa85deb 474 private:
giovannivisentini 12:d1f5eaa85deb 475
giovannivisentini 12:d1f5eaa85deb 476 /**
giovannivisentini 12:d1f5eaa85deb 477 * Convert a generic enum to the value used by the M24SR chip.
giovannivisentini 12:d1f5eaa85deb 478 * @param type Password type.
giovannivisentini 12:d1f5eaa85deb 479 * @return equivalent value used inside the m24sr chip */
giovannivisentini 12:d1f5eaa85deb 480 uint16_t passwordTypeToConst(const PasswordType_t &type)const{
giovannivisentini 12:d1f5eaa85deb 481 switch(type){
giovannivisentini 12:d1f5eaa85deb 482 case ReadPwd:
giovannivisentini 12:d1f5eaa85deb 483 return READ_PWD;
giovannivisentini 12:d1f5eaa85deb 484 case WritePwd:
giovannivisentini 12:d1f5eaa85deb 485 return WRITE_PWD;
giovannivisentini 12:d1f5eaa85deb 486 case I2CPwd:
giovannivisentini 12:d1f5eaa85deb 487 default:
giovannivisentini 12:d1f5eaa85deb 488 return I2C_PWD;
giovannivisentini 12:d1f5eaa85deb 489 }
giovannivisentini 12:d1f5eaa85deb 490 }//passwordTypeToConst
giovannivisentini 12:d1f5eaa85deb 491
giovannivisentini 0:969a2be49f41 492 };
giovannivisentini 0:969a2be49f41 493
giovannivisentini 0:969a2be49f41 494 #endif // __M24SR_CLASS_H
giovannivisentini 0:969a2be49f41 495
giovannivisentini 0:969a2be49f41 496 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/