Home | History | Annotate | Download | only in src
      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_SmtCrdFmt.c
     19  * \brief This component encapsulates different smart and simple tag formatting functionalities,
     20  *        for the mapping layer.
     21  *
     22  * Project: NFC-FRI
     23  *
     24  * $Date: Mon Dec 13 14:14:13 2010 $
     25  * $Author: ing02260 $
     26  * $Revision: 1.9 $
     27  * $Aliases:  $
     28  *
     29  */
     30 
     31 #ifndef PH_FRINFC_CARD_FORMAT_DISABLED
     32 
     33 #include <phNfcTypes.h>
     34 #include <phFriNfc_OvrHal.h>
     35 #include <phFriNfc_SmtCrdFmt.h>
     36 #ifdef DISABLE_FORMAT
     37 #include <phFriNfc_TopazFormat.h>
     38 #endif /* #ifdef DISABLE_FORMAT */
     39 #include <phFriNfc_MifULFormat.h>
     40 #include <phFriNfc_DesfireFormat.h>
     41 #include <phFriNfc_MifStdFormat.h>
     42 #ifndef PH_FRINFC_FMT_ISO15693_DISABLED
     43     #include <phFriNfc_ISO15693Format.h>
     44 #endif /* #ifndef PH_FRINFC_FMT_ISO15693_DISABLED */
     45 
     46 
     47 /*! \ingroup grp_file_attributes
     48  *  \name NDEF Mapping
     49  *
     50  * File: \ref phFriNfc_CardFormatFunctions.c
     51  *
     52  */
     53 /*@{*/
     54 // file versions
     55 /*@}*/
     56 
     57 
     58 
     59 
     60 void phFriNfc_SmtCrdFmt_HCrHandler(phFriNfc_sNdefSmtCrdFmt_t  *NdefSmtCrdFmt,
     61                                        NFCSTATUS            Status)
     62 {
     63     /* set the state back to the Reset_Init state*/
     64     NdefSmtCrdFmt->State =  PH_FRINFC_SMTCRDFMT_STATE_RESET_INIT;
     65 
     66     /* set the completion routine*/
     67     NdefSmtCrdFmt->CompletionRoutine[PH_FRINFC_SMTCRDFMT_CR_FORMAT].
     68         CompletionRoutine(NdefSmtCrdFmt->CompletionRoutine->Context, Status);
     69 }
     70 
     71 /*!
     72  * \brief Used to Reset the context variables , before the actual smart card formatting
     73  *        procedure.
     74  *
     75  */
     76 NFCSTATUS phFriNfc_NdefSmtCrd_Reset(phFriNfc_sNdefSmtCrdFmt_t       *NdefSmtCrdFmt,
     77                                     void                            *LowerDevice,
     78                                     phHal_sRemoteDevInformation_t   *psRemoteDevInfo,
     79                                     phHal_sDevInputParam_t          *psDevInputParam,
     80                                     uint8_t                         *SendRecvBuffer,
     81                                     uint16_t                        *SendRecvBuffLen)
     82 {
     83     NFCSTATUS   result = NFCSTATUS_SUCCESS;
     84     uint8_t     index;
     85 
     86     if (    (SendRecvBuffLen == NULL) || (NdefSmtCrdFmt == NULL) || (psRemoteDevInfo == NULL) ||
     87             (SendRecvBuffer == NULL) ||  (LowerDevice == NULL) ||
     88             (*SendRecvBuffLen == 0) ||  (psDevInputParam == NULL) ||
     89             (*SendRecvBuffLen < PH_FRINFC_SMTCRDFMT_MAX_SEND_RECV_BUF_SIZE) )
     90     {
     91         result = PHNFCSTVAL(CID_FRI_NFC_NDEF_SMTCRDFMT, NFCSTATUS_INVALID_PARAMETER);
     92     }
     93     else
     94     {
     95         /* Initialise the state to Init */
     96         NdefSmtCrdFmt->State = PH_FRINFC_SMTCRDFMT_STATE_RESET_INIT;
     97 
     98         for(index = 0;index<PH_FRINFC_SMTCRDFMT_CR;index++)
     99         {
    100             /* Initialise the NdefMap Completion Routine to Null */
    101             NdefSmtCrdFmt->CompletionRoutine[index].CompletionRoutine = NULL;
    102             /* Initialise the NdefMap Completion Routine context to Null  */
    103             NdefSmtCrdFmt->CompletionRoutine[index].Context = NULL;
    104         }
    105 
    106         /* Lower Device(Always Overlapped HAL Struct initialised in application
    107             is registred in NdefMap Lower Device) */
    108         NdefSmtCrdFmt->LowerDevice = LowerDevice;
    109 
    110         /* Remote Device info received from Manual Device Discovery is registered here */
    111         NdefSmtCrdFmt->psRemoteDevInfo = psRemoteDevInfo;
    112 
    113         /* Trx Buffer registered */
    114         NdefSmtCrdFmt->SendRecvBuf = SendRecvBuffer;
    115 
    116         /* Trx Buffer Size */
    117         NdefSmtCrdFmt->SendRecvLength = SendRecvBuffLen;
    118 
    119         /* Register Transfer Buffer Length */
    120         NdefSmtCrdFmt->SendLength = 0;
    121 
    122         /* Initialise the Format status flag*/
    123         NdefSmtCrdFmt->FmtProcStatus = 0;
    124 
    125         /* Reset the Card Type */
    126         NdefSmtCrdFmt->CardType = 0;
    127 
    128         /* Reset MapCompletion Info*/
    129         NdefSmtCrdFmt->SmtCrdFmtCompletionInfo.CompletionRoutine = NULL;
    130         NdefSmtCrdFmt->SmtCrdFmtCompletionInfo.Context = NULL;
    131 
    132 #ifndef PH_FRINFC_FMT_TOPAZ_DISABLED
    133         phFriNfc_Topaz_Reset(NdefSmtCrdFmt);
    134 
    135 #endif  /* PH_FRINFC_FMT_TOPAZ_DISABLED */
    136 
    137 #ifndef PH_FRINFC_FMT_DESFIRE_DISABLED
    138         /*Reset Desfire Cap Container elements*/
    139         phFriNfc_Desfire_Reset(NdefSmtCrdFmt);
    140 #endif  /* PH_FRINFC_FMT_DESFIRE_DISABLED */
    141 
    142 #ifndef PH_FRINFC_FMT_MIFARESTD_DISABLED
    143         /*Reset Mifare Standard Container elements*/
    144         NdefSmtCrdFmt->AddInfo.MfStdInfo.DevInputParam = psDevInputParam;
    145         phFriNfc_MfStd_Reset(NdefSmtCrdFmt);
    146 #endif  /* PH_FRINFC_MAP_MIFARESTD_DISABLED */
    147 
    148 #ifndef PH_FRINFC_FMT_MIFAREUL_DISABLED
    149         phFriNfc_MfUL_Reset(NdefSmtCrdFmt);
    150 #endif /* #ifndef PH_FRINFC_FMT_MIFAREUL_DISABLED */
    151 
    152 #ifndef PH_FRINFC_FMT_ISO15693_DISABLED
    153         phFriNfc_ISO15693_FmtReset (NdefSmtCrdFmt);
    154 #endif /* #ifndef PH_FRINFC_FMT_ISO15693_DISABLED */
    155 
    156 #ifdef PHFRINFC_OVRHAL_MOCKUP
    157         /*Reset Desfire Cap Container elements*/
    158   //      phFriNfc_Mockup_H_Reset(NdefSmtCrdFmt);
    159 #endif  /* PHFRINFC_OVRHAL_MOCKUP */
    160 
    161     }
    162     return (result);
    163 
    164 }
    165 
    166 /*!
    167  * \brief Completion Routine initialisation
    168  *
    169  */
    170 NFCSTATUS phFriNfc_NdefSmtCrd_SetCR(phFriNfc_sNdefSmtCrdFmt_t     *NdefSmtCrdFmt,
    171                                     uint8_t                       FunctionID,
    172                                     pphFriNfc_Cr_t                CompletionRoutine,
    173                                     void                          *CompletionRoutineContext)
    174 {
    175     NFCSTATUS   status = NFCSTATUS_SUCCESS;
    176 
    177     if ((NdefSmtCrdFmt == NULL) || (FunctionID >= PH_FRINFC_SMTCRDFMT_CR) ||
    178         (CompletionRoutine == NULL) || (CompletionRoutineContext == NULL))
    179     {
    180         status = PHNFCSTVAL(CID_FRI_NFC_NDEF_SMTCRDFMT, NFCSTATUS_INVALID_PARAMETER);
    181     }
    182     else
    183     {
    184         /* Register the application callback with the NdefMap Completion Routine */
    185         NdefSmtCrdFmt->CompletionRoutine[FunctionID].CompletionRoutine = CompletionRoutine;
    186 
    187         /* Register the application context with the NdefMap Completion Routine context */
    188         NdefSmtCrdFmt->CompletionRoutine[FunctionID].Context = CompletionRoutineContext;
    189     }
    190 
    191     return status;
    192 }
    193 
    194 #ifdef FRINFC_READONLY_NDEF
    195 
    196 NFCSTATUS
    197 phFriNfc_NdefSmtCrd_ConvertToReadOnly (
    198     phFriNfc_sNdefSmtCrdFmt_t *NdefSmtCrdFmt)
    199 {
    200     NFCSTATUS   result = PHNFCSTVAL(CID_FRI_NFC_NDEF_SMTCRDFMT,
    201                                   NFCSTATUS_INVALID_PARAMETER);
    202     uint8_t     sak = 0;
    203 
    204     if((NdefSmtCrdFmt != NULL)
    205         && (NdefSmtCrdFmt->CompletionRoutine->CompletionRoutine != NULL)
    206         && (NdefSmtCrdFmt->CompletionRoutine->Context != NULL))
    207     {
    208         sak = NdefSmtCrdFmt->psRemoteDevInfo->RemoteDevInfo.Iso14443A_Info.Sak;
    209         switch (NdefSmtCrdFmt->psRemoteDevInfo->RemDevType)
    210         {
    211             case phHal_eMifare_PICC:
    212             {
    213                 if (0x00 == sak)
    214                 {
    215                     result = phFriNfc_MfUL_ConvertToReadOnly (NdefSmtCrdFmt);
    216                 }
    217                 else
    218                 {
    219                     /* MIFARE classic 1k/4k is not supported */
    220                     result = PHNFCSTVAL(CID_FRI_NFC_NDEF_SMTCRDFMT,
    221                                         NFCSTATUS_INVALID_REMOTE_DEVICE);
    222                 }
    223                 break;
    224             }
    225 
    226             case phHal_eISO14443_A_PICC:
    227             {
    228                 result = phFriNfc_Desfire_ConvertToReadOnly (NdefSmtCrdFmt);
    229                 break;
    230             }
    231 
    232             default :
    233             {
    234                 /*  Remote device is not recognised.
    235                 Probably not NDEF compliant */
    236                 result = PHNFCSTVAL(CID_FRI_NFC_NDEF_SMTCRDFMT,
    237                                     NFCSTATUS_INVALID_REMOTE_DEVICE);
    238                 break;
    239             }
    240         }
    241     }
    242     return result;
    243 }
    244 
    245 #endif /* #ifdef FRINFC_READONLY_NDEF */
    246 
    247 
    248 /*!
    249  * \brief Used to format the different smart cards.
    250  *
    251  */
    252 NFCSTATUS phFriNfc_NdefSmtCrd_Format( phFriNfc_sNdefSmtCrdFmt_t *NdefSmtCrdFmt, const uint8_t *ScrtKeyB )
    253 {
    254     /* Component ID needs to be changed */
    255     NFCSTATUS   Result = PHNFCSTVAL(CID_FRI_NFC_NDEF_SMTCRDFMT,
    256                                     NFCSTATUS_INVALID_PARAMETER);
    257     uint8_t     sak = 0;
    258 
    259     /* Check for the correct context structure */
    260     if((NdefSmtCrdFmt != NULL) &&
    261         (NdefSmtCrdFmt->CompletionRoutine->CompletionRoutine != NULL) &&
    262         (NdefSmtCrdFmt->CompletionRoutine->Context != NULL))
    263     {
    264 #ifdef PH_HAL4_ENABLE
    265         /* SAK (Select response) */
    266         sak = NdefSmtCrdFmt->psRemoteDevInfo->RemoteDevInfo.Iso14443A_Info.Sak;
    267 
    268         /* Depending on the Opmodes, call the respective card functions */
    269         switch ( NdefSmtCrdFmt->psRemoteDevInfo->RemDevType )
    270 #else
    271         /* SAK (Select response) */
    272         sak = NdefSmtCrdFmt->psRemoteDevInfo->RemoteDevInfo.CardInfo106.
    273                 Startup106.SelRes;
    274 
    275         /* Depending on the Opmodes, call the respective card functions */
    276         switch ( NdefSmtCrdFmt->psRemoteDevInfo->OpMode )
    277 #endif /* #ifdef PH_HAL4_ENABLE */
    278         {
    279 #ifdef PH_HAL4_ENABLE
    280             case phHal_eMifare_PICC :
    281 #else
    282             case phHal_eOpModesMifare :
    283 #endif /* #ifdef PH_HAL4_ENABLE */
    284                 /*  Remote device is Mifare card . Check for Mifare
    285                 NDEF compliance */
    286                 if(0x00 == sak)
    287                 {
    288 #ifndef PH_FRINFC_FMT_MIFAREUL_DISABLED
    289                     /*  The SAK/Sel_Res says the card is of the type
    290                         Mifare UL */
    291                    NdefSmtCrdFmt->CardType = PH_FRINFC_SMTCRDFMT_MIFARE_UL_CARD;
    292 					if (NdefSmtCrdFmt->psRemoteDevInfo->RemoteDevInfo.Iso14443A_Info.UidLength == 7 &&
    293 						NdefSmtCrdFmt->psRemoteDevInfo->RemoteDevInfo.Iso14443A_Info.Uid[0] == 0x04)
    294 					{
    295 
    296 	                    Result = phFriNfc_MfUL_Format( NdefSmtCrdFmt);
    297 					}
    298 					else
    299 					{
    300 						Result = PHNFCSTVAL(CID_FRI_NFC_NDEF_SMTCRDFMT,
    301                                     NFCSTATUS_INVALID_REMOTE_DEVICE);
    302 					}
    303 #else
    304                     Result = PHNFCSTVAL(CID_FRI_NFC_NDEF_SMTCRDFMT,
    305                                     NFCSTATUS_INVALID_REMOTE_DEVICE);
    306 #endif /* #ifndef PH_FRINFC_FMT_MIFAREUL_DISABLED */
    307                 }
    308                 else if((0x08 == (sak & 0x18)) ||
    309                         (0x18 == (sak & 0x18)) ||
    310                         (0x01 == sak))
    311                 {
    312 #ifndef PH_FRINFC_FMT_MIFARESTD_DISABLED
    313                     NdefSmtCrdFmt->CardType = (uint8_t)
    314                         (((sak & 0x18) == 0x08)?
    315                         PH_FRINFC_SMTCRDFMT_MFSTD_1K_CRD:
    316                         PH_FRINFC_SMTCRDFMT_MFSTD_4K_CRD);
    317 
    318                     /*  The SAK/Sel_Res says the card is of the type
    319                         Mifare standard */
    320                     Result = phFriNfc_MfStd_Format( NdefSmtCrdFmt, ScrtKeyB);
    321 #else
    322                     Result = PHNFCSTVAL(CID_FRI_NFC_NDEF_SMTCRDFMT,
    323                                     NFCSTATUS_INVALID_REMOTE_DEVICE);
    324 #endif /* #ifndef PH_FRINFC_FMT_MIFARESTD_DISABLED */
    325                 }
    326                 else
    327                 {
    328                     /*  Invalid Mifare card, as the remote device
    329                         info - opmode says its a Mifare card but,
    330                         The SAK/Sel_Res is wrong */
    331                     Result = PHNFCSTVAL(CID_FRI_NFC_NDEF_SMTCRDFMT,
    332                                         NFCSTATUS_INVALID_REMOTE_DEVICE);
    333                 }
    334             break;
    335 #ifdef PH_HAL4_ENABLE
    336             case phHal_eISO14443_A_PICC :
    337 #else
    338             case phHal_eOpModesISO14443_4A :
    339 #endif /* #ifdef PH_HAL4_ENABLE */
    340                 /*  Remote device is Desfire card . Check for Desfire
    341                 NDEF compliancy */
    342                  if(0x20 == (sak & 0xFF))
    343                 {
    344 #ifndef PH_FRINFC_FMT_DESFIRE_DISABLED
    345                     NdefSmtCrdFmt->CardType = PH_FRINFC_SMTCRDFMT_ISO14443_4A_CARD;
    346                     /*  The SAK/Sel_Res says the card is of the type
    347                         ISO14443_4A */
    348 
    349                     Result = phFriNfc_Desfire_Format(NdefSmtCrdFmt);
    350 #else
    351                     Result = PHNFCSTVAL(CID_FRI_NFC_NDEF_SMTCRDFMT,
    352                                         NFCSTATUS_INVALID_REMOTE_DEVICE);
    353 #endif /* #ifndef PH_FRINFC_FMT_DESFIRE_DISABLED */
    354                 }
    355                 else
    356                 {
    357                     /*  Invalid Desfire card, as the remote device
    358                         info - opmode says its a desfire card but,
    359                         The SAK/Sel_Res is wrong */
    360                     Result = PHNFCSTVAL(CID_FRI_NFC_NDEF_SMTCRDFMT,
    361                                         NFCSTATUS_INVALID_REMOTE_DEVICE);
    362                 }
    363             break;
    364 #ifdef PH_HAL4_ENABLE
    365             case phHal_eJewel_PICC :
    366 #else
    367             case phHal_eOpModesJewel :
    368 #endif /* #ifdef PH_HAL4_ENABLE */
    369                 /*  Remote device is Topaz card . Check for Topaz
    370                 NDEF compliancy */
    371                 if(0xC2 == sak)
    372                 {
    373 #ifndef PH_FRINFC_FMT_TOPAZ_DISABLED
    374                     NdefSmtCrdFmt->CardType = PH_FRINFC_SMTCRDFMT_TOPAZ_CARD;
    375                     /*  The SAK/Sel_Res says the card is of the type
    376                         ISO14443_4A */
    377                     Result = phFriNfc_Topaz_Format(NdefSmtCrdFmt);
    378 #else
    379                     Result = PHNFCSTVAL(CID_FRI_NFC_NDEF_SMTCRDFMT,
    380                                         NFCSTATUS_INVALID_REMOTE_DEVICE);
    381 #endif /* #ifndef PH_FRINFC_FMT_TOPAZ_DISABLED */
    382 
    383                 }
    384                 else
    385                 {
    386                     /*  Invalid Topaz card, as the remote device
    387                         info - opmode says its a desfire card but,
    388                         The SAK/Sel_Res is wrong */
    389                     Result = PHNFCSTVAL(CID_FRI_NFC_NDEF_SMTCRDFMT,
    390                                         NFCSTATUS_INVALID_REMOTE_DEVICE);
    391                 }
    392             break;
    393 
    394 #ifdef PHFRINFC_OVRHAL_MOCKUP
    395             case phHal_eOpModesMockup :
    396                     /*Set the OpMode Ttype Flag*/
    397                     NdefSmtCrdFmt->OpModeType[0] = phHal_eOpModesMockup;
    398                     NdefSmtCrdFmt->OpModeType[1] = phHal_eOpModesArrayTerminator;
    399                     //Result = phFriNfc_Mockup_ChkNdef(NdefSmtCrdFmt);
    400             break;
    401 #endif  /* PHFRINFC_OVRHAL_MOCKUP */
    402 
    403 #ifndef PH_FRINFC_FMT_ISO15693_DISABLED
    404             case phHal_eISO15693_PICC:
    405             {
    406                 Result = phFriNfc_ISO15693_Format (NdefSmtCrdFmt);
    407                 break;
    408             }
    409 #endif /* #ifndef PH_FRINFC_FMT_ISO15693_DISABLED */
    410             default :
    411                 /*  Remote device is not recognised.
    412                 Probably not NDEF compliant */
    413                 Result = PHNFCSTVAL(CID_FRI_NFC_NDEF_SMTCRDFMT,
    414                                     NFCSTATUS_INVALID_REMOTE_DEVICE);
    415             break;
    416         }
    417     }
    418     return Result;
    419 }
    420 /*!
    421  * \brief Handles different request and responses from the integration layer.
    422  *
    423  */
    424 void phFriNfc_NdefSmtCrd_Process(void        *Context,
    425                                  NFCSTATUS    Status)
    426 {
    427     if ( Context != NULL )
    428     {
    429         phFriNfc_sNdefSmtCrdFmt_t  *NdefSmtCrdFmt = (phFriNfc_sNdefSmtCrdFmt_t *)Context;
    430 #ifdef PH_HAL4_ENABLE
    431         switch ( NdefSmtCrdFmt->psRemoteDevInfo->RemDevType )
    432 #else
    433         switch ( NdefSmtCrdFmt->psRemoteDevInfo->OpMode )
    434 #endif /* #ifdef PH_HAL4_ENABLE */
    435         {
    436 #ifdef PH_HAL4_ENABLE
    437             case phHal_eMifare_PICC :
    438 #else
    439             case  phHal_eOpModesMifare :
    440 #endif /* #ifdef PH_HAL4_ENABLE */
    441                 if((NdefSmtCrdFmt->CardType == PH_FRINFC_SMTCRDFMT_MFSTD_1K_CRD) ||
    442                     (NdefSmtCrdFmt->CardType == PH_FRINFC_SMTCRDFMT_MFSTD_4K_CRD))
    443                 {
    444 #ifndef PH_FRINFC_FMT_MIFARESTD_DISABLED
    445                     /*  Remote device is Mifare Standard card */
    446                     phFriNfc_MfStd_Process(NdefSmtCrdFmt,Status);
    447 
    448 #else   /* PH_FRINFC_FMT_MIFARESTD_DISABLED*/
    449                         Status = PHNFCSTVAL(CID_FRI_NFC_NDEF_SMTCRDFMT,
    450                                             NFCSTATUS_INVALID_REMOTE_DEVICE);
    451 #endif  /* PH_FRINFC_FMT_MIFARESTD_DISABLED*/
    452                 }
    453                 else
    454                 {
    455 #ifndef PH_FRINFC_FMT_MIFAREUL_DISABLED
    456                     /*  Remote device is Mifare UL card */
    457                     phFriNfc_MfUL_Process(NdefSmtCrdFmt,Status);
    458 #else   /* PH_FRINFC_FMT_MIFAREUL_DISABLED*/
    459                     Status = PHNFCSTVAL(CID_FRI_NFC_NDEF_SMTCRDFMT,
    460                                          NFCSTATUS_INVALID_REMOTE_DEVICE);
    461 #endif  /* PH_FRINFC_FMT_MIFAREUL_DISABLED*/
    462                 }
    463             break;
    464 
    465 #ifdef PH_HAL4_ENABLE
    466             case phHal_eISO14443_A_PICC :
    467 #else
    468             case phHal_eOpModesISO14443_4A :
    469 #endif /* #ifdef PH_HAL4_ENABLE */
    470 #ifndef PH_FRINFC_FMT_DESFIRE_DISABLED
    471                 /*  Remote device is Desfire card */
    472                 phFriNfc_Desf_Process(NdefSmtCrdFmt, Status);
    473 #else   /* PH_FRINFC_FMT_DESFIRE_DISABLED*/
    474                  Status = PHNFCSTVAL(CID_FRI_NFC_NDEF_SMTCRDFMT,
    475                                             NFCSTATUS_INVALID_REMOTE_DEVICE);
    476 #endif  /* PH_FRINFC_FMT_DESFIRE_DISABLED*/
    477             break;
    478 #ifdef PH_HAL4_ENABLE
    479             case phHal_eJewel_PICC :
    480 #else
    481             case phHal_eOpModesJewel:
    482 #endif /* #ifdef PH_HAL4_ENABLE */
    483 #ifndef PH_FRINFC_FMT_TOPAZ_DISABLED
    484                 /*  Remote device is Topaz Smart card */
    485                phFriNfc_Topaz_Process(NdefSmtCrdFmt, Status);
    486 #else   /* PH_FRINFC_FMT_TOPAZ_DISABLED*/
    487                Status = PHNFCSTVAL(CID_FRI_NFC_NDEF_SMTCRDFMT,
    488                                             NFCSTATUS_INVALID_REMOTE_DEVICE);
    489 #endif  /* PH_FRINFC_FMT_TOPAZ_DISABLED*/
    490             break;
    491 
    492 #ifndef PH_FRINFC_FMT_ISO15693_DISABLED
    493             case phHal_eISO15693_PICC :
    494             {
    495                 phFriNfc_ISO15693_FmtProcess (NdefSmtCrdFmt, Status);
    496                 break;
    497             }
    498 #endif /* #ifndef PH_FRINFC_FMT_ISO15693_DISABLED */
    499 
    500 #ifdef PHFRINFC_OVRHAL_MOCKUP
    501             case phHal_eOpModesMockup:
    502                 /*  Remote device is Desfire card */
    503                 //phFriNfc_Mockup_Process(NdefSmtCrdFmt, Status);
    504             break;
    505 #endif  /* PHFRINFC_OVRHAL_MOCKUP*/
    506             default :
    507                 /*  Remote device opmode not recognised.
    508                     Probably not NDEF compliant */
    509                 Status = PHNFCSTVAL(CID_FRI_NFC_NDEF_SMTCRDFMT,
    510                                     NFCSTATUS_INVALID_REMOTE_DEVICE);
    511                 /* set the state back to the Reset_Init state*/
    512                 NdefSmtCrdFmt->State =  PH_FRINFC_SMTCRDFMT_STATE_RESET_INIT;
    513 
    514                 /* set the completion routine*/
    515                 NdefSmtCrdFmt->CompletionRoutine[PH_FRINFC_SMTCRDFMT_CR_INVALID_OPE].
    516                 CompletionRoutine(NdefSmtCrdFmt->CompletionRoutine->Context, Status);
    517             break;
    518         }
    519     }
    520     else
    521     {
    522         Status = PHNFCSTVAL(CID_FRI_NFC_NDEF_SMTCRDFMT,\
    523                             NFCSTATUS_INVALID_PARAMETER);
    524         /* The control should not come here. As Context itself is NULL ,
    525            Can't call the CR*/
    526     }
    527 }
    528 
    529 #endif  /* PH_FRINFC_CARD_FORMAT_DISABLED */
    530 
    531