blob: 7098ae347f3ca811bcd02b0f5fb9947999b63106 [file] [log] [blame]
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -08001/******************************************************************************
2 *
3 * Copyright (C) 2010-2012 Broadcom Corporation
4 *
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 * NFA interface to NFCEE
22 *
23 ******************************************************************************/
24#ifndef NFA_EE_API_H
25#define NFA_EE_API_H
26
27#include "nfc_target.h"
28#include "nfa_api.h"
29#include "nfc_api.h"
30
31/*****************************************************************************
32** Constants and data types
33*****************************************************************************/
34#define NFA_MAX_AID_LEN NFC_MAX_AID_LEN /* 16 per ISO 7816 specification */
35#define NFA_EE_HANDLE_DH (NFA_HANDLE_GROUP_EE|NFC_DH_ID)
36
37/* NFA EE callback events */
38enum
39{
40 NFA_EE_DISCOVER_EVT, /* The status for NFA_EeDiscover () */
41 NFA_EE_REGISTER_EVT, /* The status for NFA_EeRegister () */
42 NFA_EE_DEREGISTER_EVT, /* The status for NFA_EeDeregister () */
43 NFA_EE_MODE_SET_EVT, /* The status for activating or deactivating an NFCEE */
44 NFA_EE_ADD_AID_EVT, /* The status for adding an AID to a routing table entry */
45 NFA_EE_REMOVE_AID_EVT, /* The status for removing an AID from a routing table */
46 NFA_EE_SET_TECH_CFG_EVT, /* The status for setting the routing based on RF tech. */
47 NFA_EE_SET_PROTO_CFG_EVT, /* The status for setting the routing based on protocols */
48 NFA_EE_CONNECT_EVT, /* Result of NFA_EeConnect */
49 NFA_EE_DATA_EVT, /* Received data from NFCEE. */
50 NFA_EE_DISCONNECT_EVT, /* NFCEE connection closed. */
51 NFA_EE_NEW_EE_EVT, /* A new NFCEE is discovered */
52 NFA_EE_ACTION_EVT, /* An action happened in NFCEE */
53 NFA_EE_DISCOVER_REQ_EVT, /* NFCEE Discover Request Notification */
54 NFA_EE_ROUT_ERR_EVT, /* Error - exceed NFCC CE Routing size */
55 NFA_EE_NO_MEM_ERR_EVT, /* Error - out of GKI buffers */
56 NFA_EE_NO_CB_ERR_EVT /* Error - Can not find control block or wrong state */
57};
58typedef UINT8 tNFA_EE_EVT;
59
60/* tNFA_NFCEE_INTERFACE values */
61#define NFA_EE_INTERFACE_APDU NFC_NFCEE_INTERFACE_APDU /* APDU Interface */
62#define NFA_EE_INTERFACE_HCI_ACCESS NFC_NFCEE_INTERFACE_HCI_ACCESS /* HCI Access Interface*/
63#define NFA_EE_INTERFACE_T3T NFC_NFCEE_INTERFACE_T3T /* T3T Command Interface*/
64#define NFA_EE_INTERFACE_TRANSPARENT NFC_NFCEE_INTERFACE_TRANSPARENT /* Transparent Interface*/
65#define NFA_EE_INTERFACE_PROPRIETARY NFC_NFCEE_INTERFACE_PROPRIETARY /* Proprietary */
66typedef UINT8 tNFA_EE_INTERFACE;
67
68#define NFA_EE_TAG_HW_ID NFC_NFCEE_TAG_HW_ID /* HW/Registration ID */
69#define NFA_EE_TAG_ATR_BYTES NFC_NFCEE_TAG_ATR_BYTES /* ATR Bytes */
70#define NFA_EE_TAG_T3T_INFO NFC_NFCEE_TAG_T3T_INFO /* T3T Supplement. Info */
71#define NFA_EE_TAG_HCI_HOST_ID NFC_NFCEE_TAG_HCI_HOST_ID /* Broadcom Proprietary */
72typedef UINT8 tNFA_EE_TAG;
73
74/* for NFA_EeModeSet () */
75#define NFA_EE_MD_ACTIVATE NFC_MODE_ACTIVATE
76#define NFA_EE_MD_DEACTIVATE NFC_MODE_DEACTIVATE
77typedef UINT8 tNFA_EE_MD;
78
79#define NFA_EE_PWR_STATE_ON 0x01 /* The device is on */
80#define NFA_EE_PWR_STATE_SWITCH_OFF 0x02 /* The device is switched off */
81#define NFA_EE_PWR_STATE_BATT_OFF 0x04 /* The device's battery is removed */
82#define NFA_EE_PWR_STATE_NONE 0 /* used to remove a particular technology or protocol based routing cfg of a handle from the routing table. */
83typedef UINT8 tNFA_EE_PWR_STATE;
84
85
86#define NFA_EE_STATUS_INACTIVE NFC_NFCEE_STATUS_INACTIVE /* NFCEE connected and inactive */
87#define NFA_EE_STATUS_ACTIVE NFC_NFCEE_STATUS_ACTIVE /* NFCEE connected and active */
88#define NFA_EE_STATUS_REMOVED NFC_NFCEE_STATUS_REMOVED /* NFCEE removed */
89#define NFA_EE_STATUS_PENDING 0x10 /* waiting for response from NFCC */
90#define NFA_EE_STATUS_ACTIVATING (NFA_EE_STATUS_PENDING+NFC_NFCEE_STATUS_ACTIVE)
91#define NFA_EE_STATUS_DEACTIVATING (NFA_EE_STATUS_PENDING+NFC_NFCEE_STATUS_INACTIVE)
92typedef UINT8 tNFA_EE_STATUS;
93
94
95
96/* additional NFCEE Info */
97typedef struct
98{
99 tNFA_EE_TAG tag;
100 UINT8 len;
101 UINT8 info[NFC_MAX_EE_INFO];
102} tNFA_EE_TLV;
103
104typedef struct
105{
106 tNFA_HANDLE ee_handle; /* handle for NFCEE oe DH */
107 tNFA_EE_STATUS ee_status; /* The NFCEE status */
108 UINT8 num_interface; /* number of NFCEE interface*/
109 tNFA_EE_INTERFACE ee_interface[NFC_MAX_EE_INTERFACE];/* NFCEE supported interface */
110 UINT8 num_tlvs; /* number of TLVs */
111 tNFA_EE_TLV ee_tlv[NFC_MAX_EE_TLVS];/* the TLV */
112} tNFA_EE_INFO;
113
114
115
116typedef struct
117{
118 tNFA_STATUS status; /* NFA_STATUS_OK is successful */
119 UINT8 num_ee; /* number of NFCEEs found */
120 tNFA_EE_INFO ee_info[NFA_EE_MAX_EE_SUPPORTED];/*NFCEE information */
121} tNFA_EE_DISCOVER;
122
123typedef struct
124{
125 tNFA_HANDLE ee_handle; /* Handle of NFCEE */
126 tNFA_STATUS status; /* NFA_STATUS_OK is successful */
127 tNFA_EE_INTERFACE ee_interface; /* NFCEE interface associated with this connection */
128} tNFA_EE_CONNECT;
129
130#define NFA_EE_TRGR_SELECT NFC_EE_TRIG_7816_SELECT /* ISO 7816-4 SELECT command */
131#define NFA_EE_TRGR_RF_PROTOCOL NFC_EE_TRIG_RF_PROTOCOL /* RF Protocol changed */
132#define NFA_EE_TRGR_RF_TECHNOLOGY NFC_EE_TRIG_RF_TECHNOLOGY/* RF Technology changed */
133#define NFA_EE_TRGR_APP_INIT NFC_EE_TRIG_APP_INIT /* Application initiation */
134typedef tNFC_EE_TRIGGER tNFA_EE_TRIGGER;
135
136/* Union of NFCEE action parameter depending on the associated trigger */
137typedef union
138{
139 tNFA_NFC_PROTOCOL protocol; /* NFA_EE_TRGR_RF_PROTOCOL: the protocol that triggers this event */
140 tNFC_RF_TECH technology; /* NFA_EE_TRGR_RF_TECHNOLOGY:the technology that triggers this event */
141 tNFC_AID aid; /* NFA_EE_TRGR_SELECT : the AID in the received SELECT AID command */
142 tNFC_APP_INIT app_init; /* NFA_EE_TRGR_APP_INIT: The information for the application initiated trigger */
143} tNFA_EE_ACTION_PARAM;
144
145typedef struct
146{
147 tNFA_HANDLE ee_handle; /* Handle of NFCEE */
148 tNFA_EE_TRIGGER trigger; /* the trigger of this event */
149 tNFA_EE_ACTION_PARAM param;
150} tNFA_EE_ACTION;
151
152typedef struct
153{
154 tNFA_HANDLE ee_handle; /* Handle of NFCEE */
155 tNFA_STATUS status; /* NFA_STATUS_OK is successful */
156 tNFA_EE_STATUS ee_status; /* The NFCEE status */
157} tNFA_EE_MODE_SET;
158
159typedef struct
160{
161 tNFA_HANDLE ee_handle; /* Handle of MFCEE */
162 tNFA_NFC_PROTOCOL la_protocol; /* Listen A protocol */
163 tNFA_NFC_PROTOCOL lb_protocol; /* Listen B protocol */
164 tNFA_NFC_PROTOCOL lf_protocol; /* Listen F protocol */
165 tNFA_NFC_PROTOCOL lbp_protocol; /* Listen B' protocol */
166} tNFA_EE_DISCOVER_INFO;
167
168/* Data for NFA_EE_DISCOVER_REQ_EVT */
169typedef struct
170{
171 UINT8 status; /* NFA_STATUS_OK if successful */
172 UINT8 num_ee; /* number of MFCEE information */
173 tNFA_EE_DISCOVER_INFO ee_disc_info[NFA_DM_MAX_UICC]; /* MFCEE DISCOVER Request info */
174} tNFA_EE_DISCOVER_REQ;
175
176
177/* Union of all EE callback structures */
178typedef union
179{
180 tNFA_STATUS status; /* NFA_STATUS_OK is successful; otherwise NFA_STATUS_FAILED */
181 tNFA_DATA data;
182 tNFA_HANDLE handle;
183 tNFA_EE_DISCOVER ee_discover;
184 tNFA_STATUS ee_register;
185 tNFA_STATUS deregister;
186 tNFA_STATUS add_aid;
187 tNFA_STATUS remove_aid;
188 tNFA_STATUS set_tech;
189 tNFA_STATUS set_proto;
190 tNFA_EE_CONNECT connect;
191 tNFA_EE_ACTION action;
192 tNFA_EE_MODE_SET mode_set;
193 tNFA_EE_INFO new_ee;
194 tNFA_EE_DISCOVER_REQ discover_req;
195} tNFA_EE_CBACK_DATA;
196
197
198/* EE callback */
199typedef void (tNFA_EE_CBACK) (tNFA_EE_EVT event, tNFA_EE_CBACK_DATA *p_data);
200
201/*****************************************************************************
202** External Function Declarations
203*****************************************************************************/
204#ifdef __cplusplus
205extern "C"
206{
207#endif
208
209/*******************************************************************************
210**
211** Function NFA_EeDiscover
212**
213** Description This function retrieves the NFCEE information from NFCC.
214** The NFCEE information is reported in NFA_EE_DISCOVER_EVT.
215**
216** This function may be called when a system supports removable
217** NFCEEs,
218**
219** Returns NFA_STATUS_OK if information is retrieved successfully
220** NFA_STATUS_FAILED If wrong state (retry later)
221** NFA_STATUS_INVALID_PARAM If bad parameter
222**
223*******************************************************************************/
224NFC_API extern tNFA_STATUS NFA_EeDiscover (tNFA_EE_CBACK *p_cback);
225
226/*******************************************************************************
227**
228** Function NFA_EeGetInfo
229**
230** Description This function retrieves the NFCEE information from NFA.
231** The actual number of NFCEE is returned in p_num_nfcee
232** and NFCEE information is returned in p_info
233**
234** Returns NFA_STATUS_OK if information is retrieved successfully
235** NFA_STATUS_FAILED If wrong state (retry later)
236** NFA_STATUS_INVALID_PARAM If bad parameter
237**
238*******************************************************************************/
239NFC_API extern tNFA_STATUS NFA_EeGetInfo (UINT8 *p_num_nfcee,
240 tNFA_EE_INFO *p_info);
241
242/*******************************************************************************
243**
244** Function NFA_EeRegister
245**
246** Description This function registers a callback function to receive the
247** events from NFA-EE module.
248**
249** Returns NFA_STATUS_OK if successfully initiated
250** NFA_STATUS_FAILED otherwise
251** NFA_STATUS_INVALID_PARAM If bad parameter
252**
253*******************************************************************************/
254NFC_API extern tNFA_STATUS NFA_EeRegister (tNFA_EE_CBACK *p_cback);
255
256/*******************************************************************************
257**
258** Function NFA_EeDeregister
259**
260** Description This function de-registers the callback function
261**
262** Returns NFA_STATUS_OK if successfully initiated
263** NFA_STATUS_FAILED otherwise
264** NFA_STATUS_INVALID_PARAM If bad parameter
265**
266*******************************************************************************/
267NFC_API extern tNFA_STATUS NFA_EeDeregister (tNFA_EE_CBACK *p_cback);
268
269/*******************************************************************************
270**
271** Function NFA_EeModeSet
272**
273** Description This function is called to activate (mode = NFA_EE_MD_ACTIVATE)
274** or deactivate (mode = NFA_EE_MD_DEACTIVATE) the NFCEE
275** identified by the given ee_handle. The result of this
276** operation is reported with the NFA_EE_MODE_SET_EVT.
277**
278** Returns NFA_STATUS_OK if successfully initiated
279** NFA_STATUS_FAILED otherwise
280** NFA_STATUS_INVALID_PARAM If bad parameter
281**
282*******************************************************************************/
283NFC_API extern tNFA_STATUS NFA_EeModeSet (tNFA_HANDLE ee_handle,
284 tNFA_EE_MD mode);
285
286
287/*******************************************************************************
288**
289** Function NFA_EeSetDefaultTechRouting
290**
291** Description This function is called to add, change or remove the
292** default routing based on RF technology in the listen mode
293** routing table for the given ee_handle. The status of this
294** operation is reported as the NFA_EE_SET_TECH_CFG_EVT.
295**
296** Note: If RF discovery is started, NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT
297** should happen before calling this function
298**
299** Note: NFA_EeUpdateNow() should be called after last NFA-EE function
300** to change the listen mode routing is called.
301**
302** Returns NFA_STATUS_OK if successfully initiated
303** NFA_STATUS_FAILED otherwise
304** NFA_STATUS_INVALID_PARAM If bad parameter
305**
306*******************************************************************************/
307NFC_API extern tNFA_STATUS NFA_EeSetDefaultTechRouting (tNFA_HANDLE ee_handle,
308 tNFA_TECHNOLOGY_MASK technologies_switch_on,
309 tNFA_TECHNOLOGY_MASK technologies_switch_off,
310 tNFA_TECHNOLOGY_MASK technologies_battery_off);
311
312/*******************************************************************************
313**
314** Function NFA_EeSetDefaultProtoRouting
315**
316** Description This function is called to add, change or remove the
317** default routing based on Protocol in the listen mode routing
318** table for the given ee_handle. The status of this
319** operation is reported as the NFA_EE_SET_PROTO_CFG_EVT.
320**
321** Note: If RF discovery is started, NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT
322** should happen before calling this function
323**
324** Note: NFA_EeUpdateNow() should be called after last NFA-EE function
325** to change the listen mode routing is called.
326**
327** Returns NFA_STATUS_OK if successfully initiated
328** NFA_STATUS_FAILED otherwise
329** NFA_STATUS_INVALID_PARAM If bad parameter
330**
331*******************************************************************************/
332NFC_API extern tNFA_STATUS NFA_EeSetDefaultProtoRouting (tNFA_HANDLE ee_handle,
333 tNFA_PROTOCOL_MASK protocols_switch_on,
334 tNFA_PROTOCOL_MASK protocols_switch_off,
335 tNFA_PROTOCOL_MASK protocols_battery_off);
336
337/*******************************************************************************
338**
339** Function NFA_EeAddAidRouting
340**
341** Description This function is called to add an AID entry in the
342** listen mode routing table in NFCC. The status of this
343** operation is reported as the NFA_EE_ADD_AID_EVT.
344**
345** Note: If RF discovery is started, NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT
346** should happen before calling this function
347**
348** Note: NFA_EeUpdateNow() should be called after last NFA-EE function
349** to change the listen mode routing is called.
350**
351** Returns NFA_STATUS_OK if successfully initiated
352** NFA_STATUS_FAILED otherwise
353** NFA_STATUS_INVALID_PARAM If bad parameter
354**
355*******************************************************************************/
356NFC_API extern tNFA_STATUS NFA_EeAddAidRouting (tNFA_HANDLE ee_handle,
357 UINT8 aid_len,
358 UINT8 *p_aid,
359 tNFA_EE_PWR_STATE power_state);
360
361/*******************************************************************************
362**
363** Function NFA_EeRemoveAidRouting
364**
365** Description This function is called to remove the given AID entry from the
366** listen mode routing table. If the entry configures VS,
367** it is also removed. The status of this operation is reported
368** as the NFA_EE_REMOVE_AID_EVT.
369**
370** Note: If RF discovery is started, NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT
371** should happen before calling this function
372**
373** Note: NFA_EeUpdateNow() should be called after last NFA-EE function
374** to change the listen mode routing is called.
375**
376** Returns NFA_STATUS_OK if successfully initiated
377** NFA_STATUS_FAILED otherwise
378** NFA_STATUS_INVALID_PARAM If bad parameter
379**
380*******************************************************************************/
381NFC_API extern tNFA_STATUS NFA_EeRemoveAidRouting (UINT8 aid_len,
382 UINT8 *p_aid);
383
384/*******************************************************************************
385**
386** Function NFA_EeUpdateNow
387**
388** Description This function is called to send the current listen mode
389** routing table and VS configuration to the NFCC
390**
391** Returns NFA_STATUS_OK if successfully initiated
392** NFA_STATUS_FAILED otherwise
393**
394*******************************************************************************/
395NFC_API extern tNFA_STATUS NFA_EeUpdateNow (void);
396
397/*******************************************************************************
398**
399** Function NFA_EeConnect
400**
401** Description Open connection to an NFCEE attached to the NFCC
402**
403** The status of this operation is
404** reported with the NFA_EE_CONNECT_EVT.
405**
406** Returns NFA_STATUS_OK if successfully initiated
407** NFA_STATUS_FAILED otherwise
408** NFA_STATUS_INVALID_PARAM If bad parameter
409**
410*******************************************************************************/
411NFC_API extern tNFA_STATUS NFA_EeConnect (tNFA_HANDLE ee_handle,
412 UINT8 ee_interface,
413 tNFA_EE_CBACK *p_cback);
414
415/*******************************************************************************
416**
417** Function NFA_EeSendData
418**
419** Description Send data to the given NFCEE.
420** This function shall be called after NFA_EE_CONNECT_EVT is reported
421** and before NFA_EeDisconnect is called on the given ee_handle.
422**
423** Returns NFA_STATUS_OK if successfully initiated
424** NFA_STATUS_FAILED otherwise
425** NFA_STATUS_INVALID_PARAM If bad parameter
426**
427*******************************************************************************/
428NFC_API extern tNFA_STATUS NFA_EeSendData (tNFA_HANDLE ee_handle,
429 UINT16 data_len,
430 UINT8 *p_data);
431
432/*******************************************************************************
433**
434** Function NFA_EeDisconnect
435**
436** Description Disconnect (if a connection is currently open) from an
437** NFCEE interface. The result of this operation is reported
438** with the NFA_EE_DISCONNECT_EVT.
439**
440** Returns NFA_STATUS_OK if successfully initiated
441** NFA_STATUS_FAILED otherwise
442** NFA_STATUS_INVALID_PARAM If bad parameter
443**
444*******************************************************************************/
445NFC_API extern tNFA_STATUS NFA_EeDisconnect (tNFA_HANDLE ee_handle);
446
447
448#ifdef __cplusplus
449}
450#endif
451
452#endif /* NFA_EE_API_H */
453