/* * 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_NfcIPMgmt.h * * \brief HCI NFCIP-1 Management Routines. * * * * * * Project: NFC-FRI-1.1 * * * * $Date: Thu Jun 11 18:45:00 2009 $ * * $Author: ing02260 $ * * $Revision: 1.14 $ * * $Aliases: NFC_FRI1.1_WK924_R27_1,NFC_FRI1.1_WK926_R28_1,NFC_FRI1.1_WK926_R28_2,NFC_FRI1.1_WK926_R28_3,NFC_FRI1.1_WK928_R29_1,NFC_FRI1.1_WK930_R30_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 PHHCINFC_NFCIPMGMT_H #define PHHCINFC_NFCIPMGMT_H /*@}*/ /** * \name HCI * * File: \ref phHciNfc_NfcIPMgmt.h * */ /*@{*/ #define PHHCINFC_NFCIP1MGMT_FILEREVISION "$Revision: 1.14 $" /**< \ingroup grp_file_attributes */ #define PHHCINFC_NFCIP1MGMT_FILEALIASES "$Aliases: NFC_FRI1.1_WK924_R27_1,NFC_FRI1.1_WK926_R28_1,NFC_FRI1.1_WK926_R28_2,NFC_FRI1.1_WK926_R28_3,NFC_FRI1.1_WK928_R29_1,NFC_FRI1.1_WK930_R30_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 */ /*@}*/ /* ***************************** Header File Inclusion **************************** */ #include /* ****************************** Macro Definitions ******************************* */ /* Commands exposed to the upper layer */ /* ******************** Enumeration and Structure Definition ********************** */ /* LENGTH definition */ #define NFCIP_ATR_MAX_LENGTH PHHAL_MAX_ATR_LENGTH #define NFCIP_NFCID_LENGTH PHHAL_MAX_UID_LENGTH #define NFCIP_MAX_DEP_REQ_HDR_LEN 0x05 typedef enum phHciNfc_eNfcIPType{ NFCIP_INVALID = 0x00U, NFCIP_INITIATOR, NFCIP_TARGET }phHciNfc_eNfcIPType_t; typedef enum phHciNfc_NfcIP_Seq{ NFCIP_INVALID_SEQUENCE = 0x00U, NFCIP_ATR_INFO, NFCIP_STATUS, NFCIP_NFCID3I, NFCIP_NFCID3T, NFCIP_PARAM, NFCIP_END_SEQUENCE } phHciNfc_NfcIP_Seq_t; typedef enum phHciNfc_eP2PSpeed{ NFCIP_SPEED_106 = 0x00U, NFCIP_SPEED_212, NFCIP_SPEED_424, NFCIP_SPEED_848, NFCIP_SPEED_1696, NFCIP_SPEED_3392, NFCIP_SPEED_6784, NFCIP_SPEED_RFU }phHciNfc_eP2PSpeed_t; typedef enum phHciNfc_eNfcIPMode{ NFCIP_MODE_PAS_106 = 0x01U, NFCIP_MODE_PAS_212 = 0x02U, NFCIP_MODE_PAS_424 = 0x04U, NFCIP_MODE_ACT_106 = 0x08U, NFCIP_MODE_ACT_212 = 0x10U, NFCIP_MODE_ACT_424 = 0x20U, NFCIP_MODE_ALL = 0x3FU }phHciNfc_eNfcIPMode_t; typedef struct phHciNfc_NfcIP_Info { phHciNfc_NfcIP_Seq_t current_seq; phHciNfc_NfcIP_Seq_t next_seq; phHciNfc_eNfcIPType_t nfcip_type; phHciNfc_Pipe_Info_t *p_init_pipe_info; phHciNfc_Pipe_Info_t *p_tgt_pipe_info; phHal_sRemoteDevInformation_t rem_nfcip_tgt_info; /* ATR_RES = General bytes length, Max length = 48 bytes for host = target */ uint8_t atr_res_info[NFCIP_ATR_MAX_LENGTH]; uint8_t atr_res_length; /* ATR_REQ = General bytes length, Max length = 48 bytes for host = initiator */ uint8_t atr_req_info[NFCIP_ATR_MAX_LENGTH]; uint8_t atr_req_length; /* Contains the current status of the NFCIP-1 link when communication has been set. 0x00 -> data is expected from the host 0x01 -> data is expected from the RF side */ uint8_t linkstatus; /* Contains the random NFCID3I conveyed with the ATR_REQ. always 10 bytes length */ uint8_t nfcid3i_length; uint8_t nfcid3i[NFCIP_NFCID_LENGTH]; /* Contains the random NFCID3T conveyed with the ATR_RES. always 10 bytes length */ uint8_t nfcid3t_length; uint8_t nfcid3t[NFCIP_NFCID_LENGTH]; /* Contains the current parameters of the NFCIP-1 link when communication has been set. - bits 0 to 2: data rate target to initiator - bits 3 to 5: data rate initiator to target 0 -> Divisor equal to 1 1 -> Divisor equal to 2 2 -> Divisor equal to 4 3 -> Divisor equal to 8 4 -> Divisor equal to 16 5 -> Divisor equal to 32 6 -> Divisor equal to 64 7 -> RFU - bits 6 to 7: maximum frame length 0 -> 64 bytes 1 -> 128 bytes 2 -> 192 bytes 3 -> 256 bytes */ phHciNfc_eP2PSpeed_t initiator_speed; phHciNfc_eP2PSpeed_t target_speed; uint16_t max_frame_len; /* Supported modes */ uint8_t nfcip_mode; uint8_t psl1; uint8_t psl2; uint8_t nad; uint8_t did; uint8_t options; uint8_t activation_mode; }phHciNfc_NfcIP_Info_t; /* *********************** Function Prototype Declaration ************************* */ /*! * \brief Allocates the resources of NFCIP-1 initiator management gate. * * This function Allocates the resources of the NFCIP-1 initiator management * gate Information Structure. * */ extern NFCSTATUS phHciNfc_Initiator_Init_Resources( phHciNfc_sContext_t *psHciContext ); /** * \ingroup grp_hci_nfc * * The phHciNfc_Initiator_Get_PipeID function gives the pipe id of the NFCIP-1 * initiator gate * * \param[in] psHciContext psHciContext is the pointer to HCI Layer * context Structure. * \param[in] pHwRef pHwRef is the Information of * the Device Interface Link * * \retval NFCSTATUS_SUCCESS Function execution is successful. * \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters * could not be interpreted properly. * */ extern NFCSTATUS phHciNfc_Initiator_Get_PipeID( phHciNfc_sContext_t *psHciContext, uint8_t *ppipe_id ); /** * \ingroup grp_hci_nfc * * The phHciNfc_Initiator_Update_PipeInfo function updates the pipe_id of the NFCIP-1 * initiator gate management Structure. * * \param[in] psHciContext psHciContext is the pointer to HCI Layer * context Structure. * \param[in] pipeID pipeID of the NFCIP-1 initiator gate * \param[in] pPipeInfo Update the pipe Information of the NFCIP-1 * initiator gate * * \retval NFCSTATUS_SUCCESS Function execution is successful. * \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters * could not be interpreted properly. * */ extern NFCSTATUS phHciNfc_Initiator_Update_PipeInfo( phHciNfc_sContext_t *psHciContext, uint8_t pipeID, phHciNfc_Pipe_Info_t *pPipeInfo ); /** * \ingroup grp_hci_nfc * * The phHciNfc_Send_Initiator_Command function executes the command sent by the * upper layer, depending on the commands defined. * * \param[in] psContext psContext is the pointer to HCI Layer * context Structure. * \param[in] pHwRef pHwRef is the Information of * the Device Interface Link * * \retval NFCSTATUS_SUCCESS Function execution is successful. * \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters * could not be interpreted properly. * */ extern NFCSTATUS phHciNfc_NfcIP_Presence_Check( phHciNfc_sContext_t *psContext, void *pHwRef ); /*! * \brief Allocates the resources of NFCIP-1 target management gate. * * This function Allocates the resources of the NFCIP-1 target management * gate Information Structure. * */ extern NFCSTATUS phHciNfc_Target_Init_Resources( phHciNfc_sContext_t *psHciContext ); /** * \ingroup grp_hci_nfc * * The phHciNfc_Target_Get_PipeID function gives the pipe id of the NFCIP-1 * target gate * * \param[in] psHciContext psHciContext is the pointer to HCI Layer * context Structure. * \param[in] pHwRef pHwRef is the Information of * the Device Interface Link * * \retval NFCSTATUS_SUCCESS Function execution is successful. * \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters * could not be interpreted properly. * */ extern NFCSTATUS phHciNfc_Target_Get_PipeID( phHciNfc_sContext_t *psHciContext, uint8_t *ppipe_id ); /** * \ingroup grp_hci_nfc * * The phHciNfc_Target_Update_PipeInfo function updates the pipe_id of the NFCIP-1 * target gate management Structure. * * \param[in] psHciContext psHciContext is the pointer to HCI Layer * context Structure. * \param[in] pipeID pipeID of the NFCIP-1 target gate * \param[in] pPipeInfo Update the pipe Information of the NFCIP-1 * target gate * * \retval NFCSTATUS_SUCCESS Function execution is successful. * \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters * could not be interpreted properly. * */ extern NFCSTATUS phHciNfc_Target_Update_PipeInfo( phHciNfc_sContext_t *psHciContext, uint8_t pipeID, phHciNfc_Pipe_Info_t *pPipeInfo ); /** * \ingroup grp_hci_nfc * * The phHciNfc_NfcIP_Info_Sequence function executes the sequence of operations, to * get ATR_RES, NFCID3I, NFCID3T, PARAMS etc. * * \param[in] psHciContext psHciContext is the pointer to HCI Layer * context Structure. * \param[in] pHwRef pHwRef is the Information of * the Device Interface Link * \param[in] notify_reqd if TRUE continue till END_SEQUENCE, else * stop the sequence * * \retval NFCSTATUS_SUCCESS Function execution is successful. * \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters * could not be interpreted properly. * */ extern NFCSTATUS phHciNfc_NfcIP_Info_Sequence ( phHciNfc_sContext_t *psHciContext, void *pHwRef #ifdef NOTIFY_REQD , uint8_t notify_reqd #endif /* #ifdef NOTIFY_REQD */ ); /** * \ingroup grp_hci_nfc * * The phHciNfc_NfcIP_SetMode function sets the value for NFCIP-1 modes * * \param[in] psHciContext psHciContext is the pointer to HCI Layer * context Structure. * \param[in] pHwRef pHwRef is the Information of * the Device Interface Link * \param[in] nfciptype Specifies initiator or target * \param[in] nfcip_mode nfcip_mode is the supported mode * information * * \retval NFCSTATUS_SUCCESS Function execution is successful. * \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters * could not be interpreted properly. * */ extern NFCSTATUS phHciNfc_NfcIP_SetMode( phHciNfc_sContext_t *psHciContext, void *pHwRef, phHciNfc_eNfcIPType_t nfciptype, uint8_t nfcip_mode ); /** * \ingroup grp_hci_nfc * * The phHciNfc_NfcIP_SetNAD function sets the NAD value * * \param[in] psHciContext pContext is the pointer to HCI Layer * context Structure. * \param[in] pHwRef pHwRef is the Information of * the Device Interface Link * \param[in] nfciptype Specifies initiator or target * \param[in] nad Node address, this will be used as * logical address of the initiator (b4 to b7) * * \retval NFCSTATUS_SUCCESS Function execution is successful. * \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters * could not be interpreted properly. * */ extern NFCSTATUS phHciNfc_NfcIP_SetNAD( phHciNfc_sContext_t *psHciContext, void *pHwRef, phHciNfc_eNfcIPType_t nfciptype, uint8_t nad ); /** * \ingroup grp_hci_nfc * * The phHciNfc_NfcIP_SetDID function sets the DID value for the initiator * * \param[in] psHciContext psHciContext is the pointer to HCI Layer * context Structure. * \param[in] pHwRef pHwRef is the Information of * the Device Interface Link * \param[in] did Device ID * * \retval NFCSTATUS_SUCCESS Function execution is successful. * \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters * could not be interpreted properly. * */ extern NFCSTATUS phHciNfc_NfcIP_SetDID( phHciNfc_sContext_t *psHciContext, void *pHwRef, uint8_t did ); /** * \ingroup grp_hci_nfc * * The phHciNfc_NfcIP_SetOptions function sets the different options depending on * the host type (initiator or target) like PSL, NAD and DID * * \param[in] psHciContext psHciContext is the pointer to HCI Layer * context Structure. * \param[in] pHwRef pHwRef is the Information of * the Device Interface Link * \param[in] nfciptype Specifies initiator or target * \param[in] nfcip_options specifies enabled options PSL, NAD and DID * * \retval NFCSTATUS_SUCCESS Function execution is successful. * \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters * could not be interpreted properly. * */ extern NFCSTATUS phHciNfc_NfcIP_SetOptions( phHciNfc_sContext_t *psHciContext, void *pHwRef, phHciNfc_eNfcIPType_t nfciptype, uint8_t nfcip_options ); /** * \ingroup grp_hci_nfc * * The phHciNfc_NfcIP_SetATRInfo function sets the general byte information * * \param[in] psHciContext psHciContext is the pointer to HCI Layer * context Structure. * \param[in] pHwRef pHwRef is the Information of * the Device Interface Link * \param[in] nfciptype Specifies initiator or target * \param[in] atr_info contains the general bytes of the ATR_REQ * (initiator) or ATR_RES (target) (max size = * 48 bytes) * * \retval NFCSTATUS_SUCCESS Function execution is successful. * \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters * could not be interpreted properly. * */ extern NFCSTATUS phHciNfc_NfcIP_SetATRInfo( phHciNfc_sContext_t *psHciContext, void *pHwRef, phHciNfc_eNfcIPType_t nfciptype, phHal_sNfcIPCfg_t *atr_info ); /** * \ingroup grp_hci_nfc * * The phHciNfc_NfcIP_SetPSL1 function sets the BRS byte of PSL_REQ * * \param[in] psHciContext psHciContext is the pointer to HCI Layer * context Structure. * \param[in] pHwRef pHwRef is the Information of * the Device Interface Link * \param[in] psl1 specifies the BRS byte of PSL_REQ * * \retval NFCSTATUS_SUCCESS Function execution is successful. * \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters * could not be interpreted properly. * */ extern NFCSTATUS phHciNfc_NfcIP_SetPSL1( phHciNfc_sContext_t *psHciContext, void *pHwRef, uint8_t psl1 ); /** * \ingroup grp_hci_nfc * * The phHciNfc_NfcIP_SetPSL2 function sets the BRS byte of PSL_REQ * * \param[in] psHciContext psHciContext is the pointer to HCI Layer * context Structure. * \param[in] pHwRef pHwRef is the Information of * the Device Interface Link * \param[in] psl2 specifies the FSL byte of PSL_REQ * * \retval NFCSTATUS_SUCCESS Function execution is successful. * \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters * could not be interpreted properly. * */ extern NFCSTATUS phHciNfc_NfcIP_SetPSL2( phHciNfc_sContext_t *psHciContext, void *pHwRef, uint8_t psl2 ); /** * \ingroup grp_hci_nfc * * The phHciNfc_NfcIP_GetStatus function receives the present status of the * NFCIP-1 link, when communication has been set. * If 0x00 is the status, then it means data is expected from the host * If 0x01 is the status, then it means data is expected from the RF side * Other status values are error * * \param[in] psHciContext psHciContext is the pointer to HCI Layer * context Structure. * \param[in] pHwRef pHwRef is the Information of * the Device Interface Link * \param[in] nfciptype Specifies initiator or target * * \retval NFCSTATUS_SUCCESS Function execution is successful. * \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters * could not be interpreted properly. * */ extern NFCSTATUS phHciNfc_NfcIP_GetStatus( phHciNfc_sContext_t *psHciContext, void *pHwRef, phHciNfc_eNfcIPType_t nfciptype ); /** * \ingroup grp_hci_nfc * * The phHciNfc_NfcIP_GetStatus function receives the current parameters of the * NFCIP-1 link, when communication has been set. * - bits 0 to 2: data rate target to initiator * - bits 3 to 5: data rate initiator to target * 0 -> Divisor equal to 1 * 1 -> Divisor equal to 2 * 2 -> Divisor equal to 4 * 3 -> Divisor equal to 8 * 4 -> Divisor equal to 16 * 5 -> Divisor equal to 32 * 6 -> Divisor equal to 64 * 7 -> RFU * - bits 6 to 7: maximum frame length * 0 -> 64 bytes * 1 -> 128 bytes * 2 -> 192 bytes * 3 -> 256 bytes * * \param[in] psHciContext psHciContext is the pointer to HCI Layer * context Structure. * \param[in] pHwRef pHwRef is the Information of * the Device Interface Link * \param[in] nfciptype Specifies initiator or target * * \retval NFCSTATUS_SUCCESS Function execution is successful. * \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters * could not be interpreted properly. * */ extern NFCSTATUS phHciNfc_NfcIP_GetParam( phHciNfc_sContext_t *psHciContext, void *pHwRef, phHciNfc_eNfcIPType_t nfciptype ); /** * \ingroup grp_hci_nfc * * The phHciNfc_NfcIP_Send_Data function sends data using the SEND_DATA event * * \param[in] psHciContext psHciContext is the pointer to HCI Layer * context Structure. * \param[in] pHwRef pHwRef is the Information of * the Device Interface Link * \param[in] sData Data to be sent to the lower layer * * \retval NFCSTATUS_SUCCESS Function execution is successful. * \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters * could not be interpreted properly. * */ extern NFCSTATUS phHciNfc_NfcIP_Send_Data ( phHciNfc_sContext_t *psHciContext, void *pHwRef, phHciNfc_XchgInfo_t *sData ); /** * \ingroup grp_hci_nfc * * The phHciNfc_Initiator_Cont_Activate function to activate the NFCIP initiator * * \param[in] pContext pContext is the pointer to HCI Layer * context Structure. * \param[in] pHwRef pHwRef is the Information of * the Device Interface Link * * \retval NFCSTATUS_SUCCESS Function execution is successful. * \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters * could not be interpreted properly. * */ extern NFCSTATUS phHciNfc_Initiator_Cont_Activate ( phHciNfc_sContext_t *psHciContext, void *pHwRef ); /** * \ingroup grp_hci_nfc * * The phHciNfc_NfcIP_GetATRInfo function is to get ATR information * * \param[in] psHciContext psHciContext is the pointer to HCI Layer * context Structure. * \param[in] pHwRef pHwRef is the Information of * the Device Interface Link * \param[in] nfciptype Specifies initiator or target * * \retval NFCSTATUS_SUCCESS Function execution is successful. * \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters * could not be interpreted properly. * */ extern NFCSTATUS phHciNfc_NfcIP_GetATRInfo ( phHciNfc_sContext_t *psHciContext, void *pHwRef, phHciNfc_eNfcIPType_t nfciptype ); /** * \ingroup grp_hci_nfc * * The phHciNfc_NfcIP_SetMergeSak function is to indicate, if the NFCIP-1 * target feature must be merged with Type A RF card feature in order to * present only one type A target (set of the related bit in SAK to * reflect the ISO18092 compliancy). * 0x00 -> disabled * 0x01 -> enabled * Others values are RFU : error code returned as NFCSTATUS_INVALID_PARAMETER * * \param[in] psHciContext psHciContext is the pointer to HCI Layer * context Structure. * \param[in] pHwRef pHwRef is the Information of * the Device Interface Link * \param[in] sak_value Specifies initiator or target * * \retval NFCSTATUS_SUCCESS Function execution is successful. * \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters * could not be interpreted properly. * */ extern NFCSTATUS phHciNfc_NfcIP_SetMergeSak( phHciNfc_sContext_t *psHciContext, void *pHwRef, uint8_t sak_value ); #endif /* #ifndef PHHCINFC_NFCIPMGMT_H */