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