Complete mbed library/workspace for HelloWorld_NFC02A1

Dependencies:   NDefLib X_NUCLEO_NFC02A1 mbed

Fork of HelloWorld_NFC02A1 by ST Expansion SW Team

X-NUCLEO-NFC02A1 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-NFC02A1 Dynamic NFC Tag Expansion Board based on M24LR.

Example Application

This is just a simple "hello world" style program for the X-NUCLEO-NFC02A1 Dynamic NFC Tag Expansion Board. The program writes a URI link to the M24LR dynamic tag using the synchronous programming model. It then reads back the URI from the tag to display it on terminal. The URI can also be retrieved from an NFC enabled smartphone/tablet.

Committer:
rosarium
Date:
Wed Jul 27 09:25:33 2016 +0000
Revision:
0:892175366555
first release of the complete mbed library for HelloWorld_NFC02A1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rosarium 0:892175366555 1 /**
rosarium 0:892175366555 2 ******************************************************************************
rosarium 0:892175366555 3 * @file tagtype5_wrapper.c
rosarium 0:892175366555 4 * @author MMY Application Team
rosarium 0:892175366555 5 * @version $Revision: 1638 $
rosarium 0:892175366555 6 * @date $Date: 2016-02-10 16:41:05 +0100 (Wed, 10 Feb 2016) $
rosarium 0:892175366555 7 * @brief Interface for tagtype5 in order to use NDEF lib
rosarium 0:892175366555 8 ******************************************************************************
rosarium 0:892175366555 9 * @attention
rosarium 0:892175366555 10 *
rosarium 0:892175366555 11 * <h2><center>&copy; COPYRIGHT 2015 STMicroelectronics</center></h2>
rosarium 0:892175366555 12 *
rosarium 0:892175366555 13 * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License");
rosarium 0:892175366555 14 * You may not use this file except in compliance with the License.
rosarium 0:892175366555 15 * You may obtain a copy of the License at:
rosarium 0:892175366555 16 *
rosarium 0:892175366555 17 * http://www.st.com/myliberty
rosarium 0:892175366555 18 *
rosarium 0:892175366555 19 * Unless required by applicable law or agreed to in writing, software
rosarium 0:892175366555 20 * distributed under the License is distributed on an "AS IS" BASIS,
rosarium 0:892175366555 21 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied,
rosarium 0:892175366555 22 * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY,
rosarium 0:892175366555 23 * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
rosarium 0:892175366555 24 * See the License for the specific language governing permissions and
rosarium 0:892175366555 25 * limitations under the License.
rosarium 0:892175366555 26 *
rosarium 0:892175366555 27 ******************************************************************************
rosarium 0:892175366555 28 */
rosarium 0:892175366555 29
rosarium 0:892175366555 30 /* Includes ------------------------------------------------------------------*/
rosarium 0:892175366555 31 #include "tagtype5_wrapper.h"
rosarium 0:892175366555 32 #include "lib_NDEF.h"
rosarium 0:892175366555 33
rosarium 0:892175366555 34
rosarium 0:892175366555 35 /**
rosarium 0:892175366555 36 * @brief This function read the data stored in NDEF file at defined offset.
rosarium 0:892175366555 37 * @param Offset : Offset in the NDEF file.
rosarium 0:892175366555 38 * @param DataSize : Number of byte to read.
rosarium 0:892175366555 39 * @param pData : pointer on buffer to store read data.
rosarium 0:892175366555 40 * @retval NDEF_ERROR_MEMORY_INTERNAL : Size not compatible with memory.
rosarium 0:892175366555 41 * @retval NDEF_ERROR_NOT_FORMATED : CCFile data not supported.
rosarium 0:892175366555 42 * @retval NDEF_ERROR : No NDEF in the tag.
rosarium 0:892175366555 43 * @retval NDEF_OK : The operation is completed.
rosarium 0:892175366555 44 */
rosarium 0:892175366555 45 uint16_t NFCType5::ReadData( uint16_t Offset , uint16_t DataSize , uint8_t* pData )
rosarium 0:892175366555 46 {
rosarium 0:892175366555 47 uint16_t status = NDEF_ERROR;
rosarium 0:892175366555 48 uint8_t atlv_detect[4];
rosarium 0:892175366555 49 uint8_t index = 0;
rosarium 0:892175366555 50
rosarium 0:892175366555 51 /* Do not include length bytes */
rosarium 0:892175366555 52 DataSize -= FIRST_RECORD_OFFSET;
rosarium 0:892175366555 53
rosarium 0:892175366555 54 /* If too many data to write return error */
rosarium 0:892175366555 55 if( DataSize > NDEF_MAX_SIZE )
rosarium 0:892175366555 56 {
rosarium 0:892175366555 57 return NDEF_ERROR_MEMORY_INTERNAL;
rosarium 0:892175366555 58 }
rosarium 0:892175366555 59
rosarium 0:892175366555 60 /* Detect NDEF message in memory */
rosarium 0:892175366555 61 status = NfcType5_NDEFDetection( );
rosarium 0:892175366555 62 if( status != NDEF_OK )
rosarium 0:892175366555 63 {
rosarium 0:892175366555 64 return status;
rosarium 0:892175366555 65 }
rosarium 0:892175366555 66
rosarium 0:892175366555 67 /* Read TL of Type 5 */
rosarium 0:892175366555 68 status = NFCTAG_ReadData( atlv_detect, CCFileStruct.NDEF_offset, 4 );
rosarium 0:892175366555 69 if( status != NDEF_OK )
rosarium 0:892175366555 70 {
rosarium 0:892175366555 71 return status;
rosarium 0:892175366555 72 }
rosarium 0:892175366555 73
rosarium 0:892175366555 74 /* Check if L is on 3 or 1 byte and update length in buffer */
rosarium 0:892175366555 75 if( atlv_detect[1] == NFCT5_3_BYTES_L_TLV )
rosarium 0:892175366555 76 {
rosarium 0:892175366555 77 pData[0] = atlv_detect[2];
rosarium 0:892175366555 78 pData[1] = atlv_detect[3];
rosarium 0:892175366555 79 index += 4;
rosarium 0:892175366555 80 }
rosarium 0:892175366555 81 else
rosarium 0:892175366555 82 {
rosarium 0:892175366555 83 pData[0] = 0x00;
rosarium 0:892175366555 84 pData[1] = atlv_detect[1];
rosarium 0:892175366555 85 index += 2;
rosarium 0:892175366555 86 }
rosarium 0:892175366555 87
rosarium 0:892175366555 88 /* Check CC file is in the correct mode to proceed */
rosarium 0:892175366555 89 if( CCFileStruct.State == TT5_INITIALIZED )
rosarium 0:892175366555 90 {
rosarium 0:892175366555 91 return NDEF_ERROR;
rosarium 0:892175366555 92 }
rosarium 0:892175366555 93
rosarium 0:892175366555 94 if( ((Offset == 0) && (DataSize > 0)) || (Offset > 0) )
rosarium 0:892175366555 95 {
rosarium 0:892175366555 96 /* Read NDEF */
rosarium 0:892175366555 97 if( NFCTAG_ReadData( (pData + FIRST_RECORD_OFFSET), CCFileStruct.NDEF_offset + index + Offset, DataSize ) != NFCTAG_OK )
rosarium 0:892175366555 98 {
rosarium 0:892175366555 99 return NDEF_ERROR;
rosarium 0:892175366555 100 }
rosarium 0:892175366555 101 }
rosarium 0:892175366555 102
rosarium 0:892175366555 103 return NDEF_OK;
rosarium 0:892175366555 104 }
rosarium 0:892175366555 105
rosarium 0:892175366555 106 /**
rosarium 0:892175366555 107 * @brief This function writes data in NDEF file at defined offset.
rosarium 0:892175366555 108 * @param Offset : Offset in the NDEF file.
rosarium 0:892175366555 109 * @param DataSize : Number of byte to write.
rosarium 0:892175366555 110 * @param pData : pointer on buffer to copy.
rosarium 0:892175366555 111 * @retval NDEF_ERROR_MEMORY_INTERNAL : Size not compatible with memory.
rosarium 0:892175366555 112 * @retval NDEF_ERROR_NOT_FORMATED : CCFile data not supported.
rosarium 0:892175366555 113 * @retval NDEF_ERROR : No NDEF in the tag.
rosarium 0:892175366555 114 * @retval NDEF_OK : The operation is completed.
rosarium 0:892175366555 115 */
rosarium 0:892175366555 116 uint16_t NFCType5::WriteData( uint16_t Offset , uint32_t DataSize , uint8_t *pData )
rosarium 0:892175366555 117 {
rosarium 0:892175366555 118 uint8_t atlv[4];
rosarium 0:892175366555 119 uint8_t index = 0;
rosarium 0:892175366555 120 uint16_t NDEF_Size = 0;
rosarium 0:892175366555 121 NFCTAG_StatusTypeDef status;
rosarium 0:892175366555 122
rosarium 0:892175366555 123 /* Do not include length bytes */
rosarium 0:892175366555 124 DataSize -= FIRST_RECORD_OFFSET;
rosarium 0:892175366555 125
rosarium 0:892175366555 126 /* If too many data to write return error */
rosarium 0:892175366555 127 if( DataSize > NDEF_MAX_SIZE )
rosarium 0:892175366555 128 {
rosarium 0:892175366555 129 return NDEF_ERROR_MEMORY_INTERNAL;
rosarium 0:892175366555 130 }
rosarium 0:892175366555 131
rosarium 0:892175366555 132 /* Detect NDEF message in memory */
rosarium 0:892175366555 133 if( NfcType5_NDEFDetection( ) != NDEF_OK )
rosarium 0:892175366555 134 {
rosarium 0:892175366555 135 return NDEF_ERROR;
rosarium 0:892175366555 136 }
rosarium 0:892175366555 137
rosarium 0:892175366555 138 /* Extract NDEF Size from buffer */
rosarium 0:892175366555 139 NDEF_Size = (uint16_t)(pData[0] << 8);
rosarium 0:892175366555 140 NDEF_Size = NDEF_Size | (uint16_t)(pData[1] );
rosarium 0:892175366555 141
rosarium 0:892175366555 142 /* If entire NDEF is written, update Length of Type 5 */
rosarium 0:892175366555 143 if( DataSize == NDEF_Size )
rosarium 0:892175366555 144 {
rosarium 0:892175366555 145 /* Check if L is on 3 or 1 byte */
rosarium 0:892175366555 146 if( NDEF_Size >= NFCT5_3_BYTES_L_TLV )
rosarium 0:892175366555 147 {
rosarium 0:892175366555 148 /* First init L with 0, will be updated at the end */
rosarium 0:892175366555 149 atlv[1] = 0x00;
rosarium 0:892175366555 150 atlv[2] = 0x00;
rosarium 0:892175366555 151 atlv[3] = 0x00;
rosarium 0:892175366555 152
rosarium 0:892175366555 153 status = NFCTAG_WriteData( (atlv + 1), (CCFileStruct.NDEF_offset + 1), 3 );
rosarium 0:892175366555 154
rosarium 0:892175366555 155 index += 4;
rosarium 0:892175366555 156 }
rosarium 0:892175366555 157 else
rosarium 0:892175366555 158 {
rosarium 0:892175366555 159 /* First inti L with 0, will be updated at the end */
rosarium 0:892175366555 160 atlv[1] = 0x00;
rosarium 0:892175366555 161
rosarium 0:892175366555 162 status = NFCTAG_WriteData( (atlv + 1), (CCFileStruct.NDEF_offset + 1), 1 );
rosarium 0:892175366555 163
rosarium 0:892175366555 164 index += 2;
rosarium 0:892175366555 165 }
rosarium 0:892175366555 166 }
rosarium 0:892175366555 167
rosarium 0:892175366555 168 /* Start write NDEF message to EEPROM */
rosarium 0:892175366555 169 status = NFCTAG_WriteData( (pData + FIRST_RECORD_OFFSET), CCFileStruct.NDEF_offset + index + Offset, DataSize );
rosarium 0:892175366555 170 if( status != NFCTAG_OK )
rosarium 0:892175366555 171 {
rosarium 0:892175366555 172 return NDEF_ERROR;
rosarium 0:892175366555 173 }
rosarium 0:892175366555 174
rosarium 0:892175366555 175 /* If entire NDEF is written, update Length of Type 5 */
rosarium 0:892175366555 176 if( DataSize == NDEF_Size )
rosarium 0:892175366555 177 {
rosarium 0:892175366555 178 /* Check if L is on 3 or 1 byte */
rosarium 0:892175366555 179 if( NDEF_Size >= NFCT5_3_BYTES_L_TLV )
rosarium 0:892175366555 180 {
rosarium 0:892175366555 181 /* Update Length value */
rosarium 0:892175366555 182 atlv[1] = NFCT5_3_BYTES_L_TLV;
rosarium 0:892175366555 183 atlv[2] = pData[0];
rosarium 0:892175366555 184 atlv[3] = pData[1];
rosarium 0:892175366555 185
rosarium 0:892175366555 186 status = NFCTAG_WriteData( (atlv + 1), (CCFileStruct.NDEF_offset + 1), 3 );
rosarium 0:892175366555 187 }
rosarium 0:892175366555 188 else
rosarium 0:892175366555 189 {
rosarium 0:892175366555 190 /* Update Length value */
rosarium 0:892175366555 191 atlv[1] = pData[1];
rosarium 0:892175366555 192
rosarium 0:892175366555 193 status = NFCTAG_WriteData( (atlv + 1), (CCFileStruct.NDEF_offset + 1), 1 );
rosarium 0:892175366555 194 }
rosarium 0:892175366555 195
rosarium 0:892175366555 196 /* Write Terminator TLV */
rosarium 0:892175366555 197 atlv[0] = NFCT5_TERMINATOR_TLV;
rosarium 0:892175366555 198 status = NFCTAG_WriteData( atlv, CCFileStruct.NDEF_offset + index + NDEF_Size, 1 );
rosarium 0:892175366555 199 }
rosarium 0:892175366555 200
rosarium 0:892175366555 201 return NDEF_OK;
rosarium 0:892175366555 202 }
rosarium 0:892175366555 203
rosarium 0:892175366555 204 /**
rosarium 0:892175366555 205 * @brief This functions writes CCFile in EEPROM.
rosarium 0:892175366555 206 * @Param pCCBuffer : pointer on the buffer containnig CC file.
rosarium 0:892175366555 207 * @retval NFCTAG status.
rosarium 0:892175366555 208 */
rosarium 0:892175366555 209 uint16_t NFCType5::NfcType5_WriteCCFile( const uint8_t * const pCCBuffer )
rosarium 0:892175366555 210 {
rosarium 0:892175366555 211 NFCTAG_StatusTypeDef ret_value;
rosarium 0:892175366555 212
rosarium 0:892175366555 213 /* Write first block of CCFile */
rosarium 0:892175366555 214 ret_value = NFCTAG_WriteData( pCCBuffer, 0x00, 0x4 );
rosarium 0:892175366555 215
rosarium 0:892175366555 216 /* If extended memory writes the next 4 bytes */
rosarium 0:892175366555 217 if( (pCCBuffer[2] == 0x00) && (ret_value == NFCTAG_OK) )
rosarium 0:892175366555 218 {
rosarium 0:892175366555 219 ret_value = NFCTAG_WriteData( pCCBuffer + 4, 0x04, 4 );
rosarium 0:892175366555 220 }
rosarium 0:892175366555 221
rosarium 0:892175366555 222 if( ret_value != NFCTAG_OK )
rosarium 0:892175366555 223 {
rosarium 0:892175366555 224 return NDEF_ERROR;
rosarium 0:892175366555 225 }
rosarium 0:892175366555 226
rosarium 0:892175366555 227 return NDEF_OK;
rosarium 0:892175366555 228 }
rosarium 0:892175366555 229
rosarium 0:892175366555 230 /**
rosarium 0:892175366555 231 * @brief This functions reads CCFile in EEPROM.
rosarium 0:892175366555 232 * @Param pCCBuffer : pointer on the buffer to store CC file.
rosarium 0:892175366555 233 * @retval NFCTAG status.
rosarium 0:892175366555 234 */
rosarium 0:892175366555 235 uint16_t NFCType5::NfcType5_ReadCCFile( uint8_t * const pCCBuffer )
rosarium 0:892175366555 236 {
rosarium 0:892175366555 237 NFCTAG_StatusTypeDef ret_value;
rosarium 0:892175366555 238
rosarium 0:892175366555 239 /* Read 4 bytes of CC File */
rosarium 0:892175366555 240 ret_value = NFCTAG_ReadData( pCCBuffer, 0x00, 4 );
rosarium 0:892175366555 241
rosarium 0:892175366555 242 /* If extended memory reads the next 4 bytes */
rosarium 0:892175366555 243 if( (pCCBuffer[2] == 0x00) && (ret_value == NFCTAG_OK) )
rosarium 0:892175366555 244 {
rosarium 0:892175366555 245 ret_value = NFCTAG_ReadData( pCCBuffer + 4, 0x04, 4 );
rosarium 0:892175366555 246 }
rosarium 0:892175366555 247
rosarium 0:892175366555 248 if( ret_value != NFCTAG_OK )
rosarium 0:892175366555 249 {
rosarium 0:892175366555 250 return NDEF_ERROR;
rosarium 0:892175366555 251 }
rosarium 0:892175366555 252
rosarium 0:892175366555 253 return NDEF_OK;
rosarium 0:892175366555 254 }
rosarium 0:892175366555 255
rosarium 0:892175366555 256 /**
rosarium 0:892175366555 257 * @brief This function initialize memory in Tag Type 5.
rosarium 0:892175366555 258 * @retval NFCTAG status.
rosarium 0:892175366555 259 */
rosarium 0:892175366555 260 uint16_t NFCType5::NfcType5_TT5Init( void )
rosarium 0:892175366555 261 {
rosarium 0:892175366555 262 NFCTAG_StatusTypeDef ret_value = NFCTAG_OK;
rosarium 0:892175366555 263 uint16_t status;
rosarium 0:892175366555 264 uint8_t accbuffer[8];
rosarium 0:892175366555 265 uint8_t cdata;
rosarium 0:892175366555 266
rosarium 0:892175366555 267 /* Prepare buffer to update CCFile */
rosarium 0:892175366555 268 accbuffer[0] = CCFileStruct.MagicNumber;
rosarium 0:892175366555 269 accbuffer[1] = CCFileStruct.Version;
rosarium 0:892175366555 270 accbuffer[2] = CCFileStruct.MemorySize;
rosarium 0:892175366555 271 accbuffer[3] = CCFileStruct.TT5Tag;
rosarium 0:892175366555 272 CCFileStruct.NDEF_offset = 0x04;
rosarium 0:892175366555 273
rosarium 0:892175366555 274 /* If extended memory prepare the length bytes */
rosarium 0:892175366555 275 if( CCFileStruct.MemorySize == NFCT5_EXTENDED_CCFILE )
rosarium 0:892175366555 276 {
rosarium 0:892175366555 277 accbuffer[6] = (uint8_t)(CCFileStruct.ExtMemorySize >> 8);
rosarium 0:892175366555 278 accbuffer[7] = (uint8_t)(CCFileStruct.ExtMemorySize & 0xFF);
rosarium 0:892175366555 279 CCFileStruct.NDEF_offset = 0x08;
rosarium 0:892175366555 280 }
rosarium 0:892175366555 281
rosarium 0:892175366555 282 /* Update CCFile */
rosarium 0:892175366555 283 status = NfcType5_WriteCCFile( accbuffer );
rosarium 0:892175366555 284 if( status != NDEF_OK )
rosarium 0:892175366555 285 {
rosarium 0:892175366555 286 return status;
rosarium 0:892175366555 287 }
rosarium 0:892175366555 288
rosarium 0:892175366555 289 /* Update NDEF TLV for INITIALIZED state */
rosarium 0:892175366555 290 /* Update T */
rosarium 0:892175366555 291 cdata = NFCT5_NDEF_MSG_TLV;
rosarium 0:892175366555 292 ret_value = NFCTAG_WriteData( &cdata, CCFileStruct.NDEF_offset, 1 );
rosarium 0:892175366555 293 if( ret_value != NFCTAG_OK )
rosarium 0:892175366555 294 {
rosarium 0:892175366555 295 return NDEF_ERROR;
rosarium 0:892175366555 296 }
rosarium 0:892175366555 297
rosarium 0:892175366555 298 /* Update L */
rosarium 0:892175366555 299 cdata = 0x00;
rosarium 0:892175366555 300 ret_value = NFCTAG_WriteData( &cdata, (CCFileStruct.NDEF_offset + 1), 1 );
rosarium 0:892175366555 301 if( ret_value != NFCTAG_OK )
rosarium 0:892175366555 302 {
rosarium 0:892175366555 303 return NDEF_ERROR;
rosarium 0:892175366555 304 }
rosarium 0:892175366555 305
rosarium 0:892175366555 306 return NDEF_OK;
rosarium 0:892175366555 307 }
rosarium 0:892175366555 308
rosarium 0:892175366555 309 /**
rosarium 0:892175366555 310 * @brief This function detects an NDEF message Tag Type 5 in EEPROM.
rosarium 0:892175366555 311 * @retval NDEF_OK : NDEF message Tag Type 5 detected.
rosarium 0:892175366555 312 * @retval NDEF_ERROR_NOT_FORMATED : Device is not an NFC Tag Type 5 Tag.
rosarium 0:892175366555 313 * @retval NDEF_NO_NDEF_DETECTED : No NDEF Detected.
rosarium 0:892175366555 314 */
rosarium 0:892175366555 315 uint16_t NFCType5::NfcType5_NDEFDetection( void )
rosarium 0:892175366555 316 {
rosarium 0:892175366555 317 uint8_t acc_buffer[8];
rosarium 0:892175366555 318 uint8_t atlv_detect[4];
rosarium 0:892175366555 319 uint16_t status;
rosarium 0:892175366555 320 uint32_t memory_size;
rosarium 0:892175366555 321
rosarium 0:892175366555 322 CCFileStruct.State = TT5_NO_NDEF;
rosarium 0:892175366555 323
rosarium 0:892175366555 324 /* Read CCFile */
rosarium 0:892175366555 325 status = NfcType5_ReadCCFile( acc_buffer );
rosarium 0:892175366555 326 if( status != NDEF_OK )
rosarium 0:892175366555 327 {
rosarium 0:892175366555 328 return status;
rosarium 0:892175366555 329 }
rosarium 0:892175366555 330
rosarium 0:892175366555 331 /* Check Byte 0 is equal to magic number */
rosarium 0:892175366555 332 if( ( acc_buffer[0] != NFCT5_MAGICNUMBER_E1_CCFILE ) && ( acc_buffer[0] != NFCT5_MAGICNUMBER_E2_CCFILE ) )
rosarium 0:892175366555 333 {
rosarium 0:892175366555 334 return NDEF_ERROR_NOT_FORMATED;
rosarium 0:892175366555 335 }
rosarium 0:892175366555 336 /* Check Version number */
rosarium 0:892175366555 337 else if( ( (acc_buffer[1]&0xFC) != 0x40 ) )
rosarium 0:892175366555 338 {
rosarium 0:892175366555 339 return NDEF_ERROR_NOT_FORMATED;
rosarium 0:892175366555 340 }
rosarium 0:892175366555 341
rosarium 0:892175366555 342 /* Check if CCFile is on 4 Bytes or 8 Bytes */
rosarium 0:892175366555 343 if( acc_buffer[2] == 0x00 )
rosarium 0:892175366555 344 {
rosarium 0:892175366555 345 /* Update CCFIle structure */
rosarium 0:892175366555 346 CCFileStruct.MemorySize = 0x0;
rosarium 0:892175366555 347 CCFileStruct.ExtMemorySize = (uint16_t)acc_buffer[6];
rosarium 0:892175366555 348 CCFileStruct.ExtMemorySize = ( CCFileStruct.ExtMemorySize << 8 ) | acc_buffer[7];
rosarium 0:892175366555 349 memory_size = CCFileStruct.ExtMemorySize;
rosarium 0:892175366555 350 CCFileStruct.NDEF_offset = 8;
rosarium 0:892175366555 351 }
rosarium 0:892175366555 352 else
rosarium 0:892175366555 353 {
rosarium 0:892175366555 354 /* Update CCFIle structure */
rosarium 0:892175366555 355 CCFileStruct.MemorySize = acc_buffer[2];
rosarium 0:892175366555 356 CCFileStruct.ExtMemorySize = 0x0;
rosarium 0:892175366555 357 memory_size = CCFileStruct.MemorySize;
rosarium 0:892175366555 358 CCFileStruct.NDEF_offset = 4;
rosarium 0:892175366555 359 }
rosarium 0:892175366555 360
rosarium 0:892175366555 361 /* Update CCFIle structure */
rosarium 0:892175366555 362 CCFileStruct.MagicNumber = acc_buffer[0];
rosarium 0:892175366555 363 CCFileStruct.Version = acc_buffer[1];
rosarium 0:892175366555 364 CCFileStruct.TT5Tag = acc_buffer[3];
rosarium 0:892175366555 365
rosarium 0:892175366555 366 /* Search for position of NDEF TLV in memory and tag status */
rosarium 0:892175366555 367 while( ( NFCTAG_ReadData( atlv_detect, CCFileStruct.NDEF_offset, 4 ) == NFCTAG_OK ) && ( CCFileStruct.NDEF_offset < memory_size ) )
rosarium 0:892175366555 368 {
rosarium 0:892175366555 369 /* Detect first NDEF Message in memory */
rosarium 0:892175366555 370 if( atlv_detect[0] == NFCT5_NDEF_MSG_TLV )
rosarium 0:892175366555 371 {
rosarium 0:892175366555 372 if( atlv_detect[1] == 0x00 )
rosarium 0:892175366555 373 {
rosarium 0:892175366555 374 CCFileStruct.State = TT5_INITIALIZED;
rosarium 0:892175366555 375 }
rosarium 0:892175366555 376 else
rosarium 0:892175366555 377 {
rosarium 0:892175366555 378 if( CCFileStruct.Version & 0x3 )
rosarium 0:892175366555 379 {
rosarium 0:892175366555 380 CCFileStruct.State = TT5_READ;
rosarium 0:892175366555 381 }
rosarium 0:892175366555 382 else
rosarium 0:892175366555 383 {
rosarium 0:892175366555 384 CCFileStruct.State = TT5_READ_WRITE;
rosarium 0:892175366555 385 }
rosarium 0:892175366555 386 }
rosarium 0:892175366555 387 return NDEF_OK;
rosarium 0:892175366555 388 }
rosarium 0:892175366555 389 /* If Proprietary NDEF jump to end of proprietary message */
rosarium 0:892175366555 390 else if( atlv_detect[0] == NFCT5_PROPRIETARY_TLV )
rosarium 0:892175366555 391 {
rosarium 0:892175366555 392 if( atlv_detect[1] == NFCT5_3_BYTES_L_TLV )
rosarium 0:892175366555 393 {
rosarium 0:892175366555 394 CCFileStruct.NDEF_offset = CCFileStruct.NDEF_offset + ( (uint32_t)atlv_detect[2] << 8 ) + atlv_detect[3];
rosarium 0:892175366555 395 continue;
rosarium 0:892175366555 396 }
rosarium 0:892175366555 397 else
rosarium 0:892175366555 398 {
rosarium 0:892175366555 399 CCFileStruct.NDEF_offset = CCFileStruct.NDEF_offset + atlv_detect[1];
rosarium 0:892175366555 400 continue;
rosarium 0:892175366555 401 }
rosarium 0:892175366555 402 }
rosarium 0:892175366555 403 /* if Terminator no NDEF detected */
rosarium 0:892175366555 404 else if( atlv_detect[0] == NFCT5_TERMINATOR_TLV )
rosarium 0:892175366555 405 {
rosarium 0:892175366555 406 return NDEF_ERROR_NOT_FORMATED;
rosarium 0:892175366555 407 }
rosarium 0:892175366555 408
rosarium 0:892175366555 409 CCFileStruct.NDEF_offset++;
rosarium 0:892175366555 410 }
rosarium 0:892175366555 411
rosarium 0:892175366555 412 return NDEF_ERROR_NOT_FORMATED;
rosarium 0:892175366555 413 }
rosarium 0:892175366555 414
rosarium 0:892175366555 415 /**
rosarium 0:892175366555 416 * @}
rosarium 0:892175366555 417 */
rosarium 0:892175366555 418
rosarium 0:892175366555 419 /**
rosarium 0:892175366555 420 * @}
rosarium 0:892175366555 421 */
rosarium 0:892175366555 422
rosarium 0:892175366555 423 /**
rosarium 0:892175366555 424 * @}
rosarium 0:892175366555 425 */
rosarium 0:892175366555 426
rosarium 0:892175366555 427 /******************* (C) COPYRIGHT 2016 STMicroelectronics *****END OF FILE****/