diff options
Diffstat (limited to 'src/phHciNfc_Generic.h')
-rw-r--r-- | src/phHciNfc_Generic.h | 1234 |
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 + |