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 15 10:34:39 2016 +0000
Revision:
14:7e3d436b19ee
Parent:
12:d1f5eaa85deb
Parent:
13:840a9c7f90b9
Child:
15:67e136b6921d
remove cube dependency in the m24sr and m24sr_class headers

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 /**
giovannivisentini 0:969a2be49f41 101 * @brief Destructor.
giovannivisentini 0:969a2be49f41 102 */
giovannivisentini 0:969a2be49f41 103 virtual ~M24SR(void) {
giovannivisentini 0:969a2be49f41 104 }
giovannivisentini 0:969a2be49f41 105
giovannivisentini 0:969a2be49f41 106 /*** Public Component Related Methods ***/
giovannivisentini 7:19fc04b8fec6 107
giovannivisentini 7:19fc04b8fec6 108 /**
giovannivisentini 9:9f2e2e68d695 109 * @brief This function initializes the M24SR device.
giovannivisentini 9:9f2e2e68d695 110 * @param ptr Configure parameters, not used.
giovannivisentini 9:9f2e2e68d695 111 * @return NFC_SUCCESS if no errors
giovannivisentini 7:19fc04b8fec6 112 */
giovannivisentini 0:969a2be49f41 113 virtual int Init(void *ptr) {
giovannivisentini 0:969a2be49f41 114 return (NFC_StatusTypeDef) M24SR_Init((NFC_InitTypeDef*)ptr);
giovannivisentini 0:969a2be49f41 115 }
giovannivisentini 0:969a2be49f41 116
giovannivisentini 0:969a2be49f41 117 virtual int ReadID(uint8_t *id) {
giovannivisentini 0:969a2be49f41 118 return (NFC_StatusTypeDef) M24SR_ReadID((uint8_t *) id);
giovannivisentini 0:969a2be49f41 119 }
giovannivisentini 0:969a2be49f41 120
giovannivisentini 0:969a2be49f41 121 /** lock the tag channel */
giovannivisentini 0:969a2be49f41 122 virtual NFC_StatusTypeDef GetSession(void) {
giovannivisentini 0:969a2be49f41 123 return (NFC_StatusTypeDef) M24SR_GetSession();
giovannivisentini 0:969a2be49f41 124 }
giovannivisentini 0:969a2be49f41 125
giovannivisentini 0:969a2be49f41 126 virtual NFC_StatusTypeDef KillSession(void) {
giovannivisentini 0:969a2be49f41 127 return (NFC_StatusTypeDef) M24SR_KillSession();
giovannivisentini 0:969a2be49f41 128 }
giovannivisentini 0:969a2be49f41 129
giovannivisentini 0:969a2be49f41 130 virtual NFC_StatusTypeDef Deselect(void) {
giovannivisentini 0:969a2be49f41 131 return (NFC_StatusTypeDef) M24SR_Deselect();
giovannivisentini 0:969a2be49f41 132 }
giovannivisentini 0:969a2be49f41 133
giovannivisentini 7:19fc04b8fec6 134 ////////// tag4 command ////////////////////
giovannivisentini 7:19fc04b8fec6 135
giovannivisentini 0:969a2be49f41 136 virtual NFC_StatusTypeDef SelectApplication(void) {
giovannivisentini 0:969a2be49f41 137 return (NFC_StatusTypeDef) M24SR_SelectApplication();
giovannivisentini 0:969a2be49f41 138 }
giovannivisentini 0:969a2be49f41 139
giovannivisentini 0:969a2be49f41 140 virtual NFC_StatusTypeDef SelectCCfile(void) {
giovannivisentini 0:969a2be49f41 141 return (NFC_StatusTypeDef) M24SR_SelectCCfile();
giovannivisentini 0:969a2be49f41 142 }
giovannivisentini 0:969a2be49f41 143
giovannivisentini 0:969a2be49f41 144 virtual NFC_StatusTypeDef SelectNDEFfile(uint16_t NDEFfileId) {
giovannivisentini 0:969a2be49f41 145 return (NFC_StatusTypeDef) M24SR_SelectNDEFfile((uint16_t) NDEFfileId);
giovannivisentini 0:969a2be49f41 146 }
giovannivisentini 0:969a2be49f41 147
giovannivisentini 0:969a2be49f41 148 virtual NFC_StatusTypeDef SelectSystemfile(void) {
giovannivisentini 0:969a2be49f41 149 return (NFC_StatusTypeDef) M24SR_SelectSystemfile();
giovannivisentini 0:969a2be49f41 150 }
giovannivisentini 0:969a2be49f41 151
giovannivisentini 0:969a2be49f41 152 virtual NFC_StatusTypeDef ReadBinary(uint16_t Offset, uint8_t NbByteToRead,
giovannivisentini 0:969a2be49f41 153 uint8_t *pBufferRead) {
giovannivisentini 0:969a2be49f41 154 return (NFC_StatusTypeDef) M24SR_ReadBinary((uint16_t) Offset,
giovannivisentini 0:969a2be49f41 155 (uint8_t) NbByteToRead, (uint8_t *) pBufferRead);
giovannivisentini 0:969a2be49f41 156 }
giovannivisentini 0:969a2be49f41 157
giovannivisentini 0:969a2be49f41 158 virtual NFC_StatusTypeDef UpdateBinary(uint16_t Offset,
giovannivisentini 0:969a2be49f41 159 uint8_t NbByteToWrite, uint8_t *pDataToWrite) {
giovannivisentini 0:969a2be49f41 160 return (NFC_StatusTypeDef) M24SR_UpdateBinary((uint16_t) Offset,
giovannivisentini 0:969a2be49f41 161 (uint8_t) NbByteToWrite, (uint8_t *) pDataToWrite);
giovannivisentini 0:969a2be49f41 162 }
giovannivisentini 0:969a2be49f41 163
giovannivisentini 7:19fc04b8fec6 164 /////////////////// iso 7816-4 commands //////////////////////////
giovannivisentini 7:19fc04b8fec6 165
giovannivisentini 0:969a2be49f41 166 virtual NFC_StatusTypeDef Verify(PasswordType_t pwdId, uint8_t NbPwdByte,
giovannivisentini 0:969a2be49f41 167 const uint8_t *pPwd) {
giovannivisentini 12:d1f5eaa85deb 168 return (NFC_StatusTypeDef) M24SR_Verify(passwordTypeToConst(pwdId),
giovannivisentini 0:969a2be49f41 169 (uint8_t) NbPwdByte, pPwd);
giovannivisentini 0:969a2be49f41 170 }
giovannivisentini 0:969a2be49f41 171
giovannivisentini 0:969a2be49f41 172 virtual NFC_StatusTypeDef ChangeReferenceData(PasswordType_t pwdId,
giovannivisentini 0:969a2be49f41 173 const uint8_t *pPwd) {
giovannivisentini 12:d1f5eaa85deb 174 return (NFC_StatusTypeDef) M24SR_ChangeReferenceData(passwordTypeToConst(pwdId),
giovannivisentini 0:969a2be49f41 175 (uint8_t *) pPwd);
giovannivisentini 0:969a2be49f41 176 }
giovannivisentini 0:969a2be49f41 177
giovannivisentini 0:969a2be49f41 178 virtual NFC_StatusTypeDef EnableVerificationRequirement(
giovannivisentini 0:969a2be49f41 179 PasswordType_t uReadOrWrite) {
giovannivisentini 0:969a2be49f41 180 return (NFC_StatusTypeDef) M24SR_EnableVerificationRequirement(
giovannivisentini 12:d1f5eaa85deb 181 passwordTypeToConst(uReadOrWrite));
giovannivisentini 0:969a2be49f41 182 }
giovannivisentini 0:969a2be49f41 183
giovannivisentini 0:969a2be49f41 184 virtual NFC_StatusTypeDef DisableVerificationRequirement(
giovannivisentini 0:969a2be49f41 185 PasswordType_t uReadOrWrite) {
giovannivisentini 0:969a2be49f41 186 return (NFC_StatusTypeDef) M24SR_DisableVerificationRequirement(
giovannivisentini 12:d1f5eaa85deb 187 passwordTypeToConst(uReadOrWrite));
giovannivisentini 0:969a2be49f41 188 }
giovannivisentini 0:969a2be49f41 189
giovannivisentini 7:19fc04b8fec6 190 ////////////////////// ST proprietary //////////////////////////////////
giovannivisentini 9:9f2e2e68d695 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 12:d1f5eaa85deb 200 passwordTypeToConst(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 12:d1f5eaa85deb 205 passwordTypeToConst(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 9:9f2e2e68d695 229 * Pulse starts immediately after the command is issued and ends at the end of the RF response.
giovannivisentini 9:9f2e2e68d695 230 * @return NFC_SUCCESS if no errors
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 9:9f2e2e68d695 239 * Get an implementation of NDefNfcTag to use the library NDefLib.
giovannivisentini 9:9f2e2e68d695 240 * @return an object of type NdefNfcTag
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 9:9f2e2e68d695 248 * Enable the request of a password before reading the tag.
giovannivisentini 9:9f2e2e68d695 249 * @param pCurrentWritePassword Current password (the first time use M24SR::DEFAULT_PASSWORD ).
giovannivisentini 9:9f2e2e68d695 250 * @param pNewPassword Password to request before reading the tag.
giovannivisentini 9:9f2e2e68d695 251 * @return return NFC_SUCCESS if no errors
giovannivisentini 9:9f2e2e68d695 252 * @par The password must have a length of 16 chars.
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 9:9f2e2e68d695 258 * Disable the request of a password before reading the tag.
giovannivisentini 9:9f2e2e68d695 259 * @param pCurrentWritePassword Current password (the first time use M24SR::DEFAULT_PASSWORD).
giovannivisentini 9:9f2e2e68d695 260 * @return return NFC_SUCCESS if no errors
giovannivisentini 9:9f2e2e68d695 261 * @par The password must have a length of 16 chars.
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 9:9f2e2e68d695 266 * Enable the request of a password before writing to the tag.
giovannivisentini 9:9f2e2e68d695 267 * @param pCurrentWritePassword Current password (the first time use M24SR::DEFAULT_PASSWORD).
giovannivisentini 9:9f2e2e68d695 268 * @param pNewPassword Password to request before reading the tag.
giovannivisentini 9:9f2e2e68d695 269 * @return return NFC_SUCCESS if no errors
giovannivisentini 9:9f2e2e68d695 270 * @par The password must have a length of 16 chars.
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 9:9f2e2e68d695 275 /**
giovannivisentini 9:9f2e2e68d695 276 * Disable the request of a password before writing the tag.
giovannivisentini 9:9f2e2e68d695 277 * @param pCurrentWritePassword Current password (the first time use M24SR::DEFAULT_PASSWORD).
giovannivisentini 9:9f2e2e68d695 278 * @return return NFC_SUCCESS if no errors
giovannivisentini 9:9f2e2e68d695 279 * @par The password must have a length of 16 chars.
giovannivisentini 9:9f2e2e68d695 280 */
giovannivisentini 6:96389fb79676 281 NFC_StatusTypeDef disableWritePassword(const uint8_t* pCurrentWritePassword=M24SR::DEFAULT_PASSWORD);
giovannivisentini 6:96389fb79676 282
giovannivisentini 6:96389fb79676 283 /**
giovannivisentini 9:9f2e2e68d695 284 * @brief This function disables both read and write passwords.
giovannivisentini 9:9f2e2e68d695 285 * @param pSuperUserPassword I2C super user password.
giovannivisentini 9:9f2e2e68d695 286 * @return return NFC_SUCCESS if no errors
giovannivisentini 9:9f2e2e68d695 287 * @par The password must have a length of 16 chars.
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 9:9f2e2e68d695 292 * @brief This function enables read only mode.
giovannivisentini 9:9f2e2e68d695 293 * @param pCurrentWritePassword Write password is needed to enable read only mode.
giovannivisentini 9:9f2e2e68d695 294 * @return return NFC_SUCCESS if no errors
giovannivisentini 9:9f2e2e68d695 295 * @par The password must have a length of 16 chars.
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 9:9f2e2e68d695 300 * @brief This function disables read only mode.
giovannivisentini 9:9f2e2e68d695 301 * @param pCurrentWritePassword Write password is needed to disable read only mode.
giovannivisentini 9:9f2e2e68d695 302 * @return return NFC_SUCCESS if no errors
giovannivisentini 9:9f2e2e68d695 303 * @par The password must have a length of 16 chars.
giovannivisentini 6:96389fb79676 304 */
giovannivisentini 6:96389fb79676 305 NFC_StatusTypeDef disableReadOnly();
giovannivisentini 6:96389fb79676 306
giovannivisentini 6:96389fb79676 307 /**
giovannivisentini 9:9f2e2e68d695 308 * @brief This function enables write only mode.
giovannivisentini 9:9f2e2e68d695 309 * @param pCurrentWritePassword Write password is needed to enable write only mode.
giovannivisentini 9:9f2e2e68d695 310 * @return return NFC_SUCCESS if no errors
giovannivisentini 9:9f2e2e68d695 311 * @par The password must have a length of 16 chars.
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 9:9f2e2e68d695 316 * @brief This function disables write only mode.
giovannivisentini 9:9f2e2e68d695 317 * @param pCurrentWritePassword Write password is needed to disable write only mode.
giovannivisentini 9:9f2e2e68d695 318 * @return return NFC_SUCCESS if no errors
giovannivisentini 9:9f2e2e68d695 319 * @par The password must have a length of 16 chars.
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 9:9f2e2e68d695 359 * Wait until the answer is ready.
giovannivisentini 7:19fc04b8fec6 360 */
giovannivisentini 0:969a2be49f41 361 NFC_StatusTypeDef M24SR_IO_IsAnswerReady(void);
giovannivisentini 7:19fc04b8fec6 362
giovannivisentini 7:19fc04b8fec6 363 /**
giovannivisentini 9:9f2e2e68d695 364 * Send a command to the component.
giovannivisentini 9:9f2e2e68d695 365 * @param NbByte Lenght of the command.
giovannivisentini 9:9f2e2e68d695 366 * @param pBuffer Buffer containing the command.
giovannivisentini 9:9f2e2e68d695 367 * @return NFC_SUCCESS if no errors
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 9:9f2e2e68d695 372 * Read a command response.
giovannivisentini 9:9f2e2e68d695 373 * @param NbByte Number of bytes to read.
giovannivisentini 9:9f2e2e68d695 374 * @param pBuffer Buffer to store the response into.
giovannivisentini 9:9f2e2e68d695 375 * @return NFC_SUCCESS if no errors
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 9:9f2e2e68d695 381 * Do an active polling on the I2C bus until the answer is ready.
giovannivisentini 9:9f2e2e68d695 382 * @return NFC_SUCCESS if no errors
giovannivisentini 7:19fc04b8fec6 383 */
giovannivisentini 0:969a2be49f41 384 NFC_StatusTypeDef M24SR_IO_PollI2C(void);
giovannivisentini 0:969a2be49f41 385
giovannivisentini 7:19fc04b8fec6 386 /**
giovannivisentini 9:9f2e2e68d695 387 * Read the gpo pin.
giovannivisentini 9:9f2e2e68d695 388 * @param[out] pPinState Variable to store the pin state into.
giovannivisentini 7:19fc04b8fec6 389 */
giovannivisentini 13:840a9c7f90b9 390 void M24SR_IO_GPO_ReadPin(uint8_t *pPinState) {
giovannivisentini 13:840a9c7f90b9 391 *pPinState= GPOPin.read();
giovannivisentini 0:969a2be49f41 392 }
giovannivisentini 0:969a2be49f41 393
giovannivisentini 7:19fc04b8fec6 394 /**
giovannivisentini 9:9f2e2e68d695 395 * Write the gpo pin.
giovannivisentini 9:9f2e2e68d695 396 * @param pPinState Pin state to write.
giovannivisentini 7:19fc04b8fec6 397 */
giovannivisentini 13:840a9c7f90b9 398 void M24SR_IO_RFDIS_WritePin(uint8_t PinState) {
giovannivisentini 13:840a9c7f90b9 399 if (PinState == 0)
giovannivisentini 0:969a2be49f41 400 RFDisablePin = 0;
giovannivisentini 0:969a2be49f41 401 else
giovannivisentini 0:969a2be49f41 402 RFDisablePin = 1;
giovannivisentini 0:969a2be49f41 403 }
giovannivisentini 0:969a2be49f41 404
giovannivisentini 7:19fc04b8fec6 405 /**
giovannivisentini 9:9f2e2e68d695 406 * Set the command synchronous answer mode.
giovannivisentini 9:9f2e2e68d695 407 * @param mode How to wait the I2C rensponse.
giovannivisentini 7:19fc04b8fec6 408 */
giovannivisentini 0:969a2be49f41 409 void M24SR_IO_SetI2CSynchroMode(M24SR_WAITINGTIME_MGMT mode) {
giovannivisentini 0:969a2be49f41 410 syncMode = mode;
giovannivisentini 0:969a2be49f41 411 }
giovannivisentini 0:969a2be49f41 412
giovannivisentini 0:969a2be49f41 413 /**
giovannivisentini 9:9f2e2e68d695 414 * Callback triggers when a command is completed.
giovannivisentini 0:969a2be49f41 415 */
giovannivisentini 0:969a2be49f41 416 void M24SR_AnswerReadyInterruptCallback() {
giovannivisentini 0:969a2be49f41 417 interruptIsFired = true;
giovannivisentini 0:969a2be49f41 418 answerReadyInterrupt.disable_irq();
giovannivisentini 0:969a2be49f41 419 }
giovannivisentini 0:969a2be49f41 420
giovannivisentini 0:969a2be49f41 421 /*** Component's Instance Variables ***/
giovannivisentini 0:969a2be49f41 422
giovannivisentini 0:969a2be49f41 423 /* Identity */
giovannivisentini 0:969a2be49f41 424 uint8_t who_am_i;
giovannivisentini 0:969a2be49f41 425
giovannivisentini 9:9f2e2e68d695 426 /* Type */
giovannivisentini 0:969a2be49f41 427 uint8_t type;
giovannivisentini 0:969a2be49f41 428
giovannivisentini 0:969a2be49f41 429 /* I2C address */
giovannivisentini 0:969a2be49f41 430 uint8_t address;
giovannivisentini 0:969a2be49f41 431
giovannivisentini 0:969a2be49f41 432 /* IO Device. */
giovannivisentini 9:9f2e2e68d695 433 I2C &dev_I2C;
giovannivisentini 0:969a2be49f41 434
giovannivisentini 0:969a2be49f41 435 /* GPIO */
giovannivisentini 0:969a2be49f41 436 DigitalIn GPOPin;
giovannivisentini 0:969a2be49f41 437
giovannivisentini 0:969a2be49f41 438 /**
giovannivisentini 9:9f2e2e68d695 439 * Pin used to disable the rf chip functionality.
giovannivisentini 0:969a2be49f41 440 */
giovannivisentini 0:969a2be49f41 441 DigitalOut RFDisablePin;
giovannivisentini 0:969a2be49f41 442
giovannivisentini 0:969a2be49f41 443 /**
giovannivisentini 9:9f2e2e68d695 444 * Pin used as interrupt.
giovannivisentini 0:969a2be49f41 445 */
giovannivisentini 0:969a2be49f41 446 InterruptIn answerReadyInterrupt;
giovannivisentini 0:969a2be49f41 447
giovannivisentini 0:969a2be49f41 448 /**
giovannivisentini 9:9f2e2e68d695 449 * Method used to wait the chip response.
giovannivisentini 0:969a2be49f41 450 */
giovannivisentini 0:969a2be49f41 451 M24SR_WAITINGTIME_MGMT syncMode;
giovannivisentini 0:969a2be49f41 452
giovannivisentini 0:969a2be49f41 453 /**
giovannivisentini 9:9f2e2e68d695 454 * Buffer used to build the command to send to the chip.
giovannivisentini 0:969a2be49f41 455 */
giovannivisentini 9:9f2e2e68d695 456 uint8_t uM24SRbuffer[0xFF];//max command length is 255
giovannivisentini 0:969a2be49f41 457
giovannivisentini 0:969a2be49f41 458 /**
giovannivisentini 0:969a2be49f41 459 * ???
giovannivisentini 0:969a2be49f41 460 */
giovannivisentini 0:969a2be49f41 461 uint8_t uDIDbyte;
giovannivisentini 0:969a2be49f41 462
giovannivisentini 0:969a2be49f41 463 /**
giovannivisentini 9:9f2e2e68d695 464 * State variable changes when the interrupt is fired.
giovannivisentini 0:969a2be49f41 465 */
giovannivisentini 0:969a2be49f41 466 volatile bool interruptIsFired;
giovannivisentini 6:96389fb79676 467
giovannivisentini 7:19fc04b8fec6 468 /**
giovannivisentini 9:9f2e2e68d695 469 * Object implementing the interface to use the NDefLib.
giovannivisentini 7:19fc04b8fec6 470 */
giovannivisentini 6:96389fb79676 471 NDefNfcTagM24SR NDefTagUtil;
giovannivisentini 12:d1f5eaa85deb 472
giovannivisentini 12:d1f5eaa85deb 473 private:
giovannivisentini 12:d1f5eaa85deb 474
giovannivisentini 12:d1f5eaa85deb 475 /**
giovannivisentini 12:d1f5eaa85deb 476 * Convert a generic enum to the value used by the M24SR chip.
giovannivisentini 12:d1f5eaa85deb 477 * @param type Password type.
giovannivisentini 12:d1f5eaa85deb 478 * @return equivalent value used inside the m24sr chip */
giovannivisentini 12:d1f5eaa85deb 479 uint16_t passwordTypeToConst(const PasswordType_t &type)const{
giovannivisentini 12:d1f5eaa85deb 480 switch(type){
giovannivisentini 12:d1f5eaa85deb 481 case ReadPwd:
giovannivisentini 12:d1f5eaa85deb 482 return READ_PWD;
giovannivisentini 12:d1f5eaa85deb 483 case WritePwd:
giovannivisentini 12:d1f5eaa85deb 484 return WRITE_PWD;
giovannivisentini 12:d1f5eaa85deb 485 case I2CPwd:
giovannivisentini 12:d1f5eaa85deb 486 default:
giovannivisentini 12:d1f5eaa85deb 487 return I2C_PWD;
giovannivisentini 12:d1f5eaa85deb 488 }
giovannivisentini 12:d1f5eaa85deb 489 }//passwordTypeToConst
giovannivisentini 12:d1f5eaa85deb 490
giovannivisentini 0:969a2be49f41 491 };
giovannivisentini 0:969a2be49f41 492
giovannivisentini 0:969a2be49f41 493 #endif // __M24SR_CLASS_H
giovannivisentini 0:969a2be49f41 494
giovannivisentini 0:969a2be49f41 495 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/