/*
 * 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 <phHciNfc_Generic.h>

/*
****************************** 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


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 */