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_IntNdef.c
195d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly * \brief NFC Ndef Internal Mapping File.
205d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly *
215d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly * Project: NFC-FRI
225d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly *
235d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly * $Date: Mon Sep 15 15:09:33 2008 $
245d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly * $Author: ing08205 $
255d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly * $Revision: 1.5 $
265d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly * $Aliases: NFC_FRI1.1_WK838_R9_PREP2,NFC_FRI1.1_WK838_R9_1,NFC_FRI1.1_WK840_R10_PREP1,NFC_FRI1.1_WK840_R10_1,NFC_FRI1.1_WK842_R11_PREP1,NFC_FRI1.1_WK842_R11_PREP2,NFC_FRI1.1_WK842_R11_1,NFC_FRI1.1_WK844_PREP1,NFC_FRI1.1_WK844_R12_1,NFC_FRI1.1_WK846_PREP1,NFC_FRI1.1_WK846_R13_1,NFC_FRI1.1_WK848_PREP1,NFC_FRI1.1_WK848_R14_1,NFC_FRI1.1_WK850_PACK1,NFC_FRI1.1_WK851_PREP1,NFC_FRI1.1_WK850_R15_1,NFC_FRI1.1_WK902_PREP1,NFC_FRI1.1_WK902_R16_1,NFC_FRI1.1_WK904_PREP1,NFC_FRI1.1_WK904_R17_1,NFC_FRI1.1_WK906_R18_1,NFC_FRI1.1_WK908_PREP1,NFC_FRI1.1_WK908_R19_1,NFC_FRI1.1_WK910_PREP1,NFC_FRI1.1_WK910_R20_1,NFC_FRI1.1_WK912_PREP1,NFC_FRI1.1_WK912_R21_1,NFC_FRI1.1_WK914_PREP1,NFC_FRI1.1_WK914_R22_1,NFC_FRI1.1_WK914_R22_2,NFC_FRI1.1_WK916_R23_1,NFC_FRI1.1_WK918_R24_1,NFC_FRI1.1_WK920_PREP1,NFC_FRI1.1_WK920_R25_1,NFC_FRI1.1_WK922_PREP1,NFC_FRI1.1_WK922_R26_1,NFC_FRI1.1_WK924_PREP1,NFC_FRI1.1_WK924_R27_1,NFC_FRI1.1_WK926_R28_1,NFC_FRI1.1_WK928_R29_1,NFC_FRI1.1_WK930_R30_1,NFC_FRI1.1_WK934_PREP_1,NFC_FRI1.1_WK934_R31_1,NFC_FRI1.1_WK941_PREP1,NFC_FRI1.1_WK941_PREP2,NFC_FRI1.1_WK941_1,NFC_FRI1.1_WK943_R32_1,NFC_FRI1.1_WK949_PREP1,NFC_FRI1.1_WK943_R32_10,NFC_FRI1.1_WK943_R32_13,NFC_FRI1.1_WK943_R32_14,NFC_FRI1.1_WK1007_R33_1,NFC_FRI1.1_WK1007_R33_4,NFC_FRI1.1_WK1017_PREP1,NFC_FRI1.1_WK1017_R34_1,NFC_FRI1.1_WK1017_R34_2,NFC_FRI1.1_WK1023_R35_1 $
275d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly *
285d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly */
295d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
305d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#include <phFriNfc_NdefMap.h>
315d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#include <phFriNfc_IntNdefMap.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 phFri_IntNdefMap.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/*@{*/
605d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#define PHFRINFCNDEFMAP_FILEREVISION "$Revision: 1.5 $"
615d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#define PHFRINFCNDEFMAP_FILEALIASES  "$Aliases: NFC_FRI1.1_WK838_R9_PREP2,NFC_FRI1.1_WK838_R9_1,NFC_FRI1.1_WK840_R10_PREP1,NFC_FRI1.1_WK840_R10_1,NFC_FRI1.1_WK842_R11_PREP1,NFC_FRI1.1_WK842_R11_PREP2,NFC_FRI1.1_WK842_R11_1,NFC_FRI1.1_WK844_PREP1,NFC_FRI1.1_WK844_R12_1,NFC_FRI1.1_WK846_PREP1,NFC_FRI1.1_WK846_R13_1,NFC_FRI1.1_WK848_PREP1,NFC_FRI1.1_WK848_R14_1,NFC_FRI1.1_WK850_PACK1,NFC_FRI1.1_WK851_PREP1,NFC_FRI1.1_WK850_R15_1,NFC_FRI1.1_WK902_PREP1,NFC_FRI1.1_WK902_R16_1,NFC_FRI1.1_WK904_PREP1,NFC_FRI1.1_WK904_R17_1,NFC_FRI1.1_WK906_R18_1,NFC_FRI1.1_WK908_PREP1,NFC_FRI1.1_WK908_R19_1,NFC_FRI1.1_WK910_PREP1,NFC_FRI1.1_WK910_R20_1,NFC_FRI1.1_WK912_PREP1,NFC_FRI1.1_WK912_R21_1,NFC_FRI1.1_WK914_PREP1,NFC_FRI1.1_WK914_R22_1,NFC_FRI1.1_WK914_R22_2,NFC_FRI1.1_WK916_R23_1,NFC_FRI1.1_WK918_R24_1,NFC_FRI1.1_WK920_PREP1,NFC_FRI1.1_WK920_R25_1,NFC_FRI1.1_WK922_PREP1,NFC_FRI1.1_WK922_R26_1,NFC_FRI1.1_WK924_PREP1,NFC_FRI1.1_WK924_R27_1,NFC_FRI1.1_WK926_R28_1,NFC_FRI1.1_WK928_R29_1,NFC_FRI1.1_WK930_R30_1,NFC_FRI1.1_WK934_PREP_1,NFC_FRI1.1_WK934_R31_1,NFC_FRI1.1_WK941_PREP1,NFC_FRI1.1_WK941_PREP2,NFC_FRI1.1_WK941_1,NFC_FRI1.1_WK943_R32_1,NFC_FRI1.1_WK949_PREP1,NFC_FRI1.1_WK943_R32_10,NFC_FRI1.1_WK943_R32_13,NFC_FRI1.1_WK943_R32_14,NFC_FRI1.1_WK1007_R33_1,NFC_FRI1.1_WK1007_R33_4,NFC_FRI1.1_WK1017_PREP1,NFC_FRI1.1_WK1017_R34_1,NFC_FRI1.1_WK1017_R34_2,NFC_FRI1.1_WK1023_R35_1 $"
625d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly/*@}*/
635d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
645d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
655d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly/* \note    This function has to be called at the beginning, after creating an
665d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly *          instance of \ref phFriNfc_NdefMap_t . Use this function to reset
675d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly *          the instance and/or switch to a different underlying device (
685d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly *          different NFC device or device mode, or different Remote Device).
695d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly */
705d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
715d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
725d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#if 0
735d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS phFriNfc_ChkAndParseTLV(phFriNfc_NdefMap_t    *NdefMap)
745d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{
755d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    NFCSTATUS status = NFCSTATUS_PENDING;
765d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
775d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    switch ( NdefMap->CardType )
785d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    {
795d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        #ifndef PH_FRINFC_MAP_MIFAREUL_DISABLED
805d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            case  PH_FRINFC_NDEFMAP_MIFARE_UL_CARD :
815d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
825d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
835d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            break;
845d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif /* PH_FRINFC_MAP_MIFAREUL_DISABLED */
855d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
865d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifndef PH_FRINFC_MAP_DESFIRE_DISABLED
875d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            case PH_FRINFC_NDEFMAP_ISO14443_4A_CARD :
885d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                status = phFriNfc_Desf_ChkAndParseTLV(NdefMap,PH_FRINFC_NDEFMAP_DESF_TLV_INDEX);
895d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                return (status);
905d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
915d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            break;
925d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif  /* PH_FRINFC_MAP_DESFIRE_DISABLED */
935d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
945d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifndef PH_FRINFC_MAP_MIFARESTD_DISABLED
955d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            case  PH_FRINFC_NDEFMAP_MIFARE_STD_1K_CARD :
965d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            case  PH_FRINFC_NDEFMAP_MIFARE_STD_4K_CARD :
975d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
985d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            break;
995d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif  /* PH_FRINFC_MAP_MIFARESTD_DISABLED */
1005d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
1015d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifndef PH_FRINFC_MAP_FELICA_DISABLED
1025d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            case PH_FRINFC_NDEFMAP_FELICA_SMART_CARD :
1035d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                ;
1045d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            break;
1055d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif  /* PH_FRINFC_MAP_FELICA_DISABLED */
1065d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
1075d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            default :
1085d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                /*  Unknown card type. Return error */
1095d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                status = PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP,\
1105d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        NFCSTATUS_INVALID_REMOTE_DEVICE);
1115d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
1125d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            break;
1135d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly     }
1145d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
1155d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    return ( status);
1165d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly}
1175d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif
1185d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
1195d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS phFriNfc_NdefMap_SetCardState(phFriNfc_NdefMap_t   *NdefMap,
1205d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                        uint16_t             Length)
1215d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{
1225d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    NFCSTATUS   Result = NFCSTATUS_SUCCESS;
1235d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    if(Length == PH_FRINFC_NDEFMAP_MFUL_VAL0)
1245d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    {
1255d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        NdefMap->CardState =(uint8_t) (((NdefMap->CardState ==
1265d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        PH_NDEFMAP_CARD_STATE_READ_ONLY) ||
1275d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        (NdefMap->CardState ==
1285d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        PH_NDEFMAP_CARD_STATE_INVALID))?
1295d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        PH_NDEFMAP_CARD_STATE_INVALID:
1305d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                        NdefMap->CardState);
1315d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    }
1325d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    else
1335d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    {
1345d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        switch(NdefMap->CardState)
1355d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        {
1365d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            case PH_NDEFMAP_CARD_STATE_INITIALIZED:
1375d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                NdefMap->CardState =(uint8_t) ((NdefMap->CardState ==
1385d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    PH_NDEFMAP_CARD_STATE_INVALID)?
1395d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    NdefMap->CardState:
1405d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    PH_NDEFMAP_CARD_STATE_READ_WRITE);
1415d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            break;
1425d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
1435d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            case PH_NDEFMAP_CARD_STATE_READ_ONLY:
1445d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                NdefMap->CardState =(uint8_t) ((NdefMap->CardState ==
1455d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    PH_NDEFMAP_CARD_STATE_INVALID)?
1465d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    NdefMap->CardState:
1475d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    PH_NDEFMAP_CARD_STATE_READ_ONLY);
1485d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            break;
1495d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
1505d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            case PH_NDEFMAP_CARD_STATE_READ_WRITE:
1515d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                NdefMap->CardState =(uint8_t) ((NdefMap->CardState ==
1525d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    PH_NDEFMAP_CARD_STATE_INVALID)?
1535d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    NdefMap->CardState:
1545d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    PH_NDEFMAP_CARD_STATE_READ_WRITE);
1555d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            break;
1565d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
1575d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            default:
1585d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                NdefMap->CardState = PH_NDEFMAP_CARD_STATE_INVALID;
1595d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                Result = PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP,
1605d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                            NFCSTATUS_NO_NDEF_SUPPORT);
1615d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            break;
1625d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        }
1635d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    }
1645d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    Result = ((NdefMap->CardState ==
1655d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                PH_NDEFMAP_CARD_STATE_INVALID)?
1665d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP,
1675d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                NFCSTATUS_NO_NDEF_SUPPORT):
1685d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                Result);
1695d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    return Result;
1705d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly}
1715d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
1725d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS   phFriNfc_NdefMap_CheckSpecVersion(phFriNfc_NdefMap_t *NdefMap,
1735d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                                                      uint8_t VersionIndex)
1745d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{
1755d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    NFCSTATUS status = NFCSTATUS_SUCCESS;
1765d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
1775d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    uint8_t T3TVerNo = NdefMap->SendRecvBuf[VersionIndex];
1785d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly
1795d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    if ( T3TVerNo == 0 )
1805d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    {
1815d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        /*Return Status Error � Invalid Format�*/
1825d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        status = PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP,NFCSTATUS_INVALID_FORMAT);
1835d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    }
1845d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    else
1855d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    {
1865d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        /* calculate the major and minor version number of T3VerNo */
1875d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        if( (( PH_NFCFRI_NDEFMAP_NFCDEV_MAJOR_VER_NUM ==
1885d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                PH_NFCFRI_NDEFMAP_GET_MAJOR_TAG_VERNO(T3TVerNo ) )&&
1895d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            ( PH_NFCFRI_NDEFMAP_NFCDEV_MINOR_VER_NUM >=
1905d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                PH_NFCFRI_NDEFMAP_GET_MINOR_TAG_VERNO(T3TVerNo))) ||
1915d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            (( PH_NFCFRI_NDEFMAP_NFCDEV_MAJOR_VER_NUM ==
1925d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                PH_NFCFRI_NDEFMAP_GET_MAJOR_TAG_VERNO(T3TVerNo ) )&&
1935d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            ( PH_NFCFRI_NDEFMAP_NFCDEV_MINOR_VER_NUM <
1945d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                PH_NFCFRI_NDEFMAP_GET_MINOR_TAG_VERNO(T3TVerNo) )))
1955d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        {
1965d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            status = PHNFCSTVAL(CID_NFC_NONE,NFCSTATUS_SUCCESS);
1975d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        }
1985d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        else
1995d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        {
2005d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            if (( PH_NFCFRI_NDEFMAP_NFCDEV_MAJOR_VER_NUM <
2015d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    PH_NFCFRI_NDEFMAP_GET_MAJOR_TAG_VERNO(T3TVerNo) ) ||
2025d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly               ( PH_NFCFRI_NDEFMAP_NFCDEV_MAJOR_VER_NUM >
2035d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                    PH_NFCFRI_NDEFMAP_GET_MAJOR_TAG_VERNO(T3TVerNo)))
2045d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            {
2055d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly                status = PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP,NFCSTATUS_INVALID_FORMAT);
2065d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly            }
2075d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly        }
2085d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    }
2095d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly    return (status);
2105d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly}
211