diff options
author | Nick Pelly <npelly@google.com> | 2010-09-23 12:47:58 -0700 |
---|---|---|
committer | Nick Pelly <npelly@google.com> | 2010-09-23 13:53:18 -0700 |
commit | 5d9927ba30ba449badb9f6df0fbeb4d6aedc6e2a (patch) | |
tree | 190f9251c6db03d3550ec7f30b51a2561c01d9cf /inc/phNfcTypes.h | |
parent | 4ff7c86a2c706b150078274455406f1b04966e1a (diff) | |
download | external_libnfc-nxp-5d9927ba30ba449badb9f6df0fbeb4d6aedc6e2a.zip external_libnfc-nxp-5d9927ba30ba449badb9f6df0fbeb4d6aedc6e2a.tar.gz external_libnfc-nxp-5d9927ba30ba449badb9f6df0fbeb4d6aedc6e2a.tar.bz2 |
Initial libnfc checkin
Source: Trusted_NFC_Device_Host_AA03.01e02_google.zip code drop (23-Sep-2010)
Change-Id: Ie47f18423f949a8d3e0815d13f55c814312add24
Signed-off-by: Nick Pelly <npelly@google.com>
Diffstat (limited to 'inc/phNfcTypes.h')
-rw-r--r-- | inc/phNfcTypes.h | 1127 |
1 files changed, 1127 insertions, 0 deletions
diff --git a/inc/phNfcTypes.h b/inc/phNfcTypes.h new file mode 100644 index 0000000..3536721 --- /dev/null +++ b/inc/phNfcTypes.h @@ -0,0 +1,1127 @@ +/* + * 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 phNfcTypes.h + * \brief Basic type definitions. + * + * Project: NFC MW / HAL + * + * $Date: Thu Jun 25 21:24:53 2009 $ + * $Author: ing04880 $ + * $Revision: 1.13 $ + * $Aliases: NFC_FRI1.1_WK926_R28_1,NFC_FRI1.1_WK928_R29_1,NFC_FRI1.1_WK930_R30_1,NFC_FRI1.1_WK934_PREP_1,NFC_FRI1.1_WK934_R31_1,NFC_FRI1.1_WK941_PREP1,NFC_FRI1.1_WK941_PREP2,NFC_FRI1.1_WK941_1,NFC_FRI1.1_WK943_R32_1,NFC_FRI1.1_WK949_PREP1,NFC_FRI1.1_WK943_R32_10,NFC_FRI1.1_WK943_R32_13,NFC_FRI1.1_WK943_R32_14,NFC_FRI1.1_WK1007_R33_1,NFC_FRI1.1_WK1007_R33_4,NFC_FRI1.1_WK1017_PREP1,NFC_FRI1.1_WK1017_R34_1,NFC_FRI1.1_WK1017_R34_2,NFC_FRI1.1_WK1023_R35_1 $ + * + */ + +#ifndef PHNFCTYPES /* */ +#define PHNFCTYPES /* */ + +/** + * \name NFC Types + * + * File: \ref phNfcTypes.h + * + */ +/*@{*/ +#define PHNFCTYPES_FILEREVISION "$Revision: 1.13 $" /**< \ingroup grp_file_attributes */ +#define PHNFCTYPES_FILEALIASES "$Aliases: NFC_FRI1.1_WK926_R28_1,NFC_FRI1.1_WK928_R29_1,NFC_FRI1.1_WK930_R30_1,NFC_FRI1.1_WK934_PREP_1,NFC_FRI1.1_WK934_R31_1,NFC_FRI1.1_WK941_PREP1,NFC_FRI1.1_WK941_PREP2,NFC_FRI1.1_WK941_1,NFC_FRI1.1_WK943_R32_1,NFC_FRI1.1_WK949_PREP1,NFC_FRI1.1_WK943_R32_10,NFC_FRI1.1_WK943_R32_13,NFC_FRI1.1_WK943_R32_14,NFC_FRI1.1_WK1007_R33_1,NFC_FRI1.1_WK1007_R33_4,NFC_FRI1.1_WK1017_PREP1,NFC_FRI1.1_WK1017_R34_1,NFC_FRI1.1_WK1017_R34_2,NFC_FRI1.1_WK1023_R35_1 $" /**< \ingroup grp_file_attributes */ +/*@}*/ + +#ifndef _WIN32 +#include <stdint.h> +#else +#include <Windows.h> +#include <stdio.h> +#define snprintf _snprintf + +#ifndef linux +/** + * \name Basic Type Definitions + * + * Constant-length-type definition ('C99). + * + */ +/*@{*/ +#ifndef __int8_t_defined /* */ +#define __int8_t_defined /* */ +typedef signed char int8_t; /**< \ingroup grp_nfc_common + 8 bit signed integer */ +#endif + +#ifndef __int16_t_defined /* */ +#define __int16_t_defined /* */ +typedef signed short int16_t; /**< \ingroup grp_nfc_common + 16 bit signed integer */ +#endif + +#ifndef __stdint_h +#ifndef __int32_t_defined /* */ +#define __int32_t_defined /* */ +typedef signed long int32_t; /**< \ingroup grp_nfc_common + 32 bit signed integer */ +#endif +#endif + +#ifndef __uint8_t_defined /* */ +#define __uint8_t_defined /* */ +typedef unsigned char uint8_t; /**< \ingroup grp_nfc_common + 8 bit unsigned integer */ +#endif + +#ifndef __uint16_t_defined /* */ +#define __uint16_t_defined /* */ +typedef unsigned short uint16_t; /**< \ingroup grp_nfc_common + 16 bit unsigned integer */ +#endif + +#ifndef __stdint_h +#ifndef __uint32_t_defined /* */ +#define __uint32_t_defined /* */ +typedef unsigned long uint32_t; /**< \ingroup grp_nfc_common + 32 bit unsigned integer */ +#endif +#endif + +#endif /* linux */ + +#endif /* _WIN32 */ + +#ifndef TRUE +#define TRUE (0x01) /**< \ingroup grp_nfc_common + Logical True Value */ +#endif + +#ifndef FALSE +#define FALSE (0x00) /**< \ingroup grp_nfc_common + Logical False Value */ +#endif + +typedef uint8_t utf8_t; /**< \ingroup grp_nfc_common + UTF8 Character String */ + +typedef uint8_t bool_t; /**< \ingroup grp_nfc_common + boolean data type */ + +typedef uint16_t NFCSTATUS; /**< \ingroup grp_nfc_common + NFC return values + \ref phNfcStatus.h for different status + values */ + +#ifndef NULL +#define NULL ((void *)0) +#endif + +/* This Macro to be used to resolve Unused and unreference + * compiler warnings. + */ + +#define PHNFC_UNUSED_VARIABLE(x) for((x)=(x);(x)!=(x);) + +/*@}*/ + +/** + * + * \name HAL Overall Definitions + * + * Definitions applicable to a variety of purposes and functions/features. + * + */ + /*@{*/ + +#define PHHAL_COMMON_MAX_STRING_LENGTH 0x40U /**< \ingroup grp_hal_common + Maximum vendor name length in bytes. */ +#define PHHAL_UNKNOWN_DEVICE_TYPE 0x00U /**< \ingroup grp_hal_common + Unknown device type. */ +#define PHHAL_SERIAL_DEVICE 0x01U /**< \ingroup grp_hal_common + Serial device type. */ +#define PHHAL_USB_DEVICE 0x02U /**< \ingroup grp_hal_common + USB device type. */ +#define PHHAL_I2C_DEVICE 0x03U /**< \ingroup grp_hal_common + I2C device type. */ +#define PHHAL_SPI_DEVICE 0x04U /**< \ingroup grp_hal_common + SPI device type. */ +#define PHHAL_PARALLEL_DEVICE 0x05U /**< \ingroup grp_hal_common + Parallel device type. */ +#define PHHAL_NFCID_LENGTH 0x0AU /**< \ingroup grp_hal_common + Maximum length of NFCID 1..3. */ + +#define PHHAL_MAX_DATASIZE 0xFBU /* 256 * Maximum Data size sent + * by the HAL + */ + +#define PHHAL_ATQA_LENGTH 0x02U /**< ATQA length */ +#define PHHAL_MAX_UID_LENGTH 0x0AU /**< Maximum UID length expected */ +#define PHHAL_MAX_ATR_LENGTH 0x30U /**< Maximum ATR_RES (General Bytes) + * length expected */ + +#define PHHAL_ATQB_LENGTH 0x0BU /**< ATQB length */ + +#define PHHAL_PUPI_LENGTH 0x04U /**< PUPI length */ +#define PHHAL_APP_DATA_B_LENGTH 0x04U /**< Application Data length for Type B */ +#define PHHAL_PROT_INFO_B_LENGTH 0x03U /**< Protocol info length for Type B */ +#define PHHAL_FEL_SYS_CODE_LEN 0x02U /**< Felica System Code Length */ +#define PHHAL_FEL_ID_LEN 0x08U /**< Felica current ID Length */ +#define PHHAL_FEL_PM_LEN 0x08U /**< Felica current PM Length */ +#define PHHAL_15693_UID_LENGTH 0x08U /**< Length of the Inventory bytes for + ISO15693 Tag */ + +#define VENDOR_NAME_LEN 0x14U +#define MAX_TRANSFER_UNIT 0x21U +#define SESSIONID_SIZE 0x08U +#define MAX_AID_LEN 0x10U +#define MAX_UICC_PARAM_LEN 0xFFU + +#define MIFARE_BITMASK 0x08U +#define ISO_14443_BITMASK 0x20U +#define ISO_14443_DETECTED 0x20U +#define NFCIP_BITMASK 0x40U +#define NFCIP_DETECTED 0x40U + +#define MAX_TARGET_SUPPORTED MAX_REMOTE_DEVICES + +#define NFC_HW_PN65N 0x10U + +#define NXP_NFCIP_NFCID2_ID 0x01FEU + +#define NXP_FULL_VERSION_LEN 0x0BU + + +/*@}*/ + + +/** + * \name NFC specific Type Definitions + * + */ +/*@{*/ + +/** + * Data Buffer Structure to hold the Data Buffer + * + * This structure holds the Data in the Buffer of the specified + * size. + * + */ +typedef struct phNfc_sData_t +{ + uint8_t *buffer; + uint32_t length; +} phNfc_sData_t; + + +/** + *\brief Possible Hardware Configuration exposed to upper layer. + * Typically this should be port name (Ex:"COM1","COM2") to which PN544 is connected. + */ +typedef enum +{ + ENUM_LINK_TYPE_COM1, + ENUM_LINK_TYPE_COM2, + ENUM_LINK_TYPE_COM3, + ENUM_LINK_TYPE_COM4, + ENUM_LINK_TYPE_COM5, + ENUM_LINK_TYPE_COM6, + ENUM_LINK_TYPE_COM7, + ENUM_LINK_TYPE_COM8, + ENUM_LINK_TYPE_I2C, + ENUM_LINK_TYPE_USB, + ENUM_LINK_TYPE_TCP, + + ENUM_LINK_TYPE_NB, +} phLibNfc_eConfigLinkType; + +/** + * \brief Possible Hardware Configuration exposed to upper layer. + * Typically this should be at least the communication link (Ex:"COM1","COM2") + * the controller is connected to. + */ +typedef struct phLibNfc_sConfig_t +{ + /** Hardware communication link to the controller */ + phLibNfc_eConfigLinkType nLinkType; + /** The client ID (thread ID or message queue ID) */ + unsigned int nClientId; +} phLibNfc_sConfig_t, *pphLibNfc_sConfig_t; + + +/*! + * NFC Message structure contains message specific details like + * message type, message specific data block details, etc. + */ +typedef struct phLibNfc_Message_t +{ + uint32_t eMsgType;/**< Type of the message to be posted*/ + void * pMsgData;/**< Pointer to message specific data block in case any*/ + uint32_t Size;/**< Size of the datablock*/ +} phLibNfc_Message_t,*pphLibNfc_Message_t; + + +#ifdef WIN32 +#define PH_LIBNFC_MESSAGE_BASE (WM_USER+0x3FF) +#endif +/** + * Deferred message. This message type will be posted to the client application thread + * to notify that a deferred call must be invoked. + */ +#define PH_LIBNFC_DEFERREDCALL_MSG (0x311) + +/** + *\brief Deferred call declaration. + * This type of API is called from ClientApplication ( main thread) to notify + * specific callback. + */ +typedef void (*pphLibNfc_DeferredCallback_t) (void*); +/** + *\brief Deferred parameter declaration. + * This type of data is passed as parameter from ClientApplication (main thread) to the + * callback. + */ +typedef void *pphLibNfc_DeferredParameter_t; +/** + *\brief Deferred message specific info declaration. + * This type of information is packed as message data when \ref PH_LIBNFC_DEFERREDCALL_MSG + * type message is posted to message handler thread. + */ +typedef struct phLibNfc_DeferredCall_t +{ + pphLibNfc_DeferredCallback_t pCallback;/**< pointer to Deferred callback */ + pphLibNfc_DeferredParameter_t pParameter;/**< pointer to Deferred parameter */ +} phLibNfc_DeferredCall_t; + + +/** \ingroup grp_hal_common + * + * \brief Protocol Support Information + * + * The <em> Supported Protocols Structure </em> holds all protocol supported by the current NFC + * device. + * + * \note All members of this structure are output parameters [out]. + * + */ +typedef struct phNfc_sSupProtocol_t +{ + unsigned int MifareUL : 1; /**< Protocol Mifare Ultra Light or + any NFC Forum Type-2 tags */ + unsigned int MifareStd : 1; /**< Protocol Mifare Standard. */ + unsigned int ISO14443_4A : 1; /**< Protocol ISO14443-4 Type A. */ + unsigned int ISO14443_4B : 1; /**< Protocol ISO14443-4 Type B. */ + unsigned int ISO15693 : 1; /**< Protocol ISO15693 HiTag. */ + unsigned int Felica : 1; /**< Protocol Felica. */ + unsigned int NFC : 1; /**< Protocol NFC. */ + unsigned int Jewel : 1; /**< Protocol Innovision Jewel Tag. */ + /*** TODO: Add SWP, ETSI HCI to this list **/ +} phNfc_sSupProtocol_t; + + +/** \ingroup grp_hal_common + * + * + * \brief Information related to the NFC Device + * + * The <em> Device Information Structure </em> holds information + * related to the NFC IC read during initialization time. + * It allows the caller firware, hardware version, the model id, + * HCI verison supported and vendor name. Refer to the NFC Device + * User Manual on how to interpret each of the values. In addition + * it also contains capabilities of the NFC Device such as the + * protocols supported in Reader and emulation mode + * + */ +typedef struct phNfc_sDeviceCapabilities_t +{ + /* */ + uint32_t hal_version; /**< \ingroup grp_hal_common + HAL 4.0 Version Information. */ + uint32_t fw_version; /**< \ingroup grp_hal_common + Firmware Version Info. */ + uint32_t hw_version; /**< \ingroup grp_hal_common + Hardware Version Info. */ + uint8_t model_id; /**< \ingroup grp_hal_common + IC Variant . */ + uint8_t hci_version; /**< \ingroup grp_hal_common + ETSI HCI Version Supported */ + utf8_t vendor_name[VENDOR_NAME_LEN]; /**< \ingroup grp_hal_common + Vendor name (Null terminated string)*/ + uint8_t full_version[NXP_FULL_VERSION_LEN]; + + phNfc_sSupProtocol_t ReaderSupProtocol; /**< Supported protocols + (Bitmapped) in Reader mode. */ + phNfc_sSupProtocol_t EmulationSupProtocol; /**< Supported protocols + (Bitmapped) in Emulation + mode. */ +} phNfc_sDeviceCapabilities_t; + + +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ + + +/** \ingroup grp_hal_common + * + * \brief Enumerated MIFARE Commands + * + * The <em> Mifare Command List Enumerator </em> lists all available Mifare native commands. + * + * \note None. + * + */ +typedef enum phNfc_eMifareCmdList_t +{ + phNfc_eMifareRaw = 0x00U, /**< This command performs raw transcations . + Format of the phLibNfc_sTransceiveInfo_t + content in this case shall be as below: + • cmd: filed shall set to phHal_eMifareRaw . + • addr : doesn't carry any significance. + • sSendData : Shall contain formatted raw buffer + based on MIFARE commands type used. + Formatted buffer shall follow below + formating scheme. + + CmdType+ Block No + CommandSpecific data + 2 byte CRC + Ex: With Write 4 byte command on block 8 looks as + " 0xA2,0x08,0x01,0x02,0x03,0x04,CRC1,CRC2 + Note : For MIFARE Std card we recommend use MIFARE + commands directly. + */ + phNfc_eMifareAuthentA = 0x60U, /**< Mifare Standard:\n + This command performs an authentication with KEY A for a sector.\n + Format of the phLibNfc_sTransceiveInfo_t content in this case is : + • cmd: field shall set to phHal_eMifareAuthentA . + • addr : indicates MIFARE block address. + Ex: 0x08 indicates block 8 needs to be authenticated. + • sSendData : Shall contain authentication key values. + sSendData ,buffer shall contain authentication + key values 01 02 03 04 05 06 authenticates + block 08 with the key 0x01[..]06. If this + command fails, then user needs to reactivate + the remote Mifare card. + */ + phNfc_eMifareAuthentB = 0x61U, /**< Mifare Standard:\n + This command performs an authentication with KEY B for a sector.\n + Format of the phLibNfc_sTransceiveInfo_t content in this case is : + • cmd: field shall set to phHal_eMifareAuthentB . + • addr : indicates MIFARE block address. + Ex: 0x08 indicates block 8 needs to be authenticated. + • sSendData : Shall contain authentication key values. + sSendData ,buffer shall contain authentication + key values 01 02 03 04 05 06 authenticates + block 08 with the key 0x01[..]06. If this + command fails, then user needs to reactivate + the remote Mifare card. + */ + phNfc_eMifareRead16 = 0x30U, /**< Mifare Standard and Ultra Light:\n + Read 16 Bytes from a Mifare Standard block or 4 Mifare Ultra Light pages.\n + Format of the phLibNfc_sTransceiveInfo_t content in this case is : + • cmd: field shall set to phHal_eMifareRead16 . + • addr : memory adress to read. + • sRecvData : Shall contain buffer of size 16 + to read the data into. + + If this command fails, the user needs to reactivate the + the remote Mifare card + */ + phNfc_eMifareRead = 0x30U, + phNfc_eMifareWrite16 = 0xA0U, /**< Mifare Standard and Ultra Light:\n + Write 16 Bytes to a Mifare Standard block or 4 Mifare Ultra Light pages.\n + Format of the phLibNfc_sTransceiveInfo_t content in this case is : + • cmd: field shall set to phHal_eMifareWrite16 . + • addr : starting memory adress to write from. + • sSendData : Shall contain buffer of size 16 containing + the data bytes to be written. + + If this command fails, the user needs to reactivate the + the remote Mifare card + */ + phNfc_eMifareWrite4 = 0xA2U, /**< Mifare Ultra Light:\n + Write 4 bytes.\n + Format of the phLibNfc_sTransceiveInfo_t content in this case is : + • cmd: field shall set to phHal_eMifareWrite4 . + • addr : starting memory adress to write from. + • sSendData : Shall contain buffer of size 4 containing + the data bytes to be written. + + If this command fails, the user needs to reactivate the + the remote Mifare card + */ + phNfc_eMifareInc = 0xC1U, /**< Increment. */ + phNfc_eMifareDec = 0xC0U, /**< Decrement. */ + phNfc_eMifareTransfer = 0xB0U, /**< Tranfer. */ + phNfc_eMifareRestore = 0xC2U, /**< Restore. */ + phNfc_eMifareReadSector = 0x38U, /**< Read Sector. */ + phNfc_eMifareWriteSector= 0xA8U, /**< Write Sector. */ + phNfc_eMifareInvalidCmd = 0xFFU /**< Invalid Command */ +} phNfc_eMifareCmdList_t; + + +/** \ingroup grp_hal_common + * + * The <em> T=Cl Command List Enumerator </em> lists all available T=Cl Commands. + * + * \note None. + * + */ +typedef enum phNfc_eIso14443_4_CmdList_t +{ + phNfc_eIso14443_4_Raw = 0x00U /**< ISO 14443-4 Exchange command:\n + - This command sends the data buffer directly + to the remote device */ + +} phNfc_eIso14443_4_CmdList_t; + + +/** \ingroup grp_hal_common + * + * The <em> NFCIP1 Command List Enumerator </em> lists all available NFCIP1 Commands. + * + * \note None. + * + */ +typedef enum phNfc_eNfcIP1CmdList_t +{ + phNfc_eNfcIP1_Raw = 0x00U /**< NfcIP Exchange command:\n + - This command sends the data buffer directly + to the remote device */ +}phNfc_eNfcIP1CmdList_t; + + +/** \ingroup grp_hal_common + * + * The <em> ISO15693 Command List Enumerator </em> lists all available ISO15693 Commands. + * + * \note None. + * + */ +typedef enum phNfc_eIso15693_CmdList_t +{ +#if 0 + phNfc_eIso15693_Raw = 0x00U, /**< ISO 15693 Exchange Raw command:\n + - This command sends the data buffer directly + to the remote device */ +#endif + phNfc_eIso15693_Cmd = 0x20U, /**< ISO 15693 Exchange command:\n + - This command is used to access the card + to the remote device */ + phNfc_eIso15693_Invalid = 0xFFU /**< Invalid Command */ +} phNfc_eIso15693_CmdList_t; + + +/** \ingroup grp_hal_common + * + * The <em> Felica Command List Enumerator </em> lists all available Felica Commands. + * + * \note None. + * + */ +typedef enum phNfc_eFelicaCmdList_t +{ + phNfc_eFelica_Raw = 0xF0U, /**< Felica Raw command:\n + - This command sends the data buffer directly + to the remote device */ + phNfc_eFelica_Check = 0x00, /**< Felica Check command:\n + - This command checks the data from the Felica + remote device */ + phNfc_eFelica_Update = 0x01, /**< Felica Update command:\n + - This command updates the data onto the Felica + remote device */ + phNfc_eFelica_Invalid = 0xFFU /**< Invalid Command */ +} phNfc_eFelicaCmdList_t; + + +/** \ingroup grp_hal_common + * + * The <em> Jewel Command List Enumerator </em> lists all available Jewel Commands. + * + * \note None. + * + */ +typedef enum phNfc_eJewelCmdList_t +{ + phNfc_eJewel_Raw = 0x00U, /**< Jewel command:\n + - This command sends the data buffer directly + to the remote device */ + phNfc_eJewel_Invalid = 0xFFU /**< Invalid jewel command */ +}phNfc_eJewelCmdList_t; + + +/** \ingroup grp_hal_nfci +* +* \brief Remote Device Reader A RF Gate Information Container +* +* The <em> Reader A structure </em> includes the available information +* related to the discovered ISO14443A remote device. This information +* is updated for every device discovery. +* \note None. +* +*/ +typedef struct phNfc_sIso14443AInfo_t +{ + uint8_t Uid[PHHAL_MAX_UID_LENGTH]; /**< UID information of the TYPE A + Tag Discovered */ + uint8_t UidLength; /**< UID information length, shall not be greater + than PHHAL_MAX_UID_LENGTH i.e., 10 */ + uint8_t AppData[PHHAL_MAX_ATR_LENGTH]; /**< Application data information of the + tag discovered (= Historical bytes for + type A) */ + uint8_t AppDataLength; /**< Application data length */ + uint8_t Sak; /**< SAK informationof the TYPE A + Tag Discovered */ + uint8_t AtqA[PHHAL_ATQA_LENGTH]; /**< ATQA informationof the TYPE A + Tag Discovered */ + uint8_t MaxDataRate; /**< Maximum data rate supported by the TYPE A + Tag Discovered */ + uint8_t Fwi_Sfgt; /**< Frame waiting time and start up frame guard + time as defined in ISO/IEC 14443-4[7] for + type A */ +} phNfc_sIso14443AInfo_t; + + +/** \ingroup grp_hal_nfci +* +* \brief Remote Device Reader B RF Gate Information Container +* +* The <em> Reader B structure </em> includes the available information +* related to the discovered ISO14443B remote device. This information +* is updated for every device discovery. +* \note None. +* +*/ +typedef struct phNfc_sIso14443BInfo_t +{ + union phNfc_uAtqBInfo + { + struct phNfc_sAtqBInfo + { + uint8_t Pupi[PHHAL_PUPI_LENGTH]; /**< PUPI information of the TYPE B + Tag Discovered */ + uint8_t AppData[PHHAL_APP_DATA_B_LENGTH]; /**< Application Data of the TYPE B + Tag Discovered */ + uint8_t ProtInfo[PHHAL_PROT_INFO_B_LENGTH]; /**< Protocol Information of the TYPE B + Tag Discovered */ + } AtqResInfo; + uint8_t AtqRes[PHHAL_ATQB_LENGTH]; /**< ATQB Response Information of TYPE B + Tag Discovered */ + } AtqB; + uint8_t HiLayerResp[PHHAL_MAX_ATR_LENGTH]; /**< Higher Layer Response information + in answer to ATRRIB Command for Type B */ + uint8_t HiLayerRespLength; /**< Higher Layer Response length */ + uint8_t Afi; /**< Application Family Identifier of TYPE B + Tag Discovered */ + uint8_t MaxDataRate; /**< Maximum data rate supported by the TYPE B + Tag Discovered */ +} phNfc_sIso14443BInfo_t; + + +/** \ingroup grp_hal_nfci +* +* \brief Remote Device Reader B prime RF Gate Information Container +* +*/ +typedef struct phNfc_sIso14443BPrimeInfo_t +{ + /* TODO: This will be updated later */ + void *BPrimeCtxt; +} phNfc_sIso14443BPrimeInfo_t; + + +/** \ingroup grp_hal_nfci +* +* \brief Remote Device Jewel Reader RF Gate Information Container +* +* The <em> Jewel Reader structure </em> includes the available information +* related to the discovered Jewel remote device. This information +* is updated for every device discovery. +* \note None. +* +*/ +typedef struct phNfc_sJewelInfo_t +{ + uint8_t Uid[PHHAL_MAX_UID_LENGTH]; /**< UID information of the TYPE A + Tag Discovered */ + uint8_t UidLength; /**< UID information length, shall not be greater + than PHHAL_MAX_UID_LENGTH i.e., 10 */ + uint8_t HeaderRom0; /**< Header Rom byte zero */ + uint8_t HeaderRom1; /**< Header Rom byte one */ + +} phNfc_sJewelInfo_t; + + +/** \ingroup grp_hal_nfci +* +* \brief Remote Device Felica Reader RF Gate Information Container +* +* The <em> Felica Reader structure </em> includes the available information +* related to the discovered Felica remote device. This information +* is updated for every device discovery. +* \note None. +* +*/ +typedef struct phNfc_sFelicaInfo_t +{ + uint8_t IDm[(PHHAL_FEL_ID_LEN + 2)]; /**< Current ID of Felica tag */ + uint8_t IDmLength; /**< IDm length, shall not be greater + than PHHAL_FEL_ID_LEN i.e., 8 */ + uint8_t PMm[PHHAL_FEL_PM_LEN]; /**< Current PM of Felica tag */ + uint8_t SystemCode[PHHAL_FEL_SYS_CODE_LEN]; /**< System code of Felica tag */ +} phNfc_sFelicaInfo_t; + + +/** \ingroup grp_hal_nfci +* +* \brief Remote Device Reader 15693 RF Gate Information Container +* +* The <em> Reader A structure </em> includes the available information +* related to the discovered ISO15693 remote device. This information +* is updated for every device discovery. +* \note None. +* +*/ + +typedef struct phNfc_sIso15693Info_t +{ + uint8_t Uid[PHHAL_15693_UID_LENGTH]; /**< UID information of the 15693 + Tag Discovered */ + uint8_t UidLength; /**< UID information length, shall not be greater + than PHHAL_15693_UID_LENGTH i.e., 8 */ + uint8_t Dsfid; /**< DSF information of the 15693 + Tag Discovered */ + uint8_t Flags; /**< Information about the Flags + in the 15693 Tag Discovered */ + uint8_t Afi; /**< Application Family Identifier of + 15693 Tag Discovered */ +} phNfc_sIso15693Info_t; + + +/** \ingroup grp_hal_nfci +* +* \brief NFC Data Rate Supported between the Reader and the Target +* +* The <em> \ref phHalNfc_eDataRate enum </em> lists all the Data Rate +* values to be used to determine the rate at which the data is transmitted +* to the target. +* +* \note None. +*/ + + +/** \ingroup grp_hal_nfci +* +* \brief NFCIP1 Data rates +* +*/ +typedef enum phNfc_eDataRate_t{ + phNfc_eDataRate_106 = 0x00U, + phNfc_eDataRate_212, + phNfc_eDataRate_424, + /* phNfc_eDataRate_848, + phNfc_eDataRate_1696, + phNfc_eDataRate_3392, + phNfc_eDataRate_6784,*/ + phNfc_eDataRate_RFU +} phNfc_eDataRate_t; + + +/** \ingroup grp_hal_nfci +* +* \brief NFCIP1 Gate Information Container +* +* The <em> NFCIP1 structure </em> includes the available information +* related to the discovered NFCIP1 remote device. This information +* is updated for every device discovery. +* \note None. +* +*/ +typedef struct phNfc_sNfcIPInfo_t +{ + /* Contains the random NFCID3I conveyed with the ATR_REQ. + always 10 bytes length + or contains the random NFCID3T conveyed with the ATR_RES. + always 10 bytes length */ + uint8_t NFCID[PHHAL_MAX_UID_LENGTH]; + uint8_t NFCID_Length; + /* ATR_RES = General bytes length, Max length = 48 bytes */ + uint8_t ATRInfo[PHHAL_MAX_ATR_LENGTH]; + uint8_t ATRInfo_Length; + /**< SAK information of the tag discovered */ + uint8_t SelRes; + /**< ATQA information of the tag discovered */ + uint8_t SenseRes[PHHAL_ATQA_LENGTH]; + /**< Is Detection Mode of the NFCIP Target Active */ + uint8_t Nfcip_Active; + /**< Maximum frame length supported by the NFCIP device */ + uint16_t MaxFrameLength; + /**< Data rate supported by the NFCIP device */ + phNfc_eDataRate_t Nfcip_Datarate; + +} phNfc_sNfcIPInfo_t; + + +/** \ingroup grp_hal_nfci +* +* \brief Remote Device Specific Information Container +* +* The <em> Remote Device Information Union </em> includes the available Remote Device Information +* structures. Following the device detected, the corresponding data structure is used. +* +* \note None. +* +*/ +typedef union phNfc_uRemoteDevInfo_t +{ + phNfc_sIso14443AInfo_t Iso14443A_Info; + phNfc_sIso14443BInfo_t Iso14443B_Info; + phNfc_sIso14443BPrimeInfo_t Iso14443BPrime_Info; + phNfc_sNfcIPInfo_t NfcIP_Info; + phNfc_sFelicaInfo_t Felica_Info; + phNfc_sJewelInfo_t Jewel_Info; + phNfc_sIso15693Info_t Iso15693_Info; +} phNfc_uRemoteDevInfo_t; + + +/** \ingroup grp_hal_nfci +* +* \brief RF Device Type Listing +* +* The <em> RF Device Type List </em> is used to identify the type of +* remote device that is discovered/connected. There seperate +* types to identify a Remote Reader (denoted by _PCD) and +* Remote Tag (denoted by _PICC) +* \note None. +* +*/ +typedef enum phNfc_eRFDevType_t +{ + phNfc_eUnknown_DevType = 0x00U, + + /* Specific PCD Devices */ + phNfc_eISO14443_A_PCD, + phNfc_eISO14443_B_PCD, + phNfc_eISO14443_BPrime_PCD, + phNfc_eFelica_PCD, + phNfc_eJewel_PCD, + phNfc_eISO15693_PCD, + /* Generic PCD Type */ + phNfc_ePCD_DevType, + + /* Generic PICC Type */ + phNfc_ePICC_DevType, + /* Specific PICC Devices */ + phNfc_eISO14443_A_PICC, + phNfc_eISO14443_4A_PICC, + phNfc_eISO14443_3A_PICC, + phNfc_eMifare_PICC, + phNfc_eISO14443_B_PICC, + phNfc_eISO14443_4B_PICC, + phNfc_eISO14443_BPrime_PICC, + phNfc_eFelica_PICC, + phNfc_eJewel_PICC, + phNfc_eISO15693_PICC, + + /* NFC-IP1 Device Types */ + phNfc_eNfcIP1_Target, + phNfc_eNfcIP1_Initiator, + + /* Other Sources */ + phNfc_eInvalid_DevType + +} phNfc_eRFDevType_t; + + +/** \ingroup grp_hal_nfci +* +* \brief Remote Device Type Listing +* +* The <em> Remote Device Type List </em> is used to identify the type of +* remote device that is discovered/connected +* \note This is same as RF Device Type List. +* +*/ +typedef phNfc_eRFDevType_t phNfc_eRemDevType_t; + + +/** \ingroup grp_hal_common + * + * + * \brief Common Command Attribute + * + * The <em> Hal Command Union </em> includes each available type of Commands. + * + * \note None. + * + */ +typedef union phNfc_uCommand_t +{ + phNfc_eMifareCmdList_t MfCmd; /**< Mifare command structure. */ + phNfc_eIso14443_4_CmdList_t Iso144434Cmd; /**< ISO 14443-4 command structure. */ + phNfc_eFelicaCmdList_t FelCmd; /**< Felica command structure. */ + phNfc_eJewelCmdList_t JewelCmd; /**< Jewel command structure. */ + phNfc_eIso15693_CmdList_t Iso15693Cmd; /**< ISO 15693 command structure. */ + phNfc_eNfcIP1CmdList_t NfcIP1Cmd; /**< ISO 18092 (NFCIP1) command structure */ +} phNfc_uCmdList_t; + + +/** \ingroup grp_hal_nfci + * + * \brief Remote Device Information Structure + * + * The <em> Remote Device Information Structure </em> holds information about one single Remote + * Device detected by the polling function .\n + * It lists parameters common to all supported remote devices. + * + * \note + * + * \sa \ref phHal4Nfc_ConfigureDiscovery and \ref phHal4Nfc_Connect + * + */ +typedef struct phNfc_sRemoteDevInformation_t +{ + uint8_t SessionOpened; /**< [out] Boolean + * Flag indicating the validity of + * the handle of the remote device. */ + phNfc_eRemDevType_t RemDevType; /**< [out] Remote device type which says that remote + is Reader A or Reader B or NFCIP or Felica or + Reader B Prime or Jewel*/ + phNfc_uRemoteDevInfo_t RemoteDevInfo; /**< Union of available Remote Device. + * \ref phNfc_uRemoteDevInfo_t Information. */ +} phNfc_sRemoteDevInformation_t; + + +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ +/* TARGET STRUCTURES */ + + +/** \ingroup grp_hal_common + * + * \brief Transceive Information Data Structure for sending commands/response + * to the remote device + * + * The <em> Transceive Information Data Structure </em> is used to pass the + * Command, Address (only required for MIFARE) and the send and receive data + * data structure (buffer and length) for communication with remote device + * + * + */ +typedef struct phNfc_sTransceiveInfo_t +{ + phNfc_uCmdList_t cmd; + + /** \internal Address Field required for only Mifare + * Family Proprietary Cards. + * The Address Size is Valid only upto 255 Blocks limit + * i:e for Mifare 4K + */ + uint8_t addr; + phNfc_sData_t sSendData; + phNfc_sData_t sRecvData; +} phNfc_sTransceiveInfo_t; + + +/** \ingroup grp_hal_nfci +* +* \brief Poll Device Information for conifiguring the discovery wheel + Reader and Card Emulation Phases +* +* The <em> \ref phNfc_sPollDevInfo_t enum </em> is used to enable/disable +* phases of the discovery wheel related to specific reader types and +* card emulation phase +* \note Enabling specific Reader technology when NFCIP1 speed is set in the +* phNfc_sADD_Cfg_t is implicitly done in HAL. Use this structure to only +* enable/disable Card Reader Functionality +*/ +typedef struct phNfc_sPollDevInfo_t +{ + unsigned EnableIso14443A : 1; /**< Flag to enable + Reader A discovery */ + unsigned EnableIso14443B : 1; /**< Flag to enable + Reader B discovery */ + unsigned EnableFelica212 : 1; /**< Flag to enable + Felica 212 discovery */ + unsigned EnableFelica424 : 1; /**< Flag to enable + Felica 424 discovery */ + unsigned EnableIso15693 : 1; /**< Flag to enable + ISO 15693 discovery */ + unsigned EnableNfcActive : 1; /**< Flag to enable + Active Mode of NFC-IP discovery. + This is updated internally + based on the NFC-IP speed. + */ + unsigned RFU : 1; /**< Reserved for future use */ + unsigned DisableCardEmulation : 1; /**< Flag to + disable the card emulation */ +} phNfc_sPollDevInfo_t; + + +/** \ingroup grp_hal_nfci +* +* \brief P2P speed for the Initiator +* +* The <em> \ref phNfc_eP2PMode_t enum </em> lists all the NFCIP1 speeds +* to be used for configuring the NFCIP1 discovery +* +* \note None. +*/ +typedef enum phNfc_eP2PMode_t +{ + phNfc_eDefaultP2PMode = 0x00U, + phNfc_ePassive106 = 0x01U, + phNfc_ePassive212 = 0x02U, + phNfc_ePassive424 = 0x04U, + phNfc_eActive = 0x08U, + phNfc_eP2P_ALL = 0x0FU, + phNfc_eInvalidP2PMode = 0xFFU +} phNfc_eP2PMode_t; + + +/** \ingroup grp_hal_common +* +* \brief Identities the type of Notification +* +* This enumeration is used to specify the type of notification notified +* to the upper layer. This classifies the notification into two types +* one for the discovery notifications and the other for all the remaining +* event notifications +* \note None. +*/ +typedef enum phNfc_eNotificationType_t +{ + INVALID_NFC_NOTIFICATION = 0x00U, /* Invalid Notification */ + NFC_DISCOVERY_NOTIFICATION, /* Remote Device Discovery Notification */ + NFC_EVENT_NOTIFICATION /* Event Notification from the other hosts */ +} phNfc_eNotificationType_t; + + +/** \ingroup grp_hal_common +* +* \brief +* +* \note None. +*/ +typedef struct phNfc_sUiccInfo_t +{ + /* AID and Parameter Information is obtained if the + * eventType is NFC_EVT_TRANSACTION. + */ + phNfc_sData_t aid; + phNfc_sData_t param; + +} phNfc_sUiccInfo_t; + + +/** \ingroup grp_hal_nfci +* +* \brief P2P Information for the Initiator +* +* The <em> \ref phNfc_sNfcIPCfg_t </em> holds the P2P related information +* use by the NFC Device during P2P Discovery and connection +* +* \note None. +*/ +typedef struct phNfc_sNfcIPCfg_t +{ + /* ATR_RES = General bytes length, Max length = 48 bytes */ + uint8_t generalBytesLength; + uint8_t generalBytes[PHHAL_MAX_ATR_LENGTH]; + + /* TODO: This will be updated later for any additional params*/ +} phNfc_sNfcIPCfg_t; + + +/** \ingroup grp_hal_common +* +* \brief Discovery Configuration Mode +* +* This enumeration is used to choose the Discovery Configuration +* Mode :- Configure and Start, Stop or Start with last set +* configuration +* \note None. +*/ +typedef enum phNfc_eDiscoveryConfigMode_t +{ + NFC_DISCOVERY_CONFIG = 0x00U,/**< Configure discovery with values + in phNfc_sADD_Cfg_t and start + discovery */ + NFC_DISCOVERY_START, /**< Start Discovery with previously set + configuration */ + NFC_DISCOVERY_STOP, /**< Stop the Discovery */ + NFC_DISCOVERY_RESUME /**< Resume the Discovery with previously + * set configuration. + * This is valid only when the Target + * is not connected. + */ +}phNfc_eDiscoveryConfigMode_t; + +/** \ingroup grp_hal_common +* +* \brief Target or Tag Release Mode +* +* This enumeration defines various modes of releasing an acquired target +* or tag. +* \note None. +*/ +typedef enum phNfc_eReleaseType_t +{ + NFC_INVALID_RELEASE_TYPE =0x00U,/**<Invalid release type */ + NFC_DISCOVERY_RESTART, /**< Release current target and + restart discovery within same technology*/ + NFC_DISCOVERY_CONTINUE, /**< Release current target and continue + discovery with next technology in the wheel */ + NFC_SMARTMX_RELEASE /**< Release SmartMX from wired mode to previous mode + (Virtual or Off) */ +} phNfc_eReleaseType_t; + +/** \ingroup grp_hal_common +* +* \brief Poll configuration structure +* +* The <em> Poll configuration structure </em> holds information about the +* enabling the the type of discovery required by the application. This +* structure is the input parameter for the discovery call +* +* \note All members of this structure are input parameters [out]. +* +* \sa \ref phNfc_eP2PMode_t +* +*/ +typedef struct phNfc_sADD_Cfg_t +{ + union + { + phNfc_sPollDevInfo_t PollCfgInfo; /**< Enable/Disable Specific + Reader Functionality and + Card Emulation */ + unsigned PollEnabled; /** Can be used to set polling 'Off' + by setting PollEnabled to zero */ + + } PollDevInfo; + uint32_t Duration; /**< Duration of virtual or idle + period in microseconds in the step size + of 48 microseconds.If duration is set less + than 48 microseconds then default value is + used.For more details please refer PN 544 + user manual*/ + uint8_t NfcIP_Mode ; /**< Select the P2P + speeds using phNfc_eP2PMode_t type. + This is used to enable NFC-IP Discovery + The related Reader Type will be implicitly + selected */ + uint8_t NfcIP_Tgt_Disable; /**< Flag to + disable the NFCIP1 TARGET */ +} phNfc_sADD_Cfg_t; + +/*@}*/ + +#endif /* PHNFCTYPES */ + |