summaryrefslogtreecommitdiffstats
path: root/src/phFriNfc_LlcpMac.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/phFriNfc_LlcpMac.c')
-rw-r--r--src/phFriNfc_LlcpMac.c191
1 files changed, 191 insertions, 0 deletions
diff --git a/src/phFriNfc_LlcpMac.c b/src/phFriNfc_LlcpMac.c
new file mode 100644
index 0000000..31eb90f
--- /dev/null
+++ b/src/phFriNfc_LlcpMac.c
@@ -0,0 +1,191 @@
+/*
+ * 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.c
+ * \brief NFC LLCP MAC Mappings For Different RF Technologies.
+ *
+ * Project: NFC-FRI
+ *
+ */
+
+
+/*include files*/
+#include <phFriNfc_LlcpMac.h>
+#include <phFriNfc_LlcpMacNfcip.h>
+#include <phLibNfcStatus.h>
+#include <phLibNfc.h>
+#include <phLibNfc_Internal.h>
+
+NFCSTATUS phFriNfc_LlcpMac_Reset (phFriNfc_LlcpMac_t *LlcpMac,
+ void *LowerDevice,
+ phFriNfc_LlcpMac_LinkStatus_CB_t LinkStatus_Cb,
+ void *pContext)
+{
+ NFCSTATUS status = NFCSTATUS_SUCCESS;
+ /* Store the Linkstatus callback function of the upper layer */
+ LlcpMac->LinkStatus_Cb = LinkStatus_Cb;
+
+ /* Store a pointer to the upper layer context */
+ LlcpMac->LinkStatus_Context = pContext;
+
+ /* Set the LinkStatus variable to the default state */
+ LlcpMac->LinkState = phFriNfc_LlcpMac_eLinkDefault;
+
+ /* Store a pointer to the lower layer */
+ LlcpMac->LowerDevice = LowerDevice;
+
+ LlcpMac->psRemoteDevInfo = NULL;
+ LlcpMac->PeerRemoteDevType = 0;
+ LlcpMac->MacType = 0;
+ LlcpMac->MacReceive_Cb = NULL;
+ LlcpMac->MacSend_Cb = NULL;
+ LlcpMac->psSendBuffer = NULL;
+ LlcpMac->RecvPending = 0;
+ LlcpMac->SendPending = 0;
+
+ return status;
+}
+
+NFCSTATUS phFriNfc_LlcpMac_ChkLlcp (phFriNfc_LlcpMac_t *LlcpMac,
+ phHal_sRemoteDevInformation_t *psRemoteDevInfo,
+ phFriNfc_LlcpMac_Chk_CB_t ChkLlcpMac_Cb,
+ void *pContext)
+{
+ NFCSTATUS status = NFCSTATUS_SUCCESS;
+ if (NULL == LlcpMac || NULL == psRemoteDevInfo)
+ {
+ status = PHNFCSTVAL(CID_FRI_NFC_LLCP_MAC, NFCSTATUS_INVALID_PARAMETER);
+ }
+ else
+ {
+ /* Store the Remote Device info received from Device Discovery */
+ LlcpMac->psRemoteDevInfo = psRemoteDevInfo;
+
+ if(LlcpMac->psRemoteDevInfo->RemDevType == phHal_eNfcIP1_Initiator)
+ {
+ /* Set the PeerRemoteDevType variable to the Target type */
+ LlcpMac->PeerRemoteDevType = phFriNfc_LlcpMac_ePeerTypeTarget;
+ }
+ else if(LlcpMac->psRemoteDevInfo->RemDevType == phHal_eNfcIP1_Target)
+ {
+ /* Set the PeerRemoteDevType variable to the Initiator type */
+ LlcpMac->PeerRemoteDevType = phFriNfc_LlcpMac_ePeerTypeInitiator;
+ }
+
+ switch(LlcpMac->psRemoteDevInfo->RemDevType)
+ {
+ case phHal_eNfcIP1_Initiator:
+ case phHal_eNfcIP1_Target:
+ {
+ /* Set the MAC mapping type detected */
+ LlcpMac->MacType = phFriNfc_LlcpMac_eTypeNfcip;
+
+ /* Register the lower layer to the MAC mapping component */
+ status = phFriNfc_LlcpMac_Nfcip_Register (LlcpMac);
+ if(status == NFCSTATUS_SUCCESS)
+ {
+ status = LlcpMac->LlcpMacInterface.chk(LlcpMac,ChkLlcpMac_Cb,pContext);
+ }
+ else
+ {
+ status = PHNFCSTVAL(CID_FRI_NFC_LLCP_MAC, NFCSTATUS_FAILED);
+ }
+ }break;
+ case phHal_eISO14443_A_PICC:
+ case phHal_eISO14443_B_PICC:
+ {
+ /* Set the MAC mapping type detected */
+ LlcpMac->MacType = phFriNfc_LlcpMac_eTypeIso14443;
+ status = NFCSTATUS_SUCCESS;
+ }break;
+ default:
+ {
+ status = PHNFCSTVAL(CID_FRI_NFC_LLCP_MAC, NFCSTATUS_INVALID_DEVICE);
+ }break;
+ }
+ }
+
+ return status;
+}
+
+NFCSTATUS phFriNfc_LlcpMac_Activate (phFriNfc_LlcpMac_t *LlcpMac)
+{
+ NFCSTATUS status = NFCSTATUS_SUCCESS;
+
+ if(LlcpMac->LlcpMacInterface.activate == NULL)
+ {
+ status = PHNFCSTVAL(CID_FRI_NFC_LLCP_MAC, NFCSTATUS_INVALID_PARAMETER);
+ }
+ else
+ {
+ status = LlcpMac->LlcpMacInterface.activate(LlcpMac);
+ }
+ return status;
+}
+
+NFCSTATUS phFriNfc_LlcpMac_Deactivate (phFriNfc_LlcpMac_t *LlcpMac)
+{
+ NFCSTATUS status = NFCSTATUS_SUCCESS;
+ if(LlcpMac->LlcpMacInterface.deactivate == NULL)
+ {
+ status = PHNFCSTVAL(CID_FRI_NFC_LLCP_MAC, NFCSTATUS_INVALID_PARAMETER);
+ }
+ else
+ {
+ status = LlcpMac->LlcpMacInterface.deactivate(LlcpMac);
+ }
+ return status;
+}
+
+NFCSTATUS phFriNfc_LlcpMac_Send (phFriNfc_LlcpMac_t *LlcpMac,
+ phNfc_sData_t *psData,
+ phFriNfc_LlcpMac_Send_CB_t LlcpMacSend_Cb,
+ void *pContext)
+{
+ NFCSTATUS status = NFCSTATUS_SUCCESS;
+
+ if(NULL== LlcpMac->LlcpMacInterface.send || NULL==psData || NULL==LlcpMacSend_Cb || NULL==pContext)
+ {
+ status = PHNFCSTVAL(CID_FRI_NFC_LLCP_MAC, NFCSTATUS_INVALID_PARAMETER);
+ }
+ else
+ {
+ status = LlcpMac->LlcpMacInterface.send(LlcpMac,psData,LlcpMacSend_Cb,pContext);
+ }
+ return status;
+}
+
+NFCSTATUS phFriNfc_LlcpMac_Receive (phFriNfc_LlcpMac_t *LlcpMac,
+ phNfc_sData_t *psData,
+ phFriNfc_LlcpMac_Reveive_CB_t ReceiveLlcpMac_Cb,
+ void *pContext)
+{
+ NFCSTATUS status = NFCSTATUS_SUCCESS;
+
+ if(LlcpMac->LlcpMacInterface.receive == NULL || NULL==psData || NULL==ReceiveLlcpMac_Cb || NULL==pContext)
+ {
+ status = PHNFCSTVAL(CID_FRI_NFC_LLCP_MAC, NFCSTATUS_INVALID_PARAMETER);
+ }
+ else
+ {
+ status = LlcpMac->LlcpMacInterface.receive(LlcpMac,psData,ReceiveLlcpMac_Cb,pContext);
+ }
+ return status;
+
+}
+
+