mbed OS 5 example application using X-NUCLEO-NFC02A1

Dependencies:   NDefLib X_NUCLEO_NFC02A1

Fork of HelloWorld_NFC02A1 by ST

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****/