summaryrefslogtreecommitdiffstats
path: root/src/phHciNfc_Generic.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/phHciNfc_Generic.h')
-rw-r--r--src/phHciNfc_Generic.h1234
1 files changed, 1234 insertions, 0 deletions
diff --git a/src/phHciNfc_Generic.h b/src/phHciNfc_Generic.h
new file mode 100644
index 0000000..5410325
--- /dev/null
+++ b/src/phHciNfc_Generic.h
@@ -0,0 +1,1234 @@
+/*
+ * 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 phHciNfc_Generic.h *
+* \brief Common HCI Header for the Generic HCI Management. *
+* *
+* *
+* Project: NFC-FRI-1.1 *
+* *
+* $Date: Mon Mar 29 17:34:47 2010 $ *
+* $Author: ing04880 $ *
+* $Revision: 1.73 $ *
+* $Aliases: 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 PHHCINFC_GENERIC_H
+#define PHHCINFC_GENERIC_H
+
+/*@}*/
+
+
+/**
+ * \name HCI
+ *
+ * File: \ref phHciNfc_Generic.h
+ *
+ */
+/*@{*/
+#define PHHCINFC_GENERIC_FILEREVISION "$Revision: 1.73 $" /**< \ingroup grp_file_attributes */
+#define PHHCINFC_GENERIC_FILEALIASES "$Aliases: 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 */
+/*@}*/
+/*
+
+################################################################################
+***************************** Header File Inclusion ****************************
+################################################################################
+*/
+
+#include <phNfcIoctlCode.h>
+#include<phNfcInterface.h>
+#include <phHciNfc.h>
+
+/*
+################################################################################
+****************************** Macro Definitions *******************************
+################################################################################
+*/
+
+#if defined(DEBUG) /*|| defined(_DEBUG) */
+#define HCI_TRACE
+#endif
+
+#define Trace_buffer phOsalNfc_DbgTraceBuffer
+
+/* HCI TRACE Macros */
+#if defined(HCI_TRACE)&& !defined(SILENT_HCI)
+#include <phOsalNfc.h>
+#include <stdio.h>
+extern char phOsalNfc_DbgTraceBuffer[];
+#define MAX_TRACE_BUFFER 150
+/* #define HCI_PRINT( str ) phOsalNfc_DbgTrace(str) */
+#define HCI_PRINT( str ) phOsalNfc_DbgString(str)
+#define HCI_DEBUG(str, arg) \
+ { \
+ snprintf(Trace_buffer,MAX_TRACE_BUFFER,str,arg); \
+ phOsalNfc_DbgString(Trace_buffer); \
+ }
+#define HCI_PRINT_BUFFER(msg,buf,len) \
+ { \
+ snprintf(Trace_buffer,MAX_TRACE_BUFFER,"\n\t %s:",msg); \
+ phOsalNfc_DbgString(Trace_buffer); \
+ phOsalNfc_DbgTrace(buf,len); \
+ phOsalNfc_DbgString("\r"); \
+ \
+ }
+#else
+#include <phDbgTrace.h>
+#if defined(PHDBG_TRACES) && !defined(HCI_TRACE)
+#define HCI_PRINT( str ) PHDBG_INFO(str)
+#define HCI_DEBUG(str, arg)
+#define HCI_PRINT_BUFFER(msg,buf,len)
+#else
+#define HCI_PRINT( str )
+#define HCI_DEBUG(str, arg)
+#define HCI_PRINT_BUFFER(msg,buf,len)
+#endif /* #if defined(PHDBG_TRACES) */
+/* #if defined(PHDBG_INFO) && defined (PHDBG_CRITICAL_ERROR) */
+
+#endif /* #if defined(HCI_TRACE) */
+
+#define ZERO 0x00U
+
+
+#ifdef MASK_BITS
+#define BYTE_SIZE 0x08U
+
+/* HCI GET and SET BITS Macros */
+#define MASK_BITS8(p,l) \
+ ( ( (((uint8_t)(p))+((uint8_t)(l)))<=BYTE_SIZE )? \
+ (~(0xFFU<<((p)+(l))) & (0xFFU<<(p))):(0U) )
+#ifdef MASK_BITS
+#define GET_BITS8(num,p,l) \
+ ( ((((uint8_t)(p))+((uint8_t)(l)))<=BYTE_SIZE)? \
+ (((num)& (MASK_BITS8(p,l)))>>(p)):(0U) )
+#else
+#define GET_BITS8(num,p,l) \
+ ( ((((p)+(l))<=BYTE_SIZE))? \
+ (((num)>>(p))& (~(0xFFU<<(l)))):(0U) )
+#endif
+#define SET_BITS8(num,p,l,val) \
+ ( ((((uint8_t)(p))+((uint8_t)(l)))<=BYTE_SIZE)? \
+ (((num)& (~MASK_BITS8(p,l)))|((val)<<(p))):(0U))
+
+#endif
+
+/** \ingroup grp_hci_retval
+ The Corresponding HCI Gate Not Supported.
+ */
+#define NFCSTATUS_HCI_GATE_NOT_SUPPORTED (0x71U)
+
+/** \ingroup grp_hci_retval
+ Invalid Command from the HCI Layer
+ */
+#define NFCSTATUS_INVALID_HCI_COMMAND (0x72U)
+
+/** \ingroup grp_hci_retval
+ HCI Command not supported . */
+#define NFCSTATUS_COMMAND_NOT_SUPPORTED (0x73U)
+
+/** \ingroup grp_hci_retval
+ Invalide Response from the HCI Layer
+ */
+#define NFCSTATUS_INVALID_HCI_RESPONSE (0x74U)
+
+/** \ingroup grp_hci_retval
+ The Invalid Instruction type (Neither Command/Response nor Event ).
+ */
+#define NFCSTATUS_INVALID_HCI_INSTRUCTION (0x75U)
+
+/** \ingroup grp_hci_retval
+ The Invalid Instruction type (Neither Command/Response nor Event ).
+ */
+#define NFCSTATUS_INVALID_HCI_INFORMATION (0x76U)
+
+/** \ingroup grp_hci_retval
+ The Invalid HCI Sequence.
+ */
+#define NFCSTATUS_INVALID_HCI_SEQUENCE (0x78U)
+
+
+/** \ingroup grp_hci_retval
+ The HCI Error Response with Response code.
+ */
+#define NFCSTATUS_HCI_RESPONSE(code) (code)
+
+
+/* Length of the HCP and the HCP Message Header in Bytes */
+#define HCP_HEADER_LEN 0x02U
+
+/* Length of the HCP Message Header in Bytes */
+#define HCP_MESSAGE_LEN 0x01U
+
+/* HCP Header Chaining Bit Offset */
+#define HCP_CHAINBIT_OFFSET 0x07U
+/* HCP Header Chaining Bit Length */
+#define HCP_CHAINBIT_LEN 0x01U
+
+/* Chaining Bit Values */
+#define HCP_CHAINBIT_DEFAULT 0x01U
+#define HCP_CHAINBIT_BEGIN 0x00U
+#define HCP_CHAINBIT_END HCP_CHAINBIT_DEFAULT
+
+/* HCP Header Pipe ID Offset */
+#define HCP_PIPEID_OFFSET 0x00U
+/* HCP Header Pipe ID Length */
+#define HCP_PIPEID_LEN 0x07U
+
+/* HCP Message Header Type Offset */
+#define HCP_MSG_TYPE_OFFSET 0x06U
+/* HCP Message Header Type Length */
+#define HCP_MSG_TYPE_LEN 0x02U
+
+/* HCP Message Type Values */
+#define HCP_MSG_TYPE_COMMAND 0x00U
+#define HCP_MSG_TYPE_EVENT 0x01U
+#define HCP_MSG_TYPE_RESPONSE 0x02U
+#define HCP_MSG_TYPE_RESERVED 0x03U
+
+/* HCP Message Header Instruction Offset */
+#define HCP_MSG_INSTRUCTION_OFFSET 0x00U
+/* HCP Message Header Instruction Length */
+#define HCP_MSG_INSTRUCTION_LEN 0x06U
+/* HCP Invalid Message Instruction */
+#define HCP_MSG_INSTRUCTION_INVALID 0x3FU
+
+
+/* HCP Packet Zero Length */
+#define HCP_ZERO_LEN 0x00U
+
+
+
+ /** \internal Generic HCI Commands for all the Gates */
+#define ANY_SET_PARAMETER 0x01U
+#define ANY_GET_PARAMETER 0x02U
+#define ANY_OPEN_PIPE 0x03U
+#define ANY_CLOSE_PIPE 0x04U
+#define ANY_GENERIC_CMD_RFU_B 0x05U
+#define ANY_GENERIC_CMD_RFU_E 0x0FU
+
+/*
+ * 0x05-0x0F is Reserved for Future Use
+ */
+
+/** \internal HCI Administration Com mands for the Management of the Host Network */
+
+#define ADM_CREATE_PIPE 0x10U
+#define ADM_DELETE_PIPE 0x11U
+#define ADM_NOTIFY_PIPE_CREATED 0x12U
+#define ADM_NOTIFY_PIPE_DELETED 0x13U
+#define ADM_CLEAR_ALL_PIPE 0x14U
+#define ADM_NOTIFY_ALL_PIPE_CLEARED 0x15U
+#define ADM_CMD_RFU_B 0x16U
+#define ADM_CMD_RFU_E 0x3FU
+
+#define MSG_INSTRUCTION_UNKNWON 0x3FU
+
+ /*
+ * 0x16-0x3F is Reserved for Future Use
+ */
+
+
+/** \internal HCI Generic Responses from the Gates */
+#define ANY_OK 0x00U
+#define ANY_E_NOT_CONNECTED 0x01U
+#define ANY_E_CMD_PAR_UNKNOWN 0x02U
+#define ANY_E_NOK 0x03U
+#define ANY_E_PIPES_FULL 0x04U
+#define ANY_E_REG_PAR_UNKNOWN 0x05U
+#define ANY_E_PIPE_NOT_OPENED 0x06U
+#define ANY_E_CMD_NOT_SUPPORTED 0x07U
+#define ANY_E_INHIBITED 0x08U
+#define ANY_E_TIMEOUT 0x09U
+#define ANY_E_REG_ACCESS_DENIED 0x0AU
+#define ANY_E_PIPE_ACCESS_DENIED 0x0BU
+
+/* Response Error Code for RF Reader Gate */
+#define WR_RF_ERROR 0x10U
+
+/*
+* 0x08, 0x0B-0x3F is Reserved for Future Use
+*/
+
+
+/** \internal HCI Generic Events from the Gates */
+#define EVT_HCI_END_OF_OPERATION 0x01
+#define EVT_POST_DATA 0x02
+#define EVT_HOT_PLUG 0x03
+
+
+/* Maximum Buffer Size for the HCI Data */
+#define PHHCINFC_MAX_BUFFERSIZE (PHHAL_MAX_DATASIZE + 0x50U)
+
+#define PHHCINFC_MAX_OPENPIPE 0x6FU
+#define PHHCINFC_MAX_PIPE 0x6FU
+#define PHHCINFC_MIN_PIPE 0x02U
+
+
+/* Maximum Payload Length of HCI. */
+#define PHHCINFC_MAX_PACKET_DATA 0x1CU
+#define PHHCINFC_MAX_HCP_LEN PHHCINFC_MAX_PACKET_DATA + 1
+
+
+
+/* Maximum Payload Length of HCI. */
+
+
+/*
+################################################################################
+******************** Enumeration and Structure Definition **********************
+################################################################################
+*/
+#if 1
+typedef NFCSTATUS (*pphHciNfc_Pipe_Receive_t) (
+ void *pContext,
+ void *pHwRef,
+ uint8_t *data,
+#ifdef ONE_BYTE_LEN
+ uint8_t length
+#else
+ uint16_t length
+#endif
+ );
+#else
+
+typedef pphNfcIF_Transact_t pphHciNfc_Pipe_Receive_t;
+
+#endif
+
+/** \defgroup grp_hci_nfc HCI Component
+ *
+ *
+ */
+
+typedef enum phHciNfc_HostID {
+ phHciNfc_HostControllerID = 0x00U,
+ phHciNfc_TerminalHostID = 0x01U,
+ phHciNfc_UICCHostID = 0x02U
+/*
+ phHciNfc_HostID_RFU_B = 0x03U,
+ phHciNfc_HostID_RFU_E = 0xBFU,
+ phHciNfc_HostIDProprietary_B = 0xC0U,
+ phHciNfc_HostIDProprietary_E = 0xFFU
+*/
+}phHciNfc_HostID_t;
+
+
+typedef enum phHciNfc_GateID{
+ phHciNfc_AdminGate = 0x00U,
+/*
+ phHciNfc_evGateIDProprietary_B = 0x01U,
+ phHciNfc_evGateIDProprietary_E = 0x03U,
+*/
+ phHciNfc_LoopBackGate = 0x04U,
+ phHciNfc_IdentityMgmtGate = 0x05U,
+ phHciNfc_LinkMgmtGate = 0x06U,
+/*
+ phHciNfc_GateID_RFU_B = 0x07U,
+ phHciNfc_GateID_RFU_E = 0x0FU,
+*/
+
+/* TODO: Fillin Other Gate Information */
+ /* ETSI HCI Specific RF Reader Gates */
+ phHciNfc_RFReaderAGate = 0x13,
+ phHciNfc_RFReaderBGate = 0x11,
+
+ /* Proprietary Reader Gate */
+ phHciNfc_ISO15693Gate = 0x12,
+ phHciNfc_RFReaderFGate = 0x14,
+ phHciNfc_JewelReaderGate = 0x15,
+
+ /* ETSI HCI Card RF Gates */
+ phHciNfc_CETypeBGate = 0x21,
+ phHciNfc_CETypeBPrimeGate = 0x22,
+ phHciNfc_CETypeAGate = 0x23,
+ phHciNfc_CETypeFGate = 0x24,
+
+ /* NFC-IP1 Gates */
+ phHciNfc_NFCIP1InitRFGate = 0x30,
+ phHciNfc_NFCIP1TargetRFGate = 0x31,
+
+ /* ETSI HCI Connectivity Gate */
+ phHciNfc_ConnectivityGate = 0x41,
+
+
+ /* Device Configuration Gates */
+ phHciNfc_PN544MgmtGate = 0x90,
+ phHciNfc_HostCommGate = 0x91,
+ phHciNfc_GPIOGate = 0x92,
+ phHciNfc_RFMgmtGate = 0x93,
+ phHciNfc_PollingLoopGate = 0x94,
+ phHciNfc_DownloadMgmtGate = 0x95,
+
+ /* Card Emulation Managment Gates */
+ phHciNfc_SwpMgmtGate = 0xA0,
+ phHciNfc_NfcWIMgmtGate = 0xA1,
+ phHciNfc_UnknownGate = 0xFF
+
+}phHciNfc_GateID_t;
+
+
+typedef enum phHciNfc_PipeID{
+ HCI_LINKMGMT_PIPE_ID = 0x00U,
+ HCI_ADMIN_PIPE_ID = 0x01U,
+ HCI_DYNAMIC_PIPE_ID = 0x02U,
+ HCI_RESERVED_PIPE_ID = 0x70U,
+ HCI_UNKNOWN_PIPE_ID = PHHCINFC_MAX_PIPE
+/*
+ phHciNfc_evOtherGatePipeID_B = 0x02U,
+ phHciNfc_evOtherGatePipeID_E = 0x6FU,
+ phHciNfc_evGatePipeID_RFU_B = 0x70U,
+ phHciNfc_evGatePipeID_RFU_E = 0x7FU,
+*/
+}phHciNfc_PipeID_t;
+
+
+typedef enum phHciNfc_eState {
+ hciState_Reset = 0x00U,
+ hciState_Initialise,
+ hciState_Test,
+ hciState_Config,
+ hciState_IO,
+ hciState_Select,
+ hciState_Listen,
+ hciState_Activate,
+ hciState_Reactivate,
+ hciState_Connect,
+ hciState_Transact,
+ hciState_Disconnect,
+ hciState_Presence,
+ hciState_Release,
+ hciState_Unknown
+}phHciNfc_eState_t;
+
+typedef enum phHciNfc_eMode {
+ hciMode_Reset = 0x00U,
+ hciMode_Session,
+ hciMode_Override,
+ hciMode_Test,
+ hciMode_Unknown
+}phHciNfc_eMode_t;
+
+
+typedef enum phHciNfc_eSeq{
+ /* HCI Admin Sequence */
+ ADMIN_INIT_SEQ = 0x00U,
+ ADMIN_SESSION_SEQ,
+ ADMIN_CE_SEQ,
+ ADMIN_REL_SEQ,
+ ADMIN_EVT_HOTPLUG_SEQ,
+
+ /* HCI Link Management Sequence */
+ LINK_MGMT_INIT_SEQ,
+ LINK_MGMT_REL_SEQ,
+
+ /* HCI Identity Management Sequence */
+ IDENTITY_INIT_SEQ,
+ IDENTITY_INFO_SEQ,
+ IDENTITY_REL_SEQ,
+
+ /* HCI Polling Loop Sequence */
+ PL_INIT_SEQ,
+ PL_DURATION_SEQ,
+ PL_CONFIG_PHASE_SEQ,
+ PL_TGT_DISABLE_SEQ,
+ PL_RESTART_SEQ,
+ PL_STOP_SEQ,
+ PL_REL_SEQ,
+
+ /* HCI Device Management Sequence */
+ DEV_INIT_SEQ,
+ DEV_CONFIG_SEQ,
+ DEV_REL_SEQ,
+
+ /* HCI Reader Management Sequence */
+ READER_MGMT_INIT_SEQ,
+ READER_ENABLE_SEQ,
+ READER_SELECT_SEQ,
+ READER_REACTIVATE_SEQ,
+ READER_SW_AUTO_SEQ,
+ READER_PRESENCE_CHK_SEQ,
+ READER_UICC_DISPATCH_SEQ,
+ READER_DESELECT_SEQ,
+ READER_RESELECT_SEQ,
+ READER_DISABLE_SEQ,
+ READER_MGMT_REL_SEQ,
+
+ /* HCI NFC-IP1 Sequence */
+ NFCIP1_INIT_SEQ,
+ INITIATOR_SPEED_SEQ,
+ INITIATOR_GENERAL_SEQ,
+ TARGET_GENERAL_SEQ,
+ TARGET_SPEED_SEQ,
+ NFCIP1_REL_SEQ,
+
+ /* HCI Emulation Management Sequence */
+ EMULATION_INIT_SEQ,
+ EMULATION_SWP_SEQ,
+ EMULATION_CONFIG_SEQ,
+ EMULATION_REL_SEQ,
+
+ HCI_END_SEQ,
+ HCI_INVALID_SEQ
+} phHciNfc_eSeq_t;
+
+
+
+typedef enum phHciNfc_eSeqType{
+ RESET_SEQ = 0x00U,
+ INIT_SEQ,
+ UPDATE_SEQ,
+ INFO_SEQ,
+ CONFIG_SEQ,
+ REL_SEQ,
+ END_SEQ
+} phHciNfc_eSeqType_t;
+
+
+typedef enum phHciNfc_eConfigType{
+ INVALID_CFG = 0x00U,
+ POLL_LOOP_CFG,
+ SMX_WI_CFG,
+ SMX_WI_MODE,
+ UICC_SWP_CFG,
+ SWP_EVT_CFG,
+ SWP_PROTECT_CFG,
+ NFC_GENERAL_CFG,
+ NFC_TARGET_CFG,
+ NFC_CE_A_CFG,
+ NFC_CE_B_CFG
+} phHciNfc_eConfigType_t;
+
+
+typedef struct phHciNfc_HCP_Message{
+ /** \internal Identifies the Type and Kind of Instruction */
+ uint8_t msg_header;
+ /** \internal Host Controller Protocol (HCP) Packet Message Payload */
+ uint8_t payload[PHHCINFC_MAX_PACKET_DATA - 1];
+}phHciNfc_HCP_Message_t;
+
+
+typedef struct phHciNfc_HCP_Packet{
+ /** \internal Chaining Information and Pipe Identifier */
+ uint8_t hcp_header;
+ /** \internal Host Controller Protocol (HCP) Packet Message or Payload */
+ union
+ {
+ /** \internal Host Controller Protocol (HCP) Packet Message */
+ phHciNfc_HCP_Message_t message;
+ /** \internal Host Controller Protocol (HCP) Packet Payload */
+ uint8_t payload[PHHCINFC_MAX_PACKET_DATA];
+ }msg;
+}phHciNfc_HCP_Packet_t;
+
+
+
+typedef struct phHciNfc_Gate_Info{
+ /** \internal HCI Host Identifier */
+ uint8_t host_id;
+ /** \internal HCI Gate Identifier */
+ uint8_t gate_id;
+}phHciNfc_Gate_Info_t;
+
+
+typedef struct phHciNfc_Pipe_Params{
+ /** \internal HCI Source Gate Information for the pipe */
+ phHciNfc_Gate_Info_t source;
+ /** \internal HCI Destination Gate Information for the pipe */
+ phHciNfc_Gate_Info_t dest;
+ /** \internal HCI Pipe Identifier */
+ uint8_t pipe_id;
+}phHciNfc_Pipe_Params_t;
+
+
+typedef struct phHciNfc_Pipe_Info{
+ /** \internal Structure containing the created dynamic pipe information */
+ phHciNfc_Pipe_Params_t pipe;
+ /** \internal Status of the previous command sent to this pipe */
+ NFCSTATUS prev_status;
+ /** \internal previous message type Sent to this pipe */
+ uint8_t sent_msg_type;
+ /** \internal Message type Received in this pipe */
+ uint8_t recv_msg_type;
+ /** \internal previous message sent to this pipe */
+ uint8_t prev_msg;
+ /** \internal Index of the previous Set/Get Parameter command
+ * sent to this pipe */
+ uint8_t reg_index;
+ /** \internal length of Parameter of the Set/Get Parameter
+ * command sent to this pipe */
+ uint16_t param_length;
+ /** \internal Parameter of the Set/Get Parameter command
+ * sent to this pipe */
+ void *param_info;
+ /** \internal Pointer to a Pipe specific Receive Response function */
+ pphHciNfc_Pipe_Receive_t recv_resp;
+ /** \internal Pointer to a Pipe specific Receive Event function */
+ pphHciNfc_Pipe_Receive_t recv_event;
+ /** \internal Pointer to a Pipe specific Receive Command function */
+ pphHciNfc_Pipe_Receive_t recv_cmd;
+}phHciNfc_Pipe_Info_t;
+
+
+typedef struct phHciNfc_sContext{
+ /** \internal HCI Layer Pointer from the upper layer for
+ lower layer function registration */
+ phNfcLayer_sCfg_t *p_hci_layer;
+ /** \internal Pointer to the upper layer context */
+ void *p_upper_context;
+ /** \internal Pointer to the Hardware Reference Sturcture */
+ phHal_sHwReference_t *p_hw_ref;
+ /** \internal Pointer to the upper layer notification callback function */
+ pphNfcIF_Notification_CB_t p_upper_notify;
+ /** \internal Structure to store the lower interface operations */
+ phNfc_sLowerIF_t lower_interface;
+ /** \internal Execution Sequence using the HCI Context */
+ volatile phHciNfc_eSeq_t hci_seq;
+
+ /** \internal State of the HCI Context */
+ volatile phNfc_sState_t hci_state;
+
+ /** \internal Mode of HCI Initialisation */
+ phHciNfc_Init_t init_mode;
+
+ /** \internal Mode of HCI Initialisation */
+ void *p_io_params;
+
+ /** \internal HCI Configuration Type */
+ phHciNfc_eConfigType_t config_type;
+ /** \internal HCI SmartMX Mode Configuration */
+ phHal_eSmartMX_Mode_t smx_mode;
+ /** \internal HCI Configuration Information */
+ void *p_config_params;
+
+ /** \internal Current RF Reader/Emulation Gate in Use */
+ phHal_eRFDevType_t host_rf_type;
+
+ /** \internal Connected Target Information */
+ phHal_sRemoteDevInformation_t *p_target_info;
+
+ /** \internal Information of all the pipes created and opened */
+ phHciNfc_Pipe_Info_t *p_pipe_list[PHHCINFC_MAX_PIPE+1];
+
+ /** \internal Tag */
+ phHciNfc_XchgInfo_t *p_xchg_info;
+
+ /** \internal Information of the HCI Gates */
+ /** \internal HCI Admin Management Gate Information */
+ void *p_admin_info;
+ /** \internal HCI Link Management Gate Information */
+ void *p_link_mgmt_info;
+ /** \internal HCI Identity Management Gate Information */
+ void *p_identity_info;
+ /** \internal HCI Polling Loop Gate Information */
+ void *p_poll_loop_info;
+ /** \internal HCI NFC Device Management Information */
+ void *p_device_mgmt_info;
+ /** \internal HCI RF Reader Gates Management Information */
+ void *p_reader_mgmt_info;
+ /** \internal HCI Card Application Gates and Emulation
+ Information */
+ void *p_emulation_mgmt_info;
+ /** \internal HCI RF Reader A Gate Information */
+ void *p_reader_a_info;
+#ifdef TYPE_B
+ /** \internal HCI RF Reader B Gate Information */
+ void *p_reader_b_info;
+#endif
+#ifdef TYPE_FELICA
+ /** \internal HCI Felica Reader Gate Information */
+ void *p_felica_info;
+#endif
+#ifdef TYPE_JEWEL
+ /** \internal HCI Jewel Reader Gate Information */
+ void *p_jewel_info;
+#endif
+#ifdef TYPE_ISO15693
+ /** \internal HCI ISO15693 Reader Gate Information */
+ void *p_iso_15693_info;
+#endif
+
+#ifdef ENABLE_P2P
+ /** \internal HCI NFC-IP1 Peer to Peer Information */
+ void *p_nfcip_info;
+#endif
+ /** \internal HCI Secure Element Management Information */
+ void *p_wi_info;
+ /** \internal HCI UICC Information */
+ void *p_uicc_info;
+ /** \internal HCI SWP Information */
+ void *p_swp_info;
+#ifdef HOST_EMULATION
+ /** \internal HCI Card Emulation A Gate Information */
+ void *p_ce_a_info;
+ /** \internal HCI Card Emulation B Gate Information */
+ void *p_ce_b_info;
+#endif
+
+ /** \internal HCI Packet Data to be sent to the lower layer */
+ phHciNfc_HCP_Packet_t tx_packet;
+ /** \internal HCI Packet Data to be received from the lower layer */
+ phHciNfc_HCP_Packet_t rx_packet;
+
+ /** \internal Previous Status (To Store the Error Status ) */
+ NFCSTATUS error_status;
+
+ /** \internal Pointer to HCI Send Buffer */
+ uint8_t send_buffer[PHHCINFC_MAX_BUFFERSIZE];
+ /** \internal Pointer to HCI Receive Buffer */
+ uint8_t recv_buffer[PHHCINFC_MAX_BUFFERSIZE];
+
+ /** \internal Total Number of bytes to be Sent */
+ volatile uint16_t tx_total;
+ /** \internal Number of bytes Remaining to be Sent */
+ volatile uint16_t tx_remain;
+ /** \internal Number of bytes sent */
+ volatile uint16_t tx_sent;
+
+ volatile uint16_t rx_index;
+
+ /** \internal Total Number of bytes received */
+ volatile uint16_t rx_total;
+ /** \internal Number of bytes received */
+ volatile uint16_t rx_recvd;
+ /** \internal Index of the received data in the
+ * response packet
+ */
+
+ /** \internal Send HCP Chaining Information */
+ volatile uint8_t tx_hcp_chaining;
+ /** \internal Send HCP Fragment Index */
+ volatile uint16_t tx_hcp_frgmnt_index;
+
+ /** \internal Receive HCP Chaining Information */
+ volatile uint8_t rx_hcp_chaining;
+ /** \internal Receive HCP Fragment Index */
+ volatile uint16_t rx_hcp_frgmnt_index;
+
+ /** \internal The Device under Test */
+ volatile uint8_t hci_mode;
+ /** \internal Wait for Response if Response is Pending */
+ volatile uint8_t response_pending;
+ /** \internal Notify the Event if Notifcation is Pending */
+ volatile uint8_t event_pending;
+
+ /** \internal Pending Release of the detected Target */
+ uint8_t target_release;
+
+}phHciNfc_sContext_t;
+
+/*
+################################################################################
+*********************** Function Prototype Declaration *************************
+################################################################################
+*/
+
+
+/**
+ *
+ * \ingroup grp_hci_nfc
+ *
+ * The phHciNfc_Receive function receives the HCI Events or Response from the
+ * corresponding peripheral device, described by the HCI Context Structure.
+ *
+ * \param[in] psContext psContext is the context of
+ * the HCI Layer.
+ * \param[in] pHwRef pHwRef is the Information of
+ * the Device Interface Link .
+ * \param[out] pdata Pointer to the response buffer that
+ * receives the response read.
+ * \param[in] length Variable that receives
+ * the number of bytes read.
+ *
+ * \retval NFCSTATUS_PENDING Data successfully read.
+ * \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters
+ * could not be interpreted properly.
+ * \retval Other errors Other related errors
+ *
+ */
+
+extern
+NFCSTATUS
+phHciNfc_Receive(
+ void *psContext,
+ void *pHwRef,
+ uint8_t *pdata,
+#ifdef ONE_BYTE_LEN
+ uint8_t length
+#else
+ uint16_t length
+#endif
+ );
+
+/**
+ * \ingroup grp_hci_nfc
+ *
+ * The phHciNfc_Send_Complete function acknowledges the completion of the HCI
+ * Commands sent to the device.
+ *
+ * \param[in] psContext psContext is the context of
+ * the HCI Layer.
+ * \param[in] pHwRef pHwRef is the Information of
+ * the Device Interface Link .
+ * \param[in] pInfo Transaction information like
+ * status and length after the
+ * completion of the send.
+ *
+ * \retval NONE.
+ *
+ */
+
+extern
+void
+phHciNfc_Send_Complete (
+ void *psContext,
+ void *pHwRef,
+ phNfc_sTransactionInfo_t *pInfo
+ );
+
+/**
+ * \ingroup grp_hci_nfc
+ *
+ * The phHciNfc_Receive_Complete function acknowledges the completion of the HCI
+ * Event Information or Response received from the device.
+ *
+ * \param[in] psContext psContext is the context of
+ * the HCI Layer.
+ * \param[in] pHwRef pHwRef is the Information of
+ * the Device Interface Link .
+ * \param[in] pInfo Transaction information like status
+ * data and length after the completely
+ * receiving the response .
+ * \retval NONE.
+ *
+ *
+ */
+
+extern
+void
+phHciNfc_Receive_Complete (
+ void *psContext,
+ void *pHwRef,
+ phNfc_sTransactionInfo_t *pInfo
+ );
+
+/**
+ * \ingroup grp_hci_nfc
+ *
+ * The phHciNfc_Notify_Event function notifies the occurence of the HCI
+ * Event from the device.
+ *
+ * \param[in] psContext psContext is the context of
+ * the HCI Layer.
+ * \param[in] pHwRef pHwRef is the Information of
+ * the Device Interface Link .
+ * \param[in] type reason returned for the notification to
+ * the HCI.
+ * \param[in] pInfo Notification information like status
+ * data,length etc from the lower layer
+ * to the HCI Layer.
+ * \retval NONE.
+ *
+ */
+
+extern
+void
+phHciNfc_Notify_Event(
+ void *psContext,
+ void *pHwRef,
+ uint8_t type,
+ void *pInfo
+ );
+
+/**
+ * \ingroup grp_hci_nfc
+ *
+ * The phHciNfc_Tag_Notify function notifies the the upper layer
+ * with the Tag Specific Notifications .
+ *
+ * \param[in] psContext psContext is the context of
+ * the HCI Layer.
+ * \param[in] pHwRef pHwRef is the Information of
+ * the Device Interface Link .
+ * \param[in] type reason returned for the notification to
+ * the HCI.
+ * \param[in] pInfo Notification information like status
+ * data,length etc from the lower layer
+ * to the HCI Layer.
+ * \retval NONE.
+ *
+ */
+extern
+void
+phHciNfc_Tag_Notify(
+ phHciNfc_sContext_t *psHciContext,
+ void *pHwRef,
+ uint8_t type,
+ void *pInfo
+ );
+
+/**
+ * \ingroup grp_hci_nfc
+ *
+ * The phHciNfc_Tag_Notify function notifies the the upper layer
+ * with the Tag Specific Notifications .
+ *
+ * \param[in] psContext psContext is the context of
+ * the HCI Layer.
+ * \param[in] pHwRef pHwRef is the Information of
+ * the Device Interface Link .
+ * \param[in] type reason returned for the notification to
+ * the HCI.
+ * \param[in] pInfo Notification information like status
+ * data,length etc from the lower layer
+ * to the HCI Layer.
+ * \retval NONE.
+ *
+ */
+
+extern
+void
+phHciNfc_Target_Select_Notify(
+ phHciNfc_sContext_t *psHciContext,
+ void *pHwRef,
+ uint8_t type,
+ void *pInfo
+ );
+
+
+/**
+ * \ingroup grp_hci_nfc
+ *
+ * The phHciNfc_Transceive_Notify function notifies the the upper layer
+ * with the after the transceive operation.
+ *
+ * \param[in] psContext psContext is the context of
+ * the HCI Layer.
+ * \param[in] pHwRef pHwRef is the Information of
+ * the Device Interface Link .
+ * \param[in] type reason returned for the notification to
+ * the HCI.
+ * \param[in] pInfo Notification information like status
+ * data,length etc from the lower layer
+ * to the HCI Layer.
+ * \retval NONE.
+ *
+ */
+extern
+void
+phHciNfc_Transceive_Notify(
+ phHciNfc_sContext_t *psHciContext,
+ void *pHwRef,
+ uint8_t type,
+ void *pInfo
+ );
+
+/**
+ * \ingroup grp_hci_nfc
+ *
+ * The phHciNfc_Notify function calls the upper layer notification callback.
+ *
+ * \param[in] pUpperNotify pUpperNotify is the notification
+ * callback of the upper HAL Layer.
+ * \param[in] pUpperContext pUpperContext is the context of
+ * the upper HAL Layer.
+ * \param[in] pHwRef pHwRef is the Information of
+ * the Device Interface Link .
+ * \param[in] type type of the notification to
+ * the upper HAL layer.
+ * \param[in] pInfo completion information returned
+ * to the Upper HAL Layer.
+ * NFCSTATUS_SUCCESS Notification successfully completed .
+ * NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters
+ * could not be interpreted properly.
+ * Other errors Errors related to the HCI or lower layers
+ *
+ * \retval NONE.
+ *
+ */
+
+extern
+void
+phHciNfc_Notify(
+ pphNfcIF_Notification_CB_t p_upper_notify,
+ void *p_upper_context,
+ void *pHwRef,
+ uint8_t type,
+ void *pInfo
+ );
+
+/**
+ * \ingroup grp_hci_nfc
+ *
+ * The phHciNfc_Release_Notify function Releases HCI and notifies
+ * the upper layer.
+ *
+ * \param[in] psHciContext psHciContext is the context of
+ * the HCI Layer.
+ * \param[in] pHwRef pHwRef is the Information of
+ * the Device Interface Link .
+ * \param[in] type reason returned for the notification to
+ * the HCI.
+ * \param[in] pInfo Notification information like status
+ * data,length etc from the lower layer
+ * to the HCI Layer.
+ * \retval NONE.
+ *
+ */
+extern
+void
+phHciNfc_Release_Notify(
+ phHciNfc_sContext_t *psHciContext,
+ void *pHwRef,
+ uint8_t type,
+ void *pInfo
+ );
+
+
+
+/**
+ * \ingroup grp_hci_nfc
+ *
+ * The phHciNfc_Send_Generic_Cmd function sends the HCI Generic Commands
+ * to the device.
+ *
+ * \param[in] psHciContext psHciContext is the context of
+ * the HCI Layer.
+ * \param[in] pHwRef pHwRef is the Information of
+ * the Device Interface Link .
+ * \param[in] pipe_id The pipe to which the command
+ * is being sent.
+ * \param[in] cmd The HCI Generic command sent to a
+ * particular pipe .
+ *
+ * \retval NFCSTATUS_PENDING HCI Generic Command send in progress .
+ * \retval
+ * NFCSTATUS_INSUFFICIENT_RESOURCES The memory could not be allocated
+ * as required amount of memory
+ * is not sufficient.
+ *
+ */
+
+extern
+NFCSTATUS
+phHciNfc_Send_Generic_Cmd (
+ phHciNfc_sContext_t *psHciContext,
+ void *pHwRef,
+ uint8_t pipe_id,
+ uint8_t cmd
+ );
+
+/**
+ * \ingroup grp_hci_nfc
+ *
+ * The phHciNfc_Set_Param function configures the Gate specific register
+ * with the provided value.
+ *
+ * \param[in] psHciContext psHciContext is the context of
+ * the HCI Layer.
+ * \param[in] pHwRef pHwRef is the Information of
+ * the Device Interface Link .
+ * \param[in] p_pipe_info Pointer to pipe specific information.
+ * \param[in] reg_index Index of the register to be
+ * configured .
+ * \param[in] p_param Value to the configured in
+ * particular register.
+ * \param[in] param_length Length of the parameter provided
+ * for the configuration.
+ *
+ * \retval NFCSTATUS_PENDING HCI Set parameter in progress .
+ * \retval
+ * NFCSTATUS_INVALID_HCI_INFORMATION The Information like p_pipe_info,
+ * p_param or param_length is invalid
+ *
+ */
+
+extern
+NFCSTATUS
+phHciNfc_Set_Param (
+ phHciNfc_sContext_t *psHciContext,
+ void *pHwRef,
+ phHciNfc_Pipe_Info_t *p_pipe_info,
+ uint8_t reg_index,
+ void *p_param,
+ uint16_t param_length
+ );
+
+/**
+ * \ingroup grp_hci_nfc
+ *
+ * The phHciNfc_Send_HCP function sends the HCI Host Control Packet
+ * Frames to the device.
+ *
+ * \param[in] psHciContext psHciContext is the context of
+ * the HCI Layer.
+ * \param[in] pHwRef pHwRef is the Information of
+ * the Device Interface Link .
+ *
+ * \retval NFCSTATUS_PENDING HCP Frame send pending.
+ * \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters
+ * could not be interpreted properly.
+ * \retval Other errors Other related errors
+ *
+ *
+ */
+
+extern
+NFCSTATUS
+phHciNfc_Send_HCP (
+ phHciNfc_sContext_t *psHciContext,
+ void *pHwRef
+ );
+
+
+/**
+ * \ingroup grp_hci_nfc
+ *
+ * The phHciNfc_Build_HCPFrame function initially builds the HCP Packet Frame
+ * with the values passed in the arguments .
+ *
+ * \param[in] hcp_packet hcp_packet is the frame packet structure
+ * in which the frame is populated with the
+ * appropriate fields.
+ * \param[in] chainbit chainbit specifies whether the following
+ * HCP frames are chained or the frame is a
+ * normal frame.
+ * \param[in] pipe_id pipe_id of the pipe to which the frame has
+ * to be sent.
+ * \param[in] msg_type type of message sent to the pipe.
+ * \param[in] instruction type of message instruction send to the pipe.
+ *
+ * \retval NONE.
+ *
+ */
+
+
+extern
+void
+phHciNfc_Build_HCPFrame (
+ phHciNfc_HCP_Packet_t *hcp_packet,
+ uint8_t chainbit,
+ uint8_t pipe_id,
+ uint8_t msg_type,
+ uint8_t instruction
+ );
+
+/**
+ * \ingroup grp_hci_nfc
+ *
+ * The phHciNfc_Append_HCPFrame function Appends the HCP Packet Frame
+ * with the values passed in the arguments .
+ *
+ * \param[in] hcp_data hcp_data is the pointer to the HCP
+ * payload to which the data is to be
+ * appended.
+ * \param[in] hcp_index hcp_index is the index from which
+ * the data source needs to be appended.
+ * \param[in] src_data src_data that is to be appended to the
+ * HCP packet.
+ * \param[in] src_len The length of the data source that is
+ * to be appended.
+ * \retval NONE.
+ *
+ */
+
+extern
+void
+ phHciNfc_Append_HCPFrame (
+ uint8_t *hcp_data,
+ uint16_t hcp_index,
+ uint8_t *src_data,
+ uint16_t src_len
+ );
+
+/**
+ * \ingroup grp_hci_nfc
+ *
+ * The phHciNfc_Allocate_Resource function allocates and initialises the
+ * resource memory for the HCI layer.
+ *
+ * \param[in] ppBuffer ppBuffer is the pointer to which the
+ * resource memory is allocated.
+ * \param[in] size Variable that specifies the size of
+ * the memory that needs to be created.
+ *
+ * \retval NFCSTATUS_SUCCESS The Resource Memory was allocated
+ * successfully .
+ * \retval
+ * NFCSTATUS_INSUFFICIENT_RESOURCES The memory could not be allocated
+ * as required amount of memory
+ * is not suffient.
+ *
+ */
+
+extern
+NFCSTATUS
+ phHciNfc_Allocate_Resource (
+ void **ppBuffer,
+ uint16_t size
+ );
+/**
+ * \ingroup grp_hci_nfc
+ *
+ * The phHciNfc_Release_Resources function releases all the resources
+ * allocated in the HCI Layer.
+ *
+ * \param[in] psHciContext psHciContext is the context of
+ * the HCI Layer.
+ *
+ * \retval NONE.
+ *
+ */
+
+extern
+ void
+ phHciNfc_Release_Resources (
+ phHciNfc_sContext_t **ppsHciContext
+ );
+
+/**
+ * \ingroup grp_hci_nfc
+ *
+ * The phHciNfc_Release_Lower function initiates the release of the
+ * lower layers.
+ *
+ * \param[in] psHciContext psHciContext is the context of
+ * the HCI Layer.
+ * \param[in] pHwRef pHwRef is the Information of
+ * the Device Interface Link .
+ *
+ * \retval NONE.
+ *
+ */
+
+extern
+void
+phHciNfc_Release_Lower(
+ phHciNfc_sContext_t *psHciContext,
+ void *pHwRef
+ );
+
+
+
+#endif
+