Firmware library for the X-NUCLEO-NFC01A1 Dynamic NFC Tag board.

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 Dec 22 15:34:24 2015 +0000
Revision:
6:96389fb79676
Parent:
1:15d4a123ef6b
Child:
7:19fc04b8fec6
add the NdefNdfTagM24SR

Who changed what in which revision?

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