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 */ 79 struct phFriNfc_LlcpMac; 80 typedef 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*/ 89 typedef 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*/ 96 typedef 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 109 typedef void (*phFriNfc_LlcpMac_Chk_CB_t) (void *pContext, 110 NFCSTATUS status); 111 112 typedef 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 117 typedef void (*phFriNfc_LlcpMac_Send_CB_t) (void *pContext, 118 NFCSTATUS status); 119 120 121 typedef void (*phFriNfc_LlcpMac_Reveive_CB_t) (void *pContext, 122 NFCSTATUS status, 123 phNfc_sData_t *psData); 124 125 126 /*========== FUNCTIONS TYPES ===========*/ 127 128 typedef NFCSTATUS (*pphFriNfcLlpcMac_Chk_t) ( phFriNfc_LlcpMac_t *LlcpMac, 129 phFriNfc_LlcpMac_Chk_CB_t ChkLlcpMac_Cb, 130 void *pContext); 131 132 typedef NFCSTATUS (*pphFriNfcLlpcMac_Activate_t) (phFriNfc_LlcpMac_t *LlcpMac); 133 134 typedef NFCSTATUS (*pphFriNfcLlpcMac_Deactivate_t) (phFriNfc_LlcpMac_t *LlcpMac); 135 136 typedef 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 141 typedef 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 */ 152 typedef 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 */ 165 struct 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 */ 203 NFCSTATUS 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 */ 211 NFCSTATUS 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 */ 220 NFCSTATUS phFriNfc_LlcpMac_Activate (phFriNfc_LlcpMac_t *LlcpMac); 221 222 /** 223 * \ingroup grp_fri_nfc_llcp_mac 224 * \brief 225 */ 226 NFCSTATUS phFriNfc_LlcpMac_Deactivate (phFriNfc_LlcpMac_t *LlcpMac); 227 228 /** 229 * \ingroup grp_fri_nfc_llcp_mac 230 * \brief 231 */ 232 NFCSTATUS 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 */ 241 NFCSTATUS 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