15d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly/*
25d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly * Copyright (C) 2010 NXP Semiconductors
35d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly *
45d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly * Licensed under the Apache License, Version 2.0 (the "License");
55d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly * you may not use this file except in compliance with the License.
65d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly * You may obtain a copy of the License at
75d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly *
85d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly *      http://www.apache.org/licenses/LICENSE-2.0
95d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly *
105d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly * Unless required by applicable law or agreed to in writing, software
115d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly * distributed under the License is distributed on an "AS IS" BASIS,
125d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
135d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly * See the License for the specific language governing permissions and
145d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly * limitations under the License.
155d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly */
165d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
175d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly/*!
185d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* \file  phFriNfcNdefMap.c
195d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* \brief NFC Ndef Mapping For Different Smart Cards.
205d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly*
215d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* Project: NFC-FRI
225d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly*
23c0bdf30e40dd60628bfafd5f93a3a911e3b91da9Martijn Coenen* $Date: Mon Dec 13 14:14:12 2010 $
245d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* $Author: ing02260 $
25c0bdf30e40dd60628bfafd5f93a3a911e3b91da9Martijn Coenen* $Revision: 1.39 $
26794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands* $Aliases:  $
275d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly*
285d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly*/
295d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
305d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
315d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#include <phFriNfc_NdefMap.h>
325d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
335d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifndef PH_FRINFC_MAP_MIFAREUL_DISABLED
345d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#include <phFriNfc_MifareULMap.h>
355d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif  /* PH_FRINFC_MAP_MIFAREUL_DISABLED*/
365d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
375d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifndef PH_FRINFC_MAP_TOPAZ_DISABLED
385d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#include <phFriNfc_TopazMap.h>
395d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif  /* PH_FRINFC_MAP_TOPAZ_DISABLED */
405d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
415d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifndef PH_FRINFC_MAP_MIFARESTD_DISABLED
425d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#include <phFriNfc_MifareStdMap.h>
435d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif  /* PH_FRINFC_MAP_MIFARESTD_DISABLED */
445d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
455d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifndef PH_FRINFC_MAP_DESFIRE_DISABLED
465d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#include <phFriNfc_DesfireMap.h>
475d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif  /* PH_FRINFC_MAP_DESFIRE_DISABLED */
485d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
495d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifndef PH_FRINFC_MAP_FELICA_DISABLED
505d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#include <phFriNfc_FelicaMap.h>
515d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif  /* PH_FRINFC_MAP_FELICA_DISABLED */
525d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
53a6e012a748e70ab203655d4e1c0d0a77b6515fadMartijn Coenen#ifndef PH_FRINFC_MAP_ISO15693_DISABLED
54a6e012a748e70ab203655d4e1c0d0a77b6515fadMartijn Coenen#include <phFriNfc_ISO15693Map.h>
55a6e012a748e70ab203655d4e1c0d0a77b6515fadMartijn Coenen#endif  /* PH_FRINFC_MAP_ISO15693_DISABLED */
56a6e012a748e70ab203655d4e1c0d0a77b6515fadMartijn Coenen
575d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifdef PHFRINFC_OVRHAL_MOCKUP
585d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#include <phFriNfc_MockupMap.h>
595d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif  /* PHFRINFC_OVRHAL_MOCKUP */
605d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
615d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
625d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#include <phFriNfc_OvrHal.h>
635d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
645d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly/*! \ingroup grp_file_attributes
655d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly*  \name NDEF Mapping
665d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly*
675d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* File: \ref phFriNfcNdefMap.c
685d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly*
695d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly*/
705d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly/*@{*/
71c0bdf30e40dd60628bfafd5f93a3a911e3b91da9Martijn Coenen#define PHFRINFCNDEFMAP_FILEREVISION "$Revision: 1.39 $"
72794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands#define PHFRINFCNDEFMAP_FILEALIASES  "$Aliases:  $"
735d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly/*@}*/
745d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
755d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifndef PH_FRINFC_MAP_DESFIRE_DISABLED
765d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly/* Desfire capability Container Reset Helper */
775d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pellystatic void phFriNfc_DesfCapCont_HReset(phFriNfc_NdefMap_t  *NdefMap);
785d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif  /* PH_FRINFC_MAP_DESFIRE_DISABLED */
795d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
805d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifndef PH_FRINFC_MAP_FELICA_DISABLED
815d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly/* Felica Smart Tag Reset Helper */
825d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pellystatic void phFriNfc_Felica_HReset(phFriNfc_NdefMap_t  *NdefMap);
835d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif  /* PH_FRINFC_MAP_FELICA_DISABLED */
845d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
855d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
86794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands/* \note    This function has to be called at the beginning, after creating an
87794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands*          instance of \ref phFriNfc_NdefMap_t . Use this function to reset
885d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly*          the instance and/or switch to a different underlying device (
895d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly*          different NFC device or device mode, or different Remote Device).
905d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly*/
915d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
925d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS phFriNfc_NdefMap_Reset(   phFriNfc_NdefMap_t              *NdefMap,
935d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                 void                            *LowerDevice,
945d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                 phHal_sRemoteDevInformation_t   *psRemoteDevInfo,
955d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                 phHal_sDevInputParam_t          *psDevInputParam,
965d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                 uint8_t                         *TrxBuffer,
975d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                 uint16_t                        TrxBufferSize,
985d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                 uint8_t                         *ReceiveBuffer,
995d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                 uint16_t                        *ReceiveLength,
1005d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                 uint16_t                        *DataCount)
1015d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{
1025d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    NFCSTATUS   status = NFCSTATUS_SUCCESS;
1035d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    uint8_t     index;
1045d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
105794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands    if (    (ReceiveLength == NULL) || (NdefMap == NULL) || (psRemoteDevInfo == NULL) ||
106794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands        (TrxBuffer == NULL) || (TrxBufferSize == 0)  || (LowerDevice == NULL) ||
1075d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        (*ReceiveLength == 0) || (ReceiveBuffer == NULL) || (DataCount == NULL) ||
1085d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        (psDevInputParam == NULL) ||
1095d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        (*ReceiveLength < PH_FRINFC_NDEFMAP_MAX_SEND_RECV_BUF_SIZE ))
1105d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    {
1115d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        status = PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP, NFCSTATUS_INVALID_PARAMETER);
1125d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    }
1135d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    else
1145d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    {
1155d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        /* Initialise the state to Init */
1165d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        NdefMap->State = PH_FRINFC_NDEFMAP_STATE_RESET_INIT;
1175d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
1185d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        for(index = 0;index<PH_FRINFC_NDEFMAP_CR;index++)
1195d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        {
1205d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            /* Initialise the NdefMap Completion Routine to Null */
1215d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            NdefMap->CompletionRoutine[index].CompletionRoutine = NULL;
1225d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            /* Initialise the NdefMap Completion Routine context to Null  */
1235d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            NdefMap->CompletionRoutine[index].Context = NULL;
1245d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        }
1255d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
1265d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        /* Lower Device(Always Overlapped HAL Struct initialised in application
1275d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        is registred in NdefMap Lower Device) */
1285d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        NdefMap->LowerDevice = LowerDevice;
1295d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
1305d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        /* Remote Device info received from Manual Device Discovery is registered here */
1315d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        NdefMap->psRemoteDevInfo = psRemoteDevInfo;
1325d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
1335d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        /* Transfer Buffer registered */
1345d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        NdefMap->ApduBuffer = TrxBuffer;
1355d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
1365d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        /* Set the MaxApduBufferSize */
1375d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        NdefMap->ApduBufferSize = TrxBufferSize;
1385d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
1395d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        /* Set APDU Buffer Index */
1405d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        NdefMap->ApduBuffIndex = 0;
1415d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
1425d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        /* Register Transfer Buffer Length */
1435d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        NdefMap->SendLength = 0;
1445d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
1455d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        /* Register Receive Buffer */
1465d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        NdefMap->SendRecvBuf = ReceiveBuffer;
1475d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
1485d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        /* Register Receive Buffer Length */
1495d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        NdefMap->SendRecvLength = ReceiveLength;
1505d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
1515d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        /* Register Temporary Receive Buffer Length */
1525d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        NdefMap->TempReceiveLength = *ReceiveLength;
1535d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
1545d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        /* Register Data Count variable and set it to zero */
1555d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        NdefMap->DataCount = DataCount;
1565d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        *NdefMap->DataCount = 0;
1575d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
1585d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        /* Reset the PageOffset */
1595d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        NdefMap->Offset = 0;
1605d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
1615d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        /* Reset the NumOfBytesRead*/
1625d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        NdefMap->NumOfBytesRead = 0;
1635d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
1645d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        /* Reset the NumOfBytesWritten*/
1655d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        NdefMap->NumOfBytesWritten = 0;
1665d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
1675d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        /* Reset the Card Type */
1685d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        NdefMap->CardType = 0;
1695d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
1705d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        /* Reset the Memory Card Size*/
1715d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        NdefMap->CardMemSize = 0;
1725d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
1735d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        /* Reset the Previous Operation*/
1745d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        NdefMap->PrevOperation = 0;
1755d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
1765d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        /* Reset the Desfire Operation Flag*/
1775d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        NdefMap->DespOpFlag = 0;
1785d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
1795d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        /* Reset MapCompletion Info*/
1805d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        NdefMap->MapCompletionInfo.CompletionRoutine = NULL;
1815d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        NdefMap->MapCompletionInfo.Context = NULL;
1825d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
1835d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        /*  Reset the ReadingForWriteOperation flag. */
1845d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        NdefMap->ReadingForWriteOperation = 0;  /*  FALSE  */
1855d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
1865d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifndef PH_FRINFC_MAP_DESFIRE_DISABLED
1875d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        /*Reset Desfire Cap Container elements*/
1885d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        phFriNfc_DesfCapCont_HReset(NdefMap);
1895d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif  /* PH_FRINFC_MAP_DESFIRE_DISABLED */
1905d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
1915d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifndef PH_FRINFC_MAP_MIFARESTD_DISABLED
1925d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        /*Reset Mifare Standard Container elements*/
1935d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        NdefMap->StdMifareContainer.DevInputParam = psDevInputParam;
1945d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        status = phFriNfc_MifareStdMap_H_Reset(NdefMap);
1955d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif  /* PH_FRINFC_MAP_MIFARESTD_DISABLED */
1965d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
1975d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifndef PH_FRINFC_MAP_FELICA_DISABLED
1985d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        /*Reset Felica Tag elements*/
1995d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        NdefMap->FelicaPollDetails.DevInputParam = psDevInputParam;
2005d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        phFriNfc_Felica_HReset(NdefMap);
2015d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif  /* PH_FRINFC_MAP_FELICA_DISABLED */
2025d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
2035d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#if !(defined(PH_FRINFC_MAP_TOPAZ_DISABLED ) || defined (PH_FRINFC_MAP_TOPAZ_DYNAMIC_DISABLED ))
2045d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
2055d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        phFriNfc_TopazMap_H_Reset(NdefMap);
2065d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif  /* PH_FRINFC_MAP_TOPAZ_DISABLED || PH_FRINFC_MAP_TOPAZ_DYNAMIC_DISABLED  */
2075d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
2085d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
2095d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifndef PH_FRINFC_MAP_MIFAREUL_DISABLED
2105d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        status = phFriNfc_MifareUL_H_Reset(NdefMap);
2115d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif
2125d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
2135d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifdef PHFRINFC_OVRHAL_MOCKUP
2145d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        /*Reset Desfire Cap Container elements*/
2155d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        phFriNfc_Mockup_H_Reset(NdefMap);
2165d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif  /* PHFRINFC_OVRHAL_MOCKUP */
2175d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
218794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands        /*
219794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands        *  Fix for PR - 0001256
2205d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        *  Date- 08-08-08
2215d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        */
2225d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        NdefMap->CardState = PH_NDEFMAP_CARD_STATE_INVALID;
2235d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    }
2245d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
2255d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    return (status);
2265d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly}
2275d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
2285d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly/*!
2295d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* Registering the Completion Routine.
2305d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly*
2315d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* This function requires the caller to set a Completion Routine
2325d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* which serves as notifier for the upper component.
2335d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* NOTE: Please refer the header file for more information.
2345d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly*
2355d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly*/
2365d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
2375d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS phFriNfc_NdefMap_SetCompletionRoutine(phFriNfc_NdefMap_t     *NdefMap,
2385d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                                uint8_t                 FunctionID,
2395d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                                pphFriNfc_Cr_t          CompletionRoutine,
2405d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                                void                   *CompletionRoutineContext)
2415d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{
2425d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    NFCSTATUS   status = NFCSTATUS_SUCCESS;
2435d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
244794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands    if ( ( NdefMap == NULL ) || (FunctionID >= PH_FRINFC_NDEFMAP_CR) ||
2455d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        ( CompletionRoutine == NULL) || (CompletionRoutineContext == NULL))
2465d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    {
2475d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        status = PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP, NFCSTATUS_INVALID_PARAMETER);
2485d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    }
2495d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    else
2505d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    {
2515d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        /* Register the application callback with the NdefMap Completion Routine */
2525d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        NdefMap->CompletionRoutine[FunctionID].CompletionRoutine = CompletionRoutine;
2535d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
2545d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        /* Register the application context with the NdefMap Completion Routine context */
2555d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        NdefMap->CompletionRoutine[FunctionID].Context = CompletionRoutineContext;
2565d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    }
2575d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
2585d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    return status;
2595d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly}
2605d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
2615d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly/*!
2625d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* Initiates Reading of NDEF information from the Remote Device.
2635d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly*
2645d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* Remote Peer device may be of type any card. Ex: desfire,felica,jewel
265794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands* mifareUL,mifare 1K etc. The function initiates the reading of NDEF
2665d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* information from a Remote Device.
2675d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly*
2685d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* This is the main NdefMap read function call.Internally,depending upon
2695d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* the CardType,respective mifare/desfire read functions are called.
2705d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* In future this can be extended to support any types of card.
2715d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly*
2725d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* It performs a reset of the state and triggers/starts the raed action (state machine).
2735d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* A periodic call of the \ref phFriNfcNdefMap_Process has to be done once the action
2745d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* has been triggered.
2755d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly*
2765d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* NOTE: Please refer the header file for more information.
2775d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly*
2785d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly*/
2795d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
2805d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS phFriNfc_NdefMap_RdNdef(  phFriNfc_NdefMap_t  *NdefMap,
2815d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                  uint8_t             *PacketData,
2825d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                  uint32_t            *PacketDataLength,
2835d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                  uint8_t             Offset)
2845d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{
2855d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    NFCSTATUS   status = NFCSTATUS_PENDING;
2865d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
287794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands
2885d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    /* check for validity of input parameters*/
289794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands    if (( PacketData == NULL )
2905d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        || ( NdefMap == NULL )
2915d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        || ( PacketDataLength == NULL )
2925d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        || ( *PacketDataLength == 0 )
2935d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        || ( ( Offset != PH_FRINFC_NDEFMAP_SEEK_CUR) && (Offset != PH_FRINFC_NDEFMAP_SEEK_BEGIN ))
2945d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        || (NdefMap->CompletionRoutine->CompletionRoutine == NULL)
2955d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        || (NdefMap->CompletionRoutine->Context == NULL )
2965d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        )
2975d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    {
2985d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        status = PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP, NFCSTATUS_INVALID_PARAMETER);
2995d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    }
3005d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    else if (NdefMap->CardState == PH_NDEFMAP_CARD_STATE_INVALID)
3015d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    {
302794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands        /*  Card is in invalid state, cannot have any read/write
3035d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        operations*/
3045d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        status = PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP,\
3055d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            NFCSTATUS_INVALID_FORMAT);
306794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands    }
3075d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    else if(NdefMap->CardState == PH_NDEFMAP_CARD_STATE_INITIALIZED)
3085d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    {
3095d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        /*  Can't read any data from the card:TLV length is zero*/
310794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands        status = PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP, NFCSTATUS_EOF_NDEF_CONTAINER_REACHED);
3115d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
3125d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        NdefMap->NumOfBytesRead = PacketDataLength;
3135d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        *NdefMap->NumOfBytesRead = 0;
3145d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
3155d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
3165d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    }
3175d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    else if ( (NdefMap->PrevOperation == PH_FRINFC_NDEFMAP_WRITE_OPE) && (Offset != PH_FRINFC_NDEFMAP_SEEK_BEGIN ))
3185d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    {
3195d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        status = PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP, NFCSTATUS_INVALID_DEVICE_REQUEST);
3205d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    }
3215d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    else
3225d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    {
3235d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        /*  Check the offset given by the user
324794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands        If the offset is 1 (SEEK_BEGIN), reset everything and start
3255d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        reading from the first Page of the card.
3265d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        else if offset is 0 (PH_FRINFC_NDEFMAP_SEEK_CUR), continue reading
3275d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        No need to reset the parameters.  */
3285d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
3295d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        if ( Offset == PH_FRINFC_NDEFMAP_SEEK_BEGIN )
3305d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        {
3315d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            NdefMap->ApduBuffIndex = 0;
3325d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            *NdefMap->DataCount = 0;
3335d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        }
3345d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
3355d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        if  ( (NdefMap->CardType == PH_FRINFC_NDEFMAP_ISO14443_4A_CARD) &&
3365d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            (Offset == PH_FRINFC_NDEFMAP_SEEK_CUR) && (*NdefMap->DataCount == 0 ))
3375d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        {
3385d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
3395d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            /*  A READ operation cannot be done if the previuos operation was WRITE
3405d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            unless the offset is set to PH_FRINFC_NDEFMAP_SEEK_BEGIN Or
3415d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            Read Operation with Offset set to Continue & DataCount set to 0 */
3425d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            status = PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP, NFCSTATUS_INVALID_DEVICE_REQUEST);
3435d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        }
3445d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        else
3455d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        {
3465d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            switch ( NdefMap->CardType)
3475d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            {
3485d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifndef PH_FRINFC_MAP_MIFAREUL_DISABLED
3495d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                case  PH_FRINFC_NDEFMAP_MIFARE_UL_CARD :
3505d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    /*  Mifare card selected. Call Mifare read */
3515d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    status = phFriNfc_MifareUL_RdNdef ( NdefMap,
3525d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        PacketData,
3535d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        PacketDataLength,
3545d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        Offset);
3555d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    break;
3565d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif /* PH_FRINFC_MAP_MIFAREUL_DISABLED */
3575d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
3585d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifndef PH_FRINFC_MAP_DESFIRE_DISABLED
3595d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                case PH_FRINFC_NDEFMAP_ISO14443_4A_CARD :
360794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands#ifdef DESFIRE_EV1
361794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                case PH_FRINFC_NDEFMAP_ISO14443_4A_CARD_EV1 :
362794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands#endif /* #ifdef DESFIRE_EV1 */
3635d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    /*  Desfire card selected. Call Desfire read */
3645d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    status = phFriNfc_Desfire_RdNdef(   NdefMap,
3655d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        PacketData,
3665d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        PacketDataLength,
3675d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        Offset);
3685d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    break;
3695d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif  /* PH_FRINFC_MAP_DESFIRE_DISABLED */
3705d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
3715d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifndef PH_FRINFC_MAP_MIFARESTD_DISABLED
3725d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                case  PH_FRINFC_NDEFMAP_MIFARE_STD_1K_CARD :
3735d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                case  PH_FRINFC_NDEFMAP_MIFARE_STD_4K_CARD :
3745d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    /*  Mifare card selected. Call Mifare read */
3755d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    status = phFriNfc_MifareStdMap_RdNdef ( NdefMap,
3765d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        PacketData,
3775d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        PacketDataLength,
3785d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        Offset);
3795d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    break;
3805d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif  /* PH_FRINFC_MAP_MIFARESTD_DISABLED */
3815d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
3825d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifndef PH_FRINFC_MAP_FELICA_DISABLED
3835d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                case PH_FRINFC_NDEFMAP_FELICA_SMART_CARD :
3845d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    /*  Desfire card selected. Call Desfire Write */
3855d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    status =  phFriNfc_Felica_RdNdef(  NdefMap,
3865d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        PacketData,
3875d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        PacketDataLength,
3885d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        Offset);
3895d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    break;
3905d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif  /* PH_FRINFC_MAP_FELICA_DISABLED */
3915d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
3925d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifndef PH_FRINFC_MAP_TOPAZ_DISABLED
3935d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                case PH_FRINFC_NDEFMAP_TOPAZ_CARD :
3945d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    /*  Topaz card selected. Call Topaz read */
3955d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    status =  phFriNfc_TopazMap_RdNdef(  NdefMap,
3965d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        PacketData,
3975d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        PacketDataLength,
3985d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        Offset);
3995d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    break;
4005d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifndef PH_FRINFC_MAP_TOPAZ_DYNAMIC_DISABLED
4015d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                case PH_FRINFC_NDEFMAP_TOPAZ_DYNAMIC_CARD :
4025d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    /*  Topaz card selected. Call Topaz read */
4035d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    status =  phFriNfc_TopazDynamicMap_RdNdef(  NdefMap,
4045d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        PacketData,
4055d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        PacketDataLength,
4065d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        Offset);
4075d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    break;
4085d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif  /* PH_FRINFC_MAP_TOPAZ_DYNAMIC_DISABLED */
4095d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif  /* PH_FRINFC_MAP_TOPAZ_DISABLED */
4105d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
411a6e012a748e70ab203655d4e1c0d0a77b6515fadMartijn Coenen#ifndef PH_FRINFC_MAP_ISO15693_DISABLED
412a6e012a748e70ab203655d4e1c0d0a77b6515fadMartijn Coenen                case PH_FRINFC_NDEFMAP_ISO15693_CARD:
413a6e012a748e70ab203655d4e1c0d0a77b6515fadMartijn Coenen                    status =  phFriNfc_ISO15693_RdNdef(  NdefMap,
414a6e012a748e70ab203655d4e1c0d0a77b6515fadMartijn Coenen                        PacketData,
415a6e012a748e70ab203655d4e1c0d0a77b6515fadMartijn Coenen                        PacketDataLength,
416a6e012a748e70ab203655d4e1c0d0a77b6515fadMartijn Coenen                        Offset);
417a6e012a748e70ab203655d4e1c0d0a77b6515fadMartijn Coenen                    break;
418a6e012a748e70ab203655d4e1c0d0a77b6515fadMartijn Coenen#endif /* #ifndef PH_FRINFC_MAP_ISO15693_DISABLED */
419a6e012a748e70ab203655d4e1c0d0a77b6515fadMartijn Coenen
4205d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifdef PHFRINFC_OVRHAL_MOCKUP
4215d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                case PH_FRINFC_NDEFMAP_MOCKUP_CARD :
4225d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    /*  Mockup card selected. Call Mockup Write */
4235d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    status =  phFriNfc_Mockup_RdNdef(  NdefMap,
4245d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        PacketData,
4255d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        PacketDataLength,
4265d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        Offset);
4275d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    break;
4285d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif  /* PHFRINFC_OVRHAL_MOCKUP */
4295d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
430794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                default :
4315d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    /*  Unknown card type. Return error */
4325d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    status = PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP,\
4335d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        NFCSTATUS_INVALID_REMOTE_DEVICE);
4345d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
4355d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    break;
4365d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            }
4375d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        }
4385d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    }
4395d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    return status;
4405d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly}
4415d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
4425d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly/*!
4435d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* Initiates Writing of NDEF information to the Remote Device.
4445d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly*
4455d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* The function initiates the writing of NDEF information to a Remote Device
4465d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly*
4475d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* Remote Peer device may be of type any card. Ex: desfire,felica,jewel
448794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands* mifareUL,mifare 1K etc. The function initiates the reading of NDEF
4495d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* information from a Remote Device.
4505d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly*
451794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands* This is a main write api.Internally,depending upon the CardType,
4525d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* respective mifare/desfire write apis are called.In future this can be
4535d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* extended to support any types of card.
4545d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly*
4555d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* It performs a reset of the state and starts the action (state machine).
456794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands* A periodic call of the \ref phFriNfcNdefMap_Process has to be done once
4575d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* the action has been triggered.
4585d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly*
4595d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* NOTE: Please refer the header file for more information.
4605d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly*
4615d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly*/
4625d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
4635d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
4645d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS phFriNfc_NdefMap_WrNdef(  phFriNfc_NdefMap_t  *NdefMap,
4655d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                  uint8_t             *PacketData,
4665d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                  uint32_t            *PacketDataLength,
4675d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                  uint8_t             Offset)
4685d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{
4695d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    NFCSTATUS   status = NFCSTATUS_PENDING;
470794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands    uint8_t     StatusChk=0;
4715d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
4725d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly     if (     (PacketData          == NULL)
4735d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        ||  ( NdefMap             == NULL )
4745d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        /* + Mantis 442 */
4755d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        || ( PacketDataLength    == NULL )
4765d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        /* - Mantis 442 */
4775d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        || ( *PacketDataLength   == 0 )
4785d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        || ((Offset != PH_FRINFC_NDEFMAP_SEEK_CUR) && (Offset != PH_FRINFC_NDEFMAP_SEEK_BEGIN ))
4795d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        || (NdefMap->CompletionRoutine->CompletionRoutine == NULL)
4805d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        || (NdefMap->CompletionRoutine->Context == NULL)
4815d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        )
4825d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    {
4835d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        /*  Invalid input parameter error   */
4845d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        status = PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP,NFCSTATUS_INVALID_PARAMETER);
485794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands    }
486794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands    else if (( NdefMap->CardState == PH_NDEFMAP_CARD_STATE_INVALID) &&
487794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands        (PH_FRINFC_NDEFMAP_TOPAZ_CARD != NdefMap->CardType) &&
4885d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        (PH_FRINFC_NDEFMAP_TOPAZ_DYNAMIC_CARD != NdefMap->CardType))
4895d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    {
490794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands        /*  Card is in invalid state, cannot have any read/write
4915d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        operations*/
4925d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        status = PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP,\
4935d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            NFCSTATUS_INVALID_FORMAT);
4945d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    }
4955d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
4965d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    else if ( NdefMap->CardState == PH_NDEFMAP_CARD_STATE_READ_ONLY )
4975d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
4985d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    {
4995d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        /*Can't write to the card :No Grants */
5005d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        status = PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP,\
5015d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            NFCSTATUS_NOT_ALLOWED);
5025d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
5035d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        /* set the no. bytes written is zero*/
5045d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        NdefMap->WrNdefPacketLength = PacketDataLength;
5055d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        *NdefMap->WrNdefPacketLength = 0;
5065d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
5075d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    }
508794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands    else
5095d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    {
5105d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        /*  Check the offset given by the user
511794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands        If the offset is 1 (SEEK_BEGIN), reset everything and start
5125d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        writing from the first Byte of the card.
5135d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        else if offset is 0 (PH_FRINFC_NDEFMAP_SEEK_CUR), continue writing
5145d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        No need to reset the parameters.  */
515794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands         if (( NdefMap->CardState == PH_NDEFMAP_CARD_STATE_INVALID) &&
5165d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            (PH_FRINFC_NDEFMAP_TOPAZ_DYNAMIC_CARD == NdefMap->CardType))
5175d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        {
5185d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            /* If Topaz Dynamic card CC bytes are not valid then also allow writing,
5195d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            If card is really good then writing will be done properly and reading can be performed,
520794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands            otherwise writing or reading will fail. so, setting card state to
5215d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            NdefMap->CardState = PH_NDEFMAP_CARD_STATE_READ_WRITE */
5225d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            NdefMap->CardState = PH_NDEFMAP_CARD_STATE_READ_WRITE;
5235d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        }
5245d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
5255d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        if ( Offset == PH_FRINFC_NDEFMAP_SEEK_BEGIN )
5265d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        {
5275d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            NdefMap->ApduBuffIndex = 0;
5285d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            *NdefMap->DataCount = 0;
5295d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        }
5305d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
531794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands        if ( (NdefMap->CardType == PH_FRINFC_NDEFMAP_MIFARE_UL_CARD) ||
5325d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            (NdefMap->CardType == PH_FRINFC_NDEFMAP_ISO14443_4A_CARD))
5335d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        {
534794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands            if (( (NdefMap->PrevOperation == PH_FRINFC_NDEFMAP_READ_OPE) && (Offset != PH_FRINFC_NDEFMAP_SEEK_BEGIN )) ||
5355d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                ( (Offset == PH_FRINFC_NDEFMAP_SEEK_CUR) && (*NdefMap->DataCount == 0 )))
5365d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            {
5375d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                /*  A WRITE operation cannot be done if the previuos operation was READ
5385d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                unless the offset is set to PH_FRINFC_NDEFMAP_SEEK_BEGIN OR
5395d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                Write Operation with Offset set to Continue & DataCount set to 0  */
5405d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                status = PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP, NFCSTATUS_INVALID_DEVICE_REQUEST);
5415d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                StatusChk = 1;
5425d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            }
5435d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        }
5445d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        if(StatusChk != 1)
5455d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        {
5465d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            NdefMap->WrNdefPacketLength =   PacketDataLength;
5475d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            switch ( NdefMap->CardType)
5485d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            {
5495d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifndef PH_FRINFC_MAP_MIFAREUL_DISABLED
5505d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                case  PH_FRINFC_NDEFMAP_MIFARE_UL_CARD :
5515d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    /*  Mifare card selected. Call Mifare Write */
5525d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    status =  phFriNfc_MifareUL_WrNdef( NdefMap,
5535d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        PacketData,
5545d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        PacketDataLength,
5555d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        Offset);
5565d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    break;
5575d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif /* PH_FRINFC_MAP_MIFAREUL_DISABLED */
5585d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
5595d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifndef PH_FRINFC_MAP_DESFIRE_DISABLED
5605d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                case PH_FRINFC_NDEFMAP_ISO14443_4A_CARD :
561794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands#ifdef DESFIRE_EV1
562794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                case PH_FRINFC_NDEFMAP_ISO14443_4A_CARD_EV1 :
563794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands#endif /* #ifdef DESFIRE_EV1 */
5645d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    /*  Desfire card selected. Call Desfire Write */
5655d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    status =  phFriNfc_Desfire_WrNdef(  NdefMap,
5665d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        PacketData,
5675d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        PacketDataLength,
568794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                        Offset);
5695d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    break;
5705d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif  /* PH_FRINFC_MAP_DESFIRE_DISABLED */
5715d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
5725d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifndef PH_FRINFC_MAP_MIFARESTD_DISABLED
5735d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                case  PH_FRINFC_NDEFMAP_MIFARE_STD_1K_CARD :
5745d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                case  PH_FRINFC_NDEFMAP_MIFARE_STD_4K_CARD :
5755d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    /*  Mifare card selected. Call Mifare read */
5765d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    status = phFriNfc_MifareStdMap_WrNdef ( NdefMap,
5775d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        PacketData,
5785d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        PacketDataLength,
5795d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        Offset);
5805d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    break;
5815d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif  /* PH_FRINFC_MAP_MIFARESTD_DISABLED */
5825d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
5835d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifndef PH_FRINFC_MAP_FELICA_DISABLED
5845d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                case PH_FRINFC_NDEFMAP_FELICA_SMART_CARD :
5855d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    /*  Desfire card selected. Call Desfire Write */
5865d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    status =  phFriNfc_Felica_WrNdef(  NdefMap,
5875d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        PacketData,
5885d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        PacketDataLength,
5895d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        Offset);
5905d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    break;
5915d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif  /* PH_FRINFC_MAP_FELICA_DISABLED */
5925d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
5935d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifndef PH_FRINFC_MAP_TOPAZ_DISABLED
5945d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                case PH_FRINFC_NDEFMAP_TOPAZ_CARD :
5955d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    /*  Topaz card selected. Call Topaz Write */
5965d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    status =  phFriNfc_TopazMap_WrNdef(  NdefMap,
5975d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        PacketData,
5985d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        PacketDataLength,
5995d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        Offset);
6005d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    break;
6015d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifndef PH_FRINFC_MAP_TOPAZ_DYNAMIC_DISABLED
6025d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                case PH_FRINFC_NDEFMAP_TOPAZ_DYNAMIC_CARD :
6035d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    /*  Topaz card selected. Call Topaz Write */
6045d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    status =  phFriNfc_TopazDynamicMap_WrNdef(  NdefMap,
6055d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        PacketData,
6065d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        PacketDataLength,
6075d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        Offset);
6085d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    break;
6095d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif  /* PH_FRINFC_MAP_TOPAZ_DYNAMIC_DISABLED */
6105d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif  /* PH_FRINFC_MAP_TOPAZ_DISABLED */
6115d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
612a6e012a748e70ab203655d4e1c0d0a77b6515fadMartijn Coenen#ifndef PH_FRINFC_MAP_ISO15693_DISABLED
613a6e012a748e70ab203655d4e1c0d0a77b6515fadMartijn Coenen                case PH_FRINFC_NDEFMAP_ISO15693_CARD:
614a6e012a748e70ab203655d4e1c0d0a77b6515fadMartijn Coenen                    status =  phFriNfc_ISO15693_WrNdef(  NdefMap,
615a6e012a748e70ab203655d4e1c0d0a77b6515fadMartijn Coenen                        PacketData,
616a6e012a748e70ab203655d4e1c0d0a77b6515fadMartijn Coenen                        PacketDataLength,
617a6e012a748e70ab203655d4e1c0d0a77b6515fadMartijn Coenen                        Offset);
618a6e012a748e70ab203655d4e1c0d0a77b6515fadMartijn Coenen                    break;
619a6e012a748e70ab203655d4e1c0d0a77b6515fadMartijn Coenen#endif /* #ifndef PH_FRINFC_MAP_ISO15693_DISABLED */
620a6e012a748e70ab203655d4e1c0d0a77b6515fadMartijn Coenen
6215d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
6225d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifdef PHFRINFC_OVRHAL_MOCKUP
6235d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                case PH_FRINFC_NDEFMAP_MOCKUP_CARD :
6245d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    /*  Mockup card selected. Call Mockup Write */
6255d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    status =  phFriNfc_Mockup_WrNdef(  NdefMap,
6265d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        PacketData,
6275d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        PacketDataLength,
6285d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        Offset);
6295d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    break;
6305d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif  /* PHFRINFC_OVRHAL_MOCKUP */
631794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                default :
6325d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    /*  Unknown card type. Return error */
6335d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    status = PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP,
6345d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        NFCSTATUS_INVALID_REMOTE_DEVICE);
6355d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    break;
6365d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            }
6375d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        }
6385d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    }
6395d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    return status;
6405d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly}
6415d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
64280ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen#ifdef FRINFC_READONLY_NDEF
643a6e012a748e70ab203655d4e1c0d0a77b6515fadMartijn Coenen
64480ee29b88ec489e2bbf6ae446692229d36755429Martijn CoenenNFCSTATUS
64580ee29b88ec489e2bbf6ae446692229d36755429Martijn CoenenphFriNfc_NdefMap_ConvertToReadOnly (
64680ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen    phFriNfc_NdefMap_t          *NdefMap)
64780ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen{
64880ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen    NFCSTATUS   result = NFCSTATUS_PENDING;
64980ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen
65080ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen
65180ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen    /*  Check for ndefmap context and relevant state. Else return error*/
65280ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen    if (NULL == NdefMap)
65380ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen    {
65480ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen        result = PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP, NFCSTATUS_INVALID_PARAMETER);
65580ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen    }
65680ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen    else if ((NdefMap->CompletionRoutine->CompletionRoutine == NULL)
65780ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen        || (NdefMap->CompletionRoutine->Context == NULL))
65880ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen    {
65980ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen        result = PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP, NFCSTATUS_INVALID_PARAMETER);
66080ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen    }
66180ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen    else
66280ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen    {
66380ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen        switch (NdefMap->CardType)
66480ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen        {
66580ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen            case PH_FRINFC_NDEFMAP_TOPAZ_CARD:
66680ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen            {
66780ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen                result = phFriNfc_TopazMap_ConvertToReadOnly (NdefMap);
66880ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen                break;
66980ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen            }
67080ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen
671c0bdf30e40dd60628bfafd5f93a3a911e3b91da9Martijn Coenen            case PH_FRINFC_NDEFMAP_TOPAZ_DYNAMIC_CARD:
672a6243755a9b438bfbfe0be331ece55953f8cf9ebMartijn Coenen            {
673a6243755a9b438bfbfe0be331ece55953f8cf9ebMartijn Coenen                result = phFriNfc_TopazDynamicMap_ConvertToReadOnly (NdefMap);
674a6243755a9b438bfbfe0be331ece55953f8cf9ebMartijn Coenen                break;
675a6243755a9b438bfbfe0be331ece55953f8cf9ebMartijn Coenen            }
676a6243755a9b438bfbfe0be331ece55953f8cf9ebMartijn Coenen
6774f3ef022906e5d3b763fbcfe81e3f5cd53976ab5Martijn Coenen            case PH_FRINFC_NDEFMAP_ISO15693_CARD:
67880ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen            {
6794f3ef022906e5d3b763fbcfe81e3f5cd53976ab5Martijn Coenen                result = phFriNfc_ISO15693_ConvertToReadOnly (NdefMap);
68080ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen                break;
68180ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen            }
682a6e012a748e70ab203655d4e1c0d0a77b6515fadMartijn Coenen
6834f3ef022906e5d3b763fbcfe81e3f5cd53976ab5Martijn Coenen            default:
684a6e012a748e70ab203655d4e1c0d0a77b6515fadMartijn Coenen            {
6854f3ef022906e5d3b763fbcfe81e3f5cd53976ab5Martijn Coenen                result = PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP,
6864f3ef022906e5d3b763fbcfe81e3f5cd53976ab5Martijn Coenen                                    NFCSTATUS_INVALID_REMOTE_DEVICE);
687a6e012a748e70ab203655d4e1c0d0a77b6515fadMartijn Coenen                break;
688a6e012a748e70ab203655d4e1c0d0a77b6515fadMartijn Coenen            }
68980ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen        }
69080ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen    }
69180ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen    return result;
69280ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen}
693a6e012a748e70ab203655d4e1c0d0a77b6515fadMartijn Coenen
69480ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen#endif /* #ifdef FRINFC_READONLY_NDEF */
69580ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen
6965d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly/*!
6975d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* Check whether a particular Remote Device is NDEF compliant.
6985d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly*
699794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands* The function initiates the ndef compliancy check.
7005d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly*
7015d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* This is a main check ndef api.Internally,depending upon the different
7025d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* opmodes,respective mifare/desfire checkNdef apis are called.
703794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands* In future this can be extended to check any types of card ndef
7045d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* compliancy.
7055d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly*
7065d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* It performs a reset of the state and starts the action (state machine).
707794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands* A periodic call of the \ref phFriNfcNdefMap_Process has to be done once
7085d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* the action has been triggered.
7095d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly*
7105d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* NOTE: Please refer the header file for more information.
7115d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly*
7125d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly*/
7135d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
7145d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS phFriNfc_NdefMap_ChkNdef( phFriNfc_NdefMap_t     *NdefMap)
7155d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{
7165d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    NFCSTATUS   status = NFCSTATUS_PENDING;
7175d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    uint8_t     sak;
7185d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
7195d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
7205d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    /*  Check for ndefmap context and relevant state. Else return error*/
7215d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    if ( NdefMap == NULL )
7225d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    {
7235d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        status = PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP, NFCSTATUS_INVALID_PARAMETER);
7245d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    }
7255d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    else
7265d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    {
7275d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        if( (NdefMap->State !=  PH_FRINFC_NDEFMAP_STATE_RESET_INIT) ||
7285d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            (NdefMap->psRemoteDevInfo->SessionOpened != 0x01 ) )
7295d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            /*  Harsha: If SessionOpened is not 1, this means that connect has not happened */
7305d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        {
7315d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            status = PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP, NFCSTATUS_INVALID_DEVICE_REQUEST);
7325d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        }
7335d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        else if ( (NdefMap->CompletionRoutine->CompletionRoutine == NULL) || (NdefMap->CompletionRoutine->Context == NULL ))
7345d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        {
7355d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            status = PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP, NFCSTATUS_INVALID_PARAMETER);
7365d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        }
7375d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        else
7385d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        {
7395d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            /*
7405d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            * 1.Changed
741794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands            *   CardInfo106 Replace with the ReaderA_Info.
7425d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            */
7435d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
7445d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            sak = NdefMap->psRemoteDevInfo->RemoteDevInfo.Iso14443A_Info.Sak;
7455d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
746794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands            /*
7475d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            * 3. Changed
7485d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            *    Description: Opmode replace with RemDevType.
7495d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            */
7505d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
7515d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
7525d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            switch ( NdefMap->psRemoteDevInfo->RemDevType )
7535d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            {
754a6e012a748e70ab203655d4e1c0d0a77b6515fadMartijn Coenen#ifndef PH_FRINFC_MAP_ISO15693_DISABLED
755a6e012a748e70ab203655d4e1c0d0a77b6515fadMartijn Coenen            case phHal_eISO15693_PICC:
756a6e012a748e70ab203655d4e1c0d0a77b6515fadMartijn Coenen            {
757a6e012a748e70ab203655d4e1c0d0a77b6515fadMartijn Coenen                status = phFriNfc_ISO15693_ChkNdef (NdefMap);
758a6e012a748e70ab203655d4e1c0d0a77b6515fadMartijn Coenen                break;
759a6e012a748e70ab203655d4e1c0d0a77b6515fadMartijn Coenen            }
760a6e012a748e70ab203655d4e1c0d0a77b6515fadMartijn Coenen#else /* #ifndef PH_FRINFC_MAP_ISO15693_DISABLED */
761a6e012a748e70ab203655d4e1c0d0a77b6515fadMartijn Coenen            status = PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP,
762a6e012a748e70ab203655d4e1c0d0a77b6515fadMartijn Coenen                                NFCSTATUS_INVALID_REMOTE_DEVICE);
763a6e012a748e70ab203655d4e1c0d0a77b6515fadMartijn Coenen#endif /* #ifndef PH_FRINFC_MAP_ISO15693_DISABLED */
764a6e012a748e70ab203655d4e1c0d0a77b6515fadMartijn Coenen
7655d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            case phHal_eMifare_PICC:
7665d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            case phHal_eISO14443_3A_PICC:
7675d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                /*  Remote device is Mifare card . Check for Mifare
7685d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                NDEF compliancy */
769794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                if(0x00 == sak)
7705d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                {
7715d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    /*  The SAK/Sel_Res says the card is of the type
7725d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    Mifare UL */
7735d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifndef PH_FRINFC_MAP_MIFAREUL_DISABLED
7745d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    status = phFriNfc_MifareUL_ChkNdef( NdefMap);
7755d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#else   /* PH_FRINFC_MAP_MIFAREUL_DISABLED*/
776794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                    status = PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP,
777794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                        NFCSTATUS_INVALID_REMOTE_DEVICE);
7785d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif  /* PH_FRINFC_MAP_MIFAREUL_DISABLED*/
7795d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                }
780794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                else if ((0x08 == (sak & 0x18)) ||
781eb6da80b266a263350769a0e5629f4089aad32bbSunil Jogi                        (0x18 == (sak & 0x18)) ||
782eb6da80b266a263350769a0e5629f4089aad32bbSunil Jogi                        (0x01 == sak))
7835d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                {
7845d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    /*  The SAK/Sel_Res says the card is of the type
7855d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    Mifare Standard */
7865d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifndef PH_FRINFC_MAP_MIFARESTD_DISABLED
7875d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    status = phFriNfc_MifareStdMap_ChkNdef( NdefMap);
7885d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#else   /* PH_FRINFC_MAP_MIFARESTD_DISABLED*/
789794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                    status = PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP,
790794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                        NFCSTATUS_INVALID_REMOTE_DEVICE);
7915d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif  /* PH_FRINFC_MAP_MIFARESTD_DISABLED*/
7925d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                }
7935d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                else
7945d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                {
795794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                    /*  Invalid Mifare UL card, as the remote device
796794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                    info - opmode says its a Mifare UL card but,
7975d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    The SAK/Sel_Res is wrong */
798794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                    status = PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP,
7995d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        NFCSTATUS_INVALID_REMOTE_DEVICE);
8005d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                }
8015d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                break;
8025d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            case phHal_eISO14443_B_PICC:
803794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                {
804794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                    status = phFriNfc_Desfire_ChkNdef(NdefMap);
8055d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                }
8065d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                break;
8075d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            case  phHal_eISO14443_A_PICC :
8085d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                /*  Remote device is Desfire card . Check for Desfire
8095d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                NDEF compliancy */
8105d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                if(0x20 == (sak & 0x20))
8115d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                {
8125d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    /*  The SAK/Sel_Res says the card is of the type
8135d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    ISO14443_4A */
8145d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifndef PH_FRINFC_MAP_DESFIRE_DISABLED
8155d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    status = phFriNfc_Desfire_ChkNdef(NdefMap);
8165d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#else   /* PH_FRINFC_MAP_DESFIRE_DISABLED*/
817794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                    status = PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP,
818794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                        NFCSTATUS_INVALID_REMOTE_DEVICE);
8195d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif  /* PH_FRINFC_MAP_DESFIRE_DISABLED*/
8205d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                }
8215d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                else
8225d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                {
823794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                    /*  Invalid Desfire card, as the remote device
824794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                    info - opmode says its a desfire card but,
8255d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    The SAK/Sel_Res is wrong */
826794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                    status = PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP,
8275d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        NFCSTATUS_INVALID_REMOTE_DEVICE);
8285d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                }
8295d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                break;
8305d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
8315d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            case phHal_eFelica_PICC:
8325d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
8335d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                /*Set the OpMode Type Flag*/
8345d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifndef PH_FRINFC_MAP_FELICA_DISABLED
8355d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifndef PH_HAL4_ENABLE
8365d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                NdefMap->OpModeType[0] = phHal_eOpModesFelica212;
8375d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                NdefMap->OpModeType[1] = phHal_eOpModesArrayTerminator;
8385d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif /* #ifndef PH_HAL4_ENABLE */
8395d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                status = phFriNfc_Felica_ChkNdef(NdefMap);
8405d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#else   /* PH_FRINFC_MAP_FELICA_DISABLED*/
841794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                status = PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP,
842794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                    NFCSTATUS_INVALID_REMOTE_DEVICE);
8435d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif  /* PH_FRINFC_MAP_FELICA_DISABLED*/
8445d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
8455d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                break;
8465d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
8475d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifndef PH_HAL4_ENABLE
8485d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifndef PH_FRINFC_MAP_FELICA_DISABLED
8495d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            case phHal_eFelica424:
8505d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                /*Set the OpMode Ttype Flag*/
8515d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                NdefMap->OpModeType[0] = phHal_eOpModesFelica424;
8525d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                NdefMap->OpModeType[1] = phHal_eOpModesArrayTerminator;
8535d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                status = phFriNfc_Felica_ChkNdef(NdefMap);
8545d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#else   /* PH_FRINFC_MAP_FELICA_DISABLED*/
855794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                status = PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP,
856794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                    NFCSTATUS_INVALID_REMOTE_DEVICE);
8575d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif  /* PH_FRINFC_MAP_FELICA_DISABLED*/
8585d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                break;
8595d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif
8605d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
8615d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            case phHal_eJewel_PICC :
8625d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                /*  Remote device is Topaz card . Check for Topaz
8635d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                NDEF compliancy */
8645d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifdef PH_HAL4_ENABLE
8655d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifndef PH_FRINFC_MAP_TOPAZ_DISABLED
8665d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            /* Decide on the Header bytes to know the
867794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                   Type of the Topaz card.Card could be Static or
8685d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                   Dynamic type. These are of type NFFC-NDEF Data Application*/
869794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                if ( NdefMap->psRemoteDevInfo->RemoteDevInfo.Jewel_Info.HeaderRom0
8705d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                == PH_FRINFC_TOPAZ_HEADROM0_VAL)
8715d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                {
8725d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
8735d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        status = phFriNfc_TopazMap_ChkNdef(NdefMap);
8745d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                }
8755d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifndef PH_FRINFC_MAP_TOPAZ_DYNAMIC_DISABLED
876794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                else if( NdefMap->psRemoteDevInfo->RemoteDevInfo.Jewel_Info.HeaderRom0
8775d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                == PH_FRINFC_TOPAZ_DYNAMIC_HEADROM0_VAL)
8785d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                {
8795d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
8805d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    status = phFriNfc_TopazDynamicMap_ChkNdef(NdefMap);
8815d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                }
8825d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif
8835d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                else
8845d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                {
8855d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
886794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                    status = PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP,
8875d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                           NFCSTATUS_INVALID_REMOTE_DEVICE);
8885d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
8895d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                }
8905d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif
8915d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
8925d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
8935d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#else
8945d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                if(0xC2 == sak)
8955d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                {
8965d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    /*  The SAK/Sel_Res says the card is of the type
8975d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    ISO14443_4A */
8985d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifndef PH_FRINFC_MAP_TOPAZ_DISABLED
8995d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    status = phFriNfc_TopazMap_ChkNdef(NdefMap);
9005d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#else   /* PH_FRINFC_MAP_TOPAZ_DISABLED*/
901794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                    status = PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP,
902794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                        NFCSTATUS_INVALID_REMOTE_DEVICE);
9035d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif  /* PH_FRINFC_MAP_TOPAZ_DISABLED*/
9045d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                }
9055d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                else
906794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                {
907794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                    /*  Invalid Topaz card, as the remote device
908794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                    info - opmode says its a desfire card but,
9095d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    The SAK/Sel_Res is wrong */
910794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                    status = PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP,
9115d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        NFCSTATUS_INVALID_REMOTE_DEVICE);
9125d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                }
913794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands#endif
9145d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                break;
9155d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
9165d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifdef PHFRINFC_OVRHAL_MOCKUP
9175d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            case phHal_eOpModesMockup :
9185d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                /*Set the OpMode Ttype Flag*/
9195d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                NdefMap->OpModeType[0] = phHal_eOpModesMockup;
9205d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                NdefMap->OpModeType[1] = phHal_eOpModesArrayTerminator;
9215d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                status = phFriNfc_Mockup_ChkNdef(NdefMap);
9225d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                break;
9235d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif  /* PHFRINFC_OVRHAL_MOCKUP */
9245d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
9255d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            default :
9265d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                /*  Remote device is not recognised.
9275d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                Probably not NDEF compliant */
9285d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                status = PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP,
9295d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    NFCSTATUS_INVALID_REMOTE_DEVICE);
9305d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                break;
9315d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            }
9325d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        }
9335d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    }
9345d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    return status;
9355d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly}
9365d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
9375d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
9385d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly/*!
9395d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* \brief Completion Routine, Processing function, needed to avoid long blocking.
9405d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* \note The lower (Overlapped HAL) layer must register a pointer to this function as a Completion
9415d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly*       Routine in order to be able to notify the component that an I/O has finished and data are
9425d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly*       ready to be processed.
9435d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* This is a main Ndef Map Process api.Internally,depending upon the different
9445d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* CardTypes,respective mifare/desfire process functions are called.
9455d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly*
9465d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly*/
9475d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
9485d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pellyvoid phFriNfc_NdefMap_Process(  void        *Context,
9495d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                              NFCSTATUS   Status)
9505d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{
9515d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
9525d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    if ( Context != NULL )
9535d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    {
9545d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        phFriNfc_NdefMap_t  *NdefMap = (phFriNfc_NdefMap_t *)Context;
9555d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        /*
9565d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        * 4 Changed
9575d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        *   Description: Opmode replace with RevDevTyp.
9585d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        */
9595d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
9605d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        switch ( NdefMap->psRemoteDevInfo->RemDevType )
9615d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        {
9625d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        case  phHal_eMifare_PICC :
9635d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        case phHal_eISO14443_3A_PICC:
9645d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
9655d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            if((NdefMap->CardType == PH_FRINFC_NDEFMAP_MIFARE_STD_1K_CARD) ||
9665d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                (NdefMap->CardType == PH_FRINFC_NDEFMAP_MIFARE_STD_4K_CARD))
9675d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            {
9685d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifndef PH_FRINFC_MAP_MIFARESTD_DISABLED
9695d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                /*  Remote device is Mifare Standard card */
9705d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                phFriNfc_MifareStdMap_Process(NdefMap,Status);
9715d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#else   /* PH_FRINFC_MAP_MIFARESTD_DISABLED*/
972794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                Status = PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP,
973794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                    NFCSTATUS_INVALID_REMOTE_DEVICE);
9745d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif  /* PH_FRINFC_MAP_MIFARESTD_DISABLED*/
9755d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            }
9765d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            else
9775d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            {
9785d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifndef PH_FRINFC_MAP_MIFAREUL_DISABLED
9795d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                /*  Remote device is Mifare UL card */
9805d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                phFriNfc_MifareUL_Process(NdefMap,Status);
9815d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#else   /* PH_FRINFC_MAP_MIFAREUL_DISABLED*/
982794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                Status = PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP,
983794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                    NFCSTATUS_INVALID_REMOTE_DEVICE);
9845d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif  /* PH_FRINFC_MAP_MIFAREUL_DISABLED*/
9855d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            }
9865d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            break;
9875d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
9885d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        case phHal_eISO14443_A_PICC :
9895d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifndef PH_FRINFC_MAP_DESFIRE_DISABLED
9905d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            /*  Remote device is Desfire card */
9915d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            phFriNfc_Desfire_Process(NdefMap, Status);
9925d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#else   /* PH_FRINFC_MAP_DESFIRE_DISABLED*/
993794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands            Status = PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP,
994794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                NFCSTATUS_INVALID_REMOTE_DEVICE);
9955d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif  /* PH_FRINFC_MAP_DESFIRE_DISABLED*/
9965d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            break;
9975d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        case phHal_eISO14443_B_PICC:
9985d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            /*  Remote device is Desfire card */
9995d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            phFriNfc_Desfire_Process(NdefMap, Status);
10005d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            break;
10015d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
10025d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        case phHal_eFelica_PICC :
10035d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifndef PH_FRINFC_MAP_FELICA_DISABLED
10045d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            /*  Remote device is Felica Smart card */
10055d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            phFriNfc_Felica_Process(NdefMap, Status);
10065d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#else   /* PH_FRINFC_MAP_FELICA_DISABLED*/
1007794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands            Status = PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP,
1008794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                NFCSTATUS_INVALID_REMOTE_DEVICE);
10095d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif  /* PH_FRINFC_MAP_FELICA_DISABLED*/
10105d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            break;
10115d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
10125d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        case phHal_eJewel_PICC:
10135d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifndef PH_FRINFC_MAP_TOPAZ_DISABLED
10145d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            if ( NdefMap->CardType == PH_FRINFC_NDEFMAP_TOPAZ_CARD )
10155d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            {
10165d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                /*  Remote device is Topaz Smart card */
10175d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                phFriNfc_TopazMap_Process(NdefMap, Status);
10185d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            }
10195d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifndef PH_FRINFC_MAP_TOPAZ_DYNAMIC_DISABLED
10205d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            else if ( NdefMap->CardType == PH_FRINFC_NDEFMAP_TOPAZ_DYNAMIC_CARD )
10215d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            {
10225d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                /*  Remote device is Topaz Smart card */
10235d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                phFriNfc_TopazDynamicMap_Process(NdefMap, Status);
10245d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            }
10255d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            else
10265d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            {
1027794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                Status = PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP,
1028794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                NFCSTATUS_INVALID_REMOTE_DEVICE);
10295d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
10305d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            }
10315d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            break;
10325d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif  /* PH_FRINFC_MAP_TOPAZ_DYNAMIC_DISABLED*/
10335d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif
10345d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
10355d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
10365d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifdef PHFRINFC_OVRHAL_MOCKUP
10375d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        case phHal_eOpModesMockup:
10385d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            /*  Remote device is Desfire card */
1039794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands            phFriNfc_Mockup_Process(NdefMap, Status);
10405d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            break;
10415d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif  /* PHFRINFC_OVRHAL_MOCKUP*/
1042794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands        default :
10435d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            /*  Remote device opmode not recognised.
10445d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            Probably not NDEF compliant */
10455d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            Status = PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP,
10465d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                NFCSTATUS_INVALID_REMOTE_DEVICE);
10475d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            /* set the state back to the Reset_Init state*/
10485d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            NdefMap->State =  PH_FRINFC_NDEFMAP_STATE_RESET_INIT;
10495d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
10505d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            /* set the completion routine*/
10515d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            NdefMap->CompletionRoutine[PH_FRINFC_NDEFMAP_CR_INVALID_OPE].
10525d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                CompletionRoutine(NdefMap->CompletionRoutine->Context, Status);
10535d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            break;
10545d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        }
10555d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    }
10565d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    else
10575d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    {
10585d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        Status = PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP,\
10595d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            NFCSTATUS_INVALID_PARAMETER);
10605d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        /* The control should not come here. As Context itself is NULL ,
10615d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        Can't call the CR*/
10625d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    }
10635d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly}
10645d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
10655d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#if 0
10665d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
10675d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS phFriNfc_ChkAndParseTLV(phFriNfc_NdefMap_t    *NdefMap)
10685d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{
10695d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    NFCSTATUS status = NFCSTATUS_PENDING;
10705d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
10715d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    switch ( NdefMap->CardType )
10725d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    {
10735d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifndef PH_FRINFC_MAP_MIFAREUL_DISABLED
10745d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            case  PH_FRINFC_NDEFMAP_MIFARE_UL_CARD :
10755d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
10765d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
10775d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                break;
10785d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif /* PH_FRINFC_MAP_MIFAREUL_DISABLED */
10795d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
10805d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifndef PH_FRINFC_MAP_DESFIRE_DISABLED
10815d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            case PH_FRINFC_NDEFMAP_ISO14443_4A_CARD :
10825d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                status = phFriNfc_Desf_ChkAndParseTLV(NdefMap);
10835d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                return (status);
10845d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
10855d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                break;
10865d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif  /* PH_FRINFC_MAP_DESFIRE_DISABLED */
10875d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
10885d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifndef PH_FRINFC_MAP_MIFARESTD_DISABLED
10895d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            case  PH_FRINFC_NDEFMAP_MIFARE_STD_1K_CARD :
10905d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            case  PH_FRINFC_NDEFMAP_MIFARE_STD_4K_CARD :
10915d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
10925d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                break;
10935d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif  /* PH_FRINFC_MAP_MIFARESTD_DISABLED */
10945d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
10955d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifndef PH_FRINFC_MAP_FELICA_DISABLED
10965d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            case PH_FRINFC_NDEFMAP_FELICA_SMART_CARD :
10975d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                ;
10985d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                break;
10995d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif  /* PH_FRINFC_MAP_FELICA_DISABLED */
11005d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
1101794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands            default :
11025d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                /*  Unknown card type. Return error */
11035d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                status = PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP,\
11045d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    NFCSTATUS_INVALID_REMOTE_DEVICE);
11055d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
11065d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                break;
11075d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    }
11085d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
11095d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    return ( status);
11105d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly}
11115d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif
11125d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
11135d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
11145d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifndef PH_FRINFC_MAP_DESFIRE_DISABLED
11155d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pellystatic void phFriNfc_DesfCapCont_HReset(phFriNfc_NdefMap_t *NdefMap)
11165d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{
11175d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    /* Initialise/reset the desfire capability contatiner structure variables*/
11185d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    NdefMap->DesfireCapContainer.DesfVersion = 0;
11195d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    NdefMap->DesfireCapContainer.NdefMsgFid  = 0;
11205d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    NdefMap->DesfireCapContainer.NdefFileSize = 0;
11215d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    NdefMap->DesfireCapContainer.MaxCmdSize  = 0;
11225d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    NdefMap->DesfireCapContainer.MaxRespSize = 0;
11235d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    NdefMap->DesfireCapContainer.ReadAccess  = 0;
11245d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    NdefMap->DesfireCapContainer.WriteAccess = 0;
11255d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly}
11265d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif  /* PH_FRINFC_MAP_DESFIRE_DISABLED */
11275d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
11285d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifndef PH_FRINFC_MAP_FELICA_DISABLED
11295d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pellystatic void phFriNfc_Felica_HReset(phFriNfc_NdefMap_t *NdefMap)
11305d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{
11315d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    uint8_t index=0;
11325d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
11335d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    /* Initialise/reset the different felica structure variables*/
11345d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    /* Reset all the felica Basic staruture variables*/
11355d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    NdefMap->Felica.CurBlockNo = 0;
11365d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
11375d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    for(index = 0;index<PH_FRINFC_NDEFMAP_FELICA_BLOCK_SIZE;index++)
11385d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    {
11395d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        NdefMap->Felica.Rd_BytesToCopyBuff[index] = 0;
11405d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        NdefMap->Felica.Wr_RemainedBytesBuff[index] = 0;
11415d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    }
11425d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    NdefMap->Felica.Rd_NoBytesToCopy = 0;
11435d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    NdefMap->Felica.Wr_BytesRemained = 0;
11445d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
11455d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
11465d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    /* Reset all the felica attribute information staruture variables*/
11475d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    for(index = 0;index<PH_FRINFC_NDEFMAP_FELICA_ATTR_NDEF_DATA_LEN;index++)
11485d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    {
11495d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        NdefMap->FelicaAttrInfo.LenBytes[index] = 0;
11505d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    }
11515d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
11525d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    NdefMap->FelicaAttrInfo.Nmaxb = 0;
11535d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    NdefMap->FelicaAttrInfo.Nbr = 0;
11545d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    NdefMap->FelicaAttrInfo.Nbw= 0;
11555d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    NdefMap->FelicaAttrInfo.RdWrFlag = 0;
11565d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    NdefMap->FelicaAttrInfo.WriteFlag = 0;
11575d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    NdefMap->Felica.CurrBytesRead=0;
11585d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
11595d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    /* Reset all the felica manufacture details staruture variables*/
11605d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    for(index = 0;index<PH_FRINFC_NDEFMAP_FELICA_MANUF_ID_DATA_LEN;index++)
11615d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    {
11625d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        NdefMap->FelicaManufDetails.ManufID[index] = 0;
11635d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        NdefMap->FelicaManufDetails.ManufParameter[index] = 0;
11645d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    }
11655d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    NdefMap->Felica.NoBlocksWritten=0;
11665d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly}
11675d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif  /* PH_FRINFC_MAP_FELICA_DISABLED */
11685d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
11695d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS phFriNfc_NdefMap_EraseNdef(phFriNfc_NdefMap_t *NdefMap)
11705d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{
11715d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    NFCSTATUS   status = NFCSTATUS_PENDING;
11725d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
11735d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    static uint8_t     PktData[3] = PH_FRINFC_NDEFMAP_EMPTY_NDEF_MSG;
11745d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    uint8_t     MemOffset = PH_FRINFC_NDEFMAP_SEEK_BEGIN;
1175d5dae5f9ae4f79985a032d011b6b3d12749823cdJack Ren    static uint32_t    PacketDataLength = sizeof(PktData);
11765d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
11775d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    if (NdefMap == NULL )
11785d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    {
11795d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        /*  Invalid input parameter error   */
11805d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        status = PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP,NFCSTATUS_INVALID_PARAMETER);
11815d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    }
11825d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    else
11835d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    {
11845d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        switch ( NdefMap->CardType)
11855d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        {
11865d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifdef PHFRINFC_OVRHAL_MOCKUP
11875d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            case PH_FRINFC_NDEFMAP_MOCKUP_CARD :
11885d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif  /* PHFRINFC_OVRHAL_MOCKUP */
11895d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            case  PH_FRINFC_NDEFMAP_MIFARE_UL_CARD :
11905d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            case  PH_FRINFC_NDEFMAP_ISO14443_4A_CARD :
1191794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands#ifdef DESFIRE_EV1
1192794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands            case  PH_FRINFC_NDEFMAP_ISO14443_4A_CARD_EV1 :
1193794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands#endif /* #ifdef DESFIRE_EV1 */
11945d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            case  PH_FRINFC_NDEFMAP_MIFARE_STD_1K_CARD :
11955d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            case  PH_FRINFC_NDEFMAP_MIFARE_STD_4K_CARD :
11965d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifndef PH_FRINFC_MAP_TOPAZ_DISABLED
11975d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            case  PH_FRINFC_NDEFMAP_TOPAZ_CARD :
11985d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifndef PH_FRINFC_MAP_TOPAZ_DYNAMIC_DISABLED
11995d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            case  PH_FRINFC_NDEFMAP_TOPAZ_DYNAMIC_CARD :
12005d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif
1201a6e012a748e70ab203655d4e1c0d0a77b6515fadMartijn Coenen#ifndef PH_FRINFC_MAP_ISO15693_DISABLED
1202a6e012a748e70ab203655d4e1c0d0a77b6515fadMartijn Coenen            case PH_FRINFC_NDEFMAP_ISO15693_CARD:
1203a6e012a748e70ab203655d4e1c0d0a77b6515fadMartijn Coenen#endif
12045d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif
12055d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                /*  Mifare card selected. Call Mifare Write */
12065d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                status =  phFriNfc_NdefMap_WrNdef( NdefMap,
12075d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    PktData,
12085d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    &PacketDataLength,
12095d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    MemOffset);
12105d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                break;
12115d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
12125d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            case PH_FRINFC_NDEFMAP_FELICA_SMART_CARD :
12135d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
12145d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifndef PH_FRINFC_MAP_FELICA_DISABLED
1215794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                /*  Felica card selected. Call to write EMPTY NDEF Msg */
12165d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                status =  phFriNfc_Felica_EraseNdef( NdefMap );
12175d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#else   /* PH_FRINFC_MAP_FELICA_DISABLED*/
1218794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                status = PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP,
1219794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                    NFCSTATUS_INVALID_REMOTE_DEVICE);
12205d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif  /* PH_FRINFC_MAP_FELICA_DISABLED*/
12215d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
12225d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                break;
1223794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands            default :
12245d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                /*  Unknown card type. Return error */
12255d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                status = PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP,
12265d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    NFCSTATUS_INVALID_REMOTE_DEVICE);
12275d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                break;
12285d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        }
12295d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    }
12305d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    return status;
12315d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly}
12325d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly/*  Harsha: Fix for the mantis entry 0000420: NDEF_MAP: Size of NDEF data:
12335d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pellyno abstracted way for user to know how many bytes to read/write  */
12345d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
12355d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly/*!
12365d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* \brief Helper API, exposed to the user to enable him to know the size
12375d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly*        of the NDEF data that he can write in to the card.
12385d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly*/
12395d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS phFriNfc_NdefMap_GetContainerSize(const phFriNfc_NdefMap_t *NdefMap,uint32_t *maxSize, uint32_t *actualSize)
12405d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{
12415d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    NFCSTATUS   result = NFCSTATUS_SUCCESS;
12425d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    uint8_t     sect_index = 0;
12435d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    uint8_t     actual_sect_index = 0;
12445d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    uint8_t     count_index = 0;
12455d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
12465d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    if( (NdefMap == NULL) || (maxSize == NULL) || (actualSize == NULL))
12475d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    {
12485d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        /*  Invalid input parameter error   */
12495d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        result = PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP,NFCSTATUS_INVALID_PARAMETER);
12505d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    }
12515d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    else
12525d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    {
12535d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        /*  Which card ? */
12545d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        switch(NdefMap->CardType)
12555d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        {
12565d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifndef PH_FRINFC_MAP_MIFAREUL_DISABLED
12575d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            case  PH_FRINFC_NDEFMAP_MIFARE_UL_CARD :
12585d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                /*  Mifare UL card */
1259794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                /*  The integration needs to ensure that the checkNdef
12605d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                function has been called before calling this function,
12615d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                otherwise NdefMap->CardMemSize will be 0 */
12625d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                *maxSize = NdefMap->MifareULContainer.RemainingSize;
1263794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                /* In Mifare UL card, the actual size is the length field
12645d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                value of the TLV */
12655d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                *actualSize = NdefMap->TLVStruct.ActualSize;
12665d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                break;
12675d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif  /* PH_FRINFC_MAP_MIFAREUL_DISABLED */
12685d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
12695d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifndef PH_FRINFC_MAP_DESFIRE_DISABLED
12705d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            case PH_FRINFC_NDEFMAP_ISO14443_4A_CARD :
1271794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands#ifdef DESFIRE_EV1
1272794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands            case PH_FRINFC_NDEFMAP_ISO14443_4A_CARD_EV1 :
1273794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands#endif /* #ifdef DESFIRE_EV1 */
12745d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                /*  Desfire card */
1275794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                /*  The integration needs to ensure that the checkNdef
12765d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                function has been called before calling this function,
1277794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                otherwise NdefMap->DesfireCapContainer.NdefFileSize
12785d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                will be 0 */
12795d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                /* -2 bytes represents the size field bytes*/
12805d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                *maxSize = NdefMap->DesfireCapContainer.NdefFileSize - 2;
1281794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                /* In Desfire card, the actual size cant be calculated so
12825d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                the actual size is given as 0xFFFFFFFF */
12835d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                *actualSize = NdefMap->DesfireCapContainer.NdefDataLen;
12845d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                break;
12855d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif  /* PH_FRINFC_MAP_DESFIRE_DISABLED */
12865d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
12875d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifndef PH_FRINFC_MAP_TOPAZ_DISABLED
12885d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            case PH_FRINFC_NDEFMAP_TOPAZ_CARD :
12895d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                /*  Topaz card */
1290794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                /*  The integration needs to ensure that the checkNdef
12915d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                function has been called before calling this function,
12925d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                otherwise NdefMap->CardMemSize will be 0 */
12935d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                *maxSize = NdefMap->TopazContainer.RemainingSize;
1294794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                /* In Topaz card, the actual size is the length field value of the
12955d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                TLV */
12965d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                *actualSize = NdefMap->TLVStruct.BytesRemainLinTLV;
12975d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                break;
12985d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifndef PH_FRINFC_MAP_TOPAZ_DYNAMIC_DISABLED
12995d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            case PH_FRINFC_NDEFMAP_TOPAZ_DYNAMIC_CARD :
13005d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                /*  Topaz 512 card */
1301794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                /*  The integration needs to ensure that the checkNdef
13025d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                function has been called before calling this function,
13035d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                otherwise NdefMap->CardMemSize will be 0 */
13045d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                *maxSize = NdefMap->TopazContainer.NDEFRWSize;
1305794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                /* In Topaz card, the actual size is the length field value of the
13065d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                TLV */
13075d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                *actualSize = NdefMap->TopazContainer.ActualNDEFMsgSize;
13085d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                break;
13095d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
13105d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif  /* PH_FRINFC_MAP_TOPAZ_DISABLED */
13115d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif  /* PH_FRINFC_MAP_TOPAZ_DYNAMIC_DISABLED */
13125d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifndef PH_FRINFC_MAP_MIFARESTD_DISABLED
13135d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            case  PH_FRINFC_NDEFMAP_MIFARE_STD_1K_CARD :
13145d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            case  PH_FRINFC_NDEFMAP_MIFARE_STD_4K_CARD :
13155d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                /*  Mifare std card */
13165d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
13175d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                /*  Max size is the number of NDEF compliant blocks in the card
13185d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                multiplied by 16 bytes */
13195d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifndef PH_HAL4_ENABLE
13205d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
13215d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                *maxSize = NdefMap->StdMifareContainer.remainingSize;
13225d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
13235d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#else /* #ifndef PH_HAL4_ENABLE */
13245d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
1325794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                while ((PH_FRINFC_MIFARESTD_NDEF_COMP ==
1326794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                        NdefMap->StdMifareContainer.aid[count_index]) &&
1327794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                        (count_index <
13285d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        PH_FRINFC_NDEFMAP_MIFARESTD_TOTALNO_BLK))
13295d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                {
13305d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    actual_sect_index++;
13315d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    count_index++;
13325d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                }
13335d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                /* Total number of sectors in 1k = 16 (0 to 15, MAD sector number = 0)
1334794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                    Total number of sectors in 4k = 40 (0 to 39,
1335794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                        MAD sector number = 0 and 16, After block number 31, each sector
13365d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        has 16 blocks)
1337794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                    Every last block of the sector is the sector header, So the blocks
1338794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                    that can be read or written in each sector is always
13395d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        (number of blocks in each sector - 1)
1340794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                    No of blocks in the one sector till the sector number 0 to 31
1341794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                        (total 32 sectors) =
13425d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        4 blocks, So blocks that can be read/write = (4 - 1 = 3 blocks)
1343794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                    No of blocks in the one sector after the sector number 31 to 39 =
13445d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        16 blocks, So blocks that can be read/write = (16 - 1 = 15 blocks)
1345794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                    Each block has 16 bytes
13465d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    To calculate number of bytes in the sector, depending on the number
13475d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    of blocks multiplied by 16
13485d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                */
1349794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                if (PH_FRINFC_NDEFMAP_MIFARE_STD_4K_CARD ==
13505d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    NdefMap->CardType)
1351794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                {
13525d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    if (actual_sect_index > 32)
13535d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    {
13545d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        sect_index = (actual_sect_index - 32);
1355794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                        /* Here, 30 is used because block number 0 and 16 are MAD blocks
1356794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                        which cannot be used for reading and writing data
13575d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        3 and 15 are blocks in each sector which can be read/write
13585d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        3 indicates the sector is in between (0 and 31)
13595d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        15 indicates the sector is in between (32 to 39)
1360794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                        16 is always number of bytes in each block
1361794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                        4 is used because each NDEF write has to write using the
1362794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                            TLV format and T & L takes 4 bytes length and V is the
13635d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                            input data
13645d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        */
13655d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        *maxSize = (((30 * (16 * 3)) + (sect_index * (16 * 15))) - 4);
13665d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    }
13675d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    else if (actual_sect_index <= 16)
13685d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    {
13695d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        *maxSize = (((actual_sect_index - 1) * (16 * 3)) - 4);
13705d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    }
13715d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    else
13725d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    {
13735d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        *maxSize = (((actual_sect_index - 2)  * (16 * 3)) - 4);
13745d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    }
13755d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                }
13765d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                else
13775d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                {
1378794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                    /* Here, 16 is always number of bytes in each block
13795d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        3 indicates the sector is in between (0 and 31) */
13805d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    if (actual_sect_index > NdefMap->StdMifareContainer.SectorIndex)
13815d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    {
13825d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        actual_sect_index = NdefMap->StdMifareContainer.SectorIndex;
13835d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    }
13845d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    *maxSize = (((actual_sect_index - 1) * (16 * 3)) - 4);
13855d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                }
1386794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands
13875d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif /* #ifndef PH_HAL4_ENABLE */
13885d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                *actualSize = NdefMap->TLVStruct.BytesRemainLinTLV;
13895d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
13905d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                break;
13915d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif  /* PH_FRINFC_MAP_MIFARESTD_DISABLED */
13925d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
13935d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifndef PH_FRINFC_MAP_FELICA_DISABLED
13945d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            case PH_FRINFC_NDEFMAP_FELICA_SMART_CARD :
13955d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                /*  Felica card */
13965d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
13975d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                *maxSize = NdefMap->FelicaAttrInfo.Nmaxb * 0x10;
13985d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
13995d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                /* In Felica Card, actual size is calculated using the Length Bytes */
14005d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                *actualSize = NdefMap->FelicaAttrInfo.LenBytes[0];
14015d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                *actualSize = *actualSize << 16;
14025d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                *actualSize += NdefMap->FelicaAttrInfo.LenBytes[1];
14035d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                *actualSize = *actualSize << 8;
1404794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                *actualSize += NdefMap->FelicaAttrInfo.LenBytes[2];
14055d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                break;
14065d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif  /* PH_FRINFC_MAP_FELICA_DISABLED */
14075d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
1408a6e012a748e70ab203655d4e1c0d0a77b6515fadMartijn Coenen#ifndef PH_FRINFC_MAP_ISO15693_DISABLED
1409a6e012a748e70ab203655d4e1c0d0a77b6515fadMartijn Coenen            case PH_FRINFC_NDEFMAP_ISO15693_CARD:
1410a6e012a748e70ab203655d4e1c0d0a77b6515fadMartijn Coenen            {
14114f3ef022906e5d3b763fbcfe81e3f5cd53976ab5Martijn Coenen#if 1
1412a6e012a748e70ab203655d4e1c0d0a77b6515fadMartijn Coenen                uint16_t                    block_no = 0;
1413a6e012a748e70ab203655d4e1c0d0a77b6515fadMartijn Coenen                uint8_t                     byte_no = 0;
1414a6e012a748e70ab203655d4e1c0d0a77b6515fadMartijn Coenen
1415a6e012a748e70ab203655d4e1c0d0a77b6515fadMartijn Coenen                block_no = (uint16_t)
1416a6e012a748e70ab203655d4e1c0d0a77b6515fadMartijn Coenen                    ISO15693_GET_VALUE_FIELD_BLOCK_NO (
1417a6e012a748e70ab203655d4e1c0d0a77b6515fadMartijn Coenen                        NdefMap->ISO15693Container.ndef_tlv_type_blk,
1418a6e012a748e70ab203655d4e1c0d0a77b6515fadMartijn Coenen                        NdefMap->ISO15693Container.ndef_tlv_type_byte,
1419a6e012a748e70ab203655d4e1c0d0a77b6515fadMartijn Coenen                        NdefMap->ISO15693Container.actual_ndef_size);
1420a6e012a748e70ab203655d4e1c0d0a77b6515fadMartijn Coenen                byte_no = (uint8_t)
1421a6e012a748e70ab203655d4e1c0d0a77b6515fadMartijn Coenen                    ISO15693_GET_VALUE_FIELD_BYTE_NO (
1422a6e012a748e70ab203655d4e1c0d0a77b6515fadMartijn Coenen                        NdefMap->ISO15693Container.ndef_tlv_type_blk,
1423a6e012a748e70ab203655d4e1c0d0a77b6515fadMartijn Coenen                        NdefMap->ISO15693Container.ndef_tlv_type_byte,
1424a6e012a748e70ab203655d4e1c0d0a77b6515fadMartijn Coenen                        NdefMap->ISO15693Container.actual_ndef_size);
1425a6e012a748e70ab203655d4e1c0d0a77b6515fadMartijn Coenen
1426a6e012a748e70ab203655d4e1c0d0a77b6515fadMartijn Coenen                *maxSize = (NdefMap->ISO15693Container.max_data_size -
14274f3ef022906e5d3b763fbcfe81e3f5cd53976ab5Martijn Coenen                            ((block_no * ISO15693_BYTES_PER_BLOCK) + byte_no));
14284f3ef022906e5d3b763fbcfe81e3f5cd53976ab5Martijn Coenen#else /* #if 1 */
1429a6e012a748e70ab203655d4e1c0d0a77b6515fadMartijn Coenen                /* 2 is used to exclude the T and L part of the TLV */
1430a6e012a748e70ab203655d4e1c0d0a77b6515fadMartijn Coenen                *maxSize = (NdefMap->ISO15693Container.max_data_size
1431a6e012a748e70ab203655d4e1c0d0a77b6515fadMartijn Coenen                            - ISO15693_BYTES_PER_BLOCK - 2);
14324f3ef022906e5d3b763fbcfe81e3f5cd53976ab5Martijn Coenen#endif /* #if 1 */
1433a6e012a748e70ab203655d4e1c0d0a77b6515fadMartijn Coenen                *actualSize = NdefMap->ISO15693Container.actual_ndef_size;
1434a6e012a748e70ab203655d4e1c0d0a77b6515fadMartijn Coenen                break;
1435a6e012a748e70ab203655d4e1c0d0a77b6515fadMartijn Coenen            }
1436a6e012a748e70ab203655d4e1c0d0a77b6515fadMartijn Coenen#endif
1437a6e012a748e70ab203655d4e1c0d0a77b6515fadMartijn Coenen
14385d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifdef PHFRINFC_OVRHAL_MOCKUP
14395d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            case PH_FRINFC_NDEFMAP_MOCKUP_CARD :
14405d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                *maxSize = 0xFFFFFFFF;
1441794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                /* In Desfire card, the actual size cant be calculated so
14425d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                the actual size is given as 0xFFFFFFFF */
1443794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                *actualSize = 0xFFFFFFFF;
14445d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                break;
14455d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif  /* PHFRINFC_OVRHAL_MOCKUP */
14465d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
1447794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands            default :
14485d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                /*  Unknown card type. Return error */
14495d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                result = PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP,\
14505d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    NFCSTATUS_INVALID_REMOTE_DEVICE);
14515d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                break;
14525d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        }
14535d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    }
14545d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    return(result);
14555d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly}
14565d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
14575d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifdef PHFRINFC_OVRHAL_MOCKUP
1458794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan BrandsNFCSTATUS phFriNfc_NdefMap_MockupCardSetter(phFriNfc_NdefMap_t *NdefMap,
1459794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                                            uint8_t *NdefData,
1460794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                                            uint32_t NdefActualSize,
1461794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                                            uint32_t NdefMaxSize,
14625d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                            uint32_t CardSize)
14635d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{
14645d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    NFCSTATUS Status = NFCSTATUS_SUCCESS;
14655d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    // First check all parameters
14665d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    if((NdefData != NULL) && (NdefMap != NULL))
14675d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    {
14685d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        // OK we can set
1469794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands        NdefMap->MochupContainer.NdefData       = NdefData;
14705d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        NdefMap->MochupContainer.NdefActualSize = NdefActualSize;
14715d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        NdefMap->MochupContainer.NdefMaxSize    = NdefMaxSize;
14725d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        NdefMap->MochupContainer.CardSize       = CardSize;
14735d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        NdefMap->MochupContainer.CurrentBlock   = 0;
14745d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
1475794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands    } else
14765d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    {
1477794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands        Status = PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP, NFCSTATUS_INVALID_PARAMETER);
14785d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    }
14795d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    return Status;
14805d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly}
14815d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
14825d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS phFriNfc_NdefMap_MockupNDefModeEn(uint8_t  *pNdefCompliancy, uint8_t  *pCardType, uint8_t Enable)
14835d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{
14845d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    *pNdefCompliancy = Enable;
14855d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    *pCardType = PH_FRINFC_NDEFMAP_MOCKUP_CARD;
14865d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    return NFCSTATUS_SUCCESS;
14875d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly}
14885d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif  /* PHFRINFC_OVRHAL_MOCKUP */
14895d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
14905d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
14915d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
14925d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
14935d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
14945d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
14955d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
14965d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
1497