/******************************************************************************
 *
 *  Copyright (C) 2009-2012 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"

/* 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_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    */
};
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   4
#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_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
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;

#define NFC_KOVIO_MAX_LEN       16
typedef struct
{
    UINT8       uid_len;
    UINT8       uid[NFC_KOVIO_MAX_LEN];
} tNFC_RF_PKOVIO_PARAMS;

typedef struct
{
    tNFC_DISCOVERY_TYPE     mode;
    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;
    } param; /* Discovery Type specific parameters */
} 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         */
    BOOLEAN                 more;           /* 0: last notification             */
} 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_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_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       nfcee_id,
                                            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);

#ifdef __cplusplus
}
#endif

#endif /* NFC_API_H */
