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