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/**
19 * \file  phFriNfc_LlcpMac.h
20 * \brief NFC LLCP MAC Mappings For Different RF Technologies.
21 *
22 * Project: NFC-FRI
23 *
24 */
25
26#ifndef PHFRINFC_LLCPMAC_H
27#define PHFRINFC_LLCPMAC_H
28
29
30/*include files*/
31#include <phNfcTypes.h>
32#include <phNfcLlcpTypes.h>
33#include <phNfcStatus.h>
34#include <phFriNfc.h>
35
36#include <phFriNfc_OvrHal.h>
37
38/**
39 * \name LLCP MAC Mapping
40 *
41 * File: \ref phFriNfc_LlcpMac.h
42 *
43 */
44
45
46/** \defgroup grp_fri_nfc_llcp_mac LLCP MAC Mapping Component
47 *
48 *  This component implements the different MAC mapping for a Logical Link Control Protocol communication,
49 *  as defined by the NFC Forum LLCP specifications.\n
50 *  The MAC component handles the mapping for the different technologies supported by LLCP
51 *..This component provides an API to the upper layer with the following features:\n\n
52 *  - Reset the MAC mapping component
53 *      - \ref phFriNfc_LlcpMac_ChkLlcp
54 *      .
55 *  - Check the LLCP Compliancy
56 *      - \ref phFriNfc_LlcpMac_ChkLlcp
57 *      .
58 *  - Activate the LLCP link
59 *      - \ref phFriNfc_LlcpMac_Activate
60 *      .
61 *  - Deactivate the LLCP link
62 *      - \ref phFriNfc_LlcpMac_Deactivate
63 *      .
64 *  - Register the MAC component Interface with a specific technologie (NFCIP/ISO14443)
65 *      - \ref phFriNfc_LlcpMac_Register
66 *      .
67 *  - Send packets through the LLCP link
68 *      - \ref phFriNfc_LlcpMac_Send
69 *      .
70  *  - Receive packets through the LLCP link
71 *      - \ref phFriNfc_LlcpMac_Receive
72 *
73 */
74
75/**
76 * \ingroup grp_fri_nfc_llcp_mac
77 * \brief Declaration of a MAC type
78 */
79struct phFriNfc_LlcpMac;
80typedef struct phFriNfc_LlcpMac phFriNfc_LlcpMac_t;
81
82/**
83 *  \ingroup grp_fri_nfc_llcp_mac
84 *
85 */
86/*========== ENUMERATES ===========*/
87
88/* Enum reperesents the different MAC mapping*/
89typedef enum phFriNfc_LlcpMac_eType
90{
91   phFriNfc_LlcpMac_eTypeNfcip,
92   phFriNfc_LlcpMac_eTypeIso14443
93}phFriNfc_LlcpMac_eType_t;
94
95/* Enum reperesents the different Peer type for a LLCP communication*/
96typedef enum phFriNfc_LlcpMac_ePeerType
97{
98   phFriNfc_LlcpMac_ePeerTypeInitiator,
99   phFriNfc_LlcpMac_ePeerTypeTarget
100}phFriNfc_LlcpMac_ePeerType_t;
101
102
103
104
105
106
107/*========== CALLBACKS ===========*/
108
109typedef void (*phFriNfc_LlcpMac_Chk_CB_t) (void        *pContext,
110                                           NFCSTATUS   status);
111
112typedef void (*phFriNfc_LlcpMac_LinkStatus_CB_t) (void                             *pContext,
113                                                  phFriNfc_LlcpMac_eLinkStatus_t   eLinkStatus,
114                                                  phNfc_sData_t                    *psData,
115                                                  phFriNfc_LlcpMac_ePeerType_t     PeerRemoteDevType);
116
117typedef void (*phFriNfc_LlcpMac_Send_CB_t) (void            *pContext,
118                                            NFCSTATUS       status);
119
120
121typedef void (*phFriNfc_LlcpMac_Reveive_CB_t) (void               *pContext,
122                                               NFCSTATUS          status,
123                                               phNfc_sData_t      *psData);
124
125
126/*========== FUNCTIONS TYPES ===========*/
127
128typedef NFCSTATUS (*pphFriNfcLlpcMac_Chk_t) ( phFriNfc_LlcpMac_t               *LlcpMac,
129                                              phFriNfc_LlcpMac_Chk_CB_t        ChkLlcpMac_Cb,
130                                              void                             *pContext);
131
132typedef NFCSTATUS (*pphFriNfcLlpcMac_Activate_t) (phFriNfc_LlcpMac_t                   *LlcpMac);
133
134typedef NFCSTATUS (*pphFriNfcLlpcMac_Deactivate_t) (phFriNfc_LlcpMac_t                 *LlcpMac);
135
136typedef NFCSTATUS (*pphFriNfcLlpcMac_Send_t) (phFriNfc_LlcpMac_t               *LlcpMac,
137                                              phNfc_sData_t                    *psData,
138                                              phFriNfc_LlcpMac_Send_CB_t       LlcpMacSend_Cb,
139                                              void                             *pContext);
140
141typedef NFCSTATUS (*pphFriNfcLlpcMac_Receive_t) (phFriNfc_LlcpMac_t               *LlcpMac,
142                                                 phNfc_sData_t                    *psData,
143                                                 phFriNfc_LlcpMac_Reveive_CB_t    LlcpMacReceive_Cb,
144                                                 void                             *pContext);
145
146/*========== STRUCTURES ===========*/
147
148/**
149 * \ingroup grp_fri_nfc_llcp_mac
150 * \brief Generic Interface structure with the Lower Layer
151 */
152typedef struct phFriNfc_LlcpMac_Interface
153{
154   pphFriNfcLlpcMac_Chk_t              chk;
155   pphFriNfcLlpcMac_Activate_t         activate;
156   pphFriNfcLlpcMac_Deactivate_t       deactivate;
157   pphFriNfcLlpcMac_Send_t             send;
158   pphFriNfcLlpcMac_Receive_t          receive;
159} phFriNfc_LlcpMac_Interface_t;
160
161/**
162 * \ingroup grp_fri_nfc_llcp_mac
163 * \brief Definition of the MAC type
164 */
165struct phFriNfc_LlcpMac
166{
167   phFriNfc_LlcpMac_eLinkStatus_t      LinkState;
168   phHal_sRemoteDevInformation_t       *psRemoteDevInfo;
169   phFriNfc_LlcpMac_LinkStatus_CB_t    LinkStatus_Cb;
170   void                                *LinkStatus_Context;
171   phFriNfc_LlcpMac_Interface_t        LlcpMacInterface;
172   phFriNfc_LlcpMac_ePeerType_t        PeerRemoteDevType;
173   phFriNfc_LlcpMac_eType_t            MacType;
174
175   /**<\internal Holds the completion routine informations of the Map Layer*/
176   phFriNfc_CplRt_t                   MacCompletionInfo;
177   void                               *LowerDevice;
178   phFriNfc_LlcpMac_Send_CB_t         MacSend_Cb;
179   void                               *MacSend_Context;
180   phFriNfc_LlcpMac_Reveive_CB_t      MacReceive_Cb;
181   void                               *MacReceive_Context;
182   phNfc_sData_t                      *psReceiveBuffer;
183   phNfc_sData_t                      *psSendBuffer;
184   phNfc_sData_t                      sConfigParam;
185   uint8_t                            RecvPending;
186   uint8_t                            SendPending;
187   uint8_t                            RecvStatus;
188   phHal_uCmdList_t                   Cmd;
189   phHal_sDepAdditionalInfo_t         psDepAdditionalInfo;
190} ;
191
192
193/*
194################################################################################
195********************** MAC Interface Function Prototype  ***********************
196################################################################################
197*/
198
199/**
200 * \ingroup grp_fri_nfc_llcp_mac
201 * \brief
202 */
203NFCSTATUS phFriNfc_LlcpMac_Reset (phFriNfc_LlcpMac_t                 *LlcpMac,
204                                  void                               *LowerDevice,
205                                  phFriNfc_LlcpMac_LinkStatus_CB_t   LinkStatus_Cb,
206                                  void                               *pContext);
207/**
208 * \ingroup grp_fri_nfc_llcp_mac
209 * \brief
210 */
211NFCSTATUS phFriNfc_LlcpMac_ChkLlcp (phFriNfc_LlcpMac_t                  *LlcpMac,
212                                    phHal_sRemoteDevInformation_t       *psRemoteDevInfo,
213                                    phFriNfc_LlcpMac_Chk_CB_t           ChkLlcpMac_Cb,
214                                    void                                *pContext);
215
216/**
217 * \ingroup grp_fri_nfc_llcp_mac
218 * \brief
219 */
220NFCSTATUS phFriNfc_LlcpMac_Activate (phFriNfc_LlcpMac_t                   *LlcpMac);
221
222/**
223 * \ingroup grp_fri_nfc_llcp_mac
224 * \brief
225 */
226NFCSTATUS phFriNfc_LlcpMac_Deactivate (phFriNfc_LlcpMac_t                 *LlcpMac);
227
228/**
229 * \ingroup grp_fri_nfc_llcp_mac
230 * \brief
231 */
232NFCSTATUS phFriNfc_LlcpMac_Send (phFriNfc_LlcpMac_t               *LlcpMac,
233                                 phNfc_sData_t                    *psData,
234                                 phFriNfc_LlcpMac_Send_CB_t       LlcpMacSend_Cb,
235                                 void                             *pContext);
236
237/**
238 * \ingroup grp_fri_nfc_llcp_mac
239 * \brief
240 */
241NFCSTATUS phFriNfc_LlcpMac_Receive (phFriNfc_LlcpMac_t               *LlcpMac,
242                                    phNfc_sData_t                    *psData,
243                                    phFriNfc_LlcpMac_Reveive_CB_t    ReceiveLlcpMac_Cb,
244                                    void                             *pContext);
245
246#endif /* PHFRINFC_LLCPMAC_H */
247