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