1e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/****************************************************************************** 2e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 3e9629bad30a9f478b336ab46b8e6e02f7f87af46Evan Chu * Copyright (C) 2003-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 device manager. 22e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 23e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ******************************************************************************/ 24e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#ifndef NFA_DM_INT_H 25e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define NFA_DM_INT_H 26e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 27e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_api.h" 28a6eddd86a10fc3d7e72e589f874bffdfab6d6933Ruchi Kandoi#include "nfa_sys.h" 296fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#include "nfc_api.h" 30e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 31e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/***************************************************************************** 32e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Constants and data types 33e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*****************************************************************************/ 34e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 35e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* DM events */ 366fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoienum { 376fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* device manager local device API events */ 386fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFA_DM_API_ENABLE_EVT = NFA_SYS_EVT_START(NFA_ID_DM), 396fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFA_DM_API_DISABLE_EVT, 406fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFA_DM_API_SET_CONFIG_EVT, 416fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFA_DM_API_GET_CONFIG_EVT, 426fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFA_DM_API_REQUEST_EXCL_RF_CTRL_EVT, 436fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFA_DM_API_RELEASE_EXCL_RF_CTRL_EVT, 446fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFA_DM_API_ENABLE_POLLING_EVT, 456fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFA_DM_API_DISABLE_POLLING_EVT, 466fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFA_DM_API_ENABLE_LISTENING_EVT, 476fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFA_DM_API_DISABLE_LISTENING_EVT, 486fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFA_DM_API_PAUSE_P2P_EVT, 496fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFA_DM_API_RESUME_P2P_EVT, 506fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFA_DM_API_RAW_FRAME_EVT, 516fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFA_DM_API_SET_P2P_LISTEN_TECH_EVT, 526fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFA_DM_API_START_RF_DISCOVERY_EVT, 536fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFA_DM_API_STOP_RF_DISCOVERY_EVT, 546fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFA_DM_API_SET_RF_DISC_DURATION_EVT, 556fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFA_DM_API_SELECT_EVT, 566fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFA_DM_API_UPDATE_RF_PARAMS_EVT, 576fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFA_DM_API_DEACTIVATE_EVT, 586fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFA_DM_API_POWER_OFF_SLEEP_EVT, 596fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFA_DM_API_REG_NDEF_HDLR_EVT, 606fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFA_DM_API_DEREG_NDEF_HDLR_EVT, 616fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFA_DM_API_REG_VSC_EVT, 626fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFA_DM_API_SEND_VSC_EVT, 636fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFA_DM_TIMEOUT_DISABLE_EVT, 646fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFA_DM_MAX_EVT 65e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}; 66e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 67e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* data type for NFA_DM_API_ENABLE_EVT */ 686fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoitypedef struct { 696fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFC_HDR hdr; 706fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_DM_CBACK* p_dm_cback; 716fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_CONN_CBACK* p_conn_cback; 72e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tNFA_DM_API_ENABLE; 73e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 74e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* data type for NFA_DM_API_DISABLE_EVT */ 756fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoitypedef struct { 766fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFC_HDR hdr; 776fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi bool graceful; 78e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tNFA_DM_API_DISABLE; 79e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 80e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* data type for NFA_DM_API_SET_CONFIG_EVT */ 816fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoitypedef struct { 826fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFC_HDR hdr; 836fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_PMID param_id; 846fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t length; 856fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t* p_data; 86e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tNFA_DM_API_SET_CONFIG; 87e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 88e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* data type for NFA_DM_API_GET_CONFIG_EVT */ 896fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoitypedef struct { 906fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFC_HDR hdr; 916fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t num_ids; 926fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_PMID* p_pmids; 93e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tNFA_DM_API_GET_CONFIG; 94e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 95e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* data type for NFA_DM_API_REQ_EXCL_RF_CTRL_EVT */ 966fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoitypedef struct { 976fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFC_HDR hdr; 986fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_TECHNOLOGY_MASK poll_mask; 996fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_LISTEN_CFG listen_cfg; 1006fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_CONN_CBACK* p_conn_cback; 1016fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_NDEF_CBACK* p_ndef_cback; 102e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tNFA_DM_API_REQ_EXCL_RF_CTRL; 103e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 104e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* data type for NFA_DM_API_ENABLE_POLLING_EVT */ 1056fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoitypedef struct { 1066fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFC_HDR hdr; 1076fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_TECHNOLOGY_MASK poll_mask; 108e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tNFA_DM_API_ENABLE_POLL; 109e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 110e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* data type for NFA_DM_API_SET_P2P_LISTEN_TECH_EVT */ 1116fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoitypedef struct { 1126fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFC_HDR hdr; 1136fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_TECHNOLOGY_MASK tech_mask; 114e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tNFA_DM_API_SET_P2P_LISTEN_TECH; 115e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 116e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* data type for NFA_DM_API_SELECT_EVT */ 1176fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoitypedef struct { 1186fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFC_HDR hdr; 1196fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t rf_disc_id; 1206fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_NFC_PROTOCOL protocol; 1216fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_INTF_TYPE rf_interface; 122e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tNFA_DM_API_SELECT; 123e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 124e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* data type for NFA_DM_API_UPDATE_RF_PARAMS_EVT */ 1256fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoitypedef struct { 1266fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFC_HDR hdr; 1276fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_RF_COMM_PARAMS params; 128e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tNFA_DM_API_UPDATE_RF_PARAMS; 129e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 130e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* data type for NFA_DM_API_DEACTIVATE_EVT */ 1316fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoitypedef struct { 1326fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFC_HDR hdr; 1336fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi bool sleep_mode; 134e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tNFA_DM_API_DEACTIVATE; 135e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 136e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* data type for NFA_DM_API_SET_RF_DISC_DURATION_EVT */ 1376fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoitypedef struct { 1386fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFC_HDR hdr; 1396fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint16_t rf_disc_dur_ms; 140e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tNFA_DM_API_SET_RF_DISC_DUR; 1416fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define NFA_RF_DISC_DURATION_MAX 0xFFFF 142e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 143e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* data type for NFA_DM_API_REG_NDEF_HDLR_EVT */ 1446fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define NFA_NDEF_FLAGS_HANDLE_WHOLE_MESSAGE 0x01 1456fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define NFA_NDEF_FLAGS_WKT_URI 0x02 1466fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define NFA_NDEF_FLAGS_WHOLE_MESSAGE_NOTIFIED 0x04 1476fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 1486fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoitypedef struct { 1496fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFC_HDR hdr; 1506fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_HANDLE ndef_type_handle; 1516fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t flags; 1526fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_NDEF_CBACK* p_ndef_cback; 1536fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_TNF tnf; /* Type-name field of record-type that was registered. */ 1546fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_NDEF_URI_ID 1556fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uri_id; /* URI prefix abrieviation (for NFA_RegisterNDefUriHandler) */ 1566fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t name_len; /* Length of type name or absolute URI */ 1576fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t name[1]; /* Type name or absolute URI of record-type that got was 1586fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi registered. */ 159e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tNFA_DM_API_REG_NDEF_HDLR; 160e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 161e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* data type for NFA_DM_API_DEREG_NDEF_HDLR_EVT */ 1626fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoitypedef struct { 1636fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFC_HDR hdr; 1646fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_HANDLE ndef_type_handle; 165e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tNFA_DM_API_DEREG_NDEF_HDLR; 166e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 167e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* data type for NFA_DM_API_REG_VSC_EVT */ 1686fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoitypedef struct { 1696fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFC_HDR hdr; 1706fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_VSC_CBACK* p_cback; 1716fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi bool is_register; 172e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tNFA_DM_API_REG_VSC; 173e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 174e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* data type for NFA_DM_API_SEND_VSC_EVT */ 1756fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoitypedef struct { 1766fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFC_HDR hdr; 1776fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_VSC_CBACK* p_cback; 1786fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t oid; 1796fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t cmd_params_len; 1806fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint16_t pad; /* add padding to ensure the size is big enough for 1816fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi offset=NCI_VSC_MSG_HDR_SIZE */ 1826fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t* p_cmd_params; 183e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tNFA_DM_API_SEND_VSC; 184e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 185e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* union of all data types */ 1866fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoitypedef union { 1876fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* GKI event buffer header */ 1886fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFC_HDR hdr; /* NFA_DM_API_RAW_FRAME_EVT */ 1896fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* NFA_DM_API_MULTI_TECH_RSP_EVT */ 1906fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* NFA_DM_API_RELEASE_EXCL_RF_CTRL */ 1916fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* NFA_DM_API_DISABLE_POLLING_EVT */ 1926fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* NFA_DM_API_START_RF_DISCOVERY_EVT */ 1936fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* NFA_DM_API_STOP_RF_DISCOVERY_EVT */ 1946fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_DM_API_ENABLE enable; /* NFA_DM_API_ENABLE_EVT */ 1956fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_DM_API_DISABLE disable; /* NFA_DM_API_DISABLE_EVT */ 1966fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_DM_API_SET_CONFIG setconfig; /* NFA_DM_API_SET_CONFIG_EVT */ 1976fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_DM_API_GET_CONFIG getconfig; /* NFA_DM_API_GET_CONFIG_EVT */ 1986fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_DM_API_SET_RF_DISC_DUR 1996fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi disc_duration; /* NFA_DM_API_SET_RF_DISC_DURATION_EVT */ 2006fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_DM_API_REG_NDEF_HDLR reg_ndef_hdlr; /* NFA_DM_API_REG_NDEF_HDLR_EVT */ 2016fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_DM_API_DEREG_NDEF_HDLR 2026fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi dereg_ndef_hdlr; /* NFA_DM_API_DEREG_NDEF_HDLR_EVT */ 2036fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_DM_API_REQ_EXCL_RF_CTRL 2046fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi req_excl_rf_ctrl; /* NFA_DM_API_REQUEST_EXCL_RF_CTRL */ 2056fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_DM_API_ENABLE_POLL enable_poll; /* NFA_DM_API_ENABLE_POLLING_EVT */ 2066fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_DM_API_SET_P2P_LISTEN_TECH 2076fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi set_p2p_listen_tech; /* NFA_DM_API_SET_P2P_LISTEN_TECH_EVT */ 2086fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_DM_API_SELECT select; /* NFA_DM_API_SELECT_EVT */ 2096fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_DM_API_UPDATE_RF_PARAMS 2106fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi update_rf_params; /* NFA_DM_API_UPDATE_RF_PARAMS_EVT */ 2116fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_DM_API_DEACTIVATE deactivate; /* NFA_DM_API_DEACTIVATE_EVT */ 2126fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_DM_API_SEND_VSC send_vsc; /* NFA_DM_API_SEND_VSC_EVT */ 2136fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_DM_API_REG_VSC reg_vsc; /* NFA_DM_API_REG_VSC_EVT */ 214e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tNFA_DM_MSG; 215e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 216e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* DM RF discovery state */ 2176fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoienum { 2186fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFA_DM_RFST_IDLE, /* idle state */ 2196fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFA_DM_RFST_DISCOVERY, /* discovery state */ 2206fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFA_DM_RFST_W4_ALL_DISCOVERIES, /* wait for all discoveries state */ 2216fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFA_DM_RFST_W4_HOST_SELECT, /* wait for host selection state */ 2226fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFA_DM_RFST_POLL_ACTIVE, /* poll mode activated state */ 2236fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFA_DM_RFST_LISTEN_ACTIVE, /* listen mode activated state */ 2246fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFA_DM_RFST_LISTEN_SLEEP, /* listen mode sleep state */ 2256fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFA_DM_RFST_LP_LISTEN, /* Listening in Low Power mode */ 2266fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFA_DM_RFST_LP_ACTIVE /* Activated in Low Power mode */ 227e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}; 228512ee63c7cc8feb016863e507a5d33cd0f4242bfRuchi Kandoitypedef uint8_t tNFA_DM_RF_DISC_STATE; 229e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 230e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* DM RF discovery state machine event */ 2316fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoienum { 2326fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFA_DM_RF_DISCOVER_CMD, /* start RF discovery */ 2336fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFA_DM_RF_DISCOVER_RSP, /* discover response from NFCC */ 2346fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFA_DM_RF_DISCOVER_NTF, /* RF discovery NTF from NFCC */ 2356fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFA_DM_RF_DISCOVER_SELECT_CMD, /* select discovered target */ 2366fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFA_DM_RF_DISCOVER_SELECT_RSP, /* select response from NFCC */ 2376fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFA_DM_RF_INTF_ACTIVATED_NTF, /* RF interface activation NTF from NFCC */ 2386fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFA_DM_RF_DEACTIVATE_CMD, /* deactivate RF interface */ 2396fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFA_DM_RF_DEACTIVATE_RSP, /* deactivate response from NFCC */ 2406fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFA_DM_RF_DEACTIVATE_NTF, /* deactivate RF interface NTF from NFCC */ 2416fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFA_DM_LP_LISTEN_CMD, /* NFCC is listening in low power mode */ 2426fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFA_DM_CORE_INTF_ERROR_NTF, /* RF interface error NTF from NFCC */ 2436fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFA_DM_DISC_SM_MAX_EVENT 244e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}; 245512ee63c7cc8feb016863e507a5d33cd0f4242bfRuchi Kandoitypedef uint8_t tNFA_DM_RF_DISC_SM_EVENT; 246e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 247e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* DM RF discovery state machine data */ 2486fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoitypedef struct { 2496fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t rf_disc_id; 2506fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_NFC_PROTOCOL protocol; 2516fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_INTF_TYPE rf_interface; 252e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tNFA_DM_DISC_SELECT_PARAMS; 253e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2546fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoitypedef union { 2556fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFC_DISCOVER nfc_discover; /* discovery data from NFCC */ 2566fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFC_DEACT_TYPE deactivate_type; /* deactivation type */ 2576fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_DM_DISC_SELECT_PARAMS select; /* selected target information */ 258e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tNFA_DM_RF_DISC_DATA; 259e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 260e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Callback event from NFA DM RF Discovery to other NFA sub-modules */ 2616fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoienum { 2626fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFA_DM_RF_DISC_START_EVT, /* discovery started with protocol, technology and 2636fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi mode */ 2646fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFA_DM_RF_DISC_ACTIVATED_EVT, /* activated with configured protocol, 2656fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi technology and mode */ 2666fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFA_DM_RF_DISC_DEACTIVATED_EVT /* deactivated sleep or idle */ 267e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}; 268512ee63c7cc8feb016863e507a5d33cd0f4242bfRuchi Kandoitypedef uint8_t tNFA_DM_RF_DISC_EVT; 269e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 270e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Combined NFC Technology and protocol bit mask */ 2716fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define NFA_DM_DISC_MASK_PA_T1T 0x00000001 2726fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define NFA_DM_DISC_MASK_PA_T2T 0x00000002 2736fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define NFA_DM_DISC_MASK_PA_ISO_DEP 0x00000004 2746fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define NFA_DM_DISC_MASK_PA_NFC_DEP 0x00000008 2756fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define NFA_DM_DISC_MASK_PB_ISO_DEP 0x00000010 2766fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define NFA_DM_DISC_MASK_PF_T3T 0x00000020 2776fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define NFA_DM_DISC_MASK_PF_NFC_DEP 0x00000040 2786fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define NFA_DM_DISC_MASK_P_ISO15693 0x00000100 2796fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define NFA_DM_DISC_MASK_P_B_PRIME 0x00000200 2806fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define NFA_DM_DISC_MASK_P_KOVIO 0x00000400 2816fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define NFA_DM_DISC_MASK_PAA_NFC_DEP 0x00000800 2826fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define NFA_DM_DISC_MASK_PFA_NFC_DEP 0x00001000 28346e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi/* Legacy/proprietary/non-NFC Forum protocol (e.g Shanghai transit card) */ 28446e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi#define NFA_DM_DISC_MASK_P_LEGACY 0x00002000 2856fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define NFA_DM_DISC_MASK_POLL 0x0000FFFF 2866fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 2876fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define NFA_DM_DISC_MASK_LA_T1T 0x00010000 2886fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define NFA_DM_DISC_MASK_LA_T2T 0x00020000 2896fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define NFA_DM_DISC_MASK_LA_ISO_DEP 0x00040000 2906fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define NFA_DM_DISC_MASK_LA_NFC_DEP 0x00080000 2916fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define NFA_DM_DISC_MASK_LB_ISO_DEP 0x00100000 2926fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define NFA_DM_DISC_MASK_LF_T3T 0x00200000 2936fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define NFA_DM_DISC_MASK_LF_NFC_DEP 0x00400000 2946fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define NFA_DM_DISC_MASK_L_ISO15693 0x01000000 2956fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define NFA_DM_DISC_MASK_L_B_PRIME 0x02000000 2966fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define NFA_DM_DISC_MASK_LAA_NFC_DEP 0x04000000 2976fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define NFA_DM_DISC_MASK_LFA_NFC_DEP 0x08000000 2986fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define NFA_DM_DISC_MASK_L_LEGACY 0x10000000 2996fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define NFA_DM_DISC_MASK_LISTEN 0xFFFF0000 3006fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 3016fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define NFA_DM_DISC_MASK_NFC_DEP 0x0C481848 3026fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 3036fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoitypedef uint32_t tNFA_DM_DISC_TECH_PROTO_MASK; 304e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 305e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* DM RF discovery host ID */ 3066fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define NFA_DM_DISC_HOST_ID_DH NFC_DH_ID 307512ee63c7cc8feb016863e507a5d33cd0f4242bfRuchi Kandoitypedef uint8_t tNFA_DM_DISC_HOST_ID; 308e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 309e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* DM deactivation callback type */ 3106fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoitypedef void(tNFA_DISCOVER_CBACK)(tNFA_DM_RF_DISC_EVT event, 3116fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFC_DISCOVER* p_data); 312e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 313e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* DM RF discovery action flags */ 31446e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi/* RF discovery process has been started */ 31546e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi#define NFA_DM_DISC_FLAGS_ENABLED 0x0001 31646e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi/* Stop RF discovery is pending */ 31746e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi#define NFA_DM_DISC_FLAGS_STOPPING 0x0002 31846e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi/* Disable NFA is pending */ 31946e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi#define NFA_DM_DISC_FLAGS_DISABLING 0x0004 32046e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi/* Sleep wakeup in progress */ 32146e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi#define NFA_DM_DISC_FLAGS_CHECKING 0x0008 32246e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi/* Notify sub-module that discovery is starting */ 32346e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi#define NFA_DM_DISC_FLAGS_NOTIFY 0x0010 32446e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi/* command has been sent to NFCC in the state */ 32546e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi#define NFA_DM_DISC_FLAGS_W4_RSP 0x0020 32646e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi/* wait for NTF before changing discovery state */ 32746e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi#define NFA_DM_DISC_FLAGS_W4_NTF 0x0040 328e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 329512ee63c7cc8feb016863e507a5d33cd0f4242bfRuchi Kandoitypedef uint16_t tNFA_DM_DISC_FLAGS; 330e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 331e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* DM Discovery control block */ 3326fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoitypedef struct { 3336fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi bool in_use; /* TRUE if used */ 3346fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_DISCOVER_CBACK* p_disc_cback; /* discovery callback */ 3356fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 3366fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_DM_DISC_FLAGS disc_flags; /* specific action flags */ 3376fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_DM_DISC_HOST_ID host_id; /* DH or UICC1/UICC2 */ 3386fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_DM_DISC_TECH_PROTO_MASK 3396fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi requested_disc_mask; /* technology and protocol requested */ 3406fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_DM_DISC_TECH_PROTO_MASK 3416fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi selected_disc_mask; /* technology and protocol waiting for activation */ 342e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tNFA_DM_DISC_ENTRY; 343e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 34446e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi/* polling, raw listen, P2P listen, NDEF CE, 2xVSE, 2xUICC */ 34546e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi#define NFA_DM_DISC_NUM_ENTRIES 8 346e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 34746e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi/* max discovery technology parameters */ 34846e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi#define NFA_DM_MAX_DISC_PARAMS 16 349e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 350e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* index of listen mode routing table for technologies */ 351e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectenum { 3526fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFA_DM_DISC_LRT_NFC_A, 3536fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFA_DM_DISC_LRT_NFC_B, 3546fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFA_DM_DISC_LRT_NFC_F, 3556fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFA_DM_DISC_LRT_NFC_BP 356e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}; 357e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 358e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* SLP_REQ (HLTA) command */ 3596fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define SLP_REQ_CMD 0x5000 36046e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi/* NFA_EE_MAX_TECH_ROUTE. only A, B, F, Bprime are supported by UICC now */ 36146e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi#define NFA_DM_MAX_TECH_ROUTE 4 362e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 3635c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen/* timeout for waiting deactivation NTF, 3645c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** possible delay to send deactivate CMD if all credit wasn't returned 3655c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** transport delay (1sec) and max RWT (5sec) 3665c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen*/ 3676fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define NFA_DM_DISC_TIMEOUT_W4_DEACT_NTF (NFC_DEACTIVATE_TIMEOUT * 1000 + 6000) 3685c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 3696fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoitypedef struct { 3706fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint16_t disc_duration; /* Disc duration */ 3716fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_DM_DISC_FLAGS disc_flags; /* specific action flags */ 3726fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_DM_RF_DISC_STATE disc_state; /* RF discovery state */ 373e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 3746fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFC_RF_TECH_N_MODE activated_tech_mode; /* activated technology and mode */ 3756fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t activated_rf_disc_id; /* activated RF discovery ID */ 3766fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_INTF_TYPE activated_rf_interface; /* activated RF interface */ 3776fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_NFC_PROTOCOL activated_protocol; /* activated protocol */ 3786fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_HANDLE activated_handle; /* handle of activated sub-module */ 3796fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t activated_sel_res; /* activated tag's SEL_RES response */ 380e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 3816fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_DM_DISC_ENTRY entry[NFA_DM_DISC_NUM_ENTRIES]; 382e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 3836fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_DM_DISC_ENTRY excl_disc_entry; /* exclusive RF discovery */ 3846fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_LISTEN_CFG excl_listen_config; /* listen cfg for exclusive-rf mode */ 385e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 3866fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t listen_RT[NFA_DM_MAX_TECH_ROUTE]; /* Host ID for A, B, F, B' 3876fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi technology routing*/ 3886fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_DM_DISC_TECH_PROTO_MASK 3896fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi dm_disc_mask; /* technology and protocol waiting for activation */ 390e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 3916fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi TIMER_LIST_ENT tle; /* timer for waiting deactivation NTF */ 3926fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi TIMER_LIST_ENT kovio_tle; /* timer for Kovio bar code tag presence check */ 3937c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chu 3946fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi bool deact_pending; /* TRUE if deactivate while checking presence */ 3956fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi bool deact_notify_pending; /* TRUE if notify DEACTIVATED EVT while Stop rf 3966fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi discovery*/ 3976fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_DEACTIVATE_TYPE pending_deact_type; /* pending deactivate type */ 3985c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 399e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tNFA_DM_DISC_CB; 400e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 401e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* NDEF Type Handler Definitions */ 40246e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi/* Default handler entry in ndef_handler table */ 40346e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi#define NFA_NDEF_DEFAULT_HANDLER_IDX 0 404e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 4056fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define NFA_PARAM_ID_INVALID 0xFF 406e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 407e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Maximum number of pending SetConfigs */ 4086fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define NFA_DM_SETCONFIG_PENDING_MAX 32 409e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 410e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* NFA_DM flags */ 41146e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi/* DM is enabled */ 41246e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi#define NFA_DM_FLAGS_DM_IS_ACTIVE 0x00000001 41346e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi/* Exclusive RF mode is active */ 41446e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi#define NFA_DM_FLAGS_EXCL_RF_ACTIVE 0x00000002 41546e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi/* Polling is enabled (while not in exclusive RF mode */ 41646e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi#define NFA_DM_FLAGS_POLLING_ENABLED 0x00000004 41746e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi/* send poll stop event */ 41846e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi#define NFA_DM_FLAGS_SEND_POLL_STOP_EVT 0x00000008 41946e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi/* auto reading of NDEF in progress */ 42046e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi#define NFA_DM_FLAGS_AUTO_READING_NDEF 0x00000010 42146e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi/* NFA_DM_ENABLE_EVT is not reported yet */ 42246e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi#define NFA_DM_FLAGS_ENABLE_EVT_PEND 0x00000020 42346e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi/* Send NFA_DEACTIVATED_EVT when deactivated */ 42446e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi#define NFA_DM_FLAGS_SEND_DEACTIVATED_EVT 0x00000040 42546e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi/* NFCC is restoring after back to full power mode */ 42646e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi#define NFA_DM_FLAGS_NFCC_IS_RESTORING 0x00000100 42746e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi/* NFCC power mode is updating */ 42846e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi#define NFA_DM_FLAGS_SETTING_PWR_MODE 0x00000200 42946e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi/* NFA DM is disabling NFC */ 43046e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi#define NFA_DM_FLAGS_DM_DISABLING_NFC 0x00000400 43146e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi/* NFA_SendRawFrame() is called since RF activation */ 43246e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi#define NFA_DM_FLAGS_RAW_FRAME 0x00000800 43346e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi/* NFA_DisableListening() is called and engaged */ 43446e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi#define NFA_DM_FLAGS_LISTEN_DISABLED 0x00001000 43546e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi/* NFA_PauseP2p() is called and engaged */ 43646e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi#define NFA_DM_FLAGS_P2P_PAUSED 0x00002000 43746e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi/* Power Off Sleep */ 43846e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi#define NFA_DM_FLAGS_POWER_OFF_SLEEP 0x00008000 439e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* stored parameters */ 4406fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoitypedef struct { 4416fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t total_duration[NCI_PARAM_LEN_TOTAL_DURATION]; 4426fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 4436fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t la_bit_frame_sdd[NCI_PARAM_LEN_LA_BIT_FRAME_SDD]; 4446fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t la_bit_frame_sdd_len; 4456fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t la_platform_config[NCI_PARAM_LEN_LA_PLATFORM_CONFIG]; 4466fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t la_platform_config_len; 4476fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t la_sel_info[NCI_PARAM_LEN_LA_SEL_INFO]; 4486fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t la_sel_info_len; 4496fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t la_nfcid1[NCI_NFCID1_MAX_LEN]; 4506fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t la_nfcid1_len; 4516fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t la_hist_by[NCI_MAX_HIS_BYTES_LEN]; 4526fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t la_hist_by_len; 4536fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 4546fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t lb_sensb_info[NCI_PARAM_LEN_LB_SENSB_INFO]; 4556fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t lb_sensb_info_len; 4566fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t lb_nfcid0[NCI_PARAM_LEN_LB_NFCID0]; 4576fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t lb_nfcid0_len; 4586fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t lb_appdata[NCI_PARAM_LEN_LB_APPDATA]; 4596fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t lb_appdata_len; 4606fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t lb_adc_fo[NCI_PARAM_LEN_LB_ADC_FO]; 4616fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t lb_adc_fo_len; 4626fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t lb_h_info[NCI_MAX_ATTRIB_LEN]; 4636fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t lb_h_info_len; 4646fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 4656fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t lf_protocol[NCI_PARAM_LEN_LF_PROTOCOL]; 4666fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t lf_protocol_len; 4676fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t lf_t3t_flags2[NCI_PARAM_LEN_LF_T3T_FLAGS2]; 4686fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t lf_t3t_flags2_len; 4696fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t lf_t3t_pmm[NCI_PARAM_LEN_LF_T3T_PMM]; 4706fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t lf_t3t_id[NFA_CE_LISTEN_INFO_MAX][NCI_PARAM_LEN_LF_T3T_ID]; 4716fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 4726fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t fwi[NCI_PARAM_LEN_FWI]; 4736fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t wt[NCI_PARAM_LEN_WT]; 4746fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t atr_req_gen_bytes[NCI_MAX_GEN_BYTES_LEN]; 4756fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t atr_req_gen_bytes_len; 4766fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t atr_res_gen_bytes[NCI_MAX_GEN_BYTES_LEN]; 4776fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t atr_res_gen_bytes_len; 4786fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 4796fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t pf_rc[NCI_PARAM_LEN_PF_RC]; 480e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tNFA_DM_PARAMS; 481e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 482a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu/* 483a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu** NFA_NDEF CHO callback 484a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu** It returns TRUE if NDEF is handled by connection handover module. 485a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu*/ 4866fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoitypedef bool(tNFA_NDEF_CHO_CBACK)(uint32_t ndef_len, uint8_t* p_ndef_data); 487a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu 488e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* DM control block */ 4896fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoitypedef struct { 4906fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint32_t flags; /* NFA_DM flags (see definitions for NFA_DM_FLAGS_*) */ 4916fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_DM_CBACK* p_dm_cback; /* NFA DM callback */ 4926fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi TIMER_LIST_ENT tle; 493e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 4946fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* NFC link connection management */ 4956fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_CONN_CBACK* p_conn_cback; /* callback for connection events */ 4966fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_TECHNOLOGY_MASK poll_mask; /* technologies being polled */ 497e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 4986fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_CONN_CBACK* p_excl_conn_cback; /* exclusive RF mode callback */ 4996fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_NDEF_CBACK* p_excl_ndef_cback; /* ndef callback for exclusive RF mdoe */ 500e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 5016fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_NDEF_CHO_CBACK* 5026fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_ndef_cho_cback; /* NDEF callback for static connection handover */ 503a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu 5046fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_HANDLE poll_disc_handle; /* discovery handle for polling */ 505e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 5066fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t* p_activate_ntf; /* temp holding activation notfication */ 5076fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tHAL_API_GET_MAX_NFCEE* get_max_ee; 508e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 5096fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFC_RF_TECH_N_MODE 5106fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi activated_tech_mode; /* previous activated technology and mode */ 5116fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t activated_nfcid[NFC_KOVIO_MAX_LEN]; /* NFCID 0/1/2 or UID of 5126fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi ISO15694/Kovio */ 5136fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t activated_nfcid_len; /* length of NFCID or UID */ 514e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 5156fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* NFC link discovery management */ 5166fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_DM_DISC_CB disc_cb; 517e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 5186fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* NDEF Type handler */ 5196fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_DM_API_REG_NDEF_HDLR* 5206fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_ndef_handler[NFA_NDEF_MAX_HANDLERS]; /* ndef handler table */ 521e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 5226fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* stored parameters */ 5236fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_DM_PARAMS params; 524e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 5256fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* SetConfig management */ 5266fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint32_t setcfg_pending_mask; /* Mask of to indicate whether pending 5276fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi SET_CONFIGs require NFA_DM_SET_CONFIG_EVT. 5286fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi LSB=oldest pending */ 5296fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t setcfg_pending_num; /* Number of setconfigs pending */ 530e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 5316fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* NFCC power mode */ 5326fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t nfcc_pwr_mode; /* NFA_DM_PWR_MODE_FULL or NFA_DM_PWR_MODE_OFF_SLEEP */ 533e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tNFA_DM_CB; 534e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 535e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Internal function prototypes */ 5366fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid nfa_dm_ndef_handle_message(tNFA_STATUS status, uint8_t* p_msg_buf, 5376fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint32_t len); 5386fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid nfa_dm_ndef_dereg_all(void); 5396fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid nfa_dm_act_conn_cback_notify(uint8_t event, tNFA_CONN_EVT_DATA* p_data); 5406fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid nfa_dm_notify_activation_status(tNFA_STATUS status, 5416fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_TAG_PARAMS* p_params); 5426fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid nfa_dm_disable_complete(void); 543e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 544e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Internal functions from nfa_rw */ 5456fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid nfa_rw_init(void); 5466fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid nfa_rw_proc_disc_evt(tNFA_DM_RF_DISC_EVT event, tNFC_DISCOVER* p_data, 5476fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi bool excl_rf_not_active); 5486fca02d5010de7bd31d83b853c32138021da5f29Ruchi KandoitNFA_STATUS nfa_rw_send_raw_frame(NFC_HDR* p_data); 549e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 550e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Internal functions from nfa_ce */ 5516fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid nfa_ce_init(void); 552e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 553e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Pointer to compile-time configuration structure */ 5546fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern tNFA_DM_DISC_FREQ_CFG* p_nfa_dm_rf_disc_freq_cfg; 5556fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern tNFA_HCI_CFG* p_nfa_hci_cfg; 5566fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern tNFA_DM_CFG* p_nfa_dm_cfg; 5576fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern uint8_t* p_nfa_dm_ce_cfg; 5586fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern uint8_t* p_nfa_dm_gen_cfg; 559512ee63c7cc8feb016863e507a5d33cd0f4242bfRuchi Kandoiextern uint8_t nfa_ee_max_ee_cfg; 5606fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern tNCI_DISCOVER_MAPS* p_nfa_dm_interface_mapping; 561512ee63c7cc8feb016863e507a5d33cd0f4242bfRuchi Kandoiextern uint8_t nfa_dm_num_dm_interface_mapping; 5626fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern bool nfa_poll_bail_out_mode; 563e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 564e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* NFA device manager control block */ 565e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectextern tNFA_DM_CB nfa_dm_cb; 566e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 5676fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid nfa_dm_init(void); 5686fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid nfa_p2p_init(void); 569303fec1d79b7ac30a09713e5db9fff299f7227fbRuchi Kandoi#if (NFA_SNEP_INCLUDED == TRUE) 5706fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid nfa_snep_init(bool is_dta_mode); 5715c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen#else 5725c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen#define nfa_snep_init(is_dta_mode) 5735c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen#endif 5745c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 5756fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid nfa_dta_init(void); 576e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (NFC_NFCEE_INCLUDED == TRUE) 5776fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid nfa_ee_init(void); 5786fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid nfa_hci_init(void); 579e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#else 580e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define nfa_ee_init() 581e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define nfa_hci_init() 582e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif 583e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 584e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Action function prototypes */ 5856fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoibool nfa_dm_enable(tNFA_DM_MSG* p_data); 5866fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoibool nfa_dm_disable(tNFA_DM_MSG* p_data); 5876fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoibool nfa_dm_set_config(tNFA_DM_MSG* p_data); 5886fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoibool nfa_dm_get_config(tNFA_DM_MSG* p_data); 5896fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoibool nfa_dm_act_request_excl_rf_ctrl(tNFA_DM_MSG* p_data); 5906fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoibool nfa_dm_act_release_excl_rf_ctrl(tNFA_DM_MSG* p_data); 5916fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoibool nfa_dm_act_enable_polling(tNFA_DM_MSG* p_data); 5926fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoibool nfa_dm_act_disable_polling(tNFA_DM_MSG* p_data); 5936fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoibool nfa_dm_act_enable_listening(tNFA_DM_MSG* p_data); 5946fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoibool nfa_dm_act_disable_listening(tNFA_DM_MSG* p_data); 5956fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoibool nfa_dm_act_pause_p2p(tNFA_DM_MSG* p_data); 5966fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoibool nfa_dm_act_resume_p2p(tNFA_DM_MSG* p_data); 5976fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoibool nfa_dm_act_send_raw_frame(tNFA_DM_MSG* p_data); 5986fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoibool nfa_dm_set_p2p_listen_tech(tNFA_DM_MSG* p_data); 5996fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoibool nfa_dm_act_start_rf_discovery(tNFA_DM_MSG* p_data); 6006fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoibool nfa_dm_act_stop_rf_discovery(tNFA_DM_MSG* p_data); 6016fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoibool nfa_dm_act_set_rf_disc_duration(tNFA_DM_MSG* p_data); 6026fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoibool nfa_dm_act_select(tNFA_DM_MSG* p_data); 6036fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoibool nfa_dm_act_update_rf_params(tNFA_DM_MSG* p_data); 6046fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoibool nfa_dm_act_deactivate(tNFA_DM_MSG* p_data); 6056fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoibool nfa_dm_act_power_off_sleep(tNFA_DM_MSG* p_data); 6066fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoibool nfa_dm_ndef_reg_hdlr(tNFA_DM_MSG* p_data); 6076fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoibool nfa_dm_ndef_dereg_hdlr(tNFA_DM_MSG* p_data); 6086fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoibool nfa_dm_tout(tNFA_DM_MSG* p_data); 6096fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoibool nfa_dm_act_reg_vsc(tNFA_DM_MSG* p_data); 6106fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoibool nfa_dm_act_send_vsc(tNFA_DM_MSG* p_data); 6116fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiuint16_t nfa_dm_act_get_rf_disc_duration(); 6126fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoibool nfa_dm_act_disable_timeout(tNFA_DM_MSG* p_data); 6136fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoibool nfa_dm_act_nfc_cback_data(tNFA_DM_MSG* p_data); 6146fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 6156fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid nfa_dm_proc_nfcc_power_mode(uint8_t nfcc_power_mode); 616e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 617e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Main function prototypes */ 6186fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoibool nfa_dm_evt_hdlr(NFC_HDR* p_msg); 6196fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid nfa_dm_sys_enable(void); 6206fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid nfa_dm_sys_disable(void); 6216fca02d5010de7bd31d83b853c32138021da5f29Ruchi KandoitNFA_STATUS nfa_dm_check_set_config(uint8_t tlv_list_len, uint8_t* p_tlv_list, 6226fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi bool app_init); 623e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 6246fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid nfa_dm_conn_cback_event_notify(uint8_t event, tNFA_CONN_EVT_DATA* p_data); 625e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 626e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Discovery function prototypes */ 6276fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid nfa_dm_disc_sm_execute(tNFA_DM_RF_DISC_SM_EVENT event, 6286fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_DM_RF_DISC_DATA* p_data); 6296fca02d5010de7bd31d83b853c32138021da5f29Ruchi KandoitNFA_HANDLE nfa_dm_add_rf_discover(tNFA_DM_DISC_TECH_PROTO_MASK disc_mask, 6306fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_DM_DISC_HOST_ID host_id, 6316fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_DISCOVER_CBACK* p_disc_cback); 6326fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid nfa_dm_delete_rf_discover(tNFA_HANDLE handle); 6336fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid nfa_dm_start_excl_discovery(tNFA_TECHNOLOGY_MASK poll_tech_mask, 6346fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_LISTEN_CFG* p_listen_cfg, 6356fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_DISCOVER_CBACK* p_disc_cback); 6366fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid nfa_dm_rel_excl_rf_control_and_notify(void); 6376fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid nfa_dm_stop_excl_discovery(void); 6386fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid nfa_dm_disc_new_state(tNFA_DM_RF_DISC_STATE new_state); 6396fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 6406fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid nfa_dm_start_rf_discover(void); 6416fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid nfa_dm_rf_discover_select(uint8_t rf_disc_id, tNFA_NFC_PROTOCOL protocol, 6426fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_INTF_TYPE rf_interface); 6436fca02d5010de7bd31d83b853c32138021da5f29Ruchi KandoitNFA_STATUS nfa_dm_rf_deactivate(tNFA_DEACTIVATE_TYPE deactivate_type); 6446fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoibool nfa_dm_is_protocol_supported(tNFA_NFC_PROTOCOL protocol, uint8_t sel_res); 6456fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoibool nfa_dm_is_active(void); 6466fca02d5010de7bd31d83b853c32138021da5f29Ruchi KandoitNFC_STATUS nfa_dm_disc_sleep_wakeup(void); 6476fca02d5010de7bd31d83b853c32138021da5f29Ruchi KandoitNFC_STATUS nfa_dm_disc_start_kovio_presence_check(void); 6486fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoibool nfa_dm_is_raw_frame_session(void); 6496fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoibool nfa_dm_is_p2p_paused(void); 650e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 651e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (NFC_NFCEE_INCLUDED == FALSE) 6526fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define nfa_ee_get_tech_route(ps, ha) \ 6536fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi memset(ha, NFC_DH_ID, NFA_DM_MAX_TECH_ROUTE); 654e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif 655e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 656e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (BT_TRACE_VERBOSE == TRUE) 6576fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoichar* nfa_dm_nfc_revt_2_str(tNFC_RESPONSE_EVT event); 658e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif 659e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 660e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* NFA_DM_INT_H */ 661