mbed OS 5 example application using X-NUCLEO-NFC02A1
Dependencies: NDefLib X_NUCLEO_NFC02A1
Fork of HelloWorld_NFC02A1 by
Lib_NDEF/lib_NDEF.cpp@0:892175366555, 2016-07-27 (annotated)
- 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?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| rosarium | 0:892175366555 | 1 | /** |
| rosarium | 0:892175366555 | 2 | ****************************************************************************** |
| rosarium | 0:892175366555 | 3 | * @file lib_NDEF.c |
| rosarium | 0:892175366555 | 4 | * @author MMY Application Team |
| rosarium | 0:892175366555 | 5 | * @version $Revision: 1583 $ |
| rosarium | 0:892175366555 | 6 | * @date $Date: 2016-02-03 15:06:51 +0100 (Wed, 03 Feb 2016) $ |
| rosarium | 0:892175366555 | 7 | * @brief This file help to manage NDEF file, to parse and identify them. |
| rosarium | 0:892175366555 | 8 | ****************************************************************************** |
| rosarium | 0:892175366555 | 9 | * @attention |
| rosarium | 0:892175366555 | 10 | * |
| rosarium | 0:892175366555 | 11 | * <h2><center>© 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 "lib_NDEF.h" |
| rosarium | 0:892175366555 | 32 | #include <stdint.h> |
| rosarium | 0:892175366555 | 33 | #include <string.h> |
| rosarium | 0:892175366555 | 34 | /** @addtogroup NFC_libraries |
| rosarium | 0:892175366555 | 35 | * @{ |
| rosarium | 0:892175366555 | 36 | * @brief <b>This is the library used to manage the content of the TAG (data) |
| rosarium | 0:892175366555 | 37 | * But also the specific feature of the tag, for instance |
| rosarium | 0:892175366555 | 38 | * password, gpo... </b> |
| rosarium | 0:892175366555 | 39 | */ |
| rosarium | 0:892175366555 | 40 | |
| rosarium | 0:892175366555 | 41 | |
| rosarium | 0:892175366555 | 42 | /** @addtogroup libNFC_FORUM |
| rosarium | 0:892175366555 | 43 | * @{ |
| rosarium | 0:892175366555 | 44 | * @brief This part of the library manage data which follow NFC forum organisation. |
| rosarium | 0:892175366555 | 45 | */ |
| rosarium | 0:892175366555 | 46 | |
| rosarium | 0:892175366555 | 47 | /** @defgroup libNDEF_Private_Functions |
| rosarium | 0:892175366555 | 48 | * @{ |
| rosarium | 0:892175366555 | 49 | */ |
| rosarium | 0:892175366555 | 50 | |
| rosarium | 0:892175366555 | 51 | |
| rosarium | 0:892175366555 | 52 | |
| rosarium | 0:892175366555 | 53 | /** |
| rosarium | 0:892175366555 | 54 | * @brief This function check that the tag contain a NDEF message. |
| rosarium | 0:892175366555 | 55 | * @retval NDEF_OK : There is a NDEF file stored in tag. |
| rosarium | 0:892175366555 | 56 | * @retval NDEF_ERROR : No NDEF in the tag. |
| rosarium | 0:892175366555 | 57 | */ |
| rosarium | 0:892175366555 | 58 | uint16_t NDEF::NDEF_IsNDEFPresent( void ) |
| rosarium | 0:892175366555 | 59 | { |
| rosarium | 0:892175366555 | 60 | uint16_t FileSize; |
| rosarium | 0:892175366555 | 61 | uint8_t uNDEFHeader [0x2]; |
| rosarium | 0:892175366555 | 62 | |
| rosarium | 0:892175366555 | 63 | /* Check NDEF existence */ |
| rosarium | 0:892175366555 | 64 | ReadData( NDEF_SIZE_OFFSET, 2, uNDEFHeader ); |
| rosarium | 0:892175366555 | 65 | FileSize = (uint16_t)( (uNDEFHeader[0x00]<<8) | uNDEFHeader[0x01] ); |
| rosarium | 0:892175366555 | 66 | |
| rosarium | 0:892175366555 | 67 | if( FileSize != 0 ) |
| rosarium | 0:892175366555 | 68 | return NDEF_OK; |
| rosarium | 0:892175366555 | 69 | else |
| rosarium | 0:892175366555 | 70 | return NDEF_ERROR; |
| rosarium | 0:892175366555 | 71 | } |
| rosarium | 0:892175366555 | 72 | |
| rosarium | 0:892175366555 | 73 | /** |
| rosarium | 0:892175366555 | 74 | * @brief This function identify the type of record. |
| rosarium | 0:892175366555 | 75 | * @param pRecordStruct : pointer on the record structure to fill. |
| rosarium | 0:892175366555 | 76 | * @param pPayload : pointer on the payload. |
| rosarium | 0:892175366555 | 77 | * @retval Status : Status of the operation. |
| rosarium | 0:892175366555 | 78 | */ |
| rosarium | 0:892175366555 | 79 | uint16_t NDEF::NDEF_IdentifySPRecord( sRecordInfo *pRecordStruct, uint8_t* pPayload ) |
| rosarium | 0:892175366555 | 80 | { |
| rosarium | 0:892175366555 | 81 | uint16_t status = NDEF_ERROR; |
| rosarium | 0:892175366555 | 82 | uint16_t SizeOfRecordHeader, TypeNbByte, PayloadLengthField, IDLengthField, IDNbByte; |
| rosarium | 0:892175366555 | 83 | |
| rosarium | 0:892175366555 | 84 | /* Is ID length field present */ |
| rosarium | 0:892175366555 | 85 | if( (*pPayload) & IL_Mask ) |
| rosarium | 0:892175366555 | 86 | { |
| rosarium | 0:892175366555 | 87 | IDLengthField = ID_LENGTH_FIELD; |
| rosarium | 0:892175366555 | 88 | } |
| rosarium | 0:892175366555 | 89 | else |
| rosarium | 0:892175366555 | 90 | { |
| rosarium | 0:892175366555 | 91 | IDLengthField = 0; |
| rosarium | 0:892175366555 | 92 | } |
| rosarium | 0:892175366555 | 93 | |
| rosarium | 0:892175366555 | 94 | /* it's a SR */ |
| rosarium | 0:892175366555 | 95 | if( (*pPayload) & SR_Mask ) |
| rosarium | 0:892175366555 | 96 | { |
| rosarium | 0:892175366555 | 97 | TypeNbByte = pPayload[1]; |
| rosarium | 0:892175366555 | 98 | PayloadLengthField = 1; |
| rosarium | 0:892175366555 | 99 | if( IDLengthField == ID_LENGTH_FIELD ) |
| rosarium | 0:892175366555 | 100 | IDNbByte = pPayload[3]; |
| rosarium | 0:892175366555 | 101 | else |
| rosarium | 0:892175366555 | 102 | IDNbByte = 0; |
| rosarium | 0:892175366555 | 103 | } |
| rosarium | 0:892175366555 | 104 | else |
| rosarium | 0:892175366555 | 105 | { |
| rosarium | 0:892175366555 | 106 | TypeNbByte = pPayload[1]; |
| rosarium | 0:892175366555 | 107 | PayloadLengthField = 4; |
| rosarium | 0:892175366555 | 108 | if( IDLengthField == ID_LENGTH_FIELD ) |
| rosarium | 0:892175366555 | 109 | IDNbByte = pPayload[6]; |
| rosarium | 0:892175366555 | 110 | else |
| rosarium | 0:892175366555 | 111 | IDNbByte = 0; |
| rosarium | 0:892175366555 | 112 | } |
| rosarium | 0:892175366555 | 113 | |
| rosarium | 0:892175366555 | 114 | SizeOfRecordHeader = RECORD_FLAG_FIELD + TYPE_LENGTH_FIELD + PayloadLengthField + IDLengthField + TypeNbByte + IDNbByte; |
| rosarium | 0:892175366555 | 115 | |
| rosarium | 0:892175366555 | 116 | /* it's a SR */ |
| rosarium | 0:892175366555 | 117 | if( pPayload[0] & SR_Mask ) |
| rosarium | 0:892175366555 | 118 | { |
| rosarium | 0:892175366555 | 119 | pRecordStruct->RecordFlags = pPayload[0]; |
| rosarium | 0:892175366555 | 120 | pRecordStruct->TypeLength = TypeNbByte; |
| rosarium | 0:892175366555 | 121 | pRecordStruct->PayloadLength3 = 0; |
| rosarium | 0:892175366555 | 122 | pRecordStruct->PayloadLength2 = 0; |
| rosarium | 0:892175366555 | 123 | pRecordStruct->PayloadLength1 = 0; |
| rosarium | 0:892175366555 | 124 | pRecordStruct->PayloadLength0 = pPayload[2]; |
| rosarium | 0:892175366555 | 125 | pRecordStruct->IDLength = IDNbByte; |
| rosarium | 0:892175366555 | 126 | memcpy( pRecordStruct->Type, &pPayload[3+IDNbByte], TypeNbByte ); |
| rosarium | 0:892175366555 | 127 | memcpy( pRecordStruct->ID, &pPayload[3+IDNbByte+TypeNbByte], IDNbByte ); |
| rosarium | 0:892175366555 | 128 | pRecordStruct->PayloadOffset = SizeOfRecordHeader; |
| rosarium | 0:892175366555 | 129 | } |
| rosarium | 0:892175366555 | 130 | else |
| rosarium | 0:892175366555 | 131 | { |
| rosarium | 0:892175366555 | 132 | pRecordStruct->RecordFlags = pPayload[0]; |
| rosarium | 0:892175366555 | 133 | pRecordStruct->TypeLength = TypeNbByte; |
| rosarium | 0:892175366555 | 134 | pRecordStruct->PayloadLength3 = pPayload[2]; |
| rosarium | 0:892175366555 | 135 | pRecordStruct->PayloadLength2 = pPayload[3]; |
| rosarium | 0:892175366555 | 136 | pRecordStruct->PayloadLength1 = pPayload[4]; |
| rosarium | 0:892175366555 | 137 | pRecordStruct->PayloadLength0 = pPayload[5]; |
| rosarium | 0:892175366555 | 138 | pRecordStruct->IDLength = IDNbByte; |
| rosarium | 0:892175366555 | 139 | memcpy( pRecordStruct->Type, &pPayload[6+IDNbByte], TypeNbByte ); |
| rosarium | 0:892175366555 | 140 | memcpy( pRecordStruct->ID, &pPayload[6+IDNbByte+TypeNbByte], IDNbByte ); |
| rosarium | 0:892175366555 | 141 | pRecordStruct->PayloadOffset = SizeOfRecordHeader; |
| rosarium | 0:892175366555 | 142 | } |
| rosarium | 0:892175366555 | 143 | |
| rosarium | 0:892175366555 | 144 | pRecordStruct->PayloadBufferAdd = (uint32_t)( pPayload + SizeOfRecordHeader ); |
| rosarium | 0:892175366555 | 145 | |
| rosarium | 0:892175366555 | 146 | status = NDEF_ParseRecordHeader( pRecordStruct ); |
| rosarium | 0:892175366555 | 147 | |
| rosarium | 0:892175366555 | 148 | return status; |
| rosarium | 0:892175366555 | 149 | } |
| rosarium | 0:892175366555 | 150 | |
| rosarium | 0:892175366555 | 151 | /** |
| rosarium | 0:892175366555 | 152 | * @brief This function parse the record header and dispatch regarding TNF value. |
| rosarium | 0:892175366555 | 153 | * @param pRecordStruct : pointer on the record structure to fill. |
| rosarium | 0:892175366555 | 154 | * @retval NDEF_OK : record identified and structure filled. |
| rosarium | 0:892175366555 | 155 | * @retval NDEF_ERROR : Not supported. |
| rosarium | 0:892175366555 | 156 | */ |
| rosarium | 0:892175366555 | 157 | uint16_t NDEF::NDEF_ParseRecordHeader( sRecordInfo *pRecordStruct ) |
| rosarium | 0:892175366555 | 158 | { |
| rosarium | 0:892175366555 | 159 | uint16_t status = NDEF_OK; |
| rosarium | 0:892175366555 | 160 | |
| rosarium | 0:892175366555 | 161 | switch( (pRecordStruct->RecordFlags & TNF_Mask) ) |
| rosarium | 0:892175366555 | 162 | { |
| rosarium | 0:892175366555 | 163 | case TNF_WellKnown: |
| rosarium | 0:892175366555 | 164 | NDEF_ParseWellKnownType( pRecordStruct ); |
| rosarium | 0:892175366555 | 165 | break; |
| rosarium | 0:892175366555 | 166 | |
| rosarium | 0:892175366555 | 167 | case TNF_MediaType: |
| rosarium | 0:892175366555 | 168 | NDEF_ParseMediaType( pRecordStruct ); |
| rosarium | 0:892175366555 | 169 | break; |
| rosarium | 0:892175366555 | 170 | |
| rosarium | 0:892175366555 | 171 | case TNF_NFCForumExternal: |
| rosarium | 0:892175366555 | 172 | NDEF_ParseForumExternalType( pRecordStruct); |
| rosarium | 0:892175366555 | 173 | break; |
| rosarium | 0:892175366555 | 174 | |
| rosarium | 0:892175366555 | 175 | default: |
| rosarium | 0:892175366555 | 176 | /* currently not supported or unknown*/ |
| rosarium | 0:892175366555 | 177 | pRecordStruct->NDEF_Type = UNKNOWN_TYPE; |
| rosarium | 0:892175366555 | 178 | status = NDEF_ERROR; |
| rosarium | 0:892175366555 | 179 | } |
| rosarium | 0:892175366555 | 180 | return status; |
| rosarium | 0:892175366555 | 181 | } |
| rosarium | 0:892175366555 | 182 | |
| rosarium | 0:892175366555 | 183 | /** |
| rosarium | 0:892175366555 | 184 | * @brief This function parse the Well Known type record. |
| rosarium | 0:892175366555 | 185 | * @param pRecordStruct : pointer on the record structure to fill. |
| rosarium | 0:892175366555 | 186 | */ |
| rosarium | 0:892175366555 | 187 | void NDEF::NDEF_ParseWellKnownType( sRecordInfo *pRecordStruct ) |
| rosarium | 0:892175366555 | 188 | { |
| rosarium | 0:892175366555 | 189 | uint8_t* pPayload; |
| rosarium | 0:892175366555 | 190 | |
| rosarium | 0:892175366555 | 191 | pPayload = (uint8_t*)( pRecordStruct->PayloadBufferAdd ); |
| rosarium | 0:892175366555 | 192 | |
| rosarium | 0:892175366555 | 193 | if( !memcmp( &(pRecordStruct->Type), SMART_POSTER_TYPE_STRING, pRecordStruct->TypeLength ) ) |
| rosarium | 0:892175366555 | 194 | { |
| rosarium | 0:892175366555 | 195 | /* special case where we have to parse others records */ |
| rosarium | 0:892175366555 | 196 | pRecordStruct->NDEF_Type = SMARTPOSTER_TYPE; |
| rosarium | 0:892175366555 | 197 | NDEF_ParseSP( pRecordStruct ); |
| rosarium | 0:892175366555 | 198 | } |
| rosarium | 0:892175366555 | 199 | |
| rosarium | 0:892175366555 | 200 | else if( !memcmp( &(pRecordStruct->Type), URI_TYPE_STRING, pRecordStruct->TypeLength ) ) |
| rosarium | 0:892175366555 | 201 | { |
| rosarium | 0:892175366555 | 202 | /* it's an URI Type check if it's an URL or SMS or ... */ |
| rosarium | 0:892175366555 | 203 | /* check identifier */ |
| rosarium | 0:892175366555 | 204 | if( *pPayload == URI_ID_0x00 ) |
| rosarium | 0:892175366555 | 205 | { |
| rosarium | 0:892175366555 | 206 | NDEF_ParseURI( pRecordStruct ); |
| rosarium | 0:892175366555 | 207 | } |
| rosarium | 0:892175366555 | 208 | else if( (*pPayload > URI_ID_0x00) && (*pPayload < URI_RFU) ) |
| rosarium | 0:892175366555 | 209 | { |
| rosarium | 0:892175366555 | 210 | /* email special case */ |
| rosarium | 0:892175366555 | 211 | if( *pPayload == (uint8_t) URI_ID_0x06 ) |
| rosarium | 0:892175366555 | 212 | { |
| rosarium | 0:892175366555 | 213 | pRecordStruct->NDEF_Type = URI_EMAIL_TYPE; |
| rosarium | 0:892175366555 | 214 | } |
| rosarium | 0:892175366555 | 215 | else |
| rosarium | 0:892175366555 | 216 | { |
| rosarium | 0:892175366555 | 217 | pRecordStruct->NDEF_Type = WELL_KNOWN_ABRIDGED_URI_TYPE; |
| rosarium | 0:892175366555 | 218 | } |
| rosarium | 0:892175366555 | 219 | } |
| rosarium | 0:892175366555 | 220 | else |
| rosarium | 0:892175366555 | 221 | { |
| rosarium | 0:892175366555 | 222 | pRecordStruct->NDEF_Type = UNKNOWN_TYPE; |
| rosarium | 0:892175366555 | 223 | } |
| rosarium | 0:892175366555 | 224 | } |
| rosarium | 0:892175366555 | 225 | |
| rosarium | 0:892175366555 | 226 | else if( !memcmp( &(pRecordStruct->Type), TEXT_TYPE_STRING, pRecordStruct->TypeLength ) ) |
| rosarium | 0:892175366555 | 227 | { |
| rosarium | 0:892175366555 | 228 | pRecordStruct->NDEF_Type = TEXT_TYPE; |
| rosarium | 0:892175366555 | 229 | } |
| rosarium | 0:892175366555 | 230 | else |
| rosarium | 0:892175366555 | 231 | pRecordStruct->NDEF_Type = UNKNOWN_TYPE; |
| rosarium | 0:892175366555 | 232 | } |
| rosarium | 0:892175366555 | 233 | |
| rosarium | 0:892175366555 | 234 | /** |
| rosarium | 0:892175366555 | 235 | * @brief This function parse the Media type record. |
| rosarium | 0:892175366555 | 236 | * @param pRecordStruct : pointer on the record structure to fill. |
| rosarium | 0:892175366555 | 237 | */ |
| rosarium | 0:892175366555 | 238 | void NDEF::NDEF_ParseMediaType( sRecordInfo *pRecordStruct ) |
| rosarium | 0:892175366555 | 239 | { |
| rosarium | 0:892175366555 | 240 | if( !memcmp( &(pRecordStruct->Type), VCARD_TYPE_STRING, pRecordStruct->TypeLength ) ) |
| rosarium | 0:892175366555 | 241 | pRecordStruct->NDEF_Type = VCARD_TYPE; |
| rosarium | 0:892175366555 | 242 | else if( !memcmp( &(pRecordStruct->Type), XVCARD_TYPE_STRING, pRecordStruct->TypeLength ) ) |
| rosarium | 0:892175366555 | 243 | pRecordStruct->NDEF_Type = VCARD_TYPE; |
| rosarium | 0:892175366555 | 244 | else if( !memcmp( &(pRecordStruct->Type), XVCARD2_TYPE_STRING, pRecordStruct->TypeLength ) ) |
| rosarium | 0:892175366555 | 245 | pRecordStruct->NDEF_Type = VCARD_TYPE; |
| rosarium | 0:892175366555 | 246 | else |
| rosarium | 0:892175366555 | 247 | pRecordStruct->NDEF_Type = UNKNOWN_TYPE; |
| rosarium | 0:892175366555 | 248 | } |
| rosarium | 0:892175366555 | 249 | |
| rosarium | 0:892175366555 | 250 | /** |
| rosarium | 0:892175366555 | 251 | * @brief This function parse the Forum External type record. |
| rosarium | 0:892175366555 | 252 | * @param pRecordStruct : pointer on the record structure to fill. |
| rosarium | 0:892175366555 | 253 | */ |
| rosarium | 0:892175366555 | 254 | void NDEF::NDEF_ParseForumExternalType( sRecordInfo *pRecordStruct ) |
| rosarium | 0:892175366555 | 255 | { |
| rosarium | 0:892175366555 | 256 | if( !memcmp( &(pRecordStruct->Type), M24SR_DISCOVERY_APP_STRING, pRecordStruct->TypeLength ) ) |
| rosarium | 0:892175366555 | 257 | pRecordStruct->NDEF_Type = M24SR_DISCOVERY_APP_TYPE; |
| rosarium | 0:892175366555 | 258 | else |
| rosarium | 0:892175366555 | 259 | pRecordStruct->NDEF_Type = UNKNOWN_TYPE; |
| rosarium | 0:892175366555 | 260 | } |
| rosarium | 0:892175366555 | 261 | |
| rosarium | 0:892175366555 | 262 | /** |
| rosarium | 0:892175366555 | 263 | * @brief This function parse the URI type record. |
| rosarium | 0:892175366555 | 264 | * @param pRecordStruct : pointer on the record structure to fill. |
| rosarium | 0:892175366555 | 265 | */ |
| rosarium | 0:892175366555 | 266 | void NDEF::NDEF_ParseURI( sRecordInfo *pRecordStruct ) |
| rosarium | 0:892175366555 | 267 | { |
| rosarium | 0:892175366555 | 268 | uint8_t* pPayload; |
| rosarium | 0:892175366555 | 269 | |
| rosarium | 0:892175366555 | 270 | pPayload = (uint8_t*)( pRecordStruct->PayloadBufferAdd ); |
| rosarium | 0:892175366555 | 271 | pPayload++; /* to skip URI identifier first URI payload byte */ |
| rosarium | 0:892175366555 | 272 | |
| rosarium | 0:892175366555 | 273 | if( !memcmp( pPayload, SMS_TYPE_STRING, strlen(SMS_TYPE_STRING) ) ) |
| rosarium | 0:892175366555 | 274 | { |
| rosarium | 0:892175366555 | 275 | pRecordStruct->NDEF_Type = URI_SMS_TYPE; |
| rosarium | 0:892175366555 | 276 | } |
| rosarium | 0:892175366555 | 277 | else if( !memcmp( pPayload, GEO_TYPE_STRING, strlen(GEO_TYPE_STRING) ) ) |
| rosarium | 0:892175366555 | 278 | { |
| rosarium | 0:892175366555 | 279 | pRecordStruct->NDEF_Type = URI_GEO_TYPE; |
| rosarium | 0:892175366555 | 280 | } |
| rosarium | 0:892175366555 | 281 | else |
| rosarium | 0:892175366555 | 282 | pRecordStruct->NDEF_Type = UNKNOWN_TYPE; |
| rosarium | 0:892175366555 | 283 | } |
| rosarium | 0:892175366555 | 284 | |
| rosarium | 0:892175366555 | 285 | /** |
| rosarium | 0:892175366555 | 286 | * @brief This function parse the Smart Poster. |
| rosarium | 0:892175366555 | 287 | * @param pRecordStruct : pointer on the record structure to fill. |
| rosarium | 0:892175366555 | 288 | */ |
| rosarium | 0:892175366555 | 289 | void NDEF::NDEF_ParseSP( sRecordInfo *pRecordStruct ) |
| rosarium | 0:892175366555 | 290 | { |
| rosarium | 0:892175366555 | 291 | uint8_t* pPayload; |
| rosarium | 0:892175366555 | 292 | uint32_t PayloadSize = 0; |
| rosarium | 0:892175366555 | 293 | uint32_t SPPayloadSize = 0; |
| rosarium | 0:892175366555 | 294 | uint32_t OffsetInSPPayload = 0; |
| rosarium | 0:892175366555 | 295 | uint32_t RecordPosition = 0; |
| rosarium | 0:892175366555 | 296 | sRecordInfo *pSPRecordStruct; |
| rosarium | 0:892175366555 | 297 | |
| rosarium | 0:892175366555 | 298 | /* initialize variable with size of the payload and poiter on data */ |
| rosarium | 0:892175366555 | 299 | PayloadSize = ((uint32_t)(pRecordStruct->PayloadLength3) << 24) | ((uint32_t)(pRecordStruct->PayloadLength2) << 16) | |
| rosarium | 0:892175366555 | 300 | ((uint32_t)(pRecordStruct->PayloadLength1) << 8) | pRecordStruct->PayloadLength0; |
| rosarium | 0:892175366555 | 301 | |
| rosarium | 0:892175366555 | 302 | pPayload = (uint8_t*)( pRecordStruct->PayloadBufferAdd ); |
| rosarium | 0:892175366555 | 303 | |
| rosarium | 0:892175366555 | 304 | pSPRecordStruct = SPRecordStructAdd[0]; |
| rosarium | 0:892175366555 | 305 | |
| rosarium | 0:892175366555 | 306 | /* Initailize the number of record find in the SP payload */ |
| rosarium | 0:892175366555 | 307 | pRecordStruct->NbOfRecordInSPPayload = 0; |
| rosarium | 0:892175366555 | 308 | |
| rosarium | 0:892175366555 | 309 | do |
| rosarium | 0:892175366555 | 310 | { |
| rosarium | 0:892175366555 | 311 | pSPRecordStruct = SPRecordStructAdd[RecordPosition]; |
| rosarium | 0:892175366555 | 312 | /* identify the record in the SP payload */ |
| rosarium | 0:892175366555 | 313 | if( NDEF_IdentifySPRecord( pSPRecordStruct, pPayload ) == NDEF_OK ) |
| rosarium | 0:892175366555 | 314 | { |
| rosarium | 0:892175366555 | 315 | /* store add of structure that will contain the other record information */ |
| rosarium | 0:892175366555 | 316 | pRecordStruct->NbOfRecordInSPPayload++; |
| rosarium | 0:892175366555 | 317 | pRecordStruct->SPRecordStructAdd[RecordPosition] = pSPRecordStruct; |
| rosarium | 0:892175366555 | 318 | |
| rosarium | 0:892175366555 | 319 | /* After SPRecord + First Record check if we are at the end of NDEF file */ |
| rosarium | 0:892175366555 | 320 | SPPayloadSize = ((uint32_t)(pSPRecordStruct->PayloadLength3) << 24) | ((uint32_t)(pSPRecordStruct->PayloadLength2) << 16) | |
| rosarium | 0:892175366555 | 321 | ((uint32_t)(pSPRecordStruct->PayloadLength1) << 8) | pSPRecordStruct->PayloadLength0; |
| rosarium | 0:892175366555 | 322 | |
| rosarium | 0:892175366555 | 323 | OffsetInSPPayload += pSPRecordStruct->PayloadOffset + SPPayloadSize; |
| rosarium | 0:892175366555 | 324 | pPayload += OffsetInSPPayload; |
| rosarium | 0:892175366555 | 325 | } |
| rosarium | 0:892175366555 | 326 | else /* Recommended Action Record for example */ |
| rosarium | 0:892175366555 | 327 | { |
| rosarium | 0:892175366555 | 328 | SPPayloadSize = 0; |
| rosarium | 0:892175366555 | 329 | } |
| rosarium | 0:892175366555 | 330 | RecordPosition++; |
| rosarium | 0:892175366555 | 331 | } |
| rosarium | 0:892175366555 | 332 | while( (OffsetInSPPayload < PayloadSize) && RecordPosition<SP_MAX_RECORD); /* there is another record */ |
| rosarium | 0:892175366555 | 333 | } |
| rosarium | 0:892175366555 | 334 | |
| rosarium | 0:892175366555 | 335 | /** |
| rosarium | 0:892175366555 | 336 | * @} |
| rosarium | 0:892175366555 | 337 | */ |
| rosarium | 0:892175366555 | 338 | |
| rosarium | 0:892175366555 | 339 | /** @defgroup libNDEF_Public_Functions |
| rosarium | 0:892175366555 | 340 | * @{ |
| rosarium | 0:892175366555 | 341 | */ |
| rosarium | 0:892175366555 | 342 | |
| rosarium | 0:892175366555 | 343 | |
| rosarium | 0:892175366555 | 344 | /** |
| rosarium | 0:892175366555 | 345 | * @brief This function identify the NDEF message stored in tag. |
| rosarium | 0:892175366555 | 346 | * @param pRecordStruct : Structure to fill with record information. |
| rosarium | 0:892175366555 | 347 | * @param pNDEF : pointer on the NDEF message data. |
| rosarium | 0:892175366555 | 348 | * @retval NDEF_OK : record struct filled. |
| rosarium | 0:892175366555 | 349 | * @retval NDEF_ERROR : record struct not updated. |
| rosarium | 0:892175366555 | 350 | */ |
| rosarium | 0:892175366555 | 351 | uint16_t NDEF::NDEF_IdentifyNDEF( sRecordInfo *pRecordStruct, uint8_t* pNDEF ) |
| rosarium | 0:892175366555 | 352 | { |
| rosarium | 0:892175366555 | 353 | uint16_t status = NDEF_ERROR; |
| rosarium | 0:892175366555 | 354 | uint16_t SizeOfRecordHeader, TypeNbByte, PayloadLengthField, IDLengthField, IDNbByte; |
| rosarium | 0:892175366555 | 355 | uint32_t PayloadSize; |
| rosarium | 0:892175366555 | 356 | |
| rosarium | 0:892175366555 | 357 | /* check NDEF present */ |
| rosarium | 0:892175366555 | 358 | if( NDEF_IsNDEFPresent() != NDEF_OK ) |
| rosarium | 0:892175366555 | 359 | { |
| rosarium | 0:892175366555 | 360 | return NDEF_ERROR; |
| rosarium | 0:892175366555 | 361 | } |
| rosarium | 0:892175366555 | 362 | |
| rosarium | 0:892175366555 | 363 | /* Analyse record layout */ |
| rosarium | 0:892175366555 | 364 | ReadData( FIRST_RECORD_OFFSET, 1, pNDEF ); |
| rosarium | 0:892175366555 | 365 | |
| rosarium | 0:892175366555 | 366 | /* Is ID length field present */ |
| rosarium | 0:892175366555 | 367 | if( (*pNDEF) & IL_Mask ) |
| rosarium | 0:892175366555 | 368 | { |
| rosarium | 0:892175366555 | 369 | IDLengthField = ID_LENGTH_FIELD; |
| rosarium | 0:892175366555 | 370 | } |
| rosarium | 0:892175366555 | 371 | else |
| rosarium | 0:892175366555 | 372 | { |
| rosarium | 0:892175366555 | 373 | IDLengthField = 0; |
| rosarium | 0:892175366555 | 374 | } |
| rosarium | 0:892175366555 | 375 | |
| rosarium | 0:892175366555 | 376 | /* it's a SR */ |
| rosarium | 0:892175366555 | 377 | if( (*pNDEF) & SR_Mask ) |
| rosarium | 0:892175366555 | 378 | { |
| rosarium | 0:892175366555 | 379 | /* Analyse short record layout */ |
| rosarium | 0:892175366555 | 380 | ReadData( FIRST_RECORD_OFFSET, 4, pNDEF ); |
| rosarium | 0:892175366555 | 381 | TypeNbByte = pNDEF[1]; |
| rosarium | 0:892175366555 | 382 | PayloadLengthField = 1; |
| rosarium | 0:892175366555 | 383 | if( IDLengthField == ID_LENGTH_FIELD ) |
| rosarium | 0:892175366555 | 384 | IDNbByte = pNDEF[3]; |
| rosarium | 0:892175366555 | 385 | else |
| rosarium | 0:892175366555 | 386 | IDNbByte = 0; |
| rosarium | 0:892175366555 | 387 | } |
| rosarium | 0:892175366555 | 388 | else |
| rosarium | 0:892175366555 | 389 | { |
| rosarium | 0:892175366555 | 390 | /* Analyse normal record layout */ |
| rosarium | 0:892175366555 | 391 | ReadData( FIRST_RECORD_OFFSET, 7, pNDEF ); |
| rosarium | 0:892175366555 | 392 | TypeNbByte = pNDEF[1]; |
| rosarium | 0:892175366555 | 393 | PayloadLengthField = 4; |
| rosarium | 0:892175366555 | 394 | if( IDLengthField == ID_LENGTH_FIELD ) |
| rosarium | 0:892175366555 | 395 | IDNbByte = pNDEF[6]; |
| rosarium | 0:892175366555 | 396 | else |
| rosarium | 0:892175366555 | 397 | IDNbByte = 0; |
| rosarium | 0:892175366555 | 398 | } |
| rosarium | 0:892175366555 | 399 | |
| rosarium | 0:892175366555 | 400 | SizeOfRecordHeader = RECORD_FLAG_FIELD + TYPE_LENGTH_FIELD + PayloadLengthField + IDLengthField + TypeNbByte + IDNbByte; |
| rosarium | 0:892175366555 | 401 | |
| rosarium | 0:892175366555 | 402 | /* Read record header */ |
| rosarium | 0:892175366555 | 403 | ReadData( FIRST_RECORD_OFFSET, SizeOfRecordHeader, pNDEF ); |
| rosarium | 0:892175366555 | 404 | /* it's a SR */ |
| rosarium | 0:892175366555 | 405 | if( pNDEF[0] & SR_Mask ) |
| rosarium | 0:892175366555 | 406 | { |
| rosarium | 0:892175366555 | 407 | pRecordStruct->RecordFlags = pNDEF[0]; |
| rosarium | 0:892175366555 | 408 | pRecordStruct->TypeLength = TypeNbByte; |
| rosarium | 0:892175366555 | 409 | pRecordStruct->PayloadLength3 = 0; |
| rosarium | 0:892175366555 | 410 | pRecordStruct->PayloadLength2 = 0; |
| rosarium | 0:892175366555 | 411 | pRecordStruct->PayloadLength1 = 0; |
| rosarium | 0:892175366555 | 412 | pRecordStruct->PayloadLength0 = pNDEF[2]; |
| rosarium | 0:892175366555 | 413 | pRecordStruct->IDLength = IDNbByte; |
| rosarium | 0:892175366555 | 414 | memcpy( pRecordStruct->Type, &pNDEF[3+IDNbByte], TypeNbByte ); |
| rosarium | 0:892175366555 | 415 | memcpy( pRecordStruct->ID, &pNDEF[3+IDNbByte+TypeNbByte], IDNbByte ); |
| rosarium | 0:892175366555 | 416 | pRecordStruct->PayloadOffset = SizeOfRecordHeader; |
| rosarium | 0:892175366555 | 417 | } |
| rosarium | 0:892175366555 | 418 | else |
| rosarium | 0:892175366555 | 419 | { |
| rosarium | 0:892175366555 | 420 | pRecordStruct->RecordFlags = pNDEF[0]; |
| rosarium | 0:892175366555 | 421 | pRecordStruct->TypeLength = TypeNbByte; |
| rosarium | 0:892175366555 | 422 | pRecordStruct->PayloadLength3 = pNDEF[2]; |
| rosarium | 0:892175366555 | 423 | pRecordStruct->PayloadLength2 = pNDEF[3]; |
| rosarium | 0:892175366555 | 424 | pRecordStruct->PayloadLength1 = pNDEF[4]; |
| rosarium | 0:892175366555 | 425 | pRecordStruct->PayloadLength0 = pNDEF[5]; |
| rosarium | 0:892175366555 | 426 | pRecordStruct->IDLength = IDNbByte; |
| rosarium | 0:892175366555 | 427 | memcpy( pRecordStruct->Type, &pNDEF[6+IDNbByte], TypeNbByte ); |
| rosarium | 0:892175366555 | 428 | memcpy( pRecordStruct->ID, &pNDEF[6+IDNbByte+TypeNbByte], IDNbByte ); |
| rosarium | 0:892175366555 | 429 | pRecordStruct->PayloadOffset = SizeOfRecordHeader; |
| rosarium | 0:892175366555 | 430 | } |
| rosarium | 0:892175366555 | 431 | |
| rosarium | 0:892175366555 | 432 | PayloadSize = ((uint32_t)(pRecordStruct->PayloadLength3) << 24) | ((uint32_t)(pRecordStruct->PayloadLength2) << 16) | |
| rosarium | 0:892175366555 | 433 | ((uint32_t)(pRecordStruct->PayloadLength1) << 8) | pRecordStruct->PayloadLength0; |
| rosarium | 0:892175366555 | 434 | |
| rosarium | 0:892175366555 | 435 | /* read Payload */ |
| rosarium | 0:892175366555 | 436 | status = ReadData( (uint16_t)((FIRST_RECORD_OFFSET) + pRecordStruct->PayloadOffset) , PayloadSize , pNDEF ); |
| rosarium | 0:892175366555 | 437 | |
| rosarium | 0:892175366555 | 438 | if( status != NDEF_OK ) |
| rosarium | 0:892175366555 | 439 | return NDEF_ERROR; |
| rosarium | 0:892175366555 | 440 | else |
| rosarium | 0:892175366555 | 441 | pRecordStruct->PayloadBufferAdd = (uint32_t)(pNDEF); |
| rosarium | 0:892175366555 | 442 | |
| rosarium | 0:892175366555 | 443 | NDEF_ParseRecordHeader( pRecordStruct ); |
| rosarium | 0:892175366555 | 444 | |
| rosarium | 0:892175366555 | 445 | return NDEF_OK; |
| rosarium | 0:892175366555 | 446 | } |
| rosarium | 0:892175366555 | 447 | |
| rosarium | 0:892175366555 | 448 | /** |
| rosarium | 0:892175366555 | 449 | * @brief This function read the NDEF content of the TAG. |
| rosarium | 0:892175366555 | 450 | * @param pNDEF : pointer on the buffer to store NDEF data. |
| rosarium | 0:892175366555 | 451 | * @retval NDEF_OK : NDEF file data retrieve and store in the buffer. |
| rosarium | 0:892175366555 | 452 | * @retval NDEF_ERROR : not able to read NDEF from tag. |
| rosarium | 0:892175366555 | 453 | * @retval NDEF_ERROR_MEMORY_INTERNAL : Cannot read tag. |
| rosarium | 0:892175366555 | 454 | * @retval NDEF_ERROR_NOT_FORMATED : CCFile data not supported or not present. |
| rosarium | 0:892175366555 | 455 | * @retval NDEF_ERROR_MEMORY_TAG : Size not compatible with memory. |
| rosarium | 0:892175366555 | 456 | * @retval NDEF_ERROR_LOCKED : Tag locked, cannot be read. |
| rosarium | 0:892175366555 | 457 | */ |
| rosarium | 0:892175366555 | 458 | uint16_t NDEF::NDEF_ReadNDEF( uint8_t* pNDEF ) |
| rosarium | 0:892175366555 | 459 | { |
| rosarium | 0:892175366555 | 460 | uint16_t status = NDEF_ERROR; |
| rosarium | 0:892175366555 | 461 | uint16_t NDEF_Size = 0; |
| rosarium | 0:892175366555 | 462 | |
| rosarium | 0:892175366555 | 463 | status = ReadData( 0, 2, pNDEF ); |
| rosarium | 0:892175366555 | 464 | |
| rosarium | 0:892175366555 | 465 | if( status == NDEF_OK ) |
| rosarium | 0:892175366555 | 466 | { |
| rosarium | 0:892175366555 | 467 | NDEF_Size = (uint16_t)(*pNDEF << 8); |
| rosarium | 0:892175366555 | 468 | NDEF_Size = NDEF_Size | (uint16_t)(*++pNDEF ); |
| rosarium | 0:892175366555 | 469 | |
| rosarium | 0:892175366555 | 470 | status = ReadData( 0, NDEF_Size + 2, --pNDEF ); |
| rosarium | 0:892175366555 | 471 | } |
| rosarium | 0:892175366555 | 472 | |
| rosarium | 0:892175366555 | 473 | return status; |
| rosarium | 0:892175366555 | 474 | } |
| rosarium | 0:892175366555 | 475 | |
| rosarium | 0:892175366555 | 476 | /** |
| rosarium | 0:892175366555 | 477 | * @brief This function write the NDEF in the TAG. |
| rosarium | 0:892175366555 | 478 | * @param pNDEF : pointer on the buffer containing the NDEF data. |
| rosarium | 0:892175366555 | 479 | * @retval NDEF_OK : NDEF file data written in the tag. |
| rosarium | 0:892175366555 | 480 | * @retval NDEF_ERROR : not able to store NDEF in tag. |
| rosarium | 0:892175366555 | 481 | * @retval NDEF_ERROR_MEMORY_INTERNAL : Cannot write to tag. |
| rosarium | 0:892175366555 | 482 | * @retval NDEF_ERROR_NOT_FORMATED : CCFile data not supported or not present. |
| rosarium | 0:892175366555 | 483 | * @retval NDEF_ERROR_MEMORY_TAG : Size not compatible with memory. |
| rosarium | 0:892175366555 | 484 | * @retval NDEF_ERROR_LOCKED : Tag locked, cannot be write. |
| rosarium | 0:892175366555 | 485 | */ |
| rosarium | 0:892175366555 | 486 | uint16_t NDEF::NDEF_WriteNDEF( uint8_t *pNDEF ) |
| rosarium | 0:892175366555 | 487 | { |
| rosarium | 0:892175366555 | 488 | uint16_t status = NDEF_ERROR; |
| rosarium | 0:892175366555 | 489 | uint16_t NDEF_Size = 0; |
| rosarium | 0:892175366555 | 490 | |
| rosarium | 0:892175366555 | 491 | NDEF_Size = (uint16_t)(*pNDEF << 8); |
| rosarium | 0:892175366555 | 492 | NDEF_Size = NDEF_Size | (uint16_t)(*++pNDEF ); |
| rosarium | 0:892175366555 | 493 | |
| rosarium | 0:892175366555 | 494 | status = WriteData( 0, NDEF_Size + 2, --pNDEF ); |
| rosarium | 0:892175366555 | 495 | |
| rosarium | 0:892175366555 | 496 | return status; |
| rosarium | 0:892175366555 | 497 | } |
| rosarium | 0:892175366555 | 498 | |
| rosarium | 0:892175366555 | 499 | /** |
| rosarium | 0:892175366555 | 500 | * @brief This function identify the NDEF message stored in tag. |
| rosarium | 0:892175366555 | 501 | * @param pRecordStruct : Structure to fill with record information. |
| rosarium | 0:892175366555 | 502 | * @param pNDEF : pointer on the NDEF message data. |
| rosarium | 0:892175366555 | 503 | * @retval NDEF_OK : record struct filled. |
| rosarium | 0:892175366555 | 504 | * @retval NDEF_ERROR : record struct not updated. |
| rosarium | 0:892175366555 | 505 | */ |
| rosarium | 0:892175366555 | 506 | uint16_t NDEF::NDEF_IdentifyBuffer( sRecordInfo *pRecordStruct, uint8_t* pNDEF ) |
| rosarium | 0:892175366555 | 507 | { |
| rosarium | 0:892175366555 | 508 | uint16_t SizeOfRecordHeader, TypeNbByte, PayloadLengthField, IDLengthField, IDNbByte; |
| rosarium | 0:892175366555 | 509 | |
| rosarium | 0:892175366555 | 510 | /* Is ID length field present */ |
| rosarium | 0:892175366555 | 511 | if( (*pNDEF) & IL_Mask ) |
| rosarium | 0:892175366555 | 512 | { |
| rosarium | 0:892175366555 | 513 | IDLengthField = ID_LENGTH_FIELD; |
| rosarium | 0:892175366555 | 514 | } |
| rosarium | 0:892175366555 | 515 | else |
| rosarium | 0:892175366555 | 516 | { |
| rosarium | 0:892175366555 | 517 | IDLengthField = 0; |
| rosarium | 0:892175366555 | 518 | } |
| rosarium | 0:892175366555 | 519 | |
| rosarium | 0:892175366555 | 520 | /* it's a SR */ |
| rosarium | 0:892175366555 | 521 | if( (*pNDEF) & SR_Mask ) |
| rosarium | 0:892175366555 | 522 | { |
| rosarium | 0:892175366555 | 523 | /* Analyse short record layout */ |
| rosarium | 0:892175366555 | 524 | TypeNbByte = pNDEF[1]; |
| rosarium | 0:892175366555 | 525 | PayloadLengthField = 1; |
| rosarium | 0:892175366555 | 526 | if( IDLengthField == ID_LENGTH_FIELD ) |
| rosarium | 0:892175366555 | 527 | IDNbByte = pNDEF[3]; |
| rosarium | 0:892175366555 | 528 | else |
| rosarium | 0:892175366555 | 529 | IDNbByte = 0; |
| rosarium | 0:892175366555 | 530 | } |
| rosarium | 0:892175366555 | 531 | else |
| rosarium | 0:892175366555 | 532 | { |
| rosarium | 0:892175366555 | 533 | /* Analyse normal record layout */ |
| rosarium | 0:892175366555 | 534 | TypeNbByte = pNDEF[1]; |
| rosarium | 0:892175366555 | 535 | PayloadLengthField = 4; |
| rosarium | 0:892175366555 | 536 | if( IDLengthField == ID_LENGTH_FIELD ) |
| rosarium | 0:892175366555 | 537 | IDNbByte = pNDEF[6]; |
| rosarium | 0:892175366555 | 538 | else |
| rosarium | 0:892175366555 | 539 | IDNbByte = 0; |
| rosarium | 0:892175366555 | 540 | } |
| rosarium | 0:892175366555 | 541 | |
| rosarium | 0:892175366555 | 542 | SizeOfRecordHeader = RECORD_FLAG_FIELD + TYPE_LENGTH_FIELD + PayloadLengthField + IDLengthField + TypeNbByte + IDNbByte; |
| rosarium | 0:892175366555 | 543 | |
| rosarium | 0:892175366555 | 544 | /* it's a SR */ |
| rosarium | 0:892175366555 | 545 | if( pNDEF[0] & SR_Mask ) |
| rosarium | 0:892175366555 | 546 | { |
| rosarium | 0:892175366555 | 547 | pRecordStruct->RecordFlags = pNDEF[0]; |
| rosarium | 0:892175366555 | 548 | pRecordStruct->TypeLength = TypeNbByte; |
| rosarium | 0:892175366555 | 549 | pRecordStruct->PayloadLength3 = 0; |
| rosarium | 0:892175366555 | 550 | pRecordStruct->PayloadLength2 = 0; |
| rosarium | 0:892175366555 | 551 | pRecordStruct->PayloadLength1 = 0; |
| rosarium | 0:892175366555 | 552 | pRecordStruct->PayloadLength0 = pNDEF[2]; |
| rosarium | 0:892175366555 | 553 | pRecordStruct->IDLength = IDNbByte; |
| rosarium | 0:892175366555 | 554 | memcpy( pRecordStruct->Type, &pNDEF[3+IDNbByte], TypeNbByte ); |
| rosarium | 0:892175366555 | 555 | memcpy( pRecordStruct->ID, &pNDEF[3+IDNbByte+TypeNbByte], IDNbByte ); |
| rosarium | 0:892175366555 | 556 | pRecordStruct->PayloadOffset = SizeOfRecordHeader; |
| rosarium | 0:892175366555 | 557 | } |
| rosarium | 0:892175366555 | 558 | else |
| rosarium | 0:892175366555 | 559 | { |
| rosarium | 0:892175366555 | 560 | pRecordStruct->RecordFlags = pNDEF[0]; |
| rosarium | 0:892175366555 | 561 | pRecordStruct->TypeLength = TypeNbByte; |
| rosarium | 0:892175366555 | 562 | pRecordStruct->PayloadLength3 = pNDEF[2]; |
| rosarium | 0:892175366555 | 563 | pRecordStruct->PayloadLength2 = pNDEF[3]; |
| rosarium | 0:892175366555 | 564 | pRecordStruct->PayloadLength1 = pNDEF[4]; |
| rosarium | 0:892175366555 | 565 | pRecordStruct->PayloadLength0 = pNDEF[5]; |
| rosarium | 0:892175366555 | 566 | pRecordStruct->IDLength = IDNbByte; |
| rosarium | 0:892175366555 | 567 | memcpy( pRecordStruct->Type, &pNDEF[6+IDNbByte], TypeNbByte ); |
| rosarium | 0:892175366555 | 568 | memcpy( pRecordStruct->ID, &pNDEF[6+IDNbByte+TypeNbByte], IDNbByte ); |
| rosarium | 0:892175366555 | 569 | pRecordStruct->PayloadOffset = SizeOfRecordHeader; |
| rosarium | 0:892175366555 | 570 | } |
| rosarium | 0:892175366555 | 571 | |
| rosarium | 0:892175366555 | 572 | pRecordStruct->PayloadBufferAdd = (uint32_t)(&pNDEF[pRecordStruct->PayloadOffset]); |
| rosarium | 0:892175366555 | 573 | |
| rosarium | 0:892175366555 | 574 | NDEF_ParseRecordHeader( pRecordStruct ); |
| rosarium | 0:892175366555 | 575 | |
| rosarium | 0:892175366555 | 576 | return NDEF_OK; |
| rosarium | 0:892175366555 | 577 | } |
| rosarium | 0:892175366555 | 578 | |
| rosarium | 0:892175366555 | 579 | /** |
| rosarium | 0:892175366555 | 580 | * @} |
| rosarium | 0:892175366555 | 581 | */ |
| rosarium | 0:892175366555 | 582 | |
| rosarium | 0:892175366555 | 583 | /** |
| rosarium | 0:892175366555 | 584 | * @} |
| rosarium | 0:892175366555 | 585 | */ |
| rosarium | 0:892175366555 | 586 | |
| rosarium | 0:892175366555 | 587 | /** |
| rosarium | 0:892175366555 | 588 | * @} |
| rosarium | 0:892175366555 | 589 | */ |
| rosarium | 0:892175366555 | 590 | |
| rosarium | 0:892175366555 | 591 | /******************* (C) COPYRIGHT 2016 STMicroelectronics *****END OF FILE****/ |
