/******************************************************************************
 *
 *  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 "gki.h"
#include "nci_defs.h"
#include "nfc_hal_api.h"
#include "nfc_target.h"

#include "vendor_cfg.h"

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

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

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

/**********************************************
 * NFC Config Parameter IDs defined by NCI
 **********************************************/
#define NFC_PMID_TOTAL_DURATION NCI_PARAM_ID_TOTAL_DURATION
#define NFC_PMID_PF_RC NCI_PARAM_ID_PF_RC
#define NFC_PMID_ATR_REQ_GEN_BYTES NCI_PARAM_ID_ATR_REQ_GEN_BYTES
#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_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_LB_SENSB_INFO NCI_PARAM_ID_LB_SENSB_INFO
#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_PROTOCOL NCI_PARAM_ID_LF_PROTOCOL
#define NFC_PMID_LF_T3T_PMM NCI_PARAM_ID_LF_T3T_PMM
#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

/* Technology based routing  */
#define NFC_ROUTE_TAG_TECH NCI_ROUTE_TAG_TECH
/* Protocol based routing  */
#define NFC_ROUTE_TAG_PROTO NCI_ROUTE_TAG_PROTO
#define NFC_ROUTE_TAG_AID NCI_ROUTE_TAG_AID /* AID routing */
#define NFC_ROUTE_TAG_SYSCODE NCI_ROUTE_TAG_SYSCODE /* System Code routing*/
/* 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 */
/* use a proprietary range */
#define NFC_TEST_ID NCI_TEST_ID

#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_t
 * 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_SET_POWER_SUB_STATE_REVT,     /* 18 Set power sub state response  */
  NFC_NFCEE_PL_CONTROL_REVT,        /* NFCEE Power/Link Ctrl response*/
  NFC_NFCEE_STATUS_REVT             /* NFCEE Status Notification     */
                                    /* First vendor-specific rsp event  */
};
typedef uint16_t 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_t 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_t nci_version;                  /* the NCI version of NFCC          */
  uint8_t max_conn;                     /* max number of connections by NFCC*/
  uint32_t nci_features;                /* the NCI features of NFCC         */
  uint16_t nci_interfaces;              /* the NCI interfaces of NFCC       */
  uint16_t max_ce_table;                /* the max routing table size       */
  uint16_t max_param_size;              /* Max Size for Large Parameters    */
  uint8_t manufacture_id;               /* the Manufacture ID for NFCC      */
  uint8_t nfcc_info[NFC_NFCC_INFO_LEN]; /* the Manufacture Info for NFCC      */
  uint8_t vs_interface
      [NFC_NFCC_MAX_NUM_VS_INTERFACE]; /* the NCI VS interfaces of NFCC    */
  uint8_t hci_packet_size;             /*HCI payload size*/
  uint8_t hci_conn_credits;            /*max number of HCI credits*/
  uint16_t max_nfc_v_size;             /* maximum frame size for NFC-V*/
} 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_t num_param_id;               /* Number of rejected NCI Param ID  */
  uint8_t 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_t tlv_size;     /* The length of TLV    */
  uint8_t* 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_t 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

#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_t tNFC_NFCEE_TAG;
/* additional NFCEE Info */
typedef struct {
  tNFC_NFCEE_TAG tag;
  uint8_t len;
  uint8_t info[NFC_MAX_EE_INFO];
} tNFC_NFCEE_TLV;

/* NFCEE unrecoverable error */
#define NFC_NFCEE_STATUS_UNRECOVERABLE_ERROR NCI_NFCEE_STS_UNRECOVERABLE_ERROR
/* NFCEE connected and inactive */
#define NFC_NFCEE_STATUS_INACTIVE NCI_NFCEE_STS_CONN_INACTIVE
/* NFCEE connected and active   */
#define NFC_NFCEE_STATUS_ACTIVE NCI_NFCEE_STS_CONN_ACTIVE
/* NFCEE removed                */
#define NFC_NFCEE_STATUS_REMOVED NCI_NFCEE_STS_REMOVED

/* the data type associated with NFC_NFCEE_INFO_REVT */
typedef struct {
  tNFC_STATUS status;    /* The event status - place holder  */
  uint8_t nfcee_id;      /* NFCEE ID                         */
  uint8_t ee_status;     /* The NFCEE status.                */
  uint8_t num_interface; /* number of NFCEE interfaces       */
  uint8_t ee_interface[NFC_MAX_EE_INTERFACE]; /* NFCEE interface       */
  uint8_t num_tlvs;                       /* number of TLVs                   */
  tNFC_NFCEE_TLV ee_tlv[NFC_MAX_EE_TLVS]; /* The TLVs associated with NFCEE   */
  bool nfcee_power_ctrl; /* 1, if NFCC has control of NFCEE Power Supply */
} tNFC_NFCEE_INFO_REVT;

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

#if (APPL_DTA_MODE == TRUE)
/* This data type is for FW Version */
typedef struct {
  uint8_t rom_code_version; /* ROM code Version  */
  uint8_t major_version;    /* Major Version */
  uint8_t minor_version;    /* Minor Version  */
} tNFC_FW_VERSION;
#endif
#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_t nfcee_id;   /* NFCEE ID                         */
  uint8_t num_tlvs;   /* number of TLVs                   */
  uint8_t tlv_size;   /* the total len of all TLVs        */
  uint8_t 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_t dest_type;  /* the destination type             */
  uint8_t id;         /* NFCEE ID  or RF Discovery ID     */
  uint8_t buff_size;  /* The max buffer size              */
  uint8_t 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                 */
  NFC_HDR* p_data;    /* The received Data                */
} tNFC_DATA_CEVT;

/* the data type associated with NFC_NFCEE_PL_CONTROL_REVT */
typedef struct {
  tNFC_STATUS status;              /* The event status */
  uint8_t nfcee_id;                /* NFCEE ID */
  tNCI_NFCEE_PL_CONFIG pl_control; /* Power/Link Control command */
} tNFC_NFCEE_PL_CONTROL_REVT;

/* the data type associated with NFC_NFCEE_STATUS_REVT */
typedef struct {
  tNFC_STATUS status;              /* The event status */
  uint8_t nfcee_id;                /* NFCEE ID */
  tNCI_EE_NTF_STATUS nfcee_status; /* NFCEE status */
} tNFC_NFCEE_STATUS_REVT;
/* RF Field Status */
typedef uint8_t 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
typedef uint8_t tNFC_RF_TECH;

extern uint8_t NFC_GetNCIVersion();

/* Supported Protocols */
#define NFC_PROTOCOL_UNKNOWN NCI_PROTOCOL_UNKNOWN /* Unknown */
/* Type1Tag    - NFC-A            */
#define NFC_PROTOCOL_T1T NCI_PROTOCOL_T1T
/* Type2Tag    - NFC-A            */
#define NFC_PROTOCOL_T2T NCI_PROTOCOL_T2T
/* Type3Tag    - NFC-F            */
#define NFC_PROTOCOL_T3T NCI_PROTOCOL_T3T
/* Type5Tag    - NFC-V/ISO15693*/
#define NFC_PROTOCOL_T5T NFC_PROTOCOL_T5T_(NFC_GetNCIVersion())
#define NFC_PROTOCOL_T5T_(x) \
  (((x) == NCI_VERSION_2_0) ? NCI_PROTOCOL_T5T : NCI_PROTOCOL_15693)
/* Type 4A,4B  - NFC-A or NFC-B   */
#define NFC_PROTOCOL_ISO_DEP NCI_PROTOCOL_ISO_DEP
/* NFCDEP/LLCP - NFC-A or NFC-F       */
#define NFC_PROTOCOL_NFC_DEP NCI_PROTOCOL_NFC_DEP
#define NFC_PROTOCOL_MIFARE NCI_PROTOCOL_MIFARE
#define NFC_PROTOCOL_ISO15693 NCI_PROTOCOL_15693
#define NFC_PROTOCOL_B_PRIME NCI_PROTOCOL_B_PRIME
#define NFC_PROTOCOL_KOVIO NCI_PROTOCOL_KOVIO
typedef uint8_t 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_ACTIVE NCI_DISCOVERY_TYPE_POLL_ACTIVE
#define NFC_DISCOVERY_TYPE_POLL_V NCI_DISCOVERY_TYPE_POLL_V
#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_ACTIVE NCI_DISCOVERY_TYPE_LISTEN_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_t tNFC_DISCOVERY_TYPE;
typedef uint8_t 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_212 NCI_BIT_RATE_212   /* 212 kbit/s */
#define NFC_BIT_RATE_424 NCI_BIT_RATE_424   /* 424 kbit/s */
typedef uint8_t 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_NFC_DEP NCI_INTERFACE_NFC_DEP
#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_t tNFC_DEACT_TYPE;

/**********************************************
 *  Deactivation Reasons
 **********************************************/
#define NFC_DEACTIVATE_REASON_DH_REQ_FAILED NCI_DEACTIVATE_REASON_DH_REQ_FAILED
typedef uint8_t 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_t len_aid;              /* length of application id */
  uint8_t aid[NFC_MAX_AID_LEN]; /* application id           */
} tNFC_AID;
typedef struct {
  uint8_t len_aid;                    /* length of application id */
  uint8_t aid[NFC_MAX_AID_LEN];       /* application id           */
  uint8_t len_data;                   /* len of application data  */
  uint8_t data[NFC_MAX_APP_DATA_LEN]; /* application data    */
} tNFC_APP_INIT;

/* ISO 7816-4 SELECT command */
#define NFC_EE_TRIG_SELECT NCI_EE_TRIG_7816_SELECT
/* RF Protocol changed       */
#define NFC_EE_TRIG_RF_PROTOCOL NCI_EE_TRIG_RF_PROTOCOL
/* RF Technology changed     */
#define NFC_EE_TRIG_RF_TECHNOLOGY NCI_EE_TRIG_RF_TECHNOLOGY
/* Application initiation    */
#define NFC_EE_TRIG_APP_INIT NCI_EE_TRIG_APP_INIT
typedef uint8_t 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_t 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
typedef uint8_t tNFC_EE_DISC_OP;
typedef struct {
  tNFC_EE_DISC_OP op;              /* add or remove this entry         */
  uint8_t 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
/* T, L, V(NFCEE ID, TechnMode, Protocol) */
#define NFC_EE_DISCOVER_ENTRY_LEN 5
#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_t 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_NFCEE_PL_CONTROL_REVT pl_control;
  tNFC_NFCEE_STATUS_REVT nfcee_status;
  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_t tNFC_VS_EVT;

/*************************************
**  Proprietary (Vendor Specific) Callback Functions
**************************************/
typedef void(tNFC_VS_CBACK)(tNFC_VS_EVT event, uint16_t data_len,
                            uint8_t* 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_t 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_t sensb_res_len; /* Length of SENSB_RES Response (Byte 2 - Byte 12 or
                            13) Available after Technology Detection */
  uint8_t sensb_res[NFC_MAX_SENSB_RES_LEN]; /* SENSB_RES Response (ATQ) */
  uint8_t 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_t bit_rate;      /* NFC_BIT_RATE_212 or NFC_BIT_RATE_424 */
  uint8_t sensf_res_len; /* Length of SENSF_RES Response (Byte 2 - Byte 17 or
                            19) Available after Technology Detection */
  uint8_t sensf_res[NFC_MAX_SENSF_RES_LEN]; /* SENSB_RES Response */
  uint8_t nfcid2[NFC_NFCID2_LEN]; /* NFCID2 generated by the Local NFCC for
                                     NFC-DEP Protocol.Available for Frame
                                     Interface  */
  uint8_t mrti_check;
  uint8_t mrti_update;
} tNFC_RF_PF_PARAMS;

typedef tNCI_RF_LF_PARAMS tNFC_RF_LF_PARAMS;

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

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

typedef tNCI_RF_ACM_P_PARAMS tNFC_RF_ACM_P_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_ACM_P_PARAMS acm_p;
} 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_t rf_disc_id;                /* RF Discovery ID                   */
  uint8_t protocol;                  /* supported protocol                */
  tNFC_RF_TECH_PARAMS rf_tech_param; /* RF technology parameters          */
  uint8_t 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_t ats_res_len;              /* Length of ATS RES                */
  uint8_t ats_res[NFC_MAX_ATS_LEN]; /* ATS RES                          */
  bool nad_used;                    /* NAD is used or not               */
  uint8_t fwi;                      /* Frame Waiting time Integer       */
  uint8_t sfgi;                     /* Start-up Frame Guard time Integer*/
  uint8_t his_byte_len;             /* len of historical bytes          */
  uint8_t his_byte[NFC_MAX_HIS_BYTES_LEN]; /* historical bytes             */
} tNFC_INTF_PA_ISO_DEP;

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

typedef struct {
  uint8_t atr_res_len;                      /* Length of ATR_RES            */
  uint8_t atr_res[NFC_MAX_ATS_LEN];         /* ATR_RES (Byte 3 - Byte 17+n) */
  uint8_t max_payload_size;                 /* 64, 128, 192 or 254          */
  uint8_t gen_bytes_len;                    /* len of general bytes         */
  uint8_t gen_bytes[NFC_MAX_GEN_BYTES_LEN]; /* general bytes           */
  uint8_t
      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_t atr_req_len;                      /* Length of ATR_REQ            */
  uint8_t atr_req[NFC_MAX_ATS_LEN];         /* ATR_REQ (Byte 3 - Byte 18+n) */
  uint8_t max_payload_size;                 /* 64, 128, 192 or 254          */
  uint8_t gen_bytes_len;                    /* len of general bytes         */
  uint8_t 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_t attrib_res_len;                 /* Length of ATTRIB RES      */
  uint8_t attrib_res[NFC_MAX_ATTRIB_LEN]; /* ATTRIB RES                */
  uint8_t hi_info_len;                    /* len of Higher layer Info  */
  uint8_t hi_info[NFC_MAX_GEN_BYTES_LEN]; /* Higher layer Info         */
  uint8_t mbli;                           /* Maximum buffer length.    */
} tNFC_INTF_PB_ISO_DEP;

typedef struct {
  uint8_t attrib_req_len;                 /* Length of ATTRIB REQ      */
  uint8_t attrib_req[NFC_MAX_ATTRIB_LEN]; /* ATTRIB REQ (Byte 2 - 10+k)*/
  uint8_t hi_info_len;                    /* len of Higher layer Info  */
  uint8_t hi_info[NFC_MAX_GEN_BYTES_LEN]; /* Higher layer Info         */
  uint8_t 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_t param_len;
  uint8_t 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_t 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         */
  bool is_ntf;          /* TRUE, if deactivate notif*/
  tNFC_DEACT_REASON reason; /* De-activate reason    */
} 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;

typedef struct {
  bool 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 */
  bool include_tx_bit_rate;  /* TRUE if including Tx bit rate update         */
  tNFC_BIT_RATE tx_bit_rate; /* Transmit Bit Rate                            */
  bool include_rx_bit_rate;  /* TRUE if including Rx bit rate update         */
  tNFC_BIT_RATE rx_bit_rate; /* Receive Bit Rate                             */
  bool include_nfc_b_config; /* TRUE if including NFC-B data exchange config */
  uint8_t min_tr0;           /* Minimun TR0                                  */
  uint8_t min_tr1;           /* Minimun TR1                                  */
  uint8_t suppression_eos;   /* Suppression of EoS                           */
  uint8_t suppression_sos;   /* Suppression of SoS                           */
  uint8_t min_tr2;           /* Minimun TR1                                  */
} tNFC_RF_COMM_PARAMS;

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

typedef uint16_t tNFC_TEST_EVT;

/* the data type associated with NFC_LOOPBACK_TEVT */
typedef struct {
  tNFC_STATUS status; /* The event status.            */
  NFC_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_t conn_id, tNFC_CONN_EVT event,
                              tNFC_CONN* p_data);
#define NFC_MAX_CONN_ID 15
#define NFC_ILLEGAL_CONN_ID 0xFF
/* the static connection ID for RF traffic */
#define NFC_RF_CONN_ID 0
/* the static connection ID for HCI transport */
#define NFC_HCI_CONN_ID 1

/*****************************************************************************
**  EXTERNAL FUNCTION DECLARATIONS
*****************************************************************************/

/*******************************************************************************
**
** 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
**
*******************************************************************************/
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
**
*******************************************************************************/
extern void NFC_Disable(void);

/*******************************************************************************
**
** Function         NFC_Init
**
** Description      This function initializes control blocks for NFC
**
** Returns          nothing
**
*******************************************************************************/
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
**
*******************************************************************************/
extern uint16_t 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
**
*******************************************************************************/
extern tNFC_STATUS NFC_SetConfig(uint8_t tlv_size, uint8_t* 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
**
*******************************************************************************/
extern tNFC_STATUS NFC_GetConfig(uint8_t num_ids, uint8_t* 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
**
*******************************************************************************/
extern tNFC_STATUS NFC_NfceeDiscover(bool 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
**
*******************************************************************************/
extern tNFC_STATUS NFC_NfceeModeSet(uint8_t 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
**
*******************************************************************************/
extern tNFC_STATUS NFC_DiscoveryMap(uint8_t 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
**
*******************************************************************************/
extern tNFC_STATUS NFC_DiscoveryStart(uint8_t 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
**
*******************************************************************************/
extern tNFC_STATUS NFC_DiscoverySelect(uint8_t rf_disc_id, uint8_t protocol,
                                       uint8_t 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 from
**                  NFCC
**
** Returns          tNFC_STATUS
**
*******************************************************************************/
extern tNFC_STATUS NFC_ConnCreate(uint8_t dest_type, uint8_t id,
                                  uint8_t 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
**
*******************************************************************************/
extern tNFC_STATUS NFC_ConnClose(uint8_t 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
**
*******************************************************************************/
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
**
*******************************************************************************/
extern void NFC_SetReassemblyFlag(bool 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
**
*******************************************************************************/
extern tNFC_STATUS NFC_SendData(uint8_t conn_id, NFC_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
**
*******************************************************************************/
extern tNFC_STATUS NFC_FlushData(uint8_t 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
**
*******************************************************************************/
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
**
*******************************************************************************/
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
**
*******************************************************************************/
extern tNFC_STATUS NFC_SetPowerOffSleep(bool enable);

/*******************************************************************************
**
** Function         NFC_SetPowerSubState
**
** Description      This function is called to send the power sub state(screen
**                  state) to NFCC. The response from NFCC is reported by
**                  tNFC_RESPONSE_CBACK as NFC_SET_POWER_STATE_REVT.
**
** Parameters       scree_state
**
** Returns          tNFC_STATUS
**
*******************************************************************************/
extern tNFC_STATUS NFC_SetPowerSubState(uint8_t screen_state);

/*******************************************************************************
**
** Function         NFC_PowerCycleNFCC
**
** Description      This function turns off and then on NFCC.
**
** Returns          tNFC_STATUS
**
*******************************************************************************/
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
**
*******************************************************************************/
extern tNFC_STATUS NFC_SetRouting(bool more, uint8_t num_tlv, uint8_t tlv_size,
                                  uint8_t* 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
**
*******************************************************************************/
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
**
*******************************************************************************/
extern tNFC_STATUS NFC_RegVSCback(bool 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
**
*******************************************************************************/
extern tNFC_STATUS NFC_SendVsCommand(uint8_t oid, NFC_HDR* p_data,
                                     tNFC_VS_CBACK* p_cback);

/*******************************************************************************
**
** Function         NFC_SendRawVsCommand
**
** Description      This function is called to send the given raw command to
**                  NFCC. The response from NFCC is reported to the given
**                  tNFC_VS_CBACK.
**
** Parameters       p_data - The command buffer
**
** Returns          tNFC_STATUS
**
*******************************************************************************/
extern tNFC_STATUS NFC_SendRawVsCommand(NFC_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
**
*******************************************************************************/
extern tNFC_STATUS NFC_TestLoopback(NFC_HDR* p_data);

/*******************************************************************************
**
** Function         NFC_ISODEPNakPresCheck
**
** Description      This function is called to send the ISO DEP nak presence
**                  check cmd to check that the remote end point in RF field.
**
** Returns          tNFC_STATUS
**
*******************************************************************************/
extern tNFC_STATUS NFC_ISODEPNakPresCheck();

#if (APPL_DTA_MODE == TRUE)
/*******************************************************************************
**
** Function         nfc_ncif_getFWVersion
**
** 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
**
*******************************************************************************/
extern tNFC_FW_VERSION nfc_ncif_getFWVersion();
#endif

/*******************************************************************************
**
** Function         NFC_NfceePLConfig
**
** Description      This function is called to set the Power and Link Control
**                  to an NFCEE connected to the NFCC.
**                  The response from NFCC is reported by tNFC_RESPONSE_CBACK
**                  as NFC_NFCEE_PL_CONTROL_REVT.
**
** Parameters       nfcee_id - the NFCEE to activate or de-activate.
**                 pl_config -
**                 NFCEE_PL_CONFIG_NFCC_DECIDES -NFCC decides (default)
**                 NFCEE_PL_CONFIG_PWR_ALWAYS_ON -NFCEE power supply always on
**                 NFCEE_PL_CONFIG_LNK_ON_WHEN_PWR_ON -
**                                     communication link is always active
**                                     when NFCEE is powered on
**                 NFCEE_PL_CONFIG_PWR_LNK_ALWAYS_ON -
**                                     power supply and communication
**                                     link are always on
** Returns          tNFC_STATUS
**
*******************************************************************************/
extern tNFC_STATUS NFC_NfceePLConfig(uint8_t nfcee_id,
                                     tNCI_NFCEE_PL_CONFIG pl_config);

/*******************************************************************************
**
** Function         NFC_SetStaticHciCback
**
** Description      This function to update the data callback function
**                  to receive the data for the static Hci connection id.
**
** Parameters       p_cback - the connection callback function
**
** Returns          Nothing
**
*******************************************************************************/
extern void NFC_SetStaticHciCback(tNFC_CONN_CBACK* p_cback);

/*******************************************************************************
**
** Function         NFC_GetStatusName
**
** Description      This function returns the status name.
**
** NOTE             conditionally compiled to save memory.
**
** Returns          pointer to the name
**
*******************************************************************************/
extern std::string NFC_GetStatusName(tNFC_STATUS status);

#endif /* NFC_API_H */
