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  phFriNfc_MapTools.c
195d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly * \brief NFC Ndef Internal Mapping File.
205d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly *
215d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly * Project: NFC-FRI
225d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly *
23794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands * $Date: Fri Oct 15 13:50:54 2010 $
24794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands * $Author: ing02260 $
25794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands * $Revision: 1.6 $
26794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands * $Aliases:  $
275d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly *
285d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly */
295d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
305d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#include <phFriNfc_NdefMap.h>
315d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#include <phFriNfc_MapTools.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_MIFARESTD_DISABLED
385d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#include <phFriNfc_MifareStdMap.h>
395d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif  /* PH_FRINFC_MAP_MIFARESTD_DISABLED */
405d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
415d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifndef PH_FRINFC_MAP_DESFIRE_DISABLED
425d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#include <phFriNfc_DesfireMap.h>
435d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif  /* PH_FRINFC_MAP_DESFIRE_DISABLED */
445d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
455d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifndef PH_FRINFC_MAP_FELICA_DISABLED
465d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#include <phFriNfc_FelicaMap.h>
475d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif  /* PH_FRINFC_MAP_FELICA_DISABLED */
485d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
495d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#include <phFriNfc_OvrHal.h>
505d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
515d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly/*! \ingroup grp_file_attributes
525d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly *  \name NDEF Mapping
535d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly *
545d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly * File: \ref phFriNfc_MapTools.c
555d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly *       This file has functions which are used common across all the
565d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly *       typ1/type2/type3/type4 tags.
575d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly *
585d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly */
595d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly/*@{*/
60794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands#define PHFRINFCNDEFMAP_FILEREVISION "$Revision: 1.6 $"
61794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands#define PHFRINFCNDEFMAP_FILEALIASES  "$Aliases:  $"
625d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly/*@}*/
635d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
645d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS phFriNfc_MapTool_SetCardState(phFriNfc_NdefMap_t  *NdefMap,
655d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                        uint32_t            Length)
665d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{
675d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    NFCSTATUS   Result = NFCSTATUS_SUCCESS;
685d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    if(Length == PH_FRINFC_NDEFMAP_MFUL_VAL0)
695d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    {
70794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands        /* As the NDEF LEN / TLV Len is Zero, irrespective of any state the card
715d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly           shall be set to INITIALIZED STATE*/
72794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands        NdefMap->CardState =(uint8_t) (((NdefMap->CardState ==
73794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                                PH_NDEFMAP_CARD_STATE_READ_ONLY) ||
74794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                                (NdefMap->CardState ==
755d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                PH_NDEFMAP_CARD_STATE_INVALID))?
765d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                PH_NDEFMAP_CARD_STATE_INVALID:
775d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                PH_NDEFMAP_CARD_STATE_INITIALIZED);
785d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    }
795d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    else
805d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    {
815d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        switch(NdefMap->CardState)
825d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        {
835d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            case PH_NDEFMAP_CARD_STATE_INITIALIZED:
84794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                NdefMap->CardState =(uint8_t) ((NdefMap->CardState ==
855d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    PH_NDEFMAP_CARD_STATE_INVALID)?
865d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    NdefMap->CardState:
875d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    PH_NDEFMAP_CARD_STATE_READ_WRITE);
885d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            break;
895d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
905d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            case PH_NDEFMAP_CARD_STATE_READ_ONLY:
91794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                NdefMap->CardState = (uint8_t)((NdefMap->CardState ==
925d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    PH_NDEFMAP_CARD_STATE_INVALID)?
935d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    NdefMap->CardState:
945d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    PH_NDEFMAP_CARD_STATE_READ_ONLY);
955d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            break;
965d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
975d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            case PH_NDEFMAP_CARD_STATE_READ_WRITE:
98794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                NdefMap->CardState = (uint8_t)((NdefMap->CardState ==
995d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    PH_NDEFMAP_CARD_STATE_INVALID)?
1005d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    NdefMap->CardState:
1015d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    PH_NDEFMAP_CARD_STATE_READ_WRITE);
10240734e7599249717860f7aeabda494e1bcd86ffeSunil Jogi                if (NdefMap->CardType == PH_FRINFC_NDEFMAP_MIFARE_STD_1K_CARD ||
10340734e7599249717860f7aeabda494e1bcd86ffeSunil Jogi                    NdefMap->CardType == PH_FRINFC_NDEFMAP_MIFARE_STD_4K_CARD)
10440734e7599249717860f7aeabda494e1bcd86ffeSunil Jogi                {
10540734e7599249717860f7aeabda494e1bcd86ffeSunil Jogi                    if(NdefMap->StdMifareContainer.ReadOnlySectorIndex &&
10640734e7599249717860f7aeabda494e1bcd86ffeSunil Jogi                       NdefMap->StdMifareContainer.SectorTrailerBlockNo == NdefMap->StdMifareContainer.currentBlock )
10740734e7599249717860f7aeabda494e1bcd86ffeSunil Jogi                    {
10840734e7599249717860f7aeabda494e1bcd86ffeSunil Jogi                        NdefMap->CardState = (uint8_t)((NdefMap->CardState ==
10940734e7599249717860f7aeabda494e1bcd86ffeSunil Jogi                                                        PH_NDEFMAP_CARD_STATE_INVALID)?
11040734e7599249717860f7aeabda494e1bcd86ffeSunil Jogi                                                        NdefMap->CardState:
11140734e7599249717860f7aeabda494e1bcd86ffeSunil Jogi                                                        PH_NDEFMAP_CARD_STATE_READ_ONLY);
11240734e7599249717860f7aeabda494e1bcd86ffeSunil Jogi                    }
11340734e7599249717860f7aeabda494e1bcd86ffeSunil Jogi                }
1145d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            break;
1155d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
1165d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            default:
1175d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                NdefMap->CardState = PH_NDEFMAP_CARD_STATE_INVALID;
118794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                Result = PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP,
1195d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                            NFCSTATUS_NO_NDEF_SUPPORT);
1205d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            break;
1215d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        }
1225d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    }
123794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands    Result = ((NdefMap->CardState ==
1245d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                PH_NDEFMAP_CARD_STATE_INVALID)?
125794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP,
1265d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                NFCSTATUS_NO_NDEF_SUPPORT):
1275d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                Result);
1285d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    return Result;
1295d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly}
1305d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
1315d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly/*  To check mapping spec version */
1325d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
1335d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS   phFriNfc_MapTool_ChkSpcVer( const phFriNfc_NdefMap_t  *NdefMap,
1345d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                        uint8_t             VersionIndex)
1355d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{
1365d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    NFCSTATUS status = NFCSTATUS_SUCCESS;
1375d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
1385d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    uint8_t TagVerNo = NdefMap->SendRecvBuf[VersionIndex];
1395d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
1405d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    if ( TagVerNo == 0 )
1415d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    {
1425d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        /*Return Status Error � Invalid Format�*/
1435d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        status = PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP,NFCSTATUS_INVALID_FORMAT);
1445d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    }
1455d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    else
1465d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    {
147794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands        switch (NdefMap->CardType)
1485d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        {
149794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands            case PH_FRINFC_NDEFMAP_MIFARE_STD_1K_CARD:
150794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands            case PH_FRINFC_NDEFMAP_MIFARE_STD_4K_CARD:
151794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands            {
152794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                /* calculate the major and minor version number of Mifare std version number */
153794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                status = (( (( PH_NFCFRI_MFSTDMAP_NFCDEV_MAJOR_VER_NUM ==
154794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                                PH_NFCFRI_MFSTDMAP_GET_MAJOR_TAG_VERNO(TagVerNo ) )&&
155794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                            ( PH_NFCFRI_MFSTDMAP_NFCDEV_MINOR_VER_NUM ==
156794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                                PH_NFCFRI_MFSTDMAP_GET_MINOR_TAG_VERNO(TagVerNo))) ||
157794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                            (( PH_NFCFRI_MFSTDMAP_NFCDEV_MAJOR_VER_NUM ==
158794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                                PH_NFCFRI_MFSTDMAP_GET_MAJOR_TAG_VERNO(TagVerNo ) )&&
159794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                            ( PH_NFCFRI_MFSTDMAP_NFCDEV_MINOR_VER_NUM <
160794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                                PH_NFCFRI_MFSTDMAP_GET_MINOR_TAG_VERNO(TagVerNo) )))?
161794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                        NFCSTATUS_SUCCESS:
162794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                        PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP,
163794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                                    NFCSTATUS_INVALID_FORMAT));
164794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                break;
165794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands            }
166794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands
167794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands#ifdef DESFIRE_EV1
168794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands            case PH_FRINFC_NDEFMAP_ISO14443_4A_CARD_EV1:
169794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands            {
170794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                /* calculate the major and minor version number of T3VerNo */
171794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                if( (( PH_NFCFRI_NDEFMAP_NFCDEV_MAJOR_VER_NUM_2 ==
172794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                        PH_NFCFRI_NDEFMAP_GET_MAJOR_TAG_VERNO(TagVerNo ) )&&
173794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                    ( PH_NFCFRI_NDEFMAP_NFCDEV_MINOR_VER_NUM ==
174794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                        PH_NFCFRI_NDEFMAP_GET_MINOR_TAG_VERNO(TagVerNo))) ||
175794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                    (( PH_NFCFRI_NDEFMAP_NFCDEV_MAJOR_VER_NUM_2 ==
176794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                        PH_NFCFRI_NDEFMAP_GET_MAJOR_TAG_VERNO(TagVerNo ) )&&
177794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                    ( PH_NFCFRI_NDEFMAP_NFCDEV_MINOR_VER_NUM <
178794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                        PH_NFCFRI_NDEFMAP_GET_MINOR_TAG_VERNO(TagVerNo) )))
179794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                {
180794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                    status = PHNFCSTVAL(CID_NFC_NONE,NFCSTATUS_SUCCESS);
181794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                }
182794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                else
183794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                {
184794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                    if (( PH_NFCFRI_NDEFMAP_NFCDEV_MAJOR_VER_NUM_2 <
185794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                            PH_NFCFRI_NDEFMAP_GET_MAJOR_TAG_VERNO(TagVerNo) ) ||
186794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                    ( PH_NFCFRI_NDEFMAP_NFCDEV_MAJOR_VER_NUM_2 >
187794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                            PH_NFCFRI_NDEFMAP_GET_MAJOR_TAG_VERNO(TagVerNo)))
188794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                    {
189794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                        status = PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP,NFCSTATUS_INVALID_FORMAT);
190794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                    }
191794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                }
192794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                break;
193794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands            }
194794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands#endif /* #ifdef DESFIRE_EV1 */
195794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands
196794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands            default:
1975d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            {
198794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                /* calculate the major and minor version number of T3VerNo */
199794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                if( (( PH_NFCFRI_NDEFMAP_NFCDEV_MAJOR_VER_NUM ==
200794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                        PH_NFCFRI_NDEFMAP_GET_MAJOR_TAG_VERNO(TagVerNo ) )&&
201794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                    ( PH_NFCFRI_NDEFMAP_NFCDEV_MINOR_VER_NUM ==
202794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                        PH_NFCFRI_NDEFMAP_GET_MINOR_TAG_VERNO(TagVerNo))) ||
203794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                    (( PH_NFCFRI_NDEFMAP_NFCDEV_MAJOR_VER_NUM ==
204794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                        PH_NFCFRI_NDEFMAP_GET_MAJOR_TAG_VERNO(TagVerNo ) )&&
205794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                    ( PH_NFCFRI_NDEFMAP_NFCDEV_MINOR_VER_NUM <
206794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                        PH_NFCFRI_NDEFMAP_GET_MINOR_TAG_VERNO(TagVerNo) )))
207794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                {
208794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                    status = PHNFCSTVAL(CID_NFC_NONE,NFCSTATUS_SUCCESS);
209794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                }
210794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                else
211794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                {
212794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                    if (( PH_NFCFRI_NDEFMAP_NFCDEV_MAJOR_VER_NUM <
213794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                            PH_NFCFRI_NDEFMAP_GET_MAJOR_TAG_VERNO(TagVerNo) ) ||
214794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                    ( PH_NFCFRI_NDEFMAP_NFCDEV_MAJOR_VER_NUM >
215794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                            PH_NFCFRI_NDEFMAP_GET_MAJOR_TAG_VERNO(TagVerNo)))
216794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                    {
217794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                        status = PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP,NFCSTATUS_INVALID_FORMAT);
218794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                    }
219794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                }
220794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands                break;
2215d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            }
222794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands
223794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands
2245d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        }
2255d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    }
226794aa72f7bd1e5b1fb51efb957cb925c7cfed746Jan Brands
2275d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    return (status);
2285d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly}
229