/******************************************************************************
 *
 *  Copyright (C) 2009-2014 Broadcom Corporation
 *
 *  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.
 *
 ******************************************************************************/


/******************************************************************************
 *
 *  This file contains the Near Field Communication (NFC) API function
 *  external definitions.
 *
 ******************************************************************************/

#ifndef NFC_API_H
#define NFC_API_H

#include "nfc_target.h"
#include "nci_defs.h"
#include "nfc_hal_api.h"
#include "gki.h"

#include "vendor_cfg.h"

/* NFC application return status codes */
#define NFC_STATUS_OK                   NCI_STATUS_OK                   /* Command succeeded    */
#define NFC_STATUS_REJECTED             NCI_STATUS_REJECTED             /* Command is rejected. */
#define NFC_STATUS_MSG_CORRUPTED        NCI_STATUS_MESSAGE_CORRUPTED    /* Message is corrupted */
#define NFC_STATUS_BUFFER_FULL          NCI_STATUS_BUFFER_FULL          /* buffer full          */
#define NFC_STATUS_FAILED               NCI_STATUS_FAILED               /* failed               */
#define NFC_STATUS_NOT_INITIALIZED      NCI_STATUS_NOT_INITIALIZED      /* not initialized      */
#define NFC_STATUS_SYNTAX_ERROR         NCI_STATUS_SYNTAX_ERROR         /* Syntax error         */
#define NFC_STATUS_SEMANTIC_ERROR       NCI_STATUS_SEMANTIC_ERROR       /* Semantic error       */
#define NFC_STATUS_UNKNOWN_GID          NCI_STATUS_UNKNOWN_GID          /* Unknown NCI Group ID */
#define NFC_STATUS_UNKNOWN_OID          NCI_STATUS_UNKNOWN_OID          /* Unknown NCI Opcode   */
#define NFC_STATUS_INVALID_PARAM        NCI_STATUS_INVALID_PARAM        /* Invalid Parameter    */
#define NFC_STATUS_MSG_SIZE_TOO_BIG     NCI_STATUS_MSG_SIZE_TOO_BIG     /* Message size too big */
#define NFC_STATUS_ALREADY_STARTED      NCI_STATUS_ALREADY_STARTED      /* Already started      */
#define NFC_STATUS_ACTIVATION_FAILED    NCI_STATUS_ACTIVATION_FAILED    /* Activation Failed    */
#define NFC_STATUS_TEAR_DOWN            NCI_STATUS_TEAR_DOWN            /* Tear Down Error      */
#define NFC_STATUS_RF_TRANSMISSION_ERR  NCI_STATUS_RF_TRANSMISSION_ERR  /* RF transmission error*/
#define NFC_STATUS_RF_PROTOCOL_ERR      NCI_STATUS_RF_PROTOCOL_ERR      /* RF protocol error    */
#define NFC_STATUS_TIMEOUT              NCI_STATUS_TIMEOUT              /* RF Timeout           */
#define NFC_STATUS_EE_INTF_ACTIVE_FAIL  NCI_STATUS_EE_INTF_ACTIVE_FAIL  /* EE Intf activate err */
#define NFC_STATUS_EE_TRANSMISSION_ERR  NCI_STATUS_EE_TRANSMISSION_ERR  /* EE transmission error*/
#define NFC_STATUS_EE_PROTOCOL_ERR      NCI_STATUS_EE_PROTOCOL_ERR      /* EE protocol error    */
#define NFC_STATUS_EE_TIMEOUT           NCI_STATUS_EE_TIMEOUT           /* EE Timeout           */

/* 0xE0 ~0xFF are proprietary status codes */
#define NFC_STATUS_CMD_STARTED          0xE3/* Command started successfully                     */
#define NFC_STATUS_HW_TIMEOUT           0xE4/* NFCC Timeout in responding to an NCI command     */
#define NFC_STATUS_CONTINUE             0xE5/* More (same) event to follow                      */
#define NFC_STATUS_REFUSED              0xE6/* API is called to perform illegal function        */
#define NFC_STATUS_BAD_RESP             0xE7/* Wrong format of R-APDU, CC file or NDEF file     */
#define NFC_STATUS_CMD_NOT_CMPLTD       0xE8/* 7816 Status Word is not command complete(0x9000) */
#define NFC_STATUS_NO_BUFFERS           0xE9/* Out of GKI buffers                               */
#define NFC_STATUS_WRONG_PROTOCOL       0xEA/* Protocol mismatch between API and activated one  */
#define NFC_STATUS_BUSY                 0xEB/* Another Tag command is already in progress       */

#define NFC_STATUS_LINK_LOSS            0xFC                      /* Link Loss                  */
#define NFC_STATUS_BAD_LENGTH           0xFD                      /* data len exceeds MIU       */
#define NFC_STATUS_BAD_HANDLE           0xFE                      /* invalid handle             */
#define NFC_STATUS_CONGESTED            0xFF                      /* congested                  */
typedef UINT8 tNFC_STATUS;



/**********************************************
 * NFC Config Parameter IDs defined by NCI
 **********************************************/
#define NFC_PMID_TOTAL_DURATION     NCI_PARAM_ID_TOTAL_DURATION
#define NFC_PMID_CON_DEVICES_LIMIT  NCI_PARAM_ID_CON_DEVICES_LIMIT
#define NFC_PMID_PA_BAILOUT         NCI_PARAM_ID_PA_BAILOUT
#define NFC_PMID_PB_AFI             NCI_PARAM_ID_PB_AFI
#define NFC_PMID_PB_BAILOUT         NCI_PARAM_ID_PB_BAILOUT
#define NFC_PMID_PB_ATTRIB_PARAM1   NCI_PARAM_ID_PB_ATTRIB_PARAM1
#define NFC_PMID_PF_BIT_RATE        NCI_PARAM_ID_PF_BIT_RATE
#define NFC_PMID_PF_RC              NCI_PARAM_ID_PF_RC
#define NFC_PMID_PB_H_INFO          NCI_PARAM_ID_PB_H_INFO
#define NFC_PMID_BITR_NFC_DEP       NCI_PARAM_ID_BITR_NFC_DEP
#define NFC_PMID_ATR_REQ_GEN_BYTES  NCI_PARAM_ID_ATR_REQ_GEN_BYTES
#define NFC_PMID_ATR_REQ_CONFIG     NCI_PARAM_ID_ATR_REQ_CONFIG
#define NFC_PMID_LA_HIST_BY         NCI_PARAM_ID_LA_HIST_BY
#define NFC_PMID_LA_NFCID1          NCI_PARAM_ID_LA_NFCID1
#define NFC_PMID_PI_BIT_RATE        NCI_PARAM_ID_PI_BIT_RATE
#define NFC_PMID_LA_BIT_FRAME_SDD   NCI_PARAM_ID_LA_BIT_FRAME_SDD
#define NFC_PMID_LA_PLATFORM_CONFIG NCI_PARAM_ID_LA_PLATFORM_CONFIG
#define NFC_PMID_LA_SEL_INFO        NCI_PARAM_ID_LA_SEL_INFO
#define NFC_PMID_LI_BIT_RATE        NCI_PARAM_ID_LI_BIT_RATE
#define NFC_PMID_LB_SENSB_INFO      NCI_PARAM_ID_LB_SENSB_INFO
#define NFC_PMID_LB_PROTOCOL        NCI_PARAM_ID_LB_PROTOCOL
#define NFC_PMID_LB_H_INFO          NCI_PARAM_ID_LB_H_INFO_RSP
#define NFC_PMID_LB_NFCID0          NCI_PARAM_ID_LB_NFCID0
#define NFC_PMID_LB_APPDATA         NCI_PARAM_ID_LB_APPDATA
#define NFC_PMID_LB_SFGI            NCI_PARAM_ID_LB_SFGI
#define NFC_PMID_LB_ADC_FO          NCI_PARAM_ID_LB_ADC_FO
#define NFC_PMID_LF_T3T_ID1         NCI_PARAM_ID_LF_T3T_ID1
#define NFC_PMID_LF_T3T_ID2         NCI_PARAM_ID_LF_T3T_ID2
#define NFC_PMID_LF_T3T_ID3         NCI_PARAM_ID_LF_T3T_ID3
#define NFC_PMID_LF_T3T_ID4         NCI_PARAM_ID_LF_T3T_ID4
#define NFC_PMID_LF_T3T_ID5         NCI_PARAM_ID_LF_T3T_ID5
#define NFC_PMID_LF_T3T_ID6         NCI_PARAM_ID_LF_T3T_ID6
#define NFC_PMID_LF_T3T_ID7         NCI_PARAM_ID_LF_T3T_ID7
#define NFC_PMID_LF_T3T_ID8         NCI_PARAM_ID_LF_T3T_ID8
#define NFC_PMID_LF_T3T_ID9         NCI_PARAM_ID_LF_T3T_ID9
#define NFC_PMID_LF_T3T_ID10        NCI_PARAM_ID_LF_T3T_ID10
#define NFC_PMID_LF_T3T_ID11        NCI_PARAM_ID_LF_T3T_ID11
#define NFC_PMID_LF_T3T_ID12        NCI_PARAM_ID_LF_T3T_ID12
#define NFC_PMID_LF_T3T_ID13        NCI_PARAM_ID_LF_T3T_ID13
#define NFC_PMID_LF_T3T_ID14        NCI_PARAM_ID_LF_T3T_ID14
#define NFC_PMID_LF_T3T_ID15        NCI_PARAM_ID_LF_T3T_ID15
#define NFC_PMID_LF_T3T_ID16        NCI_PARAM_ID_LF_T3T_ID16
#define NFC_PMID_LF_PROTOCOL        NCI_PARAM_ID_LF_PROTOCOL
#define NFC_PMID_LF_T3T_PMM         NCI_PARAM_ID_LF_T3T_PMM
#define NFC_PMID_LF_T3T_MAX         NCI_PARAM_ID_LF_T3T_MAX
#define NFC_PMID_LF_T3T_FLAGS2      NCI_PARAM_ID_LF_T3T_FLAGS2
#define NFC_PMID_FWI                NCI_PARAM_ID_FWI
#define NFC_PMID_LF_CON_BITR_F      NCI_PARAM_ID_LF_CON_BITR_F
#define NFC_PMID_WT                 NCI_PARAM_ID_WT
#define NFC_PMID_ATR_RES_GEN_BYTES  NCI_PARAM_ID_ATR_RES_GEN_BYTES
#define NFC_PMID_ATR_RSP_CONFIG     NCI_PARAM_ID_ATR_RSP_CONFIG
#define NFC_PMID_RF_FIELD_INFO      NCI_PARAM_ID_RF_FIELD_INFO
#define NFC_PMID_NFC_DEP_OP         NCI_PARAM_ID_NFC_DEP_OP
#define NFC_PARAM_ID_RF_EE_ACTION   NCI_PARAM_ID_RF_EE_ACTION
#define NFC_PARAM_ID_ISO_DEP_OP     NCI_PARAM_ID_ISO_DEP_OP

#define NFC_ROUTE_TAG_TECH           NCI_ROUTE_TAG_TECH      /* Technology based routing  */
#define NFC_ROUTE_TAG_PROTO          NCI_ROUTE_TAG_PROTO     /* Protocol based routing  */
#define NFC_ROUTE_TAG_AID            NCI_ROUTE_TAG_AID       /* AID routing */
#define NFC_ROUTE_TLV_ENTRY_SIZE     4 /* tag, len, 2 byte value for technology/protocol based routing */

/* For routing */
#define NFC_DH_ID                NCI_DH_ID   /* for DH */
/* To identify the loopback test */
#define NFC_TEST_ID              NCI_TEST_ID            /* use a proprietary range */

typedef UINT8 tNFC_PMID;
#define NFC_TL_SIZE                     2
#define NFC_SAVED_CMD_SIZE              2

typedef tNCI_DISCOVER_MAPS   tNFC_DISCOVER_MAPS;
typedef tNCI_DISCOVER_PARAMS tNFC_DISCOVER_PARAMS;

/* all NFC Manager Callback functions have prototype like void (cback) (UINT8 event, void *p_data)
 * tNFC_DATA_CBACK uses connection id as the first parameter; range 0x00-0x0F.
 * tNFC_DISCOVER_CBACK uses tNFC_DISCOVER_EVT; range  0x4000 ~
 * tNFC_RESPONSE_CBACK uses tNFC_RESPONSE_EVT; range  0x5000 ~
 */

#define NFC_FIRST_DEVT      0x4000
#define NFC_FIRST_REVT      0x5000
#define NFC_FIRST_CEVT      0x6000
#define NFC_FIRST_TEVT      0x8000

/* the events reported on tNFC_RESPONSE_CBACK */
enum
{
    NFC_ENABLE_REVT = NFC_FIRST_REVT,       /* 0  Enable event                  */
    NFC_DISABLE_REVT,                       /* 1  Disable event                 */
    NFC_SET_CONFIG_REVT,                    /* 2  Set Config Response           */
    NFC_GET_CONFIG_REVT,                    /* 3  Get Config Response           */
    NFC_NFCEE_DISCOVER_REVT,                /* 4  Discover NFCEE response       */
    NFC_NFCEE_INFO_REVT,                    /* 5  Discover NFCEE Notification   */
    NFC_NFCEE_MODE_SET_REVT,                /* 6  NFCEE Mode Set response       */
    NFC_RF_FIELD_REVT,                      /* 7  RF Field information          */
    NFC_EE_ACTION_REVT,                     /* 8  EE Action notification        */
    NFC_EE_DISCOVER_REQ_REVT,               /* 9  EE Discover Req notification  */
    NFC_SET_ROUTING_REVT,                   /* 10 Configure Routing response    */
    NFC_GET_ROUTING_REVT,                   /* 11 Retrieve Routing response     */
    NFC_RF_COMM_PARAMS_UPDATE_REVT,         /* 12 RF Communication Param Update */
    NFC_GEN_ERROR_REVT,                     /* 13 generic error notification    */
    NFC_NFCC_RESTART_REVT,                  /* 14 NFCC has been re-initialized  */
    NFC_NFCC_TIMEOUT_REVT,                  /* 15 NFCC is not responding        */
    NFC_NFCC_TRANSPORT_ERR_REVT,            /* 16 NCI Tranport error            */
    NFC_NFCC_POWER_OFF_REVT,                /* 17 NFCC turned off               */

    NFC_FIRST_VS_REVT                       /* First vendor-specific rsp event  */
};
typedef UINT16 tNFC_RESPONSE_EVT;

enum
{
    NFC_CONN_CREATE_CEVT = NFC_FIRST_CEVT,  /* 0  Conn Create Response          */
    NFC_CONN_CLOSE_CEVT,                    /* 1  Conn Close Response           */
    NFC_DEACTIVATE_CEVT,                    /* 2  Deactivate response/notificatn*/
    NFC_DATA_CEVT,                          /* 3  Data                          */
    NFC_ERROR_CEVT,                         /* 4  generic or interface error    */
    NFC_DATA_START_CEVT                     /* 5  received the first fragment on RF link */
};
typedef UINT16 tNFC_CONN_EVT;

#define NFC_NFCC_INFO_LEN       4
#ifndef NFC_NFCC_MAX_NUM_VS_INTERFACE
#define NFC_NFCC_MAX_NUM_VS_INTERFACE   5
#endif
typedef struct
{
    tNFC_STATUS             status;         /* The event status.                */
    UINT8                   nci_version;    /* the NCI version of NFCC          */
    UINT8                   max_conn;       /* max number of connections by NFCC*/
    UINT32                  nci_features;   /* the NCI features of NFCC         */
    UINT16                  nci_interfaces; /* the NCI interfaces of NFCC       */
    UINT16                  max_ce_table;   /* the max routing table size       */
    UINT16                  max_param_size; /* Max Size for Large Parameters    */
    UINT8                   manufacture_id; /* the Manufacture ID for NFCC      */
    UINT8                   nfcc_info[NFC_NFCC_INFO_LEN];/* the Manufacture Info for NFCC      */
    UINT8                   vs_interface[NFC_NFCC_MAX_NUM_VS_INTERFACE];  /* the NCI VS interfaces of NFCC    */
} tNFC_ENABLE_REVT;

#define NFC_MAX_NUM_IDS     125
/* the data type associated with NFC_SET_CONFIG_REVT */
typedef struct
{
    tNFC_STATUS             status;         /* The event status.                */
    UINT8                   num_param_id;   /* Number of rejected NCI Param ID  */
    UINT8                   param_ids[NFC_MAX_NUM_IDS];/* NCI Param ID          */
} tNFC_SET_CONFIG_REVT;

/* the data type associated with NFC_GET_CONFIG_REVT */
typedef struct
{
    tNFC_STATUS             status;         /* The event status.    */
    UINT16                  tlv_size;       /* The length of TLV    */
    UINT8                   *p_param_tlvs;  /* TLV                  */
} tNFC_GET_CONFIG_REVT;

/* the data type associated with NFC_NFCEE_DISCOVER_REVT */
typedef struct
{
    tNFC_STATUS             status;         /* The event status.    */
    UINT8                   num_nfcee;      /* The number of NFCEE  */
} tNFC_NFCEE_DISCOVER_REVT;

#define NFC_NFCEE_INTERFACE_APDU         NCI_NFCEE_INTERFACE_APDU
#define NFC_NFCEE_INTERFACE_HCI_ACCESS   NCI_NFCEE_INTERFACE_HCI_ACCESS
#define NFC_NFCEE_INTERFACE_T3T          NCI_NFCEE_INTERFACE_T3T
#define NFC_NFCEE_INTERFACE_TRANSPARENT  NCI_NFCEE_INTERFACE_TRANSPARENT
#define NFC_NFCEE_INTERFACE_PROPRIETARY  NCI_NFCEE_INTERFACE_PROPRIETARY
typedef UINT8 tNFC_NFCEE_INTERFACE;

#define NFC_NFCEE_TAG_HW_ID             NCI_NFCEE_TAG_HW_ID
#define NFC_NFCEE_TAG_ATR_BYTES         NCI_NFCEE_TAG_ATR_BYTES
#define NFC_NFCEE_TAG_T3T_INFO          NCI_NFCEE_TAG_T3T_INFO
#define NFC_NFCEE_TAG_HCI_HOST_ID       NCI_NFCEE_TAG_HCI_HOST_ID
typedef UINT8 tNFC_NFCEE_TAG;
/* additional NFCEE Info */
typedef struct
{
    tNFC_NFCEE_TAG          tag;
    UINT8                   len;
    UINT8                   info[NFC_MAX_EE_INFO];
} tNFC_NFCEE_TLV;

#define NFC_NFCEE_STATUS_INACTIVE       NCI_NFCEE_STS_CONN_INACTIVE/* NFCEE connected and inactive */
#define NFC_NFCEE_STATUS_ACTIVE         NCI_NFCEE_STS_CONN_ACTIVE  /* NFCEE connected and active   */
#define NFC_NFCEE_STATUS_REMOVED        NCI_NFCEE_STS_REMOVED      /* NFCEE removed                */
/* the data type associated with NFC_NFCEE_INFO_REVT */
typedef struct
{
    tNFC_STATUS             status;                 /* The event status - place holder  */
    UINT8                   nfcee_id;               /* NFCEE ID                         */
    UINT8                   ee_status;              /* The NFCEE status.                */
    UINT8                   num_interface;          /* number of NFCEE interfaces       */
    UINT8                   ee_interface[NFC_MAX_EE_INTERFACE];/* NFCEE interface       */
    UINT8                   num_tlvs;               /* number of TLVs                   */
    tNFC_NFCEE_TLV          ee_tlv[NFC_MAX_EE_TLVS];/* The TLVs associated with NFCEE   */
} tNFC_NFCEE_INFO_REVT;

#define NFC_MODE_ACTIVATE          NCI_NFCEE_MD_ACTIVATE
#define NFC_MODE_DEACTIVATE        NCI_NFCEE_MD_DEACTIVATE
typedef UINT8 tNFC_NFCEE_MODE;
/* the data type associated with NFC_NFCEE_MODE_SET_REVT */
typedef struct
{
    tNFC_STATUS             status;                 /* The event status.*/
    UINT8                   nfcee_id;               /* NFCEE ID         */
    tNFC_NFCEE_MODE         mode;                   /* NFCEE mode       */
} tNFC_NFCEE_MODE_SET_REVT;

#define NFC_MAX_AID_LEN     NCI_MAX_AID_LEN     /* 16 */

/* the data type associated with NFC_CE_GET_ROUTING_REVT */
typedef struct
{
    tNFC_STATUS             status;         /* The event status                 */
    UINT8                   nfcee_id;       /* NFCEE ID                         */
    UINT8                   num_tlvs;       /* number of TLVs                   */
    UINT8                   tlv_size;       /* the total len of all TLVs        */
    UINT8                   param_tlvs[NFC_MAX_EE_TLV_SIZE];/* the TLVs         */
} tNFC_GET_ROUTING_REVT;


/* the data type associated with NFC_CONN_CREATE_CEVT */
typedef struct
{
    tNFC_STATUS             status;         /* The event status                 */
    UINT8                   dest_type;      /* the destination type             */
    UINT8                   id;             /* NFCEE ID  or RF Discovery ID     */
    UINT8                   buff_size;      /* The max buffer size              */
    UINT8                   num_buffs;      /* The number of buffers            */
} tNFC_CONN_CREATE_CEVT;

/* the data type associated with NFC_CONN_CLOSE_CEVT */
typedef struct
{
    tNFC_STATUS             status;         /* The event status                 */
} tNFC_CONN_CLOSE_CEVT;

/* the data type associated with NFC_DATA_CEVT */
typedef struct
{
    tNFC_STATUS             status;         /* The event status                 */
    BT_HDR                  *p_data;        /* The received Data                */
} tNFC_DATA_CEVT;

/* RF Field Status */
#define NFC_RF_STS_NO_REMOTE    NCI_RF_STS_NO_REMOTE    /* No field generated by remote device  */
#define NFC_RF_STS_REMOTE       NCI_RF_STS_REMOTE       /* field generated by remote device     */
typedef UINT8 tNFC_RF_STS;

/* RF Field Technologies */
#define NFC_RF_TECHNOLOGY_A     NCI_RF_TECHNOLOGY_A
#define NFC_RF_TECHNOLOGY_B     NCI_RF_TECHNOLOGY_B
#define NFC_RF_TECHNOLOGY_F     NCI_RF_TECHNOLOGY_F
#define NFC_RF_TECHNOLOGY_15693 NCI_RF_TECHNOLOGY_15693
typedef UINT8 tNFC_RF_TECH;


/* Supported Protocols */
#define NFC_PROTOCOL_UNKNOWN    NCI_PROTOCOL_UNKNOWN  /* Unknown */
#define NFC_PROTOCOL_T1T        NCI_PROTOCOL_T1T      /* Type1Tag    - NFC-A            */
#define NFC_PROTOCOL_T2T        NCI_PROTOCOL_T2T      /* Type2Tag    - NFC-A            */
#define NFC_PROTOCOL_T3T        NCI_PROTOCOL_T3T      /* Type3Tag    - NFC-F            */
#define NFC_PROTOCOL_ISO_DEP    NCI_PROTOCOL_ISO_DEP  /* Type 4A,4B  - NFC-A or NFC-B   */
#define NFC_PROTOCOL_NFC_DEP    NCI_PROTOCOL_NFC_DEP  /* NFCDEP/LLCP - NFC-A or NFC-F       */
#define NFC_PROTOCOL_MIFARE     NCI_PROTOCOL_MIFARE
#define NFC_PROTOCOL_B_PRIME    NCI_PROTOCOL_B_PRIME
#define NFC_PROTOCOL_15693      NCI_PROTOCOL_15693
#define NFC_PROTOCOL_KOVIO      NCI_PROTOCOL_KOVIO
typedef UINT8 tNFC_PROTOCOL;

/* Discovery Types/Detected Technology and Mode */
#define NFC_DISCOVERY_TYPE_POLL_A           NCI_DISCOVERY_TYPE_POLL_A
#define NFC_DISCOVERY_TYPE_POLL_B           NCI_DISCOVERY_TYPE_POLL_B
#define NFC_DISCOVERY_TYPE_POLL_F           NCI_DISCOVERY_TYPE_POLL_F
#define NFC_DISCOVERY_TYPE_POLL_A_ACTIVE    NCI_DISCOVERY_TYPE_POLL_A_ACTIVE
#define NFC_DISCOVERY_TYPE_POLL_F_ACTIVE    NCI_DISCOVERY_TYPE_POLL_F_ACTIVE
#define NFC_DISCOVERY_TYPE_POLL_ISO15693    NCI_DISCOVERY_TYPE_POLL_ISO15693
#define NFC_DISCOVERY_TYPE_POLL_B_PRIME     NCI_DISCOVERY_TYPE_POLL_B_PRIME
#define NFC_DISCOVERY_TYPE_POLL_KOVIO       NCI_DISCOVERY_TYPE_POLL_KOVIO
#define NFC_DISCOVERY_TYPE_LISTEN_A         NCI_DISCOVERY_TYPE_LISTEN_A
#define NFC_DISCOVERY_TYPE_LISTEN_B         NCI_DISCOVERY_TYPE_LISTEN_B
#define NFC_DISCOVERY_TYPE_LISTEN_F         NCI_DISCOVERY_TYPE_LISTEN_F
#define NFC_DISCOVERY_TYPE_LISTEN_A_ACTIVE  NCI_DISCOVERY_TYPE_LISTEN_A_ACTIVE
#define NFC_DISCOVERY_TYPE_LISTEN_F_ACTIVE  NCI_DISCOVERY_TYPE_LISTEN_F_ACTIVE
#define NFC_DISCOVERY_TYPE_LISTEN_ISO15693  NCI_DISCOVERY_TYPE_LISTEN_ISO15693
#define NFC_DISCOVERY_TYPE_LISTEN_B_PRIME   NCI_DISCOVERY_TYPE_LISTEN_B_PRIME
typedef UINT8 tNFC_DISCOVERY_TYPE;
typedef UINT8 tNFC_RF_TECH_N_MODE;

/* Select Response codes */
#define NFC_SEL_RES_NFC_FORUM_T2T           0x00
#define NFC_SEL_RES_MF_CLASSIC              0x08

/* Bit Rates */
#define NFC_BIT_RATE_106        NCI_BIT_RATE_106    /* 106 kbit/s */
#define NFC_BIT_RATE_212        NCI_BIT_RATE_212    /* 212 kbit/s */
#define NFC_BIT_RATE_424        NCI_BIT_RATE_424    /* 424 kbit/s */
#define NFC_BIT_RATE_848        NCI_BIT_RATE_848    /* 848 Kbit/s */
#define NFC_BIT_RATE_1696       NCI_BIT_RATE_1696   /* 1696 Kbit/s*/
#define NFC_BIT_RATE_3392       NCI_BIT_RATE_3392   /* 3392 Kbit/s*/
#define NFC_BIT_RATE_6784       NCI_BIT_RATE_6784   /* 6784 Kbit/s*/
typedef UINT8 tNFC_BIT_RATE;

/**********************************************
 * Interface Types
 **********************************************/
#define NFC_INTERFACE_EE_DIRECT_RF  NCI_INTERFACE_EE_DIRECT_RF
#define NFC_INTERFACE_FRAME         NCI_INTERFACE_FRAME
#define NFC_INTERFACE_ISO_DEP       NCI_INTERFACE_ISO_DEP
#define NFC_INTERFACE_NDEF          NCI_INTERFACE_NDEF
#define NFC_INTERFACE_NFC_DEP       NCI_INTERFACE_NFC_DEP
#define NFC_INTERFACE_LLCP_LOW      NCI_INTERFACE_LLCP_LOW
#define NFC_INTERFACE_LLCP_HIGH     NCI_INTERFACE_LLCP_HIGH
#define NFC_INTERFACE_VS_T2T_CE     NCI_INTERFACE_VS_T2T_CE
#define NFC_INTERFACE_MIFARE        NCI_INTERFACE_VS_MIFARE
typedef tNCI_INTF_TYPE tNFC_INTF_TYPE;

/**********************************************
 *  Deactivation Type
 **********************************************/
#define NFC_DEACTIVATE_TYPE_IDLE        NCI_DEACTIVATE_TYPE_IDLE
#define NFC_DEACTIVATE_TYPE_SLEEP       NCI_DEACTIVATE_TYPE_SLEEP
#define NFC_DEACTIVATE_TYPE_SLEEP_AF    NCI_DEACTIVATE_TYPE_SLEEP_AF
#define NFC_DEACTIVATE_TYPE_DISCOVERY   NCI_DEACTIVATE_TYPE_DISCOVERY
typedef UINT8 tNFC_DEACT_TYPE;

/**********************************************
 *  Deactivation Reasons
 **********************************************/
#define NFC_DEACTIVATE_REASON_DH_REQ        NCI_DEACTIVATE_REASON_DH_REQ
#define NFC_DEACTIVATE_REASON_ENDPOINT_REQ  NCI_DEACTIVATE_REASON_ENDPOINT_REQ
#define NFC_DEACTIVATE_REASON_RF_LINK_LOSS  NCI_DEACTIVATE_REASON_RF_LINK_LOSS
#define NFC_DEACTIVATE_REASON_NFCB_BAD_AFI  NCI_DEACTIVATE_REASON_NFCB_BAD_AFI
typedef UINT8 tNFC_DEACT_REASON;

/* the data type associated with NFC_RF_FIELD_REVT */
typedef struct
{
    tNFC_STATUS             status;     /* The event status - place holder. */
    tNFC_RF_STS             rf_field;   /* RF Field Status                  */
} tNFC_RF_FIELD_REVT;

#define NFC_MAX_APP_DATA_LEN    40
typedef struct
{
    UINT8                   len_aid;                /* length of application id */
    UINT8                   aid[NFC_MAX_AID_LEN];   /* application id           */
} tNFC_AID;
typedef struct
{
    UINT8                   len_aid;                /* length of application id */
    UINT8                   aid[NFC_MAX_AID_LEN];   /* application id           */
    UINT8                   len_data;               /* len of application data  */
    UINT8                   data[NFC_MAX_APP_DATA_LEN];  /* application data    */
} tNFC_APP_INIT;

#define NFC_EE_TRIG_SELECT              NCI_EE_TRIG_7816_SELECT  /* ISO 7816-4 SELECT command */
#define NFC_EE_TRIG_RF_PROTOCOL         NCI_EE_TRIG_RF_PROTOCOL  /* RF Protocol changed       */
#define NFC_EE_TRIG_RF_TECHNOLOGY       NCI_EE_TRIG_RF_TECHNOLOGY/* RF Technology changed     */
#define NFC_EE_TRIG_APP_INIT            NCI_EE_TRIG_APP_INIT     /* Application initiation    */
typedef UINT8 tNFC_EE_TRIGGER;
typedef struct
{
    tNFC_EE_TRIGGER         trigger;        /* the trigger of this event        */
    union
    {
        tNFC_PROTOCOL       protocol;
        tNFC_RF_TECH        technology;
        tNFC_AID            aid;
        tNFC_APP_INIT       app_init;
    } param; /* Discovery Type specific parameters */
} tNFC_ACTION_DATA;

/* the data type associated with NFC_EE_ACTION_REVT */
typedef struct
{
    tNFC_STATUS             status;         /* The event status - place holder  */
    UINT8                   nfcee_id;       /* NFCEE ID                         */
    tNFC_ACTION_DATA        act_data;       /* data associated /w the action    */
} tNFC_EE_ACTION_REVT;

#define NFC_EE_DISC_OP_ADD      0
#define NFC_EE_DISC_OP_REMOVE   1
typedef UINT8 tNFC_EE_DISC_OP;
typedef struct
{
    tNFC_EE_DISC_OP         op;             /* add or remove this entry         */
    UINT8                   nfcee_id;       /* NFCEE ID                         */
    tNFC_RF_TECH_N_MODE     tech_n_mode;    /* Discovery Technology and Mode    */
    tNFC_PROTOCOL           protocol;       /* NFC protocol                     */
} tNFC_EE_DISCOVER_INFO;

#ifndef NFC_MAX_EE_DISC_ENTRIES
#define NFC_MAX_EE_DISC_ENTRIES     6
#endif
#define NFC_EE_DISCOVER_ENTRY_LEN   5 /* T, L, V(NFCEE ID, TechnMode, Protocol) */
#define NFC_EE_DISCOVER_INFO_LEN    3 /* NFCEE ID, TechnMode, Protocol */
/* the data type associated with NFC_EE_DISCOVER_REQ_REVT */
typedef struct
{
    tNFC_STATUS             status;         /* The event status - place holder  */
    UINT8                   num_info;       /* number of entries in info[]      */
    tNFC_EE_DISCOVER_INFO   info[NFC_MAX_EE_DISC_ENTRIES];  /* discovery request from NFCEE */
} tNFC_EE_DISCOVER_REQ_REVT;

typedef union
{
    tNFC_STATUS                 status;     /* The event status. */
    tNFC_ENABLE_REVT            enable;
    tNFC_SET_CONFIG_REVT        set_config;
    tNFC_GET_CONFIG_REVT        get_config;
    tNFC_NFCEE_DISCOVER_REVT    nfcee_discover;
    tNFC_NFCEE_INFO_REVT        nfcee_info;
    tNFC_NFCEE_MODE_SET_REVT    mode_set;
    tNFC_RF_FIELD_REVT          rf_field;
    tNFC_STATUS                 cfg_routing;
    tNFC_GET_ROUTING_REVT       get_routing;
    tNFC_EE_ACTION_REVT         ee_action;
    tNFC_EE_DISCOVER_REQ_REVT   ee_discover_req;
    void                        *p_vs_evt_data;
} tNFC_RESPONSE;

/*************************************
**  RESPONSE Callback Functions
**************************************/
typedef void (tNFC_RESPONSE_CBACK) (tNFC_RESPONSE_EVT event, tNFC_RESPONSE *p_data);

/* The events reported on tNFC_VS_CBACK */
/* The event is (NCI_RSP_BIT|oid) for response and (NCI_NTF_BIT|oid) for notification*/

typedef UINT8 tNFC_VS_EVT;

/*************************************
**  Proprietary (Vendor Specific) Callback Functions
**************************************/
typedef void (tNFC_VS_CBACK) (tNFC_VS_EVT event, UINT16 data_len, UINT8 *p_data);

/* the events reported on tNFC_DISCOVER_CBACK */
enum
{
    NFC_START_DEVT = NFC_FIRST_DEVT,    /* Status of NFC_DiscoveryStart     */
    NFC_MAP_DEVT,                       /* Status of NFC_DiscoveryMap       */
    NFC_RESULT_DEVT,                    /* The responses from remote device */
    NFC_SELECT_DEVT,                    /* Status of NFC_DiscoverySelect    */
    NFC_ACTIVATE_DEVT,                  /* RF interface is activated        */
    NFC_DEACTIVATE_DEVT                 /* Status of RF deactivation        */
};
typedef UINT16 tNFC_DISCOVER_EVT;

/* the data type associated with NFC_START_DEVT */
typedef tNFC_STATUS tNFC_START_DEVT;

typedef tNCI_RF_PA_PARAMS tNFC_RF_PA_PARAMS;
#define NFC_MAX_SENSB_RES_LEN         NCI_MAX_SENSB_RES_LEN
#define NFC_NFCID0_MAX_LEN          4
typedef struct
{
    UINT8       sensb_res_len;/* Length of SENSB_RES Response (Byte 2 - Byte 12 or 13) Available after Technology Detection */
    UINT8       sensb_res[NFC_MAX_SENSB_RES_LEN]; /* SENSB_RES Response (ATQ) */
    UINT8       nfcid0[NFC_NFCID0_MAX_LEN];
} tNFC_RF_PB_PARAMS;

#define NFC_MAX_SENSF_RES_LEN       NCI_MAX_SENSF_RES_LEN
#define NFC_NFCID2_LEN              NCI_NFCID2_LEN
typedef struct
{
    UINT8       bit_rate;/* NFC_BIT_RATE_212 or NFC_BIT_RATE_424 */
    UINT8       sensf_res_len;/* Length of SENSF_RES Response (Byte 2 - Byte 17 or 19) Available after Technology Detection */
    UINT8       sensf_res[NFC_MAX_SENSF_RES_LEN]; /* SENSB_RES Response */
    UINT8       nfcid2[NFC_NFCID2_LEN];  /* NFCID2 generated by the Local NFCC for NFC-DEP Protocol.Available for Frame Interface  */
    UINT8       mrti_check;
    UINT8       mrti_update;
} tNFC_RF_PF_PARAMS;

typedef tNCI_RF_LF_PARAMS tNFC_RF_LF_PARAMS;

#define NFC_ISO15693_UID_LEN        8
typedef struct
{
    UINT8       flag;
    UINT8       dsfid;
    UINT8       uid[NFC_ISO15693_UID_LEN];
} tNFC_RF_PISO15693_PARAMS;

#ifndef NFC_KOVIO_MAX_LEN
#define NFC_KOVIO_MAX_LEN       32
#endif
typedef struct
{
    UINT8       uid_len;
    UINT8       uid[NFC_KOVIO_MAX_LEN];
} tNFC_RF_PKOVIO_PARAMS;

typedef union
{
    tNFC_RF_PA_PARAMS   pa;
    tNFC_RF_PB_PARAMS   pb;
    tNFC_RF_PF_PARAMS   pf;
    tNFC_RF_LF_PARAMS   lf;
    tNFC_RF_PISO15693_PARAMS pi93;
    tNFC_RF_PKOVIO_PARAMS pk;
} tNFC_RF_TECH_PARAMU;

typedef struct
{
    tNFC_DISCOVERY_TYPE     mode;
    tNFC_RF_TECH_PARAMU     param;
} tNFC_RF_TECH_PARAMS;

/* the data type associated with NFC_RESULT_DEVT */
typedef struct
{
    tNFC_STATUS             status;         /* The event status - place holder.  */
    UINT8                   rf_disc_id;     /* RF Discovery ID                   */
    UINT8                   protocol;       /* supported protocol                */
    tNFC_RF_TECH_PARAMS     rf_tech_param;  /* RF technology parameters          */
    UINT8                   more;           /* 0: last, 1: last (limit), 2: more */
} tNFC_RESULT_DEVT;

/* the data type associated with NFC_SELECT_DEVT */
typedef tNFC_STATUS tNFC_SELECT_DEVT;

/* the data type associated with NFC_STOP_DEVT */
typedef tNFC_STATUS tNFC_STOP_DEVT;

#define NFC_MAX_ATS_LEN             NCI_MAX_ATS_LEN
#define NFC_MAX_HIS_BYTES_LEN       NCI_MAX_HIS_BYTES_LEN
#define NFC_MAX_GEN_BYTES_LEN       NCI_MAX_GEN_BYTES_LEN


typedef struct
{
    UINT8       ats_res_len;                /* Length of ATS RES                */
    UINT8       ats_res[NFC_MAX_ATS_LEN];   /* ATS RES                          */
    BOOLEAN     nad_used;                   /* NAD is used or not               */
    UINT8       fwi;                        /* Frame Waiting time Integer       */
    UINT8       sfgi;                       /* Start-up Frame Guard time Integer*/
    UINT8       his_byte_len;               /* len of historical bytes          */
    UINT8       his_byte[NFC_MAX_HIS_BYTES_LEN];/* historical bytes             */
} tNFC_INTF_PA_ISO_DEP;

typedef struct
{
    UINT8       rats;  /* RATS */
} tNFC_INTF_LA_ISO_DEP;


typedef struct
{
    UINT8       atr_res_len;                /* Length of ATR_RES            */
    UINT8       atr_res[NFC_MAX_ATS_LEN];   /* ATR_RES (Byte 3 - Byte 17+n) */
    UINT8       max_payload_size;           /* 64, 128, 192 or 254          */
    UINT8       gen_bytes_len;              /* len of general bytes         */
    UINT8       gen_bytes[NFC_MAX_GEN_BYTES_LEN];/* general bytes           */
    UINT8       waiting_time;               /* WT -> Response Waiting Time RWT = (256 x 16/fC) x 2WT */
} tNFC_INTF_PA_NFC_DEP;

/* Note: keep tNFC_INTF_PA_NFC_DEP data member in the same order as tNFC_INTF_LA_NFC_DEP */
typedef struct
{
    UINT8       atr_req_len;                /* Length of ATR_REQ            */
    UINT8       atr_req[NFC_MAX_ATS_LEN];   /* ATR_REQ (Byte 3 - Byte 18+n) */
    UINT8       max_payload_size;           /* 64, 128, 192 or 254          */
    UINT8       gen_bytes_len;              /* len of general bytes         */
    UINT8       gen_bytes[NFC_MAX_GEN_BYTES_LEN];/* general bytes           */
} tNFC_INTF_LA_NFC_DEP;
typedef tNFC_INTF_LA_NFC_DEP tNFC_INTF_LF_NFC_DEP;
typedef tNFC_INTF_PA_NFC_DEP tNFC_INTF_PF_NFC_DEP;

#define NFC_MAX_ATTRIB_LEN      NCI_MAX_ATTRIB_LEN

typedef struct
{
    UINT8       attrib_res_len;                /* Length of ATTRIB RES      */
    UINT8       attrib_res[NFC_MAX_ATTRIB_LEN];/* ATTRIB RES                */
    UINT8       hi_info_len;                   /* len of Higher layer Info  */
    UINT8       hi_info[NFC_MAX_GEN_BYTES_LEN];/* Higher layer Info         */
    UINT8       mbli;                          /* Maximum buffer length.    */
} tNFC_INTF_PB_ISO_DEP;

typedef struct
{
    UINT8       attrib_req_len;                /* Length of ATTRIB REQ      */
    UINT8       attrib_req[NFC_MAX_ATTRIB_LEN];/* ATTRIB REQ (Byte 2 - 10+k)*/
    UINT8       hi_info_len;                   /* len of Higher layer Info  */
    UINT8       hi_info[NFC_MAX_GEN_BYTES_LEN];/* Higher layer Info         */
    UINT8       nfcid0[NFC_NFCID0_MAX_LEN];    /* NFCID0                    */
} tNFC_INTF_LB_ISO_DEP;


#ifndef NFC_MAX_RAW_PARAMS
#define NFC_MAX_RAW_PARAMS      16
#endif
#define NFC_MAX_RAW_PARAMS       16
typedef struct
{
    UINT8       param_len;
    UINT8       param[NFC_MAX_RAW_PARAMS];
} tNFC_INTF_FRAME;

typedef struct
{
    tNFC_INTF_TYPE      type;  /* Interface Type  1 Byte  See Table 67 */
    union
    {
        tNFC_INTF_LA_ISO_DEP    la_iso;
        tNFC_INTF_PA_ISO_DEP    pa_iso;
        tNFC_INTF_LB_ISO_DEP    lb_iso;
        tNFC_INTF_PB_ISO_DEP    pb_iso;
        tNFC_INTF_LA_NFC_DEP    la_nfc;
        tNFC_INTF_PA_NFC_DEP    pa_nfc;
        tNFC_INTF_LF_NFC_DEP    lf_nfc;
        tNFC_INTF_PF_NFC_DEP    pf_nfc;
        tNFC_INTF_FRAME         frame;
    } intf_param;       /* Activation Parameters   0 - n Bytes */
} tNFC_INTF_PARAMS;

/* the data type associated with NFC_ACTIVATE_DEVT */
typedef struct
{
    UINT8                   rf_disc_id;     /* RF Discovery ID          */
    tNFC_PROTOCOL           protocol;       /* supported protocol       */
    tNFC_RF_TECH_PARAMS     rf_tech_param;  /* RF technology parameters */
    tNFC_DISCOVERY_TYPE     data_mode;      /* for future Data Exchange */
    tNFC_BIT_RATE           tx_bitrate;     /* Data Exchange Tx Bitrate */
    tNFC_BIT_RATE           rx_bitrate;     /* Data Exchange Rx Bitrate */
    tNFC_INTF_PARAMS        intf_param;     /* interface type and params*/
} tNFC_ACTIVATE_DEVT;

/* the data type associated with NFC_DEACTIVATE_DEVT and NFC_DEACTIVATE_CEVT */
typedef struct
{
    tNFC_STATUS             status;         /* The event status.        */
    tNFC_DEACT_TYPE         type;           /* De-activate type         */
    BOOLEAN                 is_ntf;         /* TRUE, if deactivate notif*/
} tNFC_DEACTIVATE_DEVT;

typedef union
{
    tNFC_STATUS             status;         /* The event status.        */
    tNFC_START_DEVT         start;
    tNFC_RESULT_DEVT        result;
    tNFC_SELECT_DEVT        select;
    tNFC_STOP_DEVT          stop;
    tNFC_ACTIVATE_DEVT      activate;
    tNFC_DEACTIVATE_DEVT    deactivate;
} tNFC_DISCOVER;

/* Min TR0 indicates to tag the min delay before responding after the end of command */
#define NFC_RF_PARAM_MIN_TR0_DEFAULT    0x00
#define NFC_RF_PARAM_MIN_TR0_48X        0x01    /* 48 x 16/fc */
#define NFC_RF_PARAM_MIN_TR0_16X        0x02    /* 16 x 16/fc */

/* Min TR1 indicates to tag the min delay between subcarrier modulation and data transmission */
#define NFC_RF_PARAM_MIN_TR1_DEFAULT    0x00
#define NFC_RF_PARAM_MIN_TR1_64X        0x01    /* 64 x 16/fc */
#define NFC_RF_PARAM_MIN_TR1_16X        0x02    /* 16 x 16/fc */

/* Min TR2 indicates to RW the min delay between EoS of tag and SoS of RW */
#define NFC_RF_PARAM_MIN_TR2_1792       0x00    /* 1792/fc (10etu + 32/fc) */
#define NFC_RF_PARAM_MIN_TR2_3328       0x01    /* 3328/fc (10etu + 128/fc) */
#define NFC_RF_PARAM_MIN_TR2_5376       0x02    /* 5376/fc (10etu + 256/fc) */
#define NFC_RF_PARAM_MIN_TR2_9472       0x03    /* 9472/fc (10etu + 512/fc) */

#define NFC_RF_PARAM_EOS_REQUIRED       0x00    /* EoS required */
#define NFC_RF_PARAM_EOS_NOT_REQUIRED   0x01    /* EoS not required */

#define NFC_RF_PARAM_SOS_REQUIRED       0x00    /* SoS required */
#define NFC_RF_PARAM_SOS_NOT_REQUIRED   0x01    /* SoS not required */

typedef struct
{
    BOOLEAN                 include_rf_tech_mode;   /* TRUE if including RF Tech and Mode update    */
    tNFC_RF_TECH_N_MODE     rf_tech_n_mode;         /* RF tech and mode                             */
    BOOLEAN                 include_tx_bit_rate;    /* TRUE if including Tx bit rate update         */
    tNFC_BIT_RATE           tx_bit_rate;            /* Transmit Bit Rate                            */
    BOOLEAN                 include_rx_bit_rate;    /* TRUE if including Rx bit rate update         */
    tNFC_BIT_RATE           rx_bit_rate;            /* Receive Bit Rate                             */
    BOOLEAN                 include_nfc_b_config;   /* TRUE if including NFC-B data exchange config */
    UINT8                   min_tr0;                /* Minimun TR0                                  */
    UINT8                   min_tr1;                /* Minimun TR1                                  */
    UINT8                   suppression_eos;        /* Suppression of EoS                           */
    UINT8                   suppression_sos;        /* Suppression of SoS                           */
    UINT8                   min_tr2;                /* Minimun TR1                                  */
} tNFC_RF_COMM_PARAMS;

/*************************************
**  DISCOVER Callback Functions
**************************************/
typedef void (tNFC_DISCOVER_CBACK) (tNFC_DISCOVER_EVT event, tNFC_DISCOVER *p_data);

/* the events reported on tNFC_TEST_CBACK */
enum
{
    NFC_LOOPBACK_TEVT = NFC_FIRST_TEVT, /* 0  Loopback test             */
    NFC_RF_CONTROL_TEVT,                /* 1  RF control Test response  */
    NFC_RF_FIELD_DONE_TEVT              /* 1  RF control Test notificatn*/
};
typedef UINT16 tNFC_TEST_EVT;

/* the data type associated with NFC_LOOPBACK_TEVT */
typedef struct
{
    tNFC_STATUS             status;     /* The event status.            */
    BT_HDR                  *p_data;    /* The loop back data from NFCC */
} tNFC_LOOPBACK_TEVT;

/* the data type associated with NFC_RF_CONTROL_TEVT */
typedef tNFC_STATUS tNFC_RF_CONTROL_TEVT;

typedef union
{
    tNFC_STATUS             status;     /* The event status.            */
    tNFC_LOOPBACK_TEVT      loop_back;
    tNFC_RF_CONTROL_TEVT    rf_control;
} tNFC_TEST;

/*************************************
**  TEST Callback Functions
**************************************/
typedef void (tNFC_TEST_CBACK) (tNFC_TEST_EVT event, tNFC_TEST *p_data);


typedef tNFC_DEACTIVATE_DEVT tNFC_DEACTIVATE_CEVT;
typedef union
{
    tNFC_STATUS             status;     /* The event status. */
    tNFC_CONN_CREATE_CEVT   conn_create;
    tNFC_CONN_CLOSE_CEVT    conn_close;
    tNFC_DEACTIVATE_CEVT    deactivate;
    tNFC_DATA_CEVT          data;
} tNFC_CONN;

/*************************************
**  Data Callback Functions
**************************************/
typedef void (tNFC_CONN_CBACK) (UINT8 conn_id, tNFC_CONN_EVT event, tNFC_CONN *p_data);
#define NFC_MAX_CONN_ID                15
#define NFC_ILLEGAL_CONN_ID            0xFF
#define NFC_RF_CONN_ID                 0    /* the static connection ID for RF traffic */



/*************************************
**  Status callback function
**************************************/
typedef void (tNFC_STATUS_CBACK) (tNFC_STATUS status);

/*****************************************************************************
**  EXTERNAL FUNCTION DECLARATIONS
*****************************************************************************/
#ifdef __cplusplus
extern "C" {
#endif

/*******************************************************************************
**
** Function         NFC_Enable
**
** Description      This function enables NFC. Prior to calling NFC_Enable:
**                  - the NFCC must be powered up, and ready to receive commands.
**                  - GKI must be enabled
**                  - NFC_TASK must be started
**                  - NCIT_TASK must be started (if using dedicated NCI transport)
**
**                  This function opens the NCI transport (if applicable),
**                  resets the NFC controller, and initializes the NFC subsystems.
**
**                  When the NFC startup procedure is completed, an
**                  NFC_ENABLE_REVT is returned to the application using the
**                  tNFC_RESPONSE_CBACK.
**
** Returns          tNFC_STATUS
**
*******************************************************************************/
NFC_API extern tNFC_STATUS NFC_Enable (tNFC_RESPONSE_CBACK *p_cback);

/*******************************************************************************
**
** Function         NFC_Disable
**
** Description      This function performs clean up routines for shutting down
**                  NFC and closes the NCI transport (if using dedicated NCI
**                  transport).
**
**                  When the NFC shutdown procedure is completed, an
**                  NFC_DISABLED_REVT is returned to the application using the
**                  tNFC_RESPONSE_CBACK.
**
** Returns          nothing
**
*******************************************************************************/
NFC_API extern void NFC_Disable (void);

/*******************************************************************************
**
** Function         NFC_Init
**
** Description      This function initializes control blocks for NFC
**
** Returns          nothing
**
*******************************************************************************/
NFC_API extern void NFC_Init(tHAL_NFC_ENTRY *p_hal_entry_tbl);

/*******************************************************************************
**
** Function         NFC_GetLmrtSize
**
** Description      Called by application wto query the Listen Mode Routing
**                  Table size supported by NFCC
**
** Returns          Listen Mode Routing Table size
**
*******************************************************************************/
NFC_API extern UINT16 NFC_GetLmrtSize(void);

/*******************************************************************************
**
** Function         NFC_SetConfig
**
** Description      This function is called to send the configuration parameter
**                  TLV to NFCC. The response from NFCC is reported by
**                  tNFC_RESPONSE_CBACK as NFC_SET_CONFIG_REVT.
**
** Parameters       tlv_size - the length of p_param_tlvs.
**                  p_param_tlvs - the parameter ID/Len/Value list
**
** Returns          tNFC_STATUS
**
*******************************************************************************/
NFC_API extern tNFC_STATUS NFC_SetConfig (UINT8     tlv_size,
                                          UINT8    *p_param_tlvs);

/*******************************************************************************
**
** Function         NFC_GetConfig
**
** Description      This function is called to retrieve the parameter TLV from NFCC.
**                  The response from NFCC is reported by tNFC_RESPONSE_CBACK
**                  as NFC_GET_CONFIG_REVT.
**
** Parameters       num_ids - the number of parameter IDs
**                  p_param_ids - the parameter ID list.
**
** Returns          tNFC_STATUS
**
*******************************************************************************/
NFC_API extern tNFC_STATUS NFC_GetConfig (UINT8     num_ids,
                                          UINT8    *p_param_ids);

/*******************************************************************************
**
** Function         NFC_NfceeDiscover
**
** Description      This function is called to enable or disable NFCEE Discovery.
**                  The response from NFCC is reported by tNFC_RESPONSE_CBACK
**                  as NFC_NFCEE_DISCOVER_REVT.
**                  The notification from NFCC is reported by tNFC_RESPONSE_CBACK
**                  as NFC_NFCEE_INFO_REVT.
**
** Parameters       discover - 1 to enable discover, 0 to disable.
**
** Returns          tNFC_STATUS
**
*******************************************************************************/
NFC_API extern tNFC_STATUS NFC_NfceeDiscover (BOOLEAN discover);

/*******************************************************************************
**
** Function         NFC_NfceeModeSet
**
** Description      This function is called to activate or de-activate an NFCEE
**                  connected to the NFCC.
**                  The response from NFCC is reported by tNFC_RESPONSE_CBACK
**                  as NFC_NFCEE_MODE_SET_REVT.
**
** Parameters       nfcee_id - the NFCEE to activate or de-activate.
**                  mode - 0 to activate NFCEE, 1 to de-activate.
**
** Returns          tNFC_STATUS
**
*******************************************************************************/
NFC_API extern tNFC_STATUS NFC_NfceeModeSet (UINT8              nfcee_id,
                                             tNFC_NFCEE_MODE    mode);
/*******************************************************************************
**
** Function         NFC_DiscoveryMap
**
** Description      This function is called to set the discovery interface mapping.
**                  The response from NFCC is reported by tNFC_DISCOVER_CBACK as.
**                  NFC_MAP_DEVT.
**
** Parameters       num - the number of items in p_params.
**                  p_maps - the discovery interface mappings
**                  p_cback - the discovery callback function
**
** Returns          tNFC_STATUS
**
*******************************************************************************/
NFC_API extern tNFC_STATUS NFC_DiscoveryMap(UINT8 num, tNFC_DISCOVER_MAPS *p_maps,
                                        tNFC_DISCOVER_CBACK *p_cback);

/*******************************************************************************
**
** Function         NFC_DiscoveryStart
**
** Description      This function is called to start Polling and/or Listening.
**                  The response from NFCC is reported by tNFC_DISCOVER_CBACK as.
**                  NFC_START_DEVT. The notification from NFCC is reported by
**                  tNFC_DISCOVER_CBACK as NFC_RESULT_DEVT.
**
** Parameters       num_params - the number of items in p_params.
**                  p_params - the discovery parameters
**                  p_cback - the discovery callback function
**
** Returns          tNFC_STATUS
**
*******************************************************************************/
NFC_API extern tNFC_STATUS NFC_DiscoveryStart(UINT8                 num_params,
                                              tNFC_DISCOVER_PARAMS *p_params,
                                              tNFC_DISCOVER_CBACK  *p_cback);

/*******************************************************************************
**
** Function         NFC_DiscoverySelect
**
** Description      If tNFC_DISCOVER_CBACK reports status=NFC_MULTIPLE_PROT,
**                  the application needs to use this function to select the
**                  the logical endpoint to continue. The response from NFCC is
**                  reported by tNFC_DISCOVER_CBACK as NFC_SELECT_DEVT.
**
** Parameters       rf_disc_id - The ID identifies the remote device.
**                  protocol - the logical endpoint on the remote devide
**                  rf_interface - the RF interface to communicate with NFCC
**
** Returns          tNFC_STATUS
**
*******************************************************************************/
NFC_API extern tNFC_STATUS NFC_DiscoverySelect (UINT8    rf_disc_id,
                                                UINT8    protocol,
                                                UINT8    rf_interface);

/*******************************************************************************
**
** Function         NFC_ConnCreate
**
** Description      This function is called to create a logical connection with
**                  NFCC for data exchange.
**                  The response from NFCC is reported in tNFC_CONN_CBACK
**                  as NFC_CONN_CREATE_CEVT.
**
** Parameters       dest_type - the destination type
**                  id   - the NFCEE ID or RF Discovery ID .
**                  protocol - the protocol
**                  p_cback - the data callback function to receive data fron NFCC
**
** Returns          tNFC_STATUS
**
*******************************************************************************/
NFC_API extern tNFC_STATUS NFC_ConnCreate(UINT8             dest_type,
                                          UINT8             id,
                                          UINT8             protocol,
                                          tNFC_CONN_CBACK  *p_cback);

/*******************************************************************************
**
** Function         NFC_ConnClose
**
** Description      This function is called to close a logical connection with
**                  NFCC.
**                  The response from NFCC is reported in tNFC_CONN_CBACK
**                  as NFC_CONN_CLOSE_CEVT.
**
** Parameters       conn_id - the connection id.
**
** Returns          tNFC_STATUS
**
*******************************************************************************/
NFC_API extern tNFC_STATUS NFC_ConnClose(UINT8 conn_id);

/*******************************************************************************
**
** Function         NFC_SetStaticRfCback
**
** Description      This function is called to update the data callback function
**                  to receive the data for the given connection id.
**
** Parameters       p_cback - the connection callback function
**
** Returns          Nothing
**
*******************************************************************************/
NFC_API extern void NFC_SetStaticRfCback(tNFC_CONN_CBACK    *p_cback);

/*******************************************************************************
**
** Function         NFC_SetReassemblyFlag
**
** Description      This function is called to set if nfc will reassemble
**                  nci packet as much as its buffer can hold or it should not
**                  reassemble but forward the fragmented nci packet to layer above.
**                  If nci data pkt is fragmented, nfc may send multiple
**                  NFC_DATA_CEVT with status NFC_STATUS_CONTINUE before sending
**                  NFC_DATA_CEVT with status NFC_STATUS_OK based on reassembly
**                  configuration and reassembly buffer size
**
** Parameters       reassembly - flag to indicate if nfc may reassemble or not
**
** Returns          Nothing
**
*******************************************************************************/
NFC_API extern void NFC_SetReassemblyFlag (BOOLEAN    reassembly);

/*******************************************************************************
**
** Function         NFC_SendData
**
** Description      This function is called to send the given data packet
**                  to the connection identified by the given connection id.
**
** Parameters       conn_id - the connection id.
**                  p_data - the data packet
**
** Returns          tNFC_STATUS
**
*******************************************************************************/
NFC_API extern tNFC_STATUS NFC_SendData(UINT8       conn_id,
                                        BT_HDR     *p_data);

/*******************************************************************************
**
** Function         NFC_FlushData
**
** Description      This function is called to discard the tx data queue of
**                  the given connection id.
**
** Parameters       conn_id - the connection id.
**
** Returns          tNFC_STATUS
**
*******************************************************************************/
NFC_API extern tNFC_STATUS NFC_FlushData (UINT8       conn_id);

/*******************************************************************************
**
** Function         NFC_Deactivate
**
** Description      This function is called to stop the discovery process or
**                  put the listen device in sleep mode or terminate the NFC link.
**
**                  The response from NFCC is reported by tNFC_DISCOVER_CBACK
**                  as NFC_DEACTIVATE_DEVT.
**
** Parameters       deactivate_type - NFC_DEACTIVATE_TYPE_IDLE, to IDLE mode.
**                                    NFC_DEACTIVATE_TYPE_SLEEP to SLEEP mode.
**                                    NFC_DEACTIVATE_TYPE_SLEEP_AF to SLEEP_AF mode.
**
** Returns          tNFC_STATUS
**
*******************************************************************************/
NFC_API extern tNFC_STATUS NFC_Deactivate(tNFC_DEACT_TYPE deactivate_type);

/*******************************************************************************
**
** Function         NFC_UpdateRFCommParams
**
** Description      This function is called to update RF Communication parameters
**                  once the Frame RF Interface has been activated.
**
**                  The response from NFCC is reported by tNFC_RESPONSE_CBACK
**                  as NFC_RF_COMM_PARAMS_UPDATE_REVT.
**
** Returns          tNFC_STATUS
**
*******************************************************************************/
NFC_API extern tNFC_STATUS NFC_UpdateRFCommParams (tNFC_RF_COMM_PARAMS *p_params);

/*******************************************************************************
**
** Function         NFC_SetPowerOffSleep
**
** Description      This function closes/opens transport and turns off/on NFCC.
**
** Returns          tNFC_STATUS
**
*******************************************************************************/
NFC_API extern tNFC_STATUS NFC_SetPowerOffSleep (BOOLEAN enable);

/*******************************************************************************
**
** Function         NFC_PowerCycleNFCC
**
** Description      This function turns off and then on NFCC.
**
** Returns          tNFC_STATUS
**
*******************************************************************************/
NFC_API extern tNFC_STATUS NFC_PowerCycleNFCC (void);

/*******************************************************************************
**
** Function         NFC_SetRouting
**
** Description      This function is called to configure the CE routing table.
**                  The response from NFCC is reported by tNFC_RESPONSE_CBACK
**                  as NFC_SET_ROUTING_REVT.
**
** Parameters
**
** Returns          tNFC_STATUS
**
*******************************************************************************/
NFC_API extern tNFC_STATUS NFC_SetRouting(BOOLEAN     more,
                                            UINT8       num_tlv,
                                            UINT8       tlv_size,
                                            UINT8      *p_param_tlvs);

/*******************************************************************************
**
** Function         NFC_GetRouting
**
** Description      This function is called to retrieve the CE routing table from
**                  NFCC. The response from NFCC is reported by tNFC_RESPONSE_CBACK
**                  as NFC_GET_ROUTING_REVT.
**
** Returns          tNFC_STATUS
**
*******************************************************************************/
NFC_API extern tNFC_STATUS NFC_GetRouting(void);

/*******************************************************************************
**
** Function         NFC_RegVSCback
**
** Description      This function is called to register or de-register a callback
**                  function to receive Proprietary NCI response and notification
**                  events.
**                  The maximum number of callback functions allowed is NFC_NUM_VS_CBACKS
**
** Returns          tNFC_STATUS
**
*******************************************************************************/
NFC_API extern tNFC_STATUS NFC_RegVSCback (BOOLEAN          is_register,
                                           tNFC_VS_CBACK   *p_cback);

/*******************************************************************************
**
** Function         NFC_SendVsCommand
**
** Description      This function is called to send the given vendor specific
**                  command to NFCC. The response from NFCC is reported to the
**                  given tNFC_VS_CBACK as (oid).
**
** Parameters       oid - The opcode of the VS command.
**                  p_data - The parameters for the VS command
**
** Returns          tNFC_STATUS
**
*******************************************************************************/
NFC_API extern tNFC_STATUS NFC_SendVsCommand(UINT8          oid,
                                             BT_HDR        *p_data,
                                             tNFC_VS_CBACK *p_cback);

/*******************************************************************************
**
** Function         NFC_TestLoopback
**
** Description      This function is called to send the given data packet
**                  to NFCC for loopback test.
**                  When loopback data is received from NFCC, tNFC_TEST_CBACK .
**                  reports a NFC_LOOPBACK_TEVT.
**
** Parameters       p_data - the data packet
**
** Returns          tNFC_STATUS
**
*******************************************************************************/
NFC_API extern tNFC_STATUS NFC_TestLoopback(BT_HDR *p_data);


/*******************************************************************************
**
** Function         NFC_SetTraceLevel
**
** Description      This function sets the trace level for NFC.  If called with
**                  a value of 0xFF, it simply returns the current trace level.
**
** Returns          The new or current trace level
**
*******************************************************************************/
NFC_API extern UINT8 NFC_SetTraceLevel (UINT8 new_level);

#if (BT_TRACE_VERBOSE == TRUE)
/*******************************************************************************
**
** Function         NFC_GetStatusName
**
** Description      This function returns the status name.
**
** NOTE             conditionally compiled to save memory.
**
** Returns          pointer to the name
**
*******************************************************************************/
NFC_API extern char * NFC_GetStatusName (tNFC_STATUS status);
#endif

#ifdef __cplusplus
}
#endif

#endif /* NFC_API_H */
