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