blob: 6a7a65338ce0f02298294216558d3575890cae74 [file] [log] [blame]
/*
* Copyright (C) 2015 The Android Open Source Project
*
* 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.
*/
/*
* Smart Card Completion Routing component
*/
#ifndef PHFRINFC_SMTCRDFMT_H
#define PHFRINFC_SMTCRDFMT_H
#include <phNfcTypes_Mapping.h>
/********************* Definitions and structures *****************************/
#define DESFIRE_FMT_EV1
#define PH_FRI_NFC_SMTCRDFMT_NFCSTATUS_FORMAT_ERROR 9 /* Format error */
#define PH_FRINFC_SMTCRDFMT_MSTD_DEFAULT_KEYA_OR_KEYB \
{ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF } /* Default Key */
#define PH_FRINFC_SMTCRDFMT_MSTD_MADSECT_KEYA \
{ 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5 } /* Key A */
#define PH_FRINFC_SMTCRDFMT_NFCFORUMSECT_KEYA \
{ 0xD3, 0xF7, 0xD3, 0xF7, 0xD3, 0xF7 } /* NFC Forum Key */
#define PH_FRINFC_SMTCRDFMT_MSTD_MADSECT_ACCESSBITS \
{ 0x78, 0x77, 0x88 } /* Access bits */
#define PH_FRINFC_SMTCRDFMT_MSTD_NFCFORUM_ACCESSBITS \
{ 0x7F, 0x07, 0x88 } /* NFC Forum access bits */
#define PH_FRINFC_SMTCRDFMT_MAX_TLV_TYPE_SUPPORTED 1 /* TLV support */
#define PH_FRINFC_SMTCRDFMT_MAX_SEND_RECV_BUF_SIZE 252 /* Buffer size */
#define PH_FRINFC_SMTCRDFMT_STATE_RESET_INIT 1 /* Format state */
/*
* Enum definition contains Tag Types
*/
enum {
PH_FRINFC_SMTCRDFMT_MIFARE_UL_CARD,
PH_FRINFC_SMTCRDFMT_ISO14443_4A_CARD,
PH_FRINFC_SMTCRDFMT_MFSTD_1K_CRD,
PH_FRINFC_SMTCRDFMT_MFSTD_2K_CRD,
PH_FRINFC_SMTCRDFMT_MFSTD_4K_CRD,
PH_FRINFC_SMTCRDFMT_TOPAZ_CARD
};
#define PH_FRINFC_SMTCRDFMT_CR_FORMAT 0 /* Index for phFriNfc_SmtCrd_Format */
#define PH_FRINFC_SMTCRDFMT_CR_INVALID_OPE \
1 /* Index for Unknown States/Operations */
#define PH_FRINFC_SMTCRDFMT_CR 2 /* Number of completion routines */
/*
* Mifare Std Additional Information Structure
*/
typedef struct phFriNfc_MfStd_AddInfo {
uint8_t Default_KeyA_OR_B[6]; /* Stores the Default KeyA and KeyB values */
uint8_t MADSect_KeyA[6]; /* Key A of MAD sector */
uint8_t NFCForumSect_KeyA[6]; /* Key A of NFC Forum Sector sector */
uint8_t MADSect_AccessBits[3]; /* Access Bits of MAD sector */
uint8_t NFCForumSect_AccessBits[3]; /* Access Bits of NFC Forum sector */
uint8_t ScrtKeyB[6]; /* Secret key B to given by the application */
uint8_t AuthState; /* Status of the different authentication */
uint16_t CurrentBlock; /* Stores the current block */
uint8_t NoOfDevices; /* Stores the current block */
uint8_t SectCompl[40]; /* Store the compliant sectors */
uint8_t WrMADBlkFlag; /* Flag to know that MAD sector */
uint8_t MADSectBlk[80]; /* Fill the MAD sector blocks */
uint8_t UpdMADBlk; /* Fill the MAD sector blocks */
} phFriNfc_MfStd_AddInfo_t;
/*
* Ndef Mifare Std Additional Information Structure
*/
typedef struct phFriNfc_sNdefSmtCrdFmt_AddInfo {
phFriNfc_MfStd_AddInfo_t
MfStdInfo; /* Mifare Std Additional Information Structure */
} phFriNfc_sNdefSmtCrdFmt_AddInfo_t;
/*
* Context information Structure
*/
typedef struct phFriNfc_sNdefSmtCrdFmt {
phNfc_sTransceiveInfo_t*
pTransceiveInfo; /* Pointer to the Transceive information */
phHal_sRemoteDevInformation_t*
psRemoteDevInfo; /* Pointer to the Remote Device Information */
uint8_t CardType; /* Stores the type of the smart card */
uint8_t State; /* The state of the operation */
uint8_t CardState; /* Stores the card state */
phFriNfc_CplRt_t CompletionRoutine
[PH_FRINFC_SMTCRDFMT_CR]; /* Completion Routine Context */
phFriNfc_CplRt_t SmtCrdFmtCompletionInfo; /* Holds the completion routine
informations of the Smart Card
Formatting Layer */
phHal_uCmdList_t Cmd; /* Holds the Command Type(read/write) */
uint16_t* SendRecvLength; /* Holds the length of the received data */
uint8_t* SendRecvBuf; /* Holds the ack of some intial commands */
uint16_t SendLength; /* Holds the length of the data to be sent */
NFCSTATUS
FmtProcStatus; /* Stores the output/result of the format procedure */
phFriNfc_sNdefSmtCrdFmt_AddInfo_t AddInfo; /* Stores Additional Information
needed to format the different
types of tags*/
uint8_t TLVMsg[PH_FRINFC_SMTCRDFMT_MAX_TLV_TYPE_SUPPORTED]
[8]; /* Stores NDEF message TLV */
} phFriNfc_sNdefSmtCrdFmt_t;
NFCSTATUS
phFriNfc_NdefSmtCrd_Reset(phFriNfc_sNdefSmtCrdFmt_t* NdefSmtCrdFmt,
void* LowerDevice,
phHal_sRemoteDevInformation_t* psRemoteDevInfo,
uint8_t* SendRecvBuffer, uint16_t* SendRecvBuffLen);
NFCSTATUS phFriNfc_NdefSmtCrd_SetCR(phFriNfc_sNdefSmtCrdFmt_t* NdefSmtCrdFmt,
uint8_t FunctionID,
pphFriNfc_Cr_t CompletionRoutine,
void* CompletionRoutineContext);
void phFriNfc_NdefSmtCrd_Process(void* Context, NFCSTATUS Status);
void phFriNfc_SmtCrdFmt_HCrHandler(phFriNfc_sNdefSmtCrdFmt_t* NdefSmtCrdFmt,
NFCSTATUS Status);
#endif /* PHFRINFC_SMTCRDFMT_H */