v-16

Dependencies:   RecordType-v-16

Committer:
DuyLionTran
Date:
Tue Dec 12 16:00:06 2017 +0000
Revision:
1:872e54e3c364
Parent:
0:6eb44b07d867
v-16

Who changed what in which revision?

UserRevisionLine numberNew contents of line
DuyLionTran 0:6eb44b07d867 1 /**
DuyLionTran 0:6eb44b07d867 2 ******************************************************************************
DuyLionTran 0:6eb44b07d867 3 * @file NDefNfcTag.h
DuyLionTran 0:6eb44b07d867 4 * @author ST / Central Labs
DuyLionTran 0:6eb44b07d867 5 * @version V2.0.0
DuyLionTran 0:6eb44b07d867 6 * @date 28 Apr 2017
DuyLionTran 0:6eb44b07d867 7 * @brief Generic interface that a device must implement to use the NDefLib
DuyLionTran 0:6eb44b07d867 8 * with async communication
DuyLionTran 0:6eb44b07d867 9 ******************************************************************************
DuyLionTran 0:6eb44b07d867 10 * @attention
DuyLionTran 0:6eb44b07d867 11 *
DuyLionTran 0:6eb44b07d867 12 * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
DuyLionTran 0:6eb44b07d867 13 *
DuyLionTran 0:6eb44b07d867 14 * Redistribution and use in source and binary forms, with or without modification,
DuyLionTran 0:6eb44b07d867 15 * are permitted provided that the following conditions are met:
DuyLionTran 0:6eb44b07d867 16 * 1. Redistributions of source code must retain the above copyright notice,
DuyLionTran 0:6eb44b07d867 17 * this list of conditions and the following disclaimer.
DuyLionTran 0:6eb44b07d867 18 * 2. Redistributions in binary form must reproduce the above copyright notice,
DuyLionTran 0:6eb44b07d867 19 * this list of conditions and the following disclaimer in the documentation
DuyLionTran 0:6eb44b07d867 20 * and/or other materials provided with the distribution.
DuyLionTran 0:6eb44b07d867 21 * 3. Neither the name of STMicroelectronics nor the names of its contributors
DuyLionTran 0:6eb44b07d867 22 * may be used to endorse or promote products derived from this software
DuyLionTran 0:6eb44b07d867 23 * without specific prior written permission.
DuyLionTran 0:6eb44b07d867 24 *
DuyLionTran 0:6eb44b07d867 25 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
DuyLionTran 0:6eb44b07d867 26 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
DuyLionTran 0:6eb44b07d867 27 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DuyLionTran 0:6eb44b07d867 28 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
DuyLionTran 0:6eb44b07d867 29 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DuyLionTran 0:6eb44b07d867 30 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
DuyLionTran 0:6eb44b07d867 31 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
DuyLionTran 0:6eb44b07d867 32 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
DuyLionTran 0:6eb44b07d867 33 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
DuyLionTran 0:6eb44b07d867 34 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
DuyLionTran 0:6eb44b07d867 35 *
DuyLionTran 0:6eb44b07d867 36 ******************************************************************************
DuyLionTran 0:6eb44b07d867 37 */
DuyLionTran 0:6eb44b07d867 38
DuyLionTran 0:6eb44b07d867 39 #ifndef NDEFLIB_NDEFNFCTAG_H_
DuyLionTran 0:6eb44b07d867 40 #define NDEFLIB_NDEFNFCTAG_H_
DuyLionTran 0:6eb44b07d867 41
DuyLionTran 0:6eb44b07d867 42 #include "NDefLib/Message.h"
DuyLionTran 0:6eb44b07d867 43
DuyLionTran 0:6eb44b07d867 44 namespace NDefLib {
DuyLionTran 0:6eb44b07d867 45
DuyLionTran 0:6eb44b07d867 46 /**
DuyLionTran 0:6eb44b07d867 47 * Abstract class used to write/read NDef messages to/from a nfc tag.
DuyLionTran 0:6eb44b07d867 48 * This class is made to handle also asynchronous communication with the nfc component.
DuyLionTran 0:6eb44b07d867 49 * All the functions in this class will return immediately, when a command ends a proper callback function will
DuyLionTran 0:6eb44b07d867 50 * be called.
DuyLionTran 0:6eb44b07d867 51 */
DuyLionTran 0:6eb44b07d867 52 class NDefNfcTag {
DuyLionTran 0:6eb44b07d867 53
DuyLionTran 0:6eb44b07d867 54 public:
DuyLionTran 0:6eb44b07d867 55
DuyLionTran 0:6eb44b07d867 56 /**
DuyLionTran 0:6eb44b07d867 57 * Class that contains all the function called when a command finished.
DuyLionTran 0:6eb44b07d867 58 * The default implementation is an empty function.
DuyLionTran 0:6eb44b07d867 59 */
DuyLionTran 0:6eb44b07d867 60 class Callbacks {
DuyLionTran 0:6eb44b07d867 61 public:
DuyLionTran 0:6eb44b07d867 62
DuyLionTran 0:6eb44b07d867 63 /**
DuyLionTran 0:6eb44b07d867 64 * Called when a session is open.
DuyLionTran 0:6eb44b07d867 65 * @param tag Tag where the session is open.
DuyLionTran 0:6eb44b07d867 66 * @param success True if the operation has success.
DuyLionTran 0:6eb44b07d867 67 */
DuyLionTran 0:6eb44b07d867 68 virtual void on_session_open(NDefNfcTag *tag,bool success){
DuyLionTran 0:6eb44b07d867 69 (void)tag;(void)success;
DuyLionTran 0:6eb44b07d867 70 };
DuyLionTran 0:6eb44b07d867 71
DuyLionTran 0:6eb44b07d867 72 /**
DuyLionTran 0:6eb44b07d867 73 * Called when a message is written.
DuyLionTran 0:6eb44b07d867 74 * @param tag Tag where the message is written.
DuyLionTran 0:6eb44b07d867 75 * @param success True if the operation has success.
DuyLionTran 0:6eb44b07d867 76 */
DuyLionTran 0:6eb44b07d867 77 virtual void on_message_write(NDefNfcTag *tag,bool success){
DuyLionTran 0:6eb44b07d867 78 (void)tag;(void)success;
DuyLionTran 0:6eb44b07d867 79
DuyLionTran 0:6eb44b07d867 80 };
DuyLionTran 0:6eb44b07d867 81
DuyLionTran 0:6eb44b07d867 82 /**
DuyLionTran 0:6eb44b07d867 83 * Called when a message is read.
DuyLionTran 0:6eb44b07d867 84 * @param tag Tag where the message is read.
DuyLionTran 0:6eb44b07d867 85 * @param success True if the operation has success.
DuyLionTran 0:6eb44b07d867 86 */
DuyLionTran 0:6eb44b07d867 87 virtual void on_message_read(NDefNfcTag *tag,bool success,
DuyLionTran 0:6eb44b07d867 88 const Message *msg){
DuyLionTran 0:6eb44b07d867 89 (void)tag;(void)success; (void)msg;
DuyLionTran 0:6eb44b07d867 90 };
DuyLionTran 0:6eb44b07d867 91
DuyLionTran 0:6eb44b07d867 92
DuyLionTran 0:6eb44b07d867 93 /**
DuyLionTran 0:6eb44b07d867 94 * Called when a session is closed.
DuyLionTran 0:6eb44b07d867 95 * @param tag Tag where the session is closed.
DuyLionTran 0:6eb44b07d867 96 * @param success True if the operation has success.
DuyLionTran 0:6eb44b07d867 97 */
DuyLionTran 0:6eb44b07d867 98 virtual void on_session_close(NDefNfcTag *tag,bool success){
DuyLionTran 0:6eb44b07d867 99 (void)tag;(void)success;
DuyLionTran 0:6eb44b07d867 100 };
DuyLionTran 0:6eb44b07d867 101
DuyLionTran 0:6eb44b07d867 102 virtual ~Callbacks(){};
DuyLionTran 0:6eb44b07d867 103 };
DuyLionTran 0:6eb44b07d867 104
DuyLionTran 0:6eb44b07d867 105 private:
DuyLionTran 0:6eb44b07d867 106
DuyLionTran 0:6eb44b07d867 107 /**
DuyLionTran 0:6eb44b07d867 108 * Data used to store the callback status during a read/write operation.
DuyLionTran 0:6eb44b07d867 109 */
DuyLionTran 0:6eb44b07d867 110 struct CallbackStatus{
DuyLionTran 0:6eb44b07d867 111
DuyLionTran 0:6eb44b07d867 112 /** Object that triggers the callback */
DuyLionTran 0:6eb44b07d867 113 NDefNfcTag *callOwner;
DuyLionTran 0:6eb44b07d867 114
DuyLionTran 0:6eb44b07d867 115 /** Message that the callback is writing/reading */
DuyLionTran 0:6eb44b07d867 116 Message *msg;
DuyLionTran 0:6eb44b07d867 117 };
DuyLionTran 0:6eb44b07d867 118
DuyLionTran 0:6eb44b07d867 119 public:
DuyLionTran 0:6eb44b07d867 120
DuyLionTran 0:6eb44b07d867 121 NDefNfcTag():mCallBack(&mDefaultCallBack){}
DuyLionTran 0:6eb44b07d867 122
DuyLionTran 0:6eb44b07d867 123 /**
DuyLionTran 0:6eb44b07d867 124 * Set the callback object.
DuyLionTran 0:6eb44b07d867 125 * @param c Object containing the callback.
DuyLionTran 0:6eb44b07d867 126 */
DuyLionTran 0:6eb44b07d867 127 void set_callback(Callbacks *c){
DuyLionTran 0:6eb44b07d867 128 if (c!=NULL) {
DuyLionTran 0:6eb44b07d867 129 mCallBack=c;
DuyLionTran 0:6eb44b07d867 130 } else {
DuyLionTran 0:6eb44b07d867 131 mCallBack=&mDefaultCallBack;
DuyLionTran 0:6eb44b07d867 132 }
DuyLionTran 0:6eb44b07d867 133 }//setCallBack
DuyLionTran 0:6eb44b07d867 134
DuyLionTran 0:6eb44b07d867 135
DuyLionTran 0:6eb44b07d867 136 /**
DuyLionTran 0:6eb44b07d867 137 * Open the communication session with the nfc tag.
DuyLionTran 0:6eb44b07d867 138 * @param force Force to open a communication.
DuyLionTran 0:6eb44b07d867 139 * @return true if success
DuyLionTran 0:6eb44b07d867 140 */
DuyLionTran 0:6eb44b07d867 141 virtual bool open_session(bool force = false)=0;
DuyLionTran 0:6eb44b07d867 142
DuyLionTran 0:6eb44b07d867 143 /**
DuyLionTran 0:6eb44b07d867 144 * Close the communication with the nfc tag.
DuyLionTran 0:6eb44b07d867 145 * @return true if success
DuyLionTran 0:6eb44b07d867 146 */
DuyLionTran 0:6eb44b07d867 147 virtual bool close_session()=0;
DuyLionTran 0:6eb44b07d867 148
DuyLionTran 0:6eb44b07d867 149 /**
DuyLionTran 0:6eb44b07d867 150 * Returns true if a communication with the nfc tag is open.
DuyLionTran 0:6eb44b07d867 151 * @return true if a communication with the nfc tag is open
DuyLionTran 0:6eb44b07d867 152 */
DuyLionTran 0:6eb44b07d867 153 virtual bool is_session_open()=0;
DuyLionTran 0:6eb44b07d867 154
DuyLionTran 0:6eb44b07d867 155 /**
DuyLionTran 0:6eb44b07d867 156 * Write a message in the nfc tag.
DuyLionTran 0:6eb44b07d867 157 * @par This call will delete the previous message.
DuyLionTran 0:6eb44b07d867 158 * @param msg Message to write.
DuyLionTran 0:6eb44b07d867 159 * @return true if success
DuyLionTran 0:6eb44b07d867 160 */
DuyLionTran 0:6eb44b07d867 161 virtual bool write(Message &msg) {
DuyLionTran 0:6eb44b07d867 162 if (!is_session_open()) {
DuyLionTran 0:6eb44b07d867 163 mCallBack->on_message_write(this,false);
DuyLionTran 0:6eb44b07d867 164 return false;
DuyLionTran 0:6eb44b07d867 165 }
DuyLionTran 0:6eb44b07d867 166
DuyLionTran 0:6eb44b07d867 167 const uint16_t length = msg.get_byte_length();
DuyLionTran 0:6eb44b07d867 168 uint8_t *buffer = new uint8_t[length];
DuyLionTran 0:6eb44b07d867 169 if (buffer==NULL){ //impossible to allocate the buffer
DuyLionTran 0:6eb44b07d867 170 mCallBack->on_message_write(this,false);
DuyLionTran 0:6eb44b07d867 171 return false;
DuyLionTran 0:6eb44b07d867 172 }
DuyLionTran 0:6eb44b07d867 173
DuyLionTran 0:6eb44b07d867 174 msg.write(buffer);
DuyLionTran 0:6eb44b07d867 175
DuyLionTran 0:6eb44b07d867 176 mCallBackStatus.callOwner=this;
DuyLionTran 0:6eb44b07d867 177 mCallBackStatus.msg=NULL;
DuyLionTran 0:6eb44b07d867 178
DuyLionTran 0:6eb44b07d867 179 return writeByte(buffer, length,0,NDefNfcTag::onWriteMessageCallback,&mCallBackStatus);
DuyLionTran 0:6eb44b07d867 180 }
DuyLionTran 0:6eb44b07d867 181
DuyLionTran 0:6eb44b07d867 182 /**
DuyLionTran 0:6eb44b07d867 183 * Read a message from the tag.
DuyLionTran 0:6eb44b07d867 184 * @param[in,out] msg Message object the read records are added to.
DuyLionTran 0:6eb44b07d867 185 * @return true if success
DuyLionTran 0:6eb44b07d867 186 */
DuyLionTran 0:6eb44b07d867 187 virtual bool read(Message *msg) {
DuyLionTran 0:6eb44b07d867 188 if (!is_session_open()) {
DuyLionTran 0:6eb44b07d867 189 mCallBack->on_message_read(this,false,msg);
DuyLionTran 0:6eb44b07d867 190 return false;
DuyLionTran 0:6eb44b07d867 191 }
DuyLionTran 0:6eb44b07d867 192
DuyLionTran 0:6eb44b07d867 193 uint8_t *buffer = new uint8_t[2];
DuyLionTran 0:6eb44b07d867 194 if (buffer==NULL) {
DuyLionTran 0:6eb44b07d867 195 mCallBack->on_message_read(this,false,msg);
DuyLionTran 0:6eb44b07d867 196 return false;
DuyLionTran 0:6eb44b07d867 197 }
DuyLionTran 0:6eb44b07d867 198
DuyLionTran 0:6eb44b07d867 199 mCallBackStatus.callOwner=this;
DuyLionTran 0:6eb44b07d867 200 mCallBackStatus.msg=msg;
DuyLionTran 0:6eb44b07d867 201 return readByte(0,2,buffer,NDefNfcTag::onReadMessageLength,&mCallBackStatus);
DuyLionTran 0:6eb44b07d867 202 }
DuyLionTran 0:6eb44b07d867 203
DuyLionTran 0:6eb44b07d867 204 virtual ~NDefNfcTag() {}
DuyLionTran 0:6eb44b07d867 205
DuyLionTran 0:6eb44b07d867 206 protected:
DuyLionTran 0:6eb44b07d867 207
DuyLionTran 0:6eb44b07d867 208 typedef struct CallbackStatus CallbackStatus_t;
DuyLionTran 0:6eb44b07d867 209
DuyLionTran 0:6eb44b07d867 210 /**
DuyLionTran 0:6eb44b07d867 211 * Function that the component will call when a read/write operation is completed
DuyLionTran 0:6eb44b07d867 212 * @param internalState Callback internal state data.
DuyLionTran 0:6eb44b07d867 213 * @param status True if the operation succeed.
DuyLionTran 0:6eb44b07d867 214 * @param buffer Buffer to read/write.
DuyLionTran 0:6eb44b07d867 215 * @param length Number of byte read/write.
DuyLionTran 0:6eb44b07d867 216 * @return true if the operation had success
DuyLionTran 0:6eb44b07d867 217 */
DuyLionTran 0:6eb44b07d867 218 typedef bool(*byteOperationCallback_t)(CallbackStatus_t *internalState,
DuyLionTran 0:6eb44b07d867 219 bool status,const uint8_t *buffer, uint16_t length);
DuyLionTran 0:6eb44b07d867 220
DuyLionTran 0:6eb44b07d867 221 /**
DuyLionTran 0:6eb44b07d867 222 * Write a sequence of bytes to the NDEF file.
DuyLionTran 0:6eb44b07d867 223 * @param buffer Buffer to write.
DuyLionTran 0:6eb44b07d867 224 * @param length Number of bytes to write.
DuyLionTran 0:6eb44b07d867 225 * @param offset Offset where start to write.
DuyLionTran 0:6eb44b07d867 226 * @param callback Function to call when the operation ended.
DuyLionTran 0:6eb44b07d867 227 * @param callbackStatus Parameter to pass to the callback function.
DuyLionTran 0:6eb44b07d867 228 * @return true if the operation has success
DuyLionTran 0:6eb44b07d867 229 */
DuyLionTran 0:6eb44b07d867 230 virtual bool writeByte(const uint8_t *buffer, uint16_t length,uint16_t offset,
DuyLionTran 0:6eb44b07d867 231 byteOperationCallback_t callback,CallbackStatus_t *callbackStatus)=0;
DuyLionTran 0:6eb44b07d867 232
DuyLionTran 0:6eb44b07d867 233 /**
DuyLionTran 0:6eb44b07d867 234 * Read a sequence of bytes from the NDEF file.
DuyLionTran 0:6eb44b07d867 235 * @param byteOffset Read offset in bytes.
DuyLionTran 0:6eb44b07d867 236 * @param byteLength Number of bytes to read.
DuyLionTran 0:6eb44b07d867 237 * @param[out] buffer Buffer to store the read data into.
DuyLionTran 0:6eb44b07d867 238 * @param callback Function to call when the operation ended.
DuyLionTran 0:6eb44b07d867 239 * @param callbackStatus Parameter to pass to the callback function.
DuyLionTran 0:6eb44b07d867 240 * @return true if the operation has success
DuyLionTran 0:6eb44b07d867 241 */
DuyLionTran 0:6eb44b07d867 242 virtual bool readByte(const uint16_t byteOffset, const uint16_t byteLength,
DuyLionTran 0:6eb44b07d867 243 uint8_t *buffer, byteOperationCallback_t callback,CallbackStatus_t *callbackStatus)=0;
DuyLionTran 0:6eb44b07d867 244
DuyLionTran 0:6eb44b07d867 245
DuyLionTran 0:6eb44b07d867 246 /** object with the user callback */
DuyLionTran 0:6eb44b07d867 247 Callbacks *mCallBack;
DuyLionTran 0:6eb44b07d867 248 private:
DuyLionTran 0:6eb44b07d867 249
DuyLionTran 0:6eb44b07d867 250 /** object with the current callback status */
DuyLionTran 0:6eb44b07d867 251 CallbackStatus_t mCallBackStatus;
DuyLionTran 0:6eb44b07d867 252 /** default callback object, all the functions are empty */
DuyLionTran 0:6eb44b07d867 253 Callbacks mDefaultCallBack;
DuyLionTran 0:6eb44b07d867 254
DuyLionTran 0:6eb44b07d867 255 /**
DuyLionTran 0:6eb44b07d867 256 * Function called when a write operation completes, it will invoke on_message_write
DuyLionTran 0:6eb44b07d867 257 * @param internalState Object that invokes the write operation.
DuyLionTran 0:6eb44b07d867 258 * @param status True if the operation had success.
DuyLionTran 0:6eb44b07d867 259 * @param buffer Buffer written.
DuyLionTran 0:6eb44b07d867 260 * @param length Number of bytes written.
DuyLionTran 0:6eb44b07d867 261 * @return true if the write had success
DuyLionTran 0:6eb44b07d867 262 */
DuyLionTran 0:6eb44b07d867 263 static bool onWriteMessageCallback(CallbackStatus_t *internalState,
DuyLionTran 0:6eb44b07d867 264 bool status,const uint8_t *buffer, uint16_t ){
DuyLionTran 0:6eb44b07d867 265 delete [] buffer;
DuyLionTran 0:6eb44b07d867 266
DuyLionTran 0:6eb44b07d867 267 internalState->callOwner->mCallBack->on_message_write(internalState->callOwner,status);
DuyLionTran 0:6eb44b07d867 268
DuyLionTran 0:6eb44b07d867 269 return status;
DuyLionTran 0:6eb44b07d867 270 }
DuyLionTran 0:6eb44b07d867 271
DuyLionTran 0:6eb44b07d867 272 /**
DuyLionTran 0:6eb44b07d867 273 * Function called when a read operation completes.
DuyLionTran 0:6eb44b07d867 274 * In this case we read the message length, this function will read all the message
DuyLionTran 0:6eb44b07d867 275 * @param internalState Object that invokes the write operation.
DuyLionTran 0:6eb44b07d867 276 * @param status true If the operation had success.
DuyLionTran 0:6eb44b07d867 277 * @param buffer Buffer read.
DuyLionTran 0:6eb44b07d867 278 * @param length Number of bytes read.
DuyLionTran 0:6eb44b07d867 279 * @return true if the read had success
DuyLionTran 0:6eb44b07d867 280 */
DuyLionTran 0:6eb44b07d867 281 static bool onReadMessageLength(CallbackStatus_t *internalState,
DuyLionTran 0:6eb44b07d867 282 bool status,const uint8_t *buffer, uint16_t length){
DuyLionTran 0:6eb44b07d867 283
DuyLionTran 0:6eb44b07d867 284 if (!status || length!=2) {
DuyLionTran 0:6eb44b07d867 285 internalState->callOwner->mCallBack->on_message_read(internalState->callOwner,false,internalState->msg);
DuyLionTran 0:6eb44b07d867 286 return false;
DuyLionTran 0:6eb44b07d867 287 }//if
DuyLionTran 0:6eb44b07d867 288
DuyLionTran 0:6eb44b07d867 289 length = (((uint16_t) buffer[0]) << 8 | buffer[1]);
DuyLionTran 0:6eb44b07d867 290 delete [] buffer;
DuyLionTran 0:6eb44b07d867 291
DuyLionTran 0:6eb44b07d867 292 uint8_t *readBuffer = new uint8_t[length];
DuyLionTran 0:6eb44b07d867 293 if (readBuffer==NULL) {
DuyLionTran 0:6eb44b07d867 294 internalState->callOwner->mCallBack->on_message_read(internalState->callOwner,false,internalState->msg);
DuyLionTran 0:6eb44b07d867 295 return false;
DuyLionTran 0:6eb44b07d867 296 }//readBuffer
DuyLionTran 0:6eb44b07d867 297
DuyLionTran 0:6eb44b07d867 298 internalState->callOwner->readByte(2,length,readBuffer, &NDefNfcTag::onReadMessageCallback,internalState);
DuyLionTran 0:6eb44b07d867 299 return status;
DuyLionTran 0:6eb44b07d867 300 }
DuyLionTran 0:6eb44b07d867 301
DuyLionTran 0:6eb44b07d867 302 /**
DuyLionTran 0:6eb44b07d867 303 * Function called when all messages have been read
DuyLionTran 0:6eb44b07d867 304 * @param internalState Object that invokes the write operation.
DuyLionTran 0:6eb44b07d867 305 * @param status True if the operation had success.
DuyLionTran 0:6eb44b07d867 306 * @param buffer Buffer read.
DuyLionTran 0:6eb44b07d867 307 * @param length Number of bytes read.
DuyLionTran 0:6eb44b07d867 308 * @return true if the read had success
DuyLionTran 0:6eb44b07d867 309 */
DuyLionTran 0:6eb44b07d867 310 static bool onReadMessageCallback(CallbackStatus_t *internalState,
DuyLionTran 0:6eb44b07d867 311 bool status,const uint8_t *buffer, uint16_t length){
DuyLionTran 0:6eb44b07d867 312 if(!status) {
DuyLionTran 0:6eb44b07d867 313 internalState->callOwner->mCallBack->on_message_read(internalState->callOwner,false,internalState->msg);
DuyLionTran 0:6eb44b07d867 314 return false;
DuyLionTran 0:6eb44b07d867 315 }
DuyLionTran 0:6eb44b07d867 316 Message::parse_message(buffer, length, internalState->msg);
DuyLionTran 0:6eb44b07d867 317 delete [] buffer;
DuyLionTran 0:6eb44b07d867 318 internalState->callOwner->mCallBack-> on_message_read(internalState->callOwner,true,internalState->msg);
DuyLionTran 0:6eb44b07d867 319 return status ;
DuyLionTran 0:6eb44b07d867 320 }
DuyLionTran 0:6eb44b07d867 321
DuyLionTran 0:6eb44b07d867 322 }; //class NDefNfcTagASync
DuyLionTran 0:6eb44b07d867 323
DuyLionTran 0:6eb44b07d867 324 }// namespace NDefLib
DuyLionTran 0:6eb44b07d867 325
DuyLionTran 0:6eb44b07d867 326 #endif /* NDEFLIB_NDEFNFCTAG_H_ */
DuyLionTran 0:6eb44b07d867 327
DuyLionTran 0:6eb44b07d867 328
DuyLionTran 0:6eb44b07d867 329 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/