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:
Davidroid
Date:
Wed Jul 12 14:15:02 2017 +0000
Revision:
33:e6b7e74be1d5
Parent:
29:7a2dfd06cb29
Updated to fit ARM mbed coding style.

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 29:7a2dfd06cb29 5 * @version V2.0.0
giovannivisentini 29:7a2dfd06cb29 6 * @date 28 Apr 2017
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 29:7a2dfd06cb29 46 #include "M24SR.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 27:3881985097bb 59 NDefNfcTagM24SR(M24SR &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 29:7a2dfd06cb29 68 virtual bool open_session(bool force = false);
giovannivisentini 19:0b65a5813059 69
giovannivisentini 29:7a2dfd06cb29 70 virtual bool close_session();
giovannivisentini 19:0b65a5813059 71
giovannivisentini 29:7a2dfd06cb29 72 virtual bool is_session_open(){
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 */
Davidroid 33:e6b7e74be1d5 79 virtual ~NDefNfcTagM24SR() {
Davidroid 33:e6b7e74be1d5 80 if (is_session_open()) {
giovannivisentini 29:7a2dfd06cb29 81 close_session();
Davidroid 33:e6b7e74be1d5 82 }
giovannivisentini 19:0b65a5813059 83 }//~NDefNfcTagM24SR
giovannivisentini 19:0b65a5813059 84
giovannivisentini 19:0b65a5813059 85 protected:
giovannivisentini 19:0b65a5813059 86
giovannivisentini 19:0b65a5813059 87 virtual bool writeByte(const uint8_t *buffer, uint16_t length,uint16_t offset,
Davidroid 33:e6b7e74be1d5 88 byteOperationCallback_t callback,CallbackStatus_t *callbackStatus);
giovannivisentini 19:0b65a5813059 89
giovannivisentini 19:0b65a5813059 90 virtual bool readByte(const uint16_t byteOffset, const uint16_t byteLength,
Davidroid 33:e6b7e74be1d5 91 uint8_t *buffer, byteOperationCallback_t callback,CallbackStatus_t *callbackStatus);
giovannivisentini 19:0b65a5813059 92
giovannivisentini 19:0b65a5813059 93 private:
giovannivisentini 19:0b65a5813059 94
giovannivisentini 27:3881985097bb 95 M24SR &mDevice;
giovannivisentini 19:0b65a5813059 96
giovannivisentini 19:0b65a5813059 97 /**
giovannivisentini 19:0b65a5813059 98 * true if the session is open
giovannivisentini 19:0b65a5813059 99 */
giovannivisentini 19:0b65a5813059 100 bool mIsSessionOpen;
giovannivisentini 19:0b65a5813059 101
giovannivisentini 19:0b65a5813059 102 /**
giovannivisentini 19:0b65a5813059 103 * Max length for a read operation
giovannivisentini 19:0b65a5813059 104 */
giovannivisentini 19:0b65a5813059 105 uint16_t mMaxReadBytes;
giovannivisentini 19:0b65a5813059 106
giovannivisentini 19:0b65a5813059 107 /**
giovannivisentini 19:0b65a5813059 108 * Max length for a write operation
giovannivisentini 19:0b65a5813059 109 */
giovannivisentini 19:0b65a5813059 110 uint16_t mMaxWriteBytes;
giovannivisentini 19:0b65a5813059 111
giovannivisentini 19:0b65a5813059 112 /**
giovannivisentini 19:0b65a5813059 113 * Class containing the callback needed to open a session and read the max
giovannivisentini 19:0b65a5813059 114 * read/write size
giovannivisentini 19:0b65a5813059 115 */
giovannivisentini 27:3881985097bb 116 class OpenSessionCallBack: public M24SR::Callbacks{
giovannivisentini 19:0b65a5813059 117 public:
giovannivisentini 19:0b65a5813059 118 OpenSessionCallBack(NDefNfcTagM24SR &sender);
giovannivisentini 23:d07138541feb 119
giovannivisentini 29:7a2dfd06cb29 120 virtual void on_session_open(M24SR *nfc,M24SR::StatusTypeDef status);
giovannivisentini 29:7a2dfd06cb29 121 virtual void on_selected_application(M24SR *nfc,M24SR::StatusTypeDef status);
giovannivisentini 29:7a2dfd06cb29 122 virtual void on_selected_CC_file(M24SR *nfc,M24SR::StatusTypeDef status);
giovannivisentini 29:7a2dfd06cb29 123 virtual void on_read_byte(M24SR *nfc,M24SR::StatusTypeDef status,uint16_t offset,
giovannivisentini 19:0b65a5813059 124 uint8_t *readByte, uint16_t nReadByte);
giovannivisentini 29:7a2dfd06cb29 125 virtual void on_selected_NDEF_file(M24SR *nfc,M24SR::StatusTypeDef status);
giovannivisentini 6:96389fb79676 126
giovannivisentini 19:0b65a5813059 127 private:
giovannivisentini 23:d07138541feb 128 /**
giovannivisentini 23:d07138541feb 129 * Object that send the open session callback
giovannivisentini 23:d07138541feb 130 */
giovannivisentini 19:0b65a5813059 131 NDefNfcTagM24SR &mSender;
giovannivisentini 23:d07138541feb 132
giovannivisentini 23:d07138541feb 133 /**
giovannivisentini 23:d07138541feb 134 * number of trials done for open the session
giovannivisentini 23:d07138541feb 135 */
giovannivisentini 19:0b65a5813059 136 uint32_t mNTrials;
giovannivisentini 23:d07138541feb 137
giovannivisentini 23:d07138541feb 138 /**
giovannivisentini 23:d07138541feb 139 * buffer where read the CC file
giovannivisentini 23:d07138541feb 140 */
giovannivisentini 19:0b65a5813059 141 uint8_t CCFile[15];
giovannivisentini 19:0b65a5813059 142 };
giovannivisentini 19:0b65a5813059 143
giovannivisentini 19:0b65a5813059 144 OpenSessionCallBack mOpenSessionCallback;
giovannivisentini 23:d07138541feb 145 friend class OpenSessionCallBack;
giovannivisentini 19:0b65a5813059 146
giovannivisentini 19:0b65a5813059 147 /**
giovannivisentini 19:0b65a5813059 148 * Class containing the callback needed to close a session
giovannivisentini 19:0b65a5813059 149 */
giovannivisentini 27:3881985097bb 150 class CloseSessionCallBack : public M24SR::Callbacks{
giovannivisentini 19:0b65a5813059 151 public:
giovannivisentini 19:0b65a5813059 152 CloseSessionCallBack(NDefNfcTagM24SR &sender):
giovannivisentini 19:0b65a5813059 153 mSender(sender){}
giovannivisentini 19:0b65a5813059 154
giovannivisentini 29:7a2dfd06cb29 155 virtual void on_deselect(M24SR *nfc,M24SR::StatusTypeDef status){
giovannivisentini 19:0b65a5813059 156 (void)nfc;
Davidroid 33:e6b7e74be1d5 157 if (status==M24SR::M24SR_SUCCESS) {
Davidroid 33:e6b7e74be1d5 158 mSender.mIsSessionOpen = false;
giovannivisentini 29:7a2dfd06cb29 159 mSender.mCallBack->on_session_close(&mSender,true);
Davidroid 33:e6b7e74be1d5 160 } else {
giovannivisentini 29:7a2dfd06cb29 161 mSender.mCallBack->on_session_close(&mSender,false);
giovannivisentini 19:0b65a5813059 162 }//if-else
giovannivisentini 19:0b65a5813059 163 }
giovannivisentini 19:0b65a5813059 164 private:
giovannivisentini 23:d07138541feb 165
giovannivisentini 23:d07138541feb 166 /**
giovannivisentini 23:d07138541feb 167 * Object that send the open session callback
giovannivisentini 23:d07138541feb 168 */
giovannivisentini 19:0b65a5813059 169 NDefNfcTagM24SR &mSender;
giovannivisentini 19:0b65a5813059 170 };
giovannivisentini 19:0b65a5813059 171
giovannivisentini 19:0b65a5813059 172 CloseSessionCallBack mCloseSessionCallback;
giovannivisentini 23:d07138541feb 173 friend class OpenSessionCallBack;
giovannivisentini 19:0b65a5813059 174
giovannivisentini 19:0b65a5813059 175 /**
giovannivisentini 19:0b65a5813059 176 * Class containing the callback needed to write a buffer
giovannivisentini 19:0b65a5813059 177 */
giovannivisentini 27:3881985097bb 178 class WriteByteCallback : public M24SR::Callbacks{
giovannivisentini 19:0b65a5813059 179 public:
giovannivisentini 19:0b65a5813059 180
giovannivisentini 19:0b65a5813059 181 /**
giovannivisentini 19:0b65a5813059 182 *
giovannivisentini 19:0b65a5813059 183 * @param sender tag where write the buffer
giovannivisentini 19:0b65a5813059 184 */
giovannivisentini 19:0b65a5813059 185 WriteByteCallback(NDefNfcTagM24SR &sender):
Davidroid 33:e6b7e74be1d5 186 mByteToWrite(NULL),
Davidroid 33:e6b7e74be1d5 187 mNByteToWrite(0),
Davidroid 33:e6b7e74be1d5 188 mByteWrote(0),
Davidroid 33:e6b7e74be1d5 189 mCallback(NULL),
Davidroid 33:e6b7e74be1d5 190 mCallbackParam(NULL),
Davidroid 33:e6b7e74be1d5 191 mSender(sender){}
giovannivisentini 6:96389fb79676 192
giovannivisentini 19:0b65a5813059 193 /**
giovannivisentini 19:0b65a5813059 194 * Set the buffer to write and the function to call when finish
giovannivisentini 23:d07138541feb 195 * @param buffer Buffer to write.
giovannivisentini 23:d07138541feb 196 * @param nByte Number of bytes to write.
giovannivisentini 23:d07138541feb 197 * @param callback Function to call when the write ends.
giovannivisentini 23:d07138541feb 198 * @param param Parameter to pass to the callback function.
giovannivisentini 19:0b65a5813059 199 */
giovannivisentini 29:7a2dfd06cb29 200 void set_task(const uint8_t *buffer,uint16_t nByte,
Davidroid 33:e6b7e74be1d5 201 byteOperationCallback_t callback,CallbackStatus_t *param) {
giovannivisentini 19:0b65a5813059 202 mByteToWrite=buffer;
giovannivisentini 19:0b65a5813059 203 mNByteToWrite=nByte;
giovannivisentini 19:0b65a5813059 204 mByteWrote=0;
giovannivisentini 19:0b65a5813059 205 mCallback = callback;
giovannivisentini 19:0b65a5813059 206 mCallbackParam = param;
giovannivisentini 19:0b65a5813059 207 }
giovannivisentini 19:0b65a5813059 208
giovannivisentini 29:7a2dfd06cb29 209 virtual void on_updated_binary(M24SR *nfc,M24SR::StatusTypeDef status,
Davidroid 33:e6b7e74be1d5 210 uint16_t startOffset,uint8_t *writeByte,uint16_t nWriteByte);
giovannivisentini 19:0b65a5813059 211
giovannivisentini 19:0b65a5813059 212
giovannivisentini 19:0b65a5813059 213 private:
giovannivisentini 23:d07138541feb 214
giovannivisentini 19:0b65a5813059 215 /** buffer to write */
giovannivisentini 19:0b65a5813059 216 const uint8_t *mByteToWrite;
giovannivisentini 19:0b65a5813059 217 /** length of the buffer */
giovannivisentini 19:0b65a5813059 218 uint16_t mNByteToWrite;
giovannivisentini 19:0b65a5813059 219 /** number of byte already wrote */
giovannivisentini 19:0b65a5813059 220 uint16_t mByteWrote;
giovannivisentini 19:0b65a5813059 221
giovannivisentini 19:0b65a5813059 222 /** function to call when all the bytes are write */
giovannivisentini 19:0b65a5813059 223 byteOperationCallback_t mCallback;
giovannivisentini 19:0b65a5813059 224 /** parameter to pass to the callback function*/
giovannivisentini 19:0b65a5813059 225 CallbackStatus_t* mCallbackParam;
giovannivisentini 19:0b65a5813059 226
giovannivisentini 19:0b65a5813059 227 /** tag where write the buffer*/
giovannivisentini 19:0b65a5813059 228 NDefNfcTagM24SR &mSender;
giovannivisentini 19:0b65a5813059 229 };
giovannivisentini 19:0b65a5813059 230
giovannivisentini 19:0b65a5813059 231 WriteByteCallback mWriteByteCallback;
giovannivisentini 23:d07138541feb 232 friend class WriteByteCallback;
giovannivisentini 19:0b65a5813059 233
giovannivisentini 19:0b65a5813059 234 /**
giovannivisentini 19:0b65a5813059 235 * Class containing the callback needed to read a buffer
giovannivisentini 19:0b65a5813059 236 */
giovannivisentini 27:3881985097bb 237 class ReadByteCallback : public M24SR::Callbacks{
giovannivisentini 19:0b65a5813059 238 public:
giovannivisentini 19:0b65a5813059 239
giovannivisentini 19:0b65a5813059 240 /**
giovannivisentini 19:0b65a5813059 241 *
giovannivisentini 19:0b65a5813059 242 * @param Sender tag where read the buffer
giovannivisentini 19:0b65a5813059 243 */
giovannivisentini 19:0b65a5813059 244 ReadByteCallback(NDefNfcTagM24SR &sender):
Davidroid 33:e6b7e74be1d5 245 mBuffer(NULL),
Davidroid 33:e6b7e74be1d5 246 mNByteToRead(0),
Davidroid 33:e6b7e74be1d5 247 mByteRead(0),
Davidroid 33:e6b7e74be1d5 248 mCallback(NULL),
Davidroid 33:e6b7e74be1d5 249 mCallbackParam(NULL),
Davidroid 33:e6b7e74be1d5 250 mSender(sender){}
giovannivisentini 6:96389fb79676 251
giovannivisentini 19:0b65a5813059 252 /**
giovannivisentini 19:0b65a5813059 253 * Set the buffer where read the data and the function to call when finish
giovannivisentini 19:0b65a5813059 254 * @param buffer Buffer read
giovannivisentini 19:0b65a5813059 255 * @param nByte Number of bytes to read
giovannivisentini 19:0b65a5813059 256 * @param callback Function to call when the read ends
giovannivisentini 19:0b65a5813059 257 * @param param Parameter to pass to the callback function
giovannivisentini 19:0b65a5813059 258 */
giovannivisentini 29:7a2dfd06cb29 259 void set_task(uint8_t *buffer,uint16_t nByte,
Davidroid 33:e6b7e74be1d5 260 byteOperationCallback_t callback,CallbackStatus_t *param){
giovannivisentini 19:0b65a5813059 261 mBuffer=buffer;
giovannivisentini 19:0b65a5813059 262 mNByteToRead=nByte;
giovannivisentini 19:0b65a5813059 263 mByteRead=0;
giovannivisentini 19:0b65a5813059 264 mCallback = callback;
giovannivisentini 19:0b65a5813059 265 mCallbackParam = param;
giovannivisentini 19:0b65a5813059 266 }
giovannivisentini 6:96389fb79676 267
giovannivisentini 29:7a2dfd06cb29 268 virtual void on_read_byte(M24SR *nfc,M24SR::StatusTypeDef status,
Davidroid 33:e6b7e74be1d5 269 uint16_t offset,uint8_t *readByte, uint16_t nReadByte);
giovannivisentini 19:0b65a5813059 270
giovannivisentini 19:0b65a5813059 271
giovannivisentini 19:0b65a5813059 272 private:
giovannivisentini 19:0b65a5813059 273
giovannivisentini 19:0b65a5813059 274 /**
giovannivisentini 19:0b65a5813059 275 * Buffer where read the data
giovannivisentini 19:0b65a5813059 276 */
giovannivisentini 19:0b65a5813059 277 uint8_t *mBuffer;
giovannivisentini 6:96389fb79676 278
giovannivisentini 19:0b65a5813059 279 /**
giovannivisentini 19:0b65a5813059 280 * Number of bytes to read
giovannivisentini 19:0b65a5813059 281 */
giovannivisentini 19:0b65a5813059 282 uint16_t mNByteToRead;
giovannivisentini 19:0b65a5813059 283
giovannivisentini 19:0b65a5813059 284 /**
giovannivisentini 19:0b65a5813059 285 * Number of bytes already read
giovannivisentini 19:0b65a5813059 286 */
giovannivisentini 19:0b65a5813059 287 uint16_t mByteRead;
giovannivisentini 19:0b65a5813059 288
giovannivisentini 19:0b65a5813059 289 /**
giovannivisentini 19:0b65a5813059 290 * Function to call when all the bytes are read
giovannivisentini 19:0b65a5813059 291 */
giovannivisentini 19:0b65a5813059 292 byteOperationCallback_t mCallback;
giovannivisentini 6:96389fb79676 293
giovannivisentini 19:0b65a5813059 294 /**
giovannivisentini 19:0b65a5813059 295 * Parameter to pass to the callback function
giovannivisentini 19:0b65a5813059 296 */
giovannivisentini 19:0b65a5813059 297 CallbackStatus_t* mCallbackParam;
giovannivisentini 19:0b65a5813059 298
giovannivisentini 19:0b65a5813059 299 /**
giovannivisentini 19:0b65a5813059 300 * Tag where the data are read
giovannivisentini 19:0b65a5813059 301 */
giovannivisentini 19:0b65a5813059 302 NDefNfcTagM24SR &mSender;
giovannivisentini 19:0b65a5813059 303 };
giovannivisentini 19:0b65a5813059 304
giovannivisentini 19:0b65a5813059 305 ReadByteCallback mReadByteCallback;
giovannivisentini 23:d07138541feb 306 friend class ReadByteCallback;
giovannivisentini 19:0b65a5813059 307
giovannivisentini 19:0b65a5813059 308
giovannivisentini 6:96389fb79676 309 };
giovannivisentini 6:96389fb79676 310
giovannivisentini 19:0b65a5813059 311 #endif /* X_NUCLEO_NFC01A1_M24SR_NDEFNFCTAGM24SR_H_ */