1e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************
2e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *
3e9629bad30a9f478b336ab46b8e6e02f7f87af46Evan Chu *  Copyright (C) 2010-2014 Broadcom Corporation
4e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *
5e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  Licensed under the Apache License, Version 2.0 (the "License");
6e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  you may not use this file except in compliance with the License.
7e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  You may obtain a copy of the License at:
8e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *
9e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  http://www.apache.org/licenses/LICENSE-2.0
10e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *
11e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  Unless required by applicable law or agreed to in writing, software
12e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  distributed under the License is distributed on an "AS IS" BASIS,
13e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  See the License for the specific language governing permissions and
15e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  limitations under the License.
16e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *
17e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ******************************************************************************/
18e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
19e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************
20e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *
21e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  This is the private interface file for the NFA HCI.
22e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *
23e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ******************************************************************************/
24e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#ifndef NFA_HCI_INT_H
25e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define NFA_HCI_INT_H
26e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
277dab0e579144a72612d29a4b1548e4d60a7d0ebdRuchi Kandoi#include <string>
2881e4f816534a9d9137ce202d1b158720cc13eb78Love Khanna#include "nfa_ee_api.h"
29e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_hci_api.h"
30a6eddd86a10fc3d7e72e589f874bffdfab6d6933Ruchi Kandoi#include "nfa_sys.h"
3181e4f816534a9d9137ce202d1b158720cc13eb78Love Khannaextern uint8_t HCI_LOOPBACK_DEBUG;
32e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
3381e4f816534a9d9137ce202d1b158720cc13eb78Love Khanna/* NFA HCI DEBUG states */
3481e4f816534a9d9137ce202d1b158720cc13eb78Love Khanna#define NFA_HCI_DEBUG_ON 0x01
3581e4f816534a9d9137ce202d1b158720cc13eb78Love Khanna#define NFA_HCI_DEBUG_OFF 0x00
36e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*****************************************************************************
37e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**  Constants and data types
38e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*****************************************************************************/
39e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
406fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define NFA_HCI_HOST_ID_UICC0 0x02 /* Host ID for UICC 0 */
4146e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi/* Lost host specific gate */
4246e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi#define NFA_HCI_LAST_HOST_SPECIFIC_GATE 0xEF
43e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
446fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define NFA_HCI_SESSION_ID_LEN 8 /* HCI Session ID length */
45e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
4646e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi/* HCI SW Version number                       */
4746e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi#define NFA_HCI_VERSION_SW 0x090000
4846e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi/* HCI HW Version number                       */
4946e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi#define NFA_HCI_VERSION_HW 0x000000
506fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define NFA_HCI_VENDOR_NAME \
516fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  "HCI" /* Vendor Name                                 */
5246e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi/* Model ID                                    */
5346e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi#define NFA_HCI_MODEL_ID 00
5446e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi/* HCI Version                                 */
5546e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi#define NFA_HCI_VERSION 90
56e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
57e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* NFA HCI states */
586fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define NFA_HCI_STATE_DISABLED 0x00 /* HCI is disabled  */
5946e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi/* HCI performing Initialization sequence */
6046e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi#define NFA_HCI_STATE_STARTUP 0x01
6146e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi/* HCI is waiting for initialization of other host in the network */
6246e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi#define NFA_HCI_STATE_WAIT_NETWK_ENABLE 0x02
6346e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi/* HCI is waiting to handle api commands  */
6446e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi#define NFA_HCI_STATE_IDLE 0x03
6546e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi/* HCI is waiting for response to command sent */
6646e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi#define NFA_HCI_STATE_WAIT_RSP 0x04
6746e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi/* Removing all pipes prior to removing the gate */
6846e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi#define NFA_HCI_STATE_REMOVE_GATE 0x05
6946e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi/* Removing all pipes and gates prior to deregistering the app */
7046e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi#define NFA_HCI_STATE_APP_DEREGISTER 0x06
716fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define NFA_HCI_STATE_RESTORE 0x07 /* HCI restore */
726fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi/* HCI is waiting for initialization of other host in the network after restore
736fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi */
7446e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi#define NFA_HCI_STATE_RESTORE_NETWK_ENABLE 0x08
75e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
761e3a89ae36336dee15d16eb6bd8425d690f7f102anil.hiranniah#define NFA_HCI_STATE_EE_RECOVERY 0x09
771e3a89ae36336dee15d16eb6bd8425d690f7f102anil.hiranniah
78512ee63c7cc8feb016863e507a5d33cd0f4242bfRuchi Kandoitypedef uint8_t tNFA_HCI_STATE;
79e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
80e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* NFA HCI PIPE states */
816fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define NFA_HCI_PIPE_CLOSED 0x00 /* Pipe is closed */
826fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define NFA_HCI_PIPE_OPENED 0x01 /* Pipe is opened */
83e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
84512ee63c7cc8feb016863e507a5d33cd0f4242bfRuchi Kandoitypedef uint8_t tNFA_HCI_COMMAND;
85512ee63c7cc8feb016863e507a5d33cd0f4242bfRuchi Kandoitypedef uint8_t tNFA_HCI_RESPONSE;
86e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
87e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* NFA HCI Internal events */
886fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoienum {
896fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFA_HCI_API_REGISTER_APP_EVT =
906fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      NFA_SYS_EVT_START(NFA_ID_HCI), /* Register APP with HCI */
916fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFA_HCI_API_DEREGISTER_APP_EVT,    /* Deregister an app from HCI */
926fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFA_HCI_API_GET_APP_GATE_PIPE_EVT, /* Get the list of gate and pipe associated
936fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                                        to the application */
946fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFA_HCI_API_ALLOC_GATE_EVT, /* Allocate a dyanmic gate for the application */
956fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFA_HCI_API_DEALLOC_GATE_EVT, /* Deallocate a previously allocated gate to the
966fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                                   application */
976fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFA_HCI_API_GET_HOST_LIST_EVT,   /* Get the list of Host in the network */
986fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFA_HCI_API_GET_REGISTRY_EVT,    /* Get a registry entry from a host */
996fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFA_HCI_API_SET_REGISTRY_EVT,    /* Set a registry entry on a host */
1006fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFA_HCI_API_CREATE_PIPE_EVT,     /* Create a pipe between two gates */
1016fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFA_HCI_API_OPEN_PIPE_EVT,       /* Open a pipe */
1026fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFA_HCI_API_CLOSE_PIPE_EVT,      /* Close a pipe */
1036fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFA_HCI_API_DELETE_PIPE_EVT,     /* Delete a pipe */
1046fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFA_HCI_API_ADD_STATIC_PIPE_EVT, /* Add a static pipe */
1056fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFA_HCI_API_SEND_CMD_EVT,        /* Send command via pipe */
1066fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFA_HCI_API_SEND_RSP_EVT,        /* Application Response to a command */
1076fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFA_HCI_API_SEND_EVENT_EVT,      /* Send event via pipe */
1086fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
1096fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFA_HCI_RSP_NV_READ_EVT,  /* Non volatile read complete event */
1106fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFA_HCI_RSP_NV_WRITE_EVT, /* Non volatile write complete event */
1116fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFA_HCI_RSP_TIMEOUT_EVT,  /* Timeout to response for the HCP Command packet */
1126fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFA_HCI_CHECK_QUEUE_EVT
113e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project};
114e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1156fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define NFA_HCI_FIRST_API_EVENT NFA_HCI_API_REGISTER_APP_EVT
1166fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define NFA_HCI_LAST_API_EVENT NFA_HCI_API_SEND_EVENT_EVT
117e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
118e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Internal event structures.
119e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1200a73688fae255d6c4730747caefaa134bd29b1d6Ruchi Kandoi** Note, every internal structure starts with a NFC_HDR and an app handle
121e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*/
122e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
123e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* data type for NFA_HCI_API_REGISTER_APP_EVT */
1246fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoitypedef struct {
1256fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFC_HDR hdr;
1266fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_HANDLE hci_handle;
1276fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  char app_name[NFA_MAX_HCI_APP_NAME_LEN + 1];
1286fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_HCI_CBACK* p_cback;
1296fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  bool b_send_conn_evts;
130e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tNFA_HCI_API_REGISTER_APP;
131e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
132e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* data type for NFA_HCI_API_DEREGISTER_APP_EVT */
1336fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoitypedef struct {
1346fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFC_HDR hdr;
1356fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_HANDLE hci_handle;
1366fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  char app_name[NFA_MAX_HCI_APP_NAME_LEN + 1];
137e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tNFA_HCI_API_DEREGISTER_APP;
138e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
139e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* data type for NFA_HCI_API_GET_APP_GATE_PIPE_EVT */
1406fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoitypedef struct {
1416fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFC_HDR hdr;
1426fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_HANDLE hci_handle;
143e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tNFA_HCI_API_GET_APP_GATE_PIPE;
144e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
145e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* data type for NFA_HCI_API_ALLOC_GATE_EVT */
1466fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoitypedef struct {
1476fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFC_HDR hdr;
1486fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_HANDLE hci_handle;
1496fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint8_t gate;
150e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tNFA_HCI_API_ALLOC_GATE;
151e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
152e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* data type for NFA_HCI_API_DEALLOC_GATE_EVT */
1536fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoitypedef struct {
1546fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFC_HDR hdr;
1556fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_HANDLE hci_handle;
1566fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint8_t gate;
157e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tNFA_HCI_API_DEALLOC_GATE;
158e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
159e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* data type for NFA_HCI_API_GET_HOST_LIST_EVT */
1606fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoitypedef struct {
1616fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFC_HDR hdr;
1626fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_HANDLE hci_handle;
1636fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_STATUS status;
164e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tNFA_HCI_API_GET_HOST_LIST;
165e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
166e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* data type for NFA_HCI_API_GET_REGISTRY_EVT */
1676fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoitypedef struct {
1686fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFC_HDR hdr;
1696fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_HANDLE hci_handle;
1706fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint8_t pipe;
1716fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint8_t reg_inx;
172e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tNFA_HCI_API_GET_REGISTRY;
173e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
174e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* data type for NFA_HCI_API_SET_REGISTRY_EVT */
1756fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoitypedef struct {
1766fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFC_HDR hdr;
1776fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_HANDLE hci_handle;
1786fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint8_t pipe;
1796fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint8_t reg_inx;
1806fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint8_t size;
1816fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint8_t data[NFA_MAX_HCI_CMD_LEN];
182e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tNFA_HCI_API_SET_REGISTRY;
183e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
184e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* data type for NFA_HCI_API_CREATE_PIPE_EVT */
1856fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoitypedef struct {
1866fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFC_HDR hdr;
1876fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_HANDLE hci_handle;
1886fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_STATUS status;
1896fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint8_t source_gate;
1906fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint8_t dest_host;
1916fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint8_t dest_gate;
192e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tNFA_HCI_API_CREATE_PIPE_EVT;
193e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
194e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* data type for NFA_HCI_API_OPEN_PIPE_EVT */
1956fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoitypedef struct {
1966fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFC_HDR hdr;
1976fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_HANDLE hci_handle;
1986fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_STATUS status;
1996fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint8_t pipe;
200e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tNFA_HCI_API_OPEN_PIPE_EVT;
201e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
202e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* data type for NFA_HCI_API_CLOSE_PIPE_EVT */
2036fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoitypedef struct {
2046fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFC_HDR hdr;
2056fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_HANDLE hci_handle;
2066fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_STATUS status;
2076fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint8_t pipe;
208e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tNFA_HCI_API_CLOSE_PIPE_EVT;
209e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
210e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* data type for NFA_HCI_API_DELETE_PIPE_EVT */
2116fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoitypedef struct {
2126fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFC_HDR hdr;
2136fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_HANDLE hci_handle;
2146fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_STATUS status;
2156fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint8_t pipe;
216e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tNFA_HCI_API_DELETE_PIPE_EVT;
217e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
218e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* data type for NFA_HCI_API_ADD_STATIC_PIPE_EVT */
2196fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoitypedef struct {
2206fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFC_HDR hdr;
2216fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_HANDLE hci_handle;
2226fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_STATUS status;
2236fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint8_t host;
2246fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint8_t gate;
2256fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint8_t pipe;
226e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tNFA_HCI_API_ADD_STATIC_PIPE_EVT;
227e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
228e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* data type for NFA_HCI_API_SEND_EVENT_EVT */
2296fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoitypedef struct {
2306fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFC_HDR hdr;
2316fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_HANDLE hci_handle;
2326fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint8_t pipe;
2336fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint8_t evt_code;
2346fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint16_t evt_len;
2356fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint8_t* p_evt_buf;
2366fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint16_t rsp_len;
2376fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint8_t* p_rsp_buf;
2386fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint16_t rsp_timeout;
239e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tNFA_HCI_API_SEND_EVENT_EVT;
240e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
241e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* data type for NFA_HCI_API_SEND_CMD_EVT */
2426fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoitypedef struct {
2436fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFC_HDR hdr;
2446fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_HANDLE hci_handle;
2456fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint8_t pipe;
2466fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint8_t cmd_code;
2476fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint16_t cmd_len;
2486fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint8_t data[NFA_MAX_HCI_CMD_LEN];
249e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tNFA_HCI_API_SEND_CMD_EVT;
250e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
251e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* data type for NFA_HCI_RSP_NV_READ_EVT */
2526fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoitypedef struct {
2536fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFC_HDR hdr;
2546fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint8_t block;
2556fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint16_t size;
2566fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_STATUS status;
257e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tNFA_HCI_RSP_NV_READ_EVT;
258e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
259e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* data type for NFA_HCI_RSP_NV_WRITE_EVT */
2606fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoitypedef struct {
2616fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFC_HDR hdr;
2626fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_STATUS status;
263e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tNFA_HCI_RSP_NV_WRITE_EVT;
264e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
265e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* data type for NFA_HCI_API_SEND_RSP_EVT */
2666fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoitypedef struct {
2676fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFC_HDR hdr;
2686fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_HANDLE hci_handle;
2696fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint8_t pipe;
2706fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint8_t response;
2716fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint8_t size;
2726fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint8_t data[NFA_MAX_HCI_RSP_LEN];
273e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tNFA_HCI_API_SEND_RSP_EVT;
274e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
275e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* common data type for internal events */
2766fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoitypedef struct {
2776fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFC_HDR hdr;
2786fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_HANDLE hci_handle;
279e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tNFA_HCI_COMM_DATA;
280e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
281e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* union of all event data types */
2826fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoitypedef union {
2836fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFC_HDR hdr;
2846fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_HCI_COMM_DATA comm;
2856fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
2866fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  /* API events */
2876fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_HCI_API_REGISTER_APP app_info; /* Register/Deregister an application */
2886fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_HCI_API_GET_APP_GATE_PIPE get_gate_pipe_list; /* Get the list of gates
2896fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                                                        and pipes created for
2906fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                                                        the application */
2916fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_HCI_API_ALLOC_GATE
2926fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      gate_info; /* Allocate a dynamic gate to the application */
2936fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_HCI_API_DEALLOC_GATE
2946fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      gate_dealloc; /* Deallocate the gate allocated to the application */
2956fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_HCI_API_CREATE_PIPE_EVT create_pipe;         /* Create a pipe */
2966fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_HCI_API_OPEN_PIPE_EVT open_pipe;             /* Open a pipe */
2976fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_HCI_API_CLOSE_PIPE_EVT close_pipe;           /* Close a pipe */
2986fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_HCI_API_DELETE_PIPE_EVT delete_pipe;         /* Delete a pipe */
2996fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_HCI_API_ADD_STATIC_PIPE_EVT add_static_pipe; /* Add a static pipe */
3006fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_HCI_API_GET_HOST_LIST
3016fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      get_host_list; /* Get the list of Host in the network */
3026fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_HCI_API_GET_REGISTRY get_registry; /* Get a registry entry on a host */
3036fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_HCI_API_SET_REGISTRY set_registry; /* Set a registry entry on a host */
3046fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_HCI_API_SEND_CMD_EVT send_cmd;     /* Send a event on a pipe to a host */
3056fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_HCI_API_SEND_RSP_EVT
3066fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      send_rsp; /* Response to a command sent on a pipe to a host */
3076fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_HCI_API_SEND_EVENT_EVT send_evt; /* Send a command on a pipe to a host */
3086fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
3096fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  /* Internal events */
3106fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_HCI_RSP_NV_READ_EVT nv_read;   /* Read Non volatile data */
3116fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_HCI_RSP_NV_WRITE_EVT nv_write; /* Write Non volatile data */
312e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tNFA_HCI_EVENT_DATA;
313e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
314e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*****************************************************************************
315e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**  control block
316e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*****************************************************************************/
317e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
318e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Dynamic pipe control block */
3196fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoitypedef struct {
3206fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint8_t pipe_id;                /* Pipe ID */
3216fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_HCI_PIPE_STATE pipe_state; /* State of the Pipe */
3226fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint8_t local_gate;             /* local gate id */
3236fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint8_t dest_host; /* Peer host to which this pipe is connected */
3246fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint8_t dest_gate; /* Peer gate to which this pipe is connected */
325e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tNFA_HCI_DYN_PIPE;
326e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
327e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Dynamic gate control block */
3286fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoitypedef struct {
3296fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint8_t gate_id;        /* local gate id */
3306fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_HANDLE gate_owner; /* NFA-HCI handle assigned to the application which
3316fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                             owns the gate */
3326fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint32_t pipe_inx_mask; /* Bit 0 == pipe inx 0, etc */
333e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tNFA_HCI_DYN_GATE;
334e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
335e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Admin gate control block */
3366fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoitypedef struct {
3376fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_HCI_PIPE_STATE pipe01_state; /* State of Pipe '01' */
3386fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint8_t
3396fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      session_id[NFA_HCI_SESSION_ID_LEN]; /* Session ID of the host network */
340e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tNFA_ADMIN_GATE_INFO;
341e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
342e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Link management gate control block */
3436fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoitypedef struct {
3446fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_HCI_PIPE_STATE pipe00_state; /* State of Pipe '00' */
3456fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint16_t rec_errors;              /* Receive errors */
346e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tNFA_LINK_MGMT_GATE_INFO;
347e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
348e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Identity management gate control block */
3496fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoitypedef struct {
3506fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint32_t pipe_inx_mask;  /* Bit 0 == pipe inx 0, etc */
3516fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint16_t version_sw;     /* Software version number */
3526fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint16_t version_hw;     /* Hardware version number */
3536fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint8_t vendor_name[20]; /* Vendor name */
3546fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint8_t model_id;        /* Model ID */
3556fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint8_t hci_version;     /* HCI Version */
356e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tNFA_ID_MGMT_GATE_INFO;
357e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
358e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* NFA HCI control block */
3596fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoitypedef struct {
3607e16563ba20c63ec431301e77405fe29791f2486Ruchi Kandoi  tNFA_HCI_STATE hci_state; /* state of the HCI */
3617e16563ba20c63ec431301e77405fe29791f2486Ruchi Kandoi  uint8_t num_nfcee;        /* Number of NFCEE ID Discovered */
36281e4f816534a9d9137ce202d1b158720cc13eb78Love Khanna  tNFA_EE_INFO ee_info[NFA_HCI_MAX_HOST_IN_NETWORK]; /*NFCEE ID Info*/
3636fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint8_t num_ee_dis_req_ntf; /* Number of ee discovery request ntf received */
3646fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint8_t num_hot_plug_evts;  /* Number of Hot plug events received after ee
3656fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                                 discovery disable ntf */
3666fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint8_t inactive_host[NFA_HCI_MAX_HOST_IN_NETWORK]; /* Inactive host in the
3676fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                                                         host network */
3686fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint8_t reset_host[NFA_HCI_MAX_HOST_IN_NETWORK]; /* List of host reseting */
3696fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  bool b_low_power_mode;  /* Host controller in low power mode */
3706fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  bool b_hci_netwk_reset; /* Command sent to reset HCI Network */
3716fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  bool w4_hci_netwk_init; /* Wait for other host in network to initialize */
3726fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  TIMER_LIST_ENT timer;   /* Timer to avoid indefinitely waiting for response */
3736fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint8_t conn_id;        /* Connection ID */
3746fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint8_t buff_size;      /* Connection buffer size */
3756fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  bool nv_read_cmplt;     /* NV Read completed */
3766fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  bool nv_write_needed;   /* Something changed - NV write is needed */
3776fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  bool assembling;        /* Set true if in process of assembling a message  */
3786fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  bool assembly_failed;   /* Set true if Insufficient buffer to Reassemble
3796fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                             incoming message */
3806fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  bool w4_rsp_evt;        /* Application command sent on HCP Event */
3816fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_HANDLE
3826fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      app_in_use; /* Index of the application that is waiting for response */
3836fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint8_t local_gate_in_use;  /* Local gate currently working with */
3846fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint8_t remote_gate_in_use; /* Remote gate currently working with */
3856fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint8_t remote_host_in_use; /* The remote host to which a command is sent */
3866fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint8_t pipe_in_use;        /* The pipe currently working with */
3876fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint8_t param_in_use;      /* The registry parameter currently working with */
3886fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_HCI_COMMAND cmd_sent; /* The last command sent */
3896fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  bool ee_disc_cmplt;        /* EE Discovery operation completed */
3906fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  bool ee_disable_disc;      /* EE Discovery operation is disabled */
3916fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint16_t msg_len;     /* For segmentation - length of the combined message */
3926fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint16_t max_msg_len; /* Maximum reassembled message size */
3936fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint8_t msg_data[NFA_MAX_HCI_EVENT_LEN]; /* For segmentation - the combined
3946fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                                              message data */
3956fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint8_t* p_msg_data; /* For segmentation - reassembled message */
3966fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint8_t type;        /* Instruction type of incoming message */
3976fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint8_t inst;        /* Instruction of incoming message */
3986fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
3996fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  BUFFER_Q hci_api_q;            /* Buffer Q to hold incoming API commands */
4006fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  BUFFER_Q hci_host_reset_api_q; /* Buffer Q to hold incoming API commands to a
4016fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                                    host that is reactivating */
4026fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFA_HCI_CBACK* p_app_cback[NFA_HCI_MAX_APP_CB]; /* Callback functions
4036fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                                                      registered by the
4046fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                                                      applications */
4056fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint16_t rsp_buf_size; /* Maximum size of APDU buffer */
4066fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint8_t* p_rsp_buf;    /* Buffer to hold response to sent event */
4076fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  struct                 /* Persistent information for Device Host */
4086fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  {
4096fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    char reg_app_names[NFA_HCI_MAX_APP_CB][NFA_MAX_HCI_APP_NAME_LEN + 1];
4106fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
4116fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    tNFA_HCI_DYN_GATE dyn_gates[NFA_HCI_MAX_GATE_CB];
4126fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    tNFA_HCI_DYN_PIPE dyn_pipes[NFA_HCI_MAX_PIPE_CB];
4136fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
4146fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    bool b_send_conn_evts[NFA_HCI_MAX_APP_CB];
4156fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    tNFA_ADMIN_GATE_INFO admin_gate;
4166fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    tNFA_LINK_MGMT_GATE_INFO link_mgmt_gate;
4176fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    tNFA_ID_MGMT_GATE_INFO id_mgmt_gate;
4186fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  } cfg;
419e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
420e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tNFA_HCI_CB;
421e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
422e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*****************************************************************************
423e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**  External variables
424e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*****************************************************************************/
425e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
426e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* NFA HCI control block */
427e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectextern tNFA_HCI_CB nfa_hci_cb;
428e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
429e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*****************************************************************************
430e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**  External functions
431e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*****************************************************************************/
432e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
433e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Functions in nfa_hci_main.c
434e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*/
4356fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void nfa_hci_init(void);
4366fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void nfa_hci_proc_nfcc_power_mode(uint8_t nfcc_power_mode);
4376fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void nfa_hci_dh_startup_complete(void);
4386fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void nfa_hci_startup_complete(tNFA_STATUS status);
4396fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void nfa_hci_startup(void);
4406fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void nfa_hci_restore_default_config(uint8_t* p_session_id);
44181e4f816534a9d9137ce202d1b158720cc13eb78Love Khannaextern void nfa_hci_enable_one_nfcee(void);
442e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
443e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Action functions in nfa_hci_act.c
444e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*/
4456fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void nfa_hci_check_pending_api_requests(void);
4466fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void nfa_hci_check_api_requests(void);
4476fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void nfa_hci_handle_admin_gate_cmd(uint8_t* p_data);
4486fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void nfa_hci_handle_admin_gate_rsp(uint8_t* p_data, uint8_t data_len);
4499ba6d2423a011e341d94dfade2fcfb107483d4c6Ruchi Kandoiextern void nfa_hci_handle_admin_gate_evt();
4506fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void nfa_hci_handle_link_mgm_gate_cmd(uint8_t* p_data);
4516fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void nfa_hci_handle_dyn_pipe_pkt(uint8_t pipe, uint8_t* p_data,
4526fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                                        uint16_t data_len);
4536fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void nfa_hci_handle_pipe_open_close_cmd(tNFA_HCI_DYN_PIPE* p_pipe);
4546fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void nfa_hci_api_dealloc_gate(tNFA_HCI_EVENT_DATA* p_evt_data);
4556fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void nfa_hci_api_deregister(tNFA_HCI_EVENT_DATA* p_evt_data);
456e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
457e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Utility functions in nfa_hci_utils.c
458e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*/
4596fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern tNFA_HCI_DYN_GATE* nfa_hciu_alloc_gate(uint8_t gate_id,
4606fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                                              tNFA_HANDLE app_handle);
4616fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern tNFA_HCI_DYN_GATE* nfa_hciu_find_gate_by_gid(uint8_t gate_id);
4626fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern tNFA_HCI_DYN_GATE* nfa_hciu_find_gate_by_owner(tNFA_HANDLE app_handle);
4636fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern tNFA_HCI_DYN_GATE* nfa_hciu_find_gate_with_nopipes_by_owner(
4646fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    tNFA_HANDLE app_handle);
4656fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern tNFA_HCI_DYN_PIPE* nfa_hciu_find_pipe_by_pid(uint8_t pipe_id);
4666fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern tNFA_HCI_DYN_PIPE* nfa_hciu_find_pipe_by_owner(tNFA_HANDLE app_handle);
4676fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern tNFA_HCI_DYN_PIPE* nfa_hciu_find_active_pipe_by_owner(
4686fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    tNFA_HANDLE app_handle);
4696fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern tNFA_HCI_DYN_PIPE* nfa_hciu_find_pipe_on_gate(uint8_t gate_id);
4706fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern tNFA_HANDLE nfa_hciu_get_gate_owner(uint8_t gate_id);
4716fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern bool nfa_hciu_check_pipe_between_gates(uint8_t local_gate,
4726fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                                              uint8_t dest_host,
4736fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                                              uint8_t dest_gate);
4746fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern bool nfa_hciu_is_active_host(uint8_t host_id);
4756fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern bool nfa_hciu_is_host_reseting(uint8_t host_id);
4766fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern bool nfa_hciu_is_no_host_resetting(void);
4776fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern tNFA_HCI_DYN_PIPE* nfa_hciu_find_active_pipe_on_gate(uint8_t gate_id);
4786fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern tNFA_HANDLE nfa_hciu_get_pipe_owner(uint8_t pipe_id);
4796fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern uint8_t nfa_hciu_count_open_pipes_on_gate(tNFA_HCI_DYN_GATE* p_gate);
4806fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern uint8_t nfa_hciu_count_pipes_on_gate(tNFA_HCI_DYN_GATE* p_gate);
4816fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
4826fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern tNFA_HCI_RESPONSE nfa_hciu_add_pipe_to_gate(uint8_t pipe,
4836fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                                                   uint8_t local_gate,
4846fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                                                   uint8_t dest_host,
4856fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                                                   uint8_t dest_gate);
4866fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern tNFA_HCI_RESPONSE nfa_hciu_add_pipe_to_static_gate(uint8_t local_gate,
4876fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                                                          uint8_t pipe_id,
4886fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                                                          uint8_t dest_host,
4896fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                                                          uint8_t dest_gate);
4906fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
4916fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern tNFA_HCI_RESPONSE nfa_hciu_release_pipe(uint8_t pipe_id);
4926fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void nfa_hciu_release_gate(uint8_t gate);
4936fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void nfa_hciu_remove_all_pipes_from_host(uint8_t host);
4946fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern uint8_t nfa_hciu_get_allocated_gate_list(uint8_t* p_gate_list);
4956fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
4966fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void nfa_hciu_send_to_app(tNFA_HCI_EVT event, tNFA_HCI_EVT_DATA* p_evt,
4976fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                                 tNFA_HANDLE app_handle);
4986fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void nfa_hciu_send_to_all_apps(tNFA_HCI_EVT event,
4996fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                                      tNFA_HCI_EVT_DATA* p_evt);
5006fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void nfa_hciu_send_to_apps_handling_connectivity_evts(
5016fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    tNFA_HCI_EVT event, tNFA_HCI_EVT_DATA* p_evt);
5026fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
5036fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern tNFA_STATUS nfa_hciu_send_close_pipe_cmd(uint8_t pipe);
5046fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern tNFA_STATUS nfa_hciu_send_delete_pipe_cmd(uint8_t pipe);
5056fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern tNFA_STATUS nfa_hciu_send_clear_all_pipe_cmd(void);
5066fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern tNFA_STATUS nfa_hciu_send_open_pipe_cmd(uint8_t pipe);
5076fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern tNFA_STATUS nfa_hciu_send_get_param_cmd(uint8_t pipe, uint8_t index);
5086fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern tNFA_STATUS nfa_hciu_send_create_pipe_cmd(uint8_t source_gate,
5096fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                                                 uint8_t dest_host,
5106fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                                                 uint8_t dest_gate);
5116fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern tNFA_STATUS nfa_hciu_send_set_param_cmd(uint8_t pipe, uint8_t index,
5126fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                                               uint8_t length, uint8_t* p_data);
5136fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern tNFA_STATUS nfa_hciu_send_msg(uint8_t pipe_id, uint8_t type,
5146fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                                     uint8_t instruction, uint16_t pkt_len,
5156fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                                     uint8_t* p_pkt);
516e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
5177dab0e579144a72612d29a4b1548e4d60a7d0ebdRuchi Kandoiextern std::string nfa_hciu_instr_2_str(uint8_t type);
5187dab0e579144a72612d29a4b1548e4d60a7d0ebdRuchi Kandoiextern std::string nfa_hciu_get_event_name(uint16_t event);
5197dab0e579144a72612d29a4b1548e4d60a7d0ebdRuchi Kandoiextern std::string nfa_hciu_get_state_name(uint8_t state);
5206fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern char* nfa_hciu_get_type_inst_names(uint8_t pipe, uint8_t type,
5216fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                                          uint8_t inst, char* p_buff);
5227dab0e579144a72612d29a4b1548e4d60a7d0ebdRuchi Kandoiextern std::string nfa_hciu_evt_2_str(uint8_t pipe_id, uint8_t evt);
523e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
524e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* NFA_HCI_INT_H */
525