15d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly/* 23d254b6b7034191c1134c4aa0ea66e3749a3af69Martijn Coenen * Copyright (C) 2010 NXP Semiconductors 33d254b6b7034191c1134c4aa0ea66e3749a3af69Martijn Coenen * 43d254b6b7034191c1134c4aa0ea66e3749a3af69Martijn Coenen * Licensed under the Apache License, Version 2.0 (the "License"); 53d254b6b7034191c1134c4aa0ea66e3749a3af69Martijn Coenen * you may not use this file except in compliance with the License. 63d254b6b7034191c1134c4aa0ea66e3749a3af69Martijn Coenen * You may obtain a copy of the License at 73d254b6b7034191c1134c4aa0ea66e3749a3af69Martijn Coenen * 83d254b6b7034191c1134c4aa0ea66e3749a3af69Martijn Coenen * http://www.apache.org/licenses/LICENSE-2.0 93d254b6b7034191c1134c4aa0ea66e3749a3af69Martijn Coenen * 103d254b6b7034191c1134c4aa0ea66e3749a3af69Martijn Coenen * Unless required by applicable law or agreed to in writing, software 113d254b6b7034191c1134c4aa0ea66e3749a3af69Martijn Coenen * distributed under the License is distributed on an "AS IS" BASIS, 123d254b6b7034191c1134c4aa0ea66e3749a3af69Martijn Coenen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 133d254b6b7034191c1134c4aa0ea66e3749a3af69Martijn Coenen * See the License for the specific language governing permissions and 143d254b6b7034191c1134c4aa0ea66e3749a3af69Martijn Coenen * limitations under the License. 153d254b6b7034191c1134c4aa0ea66e3749a3af69Martijn Coenen */ 165d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 175d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly/*! 185d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* \file phFriNfc_DesfireFormat.c 195d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* \brief This component encapsulates different format functinalities , 205d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* for the Type4/Desfire card. 215d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* 225d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* Project: NFC-FRI 235d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* 2480ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen* $Date: Thu Oct 28 17:44:00 2010 $ 25eff5a3da9704a7d49f0990152c84c172630da679Jan Brands* $Author: ing02260 $ 2680ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen* $Revision: 1.8 $ 27eff5a3da9704a7d49f0990152c84c172630da679Jan Brands* $Aliases: $ 285d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* 295d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly*/ 305d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#include <phNfcTypes.h> 315d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#include <phFriNfc_OvrHal.h> 325d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#include <phFriNfc_SmtCrdFmt.h> 335d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#include <phFriNfc_DesfireFormat.h> 345d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 355d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 365d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly/* Following section details, how to wrap the native DESFire commands in to ISO commands 375d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyFollowing are different native commands are wrapped under the ISO commands : 385d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly1. Crate Application 395d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly2. Select File 405d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly3. Get version 415d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly4. Create CC/NDEF File 425d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly5. Write data to STD File 435d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyIn this File above commands are sent using the ISO Wrapper. 445d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 455d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyWrapping the native DESFire APDU's procedure 465d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly-------------------------------------------------------------------------------- 475d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyCLA INS P1 P2 Lc Data Le 485d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly0x90 Cmd 0x00 0x00 Data Len Cmd. Par's 0x00 495d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly-----------------------------------------------------------------------------------*/ 505d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 51eff5a3da9704a7d49f0990152c84c172630da679Jan Brands/****************************** Macro definitions start ********************************/ 52eff5a3da9704a7d49f0990152c84c172630da679Jan Brands/* This settings can be changed, depending on the requirement*/ 53eff5a3da9704a7d49f0990152c84c172630da679Jan Brands#define PH_FRINFC_DESF_PICC_NFC_KEY_SETTING 0x0FU 54eff5a3da9704a7d49f0990152c84c172630da679Jan Brands 5580ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen#ifdef FRINFC_READONLY_NDEF 5680ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen 5780ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen #define READ_ONLY_NDEF_DESFIRE 0xFFU 5880ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen #define CC_BYTES_SIZE 0x0FU 5980ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen #define PH_FRINFC_DESF_READ_DATA_CMD 0xBDU 6080ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen #define NATIVE_WRAPPER_READ_DATA_LC_VALUE 0x07U 6180ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen 6280ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen#endif /* #ifdef FRINFC_READONLY_NDEF */ 6380ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen 64eff5a3da9704a7d49f0990152c84c172630da679Jan Brands#ifdef DESFIRE_FMT_EV1 65eff5a3da9704a7d49f0990152c84c172630da679Jan Brands 66eff5a3da9704a7d49f0990152c84c172630da679Jan Brands#define DESFIRE_CARD_TYPE_EV1 0x01U 67eff5a3da9704a7d49f0990152c84c172630da679Jan Brands 68eff5a3da9704a7d49f0990152c84c172630da679Jan Brands#define DESFIRE_EV1_MAPPING_VERSION 0x20U 69eff5a3da9704a7d49f0990152c84c172630da679Jan Brands 70eff5a3da9704a7d49f0990152c84c172630da679Jan Brands#define DESFIRE_EV1_HW_MAJOR_VERSION 0x01U 71eff5a3da9704a7d49f0990152c84c172630da679Jan Brands#define DESFIRE_EV1_HW_MINOR_VERSION 0x00U 72eff5a3da9704a7d49f0990152c84c172630da679Jan Brands#define DESFIRE_EV1_SW_MAJOR_VERSION 0x01U 73eff5a3da9704a7d49f0990152c84c172630da679Jan Brands#define DESFIRE_EV1_SW_MINOR_VERSION 0x03U 74eff5a3da9704a7d49f0990152c84c172630da679Jan Brands 75eff5a3da9704a7d49f0990152c84c172630da679Jan Brands/* The below values are received for the command GET VERSION */ 76eff5a3da9704a7d49f0990152c84c172630da679Jan Brands#define DESFIRE_TAG_SIZE_IDENTIFIER_2K 0x16U 77eff5a3da9704a7d49f0990152c84c172630da679Jan Brands#define DESFIRE_TAG_SIZE_IDENTIFIER_4K 0x18U 78eff5a3da9704a7d49f0990152c84c172630da679Jan Brands#define DESFIRE_TAG_SIZE_IDENTIFIER_8K 0x1AU 79eff5a3da9704a7d49f0990152c84c172630da679Jan Brands 80eff5a3da9704a7d49f0990152c84c172630da679Jan Brands#define DESFIRE_2K_CARD 2048U 81eff5a3da9704a7d49f0990152c84c172630da679Jan Brands#define DESFIRE_4K_CARD 4096U 82eff5a3da9704a7d49f0990152c84c172630da679Jan Brands#define DESFIRE_8K_CARD 7680U 83eff5a3da9704a7d49f0990152c84c172630da679Jan Brands 8480ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen#define DESFIRE_EV1_KEY_SETTINGS_2 0x21U 85eff5a3da9704a7d49f0990152c84c172630da679Jan Brands 86eff5a3da9704a7d49f0990152c84c172630da679Jan Brands#define DESFIRE_EV1_FIRST_AID_BYTE 0x01U 87eff5a3da9704a7d49f0990152c84c172630da679Jan Brands#define DESFIRE_EV1_SECOND_AID_BYTE 0x00U 88eff5a3da9704a7d49f0990152c84c172630da679Jan Brands#define DESFIRE_EV1_THIRD_AID_BYTE 0x00U 89eff5a3da9704a7d49f0990152c84c172630da679Jan Brands 90eff5a3da9704a7d49f0990152c84c172630da679Jan Brands#define DESFIRE_EV1_FIRST_ISO_FILE_ID 0x05U 91eff5a3da9704a7d49f0990152c84c172630da679Jan Brands#define DESFIRE_EV1_SECOND_ISO_FILE_ID 0xE1U 92eff5a3da9704a7d49f0990152c84c172630da679Jan Brands 93eff5a3da9704a7d49f0990152c84c172630da679Jan Brands#define DESFIRE_EV1_ISO_APP_DF_NAME {0xD2, 0x76, 0x00, 0x00, 0x85, 0x01, 0x01} 94eff5a3da9704a7d49f0990152c84c172630da679Jan Brands 95eff5a3da9704a7d49f0990152c84c172630da679Jan Brands#define DESFIRE_EV1_CC_FILE_ID 0x01U 96eff5a3da9704a7d49f0990152c84c172630da679Jan Brands#define DESFIRE_EV1_FIRST_CC_FILE_ID_BYTE 0x03U 97eff5a3da9704a7d49f0990152c84c172630da679Jan Brands#define DESFIRE_EV1_SECOND_CC_FILE_ID_BYTE 0xE1U 98eff5a3da9704a7d49f0990152c84c172630da679Jan Brands 99eff5a3da9704a7d49f0990152c84c172630da679Jan Brands#define DESFIRE_EV1_NDEF_FILE_ID 0x02U 100eff5a3da9704a7d49f0990152c84c172630da679Jan Brands#define DESFIRE_EV1_FIRST_NDEF_FILE_ID_BYTE 0x04U 101eff5a3da9704a7d49f0990152c84c172630da679Jan Brands#define DESFIRE_EV1_SECOND_NDEF_FILE_ID_BYTE 0xE1U 102eff5a3da9704a7d49f0990152c84c172630da679Jan Brands 103eff5a3da9704a7d49f0990152c84c172630da679Jan Brands 104eff5a3da9704a7d49f0990152c84c172630da679Jan Brands#define PH_FRINFC_DESF_STATE_REACTIVATE 0x0FU 105eff5a3da9704a7d49f0990152c84c172630da679Jan Brands 106eff5a3da9704a7d49f0990152c84c172630da679Jan Brands#endif /* #ifdef DESFIRE_FMT_EV1 */ 107eff5a3da9704a7d49f0990152c84c172630da679Jan Brands/****************************** Macro definitions end ********************************/ 1085d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly/* Helper functions to create app/select app/create data file/read /write from the 1095d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyCC file and NDEF files */ 1105d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pellystatic void phFriNfc_Desf_HWrapISONativeCmds(phFriNfc_sNdefSmtCrdFmt_t *NdefSmtCrdFmt,uint8_t CmdType); 1115d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 1125d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly/* Gets H/W version details*/ 1135d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pellystatic NFCSTATUS phFriNfc_Desf_HGetHWVersion(phFriNfc_sNdefSmtCrdFmt_t *NdefSmtCrdFmt); 1145d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 1155d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly/* Gets S/W version details*/ 1165d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pellystatic NFCSTATUS phFriNfc_Desf_HGetSWVersion(phFriNfc_sNdefSmtCrdFmt_t *NdefSmtCrdFmt); 1175d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 1185d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly/* Updates the version details to context structure*/ 1195d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pellystatic NFCSTATUS phFriNfc_Desf_HUpdateVersionDetails(phFriNfc_sNdefSmtCrdFmt_t *NdefSmtCrdFmt); 1205d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 1215d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly/*Gets UID details*/ 1225d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pellystatic NFCSTATUS phFriNfc_Desf_HGetUIDDetails(phFriNfc_sNdefSmtCrdFmt_t * NdefSmtCrdFmt); 1235d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 1245d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly/*Creates Application*/ 1255d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pellystatic NFCSTATUS phFriNfc_Desf_HCreateApp(phFriNfc_sNdefSmtCrdFmt_t *NdefSmtCrdFmt); 1265d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 1275d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly/* Selects Application*/ 1285d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pellystatic NFCSTATUS phFriNfc_Desf_HSelectApp(phFriNfc_sNdefSmtCrdFmt_t *NdefSmtCrdFmt); 1295d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 1305d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly/*Creates Capability Container File*/ 1315d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pellystatic NFCSTATUS phFriNfc_Desf_HCreatCCFile(phFriNfc_sNdefSmtCrdFmt_t *NdefSmtCrdFmt); 1325d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 1335d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly/* Create NDEF File*/ 1345d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pellystatic NFCSTATUS phFriNfc_Desf_HCreatNDEFFile(phFriNfc_sNdefSmtCrdFmt_t *NdefSmtCrdFmt); 1355d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 1365d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly/* Writes CC Bytes to CC File*/ 1375d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pellystatic NFCSTATUS phFriNfc_Desf_HWrCCBytes(phFriNfc_sNdefSmtCrdFmt_t *NdefSmtCrdFmt); 1385d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 1395d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly/* Writes NDEF data into NDEF File*/ 1405d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pellystatic NFCSTATUS phFriNfc_Desf_HWrNDEFData(phFriNfc_sNdefSmtCrdFmt_t *NdefSmtCrdFmt); 1415d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 1425d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly/* Transceive Cmd initiation*/ 1435d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pellystatic NFCSTATUS phFriNfc_Desf_HSendTransCmd(phFriNfc_sNdefSmtCrdFmt_t *NdefSmtCrdFmt); 1445d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 14580ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen#ifdef FRINFC_READONLY_NDEF 14680ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen 14780ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen#if 0 14880ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenenstatic 14980ee29b88ec489e2bbf6ae446692229d36755429Martijn CoenenNFCSTATUS 15080ee29b88ec489e2bbf6ae446692229d36755429Martijn CoenenphFriNfc_Desf_HReadOnlySelectCCFile ( 15180ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen phFriNfc_sNdefSmtCrdFmt_t *NdefSmtCrdFmt); 15280ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen#endif /* #if 0 */ 15380ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen 15480ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenenstatic 15580ee29b88ec489e2bbf6ae446692229d36755429Martijn CoenenNFCSTATUS 15680ee29b88ec489e2bbf6ae446692229d36755429Martijn CoenenphFriNfc_Desf_HReadOnlyReadCCFile ( 15780ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen phFriNfc_sNdefSmtCrdFmt_t *NdefSmtCrdFmt); 15880ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen 15980ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenenstatic 16080ee29b88ec489e2bbf6ae446692229d36755429Martijn CoenenNFCSTATUS 16180ee29b88ec489e2bbf6ae446692229d36755429Martijn CoenenphFriNfc_Desf_HReadOnlyWriteCCFile ( 16280ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen phFriNfc_sNdefSmtCrdFmt_t *NdefSmtCrdFmt); 16380ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen 16480ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenenstatic 16580ee29b88ec489e2bbf6ae446692229d36755429Martijn CoenenNFCSTATUS 16680ee29b88ec489e2bbf6ae446692229d36755429Martijn CoenenphFriNfc_Desf_HReadOnlySelectApp ( 16780ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen phFriNfc_sNdefSmtCrdFmt_t *NdefSmtCrdFmt); 16880ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen 16980ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen#ifdef DESFIRE_FMT_EV1 17080ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen 17180ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenenstatic 17280ee29b88ec489e2bbf6ae446692229d36755429Martijn CoenenNFCSTATUS 17380ee29b88ec489e2bbf6ae446692229d36755429Martijn CoenenphFriNfc_Desf_HReadOnlySelectAppEV1 ( 17480ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen phFriNfc_sNdefSmtCrdFmt_t *NdefSmtCrdFmt); 17580ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen 17680ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen#endif /* #ifdef DESFIRE_FMT_EV1 */ 17780ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen 17880ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen#endif /* #ifdef FRINFC_READONLY_NDEF */ 1795d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 1805d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pellyvoid phFriNfc_Desfire_Reset( phFriNfc_sNdefSmtCrdFmt_t *NdefSmtCrdFmt) 1815d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{ 1825d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* This piece of code may not be useful for the current supported DESFire formatting feature*/ 1835d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* Currently, s/w doesn't support authenticating either PICC Master key nor NFC Forum 1845d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly Application Master key*/ 1855d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 1865d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /*NdefSmtCrdFmt->AddInfo.Type4Info.PICCMasterKey[] = PH_FRINFC_SMTCRDFMT_DESF_PICC_MASTER_KEY; 1875d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NdefSmtCrdFmt->AddInfo.Type4Info.NFCForumMasterkey[] = PH_FRINFC_SMTCRDFMT_DESF_NFCFORUM_APP_KEY;*/ 1885d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 1895d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* reset to zero PICC and NFC FORUM master keys*/ 1905d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (void)memset((void *)NdefSmtCrdFmt->AddInfo.Type4Info.PICCMasterKey, 191eff5a3da9704a7d49f0990152c84c172630da679Jan Brands 0x00, 192eff5a3da9704a7d49f0990152c84c172630da679Jan Brands 16); 1935d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 1945d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (void)memset((void *)NdefSmtCrdFmt->AddInfo.Type4Info.NFCForumMasterkey, 195eff5a3da9704a7d49f0990152c84c172630da679Jan Brands 0x00, 196eff5a3da9704a7d49f0990152c84c172630da679Jan Brands 16); 1975d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NdefSmtCrdFmt->AddInfo.Type4Info.PrevState = 0; 1985d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 1995d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly} 2005d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 2015d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 2025d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pellystatic void phFriNfc_Desf_HWrapISONativeCmds(phFriNfc_sNdefSmtCrdFmt_t *NdefSmtCrdFmt,uint8_t CmdType) 2035d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{ 2045d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 2055d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint16_t i=0, CmdByte=1; 2065d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t NdefFileBytes[] = PH_FRINFC_DESF_NDEFFILE_BYTES; 2075d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t CCFileBytes[] = PH_FRINFC_DESF_CCFILE_BYTES; 2085d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 2095d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 2105d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* common elements for all the native commands*/ 2115d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 2125d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* Class Byte */ 2135d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NdefSmtCrdFmt->SendRecvBuf[i] = PH_FRINFC_DESF_NATIVE_CLASS_BYTE; 2145d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 2155d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* let the place to store the cmd byte type, point to next index*/ 2165d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly i += 2; 2175d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 2185d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 2195d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* P1/P2 offsets always set to zero */ 2205d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NdefSmtCrdFmt->SendRecvBuf[i] = PH_FRINFC_DESF_NATIVE_OFFSET_P1; 2215d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly i++; 2225d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NdefSmtCrdFmt->SendRecvBuf[i] = PH_FRINFC_DESF_NATIVE_OFFSET_P2; 2235d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly i++; 2245d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 2255d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly switch(CmdType) 2265d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 227eff5a3da9704a7d49f0990152c84c172630da679Jan Brands case PH_FRINFC_DESF_GET_HW_VERSION_CMD : 228eff5a3da9704a7d49f0990152c84c172630da679Jan Brands case PH_FRINFC_DESF_GET_SW_VERSION_CMD : 229eff5a3da9704a7d49f0990152c84c172630da679Jan Brands case PH_FRINFC_DESF_GET_UID_CMD : 230eff5a3da9704a7d49f0990152c84c172630da679Jan Brands { 231eff5a3da9704a7d49f0990152c84c172630da679Jan Brands if (CmdType == PH_FRINFC_DESF_GET_HW_VERSION_CMD ) 232eff5a3da9704a7d49f0990152c84c172630da679Jan Brands { 233eff5a3da9704a7d49f0990152c84c172630da679Jan Brands /* Instruction Cmd code */ 234eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[CmdByte] = PH_FRINFC_DESF_GET_VER_CMD; 235eff5a3da9704a7d49f0990152c84c172630da679Jan Brands } 236eff5a3da9704a7d49f0990152c84c172630da679Jan Brands else 237eff5a3da9704a7d49f0990152c84c172630da679Jan Brands { 238eff5a3da9704a7d49f0990152c84c172630da679Jan Brands /* Instruction Cmd code */ 239eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[CmdByte] = PH_FRINFC_DESF_PICC_ADDI_FRAME_RESP; 240eff5a3da9704a7d49f0990152c84c172630da679Jan Brands } 241eff5a3da9704a7d49f0990152c84c172630da679Jan Brands 242eff5a3da9704a7d49f0990152c84c172630da679Jan Brands /* Lc: Length of wrapped data */ 243eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[i] = 0x00; 244eff5a3da9704a7d49f0990152c84c172630da679Jan Brands i++; 245eff5a3da9704a7d49f0990152c84c172630da679Jan Brands 246eff5a3da9704a7d49f0990152c84c172630da679Jan Brands /* NO Data to send in this cmd*/ 247eff5a3da9704a7d49f0990152c84c172630da679Jan Brands /* we are not suppose to set Le*/ 248eff5a3da9704a7d49f0990152c84c172630da679Jan Brands /* set the length of the buffer*/ 249eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendLength = i; 2505d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 251eff5a3da9704a7d49f0990152c84c172630da679Jan Brands break; 252eff5a3da9704a7d49f0990152c84c172630da679Jan Brands } 2535d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 254eff5a3da9704a7d49f0990152c84c172630da679Jan Brands case PH_FRINFC_DESF_CREATEAPP_CMD: 2555d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 256eff5a3da9704a7d49f0990152c84c172630da679Jan Brands#ifdef DESFIRE_FMT_EV1 257eff5a3da9704a7d49f0990152c84c172630da679Jan Brands uint8_t df_name[] = DESFIRE_EV1_ISO_APP_DF_NAME; 258eff5a3da9704a7d49f0990152c84c172630da679Jan Brands#endif /* #ifdef DESFIRE_FMT_EV1 */ 259eff5a3da9704a7d49f0990152c84c172630da679Jan Brands 2605d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* Instruction Cmd code */ 261eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[CmdByte] = PH_FRINFC_DESF_CREATE_AID_CMD; 262eff5a3da9704a7d49f0990152c84c172630da679Jan Brands 263eff5a3da9704a7d49f0990152c84c172630da679Jan Brands#ifdef DESFIRE_FMT_EV1 264eff5a3da9704a7d49f0990152c84c172630da679Jan Brands if (DESFIRE_CARD_TYPE_EV1 == NdefSmtCrdFmt->CardType) 265eff5a3da9704a7d49f0990152c84c172630da679Jan Brands { 266eff5a3da9704a7d49f0990152c84c172630da679Jan Brands /* Lc: Length of wrapped data, 267eff5a3da9704a7d49f0990152c84c172630da679Jan Brands here the magic number 2 is for the ISO File ID for the application */ 268eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[i] = (uint8_t)(PH_FRINFC_DESF_NATIVE_CRAPP_WRDT_LEN + 269eff5a3da9704a7d49f0990152c84c172630da679Jan Brands sizeof (df_name) + 2); 270eff5a3da9704a7d49f0990152c84c172630da679Jan Brands i++; 271eff5a3da9704a7d49f0990152c84c172630da679Jan Brands /* NFC FORUM APPLICATION ID*/ 272eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[i] = DESFIRE_EV1_FIRST_AID_BYTE; 273eff5a3da9704a7d49f0990152c84c172630da679Jan Brands i++; 274eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[i] = DESFIRE_EV1_SECOND_AID_BYTE; 275eff5a3da9704a7d49f0990152c84c172630da679Jan Brands i++; 276eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[i] = DESFIRE_EV1_THIRD_AID_BYTE; 277eff5a3da9704a7d49f0990152c84c172630da679Jan Brands i++; 278eff5a3da9704a7d49f0990152c84c172630da679Jan Brands } 279eff5a3da9704a7d49f0990152c84c172630da679Jan Brands else 280eff5a3da9704a7d49f0990152c84c172630da679Jan Brands#endif /* #ifdef DESFIRE_FMT_EV1 */ 281eff5a3da9704a7d49f0990152c84c172630da679Jan Brands { 282eff5a3da9704a7d49f0990152c84c172630da679Jan Brands /* Lc: Length of wrapped data */ 283eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[i] = PH_FRINFC_DESF_NATIVE_CRAPP_WRDT_LEN; 284eff5a3da9704a7d49f0990152c84c172630da679Jan Brands i++; 285eff5a3da9704a7d49f0990152c84c172630da679Jan Brands /* NFC FORUM APPLICATION ID*/ 286eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[i] = PH_FRINFC_DESF_FIRST_AID_BYTE; 287eff5a3da9704a7d49f0990152c84c172630da679Jan Brands i++; 288eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[i] = PH_FRINFC_DESF_SEC_AID_BYTE; 289eff5a3da9704a7d49f0990152c84c172630da679Jan Brands i++; 290eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[i] = PH_FRINFC_DESF_THIRD_AID_BYTE; 291eff5a3da9704a7d49f0990152c84c172630da679Jan Brands i++; 292eff5a3da9704a7d49f0990152c84c172630da679Jan Brands } 293eff5a3da9704a7d49f0990152c84c172630da679Jan Brands /* set key settings and number of keys*/ 294eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[i] = PH_FRINFC_DESF_PICC_NFC_KEY_SETTING; 295eff5a3da9704a7d49f0990152c84c172630da679Jan Brands i++; 296eff5a3da9704a7d49f0990152c84c172630da679Jan Brands#ifdef DESFIRE_FMT_EV1 297eff5a3da9704a7d49f0990152c84c172630da679Jan Brands if (DESFIRE_CARD_TYPE_EV1 == NdefSmtCrdFmt->CardType) 298eff5a3da9704a7d49f0990152c84c172630da679Jan Brands { 299eff5a3da9704a7d49f0990152c84c172630da679Jan Brands /* set key settings and number of keys*/ 300eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[i] = DESFIRE_EV1_KEY_SETTINGS_2; 301eff5a3da9704a7d49f0990152c84c172630da679Jan Brands i++; 302eff5a3da9704a7d49f0990152c84c172630da679Jan Brands } 303eff5a3da9704a7d49f0990152c84c172630da679Jan Brands else 304eff5a3da9704a7d49f0990152c84c172630da679Jan Brands#endif /* #ifdef DESFIRE_FMT_EV1 */ 305eff5a3da9704a7d49f0990152c84c172630da679Jan Brands { 306eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[i] = PH_FRINFC_DESF_NFCFORUM_APP_NO_OF_KEYS; 307eff5a3da9704a7d49f0990152c84c172630da679Jan Brands i++; 308eff5a3da9704a7d49f0990152c84c172630da679Jan Brands } 309eff5a3da9704a7d49f0990152c84c172630da679Jan Brands 310eff5a3da9704a7d49f0990152c84c172630da679Jan Brands#ifdef DESFIRE_FMT_EV1 311eff5a3da9704a7d49f0990152c84c172630da679Jan Brands if (DESFIRE_CARD_TYPE_EV1 == NdefSmtCrdFmt->CardType) 312eff5a3da9704a7d49f0990152c84c172630da679Jan Brands { 313eff5a3da9704a7d49f0990152c84c172630da679Jan Brands /* ISO File ID */ 314eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[i] = DESFIRE_EV1_FIRST_ISO_FILE_ID; 315eff5a3da9704a7d49f0990152c84c172630da679Jan Brands i++; 316eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[i] = DESFIRE_EV1_SECOND_ISO_FILE_ID; 317eff5a3da9704a7d49f0990152c84c172630da679Jan Brands i++; 318eff5a3da9704a7d49f0990152c84c172630da679Jan Brands /* DF file name */ 319eff5a3da9704a7d49f0990152c84c172630da679Jan Brands (void)memcpy ((void *)&NdefSmtCrdFmt->SendRecvBuf[i], 320eff5a3da9704a7d49f0990152c84c172630da679Jan Brands (void *)df_name, sizeof (df_name)); 321eff5a3da9704a7d49f0990152c84c172630da679Jan Brands i = (uint16_t)(i + sizeof (df_name)); 322eff5a3da9704a7d49f0990152c84c172630da679Jan Brands } 323eff5a3da9704a7d49f0990152c84c172630da679Jan Brands#endif /* #ifdef DESFIRE_FMT_EV1 */ 324eff5a3da9704a7d49f0990152c84c172630da679Jan Brands 325eff5a3da9704a7d49f0990152c84c172630da679Jan Brands /* Le bytes*/ 326eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[i] = PH_FRINFC_DESF_NATIVE_LE_BYTE; 327eff5a3da9704a7d49f0990152c84c172630da679Jan Brands i++; 328eff5a3da9704a7d49f0990152c84c172630da679Jan Brands 329eff5a3da9704a7d49f0990152c84c172630da679Jan Brands#ifdef DESFIRE_FMT_EV1 330eff5a3da9704a7d49f0990152c84c172630da679Jan Brands if (DESFIRE_CARD_TYPE_EV1 == NdefSmtCrdFmt->CardType) 331eff5a3da9704a7d49f0990152c84c172630da679Jan Brands { 332eff5a3da9704a7d49f0990152c84c172630da679Jan Brands /* set the length of the buffer*/ 333eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendLength = i; 334eff5a3da9704a7d49f0990152c84c172630da679Jan Brands } 335eff5a3da9704a7d49f0990152c84c172630da679Jan Brands else 336eff5a3da9704a7d49f0990152c84c172630da679Jan Brands#endif /* #ifdef DESFIRE_FMT_EV1 */ 337eff5a3da9704a7d49f0990152c84c172630da679Jan Brands { 338eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendLength = PH_FRINFC_DESF_CREATEAPP_CMD_SNLEN; 339eff5a3da9704a7d49f0990152c84c172630da679Jan Brands } 340eff5a3da9704a7d49f0990152c84c172630da679Jan Brands break; 3415d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 342eff5a3da9704a7d49f0990152c84c172630da679Jan Brands 343eff5a3da9704a7d49f0990152c84c172630da679Jan Brands case PH_FRINFC_DESF_SELECTAPP_CMD: 3445d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 3455d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* Instruction Cmd code */ 346eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[CmdByte] = PH_FRINFC_DESF_SLECT_APP_CMD; 3475d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 348eff5a3da9704a7d49f0990152c84c172630da679Jan Brands /* Lc: Length of wrapped data */ 349eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[i] = PH_FRINFC_DESF_NATIVE_SLAPP_WRDT_LEN; 350eff5a3da9704a7d49f0990152c84c172630da679Jan Brands i++; 3515d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 352eff5a3da9704a7d49f0990152c84c172630da679Jan Brands#ifdef DESFIRE_FMT_EV1 353eff5a3da9704a7d49f0990152c84c172630da679Jan Brands if (DESFIRE_CARD_TYPE_EV1 == NdefSmtCrdFmt->CardType) 354eff5a3da9704a7d49f0990152c84c172630da679Jan Brands { 355eff5a3da9704a7d49f0990152c84c172630da679Jan Brands /* Data*/ 356eff5a3da9704a7d49f0990152c84c172630da679Jan Brands /* set the send buffer to create the application identifier*/ 357eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[i] = DESFIRE_EV1_FIRST_AID_BYTE; 358eff5a3da9704a7d49f0990152c84c172630da679Jan Brands i++; 3595d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 360eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[i] = DESFIRE_EV1_SECOND_AID_BYTE; 361eff5a3da9704a7d49f0990152c84c172630da679Jan Brands i++; 3625d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 363eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[i] = DESFIRE_EV1_THIRD_AID_BYTE; 364eff5a3da9704a7d49f0990152c84c172630da679Jan Brands i++; 365eff5a3da9704a7d49f0990152c84c172630da679Jan Brands } 366eff5a3da9704a7d49f0990152c84c172630da679Jan Brands else 367eff5a3da9704a7d49f0990152c84c172630da679Jan Brands#endif /* #ifdef DESFIRE_FMT_EV1 */ 368eff5a3da9704a7d49f0990152c84c172630da679Jan Brands { 369eff5a3da9704a7d49f0990152c84c172630da679Jan Brands /* Data*/ 370eff5a3da9704a7d49f0990152c84c172630da679Jan Brands /* set the send buffer to create the application identifier*/ 371eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[i] = PH_FRINFC_DESF_FIRST_AID_BYTE; 372eff5a3da9704a7d49f0990152c84c172630da679Jan Brands i++; 3735d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 374eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[i] = PH_FRINFC_DESF_SEC_AID_BYTE; 375eff5a3da9704a7d49f0990152c84c172630da679Jan Brands i++; 3765d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 377eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[i] = PH_FRINFC_DESF_THIRD_AID_BYTE; 378eff5a3da9704a7d49f0990152c84c172630da679Jan Brands i++; 379eff5a3da9704a7d49f0990152c84c172630da679Jan Brands } 3805d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 381eff5a3da9704a7d49f0990152c84c172630da679Jan Brands /* Le bytes*/ 382eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[i] = PH_FRINFC_DESF_NATIVE_LE_BYTE; 383eff5a3da9704a7d49f0990152c84c172630da679Jan Brands i++; 3845d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 385eff5a3da9704a7d49f0990152c84c172630da679Jan Brands /* set the length of the buffer*/ 386eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendLength = PH_FRINFC_DESF_SELECTAPP_CMD_SNLEN; 387eff5a3da9704a7d49f0990152c84c172630da679Jan Brands break; 388eff5a3da9704a7d49f0990152c84c172630da679Jan Brands } 3895d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 390eff5a3da9704a7d49f0990152c84c172630da679Jan Brands case PH_FRINFC_DESF_CREATECC_CMD: 391eff5a3da9704a7d49f0990152c84c172630da679Jan Brands { 392eff5a3da9704a7d49f0990152c84c172630da679Jan Brands /* Instruction Cmd code */ 393eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[CmdByte] = PH_FRINFC_DESF_CREATE_DATA_FILE_CMD; 394eff5a3da9704a7d49f0990152c84c172630da679Jan Brands 395eff5a3da9704a7d49f0990152c84c172630da679Jan Brands#ifdef DESFIRE_FMT_EV1 396eff5a3da9704a7d49f0990152c84c172630da679Jan Brands if (DESFIRE_CARD_TYPE_EV1 == NdefSmtCrdFmt->CardType) 397eff5a3da9704a7d49f0990152c84c172630da679Jan Brands { 398eff5a3da9704a7d49f0990152c84c172630da679Jan Brands /* Lc: Length of wrapped data, 399eff5a3da9704a7d49f0990152c84c172630da679Jan Brands here the magic number 2 is added as part of the ISO File ID in the packet */ 400eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[i] = (uint8_t) 401eff5a3da9704a7d49f0990152c84c172630da679Jan Brands (PH_FRINFC_DESF_NATIVE_CRCCNDEF_WRDT_LEN + 2); 402eff5a3da9704a7d49f0990152c84c172630da679Jan Brands i++; 403eff5a3da9704a7d49f0990152c84c172630da679Jan Brands /* set cc file id* */ 404eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[i] = DESFIRE_EV1_CC_FILE_ID; 405eff5a3da9704a7d49f0990152c84c172630da679Jan Brands i++; 406eff5a3da9704a7d49f0990152c84c172630da679Jan Brands /* ISO File ID */ 407eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[i] = DESFIRE_EV1_FIRST_CC_FILE_ID_BYTE; 408eff5a3da9704a7d49f0990152c84c172630da679Jan Brands i++; 409eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[i] = DESFIRE_EV1_SECOND_CC_FILE_ID_BYTE; 410eff5a3da9704a7d49f0990152c84c172630da679Jan Brands i++; 411eff5a3da9704a7d49f0990152c84c172630da679Jan Brands } 412eff5a3da9704a7d49f0990152c84c172630da679Jan Brands else 413eff5a3da9704a7d49f0990152c84c172630da679Jan Brands#endif /* #ifdef DESFIRE_FMT_EV1 */ 414eff5a3da9704a7d49f0990152c84c172630da679Jan Brands { 415eff5a3da9704a7d49f0990152c84c172630da679Jan Brands /* Lc: Length of wrapped data */ 416eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[i] = PH_FRINFC_DESF_NATIVE_CRCCNDEF_WRDT_LEN; 417eff5a3da9704a7d49f0990152c84c172630da679Jan Brands i++; 418eff5a3da9704a7d49f0990152c84c172630da679Jan Brands /* set cc file id*/ 419eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[i] = PH_FRINFC_DESF_CC_FILE_ID; 420eff5a3da9704a7d49f0990152c84c172630da679Jan Brands i++; 421eff5a3da9704a7d49f0990152c84c172630da679Jan Brands } 422eff5a3da9704a7d49f0990152c84c172630da679Jan Brands 423eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[i] = PH_FRINFC_DESF_COMM_SETTINGS; 424eff5a3da9704a7d49f0990152c84c172630da679Jan Brands i++; 425eff5a3da9704a7d49f0990152c84c172630da679Jan Brands 426eff5a3da9704a7d49f0990152c84c172630da679Jan Brands /* set the Access Rights are set to full read/write, full cntrl*/ 427eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[i] = 0xEE; 428eff5a3da9704a7d49f0990152c84c172630da679Jan Brands i++; 429eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[i] = 0xEE; 430eff5a3da9704a7d49f0990152c84c172630da679Jan Brands i++; 431eff5a3da9704a7d49f0990152c84c172630da679Jan Brands 432eff5a3da9704a7d49f0990152c84c172630da679Jan Brands /* set the file size*/ 433eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[i] = PH_FRINFC_DESF_CC_FILE_SIZE; 434eff5a3da9704a7d49f0990152c84c172630da679Jan Brands i++; 435eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[i] = 0x00; 436eff5a3da9704a7d49f0990152c84c172630da679Jan Brands i++; 437eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[i] = 0x00; 438eff5a3da9704a7d49f0990152c84c172630da679Jan Brands i++; 439eff5a3da9704a7d49f0990152c84c172630da679Jan Brands 440eff5a3da9704a7d49f0990152c84c172630da679Jan Brands /* Le bytes*/ 441eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[i] = PH_FRINFC_DESF_NATIVE_LE_BYTE; 442eff5a3da9704a7d49f0990152c84c172630da679Jan Brands i++; 443eff5a3da9704a7d49f0990152c84c172630da679Jan Brands#ifdef DESFIRE_FMT_EV1 444eff5a3da9704a7d49f0990152c84c172630da679Jan Brands if (DESFIRE_CARD_TYPE_EV1 == NdefSmtCrdFmt->CardType) 445eff5a3da9704a7d49f0990152c84c172630da679Jan Brands { 446eff5a3da9704a7d49f0990152c84c172630da679Jan Brands /* set the length of the buffer*/ 447eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendLength = i; 448eff5a3da9704a7d49f0990152c84c172630da679Jan Brands } 449eff5a3da9704a7d49f0990152c84c172630da679Jan Brands else 450eff5a3da9704a7d49f0990152c84c172630da679Jan Brands#endif /* #ifdef DESFIRE_FMT_EV1 */ 451eff5a3da9704a7d49f0990152c84c172630da679Jan Brands { 452eff5a3da9704a7d49f0990152c84c172630da679Jan Brands /* set the length of the buffer*/ 453eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendLength = PH_FRINFC_DESF_CREATECCNDEF_CMD_SNLEN; 454eff5a3da9704a7d49f0990152c84c172630da679Jan Brands } 455eff5a3da9704a7d49f0990152c84c172630da679Jan Brands break; 456eff5a3da9704a7d49f0990152c84c172630da679Jan Brands } 4575d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 458eff5a3da9704a7d49f0990152c84c172630da679Jan Brands case PH_FRINFC_DESF_CREATENDEF_CMD: 459eff5a3da9704a7d49f0990152c84c172630da679Jan Brands { 460eff5a3da9704a7d49f0990152c84c172630da679Jan Brands /* Instruction Cmd code */ 461eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[CmdByte] = PH_FRINFC_DESF_CREATE_DATA_FILE_CMD; 4625d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 463eff5a3da9704a7d49f0990152c84c172630da679Jan Brands#ifdef DESFIRE_FMT_EV1 464eff5a3da9704a7d49f0990152c84c172630da679Jan Brands if (DESFIRE_CARD_TYPE_EV1 == NdefSmtCrdFmt->CardType) 465eff5a3da9704a7d49f0990152c84c172630da679Jan Brands { 466eff5a3da9704a7d49f0990152c84c172630da679Jan Brands /* Lc: Length of wrapped data, 467eff5a3da9704a7d49f0990152c84c172630da679Jan Brands here the magic number 2 is added as part of the ISO File ID in the packet */ 468eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[i] = (uint8_t) 469eff5a3da9704a7d49f0990152c84c172630da679Jan Brands (PH_FRINFC_DESF_NATIVE_CRCCNDEF_WRDT_LEN + 2); 470eff5a3da9704a7d49f0990152c84c172630da679Jan Brands i++; 471eff5a3da9704a7d49f0990152c84c172630da679Jan Brands /* set NDEF file id* */ 472eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[i] = DESFIRE_EV1_NDEF_FILE_ID; 473eff5a3da9704a7d49f0990152c84c172630da679Jan Brands i++; 474eff5a3da9704a7d49f0990152c84c172630da679Jan Brands /* ISO File ID */ 475eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[i] = DESFIRE_EV1_FIRST_NDEF_FILE_ID_BYTE; 476eff5a3da9704a7d49f0990152c84c172630da679Jan Brands i++; 477eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[i] = DESFIRE_EV1_SECOND_NDEF_FILE_ID_BYTE; 478eff5a3da9704a7d49f0990152c84c172630da679Jan Brands i++; 479eff5a3da9704a7d49f0990152c84c172630da679Jan Brands } 480eff5a3da9704a7d49f0990152c84c172630da679Jan Brands else 481eff5a3da9704a7d49f0990152c84c172630da679Jan Brands#endif /* #ifdef DESFIRE_FMT_EV1 */ 482eff5a3da9704a7d49f0990152c84c172630da679Jan Brands { 483eff5a3da9704a7d49f0990152c84c172630da679Jan Brands /* Lc: Length of wrapped data */ 484eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[i] = PH_FRINFC_DESF_NATIVE_CRCCNDEF_WRDT_LEN; 485eff5a3da9704a7d49f0990152c84c172630da679Jan Brands i++; 4865d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 487eff5a3da9704a7d49f0990152c84c172630da679Jan Brands /* set NDEF file id*/ 488eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[i] = PH_FRINFC_DESF_NDEF_FILE_ID; 489eff5a3da9704a7d49f0990152c84c172630da679Jan Brands i++; 490eff5a3da9704a7d49f0990152c84c172630da679Jan Brands } 491eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[i] = PH_FRINFC_DESF_COMM_SETTINGS; 492eff5a3da9704a7d49f0990152c84c172630da679Jan Brands i++; 493eff5a3da9704a7d49f0990152c84c172630da679Jan Brands 494eff5a3da9704a7d49f0990152c84c172630da679Jan Brands /* set the r/w access rights.Once Authentication part is fixed, 495eff5a3da9704a7d49f0990152c84c172630da679Jan Brands we will use the constants*/ 496eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[i] = 0xEE; 497eff5a3da9704a7d49f0990152c84c172630da679Jan Brands i++; 498eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[i] = 0xEE; 499eff5a3da9704a7d49f0990152c84c172630da679Jan Brands i++; 500eff5a3da9704a7d49f0990152c84c172630da679Jan Brands 501eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[i]= (uint8_t)NdefSmtCrdFmt->AddInfo.Type4Info.CardSize; 502eff5a3da9704a7d49f0990152c84c172630da679Jan Brands i++; 503eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[i]= (uint8_t) 504eff5a3da9704a7d49f0990152c84c172630da679Jan Brands (NdefSmtCrdFmt->AddInfo.Type4Info.CardSize >> 8); 505eff5a3da9704a7d49f0990152c84c172630da679Jan Brands i++; 506eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[i]= (uint8_t) 507eff5a3da9704a7d49f0990152c84c172630da679Jan Brands (NdefSmtCrdFmt->AddInfo.Type4Info.CardSize >> 16); 508eff5a3da9704a7d49f0990152c84c172630da679Jan Brands i++; 509eff5a3da9704a7d49f0990152c84c172630da679Jan Brands 510eff5a3da9704a7d49f0990152c84c172630da679Jan Brands /* Le bytes*/ 511eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[i] = PH_FRINFC_DESF_NATIVE_LE_BYTE; 512eff5a3da9704a7d49f0990152c84c172630da679Jan Brands i++; 5135d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 514eff5a3da9704a7d49f0990152c84c172630da679Jan Brands#ifdef DESFIRE_FMT_EV1 515eff5a3da9704a7d49f0990152c84c172630da679Jan Brands if (DESFIRE_CARD_TYPE_EV1 == NdefSmtCrdFmt->CardType) 516eff5a3da9704a7d49f0990152c84c172630da679Jan Brands { 517eff5a3da9704a7d49f0990152c84c172630da679Jan Brands /* set the length of the buffer*/ 518eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendLength = i; 519eff5a3da9704a7d49f0990152c84c172630da679Jan Brands } 520eff5a3da9704a7d49f0990152c84c172630da679Jan Brands else 521eff5a3da9704a7d49f0990152c84c172630da679Jan Brands#endif /* #ifdef DESFIRE_FMT_EV1 */ 522eff5a3da9704a7d49f0990152c84c172630da679Jan Brands { 523eff5a3da9704a7d49f0990152c84c172630da679Jan Brands /* set the length of the buffer*/ 524eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendLength = PH_FRINFC_DESF_CREATECCNDEF_CMD_SNLEN; 525eff5a3da9704a7d49f0990152c84c172630da679Jan Brands } 526eff5a3da9704a7d49f0990152c84c172630da679Jan Brands break; 527eff5a3da9704a7d49f0990152c84c172630da679Jan Brands } 5285d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 529eff5a3da9704a7d49f0990152c84c172630da679Jan Brands case PH_FRINFC_DESF_WRITECC_CMD: 530eff5a3da9704a7d49f0990152c84c172630da679Jan Brands { 531eff5a3da9704a7d49f0990152c84c172630da679Jan Brands /* Instruction Cmd code */ 532eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[CmdByte] = PH_FRINFC_DESF_WRITE_CMD; 5335d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 534eff5a3da9704a7d49f0990152c84c172630da679Jan Brands /* Lc: Length of wrapped data */ 535eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[i] = PH_FRINFC_DESF_NATIVE_WRCC_WRDT_LEN; 536eff5a3da9704a7d49f0990152c84c172630da679Jan Brands i++; 5375d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 538eff5a3da9704a7d49f0990152c84c172630da679Jan Brands#ifdef DESFIRE_FMT_EV1 539eff5a3da9704a7d49f0990152c84c172630da679Jan Brands if (DESFIRE_CARD_TYPE_EV1 == NdefSmtCrdFmt->CardType) 540eff5a3da9704a7d49f0990152c84c172630da679Jan Brands { 541eff5a3da9704a7d49f0990152c84c172630da679Jan Brands /* set the file id*/ 542eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[i] = DESFIRE_EV1_CC_FILE_ID; 543eff5a3da9704a7d49f0990152c84c172630da679Jan Brands i++; 544eff5a3da9704a7d49f0990152c84c172630da679Jan Brands } 545eff5a3da9704a7d49f0990152c84c172630da679Jan Brands else 546eff5a3da9704a7d49f0990152c84c172630da679Jan Brands#endif /* #ifdef DESFIRE_FMT_EV1 */ 547eff5a3da9704a7d49f0990152c84c172630da679Jan Brands { 548eff5a3da9704a7d49f0990152c84c172630da679Jan Brands /* set the file id*/ 549eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[i] = PH_FRINFC_DESF_CC_FILE_ID; 550eff5a3da9704a7d49f0990152c84c172630da679Jan Brands i++; 551eff5a3da9704a7d49f0990152c84c172630da679Jan Brands } 5525d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 553eff5a3da9704a7d49f0990152c84c172630da679Jan Brands /* set the offset to zero*/ 554eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[i] = 0x00; 555eff5a3da9704a7d49f0990152c84c172630da679Jan Brands i++; 556eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[i] = 0x00; 557eff5a3da9704a7d49f0990152c84c172630da679Jan Brands i++; 558eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[i] = 0x00; 559eff5a3da9704a7d49f0990152c84c172630da679Jan Brands i++; 560eff5a3da9704a7d49f0990152c84c172630da679Jan Brands 561eff5a3da9704a7d49f0990152c84c172630da679Jan Brands /* Set the length of data available to write*/ 562eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[i] = PH_FRINFC_DESF_CC_FILE_SIZE; 563eff5a3da9704a7d49f0990152c84c172630da679Jan Brands i++; 564eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[i] = 0x00; 565eff5a3da9704a7d49f0990152c84c172630da679Jan Brands i++; 566eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[i] = 0x00; 567eff5a3da9704a7d49f0990152c84c172630da679Jan Brands i++; 568eff5a3da9704a7d49f0990152c84c172630da679Jan Brands#ifdef DESFIRE_FMT_EV1 569eff5a3da9704a7d49f0990152c84c172630da679Jan Brands if (DESFIRE_CARD_TYPE_EV1 == NdefSmtCrdFmt->CardType) 570eff5a3da9704a7d49f0990152c84c172630da679Jan Brands { 571eff5a3da9704a7d49f0990152c84c172630da679Jan Brands CCFileBytes[2] = (uint8_t)DESFIRE_EV1_MAPPING_VERSION; 572eff5a3da9704a7d49f0990152c84c172630da679Jan Brands 573eff5a3da9704a7d49f0990152c84c172630da679Jan Brands /* Length value is updated in the CC as per the card size received from 574eff5a3da9704a7d49f0990152c84c172630da679Jan Brands the GetVersion command */ 575eff5a3da9704a7d49f0990152c84c172630da679Jan Brands CCFileBytes[11] = (uint8_t) 576eff5a3da9704a7d49f0990152c84c172630da679Jan Brands (NdefSmtCrdFmt->AddInfo.Type4Info.CardSize >> 8); 577eff5a3da9704a7d49f0990152c84c172630da679Jan Brands CCFileBytes[12] = (uint8_t) 578eff5a3da9704a7d49f0990152c84c172630da679Jan Brands (NdefSmtCrdFmt->AddInfo.Type4Info.CardSize); 579eff5a3da9704a7d49f0990152c84c172630da679Jan Brands } 580eff5a3da9704a7d49f0990152c84c172630da679Jan Brands#endif /* #ifdef DESFIRE_FMT_EV1 */ 581eff5a3da9704a7d49f0990152c84c172630da679Jan Brands /*set the data to be written to the CC file*/ 582eff5a3da9704a7d49f0990152c84c172630da679Jan Brands (void)memcpy ((void *)&NdefSmtCrdFmt->SendRecvBuf[i], 583eff5a3da9704a7d49f0990152c84c172630da679Jan Brands (void *)CCFileBytes, sizeof (CCFileBytes)); 584eff5a3da9704a7d49f0990152c84c172630da679Jan Brands#ifdef DESFIRE_FMT_EV1 585eff5a3da9704a7d49f0990152c84c172630da679Jan Brands#else 586eff5a3da9704a7d49f0990152c84c172630da679Jan Brands i++; 587eff5a3da9704a7d49f0990152c84c172630da679Jan Brands#endif /* #ifdef DESFIRE_FMT_EV1 */ 5885d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 589eff5a3da9704a7d49f0990152c84c172630da679Jan Brands i = (uint16_t)(i + sizeof (CCFileBytes)); 5905d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 591eff5a3da9704a7d49f0990152c84c172630da679Jan Brands /* Le bytes*/ 592eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[i] = PH_FRINFC_DESF_NATIVE_LE_BYTE; 593eff5a3da9704a7d49f0990152c84c172630da679Jan Brands i++; 594eff5a3da9704a7d49f0990152c84c172630da679Jan Brands#ifdef DESFIRE_FMT_EV1 595eff5a3da9704a7d49f0990152c84c172630da679Jan Brands if (DESFIRE_CARD_TYPE_EV1 == NdefSmtCrdFmt->CardType) 596eff5a3da9704a7d49f0990152c84c172630da679Jan Brands { 597eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendLength = i; 598eff5a3da9704a7d49f0990152c84c172630da679Jan Brands } 599eff5a3da9704a7d49f0990152c84c172630da679Jan Brands else 600eff5a3da9704a7d49f0990152c84c172630da679Jan Brands#endif /* #ifdef DESFIRE_FMT_EV1 */ 601eff5a3da9704a7d49f0990152c84c172630da679Jan Brands { 602eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendLength = PH_FRINFC_DESF_WRITECC_CMD_SNLEN; 603eff5a3da9704a7d49f0990152c84c172630da679Jan Brands } 604eff5a3da9704a7d49f0990152c84c172630da679Jan Brands break; 605eff5a3da9704a7d49f0990152c84c172630da679Jan Brands } 606eff5a3da9704a7d49f0990152c84c172630da679Jan Brands 607eff5a3da9704a7d49f0990152c84c172630da679Jan Brands case PH_FRINFC_DESF_WRITENDEF_CMD: 608eff5a3da9704a7d49f0990152c84c172630da679Jan Brands { 609eff5a3da9704a7d49f0990152c84c172630da679Jan Brands /* Instruction Cmd code */ 610eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[CmdByte] = PH_FRINFC_DESF_WRITE_CMD; 611eff5a3da9704a7d49f0990152c84c172630da679Jan Brands 612eff5a3da9704a7d49f0990152c84c172630da679Jan Brands /* Lc: Length of wrapped data */ 613eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[i] = PH_FRINFC_DESF_NATIVE_WRNDEF_WRDT_LEN; 614eff5a3da9704a7d49f0990152c84c172630da679Jan Brands i++; 615eff5a3da9704a7d49f0990152c84c172630da679Jan Brands 616eff5a3da9704a7d49f0990152c84c172630da679Jan Brands#ifdef DESFIRE_FMT_EV1 617eff5a3da9704a7d49f0990152c84c172630da679Jan Brands if (DESFIRE_CARD_TYPE_EV1 == NdefSmtCrdFmt->CardType) 618eff5a3da9704a7d49f0990152c84c172630da679Jan Brands { 619eff5a3da9704a7d49f0990152c84c172630da679Jan Brands /* set the file id*/ 620eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[i] = DESFIRE_EV1_NDEF_FILE_ID; 621eff5a3da9704a7d49f0990152c84c172630da679Jan Brands i++; 622eff5a3da9704a7d49f0990152c84c172630da679Jan Brands } 623eff5a3da9704a7d49f0990152c84c172630da679Jan Brands else 624eff5a3da9704a7d49f0990152c84c172630da679Jan Brands#endif /* #ifdef DESFIRE_FMT_EV1 */ 625eff5a3da9704a7d49f0990152c84c172630da679Jan Brands { 626eff5a3da9704a7d49f0990152c84c172630da679Jan Brands /* set the file id*/ 627eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[i] = PH_FRINFC_DESF_NDEF_FILE_ID; 628eff5a3da9704a7d49f0990152c84c172630da679Jan Brands i++; 629eff5a3da9704a7d49f0990152c84c172630da679Jan Brands } 630eff5a3da9704a7d49f0990152c84c172630da679Jan Brands 631eff5a3da9704a7d49f0990152c84c172630da679Jan Brands /* set the offset to zero*/ 632eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[i] = 0x00; 633eff5a3da9704a7d49f0990152c84c172630da679Jan Brands i++; 634eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[i] = 0x00; 635eff5a3da9704a7d49f0990152c84c172630da679Jan Brands i++; 636eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[i] = 0x00; 637eff5a3da9704a7d49f0990152c84c172630da679Jan Brands i++; 638eff5a3da9704a7d49f0990152c84c172630da679Jan Brands 639eff5a3da9704a7d49f0990152c84c172630da679Jan Brands /* Set the length of data available to write*/ 640eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[i] = 0x02; 641eff5a3da9704a7d49f0990152c84c172630da679Jan Brands i++; 642eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[i] = 0x00; 643eff5a3da9704a7d49f0990152c84c172630da679Jan Brands i++; 644eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[i] = 0x00; 645eff5a3da9704a7d49f0990152c84c172630da679Jan Brands i++; 646eff5a3da9704a7d49f0990152c84c172630da679Jan Brands 647eff5a3da9704a7d49f0990152c84c172630da679Jan Brands /*set the data to be written to the CC file*/ 648eff5a3da9704a7d49f0990152c84c172630da679Jan Brands 649eff5a3da9704a7d49f0990152c84c172630da679Jan Brands (void)memcpy(&NdefSmtCrdFmt->SendRecvBuf[i], 650eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefFileBytes, sizeof (NdefFileBytes)); 651eff5a3da9704a7d49f0990152c84c172630da679Jan Brands i = (uint16_t)(i + sizeof (NdefFileBytes)); 652eff5a3da9704a7d49f0990152c84c172630da679Jan Brands 653eff5a3da9704a7d49f0990152c84c172630da679Jan Brands /* Le bytes*/ 654eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[i] = PH_FRINFC_DESF_NATIVE_LE_BYTE; 655eff5a3da9704a7d49f0990152c84c172630da679Jan Brands i++; 656eff5a3da9704a7d49f0990152c84c172630da679Jan Brands 657eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendLength = PH_FRINFC_DESF_WRITENDEF_CMD_SNLEN; 658eff5a3da9704a7d49f0990152c84c172630da679Jan Brands break; 659eff5a3da9704a7d49f0990152c84c172630da679Jan Brands } 660eff5a3da9704a7d49f0990152c84c172630da679Jan Brands 661eff5a3da9704a7d49f0990152c84c172630da679Jan Brands default: 662eff5a3da9704a7d49f0990152c84c172630da679Jan Brands { 663eff5a3da9704a7d49f0990152c84c172630da679Jan Brands break; 664eff5a3da9704a7d49f0990152c84c172630da679Jan Brands } 6655d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 6665d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly} 6675d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 6685d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pellystatic NFCSTATUS phFriNfc_Desf_HGetHWVersion(phFriNfc_sNdefSmtCrdFmt_t *NdefSmtCrdFmt) 6695d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{ 6705d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS status = NFCSTATUS_SUCCESS; 6715d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifdef PH_HAL4_ENABLE 6725d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* Removed uint8_t i=0; */ 6735d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#else 6745d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint8_t i=0; 6755d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif /* #ifdef PH_HAL4_ENABLE */ 6765d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 6775d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /*set the state*/ 6785d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NdefSmtCrdFmt->State = PH_FRINFC_DESF_STATE_GET_HW_VERSION; 6795d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 6805d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* Helper routine to wrap the native DESFire cmds*/ 6815d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phFriNfc_Desf_HWrapISONativeCmds(NdefSmtCrdFmt,PH_FRINFC_DESF_GET_HW_VERSION_CMD); 6825d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 6835d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = phFriNfc_Desf_HSendTransCmd(NdefSmtCrdFmt); 6845d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 6855d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly return ( status); 6865d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly} 6875d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 6885d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pellystatic NFCSTATUS phFriNfc_Desf_HGetSWVersion(phFriNfc_sNdefSmtCrdFmt_t *NdefSmtCrdFmt) 6895d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{ 6905d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 6915d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS status = PHNFCSTVAL(CID_FRI_NFC_NDEF_SMTCRDFMT, 6925d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS_FORMAT_ERROR); 6935d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 6945d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if( ( NdefSmtCrdFmt->SendRecvBuf[*(NdefSmtCrdFmt->SendRecvLength)- 1] == 6955d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly PH_FRINFC_DESF_PICC_ADDI_FRAME_RESP) ) 6965d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 6975d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /*set the state*/ 6985d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NdefSmtCrdFmt->State = PH_FRINFC_DESF_STATE_GET_SW_VERSION; 6995d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 7005d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* Helper routine to wrap the native DESFire cmds*/ 7015d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phFriNfc_Desf_HWrapISONativeCmds(NdefSmtCrdFmt,PH_FRINFC_DESF_GET_SW_VERSION_CMD); 7025d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 7035d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = phFriNfc_Desf_HSendTransCmd(NdefSmtCrdFmt); 7045d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 7055d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly return status; 7065d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly} 7075d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 7085d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pellystatic NFCSTATUS phFriNfc_Desf_HUpdateVersionDetails(phFriNfc_sNdefSmtCrdFmt_t *NdefSmtCrdFmt) 7095d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{ 7105d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS status = PHNFCSTVAL(CID_NFC_NONE, 711eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NFCSTATUS_SUCCESS); 7125d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 7135d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if( ( NdefSmtCrdFmt->SendRecvBuf[*(NdefSmtCrdFmt->SendRecvLength)- 7145d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly PH_SMTCRDFMT_DESF_VAL1] == PH_FRINFC_DESF_PICC_ADDI_FRAME_RESP ) ) 7155d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 7165d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NdefSmtCrdFmt->AddInfo.Type4Info.MajorVersion = NdefSmtCrdFmt->SendRecvBuf[PH_SMTCRDFMT_DESF_VAL3]; 7175d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NdefSmtCrdFmt->AddInfo.Type4Info.MinorVersion = NdefSmtCrdFmt->SendRecvBuf[PH_SMTCRDFMT_DESF_VAL4]; 71880ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen 71980ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen if ((PH_FRINFC_DESF4_MAJOR_VERSION == NdefSmtCrdFmt->AddInfo.Type4Info.MajorVersion) && 72080ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen (PH_FRINFC_DESF4_MINOR_VERSION == NdefSmtCrdFmt->AddInfo.Type4Info.MinorVersion)) 7215d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 7225d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* card size of DESFire4 type */ 7235d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NdefSmtCrdFmt->AddInfo.Type4Info.CardSize = PH_FRINFC_DESF4_MEMORY_SIZE; 7245d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 7255d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 726eff5a3da9704a7d49f0990152c84c172630da679Jan Brands#ifdef DESFIRE_FMT_EV1 727eff5a3da9704a7d49f0990152c84c172630da679Jan Brands else if ((DESFIRE_EV1_SW_MAJOR_VERSION == NdefSmtCrdFmt->AddInfo.Type4Info.MajorVersion) && 728eff5a3da9704a7d49f0990152c84c172630da679Jan Brands (DESFIRE_EV1_SW_MINOR_VERSION == NdefSmtCrdFmt->AddInfo.Type4Info.MinorVersion)) 729eff5a3da9704a7d49f0990152c84c172630da679Jan Brands { 730eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->CardType = DESFIRE_CARD_TYPE_EV1; 731eff5a3da9704a7d49f0990152c84c172630da679Jan Brands } 732eff5a3da9704a7d49f0990152c84c172630da679Jan Brands#endif /* #ifdef DESFIRE_FMT_EV1 */ 7335d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 7345d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 7355d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly // need to handle the Desfire8 type cards 7365d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly // need to use get free memory 737eff5a3da9704a7d49f0990152c84c172630da679Jan Brands status = PHNFCSTVAL (CID_FRI_NFC_NDEF_SMTCRDFMT, 738eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NFCSTATUS_INVALID_REMOTE_DEVICE); 7395d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 7405d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 741eff5a3da9704a7d49f0990152c84c172630da679Jan Brands#ifdef DESFIRE_FMT_EV1 742eff5a3da9704a7d49f0990152c84c172630da679Jan Brands if (DESFIRE_CARD_TYPE_EV1 == NdefSmtCrdFmt->CardType) 743eff5a3da9704a7d49f0990152c84c172630da679Jan Brands { 744eff5a3da9704a7d49f0990152c84c172630da679Jan Brands switch (NdefSmtCrdFmt->SendRecvBuf[5]) 745eff5a3da9704a7d49f0990152c84c172630da679Jan Brands { 746eff5a3da9704a7d49f0990152c84c172630da679Jan Brands case DESFIRE_TAG_SIZE_IDENTIFIER_2K: 747eff5a3da9704a7d49f0990152c84c172630da679Jan Brands { 748eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->AddInfo.Type4Info.CardSize = DESFIRE_2K_CARD; 749eff5a3da9704a7d49f0990152c84c172630da679Jan Brands break; 750eff5a3da9704a7d49f0990152c84c172630da679Jan Brands } 751eff5a3da9704a7d49f0990152c84c172630da679Jan Brands 752eff5a3da9704a7d49f0990152c84c172630da679Jan Brands case DESFIRE_TAG_SIZE_IDENTIFIER_4K: 753eff5a3da9704a7d49f0990152c84c172630da679Jan Brands { 754eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->AddInfo.Type4Info.CardSize = DESFIRE_4K_CARD; 755eff5a3da9704a7d49f0990152c84c172630da679Jan Brands break; 756eff5a3da9704a7d49f0990152c84c172630da679Jan Brands } 757eff5a3da9704a7d49f0990152c84c172630da679Jan Brands 758eff5a3da9704a7d49f0990152c84c172630da679Jan Brands case DESFIRE_TAG_SIZE_IDENTIFIER_8K: 759eff5a3da9704a7d49f0990152c84c172630da679Jan Brands { 760eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->AddInfo.Type4Info.CardSize = DESFIRE_8K_CARD; 761eff5a3da9704a7d49f0990152c84c172630da679Jan Brands break; 762eff5a3da9704a7d49f0990152c84c172630da679Jan Brands } 763eff5a3da9704a7d49f0990152c84c172630da679Jan Brands 764eff5a3da9704a7d49f0990152c84c172630da679Jan Brands default: 765eff5a3da9704a7d49f0990152c84c172630da679Jan Brands { 766eff5a3da9704a7d49f0990152c84c172630da679Jan Brands status = PHNFCSTVAL (CID_FRI_NFC_NDEF_SMTCRDFMT, 767eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NFCSTATUS_INVALID_REMOTE_DEVICE); 768eff5a3da9704a7d49f0990152c84c172630da679Jan Brands break; 769eff5a3da9704a7d49f0990152c84c172630da679Jan Brands } 770eff5a3da9704a7d49f0990152c84c172630da679Jan Brands } 771eff5a3da9704a7d49f0990152c84c172630da679Jan Brands } 772eff5a3da9704a7d49f0990152c84c172630da679Jan Brands#endif /* #ifdef DESFIRE_FMT_EV1 */ 7735d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 7745d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 775eff5a3da9704a7d49f0990152c84c172630da679Jan Brands return status; 7765d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly} 7775d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 7785d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pellystatic NFCSTATUS phFriNfc_Desf_HGetUIDDetails(phFriNfc_sNdefSmtCrdFmt_t * NdefSmtCrdFmt) 7795d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{ 7805d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 7815d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS status = NFCSTATUS_PENDING; 7825d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if( ( NdefSmtCrdFmt->SendRecvBuf[*(NdefSmtCrdFmt->SendRecvLength)- 7835d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly PH_SMTCRDFMT_DESF_VAL1] == PH_FRINFC_DESF_PICC_ADDI_FRAME_RESP) ) 7845d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 7855d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /*set the state*/ 7865d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NdefSmtCrdFmt->State = PH_FRINFC_DESF_STATE_GET_UID; 7875d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 7885d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* Helper routine to wrap the native desfire cmds*/ 7895d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phFriNfc_Desf_HWrapISONativeCmds(NdefSmtCrdFmt,PH_FRINFC_DESF_GET_UID_CMD); 7905d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 7915d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = phFriNfc_Desf_HSendTransCmd(NdefSmtCrdFmt); 7925d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 7935d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 7945d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly return status; 7955d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 7965d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly} 7975d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 7985d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 7995d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pellystatic NFCSTATUS phFriNfc_Desf_HCreateApp(phFriNfc_sNdefSmtCrdFmt_t *NdefSmtCrdFmt) 8005d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{ 8015d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS status = PHNFCSTVAL(CID_FRI_NFC_NDEF_SMTCRDFMT, 8025d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS_FORMAT_ERROR); 8035d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 8045d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if ( (NdefSmtCrdFmt->SendRecvBuf[PH_SMTCRDFMT_DESF_VAL14] == PH_FRINFC_DESF_NAT_WRAP_FIRST_RESP_BYTE) 8055d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly && (NdefSmtCrdFmt->SendRecvBuf[PH_SMTCRDFMT_DESF_VAL15] == PH_FRINFC_DESF_NAT_WRAP_SEC_RESP_BYTE )) 8065d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 8075d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /*set the state*/ 8085d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NdefSmtCrdFmt->State = PH_FRINFC_DESF_STATE_CREATE_AID; 8095d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 8105d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* Helper routine to wrap the native DESFire cmds*/ 8115d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phFriNfc_Desf_HWrapISONativeCmds(NdefSmtCrdFmt,PH_FRINFC_DESF_CREATEAPP_CMD); 8125d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 8135d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = phFriNfc_Desf_HSendTransCmd(NdefSmtCrdFmt); 8145d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 8155d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly return ( status); 8165d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly} 8175d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 8185d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 8195d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pellystatic NFCSTATUS phFriNfc_Desf_HSelectApp(phFriNfc_sNdefSmtCrdFmt_t *NdefSmtCrdFmt) 8205d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{ 8215d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 8225d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS status = PHNFCSTVAL(CID_FRI_NFC_NDEF_SMTCRDFMT, 8235d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS_FORMAT_ERROR); 8245d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 8255d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* check for the response of previous operation, before 8265d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly issuing the next command*/ 8275d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 8285d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if ( (NdefSmtCrdFmt->SendRecvBuf[PH_SMTCRDFMT_DESF_VAL0] == PH_FRINFC_DESF_NAT_WRAP_FIRST_RESP_BYTE) && 8295d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (NdefSmtCrdFmt->SendRecvBuf[PH_SMTCRDFMT_DESF_VAL1] == PH_FRINFC_DESF_NAT_WRAP_SEC_RESP_BYTE )) 8305d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 8315d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /*set the state*/ 8325d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NdefSmtCrdFmt->State = PH_FRINFC_DESF_STATE_SELECT_APP; 8335d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 8345d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* Helper routine to wrap the native DESFire cmds*/ 8355d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phFriNfc_Desf_HWrapISONativeCmds(NdefSmtCrdFmt,PH_FRINFC_DESF_SELECTAPP_CMD); 8365d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 8375d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = phFriNfc_Desf_HSendTransCmd(NdefSmtCrdFmt); 8385d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 8395d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly return ( status); 8405d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 8415d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly} 8425d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 8435d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pellystatic NFCSTATUS phFriNfc_Desf_HCreatCCFile(phFriNfc_sNdefSmtCrdFmt_t *NdefSmtCrdFmt) 8445d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{ 8455d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS status = PHNFCSTVAL(CID_FRI_NFC_NDEF_SMTCRDFMT, 8465d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS_FORMAT_ERROR); 8475d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 8485d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if ( (NdefSmtCrdFmt->SendRecvBuf[PH_SMTCRDFMT_DESF_VAL0] == PH_FRINFC_DESF_NATIVE_RESP_BYTE1) && 8495d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (NdefSmtCrdFmt->SendRecvBuf[PH_SMTCRDFMT_DESF_VAL1] == PH_FRINFC_DESF_NATIVE_RESP_BYTE2 )) 8505d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 8515d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /*set the state*/ 8525d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NdefSmtCrdFmt->State = PH_FRINFC_DESF_STATE_CREATE_CCFILE; 8535d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 8545d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* Helper routine to wrap the native DESFire cmds*/ 8555d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phFriNfc_Desf_HWrapISONativeCmds(NdefSmtCrdFmt,PH_FRINFC_DESF_CREATECC_CMD); 8565d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 8575d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = phFriNfc_Desf_HSendTransCmd(NdefSmtCrdFmt); 8585d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 8595d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly return ( status); 8605d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly} 8615d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 8625d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pellystatic NFCSTATUS phFriNfc_Desf_HCreatNDEFFile(phFriNfc_sNdefSmtCrdFmt_t *NdefSmtCrdFmt) 8635d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{ 8645d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 8655d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS status = PHNFCSTVAL(CID_FRI_NFC_NDEF_SMTCRDFMT, 8665d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS_FORMAT_ERROR); 8675d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 8685d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if ( (NdefSmtCrdFmt->SendRecvBuf[PH_SMTCRDFMT_DESF_VAL0] == PH_FRINFC_DESF_NATIVE_RESP_BYTE1) && 8695d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (NdefSmtCrdFmt->SendRecvBuf[PH_SMTCRDFMT_DESF_VAL1] == PH_FRINFC_DESF_NATIVE_RESP_BYTE2 )) 8705d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 8715d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /*set the state*/ 8725d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NdefSmtCrdFmt->State = PH_FRINFC_DESF_STATE_CREATE_NDEFFILE; 8735d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 8745d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* Helper routine to wrap the native desfire cmds*/ 8755d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phFriNfc_Desf_HWrapISONativeCmds(NdefSmtCrdFmt,PH_FRINFC_DESF_CREATENDEF_CMD); 8765d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 8775d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = phFriNfc_Desf_HSendTransCmd(NdefSmtCrdFmt); 8785d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 8795d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 8805d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 8815d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly return ( status); 8825d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 8835d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly} 8845d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 8855d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pellystatic NFCSTATUS phFriNfc_Desf_HWrCCBytes(phFriNfc_sNdefSmtCrdFmt_t *NdefSmtCrdFmt) 8865d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{ 8875d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 8885d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS result = PHNFCSTVAL(CID_FRI_NFC_NDEF_SMTCRDFMT, 8895d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS_FORMAT_ERROR); 8905d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if ( (NdefSmtCrdFmt->SendRecvBuf[PH_SMTCRDFMT_DESF_VAL0] == PH_FRINFC_DESF_NATIVE_RESP_BYTE1) && 8915d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (NdefSmtCrdFmt->SendRecvBuf[PH_SMTCRDFMT_DESF_VAL1] == PH_FRINFC_DESF_NATIVE_RESP_BYTE2 )) 8925d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 8935d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 8945d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /*set the state*/ 8955d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NdefSmtCrdFmt->State = PH_FRINFC_DESF_STATE_WRITE_CC_FILE; 8965d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 8975d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* Helper routine to wrap the native DESFire cmds*/ 8985d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phFriNfc_Desf_HWrapISONativeCmds(NdefSmtCrdFmt,PH_FRINFC_DESF_WRITECC_CMD); 8995d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 9005d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly result = phFriNfc_Desf_HSendTransCmd(NdefSmtCrdFmt); 9015d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 9025d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly return (result); 9035d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly} 9045d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 9055d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pellystatic NFCSTATUS phFriNfc_Desf_HWrNDEFData(phFriNfc_sNdefSmtCrdFmt_t *NdefSmtCrdFmt) 9065d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{ 9075d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 9085d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS Result = PHNFCSTVAL(CID_FRI_NFC_NDEF_SMTCRDFMT, 9095d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS_FORMAT_ERROR); 9105d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 9115d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 9125d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if ( (NdefSmtCrdFmt->SendRecvBuf[PH_SMTCRDFMT_DESF_VAL0] == PH_FRINFC_DESF_NATIVE_RESP_BYTE1) && 9135d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (NdefSmtCrdFmt->SendRecvBuf[PH_SMTCRDFMT_DESF_VAL1] == PH_FRINFC_DESF_NATIVE_RESP_BYTE2 )) 9145d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 9155d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /*set the state*/ 9165d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NdefSmtCrdFmt->State = PH_FRINFC_DESF_STATE_WRITE_NDEF_FILE; 9175d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 9185d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* Helper routine to wrap the native DESFire cmds*/ 9195d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phFriNfc_Desf_HWrapISONativeCmds(NdefSmtCrdFmt,PH_FRINFC_DESF_WRITENDEF_CMD); 9205d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 9215d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly Result = phFriNfc_Desf_HSendTransCmd(NdefSmtCrdFmt); 9225d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 9235d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly return (Result); 9245d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly} 9255d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 9265d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pellystatic NFCSTATUS phFriNfc_Desf_HSendTransCmd(phFriNfc_sNdefSmtCrdFmt_t *NdefSmtCrdFmt) 9275d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{ 9285d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 9295d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS status = NFCSTATUS_SUCCESS; 9305d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 9315d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* set the command type*/ 9325d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifdef PH_HAL4_ENABLE 9335d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NdefSmtCrdFmt->Cmd.Iso144434Cmd = phHal_eIso14443_4_Raw; 9345d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#else 9355d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NdefSmtCrdFmt->Cmd.Iso144434Cmd = phHal_eIso14443_4_CmdListTClCmd; 9365d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif /* #ifdef PH_HAL4_ENABLE */ 9375d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 9385d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* set the Additional Info*/ 9395d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NdefSmtCrdFmt->psDepAdditionalInfo.DepFlags.MetaChaining = 0; 9405d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NdefSmtCrdFmt->psDepAdditionalInfo.DepFlags.NADPresent = 0; 9415d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 9425d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /*set the completion routines for the desfire card operations*/ 9435d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NdefSmtCrdFmt->SmtCrdFmtCompletionInfo.CompletionRoutine = phFriNfc_NdefSmtCrd_Process; 9445d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NdefSmtCrdFmt->SmtCrdFmtCompletionInfo.Context = NdefSmtCrdFmt; 9455d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 9465d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* set the receive length */ 9475d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly *NdefSmtCrdFmt->SendRecvLength = PH_FRINFC_SMTCRDFMT_MAX_SEND_RECV_BUF_SIZE; 9485d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 9495d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 9505d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /*Call the Overlapped HAL Transceive function */ 9515d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = phFriNfc_OvrHal_Transceive(NdefSmtCrdFmt->LowerDevice, 9525d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly &NdefSmtCrdFmt->SmtCrdFmtCompletionInfo, 9535d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NdefSmtCrdFmt->psRemoteDevInfo, 9545d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NdefSmtCrdFmt->Cmd, 9555d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly &NdefSmtCrdFmt->psDepAdditionalInfo, 9565d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NdefSmtCrdFmt->SendRecvBuf, 9575d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NdefSmtCrdFmt->SendLength, 9585d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NdefSmtCrdFmt->SendRecvBuf, 9595d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NdefSmtCrdFmt->SendRecvLength); 9605d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 9615d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly return (status); 9625d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 9635d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 9645d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly} 9655d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 9665d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS phFriNfc_Desfire_Format(phFriNfc_sNdefSmtCrdFmt_t *NdefSmtCrdFmt) 9675d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{ 9685d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 9695d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS status = NFCSTATUS_SUCCESS; 970eff5a3da9704a7d49f0990152c84c172630da679Jan Brands#ifdef DESFIRE_FMT_EV1 971eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->CardType = 0; 972eff5a3da9704a7d49f0990152c84c172630da679Jan Brands#endif /* #ifdef DESFIRE_FMT_EV1 */ 9735d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = phFriNfc_Desf_HGetHWVersion(NdefSmtCrdFmt); 9745d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly return (status); 9755d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly} 9765d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 97780ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen#ifdef FRINFC_READONLY_NDEF 97880ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen 97980ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen#if 0 98080ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenenstatic 98180ee29b88ec489e2bbf6ae446692229d36755429Martijn CoenenNFCSTATUS 98280ee29b88ec489e2bbf6ae446692229d36755429Martijn CoenenphFriNfc_Desf_HReadOnlySelectCCFile ( 98380ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen phFriNfc_sNdefSmtCrdFmt_t *NdefSmtCrdFmt) 98480ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen{ 98580ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen NFCSTATUS result = NFCSTATUS_SUCCESS; 98680ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen return result; 98780ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen} 98880ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen#endif /* #if 0 */ 98980ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen 99080ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenenstatic 99180ee29b88ec489e2bbf6ae446692229d36755429Martijn CoenenNFCSTATUS 99280ee29b88ec489e2bbf6ae446692229d36755429Martijn CoenenphFriNfc_Desf_HReadOnlyReadCCFile ( 99380ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen phFriNfc_sNdefSmtCrdFmt_t *NdefSmtCrdFmt) 99480ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen{ 99580ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen NFCSTATUS result = NFCSTATUS_SUCCESS; 99680ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen uint16_t i = 0; 99780ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen 99880ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen if ((PH_FRINFC_DESF_NATIVE_RESP_BYTE1 == 99980ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen NdefSmtCrdFmt->SendRecvBuf[(*NdefSmtCrdFmt->SendRecvLength - 2)]) 100080ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen && (PH_FRINFC_DESF_NATIVE_RESP_BYTE2 == 100180ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen NdefSmtCrdFmt->SendRecvBuf[(*NdefSmtCrdFmt->SendRecvLength - 1)])) 100280ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen { 100380ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen NdefSmtCrdFmt->State = PH_FRINFC_DESF_STATE_RO_READ_CC_FILE; 100480ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen 100580ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen /* Class Byte */ 100680ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen NdefSmtCrdFmt->SendRecvBuf[i] = PH_FRINFC_DESF_NATIVE_CLASS_BYTE; 100780ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen i++; 100880ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen 100980ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen /* let the place to store the cmd byte type, point to next index 101080ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen Instruction Cmd code */ 101180ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen NdefSmtCrdFmt->SendRecvBuf[i] = PH_FRINFC_DESF_READ_DATA_CMD; 101280ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen i++; 101380ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen 101480ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen 101580ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen /* P1/P2 offsets always set to zero */ 101680ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen NdefSmtCrdFmt->SendRecvBuf[i] = PH_FRINFC_DESF_NATIVE_OFFSET_P1; 101780ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen i++; 101880ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen NdefSmtCrdFmt->SendRecvBuf[i] = PH_FRINFC_DESF_NATIVE_OFFSET_P2; 101980ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen i++; 102080ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen 102180ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen /* Lc: Length of wrapped data */ 102280ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen NdefSmtCrdFmt->SendRecvBuf[i] = NATIVE_WRAPPER_READ_DATA_LC_VALUE; 102380ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen i++; 102480ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen 102580ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen#ifdef DESFIRE_FMT_EV1 102680ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen if (DESFIRE_CARD_TYPE_EV1 == NdefSmtCrdFmt->CardType) 102780ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen { 102880ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen /* set the file id*/ 102980ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen NdefSmtCrdFmt->SendRecvBuf[i] = DESFIRE_EV1_CC_FILE_ID; 103080ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen i++; 103180ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen } 103280ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen else 103380ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen#endif /* #ifdef DESFIRE_FMT_EV1 */ 103480ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen { 103580ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen /* set the file id*/ 103680ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen NdefSmtCrdFmt->SendRecvBuf[i] = PH_FRINFC_DESF_CC_FILE_ID; 103780ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen i++; 103880ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen } 103980ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen 104080ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen /* set the offset to zero*/ 104180ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen NdefSmtCrdFmt->SendRecvBuf[i] = 0x00; 104280ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen i++; 104380ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen NdefSmtCrdFmt->SendRecvBuf[i] = 0x00; 104480ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen i++; 104580ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen NdefSmtCrdFmt->SendRecvBuf[i] = 0x00; 104680ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen i++; 104780ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen 104880ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen /* Set the length of data available to read */ 104980ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen NdefSmtCrdFmt->SendRecvBuf[i] = PH_FRINFC_DESF_CC_FILE_SIZE; 105080ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen i++; 105180ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen NdefSmtCrdFmt->SendRecvBuf[i] = 0x00; 105280ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen i++; 105380ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen NdefSmtCrdFmt->SendRecvBuf[i] = 0x00; 105480ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen i++; 105580ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen 105680ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen /* Le Value is set 0 */ 105780ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen NdefSmtCrdFmt->SendRecvBuf[i] = PH_FRINFC_DESF_NATIVE_LE_BYTE; 105880ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen i++; 105980ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen 106080ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen NdefSmtCrdFmt->SendLength = i; 106180ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen 106280ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen result = phFriNfc_Desf_HSendTransCmd (NdefSmtCrdFmt); 106380ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen } 106480ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen else 106580ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen { 106680ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen result = PHNFCSTVAL(CID_FRI_NFC_NDEF_SMTCRDFMT, 106780ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen NFCSTATUS_FORMAT_ERROR); 106880ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen } 106980ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen 107080ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen return result; 107180ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen} 107280ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen 107380ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenenstatic 107480ee29b88ec489e2bbf6ae446692229d36755429Martijn CoenenNFCSTATUS 107580ee29b88ec489e2bbf6ae446692229d36755429Martijn CoenenphFriNfc_Desf_HReadOnlyWriteCCFile ( 107680ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen phFriNfc_sNdefSmtCrdFmt_t *NdefSmtCrdFmt) 107780ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen{ 107880ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen NFCSTATUS result = NFCSTATUS_SUCCESS; 107980ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen uint8_t read_cc_btyes[CC_BYTES_SIZE] = {0}; 108080ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen uint16_t i = 0; 108180ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen 108280ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen if ((PH_FRINFC_DESF_NATIVE_RESP_BYTE1 == 108380ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen NdefSmtCrdFmt->SendRecvBuf[(*NdefSmtCrdFmt->SendRecvLength - 2)]) 108480ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen && (PH_FRINFC_DESF_NATIVE_RESP_BYTE2 == 108580ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen NdefSmtCrdFmt->SendRecvBuf[(*NdefSmtCrdFmt->SendRecvLength - 1)])) 108680ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen { 108780ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen NdefSmtCrdFmt->State = PH_FRINFC_DESF_STATE_RO_UPDATE_CC_FILE; 108880ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen 108980ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen memcpy ((void *)read_cc_btyes, (void *)NdefSmtCrdFmt->SendRecvBuf, 109080ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen sizeof (read_cc_btyes)); 109180ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen read_cc_btyes[(sizeof (read_cc_btyes) - 1)] = READ_ONLY_NDEF_DESFIRE; 109280ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen 109380ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen /* Class Byte */ 109480ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen NdefSmtCrdFmt->SendRecvBuf[i] = PH_FRINFC_DESF_NATIVE_CLASS_BYTE; 109580ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen i++; 109680ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen 109780ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen /* let the place to store the cmd byte type, point to next index 109880ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen Instruction Cmd code */ 109980ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen NdefSmtCrdFmt->SendRecvBuf[i] = PH_FRINFC_DESF_WRITE_CMD; 110080ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen i++; 110180ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen 110280ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen 110380ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen /* P1/P2 offsets always set to zero */ 110480ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen NdefSmtCrdFmt->SendRecvBuf[i] = PH_FRINFC_DESF_NATIVE_OFFSET_P1; 110580ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen i++; 110680ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen NdefSmtCrdFmt->SendRecvBuf[i] = PH_FRINFC_DESF_NATIVE_OFFSET_P2; 110780ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen i++; 110880ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen 110980ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen /* Lc: Length of wrapped data */ 111080ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen NdefSmtCrdFmt->SendRecvBuf[i] = PH_FRINFC_DESF_NATIVE_WRCC_WRDT_LEN; 111180ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen i++; 111280ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen 111380ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen#ifdef DESFIRE_FMT_EV1 111480ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen if (DESFIRE_CARD_TYPE_EV1 == NdefSmtCrdFmt->CardType) 111580ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen { 111680ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen /* set the file id*/ 111780ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen NdefSmtCrdFmt->SendRecvBuf[i] = DESFIRE_EV1_CC_FILE_ID; 111880ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen i++; 111980ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen } 112080ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen else 112180ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen#endif /* #ifdef DESFIRE_FMT_EV1 */ 112280ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen { 112380ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen /* set the file id*/ 112480ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen NdefSmtCrdFmt->SendRecvBuf[i] = PH_FRINFC_DESF_CC_FILE_ID; 112580ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen i++; 112680ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen } 112780ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen 112880ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen /* set the offset to zero*/ 112980ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen NdefSmtCrdFmt->SendRecvBuf[i] = 0x00; 113080ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen i++; 113180ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen NdefSmtCrdFmt->SendRecvBuf[i] = 0x00; 113280ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen i++; 113380ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen NdefSmtCrdFmt->SendRecvBuf[i] = 0x00; 113480ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen i++; 113580ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen 113680ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen /* Set the length of data available to write*/ 113780ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen NdefSmtCrdFmt->SendRecvBuf[i] = PH_FRINFC_DESF_CC_FILE_SIZE; 113880ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen i++; 113980ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen NdefSmtCrdFmt->SendRecvBuf[i] = 0x00; 114080ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen i++; 114180ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen NdefSmtCrdFmt->SendRecvBuf[i] = 0x00; 114280ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen i++; 114380ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen 114480ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen /*set the data to be written to the CC file*/ 114580ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen (void)memcpy ((void *)&NdefSmtCrdFmt->SendRecvBuf[i], 114680ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen (void *)read_cc_btyes, sizeof (read_cc_btyes)); 114780ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen#ifdef DESFIRE_FMT_EV1 114880ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen#else 114980ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen i++; 115080ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen#endif /* #ifdef DESFIRE_FMT_EV1 */ 115180ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen 115280ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen i = (uint16_t)(i + sizeof (read_cc_btyes)); 115380ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen 115480ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen /* Le bytes*/ 115580ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen NdefSmtCrdFmt->SendRecvBuf[i] = PH_FRINFC_DESF_NATIVE_LE_BYTE; 115680ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen i++; 115780ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen#ifdef DESFIRE_FMT_EV1 115880ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen if (DESFIRE_CARD_TYPE_EV1 == NdefSmtCrdFmt->CardType) 115980ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen { 116080ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen NdefSmtCrdFmt->SendLength = i; 116180ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen } 116280ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen else 116380ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen#endif /* #ifdef DESFIRE_FMT_EV1 */ 116480ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen { 116580ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen NdefSmtCrdFmt->SendLength = PH_FRINFC_DESF_WRITECC_CMD_SNLEN; 116680ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen } 116780ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen 116880ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen result = phFriNfc_Desf_HSendTransCmd (NdefSmtCrdFmt); 116980ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen } 117080ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen else 117180ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen { 117280ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen result = PHNFCSTVAL(CID_FRI_NFC_NDEF_SMTCRDFMT, 117380ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen NFCSTATUS_FORMAT_ERROR); 117480ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen } 117580ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen 117680ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen return result; 117780ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen} 117880ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen 117980ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenenstatic 118080ee29b88ec489e2bbf6ae446692229d36755429Martijn CoenenNFCSTATUS 118180ee29b88ec489e2bbf6ae446692229d36755429Martijn CoenenphFriNfc_Desf_HReadOnlySelectApp ( 118280ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen phFriNfc_sNdefSmtCrdFmt_t *NdefSmtCrdFmt) 118380ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen{ 118480ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen NFCSTATUS result = NFCSTATUS_SUCCESS; 118580ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen 118680ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen NdefSmtCrdFmt->CardType = 0; 118780ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen 118880ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen NdefSmtCrdFmt->State = PH_FRINFC_DESF_STATE_RO_SELECT_APP; 118980ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen 119080ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen /* Helper routine to wrap the native DESFire cmds */ 119180ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen phFriNfc_Desf_HWrapISONativeCmds (NdefSmtCrdFmt, PH_FRINFC_DESF_SELECTAPP_CMD); 119280ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen 119380ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen result = phFriNfc_Desf_HSendTransCmd (NdefSmtCrdFmt); 119480ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen 119580ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen return result; 119680ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen} 119780ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen 119880ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen#ifdef DESFIRE_FMT_EV1 119980ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenenstatic 120080ee29b88ec489e2bbf6ae446692229d36755429Martijn CoenenNFCSTATUS 120180ee29b88ec489e2bbf6ae446692229d36755429Martijn CoenenphFriNfc_Desf_HReadOnlySelectAppEV1 ( 120280ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen phFriNfc_sNdefSmtCrdFmt_t *NdefSmtCrdFmt) 120380ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen{ 120480ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen NFCSTATUS result = NFCSTATUS_SUCCESS; 120580ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen 120680ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen NdefSmtCrdFmt->CardType = DESFIRE_CARD_TYPE_EV1; 120780ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen 120880ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen NdefSmtCrdFmt->State = PH_FRINFC_DESF_STATE_RO_SELECT_APP_EV1; 120980ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen 121080ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen /* Helper routine to wrap the native DESFire cmds */ 121180ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen phFriNfc_Desf_HWrapISONativeCmds (NdefSmtCrdFmt, PH_FRINFC_DESF_SELECTAPP_CMD); 121280ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen 121380ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen result = phFriNfc_Desf_HSendTransCmd (NdefSmtCrdFmt); 121480ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen 121580ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen return result; 121680ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen} 121780ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen#endif /* #ifdef DESFIRE_FMT_EV1 */ 121880ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen 121980ee29b88ec489e2bbf6ae446692229d36755429Martijn CoenenNFCSTATUS 122080ee29b88ec489e2bbf6ae446692229d36755429Martijn CoenenphFriNfc_Desfire_ConvertToReadOnly ( 122180ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen phFriNfc_sNdefSmtCrdFmt_t *NdefSmtCrdFmt) 122280ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen{ 122380ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen NFCSTATUS result = NFCSTATUS_SUCCESS; 122480ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen 122580ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen#ifdef DESFIRE_FMT_EV1 122680ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen result = phFriNfc_Desf_HReadOnlySelectAppEV1 (NdefSmtCrdFmt); 122780ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen#else 122880ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen result = phFriNfc_Desf_HReadOnlySelectApp (NdefSmtCrdFmt); 122980ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen#endif /* #ifdef DESFIRE_FMT_EV1 */ 123080ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen 123180ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen return result; 123280ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen} 123380ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen 123480ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen#endif /* #ifdef FRINFC_READONLY_NDEF */ 123580ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen 12365d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pellyvoid phFriNfc_Desf_Process( void *Context, 12375d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS Status) 12385d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{ 12395d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 12405d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phFriNfc_sNdefSmtCrdFmt_t *NdefSmtCrdFmt; 12415d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 12425d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NdefSmtCrdFmt = (phFriNfc_sNdefSmtCrdFmt_t *)Context; 12435d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 1244eff5a3da9704a7d49f0990152c84c172630da679Jan Brands if((NFCSTATUS_SUCCESS & PHNFCSTBLOWER) == (Status & PHNFCSTBLOWER)) 12455d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 12465d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly switch(NdefSmtCrdFmt->State) 12475d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 124880ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen#ifdef FRINFC_READONLY_NDEF 124980ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen#ifdef DESFIRE_FMT_EV1 125080ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen case PH_FRINFC_DESF_STATE_RO_SELECT_APP_EV1: 125180ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen { 125280ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen if ((PH_FRINFC_DESF_NATIVE_RESP_BYTE1 == 125380ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen NdefSmtCrdFmt->SendRecvBuf[(*NdefSmtCrdFmt->SendRecvLength - 2)]) 125480ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen && (PH_FRINFC_DESF_NATIVE_RESP_BYTE2 == 125580ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen NdefSmtCrdFmt->SendRecvBuf[(*NdefSmtCrdFmt->SendRecvLength - 1)])) 125680ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen { 125780ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen Status = phFriNfc_Desf_HReadOnlyReadCCFile (NdefSmtCrdFmt); 125880ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen } 125980ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen else 126080ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen { 126180ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen Status = phFriNfc_Desf_HReadOnlySelectApp (NdefSmtCrdFmt); 126280ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen } 126380ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen break; 126480ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen } 126580ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen#endif /* #ifdef DESFIRE_FMT_EV1 */ 126680ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen 126780ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen case PH_FRINFC_DESF_STATE_RO_SELECT_APP: 126880ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen { 126980ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen Status = phFriNfc_Desf_HReadOnlyReadCCFile (NdefSmtCrdFmt); 127080ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen break; 127180ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen } 127280ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen 127380ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen case PH_FRINFC_DESF_STATE_RO_READ_CC_FILE: 127480ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen { 127580ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen Status = phFriNfc_Desf_HReadOnlyWriteCCFile (NdefSmtCrdFmt); 127680ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen break; 127780ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen } 127880ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen 127980ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen case PH_FRINFC_DESF_STATE_RO_UPDATE_CC_FILE: 128080ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen { 128180ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen if ((PH_FRINFC_DESF_NATIVE_RESP_BYTE1 == 128280ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen NdefSmtCrdFmt->SendRecvBuf[(*NdefSmtCrdFmt->SendRecvLength - 2)]) 128380ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen && (PH_FRINFC_DESF_NATIVE_RESP_BYTE2 == 128480ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen NdefSmtCrdFmt->SendRecvBuf[(*NdefSmtCrdFmt->SendRecvLength - 1)])) 128580ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen { 128680ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen /* SUCCESSFULL Formatting */ 128780ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen#ifdef DESFIRE_FMT_EV1 128880ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen if (DESFIRE_CARD_TYPE_EV1 == NdefSmtCrdFmt->CardType) 128980ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen { 129080ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen Status = phFriNfc_OvrHal_Reconnect ( 129180ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen NdefSmtCrdFmt->LowerDevice, 129280ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen &NdefSmtCrdFmt->SmtCrdFmtCompletionInfo, 129380ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen NdefSmtCrdFmt->psRemoteDevInfo); 129480ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen 129580ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen if (NFCSTATUS_PENDING == Status) 129680ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen { 129780ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen NdefSmtCrdFmt->State = PH_FRINFC_DESF_STATE_REACTIVATE; 129880ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen } 129980ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen } 130080ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen#endif /* #ifdef DESFIRE_FMT_EV1 */ 130180ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen } 130280ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen else 130380ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen { 130480ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen Status = PHNFCSTVAL(CID_FRI_NFC_NDEF_SMTCRDFMT, 130580ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen NFCSTATUS_FORMAT_ERROR); 130680ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen } 130780ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen break; 130880ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen } 130980ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen 131080ee29b88ec489e2bbf6ae446692229d36755429Martijn Coenen#endif /* #ifdef FRINFC_READONLY_NDEF */ 1311eff5a3da9704a7d49f0990152c84c172630da679Jan Brands case PH_FRINFC_DESF_STATE_GET_HW_VERSION: 1312eff5a3da9704a7d49f0990152c84c172630da679Jan Brands { 1313eff5a3da9704a7d49f0990152c84c172630da679Jan Brands /* Check and store the h/w and s/w specific details. 1314eff5a3da9704a7d49f0990152c84c172630da679Jan Brands Ex: Major/Minor version, memory storage info. */ 13155d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 1316eff5a3da9704a7d49f0990152c84c172630da679Jan Brands Status = phFriNfc_Desf_HGetSWVersion (NdefSmtCrdFmt); 1317eff5a3da9704a7d49f0990152c84c172630da679Jan Brands 1318eff5a3da9704a7d49f0990152c84c172630da679Jan Brands break; 1319eff5a3da9704a7d49f0990152c84c172630da679Jan Brands } 13205d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 1321eff5a3da9704a7d49f0990152c84c172630da679Jan Brands case PH_FRINFC_DESF_STATE_GET_SW_VERSION: 13225d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 1323eff5a3da9704a7d49f0990152c84c172630da679Jan Brands /* Check and store the h/w and s/w specific details. 1324eff5a3da9704a7d49f0990152c84c172630da679Jan Brands Ex: Major/Minor version, memory storage info. */ 1325eff5a3da9704a7d49f0990152c84c172630da679Jan Brands 1326eff5a3da9704a7d49f0990152c84c172630da679Jan Brands Status = phFriNfc_Desf_HUpdateVersionDetails (NdefSmtCrdFmt); 1327eff5a3da9704a7d49f0990152c84c172630da679Jan Brands if ( Status == NFCSTATUS_SUCCESS ) 1328eff5a3da9704a7d49f0990152c84c172630da679Jan Brands { 1329eff5a3da9704a7d49f0990152c84c172630da679Jan Brands Status = phFriNfc_Desf_HGetUIDDetails (NdefSmtCrdFmt); 1330eff5a3da9704a7d49f0990152c84c172630da679Jan Brands } 1331eff5a3da9704a7d49f0990152c84c172630da679Jan Brands break; 13325d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 13335d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 1334eff5a3da9704a7d49f0990152c84c172630da679Jan Brands case PH_FRINFC_DESF_STATE_GET_UID: 1335eff5a3da9704a7d49f0990152c84c172630da679Jan Brands { 1336eff5a3da9704a7d49f0990152c84c172630da679Jan Brands Status = phFriNfc_Desf_HCreateApp (NdefSmtCrdFmt); 1337eff5a3da9704a7d49f0990152c84c172630da679Jan Brands break; 1338eff5a3da9704a7d49f0990152c84c172630da679Jan Brands } 13395d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 1340eff5a3da9704a7d49f0990152c84c172630da679Jan Brands case PH_FRINFC_DESF_STATE_CREATE_AID: 1341eff5a3da9704a7d49f0990152c84c172630da679Jan Brands { 1342eff5a3da9704a7d49f0990152c84c172630da679Jan Brands Status = phFriNfc_Desf_HSelectApp (NdefSmtCrdFmt); 1343eff5a3da9704a7d49f0990152c84c172630da679Jan Brands break; 1344eff5a3da9704a7d49f0990152c84c172630da679Jan Brands } 13455d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 1346eff5a3da9704a7d49f0990152c84c172630da679Jan Brands case PH_FRINFC_DESF_STATE_SELECT_APP: 1347eff5a3da9704a7d49f0990152c84c172630da679Jan Brands { 1348eff5a3da9704a7d49f0990152c84c172630da679Jan Brands Status = phFriNfc_Desf_HCreatCCFile (NdefSmtCrdFmt); 1349eff5a3da9704a7d49f0990152c84c172630da679Jan Brands break; 1350eff5a3da9704a7d49f0990152c84c172630da679Jan Brands } 13515d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 1352eff5a3da9704a7d49f0990152c84c172630da679Jan Brands case PH_FRINFC_DESF_STATE_CREATE_CCFILE: 1353eff5a3da9704a7d49f0990152c84c172630da679Jan Brands { 1354eff5a3da9704a7d49f0990152c84c172630da679Jan Brands Status = phFriNfc_Desf_HCreatNDEFFile (NdefSmtCrdFmt); 1355eff5a3da9704a7d49f0990152c84c172630da679Jan Brands break; 1356eff5a3da9704a7d49f0990152c84c172630da679Jan Brands } 13575d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 1358eff5a3da9704a7d49f0990152c84c172630da679Jan Brands case PH_FRINFC_DESF_STATE_CREATE_NDEFFILE: 1359eff5a3da9704a7d49f0990152c84c172630da679Jan Brands { 1360eff5a3da9704a7d49f0990152c84c172630da679Jan Brands Status = phFriNfc_Desf_HWrCCBytes (NdefSmtCrdFmt); 1361eff5a3da9704a7d49f0990152c84c172630da679Jan Brands break; 1362eff5a3da9704a7d49f0990152c84c172630da679Jan Brands } 13635d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 1364eff5a3da9704a7d49f0990152c84c172630da679Jan Brands case PH_FRINFC_DESF_STATE_WRITE_CC_FILE: 1365eff5a3da9704a7d49f0990152c84c172630da679Jan Brands { 1366eff5a3da9704a7d49f0990152c84c172630da679Jan Brands Status = phFriNfc_Desf_HWrNDEFData (NdefSmtCrdFmt); 1367eff5a3da9704a7d49f0990152c84c172630da679Jan Brands break; 1368eff5a3da9704a7d49f0990152c84c172630da679Jan Brands } 13695d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 1370eff5a3da9704a7d49f0990152c84c172630da679Jan Brands case PH_FRINFC_DESF_STATE_WRITE_NDEF_FILE: 1371eff5a3da9704a7d49f0990152c84c172630da679Jan Brands { 1372eff5a3da9704a7d49f0990152c84c172630da679Jan Brands if ((PH_FRINFC_DESF_NATIVE_RESP_BYTE1 == 1373eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[PH_SMTCRDFMT_DESF_VAL0]) && 1374eff5a3da9704a7d49f0990152c84c172630da679Jan Brands (PH_FRINFC_DESF_NATIVE_RESP_BYTE2 == 1375eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->SendRecvBuf[PH_SMTCRDFMT_DESF_VAL1])) 1376eff5a3da9704a7d49f0990152c84c172630da679Jan Brands { 1377eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->CardState = 0; 1378eff5a3da9704a7d49f0990152c84c172630da679Jan Brands#ifdef DESFIRE_FMT_EV1 1379eff5a3da9704a7d49f0990152c84c172630da679Jan Brands if (DESFIRE_CARD_TYPE_EV1 == NdefSmtCrdFmt->CardType) 1380eff5a3da9704a7d49f0990152c84c172630da679Jan Brands { 1381eff5a3da9704a7d49f0990152c84c172630da679Jan Brands Status = phFriNfc_OvrHal_Reconnect ( 1382eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->LowerDevice, 1383eff5a3da9704a7d49f0990152c84c172630da679Jan Brands &NdefSmtCrdFmt->SmtCrdFmtCompletionInfo, 1384eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->psRemoteDevInfo); 1385eff5a3da9704a7d49f0990152c84c172630da679Jan Brands 1386eff5a3da9704a7d49f0990152c84c172630da679Jan Brands if (NFCSTATUS_PENDING == Status) 1387eff5a3da9704a7d49f0990152c84c172630da679Jan Brands { 1388eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NdefSmtCrdFmt->State = PH_FRINFC_DESF_STATE_REACTIVATE; 1389eff5a3da9704a7d49f0990152c84c172630da679Jan Brands } 1390eff5a3da9704a7d49f0990152c84c172630da679Jan Brands } 1391eff5a3da9704a7d49f0990152c84c172630da679Jan Brands else 1392eff5a3da9704a7d49f0990152c84c172630da679Jan Brands#endif /* #ifdef DESFIRE_FMT_EV1 */ 1393eff5a3da9704a7d49f0990152c84c172630da679Jan Brands { 1394eff5a3da9704a7d49f0990152c84c172630da679Jan Brands Status = PHNFCSTVAL (CID_NFC_NONE, NFCSTATUS_SUCCESS); 1395eff5a3da9704a7d49f0990152c84c172630da679Jan Brands } 1396eff5a3da9704a7d49f0990152c84c172630da679Jan Brands } 1397eff5a3da9704a7d49f0990152c84c172630da679Jan Brands break; 1398eff5a3da9704a7d49f0990152c84c172630da679Jan Brands } 13995d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 1400eff5a3da9704a7d49f0990152c84c172630da679Jan Brands#ifdef DESFIRE_FMT_EV1 1401eff5a3da9704a7d49f0990152c84c172630da679Jan Brands case PH_FRINFC_DESF_STATE_REACTIVATE: 1402eff5a3da9704a7d49f0990152c84c172630da679Jan Brands { 1403eff5a3da9704a7d49f0990152c84c172630da679Jan Brands /* Do nothing */ 1404eff5a3da9704a7d49f0990152c84c172630da679Jan Brands break; 1405eff5a3da9704a7d49f0990152c84c172630da679Jan Brands } 1406eff5a3da9704a7d49f0990152c84c172630da679Jan Brands#endif /* #ifdef DESFIRE_FMT_EV1 */ 14075d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 1408eff5a3da9704a7d49f0990152c84c172630da679Jan Brands default: 14095d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 1410eff5a3da9704a7d49f0990152c84c172630da679Jan Brands /*set the invalid state*/ 1411eff5a3da9704a7d49f0990152c84c172630da679Jan Brands Status = PHNFCSTVAL (CID_FRI_NFC_NDEF_SMTCRDFMT, 1412eff5a3da9704a7d49f0990152c84c172630da679Jan Brands NFCSTATUS_INVALID_DEVICE_REQUEST); 1413eff5a3da9704a7d49f0990152c84c172630da679Jan Brands break; 14145d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 14155d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 14165d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 14175d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* Handle the all the error cases*/ 1418eff5a3da9704a7d49f0990152c84c172630da679Jan Brands if ((NFCSTATUS_PENDING & PHNFCSTBLOWER) != (Status & PHNFCSTBLOWER)) 14195d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 14205d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* call respective CR */ 14215d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phFriNfc_SmtCrdFmt_HCrHandler(NdefSmtCrdFmt,Status); 14225d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 14235d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 14245d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly} 14255d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 1426