1 /******************************************************************************
2  *
3  *  Copyright (C) 2010-2014 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  *  This is the public interface file for NFA, Broadcom's NFC application
22  *  layer for mobile phones.
23  *
24  ******************************************************************************/
25 #ifndef NFA_API_H
26 #define NFA_API_H
27 
28 #include "gki.h"
29 #include "nci_defs.h"
30 #include "nfc_api.h"
31 #include "nfc_hal_api.h"
32 #include "nfc_target.h"
33 #include "rw_api.h"
34 #include "tags_defs.h"
35 
36 /*****************************************************************************
37 **  Constants and data types
38 *****************************************************************************/
39 
40 /* Max length of Appliction ID in 7816-4 */
41 #define NFA_MAX_AID_LEN NFC_MAX_AID_LEN
42 #define NFA_MIN_AID_LEN 5 /* per NCI specification */
43 
44 /* Command succeeded    */
45 #define NFA_STATUS_OK NCI_STATUS_OK
46 /* Command is rejected. */
47 #define NFA_STATUS_REJECTED NCI_STATUS_REJECTED
48 /* buffer full          */
49 #define NFA_STATUS_BUFFER_FULL NCI_STATUS_BUFFER_FULL
50 /* failed               */
51 #define NFA_STATUS_FAILED NCI_STATUS_FAILED
52 /* Optional feature of NCI Spec not supported */
53 #define NFA_STATUS_NOT_SUPPORTED NCI_STATUS_NOT_SUPPORTED
54 /* Semantic error       */
55 #define NFA_STATUS_SEMANTIC_ERROR NCI_STATUS_SEMANTIC_ERROR
56 /* Unknown NCI Group ID */
57 #define NFA_STATUS_UNKNOWN_GID NCI_STATUS_UNKNOWN_GID
58 /* Invalid Parameter    */
59 #define NFA_STATUS_INVALID_PARAM NCI_STATUS_INVALID_PARAM
60 /* Already started      */
61 #define NFA_STATUS_ALREADY_STARTED NCI_STATUS_ALREADY_STARTED
62 /* RF Timeout           */
63 #define NFA_STATUS_TIMEOUT NCI_STATUS_TIMEOUT
64 
65 /* Out of GKI buffers */
66 #define NFA_STATUS_NO_BUFFERS NFC_STATUS_NO_BUFFERS
67 /* Protocol mismatch between API and activated one */
68 #define NFA_STATUS_WRONG_PROTOCOL NFC_STATUS_WRONG_PROTOCOL
69 /* Another Tag command is already in progress */
70 #define NFA_STATUS_BUSY NFC_STATUS_BUSY
71 
72 /* data len exceeds MIU                             */
73 #define NFA_STATUS_BAD_LENGTH NFC_STATUS_BAD_LENGTH
74 /* invalid handle                                   */
75 #define NFA_STATUS_BAD_HANDLE NFC_STATUS_BAD_HANDLE
76 /* congested                                        */
77 #define NFA_STATUS_CONGESTED NFC_STATUS_CONGESTED
78 typedef uint8_t tNFA_STATUS;
79 
80 /* Handle for NFA registrations and connections */
81 typedef uint16_t tNFA_HANDLE;
82 #define NFA_HANDLE_INVALID (0xFFFF)
83 /* NFA Handle definitions */
84 
85 /* The upper byte of NFA_HANDLE signifies the handle group */
86 /* NDEF Type Handler handles    */
87 #define NFA_HANDLE_GROUP_NDEF_HANDLER 0x0200
88 /* DH Card Emulation handles    */
89 #define NFA_HANDLE_GROUP_CE 0x0300
90 /* Handles to identify NFCEE    */
91 #define NFA_HANDLE_GROUP_EE 0x0400
92 /* P2P handles                  */
93 #define NFA_HANDLE_GROUP_P2P 0x0500
94 /* HCI handles                  */
95 #define NFA_HANDLE_GROUP_HCI 0x0800
96 /* Local NDEF message handle    */
97 #define NFA_HANDLE_GROUP_MASK 0xFF00
98 #define NFA_HANDLE_MASK 0x00FF
99 
100 /* NCI Parameter IDs */
101 typedef uint8_t tNFA_PMID;
102 
103 /* Definitions for tNFA_TECHNOLOGY_MASK */
104 #define NFA_TECHNOLOGY_MASK_A 0x01        /* NFC Technology A             */
105 #define NFA_TECHNOLOGY_MASK_B 0x02        /* NFC Technology B             */
106 #define NFA_TECHNOLOGY_MASK_F 0x04        /* NFC Technology F             */
107 /* TECHNOLOGY_MASK_V in NCI2.0 and TECHNOLOGY_MASK_15693 proprietary in NCI1.0*/
108 #define NFA_TECHNOLOGY_MASK_V 0x08
109 #define NFA_TECHNOLOGY_MASK_B_PRIME 0x10  /* Proprietary Technology       */
110 #define NFA_TECHNOLOGY_MASK_KOVIO 0x20    /* Proprietary Technology       */
111 /* NFC technology NFC-DEP protocol active mode */
112 #define NFA_TECHNOLOGY_MASK_ACTIVE 0x40
113 /* NFC Technology A active mode */
114 #define NFA_TECHNOLOGY_MASK_A_ACTIVE 0x40
115 /* NFC Technology F active mode */
116 #define NFA_TECHNOLOGY_MASK_F_ACTIVE 0x80
117 /* All supported technologies   */
118 typedef uint8_t tNFA_TECHNOLOGY_MASK;
119 
120 /* Definitions for NFC protocol for RW, CE and P2P APIs */
121 /* Type1Tag - NFC-A */
122 #define NFA_PROTOCOL_T1T NFC_PROTOCOL_T1T
123 /* MIFARE/Type2Tag - NFC-A */
124 #define NFA_PROTOCOL_T2T NFC_PROTOCOL_T2T
125 /* Felica/Type3Tag - NFC-F */
126 #define NFA_PROTOCOL_T3T NFC_PROTOCOL_T3T
127 /* Type 4A,4B - NFC-A or NFC-B */
128 #define NFA_PROTOCOL_ISO_DEP NFC_PROTOCOL_ISO_DEP
129 /* NFCDEP/LLCP - NFC-A or NFC-F */
130 #define NFA_PROTOCOL_NFC_DEP NFC_PROTOCOL_NFC_DEP
131 /* NFC_PROTOCOL_T5T in NCI2.0 and NFC_PROTOCOL_ISO15693 proprietary in NCI1.0*/
132 #define NFA_PROTOCOL_T5T NFC_PROTOCOL_T5T
133 #define NFA_PROTOCOL_INVALID 0xFF
134 typedef uint8_t tNFA_NFC_PROTOCOL;
135 
136 /* Definitions for tNFA_PROTOCOL_MASK */
137 #define NFA_PROTOCOL_MASK_T1T 0x01     /* Type 1 tag          */
138 #define NFA_PROTOCOL_MASK_T2T 0x02     /* MIFARE / Type 2 tag */
139 #define NFA_PROTOCOL_MASK_T3T 0x04     /* FeliCa / Type 3 tag */
140 #define NFA_PROTOCOL_MASK_ISO_DEP 0x08 /* ISODEP/4A,4B        */
141 #define NFA_PROTOCOL_MASK_NFC_DEP 0x10 /* NFCDEP/LLCP         */
142 typedef uint8_t tNFA_PROTOCOL_MASK;
143 
144 /* NFA_DM callback events */
145 /* Result of NFA_Enable             */
146 #define NFA_DM_ENABLE_EVT 0
147 /* Result of NFA_Disable            */
148 #define NFA_DM_DISABLE_EVT 1
149 /* Result of NFA_SetConfig          */
150 #define NFA_DM_SET_CONFIG_EVT 2
151 /* Result of NFA_GetConfig          */
152 #define NFA_DM_GET_CONFIG_EVT 3
153 /* Result of NFA_PowerOffSleepMode  */
154 #define NFA_DM_PWR_MODE_CHANGE_EVT 4
155 #define NFA_DM_RF_FIELD_EVT 5 /* Status of RF Field               */
156 /* NFCC is not responding           */
157 #define NFA_DM_NFCC_TIMEOUT_EVT 6
158 /* NCI Tranport error               */
159 #define NFA_DM_NFCC_TRANSPORT_ERR_EVT 7
160 /* Result of NFA_SetPowerSubStateForScreenState */
161 #define NFA_DM_SET_POWER_SUB_STATE_EVT 11
162 /* T1T HR length            */
163 #define NFA_T1T_HR_LEN T1T_HR_LEN
164 /* Max UID length of T1/T2  */
165 #define NFA_MAX_UID_LEN TAG_MAX_UID_LEN
166 /* UID len for T1T cmds     */
167 #define NFA_T1T_CMD_UID_LEN T1T_CMD_UID_LEN
168 /* T2T UID length           */
169 
170 /* Tag formated for NDEF */
171 #define NFA_RW_NDEF_FL_FORMATED RW_NDEF_FL_FORMATED
172 /* NDEF supported by the tag */
173 #define NFA_RW_NDEF_FL_SUPPORTED RW_NDEF_FL_SUPPORTED
174 /* Unable to find if tag is ndef capable/formated/read only */
175 #define NFA_RW_NDEF_FL_UNKNOWN RW_NDEF_FL_UNKNOWN
176 /* Tag supports format operation */
177 #define NFA_RW_NDEF_FL_FORMATABLE RW_NDEF_FL_FORMATABLE
178 
179 typedef uint8_t tNFA_RW_NDEF_FLAG;
180 
181 /* Data for NFA_DM_SET_CONFIG_EVT */
182 typedef struct {
183   tNFA_STATUS status;                   /* NFA_STATUS_OK if successful  */
184   uint8_t num_param_id;                 /* Number of rejected Param ID  */
185   tNFA_PMID param_ids[NFC_MAX_NUM_IDS]; /* Rejected Param ID            */
186 } tNFA_SET_CONFIG;
187 
188 /* Data for NFA_DM_GET_CONFIG_EVT */
189 typedef struct {
190   tNFA_STATUS status;    /* NFA_STATUS_OK if successful              */
191   uint16_t tlv_size;     /* The length of TLV                        */
192   uint8_t* param_tlvs;   /* TLV (Parameter ID-Len-Value byte stream) */
193 } tNFA_GET_CONFIG;
194 
195 /* Structure to store screen state */
196 typedef enum screen_state {
197   NFA_SCREEN_STATE_UNKNOWN = 0x00,
198   NFA_SCREEN_STATE_OFF_UNLOCKED = 0x01,
199   NFA_SCREEN_STATE_OFF_LOCKED = 0x02,
200   NFA_SCREEN_STATE_ON_LOCKED = 0x04,
201   NFA_SCREEN_STATE_ON_UNLOCKED = 0x08
202 } eScreenState_t;
203 
204 typedef enum power_substate {
205   SCREEN_STATE_ON_UNLOCKED = 0x00,
206   SCREEN_STATE_OFF_UNLOCKED,
207   SCREEN_STATE_ON_LOCKED,
208   SCREEN_STATE_OFF_LOCKED,
209   SCREEN_STATE_INVALID = 0xFF
210 } epower_substate_t;
211 
212 #define NFA_SCREEN_STATE_MASK 0x0F
213 
214 /* CONN_DISCOVER_PARAM */
215 #define NFA_DM_PWR_MODE_FULL 0x04
216 #define NFA_DM_PWR_MODE_OFF_SLEEP 0x00
217 
218 typedef uint8_t tNFA_DM_PWR_MODE;
219 
220 /* Data for NFA_DM_PWR_MODE_CHANGE_EVT */
221 typedef struct {
222   tNFA_STATUS status; /* NFA_STATUS_OK if successful */
223   /* NFA_DM_PWR_MODE_FULL or NFA_DM_PWR_MODE_OFF_SLEEP */
224   tNFA_DM_PWR_MODE power_mode;
225 } tNFA_DM_PWR_MODE_CHANGE;
226 
227 /* Data for NFA_DM_RF_FIELD_EVT */
228 #define NFA_DM_RF_FIELD_OFF 0x00
229 #define NFA_DM_RF_FIELD_ON 0x01
230 
231 typedef struct {
232   tNFA_STATUS status; /* NFA_STATUS_OK if successful  */
233   /* NFA_DM_RF_FIELD_ON if operating field generated by remote */
234   uint8_t rf_field_status;
235 } tNFA_DM_RF_FIELD;
236 
237 typedef struct {
238   tNFA_STATUS status;  /* NFA_STATUS_OK if successful  */
239   uint8_t power_state; /* current screen/power state */
240 } tNFA_DM_POWER_STATE;
241 
242 /* Union of all DM callback structures */
243 typedef union {
244   tNFA_STATUS status;                 /* NFA_DM_ENABLE_EVT        */
245   tNFA_SET_CONFIG set_config;         /* NFA_DM_SET_CONFIG_EVT    */
246   tNFA_GET_CONFIG get_config;         /* NFA_DM_GET_CONFIG_EVT    */
247   tNFA_DM_PWR_MODE_CHANGE power_mode; /* NFA_DM_PWR_MODE_CHANGE_EVT   */
248   tNFA_DM_RF_FIELD rf_field;          /* NFA_DM_RF_FIELD_EVT      */
249   void* p_vs_evt_data;                /* Vendor-specific evt data */
250   tNFA_DM_POWER_STATE power_sub_state; /* power sub state */
251 } tNFA_DM_CBACK_DATA;
252 
253 /* NFA_DM callback */
254 typedef void(tNFA_DM_CBACK)(uint8_t event, tNFA_DM_CBACK_DATA* p_data);
255 
256 /* NFA Enable DTA Type Mode */
257 typedef enum {
258   NFA_DTA_DEFAULT_MODE = 0x00000001,
259   NFA_DTA_LLCP_MODE = 0x00000002,
260   NFA_DTA_HCEF_MODE = 0x00000004,
261   NFA_DTA_CR8 = 0x00000080,
262 } tNFA_eDtaModes;
263 
264 /* NFA Connection Callback Events */
265 #define NFA_POLL_ENABLED_EVT 0  /* Polling enabled event */
266 #define NFA_POLL_DISABLED_EVT 1 /* Polling disabled event */
267 /* NFC link/protocol discovery notificaiton */
268 #define NFA_DISC_RESULT_EVT 2
269 /* NFC link/protocol discovery select response */
270 #define NFA_SELECT_RESULT_EVT 3
271 #define NFA_DEACTIVATE_FAIL_EVT 4 /* NFA_Deactivate failure */
272 /* NFC link/protocol activated */
273 #define NFA_ACTIVATED_EVT 5
274 /* NFC link/protocol deactivated */
275 #define NFA_DEACTIVATED_EVT 6
276 #define NFA_TLV_DETECT_EVT 7 /* TLV Detection complete */
277 /* NDEF Detection complete */
278 #define NFA_NDEF_DETECT_EVT 8
279 #define NFA_DATA_EVT 9            /* Data message received */
280 #define NFA_SELECT_CPLT_EVT 10    /* Select completed */
281 #define NFA_READ_CPLT_EVT 11      /* Read completed */
282 #define NFA_WRITE_CPLT_EVT 12     /* Write completed */
283 #define NFA_LLCP_ACTIVATED_EVT 13 /* LLCP link is activated */
284 /* LLCP link is deactivated */
285 #define NFA_LLCP_DEACTIVATED_EVT 14
286 /* Response to NFA_RwPresenceCheck */
287 #define NFA_PRESENCE_CHECK_EVT 15
288 /* Tag Formating completed */
289 #define NFA_FORMAT_CPLT_EVT 16
290 /* ISO 15693 command completed */
291 #define NFA_I93_CMD_CPLT_EVT 17
292 #define NFA_SET_TAG_RO_EVT 18 /* Tag set as Read only */
293 /* Result for NFA_RequestExclusiveRfControl */
294 #define NFA_EXCLUSIVE_RF_CONTROL_STARTED_EVT 19
295 /* Result for NFA_ReleaseExclusiveRfControl */
296 #define NFA_EXCLUSIVE_RF_CONTROL_STOPPED_EVT 20
297 /* DH Card emulation: AID or System code reg'd  */
298 #define NFA_CE_REGISTERED_EVT 21
299 /* DH Card emulation: AID or System code dereg'd */
300 #define NFA_CE_DEREGISTERED_EVT 22
301 /* DH Card emulation: data received event */
302 #define NFA_CE_DATA_EVT 23
303 /* DH Card emulation: activation event */
304 #define NFA_CE_ACTIVATED_EVT 24
305 /* DH Card emulation: deactivation event */
306 #define NFA_CE_DEACTIVATED_EVT 25
307 /* DH Card emulation: local NDEF configured */
308 #define NFA_CE_LOCAL_TAG_CONFIGURED_EVT 26
309 /* DH Card emulation: NDEF write started */
310 #define NFA_CE_NDEF_WRITE_START_EVT 27
311 /* DH Card emulation: NDEF write completed */
312 #define NFA_CE_NDEF_WRITE_CPLT_EVT 28
313 #define NFA_CE_UICC_LISTEN_CONFIGURED_EVT 29 /* UICC Listen configured */
314 /* RF Discovery started event */
315 #define NFA_RF_DISCOVERY_STARTED_EVT 30
316 /* RF Discovery stopped event */
317 #define NFA_RF_DISCOVERY_STOPPED_EVT 31
318 /* status of updating RF communication paramters */
319 #define NFA_UPDATE_RF_PARAM_RESULT_EVT 32
320 /* RF Interface error event */
321 #define NFA_RW_INTF_ERROR_EVT 34
322 /* status of setting P2P listen technologies */
323 #define NFA_SET_P2P_LISTEN_TECH_EVT 33
324 /* First packet received over LLCP link */
325 #define NFA_LLCP_FIRST_PACKET_RECEIVED_EVT 35
326 /* Listening enabled event */
327 #define NFA_LISTEN_ENABLED_EVT 36
328 /* Listening disabled event */
329 #define NFA_LISTEN_DISABLED_EVT 37
330 /* P2P services paused event */
331 #define NFA_P2P_PAUSED_EVT 38
332 /* P2P services resumed event */
333 #define NFA_P2P_RESUMED_EVT 39
334 
335 /* NFC deactivation type */
336 #define NFA_DEACTIVATE_TYPE_IDLE NFC_DEACTIVATE_TYPE_IDLE
337 #define NFA_DEACTIVATE_TYPE_SLEEP NFC_DEACTIVATE_TYPE_SLEEP
338 #define NFA_DEACTIVATE_TYPE_DISCOVERY NFC_DEACTIVATE_TYPE_DISCOVERY
339 
340 typedef uint8_t tNFA_DEACTIVATE_TYPE;
341 
342 /* Data for NFA_DISC_RESULT_EVT */
343 typedef struct {
344   tNFA_STATUS status;             /* NFA_STATUS_OK if successful       */
345   tNFC_RESULT_DEVT discovery_ntf; /* RF discovery notification details */
346 } tNFA_DISC_RESULT;
347 
348 /* Data for NFA_ACTIVATED_EVT */
349 typedef struct {
350   uint8_t hr[NFA_T1T_HR_LEN];       /* HR of Type 1 tag         */
351   uint8_t uid[NFA_T1T_CMD_UID_LEN]; /* UID used in T1T Commands */
352 } tNFA_T1T_PARAMS;
353 
354 typedef struct {
355   uint8_t uid[NFA_MAX_UID_LEN]; /* UID of T2T tag           */
356 } tNFA_T2T_PARAMS;
357 
358 typedef struct {
359   uint8_t num_system_codes; /* Number of system codes supporte by tag   */
360   uint16_t* p_system_codes; /* Pointer to list of system codes          */
361 } tNFA_T3T_PARAMS;
362 
363 typedef struct {
364   uint8_t uid[I93_UID_BYTE_LEN]; /* UID[0]:MSB, ... UID[7]:LSB */
365   uint8_t info_flags;   /* information flags                            */
366   uint8_t dsfid;        /* DSFID if I93_INFO_FLAG_DSFID                 */
367   uint8_t afi;          /* AFI if I93_INFO_FLAG_AFI                     */
368   uint16_t num_block;   /* number of blocks if I93_INFO_FLAG_MEM_SIZE   */
369   uint8_t block_size;   /* block size in byte if I93_INFO_FLAG_MEM_SIZE */
370   uint8_t IC_reference; /* IC Reference if I93_INFO_FLAG_IC_REF         */
371 } tNFA_I93_PARAMS;
372 
373 typedef union {
374   tNFA_T1T_PARAMS t1t; /* HR and UID of T1T                */
375   tNFA_T2T_PARAMS t2t; /* UID of T2T                       */
376   tNFA_T3T_PARAMS t3t; /* System codes                     */
377   tNFA_I93_PARAMS i93; /* System Information of ISO 15693  */
378 } tNFA_TAG_PARAMS;
379 
380 typedef struct {
381   tNFC_ACTIVATE_DEVT activate_ntf; /* RF discovery activation details */
382   tNFA_TAG_PARAMS params;          /* additional informaiton of tag   */
383 } tNFA_ACTIVATED;
384 
385 /* Data for NFA_DEACTIVATED_EVT */
386 typedef struct {
387   /* NFA_DEACTIVATE_TYPE_IDLE or NFA_DEACTIVATE_TYPE_SLEEP */
388   tNFA_DEACTIVATE_TYPE type;
389 } tNFA_DEACTIVATED;
390 
391 /* Structure for NFA_NDEF_DETECT_EVT event data */
392 typedef struct {
393   tNFA_STATUS status;         /* Status of the ndef detecton */
394   tNFA_NFC_PROTOCOL protocol; /* protocol used to detect NDEF */
395   uint32_t max_size;          /* max number of bytes available for NDEF data */
396   uint32_t cur_size;          /* current size of stored NDEF data (in bytes) */
397   /* Flags to indicate NDEF capability, is formated, soft/hard lockable,
398    * formatable, otp and read only */
399   tNFA_RW_NDEF_FLAG flags;
400 } tNFA_NDEF_DETECT;
401 
402 /* Structure for NFA_TLV_DETECT_EVT event data */
403 typedef struct {
404   tNFA_STATUS status;         /* Status of the tlv detecton        */
405   tNFA_NFC_PROTOCOL protocol; /* protocol used to detect TLV       */
406   uint8_t num_tlvs;           /* number of tlvs present in the tag */
407   uint8_t num_bytes;          /* number of lock/reserved bytes     */
408 } tNFA_TLV_DETECT;
409 
410 /* Structure for NFA_DATA_EVT data */
411 typedef struct {
412   tNFA_STATUS status; /* Status of Data received          */
413   uint8_t* p_data;    /* Data buffer                      */
414   uint16_t len;       /* Length of data                   */
415 } tNFA_RX_DATA;
416 
417 /* Structure for NFA_CE_NDEF_WRITE_CPLT_EVT data */
418 typedef struct {
419   tNFA_STATUS status; /* Status of the ndef write op      */
420   uint32_t len;       /* Update length of NDEF data       */
421   uint8_t* p_data;    /* data buffer                      */
422 } tNFA_CE_NDEF_WRITE_CPLT;
423 
424 /* Data for NFA_LLCP_ACTIVATED_EVT */
425 typedef struct {
426   bool is_initiator;        /* TRUE if initiator                */
427   uint16_t remote_wks;      /* Well-Known service mask of peer  */
428   uint8_t remote_lsc;       /* Link Service Class of peer       */
429   uint16_t remote_link_miu; /* Link MIU of peer                 */
430   uint16_t local_link_miu;  /* Link MIU of local                */
431   uint8_t remote_version;   /* LLCP version of remote           */
432 } tNFA_LLCP_ACTIVATED;
433 
434 /* Data for NFA_LLCP_DEACTIVATED_EVT */
435 typedef struct {
436   uint8_t reason; /* reason of deactivation           */
437 } tNFA_LLCP_DEACTIVATED;
438 
439 /* Data for NFA_I93_CMD_CPLT_EVT */
440 typedef struct {
441   uint8_t dsfid;                 /* DSFID                       */
442   uint8_t uid[I93_UID_BYTE_LEN]; /* UID[0]:MSB, ... UID[7]:LSB  */
443 } tNFA_I93_INVENTORY;
444 
445 typedef struct /* RW_I93_SYS_INFO_EVT                          */
446 {
447   uint8_t info_flags; /* information flags                            */
448   uint8_t uid[I93_UID_BYTE_LEN]; /* UID */
449   uint8_t dsfid;        /* DSFID if I93_INFO_FLAG_DSFID                 */
450   uint8_t afi;          /* AFI if I93_INFO_FLAG_AFI                     */
451   uint16_t num_block;   /* number of blocks if I93_INFO_FLAG_MEM_SIZE   */
452   uint8_t block_size;   /* block size in byte if I93_INFO_FLAG_MEM_SIZE */
453   uint8_t IC_reference; /* IC Reference if I93_INFO_FLAG_IC_REF         */
454 } tNFA_I93_SYS_INFO;
455 
456 typedef struct {
457   tNFA_STATUS status;   /* Status of sending command       */
458   uint8_t sent_command; /* sent command to tag             */
459   union {
460     uint8_t error_code;           /* error code defined in ISO 15693 */
461     tNFA_I93_INVENTORY inventory; /* inventory response              */
462     tNFA_I93_SYS_INFO sys_info;   /* system information              */
463   } params;
464 } tNFA_I93_CMD_CPLT;
465 
466 /* Data for NFA_CE_REGISTERED_EVT */
467 typedef struct {
468   tNFA_STATUS status; /* NFA_STATUS_OK if successful                      */
469   tNFA_HANDLE handle; /* handle for NFA_CeRegisterFelicaSystemCodeOnDH () */
470                       /*            NFA_CeRegisterT4tAidOnDH ()           */
471 } tNFA_CE_REGISTERED;
472 
473 /* Data for NFA_CE_DEREGISTERED_EVT */
474 typedef struct {
475   tNFA_HANDLE handle; /* handle from NFA_CE_REGISTERED_EVT   */
476 } tNFA_CE_DEREGISTERED;
477 
478 /* Data for NFA_CE_ACTIVATED_EVT */
479 typedef struct {
480   tNFA_STATUS status; /* NFA_STATUS_OK if successful              */
481   tNFA_HANDLE handle; /* handle from NFA_CE_REGISTERED_EVT        */
482   tNFC_ACTIVATE_DEVT activate_ntf; /* RF discovery activation details */
483 } tNFA_CE_ACTIVATED;
484 
485 /* Data for NFA_CE_DEACTIVATED_EVT */
486 typedef struct {
487   tNFA_HANDLE handle; /* handle from NFA_CE_REGISTERED_EVT   */
488   /* NFA_DEACTIVATE_TYPE_IDLE or NFA_DEACTIVATE_TYPE_SLEEP */
489   tNFA_DEACTIVATE_TYPE type;
490 } tNFA_CE_DEACTIVATED;
491 
492 /* Structure for NFA_CE_DATA_EVT data */
493 typedef struct {
494   tNFA_STATUS status; /* NFA_STATUS_OK if complete packet     */
495   tNFA_HANDLE handle; /* handle from NFA_CE_REGISTERED_EVT    */
496   uint8_t* p_data;    /* Data buffer                          */
497   uint16_t len;       /* Length of data                       */
498 } tNFA_CE_DATA;
499 
500 /* Union of all connection callback structures */
501 typedef union {
502   tNFA_STATUS status;           /* NFA_POLL_ENABLED_EVT                 */
503   tNFA_DISC_RESULT disc_result; /* NFA_DISC_RESULT_EVT                  */
504   tNFA_ACTIVATED activated;     /* NFA_ACTIVATED_EVT                    */
505   tNFA_DEACTIVATED deactivated; /* NFA_DEACTIVATED_EVT                  */
506   tNFA_NDEF_DETECT ndef_detect; /* NFA_NDEF_DETECT_EVT                  */
507   tNFA_TLV_DETECT tlv_detect;   /* NFA_TLV_DETECT_EVT                   */
508   tNFA_RX_DATA data;            /* NFA_DATA_EVT                         */
509   tNFA_CE_NDEF_WRITE_CPLT ndef_write_cplt; /* NFA_CE_NDEF_WRITE_CPLT_EVT */
510   tNFA_LLCP_ACTIVATED llcp_activated; /* NFA_LLCP_ACTIVATED_EVT               */
511   tNFA_LLCP_DEACTIVATED llcp_deactivated; /* NFA_LLCP_DEACTIVATED_EVT */
512   tNFA_I93_CMD_CPLT i93_cmd_cplt;   /* NFA_I93_CMD_CPLT_EVT                 */
513   tNFA_CE_REGISTERED ce_registered; /* NFA_CE_REGISTERED_EVT                */
514   tNFA_CE_DEREGISTERED ce_deregistered; /* NFA_CE_DEREGISTERED_EVT */
515   tNFA_CE_ACTIVATED ce_activated;     /* NFA_CE_ACTIVATED_EVT                 */
516   tNFA_CE_DEACTIVATED ce_deactivated; /* NFA_CE_DEACTIVATED_EVT               */
517   tNFA_CE_DATA ce_data;               /* NFA_CE_DATA_EVT                      */
518 
519 } tNFA_CONN_EVT_DATA;
520 
521 /* NFA Connection Callback */
522 typedef void(tNFA_CONN_CBACK)(uint8_t event, tNFA_CONN_EVT_DATA* p_data);
523 
524 #ifndef NFA_DM_NUM_INTERFACE_MAP
525 #define NFA_DM_NUM_INTERFACE_MAP 3
526 #endif
527 
528 /* compile-time configuration structure for the RF Discovery Frequency for each
529  * technology */
530 typedef struct {
531   uint8_t pa;   /* Frequency for NFC Technology A               */
532   uint8_t pb;   /* Frequency for NFC Technology B               */
533   uint8_t pf;   /* Frequency for NFC Technology F               */
534   uint8_t pi93; /* Frequency for Proprietary Technology/15693   */
535   uint8_t pbp;  /* Frequency for Proprietary Technology/B-Prime */
536   uint8_t pk;   /* Frequency for Proprietary Technology/Kovio   */
537   uint8_t paa;  /* Frequency for NFC Technology A active mode   */
538   uint8_t pfa;  /* Frequency for NFC Technology F active mode   */
539   uint8_t pacm; /* Frequency for NFC Technology active mode     */
540 } tNFA_DM_DISC_FREQ_CFG;
541 
542 /* definitions for tNFA_DM_CFG.presence_check_option */
543 /* if NDEF is not supported by the tag, use sleep/wake(last interface) */
544 #define NFA_DM_PCO_ISO_SLEEP_WAKE 0x01
545 /* NFA_SendRawFrame() has been used, use empty I block for presence check
546  * if this bit is not set, use read-binary on channel 3 for presence check */
547 #define NFA_DM_PCO_EMPTY_I_BLOCK 0x02
548 
549 /* compile-time configuration structure */
550 typedef struct {
551   /* Automatic NDEF detection (when not in exclusive RF mode) */
552   bool auto_detect_ndef;
553   /* Automatic NDEF read (when not in exclusive RF mode)      */
554   bool auto_read_ndef;
555   /* Automatic presence check                                 */
556   bool auto_presence_check;
557   /* Use sleep/wake(last interface) for ISODEP presence check */
558   uint8_t presence_check_option;
559   /* Maximum time to wait for presence check response         */
560   uint16_t presence_check_timeout;
561 } tNFA_DM_CFG;
562 
563 /* compile-time configuration structure for HCI */
564 typedef struct {
565   /* Maximum idle(no HCP Pkt) time to wait for EE DISC REQ Ntf(s) */
566   uint16_t hci_netwk_enable_timeout;
567   /* Maximum time to wait for EE DISC REQ NTF(s) after HOT PLUG EVT(s) */
568   uint16_t hcp_response_timeout;
569   /* Number of host in the whitelist of Terminal host */
570   uint8_t num_whitelist_host;
571   /* Whitelist of Terminal Host */
572   uint8_t* p_whitelist;
573 } tNFA_HCI_CFG;
574 
575 /*
576 ** Exclusive RF mode listen configuration
577 */
578 
579 #define NFA_LB_MAX_NFCID0_LEN 4
580 #define NFA_LF_MAX_SC_NFCID2 1
581 #define NFA_LA_MAX_HIST_BYTES 15
582 #define NFA_LB_MAX_H_INFO_LEN 15
583 
584 typedef struct {
585   /*
586   ** Discovery Configuration Parameters for Listen A
587   */
588   bool la_enable;             /* TRUE if listening A                      */
589   uint8_t la_bit_frame_sdd;   /* Bit Frame SDD in Byte 1 of SENS_RES      */
590   uint8_t la_platform_config; /* Platform Config in Byte 2 of SENS_RES    */
591   uint8_t la_sel_info;        /* Byte of SEL_RES                          */
592   uint8_t la_nfcid1_len;      /* NFCID1 (0, 4, 7 or 10 bytes)             */
593   uint8_t la_nfcid1[NCI_NFCID1_MAX_LEN]; /*        if empty, NFCC will decide */
594 
595   /*
596   ** Discovery Configuration Parameters for Listen B
597   */
598   bool lb_enable;        /* TRUE if listening B                      */
599   uint8_t lb_sensb_info; /* Byte 2 of Protocol Info within SENSB_RES */
600   uint8_t lb_nfcid0_len; /* NFCID0 (0, 1 or 4 bytes)                 */
601   uint8_t
602       lb_nfcid0[NFA_LB_MAX_NFCID0_LEN]; /*         if empty, NFCC will decide */
603   uint8_t lb_app_data[NCI_PARAM_LEN_LB_APPDATA]; /* Bytes 6 - 9 in SENSB_RES */
604   uint8_t lb_sfgi;   /* Start-Up Frame Guard Time                */
605   uint8_t lb_adc_fo; /* Byte 12 in SENSB_RES                     */
606 
607   /*
608   ** Discovery Configuration Parameters for Listen F
609   */
610   bool lf_enable;           /* TRUE if listening F          */
611   uint8_t lf_con_bitr_f;    /* bit rate to listen           */
612   uint8_t lf_protocol_type; /* Supported Protocols          */
613   /* bit field indicating which lf_t3t_identifier are enabled */
614   uint16_t lf_t3t_flags;
615   uint8_t lf_t3t_identifier[NFA_LF_MAX_SC_NFCID2]
616                            [NCI_SYSTEMCODE_LEN + NCI_NFCID2_LEN];
617   /* System Code and NFCID2       */
618   uint8_t lf_t3t_pmm[NCI_T3T_PMM_LEN]; /* Bytes 10 - 17 in SENSF_RES   */
619 
620   /*
621   ** Discovery Configuration Parameters for Listen ISO-DEP
622   */
623   bool li_enable;            /* TRUE if listening ISO-DEP            */
624   uint8_t li_fwi;            /* Frame Waiting Time Integer           */
625   uint8_t la_hist_bytes_len; /* historical bytes for Listen-A        */
626   uint8_t la_hist_bytes[NFA_LA_MAX_HIST_BYTES];
627   uint8_t lb_h_info_resp_len; /* higher layer response for Listen-B   */
628   uint8_t lb_h_info_resp[NFA_LB_MAX_H_INFO_LEN];
629 
630   /*
631   ** Discovery Configuration Parameters for Listen NFC-DEP
632   */
633   bool ln_enable;                   /* TRUE if listening NFC-DEP            */
634   uint8_t ln_wt;                    /* Waiting Time Integer                 */
635   uint8_t ln_atr_res_gen_bytes_len; /* General bytes in ATR_RES             */
636   uint8_t ln_atr_res_gen_bytes[NCI_MAX_GEN_BYTES_LEN];
637   uint8_t ln_atr_res_config; /* Optional parameters (PPt) in ATR_RES */
638 } tNFA_LISTEN_CFG;
639 
640 /* Data for NFA_UpdateRFCommParams () */
641 typedef tNFC_RF_COMM_PARAMS tNFA_RF_COMM_PARAMS;
642 
643 /* RF Interface type */
644 #define NFA_INTERFACE_FRAME NFC_INTERFACE_FRAME
645 #define NFA_INTERFACE_ISO_DEP NFC_INTERFACE_ISO_DEP
646 #define NFA_INTERFACE_NFC_DEP NFC_INTERFACE_NFC_DEP
647 #define NFA_INTERFACE_MIFARE NFC_INTERFACE_MIFARE
648 typedef tNFC_INTF_TYPE tNFA_INTF_TYPE;
649 
650 /*******************************************************************************
651 ** NDEF Definitions
652 *******************************************************************************/
653 
654 /* Definitions for tNFA_TNF (NDEF type name format ID) */
655 /* Empty or no type specified                       */
656 #define NFA_TNF_EMPTY NDEF_TNF_EMPTY
657 /* NFC Forum well-known type [NFC RTD]              */
658 #define NFA_TNF_WKT NDEF_TNF_WKT
659 /* Media-type as defined in RFC 2046 [RFC 2046]     */
660 #define NFA_TNF_RFC2046_MEDIA NDEF_TNF_MEDIA
661 /* Absolute URI as defined in RFC 3986 [RFC 3986]   */
662 #define NFA_TNF_RFC3986_URI NDEF_TNF_URI
663 /* NFC Forum external type [NFC RTD]                */
664 #define NFA_TNF_EXTERNAL NDEF_TNF_EXT
665 /* Unknown                                          */
666 #define NFA_TNF_UNKNOWN NDEF_TNF_UNKNOWN
667 /* Unchanged                                        */
668 #define NFA_TNF_UNCHANGED NDEF_TNF_UNCHANGED
669 /* Reserved                                         */
670 #define NFA_TNF_RESERVED NDEF_TNF_RESERVED
671 /* Used to register default NDEF type handler       */
672 #define NFA_TNF_DEFAULT 0xFF
673 typedef uint8_t tNFA_TNF;
674 
675 /* Definitions for tNFA_NDEF_URI_ID (Frequently used prefixes. For additional
676  * values, see [NFC RTD URI] */
677 #define NFA_NDEF_URI_ID_ABSOLUTE 0x00 /* Unabridged URI.  */
678 #define NFA_NDEF_URI_ID_HTTP 0x03     /* http://          */
679 #define NFA_NDEF_URI_ID_HTTPS 0x04    /* https://         */
680 #define NFA_NDEF_URI_ID_TEL 0x05      /* tel:             */
681 #define NFA_NDEF_URI_ID_MAILTO 0x06   /* mailto:          */
682 #define NFA_NDEF_URI_ID_FTP 0x0D      /* ftp://           */
683 #define NFA_NDEF_URI_ID_FILE 0x1D     /* file://          */
684 
685 typedef uint8_t tNFA_NDEF_URI_ID;
686 
687 /* Events for tNFA_NDEF_CBACK */
688 /* NDEF record type registered. (In response to NFA_RegisterNDefTypeHandler) */
689 #define NFA_NDEF_REGISTER_EVT 0
690 /* Received an NDEF message with the registered type. See [tNFA_NDEF_DATA] */
691 #define NFA_NDEF_DATA_EVT 1
692 typedef uint8_t tNFA_NDEF_EVT;
693 
694 /* Structure for NFA_NDEF_REGISTER_EVT event data */
695 typedef struct {
696   tNFA_STATUS status;           /* Status of the registration               */
697   tNFA_HANDLE ndef_type_handle; /* Handle for this NDEF type registration.  */
698 } tNFA_NDEF_REGISTER;
699 
700 /* Structure for NFA_NDEF_DATA_EVT event data */
701 typedef struct {
702   tNFA_HANDLE ndef_type_handle; /* Handle for NDEF type registration.   */
703   uint8_t* p_data;              /* Data buffer                          */
704   uint32_t len;                 /* Length of data                       */
705 } tNFA_NDEF_DATA;
706 
707 /* Union of all NDEF callback structures */
708 typedef union {
709   /* Structure for NFA_NDEF_REGISTER_EVT event data */
710   tNFA_NDEF_REGISTER ndef_reg;
711   /* Structure for NFA_NDEF_DATA_EVT event data */
712   tNFA_NDEF_DATA ndef_data;
713 } tNFA_NDEF_EVT_DATA;
714 
715 /* NFA_NDEF callback */
716 typedef void(tNFA_NDEF_CBACK)(tNFA_NDEF_EVT event, tNFA_NDEF_EVT_DATA* p_data);
717 
718 /* NFA VSC Callback */
719 typedef void(tNFA_VSC_CBACK)(uint8_t event, uint16_t param_len,
720                              uint8_t* p_param);
721 
722 /*****************************************************************************
723 **  External Function Declarations
724 *****************************************************************************/
725 
726 /*******************************************************************************
727 **
728 ** Function         NFA_Init
729 **
730 ** Description      This function initializes control blocks for NFA
731 **
732 **                  p_hal_entry_tbl points to a table of HAL entry points
733 **
734 **                  NOTE: the buffer that p_hal_entry_tbl points must be
735 **                  persistent until NFA is disabled.
736 **
737 **
738 ** Returns          none
739 **
740 *******************************************************************************/
741 extern void NFA_Init(tHAL_NFC_ENTRY* p_hal_entry_tbl);
742 
743 /*******************************************************************************
744 **
745 ** Function         NFA_Enable
746 **
747 ** Description      This function enables NFC. Prior to calling NFA_Enable,
748 **                  the NFCC must be powered up, and ready to receive commands.
749 **                  This function enables the tasks needed by NFC, opens the NCI
750 **                  transport, resets the NFC controller, downloads patches to
751 **                  the NFCC (if necessary), and initializes the NFC subsystems.
752 **
753 **                  This function should only be called once - typically when
754 **                  NFC is enabled during boot-up, or when NFC is enabled from a
755 **                  settings UI. Subsequent calls to NFA_Enable while NFA is
756 **                  enabling or enabled will be ignored. When the NFC startup
757 **                  procedure is completed, an NFA_DM_ENABLE_EVT is returned to
758 **                  the application using the tNFA_DM_CBACK.
759 **
760 **                  The tNFA_CONN_CBACK parameter is used to register a callback
761 **                  for polling, p2p and card emulation events.
762 **
763 **
764 ** Returns          NFA_STATUS_OK if successfully initiated
765 **                  NFA_STATUS_FAILED otherwise
766 **
767 *******************************************************************************/
768 extern tNFA_STATUS NFA_Enable(tNFA_DM_CBACK* p_dm_cback,
769                               tNFA_CONN_CBACK* p_conn_cback);
770 
771 /*******************************************************************************
772 **
773 ** Function         NFA_Disable
774 **
775 ** Description      This function is called to shutdown NFC. The tasks for NFC
776 **                  are terminated, and clean up routines are performed. This
777 **                  function is typically called during platform shut-down, or
778 **                  when NFC is disabled from a settings UI. When the NFC
779 **                  shutdown procedure is completed, an NFA_DM_DISABLE_EVT is
780 **                  returned to the application using the tNFA_DM_CBACK.
781 **
782 **                  The platform should wait until the NFC_DISABLE_REVT is
783 **                  received before powering down the NFC chip and NCI
784 **                  transport. This is required to so that NFA can gracefully
785 **                  shut down any open connections.
786 **
787 ** Returns          NFA_STATUS_OK if successfully initiated
788 **                  NFA_STATUS_FAILED otherwise
789 **
790 *******************************************************************************/
791 extern tNFA_STATUS NFA_Disable(bool graceful);
792 
793 /*******************************************************************************
794 **
795 ** Function         NFA_SetConfig
796 **
797 ** Description      Set the configuration parameters to NFCC. The result is
798 **                  reported with an NFA_DM_SET_CONFIG_EVT in the tNFA_DM_CBACK
799 **                  callback.
800 **
801 ** Note:            If RF discovery is started,
802 **                  NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT should
803 **                  happen before calling this function. Most Configuration
804 **                  parameters are related to RF discovery.
805 **
806 ** Returns          NFA_STATUS_OK if successfully initiated
807 **                  NFA_STATUS_BUSY if previous setting is on-going
808 **                  NFA_STATUS_FAILED otherwise
809 **
810 *******************************************************************************/
811 extern tNFA_STATUS NFA_SetConfig(tNFA_PMID param_id, uint8_t length,
812                                  uint8_t* p_data);
813 
814 /*******************************************************************************
815 **
816 ** Function         NFA_GetConfig
817 **
818 ** Description      Get the configuration parameters from NFCC. The result is
819 **                  reported with an NFA_DM_GET_CONFIG_EVT in the tNFA_DM_CBACK
820 **                  callback.
821 **
822 ** Returns          NFA_STATUS_OK if successfully initiated
823 **                  NFA_STATUS_FAILED otherwise
824 **
825 *******************************************************************************/
826 extern tNFA_STATUS NFA_GetConfig(uint8_t num_ids, tNFA_PMID* p_param_ids);
827 
828 /*******************************************************************************
829 **
830 ** Function         NFA_RequestExclusiveRfControl
831 **
832 ** Description      Request exclusive control of NFC.
833 **                  - Previous behavior (polling/tag reading, DH card emulation)
834 **                    will be suspended .
835 **                  - Polling and listening will be done based on the specified
836 **                    params
837 **
838 **                  The NFA_EXCLUSIVE_RF_CONTROL_STARTED_EVT event of
839 **                  tNFA_CONN_CBACK indicates the status of the operation.
840 **
841 **                  NFA_ACTIVATED_EVT and NFA_DEACTIVATED_EVT indicates link
842 **                  activation/deactivation.
843 **
844 **                  NFA_SendRawFrame is used to send data to the peer.
845 **                  NFA_DATA_EVT indicates data from the peer.
846 **
847 **                  If a tag is activated, then the NFA_RW APIs may be used to
848 **                  send commands to the tag. Incoming NDEF messages are sent to
849 **                  the NDEF callback.
850 **
851 **                  Once exclusive RF control has started, NFA will not activate
852 **                  LLCP internally. The application has exclusive control of
853 **                  the link.
854 **
855 ** Note:            If RF discovery is started,
856 **                  NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT should
857 **                  happen before calling this function
858 **
859 ** Returns          NFA_STATUS_OK if successfully initiated
860 **                  NFA_STATUS_FAILED otherwise
861 **
862 *******************************************************************************/
863 extern tNFA_STATUS NFA_RequestExclusiveRfControl(tNFA_TECHNOLOGY_MASK poll_mask,
864                                                  tNFA_LISTEN_CFG* p_listen_cfg,
865                                                  tNFA_CONN_CBACK* p_conn_cback,
866                                                  tNFA_NDEF_CBACK* p_ndef_cback);
867 
868 /*******************************************************************************
869 **
870 ** Function         NFA_ReleaseExclusiveRfControl
871 **
872 ** Description      Release exclusive control of NFC. Once released, behavior
873 **                  prior to obtaining exclusive RF control will resume.
874 **
875 Note??
876 ** Returns          NFA_STATUS_OK if successfully initiated
877 **                  NFA_STATUS_FAILED otherwise
878 **
879 *******************************************************************************/
880 extern tNFA_STATUS NFA_ReleaseExclusiveRfControl(void);
881 
882 /*******************************************************************************
883 **
884 ** Function         NFA_EnablePolling
885 **
886 ** Description      Enable polling for technologies specified by poll_mask.
887 **
888 **                  The following events (notified using the connection
889 **                  callback registered with NFA_Enable) are generated during
890 **                  polling:
891 **
892 **                  - NFA_POLL_ENABLED_EVT indicates whether or not polling
893 **                    successfully enabled.
894 **                  - NFA_DISC_RESULT_EVT indicates there are more than one
895 **                    devices, so application must select one of tags by calling
896 **                    NFA_Select().
897 **                  - NFA_SELECT_RESULT_EVT indicates whether previous selection
898 **                    was successful or not. If it was failed then application
899 **                    must select again or deactivate by calling
900 **                    NFA_Deactivate().
901 **                  - NFA_ACTIVATED_EVT is generated when an NFC link is
902 **                    activated.
903 **                  - NFA_NDEF_DETECT_EVT is generated if tag is activated
904 **                  - NFA_LLCP_ACTIVATED_EVT/NFA_LLCP_DEACTIVATED_EVT is
905 **                    generated if NFC-DEP is activated
906 **                  - NFA_DEACTIVATED_EVT will be returned after deactivating
907 **                    NFC link.
908 **
909 ** Note:            If RF discovery is started,
910 **                  NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT should
911 **                  happen before calling this function
912 **
913 ** Returns          NFA_STATUS_OK if successfully initiated
914 **                  NFA_STATUS_FAILED otherwise
915 **
916 *******************************************************************************/
917 extern tNFA_STATUS NFA_EnablePolling(tNFA_TECHNOLOGY_MASK poll_mask);
918 
919 /*******************************************************************************
920 **
921 ** Function         NFA_DisablePolling
922 **
923 ** Description      Disable polling
924 **                  NFA_POLL_DISABLED_EVT will be returned after stopping
925 **                  polling.
926 **
927 ** Note:            If RF discovery is started,
928 **                  NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT should
929 **                  happen before calling this function
930 **
931 ** Returns          NFA_STATUS_OK if successfully initiated
932 **                  NFA_STATUS_FAILED otherwise
933 **
934 *******************************************************************************/
935 extern tNFA_STATUS NFA_DisablePolling(void);
936 
937 /*******************************************************************************
938 **
939 ** Function         NFA_EnableListening
940 **
941 ** Description      Enable listening.
942 **                  NFA_LISTEN_ENABLED_EVT will be returned after listening is
943 **                  allowed.
944 **
945 **                  The actual listening technologies are specified by other NFA
946 **                  API functions. Such functions include (but not limited to)
947 **                  NFA_CeConfigureUiccListenTech.
948 **                  If NFA_DisableListening () is called to ignore the listening
949 **                  technologies, NFA_EnableListening () is called to restore
950 **                  the listening technologies set by these functions.
951 **
952 ** Note:            If RF discovery is started,
953 **                  NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT should
954 **                  happen before calling this function
955 **
956 ** Returns          NFA_STATUS_OK if successfully initiated
957 **                  NFA_STATUS_FAILED otherwise
958 **
959 *******************************************************************************/
960 extern tNFA_STATUS NFA_EnableListening(void);
961 
962 /*******************************************************************************
963 **
964 ** Function         NFA_DisableListening
965 **
966 ** Description      Disable listening
967 **                  NFA_LISTEN_DISABLED_EVT will be returned after stopping
968 **                  listening. This function is called to exclude listen at RF
969 **                  discovery.
970 **
971 ** Note:            If RF discovery is started,
972 **                  NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT should
973 **                  happen before calling this function
974 **
975 ** Returns          NFA_STATUS_OK if successfully initiated
976 **                  NFA_STATUS_FAILED otherwise
977 **
978 *******************************************************************************/
979 extern tNFA_STATUS NFA_DisableListening(void);
980 
981 /*******************************************************************************
982 **
983 ** Function         NFA_PauseP2p
984 **
985 ** Description      Pause P2P services.
986 **                  NFA_P2P_PAUSED_EVT will be returned after P2P services are
987 **                  disabled.
988 **
989 **                  The P2P services enabled by NFA_P2p* API functions are not
990 **                  available. NFA_ResumeP2p() is called to resume the P2P
991 **                  services.
992 **
993 ** Note:            If RF discovery is started,
994 **                  NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT should
995 **                  happen before calling this function
996 **
997 ** Returns          NFA_STATUS_OK if successfully initiated
998 **                  NFA_STATUS_FAILED otherwise
999 **
1000 *******************************************************************************/
1001 extern tNFA_STATUS NFA_PauseP2p(void);
1002 
1003 /*******************************************************************************
1004 **
1005 ** Function         NFA_ResumeP2p
1006 **
1007 ** Description      Resume P2P services.
1008 **                  NFA_P2P_RESUMED_EVT will be returned after P2P services are.
1009 **                  enables again.
1010 **
1011 ** Note:            If RF discovery is started,
1012 **                  NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT should
1013 **                  happen before calling this function
1014 **
1015 ** Returns          NFA_STATUS_OK if successfully initiated
1016 **                  NFA_STATUS_FAILED otherwise
1017 **
1018 *******************************************************************************/
1019 extern tNFA_STATUS NFA_ResumeP2p(void);
1020 
1021 /*******************************************************************************
1022 **
1023 ** Function         NFA_SetP2pListenTech
1024 **
1025 ** Description      This function is called to set listen technology for
1026 **                  NFC-DEP. This funtion may be called before or after starting
1027 **                  any server on NFA P2P/CHO/SNEP.
1028 **                  If there is no technology for NFC-DEP, P2P listening will be
1029 **                  stopped.
1030 **
1031 **                  NFA_SET_P2P_LISTEN_TECH_EVT without data will be returned.
1032 **
1033 ** Note:            If RF discovery is started,
1034 **                  NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT should
1035 **                  happen before calling this function
1036 **
1037 ** Returns          NFA_STATUS_OK if successfully initiated
1038 **                  NFA_STATUS_FAILED otherwise
1039 **
1040 *******************************************************************************/
1041 extern tNFA_STATUS NFA_SetP2pListenTech(tNFA_TECHNOLOGY_MASK tech_mask);
1042 
1043 /*******************************************************************************
1044 **
1045 ** Function         NFA_StartRfDiscovery
1046 **
1047 ** Description      Start RF discovery
1048 **                  RF discovery parameters shall be set by other APIs.
1049 **
1050 **                  An NFA_RF_DISCOVERY_STARTED_EVT indicates whether starting
1051 **                  was successful or not.
1052 **
1053 ** Returns          NFA_STATUS_OK if successfully initiated
1054 **                  NFA_STATUS_FAILED otherwise
1055 **
1056 *******************************************************************************/
1057 extern tNFA_STATUS NFA_StartRfDiscovery(void);
1058 
1059 /*******************************************************************************
1060 **
1061 ** Function         NFA_StopRfDiscovery
1062 **
1063 ** Description      Stop RF discovery
1064 **
1065 **                  An NFA_RF_DISCOVERY_STOPPED_EVT indicates whether stopping
1066 **                  was successful or not.
1067 **
1068 ** Returns          NFA_STATUS_OK if successfully initiated
1069 **                  NFA_STATUS_FAILED otherwise
1070 **
1071 *******************************************************************************/
1072 extern tNFA_STATUS NFA_StopRfDiscovery(void);
1073 
1074 /*******************************************************************************
1075 **
1076 ** Function         NFA_SetRfDiscoveryDuration
1077 **
1078 ** Description      Set the duration of the single discovery period in [ms].
1079 **                  Allowable range: 0 ms to 0xFFFF ms.
1080 **
1081 ** Note:            If discovery is already started, the application should
1082 **                  call NFA_StopRfDiscovery prior to calling
1083 **                  NFA_SetRfDiscoveryDuration, and then call
1084 **                  NFA_StartRfDiscovery afterwards to restart discovery using
1085 **                  the new duration.
1086 **
1087 ** Returns:
1088 **                  NFA_STATUS_OK, if command accepted
1089 **                  NFA_STATUS_FAILED: otherwise
1090 **
1091 *******************************************************************************/
1092 extern tNFA_STATUS NFA_SetRfDiscoveryDuration(uint16_t discovery_period_ms);
1093 
1094 /*******************************************************************************
1095 **
1096 ** Function         NFA_Select
1097 **
1098 ** Description      Select one from detected devices by NFA_DISC_RESULT_EVT
1099 **                  after the last discovery result is received.
1100 **                  An NFA_SELECT_RESULT_EVT indicates whether selection was
1101 **                  successful or not. If failed then application must select
1102 **                  again or deactivate by NFA_Deactivate ().
1103 **
1104 ** Returns          NFA_STATUS_OK if successfully initiated
1105 **                  NFA_STATUS_INVALID_PARAM if RF interface is not matched
1106 **                  protocol
1107 **                  NFA_STATUS_FAILED otherwise
1108 **
1109 *******************************************************************************/
1110 extern tNFA_STATUS NFA_Select(uint8_t rf_disc_id, tNFA_NFC_PROTOCOL protocol,
1111                               tNFA_INTF_TYPE rf_interface);
1112 
1113 /*******************************************************************************
1114 **
1115 ** Function         NFA_UpdateRFCommParams
1116 **
1117 ** Description      This function is called to update RF Communication
1118 **                  parameters once the Frame RF Interface has been activated.
1119 **
1120 **                  An NFA_UPDATE_RF_PARAM_RESULT_EVT indicates whether updating
1121 **                  was successful or not.
1122 **
1123 ** Returns          NFA_STATUS_OK if successfully initiated
1124 **                  NFA_STATUS_FAILED otherwise
1125 **
1126 *******************************************************************************/
1127 extern tNFA_STATUS NFA_UpdateRFCommParams(tNFA_RF_COMM_PARAMS* p_params);
1128 
1129 /*******************************************************************************
1130 **
1131 ** Function         NFA_Deactivate
1132 **
1133 ** Description
1134 **                  If sleep_mode=TRUE:
1135 **                      Deselect the activated device by deactivating into sleep
1136 **                      mode.
1137 **
1138 **                      An NFA_DEACTIVATE_FAIL_EVT indicates that selection was
1139 **                      not successful. Application can select another
1140 **                      discovered device or deactivate by NFA_Deactivate ()
1141 **                      after receiving NFA_DEACTIVATED_EVT.
1142 **
1143 **                      Deactivating to sleep mode is not allowed when NFCC is
1144 **                      in wait-for-host-select mode, or in listen-sleep states;
1145 **                      NFA will deactivate to idle or discovery state for these
1146 **                      cases respectively.
1147 **
1148 **
1149 **                  If sleep_mode=FALSE:
1150 **                      Deactivate the connection (e.g. as a result of presence
1151 **                      check failure) NFA_DEACTIVATED_EVT will indicate that
1152 **                      link is deactivated. Polling/listening will resume
1153 **                      (unless the nfcc is in wait_for-all-discoveries state)
1154 **
1155 **
1156 ** Returns          NFA_STATUS_OK if successfully initiated
1157 **                  NFA_STATUS_FAILED otherwise
1158 **
1159 *******************************************************************************/
1160 extern tNFA_STATUS NFA_Deactivate(bool sleep_mode);
1161 
1162 /*******************************************************************************
1163 **
1164 ** Function         NFA_SendRawFrame
1165 **
1166 ** Description      Send a raw frame over the activated interface with the NFCC.
1167 **                  This function can only be called after NFC link is
1168 **                  activated.
1169 **
1170 **                  If the activated interface is a tag and auto-presence check
1171 **                  is enabled then presence_check_start_delay can be used to
1172 **                  indicate the delay in msec after which the next auto
1173 **                  presence check command can be sent.
1174 **                  NFA_DM_DEFAULT_PRESENCE_CHECK_START_DELAY can be used as the
1175 **                  default value for the delay.
1176 **
1177 ** Returns          NFA_STATUS_OK if successfully initiated
1178 **                  NFA_STATUS_FAILED otherwise
1179 **
1180 *******************************************************************************/
1181 extern tNFA_STATUS NFA_SendRawFrame(uint8_t* p_raw_data, uint16_t data_len,
1182                                     uint16_t presence_check_start_delay);
1183 
1184 /*******************************************************************************
1185 ** NDEF APIs
1186 *******************************************************************************/
1187 
1188 /*******************************************************************************
1189 **
1190 ** Function         NFA_RegisterNDefTypeHandler
1191 **
1192 ** Description      This function allows the applications to register for
1193 **                  specific types of NDEF records. When NDEF records are
1194 **                  received, NFA will parse the record-type field, and pass
1195 **                  the record to the registered tNFA_NDEF_CBACK.
1196 **
1197 **                  For records types which were not registered, the record will
1198 **                  be sent to the default handler. A default type-handler may
1199 **                  be registered by calling this NFA_RegisterNDefTypeHandler
1200 **                  with tnf=NFA_TNF_DEFAULT. In this case, all un-registered
1201 **                  record types will be sent to the callback. Only one default
1202 **                  handler may be registered at a time.
1203 **
1204 **                  An NFA_NDEF_REGISTER_EVT will be sent to the tNFA_NDEF_CBACK
1205 **                  to indicate that registration was successful, and provide a
1206 **                  handle for this record type.
1207 **
1208 **
1209 ** Returns          NFA_STATUS_OK if successfully initiated
1210 **                  NFA_STATUS_FAILED otherwise
1211 **
1212 *******************************************************************************/
1213 extern tNFA_STATUS NFA_RegisterNDefTypeHandler(bool handle_whole_message,
1214                                                tNFA_TNF tnf,
1215                                                uint8_t* p_type_name,
1216                                                uint8_t type_name_len,
1217                                                tNFA_NDEF_CBACK* p_ndef_cback);
1218 
1219 /*******************************************************************************
1220 **
1221 ** Function         NFA_RegisterNDefUriHandler
1222 **
1223 ** Description      This API is a special-case of NFA_RegisterNDefTypeHandler
1224 **                  with TNF=NFA_TNF_WKT, and type_name='U' (URI record); and
1225 **                  allows registering for specific URI types (e.g. 'tel:' or
1226 **                  'mailto:').
1227 **
1228 **                  An NFA_NDEF_REGISTER_EVT will be sent to the tNFA_NDEF_CBACK
1229 **                  to indicate that registration was successful, and provide a
1230 **                  handle for this registration.
1231 **
1232 **                  If uri_id=NFA_NDEF_URI_ID_ABSOLUTE, then p_abs_uri contains
1233 **                  the unabridged URI. For all other uri_id values, the
1234 **                  p_abs_uri parameter is ignored (i.e the URI prefix is
1235 **                  implied by uri_id).
1236 **
1237 **                  See [NFC RTD URI] for more information.
1238 **
1239 ** Returns          NFA_STATUS_OK if successfully initiated
1240 **                  NFA_STATUS_FAILED otherwise
1241 **
1242 *******************************************************************************/
1243 extern tNFA_STATUS NFA_RegisterNDefUriHandler(bool handle_whole_message,
1244                                               tNFA_NDEF_URI_ID uri_id,
1245                                               uint8_t* p_abs_uri,
1246                                               uint8_t uri_id_len,
1247                                               tNFA_NDEF_CBACK* p_ndef_cback);
1248 
1249 /*******************************************************************************
1250 **
1251 ** Function         NFA_DeregisterNDefTypeHandler
1252 **
1253 ** Description      Deregister NDEF record type handler.
1254 **
1255 ** Returns          NFA_STATUS_OK if successfully initiated
1256 **                  NFA_STATUS_FAILED otherwise
1257 **
1258 *******************************************************************************/
1259 extern tNFA_STATUS NFA_DeregisterNDefTypeHandler(tNFA_HANDLE ndef_type_handle);
1260 
1261 /*******************************************************************************
1262 **
1263 ** Function         NFA_PowerOffSleepMode
1264 **
1265 ** Description      This function is called to enter or leave NFCC Power Off
1266 **                  Sleep mode
1267 **                  NFA_DM_PWR_MODE_CHANGE_EVT will be sent to indicate status.
1268 **
1269 **                  start_stop : TRUE if entering Power Off Sleep mode
1270 **                               FALSE if leaving Power Off Sleep mode
1271 **
1272 Note??
1273 ** Returns          NFA_STATUS_OK if successfully initiated
1274 **                  NFA_STATUS_FAILED otherwise
1275 **
1276 *******************************************************************************/
1277 extern tNFA_STATUS NFA_PowerOffSleepMode(bool start_stop);
1278 
1279 /*******************************************************************************
1280 **
1281 ** Function         NFA_RegVSCback
1282 **
1283 ** Description      This function is called to register or de-register a
1284 **                  callback function to receive Proprietary NCI response and
1285 **                  notification events.
1286 **                  The maximum number of callback functions allowed is
1287 **                  NFC_NUM_VS_CBACKS
1288 **
1289 ** Returns          tNFC_STATUS
1290 **
1291 *******************************************************************************/
1292 extern tNFC_STATUS NFA_RegVSCback(bool is_register, tNFA_VSC_CBACK* p_cback);
1293 
1294 /*******************************************************************************
1295 **
1296 ** Function         NFA_SendVsCommand
1297 **
1298 ** Description      This function is called to send an NCI Vendor Specific
1299 **                  command to NFCC.
1300 **
1301 **                  oid             - The opcode of the VS command.
1302 **                  cmd_params_len  - The command parameter len
1303 **                  p_cmd_params    - The command parameter
1304 **                  p_cback         - The callback function to receive the
1305 **                                    command status
1306 **
1307 ** Returns          NFA_STATUS_OK if successfully initiated
1308 **                  NFA_STATUS_FAILED otherwise
1309 **
1310 *******************************************************************************/
1311 extern tNFA_STATUS NFA_SendVsCommand(uint8_t oid, uint8_t cmd_params_len,
1312                                      uint8_t* p_cmd_params,
1313                                      tNFA_VSC_CBACK* p_cback);
1314 
1315 /*******************************************************************************
1316 **
1317 ** Function         NFA_SendRawVsCommand
1318 **
1319 ** Description      This function is called to send raw vendor specific
1320 **                  command to NFCC.
1321 **
1322 **                  cmd_params_len  - The command parameter len
1323 **                  p_cmd_params    - The command parameter
1324 **                  p_cback         - The callback function to receive the
1325 **                                    command
1326 **
1327 ** Returns          NFA_STATUS_OK if successfully initiated
1328 **                  NFA_STATUS_FAILED otherwise
1329 **
1330 *******************************************************************************/
1331 
1332 extern tNFA_STATUS NFA_SendRawVsCommand(uint8_t cmd_params_len,
1333                                         uint8_t* p_cmd_params,
1334                                         tNFA_VSC_CBACK* p_cback);
1335 
1336 /*******************************************************************************
1337 ** Function:        NFA_EnableDTA_TypeMode
1338 **
1339 ** Description:     Initialize and get global DTA type mode from .conf
1340 **
1341 ** Returns:         none:
1342 **
1343 *******************************************************************************/
1344 extern void NFA_EnableDtamode(tNFA_eDtaModes eDtaMode);
1345 
1346 /*******************************************************************************
1347 ** Function         NFA_GetNCIVersion
1348 **
1349 ** Description      Called by higher layer to get the current nci
1350 **                  version of nfc.
1351 **
1352 ** Returns          NCI version NCI2.0 / NCI1.0
1353 **
1354 *******************************************************************************/
1355 extern uint8_t NFA_GetNCIVersion();
1356 
1357 /*******************************************************************************
1358 ** Function:        NFA_SetPowerSubStateForScreenState
1359 **
1360 ** Description:     This function send the current screen state
1361 **
1362 ** Returns:        NFA_STATUS_OK if successfully initiated
1363 **                  NFA_STATUS_FAILED otherwise
1364 *******************************************************************************/
1365 extern tNFA_STATUS NFA_SetPowerSubStateForScreenState(uint8_t ScreenState);
1366 
1367 #endif /* NFA_API_H */
1368