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
195c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen
20e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************
21e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *
22e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  This is the private interface file for NFA_RW
23e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *
24e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ******************************************************************************/
25e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#ifndef NFA_RW_INT_H
26e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define NFA_RW_INT_H
27e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
28e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_sys.h"
29e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_api.h"
30e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_rw_api.h"
31e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfc_api.h"
32e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "rw_api.h"
33e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
34e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*****************************************************************************
35e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**  Constants and data types
36e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*****************************************************************************/
37e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
38e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Interval for performing presence check (in ms) */
39e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#ifndef NFA_RW_PRESENCE_CHECK_INTERVAL
40e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define NFA_RW_PRESENCE_CHECK_INTERVAL  750
41e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif
42e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
43e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* TLV detection status */
44e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define NFA_RW_TLV_DETECT_ST_OP_NOT_STARTED         0x00 /* No Tlv detected */
45e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define NFA_RW_TLV_DETECT_ST_LOCK_TLV_OP_COMPLETE   0x01 /* Lock control tlv detected */
46e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define NFA_RW_TLV_DETECT_ST_MEM_TLV_OP_COMPLETE    0x02 /* Memory control tlv detected */
47e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define NFA_RW_TLV_DETECT_ST_COMPLETE               0x03 /* Both Lock and Memory control Tlvs are detected */
48e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
49e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projecttypedef UINT8 tNFA_RW_TLV_ST;
50e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
51e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
52e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* RW events */
53e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectenum
54e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
55e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_RW_OP_REQUEST_EVT = NFA_SYS_EVT_START (NFA_ID_RW),
56e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_RW_ACTIVATE_NTF_EVT,
57e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_RW_DEACTIVATE_NTF_EVT,
58e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_RW_PRESENCE_CHECK_TICK_EVT,
59a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    NFA_RW_PRESENCE_CHECK_TIMEOUT_EVT,
60e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_RW_MAX_EVT
61e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project};
62e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
63e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
64e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
65e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* BTA_RW operations */
66e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectenum
67e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
68e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_RW_OP_DETECT_NDEF,
69e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_RW_OP_READ_NDEF,
70e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_RW_OP_WRITE_NDEF,
71e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_RW_OP_PRESENCE_CHECK,
72e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_RW_OP_FORMAT_TAG,
73e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_RW_OP_SEND_RAW_FRAME,
74e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
75e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* Exclusive Type-1,Type-2 tag operations */
76e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_RW_OP_DETECT_LOCK_TLV,
77e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_RW_OP_DETECT_MEM_TLV,
78e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_RW_OP_SET_TAG_RO,
79e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
80e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* Exclusive Type-1 tag operations */
81e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_RW_OP_T1T_RID,
82e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_RW_OP_T1T_RALL,
83e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_RW_OP_T1T_READ,
84e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_RW_OP_T1T_WRITE,
85e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_RW_OP_T1T_RSEG,
86e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_RW_OP_T1T_READ8,
87e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_RW_OP_T1T_WRITE8,
88e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
89e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* Exclusive Type-2 tag operations */
90e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_RW_OP_T2T_READ,
91e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_RW_OP_T2T_WRITE,
92e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_RW_OP_T2T_SECTOR_SELECT,
93e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
94e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* Exclusive Type-3 tag operations */
95e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_RW_OP_T3T_READ,
96e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_RW_OP_T3T_WRITE,
97e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_RW_OP_T3T_GET_SYSTEM_CODES,
98e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
99e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* Exclusive ISO 15693 tag operations */
100e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_RW_OP_I93_INVENTORY,
101e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_RW_OP_I93_STAY_QUIET,
102e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_RW_OP_I93_READ_SINGLE_BLOCK,
103e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_RW_OP_I93_WRITE_SINGLE_BLOCK,
104e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_RW_OP_I93_LOCK_BLOCK,
105e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_RW_OP_I93_READ_MULTI_BLOCK,
106e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_RW_OP_I93_WRITE_MULTI_BLOCK,
107e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_RW_OP_I93_SELECT,
108e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_RW_OP_I93_RESET_TO_READY,
109e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_RW_OP_I93_WRITE_AFI,
110e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_RW_OP_I93_LOCK_AFI,
111e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_RW_OP_I93_WRITE_DSFID,
112e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_RW_OP_I93_LOCK_DSFID,
113e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_RW_OP_I93_GET_SYS_INFO,
114e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_RW_OP_I93_GET_MULTI_BLOCK_STATUS,
115e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
116e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_RW_OP_MAX
117e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project};
118e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projecttypedef UINT8 tNFA_RW_OP;
119e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
120e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Enumeration of parameter structios for nfa_rw operations */
121e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
122e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* NFA_RW_OP_WRITE_NDEF params */
123e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projecttypedef struct
124e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
125e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT32          len;
126e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8           *p_data;
127e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tNFA_RW_OP_PARAMS_WRITE_NDEF;
128e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
129e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* NFA_RW_OP_SEND_RAW_FRAME params */
130e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projecttypedef struct
131e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
132e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    BT_HDR          *p_data;
133e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tNFA_RW_OP_PARAMS_SEND_RAW_FRAME;
134e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
135e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* NFA_RW_OP_SET_TAG_RO params */
136e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projecttypedef struct
137e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
138e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    BOOLEAN         b_hard_lock;
139e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tNFA_RW_OP_PARAMS_CONFIG_READ_ONLY;
140e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
141e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* NFA_RW_OP_T1T_READ params */
142e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projecttypedef struct
143e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
144e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8           segment_number;
145e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8           block_number;
146e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8           index;
147e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tNFA_RW_OP_PARAMS_T1T_READ;
148e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
149e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* NFA_RW_OP_T1T_WRITE_E8,NFA_RW_OP_T1T_WRITE_NE8
150e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project   NFA_RW_OP_T1T_WRITE_E, NFA_RW_OP_T1T_WRITE_NE params  */
151e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projecttypedef struct
152e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
153e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    BOOLEAN         b_erase;
154e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8           block_number;
155e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8           index;
156e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8           p_block_data[8];
157e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tNFA_RW_OP_PARAMS_T1T_WRITE;
158e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
159e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* NFA_RW_OP_T2T_READ params */
160e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projecttypedef struct
161e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
162e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8           block_number;
163e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tNFA_RW_OP_PARAMS_T2T_READ;
164e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
165e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* NFA_RW_OP_T2T_WRITE params */
166e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projecttypedef struct
167e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
168e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8           block_number;
169e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8           p_block_data[4];
170e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tNFA_RW_OP_PARAMS_T2T_WRITE;
171e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
172e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* NFA_RW_OP_T2T_SECTOR_SELECT params */
173e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projecttypedef struct
174e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
175e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8           sector_number;
176e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tNFA_RW_OP_PARAMS_T2T_SECTOR_SELECT;
177e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
178e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* NFA_RW_OP_T3T_READ params */
179e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projecttypedef struct
180e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
181e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8              num_blocks;
182e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_T3T_BLOCK_DESC *p_block_desc;
183e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tNFA_RW_OP_PARAMS_T3T_READ;
184e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
185e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* NFA_RW_OP_T3T_WRITE params */
186e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projecttypedef struct
187e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
188e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8               num_blocks;
189e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_T3T_BLOCK_DESC *p_block_desc;
190e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8               *p_block_data;
191e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tNFA_RW_OP_PARAMS_T3T_WRITE;
192e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
19385b7e84f6cc61506c94e98844cac9ce50bbbe9dcEvan Chu/* NFA_RW_OP_I93_XXX params */
194e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projecttypedef struct
195e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
196e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    BOOLEAN             uid_present;
197e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8               uid[I93_UID_BYTE_LEN];
1985c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen    BOOLEAN             afi_present;
199e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8               afi;
200e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8               dsfid;
20185b7e84f6cc61506c94e98844cac9ce50bbbe9dcEvan Chu    UINT16              first_block_number;
202e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT16              number_blocks;
203e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8              *p_data;
204e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tNFA_RW_OP_PARAMS_I93_CMD;
205e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
206e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Union of params for all reader/writer operations */
207e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projecttypedef union
208e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
209e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* params for NFA_RW_OP_WRITE_NDEF */
210e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_RW_OP_PARAMS_WRITE_NDEF        write_ndef;
211e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
212e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* params for NFA_RW_OP_SEND_RAW_FRAME */
213e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_RW_OP_PARAMS_SEND_RAW_FRAME    send_raw_frame;
214e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
215e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* params for NFA_RW_OP_SET_TAG_RO */
216e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_RW_OP_PARAMS_CONFIG_READ_ONLY  set_readonly;
217e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
218e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* params for NFA_RW_OP_T2T_READ and NFA_RW_OP_T1T_WRITE */
219e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_RW_OP_PARAMS_T1T_READ          t1t_read;
220e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_RW_OP_PARAMS_T1T_WRITE         t1t_write;
221e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
222e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* params for NFA_RW_OP_T2T_READ,NFA_RW_OP_T2T_WRITE and NFA_RW_OP_T2T_SECTOR_SELECT */
223e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_RW_OP_PARAMS_T2T_READ          t2t_read;
224e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_RW_OP_PARAMS_T2T_WRITE         t2t_write;
225e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_RW_OP_PARAMS_T2T_SECTOR_SELECT t2t_sector_select;
226e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
227e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* params for NFA_RW_OP_T3T_READ and NFA_RW_OP_T3T_WRITE */
228e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_RW_OP_PARAMS_T3T_READ          t3t_read;
229e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_RW_OP_PARAMS_T3T_WRITE         t3t_write;
230e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
231a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    /* params for NFA_RW_OP_PRESENCE_CHECK */
232a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    tNFA_RW_PRES_CHK_OPTION             option;
233a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu
234e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* params for ISO 15693 */
235e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_RW_OP_PARAMS_I93_CMD           i93_cmd;
236e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
237e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tNFA_RW_OP_PARAMS;
238e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
239e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* data type for NFA_RW_op_req_EVT */
240e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projecttypedef struct
241e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
242e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    BT_HDR              hdr;
243e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_RW_OP          op;     /* NFA RW operation */
244e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_RW_OP_PARAMS   params;
245e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tNFA_RW_OPERATION;
246e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
247e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* data type for NFA_RW_ACTIVATE_NTF */
248e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projecttypedef struct
249e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
250e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    BT_HDR              hdr;
251e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFC_ACTIVATE_DEVT  *p_activate_params; /* Data from NFC_ACTIVATE_DEVT      */
252e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    BOOLEAN             excl_rf_not_active; /* TRUE if not in exclusive RF mode */
253e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tNFA_RW_ACTIVATE_NTF;
254e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
255e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* union of all data types */
256e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projecttypedef union
257e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
258e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* GKI event buffer header */
259e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    BT_HDR                  hdr;
260e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_RW_OPERATION       op_req;
261e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_RW_ACTIVATE_NTF    activate_ntf;
262e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tNFA_RW_MSG;
263e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
264e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* NDEF detection status */
265e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectenum
266e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
267e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_RW_NDEF_ST_UNKNOWN =0,      /* NDEF detection not performed yet */
268e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_RW_NDEF_ST_TRUE,            /* Tag is NDEF */
269e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_RW_NDEF_ST_FALSE            /* Tag is not NDEF */
270e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project};
271e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projecttypedef UINT8 tNFA_RW_NDEF_ST;
272e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
273e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* flags for RW control block */
274e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define NFA_RW_FL_NOT_EXCL_RF_MODE              0x01    /* Activation while not in exclusive RF mode                                */
275e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define NFA_RW_FL_AUTO_PRESENCE_CHECK_BUSY      0x02    /* Waiting for response from tag for auto-presence check                    */
276e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define NFA_RW_FL_TAG_IS_READONLY               0x04    /* Read only tag                                                            */
277e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define NFA_RW_FL_ACTIVATION_NTF_PENDING        0x08    /* Busy retrieving additional tag information                               */
278e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define NFA_RW_FL_API_BUSY                      0x10    /* Tag operation is in progress                                             */
279e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define NFA_RW_FL_ACTIVATED                     0x20    /* Tag is been activated                                                    */
280a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu#define NFA_RW_FL_NDEF_OK                       0x40    /* NDEF DETECTed OK                                                         */
281e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
282e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* NFA RW control block */
283e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projecttypedef struct
284e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
285e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_RW_OP      cur_op;         /* Current operation */
286e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
287e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    TIMER_LIST_ENT  tle;            /* list entry for nfa_rw timer */
288e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_RW_MSG     *p_pending_msg; /* Pending API (if busy performing presence check) */
289e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
290e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* Tag info */
291e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFC_PROTOCOL   protocol;
292a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    tNFC_INTF_TYPE  intf_type;
293e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8           pa_sel_res;
294c95c79ccb65d82a65b960919077d5c359cf28cedEvan Chu    tNFC_RF_TECH_N_MODE  activated_tech_mode;    /* activated technology and mode */
295c95c79ccb65d82a65b960919077d5c359cf28cedEvan Chu
296e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    BOOLEAN         b_hard_lock;
297e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
298e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_RW_MSG     *p_buffer_rw_msg; /* Buffer to hold incoming cmd while reading tag id */
299e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
300e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* TLV info */
301e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_RW_TLV_ST  tlv_st;         /* TLV detection status */
302e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
303e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* NDEF info */
304e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_RW_NDEF_ST ndef_st;        /* NDEF detection status */
305e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT32          ndef_max_size;  /* max number of bytes available for NDEF data */
306e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT32          ndef_cur_size;  /* current size of stored NDEF data (in bytes) */
307e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8           *p_ndef_buf;
308e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT32          ndef_rd_offset; /* current read-offset of incoming NDEF data */
309e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
310e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* Current NDEF Write info */
311e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8           *p_ndef_wr_buf; /* Pointer to NDEF data being written */
312e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT32          ndef_wr_len;    /* Length of NDEF data being written */
313e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
314c95c79ccb65d82a65b960919077d5c359cf28cedEvan Chu    /* Reactivating type 2 tag after NACK rsp */
315c95c79ccb65d82a65b960919077d5c359cf28cedEvan Chu    tRW_EVENT       halt_event;     /* Event ID from stack after NACK response */
316c95c79ccb65d82a65b960919077d5c359cf28cedEvan Chu    tRW_DATA        rw_data;        /* Event Data from stack after NACK response */
317c95c79ccb65d82a65b960919077d5c359cf28cedEvan Chu    BOOLEAN         skip_dyn_locks; /* To skip reading dynamic locks during NDEF Detect */
318c95c79ccb65d82a65b960919077d5c359cf28cedEvan Chu
319e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* Flags (see defintions for NFA_RW_FL_* ) */
320e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8           flags;
321e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
322e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* ISO 15693 tag memory information */
323e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT16          i93_afi_location;
324e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8           i93_dsfid;
325e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8           i93_block_size;
326e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT16          i93_num_block;
327e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8           i93_uid[I93_UID_BYTE_LEN];
328e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tNFA_RW_CB;
329e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectextern tNFA_RW_CB nfa_rw_cb;
330e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
331e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
332e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
333e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* type definition for action functions */
334e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projecttypedef BOOLEAN (*tNFA_RW_ACTION) (tNFA_RW_MSG *p_data);
335e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
336e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Internal nfa_rw function prototypes */
337e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectextern void    nfa_rw_stop_presence_check_timer (void);
338e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
339e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Action function prototypes */
340e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectextern BOOLEAN nfa_rw_handle_op_req (tNFA_RW_MSG *p_data);
341e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectextern BOOLEAN nfa_rw_activate_ntf (tNFA_RW_MSG *p_data);
342e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectextern BOOLEAN nfa_rw_deactivate_ntf (tNFA_RW_MSG *p_data);
343e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectextern BOOLEAN nfa_rw_presence_check_tick (tNFA_RW_MSG *p_data);
344a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chuextern BOOLEAN nfa_rw_presence_check_timeout (tNFA_RW_MSG *p_data);
345c95c79ccb65d82a65b960919077d5c359cf28cedEvan Chuextern void    nfa_rw_handle_sleep_wakeup_rsp (tNFC_STATUS status);
3467c69b2723b60a59df4aaa58b13985b3483b291bfEvan Chuextern void    nfa_rw_handle_presence_check_rsp (tNFC_STATUS status);
347e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectextern void    nfa_rw_command_complete (void);
348e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectextern BOOLEAN nfa_rw_handle_event (BT_HDR *p_msg);
349e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
350e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectextern void    nfa_rw_free_ndef_rx_buf (void);
351e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectextern void    nfa_rw_sys_disable (void);
352e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
353e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* NFA_DM_INT_H */
354e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
355