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 19 08:08:00 2016 +0000
Revision:
16:b0d62f4b185a
Parent:
15:67e136b6921d
Child:
17:c750fff4a096
more roubust interrupt handle

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