NFC NDEF library
Dependents: Nucleo_NFC_Example I2C_NFC_Master Print_Entire_Nucleo_NFC01A1_Memory
Fork of lib_NDEF by
Diff: lib_TagType4.c
- Revision:
- 0:3b093bd0819e
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib_TagType4.c Mon Dec 15 19:41:36 2014 +0000 @@ -0,0 +1,485 @@ +/** + ****************************************************************************** + * @file lib_TagType4.c + * @author MMY Application Team + * @version V1.0.0 + * @date 20-November-2013 + * @brief This file help to manage TagType4. + ****************************************************************************** + * @attention + * + * <h2><center>© COPYRIGHT 2014 STMicroelectronics</center></h2> + * + * Licensed under MMY-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "lib_TagType4.h" + +/** @addtogroup NFC_libraries + * @{ + * @brief <b>This is the library used to manage the content of the TAG (data) + * But also the specific feature of the tag, for instance + * password, gpo... </b> + */ + + +/** @addtogroup libNFC_FORUM + * @{ + * @brief This part of the library manage data which follow NFC forum organisation. + */ + + +/** + * @brief This buffer contains the data send/received by TAG + */ +uint8_t NDEF_Buffer [NDEF_MAX_SIZE]; + +/** + * @brief This structure contains the data of the CC file + */ +sCCFileInfo CCFileStruct; + +/** + * @brief This structure contains the information encapsuled in the record header + * with few more for SW purpose + */ +sRecordInfo RecordStruct; + +/** @defgroup libTT4_Private_Functions + * @{ + */ + +/** + * @} + */ + + +/** @defgroup libTT4_Public_Functions + * @{ + * @brief This file is used to access tag type 4. + */ + +/** + * @brief This fonction initialize Tag Type 4 + * @param None + * @retval SUCCESS : Initialization done + */ +uint16_t TT4_Init (void) +{ + uint16_t status = SUCCESS; + uint8_t CCBuffer[15]; + sCCFileInfo *pCCFile; + + pCCFile = &CCFileStruct; + + status = TagT4Init( CCBuffer, sizeof(CCBuffer)); + + if( status == SUCCESS) + { + pCCFile->NumberCCByte = (uint16_t) ((CCBuffer[0x00]<<8) | CCBuffer[0x01]); + pCCFile->Version = CCBuffer[0x02]; + pCCFile->MaxReadByte = (uint16_t) ((CCBuffer[0x03]<<8) | CCBuffer[0x04]); + pCCFile->MaxWriteByte = (uint16_t) ((CCBuffer[0x05]<<8) | CCBuffer[0x06]); + pCCFile->TField = CCBuffer[0x07]; + pCCFile->LField = CCBuffer[0x08]; + pCCFile->FileID = (uint16_t) ((CCBuffer[0x09]<<8) | CCBuffer[0x0A]); + pCCFile->NDEFFileMaxSize = (uint16_t) ((CCBuffer[0x0B]<<8) | CCBuffer[0x0C]); + pCCFile->ReadAccess = CCBuffer[0x0D]; + pCCFile->WriteAccess = CCBuffer[0x0E]; + } + + return status; +} + +/** + * @brief This fonction read NDEF file + * @param pNDEF : pointer on buffer to fill with NDEF data + * @retval SUCCESS : NDEF file data have been retrieve + * @retval ERROR : Not able to get NDEF file data + */ +uint16_t TT4_ReadNDEF(uint8_t *pNDEF) +{ + uint16_t status = ERROR; + sCCFileInfo *pCCFile; + + pCCFile = &CCFileStruct; + + if(OpenNDEFSession(pCCFile->FileID, ASK_FOR_SESSION) == SUCCESS) + { + status = NDEF_ReadNDEF(pNDEF); + CloseNDEFSession(pCCFile->FileID); + } + + return status; +} + +/** + * @brief This fonction write NDEF file + * @param pNDEF : pointer on buffer that contain the NDEF data + * @retval SUCCESS : NDEF file data have been stored + * @retval ERROR : Not able to store NDEF file + */ +uint16_t TT4_WriteNDEF(uint8_t *pNDEF) +{ + uint16_t status = ERROR; + sCCFileInfo *pCCFile; + + pCCFile = &CCFileStruct; + + if(OpenNDEFSession(pCCFile->FileID, ASK_FOR_SESSION) == SUCCESS) + { + status = NDEF_WriteNDEF( pNDEF); + CloseNDEFSession(pCCFile->FileID); + } + + return status; +} + +/** + * @brief This fonction read NDEF file if NDEF is identified as URI + * @param pURI : pointer on URI structure to fill with read data + * @retval SUCCESS : URI structure has been updated + * @retval ERROR : Not able to fill URI structure + */ +uint16_t TT4_ReadURI(sURI_Info *pURI) +{ + uint16_t status = ERROR; + sCCFileInfo *pCCFile; + sRecordInfo *pRecordStruct; + + pCCFile = &CCFileStruct; + pRecordStruct = &RecordStruct; + + + if(OpenNDEFSession(pCCFile->FileID, ASK_FOR_SESSION) == SUCCESS) + { + if(NDEF_IdentifyNDEF( pRecordStruct, NDEF_Buffer) == SUCCESS) + { + status = NDEF_ReadURI(pRecordStruct, pURI); + } + CloseNDEFSession(pCCFile->FileID); + } + + return status; +} + +/** + * @brief This fonction write NDEF file from data given in the URI structure + * @param pURI : pointer on URI structure to prepare NDEF + * @retval SUCCESS : NDEF URI stored + * @retval ERROR : Not able to store NDEF URI + */ +uint16_t TT4_WriteURI(sURI_Info *pURI) +{ + uint16_t status = ERROR; + sCCFileInfo *pCCFile; + + pCCFile = &CCFileStruct; + + if(OpenNDEFSession(pCCFile->FileID, ASK_FOR_SESSION) == SUCCESS) + { + status = NDEF_WriteURI ( pURI ); + CloseNDEFSession(pCCFile->FileID); + } + + return status; +} + +/** + * @brief This fonction read NDEF file if NDEF is identified as SMS + * @param pSMS : pointer on SMS structure to fill with read data + * @retval SUCCESS : SMS structure has been updated + * @retval ERROR : Not able to fill MS structure + */ +uint16_t TT4_ReadSMS(sSMSInfo *pSMS) +{ + uint16_t status = ERROR; + sCCFileInfo *pCCFile; + sRecordInfo *pRecordStruct; + + pCCFile = &CCFileStruct; + pRecordStruct = &RecordStruct; + + if(OpenNDEFSession(pCCFile->FileID, ASK_FOR_SESSION) == SUCCESS) + { + if(NDEF_IdentifyNDEF( pRecordStruct, NDEF_Buffer) == SUCCESS) + { + status = NDEF_ReadSMS(pRecordStruct, pSMS); + } + CloseNDEFSession(pCCFile->FileID); + } + + return status; +} + +/** + * @brief This fonction write NDEF file from data given in the SMS structure + * @param pSMS : pointer on SMS structure to prepare NDEF + * @retval SUCCESS : NDEF SMS stored + * @retval ERROR : Not able to store NDEF SMS + */ +uint16_t TT4_WriteSMS(sSMSInfo *pSMS) +{ + uint16_t status = ERROR; + sCCFileInfo *pCCFile; + + pCCFile = &CCFileStruct; + + if(OpenNDEFSession(pCCFile->FileID, ASK_FOR_SESSION) == SUCCESS) + { + status = NDEF_WriteSMS ( pSMS ); + CloseNDEFSession(pCCFile->FileID); + } + + return status; +} + +/** + * @brief This fonction read NDEF file if NDEF is identified as eMail + * @param pEmailStruct : pointer on eMail structure to fill with read data + * @retval SUCCESS : eMail structure has been updated + * @retval ERROR : Not able to fill eMail structure + */ +uint16_t TT4_ReadEmail (sEmailInfo *pEmailStruct) +{ + uint16_t status = ERROR; + sCCFileInfo *pCCFile; + sRecordInfo *pRecordStruct; + + pCCFile = &CCFileStruct; + pRecordStruct = &RecordStruct; + + + if(OpenNDEFSession(pCCFile->FileID, ASK_FOR_SESSION) == SUCCESS) + { + if(NDEF_IdentifyNDEF( pRecordStruct, NDEF_Buffer) == SUCCESS) + { + status = NDEF_ReadEmail(pRecordStruct, pEmailStruct); + } + CloseNDEFSession(pCCFile->FileID); + } + + return status; +} + +/** + * @brief This fonction write NDEF file from data given in the eMail structure + * @param pEmailStruct : pointer on eMail structure to prepare NDEF + * @retval SUCCESS : NDEF eMail stored + * @retval ERROR : Not able to store NDEF eMail + */ +uint16_t TT4_WriteEmail(sEmailInfo *pEmailStruct) +{ + uint16_t status = ERROR; + sCCFileInfo *pCCFile; + + pCCFile = &CCFileStruct; + + if(OpenNDEFSession(pCCFile->FileID, ASK_FOR_SESSION) == SUCCESS) + { + status = NDEF_WriteEmail ( pEmailStruct ); + CloseNDEFSession(pCCFile->FileID); + } + + return status; +} + +/** + * @brief This fonction read NDEF file if NDEF is identified as Vcard + * @param pVcard : pointer on Vcard structure to fill with read data + * @retval SUCCESS : Vcard structure has been updated + * @retval ERROR : Not able to fill Vcard structure + */ +uint16_t TT4_ReadVcard(sVcardInfo *pVcard) +{ + uint16_t status = ERROR; + sCCFileInfo *pCCFile; + sRecordInfo *pRecordStruct; + + pCCFile = &CCFileStruct; + pRecordStruct = &RecordStruct; + + + if(OpenNDEFSession(pCCFile->FileID, ASK_FOR_SESSION) == SUCCESS) + { + if(NDEF_IdentifyNDEF( pRecordStruct, NDEF_Buffer) == SUCCESS) + { + status = NDEF_ReadVcard(pRecordStruct, pVcard); + } + CloseNDEFSession(pCCFile->FileID); + } + + return status; +} + +/** + * @brief This fonction write NDEF file from data given in the Vcard structure + * @param pVcard : pointer on Vcard structure to prepare NDEF + * @retval SUCCESS : NDEF Vcard stored + * @retval ERROR : Not able to store NDEF Vcard + */ +uint16_t TT4_WriteVcard(sVcardInfo *pVcard) +{ + uint16_t status = ERROR; + sCCFileInfo *pCCFile; + + pCCFile = &CCFileStruct; + + if(OpenNDEFSession(pCCFile->FileID, ASK_FOR_SESSION) == SUCCESS) + { + status = NDEF_WriteVcard ( pVcard ); + CloseNDEFSession(pCCFile->FileID); + } + + return status; +} + +/** + * @brief This fonction read NDEF file if NDEF is identified as geolocation information + * @param pGeo : pointer on geo structure to fill with read data + * @retval SUCCESS : geo structure has been updated + * @retval ERROR : Not able to fill geo structure + */ +uint16_t TT4_ReadGeo(sGeoInfo *pGeo) +{ + uint16_t status = ERROR; + sCCFileInfo *pCCFile; + sRecordInfo *pRecordStruct; + + pCCFile = &CCFileStruct; + pRecordStruct = &RecordStruct; + + if(OpenNDEFSession(pCCFile->FileID, ASK_FOR_SESSION) == SUCCESS) + { + if(NDEF_IdentifyNDEF( pRecordStruct, NDEF_Buffer) == SUCCESS) + { + status = NDEF_ReadGeo(pRecordStruct, pGeo); + } + CloseNDEFSession(pCCFile->FileID); + } + + return status; +} + +/** + * @brief This fonction write NDEF file from data given in the geo structure + * @param pGeo : pointer on geo structure to prepare NDEF + * @retval SUCCESS : NDEF geo stored + * @retval ERROR : Not able to store NDEF geo + */ +uint16_t TT4_WriteGeo(sGeoInfo *pGeo) +{ + uint16_t status = ERROR; + sCCFileInfo *pCCFile; + + pCCFile = &CCFileStruct; + + if(OpenNDEFSession(pCCFile->FileID, ASK_FOR_SESSION) == SUCCESS) + { + status = NDEF_WriteGeo ( pGeo ); + CloseNDEFSession(pCCFile->FileID); + } + + return status; +} + +/** + * @brief This fonction read NDEF file if NDEF is identified as expected private application + * @param pMyAppStruct : pointer on structure to fill with read data + * @retval SUCCESS : structure has been updated + * @retval ERROR : Not able to fill structure + */ +uint16_t TT4_ReadMyApp(sMyAppInfo *pMyAppStruct) +{ + uint16_t status = ERROR; + sCCFileInfo *pCCFile; + sRecordInfo *pRecordStruct; + + pCCFile = &CCFileStruct; + pRecordStruct = &RecordStruct; + + + if(OpenNDEFSession(pCCFile->FileID, TAKE_SESSION) == SUCCESS) + { + if(NDEF_IdentifyNDEF( pRecordStruct, NDEF_Buffer) == SUCCESS) + { + status = NDEF_ReadMyApp(pRecordStruct, pMyAppStruct); + } + CloseNDEFSession(pCCFile->FileID); + } + + return status; +} + +/** + * @brief This fonction write NDEF file from data given in the structure + * @param pMyAppStruct : pointer on structure to prepare NDEF + * @retval SUCCESS : NDEF stored + * @retval ERROR : Not able to store NDEF + */ +uint16_t TT4_WriteMyApp(sMyAppInfo *pMyAppStruct) +{ + uint16_t status = ERROR; + sCCFileInfo *pCCFile; + + pCCFile = &CCFileStruct; + + if(OpenNDEFSession(pCCFile->FileID, ASK_FOR_SESSION) == SUCCESS) + { + status = NDEF_WriteMyApp ( pMyAppStruct ); + CloseNDEFSession(pCCFile->FileID); + } + + return status; +} + +/** + * @brief This fonction add AAR (Android Application Record) in the tag + * @param pAAR : pointer on structure that contain AAR information + * @retval SUCCESS : AAR added + * @retval ERROR : Not able to add AAR + */ +uint16_t TT4_AddAAR(sAARInfo *pAAR) +{ + uint16_t status = ERROR; + sCCFileInfo *pCCFile; + + pCCFile = &CCFileStruct; + + if(OpenNDEFSession(pCCFile->FileID, ASK_FOR_SESSION) == SUCCESS) + { + status = NDEF_AddAAR ( pAAR ); + CloseNDEFSession(pCCFile->FileID); + } + + return status; +} + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/******************* (C) COPYRIGHT 2013 STMicroelectronics *****END OF FILE****/ +