/******************************************************************************
 *
 *  Copyright (C) 2010-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.
 *
 ******************************************************************************/
/******************************************************************************
 *
 *  The original Work has been changed by NXP.
 *
 *  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.
 *
 *  Copyright 2018 NXP
 *
 ******************************************************************************/
/******************************************************************************
 *
 *  This is the private interface file for the NFA EE.
 *
 ******************************************************************************/
#ifndef NFA_EE_INT_H
#define NFA_EE_INT_H
#include "nfa_ee_api.h"
#include "nfa_sys.h"
#include "nfc_api.h"

/*****************************************************************************
**  Constants and data types
*****************************************************************************/
/* the number of tNFA_EE_ECBs (for NFCEEs and DH) */
#define NFA_EE_NUM_ECBS (NFA_EE_MAX_EE_SUPPORTED + 1)
/* The index for DH in nfa_ee_cb.ee_cb[] */
#define NFA_EE_CB_4_DH NFA_EE_MAX_EE_SUPPORTED
#define NFA_EE_INVALID 0xFF
/* only A, B, F, Bprime are supported by UICC now */
#define NFA_EE_MAX_TECH_ROUTE 4

#ifndef NFA_EE_AID_CFG_TAG_NAME
/* AID                             */
#define NFA_EE_AID_CFG_TAG_NAME 0x4F
#endif

#if (NXP_EXTNS == TRUE)
#define NFA_EE_NUM_PROTO 5

#define NFA_EE_NUM_TECH 3
#define NFA_EE_BUFFER_FUTURE_EXT 15
#define NFA_EE_PROTO_ROUTE_ENTRY_SIZE 5
#define NFA_EE_TECH_ROUTE_ENTRY_SIZE 5
/**
 * Max Routing Table Size = 720
 * After allocating size for Technology based routing and Protocol based
 *routing,
 * the remaining size can be used for AID based routing
 *
 * Size for 1 Technology route entry = 5 bytes (includes Type(1 byte),
 * Length (1 byte), Value (3 bytes - Power state, Tech Type, Location)
 * TOTAL TECH ROUTE SIZE = 5 * 3  = 15 (For Tech A, B, F)
 *
 * Size for 1 Protocol route entry = 5 bytes (includes Type(1 byte),
 * Length (1 byte), Value (3 bytes - Power state, Tech Type, Location)
 * TOTAL PROTOCOL ROUTE SIZE = 5 * 6 = 30 (Protocols ISO-DEP, NFC-DEP, ISO-7816,
 *T1T, T2T, T3T)
 *
 * SIZE FOR AID = 720 - 15 - 30 = 675
 * BUFFER for future extensions = 15
 * TOTAL SIZE FOR AID = 675 - 15 = 660
 */
#define NFA_EE_TOTAL_TECH_ROUTE_SIZE \
  (NFA_EE_PROTO_ROUTE_ENTRY_SIZE * NFA_EE_NUM_TECH)
#define NFA_EE_TOTAL_PROTO_ROUTE_SIZE \
  (NFA_EE_PROTO_ROUTE_ENTRY_SIZE * NFA_EE_NUM_PROTO)

#define NFA_EE_TOTAL_PROTO_TECH_FUTURE_EXT_ROUTE_SIZE             \
  (NFA_EE_TOTAL_TECH_ROUTE_SIZE + NFA_EE_TOTAL_PROTO_ROUTE_SIZE + \
   NFA_EE_BUFFER_FUTURE_EXT)
#endif
/* NFA EE events */
enum {
  NFA_EE_API_DISCOVER_EVT = NFA_SYS_EVT_START(NFA_ID_EE),
  NFA_EE_API_REGISTER_EVT,
  NFA_EE_API_DEREGISTER_EVT,
  NFA_EE_API_MODE_SET_EVT,
  NFA_EE_API_SET_TECH_CFG_EVT,
  NFA_EE_API_SET_PROTO_CFG_EVT,
  NFA_EE_API_ADD_AID_EVT,
  NFA_EE_API_REMOVE_AID_EVT,
  NFA_EE_API_ADD_SYSCODE_EVT,
  NFA_EE_API_REMOVE_SYSCODE_EVT,
  NFA_EE_API_LMRT_SIZE_EVT,
  NFA_EE_API_UPDATE_NOW_EVT,
  NFA_EE_API_CONNECT_EVT,
  NFA_EE_API_SEND_DATA_EVT,
  NFA_EE_API_DISCONNECT_EVT,

  NFA_EE_NCI_DISC_RSP_EVT,
  NFA_EE_NCI_DISC_NTF_EVT,
  NFA_EE_NCI_MODE_SET_RSP_EVT,
  NFA_EE_NCI_CONN_EVT,
  NFA_EE_NCI_DATA_EVT,
  NFA_EE_NCI_ACTION_NTF_EVT,
  NFA_EE_NCI_DISC_REQ_NTF_EVT,
  NFA_EE_NCI_WAIT_RSP_EVT,

  NFA_EE_ROUT_TIMEOUT_EVT,
  NFA_EE_DISCV_TIMEOUT_EVT,
  NFA_EE_CFG_TO_NFCC_EVT,
#if (NXP_EXTNS == TRUE)
  NFA_EE_NCI_PWR_LNK_CTRL_SET_EVT,
  NFA_EE_NCI_PWR_LNK_CTRL_RSP_EVT,
  NFA_EE_NCI_NFCEE_STATUS_NTF_EVT,
  NFA_EE_API_ADD_APDU_EVT,
  NFA_EE_API_REMOVE_APDU_EVT,
#endif
  NFA_EE_MAX_EVT

};

typedef uint16_t tNFA_EE_INT_EVT;
/* for listen mode routing table*/
#define NFA_EE_AE_ROUTE 0x80
#define NFA_EE_AE_VS 0x40

/* NFA EE Management state */
enum {
  NFA_EE_EM_STATE_INIT = 0,
  NFA_EE_EM_STATE_INIT_DONE,
  NFA_EE_EM_STATE_RESTORING,
  NFA_EE_EM_STATE_DISABLING,
  NFA_EE_EM_STATE_DISABLED,

  NFA_EE_EM_STATE_MAX
};
typedef uint8_t tNFA_EE_EM_STATE;

/* NFA EE connection status */
enum {
  NFA_EE_CONN_ST_NONE, /* not connected */
  NFA_EE_CONN_ST_WAIT, /* connection is initiated; waiting for ack */
  NFA_EE_CONN_ST_CONN, /* connected; can send/receive data */
  NFA_EE_CONN_ST_DISC  /* disconnecting; waiting for ack */
};
typedef uint8_t tNFA_EE_CONN_ST;

#define NFA_EE_MAX_AID_CFG_LEN (510)
#if (NXP_EXTNS == TRUE)
#define NFA_EE_TOTAL_APDU_PATTERN_SIZE 250
#define NFA_EE_APDU_ROUTE_MASK 8 /* APDU route location mask*/
#endif
#define NFA_EE_SYSTEM_CODE_LEN 02
#define NFA_EE_SYSTEM_CODE_TLV_SIZE 06
#define NFA_EE_MAX_SYSTEM_CODE_ENTRIES 10
#define NFA_EE_MAX_SYSTEM_CODE_CFG_LEN \
  (NFA_EE_MAX_SYSTEM_CODE_ENTRIES * NFA_EE_SYSTEM_CODE_TLV_SIZE)

/* NFA EE control block flags:
 * use to indicate an API function has changed the configuration of the
 * associated NFCEE
 * The flags are cleared when the routing table/VS is updated */
/* technology routing changed         */
#define NFA_EE_ECB_FLAGS_TECH 0x02
/* protocol routing changed           */
#define NFA_EE_ECB_FLAGS_PROTO 0x04
/* AID routing changed                */
#define NFA_EE_ECB_FLAGS_AID 0x08
/* System Code routing changed        */
#define NFA_EE_ECB_FLAGS_SYSCODE 0xE0
/* VS changed                         */
#define NFA_EE_ECB_FLAGS_VS 0x10
/* Restore related                    */
#define NFA_EE_ECB_FLAGS_RESTORE 0x20
/* routing flags changed              */
#define NFA_EE_ECB_FLAGS_ROUTING 0x0E
/* NFCEE Discover Request NTF is set  */
#define NFA_EE_ECB_FLAGS_DISC_REQ 0x40
/* DISC_REQ N reported before DISC N  */
#define NFA_EE_ECB_FLAGS_ORDER 0x80
#if (NXP_EXTNS == TRUE)
/* APDU routing changed                */
#define NFA_EE_ECB_FLAGS_APDU 0x0100

typedef uint16_t tNFA_EE_ECB_FLAGS;
#else
typedef uint8_t tNFA_EE_ECB_FLAGS;
#endif
/* part of tNFA_EE_STATUS; for internal use only  */
/* waiting for restore to full power mode to complete */
#define NFA_EE_STATUS_RESTORING 0x20
/* this bit is in ee_status for internal use only */
#define NFA_EE_STATUS_INT_MASK 0x20

/* NFA-EE information for a particular NFCEE Entity (including DH) */
typedef struct {
  tNFA_TECHNOLOGY_MASK
      tech_switch_on; /* default routing - technologies switch_on  */
  tNFA_TECHNOLOGY_MASK
      tech_switch_off; /* default routing - technologies switch_off */
  tNFA_TECHNOLOGY_MASK
      tech_battery_off; /* default routing - technologies battery_off*/
  tNFA_TECHNOLOGY_MASK
      tech_screen_lock; /* default routing - technologies screen_lock*/
  tNFA_TECHNOLOGY_MASK
      tech_screen_off; /* default routing - technologies screen_off*/
  tNFA_TECHNOLOGY_MASK
      tech_screen_off_lock; /* default routing - technologies screen_off_lock*/
  tNFA_PROTOCOL_MASK
      proto_switch_on; /* default routing - protocols switch_on     */
  tNFA_PROTOCOL_MASK
      proto_switch_off; /* default routing - protocols switch_off    */
  tNFA_PROTOCOL_MASK
      proto_battery_off;     /* default routing - protocols battery_off   */
  tNFA_PROTOCOL_MASK
      proto_screen_lock; /* default routing - protocols screen_lock    */
  tNFA_PROTOCOL_MASK
      proto_screen_off; /* default routing - protocols screen_off  */
  tNFA_PROTOCOL_MASK
      proto_screen_off_lock; /* default routing - protocols screen_off_lock  */
  tNFA_EE_CONN_ST conn_st;   /* connection status */
  uint8_t conn_id;           /* connection id */
  tNFA_EE_CBACK* p_ee_cback; /* the callback function */
  #if (NXP_EXTNS == TRUE)
  /* Each APDU entry has an associated apdu_pwr_cfg ,apdu_rt_info ,apdu_len
   * apdu_cfg[] contains APDU and APDU mask and maybe some other VS information in TLV format
   * The first T is always NFA_EE_APDU_CFG_TAG_NAME, the L is the actual APDU length and mask length
   * the apdu_len is the total length of all the TLVs associated with this AID
   * entry
   */
  uint8_t apdu_len[NFA_EE_MAX_APDU_PATTERN_ENTRIES]; /* the actual lengths in apdu_cfg */
  uint8_t apdu_pwr_cfg[NFA_EE_MAX_APDU_PATTERN_ENTRIES]; /* power configuration of this APDU Pattern entry */
  uint16_t apdu_rt_info[NFA_EE_MAX_APDU_PATTERN_ENTRIES]; /* route/vs info for this APDU PATTERN entry */
  uint8_t apdu_cfg[NFA_EE_TOTAL_APDU_PATTERN_SIZE];     /* routing entries based on APDU PATTERN */
  uint8_t apdu_pattern_entries;   /* The number of APDU PATTERN entries in aid_cfg */
  #endif
  /* Each AID entry has an ssociated aid_len, aid_pwr_cfg, aid_rt_info.
   * aid_cfg[] contains AID and maybe some other VS information in TLV format
   * The first T is always NFA_EE_AID_CFG_TAG_NAME, the L is the actual AID
   * length
   * the aid_len is the total length of all the TLVs associated with this AID
   * entry
   */
  uint8_t aid_len[NFA_EE_MAX_AID_ENTRIES]; /* the actual lengths in aid_cfg */
  uint8_t aid_pwr_cfg[NFA_EE_MAX_AID_ENTRIES]; /* power configuration of this
                                                  AID entry */
  uint8_t aid_rt_info[NFA_EE_MAX_AID_ENTRIES]; /* route/vs info for this AID
                                                  entry */
  uint8_t aid_cfg[NFA_EE_MAX_AID_CFG_LEN]; /* routing entries based on AID */
  uint8_t aid_entries;   /* The number of AID entries in aid_cfg */
  uint8_t nfcee_id;      /* ID for this NFCEE */
  uint8_t ee_status;     /* The NFCEE status */
#if (NXP_EXTNS == TRUE)
  uint8_t nfcee_status;  /* Current NFCEE status*/
  uint8_t aid_rt_loc[NFA_EE_MAX_AID_ENTRIES]; /* route/vs info for this AID
                                                  entry */
#endif
  uint8_t ee_old_status; /* The NFCEE status before going to low power mode */
  tNFA_EE_INTERFACE
      ee_interface[NFC_MAX_EE_INTERFACE]; /* NFCEE supported interface */
  tNFA_EE_TLV ee_tlv[NFC_MAX_EE_TLVS];    /* the TLV */
  uint8_t num_interface;                  /* number of Target interface */
  uint8_t num_tlvs;                       /* number of TLVs */
  uint8_t ee_power_supply_status;         /* power supply of NFCEE*/
  tNFA_EE_ECB_FLAGS ecb_flags;            /* the flags of this control block */
  tNFA_EE_INTERFACE use_interface; /* NFCEE interface used for the connection */
  tNFA_NFC_PROTOCOL la_protocol;   /* Listen A protocol    */
  tNFA_NFC_PROTOCOL lb_protocol;   /* Listen B protocol    */
  tNFA_NFC_PROTOCOL lf_protocol;   /* Listen F protocol    */
  tNFA_NFC_PROTOCOL lbp_protocol;  /* Listen B' protocol   */
  uint8_t size_mask; /* the size for technology and protocol routing */
  uint16_t size_aid; /* the size for aid routing */
  uint8_t aid_info[NFA_EE_MAX_AID_ENTRIES]; /* Aid Info Prefix/Suffix/Exact */
  /*System Code Based Routing Variables*/
  uint8_t sys_code_cfg[NFA_EE_MAX_SYSTEM_CODE_ENTRIES * NFA_EE_SYSTEM_CODE_LEN];
  uint8_t sys_code_pwr_cfg[NFA_EE_MAX_SYSTEM_CODE_ENTRIES];
  uint8_t sys_code_rt_loc[NFA_EE_MAX_SYSTEM_CODE_ENTRIES];
  uint8_t sys_code_rt_loc_vs_info[NFA_EE_MAX_SYSTEM_CODE_ENTRIES];
  /* The number of SC entries in sys_code_cfg buffer*/
  uint8_t sys_code_cfg_entries;
  uint16_t size_sys_code; /* The size for system code routing */
#if (NXP_EXTNS == TRUE)
  uint16_t size_apdu;/* the size for apdu routing */
  uint8_t hci_enable_state;
  tNFA_NFC_PROTOCOL pa_protocol; /* Passive poll A SWP Reader   */
  tNFA_NFC_PROTOCOL pb_protocol; /* Passive poll B SWP Reader   */
  uint8_t ee_req_op;             /* add or remove req ntf*/
#endif
} tNFA_EE_ECB;

/* data type for NFA_EE_API_DISCOVER_EVT */
typedef struct {
  NFC_HDR hdr;
  tNFA_EE_CBACK* p_cback;
} tNFA_EE_API_DISCOVER;

/* data type for NFA_EE_API_REGISTER_EVT */
typedef struct {
  NFC_HDR hdr;
  tNFA_EE_CBACK* p_cback;
} tNFA_EE_API_REGISTER;

/* data type for NFA_EE_API_DEREGISTER_EVT */
typedef struct {
  NFC_HDR hdr;
  int index;
} tNFA_EE_API_DEREGISTER;

/* data type for NFA_EE_API_MODE_SET_EVT */
typedef struct {
  NFC_HDR hdr;
  tNFA_EE_ECB* p_cb;
  uint8_t nfcee_id;
  uint8_t mode;
} tNFA_EE_API_MODE_SET;

#if (NXP_EXTNS == TRUE)
/* data type for NFA_EE_NCI_NFCEE_STATUS_EVT */
typedef struct {
  NFC_HDR hdr;
  tNFC_NFCEE_STATUS_REVT* p_data;
} tNFA_EE_NCI_NFCEE_STATUS_NTF;

typedef struct {
  NFC_HDR hdr;
  tNFC_NFCEE_MODE_SET_INFO* p_data;
} tNFA_EE_NCI_SET_MODE_INFO;

/* data type for NFA_EE_NCI_MODE_SET_RSP_EVT */
typedef struct {
  NFC_HDR hdr;
  tNFC_NFCEE_EE_PWR_LNK_REVT* p_data;
} tNFA_EE_NCI_PWR_LNK_CTRL;

/* data type for NFA_EE_API_POWER_LINK_EVT */
typedef struct {
  NFC_HDR hdr;
  uint8_t nfcee_id;
  uint8_t cfg_value;
} tNFA_EE_API_POWER_LINK_EVT;
#endif

/* data type for NFA_EE_API_SET_TECH_CFG_EVT */
typedef struct {
  NFC_HDR hdr;
  tNFA_EE_ECB* p_cb;
  uint8_t nfcee_id;
  tNFA_TECHNOLOGY_MASK technologies_switch_on;
  tNFA_TECHNOLOGY_MASK technologies_switch_off;
  tNFA_TECHNOLOGY_MASK technologies_battery_off;
  tNFA_TECHNOLOGY_MASK technologies_screen_lock;
  tNFA_TECHNOLOGY_MASK technologies_screen_off;
  tNFA_TECHNOLOGY_MASK technologies_screen_off_lock;
} tNFA_EE_API_SET_TECH_CFG;

/* data type for NFA_EE_API_SET_PROTO_CFG_EVT */
typedef struct {
  NFC_HDR hdr;
  tNFA_EE_ECB* p_cb;
  uint8_t nfcee_id;
  tNFA_PROTOCOL_MASK protocols_switch_on;
  tNFA_PROTOCOL_MASK protocols_switch_off;
  tNFA_PROTOCOL_MASK protocols_battery_off;
  tNFA_PROTOCOL_MASK protocols_screen_lock;
  tNFA_PROTOCOL_MASK protocols_screen_off;
  tNFA_PROTOCOL_MASK protocols_screen_off_lock;
} tNFA_EE_API_SET_PROTO_CFG;

/* data type for NFA_EE_API_ADD_AID_EVT */
typedef struct {
  NFC_HDR hdr;
  tNFA_EE_ECB* p_cb;
  uint8_t nfcee_id;
  uint8_t aid_len;
  uint8_t* p_aid;
  tNFA_EE_PWR_STATE power_state;
  uint8_t aidInfo;
} tNFA_EE_API_ADD_AID;

/* data type for NFA_EE_API_REMOVE_AID_EVT */
typedef struct {
  NFC_HDR hdr;
  uint8_t aid_len;
  uint8_t* p_aid;
} tNFA_EE_API_REMOVE_AID;
#if (NXP_EXTNS == TRUE)
/* data type for NFA_EE_API_ADD_APDU_EVT */
typedef struct {
  NFC_HDR hdr;
  tNFA_EE_ECB* p_cb;
  uint8_t nfcee_id;
  uint8_t* p_apdu;
  uint8_t apdu_len;
  uint8_t* p_mask;
  uint8_t mask_len;
  tNFA_EE_PWR_STATE power_state;
} tNFA_EE_API_ADD_APDU;

/* data type for NFA_EE_API_REMOVE_APDU_EVT */
typedef struct {
  NFC_HDR hdr;
  uint8_t apdu_len;
  uint8_t* p_apdu;
} tNFA_EE_API_REMOVE_APDU;
#endif
/* data type for NFA_EE_API_ADD_SYSCODE_EVT */
typedef struct {
  NFC_HDR hdr;
  tNFA_EE_ECB* p_cb;
  uint8_t nfcee_id;
  uint16_t syscode;
  tNFA_EE_PWR_STATE power_state;
} tNFA_EE_API_ADD_SYSCODE;

/* data type for NFA_EE_API_REMOVE_SYSCODE_EVT */
typedef struct {
  NFC_HDR hdr;
  uint16_t syscode;
} tNFA_EE_API_REMOVE_SYSCODE;

/* data type for NFA_EE_API_LMRT_SIZE_EVT */
typedef NFC_HDR tNFA_EE_API_LMRT_SIZE;

/* data type for NFA_EE_API_CONNECT_EVT */
typedef struct {
  NFC_HDR hdr;
  tNFA_EE_ECB* p_cb;
  uint8_t nfcee_id;
  uint8_t ee_interface;
  tNFA_EE_CBACK* p_cback;
} tNFA_EE_API_CONNECT;

/* data type for NFA_EE_API_SEND_DATA_EVT */
typedef struct {
  NFC_HDR hdr;
  tNFA_EE_ECB* p_cb;
  uint8_t nfcee_id;
  uint16_t data_len;
  uint8_t* p_data;
} tNFA_EE_API_SEND_DATA;

/* data type for NFA_EE_API_DISCONNECT_EVT */
typedef struct {
  NFC_HDR hdr;
  tNFA_EE_ECB* p_cb;
  uint8_t nfcee_id;
} tNFA_EE_API_DISCONNECT;

/* common data type for internal events with nfa_ee_use_cfg_cb[] as TRUE */
typedef struct {
  NFC_HDR hdr;
  tNFA_EE_ECB* p_cb;
  uint8_t nfcee_id;
} tNFA_EE_CFG_HDR;

/* data type for NFA_EE_NCI_DISC_RSP_EVT */
typedef struct {
  NFC_HDR hdr;
  tNFC_NFCEE_DISCOVER_REVT* p_data;
} tNFA_EE_NCI_DISC_RSP;

/* data type for NFA_EE_NCI_DISC_NTF_EVT */
typedef struct {
  NFC_HDR hdr;
  tNFC_NFCEE_INFO_REVT* p_data;
} tNFA_EE_NCI_DISC_NTF;

/* data type for NFA_EE_NCI_MODE_SET_RSP_EVT */
typedef struct {
  NFC_HDR hdr;
  tNFC_NFCEE_MODE_SET_REVT* p_data;
} tNFA_EE_NCI_MODE_SET;

/* data type for NFA_EE_NCI_WAIT_RSP_EVT */
typedef struct {
  NFC_HDR hdr;
  void* p_data;
  uint8_t opcode;
} tNFA_EE_NCI_WAIT_RSP;

/* data type for NFA_EE_NCI_CONN_EVT and NFA_EE_NCI_DATA_EVT */
typedef struct {
  NFC_HDR hdr;
  uint8_t conn_id;
  tNFC_CONN_EVT event;
  tNFC_CONN* p_data;
} tNFA_EE_NCI_CONN;

/* data type for NFA_EE_NCI_ACTION_NTF_EVT */
typedef struct {
  NFC_HDR hdr;
  tNFC_EE_ACTION_REVT* p_data;
} tNFA_EE_NCI_ACTION;

/* data type for NFA_EE_NCI_DISC_REQ_NTF_EVT */
typedef struct {
  NFC_HDR hdr;
  tNFC_EE_DISCOVER_REQ_REVT* p_data;
} tNFA_EE_NCI_DISC_REQ;

/* union of all event data types */
typedef union {
  NFC_HDR hdr;
  tNFA_EE_CFG_HDR cfg_hdr;
  tNFA_EE_API_DISCOVER ee_discover;
  tNFA_EE_API_REGISTER ee_register;
  tNFA_EE_API_DEREGISTER deregister;
  tNFA_EE_API_MODE_SET mode_set;
  tNFA_EE_API_SET_TECH_CFG set_tech;
  tNFA_EE_API_SET_PROTO_CFG set_proto;
  tNFA_EE_API_ADD_AID add_aid;
  tNFA_EE_API_REMOVE_AID rm_aid;
  tNFA_EE_API_ADD_SYSCODE add_syscode;
  tNFA_EE_API_REMOVE_SYSCODE rm_syscode;
  tNFA_EE_API_LMRT_SIZE lmrt_size;
  tNFA_EE_API_CONNECT connect;
  tNFA_EE_API_SEND_DATA send_data;
  tNFA_EE_API_DISCONNECT disconnect;
  tNFA_EE_NCI_DISC_RSP disc_rsp;
  tNFA_EE_NCI_DISC_NTF disc_ntf;
  tNFA_EE_NCI_MODE_SET mode_set_rsp;
  tNFA_EE_NCI_WAIT_RSP wait_rsp;
  tNFA_EE_NCI_CONN conn;
  tNFA_EE_NCI_ACTION act;
  tNFA_EE_NCI_DISC_REQ disc_req;
#if (NXP_EXTNS == TRUE)
  tNFA_EE_NCI_SET_MODE_INFO mode_set_info;
  tNFA_EE_API_POWER_LINK_EVT pwr_lnk_ctrl_set;
  tNFA_EE_NCI_PWR_LNK_CTRL pwr_lnk_ctrl_rsp;
  tNFA_EE_NCI_NFCEE_STATUS_NTF nfcee_status_ntf;
  tNFA_EE_API_ADD_APDU add_apdu;
  tNFA_EE_API_REMOVE_APDU rm_apdu;
#endif
} tNFA_EE_MSG;

/* type for State Machine (SM) action functions */
typedef void (*tNFA_EE_SM_ACT)(tNFA_EE_MSG* p_data);

/*****************************************************************************
**  control block
*****************************************************************************/
#define NFA_EE_CFGED_UPDATE_NOW 0x80
/* either switch off or battery off is configured */
#define NFA_EE_CFGED_OFF_ROUTING 0x40

/* the following status are the definition used in ee_cfg_sts */
#define NFA_EE_STS_CHANGED_ROUTING 0x01
#define NFA_EE_STS_CHANGED 0x0f
#define NFA_EE_STS_PREV_ROUTING 0x10
#define NFA_EE_STS_PREV 0xf0

/* need to report NFA_EE_UPDATED_EVT */
#define NFA_EE_WAIT_UPDATE 0x10
/* waiting for the rsp of set routing commands */
#define NFA_EE_WAIT_UPDATE_RSP 0x20
#define NFA_EE_WAIT_UPDATE_ALL 0xF0

typedef uint8_t tNFA_EE_WAIT;

/* set this bit when waiting for HCI to finish the initialization process in
 * NFA_EE_EM_STATE_RESTORING */
#define NFA_EE_FLAG_WAIT_HCI 0x01
/* set this bit when EE needs to notify the p_enable_cback at the end of NFCEE
 * discover process in NFA_EE_EM_STATE_RESTORING */
#define NFA_EE_FLAG_NOTIFY_HCI 0x02
/* set this bit when gracefully disable with outstanding NCI connections */
#define NFA_EE_FLAG_WAIT_DISCONN 0x04
typedef uint8_t tNFA_EE_FLAGS;

#if(NXP_EXTNS == TRUE)
#define NFA_EE_HCI_CONN_CLOSE  0x8
#endif

/* NFCEE DISCOVER in progress       */
#define NFA_EE_DISC_STS_ON 0x00
/* disable NFCEE DISCOVER           */
#define NFA_EE_DISC_STS_OFF 0x01
/* received NFCEE DISCOVER REQ NTF  */
#define NFA_EE_DISC_STS_REQ 0x02
/* received NFA_EE_MODE_SET_COMPLETE  */
#define NFA_EE_MODE_SET_COMPLETE 0x03
#if (NXP_EXTNS == TRUE)
/* received NFCEE_MODE_SET NTF  */
#define NFA_EE_UNRECOVERABLE_ERROR 0x05
#define NFA_EE_STATUS_INIT_COMPLETED 0x07
#define NFA_EE_STATUS_NFCEE_REMOVED 0x06
#endif
typedef uint8_t tNFA_EE_DISC_STS;

typedef void(tNFA_EE_ENABLE_DONE_CBACK)(tNFA_EE_DISC_STS status);

/* NFA EE Management control block */
typedef struct {
  tNFA_EE_ECB ecb[NFA_EE_NUM_ECBS]; /* control block for DH and NFCEEs  */
  TIMER_LIST_ENT timer;             /* timer to send info to NFCC       */
  TIMER_LIST_ENT discv_timer;       /* timer to end NFCEE discovery     */
  tNFA_EE_CBACK* p_ee_cback[NFA_EE_MAX_CBACKS]; /* to report EE events       */
  tNFA_EE_CBACK* p_ee_disc_cback; /* to report EE discovery result    */
  tNFA_EE_ENABLE_DONE_CBACK*
      p_enable_cback;          /* callback to notify on enable done*/
  tNFA_EE_EM_STATE em_state;   /* NFA-EE state initialized or not  */
  uint8_t wait_rsp;            /* num of NCI rsp expected (update) */
  uint8_t num_ee_expecting;    /* number of ee_info still expecting*/
  uint8_t cur_ee;              /* the number of ee_info in cb      */
  uint8_t ee_cfged;            /* the bit mask of configured ECBs  */
  uint8_t ee_cfg_sts;          /* configuration status             */
  tNFA_EE_WAIT ee_wait_evt;    /* Pending event(s) to be reported  */
  tNFA_EE_FLAGS ee_flags;      /* flags                            */
  uint8_t route_block_control; /* controls route block feature   */
#if (NXP_EXTNS == TRUE)
  uint8_t nfcee_id;
  uint8_t mode;
#endif
} tNFA_EE_CB;

/* Order of Routing entries in Routing Table */
#define NCI_ROUTE_ORDER_AID 0x01        /* AID routing order */
#if (NXP_EXTNS == TRUE)
#define NCI_ROUTE_ORDER_PATTERN 0x02    /* Pattern routing order*/
#endif
#define NCI_ROUTE_ORDER_SYS_CODE 0x03   /* System Code routing order*/
#define NCI_ROUTE_ORDER_PROTOCOL 0x04   /* Protocol routing order*/
#define NCI_ROUTE_ORDER_TECHNOLOGY 0x05 /* Technology routing order*/

/*****************************************************************************
**  External variables
*****************************************************************************/

/* NFA EE control block */
extern tNFA_EE_CB nfa_ee_cb;

/*****************************************************************************
**  External functions
*****************************************************************************/
/* function prototypes - exported from nfa_ee_main.c */
void nfa_ee_sys_enable(void);
void nfa_ee_sys_disable(void);

/* event handler function type */
bool nfa_ee_evt_hdlr(NFC_HDR* p_msg);
void nfa_ee_proc_nfcc_power_mode(uint8_t nfcc_power_mode);
#if (NFC_NFCEE_INCLUDED == TRUE)
void nfa_ee_get_tech_route(uint8_t power_state, uint8_t* p_handles);
#endif
void nfa_ee_proc_evt(tNFC_RESPONSE_EVT event, void* p_data);
tNFA_EE_ECB* nfa_ee_find_ecb(uint8_t nfcee_id);
tNFA_EE_ECB* nfa_ee_find_ecb_by_conn_id(uint8_t conn_id);
uint8_t nfa_ee_ecb_to_mask(tNFA_EE_ECB* p_cb);
void nfa_ee_restore_one_ecb(tNFA_EE_ECB* p_cb);
bool nfa_ee_is_active(tNFA_HANDLE nfcee_id);

/* Action function prototypes - nfa_ee_act.c */
void nfa_ee_api_discover(tNFA_EE_MSG* p_data);
void nfa_ee_api_register(tNFA_EE_MSG* p_data);
void nfa_ee_api_deregister(tNFA_EE_MSG* p_data);
void nfa_ee_api_mode_set(tNFA_EE_MSG* p_data);
void nfa_ee_api_set_tech_cfg(tNFA_EE_MSG* p_data);
void nfa_ee_api_set_proto_cfg(tNFA_EE_MSG* p_data);
void nfa_ee_api_add_aid(tNFA_EE_MSG* p_data);
void nfa_ee_api_remove_aid(tNFA_EE_MSG* p_data);
void nfa_ee_api_add_sys_code(tNFA_EE_MSG* p_data);
void nfa_ee_api_remove_sys_code(tNFA_EE_MSG* p_data);
void nfa_ee_api_lmrt_size(tNFA_EE_MSG* p_data);
void nfa_ee_api_update_now(tNFA_EE_MSG* p_data);
void nfa_ee_api_connect(tNFA_EE_MSG* p_data);
void nfa_ee_api_send_data(tNFA_EE_MSG* p_data);
void nfa_ee_api_disconnect(tNFA_EE_MSG* p_data);
void nfa_ee_report_disc_done(bool notify_sys);
void nfa_ee_nci_disc_rsp(tNFA_EE_MSG* p_data);
void nfa_ee_nci_disc_ntf(tNFA_EE_MSG* p_data);
void nfa_ee_nci_mode_set_rsp(tNFA_EE_MSG* p_data);
void nfa_ee_nci_wait_rsp(tNFA_EE_MSG* p_data);
void nfa_ee_nci_conn(tNFA_EE_MSG* p_data);
void nfa_ee_nci_action_ntf(tNFA_EE_MSG* p_data);
void nfa_ee_nci_disc_req_ntf(tNFA_EE_MSG* p_data);
void nfa_ee_rout_timeout(tNFA_EE_MSG* p_data);
void nfa_ee_discv_timeout(tNFA_EE_MSG* p_data);
void nfa_ee_lmrt_to_nfcc(tNFA_EE_MSG* p_data);
void nfa_ee_update_rout(void);
void nfa_ee_report_event(tNFA_EE_CBACK* p_cback, tNFA_EE_EVT event,
                         tNFA_EE_CBACK_DATA* p_data);
tNFA_EE_ECB* nfa_ee_find_aid_offset(uint8_t aid_len, uint8_t* p_aid,
                                    int* p_offset, int* p_entry);
tNFA_EE_ECB* nfa_ee_find_sys_code_offset(uint16_t sys_code, int* p_offset,
                                         int* p_entry);
int nfa_ee_find_total_aid_len(tNFA_EE_ECB* p_cb, int start_entry);
void nfa_ee_start_timer(void);
void nfa_ee_reg_cback_enable_done(tNFA_EE_ENABLE_DONE_CBACK* p_cback);
void nfa_ee_report_update_evt(void);

extern void nfa_ee_proc_hci_info_cback(void);
void nfa_ee_check_disable(void);
bool nfa_ee_restore_ntf_done(void);
void nfa_ee_check_restore_complete(void);
#if (NXP_EXTNS == TRUE)
void nfa_ee_nci_set_mode_info(tNFA_EE_MSG* p_data);
void nfa_ee_nci_pwr_link_ctrl_rsp(tNFA_EE_MSG* p_data);
void nfa_ee_api_power_link_set(tNFA_EE_MSG* p_data);
void nfa_ee_nci_nfcee_status_ntf(tNFA_EE_MSG* p_data);
void nfa_ee_api_add_apdu(tNFA_EE_MSG* p_data);
void nfa_ee_api_remove_apdu(tNFA_EE_MSG* p_data);
uint16_t nfa_ee_find_max_aid_config_length();
uint16_t nfa_ee_api_get_max_aid_config_length();
uint16_t nfa_ee_lmrt_size();
#endif
#endif /* NFA_P2P_INT_H */
