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:
Mon Jan 11 12:37:28 2016 +0000
Revision:
7:19fc04b8fec6
Parent:
6:96389fb79676
Child:
9:9f2e2e68d695
Child:
11:a798ebea69fa
update docs

Who changed what in which revision?

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