NFC NDEF library

Dependents:   Nucleo_NFC_Example I2C_NFC_Master Print_Entire_Nucleo_NFC01A1_Memory

Fork of lib_NDEF by Enrico Gregoratto

Committer:
EnricoG
Date:
Mon Dec 15 19:41:36 2014 +0000
Revision:
0:3b093bd0819e
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
EnricoG 0:3b093bd0819e 1 /**
EnricoG 0:3b093bd0819e 2 ******************************************************************************
EnricoG 0:3b093bd0819e 3 * @file lib_TagType4.c
EnricoG 0:3b093bd0819e 4 * @author MMY Application Team
EnricoG 0:3b093bd0819e 5 * @version V1.0.0
EnricoG 0:3b093bd0819e 6 * @date 20-November-2013
EnricoG 0:3b093bd0819e 7 * @brief This file help to manage TagType4.
EnricoG 0:3b093bd0819e 8 ******************************************************************************
EnricoG 0:3b093bd0819e 9 * @attention
EnricoG 0:3b093bd0819e 10 *
EnricoG 0:3b093bd0819e 11 * <h2><center>&copy; COPYRIGHT 2014 STMicroelectronics</center></h2>
EnricoG 0:3b093bd0819e 12 *
EnricoG 0:3b093bd0819e 13 * Licensed under MMY-ST Liberty SW License Agreement V2, (the "License");
EnricoG 0:3b093bd0819e 14 * You may not use this file except in compliance with the License.
EnricoG 0:3b093bd0819e 15 * You may obtain a copy of the License at:
EnricoG 0:3b093bd0819e 16 *
EnricoG 0:3b093bd0819e 17 * http://www.st.com/software_license_agreement_liberty_v2
EnricoG 0:3b093bd0819e 18 *
EnricoG 0:3b093bd0819e 19 * Unless required by applicable law or agreed to in writing, software
EnricoG 0:3b093bd0819e 20 * distributed under the License is distributed on an "AS IS" BASIS,
EnricoG 0:3b093bd0819e 21 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
EnricoG 0:3b093bd0819e 22 * See the License for the specific language governing permissions and
EnricoG 0:3b093bd0819e 23 * limitations under the License.
EnricoG 0:3b093bd0819e 24 *
EnricoG 0:3b093bd0819e 25 ******************************************************************************
EnricoG 0:3b093bd0819e 26 */
EnricoG 0:3b093bd0819e 27
EnricoG 0:3b093bd0819e 28 /* Includes ------------------------------------------------------------------*/
EnricoG 0:3b093bd0819e 29 #include "lib_TagType4.h"
EnricoG 0:3b093bd0819e 30
EnricoG 0:3b093bd0819e 31 /** @addtogroup NFC_libraries
EnricoG 0:3b093bd0819e 32 * @{
EnricoG 0:3b093bd0819e 33 * @brief <b>This is the library used to manage the content of the TAG (data)
EnricoG 0:3b093bd0819e 34 * But also the specific feature of the tag, for instance
EnricoG 0:3b093bd0819e 35 * password, gpo... </b>
EnricoG 0:3b093bd0819e 36 */
EnricoG 0:3b093bd0819e 37
EnricoG 0:3b093bd0819e 38
EnricoG 0:3b093bd0819e 39 /** @addtogroup libNFC_FORUM
EnricoG 0:3b093bd0819e 40 * @{
EnricoG 0:3b093bd0819e 41 * @brief This part of the library manage data which follow NFC forum organisation.
EnricoG 0:3b093bd0819e 42 */
EnricoG 0:3b093bd0819e 43
EnricoG 0:3b093bd0819e 44
EnricoG 0:3b093bd0819e 45 /**
EnricoG 0:3b093bd0819e 46 * @brief This buffer contains the data send/received by TAG
EnricoG 0:3b093bd0819e 47 */
EnricoG 0:3b093bd0819e 48 uint8_t NDEF_Buffer [NDEF_MAX_SIZE];
EnricoG 0:3b093bd0819e 49
EnricoG 0:3b093bd0819e 50 /**
EnricoG 0:3b093bd0819e 51 * @brief This structure contains the data of the CC file
EnricoG 0:3b093bd0819e 52 */
EnricoG 0:3b093bd0819e 53 sCCFileInfo CCFileStruct;
EnricoG 0:3b093bd0819e 54
EnricoG 0:3b093bd0819e 55 /**
EnricoG 0:3b093bd0819e 56 * @brief This structure contains the information encapsuled in the record header
EnricoG 0:3b093bd0819e 57 * with few more for SW purpose
EnricoG 0:3b093bd0819e 58 */
EnricoG 0:3b093bd0819e 59 sRecordInfo RecordStruct;
EnricoG 0:3b093bd0819e 60
EnricoG 0:3b093bd0819e 61 /** @defgroup libTT4_Private_Functions
EnricoG 0:3b093bd0819e 62 * @{
EnricoG 0:3b093bd0819e 63 */
EnricoG 0:3b093bd0819e 64
EnricoG 0:3b093bd0819e 65 /**
EnricoG 0:3b093bd0819e 66 * @}
EnricoG 0:3b093bd0819e 67 */
EnricoG 0:3b093bd0819e 68
EnricoG 0:3b093bd0819e 69
EnricoG 0:3b093bd0819e 70 /** @defgroup libTT4_Public_Functions
EnricoG 0:3b093bd0819e 71 * @{
EnricoG 0:3b093bd0819e 72 * @brief This file is used to access tag type 4.
EnricoG 0:3b093bd0819e 73 */
EnricoG 0:3b093bd0819e 74
EnricoG 0:3b093bd0819e 75 /**
EnricoG 0:3b093bd0819e 76 * @brief This fonction initialize Tag Type 4
EnricoG 0:3b093bd0819e 77 * @param None
EnricoG 0:3b093bd0819e 78 * @retval SUCCESS : Initialization done
EnricoG 0:3b093bd0819e 79 */
EnricoG 0:3b093bd0819e 80 uint16_t TT4_Init (void)
EnricoG 0:3b093bd0819e 81 {
EnricoG 0:3b093bd0819e 82 uint16_t status = SUCCESS;
EnricoG 0:3b093bd0819e 83 uint8_t CCBuffer[15];
EnricoG 0:3b093bd0819e 84 sCCFileInfo *pCCFile;
EnricoG 0:3b093bd0819e 85
EnricoG 0:3b093bd0819e 86 pCCFile = &CCFileStruct;
EnricoG 0:3b093bd0819e 87
EnricoG 0:3b093bd0819e 88 status = TagT4Init( CCBuffer, sizeof(CCBuffer));
EnricoG 0:3b093bd0819e 89
EnricoG 0:3b093bd0819e 90 if( status == SUCCESS)
EnricoG 0:3b093bd0819e 91 {
EnricoG 0:3b093bd0819e 92 pCCFile->NumberCCByte = (uint16_t) ((CCBuffer[0x00]<<8) | CCBuffer[0x01]);
EnricoG 0:3b093bd0819e 93 pCCFile->Version = CCBuffer[0x02];
EnricoG 0:3b093bd0819e 94 pCCFile->MaxReadByte = (uint16_t) ((CCBuffer[0x03]<<8) | CCBuffer[0x04]);
EnricoG 0:3b093bd0819e 95 pCCFile->MaxWriteByte = (uint16_t) ((CCBuffer[0x05]<<8) | CCBuffer[0x06]);
EnricoG 0:3b093bd0819e 96 pCCFile->TField = CCBuffer[0x07];
EnricoG 0:3b093bd0819e 97 pCCFile->LField = CCBuffer[0x08];
EnricoG 0:3b093bd0819e 98 pCCFile->FileID = (uint16_t) ((CCBuffer[0x09]<<8) | CCBuffer[0x0A]);
EnricoG 0:3b093bd0819e 99 pCCFile->NDEFFileMaxSize = (uint16_t) ((CCBuffer[0x0B]<<8) | CCBuffer[0x0C]);
EnricoG 0:3b093bd0819e 100 pCCFile->ReadAccess = CCBuffer[0x0D];
EnricoG 0:3b093bd0819e 101 pCCFile->WriteAccess = CCBuffer[0x0E];
EnricoG 0:3b093bd0819e 102 }
EnricoG 0:3b093bd0819e 103
EnricoG 0:3b093bd0819e 104 return status;
EnricoG 0:3b093bd0819e 105 }
EnricoG 0:3b093bd0819e 106
EnricoG 0:3b093bd0819e 107 /**
EnricoG 0:3b093bd0819e 108 * @brief This fonction read NDEF file
EnricoG 0:3b093bd0819e 109 * @param pNDEF : pointer on buffer to fill with NDEF data
EnricoG 0:3b093bd0819e 110 * @retval SUCCESS : NDEF file data have been retrieve
EnricoG 0:3b093bd0819e 111 * @retval ERROR : Not able to get NDEF file data
EnricoG 0:3b093bd0819e 112 */
EnricoG 0:3b093bd0819e 113 uint16_t TT4_ReadNDEF(uint8_t *pNDEF)
EnricoG 0:3b093bd0819e 114 {
EnricoG 0:3b093bd0819e 115 uint16_t status = ERROR;
EnricoG 0:3b093bd0819e 116 sCCFileInfo *pCCFile;
EnricoG 0:3b093bd0819e 117
EnricoG 0:3b093bd0819e 118 pCCFile = &CCFileStruct;
EnricoG 0:3b093bd0819e 119
EnricoG 0:3b093bd0819e 120 if(OpenNDEFSession(pCCFile->FileID, ASK_FOR_SESSION) == SUCCESS)
EnricoG 0:3b093bd0819e 121 {
EnricoG 0:3b093bd0819e 122 status = NDEF_ReadNDEF(pNDEF);
EnricoG 0:3b093bd0819e 123 CloseNDEFSession(pCCFile->FileID);
EnricoG 0:3b093bd0819e 124 }
EnricoG 0:3b093bd0819e 125
EnricoG 0:3b093bd0819e 126 return status;
EnricoG 0:3b093bd0819e 127 }
EnricoG 0:3b093bd0819e 128
EnricoG 0:3b093bd0819e 129 /**
EnricoG 0:3b093bd0819e 130 * @brief This fonction write NDEF file
EnricoG 0:3b093bd0819e 131 * @param pNDEF : pointer on buffer that contain the NDEF data
EnricoG 0:3b093bd0819e 132 * @retval SUCCESS : NDEF file data have been stored
EnricoG 0:3b093bd0819e 133 * @retval ERROR : Not able to store NDEF file
EnricoG 0:3b093bd0819e 134 */
EnricoG 0:3b093bd0819e 135 uint16_t TT4_WriteNDEF(uint8_t *pNDEF)
EnricoG 0:3b093bd0819e 136 {
EnricoG 0:3b093bd0819e 137 uint16_t status = ERROR;
EnricoG 0:3b093bd0819e 138 sCCFileInfo *pCCFile;
EnricoG 0:3b093bd0819e 139
EnricoG 0:3b093bd0819e 140 pCCFile = &CCFileStruct;
EnricoG 0:3b093bd0819e 141
EnricoG 0:3b093bd0819e 142 if(OpenNDEFSession(pCCFile->FileID, ASK_FOR_SESSION) == SUCCESS)
EnricoG 0:3b093bd0819e 143 {
EnricoG 0:3b093bd0819e 144 status = NDEF_WriteNDEF( pNDEF);
EnricoG 0:3b093bd0819e 145 CloseNDEFSession(pCCFile->FileID);
EnricoG 0:3b093bd0819e 146 }
EnricoG 0:3b093bd0819e 147
EnricoG 0:3b093bd0819e 148 return status;
EnricoG 0:3b093bd0819e 149 }
EnricoG 0:3b093bd0819e 150
EnricoG 0:3b093bd0819e 151 /**
EnricoG 0:3b093bd0819e 152 * @brief This fonction read NDEF file if NDEF is identified as URI
EnricoG 0:3b093bd0819e 153 * @param pURI : pointer on URI structure to fill with read data
EnricoG 0:3b093bd0819e 154 * @retval SUCCESS : URI structure has been updated
EnricoG 0:3b093bd0819e 155 * @retval ERROR : Not able to fill URI structure
EnricoG 0:3b093bd0819e 156 */
EnricoG 0:3b093bd0819e 157 uint16_t TT4_ReadURI(sURI_Info *pURI)
EnricoG 0:3b093bd0819e 158 {
EnricoG 0:3b093bd0819e 159 uint16_t status = ERROR;
EnricoG 0:3b093bd0819e 160 sCCFileInfo *pCCFile;
EnricoG 0:3b093bd0819e 161 sRecordInfo *pRecordStruct;
EnricoG 0:3b093bd0819e 162
EnricoG 0:3b093bd0819e 163 pCCFile = &CCFileStruct;
EnricoG 0:3b093bd0819e 164 pRecordStruct = &RecordStruct;
EnricoG 0:3b093bd0819e 165
EnricoG 0:3b093bd0819e 166
EnricoG 0:3b093bd0819e 167 if(OpenNDEFSession(pCCFile->FileID, ASK_FOR_SESSION) == SUCCESS)
EnricoG 0:3b093bd0819e 168 {
EnricoG 0:3b093bd0819e 169 if(NDEF_IdentifyNDEF( pRecordStruct, NDEF_Buffer) == SUCCESS)
EnricoG 0:3b093bd0819e 170 {
EnricoG 0:3b093bd0819e 171 status = NDEF_ReadURI(pRecordStruct, pURI);
EnricoG 0:3b093bd0819e 172 }
EnricoG 0:3b093bd0819e 173 CloseNDEFSession(pCCFile->FileID);
EnricoG 0:3b093bd0819e 174 }
EnricoG 0:3b093bd0819e 175
EnricoG 0:3b093bd0819e 176 return status;
EnricoG 0:3b093bd0819e 177 }
EnricoG 0:3b093bd0819e 178
EnricoG 0:3b093bd0819e 179 /**
EnricoG 0:3b093bd0819e 180 * @brief This fonction write NDEF file from data given in the URI structure
EnricoG 0:3b093bd0819e 181 * @param pURI : pointer on URI structure to prepare NDEF
EnricoG 0:3b093bd0819e 182 * @retval SUCCESS : NDEF URI stored
EnricoG 0:3b093bd0819e 183 * @retval ERROR : Not able to store NDEF URI
EnricoG 0:3b093bd0819e 184 */
EnricoG 0:3b093bd0819e 185 uint16_t TT4_WriteURI(sURI_Info *pURI)
EnricoG 0:3b093bd0819e 186 {
EnricoG 0:3b093bd0819e 187 uint16_t status = ERROR;
EnricoG 0:3b093bd0819e 188 sCCFileInfo *pCCFile;
EnricoG 0:3b093bd0819e 189
EnricoG 0:3b093bd0819e 190 pCCFile = &CCFileStruct;
EnricoG 0:3b093bd0819e 191
EnricoG 0:3b093bd0819e 192 if(OpenNDEFSession(pCCFile->FileID, ASK_FOR_SESSION) == SUCCESS)
EnricoG 0:3b093bd0819e 193 {
EnricoG 0:3b093bd0819e 194 status = NDEF_WriteURI ( pURI );
EnricoG 0:3b093bd0819e 195 CloseNDEFSession(pCCFile->FileID);
EnricoG 0:3b093bd0819e 196 }
EnricoG 0:3b093bd0819e 197
EnricoG 0:3b093bd0819e 198 return status;
EnricoG 0:3b093bd0819e 199 }
EnricoG 0:3b093bd0819e 200
EnricoG 0:3b093bd0819e 201 /**
EnricoG 0:3b093bd0819e 202 * @brief This fonction read NDEF file if NDEF is identified as SMS
EnricoG 0:3b093bd0819e 203 * @param pSMS : pointer on SMS structure to fill with read data
EnricoG 0:3b093bd0819e 204 * @retval SUCCESS : SMS structure has been updated
EnricoG 0:3b093bd0819e 205 * @retval ERROR : Not able to fill MS structure
EnricoG 0:3b093bd0819e 206 */
EnricoG 0:3b093bd0819e 207 uint16_t TT4_ReadSMS(sSMSInfo *pSMS)
EnricoG 0:3b093bd0819e 208 {
EnricoG 0:3b093bd0819e 209 uint16_t status = ERROR;
EnricoG 0:3b093bd0819e 210 sCCFileInfo *pCCFile;
EnricoG 0:3b093bd0819e 211 sRecordInfo *pRecordStruct;
EnricoG 0:3b093bd0819e 212
EnricoG 0:3b093bd0819e 213 pCCFile = &CCFileStruct;
EnricoG 0:3b093bd0819e 214 pRecordStruct = &RecordStruct;
EnricoG 0:3b093bd0819e 215
EnricoG 0:3b093bd0819e 216 if(OpenNDEFSession(pCCFile->FileID, ASK_FOR_SESSION) == SUCCESS)
EnricoG 0:3b093bd0819e 217 {
EnricoG 0:3b093bd0819e 218 if(NDEF_IdentifyNDEF( pRecordStruct, NDEF_Buffer) == SUCCESS)
EnricoG 0:3b093bd0819e 219 {
EnricoG 0:3b093bd0819e 220 status = NDEF_ReadSMS(pRecordStruct, pSMS);
EnricoG 0:3b093bd0819e 221 }
EnricoG 0:3b093bd0819e 222 CloseNDEFSession(pCCFile->FileID);
EnricoG 0:3b093bd0819e 223 }
EnricoG 0:3b093bd0819e 224
EnricoG 0:3b093bd0819e 225 return status;
EnricoG 0:3b093bd0819e 226 }
EnricoG 0:3b093bd0819e 227
EnricoG 0:3b093bd0819e 228 /**
EnricoG 0:3b093bd0819e 229 * @brief This fonction write NDEF file from data given in the SMS structure
EnricoG 0:3b093bd0819e 230 * @param pSMS : pointer on SMS structure to prepare NDEF
EnricoG 0:3b093bd0819e 231 * @retval SUCCESS : NDEF SMS stored
EnricoG 0:3b093bd0819e 232 * @retval ERROR : Not able to store NDEF SMS
EnricoG 0:3b093bd0819e 233 */
EnricoG 0:3b093bd0819e 234 uint16_t TT4_WriteSMS(sSMSInfo *pSMS)
EnricoG 0:3b093bd0819e 235 {
EnricoG 0:3b093bd0819e 236 uint16_t status = ERROR;
EnricoG 0:3b093bd0819e 237 sCCFileInfo *pCCFile;
EnricoG 0:3b093bd0819e 238
EnricoG 0:3b093bd0819e 239 pCCFile = &CCFileStruct;
EnricoG 0:3b093bd0819e 240
EnricoG 0:3b093bd0819e 241 if(OpenNDEFSession(pCCFile->FileID, ASK_FOR_SESSION) == SUCCESS)
EnricoG 0:3b093bd0819e 242 {
EnricoG 0:3b093bd0819e 243 status = NDEF_WriteSMS ( pSMS );
EnricoG 0:3b093bd0819e 244 CloseNDEFSession(pCCFile->FileID);
EnricoG 0:3b093bd0819e 245 }
EnricoG 0:3b093bd0819e 246
EnricoG 0:3b093bd0819e 247 return status;
EnricoG 0:3b093bd0819e 248 }
EnricoG 0:3b093bd0819e 249
EnricoG 0:3b093bd0819e 250 /**
EnricoG 0:3b093bd0819e 251 * @brief This fonction read NDEF file if NDEF is identified as eMail
EnricoG 0:3b093bd0819e 252 * @param pEmailStruct : pointer on eMail structure to fill with read data
EnricoG 0:3b093bd0819e 253 * @retval SUCCESS : eMail structure has been updated
EnricoG 0:3b093bd0819e 254 * @retval ERROR : Not able to fill eMail structure
EnricoG 0:3b093bd0819e 255 */
EnricoG 0:3b093bd0819e 256 uint16_t TT4_ReadEmail (sEmailInfo *pEmailStruct)
EnricoG 0:3b093bd0819e 257 {
EnricoG 0:3b093bd0819e 258 uint16_t status = ERROR;
EnricoG 0:3b093bd0819e 259 sCCFileInfo *pCCFile;
EnricoG 0:3b093bd0819e 260 sRecordInfo *pRecordStruct;
EnricoG 0:3b093bd0819e 261
EnricoG 0:3b093bd0819e 262 pCCFile = &CCFileStruct;
EnricoG 0:3b093bd0819e 263 pRecordStruct = &RecordStruct;
EnricoG 0:3b093bd0819e 264
EnricoG 0:3b093bd0819e 265
EnricoG 0:3b093bd0819e 266 if(OpenNDEFSession(pCCFile->FileID, ASK_FOR_SESSION) == SUCCESS)
EnricoG 0:3b093bd0819e 267 {
EnricoG 0:3b093bd0819e 268 if(NDEF_IdentifyNDEF( pRecordStruct, NDEF_Buffer) == SUCCESS)
EnricoG 0:3b093bd0819e 269 {
EnricoG 0:3b093bd0819e 270 status = NDEF_ReadEmail(pRecordStruct, pEmailStruct);
EnricoG 0:3b093bd0819e 271 }
EnricoG 0:3b093bd0819e 272 CloseNDEFSession(pCCFile->FileID);
EnricoG 0:3b093bd0819e 273 }
EnricoG 0:3b093bd0819e 274
EnricoG 0:3b093bd0819e 275 return status;
EnricoG 0:3b093bd0819e 276 }
EnricoG 0:3b093bd0819e 277
EnricoG 0:3b093bd0819e 278 /**
EnricoG 0:3b093bd0819e 279 * @brief This fonction write NDEF file from data given in the eMail structure
EnricoG 0:3b093bd0819e 280 * @param pEmailStruct : pointer on eMail structure to prepare NDEF
EnricoG 0:3b093bd0819e 281 * @retval SUCCESS : NDEF eMail stored
EnricoG 0:3b093bd0819e 282 * @retval ERROR : Not able to store NDEF eMail
EnricoG 0:3b093bd0819e 283 */
EnricoG 0:3b093bd0819e 284 uint16_t TT4_WriteEmail(sEmailInfo *pEmailStruct)
EnricoG 0:3b093bd0819e 285 {
EnricoG 0:3b093bd0819e 286 uint16_t status = ERROR;
EnricoG 0:3b093bd0819e 287 sCCFileInfo *pCCFile;
EnricoG 0:3b093bd0819e 288
EnricoG 0:3b093bd0819e 289 pCCFile = &CCFileStruct;
EnricoG 0:3b093bd0819e 290
EnricoG 0:3b093bd0819e 291 if(OpenNDEFSession(pCCFile->FileID, ASK_FOR_SESSION) == SUCCESS)
EnricoG 0:3b093bd0819e 292 {
EnricoG 0:3b093bd0819e 293 status = NDEF_WriteEmail ( pEmailStruct );
EnricoG 0:3b093bd0819e 294 CloseNDEFSession(pCCFile->FileID);
EnricoG 0:3b093bd0819e 295 }
EnricoG 0:3b093bd0819e 296
EnricoG 0:3b093bd0819e 297 return status;
EnricoG 0:3b093bd0819e 298 }
EnricoG 0:3b093bd0819e 299
EnricoG 0:3b093bd0819e 300 /**
EnricoG 0:3b093bd0819e 301 * @brief This fonction read NDEF file if NDEF is identified as Vcard
EnricoG 0:3b093bd0819e 302 * @param pVcard : pointer on Vcard structure to fill with read data
EnricoG 0:3b093bd0819e 303 * @retval SUCCESS : Vcard structure has been updated
EnricoG 0:3b093bd0819e 304 * @retval ERROR : Not able to fill Vcard structure
EnricoG 0:3b093bd0819e 305 */
EnricoG 0:3b093bd0819e 306 uint16_t TT4_ReadVcard(sVcardInfo *pVcard)
EnricoG 0:3b093bd0819e 307 {
EnricoG 0:3b093bd0819e 308 uint16_t status = ERROR;
EnricoG 0:3b093bd0819e 309 sCCFileInfo *pCCFile;
EnricoG 0:3b093bd0819e 310 sRecordInfo *pRecordStruct;
EnricoG 0:3b093bd0819e 311
EnricoG 0:3b093bd0819e 312 pCCFile = &CCFileStruct;
EnricoG 0:3b093bd0819e 313 pRecordStruct = &RecordStruct;
EnricoG 0:3b093bd0819e 314
EnricoG 0:3b093bd0819e 315
EnricoG 0:3b093bd0819e 316 if(OpenNDEFSession(pCCFile->FileID, ASK_FOR_SESSION) == SUCCESS)
EnricoG 0:3b093bd0819e 317 {
EnricoG 0:3b093bd0819e 318 if(NDEF_IdentifyNDEF( pRecordStruct, NDEF_Buffer) == SUCCESS)
EnricoG 0:3b093bd0819e 319 {
EnricoG 0:3b093bd0819e 320 status = NDEF_ReadVcard(pRecordStruct, pVcard);
EnricoG 0:3b093bd0819e 321 }
EnricoG 0:3b093bd0819e 322 CloseNDEFSession(pCCFile->FileID);
EnricoG 0:3b093bd0819e 323 }
EnricoG 0:3b093bd0819e 324
EnricoG 0:3b093bd0819e 325 return status;
EnricoG 0:3b093bd0819e 326 }
EnricoG 0:3b093bd0819e 327
EnricoG 0:3b093bd0819e 328 /**
EnricoG 0:3b093bd0819e 329 * @brief This fonction write NDEF file from data given in the Vcard structure
EnricoG 0:3b093bd0819e 330 * @param pVcard : pointer on Vcard structure to prepare NDEF
EnricoG 0:3b093bd0819e 331 * @retval SUCCESS : NDEF Vcard stored
EnricoG 0:3b093bd0819e 332 * @retval ERROR : Not able to store NDEF Vcard
EnricoG 0:3b093bd0819e 333 */
EnricoG 0:3b093bd0819e 334 uint16_t TT4_WriteVcard(sVcardInfo *pVcard)
EnricoG 0:3b093bd0819e 335 {
EnricoG 0:3b093bd0819e 336 uint16_t status = ERROR;
EnricoG 0:3b093bd0819e 337 sCCFileInfo *pCCFile;
EnricoG 0:3b093bd0819e 338
EnricoG 0:3b093bd0819e 339 pCCFile = &CCFileStruct;
EnricoG 0:3b093bd0819e 340
EnricoG 0:3b093bd0819e 341 if(OpenNDEFSession(pCCFile->FileID, ASK_FOR_SESSION) == SUCCESS)
EnricoG 0:3b093bd0819e 342 {
EnricoG 0:3b093bd0819e 343 status = NDEF_WriteVcard ( pVcard );
EnricoG 0:3b093bd0819e 344 CloseNDEFSession(pCCFile->FileID);
EnricoG 0:3b093bd0819e 345 }
EnricoG 0:3b093bd0819e 346
EnricoG 0:3b093bd0819e 347 return status;
EnricoG 0:3b093bd0819e 348 }
EnricoG 0:3b093bd0819e 349
EnricoG 0:3b093bd0819e 350 /**
EnricoG 0:3b093bd0819e 351 * @brief This fonction read NDEF file if NDEF is identified as geolocation information
EnricoG 0:3b093bd0819e 352 * @param pGeo : pointer on geo structure to fill with read data
EnricoG 0:3b093bd0819e 353 * @retval SUCCESS : geo structure has been updated
EnricoG 0:3b093bd0819e 354 * @retval ERROR : Not able to fill geo structure
EnricoG 0:3b093bd0819e 355 */
EnricoG 0:3b093bd0819e 356 uint16_t TT4_ReadGeo(sGeoInfo *pGeo)
EnricoG 0:3b093bd0819e 357 {
EnricoG 0:3b093bd0819e 358 uint16_t status = ERROR;
EnricoG 0:3b093bd0819e 359 sCCFileInfo *pCCFile;
EnricoG 0:3b093bd0819e 360 sRecordInfo *pRecordStruct;
EnricoG 0:3b093bd0819e 361
EnricoG 0:3b093bd0819e 362 pCCFile = &CCFileStruct;
EnricoG 0:3b093bd0819e 363 pRecordStruct = &RecordStruct;
EnricoG 0:3b093bd0819e 364
EnricoG 0:3b093bd0819e 365 if(OpenNDEFSession(pCCFile->FileID, ASK_FOR_SESSION) == SUCCESS)
EnricoG 0:3b093bd0819e 366 {
EnricoG 0:3b093bd0819e 367 if(NDEF_IdentifyNDEF( pRecordStruct, NDEF_Buffer) == SUCCESS)
EnricoG 0:3b093bd0819e 368 {
EnricoG 0:3b093bd0819e 369 status = NDEF_ReadGeo(pRecordStruct, pGeo);
EnricoG 0:3b093bd0819e 370 }
EnricoG 0:3b093bd0819e 371 CloseNDEFSession(pCCFile->FileID);
EnricoG 0:3b093bd0819e 372 }
EnricoG 0:3b093bd0819e 373
EnricoG 0:3b093bd0819e 374 return status;
EnricoG 0:3b093bd0819e 375 }
EnricoG 0:3b093bd0819e 376
EnricoG 0:3b093bd0819e 377 /**
EnricoG 0:3b093bd0819e 378 * @brief This fonction write NDEF file from data given in the geo structure
EnricoG 0:3b093bd0819e 379 * @param pGeo : pointer on geo structure to prepare NDEF
EnricoG 0:3b093bd0819e 380 * @retval SUCCESS : NDEF geo stored
EnricoG 0:3b093bd0819e 381 * @retval ERROR : Not able to store NDEF geo
EnricoG 0:3b093bd0819e 382 */
EnricoG 0:3b093bd0819e 383 uint16_t TT4_WriteGeo(sGeoInfo *pGeo)
EnricoG 0:3b093bd0819e 384 {
EnricoG 0:3b093bd0819e 385 uint16_t status = ERROR;
EnricoG 0:3b093bd0819e 386 sCCFileInfo *pCCFile;
EnricoG 0:3b093bd0819e 387
EnricoG 0:3b093bd0819e 388 pCCFile = &CCFileStruct;
EnricoG 0:3b093bd0819e 389
EnricoG 0:3b093bd0819e 390 if(OpenNDEFSession(pCCFile->FileID, ASK_FOR_SESSION) == SUCCESS)
EnricoG 0:3b093bd0819e 391 {
EnricoG 0:3b093bd0819e 392 status = NDEF_WriteGeo ( pGeo );
EnricoG 0:3b093bd0819e 393 CloseNDEFSession(pCCFile->FileID);
EnricoG 0:3b093bd0819e 394 }
EnricoG 0:3b093bd0819e 395
EnricoG 0:3b093bd0819e 396 return status;
EnricoG 0:3b093bd0819e 397 }
EnricoG 0:3b093bd0819e 398
EnricoG 0:3b093bd0819e 399 /**
EnricoG 0:3b093bd0819e 400 * @brief This fonction read NDEF file if NDEF is identified as expected private application
EnricoG 0:3b093bd0819e 401 * @param pMyAppStruct : pointer on structure to fill with read data
EnricoG 0:3b093bd0819e 402 * @retval SUCCESS : structure has been updated
EnricoG 0:3b093bd0819e 403 * @retval ERROR : Not able to fill structure
EnricoG 0:3b093bd0819e 404 */
EnricoG 0:3b093bd0819e 405 uint16_t TT4_ReadMyApp(sMyAppInfo *pMyAppStruct)
EnricoG 0:3b093bd0819e 406 {
EnricoG 0:3b093bd0819e 407 uint16_t status = ERROR;
EnricoG 0:3b093bd0819e 408 sCCFileInfo *pCCFile;
EnricoG 0:3b093bd0819e 409 sRecordInfo *pRecordStruct;
EnricoG 0:3b093bd0819e 410
EnricoG 0:3b093bd0819e 411 pCCFile = &CCFileStruct;
EnricoG 0:3b093bd0819e 412 pRecordStruct = &RecordStruct;
EnricoG 0:3b093bd0819e 413
EnricoG 0:3b093bd0819e 414
EnricoG 0:3b093bd0819e 415 if(OpenNDEFSession(pCCFile->FileID, TAKE_SESSION) == SUCCESS)
EnricoG 0:3b093bd0819e 416 {
EnricoG 0:3b093bd0819e 417 if(NDEF_IdentifyNDEF( pRecordStruct, NDEF_Buffer) == SUCCESS)
EnricoG 0:3b093bd0819e 418 {
EnricoG 0:3b093bd0819e 419 status = NDEF_ReadMyApp(pRecordStruct, pMyAppStruct);
EnricoG 0:3b093bd0819e 420 }
EnricoG 0:3b093bd0819e 421 CloseNDEFSession(pCCFile->FileID);
EnricoG 0:3b093bd0819e 422 }
EnricoG 0:3b093bd0819e 423
EnricoG 0:3b093bd0819e 424 return status;
EnricoG 0:3b093bd0819e 425 }
EnricoG 0:3b093bd0819e 426
EnricoG 0:3b093bd0819e 427 /**
EnricoG 0:3b093bd0819e 428 * @brief This fonction write NDEF file from data given in the structure
EnricoG 0:3b093bd0819e 429 * @param pMyAppStruct : pointer on structure to prepare NDEF
EnricoG 0:3b093bd0819e 430 * @retval SUCCESS : NDEF stored
EnricoG 0:3b093bd0819e 431 * @retval ERROR : Not able to store NDEF
EnricoG 0:3b093bd0819e 432 */
EnricoG 0:3b093bd0819e 433 uint16_t TT4_WriteMyApp(sMyAppInfo *pMyAppStruct)
EnricoG 0:3b093bd0819e 434 {
EnricoG 0:3b093bd0819e 435 uint16_t status = ERROR;
EnricoG 0:3b093bd0819e 436 sCCFileInfo *pCCFile;
EnricoG 0:3b093bd0819e 437
EnricoG 0:3b093bd0819e 438 pCCFile = &CCFileStruct;
EnricoG 0:3b093bd0819e 439
EnricoG 0:3b093bd0819e 440 if(OpenNDEFSession(pCCFile->FileID, ASK_FOR_SESSION) == SUCCESS)
EnricoG 0:3b093bd0819e 441 {
EnricoG 0:3b093bd0819e 442 status = NDEF_WriteMyApp ( pMyAppStruct );
EnricoG 0:3b093bd0819e 443 CloseNDEFSession(pCCFile->FileID);
EnricoG 0:3b093bd0819e 444 }
EnricoG 0:3b093bd0819e 445
EnricoG 0:3b093bd0819e 446 return status;
EnricoG 0:3b093bd0819e 447 }
EnricoG 0:3b093bd0819e 448
EnricoG 0:3b093bd0819e 449 /**
EnricoG 0:3b093bd0819e 450 * @brief This fonction add AAR (Android Application Record) in the tag
EnricoG 0:3b093bd0819e 451 * @param pAAR : pointer on structure that contain AAR information
EnricoG 0:3b093bd0819e 452 * @retval SUCCESS : AAR added
EnricoG 0:3b093bd0819e 453 * @retval ERROR : Not able to add AAR
EnricoG 0:3b093bd0819e 454 */
EnricoG 0:3b093bd0819e 455 uint16_t TT4_AddAAR(sAARInfo *pAAR)
EnricoG 0:3b093bd0819e 456 {
EnricoG 0:3b093bd0819e 457 uint16_t status = ERROR;
EnricoG 0:3b093bd0819e 458 sCCFileInfo *pCCFile;
EnricoG 0:3b093bd0819e 459
EnricoG 0:3b093bd0819e 460 pCCFile = &CCFileStruct;
EnricoG 0:3b093bd0819e 461
EnricoG 0:3b093bd0819e 462 if(OpenNDEFSession(pCCFile->FileID, ASK_FOR_SESSION) == SUCCESS)
EnricoG 0:3b093bd0819e 463 {
EnricoG 0:3b093bd0819e 464 status = NDEF_AddAAR ( pAAR );
EnricoG 0:3b093bd0819e 465 CloseNDEFSession(pCCFile->FileID);
EnricoG 0:3b093bd0819e 466 }
EnricoG 0:3b093bd0819e 467
EnricoG 0:3b093bd0819e 468 return status;
EnricoG 0:3b093bd0819e 469 }
EnricoG 0:3b093bd0819e 470
EnricoG 0:3b093bd0819e 471
EnricoG 0:3b093bd0819e 472 /**
EnricoG 0:3b093bd0819e 473 * @}
EnricoG 0:3b093bd0819e 474 */
EnricoG 0:3b093bd0819e 475
EnricoG 0:3b093bd0819e 476 /**
EnricoG 0:3b093bd0819e 477 * @}
EnricoG 0:3b093bd0819e 478 */
EnricoG 0:3b093bd0819e 479
EnricoG 0:3b093bd0819e 480 /**
EnricoG 0:3b093bd0819e 481 * @}
EnricoG 0:3b093bd0819e 482 */
EnricoG 0:3b093bd0819e 483
EnricoG 0:3b093bd0819e 484 /******************* (C) COPYRIGHT 2013 STMicroelectronics *****END OF FILE****/
EnricoG 0:3b093bd0819e 485