libNDEF library for the STMicroelectronics X-NUCLEO-NFC04A1
Dependents: mbed-os-nfc04a1 Wiagro-Lanza34-XDot
Diff: lib_NDEF_MyApp.cpp
- Revision:
- 0:de13951f30f6
diff -r 000000000000 -r de13951f30f6 lib_NDEF_MyApp.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib_NDEF_MyApp.cpp Thu Nov 14 10:34:11 2019 +0000 @@ -0,0 +1,277 @@ +/** + ****************************************************************************** + * @file lib_NDEF_MyApp.c + * @author MMY Application Team + * @version $Revision: 2762 $ + * @date $Date: 2016-08-10 16:40:40 +0200 (Wed, 10 Aug 2016) $ + * @brief This file help to manage the NDEF file of a private application. + ****************************************************************************** + * @attention + * + * <h2><center>© COPYRIGHT 2015 STMicroelectronics</center></h2> + * + * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (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/myliberty + * + * 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, + * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "lib_NDEF_MyApp.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, gpio... </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 + */ +extern uint8_t NDEF_Buffer []; + +/** @defgroup libMyApp_Private_Functions + * @{ + */ + +static void NDEF_Extract_M24SRDiscoveryApp_Input( sRecordInfo_t *pRecordStruct, sMyAppInfo *pMyAppStruct ); + +/** + * @brief This function read the NDEF file and store application data in a structure. + * @param pRecordStruct : Pointer on the record structure. + * @param pMyAppStruct : pointer on the structure to fill. + */ +static void NDEF_Extract_M24SRDiscoveryApp_Input( sRecordInfo_t *pRecordStruct, sMyAppInfo *pMyAppStruct ) +{ + uint8_t* pPayload; + uint8_t* pLook4Word; + uint16_t BackGroundColor, FontColor; + uint8_t i; + + /* Read record header */ + pPayload = (uint8_t*)(pRecordStruct->PayloadBufferAdd); + + /* initialize struct in case not matching found */ + for( i = 0; i < 8; i++ ) + { + /* Set the Back Color */ + pMyAppStruct->LineX[i].BackGroundColor = 0xFFFF; + /* Set the Text Color */ + pMyAppStruct->LineX[i].FontColor = 0x0000; + /* Set the line number */ + pMyAppStruct->LineX[i].LineNb = i + 1; + /* Set the line content */ + memcpy( pMyAppStruct->LineX[i].String, " ", 20 ); + } + + pLook4Word = pPayload; + + for( i = 0; i < 4; i++ ) + { + pMyAppStruct->LedBlinkConf.LedConf[i] = *pLook4Word; + pLook4Word++; + } + pMyAppStruct->LedBlinkConf.Speed = *pLook4Word; + pLook4Word++; + + for( i = 0; i < 8; i++ ) + { + /* Set the line number */ + pMyAppStruct->LineX[i].LineNb = *pLook4Word; + pLook4Word++; + /* Set the Back Color */ + BackGroundColor = (uint16_t)(*pLook4Word << 8); + BackGroundColor = BackGroundColor | (uint16_t)(*++pLook4Word ); + pMyAppStruct->LineX[i].BackGroundColor = BackGroundColor; + pLook4Word++; + /* Set the Text Color */ + FontColor = (uint16_t)(*pLook4Word << 8); + FontColor = FontColor | (uint16_t)(*++pLook4Word); + pMyAppStruct->LineX[i].FontColor = FontColor; + pLook4Word++; + /* Set the line content */ + memcpy( pMyAppStruct->LineX[i].String, (char*)pLook4Word, 20 ); + pLook4Word += 20; + } + +} + +/** + * @} + */ + +/** @defgroup libMyApp_Public_Functions + * @{ + * @brief This file is used to manage proprietary NDEF (stored or loaded in tag) + */ + +/** + * @brief This function read NDEF and retrieve Application information if any. + * @param pRecordStruct : Pointer on the record structure. + * @param pMyAppStruct : pointer on the structure to fill. + * @retval NDEF_OK : NDEF file data read in the tag. + * @retval NDEF_ERROR : not able to read NDEF in tag. + */ +uint16_t NDEF_ReadMyApp( sRecordInfo_t *pRecordStruct, sMyAppInfo *pMyAppStruct ) +{ + uint16_t status = NDEF_ERROR; + + if( pRecordStruct->NDEF_Type == M24SR_DISCOVERY_APP_TYPE ) + { + NDEF_Extract_M24SRDiscoveryApp_Input( pRecordStruct, pMyAppStruct ); + status = NDEF_OK; + } + else + { + status = NDEF_ERROR; + } + + return status; +} + +/** + * @brief This function write the NDEF file with the Application data given in the structure. + * @brief Only used for debug purpose in this firmware version. + * @param pMyAppStruct : pointer on structure that contain the application information. + * @retval NDEF_OK : NDEF file data written in the tag. + * @retval NDEF_ERROR : not able to store NDEF in tag. + * @retval NDEF_ERROR_MEMORY_INTERNAL : Cannot write to tag. + * @retval NDEF_ERROR_NOT_FORMATED : CCFile data not supported or not present. + * @retval NDEF_ERROR_MEMORY_TAG : Size not compatible with memory. + * @retval NDEF_ERROR_LOCKED : Tag locked, cannot be write. + */ +uint16_t NDEF_WriteMyApp( sMyAppInfo *pMyAppStruct, I2C * mi2cChannel ) +{ + uint16_t status = NDEF_ERROR; + uint16_t DataSize; + uint32_t PayloadSize; + uint8_t i; + uint8_t* pPayload; + + +/* External Type Record Header */ +/************************************/ +/* 7 | 6 | 5 | 4 | 3 | 2 1 0 */ +/*----------------------------------*/ +/* MB ME CF SR IL TNF */ /* <---- IL=0, CF=0 and SR=1 TNF=4 NFC Forum external type*/ +/*----------------------------------*/ +/* TYPE LENGTH */ +/*----------------------------------*/ +/* PAYLOAD LENGTH 3 */ /* <---- Not Used */ +/*----------------------------------*/ +/* PAYLOAD LENGTH 2 */ /* <---- Not Used */ +/*----------------------------------*/ +/* PAYLOAD LENGTH 1 */ /* <---- Not Used */ +/*----------------------------------*/ +/* PAYLOAD LENGTH 0 */ /* The payload will always be 5 + 25*8=205 bytes for this application */ +/*----------------------------------*/ +/* ID LENGTH */ /* <---- Not Used */ +/*----------------------------------*/ +/* TYPE */ /* st.com:m24sr_discovery_democtrl */ +/*----------------------------------*/ +/* ID */ /* <---- Not Used */ +/************************************/ + + + /* fill URI record header */ + NDEF_Buffer[0] = 0xD4; /* Record Flag */ + NDEF_Buffer[1] = M24SR_DISCOVERY_APP_STRING_LENGTH; + NDEF_Buffer[2] = 0x00; /* Will be filled at the end when payload size is known */ + + memcpy( &NDEF_Buffer[3], M24SR_DISCOVERY_APP_STRING, M24SR_DISCOVERY_APP_STRING_LENGTH ); + + pPayload = &NDEF_Buffer[ 3 + M24SR_DISCOVERY_APP_STRING_LENGTH]; + PayloadSize = 0; + + /**************************************************************/ + /* BLINK CONFIG data */ + + /* led 1 blinking */ + *pPayload = 0x03; + pPayload++; + /* led 2 blinking */ + *pPayload = 0x02; + pPayload++; + /* led 3 blinking */ + *pPayload = 0x02; + pPayload++; + /* led 4 blinking */ + *pPayload = 0x03; + pPayload++; + /* speed */ + *pPayload = 0x03; + pPayload++; + + PayloadSize += 5; + + /**************************************************************/ + + /**************************************************************/ + /* SCREEN config data */ + for( i = 0; i < 8; i++ ) + { + /* Line number */ + *pPayload = (uint8_t)(i + 1); + pPayload++; + /* Background color */ + *pPayload = 0xFF - (0xFF/i); + pPayload++; + *pPayload = 0xFF - (0xFF/i); + pPayload++; + /* Font Color */ + *pPayload = 0xFF/i; + pPayload++; + *pPayload = 0xFF/i; + pPayload++; + /* String */ + memcpy( pPayload, "ABCDEFGHIJKLMNOPQRST", 20 ); + pPayload += 20; + + PayloadSize += 25; + + } + + NDEF_Buffer[2] = PayloadSize & 0x000000FF; + + DataSize = PayloadSize + 5 + M24SR_DISCOVERY_APP_STRING_LENGTH; + + /* Write NDEF */ + status = NfcTag_WriteNDEF( DataSize, NDEF_Buffer, mi2cChannel ); + + + return status; +} + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/******************* (C) COPYRIGHT 2015 STMicroelectronics *****END OF FILE****/