/* * Copyright (C) 2010 NXP Semiconductors * * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 * * 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. */ /** * \file phFriNfc_LlcpUtils.h * \brief NFC LLCP utils * * Project: NFC-FRI * */ #ifndef PHFRINFC_LLCPUTILS_H #define PHFRINFC_LLCPUTILS_H /*include files*/ #include <phNfcHalTypes.h> #include <phNfcTypes.h> #include <phNfcStatus.h> #include <phFriNfc.h> #include <phFriNfc_Llcp.h> /** * \name NFC Forum Logical Link Control Protocol Utils * * File: \ref phFriNfc_LlcpUtils.h * */ /** * UTIL_FIFO_BUFFER - A Cyclic FIFO buffer * If pIn == pOut the buffer is empty. */ typedef struct UTIL_FIFO_BUFFER { uint8_t *pBuffStart; /* Points to first valid location in buffer */ uint8_t *pBuffEnd; /* Points to last valid location in buffer */ volatile uint8_t *pIn; /* Points to 1 before where the next TU1 will enter buffer */ volatile uint8_t *pOut; /* Points to 1 before where the next TU1 will leave buffer */ volatile bool_t bFull; /* TRUE if buffer is full */ }UTIL_FIFO_BUFFER, *P_UTIL_FIFO_BUFFER; /** \defgroup grp_fri_nfc_llcp NFC Forum Logical Link Control Protocol Component * * TODO * */ NFCSTATUS phFriNfc_Llcp_DecodeTLV( phNfc_sData_t *psRawData, uint32_t *pOffset, uint8_t *pType, phNfc_sData_t *psValueBuffer ); NFCSTATUS phFriNfc_Llcp_EncodeTLV( phNfc_sData_t *psValueBuffer, uint32_t *pOffset, uint8_t type, uint8_t length, uint8_t *pValue); NFCSTATUS phFriNfc_Llcp_AppendTLV( phNfc_sData_t *psValueBuffer, uint32_t nTlvOffset, uint32_t *pCurrentOffset, uint8_t length, uint8_t *pValue); void phFriNfc_Llcp_EncodeMIUX(uint16_t pMiux, uint8_t* pMiuxEncoded); void phFriNfc_Llcp_EncodeRW(uint8_t *pRw); /** * Initializes a Fifo Cyclic Buffer to point to some allocated memory. */ void phFriNfc_Llcp_CyclicFifoInit(P_UTIL_FIFO_BUFFER sUtilFifo, const uint8_t *pBuffStart, uint32_t buffLength); /** * Clears the Fifo Cyclic Buffer - loosing any data that was in it. */ void phFriNfc_Llcp_CyclicFifoClear(P_UTIL_FIFO_BUFFER sUtilFifo); /** * Attempts to write dataLength bytes to the specified Fifo Cyclic Buffer. */ uint32_t phFriNfc_Llcp_CyclicFifoWrite(P_UTIL_FIFO_BUFFER sUtilFifo, uint8_t *pData, uint32_t dataLength); /** * Attempts to read dataLength bytes from the specified Fifo Cyclic Buffer. */ uint32_t phFriNfc_Llcp_CyclicFifoFifoRead(P_UTIL_FIFO_BUFFER sUtilFifo, uint8_t *pBuffer, uint32_t dataLength); /** * Returns the number of bytes currently stored in Fifo Cyclic Buffer. */ uint32_t phFriNfc_Llcp_CyclicFifoUsage(P_UTIL_FIFO_BUFFER sUtilFifo); /** * Returns the available room for writing in Fifo Cyclic Buffer. */ uint32_t phFriNfc_Llcp_CyclicFifoAvailable(P_UTIL_FIFO_BUFFER sUtilFifo); uint32_t phFriNfc_Llcp_Header2Buffer( phFriNfc_Llcp_sPacketHeader_t *psHeader, uint8_t *pBuffer, uint32_t nOffset ); uint32_t phFriNfc_Llcp_Sequence2Buffer( phFriNfc_Llcp_sPacketSequence_t *psSequence, uint8_t *pBuffer, uint32_t nOffset ); uint32_t phFriNfc_Llcp_Buffer2Header( uint8_t *pBuffer, uint32_t nOffset, phFriNfc_Llcp_sPacketHeader_t *psHeader ); uint32_t phFriNfc_Llcp_Buffer2Sequence( uint8_t *pBuffer, uint32_t nOffset, phFriNfc_Llcp_sPacketSequence_t *psSequence ); #endif /* PHFRINFC_LLCPUTILS_H */