• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2010 NXP Semiconductors
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 /*!
18  * \file  phFriNfc_MapTools.c
19  * \brief NFC Ndef Internal Mapping File.
20  *
21  * Project: NFC-FRI
22  *
23  * $Date: Fri Oct 15 13:50:54 2010 $
24  * $Author: ing02260 $
25  * $Revision: 1.6 $
26  * $Aliases:  $
27  *
28  */
29 
30 #include <phFriNfc_NdefMap.h>
31 #include <phFriNfc_MapTools.h>
32 
33 #ifndef PH_FRINFC_MAP_MIFAREUL_DISABLED
34 #include <phFriNfc_MifareULMap.h>
35 #endif  /* PH_FRINFC_MAP_MIFAREUL_DISABLED*/
36 
37 #ifndef PH_FRINFC_MAP_MIFARESTD_DISABLED
38 #include <phFriNfc_MifareStdMap.h>
39 #endif  /* PH_FRINFC_MAP_MIFARESTD_DISABLED */
40 
41 #ifndef PH_FRINFC_MAP_DESFIRE_DISABLED
42 #include <phFriNfc_DesfireMap.h>
43 #endif  /* PH_FRINFC_MAP_DESFIRE_DISABLED */
44 
45 #ifndef PH_FRINFC_MAP_FELICA_DISABLED
46 #include <phFriNfc_FelicaMap.h>
47 #endif  /* PH_FRINFC_MAP_FELICA_DISABLED */
48 
49 #include <phFriNfc_OvrHal.h>
50 
51 /*! \ingroup grp_file_attributes
52  *  \name NDEF Mapping
53  *
54  * File: \ref phFriNfc_MapTools.c
55  *       This file has functions which are used common across all the
56  *       typ1/type2/type3/type4 tags.
57  *
58  */
59 /*@{*/
60 #define PHFRINFCNDEFMAP_FILEREVISION "$Revision: 1.6 $"
61 #define PHFRINFCNDEFMAP_FILEALIASES  "$Aliases:  $"
62 /*@}*/
63 
phFriNfc_MapTool_SetCardState(phFriNfc_NdefMap_t * NdefMap,uint32_t Length)64 NFCSTATUS phFriNfc_MapTool_SetCardState(phFriNfc_NdefMap_t  *NdefMap,
65                                         uint32_t            Length)
66 {
67     NFCSTATUS   Result = NFCSTATUS_SUCCESS;
68     if(Length == PH_FRINFC_NDEFMAP_MFUL_VAL0)
69     {
70         /* As the NDEF LEN / TLV Len is Zero, irrespective of any state the card
71            shall be set to INITIALIZED STATE*/
72         NdefMap->CardState =(uint8_t) (((NdefMap->CardState ==
73                                 PH_NDEFMAP_CARD_STATE_READ_ONLY) ||
74                                 (NdefMap->CardState ==
75                                 PH_NDEFMAP_CARD_STATE_INVALID))?
76                                 PH_NDEFMAP_CARD_STATE_INVALID:
77                                 PH_NDEFMAP_CARD_STATE_INITIALIZED);
78     }
79     else
80     {
81         switch(NdefMap->CardState)
82         {
83             case PH_NDEFMAP_CARD_STATE_INITIALIZED:
84                 NdefMap->CardState =(uint8_t) ((NdefMap->CardState ==
85                     PH_NDEFMAP_CARD_STATE_INVALID)?
86                     NdefMap->CardState:
87                     PH_NDEFMAP_CARD_STATE_READ_WRITE);
88             break;
89 
90             case PH_NDEFMAP_CARD_STATE_READ_ONLY:
91                 NdefMap->CardState = (uint8_t)((NdefMap->CardState ==
92                     PH_NDEFMAP_CARD_STATE_INVALID)?
93                     NdefMap->CardState:
94                     PH_NDEFMAP_CARD_STATE_READ_ONLY);
95             break;
96 
97             case PH_NDEFMAP_CARD_STATE_READ_WRITE:
98                 NdefMap->CardState = (uint8_t)((NdefMap->CardState ==
99                     PH_NDEFMAP_CARD_STATE_INVALID)?
100                     NdefMap->CardState:
101                     PH_NDEFMAP_CARD_STATE_READ_WRITE);
102             break;
103 
104             default:
105                 NdefMap->CardState = PH_NDEFMAP_CARD_STATE_INVALID;
106                 Result = PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP,
107                             NFCSTATUS_NO_NDEF_SUPPORT);
108             break;
109         }
110     }
111     Result = ((NdefMap->CardState ==
112                 PH_NDEFMAP_CARD_STATE_INVALID)?
113                 PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP,
114                 NFCSTATUS_NO_NDEF_SUPPORT):
115                 Result);
116     return Result;
117 }
118 
119 /*  To check mapping spec version */
120 
phFriNfc_MapTool_ChkSpcVer(const phFriNfc_NdefMap_t * NdefMap,uint8_t VersionIndex)121 NFCSTATUS   phFriNfc_MapTool_ChkSpcVer( const phFriNfc_NdefMap_t  *NdefMap,
122                                         uint8_t             VersionIndex)
123 {
124     NFCSTATUS status = NFCSTATUS_SUCCESS;
125 
126     uint8_t TagVerNo = NdefMap->SendRecvBuf[VersionIndex];
127 
128     if ( TagVerNo == 0 )
129     {
130         /*Return Status Error � Invalid Format�*/
131         status = PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP,NFCSTATUS_INVALID_FORMAT);
132     }
133     else
134     {
135         switch (NdefMap->CardType)
136         {
137             case PH_FRINFC_NDEFMAP_MIFARE_STD_1K_CARD:
138             case PH_FRINFC_NDEFMAP_MIFARE_STD_4K_CARD:
139             {
140                 /* calculate the major and minor version number of Mifare std version number */
141                 status = (( (( PH_NFCFRI_MFSTDMAP_NFCDEV_MAJOR_VER_NUM ==
142                                 PH_NFCFRI_MFSTDMAP_GET_MAJOR_TAG_VERNO(TagVerNo ) )&&
143                             ( PH_NFCFRI_MFSTDMAP_NFCDEV_MINOR_VER_NUM ==
144                                 PH_NFCFRI_MFSTDMAP_GET_MINOR_TAG_VERNO(TagVerNo))) ||
145                             (( PH_NFCFRI_MFSTDMAP_NFCDEV_MAJOR_VER_NUM ==
146                                 PH_NFCFRI_MFSTDMAP_GET_MAJOR_TAG_VERNO(TagVerNo ) )&&
147                             ( PH_NFCFRI_MFSTDMAP_NFCDEV_MINOR_VER_NUM <
148                                 PH_NFCFRI_MFSTDMAP_GET_MINOR_TAG_VERNO(TagVerNo) )))?
149                         NFCSTATUS_SUCCESS:
150                         PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP,
151                                     NFCSTATUS_INVALID_FORMAT));
152                 break;
153             }
154 
155 #ifdef DESFIRE_EV1
156             case PH_FRINFC_NDEFMAP_ISO14443_4A_CARD_EV1:
157             {
158                 /* calculate the major and minor version number of T3VerNo */
159                 if( (( PH_NFCFRI_NDEFMAP_NFCDEV_MAJOR_VER_NUM_2 ==
160                         PH_NFCFRI_NDEFMAP_GET_MAJOR_TAG_VERNO(TagVerNo ) )&&
161                     ( PH_NFCFRI_NDEFMAP_NFCDEV_MINOR_VER_NUM ==
162                         PH_NFCFRI_NDEFMAP_GET_MINOR_TAG_VERNO(TagVerNo))) ||
163                     (( PH_NFCFRI_NDEFMAP_NFCDEV_MAJOR_VER_NUM_2 ==
164                         PH_NFCFRI_NDEFMAP_GET_MAJOR_TAG_VERNO(TagVerNo ) )&&
165                     ( PH_NFCFRI_NDEFMAP_NFCDEV_MINOR_VER_NUM <
166                         PH_NFCFRI_NDEFMAP_GET_MINOR_TAG_VERNO(TagVerNo) )))
167                 {
168                     status = PHNFCSTVAL(CID_NFC_NONE,NFCSTATUS_SUCCESS);
169                 }
170                 else
171                 {
172                     if (( PH_NFCFRI_NDEFMAP_NFCDEV_MAJOR_VER_NUM_2 <
173                             PH_NFCFRI_NDEFMAP_GET_MAJOR_TAG_VERNO(TagVerNo) ) ||
174                     ( PH_NFCFRI_NDEFMAP_NFCDEV_MAJOR_VER_NUM_2 >
175                             PH_NFCFRI_NDEFMAP_GET_MAJOR_TAG_VERNO(TagVerNo)))
176                     {
177                         status = PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP,NFCSTATUS_INVALID_FORMAT);
178                     }
179                 }
180                 break;
181             }
182 #endif /* #ifdef DESFIRE_EV1 */
183 
184             default:
185             {
186                 /* calculate the major and minor version number of T3VerNo */
187                 if( (( PH_NFCFRI_NDEFMAP_NFCDEV_MAJOR_VER_NUM ==
188                         PH_NFCFRI_NDEFMAP_GET_MAJOR_TAG_VERNO(TagVerNo ) )&&
189                     ( PH_NFCFRI_NDEFMAP_NFCDEV_MINOR_VER_NUM ==
190                         PH_NFCFRI_NDEFMAP_GET_MINOR_TAG_VERNO(TagVerNo))) ||
191                     (( PH_NFCFRI_NDEFMAP_NFCDEV_MAJOR_VER_NUM ==
192                         PH_NFCFRI_NDEFMAP_GET_MAJOR_TAG_VERNO(TagVerNo ) )&&
193                     ( PH_NFCFRI_NDEFMAP_NFCDEV_MINOR_VER_NUM <
194                         PH_NFCFRI_NDEFMAP_GET_MINOR_TAG_VERNO(TagVerNo) )))
195                 {
196                     status = PHNFCSTVAL(CID_NFC_NONE,NFCSTATUS_SUCCESS);
197                 }
198                 else
199                 {
200                     if (( PH_NFCFRI_NDEFMAP_NFCDEV_MAJOR_VER_NUM <
201                             PH_NFCFRI_NDEFMAP_GET_MAJOR_TAG_VERNO(TagVerNo) ) ||
202                     ( PH_NFCFRI_NDEFMAP_NFCDEV_MAJOR_VER_NUM >
203                             PH_NFCFRI_NDEFMAP_GET_MAJOR_TAG_VERNO(TagVerNo)))
204                     {
205                         status = PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP,NFCSTATUS_INVALID_FORMAT);
206                     }
207                 }
208                 break;
209             }
210 
211 
212         }
213     }
214 
215     return (status);
216 }
217