1 /*
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  */
46 typedef 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 
62 NFCSTATUS phFriNfc_Llcp_DecodeTLV( phNfc_sData_t  *psRawData,
63                                    uint32_t       *pOffset,
64                                    uint8_t        *pType,
65                                    phNfc_sData_t  *psValueBuffer );
66 
67 NFCSTATUS phFriNfc_Llcp_EncodeTLV( phNfc_sData_t  *psValueBuffer,
68                                    uint32_t       *pOffset,
69                                    uint8_t        type,
70                                    uint8_t        length,
71                                    uint8_t        *pValue);
72 
73 NFCSTATUS phFriNfc_Llcp_AppendTLV( phNfc_sData_t  *psValueBuffer,
74                                    uint32_t       nTlvOffset,
75                                    uint32_t       *pCurrentOffset,
76                                    uint8_t        length,
77                                    uint8_t        *pValue);
78 
79 void phFriNfc_Llcp_EncodeMIUX(uint16_t pMiux,
80                               uint8_t* pMiuxEncoded);
81 
82 void phFriNfc_Llcp_EncodeRW(uint8_t *pRw);
83 
84 /**
85  * Initializes a Fifo Cyclic Buffer to point to some allocated memory.
86  */
87 void 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  */
94 void phFriNfc_Llcp_CyclicFifoClear(P_UTIL_FIFO_BUFFER sUtilFifo);
95 
96 
97 /**
98  * Attempts to write dataLength bytes to the specified Fifo Cyclic Buffer.
99  */
100 uint32_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  */
107 uint32_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  */
114 uint32_t phFriNfc_Llcp_CyclicFifoUsage(P_UTIL_FIFO_BUFFER sUtilFifo);
115 
116 /**
117  * Returns the available room for writing in Fifo Cyclic Buffer.
118  */
119 uint32_t phFriNfc_Llcp_CyclicFifoAvailable(P_UTIL_FIFO_BUFFER sUtilFifo);
120 
121 uint32_t phFriNfc_Llcp_Header2Buffer( phFriNfc_Llcp_sPacketHeader_t *psHeader,
122                                       uint8_t *pBuffer,
123                                       uint32_t nOffset );
124 
125 uint32_t phFriNfc_Llcp_Sequence2Buffer( phFriNfc_Llcp_sPacketSequence_t *psSequence,
126                                         uint8_t *pBuffer,
127                                         uint32_t nOffset );
128 
129 uint32_t phFriNfc_Llcp_Buffer2Header( uint8_t *pBuffer,
130                                       uint32_t nOffset,
131                                       phFriNfc_Llcp_sPacketHeader_t *psHeader );
132 
133 uint32_t phFriNfc_Llcp_Buffer2Sequence( uint8_t *pBuffer,
134                                         uint32_t nOffset,
135                                         phFriNfc_Llcp_sPacketSequence_t *psSequence );
136 
137 
138 #endif /* PHFRINFC_LLCPUTILS_H */
139