| /* |
| * Copyright (C) 2010 NXP Semiconductors |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| /*! |
| * \file phFriNfc_DesfireFormat.h |
| * \brief Type4 Smart card formatting. |
| * |
| * Project: NFC-FRI |
| * |
| * $Date: Tue Jul 27 08:59:52 2010 $ |
| * $Author: ing02260 $ |
| * $Revision: 1.3 $ |
| * $Aliases: $ |
| * |
| */ |
| |
| #ifndef PHFRINFC_DESFIREFORMAT_H |
| #define PHFRINFC_DESFIREFORMAT_H |
| |
| |
| /*! \ingroup grp_file_attributes |
| * \name NDEF Smart Card Foramting |
| * |
| * File: \ref phFriNfc_DesfireFormat.h |
| * |
| */ |
| /*@{*/ |
| |
| /*@}*/ |
| |
| |
| /* Enum to represent the state variables*/ |
| enum{ |
| |
| PH_FRINFC_DESF_STATE_CREATE_AID = 0, |
| PH_FRINFC_DESF_STATE_SELECT_APP = 1, |
| PH_FRINFC_DESF_STATE_CREATE_CCFILE = 2, |
| PH_FRINFC_DESF_STATE_CREATE_NDEFFILE = 3, |
| PH_FRINFC_DESF_STATE_WRITE_CC_FILE = 4, |
| PH_FRINFC_DESF_STATE_WRITE_NDEF_FILE = 5, |
| PH_FRINFC_DESF_STATE_DISCON = 6, |
| PH_FRINFC_DESF_STATE_CON = 7, |
| PH_FRINFC_DESF_STATE_POLL = 8, |
| PH_FRINFC_DESF_STATE_GET_UID = 9, |
| PH_FRINFC_DESF_STATE_GET_SW_VERSION = 10, |
| PH_FRINFC_DESF_STATE_GET_HW_VERSION = 11, |
| #ifdef FRINFC_READONLY_NDEF |
| |
| #ifdef DESFIRE_FMT_EV1 |
| PH_FRINFC_DESF_STATE_RO_SELECT_APP_EV1 = 100, |
| #endif /* #ifdef DESFIRE_FMT_EV1 */ |
| |
| PH_FRINFC_DESF_STATE_RO_SELECT_APP = 101, |
| PH_FRINFC_DESF_STATE_RO_SELECT_CC_FILE = 102, |
| PH_FRINFC_DESF_STATE_RO_READ_CC_FILE = 103, |
| PH_FRINFC_DESF_STATE_RO_UPDATE_CC_FILE = 104, |
| |
| #endif /* #ifdef FRINFC_READONLY_NDEF */ |
| |
| /* following are used in the ISO wrapper commands*/ |
| PH_FRINFC_DESF_CREATEAPP_CMD = 0, |
| PH_FRINFC_DESF_SELECTAPP_CMD = 1, |
| PH_FRINFC_DESF_CREATECC_CMD = 2, |
| PH_FRINFC_DESF_CREATENDEF_CMD = 3, |
| PH_FRINFC_DESF_WRITECC_CMD = 4, |
| #ifdef FRINFC_READONLY_NDEF |
| PH_FRINFC_DESF_WRITECC_CMD_READ_ONLY = 20, |
| #endif /* #ifdef FRINFC_READONLY_NDEF */ |
| PH_FRINFC_DESF_WRITENDEF_CMD = 5, |
| PH_FRINFC_DESF_GET_HW_VERSION_CMD = 6, |
| PH_FRINFC_DESF_GET_SW_VERSION_CMD = 7, |
| PH_FRINFC_DESF_GET_UID_CMD = 8, |
| PH_FRINFC_DESF_WRITENDEF_CMD_SNLEN = 15, |
| PH_FRINFC_DESF_WRITECC_CMD_SNLEN = 28, |
| PH_FRINFC_DESF_CREATECCNDEF_CMD_SNLEN = 13, |
| PH_FRINFC_DESF_SELECTAPP_CMD_SNLEN = 9, |
| PH_FRINFC_DESF_CREATEAPP_CMD_SNLEN = 11, |
| PH_FRINFC_DESF_NATIVE_OFFSET_P1 = 0x00, |
| PH_FRINFC_DESF_NATIVE_OFFSET_P2 = 0x00, |
| PH_FRINFC_DESF_NATIVE_LE_BYTE = 0x00, |
| PH_FRINFC_DESF_NATIVE_CRAPP_WRDT_LEN = 5, |
| PH_FRINFC_DESF_NATIVE_SLAPP_WRDT_LEN = 3, |
| PH_FRINFC_DESF_NATIVE_CRCCNDEF_WRDT_LEN = 7, |
| PH_FRINFC_DESF_NATIVE_WRCC_WRDT_LEN = 22, |
| PH_FRINFC_DESF_NATIVE_WRNDEF_WRDT_LEN = 9 |
| |
| }; |
| |
| |
| /* CC File contents*/ |
| |
| #define PH_FRINFC_DESF_CCFILE_BYTES {0x00,0x0f,0x10,0x00,0x3B,0x00,0x34,0x04,0x06,0xE1,0x04,0x04,0x00,0x00,0x00 } |
| #define PH_FRINFC_DESF_NDEFFILE_BYTES {0x00,0x00} |
| #define PH_FRINFC_DESF_PICC_MASTER_KEY {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 } |
| #define PH_FRINFC_DESF_NFCFORUM_APP_KEY {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 } |
| #define PH_FRINFC_DESF_COMM_SETTINGS 0x00 |
| #define PH_FRINFC_DESF_CREATE_DATA_FILE_CMD 0xCD |
| #define PH_FRINFC_DESF_NATIVE_CLASS_BYTE 0x90 |
| |
| /* Constant defined to specify the NFC Forum Application ID : 0xEEEE10*/ |
| /* This is defined in order to support to N/W Byte order style : LSB : : MSB*/ |
| #define PH_FRINFC_DESF_FIRST_AID_BYTE 0x10 |
| #define PH_FRINFC_DESF_SEC_AID_BYTE 0xEE |
| #define PH_FRINFC_DESF_THIRD_AID_BYTE 0xEE |
| |
| |
| /* Create File command constants*/ |
| #define PH_FRINFC_DESF_CREATE_AID_CMD 0xCA |
| |
| /* Specifies the NFC Forum App Number of Keys*/ |
| #define PH_FRINFC_DESF_NFCFORUM_APP_NO_OF_KEYS 0x01 |
| |
| #define PH_FRINFC_DESF_SLECT_APP_CMD 0x5A |
| |
| #define PH_FRINFC_DESF_GET_VER_CMD 0x60 |
| |
| |
| #define PH_FRINFC_DESF_NATIVE_RESP_BYTE1 0x91 |
| #define PH_FRINFC_DESF_NATIVE_RESP_BYTE2 0x00 |
| |
| /* Create CC File Commands*/ |
| #define PH_FRINFC_DESF_CC_FILE_ID 0x03 |
| #define PH_FRINFC_DESF_CC_FILE_SIZE 0x0F |
| #define PH_FRINFC_DESF_FIRST_BYTE_CC_ACCESS_RIGHTS 0x00 |
| #define PH_FRINFC_DESF_SEC_BYTE_CC_ACCESS_RIGHTS 0xE0 |
| |
| |
| /* Create NDEF File Commands*/ |
| #define PH_FRINFC_DESF_NDEF_FILE_ID 0x04 |
| #define PH_FRINFC_DESF_NDEF_FILE_SIZE 0x04 |
| #define PH_FRINFC_DESF_FIRST_BYTE_NDEF_ACCESS_RIGHTS 0xE0 |
| #define PH_FRINFC_DESF_SEC_BYTE_NDEF_ACCESS_RIGHTS 0xEE |
| |
| |
| /* Write/Read Data commands/constants*/ |
| #define PH_FRINFC_DESF_WRITE_CMD 0x3D |
| |
| /* PICC additional frame response*/ |
| #define PH_FRINFC_DESF_PICC_ADDI_FRAME_RESP 0xAF |
| |
| /* Response for PICC native DESFire wrapper cmd*/ |
| #define PH_FRINFC_DESF_NAT_WRAP_FIRST_RESP_BYTE 0x91 |
| #define PH_FRINFC_DESF_NAT_WRAP_SEC_RESP_BYTE 0x00 |
| |
| /* DESFire4 Major/Minor versions*/ |
| #define PH_FRINFC_DESF4_MAJOR_VERSION 0x00 |
| #define PH_FRINFC_DESF4_MINOR_VERSION 0x06 |
| |
| /* DESFire4 memory size*/ |
| #define PH_FRINFC_DESF4_MEMORY_SIZE 0xEDE |
| |
| enum{ |
| PH_SMTCRDFMT_DESF_VAL0 = 0, |
| PH_SMTCRDFMT_DESF_VAL1 = 1, |
| PH_SMTCRDFMT_DESF_VAL2 = 2, |
| PH_SMTCRDFMT_DESF_VAL3 = 3, |
| PH_SMTCRDFMT_DESF_VAL4 = 4, |
| PH_SMTCRDFMT_DESF_VAL14 = 14, |
| PH_SMTCRDFMT_DESF_VAL15 = 15 |
| }; |
| |
| |
| |
| /*! |
| * \brief \copydoc page_reg Resets the component instance to the initial state and lets the component forget about |
| * the list of registered items. Moreover, the lower device is set. |
| * |
| * \param[in] NdefSmtCrdFmt Pointer to a valid or uninitialized instance of \ref phFriNfc_sNdefSmtCrdFmt_t. |
| * |
| * \note This function has to be called at the beginning, after creating an instance of |
| * \ref phFriNfc_sNdefSmtCrdFmt_t. Use this function to reset the instance of smart card |
| formatting context variables. |
| */ |
| void phFriNfc_Desfire_Reset(phFriNfc_sNdefSmtCrdFmt_t *NdefSmtCrdFmt); |
| |
| /*! |
| * \ingroup grp_fri_smart_card_formatting |
| * |
| * \brief Initiates the card formatting procedure for Remote Smart Card Type. |
| * |
| * \copydoc page_ovr The function initiates and formats the DESFire Card.After this |
| * operation,remote card would be properly initialized and |
| * Ndef Compliant.Depending upon the different card type, this |
| * function handles formatting procedure.This function also handles |
| * the different recovery procedures for different types of the cards. |
| * For both Format and Recovery Management same API is used. |
| * |
| * \param[in] phFriNfc_sNdefSmartCardFmt_t Pointer to a valid instance of the \ref phFriNfc_sNdefSmartCardFmt_t |
| * structure describing the component context. |
| * |
| * \retval NFCSTATUS_SUCCESS Card formatting has been successfully completed. |
| * \retval NFCSTATUS_PENDING The action has been successfully triggered. |
| * \retval NFCSTATUS_FORMAT_ERROR Error occured during the formatting procedure. |
| * \retval NFCSTATUS_INVALID_REMOTE_DEVICE Card Type is unsupported. |
| * \retval NFCSTATUS_INVALID_DEVICE_REQUEST Command or Operation types are mismatching. |
| * |
| */ |
| NFCSTATUS phFriNfc_Desfire_Format(phFriNfc_sNdefSmtCrdFmt_t *NdefSmtCrdFmt); |
| |
| /*! |
| * \brief \copydoc page_reg Resets the component instance to the initial state and lets the component forget about |
| * the list of registered items. Moreover, the lower device is set. |
| * |
| * \param[in] NdefSmtCrdFmt Pointer to a valid or uninitialized instance of \ref phFriNfc_sNdefSmtCrdFmt_t. |
| * |
| * \note This function has to be called at the beginning, after creating an instance of |
| * \ref phFriNfc_sNdefSmtCrdFmt_t. Use this function to reset the instance of smart card |
| formatting context variables. |
| */ |
| void phFriNfc_Desfire_Reset(phFriNfc_sNdefSmtCrdFmt_t *NdefSmtCrdFmt); |
| |
| #ifdef FRINFC_READONLY_NDEF |
| /*! |
| * \ingroup grp_fri_smart_card_formatting |
| * |
| * \brief Initiates the conversion of the already NDEF formatted tag to READ ONLY. |
| * |
| * \copydoc page_ovr The function initiates the conversion of the already NDEF formatted |
| * tag to READ ONLY. After this formation, remote card would be properly Ndef Compliant and READ ONLY. |
| * Depending upon the different card type, this function handles formatting procedure. |
| * |
| * \param[in] phFriNfc_sNdefSmartCardFmt_t Pointer to a valid instance of the \ref phFriNfc_sNdefSmartCardFmt_t |
| * structure describing the component context. |
| * |
| * \retval NFCSTATUS_SUCCESS Card formatting has been successfully completed. |
| * \retval NFCSTATUS_PENDING The action has been successfully triggered. |
| * \retval NFCSTATUS_FORMAT_ERROR Error occured during the formatting procedure. |
| * \retval NFCSTATUS_INVALID_REMOTE_DEVICE Card Type is unsupported. |
| * \retval NFCSTATUS_INVALID_DEVICE_REQUEST Command or Operation types are mismatching. |
| * |
| */ |
| NFCSTATUS |
| phFriNfc_Desfire_ConvertToReadOnly ( |
| phFriNfc_sNdefSmtCrdFmt_t *NdefSmtCrdFmt); |
| #endif /* #ifdef FRINFC_READONLY_NDEF */ |
| |
| /** |
| *\ingroup grp_fri_smart_card_formatting |
| * |
| * \brief Smart card Formatting \b Completion \b Routine or \b Process function |
| * |
| * \copydoc page_ovr Completion Routine: This function is called by the lower layer (OVR HAL) |
| * when an I/O operation has finished. The internal state machine decides |
| * whether to call into the lower device again or to complete the process |
| * by calling into the upper layer's completion routine, stored within this |
| * component's context (\ref phFriNfc_sNdefSmtCrdFmt_t). |
| * |
| * The function call scheme is according to \ref grp_interact. No State reset is performed during |
| * operation. |
| * |
| * \param[in] Context The context of the current (not the lower/upper) instance, as set by the lower, |
| * calling layer, upon its completion. |
| * \param[in] Status The completion status of the lower layer (to be handled by the implementation of |
| * the state machine of this function like a regular return value of an internally |
| * called function). |
| * |
| * \note For general information about the completion routine interface please see \ref pphFriNfc_Cr_t . * The Different Status Values are as follows |
| * |
| */ |
| void phFriNfc_Desf_Process(void *Context, |
| NFCSTATUS Status); |
| |
| |
| #endif |
| |