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 Feb 02 16:04:24 2016 +0000
Revision:
24:9f98eafa2d39
Parent:
23:d07138541feb
Child:
27:3881985097bb
update docs

Who changed what in which revision?

UserRevisionLine numberNew contents of line
giovannivisentini 6:96389fb79676 1 /**
giovannivisentini 6:96389fb79676 2 ******************************************************************************
giovannivisentini 6:96389fb79676 3 * @file Type4NfcTagM24SR.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 9:9f2e2e68d695 7 * @brief M24SR specific NDefLib derived class
giovannivisentini 6:96389fb79676 8 ******************************************************************************
giovannivisentini 9:9f2e2e68d695 9 * @attention
giovannivisentini 6:96389fb79676 10 *
giovannivisentini 9:9f2e2e68d695 11 * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
giovannivisentini 6:96389fb79676 12 *
giovannivisentini 6:96389fb79676 13 * Redistribution and use in source and binary forms, with or without modification,
giovannivisentini 6:96389fb79676 14 * are permitted provided that the following conditions are met:
giovannivisentini 6:96389fb79676 15 * 1. Redistributions of source code must retain the above copyright notice,
giovannivisentini 6:96389fb79676 16 * this list of conditions and the following disclaimer.
giovannivisentini 6:96389fb79676 17 * 2. Redistributions in binary form must reproduce the above copyright notice,
giovannivisentini 6:96389fb79676 18 * this list of conditions and the following disclaimer in the documentation
giovannivisentini 6:96389fb79676 19 * and/or other materials provided with the distribution.
giovannivisentini 6:96389fb79676 20 * 3. Neither the name of STMicroelectronics nor the names of its contributors
giovannivisentini 6:96389fb79676 21 * may be used to endorse or promote products derived from this software
giovannivisentini 6:96389fb79676 22 * without specific prior written permission.
giovannivisentini 6:96389fb79676 23 *
giovannivisentini 6:96389fb79676 24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
giovannivisentini 6:96389fb79676 25 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
giovannivisentini 6:96389fb79676 26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
giovannivisentini 6:96389fb79676 27 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
giovannivisentini 6:96389fb79676 28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
giovannivisentini 6:96389fb79676 29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
giovannivisentini 6:96389fb79676 30 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
giovannivisentini 6:96389fb79676 31 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
giovannivisentini 6:96389fb79676 32 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
giovannivisentini 6:96389fb79676 33 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
giovannivisentini 6:96389fb79676 34 *
giovannivisentini 6:96389fb79676 35 ******************************************************************************
giovannivisentini 6:96389fb79676 36 */
giovannivisentini 6:96389fb79676 37
giovannivisentini 19:0b65a5813059 38 #ifndef X_NUCLEO_NFC01A1_M24SR_NDEFNFCTAGM24SR_H_
giovannivisentini 19:0b65a5813059 39 #define X_NUCLEO_NFC01A1_M24SR_NDEFNFCTAGM24SR_H_
giovannivisentini 19:0b65a5813059 40
giovannivisentini 19:0b65a5813059 41 #include <cstdlib>
giovannivisentini 6:96389fb79676 42 #include <stdint.h>
giovannivisentini 6:96389fb79676 43
giovannivisentini 6:96389fb79676 44 #include "NDefLib/NDefNfcTag.h"
giovannivisentini 6:96389fb79676 45
giovannivisentini 12:d1f5eaa85deb 46 #include "Nfc_class.h"
giovannivisentini 6:96389fb79676 47
giovannivisentini 6:96389fb79676 48 /**
giovannivisentini 19:0b65a5813059 49 * Helper class to use the NDefLib
giovannivisentini 19:0b65a5813059 50 */
giovannivisentini 6:96389fb79676 51 class NDefNfcTagM24SR: public NDefLib::NDefNfcTag {
giovannivisentini 6:96389fb79676 52
giovannivisentini 6:96389fb79676 53 public:
giovannivisentini 19:0b65a5813059 54
giovannivisentini 6:96389fb79676 55 /**
giovannivisentini 19:0b65a5813059 56 *
giovannivisentini 19:0b65a5813059 57 * @param device device to use
giovannivisentini 6:96389fb79676 58 */
giovannivisentini 12:d1f5eaa85deb 59 NDefNfcTagM24SR(Nfc &device) :
giovannivisentini 19:0b65a5813059 60 NDefLib::NDefNfcTag(),
giovannivisentini 19:0b65a5813059 61 mDevice(device),mIsSessionOpen(false),
giovannivisentini 19:0b65a5813059 62 mMaxReadBytes(0xFF), mMaxWriteBytes(0xFF),
giovannivisentini 19:0b65a5813059 63 mOpenSessionCallback(*this),
giovannivisentini 19:0b65a5813059 64 mCloseSessionCallback(*this),
giovannivisentini 19:0b65a5813059 65 mWriteByteCallback(*this),
giovannivisentini 19:0b65a5813059 66 mReadByteCallback(*this){}
giovannivisentini 19:0b65a5813059 67
giovannivisentini 19:0b65a5813059 68 virtual bool openSession(bool force = false);
giovannivisentini 19:0b65a5813059 69
giovannivisentini 19:0b65a5813059 70 virtual bool closeSession();
giovannivisentini 19:0b65a5813059 71
giovannivisentini 19:0b65a5813059 72 virtual bool isSessionOpen(){
giovannivisentini 19:0b65a5813059 73 return mIsSessionOpen;
giovannivisentini 6:96389fb79676 74 }
giovannivisentini 6:96389fb79676 75
giovannivisentini 8:5e637c71cbb3 76 /**
giovannivisentini 19:0b65a5813059 77 * Close the open session.
giovannivisentini 19:0b65a5813059 78 */
giovannivisentini 19:0b65a5813059 79 virtual ~NDefNfcTagM24SR(){
giovannivisentini 6:96389fb79676 80 if(isSessionOpen())
giovannivisentini 6:96389fb79676 81 closeSession();
giovannivisentini 19:0b65a5813059 82 }//~NDefNfcTagM24SR
giovannivisentini 19:0b65a5813059 83
giovannivisentini 19:0b65a5813059 84 protected:
giovannivisentini 19:0b65a5813059 85
giovannivisentini 19:0b65a5813059 86 virtual bool writeByte(const uint8_t *buffer, uint16_t length,uint16_t offset,
giovannivisentini 19:0b65a5813059 87 byteOperationCallback_t callback,CallbackStatus_t *callbackStatus);
giovannivisentini 19:0b65a5813059 88
giovannivisentini 19:0b65a5813059 89 virtual bool readByte(const uint16_t byteOffset, const uint16_t byteLength,
giovannivisentini 19:0b65a5813059 90 uint8_t *buffer, byteOperationCallback_t callback,CallbackStatus_t *callbackStatus);
giovannivisentini 19:0b65a5813059 91
giovannivisentini 19:0b65a5813059 92 private:
giovannivisentini 19:0b65a5813059 93
giovannivisentini 19:0b65a5813059 94 Nfc &mDevice;
giovannivisentini 19:0b65a5813059 95
giovannivisentini 19:0b65a5813059 96 /**
giovannivisentini 19:0b65a5813059 97 * true if the session is open
giovannivisentini 19:0b65a5813059 98 */
giovannivisentini 19:0b65a5813059 99 bool mIsSessionOpen;
giovannivisentini 19:0b65a5813059 100
giovannivisentini 19:0b65a5813059 101 /**
giovannivisentini 19:0b65a5813059 102 * Max length for a read operation
giovannivisentini 19:0b65a5813059 103 */
giovannivisentini 19:0b65a5813059 104 uint16_t mMaxReadBytes;
giovannivisentini 19:0b65a5813059 105
giovannivisentini 19:0b65a5813059 106 /**
giovannivisentini 19:0b65a5813059 107 * Max length for a write operation
giovannivisentini 19:0b65a5813059 108 */
giovannivisentini 19:0b65a5813059 109 uint16_t mMaxWriteBytes;
giovannivisentini 19:0b65a5813059 110
giovannivisentini 19:0b65a5813059 111 /**
giovannivisentini 19:0b65a5813059 112 * Class containing the callback needed to open a session and read the max
giovannivisentini 19:0b65a5813059 113 * read/write size
giovannivisentini 19:0b65a5813059 114 */
giovannivisentini 24:9f98eafa2d39 115 class OpenSessionCallBack: public Nfc::Callbacks{
giovannivisentini 19:0b65a5813059 116 public:
giovannivisentini 19:0b65a5813059 117 OpenSessionCallBack(NDefNfcTagM24SR &sender);
giovannivisentini 23:d07138541feb 118
giovannivisentini 19:0b65a5813059 119 virtual void onSessionOpen(Nfc *nfc,NFC_StatusTypeDef status);
giovannivisentini 19:0b65a5813059 120 virtual void onSelectedApplication(Nfc *nfc,NFC_StatusTypeDef status);
giovannivisentini 19:0b65a5813059 121 virtual void onSelectedCCFile(Nfc *nfc,NFC_StatusTypeDef status);
giovannivisentini 19:0b65a5813059 122 virtual void onReadByte(Nfc *nfc,NFC_StatusTypeDef status,uint16_t offset,
giovannivisentini 19:0b65a5813059 123 uint8_t *readByte, uint16_t nReadByte);
giovannivisentini 19:0b65a5813059 124 virtual void onSelectedNDEFFile(Nfc *nfc,NFC_StatusTypeDef status);
giovannivisentini 6:96389fb79676 125
giovannivisentini 19:0b65a5813059 126 private:
giovannivisentini 23:d07138541feb 127 /**
giovannivisentini 23:d07138541feb 128 * Object that send the open session callback
giovannivisentini 23:d07138541feb 129 */
giovannivisentini 19:0b65a5813059 130 NDefNfcTagM24SR &mSender;
giovannivisentini 23:d07138541feb 131
giovannivisentini 23:d07138541feb 132 /**
giovannivisentini 23:d07138541feb 133 * number of trials done for open the session
giovannivisentini 23:d07138541feb 134 */
giovannivisentini 19:0b65a5813059 135 uint32_t mNTrials;
giovannivisentini 23:d07138541feb 136
giovannivisentini 23:d07138541feb 137 /**
giovannivisentini 23:d07138541feb 138 * buffer where read the CC file
giovannivisentini 23:d07138541feb 139 */
giovannivisentini 19:0b65a5813059 140 uint8_t CCFile[15];
giovannivisentini 19:0b65a5813059 141 };
giovannivisentini 19:0b65a5813059 142
giovannivisentini 19:0b65a5813059 143 OpenSessionCallBack mOpenSessionCallback;
giovannivisentini 23:d07138541feb 144 friend class OpenSessionCallBack;
giovannivisentini 19:0b65a5813059 145
giovannivisentini 19:0b65a5813059 146 /**
giovannivisentini 19:0b65a5813059 147 * Class containing the callback needed to close a session
giovannivisentini 19:0b65a5813059 148 */
giovannivisentini 24:9f98eafa2d39 149 class CloseSessionCallBack : public Nfc::Callbacks{
giovannivisentini 19:0b65a5813059 150 public:
giovannivisentini 19:0b65a5813059 151 CloseSessionCallBack(NDefNfcTagM24SR &sender):
giovannivisentini 19:0b65a5813059 152 mSender(sender){}
giovannivisentini 19:0b65a5813059 153
giovannivisentini 19:0b65a5813059 154 virtual void onDeselect(Nfc *nfc,NFC_StatusTypeDef status){
giovannivisentini 19:0b65a5813059 155 (void)nfc;
giovannivisentini 19:0b65a5813059 156 if(status==NFC_SUCCESS){
giovannivisentini 19:0b65a5813059 157 mSender.mIsSessionOpen=false;
giovannivisentini 19:0b65a5813059 158 mSender.mCallBack->onSessionClose(&mSender,true);
giovannivisentini 19:0b65a5813059 159 }else{
giovannivisentini 19:0b65a5813059 160 mSender.mCallBack->onSessionClose(&mSender,false);
giovannivisentini 19:0b65a5813059 161 }//if-else
giovannivisentini 19:0b65a5813059 162 }
giovannivisentini 19:0b65a5813059 163 private:
giovannivisentini 23:d07138541feb 164
giovannivisentini 23:d07138541feb 165 /**
giovannivisentini 23:d07138541feb 166 * Object that send the open session callback
giovannivisentini 23:d07138541feb 167 */
giovannivisentini 19:0b65a5813059 168 NDefNfcTagM24SR &mSender;
giovannivisentini 19:0b65a5813059 169 };
giovannivisentini 19:0b65a5813059 170
giovannivisentini 19:0b65a5813059 171 CloseSessionCallBack mCloseSessionCallback;
giovannivisentini 23:d07138541feb 172 friend class OpenSessionCallBack;
giovannivisentini 19:0b65a5813059 173
giovannivisentini 19:0b65a5813059 174 /**
giovannivisentini 19:0b65a5813059 175 * Class containing the callback needed to write a buffer
giovannivisentini 19:0b65a5813059 176 */
giovannivisentini 24:9f98eafa2d39 177 class WriteByteCallback : public Nfc::Callbacks{
giovannivisentini 19:0b65a5813059 178 public:
giovannivisentini 19:0b65a5813059 179
giovannivisentini 19:0b65a5813059 180 /**
giovannivisentini 19:0b65a5813059 181 *
giovannivisentini 19:0b65a5813059 182 * @param sender tag where write the buffer
giovannivisentini 19:0b65a5813059 183 */
giovannivisentini 19:0b65a5813059 184 WriteByteCallback(NDefNfcTagM24SR &sender):
giovannivisentini 19:0b65a5813059 185 mByteToWrite(NULL),
giovannivisentini 19:0b65a5813059 186 mNByteToWrite(0),
giovannivisentini 19:0b65a5813059 187 mByteWrote(0),
giovannivisentini 19:0b65a5813059 188 mCallback(NULL),
giovannivisentini 19:0b65a5813059 189 mCallbackParam(NULL),
giovannivisentini 19:0b65a5813059 190 mSender(sender){}
giovannivisentini 6:96389fb79676 191
giovannivisentini 19:0b65a5813059 192 /**
giovannivisentini 19:0b65a5813059 193 * Set the buffer to write and the function to call when finish
giovannivisentini 23:d07138541feb 194 * @param buffer Buffer to write.
giovannivisentini 23:d07138541feb 195 * @param nByte Number of bytes to write.
giovannivisentini 23:d07138541feb 196 * @param callback Function to call when the write ends.
giovannivisentini 23:d07138541feb 197 * @param param Parameter to pass to the callback function.
giovannivisentini 19:0b65a5813059 198 */
giovannivisentini 19:0b65a5813059 199 void setTask(const uint8_t *buffer,uint16_t nByte,
giovannivisentini 19:0b65a5813059 200 byteOperationCallback_t callback,CallbackStatus_t *param){
giovannivisentini 19:0b65a5813059 201 mByteToWrite=buffer;
giovannivisentini 19:0b65a5813059 202 mNByteToWrite=nByte;
giovannivisentini 19:0b65a5813059 203 mByteWrote=0;
giovannivisentini 19:0b65a5813059 204 mCallback = callback;
giovannivisentini 19:0b65a5813059 205 mCallbackParam = param;
giovannivisentini 19:0b65a5813059 206 }
giovannivisentini 19:0b65a5813059 207
giovannivisentini 19:0b65a5813059 208 virtual void onUpdatedBinary(Nfc *nfc,NFC_StatusTypeDef status,
giovannivisentini 19:0b65a5813059 209 uint16_t startOffset,uint8_t *writeByte,uint16_t nWriteByte);
giovannivisentini 19:0b65a5813059 210
giovannivisentini 19:0b65a5813059 211
giovannivisentini 19:0b65a5813059 212 private:
giovannivisentini 23:d07138541feb 213
giovannivisentini 19:0b65a5813059 214 /** buffer to write */
giovannivisentini 19:0b65a5813059 215 const uint8_t *mByteToWrite;
giovannivisentini 19:0b65a5813059 216 /** length of the buffer */
giovannivisentini 19:0b65a5813059 217 uint16_t mNByteToWrite;
giovannivisentini 19:0b65a5813059 218 /** number of byte already wrote */
giovannivisentini 19:0b65a5813059 219 uint16_t mByteWrote;
giovannivisentini 19:0b65a5813059 220
giovannivisentini 19:0b65a5813059 221 /** function to call when all the bytes are write */
giovannivisentini 19:0b65a5813059 222 byteOperationCallback_t mCallback;
giovannivisentini 19:0b65a5813059 223 /** parameter to pass to the callback function*/
giovannivisentini 19:0b65a5813059 224 CallbackStatus_t* mCallbackParam;
giovannivisentini 19:0b65a5813059 225
giovannivisentini 19:0b65a5813059 226 /** tag where write the buffer*/
giovannivisentini 19:0b65a5813059 227 NDefNfcTagM24SR &mSender;
giovannivisentini 19:0b65a5813059 228 };
giovannivisentini 19:0b65a5813059 229
giovannivisentini 19:0b65a5813059 230 WriteByteCallback mWriteByteCallback;
giovannivisentini 23:d07138541feb 231 friend class WriteByteCallback;
giovannivisentini 19:0b65a5813059 232
giovannivisentini 19:0b65a5813059 233 /**
giovannivisentini 19:0b65a5813059 234 * Class containing the callback needed to read a buffer
giovannivisentini 19:0b65a5813059 235 */
giovannivisentini 24:9f98eafa2d39 236 class ReadByteCallback : public Nfc::Callbacks{
giovannivisentini 19:0b65a5813059 237 public:
giovannivisentini 19:0b65a5813059 238
giovannivisentini 19:0b65a5813059 239 /**
giovannivisentini 19:0b65a5813059 240 *
giovannivisentini 19:0b65a5813059 241 * @param Sender tag where read the buffer
giovannivisentini 19:0b65a5813059 242 */
giovannivisentini 19:0b65a5813059 243 ReadByteCallback(NDefNfcTagM24SR &sender):
giovannivisentini 19:0b65a5813059 244 mBuffer(NULL),
giovannivisentini 19:0b65a5813059 245 mNByteToRead(0),
giovannivisentini 19:0b65a5813059 246 mByteRead(0),
giovannivisentini 19:0b65a5813059 247 mCallback(NULL),
giovannivisentini 19:0b65a5813059 248 mCallbackParam(NULL),
giovannivisentini 19:0b65a5813059 249 mSender(sender){}
giovannivisentini 6:96389fb79676 250
giovannivisentini 19:0b65a5813059 251 /**
giovannivisentini 19:0b65a5813059 252 * Set the buffer where read the data and the function to call when finish
giovannivisentini 19:0b65a5813059 253 * @param buffer Buffer read
giovannivisentini 19:0b65a5813059 254 * @param nByte Number of bytes to read
giovannivisentini 19:0b65a5813059 255 * @param callback Function to call when the read ends
giovannivisentini 19:0b65a5813059 256 * @param param Parameter to pass to the callback function
giovannivisentini 19:0b65a5813059 257 */
giovannivisentini 19:0b65a5813059 258 void setTask(uint8_t *buffer,uint16_t nByte,
giovannivisentini 19:0b65a5813059 259 byteOperationCallback_t callback,CallbackStatus_t *param){
giovannivisentini 19:0b65a5813059 260 mBuffer=buffer;
giovannivisentini 19:0b65a5813059 261 mNByteToRead=nByte;
giovannivisentini 19:0b65a5813059 262 mByteRead=0;
giovannivisentini 19:0b65a5813059 263 mCallback = callback;
giovannivisentini 19:0b65a5813059 264 mCallbackParam = param;
giovannivisentini 19:0b65a5813059 265 }
giovannivisentini 6:96389fb79676 266
giovannivisentini 19:0b65a5813059 267 virtual void onReadByte(Nfc *nfc,NFC_StatusTypeDef status,
giovannivisentini 19:0b65a5813059 268 uint16_t offset,uint8_t *readByte, uint16_t nReadByte);
giovannivisentini 19:0b65a5813059 269
giovannivisentini 19:0b65a5813059 270
giovannivisentini 19:0b65a5813059 271 private:
giovannivisentini 19:0b65a5813059 272
giovannivisentini 19:0b65a5813059 273 /**
giovannivisentini 19:0b65a5813059 274 * Buffer where read the data
giovannivisentini 19:0b65a5813059 275 */
giovannivisentini 19:0b65a5813059 276 uint8_t *mBuffer;
giovannivisentini 6:96389fb79676 277
giovannivisentini 19:0b65a5813059 278 /**
giovannivisentini 19:0b65a5813059 279 * Number of bytes to read
giovannivisentini 19:0b65a5813059 280 */
giovannivisentini 19:0b65a5813059 281 uint16_t mNByteToRead;
giovannivisentini 19:0b65a5813059 282
giovannivisentini 19:0b65a5813059 283 /**
giovannivisentini 19:0b65a5813059 284 * Number of bytes already read
giovannivisentini 19:0b65a5813059 285 */
giovannivisentini 19:0b65a5813059 286 uint16_t mByteRead;
giovannivisentini 19:0b65a5813059 287
giovannivisentini 19:0b65a5813059 288 /**
giovannivisentini 19:0b65a5813059 289 * Function to call when all the bytes are read
giovannivisentini 19:0b65a5813059 290 */
giovannivisentini 19:0b65a5813059 291 byteOperationCallback_t mCallback;
giovannivisentini 6:96389fb79676 292
giovannivisentini 19:0b65a5813059 293 /**
giovannivisentini 19:0b65a5813059 294 * Parameter to pass to the callback function
giovannivisentini 19:0b65a5813059 295 */
giovannivisentini 19:0b65a5813059 296 CallbackStatus_t* mCallbackParam;
giovannivisentini 19:0b65a5813059 297
giovannivisentini 19:0b65a5813059 298 /**
giovannivisentini 19:0b65a5813059 299 * Tag where the data are read
giovannivisentini 19:0b65a5813059 300 */
giovannivisentini 19:0b65a5813059 301 NDefNfcTagM24SR &mSender;
giovannivisentini 19:0b65a5813059 302 };
giovannivisentini 19:0b65a5813059 303
giovannivisentini 19:0b65a5813059 304 ReadByteCallback mReadByteCallback;
giovannivisentini 23:d07138541feb 305 friend class ReadByteCallback;
giovannivisentini 19:0b65a5813059 306
giovannivisentini 19:0b65a5813059 307
giovannivisentini 6:96389fb79676 308 };
giovannivisentini 6:96389fb79676 309
giovannivisentini 19:0b65a5813059 310 #endif /* X_NUCLEO_NFC01A1_M24SR_NDEFNFCTAGM24SR_H_ */