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