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