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:
Thu Dec 03 14:56:13 2015 +0000
Revision:
1:15d4a123ef6b
Parent:
0:969a2be49f41
Child:
6:96389fb79676
Add License

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