blob: 9dcb95ad5e71d9352a232fde6b0e31f1769bc70b [file] [log] [blame]
Nick Pelly5d9927b2010-09-23 12:47:58 -07001/*
2 * Copyright (C) 2010 NXP Semiconductors
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17/**
18 * \file phFriNfc_LlcpUtils.h
19 * \brief NFC LLCP utils
20 *
21 * Project: NFC-FRI
22 *
23 */
24
25#ifndef PHFRINFC_LLCPUTILS_H
26#define PHFRINFC_LLCPUTILS_H
27
28/*include files*/
29#include <phNfcHalTypes.h>
30#include <phNfcTypes.h>
31#include <phNfcStatus.h>
32#include <phFriNfc.h>
33#include <phFriNfc_Llcp.h>
34
35/**
36 * \name NFC Forum Logical Link Control Protocol Utils
37 *
38 * File: \ref phFriNfc_LlcpUtils.h
39 *
40 */
41
42/**
43 * UTIL_FIFO_BUFFER - A Cyclic FIFO buffer
44 * If pIn == pOut the buffer is empty.
45 */
46typedef struct UTIL_FIFO_BUFFER
47{
48 uint8_t *pBuffStart; /* Points to first valid location in buffer */
49 uint8_t *pBuffEnd; /* Points to last valid location in buffer */
50 volatile uint8_t *pIn; /* Points to 1 before where the next TU1 will enter buffer */
51 volatile uint8_t *pOut; /* Points to 1 before where the next TU1 will leave buffer */
52 volatile bool_t bFull; /* TRUE if buffer is full */
53}UTIL_FIFO_BUFFER, *P_UTIL_FIFO_BUFFER;
54
55
56/** \defgroup grp_fri_nfc_llcp NFC Forum Logical Link Control Protocol Component
57 *
58 * TODO
59 *
60 */
61
62NFCSTATUS phFriNfc_Llcp_DecodeTLV( phNfc_sData_t *psRawData,
63 uint32_t *pOffset,
64 uint8_t *pType,
65 phNfc_sData_t *psValueBuffer );
66
67NFCSTATUS phFriNfc_Llcp_EncodeTLV( phNfc_sData_t *psValueBuffer,
68 uint32_t *pOffset,
69 uint8_t type,
70 uint8_t length,
71 uint8_t *pValue);
72
Sunil Jogi7b187e72012-01-16 11:50:07 -080073NFCSTATUS phFriNfc_Llcp_AppendTLV( phNfc_sData_t *psValueBuffer,
74 uint32_t nTlvOffset,
75 uint32_t *pCurrentOffset,
76 uint8_t length,
77 uint8_t *pValue);
78
Jeff Hamiltone1c9fcf2010-11-01 15:01:42 -050079void phFriNfc_Llcp_EncodeMIUX(uint16_t pMiux,
80 uint8_t* pMiuxEncoded);
Nick Pelly5d9927b2010-09-23 12:47:58 -070081
82void phFriNfc_Llcp_EncodeRW(uint8_t *pRw);
83
84/**
85 * Initializes a Fifo Cyclic Buffer to point to some allocated memory.
86 */
87void phFriNfc_Llcp_CyclicFifoInit(P_UTIL_FIFO_BUFFER sUtilFifo,
88 const uint8_t *pBuffStart,
89 uint32_t buffLength);
90
91/**
92 * Clears the Fifo Cyclic Buffer - loosing any data that was in it.
93 */
94void phFriNfc_Llcp_CyclicFifoClear(P_UTIL_FIFO_BUFFER sUtilFifo);
95
96
97/**
98 * Attempts to write dataLength bytes to the specified Fifo Cyclic Buffer.
99 */
100uint32_t phFriNfc_Llcp_CyclicFifoWrite(P_UTIL_FIFO_BUFFER sUtilFifo,
101 uint8_t *pData,
102 uint32_t dataLength);
103
104/**
105 * Attempts to read dataLength bytes from the specified Fifo Cyclic Buffer.
106 */
107uint32_t phFriNfc_Llcp_CyclicFifoFifoRead(P_UTIL_FIFO_BUFFER sUtilFifo,
108 uint8_t *pBuffer,
109 uint32_t dataLength);
110
111/**
112 * Returns the number of bytes currently stored in Fifo Cyclic Buffer.
113 */
114uint32_t phFriNfc_Llcp_CyclicFifoUsage(P_UTIL_FIFO_BUFFER sUtilFifo);
115
116/**
117 * Returns the available room for writing in Fifo Cyclic Buffer.
118 */
119uint32_t phFriNfc_Llcp_CyclicFifoAvailable(P_UTIL_FIFO_BUFFER sUtilFifo);
120
121uint32_t phFriNfc_Llcp_Header2Buffer( phFriNfc_Llcp_sPacketHeader_t *psHeader,
122 uint8_t *pBuffer,
123 uint32_t nOffset );
124
125uint32_t phFriNfc_Llcp_Sequence2Buffer( phFriNfc_Llcp_sPacketSequence_t *psSequence,
126 uint8_t *pBuffer,
127 uint32_t nOffset );
128
129uint32_t phFriNfc_Llcp_Buffer2Header( uint8_t *pBuffer,
130 uint32_t nOffset,
131 phFriNfc_Llcp_sPacketHeader_t *psHeader );
132
133uint32_t phFriNfc_Llcp_Buffer2Sequence( uint8_t *pBuffer,
134 uint32_t nOffset,
135 phFriNfc_Llcp_sPacketSequence_t *psSequence );
136
137
138#endif /* PHFRINFC_LLCPUTILS_H */