blob: c7000275648d24a23ada5e55c3373a5b522948e9 [file] [log] [blame]
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -08001/******************************************************************************
2 *
Evan Chue9629ba2014-01-31 11:18:47 -05003 * Copyright (C) 2010-2014 Broadcom Corporation
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -08004 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at:
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 *
17 ******************************************************************************/
18
19/******************************************************************************
20 *
21 * This is the private interface file for the NFA EE.
22 *
23 ******************************************************************************/
24#ifndef NFA_EE_INT_H
25#define NFA_EE_INT_H
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -080026#include "nfa_ee_api.h"
27#include "nfa_sys.h"
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -080028#include "nfc_api.h"
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -080029
30/*****************************************************************************
31** Constants and data types
32*****************************************************************************/
Ruchi Kandoi46e6e282017-01-30 14:26:10 -080033/* the number of tNFA_EE_ECBs (for NFCEEs and DH) */
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -080034#define NFA_EE_NUM_ECBS (NFA_EE_MAX_EE_SUPPORTED + 1)
Ruchi Kandoi46e6e282017-01-30 14:26:10 -080035/* The index for DH in nfa_ee_cb.ee_cb[] */
36#define NFA_EE_CB_4_DH NFA_EE_MAX_EE_SUPPORTED
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -080037#define NFA_EE_INVALID 0xFF
Ruchi Kandoi46e6e282017-01-30 14:26:10 -080038/* only A, B, F, Bprime are supported by UICC now */
39#define NFA_EE_MAX_TECH_ROUTE 4
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -080040
41#ifndef NFA_EE_AID_CFG_TAG_NAME
Ruchi Kandoi46e6e282017-01-30 14:26:10 -080042/* AID */
43#define NFA_EE_AID_CFG_TAG_NAME 0x4F
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -080044#endif
45
46/* NFA EE events */
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -080047enum {
48 NFA_EE_API_DISCOVER_EVT = NFA_SYS_EVT_START(NFA_ID_EE),
49 NFA_EE_API_REGISTER_EVT,
50 NFA_EE_API_DEREGISTER_EVT,
51 NFA_EE_API_MODE_SET_EVT,
52 NFA_EE_API_SET_TECH_CFG_EVT,
53 NFA_EE_API_SET_PROTO_CFG_EVT,
54 NFA_EE_API_ADD_AID_EVT,
55 NFA_EE_API_REMOVE_AID_EVT,
Love Khanna1d062772018-04-10 21:10:02 +053056 NFA_EE_API_ADD_SYSCODE_EVT,
57 NFA_EE_API_REMOVE_SYSCODE_EVT,
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -080058 NFA_EE_API_LMRT_SIZE_EVT,
59 NFA_EE_API_UPDATE_NOW_EVT,
60 NFA_EE_API_CONNECT_EVT,
61 NFA_EE_API_SEND_DATA_EVT,
62 NFA_EE_API_DISCONNECT_EVT,
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -080063
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -080064 NFA_EE_NCI_DISC_RSP_EVT,
65 NFA_EE_NCI_DISC_NTF_EVT,
66 NFA_EE_NCI_MODE_SET_RSP_EVT,
67 NFA_EE_NCI_CONN_EVT,
68 NFA_EE_NCI_DATA_EVT,
69 NFA_EE_NCI_ACTION_NTF_EVT,
70 NFA_EE_NCI_DISC_REQ_NTF_EVT,
71 NFA_EE_NCI_WAIT_RSP_EVT,
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -080072
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -080073 NFA_EE_ROUT_TIMEOUT_EVT,
74 NFA_EE_DISCV_TIMEOUT_EVT,
75 NFA_EE_CFG_TO_NFCC_EVT,
76 NFA_EE_MAX_EVT
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -080077
78};
79
Ruchi Kandoi512ee632017-01-03 13:59:10 -080080typedef uint16_t tNFA_EE_INT_EVT;
Ruchi Kandoi46e6e282017-01-30 14:26:10 -080081/* for listen mode routing table*/
82#define NFA_EE_AE_ROUTE 0x80
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -080083#define NFA_EE_AE_VS 0x40
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -080084
85/* NFA EE Management state */
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -080086enum {
87 NFA_EE_EM_STATE_INIT = 0,
88 NFA_EE_EM_STATE_INIT_DONE,
89 NFA_EE_EM_STATE_RESTORING,
90 NFA_EE_EM_STATE_DISABLING,
91 NFA_EE_EM_STATE_DISABLED,
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -080092
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -080093 NFA_EE_EM_STATE_MAX
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -080094};
Ruchi Kandoi512ee632017-01-03 13:59:10 -080095typedef uint8_t tNFA_EE_EM_STATE;
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -080096
97/* NFA EE connection status */
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -080098enum {
99 NFA_EE_CONN_ST_NONE, /* not connected */
100 NFA_EE_CONN_ST_WAIT, /* connection is initiated; waiting for ack */
101 NFA_EE_CONN_ST_CONN, /* connected; can send/receive data */
Ruchi Kandoi2eba59f2017-10-24 11:20:45 -0700102 NFA_EE_CONN_ST_DISC /* disconnecting; waiting for ack */
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800103};
Ruchi Kandoi512ee632017-01-03 13:59:10 -0800104typedef uint8_t tNFA_EE_CONN_ST;
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800105
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800106#define NFA_EE_MAX_AID_CFG_LEN (510)
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800107
Love Khanna1d062772018-04-10 21:10:02 +0530108#define NFA_EE_SYSTEM_CODE_LEN 02
109#define NFA_EE_SYSTEM_CODE_TLV_SIZE 06
110#define NFA_EE_MAX_SYSTEM_CODE_ENTRIES 10
111#define NFA_EE_MAX_SYSTEM_CODE_CFG_LEN \
112 (NFA_EE_MAX_SYSTEM_CODE_ENTRIES * NFA_EE_SYSTEM_CODE_TLV_SIZE)
113
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800114/* NFA EE control block flags:
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800115 * use to indicate an API function has changed the configuration of the
116 * associated NFCEE
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800117 * The flags are cleared when the routing table/VS is updated */
Ruchi Kandoi46e6e282017-01-30 14:26:10 -0800118/* technology routing changed */
119#define NFA_EE_ECB_FLAGS_TECH 0x02
120/* protocol routing changed */
121#define NFA_EE_ECB_FLAGS_PROTO 0x04
122/* AID routing changed */
123#define NFA_EE_ECB_FLAGS_AID 0x08
Love Khanna1d062772018-04-10 21:10:02 +0530124/* System Code routing changed */
125#define NFA_EE_ECB_FLAGS_SYSCODE 0xE0
Ruchi Kandoi46e6e282017-01-30 14:26:10 -0800126/* VS changed */
127#define NFA_EE_ECB_FLAGS_VS 0x10
128/* Restore related */
129#define NFA_EE_ECB_FLAGS_RESTORE 0x20
130/* routing flags changed */
131#define NFA_EE_ECB_FLAGS_ROUTING 0x0E
132/* NFCEE Discover Request NTF is set */
133#define NFA_EE_ECB_FLAGS_DISC_REQ 0x40
134/* DISC_REQ N reported before DISC N */
135#define NFA_EE_ECB_FLAGS_ORDER 0x80
Ruchi Kandoi512ee632017-01-03 13:59:10 -0800136typedef uint8_t tNFA_EE_ECB_FLAGS;
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800137
138/* part of tNFA_EE_STATUS; for internal use only */
Ruchi Kandoi46e6e282017-01-30 14:26:10 -0800139/* waiting for restore to full power mode to complete */
140#define NFA_EE_STATUS_RESTORING 0x20
141/* this bit is in ee_status for internal use only */
142#define NFA_EE_STATUS_INT_MASK 0x20
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800143
144/* NFA-EE information for a particular NFCEE Entity (including DH) */
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800145typedef struct {
146 tNFA_TECHNOLOGY_MASK
147 tech_switch_on; /* default routing - technologies switch_on */
148 tNFA_TECHNOLOGY_MASK
149 tech_switch_off; /* default routing - technologies switch_off */
150 tNFA_TECHNOLOGY_MASK
151 tech_battery_off; /* default routing - technologies battery_off*/
152 tNFA_PROTOCOL_MASK
153 proto_switch_on; /* default routing - protocols switch_on */
154 tNFA_PROTOCOL_MASK
155 proto_switch_off; /* default routing - protocols switch_off */
156 tNFA_PROTOCOL_MASK
157 proto_battery_off; /* default routing - protocols battery_off */
158 tNFA_EE_CONN_ST conn_st; /* connection status */
159 uint8_t conn_id; /* connection id */
160 tNFA_EE_CBACK* p_ee_cback; /* the callback function */
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800161
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800162 /* Each AID entry has an ssociated aid_len, aid_pwr_cfg, aid_rt_info.
163 * aid_cfg[] contains AID and maybe some other VS information in TLV format
164 * The first T is always NFA_EE_AID_CFG_TAG_NAME, the L is the actual AID
165 * length
166 * the aid_len is the total length of all the TLVs associated with this AID
167 * entry
168 */
169 uint8_t aid_len[NFA_EE_MAX_AID_ENTRIES]; /* the actual lengths in aid_cfg */
170 uint8_t aid_pwr_cfg[NFA_EE_MAX_AID_ENTRIES]; /* power configuration of this
171 AID entry */
172 uint8_t aid_rt_info[NFA_EE_MAX_AID_ENTRIES]; /* route/vs info for this AID
173 entry */
174 uint8_t aid_cfg[NFA_EE_MAX_AID_CFG_LEN]; /* routing entries based on AID */
175 uint8_t aid_entries; /* The number of AID entries in aid_cfg */
176 uint8_t nfcee_id; /* ID for this NFCEE */
177 uint8_t ee_status; /* The NFCEE status */
178 uint8_t ee_old_status; /* The NFCEE status before going to low power mode */
179 tNFA_EE_INTERFACE
180 ee_interface[NFC_MAX_EE_INTERFACE]; /* NFCEE supported interface */
181 tNFA_EE_TLV ee_tlv[NFC_MAX_EE_TLVS]; /* the TLV */
182 uint8_t num_interface; /* number of Target interface */
183 uint8_t num_tlvs; /* number of TLVs */
Love Khanna81e4f812017-06-02 17:50:19 +0530184 uint8_t ee_power_supply_status; /* power supply of NFCEE*/
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800185 tNFA_EE_ECB_FLAGS ecb_flags; /* the flags of this control block */
186 tNFA_EE_INTERFACE use_interface; /* NFCEE interface used for the connection */
187 tNFA_NFC_PROTOCOL la_protocol; /* Listen A protocol */
188 tNFA_NFC_PROTOCOL lb_protocol; /* Listen B protocol */
189 tNFA_NFC_PROTOCOL lf_protocol; /* Listen F protocol */
190 tNFA_NFC_PROTOCOL lbp_protocol; /* Listen B' protocol */
191 uint8_t size_mask; /* the size for technology and protocol routing */
192 uint16_t size_aid; /* the size for aid routing */
Love Khannaf3c018a2017-05-11 18:34:32 +0530193 uint8_t aid_info[NFA_EE_MAX_AID_ENTRIES]; /* Aid Info Prefix/Suffix/Exact */
Love Khanna1d062772018-04-10 21:10:02 +0530194 /*System Code Based Routing Variables*/
195 uint8_t sys_code_cfg[NFA_EE_MAX_SYSTEM_CODE_ENTRIES * NFA_EE_SYSTEM_CODE_LEN];
196 uint8_t sys_code_pwr_cfg[NFA_EE_MAX_SYSTEM_CODE_ENTRIES];
197 uint8_t sys_code_rt_loc[NFA_EE_MAX_SYSTEM_CODE_ENTRIES];
198 uint8_t sys_code_rt_loc_vs_info[NFA_EE_MAX_SYSTEM_CODE_ENTRIES];
199 /* The number of SC entries in sys_code_cfg buffer*/
200 uint8_t sys_code_cfg_entries;
201 uint16_t size_sys_code; /* The size for system code routing */
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800202} tNFA_EE_ECB;
203
204/* data type for NFA_EE_API_DISCOVER_EVT */
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800205typedef struct {
206 NFC_HDR hdr;
207 tNFA_EE_CBACK* p_cback;
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800208} tNFA_EE_API_DISCOVER;
209
210/* data type for NFA_EE_API_REGISTER_EVT */
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800211typedef struct {
212 NFC_HDR hdr;
213 tNFA_EE_CBACK* p_cback;
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800214} tNFA_EE_API_REGISTER;
215
216/* data type for NFA_EE_API_DEREGISTER_EVT */
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800217typedef struct {
218 NFC_HDR hdr;
219 int index;
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800220} tNFA_EE_API_DEREGISTER;
221
222/* data type for NFA_EE_API_MODE_SET_EVT */
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800223typedef struct {
224 NFC_HDR hdr;
225 tNFA_EE_ECB* p_cb;
226 uint8_t nfcee_id;
227 uint8_t mode;
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800228} tNFA_EE_API_MODE_SET;
229
230/* data type for NFA_EE_API_SET_TECH_CFG_EVT */
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800231typedef struct {
232 NFC_HDR hdr;
233 tNFA_EE_ECB* p_cb;
234 uint8_t nfcee_id;
235 tNFA_TECHNOLOGY_MASK technologies_switch_on;
236 tNFA_TECHNOLOGY_MASK technologies_switch_off;
237 tNFA_TECHNOLOGY_MASK technologies_battery_off;
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800238} tNFA_EE_API_SET_TECH_CFG;
239
240/* data type for NFA_EE_API_SET_PROTO_CFG_EVT */
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800241typedef struct {
242 NFC_HDR hdr;
243 tNFA_EE_ECB* p_cb;
244 uint8_t nfcee_id;
245 tNFA_PROTOCOL_MASK protocols_switch_on;
246 tNFA_PROTOCOL_MASK protocols_switch_off;
247 tNFA_PROTOCOL_MASK protocols_battery_off;
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800248} tNFA_EE_API_SET_PROTO_CFG;
249
250/* data type for NFA_EE_API_ADD_AID_EVT */
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800251typedef struct {
252 NFC_HDR hdr;
253 tNFA_EE_ECB* p_cb;
254 uint8_t nfcee_id;
255 uint8_t aid_len;
256 uint8_t* p_aid;
257 tNFA_EE_PWR_STATE power_state;
Love Khannaf3c018a2017-05-11 18:34:32 +0530258 uint8_t aidInfo;
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800259} tNFA_EE_API_ADD_AID;
260
261/* data type for NFA_EE_API_REMOVE_AID_EVT */
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800262typedef struct {
263 NFC_HDR hdr;
264 uint8_t aid_len;
265 uint8_t* p_aid;
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800266} tNFA_EE_API_REMOVE_AID;
267
Love Khanna1d062772018-04-10 21:10:02 +0530268/* data type for NFA_EE_API_ADD_SYSCODE_EVT */
269typedef struct {
270 NFC_HDR hdr;
271 tNFA_EE_ECB* p_cb;
272 uint8_t nfcee_id;
273 uint16_t syscode;
274 tNFA_EE_PWR_STATE power_state;
275} tNFA_EE_API_ADD_SYSCODE;
276
277/* data type for NFA_EE_API_REMOVE_SYSCODE_EVT */
278typedef struct {
279 NFC_HDR hdr;
280 uint16_t syscode;
281} tNFA_EE_API_REMOVE_SYSCODE;
282
Sherry Smithca0bff42014-01-22 15:15:54 -0800283/* data type for NFA_EE_API_LMRT_SIZE_EVT */
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800284typedef NFC_HDR tNFA_EE_API_LMRT_SIZE;
Sherry Smithca0bff42014-01-22 15:15:54 -0800285
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800286/* data type for NFA_EE_API_CONNECT_EVT */
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800287typedef struct {
288 NFC_HDR hdr;
289 tNFA_EE_ECB* p_cb;
290 uint8_t nfcee_id;
291 uint8_t ee_interface;
292 tNFA_EE_CBACK* p_cback;
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800293} tNFA_EE_API_CONNECT;
294
295/* data type for NFA_EE_API_SEND_DATA_EVT */
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800296typedef struct {
297 NFC_HDR hdr;
298 tNFA_EE_ECB* p_cb;
299 uint8_t nfcee_id;
300 uint16_t data_len;
301 uint8_t* p_data;
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800302} tNFA_EE_API_SEND_DATA;
303
304/* data type for NFA_EE_API_DISCONNECT_EVT */
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800305typedef struct {
306 NFC_HDR hdr;
307 tNFA_EE_ECB* p_cb;
308 uint8_t nfcee_id;
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800309} tNFA_EE_API_DISCONNECT;
310
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800311/* common data type for internal events with nfa_ee_use_cfg_cb[] as TRUE */
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800312typedef struct {
313 NFC_HDR hdr;
314 tNFA_EE_ECB* p_cb;
315 uint8_t nfcee_id;
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800316} tNFA_EE_CFG_HDR;
317
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800318/* data type for NFA_EE_NCI_DISC_RSP_EVT */
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800319typedef struct {
320 NFC_HDR hdr;
321 tNFC_NFCEE_DISCOVER_REVT* p_data;
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800322} tNFA_EE_NCI_DISC_RSP;
323
324/* data type for NFA_EE_NCI_DISC_NTF_EVT */
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800325typedef struct {
326 NFC_HDR hdr;
327 tNFC_NFCEE_INFO_REVT* p_data;
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800328} tNFA_EE_NCI_DISC_NTF;
329
330/* data type for NFA_EE_NCI_MODE_SET_RSP_EVT */
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800331typedef struct {
332 NFC_HDR hdr;
333 tNFC_NFCEE_MODE_SET_REVT* p_data;
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800334} tNFA_EE_NCI_MODE_SET;
335
Sherry Smith40e67c92014-01-16 10:10:29 -0800336/* data type for NFA_EE_NCI_WAIT_RSP_EVT */
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800337typedef struct {
338 NFC_HDR hdr;
339 void* p_data;
340 uint8_t opcode;
Sherry Smith40e67c92014-01-16 10:10:29 -0800341} tNFA_EE_NCI_WAIT_RSP;
342
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800343/* data type for NFA_EE_NCI_CONN_EVT and NFA_EE_NCI_DATA_EVT */
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800344typedef struct {
345 NFC_HDR hdr;
346 uint8_t conn_id;
347 tNFC_CONN_EVT event;
348 tNFC_CONN* p_data;
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800349} tNFA_EE_NCI_CONN;
350
351/* data type for NFA_EE_NCI_ACTION_NTF_EVT */
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800352typedef struct {
353 NFC_HDR hdr;
354 tNFC_EE_ACTION_REVT* p_data;
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800355} tNFA_EE_NCI_ACTION;
356
357/* data type for NFA_EE_NCI_DISC_REQ_NTF_EVT */
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800358typedef struct {
359 NFC_HDR hdr;
360 tNFC_EE_DISCOVER_REQ_REVT* p_data;
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800361} tNFA_EE_NCI_DISC_REQ;
362
363/* union of all event data types */
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800364typedef union {
365 NFC_HDR hdr;
366 tNFA_EE_CFG_HDR cfg_hdr;
367 tNFA_EE_API_DISCOVER ee_discover;
368 tNFA_EE_API_REGISTER ee_register;
369 tNFA_EE_API_DEREGISTER deregister;
370 tNFA_EE_API_MODE_SET mode_set;
371 tNFA_EE_API_SET_TECH_CFG set_tech;
372 tNFA_EE_API_SET_PROTO_CFG set_proto;
373 tNFA_EE_API_ADD_AID add_aid;
374 tNFA_EE_API_REMOVE_AID rm_aid;
Love Khanna1d062772018-04-10 21:10:02 +0530375 tNFA_EE_API_ADD_SYSCODE add_syscode;
376 tNFA_EE_API_REMOVE_SYSCODE rm_syscode;
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800377 tNFA_EE_API_LMRT_SIZE lmrt_size;
378 tNFA_EE_API_CONNECT connect;
379 tNFA_EE_API_SEND_DATA send_data;
380 tNFA_EE_API_DISCONNECT disconnect;
381 tNFA_EE_NCI_DISC_RSP disc_rsp;
382 tNFA_EE_NCI_DISC_NTF disc_ntf;
383 tNFA_EE_NCI_MODE_SET mode_set_rsp;
384 tNFA_EE_NCI_WAIT_RSP wait_rsp;
385 tNFA_EE_NCI_CONN conn;
386 tNFA_EE_NCI_ACTION act;
387 tNFA_EE_NCI_DISC_REQ disc_req;
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800388} tNFA_EE_MSG;
389
390/* type for State Machine (SM) action functions */
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800391typedef void (*tNFA_EE_SM_ACT)(tNFA_EE_MSG* p_data);
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800392
393/*****************************************************************************
394** control block
395*****************************************************************************/
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800396#define NFA_EE_CFGED_UPDATE_NOW 0x80
Ruchi Kandoi46e6e282017-01-30 14:26:10 -0800397/* either switch off or battery off is configured */
398#define NFA_EE_CFGED_OFF_ROUTING 0x40
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800399
400/* the following status are the definition used in ee_cfg_sts */
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800401#define NFA_EE_STS_CHANGED_ROUTING 0x01
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800402#define NFA_EE_STS_CHANGED 0x0f
403#define NFA_EE_STS_PREV_ROUTING 0x10
404#define NFA_EE_STS_PREV 0xf0
Sherry Smith40e67c92014-01-16 10:10:29 -0800405
Ruchi Kandoi46e6e282017-01-30 14:26:10 -0800406/* need to report NFA_EE_UPDATED_EVT */
407#define NFA_EE_WAIT_UPDATE 0x10
408/* waiting for the rsp of set routing commands */
409#define NFA_EE_WAIT_UPDATE_RSP 0x20
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800410#define NFA_EE_WAIT_UPDATE_ALL 0xF0
Sherry Smith40e67c92014-01-16 10:10:29 -0800411
Ruchi Kandoi512ee632017-01-03 13:59:10 -0800412typedef uint8_t tNFA_EE_WAIT;
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800413
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800414/* set this bit when waiting for HCI to finish the initialization process in
415 * NFA_EE_EM_STATE_RESTORING */
Ruchi Kandoi46e6e282017-01-30 14:26:10 -0800416#define NFA_EE_FLAG_WAIT_HCI 0x01
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800417/* set this bit when EE needs to notify the p_enable_cback at the end of NFCEE
418 * discover process in NFA_EE_EM_STATE_RESTORING */
Ruchi Kandoi46e6e282017-01-30 14:26:10 -0800419#define NFA_EE_FLAG_NOTIFY_HCI 0x02
420/* set this bit when gracefully disable with outstanding NCI connections */
421#define NFA_EE_FLAG_WAIT_DISCONN 0x04
Ruchi Kandoi512ee632017-01-03 13:59:10 -0800422typedef uint8_t tNFA_EE_FLAGS;
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800423
Ruchi Kandoi46e6e282017-01-30 14:26:10 -0800424/* NFCEE DISCOVER in progress */
425#define NFA_EE_DISC_STS_ON 0x00
426/* disable NFCEE DISCOVER */
427#define NFA_EE_DISC_STS_OFF 0x01
428/* received NFCEE DISCOVER REQ NTF */
429#define NFA_EE_DISC_STS_REQ 0x02
Love Khanna81e4f812017-06-02 17:50:19 +0530430/* received NFA_EE_MODE_SET_COMPLETE */
431#define NFA_EE_MODE_SET_COMPLETE 0x03
Ruchi Kandoi512ee632017-01-03 13:59:10 -0800432typedef uint8_t tNFA_EE_DISC_STS;
Martijn Coenen5c65c3a2013-03-27 13:23:36 -0700433
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800434typedef void(tNFA_EE_ENABLE_DONE_CBACK)(tNFA_EE_DISC_STS status);
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800435
436/* NFA EE Management control block */
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800437typedef struct {
438 tNFA_EE_ECB ecb[NFA_EE_NUM_ECBS]; /* control block for DH and NFCEEs */
439 TIMER_LIST_ENT timer; /* timer to send info to NFCC */
440 TIMER_LIST_ENT discv_timer; /* timer to end NFCEE discovery */
441 tNFA_EE_CBACK* p_ee_cback[NFA_EE_MAX_CBACKS]; /* to report EE events */
442 tNFA_EE_CBACK* p_ee_disc_cback; /* to report EE discovery result */
443 tNFA_EE_ENABLE_DONE_CBACK*
Ruchi Kandoi7e165632017-08-04 09:24:30 -0700444 p_enable_cback; /* callback to notify on enable done*/
445 tNFA_EE_EM_STATE em_state; /* NFA-EE state initialized or not */
446 uint8_t wait_rsp; /* num of NCI rsp expected (update) */
447 uint8_t num_ee_expecting; /* number of ee_info still expecting*/
448 uint8_t cur_ee; /* the number of ee_info in cb */
449 uint8_t ee_cfged; /* the bit mask of configured ECBs */
450 uint8_t ee_cfg_sts; /* configuration status */
451 tNFA_EE_WAIT ee_wait_evt; /* Pending event(s) to be reported */
452 tNFA_EE_FLAGS ee_flags; /* flags */
Love Khannac6bd78b2017-04-14 16:19:12 +0530453 uint8_t route_block_control; /* controls route block feature */
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800454} tNFA_EE_CB;
455
Love Khannab4ac88d2017-04-06 16:25:36 +0530456/* Order of Routing entries in Routing Table */
457#define NCI_ROUTE_ORDER_AID 0x01 /* AID routing order */
Love Khanna1d062772018-04-10 21:10:02 +0530458#define NCI_ROUTE_ORDER_SYS_CODE 0x03 /* System Code routing order*/
Love Khannab4ac88d2017-04-06 16:25:36 +0530459#define NCI_ROUTE_ORDER_PROTOCOL 0x04 /* Protocol routing order*/
460#define NCI_ROUTE_ORDER_TECHNOLOGY 0x05 /* Technology routing order*/
461
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800462/*****************************************************************************
463** External variables
464*****************************************************************************/
465
466/* NFA EE control block */
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800467extern tNFA_EE_CB nfa_ee_cb;
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800468
469/*****************************************************************************
470** External functions
471*****************************************************************************/
472/* function prototypes - exported from nfa_ee_main.c */
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800473void nfa_ee_sys_enable(void);
474void nfa_ee_sys_disable(void);
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800475
476/* event handler function type */
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800477bool nfa_ee_evt_hdlr(NFC_HDR* p_msg);
478void nfa_ee_proc_nfcc_power_mode(uint8_t nfcc_power_mode);
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800479#if (NFC_NFCEE_INCLUDED == TRUE)
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800480void nfa_ee_get_tech_route(uint8_t power_state, uint8_t* p_handles);
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800481#endif
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800482void nfa_ee_proc_evt(tNFC_RESPONSE_EVT event, void* p_data);
483tNFA_EE_ECB* nfa_ee_find_ecb(uint8_t nfcee_id);
484tNFA_EE_ECB* nfa_ee_find_ecb_by_conn_id(uint8_t conn_id);
485uint8_t nfa_ee_ecb_to_mask(tNFA_EE_ECB* p_cb);
486void nfa_ee_restore_one_ecb(tNFA_EE_ECB* p_cb);
487bool nfa_ee_is_active(tNFA_HANDLE nfcee_id);
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800488
489/* Action function prototypes - nfa_ee_act.c */
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800490void nfa_ee_api_discover(tNFA_EE_MSG* p_data);
491void nfa_ee_api_register(tNFA_EE_MSG* p_data);
492void nfa_ee_api_deregister(tNFA_EE_MSG* p_data);
493void nfa_ee_api_mode_set(tNFA_EE_MSG* p_data);
494void nfa_ee_api_set_tech_cfg(tNFA_EE_MSG* p_data);
495void nfa_ee_api_set_proto_cfg(tNFA_EE_MSG* p_data);
496void nfa_ee_api_add_aid(tNFA_EE_MSG* p_data);
497void nfa_ee_api_remove_aid(tNFA_EE_MSG* p_data);
Love Khanna1d062772018-04-10 21:10:02 +0530498void nfa_ee_api_add_sys_code(tNFA_EE_MSG* p_data);
499void nfa_ee_api_remove_sys_code(tNFA_EE_MSG* p_data);
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800500void nfa_ee_api_lmrt_size(tNFA_EE_MSG* p_data);
501void nfa_ee_api_update_now(tNFA_EE_MSG* p_data);
502void nfa_ee_api_connect(tNFA_EE_MSG* p_data);
503void nfa_ee_api_send_data(tNFA_EE_MSG* p_data);
504void nfa_ee_api_disconnect(tNFA_EE_MSG* p_data);
505void nfa_ee_report_disc_done(bool notify_sys);
506void nfa_ee_nci_disc_rsp(tNFA_EE_MSG* p_data);
507void nfa_ee_nci_disc_ntf(tNFA_EE_MSG* p_data);
508void nfa_ee_nci_mode_set_rsp(tNFA_EE_MSG* p_data);
509void nfa_ee_nci_wait_rsp(tNFA_EE_MSG* p_data);
510void nfa_ee_nci_conn(tNFA_EE_MSG* p_data);
511void nfa_ee_nci_action_ntf(tNFA_EE_MSG* p_data);
512void nfa_ee_nci_disc_req_ntf(tNFA_EE_MSG* p_data);
513void nfa_ee_rout_timeout(tNFA_EE_MSG* p_data);
514void nfa_ee_discv_timeout(tNFA_EE_MSG* p_data);
515void nfa_ee_lmrt_to_nfcc(tNFA_EE_MSG* p_data);
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800516void nfa_ee_update_rout(void);
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800517void nfa_ee_report_event(tNFA_EE_CBACK* p_cback, tNFA_EE_EVT event,
518 tNFA_EE_CBACK_DATA* p_data);
519tNFA_EE_ECB* nfa_ee_find_aid_offset(uint8_t aid_len, uint8_t* p_aid,
520 int* p_offset, int* p_entry);
Love Khanna1d062772018-04-10 21:10:02 +0530521tNFA_EE_ECB* nfa_ee_find_sys_code_offset(uint16_t sys_code, int* p_offset,
522 int* p_entry);
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800523int nfa_ee_find_total_aid_len(tNFA_EE_ECB* p_cb, int start_entry);
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800524void nfa_ee_start_timer(void);
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800525void nfa_ee_reg_cback_enable_done(tNFA_EE_ENABLE_DONE_CBACK* p_cback);
526void nfa_ee_report_update_evt(void);
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800527
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800528extern void nfa_ee_proc_hci_info_cback(void);
529void nfa_ee_check_disable(void);
530bool nfa_ee_restore_ntf_done(void);
Evan Chu45e68232013-05-01 11:29:02 -0700531void nfa_ee_check_restore_complete(void);
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800532
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800533#endif /* NFA_P2P_INT_H */