/*
* Copyright (C) 2010 NXP Semiconductors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* \file phFriNfc_LlcpMac.h
* \brief NFC LLCP MAC Mappings For Different RF Technologies.
*
* Project: NFC-FRI
*
*/
#ifndef PHFRINFC_LLCPMAC_H
#define PHFRINFC_LLCPMAC_H
/*include files*/
#include <phNfcTypes.h>
#include <phNfcLlcpTypes.h>
#include <phNfcStatus.h>
#include <phFriNfc.h>
#include <phFriNfc_OvrHal.h>
/**
* \name LLCP MAC Mapping
*
* File: \ref phFriNfc_LlcpMac.h
*
*/
/** \defgroup grp_fri_nfc_llcp_mac LLCP MAC Mapping Component
*
* This component implements the different MAC mapping for a Logical Link Control Protocol communication,
* as defined by the NFC Forum LLCP specifications.\n
* The MAC component handles the mapping for the different technologies supported by LLCP
*..This component provides an API to the upper layer with the following features:\n\n
* - Reset the MAC mapping component
* - \ref phFriNfc_LlcpMac_ChkLlcp
* .
* - Check the LLCP Compliancy
* - \ref phFriNfc_LlcpMac_ChkLlcp
* .
* - Activate the LLCP link
* - \ref phFriNfc_LlcpMac_Activate
* .
* - Deactivate the LLCP link
* - \ref phFriNfc_LlcpMac_Deactivate
* .
* - Register the MAC component Interface with a specific technologie (NFCIP/ISO14443)
* - \ref phFriNfc_LlcpMac_Register
* .
* - Send packets through the LLCP link
* - \ref phFriNfc_LlcpMac_Send
* .
* - Receive packets through the LLCP link
* - \ref phFriNfc_LlcpMac_Receive
*
*/
/**
* \ingroup grp_fri_nfc_llcp_mac
* \brief Declaration of a MAC type
*/
struct phFriNfc_LlcpMac;
typedef struct phFriNfc_LlcpMac phFriNfc_LlcpMac_t;
/**
* \ingroup grp_fri_nfc_llcp_mac
*
*/
/*========== ENUMERATES ===========*/
/* Enum reperesents the different MAC mapping*/
typedef enum phFriNfc_LlcpMac_eType
{
phFriNfc_LlcpMac_eTypeNfcip,
phFriNfc_LlcpMac_eTypeIso14443
}phFriNfc_LlcpMac_eType_t;
/* Enum reperesents the different Peer type for a LLCP communication*/
typedef enum phFriNfc_LlcpMac_ePeerType
{
phFriNfc_LlcpMac_ePeerTypeInitiator,
phFriNfc_LlcpMac_ePeerTypeTarget
}phFriNfc_LlcpMac_ePeerType_t;
/*========== CALLBACKS ===========*/
typedef void (*phFriNfc_LlcpMac_Chk_CB_t) (void *pContext,
NFCSTATUS status);
typedef void (*phFriNfc_LlcpMac_LinkStatus_CB_t) (void *pContext,
phFriNfc_LlcpMac_eLinkStatus_t eLinkStatus,
phNfc_sData_t *psData,
phFriNfc_LlcpMac_ePeerType_t PeerRemoteDevType);
typedef void (*phFriNfc_LlcpMac_Send_CB_t) (void *pContext,
NFCSTATUS status);
typedef void (*phFriNfc_LlcpMac_Reveive_CB_t) (void *pContext,
NFCSTATUS status,
phNfc_sData_t *psData);
/*========== FUNCTIONS TYPES ===========*/
typedef NFCSTATUS (*pphFriNfcLlpcMac_Chk_t) ( phFriNfc_LlcpMac_t *LlcpMac,
phFriNfc_LlcpMac_Chk_CB_t ChkLlcpMac_Cb,
void *pContext);
typedef NFCSTATUS (*pphFriNfcLlpcMac_Activate_t) (phFriNfc_LlcpMac_t *LlcpMac);
typedef NFCSTATUS (*pphFriNfcLlpcMac_Deactivate_t) (phFriNfc_LlcpMac_t *LlcpMac);
typedef NFCSTATUS (*pphFriNfcLlpcMac_Send_t) (phFriNfc_LlcpMac_t *LlcpMac,
phNfc_sData_t *psData,
phFriNfc_LlcpMac_Send_CB_t LlcpMacSend_Cb,
void *pContext);
typedef NFCSTATUS (*pphFriNfcLlpcMac_Receive_t) (phFriNfc_LlcpMac_t *LlcpMac,
phNfc_sData_t *psData,
phFriNfc_LlcpMac_Reveive_CB_t LlcpMacReceive_Cb,
void *pContext);
/*========== STRUCTURES ===========*/
/**
* \ingroup grp_fri_nfc_llcp_mac
* \brief Generic Interface structure with the Lower Layer
*/
typedef struct phFriNfc_LlcpMac_Interface
{
pphFriNfcLlpcMac_Chk_t chk;
pphFriNfcLlpcMac_Activate_t activate;
pphFriNfcLlpcMac_Deactivate_t deactivate;
pphFriNfcLlpcMac_Send_t send;
pphFriNfcLlpcMac_Receive_t receive;
} phFriNfc_LlcpMac_Interface_t;
/**
* \ingroup grp_fri_nfc_llcp_mac
* \brief Definition of the MAC type
*/
struct phFriNfc_LlcpMac
{
phFriNfc_LlcpMac_eLinkStatus_t LinkState;
phHal_sRemoteDevInformation_t *psRemoteDevInfo;
phFriNfc_LlcpMac_LinkStatus_CB_t LinkStatus_Cb;
void *LinkStatus_Context;
phFriNfc_LlcpMac_Interface_t LlcpMacInterface;
phFriNfc_LlcpMac_ePeerType_t PeerRemoteDevType;
phFriNfc_LlcpMac_eType_t MacType;
/**<\internal Holds the completion routine informations of the Map Layer*/
phFriNfc_CplRt_t MacCompletionInfo;
void *LowerDevice;
phFriNfc_LlcpMac_Send_CB_t MacSend_Cb;
void *MacSend_Context;
phFriNfc_LlcpMac_Reveive_CB_t MacReceive_Cb;
void *MacReceive_Context;
phNfc_sData_t *psReceiveBuffer;
phNfc_sData_t *psSendBuffer;
phNfc_sData_t sConfigParam;
uint8_t RecvPending;
uint8_t SendPending;
uint8_t RecvStatus;
phHal_uCmdList_t Cmd;
phHal_sDepAdditionalInfo_t psDepAdditionalInfo;
} ;
/*
################################################################################
********************** MAC Interface Function Prototype ***********************
################################################################################
*/
/**
* \ingroup grp_fri_nfc_llcp_mac
* \brief
*/
NFCSTATUS phFriNfc_LlcpMac_Reset (phFriNfc_LlcpMac_t *LlcpMac,
void *LowerDevice,
phFriNfc_LlcpMac_LinkStatus_CB_t LinkStatus_Cb,
void *pContext);
/**
* \ingroup grp_fri_nfc_llcp_mac
* \brief
*/
NFCSTATUS phFriNfc_LlcpMac_ChkLlcp (phFriNfc_LlcpMac_t *LlcpMac,
phHal_sRemoteDevInformation_t *psRemoteDevInfo,
phFriNfc_LlcpMac_Chk_CB_t ChkLlcpMac_Cb,
void *pContext);
/**
* \ingroup grp_fri_nfc_llcp_mac
* \brief
*/
NFCSTATUS phFriNfc_LlcpMac_Activate (phFriNfc_LlcpMac_t *LlcpMac);
/**
* \ingroup grp_fri_nfc_llcp_mac
* \brief
*/
NFCSTATUS phFriNfc_LlcpMac_Deactivate (phFriNfc_LlcpMac_t *LlcpMac);
/**
* \ingroup grp_fri_nfc_llcp_mac
* \brief
*/
NFCSTATUS phFriNfc_LlcpMac_Send (phFriNfc_LlcpMac_t *LlcpMac,
phNfc_sData_t *psData,
phFriNfc_LlcpMac_Send_CB_t LlcpMacSend_Cb,
void *pContext);
/**
* \ingroup grp_fri_nfc_llcp_mac
* \brief
*/
NFCSTATUS phFriNfc_LlcpMac_Receive (phFriNfc_LlcpMac_t *LlcpMac,
phNfc_sData_t *psData,
phFriNfc_LlcpMac_Reveive_CB_t ReceiveLlcpMac_Cb,
void *pContext);
#endif /* PHFRINFC_LLCPMAC_H */