diff options
author | Jan Brands <jan.r.brands@nxp.com> | 2010-11-30 23:23:23 +0100 |
---|---|---|
committer | Nick Pelly <npelly@google.com> | 2010-12-05 13:14:46 -0800 |
commit | 794aa72f7bd1e5b1fb51efb957cb925c7cfed746 (patch) | |
tree | 07b8cad50382ddc53715d84bea5f65b8f364c80c /src/phFriNfc_MapTools.c | |
parent | 3043b52934292173592f27dcbb054321001a3017 (diff) | |
download | external_libnfc-nxp-794aa72f7bd1e5b1fb51efb957cb925c7cfed746.zip external_libnfc-nxp-794aa72f7bd1e5b1fb51efb957cb925c7cfed746.tar.gz external_libnfc-nxp-794aa72f7bd1e5b1fb51efb957cb925c7cfed746.tar.bz2 |
This patch allows type 4 tag v2 ndef to be detected properly.
Same as Change-Id: I414e7864bdc654c3b9e1b459832bb8e95ea9c51a
Change-Id: I0a0119349419bb4f1031ab683e40dd3be7b26f5f
Diffstat (limited to 'src/phFriNfc_MapTools.c')
-rw-r--r-- | src/phFriNfc_MapTools.c | 141 |
1 files changed, 91 insertions, 50 deletions
diff --git a/src/phFriNfc_MapTools.c b/src/phFriNfc_MapTools.c index 2d035d2..2283473 100644 --- a/src/phFriNfc_MapTools.c +++ b/src/phFriNfc_MapTools.c @@ -20,10 +20,10 @@ * * Project: NFC-FRI * - * $Date: Fri Sep 26 11:13:22 2008 $ - * $Author: ing08205 $ - * $Revision: 1.5 $ - * $Aliases: 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 $ + * $Date: Fri Oct 15 13:50:54 2010 $ + * $Author: ing02260 $ + * $Revision: 1.6 $ + * $Aliases: $ * */ @@ -57,8 +57,8 @@ * */ /*@{*/ -#define PHFRINFCNDEFMAP_FILEREVISION "$Revision: 1.5 $" -#define PHFRINFCNDEFMAP_FILEALIASES "$Aliases: 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 $" +#define PHFRINFCNDEFMAP_FILEREVISION "$Revision: 1.6 $" +#define PHFRINFCNDEFMAP_FILEALIASES "$Aliases: $" /*@}*/ NFCSTATUS phFriNfc_MapTool_SetCardState(phFriNfc_NdefMap_t *NdefMap, @@ -67,11 +67,11 @@ NFCSTATUS phFriNfc_MapTool_SetCardState(phFriNfc_NdefMap_t *NdefMap, NFCSTATUS Result = NFCSTATUS_SUCCESS; if(Length == PH_FRINFC_NDEFMAP_MFUL_VAL0) { - /* As the NDEF LEN / TLV Len is Zero, irrespective of any state the card + /* As the NDEF LEN / TLV Len is Zero, irrespective of any state the card shall be set to INITIALIZED STATE*/ - NdefMap->CardState =(uint8_t) (((NdefMap->CardState == - PH_NDEFMAP_CARD_STATE_READ_ONLY) || - (NdefMap->CardState == + NdefMap->CardState =(uint8_t) (((NdefMap->CardState == + PH_NDEFMAP_CARD_STATE_READ_ONLY) || + (NdefMap->CardState == PH_NDEFMAP_CARD_STATE_INVALID))? PH_NDEFMAP_CARD_STATE_INVALID: PH_NDEFMAP_CARD_STATE_INITIALIZED); @@ -81,21 +81,21 @@ NFCSTATUS phFriNfc_MapTool_SetCardState(phFriNfc_NdefMap_t *NdefMap, switch(NdefMap->CardState) { case PH_NDEFMAP_CARD_STATE_INITIALIZED: - NdefMap->CardState =(uint8_t) ((NdefMap->CardState == + NdefMap->CardState =(uint8_t) ((NdefMap->CardState == PH_NDEFMAP_CARD_STATE_INVALID)? NdefMap->CardState: PH_NDEFMAP_CARD_STATE_READ_WRITE); break; case PH_NDEFMAP_CARD_STATE_READ_ONLY: - NdefMap->CardState = (uint8_t)((NdefMap->CardState == + NdefMap->CardState = (uint8_t)((NdefMap->CardState == PH_NDEFMAP_CARD_STATE_INVALID)? NdefMap->CardState: PH_NDEFMAP_CARD_STATE_READ_ONLY); break; case PH_NDEFMAP_CARD_STATE_READ_WRITE: - NdefMap->CardState = (uint8_t)((NdefMap->CardState == + NdefMap->CardState = (uint8_t)((NdefMap->CardState == PH_NDEFMAP_CARD_STATE_INVALID)? NdefMap->CardState: PH_NDEFMAP_CARD_STATE_READ_WRITE); @@ -103,14 +103,14 @@ NFCSTATUS phFriNfc_MapTool_SetCardState(phFriNfc_NdefMap_t *NdefMap, default: NdefMap->CardState = PH_NDEFMAP_CARD_STATE_INVALID; - Result = PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP, + Result = PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP, NFCSTATUS_NO_NDEF_SUPPORT); break; } } - Result = ((NdefMap->CardState == + Result = ((NdefMap->CardState == PH_NDEFMAP_CARD_STATE_INVALID)? - PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP, + PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP, NFCSTATUS_NO_NDEF_SUPPORT): Result); return Result; @@ -130,46 +130,87 @@ NFCSTATUS phFriNfc_MapTool_ChkSpcVer( const phFriNfc_NdefMap_t *NdefMap, /*Return Status Error “ Invalid Format”*/ status = PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP,NFCSTATUS_INVALID_FORMAT); } - else if((NdefMap->CardType == PH_FRINFC_NDEFMAP_MIFARE_STD_1K_CARD) || - (NdefMap->CardType == PH_FRINFC_NDEFMAP_MIFARE_STD_4K_CARD)) - { - /* calculate the major and minor version number of Mifare std version number */ - status = (( (( PH_NFCFRI_MFSTDMAP_NFCDEV_MAJOR_VER_NUM == - PH_NFCFRI_MFSTDMAP_GET_MAJOR_TAG_VERNO(TagVerNo ) )&& - ( PH_NFCFRI_MFSTDMAP_NFCDEV_MINOR_VER_NUM == - PH_NFCFRI_MFSTDMAP_GET_MINOR_TAG_VERNO(TagVerNo))) || - (( PH_NFCFRI_MFSTDMAP_NFCDEV_MAJOR_VER_NUM == - PH_NFCFRI_MFSTDMAP_GET_MAJOR_TAG_VERNO(TagVerNo ) )&& - ( PH_NFCFRI_MFSTDMAP_NFCDEV_MINOR_VER_NUM < - PH_NFCFRI_MFSTDMAP_GET_MINOR_TAG_VERNO(TagVerNo) )))? - NFCSTATUS_SUCCESS: - PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP, - NFCSTATUS_INVALID_FORMAT)); - } else { - /* calculate the major and minor version number of T3VerNo */ - if( (( PH_NFCFRI_NDEFMAP_NFCDEV_MAJOR_VER_NUM == - PH_NFCFRI_NDEFMAP_GET_MAJOR_TAG_VERNO(TagVerNo ) )&& - ( PH_NFCFRI_NDEFMAP_NFCDEV_MINOR_VER_NUM == - PH_NFCFRI_NDEFMAP_GET_MINOR_TAG_VERNO(TagVerNo))) || - (( PH_NFCFRI_NDEFMAP_NFCDEV_MAJOR_VER_NUM == - PH_NFCFRI_NDEFMAP_GET_MAJOR_TAG_VERNO(TagVerNo ) )&& - ( PH_NFCFRI_NDEFMAP_NFCDEV_MINOR_VER_NUM < - PH_NFCFRI_NDEFMAP_GET_MINOR_TAG_VERNO(TagVerNo) ))) + switch (NdefMap->CardType) { - status = PHNFCSTVAL(CID_NFC_NONE,NFCSTATUS_SUCCESS); - } - else - { - if (( PH_NFCFRI_NDEFMAP_NFCDEV_MAJOR_VER_NUM < - PH_NFCFRI_NDEFMAP_GET_MAJOR_TAG_VERNO(TagVerNo) ) || - ( PH_NFCFRI_NDEFMAP_NFCDEV_MAJOR_VER_NUM > - PH_NFCFRI_NDEFMAP_GET_MAJOR_TAG_VERNO(TagVerNo))) + case PH_FRINFC_NDEFMAP_MIFARE_STD_1K_CARD: + case PH_FRINFC_NDEFMAP_MIFARE_STD_4K_CARD: + { + /* calculate the major and minor version number of Mifare std version number */ + status = (( (( PH_NFCFRI_MFSTDMAP_NFCDEV_MAJOR_VER_NUM == + PH_NFCFRI_MFSTDMAP_GET_MAJOR_TAG_VERNO(TagVerNo ) )&& + ( PH_NFCFRI_MFSTDMAP_NFCDEV_MINOR_VER_NUM == + PH_NFCFRI_MFSTDMAP_GET_MINOR_TAG_VERNO(TagVerNo))) || + (( PH_NFCFRI_MFSTDMAP_NFCDEV_MAJOR_VER_NUM == + PH_NFCFRI_MFSTDMAP_GET_MAJOR_TAG_VERNO(TagVerNo ) )&& + ( PH_NFCFRI_MFSTDMAP_NFCDEV_MINOR_VER_NUM < + PH_NFCFRI_MFSTDMAP_GET_MINOR_TAG_VERNO(TagVerNo) )))? + NFCSTATUS_SUCCESS: + PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP, + NFCSTATUS_INVALID_FORMAT)); + break; + } + +#ifdef DESFIRE_EV1 + case PH_FRINFC_NDEFMAP_ISO14443_4A_CARD_EV1: + { + /* calculate the major and minor version number of T3VerNo */ + if( (( PH_NFCFRI_NDEFMAP_NFCDEV_MAJOR_VER_NUM_2 == + PH_NFCFRI_NDEFMAP_GET_MAJOR_TAG_VERNO(TagVerNo ) )&& + ( PH_NFCFRI_NDEFMAP_NFCDEV_MINOR_VER_NUM == + PH_NFCFRI_NDEFMAP_GET_MINOR_TAG_VERNO(TagVerNo))) || + (( PH_NFCFRI_NDEFMAP_NFCDEV_MAJOR_VER_NUM_2 == + PH_NFCFRI_NDEFMAP_GET_MAJOR_TAG_VERNO(TagVerNo ) )&& + ( PH_NFCFRI_NDEFMAP_NFCDEV_MINOR_VER_NUM < + PH_NFCFRI_NDEFMAP_GET_MINOR_TAG_VERNO(TagVerNo) ))) + { + status = PHNFCSTVAL(CID_NFC_NONE,NFCSTATUS_SUCCESS); + } + else + { + if (( PH_NFCFRI_NDEFMAP_NFCDEV_MAJOR_VER_NUM_2 < + PH_NFCFRI_NDEFMAP_GET_MAJOR_TAG_VERNO(TagVerNo) ) || + ( PH_NFCFRI_NDEFMAP_NFCDEV_MAJOR_VER_NUM_2 > + PH_NFCFRI_NDEFMAP_GET_MAJOR_TAG_VERNO(TagVerNo))) + { + status = PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP,NFCSTATUS_INVALID_FORMAT); + } + } + break; + } +#endif /* #ifdef DESFIRE_EV1 */ + + default: { - status = PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP,NFCSTATUS_INVALID_FORMAT); + /* calculate the major and minor version number of T3VerNo */ + if( (( PH_NFCFRI_NDEFMAP_NFCDEV_MAJOR_VER_NUM == + PH_NFCFRI_NDEFMAP_GET_MAJOR_TAG_VERNO(TagVerNo ) )&& + ( PH_NFCFRI_NDEFMAP_NFCDEV_MINOR_VER_NUM == + PH_NFCFRI_NDEFMAP_GET_MINOR_TAG_VERNO(TagVerNo))) || + (( PH_NFCFRI_NDEFMAP_NFCDEV_MAJOR_VER_NUM == + PH_NFCFRI_NDEFMAP_GET_MAJOR_TAG_VERNO(TagVerNo ) )&& + ( PH_NFCFRI_NDEFMAP_NFCDEV_MINOR_VER_NUM < + PH_NFCFRI_NDEFMAP_GET_MINOR_TAG_VERNO(TagVerNo) ))) + { + status = PHNFCSTVAL(CID_NFC_NONE,NFCSTATUS_SUCCESS); + } + else + { + if (( PH_NFCFRI_NDEFMAP_NFCDEV_MAJOR_VER_NUM < + PH_NFCFRI_NDEFMAP_GET_MAJOR_TAG_VERNO(TagVerNo) ) || + ( PH_NFCFRI_NDEFMAP_NFCDEV_MAJOR_VER_NUM > + PH_NFCFRI_NDEFMAP_GET_MAJOR_TAG_VERNO(TagVerNo))) + { + status = PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP,NFCSTATUS_INVALID_FORMAT); + } + } + break; } + + } } + return (status); } |